lwc 2.14.0 → 2.15.0

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 (39) hide show
  1. package/dist/engine-dom/esm/es2017/engine-dom.js +637 -554
  2. package/dist/engine-dom/iife/es2017/engine-dom.js +639 -553
  3. package/dist/engine-dom/iife/es2017/engine-dom.min.js +1 -1
  4. package/dist/engine-dom/iife/es2017/engine-dom_debug.js +574 -497
  5. package/dist/engine-dom/iife/es5/engine-dom.js +807 -694
  6. package/dist/engine-dom/iife/es5/engine-dom.min.js +1 -1
  7. package/dist/engine-dom/iife/es5/engine-dom_debug.js +729 -634
  8. package/dist/engine-dom/umd/es2017/engine-dom.js +639 -553
  9. package/dist/engine-dom/umd/es2017/engine-dom.min.js +1 -1
  10. package/dist/engine-dom/umd/es2017/engine-dom_debug.js +574 -497
  11. package/dist/engine-dom/umd/es5/engine-dom.js +807 -694
  12. package/dist/engine-dom/umd/es5/engine-dom.min.js +1 -1
  13. package/dist/engine-dom/umd/es5/engine-dom_debug.js +729 -634
  14. package/dist/engine-server/commonjs/es2017/engine-server.js +494 -473
  15. package/dist/engine-server/commonjs/es2017/engine-server.min.js +1 -1
  16. package/dist/engine-server/esm/es2017/engine-server.js +492 -474
  17. package/dist/synthetic-shadow/esm/es2017/synthetic-shadow.js +24 -4
  18. package/dist/synthetic-shadow/iife/es2017/synthetic-shadow.js +24 -4
  19. package/dist/synthetic-shadow/iife/es2017/synthetic-shadow.min.js +2 -2
  20. package/dist/synthetic-shadow/iife/es2017/synthetic-shadow_debug.js +24 -4
  21. package/dist/synthetic-shadow/iife/es5/synthetic-shadow.js +29 -3
  22. package/dist/synthetic-shadow/iife/es5/synthetic-shadow.min.js +2 -2
  23. package/dist/synthetic-shadow/iife/es5/synthetic-shadow_debug.js +29 -3
  24. package/dist/synthetic-shadow/umd/es2017/synthetic-shadow.js +24 -4
  25. package/dist/synthetic-shadow/umd/es2017/synthetic-shadow.min.js +2 -2
  26. package/dist/synthetic-shadow/umd/es2017/synthetic-shadow_debug.js +24 -4
  27. package/dist/synthetic-shadow/umd/es5/synthetic-shadow.js +29 -3
  28. package/dist/synthetic-shadow/umd/es5/synthetic-shadow.min.js +2 -2
  29. package/dist/synthetic-shadow/umd/es5/synthetic-shadow_debug.js +29 -3
  30. package/dist/wire-service/esm/es2017/wire-service.js +2 -2
  31. package/dist/wire-service/iife/es2017/wire-service.js +2 -2
  32. package/dist/wire-service/iife/es2017/wire-service_debug.js +2 -2
  33. package/dist/wire-service/iife/es5/wire-service.js +2 -2
  34. package/dist/wire-service/iife/es5/wire-service_debug.js +2 -2
  35. package/dist/wire-service/umd/es2017/wire-service.js +2 -2
  36. package/dist/wire-service/umd/es2017/wire-service_debug.js +2 -2
  37. package/dist/wire-service/umd/es5/wire-service.js +2 -2
  38. package/dist/wire-service/umd/es5/wire-service_debug.js +2 -2
  39. package/package.json +7 -7
@@ -302,6 +302,7 @@ var LWC = (function (exports) {
302
302
 
303
303
  var KEY__IS_NATIVE_SHADOW_ROOT_DEFINED = '$isNativeShadowRootDefined$';
304
304
  var KEY__SHADOW_RESOLVER = '$shadowResolver$';
305
+ var KEY__SHADOW_STATIC = '$shadowStaticNode$';
305
306
  var KEY__SHADOW_TOKEN = '$shadowToken$';
306
307
  var KEY__SYNTHETIC_MODE = '$$lwc-synthetic-mode';
307
308
  var KEY__SCOPED_CSS = '$scoped$';
@@ -365,9 +366,9 @@ var LWC = (function (exports) {
365
366
  */
366
367
  // Increment whenever the LWC template compiler changes
367
368
 
368
- var LWC_VERSION = "2.14.0";
369
+ var LWC_VERSION = "2.15.0";
369
370
  var LWC_VERSION_COMMENT_REGEX = /\/\*LWC compiler v([\d.]+)\*\/\s*}/;
370
- /** version: 2.14.0 */
371
+ /** version: 2.15.0 */
371
372
 
372
373
  /*
373
374
  * Copyright (c) 2018, salesforce.com, inc.
@@ -546,8 +547,33 @@ var LWC = (function (exports) {
546
547
  setFeatureFlag(name, value);
547
548
  }
548
549
  }
549
- /** version: 2.14.0 */
550
+ /** version: 2.15.0 */
550
551
 
552
+ /*
553
+ * Copyright (c) 2018, salesforce.com, inc.
554
+ * All rights reserved.
555
+ * SPDX-License-Identifier: MIT
556
+ * For full license text, see the LICENSE file in the repo root or https://opensource.org/licenses/MIT
557
+ */
558
+ // @ts-ignore
559
+
560
+
561
+ if (process.env.NODE_ENV !== 'production' && typeof __karma__ !== 'undefined') {
562
+ window.addEventListener('test-dummy-flag', function () {
563
+ var hasFlag = false;
564
+
565
+ if (runtimeFlags.DUMMY_TEST_FLAG) {
566
+ hasFlag = true;
567
+ }
568
+
569
+ window.dispatchEvent(new CustomEvent('has-dummy-flag', {
570
+ detail: {
571
+ package: '@lwc/engine-dom',
572
+ hasFlag: hasFlag
573
+ }
574
+ }));
575
+ });
576
+ }
551
577
  /* proxy-compat-disable */
552
578
 
553
579
  /*
@@ -699,237 +725,6 @@ var LWC = (function (exports) {
699
725
  }
700
726
 
701
727
  return list;
702
- } //
703
- // Primitives
704
- //
705
-
706
-
707
- var ssr$1;
708
-
709
- function setSsr(ssrImpl) {
710
- ssr$1 = ssrImpl;
711
- }
712
-
713
- var isNativeShadowDefined$1;
714
-
715
- function setIsNativeShadowDefined(isNativeShadowDefinedImpl) {
716
- isNativeShadowDefined$1 = isNativeShadowDefinedImpl;
717
- }
718
-
719
- var isSyntheticShadowDefined$1;
720
-
721
- function setIsSyntheticShadowDefined(isSyntheticShadowDefinedImpl) {
722
- isSyntheticShadowDefined$1 = isSyntheticShadowDefinedImpl;
723
- }
724
-
725
- var HTMLElementExported$1;
726
-
727
- function setHTMLElement(HTMLElementImpl) {
728
- HTMLElementExported$1 = HTMLElementImpl;
729
- }
730
-
731
- var insert$1;
732
-
733
- function setInsert(insertImpl) {
734
- insert$1 = insertImpl;
735
- }
736
-
737
- var remove$1;
738
-
739
- function setRemove(removeImpl) {
740
- remove$1 = removeImpl;
741
- }
742
-
743
- var createElement$2;
744
-
745
- function setCreateElement(createElementImpl) {
746
- createElement$2 = createElementImpl;
747
- }
748
-
749
- var createText$1;
750
-
751
- function setCreateText(createTextImpl) {
752
- createText$1 = createTextImpl;
753
- }
754
-
755
- var createComment$1;
756
-
757
- function setCreateComment(createCommentImpl) {
758
- createComment$1 = createCommentImpl;
759
- }
760
-
761
- var nextSibling$1;
762
-
763
- function setNextSibling(nextSiblingImpl) {
764
- nextSibling$1 = nextSiblingImpl;
765
- }
766
-
767
- var attachShadow$1;
768
-
769
- function setAttachShadow(attachShadowImpl) {
770
- attachShadow$1 = attachShadowImpl;
771
- }
772
-
773
- var getProperty$1;
774
-
775
- function setGetProperty(getPropertyImpl) {
776
- getProperty$1 = getPropertyImpl;
777
- }
778
-
779
- var setProperty$1;
780
-
781
- function setSetProperty(setPropertyImpl) {
782
- setProperty$1 = setPropertyImpl;
783
- }
784
-
785
- var setText$1;
786
-
787
- function setSetText(setTextImpl) {
788
- setText$1 = setTextImpl;
789
- }
790
-
791
- var getAttribute$1;
792
-
793
- function setGetAttribute(getAttributeImpl) {
794
- getAttribute$1 = getAttributeImpl;
795
- }
796
-
797
- var setAttribute$1;
798
-
799
- function setSetAttribute(setAttributeImpl) {
800
- setAttribute$1 = setAttributeImpl;
801
- }
802
-
803
- var removeAttribute$1;
804
-
805
- function setRemoveAttribute(removeAttributeImpl) {
806
- removeAttribute$1 = removeAttributeImpl;
807
- }
808
-
809
- var addEventListener$1;
810
-
811
- function setAddEventListener(addEventListenerImpl) {
812
- addEventListener$1 = addEventListenerImpl;
813
- }
814
-
815
- var removeEventListener$1;
816
-
817
- function setRemoveEventListener(removeEventListenerImpl) {
818
- removeEventListener$1 = removeEventListenerImpl;
819
- }
820
-
821
- var dispatchEvent$1;
822
-
823
- function setDispatchEvent(dispatchEventImpl) {
824
- dispatchEvent$1 = dispatchEventImpl;
825
- }
826
-
827
- var getClassList$1;
828
-
829
- function setGetClassList(getClassListImpl) {
830
- getClassList$1 = getClassListImpl;
831
- }
832
-
833
- var setCSSStyleProperty$1;
834
-
835
- function setSetCSSStyleProperty(setCSSStylePropertyImpl) {
836
- setCSSStyleProperty$1 = setCSSStylePropertyImpl;
837
- }
838
-
839
- var getBoundingClientRect$1;
840
-
841
- function setGetBoundingClientRect(getBoundingClientRectImpl) {
842
- getBoundingClientRect$1 = getBoundingClientRectImpl;
843
- }
844
-
845
- var querySelector$1;
846
-
847
- function setQuerySelector(querySelectorImpl) {
848
- querySelector$1 = querySelectorImpl;
849
- }
850
-
851
- var querySelectorAll$1;
852
-
853
- function setQuerySelectorAll(querySelectorAllImpl) {
854
- querySelectorAll$1 = querySelectorAllImpl;
855
- }
856
-
857
- var getElementsByTagName$1;
858
-
859
- function setGetElementsByTagName(getElementsByTagNameImpl) {
860
- getElementsByTagName$1 = getElementsByTagNameImpl;
861
- }
862
-
863
- var getElementsByClassName$1;
864
-
865
- function setGetElementsByClassName(getElementsByClassNameImpl) {
866
- getElementsByClassName$1 = getElementsByClassNameImpl;
867
- }
868
-
869
- var getChildren$1;
870
-
871
- function setGetChildren(getChildrenImpl) {
872
- getChildren$1 = getChildrenImpl;
873
- }
874
-
875
- var getChildNodes$1;
876
-
877
- function setGetChildNodes(getChildNodesImpl) {
878
- getChildNodes$1 = getChildNodesImpl;
879
- }
880
-
881
- var getFirstChild$1;
882
-
883
- function setGetFirstChild(getFirstChildImpl) {
884
- getFirstChild$1 = getFirstChildImpl;
885
- }
886
-
887
- var getFirstElementChild$1;
888
-
889
- function setGetFirstElementChild(getFirstElementChildImpl) {
890
- getFirstElementChild$1 = getFirstElementChildImpl;
891
- }
892
-
893
- var getLastChild$1;
894
-
895
- function setGetLastChild(getLastChildImpl) {
896
- getLastChild$1 = getLastChildImpl;
897
- }
898
-
899
- var getLastElementChild$1;
900
-
901
- function setGetLastElementChild(getLastElementChildImpl) {
902
- getLastElementChild$1 = getLastElementChildImpl;
903
- }
904
-
905
- var isConnected$1;
906
-
907
- function setIsConnected(isConnectedImpl) {
908
- isConnected$1 = isConnectedImpl;
909
- }
910
-
911
- var insertStylesheet$1;
912
-
913
- function setInsertStylesheet(insertStylesheetImpl) {
914
- insertStylesheet$1 = insertStylesheetImpl;
915
- }
916
-
917
- var assertInstanceOfHTMLElement$1;
918
-
919
- function setAssertInstanceOfHTMLElement(assertInstanceOfHTMLElementImpl) {
920
- assertInstanceOfHTMLElement$1 = assertInstanceOfHTMLElementImpl;
921
- }
922
-
923
- var defineCustomElement$1;
924
-
925
- function setDefineCustomElement(defineCustomElementImpl) {
926
- defineCustomElement$1 = defineCustomElementImpl;
927
- }
928
-
929
- var getCustomElement$1;
930
-
931
- function setGetCustomElement(getCustomElementImpl) {
932
- getCustomElement$1 = getCustomElementImpl;
933
728
  }
934
729
  /*
935
730
  * Copyright (c) 2019, salesforce.com, inc.
@@ -2582,7 +2377,9 @@ var LWC = (function (exports) {
2582
2377
  var bridge = def.bridge;
2583
2378
 
2584
2379
  if (process.env.NODE_ENV !== 'production') {
2585
- assertInstanceOfHTMLElement$1(vm.elm, "Component creation requires a DOM element to be associated to ".concat(vm, "."));
2380
+ var _assertInstanceOfHTMLElement = vm.renderer.assertInstanceOfHTMLElement;
2381
+
2382
+ _assertInstanceOfHTMLElement(vm.elm, "Component creation requires a DOM element to be associated to ".concat(vm, "."));
2586
2383
  }
2587
2384
 
2588
2385
  var component = this;
@@ -2626,13 +2423,14 @@ var LWC = (function (exports) {
2626
2423
  };
2627
2424
 
2628
2425
  function doAttachShadow(vm) {
2629
- var _attachShadow$;
2426
+ var _attachShadow;
2630
2427
 
2631
2428
  var elm = vm.elm,
2632
2429
  mode = vm.mode,
2633
2430
  shadowMode = vm.shadowMode,
2634
- ctor = vm.def.ctor;
2635
- var shadowRoot = attachShadow$1(elm, (_attachShadow$ = {}, _defineProperty(_attachShadow$, KEY__SYNTHETIC_MODE, shadowMode === 1), _defineProperty(_attachShadow$, "delegatesFocus", Boolean(ctor.delegatesFocus)), _defineProperty(_attachShadow$, "mode", mode), _attachShadow$));
2431
+ ctor = vm.def.ctor,
2432
+ attachShadow = vm.renderer.attachShadow;
2433
+ var shadowRoot = attachShadow(elm, (_attachShadow = {}, _defineProperty(_attachShadow, KEY__SYNTHETIC_MODE, shadowMode === 1), _defineProperty(_attachShadow, "delegatesFocus", Boolean(ctor.delegatesFocus)), _defineProperty(_attachShadow, "mode", mode), _attachShadow));
2636
2434
  vm.shadowRoot = shadowRoot;
2637
2435
  associateVM(shadowRoot, vm);
2638
2436
 
@@ -2653,14 +2451,15 @@ var LWC = (function (exports) {
2653
2451
  LightningElement.prototype = {
2654
2452
  constructor: LightningElement,
2655
2453
  dispatchEvent: function dispatchEvent(event) {
2656
- var _getAssociatedVM = getAssociatedVM(this),
2657
- elm = _getAssociatedVM.elm;
2658
-
2659
- return dispatchEvent$1(elm, event);
2454
+ var vm = getAssociatedVM(this);
2455
+ var elm = vm.elm,
2456
+ dispatchEvent = vm.renderer.dispatchEvent;
2457
+ return dispatchEvent(elm, event);
2660
2458
  },
2661
2459
  addEventListener: function addEventListener(type, listener, options) {
2662
2460
  var vm = getAssociatedVM(this);
2663
- var elm = vm.elm;
2461
+ var elm = vm.elm,
2462
+ addEventListener = vm.renderer.addEventListener;
2664
2463
 
2665
2464
  if (process.env.NODE_ENV !== 'production') {
2666
2465
  var _vmBeingRendered2 = getVMBeingRendered();
@@ -2671,99 +2470,105 @@ var LWC = (function (exports) {
2671
2470
  }
2672
2471
 
2673
2472
  var wrappedListener = getWrappedComponentsListener(vm, listener);
2674
- addEventListener$1(elm, type, wrappedListener, options);
2473
+ addEventListener(elm, type, wrappedListener, options);
2675
2474
  },
2676
2475
  removeEventListener: function removeEventListener(type, listener, options) {
2677
2476
  var vm = getAssociatedVM(this);
2678
- var elm = vm.elm;
2477
+ var elm = vm.elm,
2478
+ removeEventListener = vm.renderer.removeEventListener;
2679
2479
  var wrappedListener = getWrappedComponentsListener(vm, listener);
2680
- removeEventListener$1(elm, type, wrappedListener, options);
2480
+ removeEventListener(elm, type, wrappedListener, options);
2681
2481
  },
2682
2482
  hasAttribute: function hasAttribute(name) {
2683
- var _getAssociatedVM2 = getAssociatedVM(this),
2684
- elm = _getAssociatedVM2.elm;
2685
-
2686
- return !isNull(getAttribute$1(elm, name));
2483
+ var vm = getAssociatedVM(this);
2484
+ var elm = vm.elm,
2485
+ getAttribute = vm.renderer.getAttribute;
2486
+ return !isNull(getAttribute(elm, name));
2687
2487
  },
2688
2488
  hasAttributeNS: function hasAttributeNS(namespace, name) {
2689
- var _getAssociatedVM3 = getAssociatedVM(this),
2690
- elm = _getAssociatedVM3.elm;
2691
-
2692
- return !isNull(getAttribute$1(elm, name, namespace));
2489
+ var vm = getAssociatedVM(this);
2490
+ var elm = vm.elm,
2491
+ getAttribute = vm.renderer.getAttribute;
2492
+ return !isNull(getAttribute(elm, name, namespace));
2693
2493
  },
2694
2494
  removeAttribute: function removeAttribute(name) {
2695
- var _getAssociatedVM4 = getAssociatedVM(this),
2696
- elm = _getAssociatedVM4.elm;
2697
-
2495
+ var vm = getAssociatedVM(this);
2496
+ var elm = vm.elm,
2497
+ removeAttribute = vm.renderer.removeAttribute;
2698
2498
  unlockAttribute(elm, name);
2699
- removeAttribute$1(elm, name);
2499
+ removeAttribute(elm, name);
2700
2500
  lockAttribute();
2701
2501
  },
2702
2502
  removeAttributeNS: function removeAttributeNS(namespace, name) {
2703
- var _getAssociatedVM5 = getAssociatedVM(this),
2704
- elm = _getAssociatedVM5.elm;
2503
+ var _getAssociatedVM = getAssociatedVM(this),
2504
+ elm = _getAssociatedVM.elm,
2505
+ removeAttribute = _getAssociatedVM.renderer.removeAttribute;
2705
2506
 
2706
2507
  unlockAttribute(elm, name);
2707
- removeAttribute$1(elm, name, namespace);
2508
+ removeAttribute(elm, name, namespace);
2708
2509
  lockAttribute();
2709
2510
  },
2710
2511
  getAttribute: function getAttribute(name) {
2711
- var _getAssociatedVM6 = getAssociatedVM(this),
2712
- elm = _getAssociatedVM6.elm;
2713
-
2714
- return getAttribute$1(elm, name);
2512
+ var vm = getAssociatedVM(this);
2513
+ var elm = vm.elm;
2514
+ var getAttribute = vm.renderer.getAttribute;
2515
+ return getAttribute(elm, name);
2715
2516
  },
2716
2517
  getAttributeNS: function getAttributeNS(namespace, name) {
2717
- var _getAssociatedVM7 = getAssociatedVM(this),
2718
- elm = _getAssociatedVM7.elm;
2719
-
2720
- return getAttribute$1(elm, name, namespace);
2518
+ var vm = getAssociatedVM(this);
2519
+ var elm = vm.elm;
2520
+ var getAttribute = vm.renderer.getAttribute;
2521
+ return getAttribute(elm, name, namespace);
2721
2522
  },
2722
2523
  setAttribute: function setAttribute(name, value) {
2723
2524
  var vm = getAssociatedVM(this);
2724
- var elm = vm.elm;
2525
+ var elm = vm.elm,
2526
+ setAttribute = vm.renderer.setAttribute;
2725
2527
 
2726
2528
  if (process.env.NODE_ENV !== 'production') {
2727
2529
  assert.isFalse(isBeingConstructed(vm), "Failed to construct '".concat(getComponentTag(vm), "': The result must not have attributes."));
2728
2530
  }
2729
2531
 
2730
2532
  unlockAttribute(elm, name);
2731
- setAttribute$1(elm, name, value);
2533
+ setAttribute(elm, name, value);
2732
2534
  lockAttribute();
2733
2535
  },
2734
2536
  setAttributeNS: function setAttributeNS(namespace, name, value) {
2735
2537
  var vm = getAssociatedVM(this);
2736
- var elm = vm.elm;
2538
+ var elm = vm.elm,
2539
+ setAttribute = vm.renderer.setAttribute;
2737
2540
 
2738
2541
  if (process.env.NODE_ENV !== 'production') {
2739
2542
  assert.isFalse(isBeingConstructed(vm), "Failed to construct '".concat(getComponentTag(vm), "': The result must not have attributes."));
2740
2543
  }
2741
2544
 
2742
2545
  unlockAttribute(elm, name);
2743
- setAttribute$1(elm, name, value, namespace);
2546
+ setAttribute(elm, name, value, namespace);
2744
2547
  lockAttribute();
2745
2548
  },
2746
2549
  getBoundingClientRect: function getBoundingClientRect() {
2747
2550
  var vm = getAssociatedVM(this);
2748
- var elm = vm.elm;
2551
+ var elm = vm.elm,
2552
+ getBoundingClientRect = vm.renderer.getBoundingClientRect;
2749
2553
 
2750
2554
  if (process.env.NODE_ENV !== 'production') {
2751
2555
  warnIfInvokedDuringConstruction(vm, 'getBoundingClientRect()');
2752
2556
  }
2753
2557
 
2754
- return getBoundingClientRect$1(elm);
2558
+ return getBoundingClientRect(elm);
2755
2559
  },
2756
2560
 
2757
2561
  get isConnected() {
2758
- var _getAssociatedVM8 = getAssociatedVM(this),
2759
- elm = _getAssociatedVM8.elm;
2760
-
2761
- return isConnected$1(elm);
2562
+ var vm = getAssociatedVM(this);
2563
+ var elm = vm.elm,
2564
+ isConnected = vm.renderer.isConnected;
2565
+ return isConnected(elm);
2762
2566
  },
2763
2567
 
2764
2568
  get classList() {
2765
2569
  var vm = getAssociatedVM(this);
2766
- var elm = vm.elm;
2570
+ var elm = vm.elm,
2571
+ getClassList = vm.renderer.getClassList;
2767
2572
 
2768
2573
  if (process.env.NODE_ENV !== 'production') {
2769
2574
  // TODO [#1290]: this still fails in dev but works in production, eventually, we should
@@ -2771,7 +2576,7 @@ var LWC = (function (exports) {
2771
2576
  assert.isFalse(isBeingConstructed(vm), "Failed to construct ".concat(vm, ": The result must not have attributes. Adding or tampering with classname in constructor is not allowed in a web component, use connectedCallback() instead."));
2772
2577
  }
2773
2578
 
2774
- return getClassList$1(elm);
2579
+ return getClassList(elm);
2775
2580
  },
2776
2581
 
2777
2582
  get template() {
@@ -2794,97 +2599,97 @@ var LWC = (function (exports) {
2794
2599
  return null;
2795
2600
  },
2796
2601
 
2797
- render: function render() {
2798
- var vm = getAssociatedVM(this);
2799
- return vm.def.template;
2800
- },
2801
- toString: function toString() {
2602
+ get children() {
2802
2603
  var vm = getAssociatedVM(this);
2803
- return "[object ".concat(vm.def.name, "]");
2804
- }
2805
- };
2806
- var queryAndChildGetterDescriptors = create(null); // The reason we don't just call `import * as renderer from '../renderer'` here is that the bundle size
2807
- // is smaller if we reference each function individually. Otherwise Rollup will create one big frozen
2808
- // object representing the renderer, with a lot of methods we don't actually need.
2604
+ var renderer = vm.renderer;
2809
2605
 
2810
- var childGetters = ['children', 'childNodes', 'firstChild', 'firstElementChild', 'lastChild', 'lastElementChild'];
2606
+ if (process.env.NODE_ENV !== 'production') {
2607
+ warnIfInvokedDuringConstruction(vm, 'children');
2608
+ }
2811
2609
 
2812
- function getChildGetter(methodName) {
2813
- switch (methodName) {
2814
- case 'children':
2815
- return getChildren$1;
2610
+ return renderer.getChildren(vm.elm);
2611
+ },
2816
2612
 
2817
- case 'childNodes':
2818
- return getChildNodes$1;
2613
+ get childNodes() {
2614
+ var vm = getAssociatedVM(this);
2615
+ var renderer = vm.renderer;
2819
2616
 
2820
- case 'firstChild':
2821
- return getFirstChild$1;
2617
+ if (process.env.NODE_ENV !== 'production') {
2618
+ warnIfInvokedDuringConstruction(vm, 'childNodes');
2619
+ }
2822
2620
 
2823
- case 'firstElementChild':
2824
- return getFirstElementChild$1;
2621
+ return renderer.getChildNodes(vm.elm);
2622
+ },
2825
2623
 
2826
- case 'lastChild':
2827
- return getLastChild$1;
2624
+ get firstChild() {
2625
+ var vm = getAssociatedVM(this);
2626
+ var renderer = vm.renderer;
2828
2627
 
2829
- case 'lastElementChild':
2830
- return getLastElementChild$1;
2831
- }
2832
- } // Generic passthrough for child getters on HTMLElement to the relevant Renderer APIs
2628
+ if (process.env.NODE_ENV !== 'production') {
2629
+ warnIfInvokedDuringConstruction(vm, 'firstChild');
2630
+ }
2833
2631
 
2632
+ return renderer.getFirstChild(vm.elm);
2633
+ },
2834
2634
 
2835
- var _loop = function _loop() {
2836
- var childGetter = _childGetters[_i7];
2837
- queryAndChildGetterDescriptors[childGetter] = {
2838
- get: function get() {
2839
- var vm = getAssociatedVM(this);
2840
- var elm = vm.elm;
2635
+ get firstElementChild() {
2636
+ var vm = getAssociatedVM(this);
2637
+ var renderer = vm.renderer;
2841
2638
 
2842
- if (process.env.NODE_ENV !== 'production') {
2843
- warnIfInvokedDuringConstruction(vm, childGetter);
2844
- }
2639
+ if (process.env.NODE_ENV !== 'production') {
2640
+ warnIfInvokedDuringConstruction(vm, 'firstElementChild');
2641
+ }
2845
2642
 
2846
- return getChildGetter(childGetter)(elm);
2847
- },
2848
- configurable: true,
2849
- enumerable: true
2850
- };
2851
- };
2643
+ return renderer.getFirstElementChild(vm.elm);
2644
+ },
2852
2645
 
2853
- for (var _i7 = 0, _childGetters = childGetters; _i7 < _childGetters.length; _i7++) {
2854
- _loop();
2855
- }
2646
+ get lastChild() {
2647
+ var vm = getAssociatedVM(this);
2648
+ var renderer = vm.renderer;
2856
2649
 
2857
- var queryMethods = ['getElementsByClassName', 'getElementsByTagName', 'querySelector', 'querySelectorAll'];
2650
+ if (process.env.NODE_ENV !== 'production') {
2651
+ warnIfInvokedDuringConstruction(vm, 'lastChild');
2652
+ }
2858
2653
 
2859
- function getQueryMethod(methodName) {
2860
- switch (methodName) {
2861
- case 'getElementsByClassName':
2862
- return getElementsByClassName$1;
2654
+ return renderer.getLastChild(vm.elm);
2655
+ },
2863
2656
 
2864
- case 'getElementsByTagName':
2865
- return getElementsByTagName$1;
2657
+ get lastElementChild() {
2658
+ var vm = getAssociatedVM(this);
2659
+ var renderer = vm.renderer;
2866
2660
 
2867
- case 'querySelector':
2868
- return querySelector$1;
2661
+ if (process.env.NODE_ENV !== 'production') {
2662
+ warnIfInvokedDuringConstruction(vm, 'lastElementChild');
2663
+ }
2869
2664
 
2870
- case 'querySelectorAll':
2871
- return querySelectorAll$1;
2872
- }
2873
- } // Generic passthrough for query APIs on HTMLElement to the relevant Renderer APIs
2665
+ return renderer.getLastElementChild(vm.elm);
2666
+ },
2874
2667
 
2668
+ render: function render() {
2669
+ var vm = getAssociatedVM(this);
2670
+ return vm.def.template;
2671
+ },
2672
+ toString: function toString() {
2673
+ var vm = getAssociatedVM(this);
2674
+ return "[object ".concat(vm.def.name, "]");
2675
+ }
2676
+ };
2677
+ var queryAndChildGetterDescriptors = create(null);
2678
+ var queryMethods = ['getElementsByClassName', 'getElementsByTagName', 'querySelector', 'querySelectorAll']; // Generic passthrough for query APIs on HTMLElement to the relevant Renderer APIs
2875
2679
 
2876
- var _loop2 = function _loop2() {
2877
- var queryMethod = _queryMethods[_i8];
2680
+ var _loop = function _loop() {
2681
+ var queryMethod = _queryMethods[_i7];
2878
2682
  queryAndChildGetterDescriptors[queryMethod] = {
2879
2683
  value: function value(arg) {
2880
2684
  var vm = getAssociatedVM(this);
2881
- var elm = vm.elm;
2685
+ var elm = vm.elm,
2686
+ renderer = vm.renderer;
2882
2687
 
2883
2688
  if (process.env.NODE_ENV !== 'production') {
2884
2689
  warnIfInvokedDuringConstruction(vm, "".concat(queryMethod, "()"));
2885
2690
  }
2886
2691
 
2887
- return getQueryMethod(queryMethod)(elm, arg);
2692
+ return renderer[queryMethod](elm, arg);
2888
2693
  },
2889
2694
  configurable: true,
2890
2695
  enumerable: true,
@@ -2892,8 +2697,8 @@ var LWC = (function (exports) {
2892
2697
  };
2893
2698
  };
2894
2699
 
2895
- for (var _i8 = 0, _queryMethods = queryMethods; _i8 < _queryMethods.length; _i8++) {
2896
- _loop2();
2700
+ for (var _i7 = 0, _queryMethods = queryMethods; _i7 < _queryMethods.length; _i7++) {
2701
+ _loop();
2897
2702
  }
2898
2703
 
2899
2704
  defineProperties(LightningElement.prototype, queryAndChildGetterDescriptors);
@@ -3415,8 +3220,8 @@ var LWC = (function (exports) {
3415
3220
  }
3416
3221
 
3417
3222
  if (!isUndefined$1(fields)) {
3418
- for (var _i9 = 0, n = fields.length; _i9 < n; _i9++) {
3419
- var _fieldName2 = fields[_i9];
3223
+ for (var _i8 = 0, n = fields.length; _i8 < n; _i8++) {
3224
+ var _fieldName2 = fields[_i8];
3420
3225
  descriptor = getOwnPropertyDescriptor$1(proto, _fieldName2);
3421
3226
 
3422
3227
  if (process.env.NODE_ENV !== 'production') {
@@ -3472,9 +3277,9 @@ var LWC = (function (exports) {
3472
3277
  */
3473
3278
 
3474
3279
 
3475
- var warned = false;
3280
+ var warned = false; // @ts-ignore
3476
3281
 
3477
- if (process.env.NODE_ENV === 'development') {
3282
+ if (process.env.NODE_ENV !== 'production' && typeof __karma__ !== 'undefined') {
3478
3283
  // @ts-ignore
3479
3284
  window.__lwcResetWarnedOnVersionMismatch = function () {
3480
3285
  warned = false;
@@ -3719,8 +3524,8 @@ var LWC = (function (exports) {
3719
3524
  superObservedAttributes = _SuperClass$observedA === void 0 ? [] : _SuperClass$observedA;
3720
3525
  var descriptors = create(null); // expose getters and setters for each public props on the new Element Bridge
3721
3526
 
3722
- for (var _i10 = 0, len = props.length; _i10 < len; _i10 += 1) {
3723
- var _propName = props[_i10];
3527
+ for (var _i9 = 0, len = props.length; _i9 < len; _i9 += 1) {
3528
+ var _propName = props[_i9];
3724
3529
  attributeToPropMap[htmlPropertyToAttribute(_propName)] = _propName;
3725
3530
  descriptors[_propName] = {
3726
3531
  get: createGetter(_propName),
@@ -3731,8 +3536,8 @@ var LWC = (function (exports) {
3731
3536
  } // expose public methods as props on the new Element Bridge
3732
3537
 
3733
3538
 
3734
- for (var _i11 = 0, _len3 = methods.length; _i11 < _len3; _i11 += 1) {
3735
- var methodName = methods[_i11];
3539
+ for (var _i10 = 0, _len3 = methods.length; _i10 < _len3; _i10 += 1) {
3540
+ var methodName = methods[_i10];
3736
3541
  descriptors[methodName] = {
3737
3542
  value: createMethodCaller(methodName),
3738
3543
  writable: true,
@@ -4320,12 +4125,15 @@ var LWC = (function (exports) {
4320
4125
  */
4321
4126
 
4322
4127
 
4323
- function getUpgradableConstructor(tagName) {
4324
- // Should never get a tag with upper case letter at this point, the compiler should
4128
+ function getUpgradableConstructor(tagName, renderer) {
4129
+ var getCustomElement = renderer.getCustomElement,
4130
+ RendererHTMLElement = renderer.HTMLElementExported,
4131
+ defineCustomElement = renderer.defineCustomElement; // Should never get a tag with upper case letter at this point, the compiler should
4325
4132
  // produce only tags with lowercase letters
4326
4133
  // But, for backwards compatibility, we will lower case the tagName
4134
+
4327
4135
  tagName = tagName.toLowerCase();
4328
- var CE = getCustomElement$1(tagName);
4136
+ var CE = getCustomElement(tagName);
4329
4137
 
4330
4138
  if (!isUndefined$1(CE)) {
4331
4139
  return CE;
@@ -4336,8 +4144,8 @@ var LWC = (function (exports) {
4336
4144
  */
4337
4145
 
4338
4146
 
4339
- CE = /*#__PURE__*/function (_HTMLElementExported$) {
4340
- _inherits(LWCUpgradableElement, _HTMLElementExported$);
4147
+ CE = /*#__PURE__*/function (_RendererHTMLElement) {
4148
+ _inherits(LWCUpgradableElement, _RendererHTMLElement);
4341
4149
 
4342
4150
  var _super5 = _createSuper(LWCUpgradableElement);
4343
4151
 
@@ -4356,9 +4164,9 @@ var LWC = (function (exports) {
4356
4164
  }
4357
4165
 
4358
4166
  return _createClass(LWCUpgradableElement);
4359
- }(HTMLElementExported$1);
4167
+ }(RendererHTMLElement);
4360
4168
 
4361
- defineCustomElement$1(tagName, CE);
4169
+ defineCustomElement(tagName, CE);
4362
4170
  return CE;
4363
4171
  }
4364
4172
  /*
@@ -4391,7 +4199,7 @@ var LWC = (function (exports) {
4391
4199
 
4392
4200
  var ColonCharCode = 58;
4393
4201
 
4394
- function patchAttributes(oldVnode, vnode) {
4202
+ function patchAttributes(oldVnode, vnode, renderer) {
4395
4203
  var attrs = vnode.data.attrs;
4396
4204
 
4397
4205
  if (isUndefined$1(attrs)) {
@@ -4405,6 +4213,8 @@ var LWC = (function (exports) {
4405
4213
  }
4406
4214
 
4407
4215
  var elm = vnode.elm;
4216
+ var setAttribute = renderer.setAttribute,
4217
+ removeAttribute = renderer.removeAttribute;
4408
4218
 
4409
4219
  for (var key in attrs) {
4410
4220
  var cur = attrs[key];
@@ -4415,14 +4225,14 @@ var LWC = (function (exports) {
4415
4225
 
4416
4226
  if (StringCharCodeAt.call(key, 3) === ColonCharCode) {
4417
4227
  // Assume xml namespace
4418
- setAttribute$1(elm, key, cur, XML_NAMESPACE);
4228
+ setAttribute(elm, key, cur, XML_NAMESPACE);
4419
4229
  } else if (StringCharCodeAt.call(key, 5) === ColonCharCode) {
4420
4230
  // Assume xlink namespace
4421
- setAttribute$1(elm, key, cur, XLINK_NAMESPACE);
4231
+ setAttribute(elm, key, cur, XLINK_NAMESPACE);
4422
4232
  } else if (isNull(cur) || isUndefined$1(cur)) {
4423
- removeAttribute$1(elm, key);
4233
+ removeAttribute(elm, key);
4424
4234
  } else {
4425
- setAttribute$1(elm, key, cur);
4235
+ setAttribute(elm, key, cur);
4426
4236
  }
4427
4237
 
4428
4238
  lockAttribute();
@@ -4443,7 +4253,7 @@ var LWC = (function (exports) {
4443
4253
  return sel === 'input' && (key === 'value' || key === 'checked');
4444
4254
  }
4445
4255
 
4446
- function patchProps(oldVnode, vnode) {
4256
+ function patchProps(oldVnode, vnode, renderer) {
4447
4257
  var props = vnode.data.props;
4448
4258
 
4449
4259
  if (isUndefined$1(props)) {
@@ -4459,13 +4269,15 @@ var LWC = (function (exports) {
4459
4269
  var isFirstPatch = isNull(oldVnode);
4460
4270
  var elm = vnode.elm,
4461
4271
  sel = vnode.sel;
4272
+ var getProperty = renderer.getProperty,
4273
+ setProperty = renderer.setProperty;
4462
4274
 
4463
4275
  for (var key in props) {
4464
4276
  var cur = props[key]; // Set the property if it's the first time is is patched or if the previous property is
4465
4277
  // different than the one previously set.
4466
4278
 
4467
- if (isFirstPatch || cur !== (isLiveBindingProp(sel, key) ? getProperty$1(elm, key) : oldProps[key])) {
4468
- setProperty$1(elm, key, cur);
4279
+ if (isFirstPatch || cur !== (isLiveBindingProp(sel, key) ? getProperty(elm, key) : oldProps[key])) {
4280
+ setProperty(elm, key, cur);
4469
4281
  }
4470
4282
  }
4471
4283
  }
@@ -4522,7 +4334,7 @@ var LWC = (function (exports) {
4522
4334
  return map;
4523
4335
  }
4524
4336
 
4525
- function patchClassAttribute(oldVnode, vnode) {
4337
+ function patchClassAttribute(oldVnode, vnode, renderer) {
4526
4338
  var elm = vnode.elm,
4527
4339
  newClass = vnode.data.className;
4528
4340
  var oldClass = isNull(oldVnode) ? undefined : oldVnode.data.className;
@@ -4531,7 +4343,8 @@ var LWC = (function (exports) {
4531
4343
  return;
4532
4344
  }
4533
4345
 
4534
- var classList = getClassList$1(elm);
4346
+ var getClassList = renderer.getClassList;
4347
+ var classList = getClassList(elm);
4535
4348
  var newClassMap = getMapFromClassName(newClass);
4536
4349
  var oldClassMap = getMapFromClassName(oldClass);
4537
4350
  var name;
@@ -4558,7 +4371,7 @@ var LWC = (function (exports) {
4558
4371
  // The style property is a string when defined via an expression in the template.
4559
4372
 
4560
4373
 
4561
- function patchStyleAttribute(oldVnode, vnode) {
4374
+ function patchStyleAttribute(oldVnode, vnode, renderer) {
4562
4375
  var elm = vnode.elm,
4563
4376
  newStyle = vnode.data.style;
4564
4377
  var oldStyle = isNull(oldVnode) ? undefined : oldVnode.data.style;
@@ -4567,10 +4380,13 @@ var LWC = (function (exports) {
4567
4380
  return;
4568
4381
  }
4569
4382
 
4383
+ var setAttribute = renderer.setAttribute,
4384
+ removeAttribute = renderer.removeAttribute;
4385
+
4570
4386
  if (!isString(newStyle) || newStyle === '') {
4571
- removeAttribute$1(elm, 'style');
4387
+ removeAttribute(elm, 'style');
4572
4388
  } else {
4573
- setAttribute$1(elm, 'style', newStyle);
4389
+ setAttribute(elm, 'style', newStyle);
4574
4390
  }
4575
4391
  }
4576
4392
  /*
@@ -4581,7 +4397,7 @@ var LWC = (function (exports) {
4581
4397
  */
4582
4398
 
4583
4399
 
4584
- function applyEventListeners(vnode) {
4400
+ function applyEventListeners(vnode, renderer) {
4585
4401
  var elm = vnode.elm,
4586
4402
  on = vnode.data.on;
4587
4403
 
@@ -4589,9 +4405,11 @@ var LWC = (function (exports) {
4589
4405
  return;
4590
4406
  }
4591
4407
 
4408
+ var addEventListener = renderer.addEventListener;
4409
+
4592
4410
  for (var name in on) {
4593
4411
  var handler = on[name];
4594
- addEventListener$1(elm, name, handler);
4412
+ addEventListener(elm, name, handler);
4595
4413
  }
4596
4414
  }
4597
4415
  /*
@@ -4605,7 +4423,7 @@ var LWC = (function (exports) {
4605
4423
  // different classnames properties individually instead of via a string.
4606
4424
 
4607
4425
 
4608
- function applyStaticClassAttribute(vnode) {
4426
+ function applyStaticClassAttribute(vnode, renderer) {
4609
4427
  var elm = vnode.elm,
4610
4428
  classMap = vnode.data.classMap;
4611
4429
 
@@ -4613,7 +4431,8 @@ var LWC = (function (exports) {
4613
4431
  return;
4614
4432
  }
4615
4433
 
4616
- var classList = getClassList$1(elm);
4434
+ var getClassList = renderer.getClassList;
4435
+ var classList = getClassList(elm);
4617
4436
 
4618
4437
  for (var name in classMap) {
4619
4438
  classList.add(name);
@@ -4630,7 +4449,7 @@ var LWC = (function (exports) {
4630
4449
  // different style properties individually instead of via a string.
4631
4450
 
4632
4451
 
4633
- function applyStaticStyleAttribute(vnode) {
4452
+ function applyStaticStyleAttribute(vnode, renderer) {
4634
4453
  var elm = vnode.elm,
4635
4454
  styleDecls = vnode.data.styleDecls;
4636
4455
 
@@ -4638,13 +4457,15 @@ var LWC = (function (exports) {
4638
4457
  return;
4639
4458
  }
4640
4459
 
4641
- for (var _i12 = 0; _i12 < styleDecls.length; _i12++) {
4642
- var _styleDecls$_i = _slicedToArray(styleDecls[_i12], 3),
4460
+ var setCSSStyleProperty = renderer.setCSSStyleProperty;
4461
+
4462
+ for (var _i11 = 0; _i11 < styleDecls.length; _i11++) {
4463
+ var _styleDecls$_i = _slicedToArray(styleDecls[_i11], 3),
4643
4464
  prop = _styleDecls$_i[0],
4644
4465
  value = _styleDecls$_i[1],
4645
4466
  important = _styleDecls$_i[2];
4646
4467
 
4647
- setCSSStyleProperty$1(elm, prop, value, important);
4468
+ setCSSStyleProperty(elm, prop, value, important);
4648
4469
  }
4649
4470
  }
4650
4471
  /*
@@ -4655,15 +4476,17 @@ var LWC = (function (exports) {
4655
4476
  */
4656
4477
 
4657
4478
 
4658
- function patchChildren(c1, c2, parent) {
4479
+ function patchChildren(c1, c2, parent, renderer) {
4659
4480
  if (hasDynamicChildren(c2)) {
4660
- updateDynamicChildren(c1, c2, parent);
4481
+ updateDynamicChildren(c1, c2, parent, renderer);
4661
4482
  } else {
4662
- updateStaticChildren(c1, c2, parent);
4483
+ updateStaticChildren(c1, c2, parent, renderer);
4663
4484
  }
4664
4485
  }
4665
4486
 
4666
- function patch(n1, n2) {
4487
+ function patch(n1, n2, renderer) {
4488
+ var _a, _b;
4489
+
4667
4490
  if (n1 === n2) {
4668
4491
  return;
4669
4492
  }
@@ -4684,112 +4507,169 @@ var LWC = (function (exports) {
4684
4507
  case 0
4685
4508
  /* Text */
4686
4509
  :
4687
- patchText(n1, n2);
4510
+ // VText has no special capability, fallback to the owner's renderer
4511
+ patchText(n1, n2, renderer);
4688
4512
  break;
4689
4513
 
4690
4514
  case 1
4691
4515
  /* Comment */
4692
4516
  :
4693
- patchComment(n1, n2);
4517
+ // VComment has no special capability, fallback to the owner's renderer
4518
+ patchComment(n1, n2, renderer);
4519
+ break;
4520
+
4521
+ case 4
4522
+ /* Static */
4523
+ :
4524
+ n2.elm = n1.elm;
4694
4525
  break;
4695
4526
 
4696
4527
  case 2
4697
4528
  /* Element */
4698
4529
  :
4699
- patchElement(n1, n2);
4530
+ patchElement(n1, n2, (_a = n2.data.renderer) !== null && _a !== void 0 ? _a : renderer);
4700
4531
  break;
4701
4532
 
4702
4533
  case 3
4703
4534
  /* CustomElement */
4704
4535
  :
4705
- patchCustomElement(n1, n2);
4536
+ patchCustomElement(n1, n2, (_b = n2.data.renderer) !== null && _b !== void 0 ? _b : renderer);
4706
4537
  break;
4707
4538
  }
4708
4539
  }
4709
4540
 
4710
- function mount(node, parent, anchor) {
4541
+ function mount(node, parent, renderer, anchor) {
4542
+ var _a, _b;
4543
+
4711
4544
  switch (node.type) {
4712
4545
  case 0
4713
4546
  /* Text */
4714
4547
  :
4715
- mountText(node, parent, anchor);
4548
+ // VText has no special capability, fallback to the owner's renderer
4549
+ mountText(node, parent, anchor, renderer);
4716
4550
  break;
4717
4551
 
4718
4552
  case 1
4719
4553
  /* Comment */
4720
4554
  :
4721
- mountComment(node, parent, anchor);
4555
+ // VComment has no special capability, fallback to the owner's renderer
4556
+ mountComment(node, parent, anchor, renderer);
4557
+ break;
4558
+
4559
+ case 4
4560
+ /* Static */
4561
+ :
4562
+ // VStatic cannot have a custom renderer associated to them, using owner's renderer
4563
+ mountStatic(node, parent, anchor, renderer);
4722
4564
  break;
4723
4565
 
4724
4566
  case 2
4725
4567
  /* Element */
4726
4568
  :
4727
- mountElement(node, parent, anchor);
4569
+ // If the vnode data has a renderer override use it, else fallback to owner's renderer
4570
+ mountElement(node, parent, anchor, (_a = node.data.renderer) !== null && _a !== void 0 ? _a : renderer);
4728
4571
  break;
4729
4572
 
4730
4573
  case 3
4731
4574
  /* CustomElement */
4732
4575
  :
4733
- mountCustomElement(node, parent, anchor);
4576
+ // If the vnode data has a renderer override use it, else fallback to owner's renderer
4577
+ mountCustomElement(node, parent, anchor, (_b = node.data.renderer) !== null && _b !== void 0 ? _b : renderer);
4734
4578
  break;
4735
4579
  }
4736
4580
  }
4737
4581
 
4738
- function patchText(n1, n2) {
4582
+ function patchText(n1, n2, renderer) {
4739
4583
  n2.elm = n1.elm;
4740
4584
 
4741
4585
  if (n2.text !== n1.text) {
4742
- updateTextContent(n2);
4586
+ updateTextContent(n2, renderer);
4743
4587
  }
4744
4588
  }
4745
4589
 
4746
- function mountText(node, parent, anchor) {
4747
- var owner = node.owner;
4748
- var textNode = node.elm = createText$1(node.text);
4749
- linkNodeToShadow(textNode, owner);
4750
- insertNode(textNode, parent, anchor);
4590
+ function mountText(vnode, parent, anchor, renderer) {
4591
+ var owner = vnode.owner;
4592
+ var createText = renderer.createText;
4593
+ var textNode = vnode.elm = createText(vnode.text);
4594
+ linkNodeToShadow(textNode, owner, renderer);
4595
+ insertNode(textNode, parent, anchor, renderer);
4751
4596
  }
4752
4597
 
4753
- function patchComment(n1, n2) {
4598
+ function patchComment(n1, n2, renderer) {
4754
4599
  n2.elm = n1.elm; // FIXME: Comment nodes should be static, we shouldn't need to diff them together. However
4755
4600
  // it is the case today.
4756
4601
 
4757
4602
  if (n2.text !== n1.text) {
4758
- updateTextContent(n2);
4603
+ updateTextContent(n2, renderer);
4759
4604
  }
4760
4605
  }
4761
4606
 
4762
- function mountComment(node, parent, anchor) {
4763
- var owner = node.owner;
4764
- var commentNode = node.elm = createComment$1(node.text);
4765
- linkNodeToShadow(commentNode, owner);
4766
- insertNode(commentNode, parent, anchor);
4607
+ function mountComment(vnode, parent, anchor, renderer) {
4608
+ var owner = vnode.owner;
4609
+ var createComment = renderer.createComment;
4610
+ var commentNode = vnode.elm = createComment(vnode.text);
4611
+ linkNodeToShadow(commentNode, owner, renderer);
4612
+ insertNode(commentNode, parent, anchor, renderer);
4767
4613
  }
4768
4614
 
4769
- function mountElement(vnode, parent, anchor) {
4615
+ function mountElement(vnode, parent, anchor, renderer) {
4770
4616
  var sel = vnode.sel,
4771
4617
  owner = vnode.owner,
4772
4618
  svg = vnode.data.svg;
4619
+ var createElement = renderer.createElement;
4773
4620
  var namespace = isTrue(svg) ? SVG_NAMESPACE : undefined;
4774
- var elm = createElement$2(sel, namespace);
4775
- linkNodeToShadow(elm, owner);
4776
- fallbackElmHook(elm, vnode);
4621
+ var elm = createElement(sel, namespace);
4622
+ linkNodeToShadow(elm, owner, renderer);
4623
+ fallbackElmHook(elm, vnode, renderer);
4777
4624
  vnode.elm = elm;
4778
- patchElementPropsAndAttrs$1(null, vnode);
4779
- insertNode(elm, parent, anchor);
4780
- mountVNodes(vnode.children, elm, null);
4625
+ patchElementPropsAndAttrs$1(null, vnode, renderer);
4626
+ insertNode(elm, parent, anchor, renderer);
4627
+ mountVNodes(vnode.children, elm, renderer, null);
4781
4628
  }
4782
4629
 
4783
- function patchElement(n1, n2) {
4630
+ function patchElement(n1, n2, renderer) {
4784
4631
  var elm = n2.elm = n1.elm;
4785
- patchElementPropsAndAttrs$1(n1, n2);
4786
- patchChildren(n1.children, n2.children, elm);
4632
+ patchElementPropsAndAttrs$1(n1, n2, renderer);
4633
+ patchChildren(n1.children, n2.children, elm, renderer);
4634
+ }
4635
+
4636
+ function mountStatic(vnode, parent, anchor, renderer) {
4637
+ var owner = vnode.owner;
4638
+ var cloneNode = renderer.cloneNode,
4639
+ isSyntheticShadowDefined = renderer.isSyntheticShadowDefined;
4640
+ var elm = vnode.elm = cloneNode(vnode.fragment, true);
4641
+ linkNodeToShadow(elm, owner, renderer); // Marks this node as Static to propagate the shadow resolver. must happen after elm is assigned to the proper shadow
4642
+
4643
+ var renderMode = owner.renderMode,
4644
+ shadowMode = owner.shadowMode;
4645
+
4646
+ if (isSyntheticShadowDefined) {
4647
+ if (shadowMode === 1
4648
+ /* Synthetic */
4649
+ || renderMode === 0
4650
+ /* Light */
4651
+ ) {
4652
+ elm[KEY__SHADOW_STATIC] = true;
4653
+ }
4654
+ }
4655
+
4656
+ if (process.env.NODE_ENV !== 'production') {
4657
+ var isLight = renderMode === 0
4658
+ /* Light */
4659
+ ;
4660
+ patchElementWithRestrictions(elm, {
4661
+ isPortal: false,
4662
+ isLight: isLight
4663
+ });
4664
+ }
4665
+
4666
+ insertNode(elm, parent, anchor, renderer);
4787
4667
  }
4788
4668
 
4789
- function mountCustomElement(vnode, parent, anchor) {
4669
+ function mountCustomElement(vnode, parent, anchor, renderer) {
4790
4670
  var sel = vnode.sel,
4791
4671
  owner = vnode.owner;
4792
- var UpgradableConstructor = getUpgradableConstructor(sel);
4672
+ var UpgradableConstructor = getUpgradableConstructor(sel, renderer);
4793
4673
  /**
4794
4674
  * Note: if the upgradable constructor does not expect, or throw when we new it
4795
4675
  * with a callback as the first argument, we could implement a more advanced
@@ -4800,9 +4680,9 @@ var LWC = (function (exports) {
4800
4680
  var vm;
4801
4681
  var elm = new UpgradableConstructor(function (elm) {
4802
4682
  // the custom element from the registry is expecting an upgrade callback
4803
- vm = createViewModelHook(elm, vnode);
4683
+ vm = createViewModelHook(elm, vnode, renderer);
4804
4684
  });
4805
- linkNodeToShadow(elm, owner);
4685
+ linkNodeToShadow(elm, owner, renderer);
4806
4686
  vnode.elm = elm;
4807
4687
  vnode.vm = vm;
4808
4688
 
@@ -4812,8 +4692,8 @@ var LWC = (function (exports) {
4812
4692
  throw new TypeError("Incorrect Component Constructor");
4813
4693
  }
4814
4694
 
4815
- patchElementPropsAndAttrs$1(null, vnode);
4816
- insertNode(elm, parent, anchor);
4695
+ patchElementPropsAndAttrs$1(null, vnode, renderer);
4696
+ insertNode(elm, parent, anchor, renderer);
4817
4697
 
4818
4698
  if (vm) {
4819
4699
  if (process.env.NODE_ENV !== 'production') {
@@ -4825,17 +4705,17 @@ var LWC = (function (exports) {
4825
4705
  runConnectedCallback(vm);
4826
4706
  }
4827
4707
 
4828
- mountVNodes(vnode.children, elm, null);
4708
+ mountVNodes(vnode.children, elm, renderer, null);
4829
4709
 
4830
4710
  if (vm) {
4831
4711
  appendVM(vm);
4832
4712
  }
4833
4713
  }
4834
4714
 
4835
- function patchCustomElement(n1, n2) {
4715
+ function patchCustomElement(n1, n2, renderer) {
4836
4716
  var elm = n2.elm = n1.elm;
4837
4717
  var vm = n2.vm = n1.vm;
4838
- patchElementPropsAndAttrs$1(n1, n2);
4718
+ patchElementPropsAndAttrs$1(n1, n2, renderer);
4839
4719
 
4840
4720
  if (!isUndefined$1(vm)) {
4841
4721
  // in fallback mode, the allocation will always set children to
@@ -4845,7 +4725,7 @@ var LWC = (function (exports) {
4845
4725
  // will happen, but in native, it does allocate the light dom
4846
4726
 
4847
4727
 
4848
- patchChildren(n1.children, n2.children, elm);
4728
+ patchChildren(n1.children, n2.children, elm, renderer);
4849
4729
 
4850
4730
  if (!isUndefined$1(vm)) {
4851
4731
  // this will probably update the shadowRoot, but only if the vm is in a dirty state
@@ -4854,38 +4734,45 @@ var LWC = (function (exports) {
4854
4734
  }
4855
4735
  }
4856
4736
 
4857
- function mountVNodes(vnodes, parent, anchor) {
4858
- var start = arguments.length > 3 && arguments[3] !== undefined ? arguments[3] : 0;
4859
- var end = arguments.length > 4 && arguments[4] !== undefined ? arguments[4] : vnodes.length;
4737
+ function mountVNodes(vnodes, parent, renderer, anchor) {
4738
+ var start = arguments.length > 4 && arguments[4] !== undefined ? arguments[4] : 0;
4739
+ var end = arguments.length > 5 && arguments[5] !== undefined ? arguments[5] : vnodes.length;
4860
4740
 
4861
4741
  for (; start < end; ++start) {
4862
4742
  var vnode = vnodes[start];
4863
4743
 
4864
4744
  if (isVNode(vnode)) {
4865
- mount(vnode, parent, anchor);
4745
+ mount(vnode, parent, renderer, anchor);
4866
4746
  }
4867
4747
  }
4868
4748
  }
4869
4749
 
4870
- function unmount(vnode, parent) {
4871
- var doRemove = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : false;
4750
+ function unmount(vnode, parent, renderer) {
4751
+ var doRemove = arguments.length > 3 && arguments[3] !== undefined ? arguments[3] : false;
4872
4752
  var type = vnode.type,
4873
4753
  elm = vnode.elm,
4874
4754
  sel = vnode.sel; // When unmounting a VNode subtree not all the elements have to removed from the DOM. The
4875
4755
  // subtree root, is the only element worth unmounting from the subtree.
4876
4756
 
4877
4757
  if (doRemove) {
4878
- removeNode(elm, parent);
4758
+ // The vnode might or might not have a data.renderer associated to it
4759
+ // but the removal used here is from the owner instead.
4760
+ removeNode(elm, parent, renderer);
4879
4761
  }
4880
4762
 
4881
- var removeChildren = sel === 'slot'; // slot content is removed to trigger slotchange event when removing slot
4882
-
4883
4763
  switch (type) {
4884
4764
  case 2
4885
4765
  /* Element */
4886
4766
  :
4887
- unmountVNodes(vnode.children, elm, removeChildren);
4888
- break;
4767
+ {
4768
+ // Slot content is removed to trigger slotchange event when removing slot.
4769
+ // Only required for synthetic shadow.
4770
+ var shouldRemoveChildren = sel === 'slot' && vnode.owner.shadowMode === 1
4771
+ /* Synthetic */
4772
+ ;
4773
+ unmountVNodes(vnode.children, elm, renderer, shouldRemoveChildren);
4774
+ break;
4775
+ }
4889
4776
 
4890
4777
  case 3
4891
4778
  /* CustomElement */
@@ -4901,16 +4788,16 @@ var LWC = (function (exports) {
4901
4788
  }
4902
4789
  }
4903
4790
 
4904
- function unmountVNodes(vnodes, parent) {
4905
- var doRemove = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : false;
4906
- var start = arguments.length > 3 && arguments[3] !== undefined ? arguments[3] : 0;
4907
- var end = arguments.length > 4 && arguments[4] !== undefined ? arguments[4] : vnodes.length;
4791
+ function unmountVNodes(vnodes, parent, renderer) {
4792
+ var doRemove = arguments.length > 3 && arguments[3] !== undefined ? arguments[3] : false;
4793
+ var start = arguments.length > 4 && arguments[4] !== undefined ? arguments[4] : 0;
4794
+ var end = arguments.length > 5 && arguments[5] !== undefined ? arguments[5] : vnodes.length;
4908
4795
 
4909
4796
  for (; start < end; ++start) {
4910
4797
  var ch = vnodes[start];
4911
4798
 
4912
4799
  if (isVNode(ch)) {
4913
- unmount(ch, parent, doRemove);
4800
+ unmount(ch, parent, renderer, doRemove);
4914
4801
  }
4915
4802
  }
4916
4803
  }
@@ -4928,22 +4815,26 @@ var LWC = (function (exports) {
4928
4815
  } // Set the scope token class for *.scoped.css styles
4929
4816
 
4930
4817
 
4931
- function setScopeTokenClassIfNecessary(elm, owner) {
4818
+ function setScopeTokenClassIfNecessary(elm, owner, renderer) {
4932
4819
  var cmpTemplate = owner.cmpTemplate,
4933
4820
  context = owner.context;
4821
+ var getClassList = renderer.getClassList;
4934
4822
  var token = cmpTemplate === null || cmpTemplate === void 0 ? void 0 : cmpTemplate.stylesheetToken;
4935
4823
 
4936
4824
  if (!isUndefined$1(token) && context.hasScopedStyles) {
4937
- getClassList$1(elm).add(token);
4825
+ // TODO [#2762]: this dot notation with add is probably problematic
4826
+ // probably we should have a renderer api for just the add operation
4827
+ getClassList(elm).add(token);
4938
4828
  }
4939
4829
  }
4940
4830
 
4941
- function linkNodeToShadow(elm, owner) {
4831
+ function linkNodeToShadow(elm, owner, renderer) {
4942
4832
  var renderRoot = owner.renderRoot,
4943
4833
  renderMode = owner.renderMode,
4944
- shadowMode = owner.shadowMode; // TODO [#1164]: this should eventually be done by the polyfill directly
4834
+ shadowMode = owner.shadowMode;
4835
+ var isSyntheticShadowDefined = renderer.isSyntheticShadowDefined; // TODO [#1164]: this should eventually be done by the polyfill directly
4945
4836
 
4946
- if (isSyntheticShadowDefined$1) {
4837
+ if (isSyntheticShadowDefined) {
4947
4838
  if (shadowMode === 1
4948
4839
  /* Synthetic */
4949
4840
  || renderMode === 0
@@ -4954,63 +4845,64 @@ var LWC = (function (exports) {
4954
4845
  }
4955
4846
  }
4956
4847
 
4957
- function updateTextContent(vnode) {
4848
+ function updateTextContent(vnode, renderer) {
4958
4849
  var elm = vnode.elm,
4959
4850
  text = vnode.text;
4851
+ var setText = renderer.setText;
4960
4852
 
4961
4853
  if (process.env.NODE_ENV !== 'production') {
4962
4854
  unlockDomMutation();
4963
4855
  }
4964
4856
 
4965
- setText$1(elm, text);
4857
+ setText(elm, text);
4966
4858
 
4967
4859
  if (process.env.NODE_ENV !== 'production') {
4968
4860
  lockDomMutation();
4969
4861
  }
4970
4862
  }
4971
4863
 
4972
- function insertNode(node, parent, anchor) {
4864
+ function insertNode(node, parent, anchor, renderer) {
4973
4865
  if (process.env.NODE_ENV !== 'production') {
4974
4866
  unlockDomMutation();
4975
4867
  }
4976
4868
 
4977
- insert$1(node, parent, anchor);
4869
+ renderer.insert(node, parent, anchor);
4978
4870
 
4979
4871
  if (process.env.NODE_ENV !== 'production') {
4980
4872
  lockDomMutation();
4981
4873
  }
4982
4874
  }
4983
4875
 
4984
- function removeNode(node, parent) {
4876
+ function removeNode(node, parent, renderer) {
4985
4877
  if (process.env.NODE_ENV !== 'production') {
4986
4878
  unlockDomMutation();
4987
4879
  }
4988
4880
 
4989
- remove$1(node, parent);
4881
+ renderer.remove(node, parent);
4990
4882
 
4991
4883
  if (process.env.NODE_ENV !== 'production') {
4992
4884
  lockDomMutation();
4993
4885
  }
4994
4886
  }
4995
4887
 
4996
- function patchElementPropsAndAttrs$1(oldVnode, vnode) {
4888
+ function patchElementPropsAndAttrs$1(oldVnode, vnode, renderer) {
4997
4889
  if (isNull(oldVnode)) {
4998
- applyEventListeners(vnode);
4999
- applyStaticClassAttribute(vnode);
5000
- applyStaticStyleAttribute(vnode);
4890
+ applyEventListeners(vnode, renderer);
4891
+ applyStaticClassAttribute(vnode, renderer);
4892
+ applyStaticStyleAttribute(vnode, renderer);
5001
4893
  } // Attrs need to be applied to element before props IE11 will wipe out value on radio inputs if
5002
4894
  // value is set before type=radio.
5003
4895
 
5004
4896
 
5005
- patchClassAttribute(oldVnode, vnode);
5006
- patchStyleAttribute(oldVnode, vnode);
5007
- patchAttributes(oldVnode, vnode);
5008
- patchProps(oldVnode, vnode);
4897
+ patchClassAttribute(oldVnode, vnode, renderer);
4898
+ patchStyleAttribute(oldVnode, vnode, renderer);
4899
+ patchAttributes(oldVnode, vnode, renderer);
4900
+ patchProps(oldVnode, vnode, renderer);
5009
4901
  }
5010
4902
 
5011
- function fallbackElmHook(elm, vnode) {
4903
+ function fallbackElmHook(elm, vnode, renderer) {
5012
4904
  var owner = vnode.owner;
5013
- setScopeTokenClassIfNecessary(elm, owner);
4905
+ setScopeTokenClassIfNecessary(elm, owner, renderer);
5014
4906
 
5015
4907
  if (owner.shadowMode === 1
5016
4908
  /* Synthetic */
@@ -5077,7 +4969,7 @@ var LWC = (function (exports) {
5077
4969
  }
5078
4970
  }
5079
4971
 
5080
- function createViewModelHook(elm, vnode) {
4972
+ function createViewModelHook(elm, vnode, renderer) {
5081
4973
  var vm = getAssociatedVMIfPresent(elm); // There is a possibility that a custom element is registered under tagName, in which case, the
5082
4974
  // initialization is already carry on, and there is nothing else to do here since this hook is
5083
4975
  // called right after invoking `document.createElement`.
@@ -5090,7 +4982,7 @@ var LWC = (function (exports) {
5090
4982
  mode = vnode.mode,
5091
4983
  ctor = vnode.ctor,
5092
4984
  owner = vnode.owner;
5093
- setScopeTokenClassIfNecessary(elm, owner);
4985
+ setScopeTokenClassIfNecessary(elm, owner, renderer);
5094
4986
 
5095
4987
  if (owner.shadowMode === 1
5096
4988
  /* Synthetic */
@@ -5103,7 +4995,7 @@ var LWC = (function (exports) {
5103
4995
  }
5104
4996
  }
5105
4997
 
5106
- vm = createVM(elm, ctor, {
4998
+ vm = createVM(elm, ctor, renderer, {
5107
4999
  mode: mode,
5108
5000
  owner: owner,
5109
5001
  tagName: sel
@@ -5122,8 +5014,8 @@ var LWC = (function (exports) {
5122
5014
  var oldSlots = vm.cmpSlots;
5123
5015
  var cmpSlots = vm.cmpSlots = create(null);
5124
5016
 
5125
- for (var _i13 = 0, len = children.length; _i13 < len; _i13 += 1) {
5126
- var vnode = children[_i13];
5017
+ for (var _i12 = 0, len = children.length; _i12 < len; _i12 += 1) {
5018
+ var vnode = children[_i12];
5127
5019
 
5128
5020
  if (isNull(vnode)) {
5129
5021
  continue;
@@ -5149,8 +5041,8 @@ var LWC = (function (exports) {
5149
5041
  return;
5150
5042
  }
5151
5043
 
5152
- for (var _i14 = 0, _len4 = oldKeys.length; _i14 < _len4; _i14 += 1) {
5153
- var key = oldKeys[_i14];
5044
+ for (var _i13 = 0, _len4 = oldKeys.length; _i13 < _len4; _i13 += 1) {
5045
+ var key = oldKeys[_i13];
5154
5046
 
5155
5047
  if (isUndefined$1(cmpSlots[key]) || oldSlots[key].length !== cmpSlots[key].length) {
5156
5048
  markComponentAsDirty(vm);
@@ -5200,7 +5092,7 @@ var LWC = (function (exports) {
5200
5092
  return map;
5201
5093
  }
5202
5094
 
5203
- function updateDynamicChildren(oldCh, newCh, parent) {
5095
+ function updateDynamicChildren(oldCh, newCh, parent, renderer) {
5204
5096
  var oldStartIdx = 0;
5205
5097
  var newStartIdx = 0;
5206
5098
  var oldEndIdx = oldCh.length - 1;
@@ -5226,23 +5118,23 @@ var LWC = (function (exports) {
5226
5118
  } else if (!isVNode(newEndVnode)) {
5227
5119
  newEndVnode = newCh[--newEndIdx];
5228
5120
  } else if (isSameVnode(oldStartVnode, newStartVnode)) {
5229
- patch(oldStartVnode, newStartVnode);
5121
+ patch(oldStartVnode, newStartVnode, renderer);
5230
5122
  oldStartVnode = oldCh[++oldStartIdx];
5231
5123
  newStartVnode = newCh[++newStartIdx];
5232
5124
  } else if (isSameVnode(oldEndVnode, newEndVnode)) {
5233
- patch(oldEndVnode, newEndVnode);
5125
+ patch(oldEndVnode, newEndVnode, renderer);
5234
5126
  oldEndVnode = oldCh[--oldEndIdx];
5235
5127
  newEndVnode = newCh[--newEndIdx];
5236
5128
  } else if (isSameVnode(oldStartVnode, newEndVnode)) {
5237
5129
  // Vnode moved right
5238
- patch(oldStartVnode, newEndVnode);
5239
- insertNode(oldStartVnode.elm, parent, nextSibling$1(oldEndVnode.elm));
5130
+ patch(oldStartVnode, newEndVnode, renderer);
5131
+ insertNode(oldStartVnode.elm, parent, renderer.nextSibling(oldEndVnode.elm), renderer);
5240
5132
  oldStartVnode = oldCh[++oldStartIdx];
5241
5133
  newEndVnode = newCh[--newEndIdx];
5242
5134
  } else if (isSameVnode(oldEndVnode, newStartVnode)) {
5243
5135
  // Vnode moved left
5244
- patch(oldEndVnode, newStartVnode);
5245
- insertNode(newStartVnode.elm, parent, oldStartVnode.elm);
5136
+ patch(oldEndVnode, newStartVnode, renderer);
5137
+ insertNode(newStartVnode.elm, parent, oldStartVnode.elm, renderer);
5246
5138
  oldEndVnode = oldCh[--oldEndIdx];
5247
5139
  newStartVnode = newCh[++newStartIdx];
5248
5140
  } else {
@@ -5254,7 +5146,7 @@ var LWC = (function (exports) {
5254
5146
 
5255
5147
  if (isUndefined$1(idxInOld)) {
5256
5148
  // New element
5257
- mount(newStartVnode, parent, oldStartVnode.elm);
5149
+ mount(newStartVnode, parent, renderer, oldStartVnode.elm);
5258
5150
  newStartVnode = newCh[++newStartIdx];
5259
5151
  } else {
5260
5152
  elmToMove = oldCh[idxInOld];
@@ -5262,9 +5154,9 @@ var LWC = (function (exports) {
5262
5154
  if (isVNode(elmToMove)) {
5263
5155
  if (elmToMove.sel !== newStartVnode.sel) {
5264
5156
  // New element
5265
- mount(newStartVnode, parent, oldStartVnode.elm);
5157
+ mount(newStartVnode, parent, renderer, oldStartVnode.elm);
5266
5158
  } else {
5267
- patch(elmToMove, newStartVnode); // Delete the old child, but copy the array since it is read-only.
5159
+ patch(elmToMove, newStartVnode, renderer); // Delete the old child, but copy the array since it is read-only.
5268
5160
  // The `oldCh` will be GC'ed after `updateDynamicChildren` is complete,
5269
5161
  // so we only care about the `oldCh` object inside this function.
5270
5162
  // To avoid cloning over and over again, we check `clonedOldCh`
@@ -5277,7 +5169,7 @@ var LWC = (function (exports) {
5277
5169
 
5278
5170
 
5279
5171
  oldCh[idxInOld] = undefined;
5280
- insertNode(elmToMove.elm, parent, oldStartVnode.elm);
5172
+ insertNode(elmToMove.elm, parent, oldStartVnode.elm, renderer);
5281
5173
  }
5282
5174
  }
5283
5175
 
@@ -5290,35 +5182,35 @@ var LWC = (function (exports) {
5290
5182
  if (oldStartIdx > oldEndIdx) {
5291
5183
  // There's some cases in which the sub array of vnodes to be inserted is followed by null(s) and an
5292
5184
  // already processed vnode, in such cases the vnodes to be inserted should be before that processed vnode.
5293
- var _i15 = newEndIdx;
5185
+ var _i14 = newEndIdx;
5294
5186
  var n;
5295
5187
 
5296
5188
  do {
5297
- n = newCh[++_i15];
5298
- } while (!isVNode(n) && _i15 < newChEnd);
5189
+ n = newCh[++_i14];
5190
+ } while (!isVNode(n) && _i14 < newChEnd);
5299
5191
 
5300
5192
  before = isVNode(n) ? n.elm : null;
5301
- mountVNodes(newCh, parent, before, newStartIdx, newEndIdx + 1);
5193
+ mountVNodes(newCh, parent, renderer, before, newStartIdx, newEndIdx + 1);
5302
5194
  } else {
5303
- unmountVNodes(oldCh, parent, true, oldStartIdx, oldEndIdx + 1);
5195
+ unmountVNodes(oldCh, parent, renderer, true, oldStartIdx, oldEndIdx + 1);
5304
5196
  }
5305
5197
  }
5306
5198
  }
5307
5199
 
5308
- function updateStaticChildren(c1, c2, parent) {
5200
+ function updateStaticChildren(c1, c2, parent, renderer) {
5309
5201
  var c1Length = c1.length;
5310
5202
  var c2Length = c2.length;
5311
5203
 
5312
5204
  if (c1Length === 0) {
5313
5205
  // the old list is empty, we can directly insert anything new
5314
- mountVNodes(c2, parent, null);
5206
+ mountVNodes(c2, parent, renderer, null);
5315
5207
  return;
5316
5208
  }
5317
5209
 
5318
5210
  if (c2Length === 0) {
5319
5211
  // the old list is nonempty and the new list is empty so we can directly remove all old nodes
5320
5212
  // this is the case in which the dynamic children of an if-directive should be removed
5321
- unmountVNodes(c1, parent, true);
5213
+ unmountVNodes(c1, parent, renderer, true);
5322
5214
  return;
5323
5215
  } // if the old list is not empty, the new list MUST have the same
5324
5216
  // amount of nodes, that's why we call this static children
@@ -5326,22 +5218,22 @@ var LWC = (function (exports) {
5326
5218
 
5327
5219
  var anchor = null;
5328
5220
 
5329
- for (var _i16 = c2Length - 1; _i16 >= 0; _i16 -= 1) {
5330
- var n1 = c1[_i16];
5331
- var n2 = c2[_i16];
5221
+ for (var _i15 = c2Length - 1; _i15 >= 0; _i15 -= 1) {
5222
+ var n1 = c1[_i15];
5223
+ var n2 = c2[_i15];
5332
5224
 
5333
5225
  if (n2 !== n1) {
5334
5226
  if (isVNode(n1)) {
5335
5227
  if (isVNode(n2)) {
5336
5228
  // both vnodes are equivalent, and we just need to patch them
5337
- patch(n1, n2);
5229
+ patch(n1, n2, renderer);
5338
5230
  anchor = n2.elm;
5339
5231
  } else {
5340
5232
  // removing the old vnode since the new one is null
5341
- unmount(n1, parent, true);
5233
+ unmount(n1, parent, renderer, true);
5342
5234
  }
5343
5235
  } else if (isVNode(n2)) {
5344
- mount(n2, parent, anchor);
5236
+ mount(n2, parent, renderer, anchor);
5345
5237
  anchor = n2.elm;
5346
5238
  }
5347
5239
  }
@@ -5359,6 +5251,20 @@ var LWC = (function (exports) {
5359
5251
 
5360
5252
  function addVNodeToChildLWC(vnode) {
5361
5253
  ArrayPush$1.call(getVMBeingRendered().velements, vnode);
5254
+ } // [st]atic node
5255
+
5256
+
5257
+ function st(fragment, key) {
5258
+ return {
5259
+ type: 4
5260
+ /* Static */
5261
+ ,
5262
+ sel: undefined,
5263
+ key: key,
5264
+ elm: undefined,
5265
+ fragment: fragment,
5266
+ owner: getVMBeingRendered()
5267
+ };
5362
5268
  } // [h]tml node
5363
5269
 
5364
5270
 
@@ -5848,6 +5754,7 @@ var LWC = (function (exports) {
5848
5754
  co: co,
5849
5755
  dc: dc,
5850
5756
  ti: ti,
5757
+ st: st,
5851
5758
  gid: gid,
5852
5759
  fid: fid,
5853
5760
  shc: shc
@@ -5876,7 +5783,11 @@ var LWC = (function (exports) {
5876
5783
  var elm = vm.elm,
5877
5784
  context = vm.context,
5878
5785
  renderMode = vm.renderMode,
5879
- shadowMode = vm.shadowMode;
5786
+ shadowMode = vm.shadowMode,
5787
+ _vm$renderer = vm.renderer,
5788
+ getClassList = _vm$renderer.getClassList,
5789
+ removeAttribute = _vm$renderer.removeAttribute,
5790
+ setAttribute = _vm$renderer.setAttribute;
5880
5791
  var newStylesheets = template.stylesheets,
5881
5792
  newStylesheetToken = template.stylesheetToken;
5882
5793
  var isSyntheticShadow = renderMode === 1
@@ -5895,11 +5806,11 @@ var LWC = (function (exports) {
5895
5806
 
5896
5807
  if (!isUndefined$1(oldToken)) {
5897
5808
  if (oldHasTokenInClass) {
5898
- getClassList$1(elm).remove(makeHostToken(oldToken));
5809
+ getClassList(elm).remove(makeHostToken(oldToken));
5899
5810
  }
5900
5811
 
5901
5812
  if (oldHasTokenInAttribute) {
5902
- removeAttribute$1(elm, makeHostToken(oldToken));
5813
+ removeAttribute(elm, makeHostToken(oldToken));
5903
5814
  }
5904
5815
  } // Apply the new template styling token to the host element, if the new template has any
5905
5816
  // associated stylesheets. In the case of light DOM, also ensure there is at least one scoped stylesheet.
@@ -5912,12 +5823,12 @@ var LWC = (function (exports) {
5912
5823
 
5913
5824
  if (!isUndefined$1(newToken)) {
5914
5825
  if (hasScopedStyles) {
5915
- getClassList$1(elm).add(makeHostToken(newToken));
5826
+ getClassList(elm).add(makeHostToken(newToken));
5916
5827
  newHasTokenInClass = true;
5917
5828
  }
5918
5829
 
5919
5830
  if (isSyntheticShadow) {
5920
- setAttribute$1(elm, makeHostToken(newToken), '');
5831
+ setAttribute(elm, makeHostToken(newToken), '');
5921
5832
  newHasTokenInAttribute = true;
5922
5833
  }
5923
5834
  } // Update the styling tokens present on the context object.
@@ -5932,8 +5843,8 @@ var LWC = (function (exports) {
5932
5843
  var content = [];
5933
5844
  var root;
5934
5845
 
5935
- for (var _i17 = 0; _i17 < stylesheets.length; _i17++) {
5936
- var stylesheet = stylesheets[_i17];
5846
+ for (var _i16 = 0; _i16 < stylesheets.length; _i16++) {
5847
+ var stylesheet = stylesheets[_i16];
5937
5848
 
5938
5849
  if (isArray$1(stylesheet)) {
5939
5850
  ArrayPush$1.apply(content, evaluateStylesheetsContent(stylesheet, stylesheetToken, vm));
@@ -6038,31 +5949,33 @@ var LWC = (function (exports) {
6038
5949
 
6039
5950
  function createStylesheet(vm, stylesheets) {
6040
5951
  var renderMode = vm.renderMode,
6041
- shadowMode = vm.shadowMode;
5952
+ shadowMode = vm.shadowMode,
5953
+ _vm$renderer2 = vm.renderer,
5954
+ ssr = _vm$renderer2.ssr,
5955
+ insertStylesheet = _vm$renderer2.insertStylesheet;
6042
5956
 
6043
5957
  if (renderMode === 1
6044
5958
  /* Shadow */
6045
5959
  && shadowMode === 1
6046
5960
  /* Synthetic */
6047
5961
  ) {
6048
- for (var _i18 = 0; _i18 < stylesheets.length; _i18++) {
6049
- insertStylesheet$1(stylesheets[_i18]);
5962
+ for (var _i17 = 0; _i17 < stylesheets.length; _i17++) {
5963
+ insertStylesheet(stylesheets[_i17]);
6050
5964
  }
6051
- } else if (ssr$1 || vm.hydrated) {
5965
+ } else if (ssr || vm.hydrated) {
6052
5966
  // Note: We need to ensure that during hydration, the stylesheets method is the same as those in ssr.
6053
5967
  // This works in the client, because the stylesheets are created, and cached in the VM
6054
5968
  // the first time the VM renders.
6055
5969
  // native shadow or light DOM, SSR
6056
- var combinedStylesheetContent = ArrayJoin.call(stylesheets, '\n');
6057
- return createInlineStyleVNode(combinedStylesheetContent);
5970
+ return ArrayMap.call(stylesheets, createInlineStyleVNode);
6058
5971
  } else {
6059
5972
  // native shadow or light DOM, DOM renderer
6060
5973
  var root = getNearestNativeShadowComponent(vm); // null root means a global style
6061
5974
 
6062
5975
  var target = isNull(root) ? undefined : root.shadowRoot;
6063
5976
 
6064
- for (var _i19 = 0; _i19 < stylesheets.length; _i19++) {
6065
- insertStylesheet$1(stylesheets[_i19], target);
5977
+ for (var _i18 = 0; _i18 < stylesheets.length; _i18++) {
5978
+ insertStylesheet(stylesheets[_i18], target);
6066
5979
  }
6067
5980
  }
6068
5981
 
@@ -6240,6 +6153,91 @@ var LWC = (function (exports) {
6240
6153
  }
6241
6154
  }
6242
6155
 
6156
+ function buildParseFragmentFn(createFragmentFn) {
6157
+ return function (strings) {
6158
+ for (var _len5 = arguments.length, keys = new Array(_len5 > 1 ? _len5 - 1 : 0), _key3 = 1; _key3 < _len5; _key3++) {
6159
+ keys[_key3 - 1] = arguments[_key3];
6160
+ }
6161
+
6162
+ var cache = create(null);
6163
+ return function () {
6164
+ var _getVMBeingRendered = getVMBeingRendered(),
6165
+ _getVMBeingRendered$c = _getVMBeingRendered.context,
6166
+ hasScopedStyles = _getVMBeingRendered$c.hasScopedStyles,
6167
+ stylesheetToken = _getVMBeingRendered$c.stylesheetToken,
6168
+ shadowMode = _getVMBeingRendered.shadowMode,
6169
+ renderer = _getVMBeingRendered.renderer;
6170
+
6171
+ var hasStyleToken = !isUndefined$1(stylesheetToken);
6172
+ var isSyntheticShadow = shadowMode === 1
6173
+ /* Synthetic */
6174
+ ;
6175
+ var cacheKey = 0;
6176
+
6177
+ if (hasStyleToken && hasScopedStyles) {
6178
+ cacheKey |= 1
6179
+ /* HAS_SCOPED_STYLE */
6180
+ ;
6181
+ }
6182
+
6183
+ if (hasStyleToken && isSyntheticShadow) {
6184
+ cacheKey |= 2
6185
+ /* SHADOW_MODE_SYNTHETIC */
6186
+ ;
6187
+ }
6188
+
6189
+ if (!isUndefined$1(cache[cacheKey])) {
6190
+ return cache[cacheKey];
6191
+ }
6192
+
6193
+ var classToken = hasScopedStyles && hasStyleToken ? ' ' + stylesheetToken : '';
6194
+ var classAttrToken = hasScopedStyles && hasStyleToken ? " class=\"".concat(stylesheetToken, "\"") : '';
6195
+ var attrToken = hasStyleToken && isSyntheticShadow ? ' ' + stylesheetToken : '';
6196
+ var htmlFragment = '';
6197
+
6198
+ for (var _i19 = 0, n = keys.length; _i19 < n; _i19++) {
6199
+ switch (keys[_i19]) {
6200
+ case 0:
6201
+ // styleToken in existing class attr
6202
+ htmlFragment += strings[_i19] + classToken;
6203
+ break;
6204
+
6205
+ case 1:
6206
+ // styleToken for added class attr
6207
+ htmlFragment += strings[_i19] + classAttrToken;
6208
+ break;
6209
+
6210
+ case 2:
6211
+ // styleToken as attr
6212
+ htmlFragment += strings[_i19] + attrToken;
6213
+ break;
6214
+
6215
+ case 3:
6216
+ // ${1}${2}
6217
+ htmlFragment += strings[_i19] + classAttrToken + attrToken;
6218
+ break;
6219
+ }
6220
+ }
6221
+
6222
+ htmlFragment += strings[strings.length - 1];
6223
+ cache[cacheKey] = createFragmentFn(htmlFragment, renderer);
6224
+ return cache[cacheKey];
6225
+ };
6226
+ };
6227
+ } // Note: at the moment this code executes, we don't have a renderer yet.
6228
+
6229
+
6230
+ var parseFragment = buildParseFragmentFn(function (html, renderer) {
6231
+ var createFragment = renderer.createFragment;
6232
+ return createFragment(html);
6233
+ });
6234
+ var parseSVGFragment = buildParseFragmentFn(function (html, renderer) {
6235
+ var createFragment = renderer.createFragment,
6236
+ getFirstChild = renderer.getFirstChild;
6237
+ var fragment = createFragment('<svg>' + html + '</svg>');
6238
+ return getFirstChild(fragment);
6239
+ });
6240
+
6243
6241
  function evaluateTemplate(vm, html) {
6244
6242
  if (process.env.NODE_ENV !== 'production') {
6245
6243
  assert.isTrue(isFunction$1(html), "evaluateTemplate() second argument must be an imported template instead of ".concat(toString$1(html))); // in dev-mode, we support hot swapping of templates, which means that
@@ -6296,7 +6294,7 @@ var LWC = (function (exports) {
6296
6294
  // re-rendering.
6297
6295
 
6298
6296
  var stylesheetsContent = getStylesheetsContent(vm, html);
6299
- context.styleVNode = stylesheetsContent.length === 0 ? null : createStylesheet(vm, stylesheetsContent);
6297
+ context.styleVNodes = stylesheetsContent.length === 0 ? null : createStylesheet(vm, stylesheetsContent);
6300
6298
  }
6301
6299
 
6302
6300
  if (process.env.NODE_ENV !== 'production') {
@@ -6312,10 +6310,10 @@ var LWC = (function (exports) {
6312
6310
 
6313
6311
  isUpdatingTemplate = true;
6314
6312
  vnodes = html.call(undefined, api, component, cmpSlots, context.tplCache);
6315
- var styleVNode = context.styleVNode;
6313
+ var styleVNodes = context.styleVNodes;
6316
6314
 
6317
- if (!isNull(styleVNode)) {
6318
- ArrayUnshift.call(vnodes, styleVNode);
6315
+ if (!isNull(styleVNodes)) {
6316
+ ArrayUnshift.apply(vnodes, styleVNodes);
6319
6317
  }
6320
6318
  });
6321
6319
  }, function () {
@@ -6689,9 +6687,19 @@ var LWC = (function (exports) {
6689
6687
  resetComponentStateWhenRemoved(vm);
6690
6688
  }
6691
6689
 
6692
- function createVM(elm, ctor, options) {
6693
- var _a;
6690
+ function getNearestShadowAncestor(vm) {
6691
+ var ancestor = vm.owner;
6692
+
6693
+ while (!isNull(ancestor) && ancestor.renderMode === 0
6694
+ /* Light */
6695
+ ) {
6696
+ ancestor = ancestor.owner;
6697
+ }
6694
6698
 
6699
+ return ancestor;
6700
+ }
6701
+
6702
+ function createVM(elm, ctor, renderer, options) {
6695
6703
  var mode = options.mode,
6696
6704
  owner = options.owner,
6697
6705
  tagName = options.tagName,
@@ -6719,28 +6727,29 @@ var LWC = (function (exports) {
6719
6727
  cmpTemplate: null,
6720
6728
  hydrated: Boolean(hydrated),
6721
6729
  renderMode: def.renderMode,
6722
- shadowMode: computeShadowMode(def, owner),
6723
- nearestShadowMode: (owner === null || owner === void 0 ? void 0 : owner.shadowRoot) ? owner.shadowMode : (_a = owner === null || owner === void 0 ? void 0 : owner.nearestShadowMode) !== null && _a !== void 0 ? _a : null,
6724
6730
  context: {
6725
6731
  stylesheetToken: undefined,
6726
6732
  hasTokenInClass: undefined,
6727
6733
  hasTokenInAttribute: undefined,
6728
6734
  hasScopedStyles: undefined,
6729
- styleVNode: null,
6735
+ styleVNodes: null,
6730
6736
  tplCache: EmptyObject,
6731
6737
  wiredConnecting: EmptyArray,
6732
6738
  wiredDisconnecting: EmptyArray
6733
6739
  },
6734
6740
  // Properties set right after VM creation.
6735
6741
  tro: null,
6742
+ shadowMode: null,
6736
6743
  // Properties set by the LightningElement constructor.
6737
6744
  component: null,
6738
6745
  shadowRoot: null,
6739
6746
  renderRoot: null,
6740
6747
  callHook: callHook,
6741
6748
  setHook: setHook,
6742
- getHook: getHook
6749
+ getHook: getHook,
6750
+ renderer: renderer
6743
6751
  };
6752
+ vm.shadowMode = computeShadowMode(vm, renderer);
6744
6753
  vm.tro = getTemplateReactiveObserver(vm);
6745
6754
 
6746
6755
  if (process.env.NODE_ENV !== 'production') {
@@ -6765,12 +6774,13 @@ var LWC = (function (exports) {
6765
6774
  return vm;
6766
6775
  }
6767
6776
 
6768
- function computeShadowMode(def, owner) {
6769
- var _a;
6770
-
6777
+ function computeShadowMode(vm, renderer) {
6778
+ var def = vm.def;
6779
+ var isSyntheticShadowDefined = renderer.isSyntheticShadowDefined,
6780
+ isNativeShadowDefined = renderer.isNativeShadowDefined;
6771
6781
  var shadowMode;
6772
6782
 
6773
- if (isSyntheticShadowDefined$1) {
6783
+ if (isSyntheticShadowDefined) {
6774
6784
  if (def.renderMode === 0
6775
6785
  /* Light */
6776
6786
  ) {
@@ -6779,7 +6789,7 @@ var LWC = (function (exports) {
6779
6789
  shadowMode = 0
6780
6790
  /* Native */
6781
6791
  ;
6782
- } else if (isNativeShadowDefined$1) {
6792
+ } else if (isNativeShadowDefined) {
6783
6793
  // Not combined with above condition because @lwc/features only supports identifiers in
6784
6794
  // the if-condition.
6785
6795
  if (runtimeFlags.ENABLE_MIXED_SHADOW_MODE) {
@@ -6790,13 +6800,23 @@ var LWC = (function (exports) {
6790
6800
  /* Native */
6791
6801
  ;
6792
6802
  } else {
6793
- // Transitive support for native Shadow DOM. A component in native mode
6794
- // transitively opts all of its descendants into native.
6795
- // Synthetic if neither this component nor any of its ancestors are configured
6796
- // to be native.
6797
- shadowMode = (_a = owner === null || owner === void 0 ? void 0 : owner.nearestShadowMode) !== null && _a !== void 0 ? _a : 1
6798
- /* Synthetic */
6799
- ;
6803
+ var shadowAncestor = getNearestShadowAncestor(vm);
6804
+
6805
+ if (!isNull(shadowAncestor) && shadowAncestor.shadowMode === 0
6806
+ /* Native */
6807
+ ) {
6808
+ // Transitive support for native Shadow DOM. A component in native mode
6809
+ // transitively opts all of its descendants into native.
6810
+ shadowMode = 0
6811
+ /* Native */
6812
+ ;
6813
+ } else {
6814
+ // Synthetic if neither this component nor any of its ancestors are configured
6815
+ // to be native.
6816
+ shadowMode = 1
6817
+ /* Synthetic */
6818
+ ;
6819
+ }
6800
6820
  }
6801
6821
  } else {
6802
6822
  shadowMode = 1
@@ -6860,7 +6880,8 @@ var LWC = (function (exports) {
6860
6880
 
6861
6881
  function patchShadowRoot(vm, newCh) {
6862
6882
  var renderRoot = vm.renderRoot,
6863
- oldCh = vm.children; // caching the new children collection
6883
+ oldCh = vm.children,
6884
+ renderer = vm.renderer; // caching the new children collection
6864
6885
 
6865
6886
  vm.children = newCh;
6866
6887
 
@@ -6875,7 +6896,7 @@ var LWC = (function (exports) {
6875
6896
  , vm);
6876
6897
  }, function () {
6877
6898
  // job
6878
- patchChildren(oldCh, newCh, renderRoot);
6899
+ patchChildren(oldCh, newCh, renderRoot, renderer);
6879
6900
  }, function () {
6880
6901
  // post
6881
6902
  logOperationEnd(2
@@ -6897,9 +6918,10 @@ var LWC = (function (exports) {
6897
6918
  }
6898
6919
 
6899
6920
  function runRenderedCallback(vm) {
6900
- var renderedCallback = vm.def.renderedCallback;
6921
+ var renderedCallback = vm.def.renderedCallback,
6922
+ ssr = vm.renderer.ssr;
6901
6923
 
6902
- if (isTrue(ssr$1)) {
6924
+ if (isTrue(ssr)) {
6903
6925
  return;
6904
6926
  }
6905
6927
 
@@ -7117,13 +7139,14 @@ var LWC = (function (exports) {
7117
7139
 
7118
7140
  function resetComponentRoot(vm) {
7119
7141
  var children = vm.children,
7120
- renderRoot = vm.renderRoot;
7142
+ renderRoot = vm.renderRoot,
7143
+ remove = vm.renderer.remove;
7121
7144
 
7122
7145
  for (var _i26 = 0, len = children.length; _i26 < len; _i26++) {
7123
7146
  var child = children[_i26];
7124
7147
 
7125
7148
  if (!isNull(child) && !isUndefined$1(child.elm)) {
7126
- remove$1(child.elm, renderRoot);
7149
+ remove(child.elm, renderRoot);
7127
7150
  }
7128
7151
  }
7129
7152
 
@@ -7133,7 +7156,9 @@ var LWC = (function (exports) {
7133
7156
  }
7134
7157
 
7135
7158
  function scheduleRehydration(vm) {
7136
- if (isTrue(ssr$1) || isTrue(vm.isScheduled)) {
7159
+ var ssr = vm.renderer.ssr;
7160
+
7161
+ if (isTrue(ssr) || isTrue(vm.isScheduled)) {
7137
7162
  return;
7138
7163
  }
7139
7164
 
@@ -7320,7 +7345,8 @@ var LWC = (function (exports) {
7320
7345
  var elm = vm.elm,
7321
7346
  _vm$context = vm.context,
7322
7347
  wiredConnecting = _vm$context.wiredConnecting,
7323
- wiredDisconnecting = _vm$context.wiredDisconnecting; // waiting for the component to be connected to formally request the context via the token
7348
+ wiredDisconnecting = _vm$context.wiredDisconnecting,
7349
+ dispatchEvent = vm.renderer.dispatchEvent; // waiting for the component to be connected to formally request the context via the token
7324
7350
 
7325
7351
  ArrayPush$1.call(wiredConnecting, function () {
7326
7352
  // This event is responsible for connecting the host element with another
@@ -7340,7 +7366,7 @@ var LWC = (function (exports) {
7340
7366
  ArrayPush$1.call(wiredDisconnecting, disconnectCallback);
7341
7367
  }
7342
7368
  });
7343
- dispatchEvent$1(elm, contextRegistrationEvent);
7369
+ dispatchEvent(elm, contextRegistrationEvent);
7344
7370
  });
7345
7371
  }
7346
7372
 
@@ -7604,95 +7630,123 @@ var LWC = (function (exports) {
7604
7630
  function hydrateVM(vm) {
7605
7631
  var children = renderComponent(vm);
7606
7632
  vm.children = children;
7607
- var parentNode = vm.renderRoot;
7608
- hydrateChildren(getFirstChild$1(parentNode), children, parentNode, vm);
7633
+ var parentNode = vm.renderRoot,
7634
+ getFirstChild = vm.renderer.getFirstChild;
7635
+ hydrateChildren(getFirstChild(parentNode), children, parentNode, vm);
7609
7636
  runRenderedCallback(vm);
7610
7637
  }
7611
7638
 
7612
- function hydrateNode(node, vnode) {
7639
+ function hydrateNode(node, vnode, renderer) {
7640
+ var _a, _b;
7641
+
7613
7642
  var hydratedNode;
7614
7643
 
7615
7644
  switch (vnode.type) {
7616
7645
  case 0
7617
7646
  /* Text */
7618
7647
  :
7619
- hydratedNode = hydrateText(node, vnode);
7648
+ // VText has no special capability, fallback to the owner's renderer
7649
+ hydratedNode = hydrateText(node, vnode, renderer);
7620
7650
  break;
7621
7651
 
7622
7652
  case 1
7623
7653
  /* Comment */
7624
7654
  :
7625
- hydratedNode = hydrateComment(node, vnode);
7655
+ // VComment has no special capability, fallback to the owner's renderer
7656
+ hydratedNode = hydrateComment(node, vnode, renderer);
7657
+ break;
7658
+
7659
+ case 4
7660
+ /* Static */
7661
+ :
7662
+ // VStatic are cacheable and cannot have custom renderer associated to them
7663
+ hydratedNode = hydrateStaticElement(node, vnode, renderer);
7626
7664
  break;
7627
7665
 
7628
7666
  case 2
7629
7667
  /* Element */
7630
7668
  :
7631
- hydratedNode = hydrateElement(node, vnode);
7669
+ hydratedNode = hydrateElement(node, vnode, (_a = vnode.data.renderer) !== null && _a !== void 0 ? _a : renderer);
7632
7670
  break;
7633
7671
 
7634
7672
  case 3
7635
7673
  /* CustomElement */
7636
7674
  :
7637
- hydratedNode = hydrateCustomElement(node, vnode);
7675
+ hydratedNode = hydrateCustomElement(node, vnode, (_b = vnode.data.renderer) !== null && _b !== void 0 ? _b : renderer);
7638
7676
  break;
7639
7677
  }
7640
7678
 
7641
- return nextSibling$1(hydratedNode);
7679
+ return renderer.nextSibling(hydratedNode);
7642
7680
  }
7643
7681
 
7644
- function hydrateText(node, vnode) {
7682
+ function hydrateText(node, vnode, renderer) {
7645
7683
  var _a;
7646
7684
 
7647
7685
  if (!hasCorrectNodeType(vnode, node, 3
7648
7686
  /* TEXT */
7649
- )) {
7650
- return handleMismatch(node, vnode);
7687
+ , renderer)) {
7688
+ return handleMismatch(node, vnode, renderer);
7651
7689
  }
7652
7690
 
7653
7691
  if (process.env.NODE_ENV !== 'production') {
7654
- var nodeValue = getProperty$1(node, 'nodeValue');
7692
+ var _getProperty = renderer.getProperty;
7693
+
7694
+ var nodeValue = _getProperty(node, 'nodeValue');
7655
7695
 
7656
7696
  if (nodeValue !== vnode.text && !(nodeValue === "\u200D" && vnode.text === '')) {
7657
7697
  logWarn('Hydration mismatch: text values do not match, will recover from the difference', vnode.owner);
7658
7698
  }
7659
7699
  }
7660
7700
 
7661
- setText$1(node, (_a = vnode.text) !== null && _a !== void 0 ? _a : null);
7701
+ var setText = renderer.setText;
7702
+ setText(node, (_a = vnode.text) !== null && _a !== void 0 ? _a : null);
7662
7703
  vnode.elm = node;
7663
7704
  return node;
7664
7705
  }
7665
7706
 
7666
- function hydrateComment(node, vnode) {
7707
+ function hydrateComment(node, vnode, renderer) {
7667
7708
  var _a;
7668
7709
 
7669
7710
  if (!hasCorrectNodeType(vnode, node, 8
7670
7711
  /* COMMENT */
7671
- )) {
7672
- return handleMismatch(node, vnode);
7712
+ , renderer)) {
7713
+ return handleMismatch(node, vnode, renderer);
7673
7714
  }
7674
7715
 
7675
7716
  if (process.env.NODE_ENV !== 'production') {
7676
- var nodeValue = getProperty$1(node, 'nodeValue');
7717
+ var _getProperty2 = renderer.getProperty;
7718
+
7719
+ var nodeValue = _getProperty2(node, 'nodeValue');
7677
7720
 
7678
7721
  if (nodeValue !== vnode.text) {
7679
7722
  logWarn('Hydration mismatch: comment values do not match, will recover from the difference', vnode.owner);
7680
7723
  }
7681
7724
  }
7682
7725
 
7683
- setProperty$1(node, 'nodeValue', (_a = vnode.text) !== null && _a !== void 0 ? _a : null);
7726
+ var setProperty = renderer.setProperty;
7727
+ setProperty(node, 'nodeValue', (_a = vnode.text) !== null && _a !== void 0 ? _a : null);
7684
7728
  vnode.elm = node;
7685
7729
  return node;
7686
7730
  }
7687
7731
 
7688
- function hydrateElement(elm, vnode) {
7732
+ function hydrateStaticElement(elm, vnode, renderer) {
7733
+ if (!areCompatibleNodes(vnode.fragment, elm, vnode, renderer)) {
7734
+ return handleMismatch(elm, vnode, renderer);
7735
+ }
7736
+
7737
+ vnode.elm = elm;
7738
+ return elm;
7739
+ }
7740
+
7741
+ function hydrateElement(elm, vnode, renderer) {
7689
7742
  if (!hasCorrectNodeType(vnode, elm, 1
7690
7743
  /* ELEMENT */
7691
- ) || !isMatchingElement(vnode, elm)) {
7692
- return handleMismatch(elm, vnode);
7744
+ , renderer) || !isMatchingElement(vnode, elm, renderer)) {
7745
+ return handleMismatch(elm, vnode, renderer);
7693
7746
  }
7694
7747
 
7695
7748
  vnode.elm = elm;
7749
+ var owner = vnode.owner;
7696
7750
  var context = vnode.data.context;
7697
7751
  var isDomManual = Boolean(!isUndefined$1(context) && !isUndefined$1(context.lwc) && context.lwc.dom === "manual"
7698
7752
  /* Manual */
@@ -7702,42 +7756,44 @@ var LWC = (function (exports) {
7702
7756
  // it may be that this element has lwc:inner-html, we need to diff and in case are the same,
7703
7757
  // remove the innerHTML from props so it reuses the existing dom elements.
7704
7758
  var props = vnode.data.props;
7759
+ var _getProperty3 = renderer.getProperty;
7705
7760
 
7706
7761
  if (!isUndefined$1(props) && !isUndefined$1(props.innerHTML)) {
7707
- if (getProperty$1(elm, 'innerHTML') === props.innerHTML) {
7762
+ if (_getProperty3(elm, 'innerHTML') === props.innerHTML) {
7708
7763
  // Do a shallow clone since VNodeData may be shared across VNodes due to hoist optimization
7709
7764
  vnode.data = Object.assign(Object.assign({}, vnode.data), {
7710
7765
  props: cloneAndOmitKey(props, 'innerHTML')
7711
7766
  });
7712
7767
  } else {
7713
7768
  if (process.env.NODE_ENV !== 'production') {
7714
- logWarn("Mismatch hydrating element <".concat(getProperty$1(elm, 'tagName').toLowerCase(), ">: innerHTML values do not match for element, will recover from the difference"), vnode.owner);
7769
+ logWarn("Mismatch hydrating element <".concat(_getProperty3(elm, 'tagName').toLowerCase(), ">: innerHTML values do not match for element, will recover from the difference"), owner);
7715
7770
  }
7716
7771
  }
7717
7772
  }
7718
7773
  }
7719
7774
 
7720
- patchElementPropsAndAttrs(vnode);
7775
+ patchElementPropsAndAttrs(vnode, renderer);
7721
7776
 
7722
7777
  if (!isDomManual) {
7723
- hydrateChildren(getFirstChild$1(elm), vnode.children, elm, vnode.owner);
7778
+ var _getFirstChild = renderer.getFirstChild;
7779
+ hydrateChildren(_getFirstChild(elm), vnode.children, elm, owner);
7724
7780
  }
7725
7781
 
7726
7782
  return elm;
7727
7783
  }
7728
7784
 
7729
- function hydrateCustomElement(elm, vnode) {
7785
+ function hydrateCustomElement(elm, vnode, renderer) {
7730
7786
  if (!hasCorrectNodeType(vnode, elm, 1
7731
7787
  /* ELEMENT */
7732
- ) || !isMatchingElement(vnode, elm)) {
7733
- return handleMismatch(elm, vnode);
7788
+ , renderer) || !isMatchingElement(vnode, elm, renderer)) {
7789
+ return handleMismatch(elm, vnode, renderer);
7734
7790
  }
7735
7791
 
7736
7792
  var sel = vnode.sel,
7737
7793
  mode = vnode.mode,
7738
7794
  ctor = vnode.ctor,
7739
7795
  owner = vnode.owner;
7740
- var vm = createVM(elm, ctor, {
7796
+ var vm = createVM(elm, ctor, renderer, {
7741
7797
  mode: mode,
7742
7798
  owner: owner,
7743
7799
  tagName: sel,
@@ -7746,7 +7802,7 @@ var LWC = (function (exports) {
7746
7802
  vnode.elm = elm;
7747
7803
  vnode.vm = vm;
7748
7804
  allocateChildren(vnode, vm);
7749
- patchElementPropsAndAttrs(vnode); // Insert hook section:
7805
+ patchElementPropsAndAttrs(vnode, renderer); // Insert hook section:
7750
7806
 
7751
7807
  if (process.env.NODE_ENV !== 'production') {
7752
7808
  assert.isTrue(vm.state === 0
@@ -7759,9 +7815,10 @@ var LWC = (function (exports) {
7759
7815
  if (vm.renderMode !== 0
7760
7816
  /* Light */
7761
7817
  ) {
7762
- // VM is not rendering in Light DOM, we can proceed and hydrate the slotted content.
7818
+ var _getFirstChild2 = renderer.getFirstChild; // VM is not rendering in Light DOM, we can proceed and hydrate the slotted content.
7763
7819
  // Note: for Light DOM, this is handled while hydrating the VM
7764
- hydrateChildren(getFirstChild$1(elm), vnode.children, elm, vm);
7820
+
7821
+ hydrateChildren(_getFirstChild2(elm), vnode.children, elm, vm);
7765
7822
  }
7766
7823
 
7767
7824
  hydrateVM(vm);
@@ -7772,13 +7829,14 @@ var LWC = (function (exports) {
7772
7829
  var hasWarned = false;
7773
7830
  var nextNode = node;
7774
7831
  var anchor = null;
7832
+ var renderer = owner.renderer;
7775
7833
 
7776
7834
  for (var _i29 = 0; _i29 < children.length; _i29++) {
7777
7835
  var childVnode = children[_i29];
7778
7836
 
7779
7837
  if (!isNull(childVnode)) {
7780
7838
  if (nextNode) {
7781
- nextNode = hydrateNode(nextNode, childVnode);
7839
+ nextNode = hydrateNode(nextNode, childVnode, renderer);
7782
7840
  anchor = childVnode.elm;
7783
7841
  } else {
7784
7842
  hasMismatch = true;
@@ -7790,7 +7848,7 @@ var LWC = (function (exports) {
7790
7848
  }
7791
7849
  }
7792
7850
 
7793
- mount(childVnode, parentNode, anchor);
7851
+ mount(childVnode, parentNode, renderer, anchor);
7794
7852
  anchor = childVnode.elm;
7795
7853
  }
7796
7854
  }
@@ -7803,38 +7861,40 @@ var LWC = (function (exports) {
7803
7861
  if (!hasWarned) {
7804
7862
  logError("Hydration mismatch: incorrect number of rendered nodes. Server rendered more nodes than the client.", owner);
7805
7863
  }
7806
- }
7864
+ } // nextSibling is mostly harmless, and since we don't have
7865
+ // a good reference to what element to act upon, we instead
7866
+ // rely on the vm's associated renderer for navigating to the
7867
+ // next node in the list to be hydrated.
7868
+
7869
+
7870
+ var _nextSibling = renderer.nextSibling;
7807
7871
 
7808
7872
  do {
7809
7873
  var current = nextNode;
7810
- nextNode = nextSibling$1(nextNode);
7811
- removeNode(current, parentNode);
7874
+ nextNode = _nextSibling(nextNode);
7875
+ removeNode(current, parentNode, renderer);
7812
7876
  } while (nextNode);
7813
7877
  }
7814
7878
  }
7815
7879
 
7816
- function handleMismatch(node, vnode, msg) {
7880
+ function handleMismatch(node, vnode, renderer) {
7817
7881
  hasMismatch = true;
7818
-
7819
- if (!isUndefined$1(msg)) {
7820
- if (process.env.NODE_ENV !== 'production') {
7821
- logError(msg, vnode.owner);
7822
- }
7823
- }
7824
-
7825
- var parentNode = getProperty$1(node, 'parentNode');
7826
- mount(vnode, parentNode, node);
7827
- removeNode(node, parentNode);
7882
+ var getProperty = renderer.getProperty;
7883
+ var parentNode = getProperty(node, 'parentNode');
7884
+ mount(vnode, parentNode, renderer, node);
7885
+ removeNode(node, parentNode, renderer);
7828
7886
  return vnode.elm;
7829
7887
  }
7830
7888
 
7831
- function patchElementPropsAndAttrs(vnode) {
7832
- applyEventListeners(vnode);
7833
- patchProps(null, vnode);
7889
+ function patchElementPropsAndAttrs(vnode, renderer) {
7890
+ applyEventListeners(vnode, renderer);
7891
+ patchProps(null, vnode, renderer);
7834
7892
  }
7835
7893
 
7836
- function hasCorrectNodeType(vnode, node, nodeType) {
7837
- if (getProperty$1(node, 'nodeType') !== nodeType) {
7894
+ function hasCorrectNodeType(vnode, node, nodeType, renderer) {
7895
+ var getProperty = renderer.getProperty;
7896
+
7897
+ if (getProperty(node, 'nodeType') !== nodeType) {
7838
7898
  if (process.env.NODE_ENV !== 'production') {
7839
7899
  logError('Hydration mismatch: incorrect node type received', vnode.owner);
7840
7900
  }
@@ -7845,22 +7905,24 @@ var LWC = (function (exports) {
7845
7905
  return true;
7846
7906
  }
7847
7907
 
7848
- function isMatchingElement(vnode, elm) {
7849
- if (vnode.sel.toLowerCase() !== getProperty$1(elm, 'tagName').toLowerCase()) {
7908
+ function isMatchingElement(vnode, elm, renderer) {
7909
+ var getProperty = renderer.getProperty;
7910
+
7911
+ if (vnode.sel.toLowerCase() !== getProperty(elm, 'tagName').toLowerCase()) {
7850
7912
  if (process.env.NODE_ENV !== 'production') {
7851
- logError("Hydration mismatch: expecting element with tag \"".concat(vnode.sel.toLowerCase(), "\" but found \"").concat(getProperty$1(elm, 'tagName').toLowerCase(), "\"."), vnode.owner);
7913
+ logError("Hydration mismatch: expecting element with tag \"".concat(vnode.sel.toLowerCase(), "\" but found \"").concat(getProperty(elm, 'tagName').toLowerCase(), "\"."), vnode.owner);
7852
7914
  }
7853
7915
 
7854
7916
  return false;
7855
7917
  }
7856
7918
 
7857
- var hasIncompatibleAttrs = validateAttrs(vnode, elm);
7858
- var hasIncompatibleClass = validateClassAttr(vnode, elm);
7859
- var hasIncompatibleStyle = validateStyleAttr(vnode, elm);
7919
+ var hasIncompatibleAttrs = validateAttrs(vnode, elm, renderer);
7920
+ var hasIncompatibleClass = validateClassAttr(vnode, elm, renderer);
7921
+ var hasIncompatibleStyle = validateStyleAttr(vnode, elm, renderer);
7860
7922
  return hasIncompatibleAttrs && hasIncompatibleClass && hasIncompatibleStyle;
7861
7923
  }
7862
7924
 
7863
- function validateAttrs(vnode, elm) {
7925
+ function validateAttrs(vnode, elm, renderer) {
7864
7926
  var _vnode$data$attrs = vnode.data.attrs,
7865
7927
  attrs = _vnode$data$attrs === void 0 ? {} : _vnode$data$attrs;
7866
7928
  var nodesAreCompatible = true; // Validate attributes, though we could always recovery from those by running the update mods.
@@ -7871,11 +7933,15 @@ var LWC = (function (exports) {
7871
7933
  attrName = _Object$entries$_i[0],
7872
7934
  attrValue = _Object$entries$_i[1];
7873
7935
 
7874
- var elmAttrValue = getAttribute$1(elm, attrName);
7936
+ var owner = vnode.owner;
7937
+ var _getAttribute = renderer.getAttribute;
7938
+
7939
+ var elmAttrValue = _getAttribute(elm, attrName);
7875
7940
 
7876
7941
  if (String(attrValue) !== elmAttrValue) {
7877
7942
  if (process.env.NODE_ENV !== 'production') {
7878
- logError("Mismatch hydrating element <".concat(getProperty$1(elm, 'tagName').toLowerCase(), ">: attribute \"").concat(attrName, "\" has different values, expected \"").concat(attrValue, "\" but found \"").concat(elmAttrValue, "\""), vnode.owner);
7943
+ var _getProperty4 = renderer.getProperty;
7944
+ logError("Mismatch hydrating element <".concat(_getProperty4(elm, 'tagName').toLowerCase(), ">: attribute \"").concat(attrName, "\" has different values, expected \"").concat(attrValue, "\" but found \"").concat(elmAttrValue, "\""), owner);
7879
7945
  }
7880
7946
 
7881
7947
  nodesAreCompatible = false;
@@ -7885,20 +7951,22 @@ var LWC = (function (exports) {
7885
7951
  return nodesAreCompatible;
7886
7952
  }
7887
7953
 
7888
- function validateClassAttr(vnode, elm) {
7954
+ function validateClassAttr(vnode, elm, renderer) {
7889
7955
  var _vnode$data = vnode.data,
7890
7956
  className = _vnode$data.className,
7891
7957
  classMap = _vnode$data.classMap;
7958
+ var getProperty = renderer.getProperty,
7959
+ getClassList = renderer.getClassList;
7892
7960
  var nodesAreCompatible = true;
7893
7961
  var vnodeClassName;
7894
7962
 
7895
- if (!isUndefined$1(className) && String(className) !== getProperty$1(elm, 'className')) {
7963
+ if (!isUndefined$1(className) && String(className) !== getProperty(elm, 'className')) {
7896
7964
  // className is used when class is bound to an expr.
7897
7965
  nodesAreCompatible = false;
7898
7966
  vnodeClassName = className;
7899
7967
  } else if (!isUndefined$1(classMap)) {
7900
7968
  // classMap is used when class is set to static value.
7901
- var classList = getClassList$1(elm);
7969
+ var classList = getClassList(elm);
7902
7970
  var computedClassName = ''; // all classes from the vnode should be in the element.classList
7903
7971
 
7904
7972
  for (var name in classMap) {
@@ -7918,18 +7986,19 @@ var LWC = (function (exports) {
7918
7986
 
7919
7987
  if (!nodesAreCompatible) {
7920
7988
  if (process.env.NODE_ENV !== 'production') {
7921
- logError("Mismatch hydrating element <".concat(getProperty$1(elm, 'tagName').toLowerCase(), ">: attribute \"class\" has different values, expected \"").concat(vnodeClassName, "\" but found \"").concat(getProperty$1(elm, 'className'), "\""), vnode.owner);
7989
+ logError("Mismatch hydrating element <".concat(getProperty(elm, 'tagName').toLowerCase(), ">: attribute \"class\" has different values, expected \"").concat(vnodeClassName, "\" but found \"").concat(getProperty(elm, 'className'), "\""), vnode.owner);
7922
7990
  }
7923
7991
  }
7924
7992
 
7925
7993
  return nodesAreCompatible;
7926
7994
  }
7927
7995
 
7928
- function validateStyleAttr(vnode, elm) {
7996
+ function validateStyleAttr(vnode, elm, renderer) {
7929
7997
  var _vnode$data2 = vnode.data,
7930
7998
  style = _vnode$data2.style,
7931
7999
  styleDecls = _vnode$data2.styleDecls;
7932
- var elmStyle = getAttribute$1(elm, 'style') || '';
8000
+ var getAttribute = renderer.getAttribute;
8001
+ var elmStyle = getAttribute(elm, 'style') || '';
7933
8002
  var vnodeStyle;
7934
8003
  var nodesAreCompatible = true;
7935
8004
 
@@ -7967,12 +8036,67 @@ var LWC = (function (exports) {
7967
8036
 
7968
8037
  if (!nodesAreCompatible) {
7969
8038
  if (process.env.NODE_ENV !== 'production') {
7970
- logError("Mismatch hydrating element <".concat(getProperty$1(elm, 'tagName').toLowerCase(), ">: attribute \"style\" has different values, expected \"").concat(vnodeStyle, "\" but found \"").concat(elmStyle, "\"."), vnode.owner);
8039
+ var _getProperty5 = renderer.getProperty;
8040
+ logError("Mismatch hydrating element <".concat(_getProperty5(elm, 'tagName').toLowerCase(), ">: attribute \"style\" has different values, expected \"").concat(vnodeStyle, "\" but found \"").concat(elmStyle, "\"."), vnode.owner);
7971
8041
  }
7972
8042
  }
7973
8043
 
7974
8044
  return nodesAreCompatible;
7975
8045
  }
8046
+
8047
+ function areCompatibleNodes(client, ssr, vnode, renderer) {
8048
+ var getProperty = renderer.getProperty,
8049
+ getAttribute = renderer.getAttribute;
8050
+
8051
+ if (getProperty(client, 'nodeType') === 3
8052
+ /* TEXT */
8053
+ ) {
8054
+ if (!hasCorrectNodeType(vnode, ssr, 3
8055
+ /* TEXT */
8056
+ , renderer)) {
8057
+ return false;
8058
+ }
8059
+
8060
+ return getProperty(client, 'nodeValue') === getProperty(ssr, 'nodeValue');
8061
+ }
8062
+
8063
+ if (getProperty(client, 'nodeType') === 8
8064
+ /* COMMENT */
8065
+ ) {
8066
+ if (!hasCorrectNodeType(vnode, ssr, 8
8067
+ /* COMMENT */
8068
+ , renderer)) {
8069
+ return false;
8070
+ }
8071
+
8072
+ return getProperty(client, 'nodeValue') === getProperty(ssr, 'nodeValue');
8073
+ }
8074
+
8075
+ if (!hasCorrectNodeType(vnode, ssr, 1
8076
+ /* ELEMENT */
8077
+ , renderer)) {
8078
+ return false;
8079
+ }
8080
+
8081
+ var isCompatibleElements = true;
8082
+
8083
+ if (getProperty(client, 'tagName') !== getProperty(ssr, 'tagName')) {
8084
+ if (process.env.NODE_ENV !== 'production') {
8085
+ logError("Hydration mismatch: expecting element with tag \"".concat(getProperty(client, 'tagName').toLowerCase(), "\" but found \"").concat(getProperty(ssr, 'tagName').toLowerCase(), "\"."), vnode.owner);
8086
+ }
8087
+
8088
+ return false;
8089
+ }
8090
+
8091
+ var clientAttrsNames = getProperty(client, 'getAttributeNames').call(client);
8092
+ clientAttrsNames.forEach(function (attrName) {
8093
+ if (getAttribute(client, attrName) !== getAttribute(ssr, attrName)) {
8094
+ logError("Mismatch hydrating element <".concat(getProperty(client, 'tagName').toLowerCase(), ">: attribute \"").concat(attrName, "\" has different values, expected \"").concat(getAttribute(client, attrName), "\" but found \"").concat(getAttribute(ssr, attrName), "\""), vnode.owner);
8095
+ isCompatibleElements = false;
8096
+ }
8097
+ });
8098
+ return isCompatibleElements;
8099
+ }
7976
8100
  /*
7977
8101
  * Copyright (c) 2018, salesforce.com, inc.
7978
8102
  * All rights reserved.
@@ -8042,7 +8166,7 @@ var LWC = (function (exports) {
8042
8166
  _step3;
8043
8167
 
8044
8168
  try {
8045
- var _loop3 = function _loop3() {
8169
+ var _loop2 = function _loop2() {
8046
8170
  var prop = _step3.value;
8047
8171
  var originalArrayMethod = getOriginalArrayMethod(prop);
8048
8172
 
@@ -8054,7 +8178,7 @@ var LWC = (function (exports) {
8054
8178
  };
8055
8179
 
8056
8180
  for (_iterator3.s(); !(_step3 = _iterator3.n()).done;) {
8057
- _loop3();
8181
+ _loop2();
8058
8182
  }
8059
8183
  } catch (err) {
8060
8184
  _iterator3.e(err);
@@ -8075,7 +8199,7 @@ var LWC = (function (exports) {
8075
8199
  _step4;
8076
8200
 
8077
8201
  try {
8078
- var _loop4 = function _loop4() {
8202
+ var _loop3 = function _loop3() {
8079
8203
  var prop = _step4.value;
8080
8204
  var value = tmpl[prop];
8081
8205
  defineProperty(tmpl, prop, {
@@ -8095,7 +8219,7 @@ var LWC = (function (exports) {
8095
8219
  };
8096
8220
 
8097
8221
  for (_iterator4.s(); !(_step4 = _iterator4.n()).done;) {
8098
- _loop4();
8222
+ _loop3();
8099
8223
  }
8100
8224
  } catch (err) {
8101
8225
  _iterator4.e(err);
@@ -8145,7 +8269,7 @@ var LWC = (function (exports) {
8145
8269
 
8146
8270
  return ctor;
8147
8271
  }
8148
- /* version: 2.14.0 */
8272
+ /* version: 2.15.0 */
8149
8273
 
8150
8274
  /*
8151
8275
  * Copyright (c) 2018, salesforce.com, inc.
@@ -8324,7 +8448,7 @@ var LWC = (function (exports) {
8324
8448
  try {
8325
8449
  // dereference HTMLElement global because babel wraps globals in compat mode with a
8326
8450
  // _wrapNativeSuper()
8327
- // This is a problem because LWCUpgradableElement extends renderer.HTMLElement which does not
8451
+ // This is a problem because LWCUpgradableElement extends renderer.HTMLElementExported which does not
8328
8452
  // get wrapped by babel.
8329
8453
  var HTMLElementAlias = HTMLElement; // In case we use compat mode with a modern browser, the compat mode transformation
8330
8454
  // invokes the DOM api with an .apply() or .call() to initialize any DOM api sub-classing,
@@ -8400,9 +8524,22 @@ var LWC = (function (exports) {
8400
8524
  }
8401
8525
 
8402
8526
  var ssr = false;
8527
+
8528
+ function isHydrating() {
8529
+ return hydrating;
8530
+ }
8531
+
8403
8532
  var isNativeShadowDefined = _globalThis[KEY__IS_NATIVE_SHADOW_ROOT_DEFINED];
8404
8533
  var isSyntheticShadowDefined = hasOwnProperty$1.call(Element.prototype, KEY__SHADOW_TOKEN);
8405
8534
 
8535
+ function cloneNode(node, deep) {
8536
+ return node.cloneNode(deep);
8537
+ }
8538
+
8539
+ function createFragment(html) {
8540
+ return document.createRange().createContextualFragment(html).firstChild;
8541
+ }
8542
+
8406
8543
  function createElement$1(tagName, namespace) {
8407
8544
  return isUndefined$1(namespace) ? document.createElement(tagName) : document.createElementNS(namespace, tagName);
8408
8545
  }
@@ -8545,75 +8682,49 @@ var LWC = (function (exports) {
8545
8682
  }
8546
8683
 
8547
8684
  var HTMLElementExported = HTMLElementConstructor;
8548
- /*
8549
- * Copyright (c) 2020, salesforce.com, inc.
8550
- * All rights reserved.
8551
- * SPDX-License-Identifier: MIT
8552
- * For full license text, see the LICENSE file in the repo root or https://opensource.org/licenses/MIT
8553
- */
8554
-
8555
- setAssertInstanceOfHTMLElement(assertInstanceOfHTMLElement);
8556
- setAttachShadow(attachShadow);
8557
- setCreateComment(createComment);
8558
- setCreateElement(createElement$1);
8559
- setCreateText(createText);
8560
- setDefineCustomElement(defineCustomElement);
8561
- setDispatchEvent(dispatchEvent);
8562
- setGetAttribute(getAttribute);
8563
- setGetBoundingClientRect(getBoundingClientRect);
8564
- setGetChildNodes(getChildNodes);
8565
- setGetChildren(getChildren);
8566
- setGetClassList(getClassList);
8567
- setGetCustomElement(getCustomElement);
8568
- setGetElementsByClassName(getElementsByClassName);
8569
- setGetElementsByTagName(getElementsByTagName);
8570
- setGetFirstChild(getFirstChild);
8571
- setGetFirstElementChild(getFirstElementChild);
8572
- setGetLastChild(getLastChild);
8573
- setGetLastElementChild(getLastElementChild);
8574
- setGetProperty(getProperty);
8575
- setHTMLElement(HTMLElementExported);
8576
- setInsert(insert);
8577
- setIsConnected(isConnected);
8578
- setIsNativeShadowDefined(isNativeShadowDefined);
8579
- setIsSyntheticShadowDefined(isSyntheticShadowDefined);
8580
- setNextSibling(nextSibling);
8581
- setQuerySelector(querySelector);
8582
- setQuerySelectorAll(querySelectorAll);
8583
- setRemove(remove);
8584
- setRemoveAttribute(removeAttribute);
8585
- setRemoveEventListener(removeEventListener);
8586
- setSetAttribute(setAttribute);
8587
- setSetCSSStyleProperty(setCSSStyleProperty);
8588
- setSetProperty(setProperty);
8589
- setSetText(setText);
8590
- setSsr(ssr);
8591
- setAddEventListener(addEventListener);
8592
- setInsertStylesheet(insertStylesheet);
8593
- /*
8594
- * Copyright (c) 2018, salesforce.com, inc.
8595
- * All rights reserved.
8596
- * SPDX-License-Identifier: MIT
8597
- * For full license text, see the LICENSE file in the repo root or https://opensource.org/licenses/MIT
8598
- */
8599
- // @ts-ignore
8600
-
8601
- if (process.env.NODE_ENV !== 'production' && typeof __karma__ !== 'undefined') {
8602
- window.addEventListener('test-dummy-flag', function () {
8603
- var hasFlag = false;
8604
-
8605
- if (runtimeFlags.DUMMY_TEST_FLAG) {
8606
- hasFlag = true;
8607
- }
8608
-
8609
- window.dispatchEvent(new CustomEvent('has-dummy-flag', {
8610
- detail: {
8611
- package: '@lwc/engine-dom',
8612
- hasFlag: hasFlag
8613
- }
8614
- }));
8615
- });
8616
- }
8685
+ var renderer = {
8686
+ ssr: ssr,
8687
+ isNativeShadowDefined: isNativeShadowDefined,
8688
+ isSyntheticShadowDefined: isSyntheticShadowDefined,
8689
+ HTMLElementExported: HTMLElementExported,
8690
+ isHydrating: isHydrating,
8691
+ insert: insert,
8692
+ remove: remove,
8693
+ cloneNode: cloneNode,
8694
+ createFragment: createFragment,
8695
+ createElement: createElement$1,
8696
+ createText: createText,
8697
+ createComment: createComment,
8698
+ nextSibling: nextSibling,
8699
+ attachShadow: attachShadow,
8700
+ getProperty: getProperty,
8701
+ setProperty: setProperty,
8702
+ setText: setText,
8703
+ getAttribute: getAttribute,
8704
+ setAttribute: setAttribute,
8705
+ removeAttribute: removeAttribute,
8706
+ addEventListener: addEventListener,
8707
+ removeEventListener: removeEventListener,
8708
+ dispatchEvent: dispatchEvent,
8709
+ getClassList: getClassList,
8710
+ setCSSStyleProperty: setCSSStyleProperty,
8711
+ getBoundingClientRect: getBoundingClientRect,
8712
+ querySelector: querySelector,
8713
+ querySelectorAll: querySelectorAll,
8714
+ getElementsByTagName: getElementsByTagName,
8715
+ getElementsByClassName: getElementsByClassName,
8716
+ getChildren: getChildren,
8717
+ getChildNodes: getChildNodes,
8718
+ getFirstChild: getFirstChild,
8719
+ getFirstElementChild: getFirstElementChild,
8720
+ getLastChild: getLastChild,
8721
+ getLastElementChild: getLastElementChild,
8722
+ isConnected: isConnected,
8723
+ insertStylesheet: insertStylesheet,
8724
+ assertInstanceOfHTMLElement: assertInstanceOfHTMLElement,
8725
+ defineCustomElement: defineCustomElement,
8726
+ getCustomElement: getCustomElement
8727
+ };
8617
8728
  /*
8618
8729
  * Copyright (c) 2018, salesforce.com, inc.
8619
8730
  * All rights reserved.
@@ -8621,7 +8732,6 @@ var LWC = (function (exports) {
8621
8732
  * For full license text, see the LICENSE file in the repo root or https://opensource.org/licenses/MIT
8622
8733
  */
8623
8734
 
8624
-
8625
8735
  function resetShadowRootAndLightDom(element, Ctor) {
8626
8736
  if (element.shadowRoot) {
8627
8737
  var shadowRoot = element.shadowRoot;
@@ -8639,7 +8749,7 @@ var LWC = (function (exports) {
8639
8749
  }
8640
8750
 
8641
8751
  function createVMWithProps(element, Ctor, props) {
8642
- var vm = createVM(element, Ctor, {
8752
+ var vm = createVM(element, Ctor, renderer, {
8643
8753
  mode: 'open',
8644
8754
  owner: null,
8645
8755
  tagName: element.tagName.toLowerCase(),
@@ -8759,7 +8869,7 @@ var LWC = (function (exports) {
8759
8869
  hydrateComponent(_assertThisInitialized(_this6), Ctor, {});
8760
8870
  hydratedCustomElements.add(_assertThisInitialized(_this6));
8761
8871
  } else {
8762
- createVM(_assertThisInitialized(_this6), Ctor, {
8872
+ createVM(_assertThisInitialized(_this6), Ctor, renderer, {
8763
8873
  mode: 'open',
8764
8874
  owner: null,
8765
8875
  tagName: _this6.tagName
@@ -8871,7 +8981,7 @@ var LWC = (function (exports) {
8871
8981
  throw new TypeError("\"createElement\" function expects an \"is\" option with a valid component constructor.");
8872
8982
  }
8873
8983
 
8874
- var UpgradableConstructor = getUpgradableConstructor(sel);
8984
+ var UpgradableConstructor = getUpgradableConstructor(sel, renderer);
8875
8985
  var wasComponentUpgraded = false; // the custom element from the registry is expecting an upgrade callback
8876
8986
 
8877
8987
  /**
@@ -8882,7 +8992,7 @@ var LWC = (function (exports) {
8882
8992
  */
8883
8993
 
8884
8994
  var element = new UpgradableConstructor(function (elm) {
8885
- createVM(elm, Ctor, {
8995
+ createVM(elm, Ctor, renderer, {
8886
8996
  tagName: sel,
8887
8997
  mode: options.mode !== 'closed' ? 'open' : 'closed',
8888
8998
  owner: null
@@ -8979,7 +9089,7 @@ var LWC = (function (exports) {
8979
9089
  });
8980
9090
  freeze(LightningElement);
8981
9091
  seal(LightningElement.prototype);
8982
- /* version: 2.14.0 */
9092
+ /* version: 2.15.0 */
8983
9093
 
8984
9094
  exports.LightningElement = LightningElement;
8985
9095
  exports.__unstable__ProfilerControl = profilerControl;
@@ -8993,11 +9103,14 @@ var LWC = (function (exports) {
8993
9103
  exports.hydrateComponent = hydrateComponent;
8994
9104
  exports.isComponentConstructor = isComponentConstructor;
8995
9105
  exports.isNodeFromTemplate = isNodeShadowed;
9106
+ exports.parseFragment = parseFragment;
9107
+ exports.parseSVGFragment = parseSVGFragment;
8996
9108
  exports.readonly = readonly;
8997
9109
  exports.register = register;
8998
9110
  exports.registerComponent = registerComponent;
8999
9111
  exports.registerDecorators = registerDecorators;
9000
9112
  exports.registerTemplate = registerTemplate;
9113
+ exports.renderer = renderer;
9001
9114
  exports.sanitizeAttribute = sanitizeAttribute;
9002
9115
  exports.setFeatureFlag = setFeatureFlag;
9003
9116
  exports.setFeatureFlagForTest = setFeatureFlagForTest;