@lwrjs/everywhere 0.12.0-alpha.2 → 0.12.0-alpha.21

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.
Files changed (26) hide show
  1. package/README.md +3 -1
  2. package/build/__generated_site_amd_modules__/1/application/amd/l/en-US/ai/amd-bootstrap/configuration/ci/-/-/s/4566daf7b8cc8ea3da69bc9cac33bfc9/config.js +7 -0
  3. package/build/__generated_site_amd_modules__/1/module/amd/1/l/en-US/mi/@lwrjs/app-service/amd-bootstrap/module/amd/v/0_12_0-alpha_21/s/8bce578258518655194bd71d1d72aad5/@lwrjs_app-service_amd-bootstrap_module_amd.js +14 -0
  4. package/build/__generated_site_amd_modules__/1/module/amd/1/l/en-US/mi/lwc/v/{5_1_0/s/aff256c8afef6eb76ff8626ad5f54e3b → 6_2_1/s/2670f5386c68fa67ae710174187505e9}/lwc.js +812 -300
  5. package/build/__generated_site_amd_modules__/1/module/amd/1/l/en-US/mi/lwr/everywhereAmd/v/{0_12_0-alpha_2 → 0_12_0-alpha_21}/s/cb931ebef2b89dcf8ab51456e3a68864/lwr_everywhereAmd.js +3 -3
  6. package/build/__generated_site_amd_modules__/1/module/amd/1/l/en-US/mi/lwr/init/v/{0_12_0-alpha_2 → 0_12_0-alpha_21}/s/f30361ad8ff7af505bf4d465c8499181/lwr_init.js +21 -21
  7. package/build/__generated_site_amd_modules__/1/module/amd/1/l/en-US/mi/lwr/metrics/v/{0_12_0-alpha_2 → 0_12_0-alpha_21}/s/274c8343f810353bbad085a79709395f/lwr_metrics.js +1 -1
  8. package/build/__generated_site_amd_modules__/1/module/amd/1/l/en-US/mi/lwr/preInit/v/{0_12_0-alpha_2/s/f3a204ef43fb3057d910f80d7e9f9ba7 → 0_12_0-alpha_21/s/ec0fad0e38a96bb0b88c9f4553460347}/lwr_preInit.js +4 -3
  9. package/build/__generated_site_amd_modules__/1/module/amd/1/l/en-US/mi/lwr/profiler/v/0_12_0-alpha_21/s/a152b8d35f12ca1b5147c5cd1ee155fb/lwr_profiler.js +89 -0
  10. package/build/__generated_site_amd_modules__/1/module/amd/1/l/en-US/mi/lwr/vault/v/{0_12_0-alpha_2 → 0_12_0-alpha_21}/s/c92abd8c1fec2d7eff62e4b097abbe14/lwr_vault.js +1 -1
  11. package/build/__generated_site_amd_modules__/1/resource/amd/lwr-error-shim.js/v/{0_12_0-alpha_2 → 0_12_0-alpha_21}/lwr-error-shim.js +1 -1
  12. package/build/__generated_site_amd_modules__/1/resource/amd/lwr-loader-shim.bundle.js/v/{0_12_0-alpha_2 → 0_12_0-alpha_21}/lwr-loader-shim.bundle.js +10 -9
  13. package/build/assets/amd/lwr-everywhere-debug.js +11 -11
  14. package/build/assets/amd/lwr-everywhere-min.js +2 -2
  15. package/build/assets/amd/lwr-everywhere.js +11 -11
  16. package/build/assets/core/lwr-everywhere-debug.js +7 -7
  17. package/build/assets/core/lwr-everywhere-min.js +1 -1
  18. package/build/assets/core/lwr-everywhere.js +7 -7
  19. package/build/assets/esm/lwr-everywhere-debug.js +1 -1
  20. package/build/assets/esm/lwr-everywhere-min.js +1 -1
  21. package/build/assets/esm/lwr-everywhere.js +1 -1
  22. package/package.json +9 -9
  23. package/build/__generated_site_amd_modules__/1/application/amd/l/en-US/ai/amd-bootstrap/configuration/ci/-/-/s/3f1cbc09dcda95f1f74fba817c81fa86/config.js +0 -11
  24. package/build/__generated_site_amd_modules__/1/module/amd/1/l/en-US/mi/@lwrjs/app-service/amd-bootstrap/module/amd/v/0_12_0-alpha_2/s/8bce578258518655194bd71d1d72aad5/@lwrjs_app-service_amd-bootstrap_module_amd.js +0 -14
  25. package/build/__generated_site_amd_modules__/1/module/amd/1/l/en-US/mi/lwr/loader/v/0_12_0-alpha_2/s/e11ffe74ed86b1153c4eb8b001587909/lwr_loader.js +0 -1396
  26. package/build/__generated_site_amd_modules__/1/module/amd/1/l/en-US/mi/lwr/profiler/v/0_12_0-alpha_2/s/a152b8d35f12ca1b5147c5cd1ee155fb/lwr_profiler.js +0 -99
@@ -1,10 +1,10 @@
1
- LWR.define('lwc/v/5_1_0', ['exports'], (function (exports) { 'use strict';
1
+ LWR.define('lwc/v/6_2_1', ['exports'], (function (exports) { 'use strict';
2
2
 
3
3
  /**
4
- * Copyright (C) 2023 salesforce.com, inc.
4
+ * Copyright (c) 2024 Salesforce, Inc.
5
5
  */
6
6
  /**
7
- * Copyright (C) 2023 salesforce.com, inc.
7
+ * Copyright (c) 2024 Salesforce, Inc.
8
8
  */
9
9
  /*
10
10
  * Copyright (c) 2018, salesforce.com, inc.
@@ -12,21 +12,40 @@ LWR.define('lwc/v/5_1_0', ['exports'], (function (exports) { 'use strict';
12
12
  * SPDX-License-Identifier: MIT
13
13
  * For full license text, see the LICENSE file in the repo root or https://opensource.org/licenses/MIT
14
14
  */
15
+ /**
16
+ *
17
+ * @param value
18
+ * @param msg
19
+ */
15
20
  function invariant(value, msg) {
16
21
  if (!value) {
17
22
  throw new Error(`Invariant Violation: ${msg}`);
18
23
  }
19
24
  }
25
+ /**
26
+ *
27
+ * @param value
28
+ * @param msg
29
+ */
20
30
  function isTrue$1(value, msg) {
21
31
  if (!value) {
22
32
  throw new Error(`Assert Violation: ${msg}`);
23
33
  }
24
34
  }
35
+ /**
36
+ *
37
+ * @param value
38
+ * @param msg
39
+ */
25
40
  function isFalse$1(value, msg) {
26
41
  if (value) {
27
42
  throw new Error(`Assert Violation: ${msg}`);
28
43
  }
29
44
  }
45
+ /**
46
+ *
47
+ * @param msg
48
+ */
30
49
  function fail(msg) {
31
50
  throw new Error(msg);
32
51
  }
@@ -39,31 +58,50 @@ LWR.define('lwc/v/5_1_0', ['exports'], (function (exports) { 'use strict';
39
58
  });
40
59
 
41
60
  /*
42
- * Copyright (c) 2018, salesforce.com, inc.
61
+ * Copyright (c) 2024, Salesforce, Inc.
43
62
  * All rights reserved.
44
63
  * SPDX-License-Identifier: MIT
45
64
  * For full license text, see the LICENSE file in the repo root or https://opensource.org/licenses/MIT
46
65
  */
47
66
  const {
67
+ /** Detached {@linkcode Object.assign}; see {@link https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Object/assign MDN Reference}. */
48
68
  assign,
69
+ /** Detached {@linkcode Object.create}; see {@link https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Object/create MDN Reference}. */
49
70
  create,
71
+ /** Detached {@linkcode Object.defineProperties}; see {@link https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Object/defineProperties MDN Reference}. */
50
72
  defineProperties,
73
+ /** Detached {@linkcode Object.defineProperty}; see {@link https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Object/defineProperty MDN Reference}. */
51
74
  defineProperty,
75
+ /** Detached {@linkcode Object.entries}; see {@link https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Object/entries MDN Reference}. */
52
76
  entries,
77
+ /** Detached {@linkcode Object.freeze}; see {@link https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Object/freeze MDN Reference}. */
53
78
  freeze,
79
+ /** Detached {@linkcode Object.getOwnPropertyDescriptor}; see {@link https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Object/getOwnPropertyDescriptor MDN Reference}. */
54
80
  getOwnPropertyDescriptor: getOwnPropertyDescriptor$1,
81
+ /** Detached {@linkcode Object.getOwnPropertyDescriptors}; see {@link https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Object/getOwnPropertyDescriptors MDN Reference}. */
55
82
  getOwnPropertyDescriptors,
83
+ /** Detached {@linkcode Object.getOwnPropertyNames}; see {@link https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Object/getOwnPropertyNames MDN Reference}. */
56
84
  getOwnPropertyNames: getOwnPropertyNames$1,
85
+ /** Detached {@linkcode Object.getPrototypeOf}; see {@link https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Object/getPrototypeOf MDN Reference}. */
57
86
  getPrototypeOf: getPrototypeOf$1,
87
+ /** Detached {@linkcode Object.hasOwnProperty}; see {@link https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Object/hasOwnProperty MDN Reference}. */
58
88
  hasOwnProperty: hasOwnProperty$1,
89
+ /** Detached {@linkcode Object.isFrozen}; see {@link https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Object/isFrozen MDN Reference}. */
59
90
  isFrozen,
91
+ /** Detached {@linkcode Object.keys}; see {@link https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Object/keys MDN Reference}. */
60
92
  keys,
93
+ /** Detached {@linkcode Object.seal}; see {@link https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Object/seal MDN Reference}. */
61
94
  seal,
95
+ /** Detached {@linkcode Object.setPrototypeOf}; see {@link https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Object/setPrototypeOf MDN Reference}. */
62
96
  setPrototypeOf
63
97
  } = Object;
98
+ /** Detached {@linkcode Array.isArray}; see {@link https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Array/isArray MDN Reference}. */
64
99
  const {
65
100
  isArray: isArray$1
66
101
  } = Array;
102
+ // For some reason, JSDoc don't get picked up for multiple renamed destructured constants (even
103
+ // though it works fine for one, e.g. isArray), so comments for these are added to the export
104
+ // statement, rather than this declaration.
67
105
  const {
68
106
  concat: ArrayConcat$1,
69
107
  copyWithin: ArrayCopyWithin,
@@ -86,7 +124,7 @@ LWR.define('lwc/v/5_1_0', ['exports'], (function (exports) { 'use strict';
86
124
  sort: ArraySort,
87
125
  splice: ArraySplice,
88
126
  unshift: ArrayUnshift,
89
- forEach
127
+ forEach // Weird anomaly!
90
128
  } = Array.prototype;
91
129
  // The type of the return value of Array.prototype.every is `this is T[]`. However, once this
92
130
  // Array method is pulled out of the prototype, the function is now referencing `this` where
@@ -94,12 +132,21 @@ LWR.define('lwc/v/5_1_0', ['exports'], (function (exports) { 'use strict';
94
132
  //
95
133
  // Exposing this helper function is the closest we can get to preserving the usage patterns
96
134
  // of Array.prototype methods used elsewhere in the codebase.
135
+ /**
136
+ * Wrapper for {@linkcode Array.prototype.every} that correctly preserves the type predicate in the
137
+ * return value; see {@link https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Array/every MDN Reference}.
138
+ * @param arr Array to test.
139
+ * @param predicate A function to execute for each element of the array.
140
+ * @returns Whether all elements in the array pass the test provided by the predicate.
141
+ */
97
142
  function arrayEvery(arr, predicate) {
98
143
  return ArrayEvery.call(arr, predicate);
99
144
  }
145
+ /** Detached {@linkcode String.fromCharCode}; see {@link https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/String/fromCharCode MDN Reference}. */
100
146
  const {
101
147
  fromCharCode: StringFromCharCode
102
148
  } = String;
149
+ // No JSDocs here - see comment for Array.prototype
103
150
  const {
104
151
  charCodeAt: StringCharCodeAt,
105
152
  replace: StringReplace,
@@ -107,52 +154,124 @@ LWR.define('lwc/v/5_1_0', ['exports'], (function (exports) { 'use strict';
107
154
  slice: StringSlice,
108
155
  toLowerCase: StringToLowerCase
109
156
  } = String.prototype;
157
+ /**
158
+ * Determines whether the argument is `undefined`.
159
+ * @param obj Value to test
160
+ * @returns `true` if the value is `undefined`.
161
+ */
110
162
  function isUndefined$1(obj) {
111
163
  return obj === undefined;
112
164
  }
165
+ /**
166
+ * Determines whether the argument is `null`.
167
+ * @param obj Value to test
168
+ * @returns `true` if the value is `null`.
169
+ */
113
170
  function isNull(obj) {
114
171
  return obj === null;
115
172
  }
173
+ /**
174
+ * Determines whether the argument is `true`.
175
+ * @param obj Value to test
176
+ * @returns `true` if the value is `true`.
177
+ */
116
178
  function isTrue(obj) {
117
179
  return obj === true;
118
180
  }
181
+ /**
182
+ * Determines whether the argument is `false`.
183
+ * @param obj Value to test
184
+ * @returns `true` if the value is `false`.
185
+ */
119
186
  function isFalse(obj) {
120
187
  return obj === false;
121
188
  }
189
+ /**
190
+ * Determines whether the argument is a boolean.
191
+ * @param obj Value to test
192
+ * @returns `true` if the value is a boolean.
193
+ */
122
194
  function isBoolean(obj) {
123
195
  return typeof obj === 'boolean';
124
196
  }
197
+ /**
198
+ * Determines whether the argument is a function.
199
+ * @param obj Value to test
200
+ * @returns `true` if the value is a function.
201
+ */
202
+ // Replacing `Function` with a narrower type that works for all our use cases is tricky...
203
+ // eslint-disable-next-line @typescript-eslint/ban-types
125
204
  function isFunction$1(obj) {
126
205
  return typeof obj === 'function';
127
206
  }
207
+ /**
208
+ * Determines whether the argument is an object or null.
209
+ * @param obj Value to test
210
+ * @returns `true` if the value is an object or null.
211
+ */
128
212
  function isObject(obj) {
129
213
  return typeof obj === 'object';
130
214
  }
215
+ /**
216
+ * Determines whether the argument is a string.
217
+ * @param obj Value to test
218
+ * @returns `true` if the value is a string.
219
+ */
131
220
  function isString(obj) {
132
221
  return typeof obj === 'string';
133
222
  }
223
+ /**
224
+ * Determines whether the argument is a number.
225
+ * @param obj Value to test
226
+ * @returns `true` if the value is a number.
227
+ */
134
228
  function isNumber(obj) {
135
229
  return typeof obj === 'number';
136
230
  }
231
+ /** Does nothing! 🚀 */
137
232
  function noop() {
138
233
  /* Do nothing */
139
234
  }
140
235
  const OtS$1 = {}.toString;
236
+ /**
237
+ * Converts the argument to a string, safely accounting for objects with "null" prototype.
238
+ * Note that `toString(null)` returns `"[object Null]"` rather than `"null"`.
239
+ * @param obj Value to convert to a string.
240
+ * @returns String representation of the value.
241
+ */
141
242
  function toString$1(obj) {
142
- if (obj && obj.toString) {
243
+ if (obj?.toString) {
143
244
  // Arrays might hold objects with "null" prototype So using
144
245
  // Array.prototype.toString directly will cause an error Iterate through
145
246
  // all the items and handle individually.
146
247
  if (isArray$1(obj)) {
248
+ // This behavior is slightly different from Array#toString:
249
+ // 1. Array#toString calls `this.join`, rather than Array#join
250
+ // Ex: arr = []; arr.join = () => 1; arr.toString() === 1; toString(arr) === ''
251
+ // 2. Array#toString delegates to Object#toString if `this.join` is not a function
252
+ // Ex: arr = []; arr.join = 'no'; arr.toString() === '[object Array]; toString(arr) = ''
253
+ // 3. Array#toString converts null/undefined to ''
254
+ // Ex: arr = [null, undefined]; arr.toString() === ','; toString(arr) === '[object Null],undefined'
255
+ // 4. Array#toString converts recursive references to arrays to ''
256
+ // Ex: arr = [1]; arr.push(arr, 2); arr.toString() === '1,,2'; toString(arr) throws
257
+ // Ref: https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Array/toString
147
258
  return ArrayJoin.call(ArrayMap.call(obj, toString$1), ',');
148
259
  }
149
260
  return obj.toString();
150
261
  } else if (typeof obj === 'object') {
262
+ // This catches null and returns "[object Null]". Weird, but kept for backwards compatibility.
151
263
  return OtS$1.call(obj);
152
264
  } else {
153
- return obj + '';
265
+ return String(obj);
154
266
  }
155
267
  }
268
+ /**
269
+ * Gets the property descriptor for the given object and property key. Similar to
270
+ * {@linkcode Object.getOwnPropertyDescriptor}, but looks up the prototype chain.
271
+ * @param o Value to get the property descriptor for
272
+ * @param p Property key to get the descriptor for
273
+ * @returns The property descriptor for the given object and property key.
274
+ */
156
275
  function getPropertyDescriptor(o, p) {
157
276
  do {
158
277
  const d = getOwnPropertyDescriptor$1(o, p);
@@ -173,6 +292,11 @@ LWR.define('lwc/v/5_1_0', ['exports'], (function (exports) { 'use strict';
173
292
  // It's a bit annoying to do have to do this manually, but this makes the file tree-shakeable,
174
293
  // passing the `verify-treeshakeable.js` test.
175
294
  const LOWEST_API_VERSION = 58 /* APIVersion.V58_244_SUMMER_23 */;
295
+ /**
296
+ *
297
+ * @param apiVersionFeature
298
+ * @param apiVersion
299
+ */
176
300
  function isAPIFeatureEnabled(apiVersionFeature, apiVersion) {
177
301
  switch (apiVersionFeature) {
178
302
  case 0 /* APIFeature.LOWERCASE_SCOPE_TOKENS */:
@@ -183,6 +307,9 @@ LWR.define('lwc/v/5_1_0', ['exports'], (function (exports) { 'use strict';
183
307
  case 4 /* APIFeature.SKIP_UNNECESSARY_REGISTER_DECORATORS */:
184
308
  case 5 /* APIFeature.USE_COMMENTS_FOR_FRAGMENT_BOOKENDS */:
185
309
  return apiVersion >= 60 /* APIVersion.V60_248_SPRING_24 */;
310
+ case 6 /* APIFeature.USE_LIGHT_DOM_SLOT_FORWARDING */:
311
+ case 7 /* APIFeature.ENABLE_NATIVE_CUSTOM_ELEMENT_LIFECYCLE */:
312
+ return apiVersion >= 61 /* APIVersion.V61_250_SUMMER_24 */;
186
313
  }
187
314
  }
188
315
 
@@ -226,18 +353,6 @@ LWR.define('lwc/v/5_1_0', ['exports'], (function (exports) { 'use strict';
226
353
  // This includes aria-* attributes as well as the special non-ARIA "for" attribute
227
354
  const ID_REFERENCING_ATTRIBUTES_SET = /*@__PURE__*/new Set(['aria-activedescendant', 'aria-controls', 'aria-describedby', 'aria-details', 'aria-errormessage', 'aria-flowto', 'aria-labelledby', 'aria-owns', 'for']);
228
355
 
229
- /*
230
- * Copyright (c) 2018, salesforce.com, inc.
231
- * All rights reserved.
232
- * SPDX-License-Identifier: MIT
233
- * For full license text, see the LICENSE file in the repo root or https://opensource.org/licenses/MIT
234
- */
235
- // See browser support for globalThis:
236
- // https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/globalThis#browser_compatibility
237
- /* istanbul ignore next */
238
- // @ts-ignore
239
- const _globalThis = typeof globalThis === 'object' ? globalThis : window;
240
-
241
356
  /*
242
357
  * Copyright (c) 2023, Salesforce.com, inc.
243
358
  * All rights reserved.
@@ -268,6 +383,10 @@ LWR.define('lwc/v/5_1_0', ['exports'], (function (exports) { 'use strict';
268
383
  * Map associating previously transformed HTML property into HTML attribute.
269
384
  */
270
385
  const CACHED_PROPERTY_ATTRIBUTE_MAPPING = /*@__PURE__@*/new Map();
386
+ /**
387
+ *
388
+ * @param propName
389
+ */
271
390
  function htmlPropertyToAttribute(propName) {
272
391
  const ariaAttributeName = AriaPropNameToAttrNameMap[propName];
273
392
  if (!isUndefined$1(ariaAttributeName)) {
@@ -300,6 +419,10 @@ LWR.define('lwc/v/5_1_0', ['exports'], (function (exports) { 'use strict';
300
419
  * Map associating previously transformed kabab-case attributes into camel-case props.
301
420
  */
302
421
  const CACHED_KEBAB_CAMEL_MAPPING = /*@__PURE__@*/new Map();
422
+ /**
423
+ *
424
+ * @param attrName
425
+ */
303
426
  function kebabCaseToCamelCase(attrName) {
304
427
  let result = CACHED_KEBAB_CAMEL_MAPPING.get(attrName);
305
428
  if (isUndefined$1(result)) {
@@ -316,16 +439,16 @@ LWR.define('lwc/v/5_1_0', ['exports'], (function (exports) { 'use strict';
316
439
  * For full license text, see the LICENSE file in the repo root or https://opensource.org/licenses/MIT
317
440
  */
318
441
  // Increment whenever the LWC template compiler changes
319
- const LWC_VERSION = "5.1.0";
442
+ const LWC_VERSION = "6.2.1";
320
443
  const LWC_VERSION_COMMENT_REGEX = /\/\*LWC compiler v([\d.]+)\*\/\s*}/;
321
- /** version: 5.1.0 */
444
+ /** version: 6.2.1 */
322
445
 
323
446
  /**
324
- * Copyright (C) 2023 salesforce.com, inc.
447
+ * Copyright (c) 2024 Salesforce, Inc.
325
448
  */
326
449
 
327
450
  /*
328
- * Copyright (c) 2018, salesforce.com, inc.
451
+ * Copyright (c) 2024, Salesforce, Inc.
329
452
  * All rights reserved.
330
453
  * SPDX-License-Identifier: MIT
331
454
  * For full license text, see the LICENSE file in the repo root or https://opensource.org/licenses/MIT
@@ -335,24 +458,28 @@ LWR.define('lwc/v/5_1_0', ['exports'], (function (exports) { 'use strict';
335
458
  const features = {
336
459
  PLACEHOLDER_TEST_FLAG: null,
337
460
  ENABLE_FORCE_NATIVE_SHADOW_MODE_FOR_TEST: null,
338
- ENABLE_MIXED_SHADOW_MODE: null,
339
- ENABLE_NATIVE_CUSTOM_ELEMENT_LIFECYCLE: null,
461
+ DISABLE_NATIVE_CUSTOM_ELEMENT_LIFECYCLE: null,
340
462
  ENABLE_WIRE_SYNC_EMIT: null,
341
463
  DISABLE_LIGHT_DOM_UNSCOPED_CSS: null,
342
464
  ENABLE_FROZEN_TEMPLATE: null,
343
- ENABLE_LEGACY_SCOPE_TOKENS: null
465
+ ENABLE_LEGACY_SCOPE_TOKENS: null,
466
+ ENABLE_FORCE_SHADOW_MIGRATE_MODE: null,
467
+ ENABLE_EXPERIMENTAL_SIGNALS: null,
468
+ DISABLE_TEMPORARY_V5_COMPILER_SUPPORT: null
344
469
  };
345
- // eslint-disable-next-line no-restricted-properties
346
- if (!_globalThis.lwcRuntimeFlags) {
347
- Object.defineProperty(_globalThis, 'lwcRuntimeFlags', {
470
+ if (!globalThis.lwcRuntimeFlags) {
471
+ Object.defineProperty(globalThis, 'lwcRuntimeFlags', {
348
472
  value: create(null)
349
473
  });
350
474
  }
351
- // eslint-disable-next-line no-restricted-properties
352
- const flags = _globalThis.lwcRuntimeFlags;
475
+ const flags = globalThis.lwcRuntimeFlags;
353
476
  /**
354
477
  * Set the value at runtime of a given feature flag. This method only be invoked once per feature
355
478
  * flag. It is meant to be used during the app initialization.
479
+ * @param name Name of the feature flag to set
480
+ * @param value Whether the feature flag should be enabled
481
+ * @throws Will throw if a non-boolean value is provided when running in production.
482
+ * @example setFeatureFlag("DISABLE_NATIVE_CUSTOM_ELEMENT_LIFECYCLE", true)
356
483
  */
357
484
  function setFeatureFlag(name, value) {
358
485
  if (!isBoolean(value)) {
@@ -390,6 +517,9 @@ LWR.define('lwc/v/5_1_0', ['exports'], (function (exports) { 'use strict';
390
517
  /**
391
518
  * Set the value at runtime of a given feature flag. This method should only be used for testing
392
519
  * purposes. It is a no-op when invoked in production mode.
520
+ * @param name Name of the feature flag to enable or disable
521
+ * @param value Whether the feature flag should be enabled
522
+ * @example setFeatureFlag("DISABLE_NATIVE_CUSTOM_ELEMENT_LIFECYCLE", true)
393
523
  */
394
524
  function setFeatureFlagForTest(name, value) {
395
525
  // This may seem redundant, but `process.env.NODE_ENV === 'test-karma-lwc'` is replaced by Karma tests
@@ -397,10 +527,10 @@ LWR.define('lwc/v/5_1_0', ['exports'], (function (exports) { 'use strict';
397
527
  setFeatureFlag(name, value);
398
528
  }
399
529
  }
400
- /** version: 5.1.0 */
530
+ /** version: 6.2.1 */
401
531
 
402
532
  /**
403
- * Copyright (C) 2023 salesforce.com, inc.
533
+ * Copyright (c) 2024 Salesforce, Inc.
404
534
  */
405
535
 
406
536
  /*
@@ -422,8 +552,7 @@ LWR.define('lwc/v/5_1_0', ['exports'], (function (exports) { 'use strict';
422
552
  const reportingControl = {
423
553
  /**
424
554
  * Attach a new reporting control (aka dispatcher).
425
- *
426
- * @param dispatcher - reporting control
555
+ * @param dispatcher reporting control
427
556
  */
428
557
  attachDispatcher(dispatcher) {
429
558
  enabled$1 = true;
@@ -464,7 +593,7 @@ LWR.define('lwc/v/5_1_0', ['exports'], (function (exports) { 'use strict';
464
593
  /**
465
594
  * Report to the current dispatcher, if there is one.
466
595
  * @param reportingEventId
467
- * @param payload - data to report
596
+ * @param payload data to report
468
597
  */
469
598
  function report(reportingEventId, payload) {
470
599
  if (enabled$1) {
@@ -627,6 +756,7 @@ LWR.define('lwc/v/5_1_0', ['exports'], (function (exports) { 'use strict';
627
756
  }
628
757
  observe(job) {
629
758
  const inceptionReactiveRecord = currentReactiveObserver;
759
+ // eslint-disable-next-line @typescript-eslint/no-this-alias
630
760
  currentReactiveObserver = this;
631
761
  let error;
632
762
  try {
@@ -675,6 +805,78 @@ LWR.define('lwc/v/5_1_0', ['exports'], (function (exports) { 'use strict';
675
805
  // we keep track of observing records where the observing record was added to so we can do some clean up later on
676
806
  ArrayPush$1.call(this.listeners, reactiveObservers);
677
807
  }
808
+ isObserving() {
809
+ return currentReactiveObserver === this;
810
+ }
811
+ }
812
+
813
+ /*
814
+ * Copyright (c) 2024, salesforce.com, inc.
815
+ * All rights reserved.
816
+ * SPDX-License-Identifier: MIT
817
+ * For full license text, see the LICENSE file in the repo root or https://opensource.org/licenses/MIT
818
+ */
819
+ /**
820
+ * This map keeps track of objects to signals. There is an assumption that the signal is strongly referenced
821
+ * on the object which allows the SignalTracker to be garbage collected along with the object.
822
+ */
823
+ const TargetToSignalTrackerMap = new WeakMap();
824
+ function getSignalTracker(target) {
825
+ let signalTracker = TargetToSignalTrackerMap.get(target);
826
+ if (isUndefined$1(signalTracker)) {
827
+ signalTracker = new SignalTracker();
828
+ TargetToSignalTrackerMap.set(target, signalTracker);
829
+ }
830
+ return signalTracker;
831
+ }
832
+ function subscribeToSignal(target, signal, update) {
833
+ const signalTracker = getSignalTracker(target);
834
+ if (isFalse(signalTracker.seen(signal))) {
835
+ signalTracker.subscribeToSignal(signal, update);
836
+ }
837
+ }
838
+ function unsubscribeFromSignals(target) {
839
+ if (TargetToSignalTrackerMap.has(target)) {
840
+ const signalTracker = getSignalTracker(target);
841
+ signalTracker.unsubscribeFromSignals();
842
+ signalTracker.reset();
843
+ }
844
+ }
845
+ /**
846
+ * This class is used to keep track of the signals associated to a given object.
847
+ * It is used to prevent the LWC engine from subscribing duplicate callbacks multiple times
848
+ * to the same signal. Additionally, it keeps track of all signal unsubscribe callbacks, handles invoking
849
+ * them when necessary and discarding them.
850
+ */
851
+ class SignalTracker {
852
+ constructor() {
853
+ this.signalToUnsubscribeMap = new Map();
854
+ }
855
+ seen(signal) {
856
+ return this.signalToUnsubscribeMap.has(signal);
857
+ }
858
+ subscribeToSignal(signal, update) {
859
+ try {
860
+ const unsubscribe = signal.subscribe(update);
861
+ if (isFunction$1(unsubscribe)) {
862
+ // TODO [#3978]: Evaluate how we should handle the case when unsubscribe is not a function.
863
+ // Long term we should throw an error or log a warning.
864
+ this.signalToUnsubscribeMap.set(signal, unsubscribe);
865
+ }
866
+ } catch (err) {
867
+ logWarnOnce(`Attempted to subscribe to an object that has the shape of a signal but received the following error: ${err?.stack ?? err}`);
868
+ }
869
+ }
870
+ unsubscribeFromSignals() {
871
+ try {
872
+ this.signalToUnsubscribeMap.forEach(unsubscribe => unsubscribe());
873
+ } catch (err) {
874
+ logWarnOnce(`Attempted to call a signal's unsubscribe callback but received the following error: ${err?.stack ?? err}`);
875
+ }
876
+ }
877
+ reset() {
878
+ this.signalToUnsubscribeMap.clear();
879
+ }
678
880
  }
679
881
  function componentValueMutated(vm, key) {
680
882
  // On the server side, we don't need mutation tracking. Skipping it improves performance.
@@ -682,10 +884,24 @@ LWR.define('lwc/v/5_1_0', ['exports'], (function (exports) { 'use strict';
682
884
  valueMutated(vm.component, key);
683
885
  }
684
886
  }
685
- function componentValueObserved(vm, key) {
887
+ function componentValueObserved(vm, key, target = {}) {
888
+ const {
889
+ component,
890
+ tro
891
+ } = vm;
686
892
  // On the server side, we don't need mutation tracking. Skipping it improves performance.
687
893
  {
688
- valueObserved(vm.component, key);
894
+ valueObserved(component, key);
895
+ }
896
+ // The portion of reactivity that's exposed to signals is to subscribe a callback to re-render the VM (templates).
897
+ // We check check the following to ensure re-render is subscribed at the correct time.
898
+ // 1. The template is currently being rendered (there is a template reactive observer)
899
+ // 2. There was a call to a getter to access the signal (happens during vnode generation)
900
+ if (lwcRuntimeFlags.ENABLE_EXPERIMENTAL_SIGNALS && isObject(target) && !isNull(target) && 'value' in target && 'subscribe' in target && isFunction$1(target.subscribe) &&
901
+ // Only subscribe if a template is being rendered by the engine
902
+ tro.isObserving()) {
903
+ // Subscribe the template reactive observer's notify method, which will mark the vm as dirty and schedule hydration.
904
+ subscribeToSignal(component, target, tro.notify.bind(tro));
689
905
  }
690
906
  }
691
907
  function createReactiveObserver(callback) {
@@ -722,6 +938,7 @@ LWR.define('lwc/v/5_1_0', ['exports'], (function (exports) { 'use strict';
722
938
  }
723
939
  }
724
940
  if (nextTickCallbackQueue.length === 0) {
941
+ // eslint-disable-next-line @typescript-eslint/no-floating-promises
725
942
  Promise.resolve().then(flushCallbackQueue);
726
943
  }
727
944
  ArrayPush$1.call(nextTickCallbackQueue, callback);
@@ -732,6 +949,14 @@ LWR.define('lwc/v/5_1_0', ['exports'], (function (exports) { 'use strict';
732
949
  }
733
950
  return s4() + s4() + '-' + s4() + '-' + s4() + '-' + s4() + '-' + s4() + s4() + s4();
734
951
  }
952
+ function shouldUseNativeCustomElementLifecycle(ctor) {
953
+ if (lwcRuntimeFlags.DISABLE_NATIVE_CUSTOM_ELEMENT_LIFECYCLE) {
954
+ // temporary "kill switch"
955
+ return false;
956
+ }
957
+ const apiVersion = getComponentAPIVersion(ctor);
958
+ return isAPIFeatureEnabled(7 /* APIFeature.ENABLE_NATIVE_CUSTOM_ELEMENT_LIFECYCLE */, apiVersion);
959
+ }
735
960
  // Borrowed from Vue template compiler.
736
961
  // https://github.com/vuejs/vue/blob/531371b818b0e31a989a06df43789728f23dc4e8/src/platforms/web/util/style.js#L5-L16
737
962
  const DECLARATION_DELIMITER = /;(?![^(]*\))/g;
@@ -778,6 +1003,33 @@ LWR.define('lwc/v/5_1_0', ['exports'], (function (exports) { 'use strict';
778
1003
  throw new ReferenceError();
779
1004
  }
780
1005
  }
1006
+ // Temporary fix for when the LWC v5 compiler is used in conjunction with a v6+ engine
1007
+ // The old compiler format used the "slot" attribute in the `data` bag, whereas the new
1008
+ // format uses the special `slotAssignment` key.
1009
+ // This should be removed when the LWC v5 compiler is not used anywhere where it could be mismatched
1010
+ // with another LWC engine version.
1011
+ // TODO [#3974]: remove temporary logic to support v5 compiler + v6+ engine
1012
+ function applyTemporaryCompilerV5SlotFix(data) {
1013
+ if (lwcRuntimeFlags.DISABLE_TEMPORARY_V5_COMPILER_SUPPORT) {
1014
+ return data;
1015
+ }
1016
+ const {
1017
+ attrs
1018
+ } = data;
1019
+ if (!isUndefined$1(attrs)) {
1020
+ const {
1021
+ slot
1022
+ } = attrs;
1023
+ if (!isUndefined$1(slot) && !isNull(slot)) {
1024
+ return {
1025
+ ...data,
1026
+ attrs: cloneAndOmitKey(attrs, 'slot'),
1027
+ slotAssignment: String(slot)
1028
+ };
1029
+ }
1030
+ }
1031
+ return data;
1032
+ }
781
1033
 
782
1034
  /*
783
1035
  * Copyright (c) 2020, salesforce.com, inc.
@@ -787,14 +1039,11 @@ LWR.define('lwc/v/5_1_0', ['exports'], (function (exports) { 'use strict';
787
1039
  */
788
1040
  function resolveCircularModuleDependency(fn) {
789
1041
  const module = fn();
790
- return (module === null || module === void 0 ? void 0 : module.__esModule) ? module.default : module;
1042
+ return module?.__esModule ? module.default : module;
791
1043
  }
792
1044
  function isCircularModuleDependency(obj) {
793
1045
  return isFunction$1(obj) && hasOwnProperty$1.call(obj, '__circular__');
794
1046
  }
795
- var _a, _b;
796
- const instrumentDef = (_a = _globalThis.__lwc_instrument_cmp_def) !== null && _a !== void 0 ? _a : noop;
797
- const instrumentInstance = (_b = _globalThis.__lwc_instrument_cmp_instance) !== null && _b !== void 0 ? _b : noop;
798
1047
 
799
1048
  /*
800
1049
  * Copyright (c) 2023, salesforce.com, inc.
@@ -802,37 +1051,8 @@ LWR.define('lwc/v/5_1_0', ['exports'], (function (exports) { 'use strict';
802
1051
  * SPDX-License-Identifier: MIT
803
1052
  * For full license text, see the LICENSE file in the repo root or https://opensource.org/licenses/MIT
804
1053
  */
805
- // Apply ARIA string reflection behavior to a prototype.
806
- // This is deliberately kept separate from @lwc/aria-reflection. @lwc/aria-reflection is a global polyfill that is
807
- // needed for backwards compatibility in LEX, whereas `applyAriaReflection` is designed to only apply to our own
808
- // LightningElement/BaseBridgeElement prototypes.
809
- function applyAriaReflection(prototype) {
810
- for (const propName of keys(AriaPropNameToAttrNameMap)) {
811
- const attrName = AriaPropNameToAttrNameMap[propName];
812
- if (isUndefined$1(getOwnPropertyDescriptor$1(prototype, propName))) {
813
- // Note that we need to call this.{get,set,has,remove}Attribute rather than dereferencing
814
- // from Element.prototype, because these methods are overridden in LightningElement.
815
- defineProperty(prototype, propName, {
816
- get() {
817
- return this.getAttribute(attrName);
818
- },
819
- set(newValue) {
820
- // TODO [#3284]: there is disagreement between browsers and the spec on how to treat undefined
821
- // Our historical behavior is to only treat null as removing the attribute
822
- // See also https://github.com/w3c/aria/issues/1858
823
- if (isNull(newValue)) {
824
- this.removeAttribute(attrName);
825
- } else {
826
- this.setAttribute(attrName, newValue);
827
- }
828
- },
829
- // configurable and enumerable to allow it to be overridden – this mimics Safari's/Chrome's behavior
830
- configurable: true,
831
- enumerable: true
832
- });
833
- }
834
- }
835
- }
1054
+ const instrumentDef = globalThis.__lwc_instrument_cmp_def ?? noop;
1055
+ const instrumentInstance = globalThis.__lwc_instrument_cmp_instance ?? noop;
836
1056
 
837
1057
  /*
838
1058
  * Copyright (c) 2018, salesforce.com, inc.
@@ -845,6 +1065,43 @@ LWR.define('lwc/v/5_1_0', ['exports'], (function (exports) { 'use strict';
845
1065
  const HTMLElementConstructor = typeof HTMLElement !== 'undefined' ? HTMLElement : function () {};
846
1066
  const HTMLElementPrototype = HTMLElementConstructor.prototype;
847
1067
 
1068
+ /*
1069
+ * Copyright (c) 2023, salesforce.com, inc.
1070
+ * All rights reserved.
1071
+ * SPDX-License-Identifier: MIT
1072
+ * For full license text, see the LICENSE file in the repo root or https://opensource.org/licenses/MIT
1073
+ */
1074
+ // Apply ARIA string reflection behavior to a prototype.
1075
+ // This is deliberately kept separate from @lwc/aria-reflection. @lwc/aria-reflection is a global polyfill that is
1076
+ // needed for backwards compatibility in LEX, whereas this is designed to only apply to our own
1077
+ // LightningElement/BaseBridgeElement prototypes.
1078
+ // Note we only need to handle ARIA reflections that aren't already in Element.prototype
1079
+ const ariaReflectionPolyfillDescriptors = create(null);
1080
+ for (const [propName, attrName] of entries(AriaPropNameToAttrNameMap)) {
1081
+ if (isUndefined$1(getPropertyDescriptor(HTMLElementPrototype, propName))) {
1082
+ // Note that we need to call this.{get,set,has,remove}Attribute rather than dereferencing
1083
+ // from Element.prototype, because these methods are overridden in LightningElement.
1084
+ ariaReflectionPolyfillDescriptors[propName] = {
1085
+ get() {
1086
+ return this.getAttribute(attrName);
1087
+ },
1088
+ set(newValue) {
1089
+ // TODO [#3284]: there is disagreement between browsers and the spec on how to treat undefined
1090
+ // Our historical behavior is to only treat null as removing the attribute
1091
+ // See also https://github.com/w3c/aria/issues/1858
1092
+ if (isNull(newValue)) {
1093
+ this.removeAttribute(attrName);
1094
+ } else {
1095
+ this.setAttribute(attrName, newValue);
1096
+ }
1097
+ },
1098
+ // configurable and enumerable to allow it to be overridden – this mimics Safari's/Chrome's behavior
1099
+ configurable: true,
1100
+ enumerable: true
1101
+ };
1102
+ }
1103
+ }
1104
+
848
1105
  /*
849
1106
  * Copyright (c) 2018, salesforce.com, inc.
850
1107
  * All rights reserved.
@@ -1093,28 +1350,6 @@ LWR.define('lwc/v/5_1_0', ['exports'], (function (exports) { 'use strict';
1093
1350
  })
1094
1351
  };
1095
1352
  }
1096
- function getLightningElementPrototypeRestrictionsDescriptors(proto) {
1097
- assertNotProd(); // this method should never leak to prod
1098
- const originalDispatchEvent = proto.dispatchEvent;
1099
- return {
1100
- dispatchEvent: generateDataDescriptor({
1101
- value(event) {
1102
- const vm = getAssociatedVM(this);
1103
- if (!isNull(event) && isObject(event)) {
1104
- const {
1105
- type
1106
- } = event;
1107
- if (!/^[a-z][a-z0-9_]*$/.test(type)) {
1108
- logError(`Invalid event type "${type}" dispatched in element ${getComponentTag(vm)}.` + ` Event name must start with a lowercase letter and followed only lowercase` + ` letters, numbers, and underscores`, vm);
1109
- }
1110
- }
1111
- // Typescript does not like it when you treat the `arguments` object as an array
1112
- // @ts-ignore type-mismatch
1113
- return originalDispatchEvent.apply(this, arguments);
1114
- }
1115
- })
1116
- };
1117
- }
1118
1353
  // This routine will prevent access to certain properties on a shadow root instance to guarantee
1119
1354
  // that all components will work fine in IE11 and other browsers without shadow dom support.
1120
1355
  function patchShadowRootWithRestrictions(sr) {
@@ -1125,9 +1360,6 @@ LWR.define('lwc/v/5_1_0', ['exports'], (function (exports) { 'use strict';
1125
1360
  const elmProto = getPrototypeOf$1(elm);
1126
1361
  setPrototypeOf(elm, create(elmProto, restrictionsDescriptors));
1127
1362
  }
1128
- function patchLightningElementPrototypeWithRestrictions(proto) {
1129
- defineProperties(proto, getLightningElementPrototypeRestrictionsDescriptors(proto));
1130
- }
1131
1363
  function updateComponentValue(vm, key, newValue) {
1132
1364
  const {
1133
1365
  cmpFields
@@ -1504,7 +1736,7 @@ LWR.define('lwc/v/5_1_0', ['exports'], (function (exports) { 'use strict';
1504
1736
  valueMutated(originalTarget, key);
1505
1737
  return true;
1506
1738
  }
1507
- /*LWC compiler v5.1.0*/
1739
+ /*LWC compiler v6.2.1*/
1508
1740
  }
1509
1741
  const getterMap = new WeakMap();
1510
1742
  const setterMap = new WeakMap();
@@ -1597,7 +1829,7 @@ LWR.define('lwc/v/5_1_0', ['exports'], (function (exports) { 'use strict';
1597
1829
  /* istanbul ignore next */
1598
1830
  return false;
1599
1831
  }
1600
- /*LWC compiler v5.1.0*/
1832
+ /*LWC compiler v6.2.1*/
1601
1833
  }
1602
1834
  function extract(objectOrArray) {
1603
1835
  if (isArray(objectOrArray)) {
@@ -1783,6 +2015,7 @@ LWR.define('lwc/v/5_1_0', ['exports'], (function (exports) { 'use strict';
1783
2015
  * EXPERIMENTAL: This function implements an unwrap mechanism that
1784
2016
  * works for observable membrane objects. This API is subject to
1785
2017
  * change or being removed.
2018
+ * @param value
1786
2019
  */
1787
2020
  function unwrap(value) {
1788
2021
  // On the server side, we don't need mutation tracking. Skipping it improves performance.
@@ -1805,6 +2038,78 @@ LWR.define('lwc/v/5_1_0', ['exports'], (function (exports) { 'use strict';
1805
2038
  }
1806
2039
  }
1807
2040
 
2041
+ /*
2042
+ * Copyright (c) 2023, salesforce.com, inc.
2043
+ * All rights reserved.
2044
+ * SPDX-License-Identifier: MIT
2045
+ * For full license text, see the LICENSE file in the repo root or https://opensource.org/licenses/MIT
2046
+ */
2047
+ let globalStylesheet;
2048
+ function isStyleElement(elm) {
2049
+ return elm.tagName === 'STYLE';
2050
+ }
2051
+ async function fetchStylesheet(elm) {
2052
+ if (isStyleElement(elm)) {
2053
+ return elm.textContent;
2054
+ } else {
2055
+ // <link>
2056
+ const {
2057
+ href
2058
+ } = elm;
2059
+ try {
2060
+ return await (await fetch(href)).text();
2061
+ } catch (err) {
2062
+ logWarnOnce(`Ignoring cross-origin stylesheet in migrate mode: ${href}`);
2063
+ // ignore errors with cross-origin stylesheets - nothing we can do for those
2064
+ return '';
2065
+ }
2066
+ }
2067
+ }
2068
+ function initGlobalStylesheet() {
2069
+ const stylesheet = new CSSStyleSheet();
2070
+ const elmsToPromises = new Map();
2071
+ let lastSeenLength = 0;
2072
+ const copyToGlobalStylesheet = () => {
2073
+ const elms = document.head.querySelectorAll('style:not([data-rendered-by-lwc]),link[rel="stylesheet"]');
2074
+ if (elms.length === lastSeenLength) {
2075
+ return; // nothing to update
2076
+ }
2077
+ lastSeenLength = elms.length;
2078
+ const promises = [...elms].map(elm => {
2079
+ let promise = elmsToPromises.get(elm);
2080
+ if (!promise) {
2081
+ // Cache the promise
2082
+ promise = fetchStylesheet(elm);
2083
+ elmsToPromises.set(elm, promise);
2084
+ }
2085
+ return promise;
2086
+ });
2087
+ // eslint-disable-next-line @typescript-eslint/no-floating-promises
2088
+ Promise.all(promises).then(stylesheetTexts => {
2089
+ // When replaceSync() is called, the entire contents of the constructable stylesheet are replaced
2090
+ // with the copied+concatenated styles. This means that any shadow root's adoptedStyleSheets that
2091
+ // contains this constructable stylesheet will immediately get the new styles.
2092
+ stylesheet.replaceSync(stylesheetTexts.join('\n'));
2093
+ });
2094
+ };
2095
+ const headObserver = new MutationObserver(copyToGlobalStylesheet);
2096
+ // By observing only the childList, note that we are not covering the case where someone changes an `href`
2097
+ // on an existing <link>`, or the textContent on an existing `<style>`. This is assumed to be an uncommon
2098
+ // case and not worth covering.
2099
+ headObserver.observe(document.head, {
2100
+ childList: true
2101
+ });
2102
+ copyToGlobalStylesheet();
2103
+ return stylesheet;
2104
+ }
2105
+ function applyShadowMigrateMode(shadowRoot) {
2106
+ if (!globalStylesheet) {
2107
+ globalStylesheet = initGlobalStylesheet();
2108
+ }
2109
+ shadowRoot.synthetic = true; // pretend to be synthetic mode
2110
+ shadowRoot.adoptedStyleSheets.push(globalStylesheet);
2111
+ }
2112
+
1808
2113
  /*
1809
2114
  * Copyright (c) 2018, salesforce.com, inc.
1810
2115
  * All rights reserved.
@@ -1824,6 +2129,8 @@ LWR.define('lwc/v/5_1_0', ['exports'], (function (exports) { 'use strict';
1824
2129
  * that a Custom Element can support (including AOM properties), which
1825
2130
  * determines what kind of capabilities the Base Lightning Element should support. When producing the new descriptors
1826
2131
  * for the Base Lightning Element, it also include the reactivity bit, so the standard property is reactive.
2132
+ * @param propName
2133
+ * @param descriptor
1827
2134
  */
1828
2135
  function createBridgeToElementDescriptor(propName, descriptor) {
1829
2136
  const {
@@ -1878,7 +2185,7 @@ LWR.define('lwc/v/5_1_0', ['exports'], (function (exports) { 'use strict';
1878
2185
  /**
1879
2186
  * This class is the base class for any LWC element.
1880
2187
  * Some elements directly extends this class, others implement it via inheritance.
1881
- **/
2188
+ */
1882
2189
  // @ts-ignore
1883
2190
  const LightningElement = function () {
1884
2191
  // This should be as performant as possible, while any initialization should be done lazily
@@ -1903,7 +2210,6 @@ LWR.define('lwc/v/5_1_0', ['exports'], (function (exports) { 'use strict';
1903
2210
  } = vm.renderer;
1904
2211
  assertInstanceOfHTMLElement(vm.elm, `Component creation requires a DOM element to be associated to ${vm}.`);
1905
2212
  }
1906
- const component = this;
1907
2213
  setPrototypeOf(elm, bridge.prototype);
1908
2214
  vm.component = this;
1909
2215
  // Locker hooks assignment. When the LWC engine run with Locker, Locker intercepts all the new
@@ -1922,7 +2228,7 @@ LWR.define('lwc/v/5_1_0', ['exports'], (function (exports) { 'use strict';
1922
2228
  }
1923
2229
  markLockerLiveObject(this);
1924
2230
  // Linking elm, shadow root and component with the VM.
1925
- associateVM(component, vm);
2231
+ associateVM(this, vm);
1926
2232
  associateVM(elm, vm);
1927
2233
  if (vm.renderMode === 1 /* RenderMode.Shadow */) {
1928
2234
  vm.renderRoot = doAttachShadow(vm);
@@ -1957,6 +2263,9 @@ LWR.define('lwc/v/5_1_0', ['exports'], (function (exports) { 'use strict';
1957
2263
  if (process.env.NODE_ENV !== 'production') {
1958
2264
  patchShadowRootWithRestrictions(shadowRoot);
1959
2265
  }
2266
+ if (lwcRuntimeFlags.ENABLE_FORCE_SHADOW_MIGRATE_MODE && vm.shadowMigrateMode) {
2267
+ applyShadowMigrateMode(shadowRoot);
2268
+ }
1960
2269
  return shadowRoot;
1961
2270
  }
1962
2271
  function warnIfInvokedDuringConstruction(vm, methodOrPropName) {
@@ -2387,11 +2696,17 @@ LWR.define('lwc/v/5_1_0', ['exports'], (function (exports) { 'use strict';
2387
2696
  for (const propName in HTMLElementOriginalDescriptors) {
2388
2697
  lightningBasedDescriptors[propName] = createBridgeToElementDescriptor(propName, HTMLElementOriginalDescriptors[propName]);
2389
2698
  }
2390
- defineProperties(LightningElement.prototype, lightningBasedDescriptors);
2391
2699
  // Apply ARIA reflection to LightningElement.prototype, on both the browser and server.
2392
2700
  // This allows `this.aria*` property accessors to work from inside a component, and to reflect `aria-*` attrs.
2393
2701
  // Note this works regardless of whether the global ARIA reflection polyfill is applied or not.
2394
- applyAriaReflection(LightningElement.prototype);
2702
+ {
2703
+ // In the browser, we use createBridgeToElementDescriptor, so we can get the normal reactivity lifecycle for
2704
+ // aria* properties
2705
+ for (const [propName, descriptor] of entries(ariaReflectionPolyfillDescriptors)) {
2706
+ lightningBasedDescriptors[propName] = createBridgeToElementDescriptor(propName, descriptor);
2707
+ }
2708
+ }
2709
+ defineProperties(LightningElement.prototype, lightningBasedDescriptors);
2395
2710
  defineProperty(LightningElement, 'CustomElementConstructor', {
2396
2711
  get() {
2397
2712
  // If required, a runtime-specific implementation must be defined.
@@ -2399,15 +2714,13 @@ LWR.define('lwc/v/5_1_0', ['exports'], (function (exports) { 'use strict';
2399
2714
  },
2400
2715
  configurable: true
2401
2716
  });
2402
- if (process.env.NODE_ENV !== 'production') {
2403
- patchLightningElementPrototypeWithRestrictions(LightningElement.prototype);
2404
- }
2405
2717
  function createObservedFieldPropertyDescriptor(key) {
2406
2718
  return {
2407
2719
  get() {
2408
2720
  const vm = getAssociatedVM(this);
2409
- componentValueObserved(vm, key);
2410
- return vm.cmpFields[key];
2721
+ const val = vm.cmpFields[key];
2722
+ componentValueObserved(vm, key, val);
2723
+ return val;
2411
2724
  },
2412
2725
  set(newValue) {
2413
2726
  const vm = getAssociatedVM(this);
@@ -2535,6 +2848,7 @@ LWR.define('lwc/v/5_1_0', ['exports'], (function (exports) { 'use strict';
2535
2848
  if (hasPendingConfig === false) {
2536
2849
  hasPendingConfig = true;
2537
2850
  // collect new config in the micro-task
2851
+ // eslint-disable-next-line @typescript-eslint/no-floating-promises
2538
2852
  Promise.resolve().then(() => {
2539
2853
  hasPendingConfig = false;
2540
2854
  // resetting current reactive params
@@ -2694,6 +3008,7 @@ LWR.define('lwc/v/5_1_0', ['exports'], (function (exports) { 'use strict';
2694
3008
  connector.connect();
2695
3009
  if (!lwcRuntimeFlags.ENABLE_WIRE_SYNC_EMIT) {
2696
3010
  if (hasDynamicParams) {
3011
+ // eslint-disable-next-line @typescript-eslint/no-floating-promises
2697
3012
  Promise.resolve().then(computeConfigAndUpdate);
2698
3013
  return;
2699
3014
  }
@@ -2749,8 +3064,9 @@ LWR.define('lwc/v/5_1_0', ['exports'], (function (exports) { 'use strict';
2749
3064
  }
2750
3065
  return;
2751
3066
  }
2752
- componentValueObserved(vm, key);
2753
- return vm.cmpProps[key];
3067
+ const val = vm.cmpProps[key];
3068
+ componentValueObserved(vm, key, val);
3069
+ return val;
2754
3070
  },
2755
3071
  set(newValue) {
2756
3072
  const vm = getAssociatedVM(this);
@@ -2827,8 +3143,9 @@ LWR.define('lwc/v/5_1_0', ['exports'], (function (exports) { 'use strict';
2827
3143
  return {
2828
3144
  get() {
2829
3145
  const vm = getAssociatedVM(this);
2830
- componentValueObserved(vm, key);
2831
- return vm.cmpFields[key];
3146
+ const val = vm.cmpFields[key];
3147
+ componentValueObserved(vm, key, val);
3148
+ return val;
2832
3149
  },
2833
3150
  set(newValue) {
2834
3151
  const vm = getAssociatedVM(this);
@@ -2856,9 +3173,11 @@ LWR.define('lwc/v/5_1_0', ['exports'], (function (exports) { 'use strict';
2856
3173
  * For full license text, see the LICENSE file in the repo root or https://opensource.org/licenses/MIT
2857
3174
  */
2858
3175
  /**
2859
- * @wire decorator to wire fields and methods to a wire adapter in
3176
+ * The @wire decorator wires fields and methods to a wire adapter in
2860
3177
  * LWC Components. This function implements the internals of this
2861
3178
  * decorator.
3179
+ * @param _adapter
3180
+ * @param _config
2862
3181
  */
2863
3182
  function wire(_adapter, _config) {
2864
3183
  if (process.env.NODE_ENV !== 'production') {
@@ -2966,6 +3285,8 @@ LWR.define('lwc/v/5_1_0', ['exports'], (function (exports) { 'use strict';
2966
3285
  /**
2967
3286
  * INTERNAL: This function can only be invoked by compiled code. The compiler
2968
3287
  * will prevent this function from being imported by user-land code.
3288
+ * @param Ctor
3289
+ * @param meta
2969
3290
  */
2970
3291
  function registerDecorators(Ctor, meta) {
2971
3292
  const proto = Ctor.prototype;
@@ -3161,6 +3482,7 @@ LWR.define('lwc/v/5_1_0', ['exports'], (function (exports) { 'use strict';
3161
3482
  /**
3162
3483
  * INTERNAL: This function can only be invoked by compiled code. The compiler
3163
3484
  * will prevent this function from being imported by userland code.
3485
+ * @param tpl
3164
3486
  */
3165
3487
  function registerTemplate(tpl) {
3166
3488
  if (process.env.NODE_ENV !== 'production') {
@@ -3174,6 +3496,10 @@ LWR.define('lwc/v/5_1_0', ['exports'], (function (exports) { 'use strict';
3174
3496
  /**
3175
3497
  * EXPERIMENTAL: This function acts like a hook for Lightning Locker Service and other similar
3176
3498
  * libraries to sanitize vulnerable attributes.
3499
+ * @param tagName
3500
+ * @param namespaceUri
3501
+ * @param attrName
3502
+ * @param attrValue
3177
3503
  */
3178
3504
  function sanitizeAttribute(tagName, namespaceUri, attrName, attrValue) {
3179
3505
  // locker-service patches this function during runtime to sanitize vulnerable attributes. When
@@ -3272,7 +3598,7 @@ LWR.define('lwc/v/5_1_0', ['exports'], (function (exports) { 'use strict';
3272
3598
  }
3273
3599
  function HTMLBridgeElementFactory(SuperClass, publicProperties, methods, observedFields, proto, hasCustomSuperClass) {
3274
3600
  const HTMLBridgeElement = class extends SuperClass {
3275
- /*LWC compiler v5.1.0*/
3601
+ /*LWC compiler v6.2.1*/
3276
3602
  };
3277
3603
  // generating the hash table for attributes to avoid duplicate fields and facilitate validation
3278
3604
  // and false positives in case of inheritance.
@@ -3297,7 +3623,7 @@ LWR.define('lwc/v/5_1_0', ['exports'], (function (exports) { 'use strict';
3297
3623
  // and can break tooling that expects it to be iterable or defined, e.g. Jest:
3298
3624
  // https://github.com/jestjs/jest/blob/b4c9587/packages/pretty-format/src/plugins/DOMElement.ts#L95
3299
3625
  // It also doesn't make sense to override e.g. "constructor".
3300
- .filter(propName => !(propName in HTMLElementPrototype)));
3626
+ .filter(propName => !(propName in HTMLElementPrototype) && !(propName in ariaReflectionPolyfillDescriptors)));
3301
3627
  for (const propName of nonPublicPropertiesToWarnOn) {
3302
3628
  if (ArrayIndexOf.call(publicProperties, propName) === -1) {
3303
3629
  descriptors[propName] = createAccessorThatWarns(propName);
@@ -3367,21 +3693,19 @@ LWR.define('lwc/v/5_1_0', ['exports'], (function (exports) { 'use strict';
3367
3693
  defineProperties(HTMLBridgeElement.prototype, descriptors);
3368
3694
  return HTMLBridgeElement;
3369
3695
  }
3370
- const BaseBridgeElement = HTMLBridgeElementFactory(HTMLElementConstructor, getOwnPropertyNames$1(HTMLElementOriginalDescriptors), [], [], null, false);
3371
- {
3372
- // This ARIA reflection only really makes sense in the browser. On the server, there is no `renderedCallback()`,
3373
- // so you cannot do e.g. `this.template.querySelector('x-child').ariaBusy = 'true'`. So we don't need to expose
3374
- // ARIA props outside the LightningElement
3375
- //
3376
- // Apply ARIA reflection to HTMLBridgeElement.prototype. This allows `elm.aria*` property accessors to work from
3377
- // outside a component, and to reflect `aria-*` attrs. This is especially important because the template compiler
3378
- // compiles aria-* attrs on components to aria* props.
3379
- // Note this works regardless of whether the global ARIA reflection polyfill is applied or not.
3380
- //
3381
- // Also note that we apply this to BaseBridgeElement.prototype to avoid excessively redefining property
3382
- // accessors inside the HTMLBridgeElementFactory.
3383
- applyAriaReflection(BaseBridgeElement.prototype);
3384
- }
3696
+ // We do some special handling of non-standard ARIA props like ariaLabelledBy as well as props without (as of this
3697
+ // writing) broad cross-browser support like ariaBrailleLabel. This is so the reflection works correctly and preserves
3698
+ // backwards compatibility with the previous global polyfill approach.
3699
+ //
3700
+ // The goal here is to expose `elm.aria*` property accessors to work from outside a component, and to reflect `aria-*`
3701
+ // attrs. This is especially important because the template compiler compiles aria-* attrs on components to aria* props.
3702
+ // Note this works regardless of whether the global ARIA reflection polyfill is applied or not.
3703
+ //
3704
+ // Also note this ARIA reflection only really makes sense in the browser. On the server, there is no
3705
+ // `renderedCallback()`, so you cannot do e.g. `this.template.querySelector('x-child').ariaBusy = 'true'`. So we don't
3706
+ // need to expose ARIA props outside the LightningElement
3707
+ const basePublicProperties = [...getOwnPropertyNames$1(HTMLElementOriginalDescriptors), ...getOwnPropertyNames$1(ariaReflectionPolyfillDescriptors)];
3708
+ const BaseBridgeElement = HTMLBridgeElementFactory(HTMLElementConstructor, basePublicProperties, [], [], null, false);
3385
3709
  freeze(BaseBridgeElement);
3386
3710
  seal(BaseBridgeElement.prototype);
3387
3711
 
@@ -3681,6 +4005,10 @@ LWR.define('lwc/v/5_1_0', ['exports'], (function (exports) { 'use strict';
3681
4005
  if (!isUndefined$1(ctorShadowSupportMode) && ctorShadowSupportMode !== "any" /* ShadowSupportMode.Any */ && ctorShadowSupportMode !== "reset" /* ShadowSupportMode.Default */ && ctorShadowSupportMode !== "native" /* ShadowSupportMode.Native */) {
3682
4006
  logError(`Invalid value for static property shadowSupportMode: '${ctorShadowSupportMode}'`);
3683
4007
  }
4008
+ // TODO [#3971]: Completely remove shadowSupportMode "any"
4009
+ if (ctorShadowSupportMode === "any" /* ShadowSupportMode.Any */) {
4010
+ logWarn(`Invalid value 'any' for static property shadowSupportMode. 'any' is deprecated and will be removed in a future release--use 'native' instead.`);
4011
+ }
3684
4012
  if (!isUndefined$1(ctorRenderMode) && ctorRenderMode !== 'light' && ctorRenderMode !== 'shadow') {
3685
4013
  logError(`Invalid value for static property renderMode: '${ctorRenderMode}'. renderMode must be either 'light' or 'shadow'.`);
3686
4014
  }
@@ -3726,6 +4054,12 @@ LWR.define('lwc/v/5_1_0', ['exports'], (function (exports) { 'use strict';
3726
4054
  let shadowSupportMode = superDef.shadowSupportMode;
3727
4055
  if (!isUndefined$1(ctorShadowSupportMode)) {
3728
4056
  shadowSupportMode = ctorShadowSupportMode;
4057
+ if (isReportingEnabled() && (shadowSupportMode === "any" /* ShadowSupportMode.Any */ || shadowSupportMode === "native" /* ShadowSupportMode.Native */)) {
4058
+ report("ShadowSupportModeUsage" /* ReportingEventId.ShadowSupportModeUsage */, {
4059
+ tagName: Ctor.name,
4060
+ mode: shadowSupportMode
4061
+ });
4062
+ }
3729
4063
  }
3730
4064
  let renderMode = superDef.renderMode;
3731
4065
  if (!isUndefined$1(ctorRenderMode)) {
@@ -3771,6 +4105,7 @@ LWR.define('lwc/v/5_1_0', ['exports'], (function (exports) { 'use strict';
3771
4105
  /**
3772
4106
  * EXPERIMENTAL: This function allows for the identification of LWC constructors. This API is
3773
4107
  * subject to change or being removed.
4108
+ * @param ctor
3774
4109
  */
3775
4110
  function isComponentConstructor(ctor) {
3776
4111
  if (!isFunction$1(ctor)) {
@@ -3844,6 +4179,7 @@ LWR.define('lwc/v/5_1_0', ['exports'], (function (exports) { 'use strict';
3844
4179
  /**
3845
4180
  * EXPERIMENTAL: This function allows for the collection of internal component metadata. This API is
3846
4181
  * subject to change or being removed.
4182
+ * @param Ctor
3847
4183
  */
3848
4184
  function getComponentDef(Ctor) {
3849
4185
  const def = getComponentInternalDef(Ctor);
@@ -3863,7 +4199,9 @@ LWR.define('lwc/v/5_1_0', ['exports'], (function (exports) { 'use strict';
3863
4199
  // avoid leaking the reference to the public props descriptors
3864
4200
  publicProps[key] = {
3865
4201
  config: propsConfig[key] || 0,
4202
+ // a property by default
3866
4203
  type: "any" /* PropDefType.any */,
4204
+ // no type inference for public services
3867
4205
  attr: htmlPropertyToAttribute(key)
3868
4206
  };
3869
4207
  }
@@ -3893,6 +4231,7 @@ LWR.define('lwc/v/5_1_0', ['exports'], (function (exports) { 'use strict';
3893
4231
  function createInlineStyleVNode(content) {
3894
4232
  return api.h('style', {
3895
4233
  key: 'style',
4234
+ // special key
3896
4235
  attrs: {
3897
4236
  type: 'text/css'
3898
4237
  }
@@ -4055,6 +4394,8 @@ LWR.define('lwc/v/5_1_0', ['exports'], (function (exports) { 'use strict';
4055
4394
  * If the component that is currently being rendered uses scoped styles,
4056
4395
  * this returns the unique token for that scoped stylesheet. Otherwise
4057
4396
  * it returns null.
4397
+ * @param owner
4398
+ * @param legacy
4058
4399
  */
4059
4400
  // TODO [#3733]: remove support for legacy scope tokens
4060
4401
  function getScopeTokenClass(owner, legacy) {
@@ -4062,13 +4403,14 @@ LWR.define('lwc/v/5_1_0', ['exports'], (function (exports) { 'use strict';
4062
4403
  cmpTemplate,
4063
4404
  context
4064
4405
  } = owner;
4065
- return context.hasScopedStyles && (legacy ? cmpTemplate === null || cmpTemplate === void 0 ? void 0 : cmpTemplate.legacyStylesheetToken : cmpTemplate === null || cmpTemplate === void 0 ? void 0 : cmpTemplate.stylesheetToken) || null;
4406
+ return context.hasScopedStyles && (legacy ? cmpTemplate?.legacyStylesheetToken : cmpTemplate?.stylesheetToken) || null;
4066
4407
  }
4067
4408
  /**
4068
4409
  * This function returns the host style token for a custom element if it
4069
4410
  * exists. Otherwise it returns null.
4070
4411
  *
4071
4412
  * A host style token is applied to the component if scoped styles are used.
4413
+ * @param vnode
4072
4414
  */
4073
4415
  function getStylesheetTokenHost(vnode) {
4074
4416
  const {
@@ -4145,6 +4487,9 @@ LWR.define('lwc/v/5_1_0', ['exports'], (function (exports) { 'use strict';
4145
4487
  function isVScopedSlotFragment(vnode) {
4146
4488
  return vnode.type === 6 /* VNodeType.ScopedSlotFragment */;
4147
4489
  }
4490
+ function isVStatic(vnode) {
4491
+ return vnode.type === 4 /* VNodeType.Static */;
4492
+ }
4148
4493
 
4149
4494
  /*
4150
4495
  * Copyright (c) 2018, salesforce.com, inc.
@@ -4198,6 +4543,26 @@ LWR.define('lwc/v/5_1_0', ['exports'], (function (exports) { 'use strict';
4198
4543
  }
4199
4544
  }
4200
4545
  }
4546
+ function patchSlotAssignment(oldVnode, vnode, renderer) {
4547
+ const {
4548
+ slotAssignment
4549
+ } = vnode;
4550
+ if (oldVnode?.slotAssignment === slotAssignment) {
4551
+ return;
4552
+ }
4553
+ const {
4554
+ elm
4555
+ } = vnode;
4556
+ const {
4557
+ setAttribute,
4558
+ removeAttribute
4559
+ } = renderer;
4560
+ if (isUndefined$1(slotAssignment) || isNull(slotAssignment)) {
4561
+ removeAttribute(elm, 'slot');
4562
+ } else {
4563
+ setAttribute(elm, 'slot', slotAssignment);
4564
+ }
4565
+ }
4201
4566
 
4202
4567
  /*
4203
4568
  * Copyright (c) 2018, salesforce.com, inc.
@@ -4269,6 +4634,8 @@ LWR.define('lwc/v/5_1_0', ['exports'], (function (exports) { 'use strict';
4269
4634
  return EmptyObject;
4270
4635
  }
4271
4636
  // computed class names must be string
4637
+ // This will throw if className is a symbol or null-prototype object
4638
+ // eslint-disable-next-line @typescript-eslint/restrict-plus-operands
4272
4639
  className = isString(className) ? className : className + '';
4273
4640
  let map = classNameToClassMap[className];
4274
4641
  if (map) {
@@ -4363,11 +4730,10 @@ LWR.define('lwc/v/5_1_0', ['exports'], (function (exports) { 'use strict';
4363
4730
  * For full license text, see the LICENSE file in the repo root or https://opensource.org/licenses/MIT
4364
4731
  */
4365
4732
  function applyEventListeners(vnode, renderer) {
4366
- var _a;
4367
4733
  const {
4368
4734
  elm
4369
4735
  } = vnode;
4370
- const on = (_a = vnode.data) === null || _a === void 0 ? void 0 : _a.on;
4736
+ const on = vnode.data?.on;
4371
4737
  if (isUndefined$1(on)) {
4372
4738
  return;
4373
4739
  }
@@ -4519,13 +4885,11 @@ LWR.define('lwc/v/5_1_0', ['exports'], (function (exports) { 'use strict';
4519
4885
  }
4520
4886
  /**
4521
4887
  * Given an array of static parts, do all the mounting required for these parts.
4522
- *
4523
- * @param root - the root element
4524
- * @param vnode - the parent VStatic
4525
- * @param renderer - the renderer to use
4526
- * @param mount - true this is a first (mount) render as opposed to a subsequent (patch) render
4888
+ * @param root the root element
4889
+ * @param vnode the parent VStatic
4890
+ * @param renderer the renderer to use
4527
4891
  */
4528
- function applyStaticParts(root, vnode, renderer, mount) {
4892
+ function mountStaticParts(root, vnode, renderer) {
4529
4893
  const {
4530
4894
  parts,
4531
4895
  owner
@@ -4533,20 +4897,45 @@ LWR.define('lwc/v/5_1_0', ['exports'], (function (exports) { 'use strict';
4533
4897
  if (isUndefined$1(parts)) {
4534
4898
  return;
4535
4899
  }
4536
- // This adds `part.elm` to each `part`. We have to do this on every mount/patch because the `parts`
4900
+ // This adds `part.elm` to each `part`. We have to do this on every mount because the `parts`
4537
4901
  // array is recreated from scratch every time, so each `part.elm` is now undefined.
4538
- // TODO [#3800]: avoid calling traverseAndSetElements on every re-render
4539
4902
  traverseAndSetElements(root, parts, renderer);
4540
4903
  // Currently only event listeners and refs are supported for static vnodes
4541
4904
  for (const part of parts) {
4542
- if (mount) {
4543
- // Event listeners only need to be applied once when mounting
4544
- applyEventListeners(part, renderer);
4545
- }
4905
+ // Event listeners only need to be applied once when mounting
4906
+ applyEventListeners(part, renderer);
4546
4907
  // Refs must be updated after every render due to refVNodes getting reset before every render
4547
4908
  applyRefs(part, owner);
4548
4909
  }
4549
4910
  }
4911
+ /**
4912
+ * Mounts elements to the newly generated VStatic node
4913
+ * @param n1 the previous VStatic vnode
4914
+ * @param n2 the current VStatic vnode
4915
+ */
4916
+ function patchStaticParts(n1, n2) {
4917
+ const {
4918
+ parts: currParts,
4919
+ owner: currPartsOwner
4920
+ } = n2;
4921
+ if (isUndefined$1(currParts)) {
4922
+ return;
4923
+ }
4924
+ const {
4925
+ parts: prevParts
4926
+ } = n1;
4927
+ if (process.env.NODE_ENV !== 'production') {
4928
+ assert.isTrue(currParts.length === prevParts?.length, 'Expected static parts to be the same for the same element. This is an error with the LWC framework itself.');
4929
+ }
4930
+ for (let i = 0; i < currParts.length; i++) {
4931
+ const part = currParts[i];
4932
+ // Patch only occurs if the vnode is newly generated, which means the part.elm is always undefined
4933
+ // Since the vnode and elements are the same we can safely assume that prevParts[i].elm is defined.
4934
+ part.elm = prevParts[i].elm;
4935
+ // Refs must be updated after every render due to refVNodes getting reset before every render
4936
+ applyRefs(part, currPartsOwner);
4937
+ }
4938
+ }
4550
4939
 
4551
4940
  /*
4552
4941
  * Copyright (c) 2018, salesforce.com, inc.
@@ -4562,7 +4951,6 @@ LWR.define('lwc/v/5_1_0', ['exports'], (function (exports) { 'use strict';
4562
4951
  }
4563
4952
  }
4564
4953
  function patch(n1, n2, parent, renderer) {
4565
- var _a, _b;
4566
4954
  if (n1 === n2) {
4567
4955
  return;
4568
4956
  }
@@ -4598,15 +4986,14 @@ LWR.define('lwc/v/5_1_0', ['exports'], (function (exports) { 'use strict';
4598
4986
  patchFragment(n1, n2, parent, renderer);
4599
4987
  break;
4600
4988
  case 2 /* VNodeType.Element */:
4601
- patchElement(n1, n2, (_a = n2.data.renderer) !== null && _a !== void 0 ? _a : renderer);
4989
+ patchElement(n1, n2, n2.data.renderer ?? renderer);
4602
4990
  break;
4603
4991
  case 3 /* VNodeType.CustomElement */:
4604
- patchCustomElement(n1, n2, parent, (_b = n2.data.renderer) !== null && _b !== void 0 ? _b : renderer);
4992
+ patchCustomElement(n1, n2, parent, n2.data.renderer ?? renderer);
4605
4993
  break;
4606
4994
  }
4607
4995
  }
4608
4996
  function mount(node, parent, renderer, anchor) {
4609
- var _a, _b;
4610
4997
  switch (node.type) {
4611
4998
  case 0 /* VNodeType.Text */:
4612
4999
  // VText has no special capability, fallback to the owner's renderer
@@ -4625,11 +5012,11 @@ LWR.define('lwc/v/5_1_0', ['exports'], (function (exports) { 'use strict';
4625
5012
  break;
4626
5013
  case 2 /* VNodeType.Element */:
4627
5014
  // If the vnode data has a renderer override use it, else fallback to owner's renderer
4628
- mountElement(node, parent, anchor, (_a = node.data.renderer) !== null && _a !== void 0 ? _a : renderer);
5015
+ mountElement(node, parent, anchor, node.data.renderer ?? renderer);
4629
5016
  break;
4630
5017
  case 3 /* VNodeType.CustomElement */:
4631
5018
  // If the vnode data has a renderer override use it, else fallback to owner's renderer
4632
- mountCustomElement(node, parent, anchor, (_b = node.data.renderer) !== null && _b !== void 0 ? _b : renderer);
5019
+ mountCustomElement(node, parent, anchor, node.data.renderer ?? renderer);
4633
5020
  break;
4634
5021
  }
4635
5022
  }
@@ -4711,9 +5098,11 @@ LWR.define('lwc/v/5_1_0', ['exports'], (function (exports) { 'use strict';
4711
5098
  mountVNodes(vnode.children, elm, renderer, null);
4712
5099
  }
4713
5100
  function patchStatic(n1, n2, renderer) {
4714
- const elm = n2.elm = n1.elm;
5101
+ n2.elm = n1.elm;
5102
+ // slotAssignments can only apply to the top level element, never to a static part.
5103
+ patchSlotAssignment(n1, n2, renderer);
4715
5104
  // The `refs` object is blown away in every re-render, so we always need to re-apply them
4716
- applyStaticParts(elm, n2, renderer, false);
5105
+ patchStaticParts(n1, n2);
4717
5106
  }
4718
5107
  function patchElement(n1, n2, renderer) {
4719
5108
  const elm = n2.elm = n1.elm;
@@ -4741,13 +5130,16 @@ LWR.define('lwc/v/5_1_0', ['exports'], (function (exports) { 'use strict';
4741
5130
  elm[KEY__SHADOW_STATIC] = true;
4742
5131
  }
4743
5132
  }
5133
+ // slotAssignments can only apply to the top level element, never to a static part.
5134
+ patchSlotAssignment(null, vnode, renderer);
4744
5135
  insertNode(elm, parent, anchor, renderer);
4745
- applyStaticParts(elm, vnode, renderer, true);
5136
+ mountStaticParts(elm, vnode, renderer);
4746
5137
  }
4747
5138
  function mountCustomElement(vnode, parent, anchor, renderer) {
4748
5139
  const {
4749
5140
  sel,
4750
- owner
5141
+ owner,
5142
+ ctor
4751
5143
  } = vnode;
4752
5144
  const {
4753
5145
  createCustomElement
@@ -4768,7 +5160,8 @@ LWR.define('lwc/v/5_1_0', ['exports'], (function (exports) { 'use strict';
4768
5160
  // compiler may generate tagnames with uppercase letters so - for backwards
4769
5161
  // compatibility, we lower case the tagname here.
4770
5162
  const normalizedTagname = sel.toLowerCase();
4771
- const elm = createCustomElement(normalizedTagname, upgradeCallback);
5163
+ const useNativeLifecycle = shouldUseNativeCustomElementLifecycle(ctor);
5164
+ const elm = createCustomElement(normalizedTagname, upgradeCallback, useNativeLifecycle);
4772
5165
  vnode.elm = elm;
4773
5166
  vnode.vm = vm;
4774
5167
  linkNodeToShadow(elm, owner, renderer);
@@ -4780,7 +5173,7 @@ LWR.define('lwc/v/5_1_0', ['exports'], (function (exports) { 'use strict';
4780
5173
  insertNode(elm, parent, anchor, renderer);
4781
5174
  if (vm) {
4782
5175
  {
4783
- if (!lwcRuntimeFlags.ENABLE_NATIVE_CUSTOM_ELEMENT_LIFECYCLE) {
5176
+ if (!useNativeLifecycle) {
4784
5177
  if (process.env.NODE_ENV !== 'production') {
4785
5178
  // With synthetic lifecycle callbacks, it's possible for elements to be removed without the engine
4786
5179
  // noticing it (e.g. `appendChild` the same host element twice). This test ensures we don't regress.
@@ -4985,6 +5378,7 @@ LWR.define('lwc/v/5_1_0', ['exports'], (function (exports) { 'use strict';
4985
5378
  patchStyleAttribute(oldVnode, vnode, renderer);
4986
5379
  patchAttributes(oldVnode, vnode, renderer);
4987
5380
  patchProps(oldVnode, vnode, renderer);
5381
+ patchSlotAssignment(oldVnode, vnode, renderer);
4988
5382
  // The `refs` object is blown away in every re-render, so we always need to re-apply them
4989
5383
  applyRefs(vnode, vnode.owner);
4990
5384
  }
@@ -5025,22 +5419,20 @@ LWR.define('lwc/v/5_1_0', ['exports'], (function (exports) { 'use strict';
5025
5419
  }
5026
5420
  }
5027
5421
  function applyDomManual(elm, vnode) {
5028
- var _a;
5029
5422
  const {
5030
5423
  owner,
5031
5424
  data: {
5032
5425
  context
5033
5426
  }
5034
5427
  } = vnode;
5035
- if (owner.shadowMode === 1 /* ShadowMode.Synthetic */ && ((_a = context === null || context === void 0 ? void 0 : context.lwc) === null || _a === void 0 ? void 0 : _a.dom) === "manual" /* LwcDomMode.Manual */) {
5428
+ if (owner.shadowMode === 1 /* ShadowMode.Synthetic */ && context?.lwc?.dom === "manual" /* LwcDomMode.Manual */) {
5036
5429
  elm.$domManual$ = true;
5037
5430
  }
5038
5431
  }
5039
5432
  function applyElementRestrictions(elm, vnode) {
5040
- var _a, _b;
5041
5433
  if (process.env.NODE_ENV !== 'production') {
5042
5434
  const isSynthetic = vnode.owner.shadowMode === 1 /* ShadowMode.Synthetic */;
5043
- const isPortal = vnode.type === 2 /* VNodeType.Element */ && ((_b = (_a = vnode.data.context) === null || _a === void 0 ? void 0 : _a.lwc) === null || _b === void 0 ? void 0 : _b.dom) === "manual" /* LwcDomMode.Manual */;
5435
+ const isPortal = vnode.type === 2 /* VNodeType.Element */ && vnode.data.context?.lwc?.dom === "manual" /* LwcDomMode.Manual */;
5044
5436
  const isLight = vnode.owner.renderMode === 0 /* RenderMode.Light */;
5045
5437
  patchElementWithRestrictions(elm, {
5046
5438
  isPortal,
@@ -5095,6 +5487,7 @@ LWR.define('lwc/v/5_1_0', ['exports'], (function (exports) { 'use strict';
5095
5487
  * With the delimiters removed, the contents are marked dynamic so they are diffed correctly.
5096
5488
  *
5097
5489
  * This function is used for slotted VFragments to avoid the text delimiters interfering with slotting functionality.
5490
+ * @param children
5098
5491
  */
5099
5492
  function flattenFragmentsInChildren(children) {
5100
5493
  const flattenedChildren = [];
@@ -5153,7 +5546,6 @@ LWR.define('lwc/v/5_1_0', ['exports'], (function (exports) { 'use strict';
5153
5546
  return vm;
5154
5547
  }
5155
5548
  function allocateInSlot(vm, children, owner) {
5156
- var _a, _b;
5157
5549
  const {
5158
5550
  cmpSlots: {
5159
5551
  slotAssignments: oldSlotsMapping
@@ -5167,8 +5559,8 @@ LWR.define('lwc/v/5_1_0', ['exports'], (function (exports) { 'use strict';
5167
5559
  continue;
5168
5560
  }
5169
5561
  let slotName = '';
5170
- if (isVBaseElement(vnode)) {
5171
- slotName = (_b = (_a = vnode.data.attrs) === null || _a === void 0 ? void 0 : _a.slot) !== null && _b !== void 0 ? _b : '';
5562
+ if (isVBaseElement(vnode) || isVStatic(vnode)) {
5563
+ slotName = vnode.slotAssignment ?? '';
5172
5564
  } else if (isVScopedSlotFragment(vnode)) {
5173
5565
  slotName = vnode.slotName;
5174
5566
  }
@@ -5176,6 +5568,7 @@ LWR.define('lwc/v/5_1_0', ['exports'], (function (exports) { 'use strict';
5176
5568
  // but elm.setAttribute('slot', Symbol(1)) is an error.
5177
5569
  // the following line also throws same error for symbols
5178
5570
  // Similar for Object.create(null)
5571
+ // eslint-disable-next-line @typescript-eslint/restrict-plus-operands
5179
5572
  const normalizedSlotName = '' + slotName;
5180
5573
  const vnodes = cmpSlotsMapping[normalizedSlotName] = cmpSlotsMapping[normalizedSlotName] || [];
5181
5574
  ArrayPush$1.call(vnodes, vnode);
@@ -5424,7 +5817,8 @@ LWR.define('lwc/v/5_1_0', ['exports'], (function (exports) { 'use strict';
5424
5817
  elm: undefined,
5425
5818
  fragment,
5426
5819
  owner,
5427
- parts
5820
+ parts,
5821
+ slotAssignment: undefined
5428
5822
  };
5429
5823
  return vnode;
5430
5824
  }
@@ -5466,8 +5860,11 @@ LWR.define('lwc/v/5_1_0', ['exports'], (function (exports) { 'use strict';
5466
5860
  }
5467
5861
  });
5468
5862
  }
5863
+ // TODO [#3974]: remove temporary logic to support v5 compiler + v6+ engine
5864
+ data = applyTemporaryCompilerV5SlotFix(data);
5469
5865
  const {
5470
- key
5866
+ key,
5867
+ slotAssignment
5471
5868
  } = data;
5472
5869
  const vnode = {
5473
5870
  type: 2 /* VNodeType.Element */,
@@ -5476,7 +5873,8 @@ LWR.define('lwc/v/5_1_0', ['exports'], (function (exports) { 'use strict';
5476
5873
  children,
5477
5874
  elm: undefined,
5478
5875
  key,
5479
- owner: vmBeingRendered
5876
+ owner: vmBeingRendered,
5877
+ slotAssignment
5480
5878
  };
5481
5879
  return vnode;
5482
5880
  }
@@ -5501,6 +5899,13 @@ LWR.define('lwc/v/5_1_0', ['exports'], (function (exports) { 'use strict';
5501
5899
  assert.isTrue(isObject(data), `s() 2nd argument data must be an object.`);
5502
5900
  assert.isTrue(isArray$1(children), `h() 3rd argument children must be an array.`);
5503
5901
  }
5902
+ const vmBeingRendered = getVMBeingRendered();
5903
+ const {
5904
+ renderMode,
5905
+ apiVersion
5906
+ } = vmBeingRendered;
5907
+ // TODO [#3974]: remove temporary logic to support v5 compiler + v6+ engine
5908
+ data = applyTemporaryCompilerV5SlotFix(data);
5504
5909
  if (!isUndefined$1(slotset) && !isUndefined$1(slotset.slotAssignments) && !isUndefined$1(slotset.slotAssignments[slotName]) && slotset.slotAssignments[slotName].length !== 0) {
5505
5910
  const newChildren = [];
5506
5911
  const slotAssignments = slotset.slotAssignments[slotName];
@@ -5520,7 +5925,6 @@ LWR.define('lwc/v/5_1_0', ['exports'], (function (exports) { 'use strict';
5520
5925
  }
5521
5926
  // If the passed slot content is factory, evaluate it and add the produced vnodes
5522
5927
  if (assignedNodeIsScopedSlot) {
5523
- const vmBeingRenderedInception = getVMBeingRendered();
5524
5928
  // Evaluate in the scope of the slot content's owner
5525
5929
  // if a slotset is provided, there will always be an owner. The only case where owner is
5526
5930
  // undefined is for root components, but root components cannot accept slotted content
@@ -5535,22 +5939,34 @@ LWR.define('lwc/v/5_1_0', ['exports'], (function (exports) { 'use strict';
5535
5939
  ArrayPush$1.call(newChildren, vnode.factory(data.slotData, data.key));
5536
5940
  });
5537
5941
  } finally {
5538
- setVMBeingRendered(vmBeingRenderedInception);
5942
+ setVMBeingRendered(vmBeingRendered);
5539
5943
  }
5540
5944
  } else {
5945
+ // This block is for standard slots (non-scoped slots)
5946
+ let clonedVNode;
5947
+ if (renderMode === 0 /* RenderMode.Light */ && isAPIFeatureEnabled(6 /* APIFeature.USE_LIGHT_DOM_SLOT_FORWARDING */, apiVersion) && (isVBaseElement(vnode) || isVStatic(vnode)) &&
5948
+ // We only need to copy the vnodes when the slot assignment changes, copying every time causes issues with
5949
+ // disconnected/connected callback firing.
5950
+ vnode.slotAssignment !== data.slotAssignment) {
5951
+ // When the light DOM slot assignment (slot attribute) changes we can't use the same reference
5952
+ // to the vnode because the current way the diffing algo works, it will replace the original reference
5953
+ // to the host element with a new one. This means the new element will be mounted and immediately unmounted.
5954
+ // Creating a copy of the vnode to preserve a reference to the previous host element.
5955
+ clonedVNode = {
5956
+ ...vnode,
5957
+ slotAssignment: data.slotAssignment
5958
+ };
5959
+ }
5541
5960
  // If the slot content is standard type, the content is static, no additional
5542
5961
  // processing needed on the vnode
5543
- ArrayPush$1.call(newChildren, vnode);
5962
+ ArrayPush$1.call(newChildren, clonedVNode ?? vnode);
5544
5963
  }
5545
5964
  }
5546
5965
  }
5547
5966
  children = newChildren;
5548
5967
  }
5549
- const vmBeingRendered = getVMBeingRendered();
5550
5968
  const {
5551
- renderMode,
5552
- shadowMode,
5553
- apiVersion
5969
+ shadowMode
5554
5970
  } = vmBeingRendered;
5555
5971
  if (renderMode === 0 /* RenderMode.Light */) {
5556
5972
  // light DOM slots - backwards-compatible behavior uses flattening, new behavior uses fragments
@@ -5589,8 +6005,11 @@ LWR.define('lwc/v/5_1_0', ['exports'], (function (exports) { 'use strict';
5589
6005
  });
5590
6006
  }
5591
6007
  }
6008
+ // TODO [#3974]: remove temporary logic to support v5 compiler + v6+ engine
6009
+ data = applyTemporaryCompilerV5SlotFix(data);
5592
6010
  const {
5593
- key
6011
+ key,
6012
+ slotAssignment
5594
6013
  } = data;
5595
6014
  let elm, aChildren, vm;
5596
6015
  const vnode = {
@@ -5600,9 +6019,11 @@ LWR.define('lwc/v/5_1_0', ['exports'], (function (exports) { 'use strict';
5600
6019
  children,
5601
6020
  elm,
5602
6021
  key,
6022
+ slotAssignment,
5603
6023
  ctor: Ctor,
5604
6024
  owner: vmBeingRendered,
5605
6025
  mode: 'open',
6026
+ // TODO [#1294]: this should be defined in Ctor
5606
6027
  aChildren,
5607
6028
  vm
5608
6029
  };
@@ -5681,6 +6102,7 @@ LWR.define('lwc/v/5_1_0', ['exports'], (function (exports) { 'use strict';
5681
6102
  }
5682
6103
  /**
5683
6104
  * [f]lattening
6105
+ * @param items
5684
6106
  */
5685
6107
  function f(items) {
5686
6108
  if (process.env.NODE_ENV !== 'production') {
@@ -5802,6 +6224,10 @@ LWR.define('lwc/v/5_1_0', ['exports'], (function (exports) { 'use strict';
5802
6224
  * [ddc] - create a (deprecated) dynamic component via `<x-foo lwc:dynamic={Ctor}>`
5803
6225
  *
5804
6226
  * TODO [#3331]: remove usage of lwc:dynamic in 246
6227
+ * @param sel
6228
+ * @param Ctor
6229
+ * @param data
6230
+ * @param children
5805
6231
  */
5806
6232
  function ddc(sel, Ctor, data, children = EmptyArray) {
5807
6233
  if (process.env.NODE_ENV !== 'production') {
@@ -5820,6 +6246,9 @@ LWR.define('lwc/v/5_1_0', ['exports'], (function (exports) { 'use strict';
5820
6246
  }
5821
6247
  /**
5822
6248
  * [dc] - create a dynamic component via `<lwc:component lwc:is={Ctor}>`
6249
+ * @param Ctor
6250
+ * @param data
6251
+ * @param children
5823
6252
  */
5824
6253
  function dc(Ctor, data, children = EmptyArray) {
5825
6254
  if (process.env.NODE_ENV !== 'production') {
@@ -5847,13 +6276,13 @@ LWR.define('lwc/v/5_1_0', ['exports'], (function (exports) { 'use strict';
5847
6276
  * to the engine that a particular collection of children must be diffed using the slow
5848
6277
  * algo based on keys due to the nature of the list. E.g.:
5849
6278
  *
5850
- * - slot element's children: the content of the slot has to be dynamic when in synthetic
5851
- * shadow mode because the `vnode.children` might be the slotted
5852
- * content vs default content, in which case the size and the
5853
- * keys are not matching.
5854
- * - children that contain dynamic components
5855
- * - children that are produced by iteration
5856
- *
6279
+ * - slot element's children: the content of the slot has to be dynamic when in synthetic
6280
+ * shadow mode because the `vnode.children` might be the slotted
6281
+ * content vs default content, in which case the size and the
6282
+ * keys are not matching.
6283
+ * - children that contain dynamic components
6284
+ * - children that are produced by iteration
6285
+ * @param vnodes
5857
6286
  */
5858
6287
  function sc(vnodes) {
5859
6288
  if (process.env.NODE_ENV !== 'production') {
@@ -5877,6 +6306,7 @@ LWR.define('lwc/v/5_1_0', ['exports'], (function (exports) { 'use strict';
5877
6306
  };
5878
6307
  /**
5879
6308
  * Sets the sanitizeHtmlContentHook.
6309
+ * @param newHookImpl
5880
6310
  */
5881
6311
  function setSanitizeHtmlContentHook(newHookImpl) {
5882
6312
  sanitizeHtmlContentHook = newHookImpl;
@@ -5989,7 +6419,7 @@ LWR.define('lwc/v/5_1_0', ['exports'], (function (exports) { 'use strict';
5989
6419
  start(markName);
5990
6420
  }
5991
6421
  if (isProfilerEnabled) {
5992
- currentDispatcher(opId, 0 /* Phase.Start */, vm === null || vm === void 0 ? void 0 : vm.tagName, vm === null || vm === void 0 ? void 0 : vm.idx, vm === null || vm === void 0 ? void 0 : vm.renderMode, vm === null || vm === void 0 ? void 0 : vm.shadowMode);
6422
+ currentDispatcher(opId, 0 /* Phase.Start */, vm?.tagName, vm?.idx, vm?.renderMode, vm?.shadowMode);
5993
6423
  }
5994
6424
  }
5995
6425
  function logGlobalOperationEnd(opId, vm) {
@@ -5999,7 +6429,7 @@ LWR.define('lwc/v/5_1_0', ['exports'], (function (exports) { 'use strict';
5999
6429
  end(opName, markName);
6000
6430
  }
6001
6431
  if (isProfilerEnabled) {
6002
- currentDispatcher(opId, 1 /* Phase.Stop */, vm === null || vm === void 0 ? void 0 : vm.tagName, vm === null || vm === void 0 ? void 0 : vm.idx, vm === null || vm === void 0 ? void 0 : vm.renderMode, vm === null || vm === void 0 ? void 0 : vm.shadowMode);
6432
+ currentDispatcher(opId, 1 /* Phase.Stop */, vm?.tagName, vm?.idx, vm?.renderMode, vm?.shadowMode);
6003
6433
  }
6004
6434
  }
6005
6435
 
@@ -6023,7 +6453,6 @@ LWR.define('lwc/v/5_1_0', ['exports'], (function (exports) { 'use strict';
6023
6453
  cmpSlots
6024
6454
  } = vm;
6025
6455
  for (const slotName in cmpSlots.slotAssignments) {
6026
- // eslint-disable-next-line @lwc/lwc-internal/no-production-assert
6027
6456
  assert.isTrue(isArray$1(cmpSlots.slotAssignments[slotName]), `Slots can only be set to an array, instead received ${toString$1(cmpSlots.slotAssignments[slotName])} for slot "${slotName}" in ${vm}.`);
6028
6457
  }
6029
6458
  }
@@ -6122,7 +6551,6 @@ LWR.define('lwc/v/5_1_0', ['exports'], (function (exports) { 'use strict';
6122
6551
  });
6123
6552
  function evaluateTemplate(vm, html) {
6124
6553
  if (process.env.NODE_ENV !== 'production') {
6125
- assert.isTrue(isFunction$1(html), `evaluateTemplate() second argument must be an imported template instead of ${toString$1(html)}`);
6126
6554
  // in dev-mode, we support hot swapping of templates, which means that
6127
6555
  // the component instance might be attempting to use an old version of
6128
6556
  // the template, while internally, we have a replacement for it.
@@ -6147,6 +6575,10 @@ LWR.define('lwc/v/5_1_0', ['exports'], (function (exports) { 'use strict';
6147
6575
  tro.observe(() => {
6148
6576
  // Reset the cache memoizer for template when needed.
6149
6577
  if (html !== cmpTemplate) {
6578
+ // Check that the template was built by the compiler.
6579
+ if (!isTemplateRegistered(html)) {
6580
+ throw new TypeError(`Invalid template returned by the render() method on ${vm.tagName}. It must return an imported template (e.g.: \`import html from "./${vm.def.name}.html"\`), instead, it has returned: ${toString$1(html)}.`);
6581
+ }
6150
6582
  if (process.env.NODE_ENV !== 'production') {
6151
6583
  validateLightDomTemplate(html, vm);
6152
6584
  }
@@ -6158,10 +6590,6 @@ LWR.define('lwc/v/5_1_0', ['exports'], (function (exports) { 'use strict';
6158
6590
  // and snabbdom just rely on the IDs.
6159
6591
  resetComponentRoot(vm);
6160
6592
  }
6161
- // Check that the template was built by the compiler.
6162
- if (!isTemplateRegistered(html)) {
6163
- throw new TypeError(`Invalid template returned by the render() method on ${vm}. It must return an imported template (e.g.: \`import html from "./${vm.def.name}.html"\`), instead, it has returned: ${toString$1(html)}.`);
6164
- }
6165
6593
  vm.cmpTemplate = html;
6166
6594
  // Create a brand new template cache for the swapped templated.
6167
6595
  context.tplCache = create(null);
@@ -6338,6 +6766,8 @@ LWR.define('lwc/v/5_1_0', ['exports'], (function (exports) { 'use strict';
6338
6766
  /**
6339
6767
  * INTERNAL: This function can only be invoked by compiled code. The compiler
6340
6768
  * will prevent this function from being imported by userland code.
6769
+ * @param Ctor
6770
+ * @param metadata
6341
6771
  */
6342
6772
  function registerComponent(
6343
6773
  // We typically expect a LightningElementConstructor, but technically you can call this with anything
@@ -6356,16 +6786,14 @@ LWR.define('lwc/v/5_1_0', ['exports'], (function (exports) { 'use strict';
6356
6786
  return Ctor;
6357
6787
  }
6358
6788
  function getComponentRegisteredTemplate(Ctor) {
6359
- var _a;
6360
- return (_a = registeredComponentMap.get(Ctor)) === null || _a === void 0 ? void 0 : _a.tmpl;
6789
+ return registeredComponentMap.get(Ctor)?.tmpl;
6361
6790
  }
6362
6791
  function getComponentRegisteredName(Ctor) {
6363
- var _a;
6364
- return (_a = registeredComponentMap.get(Ctor)) === null || _a === void 0 ? void 0 : _a.sel;
6792
+ return registeredComponentMap.get(Ctor)?.sel;
6365
6793
  }
6366
6794
  function getComponentAPIVersion(Ctor) {
6367
6795
  const metadata = registeredComponentMap.get(Ctor);
6368
- const apiVersion = metadata === null || metadata === void 0 ? void 0 : metadata.apiVersion;
6796
+ const apiVersion = metadata?.apiVersion;
6369
6797
  if (isUndefined$1(apiVersion)) {
6370
6798
  // This should only occur in our Karma tests; in practice every component
6371
6799
  // is registered, and so this code path should not get hit. But to be safe,
@@ -6385,11 +6813,30 @@ LWR.define('lwc/v/5_1_0', ['exports'], (function (exports) { 'use strict';
6385
6813
  }
6386
6814
  });
6387
6815
  }
6816
+ function resetTemplateObserverAndUnsubscribe(vm) {
6817
+ const {
6818
+ tro,
6819
+ component
6820
+ } = vm;
6821
+ tro.reset();
6822
+ // Unsubscribe every time the template reactive observer is reset.
6823
+ if (lwcRuntimeFlags.ENABLE_EXPERIMENTAL_SIGNALS) {
6824
+ unsubscribeFromSignals(component);
6825
+ }
6826
+ }
6388
6827
  function renderComponent(vm) {
6389
6828
  if (process.env.NODE_ENV !== 'production') {
6390
6829
  assert.invariant(vm.isDirty, `${vm} is not dirty.`);
6391
6830
  }
6392
- vm.tro.reset();
6831
+ // The engine should only hold a subscription to a signal if it is rendered in the template.
6832
+ // Because of the potential presence of conditional rendering logic, we unsubscribe on each render
6833
+ // in the scenario where it is present in one condition but not the other.
6834
+ // For example:
6835
+ // 1. There is an lwc:if=true conditional where the signal is present on the template.
6836
+ // 2. The lwc:if changes to false and the signal is no longer present on the template.
6837
+ // If the signal is still subscribed to, the template will re-render when it receives a notification
6838
+ // from the signal, even though we won't be using the new value.
6839
+ resetTemplateObserverAndUnsubscribe(vm);
6393
6840
  const vnodes = invokeComponentRenderMethod(vm);
6394
6841
  vm.isDirty = false;
6395
6842
  vm.isScheduled = false;
@@ -6466,11 +6913,8 @@ LWR.define('lwc/v/5_1_0', ['exports'], (function (exports) { 'use strict';
6466
6913
  state
6467
6914
  } = vm;
6468
6915
  if (state !== 2 /* VMState.disconnected */) {
6469
- const {
6470
- tro
6471
- } = vm;
6472
6916
  // Making sure that any observing record will not trigger the rehydrated on this vm
6473
- tro.reset();
6917
+ resetTemplateObserverAndUnsubscribe(vm);
6474
6918
  runDisconnectedCallback(vm);
6475
6919
  // Spec: https://dom.spec.whatwg.org/#concept-node-remove (step 14-15)
6476
6920
  runChildNodesDisconnectedCallback(vm);
@@ -6481,7 +6925,7 @@ LWR.define('lwc/v/5_1_0', ['exports'], (function (exports) { 'use strict';
6481
6925
  // old vnode.children is removed from the DOM.
6482
6926
  function removeVM(vm) {
6483
6927
  if (process.env.NODE_ENV !== 'production') {
6484
- if (!lwcRuntimeFlags.ENABLE_NATIVE_CUSTOM_ELEMENT_LIFECYCLE) {
6928
+ if (!shouldUseNativeCustomElementLifecycle(vm.component.constructor)) {
6485
6929
  // With native lifecycle, we cannot be certain that connectedCallback was called before a component
6486
6930
  // was removed from the VDOM. If the component is disconnected, then connectedCallback will not fire
6487
6931
  // in native mode, although it will fire in synthetic mode due to appendChild triggering it.
@@ -6545,6 +6989,7 @@ LWR.define('lwc/v/5_1_0', ['exports'], (function (exports) { 'use strict';
6545
6989
  // Properties set right after VM creation.
6546
6990
  tro: null,
6547
6991
  shadowMode: null,
6992
+ shadowMigrateMode: false,
6548
6993
  stylesheets: null,
6549
6994
  // Properties set by the LightningElement constructor.
6550
6995
  component: null,
@@ -6560,8 +7005,21 @@ LWR.define('lwc/v/5_1_0', ['exports'], (function (exports) { 'use strict';
6560
7005
  vm.debugInfo = create(null);
6561
7006
  }
6562
7007
  vm.stylesheets = computeStylesheets(vm, def.ctor);
6563
- vm.shadowMode = computeShadowMode(def, vm.owner, renderer);
7008
+ const computedShadowMode = computeShadowMode(def, vm.owner, renderer, hydrated);
7009
+ if (lwcRuntimeFlags.ENABLE_FORCE_SHADOW_MIGRATE_MODE) {
7010
+ vm.shadowMode = 0 /* ShadowMode.Native */;
7011
+ vm.shadowMigrateMode = computedShadowMode === 1 /* ShadowMode.Synthetic */;
7012
+ } else {
7013
+ vm.shadowMode = computedShadowMode;
7014
+ }
6564
7015
  vm.tro = getTemplateReactiveObserver(vm);
7016
+ // We don't need to report the shadow mode if we're rendering in light DOM
7017
+ if (isReportingEnabled() && vm.renderMode === 1 /* RenderMode.Shadow */) {
7018
+ report("ShadowModeUsage" /* ReportingEventId.ShadowModeUsage */, {
7019
+ tagName: vm.tagName,
7020
+ mode: vm.shadowMode
7021
+ });
7022
+ }
6565
7023
  if (process.env.NODE_ENV !== 'production') {
6566
7024
  vm.toString = () => {
6567
7025
  return `[object:vm ${def.name} (${vm.idx})]`;
@@ -6635,44 +7093,45 @@ LWR.define('lwc/v/5_1_0', ['exports'], (function (exports) { 'use strict';
6635
7093
  renderMode
6636
7094
  } = def;
6637
7095
  // Assume null `owner` - this is what happens in hydration cases anyway
6638
- const shadowMode = computeShadowMode(def, /* owner */null, renderer);
7096
+ // Also assume we are not in hydration mode for this exported API
7097
+ const shadowMode = computeShadowMode(def, /* owner */null, renderer, false);
6639
7098
  return {
6640
7099
  renderMode,
6641
7100
  shadowMode
6642
7101
  };
6643
7102
  }
6644
- function computeShadowMode(def, owner, renderer) {
7103
+ function computeShadowMode(def, owner, renderer, hydrated) {
6645
7104
  // Force the shadow mode to always be native. Used for running tests with synthetic shadow patches
6646
7105
  // on, but components running in actual native shadow mode
6647
7106
  if (process.env.NODE_ENV !== 'production' && lwcRuntimeFlags.ENABLE_FORCE_NATIVE_SHADOW_MODE_FOR_TEST) {
6648
7107
  return 0 /* ShadowMode.Native */;
6649
7108
  }
7109
+ if (isTrue(hydrated)) {
7110
+ // hydration only supports native shadow
7111
+ return 0 /* ShadowMode.Native */;
7112
+ }
6650
7113
  const {
6651
7114
  isSyntheticShadowDefined
6652
7115
  } = renderer;
6653
7116
  let shadowMode;
6654
- if (isSyntheticShadowDefined) {
7117
+ if (isSyntheticShadowDefined || lwcRuntimeFlags.ENABLE_FORCE_SHADOW_MIGRATE_MODE) {
6655
7118
  if (def.renderMode === 0 /* RenderMode.Light */) {
6656
7119
  // ShadowMode.Native implies "not synthetic shadow" which is consistent with how
6657
7120
  // everything defaults to native when the synthetic shadow polyfill is unavailable.
6658
7121
  shadowMode = 0 /* ShadowMode.Native */;
6659
- } else if (lwcRuntimeFlags.ENABLE_MIXED_SHADOW_MODE || def.shadowSupportMode === "native" /* ShadowSupportMode.Native */) {
6660
- if (def.shadowSupportMode === "any" /* ShadowSupportMode.Any */ || def.shadowSupportMode === "native" /* ShadowSupportMode.Native */) {
7122
+ } else if (def.shadowSupportMode === "native" /* ShadowSupportMode.Native */) {
7123
+ shadowMode = 0 /* ShadowMode.Native */;
7124
+ } else {
7125
+ const shadowAncestor = getNearestShadowAncestor(owner);
7126
+ if (!isNull(shadowAncestor) && shadowAncestor.shadowMode === 0 /* ShadowMode.Native */) {
7127
+ // Transitive support for native Shadow DOM. A component in native mode
7128
+ // transitively opts all of its descendants into native.
6661
7129
  shadowMode = 0 /* ShadowMode.Native */;
6662
7130
  } else {
6663
- const shadowAncestor = getNearestShadowAncestor(owner);
6664
- if (!isNull(shadowAncestor) && shadowAncestor.shadowMode === 0 /* ShadowMode.Native */) {
6665
- // Transitive support for native Shadow DOM. A component in native mode
6666
- // transitively opts all of its descendants into native.
6667
- shadowMode = 0 /* ShadowMode.Native */;
6668
- } else {
6669
- // Synthetic if neither this component nor any of its ancestors are configured
6670
- // to be native.
6671
- shadowMode = 1 /* ShadowMode.Synthetic */;
6672
- }
7131
+ // Synthetic if neither this component nor any of its ancestors are configured
7132
+ // to be native.
7133
+ shadowMode = 1 /* ShadowMode.Synthetic */;
6673
7134
  }
6674
- } else {
6675
- shadowMode = 1 /* ShadowMode.Synthetic */;
6676
7135
  }
6677
7136
  } else {
6678
7137
  // Native if the synthetic shadow polyfill is unavailable.
@@ -6681,7 +7140,7 @@ LWR.define('lwc/v/5_1_0', ['exports'], (function (exports) { 'use strict';
6681
7140
  return shadowMode;
6682
7141
  }
6683
7142
  function assertIsVM(obj) {
6684
- if (isNull(obj) || !isObject(obj) || !('renderRoot' in obj)) {
7143
+ if (!isObject(obj) || isNull(obj) || !('renderRoot' in obj)) {
6685
7144
  throw new TypeError(`${obj} is not a VM.`);
6686
7145
  }
6687
7146
  }
@@ -6780,7 +7239,7 @@ LWR.define('lwc/v/5_1_0', ['exports'], (function (exports) { 'use strict';
6780
7239
  logGlobalOperationEnd(8 /* OperationId.GlobalRehydrate */);
6781
7240
  // re-throwing the original error will break the current tick, but since the next tick is
6782
7241
  // already scheduled, it should continue patching the rest.
6783
- throw error; // eslint-disable-line no-unsafe-finally
7242
+ throw error;
6784
7243
  }
6785
7244
  }
6786
7245
  logGlobalOperationEnd(8 /* OperationId.GlobalRehydrate */);
@@ -6806,7 +7265,7 @@ LWR.define('lwc/v/5_1_0', ['exports'], (function (exports) { 'use strict';
6806
7265
  }
6807
7266
  // This test only makes sense in the browser, with synthetic lifecycle, and when reporting is enabled or
6808
7267
  // we're in dev mode. This is to detect a particular issue with synthetic lifecycle.
6809
- if (!lwcRuntimeFlags.ENABLE_NATIVE_CUSTOM_ELEMENT_LIFECYCLE && (process.env.NODE_ENV !== 'production' || isReportingEnabled())) {
7268
+ if (!shouldUseNativeCustomElementLifecycle(vm.component.constructor) && (process.env.NODE_ENV !== 'production' || isReportingEnabled())) {
6810
7269
  if (!vm.renderer.isConnected(vm.elm)) {
6811
7270
  if (process.env.NODE_ENV !== 'production') {
6812
7271
  logWarnOnce(`Element <${vm.tagName}> ` + `fired a \`connectedCallback\` and rendered, but was not connected to the DOM. ` + `Please ensure all components are actually connected to the DOM, e.g. using ` + `\`document.body.appendChild(element)\`. This will not be supported in future versions of ` + `LWC and could cause component errors. For details, see: https://sfdc.co/synthetic-lifecycle`);
@@ -6884,6 +7343,7 @@ LWR.define('lwc/v/5_1_0', ['exports'], (function (exports) { 'use strict';
6884
7343
  * need to continue into its children because by attempting to disconnect the
6885
7344
  * custom element itself will trigger the removal of anything slotted or anything
6886
7345
  * defined on its shadow.
7346
+ * @param vnodes
6887
7347
  */
6888
7348
  function recursivelyDisconnectChildren(vnodes) {
6889
7349
  for (let i = 0, len = vnodes.length; i < len; i += 1) {
@@ -7076,12 +7536,12 @@ LWR.define('lwc/v/5_1_0', ['exports'], (function (exports) { 'use strict';
7076
7536
  // See: https://sfdc.co/synthetic-aria
7077
7537
  //
7078
7538
  // Use the unpatched native getElementById/querySelectorAll rather than the synthetic one
7079
- const getElementById = _globalThis[KEY__NATIVE_GET_ELEMENT_BY_ID];
7080
- const querySelectorAll = _globalThis[KEY__NATIVE_QUERY_SELECTOR_ALL];
7539
+ const getElementById = globalThis[KEY__NATIVE_GET_ELEMENT_BY_ID];
7540
+ const querySelectorAll = globalThis[KEY__NATIVE_QUERY_SELECTOR_ALL];
7081
7541
  // This is a "handoff" from synthetic-shadow to engine-core – we want to clean up after ourselves
7082
7542
  // so nobody else can misuse these global APIs.
7083
- delete _globalThis[KEY__NATIVE_GET_ELEMENT_BY_ID];
7084
- delete _globalThis[KEY__NATIVE_QUERY_SELECTOR_ALL];
7543
+ delete globalThis[KEY__NATIVE_GET_ELEMENT_BY_ID];
7544
+ delete globalThis[KEY__NATIVE_QUERY_SELECTOR_ALL];
7085
7545
  function isSyntheticShadowRootInstance(rootNode) {
7086
7546
  return rootNode !== document && isTrue(rootNode.synthetic);
7087
7547
  }
@@ -7269,7 +7729,7 @@ LWR.define('lwc/v/5_1_0', ['exports'], (function (exports) { 'use strict';
7269
7729
  setValueType = isNull(setValue) ? 'null' : typeof setValue;
7270
7730
  }
7271
7731
  report("NonStandardAriaReflection" /* ReportingEventId.NonStandardAriaReflection */, {
7272
- tagName: vm === null || vm === void 0 ? void 0 : vm.tagName,
7732
+ tagName: vm?.tagName,
7273
7733
  propertyName: prop,
7274
7734
  isSetter,
7275
7735
  setValueType
@@ -7354,7 +7814,6 @@ LWR.define('lwc/v/5_1_0', ['exports'], (function (exports) { 'use strict';
7354
7814
  runRenderedCallback(vm);
7355
7815
  }
7356
7816
  function hydrateNode(node, vnode, renderer) {
7357
- var _a, _b;
7358
7817
  let hydratedNode;
7359
7818
  switch (vnode.type) {
7360
7819
  case 0 /* VNodeType.Text */:
@@ -7374,10 +7833,10 @@ LWR.define('lwc/v/5_1_0', ['exports'], (function (exports) { 'use strict';
7374
7833
  hydratedNode = hydrateFragment(node, vnode, renderer);
7375
7834
  break;
7376
7835
  case 2 /* VNodeType.Element */:
7377
- hydratedNode = hydrateElement(node, vnode, (_a = vnode.data.renderer) !== null && _a !== void 0 ? _a : renderer);
7836
+ hydratedNode = hydrateElement(node, vnode, vnode.data.renderer ?? renderer);
7378
7837
  break;
7379
7838
  case 3 /* VNodeType.CustomElement */:
7380
- hydratedNode = hydrateCustomElement(node, vnode, (_b = vnode.data.renderer) !== null && _b !== void 0 ? _b : renderer);
7839
+ hydratedNode = hydrateCustomElement(node, vnode, vnode.data.renderer ?? renderer);
7381
7840
  break;
7382
7841
  }
7383
7842
  return renderer.nextSibling(hydratedNode);
@@ -7422,7 +7881,6 @@ LWR.define('lwc/v/5_1_0', ['exports'], (function (exports) { 'use strict';
7422
7881
  return _attrName => true;
7423
7882
  }
7424
7883
  function hydrateText(node, vnode, renderer) {
7425
- var _a;
7426
7884
  if (!hasCorrectNodeType(vnode, node, 3 /* EnvNodeTypes.TEXT */, renderer)) {
7427
7885
  return handleMismatch(node, vnode, renderer);
7428
7886
  }
@@ -7434,12 +7892,11 @@ LWR.define('lwc/v/5_1_0', ['exports'], (function (exports) { 'use strict';
7434
7892
  const {
7435
7893
  setText
7436
7894
  } = renderer;
7437
- setText(node, (_a = vnode.text) !== null && _a !== void 0 ? _a : null);
7895
+ setText(node, vnode.text ?? null);
7438
7896
  vnode.elm = node;
7439
7897
  return node;
7440
7898
  }
7441
7899
  function hydrateComment(node, vnode, renderer) {
7442
- var _a;
7443
7900
  if (!hasCorrectNodeType(vnode, node, 8 /* EnvNodeTypes.COMMENT */, renderer)) {
7444
7901
  return handleMismatch(node, vnode, renderer);
7445
7902
  }
@@ -7455,7 +7912,7 @@ LWR.define('lwc/v/5_1_0', ['exports'], (function (exports) { 'use strict';
7455
7912
  const {
7456
7913
  setProperty
7457
7914
  } = renderer;
7458
- setProperty(node, NODE_VALUE_PROP, (_a = vnode.text) !== null && _a !== void 0 ? _a : null);
7915
+ setProperty(node, NODE_VALUE_PROP, vnode.text ?? null);
7459
7916
  vnode.elm = node;
7460
7917
  return node;
7461
7918
  }
@@ -7464,7 +7921,7 @@ LWR.define('lwc/v/5_1_0', ['exports'], (function (exports) { 'use strict';
7464
7921
  return handleMismatch(elm, vnode, renderer);
7465
7922
  }
7466
7923
  vnode.elm = elm;
7467
- applyStaticParts(elm, vnode, renderer, true);
7924
+ mountStaticParts(elm, vnode, renderer);
7468
7925
  return elm;
7469
7926
  }
7470
7927
  function hydrateFragment(elm, vnode, renderer) {
@@ -7501,9 +7958,10 @@ LWR.define('lwc/v/5_1_0', ['exports'], (function (exports) { 'use strict';
7501
7958
  if (!isUndefined$1(props) && !isUndefined$1(props.innerHTML)) {
7502
7959
  if (getProperty(elm, 'innerHTML') === props.innerHTML) {
7503
7960
  // Do a shallow clone since VNodeData may be shared across VNodes due to hoist optimization
7504
- vnode.data = Object.assign(Object.assign({}, vnode.data), {
7961
+ vnode.data = {
7962
+ ...vnode.data,
7505
7963
  props: cloneAndOmitKey(props, 'innerHTML')
7506
- });
7964
+ };
7507
7965
  } else {
7508
7966
  if (process.env.NODE_ENV !== 'production') {
7509
7967
  logWarn(`Mismatch hydrating element <${getProperty(elm, 'tagName').toLowerCase()}>: innerHTML values do not match for element, will recover from the difference`, owner);
@@ -7750,11 +8208,15 @@ LWR.define('lwc/v/5_1_0', ['exports'], (function (exports) { 'use strict';
7750
8208
  const classNames = ArrayFilter.call(classTokens, token => !isNull(token));
7751
8209
  className = ArrayJoin.call(classNames, ' ');
7752
8210
  } else if (!isUndefined$1(classMap)) {
7753
- classMap = Object.assign(Object.assign(Object.assign({}, classMap), !isNull(scopedToken) ? {
7754
- [scopedToken]: true
7755
- } : {}), !isNull(stylesheetTokenHost) ? {
7756
- [stylesheetTokenHost]: true
7757
- } : {});
8211
+ classMap = {
8212
+ ...classMap,
8213
+ ...(!isNull(scopedToken) ? {
8214
+ [scopedToken]: true
8215
+ } : {}),
8216
+ ...(!isNull(stylesheetTokenHost) ? {
8217
+ [stylesheetTokenHost]: true
8218
+ } : {})
8219
+ };
7758
8220
  } else {
7759
8221
  // The order of the className should be scopedToken stylesheetTokenHost
7760
8222
  const classTokens = [scopedToken, stylesheetTokenHost];
@@ -8105,6 +8567,7 @@ LWR.define('lwc/v/5_1_0', ['exports'], (function (exports) { 'use strict';
8105
8567
  /**
8106
8568
  * EXPERIMENTAL: This function provides access to the component constructor, given an HTMLElement.
8107
8569
  * This API is subject to change or being removed.
8570
+ * @param elm
8108
8571
  */
8109
8572
  function getComponentConstructor(elm) {
8110
8573
  let ctor = null;
@@ -8129,6 +8592,7 @@ LWR.define('lwc/v/5_1_0', ['exports'], (function (exports) { 'use strict';
8129
8592
  * EXPERIMENTAL: This function allows you to create a reactive readonly
8130
8593
  * membrane around any object value. This API is subject to change or
8131
8594
  * being removed.
8595
+ * @param obj
8132
8596
  */
8133
8597
  function readonly(obj) {
8134
8598
  if (process.env.NODE_ENV !== 'production') {
@@ -8139,7 +8603,7 @@ LWR.define('lwc/v/5_1_0', ['exports'], (function (exports) { 'use strict';
8139
8603
  }
8140
8604
  return getReadOnlyProxy(obj);
8141
8605
  }
8142
- /** version: 5.1.0 */
8606
+ /** version: 6.2.1 */
8143
8607
 
8144
8608
  /*
8145
8609
  * Copyright (c) 2018, salesforce.com, inc.
@@ -8149,8 +8613,7 @@ LWR.define('lwc/v/5_1_0', ['exports'], (function (exports) { 'use strict';
8149
8613
  */
8150
8614
  /**
8151
8615
  * Displays the header for a custom element.
8152
- *
8153
- * @param ce the custom element
8616
+ * @param ce The custom element to get the header for.
8154
8617
  * @param componentInstance component instance associated with the custom element.
8155
8618
  */
8156
8619
  function getHeaderForCustomElement(ce, componentInstance) {
@@ -8210,9 +8673,9 @@ LWR.define('lwc/v/5_1_0', ['exports'], (function (exports) { 'use strict';
8210
8673
  * For full license text, see the LICENSE file in the repo root or https://opensource.org/licenses/MIT
8211
8674
  */
8212
8675
  function init() {
8213
- const devtoolsFormatters = _globalThis.devtoolsFormatters || [];
8676
+ const devtoolsFormatters = globalThis.devtoolsFormatters || [];
8214
8677
  ArrayPush$1.call(devtoolsFormatters, LightningElementFormatter);
8215
- _globalThis.devtoolsFormatters = devtoolsFormatters;
8678
+ globalThis.devtoolsFormatters = devtoolsFormatters;
8216
8679
  }
8217
8680
  if (process.env.NODE_ENV !== 'production') {
8218
8681
  init();
@@ -8246,6 +8709,8 @@ LWR.define('lwc/v/5_1_0', ['exports'], (function (exports) { 'use strict';
8246
8709
  const elm = document.createElement('style');
8247
8710
  elm.type = 'text/css';
8248
8711
  elm.textContent = content;
8712
+ // Add an attribute to distinguish global styles added by LWC as opposed to other frameworks/libraries on the page
8713
+ elm.setAttribute('data-rendered-by-lwc', '');
8249
8714
  return elm;
8250
8715
  }
8251
8716
  function createStyleElement(content, cacheData) {
@@ -8352,17 +8817,17 @@ LWR.define('lwc/v/5_1_0', ['exports'], (function (exports) { 'use strict';
8352
8817
  * SPDX-License-Identifier: MIT
8353
8818
  * For full license text, see the LICENSE file in the repo root or https://opensource.org/licenses/MIT
8354
8819
  */
8355
- const cachedConstructors = new Map();
8356
- const elementsUpgradedOutsideLWC = new WeakSet();
8357
- let elementBeingUpgradedByLWC = false;
8358
- const lifecycleCallbacks = lwcRuntimeFlags.ENABLE_NATIVE_CUSTOM_ELEMENT_LIFECYCLE ? {
8820
+ const LIFECYCLE_CALLBACKS = {
8359
8821
  connectedCallback: connectRootElement,
8360
8822
  disconnectedCallback: disconnectRootElement,
8361
8823
  formAssociatedCallback: runFormAssociatedCallback,
8362
8824
  formDisabledCallback: runFormDisabledCallback,
8363
8825
  formResetCallback: runFormResetCallback,
8364
8826
  formStateRestoreCallback: runFormStateRestoreCallback
8365
- } : undefined;
8827
+ };
8828
+ const cachedConstructors = new Map();
8829
+ const nativeLifecycleElementsToUpgradedByLWC = new WeakMap();
8830
+ let elementBeingUpgradedByLWC = false;
8366
8831
  // Creates a constructor that is intended to be used directly as a custom element, except that the upgradeCallback is
8367
8832
  // passed in to the constructor so LWC can reuse the same custom element constructor for multiple components.
8368
8833
  // Another benefit is that only LWC can create components that actually do anything – if you do
@@ -8371,34 +8836,34 @@ LWR.define('lwc/v/5_1_0', ['exports'], (function (exports) { 'use strict';
8371
8836
  const createUpgradableConstructor = () => {
8372
8837
  // TODO [#2972]: this class should expose observedAttributes as necessary
8373
8838
  class UpgradableConstructor extends HTMLElement {
8374
- constructor(upgradeCallback) {
8839
+ // TODO [#3983]: Re-enable formAssociated once there is a solution for the observable behavior it introduces.
8840
+ // static formAssociated = true;
8841
+ constructor(upgradeCallback, useNativeLifecycle) {
8375
8842
  super();
8843
+ if (useNativeLifecycle) {
8844
+ // When in native lifecycle mode, we need to keep track of instances that were created outside LWC
8845
+ // (i.e. not created by `lwc.createElement()`). If the element uses synthetic lifecycle, then we don't
8846
+ // need to track this.
8847
+ nativeLifecycleElementsToUpgradedByLWC.set(this, elementBeingUpgradedByLWC);
8848
+ }
8376
8849
  // If the element is not created using lwc.createElement(), e.g. `document.createElement('x-foo')`,
8377
- // then elementBeingUpgraded will be false
8850
+ // then elementBeingUpgradedByLWC will be false
8378
8851
  if (elementBeingUpgradedByLWC) {
8379
8852
  upgradeCallback(this);
8380
- } else if (!isUndefined$1(lifecycleCallbacks)) {
8381
- // If this element has any lifecycle callbacks, then we need to keep track of
8382
- // instances that were created outside LWC (i.e. not created by `lwc.createElement()`).
8383
- // If the element has no connected or disconnected callbacks, then we don't need to track this.
8384
- elementsUpgradedOutsideLWC.add(this);
8385
- // TODO [#2970]: LWC elements cannot be upgraded via new Ctor()
8386
- // Do we want to support this? Throw an error? Currently for backwards compat it's a no-op.
8387
- }
8388
- }
8389
- /*LWC compiler v5.1.0*/
8390
- }
8391
- UpgradableConstructor.formAssociated = true;
8392
- // Do not unnecessarily add a connectedCallback/disconnectedCallback/etc., as it introduces perf overhead
8393
- // See: https://github.com/salesforce/lwc/pull/3162#issuecomment-1311851174
8394
- if (!isUndefined$1(lifecycleCallbacks)) {
8395
- for (const [propName, callback] of entries(lifecycleCallbacks)) {
8396
- UpgradableConstructor.prototype[propName] = function () {
8397
- if (!elementsUpgradedOutsideLWC.has(this)) {
8398
- callback(this);
8399
- }
8400
- };
8853
+ }
8854
+ // TODO [#2970]: LWC elements cannot be upgraded via new Ctor()
8855
+ // Do we want to support this? Throw an error? Currently for backwards compat it's a no-op.
8401
8856
  }
8857
+ /*LWC compiler v6.2.1*/
8858
+ }
8859
+ for (const [propName, callback] of entries(LIFECYCLE_CALLBACKS)) {
8860
+ UpgradableConstructor.prototype[propName] = function () {
8861
+ // If the element is in the WeakMap (i.e. it's marked as native lifecycle), and if it was upgraded by LWC,
8862
+ // then it can use native lifecycle
8863
+ if (isTrue(nativeLifecycleElementsToUpgradedByLWC.get(this))) {
8864
+ callback(this);
8865
+ }
8866
+ };
8402
8867
  }
8403
8868
  return UpgradableConstructor;
8404
8869
  };
@@ -8414,18 +8879,18 @@ LWR.define('lwc/v/5_1_0', ['exports'], (function (exports) { 'use strict';
8414
8879
  }
8415
8880
  return UpgradableConstructor;
8416
8881
  }
8417
- const createCustomElement = (tagName, upgradeCallback) => {
8882
+ const createCustomElement = (tagName, upgradeCallback, useNativeLifecycle) => {
8418
8883
  const UpgradableConstructor = getUpgradableConstructor(tagName);
8419
8884
  elementBeingUpgradedByLWC = true;
8420
8885
  try {
8421
- return new UpgradableConstructor(upgradeCallback);
8886
+ return new UpgradableConstructor(upgradeCallback, useNativeLifecycle);
8422
8887
  } finally {
8423
8888
  elementBeingUpgradedByLWC = false;
8424
8889
  }
8425
8890
  };
8426
8891
 
8427
8892
  /*
8428
- * Copyright (c) 2023, Salesforce.com, inc.
8893
+ * Copyright (c) 2024, Salesforce, Inc.
8429
8894
  * All rights reserved.
8430
8895
  * SPDX-License-Identifier: MIT
8431
8896
  * For full license text, see the LICENSE file in the repo root or https://opensource.org/licenses/MIT
@@ -8437,13 +8902,12 @@ LWR.define('lwc/v/5_1_0', ['exports'], (function (exports) { 'use strict';
8437
8902
  * Example usage:
8438
8903
  * import { renderer, rendererFactory } from 'lwc';
8439
8904
  * const customRenderer = rendererFactory(renderer);
8440
- *
8441
8905
  * @param baseRenderer Either null or the base renderer imported from 'lwc'.
8442
8906
  */
8443
8907
  function rendererFactory(baseRenderer) {
8444
8908
  const renderer = function (exports) {
8445
8909
  /**
8446
- * Copyright (C) 2023 salesforce.com, inc.
8910
+ * Copyright (c) 2024 Salesforce, Inc.
8447
8911
  */
8448
8912
  /*
8449
8913
  * Copyright (c) 2018, salesforce.com, inc.
@@ -8451,21 +8915,40 @@ LWR.define('lwc/v/5_1_0', ['exports'], (function (exports) { 'use strict';
8451
8915
  * SPDX-License-Identifier: MIT
8452
8916
  * For full license text, see the LICENSE file in the repo root or https://opensource.org/licenses/MIT
8453
8917
  */
8918
+ /**
8919
+ *
8920
+ * @param value
8921
+ * @param msg
8922
+ */
8454
8923
  function invariant(value, msg) {
8455
8924
  if (!value) {
8456
8925
  throw new Error(`Invariant Violation: ${msg}`);
8457
8926
  }
8458
8927
  }
8928
+ /**
8929
+ *
8930
+ * @param value
8931
+ * @param msg
8932
+ */
8459
8933
  function isTrue$1(value, msg) {
8460
8934
  if (!value) {
8461
8935
  throw new Error(`Assert Violation: ${msg}`);
8462
8936
  }
8463
8937
  }
8938
+ /**
8939
+ *
8940
+ * @param value
8941
+ * @param msg
8942
+ */
8464
8943
  function isFalse$1(value, msg) {
8465
8944
  if (value) {
8466
8945
  throw new Error(`Assert Violation: ${msg}`);
8467
8946
  }
8468
8947
  }
8948
+ /**
8949
+ *
8950
+ * @param msg
8951
+ */
8469
8952
  function fail(msg) {
8470
8953
  throw new Error(msg);
8471
8954
  }
@@ -8476,13 +8959,23 @@ LWR.define('lwc/v/5_1_0', ['exports'], (function (exports) { 'use strict';
8476
8959
  isFalse: isFalse$1,
8477
8960
  isTrue: isTrue$1
8478
8961
  });
8962
+ /**
8963
+ * Determines whether the argument is `undefined`.
8964
+ * @param obj Value to test
8965
+ * @returns `true` if the value is `undefined`.
8966
+ */
8479
8967
  function isUndefined(obj) {
8480
8968
  return obj === undefined;
8481
8969
  }
8970
+ /**
8971
+ * Determines whether the argument is `null`.
8972
+ * @param obj Value to test
8973
+ * @returns `true` if the value is `null`.
8974
+ */
8482
8975
  function isNull(obj) {
8483
8976
  return obj === null;
8484
8977
  }
8485
- /** version: 5.1.0 */
8978
+ /** version: 6.2.1 */
8486
8979
 
8487
8980
  /*
8488
8981
  * Copyright (c) 2023, salesforce.com, inc.
@@ -8502,7 +8995,7 @@ LWR.define('lwc/v/5_1_0', ['exports'], (function (exports) { 'use strict';
8502
8995
  this.setNewContext = setNewContext;
8503
8996
  this.setDisconnectedCallback = setDisconnectedCallback;
8504
8997
  }
8505
- /*LWC compiler v5.1.0*/
8998
+ /*LWC compiler v6.2.1*/
8506
8999
  }
8507
9000
  function registerContextConsumer(elm, adapterContextToken, subscriptionPayload) {
8508
9001
  dispatchEvent(elm, new WireContextSubscriptionEvent(adapterContextToken, subscriptionPayload));
@@ -8806,9 +9299,7 @@ LWR.define('lwc/v/5_1_0', ['exports'], (function (exports) { 'use strict';
8806
9299
  /**
8807
9300
  * This function builds a Web Component class from a LWC constructor so it can be
8808
9301
  * registered as a new element via customElements.define() at any given time.
8809
- *
8810
- * @deprecated since version 1.3.11
8811
- *
9302
+ * @param Ctor
8812
9303
  * @example
8813
9304
  * ```
8814
9305
  * import { buildCustomElementConstructor } from 'lwc';
@@ -8817,6 +9308,7 @@ LWR.define('lwc/v/5_1_0', ['exports'], (function (exports) { 'use strict';
8817
9308
  * customElements.define('x-foo', WC);
8818
9309
  * const elm = document.createElement('x-foo');
8819
9310
  * ```
9311
+ * @deprecated since version 1.3.11
8820
9312
  */
8821
9313
  function deprecatedBuildCustomElementConstructor(Ctor) {
8822
9314
  if (process.env.NODE_ENV !== 'production') {
@@ -8882,7 +9374,7 @@ LWR.define('lwc/v/5_1_0', ['exports'], (function (exports) { 'use strict';
8882
9374
  attributeChangedCallback(name, oldValue, newValue) {
8883
9375
  attributeChangedCallback.call(this, name, oldValue, newValue);
8884
9376
  }
8885
- /*LWC compiler v5.1.0*/
9377
+ /*LWC compiler v6.2.1*/
8886
9378
  }, _a.observedAttributes = observedAttributes, _a;
8887
9379
  }
8888
9380
 
@@ -8907,7 +9399,13 @@ LWR.define('lwc/v/5_1_0', ['exports'], (function (exports) { 'use strict';
8907
9399
  }
8908
9400
  return node; // for convenience
8909
9401
  }
8910
- if (!lwcRuntimeFlags.ENABLE_NATIVE_CUSTOM_ELEMENT_LIFECYCLE) {
9402
+ let monkeyPatched = false;
9403
+ function monkeyPatchDomAPIs() {
9404
+ if (monkeyPatched) {
9405
+ // don't double-patch
9406
+ return;
9407
+ }
9408
+ monkeyPatched = true;
8911
9409
  // Monkey patching Node methods to be able to detect the insertions and removal of root elements
8912
9410
  // created via createElement.
8913
9411
  const {
@@ -8937,17 +9435,24 @@ LWR.define('lwc/v/5_1_0', ['exports'], (function (exports) { 'use strict';
8937
9435
  }
8938
9436
  });
8939
9437
  }
9438
+ // For some reason, JSDOC says "options.is" is a syntax error. And we can't disable the rule using
9439
+ // `eslint-disable-next-line` because that gets included in the JSDOC, so we need this workaround.
9440
+ /* eslint-disable jsdoc/valid-types */
8940
9441
  /**
8941
9442
  * EXPERIMENTAL: This function is almost identical to document.createElement with the slightly
8942
9443
  * difference that in the options, you can pass the `is` property set to a Constructor instead of
8943
9444
  * just a string value. The intent is to allow the creation of an element controlled by LWC without
8944
9445
  * having to register the element as a custom element.
8945
- *
9446
+ * @param sel
9447
+ * @param options
9448
+ * @param options.is description
9449
+ * @param options.mode
8946
9450
  * @example
8947
9451
  * ```
8948
9452
  * const el = createElement('x-foo', { is: FooCtor });
8949
9453
  * ```
8950
9454
  */
9455
+ /* eslint-enable jsdoc/valid-types */
8951
9456
  function createElement(sel, options) {
8952
9457
  if (!isObject(options) || isNull(options)) {
8953
9458
  throw new TypeError(`"createElement" function expects an object as second parameter but received "${toString$1(options)}".`);
@@ -8963,12 +9468,17 @@ LWR.define('lwc/v/5_1_0', ['exports'], (function (exports) { 'use strict';
8963
9468
  // passing `sel` as a camel-case, which makes them invalid custom elements name
8964
9469
  // the following line guarantees that this does not leaks beyond this point.
8965
9470
  const tagName = StringToLowerCase.call(sel);
9471
+ const apiVersion = getComponentAPIVersion(Ctor);
9472
+ const useNativeCustomElementLifecycle =
9473
+ // temporary "kill switch"
9474
+ !lwcRuntimeFlags.DISABLE_NATIVE_CUSTOM_ELEMENT_LIFECYCLE && isAPIFeatureEnabled(7 /* APIFeature.ENABLE_NATIVE_CUSTOM_ELEMENT_LIFECYCLE */, apiVersion);
8966
9475
  // the custom element from the registry is expecting an upgrade callback
8967
9476
  /**
8968
9477
  * Note: if the upgradable constructor does not expect, or throw when we new it
8969
9478
  * with a callback as the first argument, we could implement a more advanced
8970
9479
  * mechanism that only passes that argument if the constructor is known to be
8971
9480
  * an upgradable custom element.
9481
+ * @param elm
8972
9482
  */
8973
9483
  const upgradeCallback = elm => {
8974
9484
  createVM(elm, Ctor, renderer, {
@@ -8976,13 +9486,15 @@ LWR.define('lwc/v/5_1_0', ['exports'], (function (exports) { 'use strict';
8976
9486
  mode: options.mode !== 'closed' ? 'open' : 'closed',
8977
9487
  owner: null
8978
9488
  });
8979
- if (!lwcRuntimeFlags.ENABLE_NATIVE_CUSTOM_ELEMENT_LIFECYCLE) {
9489
+ if (!useNativeCustomElementLifecycle) {
9490
+ // Monkey-patch on-demand, because if there are no components on the page using an old API
9491
+ // version, then we don't want to monkey patch at all
9492
+ monkeyPatchDomAPIs();
8980
9493
  ConnectingSlot.set(elm, connectRootElement);
8981
9494
  DisconnectingSlot.set(elm, disconnectRootElement);
8982
9495
  }
8983
9496
  };
8984
- const element = createCustomElement(tagName, upgradeCallback);
8985
- return element;
9497
+ return createCustomElement(tagName, upgradeCallback, useNativeCustomElementLifecycle);
8986
9498
  }
8987
9499
 
8988
9500
  /*
@@ -8997,6 +9509,7 @@ LWR.define('lwc/v/5_1_0', ['exports'], (function (exports) { 'use strict';
8997
9509
  /**
8998
9510
  * EXPERIMENTAL: The purpose of this function is to detect shadowed nodes. THIS API WILL BE REMOVED
8999
9511
  * ONCE LOCKER V1 IS NO LONGER SUPPORTED.
9512
+ * @param node
9000
9513
  */
9001
9514
  function isNodeShadowed(node) {
9002
9515
  if (isFalse(node instanceof _Node)) {
@@ -9038,12 +9551,11 @@ LWR.define('lwc/v/5_1_0', ['exports'], (function (exports) { 'use strict';
9038
9551
  }
9039
9552
  /**
9040
9553
  * This static getter builds a Web Component class from a LWC constructor so it can be registered
9041
- * as a new element via customElements.define() at any given time. E.g.:
9042
- *
9043
- * import Foo from 'ns/foo';
9044
- * customElements.define('x-foo', Foo.CustomElementConstructor);
9045
- * const elm = document.createElement('x-foo');
9046
- *
9554
+ * as a new element via customElements.define() at any given time.
9555
+ * @example
9556
+ * import Foo from 'ns/foo';
9557
+ * customElements.define('x-foo', Foo.CustomElementConstructor);
9558
+ * const elm = document.createElement('x-foo');
9047
9559
  */
9048
9560
  defineProperty(LightningElement, 'CustomElementConstructor', {
9049
9561
  get() {
@@ -9085,7 +9597,7 @@ LWR.define('lwc/v/5_1_0', ['exports'], (function (exports) { 'use strict';
9085
9597
  });
9086
9598
  });
9087
9599
  }
9088
- /** version: 5.1.0 */
9600
+ /** version: 6.2.1 */
9089
9601
 
9090
9602
  exports.LightningElement = LightningElement;
9091
9603
  exports.__unstable__ProfilerControl = profilerControl;