lwc 2.20.0 → 2.20.3

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (35) hide show
  1. package/dist/engine-dom/esm/es2017/engine-dom.js +235 -202
  2. package/dist/engine-dom/iife/es2017/engine-dom.js +235 -202
  3. package/dist/engine-dom/iife/es2017/engine-dom.min.js +1 -1
  4. package/dist/engine-dom/iife/es2017/engine-dom_debug.js +225 -192
  5. package/dist/engine-dom/iife/es5/engine-dom.js +320 -285
  6. package/dist/engine-dom/iife/es5/engine-dom.min.js +1 -1
  7. package/dist/engine-dom/iife/es5/engine-dom_debug.js +310 -274
  8. package/dist/engine-dom/umd/es2017/engine-dom.js +235 -202
  9. package/dist/engine-dom/umd/es2017/engine-dom.min.js +1 -1
  10. package/dist/engine-dom/umd/es2017/engine-dom_debug.js +225 -192
  11. package/dist/engine-dom/umd/es5/engine-dom.js +320 -285
  12. package/dist/engine-dom/umd/es5/engine-dom.min.js +1 -1
  13. package/dist/engine-dom/umd/es5/engine-dom_debug.js +310 -274
  14. package/dist/engine-server/commonjs/es2017/engine-server.js +177 -169
  15. package/dist/engine-server/commonjs/es2017/engine-server.min.js +1 -1
  16. package/dist/engine-server/esm/es2017/engine-server.js +177 -169
  17. package/dist/synthetic-shadow/esm/es2017/synthetic-shadow.js +3 -3
  18. package/dist/synthetic-shadow/iife/es2017/synthetic-shadow.js +3 -3
  19. package/dist/synthetic-shadow/iife/es2017/synthetic-shadow_debug.js +3 -3
  20. package/dist/synthetic-shadow/iife/es5/synthetic-shadow.js +3 -3
  21. package/dist/synthetic-shadow/iife/es5/synthetic-shadow_debug.js +3 -3
  22. package/dist/synthetic-shadow/umd/es2017/synthetic-shadow.js +3 -3
  23. package/dist/synthetic-shadow/umd/es2017/synthetic-shadow_debug.js +3 -3
  24. package/dist/synthetic-shadow/umd/es5/synthetic-shadow.js +3 -3
  25. package/dist/synthetic-shadow/umd/es5/synthetic-shadow_debug.js +3 -3
  26. package/dist/wire-service/esm/es2017/wire-service.js +2 -2
  27. package/dist/wire-service/iife/es2017/wire-service.js +2 -2
  28. package/dist/wire-service/iife/es2017/wire-service_debug.js +2 -2
  29. package/dist/wire-service/iife/es5/wire-service.js +2 -2
  30. package/dist/wire-service/iife/es5/wire-service_debug.js +2 -2
  31. package/dist/wire-service/umd/es2017/wire-service.js +2 -2
  32. package/dist/wire-service/umd/es2017/wire-service_debug.js +2 -2
  33. package/dist/wire-service/umd/es5/wire-service.js +2 -2
  34. package/dist/wire-service/umd/es5/wire-service_debug.js +2 -2
  35. package/package.json +7 -7
@@ -349,7 +349,7 @@
349
349
  CACHED_PROPERTY_ATTRIBUTE_MAPPING.set(propName, attributeName);
350
350
  return attributeName;
351
351
  }
352
- /** version: 2.20.0 */
352
+ /** version: 2.20.3 */
353
353
 
354
354
  /*
355
355
  * Copyright (c) 2018, salesforce.com, inc.
@@ -2913,6 +2913,233 @@
2913
2913
  methods: publicMethods
2914
2914
  };
2915
2915
  }
2916
+ /*
2917
+ * Copyright (c) 2018, salesforce.com, inc.
2918
+ * All rights reserved.
2919
+ * SPDX-License-Identifier: MIT
2920
+ * For full license text, see the LICENSE file in the repo root or https://opensource.org/licenses/MIT
2921
+ */
2922
+
2923
+
2924
+ function makeHostToken(token) {
2925
+ return "".concat(token, "-host");
2926
+ }
2927
+
2928
+ function createInlineStyleVNode(content) {
2929
+ return api.h('style', {
2930
+ key: 'style',
2931
+ attrs: {
2932
+ type: 'text/css'
2933
+ }
2934
+ }, [api.t(content)]);
2935
+ }
2936
+
2937
+ function updateStylesheetToken(vm, template) {
2938
+ var elm = vm.elm,
2939
+ context = vm.context,
2940
+ renderMode = vm.renderMode,
2941
+ shadowMode = vm.shadowMode,
2942
+ _vm$renderer = vm.renderer,
2943
+ getClassList = _vm$renderer.getClassList,
2944
+ removeAttribute = _vm$renderer.removeAttribute,
2945
+ setAttribute = _vm$renderer.setAttribute;
2946
+ var newStylesheets = template.stylesheets,
2947
+ newStylesheetToken = template.stylesheetToken;
2948
+ var isSyntheticShadow = renderMode === 1
2949
+ /* RenderMode.Shadow */
2950
+ && shadowMode === 1
2951
+ /* ShadowMode.Synthetic */
2952
+ ;
2953
+ var hasScopedStyles = context.hasScopedStyles;
2954
+ var newToken;
2955
+ var newHasTokenInClass;
2956
+ var newHasTokenInAttribute; // Reset the styling token applied to the host element.
2957
+
2958
+ var oldToken = context.stylesheetToken,
2959
+ oldHasTokenInClass = context.hasTokenInClass,
2960
+ oldHasTokenInAttribute = context.hasTokenInAttribute;
2961
+
2962
+ if (!isUndefined$1(oldToken)) {
2963
+ if (oldHasTokenInClass) {
2964
+ getClassList(elm).remove(makeHostToken(oldToken));
2965
+ }
2966
+
2967
+ if (oldHasTokenInAttribute) {
2968
+ removeAttribute(elm, makeHostToken(oldToken));
2969
+ }
2970
+ } // Apply the new template styling token to the host element, if the new template has any
2971
+ // associated stylesheets. In the case of light DOM, also ensure there is at least one scoped stylesheet.
2972
+
2973
+
2974
+ if (!isUndefined$1(newStylesheets) && newStylesheets.length !== 0) {
2975
+ newToken = newStylesheetToken;
2976
+ } // Set the new styling token on the host element
2977
+
2978
+
2979
+ if (!isUndefined$1(newToken)) {
2980
+ if (hasScopedStyles) {
2981
+ getClassList(elm).add(makeHostToken(newToken));
2982
+ newHasTokenInClass = true;
2983
+ }
2984
+
2985
+ if (isSyntheticShadow) {
2986
+ setAttribute(elm, makeHostToken(newToken), '');
2987
+ newHasTokenInAttribute = true;
2988
+ }
2989
+ } // Update the styling tokens present on the context object.
2990
+
2991
+
2992
+ context.stylesheetToken = newToken;
2993
+ context.hasTokenInClass = newHasTokenInClass;
2994
+ context.hasTokenInAttribute = newHasTokenInAttribute;
2995
+ }
2996
+
2997
+ function evaluateStylesheetsContent(stylesheets, stylesheetToken, vm) {
2998
+ var content = [];
2999
+ var root;
3000
+
3001
+ for (var _i11 = 0; _i11 < stylesheets.length; _i11++) {
3002
+ var stylesheet = stylesheets[_i11];
3003
+
3004
+ if (isArray$1(stylesheet)) {
3005
+ ArrayPush$1.apply(content, evaluateStylesheetsContent(stylesheet, stylesheetToken, vm));
3006
+ } else {
3007
+
3008
+ var isScopedCss = stylesheet[KEY__SCOPED_CSS]; // Apply the scope token only if the stylesheet itself is scoped, or if we're rendering synthetic shadow.
3009
+
3010
+ var scopeToken = isScopedCss || vm.shadowMode === 1
3011
+ /* ShadowMode.Synthetic */
3012
+ && vm.renderMode === 1
3013
+ /* RenderMode.Shadow */
3014
+ ? stylesheetToken : undefined; // Use the actual `:host` selector if we're rendering global CSS for light DOM, or if we're rendering
3015
+ // native shadow DOM. Synthetic shadow DOM never uses `:host`.
3016
+
3017
+ var useActualHostSelector = vm.renderMode === 0
3018
+ /* RenderMode.Light */
3019
+ ? !isScopedCss : vm.shadowMode === 0
3020
+ /* ShadowMode.Native */
3021
+ ; // Use the native :dir() pseudoclass only in native shadow DOM. Otherwise, in synthetic shadow,
3022
+ // we use an attribute selector on the host to simulate :dir().
3023
+
3024
+ var useNativeDirPseudoclass = void 0;
3025
+
3026
+ if (vm.renderMode === 1
3027
+ /* RenderMode.Shadow */
3028
+ ) {
3029
+ useNativeDirPseudoclass = vm.shadowMode === 0
3030
+ /* ShadowMode.Native */
3031
+ ;
3032
+ } else {
3033
+ // Light DOM components should only render `[dir]` if they're inside of a synthetic shadow root.
3034
+ // At the top level (root is null) or inside of a native shadow root, they should use `:dir()`.
3035
+ if (isUndefined$1(root)) {
3036
+ // Only calculate the root once as necessary
3037
+ root = getNearestShadowComponent(vm);
3038
+ }
3039
+
3040
+ useNativeDirPseudoclass = isNull(root) || root.shadowMode === 0
3041
+ /* ShadowMode.Native */
3042
+ ;
3043
+ }
3044
+
3045
+ ArrayPush$1.call(content, stylesheet(scopeToken, useActualHostSelector, useNativeDirPseudoclass));
3046
+ }
3047
+ }
3048
+
3049
+ return content;
3050
+ }
3051
+
3052
+ function getStylesheetsContent(vm, template) {
3053
+ var stylesheets = template.stylesheets,
3054
+ stylesheetToken = template.stylesheetToken;
3055
+ var content = [];
3056
+
3057
+ if (!isUndefined$1(stylesheets) && stylesheets.length !== 0) {
3058
+ content = evaluateStylesheetsContent(stylesheets, stylesheetToken, vm);
3059
+ }
3060
+
3061
+ return content;
3062
+ } // It might be worth caching this to avoid doing the lookup repeatedly, but
3063
+ // perf testing has not shown it to be a huge improvement yet:
3064
+ // https://github.com/salesforce/lwc/pull/2460#discussion_r691208892
3065
+
3066
+
3067
+ function getNearestShadowComponent(vm) {
3068
+ var owner = vm;
3069
+
3070
+ while (!isNull(owner)) {
3071
+ if (owner.renderMode === 1
3072
+ /* RenderMode.Shadow */
3073
+ ) {
3074
+ return owner;
3075
+ }
3076
+
3077
+ owner = owner.owner;
3078
+ }
3079
+
3080
+ return owner;
3081
+ }
3082
+ /**
3083
+ * If the component that is currently being rendered uses scoped styles,
3084
+ * this returns the unique token for that scoped stylesheet. Otherwise
3085
+ * it returns null.
3086
+ */
3087
+
3088
+
3089
+ function getScopeTokenClass(owner) {
3090
+ var cmpTemplate = owner.cmpTemplate,
3091
+ context = owner.context;
3092
+ return context.hasScopedStyles && (cmpTemplate === null || cmpTemplate === void 0 ? void 0 : cmpTemplate.stylesheetToken) || null;
3093
+ }
3094
+
3095
+ function getNearestNativeShadowComponent(vm) {
3096
+ var owner = getNearestShadowComponent(vm);
3097
+
3098
+ if (!isNull(owner) && owner.shadowMode === 1
3099
+ /* ShadowMode.Synthetic */
3100
+ ) {
3101
+ // Synthetic-within-native is impossible. So if the nearest shadow component is
3102
+ // synthetic, we know we won't find a native component if we go any further.
3103
+ return null;
3104
+ }
3105
+
3106
+ return owner;
3107
+ }
3108
+
3109
+ function createStylesheet(vm, stylesheets) {
3110
+ var renderMode = vm.renderMode,
3111
+ shadowMode = vm.shadowMode,
3112
+ _vm$renderer2 = vm.renderer,
3113
+ ssr = _vm$renderer2.ssr,
3114
+ insertStylesheet = _vm$renderer2.insertStylesheet;
3115
+
3116
+ if (renderMode === 1
3117
+ /* RenderMode.Shadow */
3118
+ && shadowMode === 1
3119
+ /* ShadowMode.Synthetic */
3120
+ ) {
3121
+ for (var _i12 = 0; _i12 < stylesheets.length; _i12++) {
3122
+ insertStylesheet(stylesheets[_i12]);
3123
+ }
3124
+ } else if (ssr || vm.hydrated) {
3125
+ // Note: We need to ensure that during hydration, the stylesheets method is the same as those in ssr.
3126
+ // This works in the client, because the stylesheets are created, and cached in the VM
3127
+ // the first time the VM renders.
3128
+ // native shadow or light DOM, SSR
3129
+ return ArrayMap.call(stylesheets, createInlineStyleVNode);
3130
+ } else {
3131
+ // native shadow or light DOM, DOM renderer
3132
+ var root = getNearestNativeShadowComponent(vm); // null root means a global style
3133
+
3134
+ var target = isNull(root) ? undefined : root.shadowRoot;
3135
+
3136
+ for (var _i13 = 0; _i13 < stylesheets.length; _i13++) {
3137
+ insertStylesheet(stylesheets[_i13], target);
3138
+ }
3139
+ }
3140
+
3141
+ return null;
3142
+ }
2916
3143
  /*
2917
3144
  * Copyright (c) 2020, salesforce.com, inc.
2918
3145
  * All rights reserved.
@@ -3250,8 +3477,8 @@
3250
3477
 
3251
3478
  var setCSSStyleProperty = renderer.setCSSStyleProperty;
3252
3479
 
3253
- for (var _i11 = 0; _i11 < styleDecls.length; _i11++) {
3254
- var _styleDecls$_i = _slicedToArray(styleDecls[_i11], 3),
3480
+ for (var _i14 = 0; _i14 < styleDecls.length; _i14++) {
3481
+ var _styleDecls$_i = _slicedToArray(styleDecls[_i14], 3),
3255
3482
  prop = _styleDecls$_i[0],
3256
3483
  value = _styleDecls$_i[1],
3257
3484
  important = _styleDecls$_i[2];
@@ -3580,15 +3807,13 @@
3580
3807
 
3581
3808
 
3582
3809
  function setScopeTokenClassIfNecessary(elm, owner, renderer) {
3583
- var cmpTemplate = owner.cmpTemplate,
3584
- context = owner.context;
3585
- var getClassList = renderer.getClassList;
3586
- var token = cmpTemplate === null || cmpTemplate === void 0 ? void 0 : cmpTemplate.stylesheetToken;
3810
+ var token = getScopeTokenClass(owner);
3587
3811
 
3588
- if (!isUndefined$1(token) && context.hasScopedStyles) {
3589
- // TODO [#2762]: this dot notation with add is probably problematic
3812
+ if (!isNull(token)) {
3813
+ var _getClassList = renderer.getClassList; // TODO [#2762]: this dot notation with add is probably problematic
3590
3814
  // probably we should have a renderer api for just the add operation
3591
- getClassList(elm).add(token);
3815
+
3816
+ _getClassList(elm).add(token);
3592
3817
  }
3593
3818
  }
3594
3819
 
@@ -3738,8 +3963,8 @@
3738
3963
  var oldSlots = vm.cmpSlots;
3739
3964
  var cmpSlots = vm.cmpSlots = create(null);
3740
3965
 
3741
- for (var _i12 = 0, len = children.length; _i12 < len; _i12 += 1) {
3742
- var vnode = children[_i12];
3966
+ for (var _i15 = 0, len = children.length; _i15 < len; _i15 += 1) {
3967
+ var vnode = children[_i15];
3743
3968
 
3744
3969
  if (isNull(vnode)) {
3745
3970
  continue;
@@ -3765,8 +3990,8 @@
3765
3990
  return;
3766
3991
  }
3767
3992
 
3768
- for (var _i13 = 0, _len4 = oldKeys.length; _i13 < _len4; _i13 += 1) {
3769
- var key = oldKeys[_i13];
3993
+ for (var _i16 = 0, _len4 = oldKeys.length; _i16 < _len4; _i16 += 1) {
3994
+ var key = oldKeys[_i16];
3770
3995
 
3771
3996
  if (isUndefined$1(cmpSlots[key]) || oldSlots[key].length !== cmpSlots[key].length) {
3772
3997
  markComponentAsDirty(vm);
@@ -3906,12 +4131,12 @@
3906
4131
  if (oldStartIdx > oldEndIdx) {
3907
4132
  // There's some cases in which the sub array of vnodes to be inserted is followed by null(s) and an
3908
4133
  // already processed vnode, in such cases the vnodes to be inserted should be before that processed vnode.
3909
- var _i14 = newEndIdx;
4134
+ var _i17 = newEndIdx;
3910
4135
  var n;
3911
4136
 
3912
4137
  do {
3913
- n = newCh[++_i14];
3914
- } while (!isVNode(n) && _i14 < newChEnd);
4138
+ n = newCh[++_i17];
4139
+ } while (!isVNode(n) && _i17 < newChEnd);
3915
4140
 
3916
4141
  before = isVNode(n) ? n.elm : null;
3917
4142
  mountVNodes(newCh, parent, renderer, before, newStartIdx, newEndIdx + 1);
@@ -3942,9 +4167,9 @@
3942
4167
 
3943
4168
  var anchor = null;
3944
4169
 
3945
- for (var _i15 = c2Length - 1; _i15 >= 0; _i15 -= 1) {
3946
- var n1 = c1[_i15];
3947
- var n2 = c2[_i15];
4170
+ for (var _i18 = c2Length - 1; _i18 >= 0; _i18 -= 1) {
4171
+ var n1 = c1[_i18];
4172
+ var n2 = c2[_i18];
3948
4173
 
3949
4174
  if (n2 !== n1) {
3950
4175
  if (isVNode(n1)) {
@@ -4360,220 +4585,6 @@
4360
4585
  fid: fid,
4361
4586
  shc: shc
4362
4587
  });
4363
- /*
4364
- * Copyright (c) 2018, salesforce.com, inc.
4365
- * All rights reserved.
4366
- * SPDX-License-Identifier: MIT
4367
- * For full license text, see the LICENSE file in the repo root or https://opensource.org/licenses/MIT
4368
- */
4369
-
4370
- function makeHostToken(token) {
4371
- return "".concat(token, "-host");
4372
- }
4373
-
4374
- function createInlineStyleVNode(content) {
4375
- return api.h('style', {
4376
- key: 'style',
4377
- attrs: {
4378
- type: 'text/css'
4379
- }
4380
- }, [api.t(content)]);
4381
- }
4382
-
4383
- function updateStylesheetToken(vm, template) {
4384
- var elm = vm.elm,
4385
- context = vm.context,
4386
- renderMode = vm.renderMode,
4387
- shadowMode = vm.shadowMode,
4388
- _vm$renderer = vm.renderer,
4389
- getClassList = _vm$renderer.getClassList,
4390
- removeAttribute = _vm$renderer.removeAttribute,
4391
- setAttribute = _vm$renderer.setAttribute;
4392
- var newStylesheets = template.stylesheets,
4393
- newStylesheetToken = template.stylesheetToken;
4394
- var isSyntheticShadow = renderMode === 1
4395
- /* RenderMode.Shadow */
4396
- && shadowMode === 1
4397
- /* ShadowMode.Synthetic */
4398
- ;
4399
- var hasScopedStyles = context.hasScopedStyles;
4400
- var newToken;
4401
- var newHasTokenInClass;
4402
- var newHasTokenInAttribute; // Reset the styling token applied to the host element.
4403
-
4404
- var oldToken = context.stylesheetToken,
4405
- oldHasTokenInClass = context.hasTokenInClass,
4406
- oldHasTokenInAttribute = context.hasTokenInAttribute;
4407
-
4408
- if (!isUndefined$1(oldToken)) {
4409
- if (oldHasTokenInClass) {
4410
- getClassList(elm).remove(makeHostToken(oldToken));
4411
- }
4412
-
4413
- if (oldHasTokenInAttribute) {
4414
- removeAttribute(elm, makeHostToken(oldToken));
4415
- }
4416
- } // Apply the new template styling token to the host element, if the new template has any
4417
- // associated stylesheets. In the case of light DOM, also ensure there is at least one scoped stylesheet.
4418
-
4419
-
4420
- if (!isUndefined$1(newStylesheets) && newStylesheets.length !== 0) {
4421
- newToken = newStylesheetToken;
4422
- } // Set the new styling token on the host element
4423
-
4424
-
4425
- if (!isUndefined$1(newToken)) {
4426
- if (hasScopedStyles) {
4427
- getClassList(elm).add(makeHostToken(newToken));
4428
- newHasTokenInClass = true;
4429
- }
4430
-
4431
- if (isSyntheticShadow) {
4432
- setAttribute(elm, makeHostToken(newToken), '');
4433
- newHasTokenInAttribute = true;
4434
- }
4435
- } // Update the styling tokens present on the context object.
4436
-
4437
-
4438
- context.stylesheetToken = newToken;
4439
- context.hasTokenInClass = newHasTokenInClass;
4440
- context.hasTokenInAttribute = newHasTokenInAttribute;
4441
- }
4442
-
4443
- function evaluateStylesheetsContent(stylesheets, stylesheetToken, vm) {
4444
- var content = [];
4445
- var root;
4446
-
4447
- for (var _i16 = 0; _i16 < stylesheets.length; _i16++) {
4448
- var stylesheet = stylesheets[_i16];
4449
-
4450
- if (isArray$1(stylesheet)) {
4451
- ArrayPush$1.apply(content, evaluateStylesheetsContent(stylesheet, stylesheetToken, vm));
4452
- } else {
4453
-
4454
- var isScopedCss = stylesheet[KEY__SCOPED_CSS]; // Apply the scope token only if the stylesheet itself is scoped, or if we're rendering synthetic shadow.
4455
-
4456
- var scopeToken = isScopedCss || vm.shadowMode === 1
4457
- /* ShadowMode.Synthetic */
4458
- && vm.renderMode === 1
4459
- /* RenderMode.Shadow */
4460
- ? stylesheetToken : undefined; // Use the actual `:host` selector if we're rendering global CSS for light DOM, or if we're rendering
4461
- // native shadow DOM. Synthetic shadow DOM never uses `:host`.
4462
-
4463
- var useActualHostSelector = vm.renderMode === 0
4464
- /* RenderMode.Light */
4465
- ? !isScopedCss : vm.shadowMode === 0
4466
- /* ShadowMode.Native */
4467
- ; // Use the native :dir() pseudoclass only in native shadow DOM. Otherwise, in synthetic shadow,
4468
- // we use an attribute selector on the host to simulate :dir().
4469
-
4470
- var useNativeDirPseudoclass = void 0;
4471
-
4472
- if (vm.renderMode === 1
4473
- /* RenderMode.Shadow */
4474
- ) {
4475
- useNativeDirPseudoclass = vm.shadowMode === 0
4476
- /* ShadowMode.Native */
4477
- ;
4478
- } else {
4479
- // Light DOM components should only render `[dir]` if they're inside of a synthetic shadow root.
4480
- // At the top level (root is null) or inside of a native shadow root, they should use `:dir()`.
4481
- if (isUndefined$1(root)) {
4482
- // Only calculate the root once as necessary
4483
- root = getNearestShadowComponent(vm);
4484
- }
4485
-
4486
- useNativeDirPseudoclass = isNull(root) || root.shadowMode === 0
4487
- /* ShadowMode.Native */
4488
- ;
4489
- }
4490
-
4491
- ArrayPush$1.call(content, stylesheet(scopeToken, useActualHostSelector, useNativeDirPseudoclass));
4492
- }
4493
- }
4494
-
4495
- return content;
4496
- }
4497
-
4498
- function getStylesheetsContent(vm, template) {
4499
- var stylesheets = template.stylesheets,
4500
- stylesheetToken = template.stylesheetToken;
4501
- var content = [];
4502
-
4503
- if (!isUndefined$1(stylesheets) && stylesheets.length !== 0) {
4504
- content = evaluateStylesheetsContent(stylesheets, stylesheetToken, vm);
4505
- }
4506
-
4507
- return content;
4508
- } // It might be worth caching this to avoid doing the lookup repeatedly, but
4509
- // perf testing has not shown it to be a huge improvement yet:
4510
- // https://github.com/salesforce/lwc/pull/2460#discussion_r691208892
4511
-
4512
-
4513
- function getNearestShadowComponent(vm) {
4514
- var owner = vm;
4515
-
4516
- while (!isNull(owner)) {
4517
- if (owner.renderMode === 1
4518
- /* RenderMode.Shadow */
4519
- ) {
4520
- return owner;
4521
- }
4522
-
4523
- owner = owner.owner;
4524
- }
4525
-
4526
- return owner;
4527
- }
4528
-
4529
- function getNearestNativeShadowComponent(vm) {
4530
- var owner = getNearestShadowComponent(vm);
4531
-
4532
- if (!isNull(owner) && owner.shadowMode === 1
4533
- /* ShadowMode.Synthetic */
4534
- ) {
4535
- // Synthetic-within-native is impossible. So if the nearest shadow component is
4536
- // synthetic, we know we won't find a native component if we go any further.
4537
- return null;
4538
- }
4539
-
4540
- return owner;
4541
- }
4542
-
4543
- function createStylesheet(vm, stylesheets) {
4544
- var renderMode = vm.renderMode,
4545
- shadowMode = vm.shadowMode,
4546
- _vm$renderer2 = vm.renderer,
4547
- ssr = _vm$renderer2.ssr,
4548
- insertStylesheet = _vm$renderer2.insertStylesheet;
4549
-
4550
- if (renderMode === 1
4551
- /* RenderMode.Shadow */
4552
- && shadowMode === 1
4553
- /* ShadowMode.Synthetic */
4554
- ) {
4555
- for (var _i17 = 0; _i17 < stylesheets.length; _i17++) {
4556
- insertStylesheet(stylesheets[_i17]);
4557
- }
4558
- } else if (ssr || vm.hydrated) {
4559
- // Note: We need to ensure that during hydration, the stylesheets method is the same as those in ssr.
4560
- // This works in the client, because the stylesheets are created, and cached in the VM
4561
- // the first time the VM renders.
4562
- // native shadow or light DOM, SSR
4563
- return ArrayMap.call(stylesheets, createInlineStyleVNode);
4564
- } else {
4565
- // native shadow or light DOM, DOM renderer
4566
- var root = getNearestNativeShadowComponent(vm); // null root means a global style
4567
-
4568
- var target = isNull(root) ? undefined : root.shadowRoot;
4569
-
4570
- for (var _i18 = 0; _i18 < stylesheets.length; _i18++) {
4571
- insertStylesheet(stylesheets[_i18], target);
4572
- }
4573
- }
4574
-
4575
- return null;
4576
- }
4577
4588
  /** Indicates if operations should be logged by the profiler. */
4578
4589
 
4579
4590
  var isProfilerEnabled = false;
@@ -6286,11 +6297,27 @@
6286
6297
  }
6287
6298
 
6288
6299
  function validateClassAttr(vnode, elm, renderer) {
6289
- var _vnode$data = vnode.data,
6290
- className = _vnode$data.className,
6291
- classMap = _vnode$data.classMap;
6300
+ var data = vnode.data,
6301
+ owner = vnode.owner;
6302
+ var className = data.className,
6303
+ classMap = data.classMap;
6292
6304
  var getProperty = renderer.getProperty,
6293
6305
  getClassList = renderer.getClassList;
6306
+ var scopedToken = getScopeTokenClass(owner); // Classnames for scoped CSS are added directly to the DOM during rendering,
6307
+ // or to the VDOM on the server in the case of SSR. As such, these classnames
6308
+ // are never present in VDOM nodes in the browser.
6309
+ //
6310
+ // Consequently, hydration mismatches will occur if scoped CSS token classnames
6311
+ // are rendered during SSR. This needs to be accounted for when validating.
6312
+
6313
+ if (scopedToken) {
6314
+ if (!isUndefined$1(className)) {
6315
+ className = "".concat(scopedToken, " ").concat(className);
6316
+ } else if (!isUndefined$1(classMap)) {
6317
+ classMap = Object.assign(Object.assign({}, classMap), _defineProperty({}, scopedToken, true));
6318
+ }
6319
+ }
6320
+
6294
6321
  var nodesAreCompatible = true;
6295
6322
 
6296
6323
  if (!isUndefined$1(className) && String(className) !== getProperty(elm, 'className')) {
@@ -6320,9 +6347,9 @@
6320
6347
  }
6321
6348
 
6322
6349
  function validateStyleAttr(vnode, elm, renderer) {
6323
- var _vnode$data2 = vnode.data,
6324
- style = _vnode$data2.style,
6325
- styleDecls = _vnode$data2.styleDecls;
6350
+ var _vnode$data = vnode.data,
6351
+ style = _vnode$data.style,
6352
+ styleDecls = _vnode$data.styleDecls;
6326
6353
  var getAttribute = renderer.getAttribute;
6327
6354
  var elmStyle = getAttribute(elm, 'style') || '';
6328
6355
  var nodesAreCompatible = true;
@@ -6458,7 +6485,7 @@
6458
6485
 
6459
6486
  return ctor;
6460
6487
  }
6461
- /* version: 2.20.0 */
6488
+ /* version: 2.20.3 */
6462
6489
 
6463
6490
  /*
6464
6491
  * Copyright (c) 2018, salesforce.com, inc.
@@ -6484,10 +6511,6 @@
6484
6511
  var isIE11 = !isUndefined$1(document.documentMode);
6485
6512
  var stylesheetCache = new Map(); //
6486
6513
 
6487
- function isDocument(target) {
6488
- return !isUndefined$1(target.head);
6489
- }
6490
-
6491
6514
  function createFreshStyleElement(content) {
6492
6515
  var elm = document.createElement('style');
6493
6516
  elm.type = 'text/css';
@@ -6496,11 +6519,11 @@
6496
6519
  }
6497
6520
 
6498
6521
  function createStyleElement(content, cacheData) {
6499
- var stylesheet = cacheData.stylesheet,
6500
- used = cacheData.used; // If the <style> was already used, then we should clone it. We cannot insert
6522
+ var element = cacheData.element,
6523
+ usedElement = cacheData.usedElement; // If the <style> was already used, then we should clone it. We cannot insert
6501
6524
  // the same <style> in two places in the DOM.
6502
6525
 
6503
- if (used) {
6526
+ if (usedElement) {
6504
6527
  // For a mysterious reason, IE11 doesn't like the way we clone <style> nodes
6505
6528
  // and will render the incorrect styles if we do things that way. It's just
6506
6529
  // a perf optimization, so we can skip it for IE11.
@@ -6510,12 +6533,12 @@
6510
6533
  // faster to call `cloneNode()` on an existing node than to recreate it every time.
6511
6534
 
6512
6535
 
6513
- return stylesheet.cloneNode(true);
6536
+ return element.cloneNode(true);
6514
6537
  } // We don't clone every time, because that would be a perf tax on the first time
6515
6538
 
6516
6539
 
6517
- cacheData.used = true;
6518
- return stylesheet;
6540
+ cacheData.usedElement = true;
6541
+ return element;
6519
6542
  }
6520
6543
 
6521
6544
  function createConstructableStylesheet(content) {
@@ -6538,40 +6561,36 @@
6538
6561
 
6539
6562
  function insertStyleElement(content, target, cacheData) {
6540
6563
  var elm = createStyleElement(content, cacheData);
6541
- var targetAnchorPoint = isDocument(target) ? target.head : target;
6542
- targetAnchorPoint.appendChild(elm);
6543
- }
6544
-
6545
- function doInsertStylesheet(content, target, cacheData) {
6546
- // Constructable stylesheets are only supported in certain browsers:
6547
- // https://caniuse.com/mdn-api_document_adoptedstylesheets
6548
- // The reason we use it is for perf: https://github.com/salesforce/lwc/pull/2460
6549
- if (supportsConstructableStylesheets) {
6550
- insertConstructableStylesheet(content, target, cacheData);
6551
- } else {
6552
- // Fall back to <style> element
6553
- insertStyleElement(content, target, cacheData);
6554
- }
6564
+ target.appendChild(elm);
6555
6565
  }
6556
6566
 
6557
- function getCacheData(content) {
6567
+ function getCacheData(content, useConstructableStylesheet) {
6558
6568
  var cacheData = stylesheetCache.get(content);
6559
6569
 
6560
6570
  if (isUndefined$1(cacheData)) {
6561
6571
  cacheData = {
6562
- stylesheet: supportsConstructableStylesheets ? createConstructableStylesheet(content) : createFreshStyleElement(content),
6572
+ stylesheet: undefined,
6573
+ element: undefined,
6563
6574
  roots: undefined,
6564
6575
  global: false,
6565
- used: false
6576
+ usedElement: false
6566
6577
  };
6567
6578
  stylesheetCache.set(content, cacheData);
6579
+ } // Create <style> elements or CSSStyleSheets on-demand, as needed
6580
+
6581
+
6582
+ if (useConstructableStylesheet && isUndefined$1(cacheData.stylesheet)) {
6583
+ cacheData.stylesheet = createConstructableStylesheet(content);
6584
+ } else if (!useConstructableStylesheet && isUndefined$1(cacheData.element)) {
6585
+ cacheData.element = createFreshStyleElement(content);
6568
6586
  }
6569
6587
 
6570
6588
  return cacheData;
6571
6589
  }
6572
6590
 
6573
6591
  function insertGlobalStylesheet(content) {
6574
- var cacheData = getCacheData(content);
6592
+ // Force a <style> element for global stylesheets. See comment below.
6593
+ var cacheData = getCacheData(content, false);
6575
6594
 
6576
6595
  if (cacheData.global) {
6577
6596
  // already inserted
@@ -6579,12 +6598,13 @@
6579
6598
  }
6580
6599
 
6581
6600
  cacheData.global = true; // mark inserted
6601
+ // TODO [#2922]: use document.adoptedStyleSheets in supported browsers. Currently we can't, due to backwards compat.
6582
6602
 
6583
- doInsertStylesheet(content, document, cacheData);
6603
+ insertStyleElement(content, document.head, cacheData);
6584
6604
  }
6585
6605
 
6586
6606
  function insertLocalStylesheet(content, target) {
6587
- var cacheData = getCacheData(content);
6607
+ var cacheData = getCacheData(content, supportsConstructableStylesheets);
6588
6608
  var roots = cacheData.roots;
6589
6609
 
6590
6610
  if (isUndefined$1(roots)) {
@@ -6595,8 +6615,16 @@
6595
6615
  }
6596
6616
 
6597
6617
  roots.add(target); // mark inserted
6618
+ // Constructable stylesheets are only supported in certain browsers:
6619
+ // https://caniuse.com/mdn-api_document_adoptedstylesheets
6620
+ // The reason we use it is for perf: https://github.com/salesforce/lwc/pull/2460
6598
6621
 
6599
- doInsertStylesheet(content, target, cacheData);
6622
+ if (supportsConstructableStylesheets) {
6623
+ insertConstructableStylesheet(content, target, cacheData);
6624
+ } else {
6625
+ // Fall back to <style> element
6626
+ insertStyleElement(content, target, cacheData);
6627
+ }
6600
6628
  }
6601
6629
 
6602
6630
  function insertStylesheet(content, target) {
@@ -6745,7 +6773,15 @@
6745
6773
  }
6746
6774
 
6747
6775
  function attachShadow(element, options) {
6748
- if (hydrating) {
6776
+ // `hydrating` will be true in two cases:
6777
+ // 1. upon initial load with an SSR-generated DOM, while in Shadow render mode
6778
+ // 2. when a webapp author places <c-app> in their static HTML and mounts their
6779
+ // root component with customeElement.define('c-app', Ctor)
6780
+ //
6781
+ // The second case can be treated as a failed hydration with nominal impact
6782
+ // to performance. However, because <c-app> won't have a <template shadowroot>
6783
+ // declarative child, `element.shadowRoot` is `null`.
6784
+ if (hydrating && element.shadowRoot) {
6749
6785
  return element.shadowRoot;
6750
6786
  }
6751
6787
 
@@ -7256,7 +7292,7 @@
7256
7292
  });
7257
7293
  freeze(LightningElement);
7258
7294
  seal(LightningElement.prototype);
7259
- /* version: 2.20.0 */
7295
+ /* version: 2.20.3 */
7260
7296
 
7261
7297
  exports.LightningElement = LightningElement;
7262
7298
  exports.__unstable__ProfilerControl = profilerControl;