@lwrjs/everywhere 0.13.0-alpha.1 → 0.13.0-alpha.11

Sign up to get free protection for your applications and to get access to all the features.
Files changed (24) hide show
  1. package/build/__generated_site_amd_modules__/1/application/amd/l/en-US/ai/amd-bootstrap/configuration/ci/-/-/s/a90895ded6667fc2a6ba63a1040eb62c/config.js +12 -0
  2. package/build/__generated_site_amd_modules__/1/module/amd/1/l/en-US/mi/@lwrjs/app-service/amd-bootstrap/module/amd/v/0_13_0-alpha_11/s/272183c0b6e02561b7c96a1b23473837/@lwrjs_app-service_amd-bootstrap_module_amd.js +14 -0
  3. package/build/__generated_site_amd_modules__/1/module/amd/1/l/en-US/mi/lwc/v/{6_5_2/s/b04b0848c889e153c4119373afa73a21 → 6_6_3/s/58be00f9ece0d8c0a817bddb6ae6b439}/lwc.js +698 -558
  4. package/build/__generated_site_amd_modules__/1/module/amd/1/l/en-US/mi/lwr/everywhereAmd/v/{0_13_0-alpha_1 → 0_13_0-alpha_11}/s/cb931ebef2b89dcf8ab51456e3a68864/lwr_everywhereAmd.js +3 -3
  5. package/build/__generated_site_amd_modules__/1/module/amd/1/l/en-US/mi/lwr/init/v/{0_13_0-alpha_1 → 0_13_0-alpha_11}/s/f30361ad8ff7af505bf4d465c8499181/lwr_init.js +21 -21
  6. package/build/__generated_site_amd_modules__/1/module/amd/1/l/en-US/mi/lwr/loader/v/{0_13_0-alpha_1/s/db873ff051952f601e5b94afcd12a640 → 0_13_0-alpha_11/s/94f48222f93da3d09e1317f15ef06716}/lwr_loader.js +5 -6
  7. package/build/__generated_site_amd_modules__/1/module/amd/1/l/en-US/mi/lwr/metrics/v/{0_13_0-alpha_1 → 0_13_0-alpha_11}/s/274c8343f810353bbad085a79709395f/lwr_metrics.js +1 -1
  8. package/build/__generated_site_amd_modules__/1/module/amd/1/l/en-US/mi/lwr/preInit/v/{0_13_0-alpha_1 → 0_13_0-alpha_11}/s/ec0fad0e38a96bb0b88c9f4553460347/lwr_preInit.js +1 -1
  9. package/build/__generated_site_amd_modules__/1/module/amd/1/l/en-US/mi/lwr/profiler/v/{0_13_0-alpha_1 → 0_13_0-alpha_11}/s/a152b8d35f12ca1b5147c5cd1ee155fb/lwr_profiler.js +1 -1
  10. package/build/__generated_site_amd_modules__/1/module/amd/1/l/en-US/mi/lwr/vault/v/{0_13_0-alpha_1 → 0_13_0-alpha_11}/s/c92abd8c1fec2d7eff62e4b097abbe14/lwr_vault.js +1 -1
  11. package/build/__generated_site_amd_modules__/1/resource/amd/lwr-error-shim.js/v/{0_13_0-alpha_1 → 0_13_0-alpha_11}/lwr-error-shim.js +1 -1
  12. package/build/__generated_site_amd_modules__/1/resource/amd/lwr-loader-shim.bundle.js/v/{0_13_0-alpha_1 → 0_13_0-alpha_11}/lwr-loader-shim.bundle.js +13 -10
  13. package/build/assets/amd/lwr-everywhere-debug.js +9 -10
  14. package/build/assets/amd/lwr-everywhere-min.js +2 -2
  15. package/build/assets/amd/lwr-everywhere.js +9 -10
  16. package/build/assets/core/lwr-everywhere-debug.js +5 -6
  17. package/build/assets/core/lwr-everywhere-min.js +1 -1
  18. package/build/assets/core/lwr-everywhere.js +5 -6
  19. package/build/assets/esm/lwr-everywhere-debug.js +1 -1
  20. package/build/assets/esm/lwr-everywhere-min.js +1 -1
  21. package/build/assets/esm/lwr-everywhere.js +1 -1
  22. package/package.json +10 -10
  23. package/build/__generated_site_amd_modules__/1/application/amd/l/en-US/ai/amd-bootstrap/configuration/ci/-/-/s/06bb09054e5c6120da9cf13b2ec7653a/config.js +0 -12
  24. package/build/__generated_site_amd_modules__/1/module/amd/1/l/en-US/mi/@lwrjs/app-service/amd-bootstrap/module/amd/v/0_13_0-alpha_1/s/8bce578258518655194bd71d1d72aad5/@lwrjs_app-service_amd-bootstrap_module_amd.js +0 -14
@@ -1,4 +1,4 @@
1
- LWR.define('lwc/v/6_5_2', ['exports'], (function (exports) { 'use strict';
1
+ LWR.define('lwc/v/6_6_3', ['exports'], (function (exports) { 'use strict';
2
2
 
3
3
  /**
4
4
  * Copyright (c) 2024 Salesforce, Inc.
@@ -442,9 +442,9 @@ LWR.define('lwc/v/6_5_2', ['exports'], (function (exports) { 'use strict';
442
442
  * For full license text, see the LICENSE file in the repo root or https://opensource.org/licenses/MIT
443
443
  */
444
444
  // Increment whenever the LWC template compiler changes
445
- const LWC_VERSION = "6.5.2";
445
+ const LWC_VERSION = "6.6.3";
446
446
  const LWC_VERSION_COMMENT_REGEX = /\/\*LWC compiler v([\d.]+)\*\/\s*}/;
447
- /** version: 6.5.2 */
447
+ /** version: 6.6.3 */
448
448
 
449
449
  /**
450
450
  * Copyright (c) 2024 Salesforce, Inc.
@@ -530,7 +530,7 @@ LWR.define('lwc/v/6_5_2', ['exports'], (function (exports) { 'use strict';
530
530
  setFeatureFlag(name, value);
531
531
  }
532
532
  }
533
- /** version: 6.5.2 */
533
+ /** version: 6.6.3 */
534
534
 
535
535
  /**
536
536
  * Copyright (c) 2024 Salesforce, Inc.
@@ -1722,7 +1722,7 @@ LWR.define('lwc/v/6_5_2', ['exports'], (function (exports) { 'use strict';
1722
1722
  valueMutated(originalTarget, key);
1723
1723
  return true;
1724
1724
  }
1725
- /*LWC compiler v6.5.2*/
1725
+ /*LWC compiler v6.6.3*/
1726
1726
  }
1727
1727
  const getterMap = new WeakMap();
1728
1728
  const setterMap = new WeakMap();
@@ -1815,7 +1815,7 @@ LWR.define('lwc/v/6_5_2', ['exports'], (function (exports) { 'use strict';
1815
1815
  /* istanbul ignore next */
1816
1816
  return false;
1817
1817
  }
1818
- /*LWC compiler v6.5.2*/
1818
+ /*LWC compiler v6.6.3*/
1819
1819
  }
1820
1820
  function extract(objectOrArray) {
1821
1821
  if (isArray(objectOrArray)) {
@@ -3522,7 +3522,7 @@ LWR.define('lwc/v/6_5_2', ['exports'], (function (exports) { 'use strict';
3522
3522
  }
3523
3523
  function HTMLBridgeElementFactory(SuperClass, publicProperties, methods, observedFields, proto, hasCustomSuperClass) {
3524
3524
  const HTMLBridgeElement = class extends SuperClass {
3525
- /*LWC compiler v6.5.2*/
3525
+ /*LWC compiler v6.6.3*/
3526
3526
  };
3527
3527
  // generating the hash table for attributes to avoid duplicate fields and facilitate validation
3528
3528
  // and false positives in case of inheritance.
@@ -3634,130 +3634,453 @@ LWR.define('lwc/v/6_5_2', ['exports'], (function (exports) { 'use strict';
3634
3634
  seal(BaseBridgeElement.prototype);
3635
3635
 
3636
3636
  /*
3637
- * Copyright (c) 2023, salesforce.com, inc.
3637
+ * Copyright (c) 2018, salesforce.com, inc.
3638
3638
  * All rights reserved.
3639
3639
  * SPDX-License-Identifier: MIT
3640
3640
  * For full license text, see the LICENSE file in the repo root or https://opensource.org/licenses/MIT
3641
3641
  */
3642
- const supportsWeakRefs = typeof WeakRef === 'function' && typeof FinalizationRegistry === 'function';
3643
- // In browsers that doesn't support WeakRefs, the values will still leak, but at least the keys won't
3644
- class LegacyWeakMultiMap {
3645
- constructor() {
3646
- this._map = new WeakMap();
3642
+ // These are only used for HMR in dev mode
3643
+ // The "pure" annotations are so that Rollup knows for sure it can remove these from prod mode
3644
+ let stylesheetsToCssContent = /*@__PURE__@*/new WeakMap();
3645
+ let cssContentToAbortControllers = /*@__PURE__@*/new Map();
3646
+ // Only used in LWC's Karma tests
3647
+ if (process.env.NODE_ENV === 'test-karma-lwc') {
3648
+ // Used to reset the global state between test runs
3649
+ window.__lwcResetStylesheetCache = () => {
3650
+ stylesheetsToCssContent = new WeakMap();
3651
+ cssContentToAbortControllers = new Map();
3652
+ };
3653
+ }
3654
+ function linkStylesheetToCssContentInDevMode(stylesheet, cssContent) {
3655
+ // Should never leak to prod; only used for HMR
3656
+ assertNotProd();
3657
+ let cssContents = stylesheetsToCssContent.get(stylesheet);
3658
+ if (isUndefined$1(cssContents)) {
3659
+ cssContents = new Set();
3660
+ stylesheetsToCssContent.set(stylesheet, cssContents);
3647
3661
  }
3648
- _getValues(key) {
3649
- let values = this._map.get(key);
3650
- if (isUndefined$1(values)) {
3651
- values = new Set();
3652
- this._map.set(key, values);
3662
+ cssContents.add(cssContent);
3663
+ }
3664
+ function getOrCreateAbortControllerInDevMode(cssContent) {
3665
+ // Should never leak to prod; only used for HMR
3666
+ assertNotProd();
3667
+ let abortController = cssContentToAbortControllers.get(cssContent);
3668
+ if (isUndefined$1(abortController)) {
3669
+ abortController = new AbortController();
3670
+ cssContentToAbortControllers.set(cssContent, abortController);
3671
+ }
3672
+ return abortController;
3673
+ }
3674
+ function getOrCreateAbortSignal(cssContent) {
3675
+ // abort controller/signal is only used for HMR in development
3676
+ if (process.env.NODE_ENV !== 'production') {
3677
+ return getOrCreateAbortControllerInDevMode(cssContent).signal;
3678
+ }
3679
+ return undefined;
3680
+ }
3681
+ function makeHostToken(token) {
3682
+ // Note: if this ever changes, update the `cssScopeTokens` returned by `@lwc/compiler`
3683
+ return `${token}-host`;
3684
+ }
3685
+ function createInlineStyleVNode(content) {
3686
+ return api.h('style', {
3687
+ key: 'style',
3688
+ // special key
3689
+ attrs: {
3690
+ type: 'text/css'
3653
3691
  }
3654
- return values;
3692
+ }, [api.t(content)]);
3693
+ }
3694
+ // TODO [#3733]: remove support for legacy scope tokens
3695
+ function updateStylesheetToken(vm, template, legacy) {
3696
+ const {
3697
+ elm,
3698
+ context,
3699
+ renderMode,
3700
+ shadowMode,
3701
+ renderer: {
3702
+ getClassList,
3703
+ removeAttribute,
3704
+ setAttribute
3705
+ }
3706
+ } = vm;
3707
+ const {
3708
+ stylesheets: newStylesheets
3709
+ } = template;
3710
+ const newStylesheetToken = legacy ? template.legacyStylesheetToken : template.stylesheetToken;
3711
+ const {
3712
+ stylesheets: newVmStylesheets
3713
+ } = vm;
3714
+ const isSyntheticShadow = renderMode === 1 /* RenderMode.Shadow */ && shadowMode === 1 /* ShadowMode.Synthetic */;
3715
+ const {
3716
+ hasScopedStyles
3717
+ } = context;
3718
+ let newToken;
3719
+ let newHasTokenInClass;
3720
+ let newHasTokenInAttribute;
3721
+ // Reset the styling token applied to the host element.
3722
+ let oldToken;
3723
+ let oldHasTokenInClass;
3724
+ let oldHasTokenInAttribute;
3725
+ if (legacy) {
3726
+ oldToken = context.legacyStylesheetToken;
3727
+ oldHasTokenInClass = context.hasLegacyTokenInClass;
3728
+ oldHasTokenInAttribute = context.hasLegacyTokenInAttribute;
3729
+ } else {
3730
+ oldToken = context.stylesheetToken;
3731
+ oldHasTokenInClass = context.hasTokenInClass;
3732
+ oldHasTokenInAttribute = context.hasTokenInAttribute;
3655
3733
  }
3656
- get(key) {
3657
- return this._getValues(key);
3734
+ if (!isUndefined$1(oldToken)) {
3735
+ if (oldHasTokenInClass) {
3736
+ getClassList(elm).remove(makeHostToken(oldToken));
3737
+ }
3738
+ if (oldHasTokenInAttribute) {
3739
+ removeAttribute(elm, makeHostToken(oldToken));
3740
+ }
3658
3741
  }
3659
- add(key, vm) {
3660
- const set = this._getValues(key);
3661
- set.add(vm);
3742
+ // Apply the new template styling token to the host element, if the new template has any
3743
+ // associated stylesheets. In the case of light DOM, also ensure there is at least one scoped stylesheet.
3744
+ const hasNewStylesheets = hasStyles(newStylesheets);
3745
+ const hasNewVmStylesheets = hasStyles(newVmStylesheets);
3746
+ if (hasNewStylesheets || hasNewVmStylesheets) {
3747
+ newToken = newStylesheetToken;
3662
3748
  }
3663
- delete(key) {
3664
- this._map.delete(key);
3749
+ // Set the new styling token on the host element
3750
+ if (!isUndefined$1(newToken)) {
3751
+ if (hasScopedStyles) {
3752
+ getClassList(elm).add(makeHostToken(newToken));
3753
+ newHasTokenInClass = true;
3754
+ }
3755
+ if (isSyntheticShadow) {
3756
+ setAttribute(elm, makeHostToken(newToken), '');
3757
+ newHasTokenInAttribute = true;
3758
+ }
3759
+ }
3760
+ // Update the styling tokens present on the context object.
3761
+ if (legacy) {
3762
+ context.legacyStylesheetToken = newToken;
3763
+ context.hasLegacyTokenInClass = newHasTokenInClass;
3764
+ context.hasLegacyTokenInAttribute = newHasTokenInAttribute;
3765
+ } else {
3766
+ context.stylesheetToken = newToken;
3767
+ context.hasTokenInClass = newHasTokenInClass;
3768
+ context.hasTokenInAttribute = newHasTokenInAttribute;
3665
3769
  }
3666
3770
  }
3667
- // This implementation relies on the WeakRef/FinalizationRegistry proposal.
3668
- // For some background, see: https://github.com/tc39/proposal-weakrefs
3669
- class ModernWeakMultiMap {
3670
- constructor() {
3671
- this._map = new WeakMap();
3672
- this._registry = new FinalizationRegistry(weakRefs => {
3673
- // This should be considered an optional cleanup method to remove GC'ed values from their respective arrays.
3674
- // JS VMs are not obligated to call FinalizationRegistry callbacks.
3675
- // Work backwards, removing stale VMs
3676
- for (let i = weakRefs.length - 1; i >= 0; i--) {
3677
- const vm = weakRefs[i].deref();
3678
- if (isUndefined$1(vm)) {
3679
- ArraySplice.call(weakRefs, i, 1); // remove
3771
+ function evaluateStylesheetsContent(stylesheets, stylesheetToken, vm) {
3772
+ const content = [];
3773
+ let root;
3774
+ for (let i = 0; i < stylesheets.length; i++) {
3775
+ let stylesheet = stylesheets[i];
3776
+ if (isArray$1(stylesheet)) {
3777
+ ArrayPush$1.apply(content, evaluateStylesheetsContent(stylesheet, stylesheetToken, vm));
3778
+ } else {
3779
+ if (process.env.NODE_ENV !== 'production') {
3780
+ // Check for compiler version mismatch in dev mode only
3781
+ checkVersionMismatch(stylesheet, 'stylesheet');
3782
+ // in dev-mode, we support hot swapping of stylesheet, which means that
3783
+ // the component instance might be attempting to use an old version of
3784
+ // the stylesheet, while internally, we have a replacement for it.
3785
+ stylesheet = getStyleOrSwappedStyle(stylesheet);
3786
+ }
3787
+ const isScopedCss = stylesheet[KEY__SCOPED_CSS];
3788
+ if (lwcRuntimeFlags.DISABLE_LIGHT_DOM_UNSCOPED_CSS && !isScopedCss && vm.renderMode === 0 /* RenderMode.Light */) {
3789
+ logError('Unscoped CSS is not supported in Light DOM in this environment. Please use scoped CSS ' + '(*.scoped.css) instead of unscoped CSS (*.css). See also: https://sfdc.co/scoped-styles-light-dom');
3790
+ continue;
3791
+ }
3792
+ // Apply the scope token only if the stylesheet itself is scoped, or if we're rendering synthetic shadow.
3793
+ const scopeToken = isScopedCss || vm.shadowMode === 1 /* ShadowMode.Synthetic */ && vm.renderMode === 1 /* RenderMode.Shadow */ ? stylesheetToken : undefined;
3794
+ // Use the actual `:host` selector if we're rendering global CSS for light DOM, or if we're rendering
3795
+ // native shadow DOM. Synthetic shadow DOM never uses `:host`.
3796
+ const useActualHostSelector = vm.renderMode === 0 /* RenderMode.Light */ ? !isScopedCss : vm.shadowMode === 0 /* ShadowMode.Native */;
3797
+ // Use the native :dir() pseudoclass only in native shadow DOM. Otherwise, in synthetic shadow,
3798
+ // we use an attribute selector on the host to simulate :dir().
3799
+ let useNativeDirPseudoclass;
3800
+ if (vm.renderMode === 1 /* RenderMode.Shadow */) {
3801
+ useNativeDirPseudoclass = vm.shadowMode === 0 /* ShadowMode.Native */;
3802
+ } else {
3803
+ // Light DOM components should only render `[dir]` if they're inside of a synthetic shadow root.
3804
+ // At the top level (root is null) or inside of a native shadow root, they should use `:dir()`.
3805
+ if (isUndefined$1(root)) {
3806
+ // Only calculate the root once as necessary
3807
+ root = getNearestShadowComponent(vm);
3680
3808
  }
3809
+ useNativeDirPseudoclass = isNull(root) || root.shadowMode === 0 /* ShadowMode.Native */;
3681
3810
  }
3682
- });
3683
- }
3684
- _getWeakRefs(key) {
3685
- let weakRefs = this._map.get(key);
3686
- if (isUndefined$1(weakRefs)) {
3687
- weakRefs = [];
3688
- this._map.set(key, weakRefs);
3689
- }
3690
- return weakRefs;
3691
- }
3692
- get(key) {
3693
- const weakRefs = this._getWeakRefs(key);
3694
- const result = new Set();
3695
- for (const weakRef of weakRefs) {
3696
- const vm = weakRef.deref();
3697
- if (!isUndefined$1(vm)) {
3698
- result.add(vm);
3811
+ const cssContent = stylesheet(scopeToken, useActualHostSelector, useNativeDirPseudoclass);
3812
+ if (process.env.NODE_ENV !== 'production') {
3813
+ linkStylesheetToCssContentInDevMode(stylesheet, cssContent);
3699
3814
  }
3815
+ ArrayPush$1.call(content, cssContent);
3700
3816
  }
3701
- return result;
3702
3817
  }
3703
- add(key, value) {
3704
- const weakRefs = this._getWeakRefs(key);
3705
- // We could check for duplicate values here, but it doesn't seem worth it.
3706
- // We transform the output into a Set anyway
3707
- ArrayPush$1.call(weakRefs, new WeakRef(value));
3708
- // It's important here not to leak the second argument, which is the "held value." The FinalizationRegistry
3709
- // effectively creates a strong reference between the first argument (the "target") and the held value. When
3710
- // the target is GC'ed, the callback is called, and then the held value is GC'ed.
3711
- // Putting the key here would mean the key is not GC'ed until the value is GC'ed, which defeats the purpose
3712
- // of the WeakMap. Whereas putting the weakRefs array here is fine, because it doesn't have a strong reference
3713
- // to anything. See also this example:
3714
- // https://gist.github.com/nolanlawson/79a3d36e8e6cc25c5048bb17c1795aea
3715
- this._registry.register(value, weakRefs);
3818
+ return content;
3819
+ }
3820
+ function getStylesheetsContent(vm, template) {
3821
+ const {
3822
+ stylesheets,
3823
+ stylesheetToken
3824
+ } = template;
3825
+ const {
3826
+ stylesheets: vmStylesheets
3827
+ } = vm;
3828
+ let content = [];
3829
+ if (hasStyles(stylesheets)) {
3830
+ content = evaluateStylesheetsContent(stylesheets, stylesheetToken, vm);
3716
3831
  }
3717
- delete(key) {
3718
- this._map.delete(key);
3832
+ // VM (component) stylesheets apply after template stylesheets
3833
+ if (hasStyles(vmStylesheets)) {
3834
+ ArrayPush$1.apply(content, evaluateStylesheetsContent(vmStylesheets, stylesheetToken, vm));
3719
3835
  }
3836
+ return content;
3720
3837
  }
3721
- const WeakMultiMap = supportsWeakRefs ? ModernWeakMultiMap : LegacyWeakMultiMap;
3722
-
3723
- /*
3724
- * Copyright (c) 2020, salesforce.com, inc.
3725
- * All rights reserved.
3726
- * SPDX-License-Identifier: MIT
3727
- * For full license text, see the LICENSE file in the repo root or https://opensource.org/licenses/MIT
3728
- */
3729
- const swappedTemplateMap = new WeakMap();
3730
- const swappedComponentMap = new WeakMap();
3731
- const swappedStyleMap = new WeakMap();
3732
- // The important thing here is the weak values – VMs are transient (one per component instance) and should be GC'ed,
3733
- // so we don't want to create strong references to them.
3734
- // The weak keys are kind of useless, because Templates, LightningElementConstructors, and StylesheetFactories are
3735
- // never GC'ed. But maybe they will be someday, so we may as well use weak keys too.
3736
- const activeTemplates = new WeakMultiMap();
3737
- const activeComponents = new WeakMultiMap();
3738
- const activeStyles = new WeakMultiMap();
3739
- function rehydrateHotTemplate(tpl) {
3740
- const list = activeTemplates.get(tpl);
3741
- for (const vm of list) {
3742
- if (isFalse(vm.isDirty)) {
3743
- // forcing the vm to rehydrate in the micro-task:
3744
- markComponentAsDirty(vm);
3745
- scheduleRehydration(vm);
3838
+ // It might be worth caching this to avoid doing the lookup repeatedly, but
3839
+ // perf testing has not shown it to be a huge improvement yet:
3840
+ // https://github.com/salesforce/lwc/pull/2460#discussion_r691208892
3841
+ function getNearestShadowComponent(vm) {
3842
+ let owner = vm;
3843
+ while (!isNull(owner)) {
3844
+ if (owner.renderMode === 1 /* RenderMode.Shadow */) {
3845
+ return owner;
3746
3846
  }
3847
+ owner = owner.owner;
3747
3848
  }
3748
- // Resetting the Set since these VMs are no longer related to this template, instead
3749
- // they will get re-associated once these instances are rehydrated.
3750
- activeTemplates.delete(tpl);
3751
- return true;
3849
+ return owner;
3752
3850
  }
3753
- function rehydrateHotStyle(style) {
3754
- const list = activeStyles.get(style);
3755
- for (const vm of list) {
3756
- // if a style definition is swapped, we must reset
3757
- // vm's template content in the next micro-task:
3758
- forceRehydration(vm);
3759
- }
3760
- // Resetting the Set since these VMs are no longer related to this style, instead
3851
+ /**
3852
+ * If the component that is currently being rendered uses scoped styles,
3853
+ * this returns the unique token for that scoped stylesheet. Otherwise
3854
+ * it returns null.
3855
+ * @param owner
3856
+ * @param legacy
3857
+ */
3858
+ // TODO [#3733]: remove support for legacy scope tokens
3859
+ function getScopeTokenClass(owner, legacy) {
3860
+ const {
3861
+ cmpTemplate,
3862
+ context
3863
+ } = owner;
3864
+ return context.hasScopedStyles && (legacy ? cmpTemplate?.legacyStylesheetToken : cmpTemplate?.stylesheetToken) || null;
3865
+ }
3866
+ /**
3867
+ * This function returns the host style token for a custom element if it
3868
+ * exists. Otherwise it returns null.
3869
+ *
3870
+ * A host style token is applied to the component if scoped styles are used.
3871
+ * @param vnode
3872
+ */
3873
+ function getStylesheetTokenHost(vnode) {
3874
+ const {
3875
+ template
3876
+ } = getComponentInternalDef(vnode.ctor);
3877
+ const {
3878
+ vm
3879
+ } = vnode;
3880
+ const {
3881
+ stylesheetToken
3882
+ } = template;
3883
+ return !isUndefined$1(stylesheetToken) && computeHasScopedStyles(template, vm) ? makeHostToken(stylesheetToken) : null;
3884
+ }
3885
+ function getNearestNativeShadowComponent(vm) {
3886
+ const owner = getNearestShadowComponent(vm);
3887
+ if (!isNull(owner) && owner.shadowMode === 1 /* ShadowMode.Synthetic */) {
3888
+ // Synthetic-within-native is impossible. So if the nearest shadow component is
3889
+ // synthetic, we know we won't find a native component if we go any further.
3890
+ return null;
3891
+ }
3892
+ return owner;
3893
+ }
3894
+ function createStylesheet(vm, stylesheets) {
3895
+ const {
3896
+ renderMode,
3897
+ shadowMode,
3898
+ renderer: {
3899
+ insertStylesheet
3900
+ }
3901
+ } = vm;
3902
+ if (renderMode === 1 /* RenderMode.Shadow */ && shadowMode === 1 /* ShadowMode.Synthetic */) {
3903
+ for (let i = 0; i < stylesheets.length; i++) {
3904
+ const stylesheet = stylesheets[i];
3905
+ insertStylesheet(stylesheet, undefined, getOrCreateAbortSignal(stylesheet));
3906
+ }
3907
+ } else if (vm.hydrated) {
3908
+ // Note: We need to ensure that during hydration, the stylesheets method is the same as those in ssr.
3909
+ // This works in the client, because the stylesheets are created, and cached in the VM
3910
+ // the first time the VM renders.
3911
+ // native shadow or light DOM, SSR
3912
+ return ArrayMap.call(stylesheets, createInlineStyleVNode);
3913
+ } else {
3914
+ // native shadow or light DOM, DOM renderer
3915
+ const root = getNearestNativeShadowComponent(vm);
3916
+ // null root means a global style
3917
+ const target = isNull(root) ? undefined : root.shadowRoot;
3918
+ for (let i = 0; i < stylesheets.length; i++) {
3919
+ const stylesheet = stylesheets[i];
3920
+ insertStylesheet(stylesheet, target, getOrCreateAbortSignal(stylesheet));
3921
+ }
3922
+ }
3923
+ return null;
3924
+ }
3925
+ function unrenderStylesheet(stylesheet) {
3926
+ // should never leak to prod; only used for HMR
3927
+ assertNotProd();
3928
+ const cssContents = stylesheetsToCssContent.get(stylesheet);
3929
+ /* istanbul ignore if */
3930
+ if (isUndefined$1(cssContents)) {
3931
+ throw new Error('Cannot unrender stylesheet which was never rendered');
3932
+ }
3933
+ for (const cssContent of cssContents) {
3934
+ const abortController = cssContentToAbortControllers.get(cssContent);
3935
+ /* istanbul ignore if */
3936
+ if (isUndefined$1(abortController)) {
3937
+ throw new Error('Cannot find AbortController for CSS content');
3938
+ }
3939
+ abortController.abort();
3940
+ // remove association with AbortController in case stylesheet is rendered again
3941
+ cssContentToAbortControllers.delete(cssContent);
3942
+ }
3943
+ }
3944
+
3945
+ /*
3946
+ * Copyright (c) 2023, salesforce.com, inc.
3947
+ * All rights reserved.
3948
+ * SPDX-License-Identifier: MIT
3949
+ * For full license text, see the LICENSE file in the repo root or https://opensource.org/licenses/MIT
3950
+ */
3951
+ const supportsWeakRefs = typeof WeakRef === 'function' && typeof FinalizationRegistry === 'function';
3952
+ // In browsers that doesn't support WeakRefs, the values will still leak, but at least the keys won't
3953
+ class LegacyWeakMultiMap {
3954
+ constructor() {
3955
+ this._map = new WeakMap();
3956
+ }
3957
+ _getValues(key) {
3958
+ let values = this._map.get(key);
3959
+ if (isUndefined$1(values)) {
3960
+ values = new Set();
3961
+ this._map.set(key, values);
3962
+ }
3963
+ return values;
3964
+ }
3965
+ get(key) {
3966
+ return this._getValues(key);
3967
+ }
3968
+ add(key, vm) {
3969
+ const set = this._getValues(key);
3970
+ set.add(vm);
3971
+ }
3972
+ delete(key) {
3973
+ this._map.delete(key);
3974
+ }
3975
+ }
3976
+ // This implementation relies on the WeakRef/FinalizationRegistry proposal.
3977
+ // For some background, see: https://github.com/tc39/proposal-weakrefs
3978
+ class ModernWeakMultiMap {
3979
+ constructor() {
3980
+ this._map = new WeakMap();
3981
+ this._registry = new FinalizationRegistry(weakRefs => {
3982
+ // This should be considered an optional cleanup method to remove GC'ed values from their respective arrays.
3983
+ // JS VMs are not obligated to call FinalizationRegistry callbacks.
3984
+ // Work backwards, removing stale VMs
3985
+ for (let i = weakRefs.length - 1; i >= 0; i--) {
3986
+ const vm = weakRefs[i].deref();
3987
+ if (isUndefined$1(vm)) {
3988
+ ArraySplice.call(weakRefs, i, 1); // remove
3989
+ }
3990
+ }
3991
+ });
3992
+ }
3993
+ _getWeakRefs(key) {
3994
+ let weakRefs = this._map.get(key);
3995
+ if (isUndefined$1(weakRefs)) {
3996
+ weakRefs = [];
3997
+ this._map.set(key, weakRefs);
3998
+ }
3999
+ return weakRefs;
4000
+ }
4001
+ get(key) {
4002
+ const weakRefs = this._getWeakRefs(key);
4003
+ const result = new Set();
4004
+ for (const weakRef of weakRefs) {
4005
+ const vm = weakRef.deref();
4006
+ if (!isUndefined$1(vm)) {
4007
+ result.add(vm);
4008
+ }
4009
+ }
4010
+ return result;
4011
+ }
4012
+ add(key, value) {
4013
+ const weakRefs = this._getWeakRefs(key);
4014
+ // We could check for duplicate values here, but it doesn't seem worth it.
4015
+ // We transform the output into a Set anyway
4016
+ ArrayPush$1.call(weakRefs, new WeakRef(value));
4017
+ // It's important here not to leak the second argument, which is the "held value." The FinalizationRegistry
4018
+ // effectively creates a strong reference between the first argument (the "target") and the held value. When
4019
+ // the target is GC'ed, the callback is called, and then the held value is GC'ed.
4020
+ // Putting the key here would mean the key is not GC'ed until the value is GC'ed, which defeats the purpose
4021
+ // of the WeakMap. Whereas putting the weakRefs array here is fine, because it doesn't have a strong reference
4022
+ // to anything. See also this example:
4023
+ // https://gist.github.com/nolanlawson/79a3d36e8e6cc25c5048bb17c1795aea
4024
+ this._registry.register(value, weakRefs);
4025
+ }
4026
+ delete(key) {
4027
+ this._map.delete(key);
4028
+ }
4029
+ }
4030
+ const WeakMultiMap = supportsWeakRefs ? ModernWeakMultiMap : LegacyWeakMultiMap;
4031
+
4032
+ /*
4033
+ * Copyright (c) 2020, salesforce.com, inc.
4034
+ * All rights reserved.
4035
+ * SPDX-License-Identifier: MIT
4036
+ * For full license text, see the LICENSE file in the repo root or https://opensource.org/licenses/MIT
4037
+ */
4038
+ let swappedTemplateMap = /*@__PURE__@*/new WeakMap();
4039
+ let swappedComponentMap = /*@__PURE__@*/new WeakMap();
4040
+ let swappedStyleMap = /*@__PURE__@*/new WeakMap();
4041
+ // The important thing here is the weak values – VMs are transient (one per component instance) and should be GC'ed,
4042
+ // so we don't want to create strong references to them.
4043
+ // The weak keys are kind of useless, because Templates, LightningElementConstructors, and StylesheetFactories are
4044
+ // never GC'ed. But maybe they will be someday, so we may as well use weak keys too.
4045
+ // The "pure" annotations are so that Rollup knows for sure it can remove these from prod mode
4046
+ let activeTemplates = /*@__PURE__@*/new WeakMultiMap();
4047
+ let activeComponents = /*@__PURE__@*/new WeakMultiMap();
4048
+ let activeStyles = /*@__PURE__@*/new WeakMultiMap();
4049
+ // Only used in LWC's Karma tests
4050
+ if (process.env.NODE_ENV === 'test-karma-lwc') {
4051
+ // Used to reset the global state between test runs
4052
+ window.__lwcResetHotSwaps = () => {
4053
+ swappedTemplateMap = new WeakMap();
4054
+ swappedComponentMap = new WeakMap();
4055
+ swappedStyleMap = new WeakMap();
4056
+ activeTemplates = new WeakMultiMap();
4057
+ activeComponents = new WeakMultiMap();
4058
+ activeStyles = new WeakMultiMap();
4059
+ };
4060
+ }
4061
+ function rehydrateHotTemplate(tpl) {
4062
+ const list = activeTemplates.get(tpl);
4063
+ for (const vm of list) {
4064
+ if (isFalse(vm.isDirty)) {
4065
+ // forcing the vm to rehydrate in the micro-task:
4066
+ markComponentAsDirty(vm);
4067
+ scheduleRehydration(vm);
4068
+ }
4069
+ }
4070
+ // Resetting the Set since these VMs are no longer related to this template, instead
4071
+ // they will get re-associated once these instances are rehydrated.
4072
+ activeTemplates.delete(tpl);
4073
+ return true;
4074
+ }
4075
+ function rehydrateHotStyle(style) {
4076
+ const activeVMs = activeStyles.get(style);
4077
+ unrenderStylesheet(style);
4078
+ for (const vm of activeVMs) {
4079
+ // if a style definition is swapped, we must reset
4080
+ // vm's template content in the next micro-task:
4081
+ forceRehydration(vm);
4082
+ }
4083
+ // Resetting the Set since these VMs are no longer related to this style, instead
3761
4084
  // they will get re-associated once these instances are rehydrated.
3762
4085
  activeStyles.delete(style);
3763
4086
  return true;
@@ -3790,6 +4113,7 @@ LWR.define('lwc/v/6_5_2', ['exports'], (function (exports) { 'use strict';
3790
4113
  }
3791
4114
  function getTemplateOrSwappedTemplate(tpl) {
3792
4115
  assertNotProd(); // this method should never leak to prod
4116
+ // TODO [#4154]: shows stale content when swapping content back and forth multiple times
3793
4117
  const visited = new Set();
3794
4118
  while (swappedTemplateMap.has(tpl) && !visited.has(tpl)) {
3795
4119
  visited.add(tpl);
@@ -3799,6 +4123,7 @@ LWR.define('lwc/v/6_5_2', ['exports'], (function (exports) { 'use strict';
3799
4123
  }
3800
4124
  function getComponentOrSwappedComponent(Ctor) {
3801
4125
  assertNotProd(); // this method should never leak to prod
4126
+ // TODO [#4154]: shows stale content when swapping content back and forth multiple times
3802
4127
  const visited = new Set();
3803
4128
  while (swappedComponentMap.has(Ctor) && !visited.has(Ctor)) {
3804
4129
  visited.add(Ctor);
@@ -3808,6 +4133,7 @@ LWR.define('lwc/v/6_5_2', ['exports'], (function (exports) { 'use strict';
3808
4133
  }
3809
4134
  function getStyleOrSwappedStyle(style) {
3810
4135
  assertNotProd(); // this method should never leak to prod
4136
+ // TODO [#4154]: shows stale content when swapping content back and forth multiple times
3811
4137
  const visited = new Set();
3812
4138
  while (swappedStyleMap.has(style) && !visited.has(style)) {
3813
4139
  visited.add(style);
@@ -3815,6 +4141,22 @@ LWR.define('lwc/v/6_5_2', ['exports'], (function (exports) { 'use strict';
3815
4141
  }
3816
4142
  return style;
3817
4143
  }
4144
+ function addActiveStylesheets(stylesheets, vm) {
4145
+ if (isUndefined$1(stylesheets) || isNull(stylesheets)) {
4146
+ // Ignore non-existent stylesheets
4147
+ return;
4148
+ }
4149
+ for (const stylesheet of flattenStylesheets(stylesheets)) {
4150
+ // this is necessary because we don't hold the list of styles
4151
+ // in the vm, we only hold the selected (already swapped template)
4152
+ // but the styles attached to the template might not be the actual
4153
+ // active ones, but the swapped versions of those.
4154
+ const swappedStylesheet = getStyleOrSwappedStyle(stylesheet);
4155
+ // this will allow us to keep track of the stylesheet that are
4156
+ // being used by a hot component
4157
+ activeStyles.add(swappedStylesheet, vm);
4158
+ }
4159
+ }
3818
4160
  function setActiveVM(vm) {
3819
4161
  assertNotProd(); // this method should never leak to prod
3820
4162
  // tracking active component
@@ -3822,25 +4164,15 @@ LWR.define('lwc/v/6_5_2', ['exports'], (function (exports) { 'use strict';
3822
4164
  // this will allow us to keep track of the hot components
3823
4165
  activeComponents.add(Ctor, vm);
3824
4166
  // tracking active template
3825
- const tpl = vm.cmpTemplate;
3826
- if (tpl) {
4167
+ const template = vm.cmpTemplate;
4168
+ if (!isNull(template)) {
3827
4169
  // this will allow us to keep track of the templates that are
3828
4170
  // being used by a hot component
3829
- activeTemplates.add(tpl, vm);
3830
- // tracking active styles associated to template
3831
- const stylesheets = tpl.stylesheets;
3832
- if (!isUndefined$1(stylesheets)) {
3833
- for (const stylesheet of flattenStylesheets(stylesheets)) {
3834
- // this is necessary because we don't hold the list of styles
3835
- // in the vm, we only hold the selected (already swapped template)
3836
- // but the styles attached to the template might not be the actual
3837
- // active ones, but the swapped versions of those.
3838
- const swappedStylesheet = getStyleOrSwappedStyle(stylesheet);
3839
- // this will allow us to keep track of the stylesheet that are
3840
- // being used by a hot component
3841
- activeStyles.add(swappedStylesheet, vm);
3842
- }
3843
- }
4171
+ activeTemplates.add(template, vm);
4172
+ // Tracking active styles from the template or the VM. `template.stylesheets` are implicitly associated
4173
+ // (e.g. `foo.css` associated with `foo.html`), whereas `vm.stylesheets` are from `static stylesheets`.
4174
+ addActiveStylesheets(template.stylesheets, vm);
4175
+ addActiveStylesheets(vm.stylesheets, vm);
3844
4176
  }
3845
4177
  }
3846
4178
  function swapTemplate(oldTpl, newTpl) {
@@ -3977,414 +4309,169 @@ LWR.define('lwc/v/6_5_2', ['exports'], (function (exports) { 'use strict';
3977
4309
  render = render || superDef.render;
3978
4310
  let shadowSupportMode = superDef.shadowSupportMode;
3979
4311
  if (!isUndefined$1(ctorShadowSupportMode)) {
3980
- shadowSupportMode = ctorShadowSupportMode;
3981
- if (isReportingEnabled() && (shadowSupportMode === "any" /* ShadowSupportMode.Any */ || shadowSupportMode === "native" /* ShadowSupportMode.Native */)) {
3982
- report("ShadowSupportModeUsage" /* ReportingEventId.ShadowSupportModeUsage */, {
3983
- tagName: Ctor.name,
3984
- mode: shadowSupportMode
3985
- });
3986
- }
3987
- }
3988
- let renderMode = superDef.renderMode;
3989
- if (!isUndefined$1(ctorRenderMode)) {
3990
- renderMode = ctorRenderMode === 'light' ? 0 /* RenderMode.Light */ : 1 /* RenderMode.Shadow */;
3991
- }
3992
- let formAssociated = superDef.formAssociated;
3993
- if (!isUndefined$1(ctorFormAssociated)) {
3994
- formAssociated = ctorFormAssociated;
3995
- }
3996
- const template = getComponentRegisteredTemplate(Ctor) || superDef.template;
3997
- const name = Ctor.name || superDef.name;
3998
- // installing observed fields into the prototype.
3999
- defineProperties(proto, observedFields);
4000
- const def = {
4001
- ctor: Ctor,
4002
- name,
4003
- wire,
4004
- props,
4005
- propsConfig,
4006
- methods,
4007
- bridge,
4008
- template,
4009
- renderMode,
4010
- shadowSupportMode,
4011
- formAssociated,
4012
- connectedCallback,
4013
- disconnectedCallback,
4014
- errorCallback,
4015
- formAssociatedCallback,
4016
- formDisabledCallback,
4017
- formResetCallback,
4018
- formStateRestoreCallback,
4019
- renderedCallback,
4020
- render
4021
- };
4022
- // This is a no-op unless Lightning DevTools are enabled.
4023
- instrumentDef(def);
4024
- if (process.env.NODE_ENV !== 'production') {
4025
- freeze(Ctor.prototype);
4026
- }
4027
- return def;
4028
- }
4029
- /**
4030
- * EXPERIMENTAL: This function allows for the identification of LWC constructors. This API is
4031
- * subject to change or being removed.
4032
- * @param ctor
4033
- */
4034
- function isComponentConstructor(ctor) {
4035
- if (!isFunction$1(ctor)) {
4036
- return false;
4037
- }
4038
- // Fast path: LightningElement is part of the prototype chain of the constructor.
4039
- if (ctor.prototype instanceof LightningElement) {
4040
- return true;
4041
- }
4042
- // Slow path: LightningElement is not part of the prototype chain of the constructor, we need
4043
- // climb up the constructor prototype chain to check in case there are circular dependencies
4044
- // to resolve.
4045
- let current = ctor;
4046
- do {
4047
- if (isCircularModuleDependency(current)) {
4048
- const circularResolved = resolveCircularModuleDependency(current);
4049
- // If the circular function returns itself, that's the signal that we have hit the end
4050
- // of the proto chain, which must always be a valid base constructor.
4051
- if (circularResolved === current) {
4052
- return true;
4053
- }
4054
- current = circularResolved;
4055
- }
4056
- if (current === LightningElement) {
4057
- return true;
4058
- }
4059
- } while (!isNull(current) && (current = getPrototypeOf$1(current)));
4060
- // Finally return false if the LightningElement is not part of the prototype chain.
4061
- return false;
4062
- }
4063
- function getComponentInternalDef(Ctor) {
4064
- if (process.env.NODE_ENV !== 'production') {
4065
- Ctor = getComponentOrSwappedComponent(Ctor);
4066
- }
4067
- let def = CtorToDefMap.get(Ctor);
4068
- if (isUndefined$1(def)) {
4069
- if (isCircularModuleDependency(Ctor)) {
4070
- const resolvedCtor = resolveCircularModuleDependency(Ctor);
4071
- def = getComponentInternalDef(resolvedCtor);
4072
- // Cache the unresolved component ctor too. The next time if the same unresolved ctor is used,
4073
- // look up the definition in cache instead of re-resolving and recreating the def.
4074
- CtorToDefMap.set(Ctor, def);
4075
- return def;
4076
- }
4077
- if (!isComponentConstructor(Ctor)) {
4078
- throw new TypeError(`${Ctor} is not a valid component, or does not extends LightningElement from "lwc". You probably forgot to add the extend clause on the class declaration.`);
4079
- }
4080
- def = createComponentDef(Ctor);
4081
- CtorToDefMap.set(Ctor, def);
4082
- }
4083
- return def;
4084
- }
4085
- function getComponentHtmlPrototype(Ctor) {
4086
- const def = getComponentInternalDef(Ctor);
4087
- return def.bridge;
4088
- }
4089
- const lightingElementDef = {
4090
- ctor: LightningElement,
4091
- name: LightningElement.name,
4092
- props: lightningBasedDescriptors,
4093
- propsConfig: EmptyObject,
4094
- methods: EmptyObject,
4095
- renderMode: 1 /* RenderMode.Shadow */,
4096
- shadowSupportMode: "reset" /* ShadowSupportMode.Default */,
4097
- formAssociated: undefined,
4098
- wire: EmptyObject,
4099
- bridge: BaseBridgeElement,
4100
- template: defaultEmptyTemplate,
4101
- render: LightningElement.prototype.render
4102
- };
4103
- /**
4104
- * EXPERIMENTAL: This function allows for the collection of internal component metadata. This API is
4105
- * subject to change or being removed.
4106
- * @param Ctor
4107
- */
4108
- function getComponentDef(Ctor) {
4109
- const def = getComponentInternalDef(Ctor);
4110
- // From the internal def object, we need to extract the info that is useful
4111
- // for some external services, e.g.: Locker Service, usually, all they care
4112
- // is about the shape of the constructor, the internals of it are not relevant
4113
- // because they don't have a way to mess with that.
4114
- const {
4115
- ctor,
4116
- name,
4117
- props,
4118
- propsConfig,
4119
- methods
4120
- } = def;
4121
- const publicProps = {};
4122
- for (const key in props) {
4123
- // avoid leaking the reference to the public props descriptors
4124
- publicProps[key] = {
4125
- config: propsConfig[key] || 0,
4126
- // a property by default
4127
- type: "any" /* PropDefType.any */,
4128
- // no type inference for public services
4129
- attr: htmlPropertyToAttribute(key)
4130
- };
4131
- }
4132
- const publicMethods = {};
4133
- for (const key in methods) {
4134
- // avoid leaking the reference to the public method descriptors
4135
- publicMethods[key] = methods[key].value;
4136
- }
4137
- return {
4138
- ctor,
4139
- name,
4140
- props: publicProps,
4141
- methods: publicMethods
4142
- };
4143
- }
4144
-
4145
- /*
4146
- * Copyright (c) 2018, salesforce.com, inc.
4147
- * All rights reserved.
4148
- * SPDX-License-Identifier: MIT
4149
- * For full license text, see the LICENSE file in the repo root or https://opensource.org/licenses/MIT
4150
- */
4151
- function makeHostToken(token) {
4152
- // Note: if this ever changes, update the `cssScopeTokens` returned by `@lwc/compiler`
4153
- return `${token}-host`;
4154
- }
4155
- function createInlineStyleVNode(content) {
4156
- return api.h('style', {
4157
- key: 'style',
4158
- // special key
4159
- attrs: {
4160
- type: 'text/css'
4161
- }
4162
- }, [api.t(content)]);
4163
- }
4164
- // TODO [#3733]: remove support for legacy scope tokens
4165
- function updateStylesheetToken(vm, template, legacy) {
4166
- const {
4167
- elm,
4168
- context,
4169
- renderMode,
4170
- shadowMode,
4171
- renderer: {
4172
- getClassList,
4173
- removeAttribute,
4174
- setAttribute
4175
- }
4176
- } = vm;
4177
- const {
4178
- stylesheets: newStylesheets
4179
- } = template;
4180
- const newStylesheetToken = legacy ? template.legacyStylesheetToken : template.stylesheetToken;
4181
- const {
4182
- stylesheets: newVmStylesheets
4183
- } = vm;
4184
- const isSyntheticShadow = renderMode === 1 /* RenderMode.Shadow */ && shadowMode === 1 /* ShadowMode.Synthetic */;
4185
- const {
4186
- hasScopedStyles
4187
- } = context;
4188
- let newToken;
4189
- let newHasTokenInClass;
4190
- let newHasTokenInAttribute;
4191
- // Reset the styling token applied to the host element.
4192
- let oldToken;
4193
- let oldHasTokenInClass;
4194
- let oldHasTokenInAttribute;
4195
- if (legacy) {
4196
- oldToken = context.legacyStylesheetToken;
4197
- oldHasTokenInClass = context.hasLegacyTokenInClass;
4198
- oldHasTokenInAttribute = context.hasLegacyTokenInAttribute;
4199
- } else {
4200
- oldToken = context.stylesheetToken;
4201
- oldHasTokenInClass = context.hasTokenInClass;
4202
- oldHasTokenInAttribute = context.hasTokenInAttribute;
4203
- }
4204
- if (!isUndefined$1(oldToken)) {
4205
- if (oldHasTokenInClass) {
4206
- getClassList(elm).remove(makeHostToken(oldToken));
4207
- }
4208
- if (oldHasTokenInAttribute) {
4209
- removeAttribute(elm, makeHostToken(oldToken));
4210
- }
4211
- }
4212
- // Apply the new template styling token to the host element, if the new template has any
4213
- // associated stylesheets. In the case of light DOM, also ensure there is at least one scoped stylesheet.
4214
- const hasNewStylesheets = hasStyles(newStylesheets);
4215
- const hasNewVmStylesheets = hasStyles(newVmStylesheets);
4216
- if (hasNewStylesheets || hasNewVmStylesheets) {
4217
- newToken = newStylesheetToken;
4218
- }
4219
- // Set the new styling token on the host element
4220
- if (!isUndefined$1(newToken)) {
4221
- if (hasScopedStyles) {
4222
- getClassList(elm).add(makeHostToken(newToken));
4223
- newHasTokenInClass = true;
4224
- }
4225
- if (isSyntheticShadow) {
4226
- setAttribute(elm, makeHostToken(newToken), '');
4227
- newHasTokenInAttribute = true;
4228
- }
4229
- }
4230
- // Update the styling tokens present on the context object.
4231
- if (legacy) {
4232
- context.legacyStylesheetToken = newToken;
4233
- context.hasLegacyTokenInClass = newHasTokenInClass;
4234
- context.hasLegacyTokenInAttribute = newHasTokenInAttribute;
4235
- } else {
4236
- context.stylesheetToken = newToken;
4237
- context.hasTokenInClass = newHasTokenInClass;
4238
- context.hasTokenInAttribute = newHasTokenInAttribute;
4239
- }
4240
- }
4241
- function evaluateStylesheetsContent(stylesheets, stylesheetToken, vm) {
4242
- const content = [];
4243
- let root;
4244
- for (let i = 0; i < stylesheets.length; i++) {
4245
- let stylesheet = stylesheets[i];
4246
- if (isArray$1(stylesheet)) {
4247
- ArrayPush$1.apply(content, evaluateStylesheetsContent(stylesheet, stylesheetToken, vm));
4248
- } else {
4249
- if (process.env.NODE_ENV !== 'production') {
4250
- // Check for compiler version mismatch in dev mode only
4251
- checkVersionMismatch(stylesheet, 'stylesheet');
4252
- // in dev-mode, we support hot swapping of stylesheet, which means that
4253
- // the component instance might be attempting to use an old version of
4254
- // the stylesheet, while internally, we have a replacement for it.
4255
- stylesheet = getStyleOrSwappedStyle(stylesheet);
4256
- }
4257
- const isScopedCss = stylesheet[KEY__SCOPED_CSS];
4258
- if (lwcRuntimeFlags.DISABLE_LIGHT_DOM_UNSCOPED_CSS && !isScopedCss && vm.renderMode === 0 /* RenderMode.Light */) {
4259
- logError('Unscoped CSS is not supported in Light DOM in this environment. Please use scoped CSS ' + '(*.scoped.css) instead of unscoped CSS (*.css). See also: https://sfdc.co/scoped-styles-light-dom');
4260
- continue;
4261
- }
4262
- // Apply the scope token only if the stylesheet itself is scoped, or if we're rendering synthetic shadow.
4263
- const scopeToken = isScopedCss || vm.shadowMode === 1 /* ShadowMode.Synthetic */ && vm.renderMode === 1 /* RenderMode.Shadow */ ? stylesheetToken : undefined;
4264
- // Use the actual `:host` selector if we're rendering global CSS for light DOM, or if we're rendering
4265
- // native shadow DOM. Synthetic shadow DOM never uses `:host`.
4266
- const useActualHostSelector = vm.renderMode === 0 /* RenderMode.Light */ ? !isScopedCss : vm.shadowMode === 0 /* ShadowMode.Native */;
4267
- // Use the native :dir() pseudoclass only in native shadow DOM. Otherwise, in synthetic shadow,
4268
- // we use an attribute selector on the host to simulate :dir().
4269
- let useNativeDirPseudoclass;
4270
- if (vm.renderMode === 1 /* RenderMode.Shadow */) {
4271
- useNativeDirPseudoclass = vm.shadowMode === 0 /* ShadowMode.Native */;
4272
- } else {
4273
- // Light DOM components should only render `[dir]` if they're inside of a synthetic shadow root.
4274
- // At the top level (root is null) or inside of a native shadow root, they should use `:dir()`.
4275
- if (isUndefined$1(root)) {
4276
- // Only calculate the root once as necessary
4277
- root = getNearestShadowComponent(vm);
4278
- }
4279
- useNativeDirPseudoclass = isNull(root) || root.shadowMode === 0 /* ShadowMode.Native */;
4280
- }
4281
- ArrayPush$1.call(content, stylesheet(scopeToken, useActualHostSelector, useNativeDirPseudoclass));
4312
+ shadowSupportMode = ctorShadowSupportMode;
4313
+ if (isReportingEnabled() && (shadowSupportMode === "any" /* ShadowSupportMode.Any */ || shadowSupportMode === "native" /* ShadowSupportMode.Native */)) {
4314
+ report("ShadowSupportModeUsage" /* ReportingEventId.ShadowSupportModeUsage */, {
4315
+ tagName: Ctor.name,
4316
+ mode: shadowSupportMode
4317
+ });
4282
4318
  }
4283
4319
  }
4284
- return content;
4320
+ let renderMode = superDef.renderMode;
4321
+ if (!isUndefined$1(ctorRenderMode)) {
4322
+ renderMode = ctorRenderMode === 'light' ? 0 /* RenderMode.Light */ : 1 /* RenderMode.Shadow */;
4323
+ }
4324
+ let formAssociated = superDef.formAssociated;
4325
+ if (!isUndefined$1(ctorFormAssociated)) {
4326
+ formAssociated = ctorFormAssociated;
4327
+ }
4328
+ const template = getComponentRegisteredTemplate(Ctor) || superDef.template;
4329
+ const name = Ctor.name || superDef.name;
4330
+ // installing observed fields into the prototype.
4331
+ defineProperties(proto, observedFields);
4332
+ const def = {
4333
+ ctor: Ctor,
4334
+ name,
4335
+ wire,
4336
+ props,
4337
+ propsConfig,
4338
+ methods,
4339
+ bridge,
4340
+ template,
4341
+ renderMode,
4342
+ shadowSupportMode,
4343
+ formAssociated,
4344
+ connectedCallback,
4345
+ disconnectedCallback,
4346
+ errorCallback,
4347
+ formAssociatedCallback,
4348
+ formDisabledCallback,
4349
+ formResetCallback,
4350
+ formStateRestoreCallback,
4351
+ renderedCallback,
4352
+ render
4353
+ };
4354
+ // This is a no-op unless Lightning DevTools are enabled.
4355
+ instrumentDef(def);
4356
+ if (process.env.NODE_ENV !== 'production') {
4357
+ freeze(Ctor.prototype);
4358
+ }
4359
+ return def;
4285
4360
  }
4286
- function getStylesheetsContent(vm, template) {
4287
- const {
4288
- stylesheets,
4289
- stylesheetToken
4290
- } = template;
4291
- const {
4292
- stylesheets: vmStylesheets
4293
- } = vm;
4294
- let content = [];
4295
- if (hasStyles(stylesheets)) {
4296
- content = evaluateStylesheetsContent(stylesheets, stylesheetToken, vm);
4361
+ /**
4362
+ * EXPERIMENTAL: This function allows for the identification of LWC constructors. This API is
4363
+ * subject to change or being removed.
4364
+ * @param ctor
4365
+ */
4366
+ function isComponentConstructor(ctor) {
4367
+ if (!isFunction$1(ctor)) {
4368
+ return false;
4297
4369
  }
4298
- // VM (component) stylesheets apply after template stylesheets
4299
- if (hasStyles(vmStylesheets)) {
4300
- ArrayPush$1.apply(content, evaluateStylesheetsContent(vmStylesheets, stylesheetToken, vm));
4370
+ // Fast path: LightningElement is part of the prototype chain of the constructor.
4371
+ if (ctor.prototype instanceof LightningElement) {
4372
+ return true;
4301
4373
  }
4302
- return content;
4374
+ // Slow path: LightningElement is not part of the prototype chain of the constructor, we need
4375
+ // climb up the constructor prototype chain to check in case there are circular dependencies
4376
+ // to resolve.
4377
+ let current = ctor;
4378
+ do {
4379
+ if (isCircularModuleDependency(current)) {
4380
+ const circularResolved = resolveCircularModuleDependency(current);
4381
+ // If the circular function returns itself, that's the signal that we have hit the end
4382
+ // of the proto chain, which must always be a valid base constructor.
4383
+ if (circularResolved === current) {
4384
+ return true;
4385
+ }
4386
+ current = circularResolved;
4387
+ }
4388
+ if (current === LightningElement) {
4389
+ return true;
4390
+ }
4391
+ } while (!isNull(current) && (current = getPrototypeOf$1(current)));
4392
+ // Finally return false if the LightningElement is not part of the prototype chain.
4393
+ return false;
4303
4394
  }
4304
- // It might be worth caching this to avoid doing the lookup repeatedly, but
4305
- // perf testing has not shown it to be a huge improvement yet:
4306
- // https://github.com/salesforce/lwc/pull/2460#discussion_r691208892
4307
- function getNearestShadowComponent(vm) {
4308
- let owner = vm;
4309
- while (!isNull(owner)) {
4310
- if (owner.renderMode === 1 /* RenderMode.Shadow */) {
4311
- return owner;
4395
+ function getComponentInternalDef(Ctor) {
4396
+ if (process.env.NODE_ENV !== 'production') {
4397
+ Ctor = getComponentOrSwappedComponent(Ctor);
4398
+ }
4399
+ let def = CtorToDefMap.get(Ctor);
4400
+ if (isUndefined$1(def)) {
4401
+ if (isCircularModuleDependency(Ctor)) {
4402
+ const resolvedCtor = resolveCircularModuleDependency(Ctor);
4403
+ def = getComponentInternalDef(resolvedCtor);
4404
+ // Cache the unresolved component ctor too. The next time if the same unresolved ctor is used,
4405
+ // look up the definition in cache instead of re-resolving and recreating the def.
4406
+ CtorToDefMap.set(Ctor, def);
4407
+ return def;
4312
4408
  }
4313
- owner = owner.owner;
4409
+ if (!isComponentConstructor(Ctor)) {
4410
+ throw new TypeError(`${Ctor} is not a valid component, or does not extends LightningElement from "lwc". You probably forgot to add the extend clause on the class declaration.`);
4411
+ }
4412
+ def = createComponentDef(Ctor);
4413
+ CtorToDefMap.set(Ctor, def);
4314
4414
  }
4315
- return owner;
4415
+ return def;
4316
4416
  }
4317
- /**
4318
- * If the component that is currently being rendered uses scoped styles,
4319
- * this returns the unique token for that scoped stylesheet. Otherwise
4320
- * it returns null.
4321
- * @param owner
4322
- * @param legacy
4323
- */
4324
- // TODO [#3733]: remove support for legacy scope tokens
4325
- function getScopeTokenClass(owner, legacy) {
4326
- const {
4327
- cmpTemplate,
4328
- context
4329
- } = owner;
4330
- return context.hasScopedStyles && (legacy ? cmpTemplate?.legacyStylesheetToken : cmpTemplate?.stylesheetToken) || null;
4417
+ function getComponentHtmlPrototype(Ctor) {
4418
+ const def = getComponentInternalDef(Ctor);
4419
+ return def.bridge;
4331
4420
  }
4421
+ const lightingElementDef = {
4422
+ ctor: LightningElement,
4423
+ name: LightningElement.name,
4424
+ props: lightningBasedDescriptors,
4425
+ propsConfig: EmptyObject,
4426
+ methods: EmptyObject,
4427
+ renderMode: 1 /* RenderMode.Shadow */,
4428
+ shadowSupportMode: "reset" /* ShadowSupportMode.Default */,
4429
+ formAssociated: undefined,
4430
+ wire: EmptyObject,
4431
+ bridge: BaseBridgeElement,
4432
+ template: defaultEmptyTemplate,
4433
+ render: LightningElement.prototype.render
4434
+ };
4332
4435
  /**
4333
- * This function returns the host style token for a custom element if it
4334
- * exists. Otherwise it returns null.
4335
- *
4336
- * A host style token is applied to the component if scoped styles are used.
4337
- * @param vnode
4436
+ * EXPERIMENTAL: This function allows for the collection of internal component metadata. This API is
4437
+ * subject to change or being removed.
4438
+ * @param Ctor
4338
4439
  */
4339
- function getStylesheetTokenHost(vnode) {
4340
- const {
4341
- template
4342
- } = getComponentInternalDef(vnode.ctor);
4343
- const {
4344
- vm
4345
- } = vnode;
4440
+ function getComponentDef(Ctor) {
4441
+ const def = getComponentInternalDef(Ctor);
4442
+ // From the internal def object, we need to extract the info that is useful
4443
+ // for some external services, e.g.: Locker Service, usually, all they care
4444
+ // is about the shape of the constructor, the internals of it are not relevant
4445
+ // because they don't have a way to mess with that.
4346
4446
  const {
4347
- stylesheetToken
4348
- } = template;
4349
- return !isUndefined$1(stylesheetToken) && computeHasScopedStyles(template, vm) ? makeHostToken(stylesheetToken) : null;
4350
- }
4351
- function getNearestNativeShadowComponent(vm) {
4352
- const owner = getNearestShadowComponent(vm);
4353
- if (!isNull(owner) && owner.shadowMode === 1 /* ShadowMode.Synthetic */) {
4354
- // Synthetic-within-native is impossible. So if the nearest shadow component is
4355
- // synthetic, we know we won't find a native component if we go any further.
4356
- return null;
4447
+ ctor,
4448
+ name,
4449
+ props,
4450
+ propsConfig,
4451
+ methods
4452
+ } = def;
4453
+ const publicProps = {};
4454
+ for (const key in props) {
4455
+ // avoid leaking the reference to the public props descriptors
4456
+ publicProps[key] = {
4457
+ config: propsConfig[key] || 0,
4458
+ // a property by default
4459
+ type: "any" /* PropDefType.any */,
4460
+ // no type inference for public services
4461
+ attr: htmlPropertyToAttribute(key)
4462
+ };
4357
4463
  }
4358
- return owner;
4359
- }
4360
- function createStylesheet(vm, stylesheets) {
4361
- const {
4362
- renderMode,
4363
- shadowMode,
4364
- renderer: {
4365
- insertStylesheet
4366
- }
4367
- } = vm;
4368
- if (renderMode === 1 /* RenderMode.Shadow */ && shadowMode === 1 /* ShadowMode.Synthetic */) {
4369
- for (let i = 0; i < stylesheets.length; i++) {
4370
- insertStylesheet(stylesheets[i]);
4371
- }
4372
- } else if (vm.hydrated) {
4373
- // Note: We need to ensure that during hydration, the stylesheets method is the same as those in ssr.
4374
- // This works in the client, because the stylesheets are created, and cached in the VM
4375
- // the first time the VM renders.
4376
- // native shadow or light DOM, SSR
4377
- return ArrayMap.call(stylesheets, createInlineStyleVNode);
4378
- } else {
4379
- // native shadow or light DOM, DOM renderer
4380
- const root = getNearestNativeShadowComponent(vm);
4381
- // null root means a global style
4382
- const target = isNull(root) ? undefined : root.shadowRoot;
4383
- for (let i = 0; i < stylesheets.length; i++) {
4384
- insertStylesheet(stylesheets[i], target);
4385
- }
4464
+ const publicMethods = {};
4465
+ for (const key in methods) {
4466
+ // avoid leaking the reference to the public method descriptors
4467
+ publicMethods[key] = methods[key].value;
4386
4468
  }
4387
- return null;
4469
+ return {
4470
+ ctor,
4471
+ name,
4472
+ props: publicProps,
4473
+ methods: publicMethods
4474
+ };
4388
4475
  }
4389
4476
 
4390
4477
  /*
@@ -4810,7 +4897,7 @@ LWR.define('lwc/v/6_5_2', ['exports'], (function (exports) { 'use strict';
4810
4897
  }
4811
4898
 
4812
4899
  /*
4813
- * Copyright (c) 2023, salesforce.com, inc.
4900
+ * Copyright (c) 2024, Salesforce, Inc.
4814
4901
  * All rights reserved.
4815
4902
  * SPDX-License-Identifier: MIT
4816
4903
  * For full license text, see the LICENSE file in the repo root or https://opensource.org/licenses/MIT
@@ -4836,34 +4923,59 @@ LWR.define('lwc/v/6_5_2', ['exports'], (function (exports) { 'use strict';
4836
4923
  for (const staticPart of parts) {
4837
4924
  partIdsToParts.set(staticPart.partId, staticPart);
4838
4925
  }
4839
- let numFoundParts = 0;
4926
+ // Note that we traverse using `*Child`/`*Sibling` rather than `children` because the browser uses a linked
4927
+ // list under the hood to represent the DOM tree, so it's faster to do this than to create an underlying array
4928
+ // by calling `children`.
4840
4929
  const {
4841
- previousSibling,
4842
- getLastChild
4930
+ nextSibling,
4931
+ getFirstChild,
4932
+ getParentNode
4843
4933
  } = renderer;
4844
- const stack = [root];
4934
+ let numFoundParts = 0;
4845
4935
  let partId = -1;
4936
+ // We should never traverse up to the root. We should exit early due to numFoundParts === numParts.
4937
+ // This is just a sanity check, in case the static parts generated by @lwc/template-compiler are wrong.
4938
+ function assertNotRoot(node) {
4939
+ if (process.env.NODE_ENV !== 'production') {
4940
+ assert.isFalse(node === root, `Reached the root without finding all parts. Found ${numFoundParts}, needed ${numParts}.`);
4941
+ }
4942
+ }
4846
4943
  // Depth-first traversal. We assign a partId to each element, which is an integer based on traversal order.
4847
- while (stack.length > 0) {
4848
- const elm = ArrayShift.call(stack);
4944
+ // This function is very hot, which is why it's micro-optimized. Note we don't use a stack at all; we traverse
4945
+ // using an algorithm that relies on the parentNode getter: https://stackoverflow.com/a/5285417
4946
+ // This is very slightly faster than a TreeWalker (~0.5% on js-framework-benchmark create-10k), but basically
4947
+ // the same idea.
4948
+ let node = root;
4949
+ while (!isNull(node)) {
4950
+ // visit node
4849
4951
  partId++;
4850
4952
  const part = partIdsToParts.get(partId);
4851
4953
  if (!isUndefined$1(part)) {
4852
- part.elm = elm;
4853
- if (++numFoundParts === numParts) {
4954
+ part.elm = node;
4955
+ numFoundParts++;
4956
+ if (numFoundParts === numParts) {
4854
4957
  return; // perf optimization - stop traversing once we've found everything we need
4855
4958
  }
4856
4959
  }
4857
- // For depth-first traversal, prepend to the stack in reverse order
4858
- // Note that we traverse using `*Child`/`*Sibling` rather than `children` because the browser uses a linked
4859
- // list under the hood to represent the DOM tree, so it's faster to do this than to create an underlying array
4860
- // by calling `children`.
4861
- let child = getLastChild(elm);
4862
- while (!isNull(child)) {
4863
- ArrayUnshift.call(stack, child);
4864
- child = previousSibling(child);
4960
+ const child = getFirstChild(node);
4961
+ if (!isNull(child)) {
4962
+ // walk down
4963
+ node = child;
4964
+ } else {
4965
+ let sibling;
4966
+ while (isNull(sibling = nextSibling(node))) {
4967
+ // we never want to walk up from the root
4968
+ assertNotRoot(node);
4969
+ // walk up
4970
+ node = getParentNode(node);
4971
+ }
4972
+ // we never want to walk right from the root
4973
+ assertNotRoot(node);
4974
+ // walk right
4975
+ node = sibling;
4865
4976
  }
4866
4977
  }
4978
+ /* istanbul ignore next */
4867
4979
  if (process.env.NODE_ENV !== 'production') {
4868
4980
  assert.isTrue(numFoundParts === numParts, `Should have found all parts by now. Found ${numFoundParts}, needed ${numParts}.`);
4869
4981
  }
@@ -8726,7 +8838,7 @@ LWR.define('lwc/v/6_5_2', ['exports'], (function (exports) { 'use strict';
8726
8838
  }
8727
8839
  return getReadOnlyProxy(obj);
8728
8840
  }
8729
- /** version: 6.5.2 */
8841
+ /** version: 6.6.3 */
8730
8842
 
8731
8843
  /*
8732
8844
  * Copyright (c) 2018, salesforce.com, inc.
@@ -8856,7 +8968,7 @@ LWR.define('lwc/v/6_5_2', ['exports'], (function (exports) { 'use strict';
8856
8968
  stylesheet.replaceSync(content);
8857
8969
  return stylesheet;
8858
8970
  }
8859
- function insertConstructableStylesheet(content, target, cacheData) {
8971
+ function insertConstructableStylesheet(content, target, cacheData, signal) {
8860
8972
  const {
8861
8973
  adoptedStyleSheets
8862
8974
  } = target;
@@ -8865,10 +8977,32 @@ LWR.define('lwc/v/6_5_2', ['exports'], (function (exports) { 'use strict';
8865
8977
  } = cacheData;
8866
8978
  // The reason we prefer .push() rather than reassignment is for perf: https://github.com/salesforce/lwc/pull/2683
8867
8979
  adoptedStyleSheets.push(stylesheet);
8980
+ if (process.env.NODE_ENV !== 'production') {
8981
+ /* istanbul ignore if */
8982
+ if (isUndefined$1(signal)) {
8983
+ throw new Error('Expected AbortSignal to be defined in dev mode');
8984
+ }
8985
+ // TODO [#4155]: unrendering should account for stylesheet content collisions
8986
+ signal.addEventListener('abort', () => {
8987
+ adoptedStyleSheets.splice(adoptedStyleSheets.indexOf(stylesheet), 1);
8988
+ stylesheetCache.delete(content);
8989
+ });
8990
+ }
8868
8991
  }
8869
- function insertStyleElement(content, target, cacheData) {
8992
+ function insertStyleElement(content, target, cacheData, signal) {
8870
8993
  const elm = createStyleElement(content, cacheData);
8871
8994
  target.appendChild(elm);
8995
+ if (process.env.NODE_ENV !== 'production') {
8996
+ /* istanbul ignore if */
8997
+ if (isUndefined$1(signal)) {
8998
+ throw new Error('Expected AbortSignal to be defined in dev mode');
8999
+ }
9000
+ // TODO [#4155]: unrendering should account for stylesheet content collisions
9001
+ signal.addEventListener('abort', () => {
9002
+ target.removeChild(elm);
9003
+ stylesheetCache.delete(content);
9004
+ });
9005
+ }
8872
9006
  }
8873
9007
  function getCacheData(content, useConstructableStylesheet) {
8874
9008
  let cacheData = stylesheetCache.get(content);
@@ -8890,7 +9024,7 @@ LWR.define('lwc/v/6_5_2', ['exports'], (function (exports) { 'use strict';
8890
9024
  }
8891
9025
  return cacheData;
8892
9026
  }
8893
- function insertGlobalStylesheet(content) {
9027
+ function insertGlobalStylesheet(content, signal) {
8894
9028
  // Force a <style> element for global stylesheets. See comment below.
8895
9029
  const cacheData = getCacheData(content, false);
8896
9030
  if (cacheData.global) {
@@ -8899,9 +9033,9 @@ LWR.define('lwc/v/6_5_2', ['exports'], (function (exports) { 'use strict';
8899
9033
  }
8900
9034
  cacheData.global = true; // mark inserted
8901
9035
  // TODO [#2922]: use document.adoptedStyleSheets in supported browsers. Currently we can't, due to backwards compat.
8902
- insertStyleElement(content, document.head, cacheData);
9036
+ insertStyleElement(content, document.head, cacheData, signal);
8903
9037
  }
8904
- function insertLocalStylesheet(content, target) {
9038
+ function insertLocalStylesheet(content, target, signal) {
8905
9039
  const cacheData = getCacheData(content, supportsConstructableStylesheets);
8906
9040
  let {
8907
9041
  roots
@@ -8917,19 +9051,25 @@ LWR.define('lwc/v/6_5_2', ['exports'], (function (exports) { 'use strict';
8917
9051
  // https://caniuse.com/mdn-api_document_adoptedstylesheets
8918
9052
  // The reason we use it is for perf: https://github.com/salesforce/lwc/pull/2460
8919
9053
  if (supportsConstructableStylesheets) {
8920
- insertConstructableStylesheet(content, target, cacheData);
9054
+ insertConstructableStylesheet(content, target, cacheData, signal);
8921
9055
  } else {
8922
9056
  // Fall back to <style> element
8923
- insertStyleElement(content, target, cacheData);
9057
+ insertStyleElement(content, target, cacheData, signal);
8924
9058
  }
8925
9059
  }
8926
- function insertStylesheet(content, target) {
9060
+ /**
9061
+ * Injects a stylesheet into the global (document) level or inside a shadow root.
9062
+ * @param content CSS content to insert
9063
+ * @param target ShadowRoot to insert into, or undefined if global (document) level
9064
+ * @param signal AbortSignal for aborting the stylesheet render. Used in dev mode for HMR to unrender stylesheets.
9065
+ */
9066
+ function insertStylesheet(content, target, signal) {
8927
9067
  if (isUndefined$1(target)) {
8928
9068
  // global
8929
- insertGlobalStylesheet(content);
9069
+ insertGlobalStylesheet(content, signal);
8930
9070
  } else {
8931
9071
  // local
8932
- insertLocalStylesheet(content, target);
9072
+ insertLocalStylesheet(content, target, signal);
8933
9073
  }
8934
9074
  }
8935
9075
 
@@ -8998,7 +9138,7 @@ LWR.define('lwc/v/6_5_2', ['exports'], (function (exports) { 'use strict';
8998
9138
  runFormStateRestoreCallback(this, state, reason);
8999
9139
  }
9000
9140
  }
9001
- /*LWC compiler v6.5.2*/
9141
+ /*LWC compiler v6.6.3*/
9002
9142
  };
9003
9143
  BaseHTMLElement = HTMLElement; // cache to track if it changes
9004
9144
  }
@@ -9013,7 +9153,7 @@ LWR.define('lwc/v/6_5_2', ['exports'], (function (exports) { 'use strict';
9013
9153
  // Using a BaseUpgradableConstructor superclass here is a perf optimization to avoid
9014
9154
  // re-defining the same logic (connectedCallback, disconnectedCallback, etc.) over and over.
9015
9155
  class UpgradableConstructor extends BaseUpgradableConstructor {
9016
- /*LWC compiler v6.5.2*/
9156
+ /*LWC compiler v6.6.3*/
9017
9157
  }
9018
9158
  if (isFormAssociated) {
9019
9159
  // Perf optimization - the vast majority of components have formAssociated=false,
@@ -9136,7 +9276,7 @@ LWR.define('lwc/v/6_5_2', ['exports'], (function (exports) { 'use strict';
9136
9276
  function isNull(obj) {
9137
9277
  return obj === null;
9138
9278
  }
9139
- /** version: 6.5.2 */
9279
+ /** version: 6.6.3 */
9140
9280
 
9141
9281
  /*
9142
9282
  * Copyright (c) 2023, salesforce.com, inc.
@@ -9156,7 +9296,7 @@ LWR.define('lwc/v/6_5_2', ['exports'], (function (exports) { 'use strict';
9156
9296
  this.setNewContext = setNewContext;
9157
9297
  this.setDisconnectedCallback = setDisconnectedCallback;
9158
9298
  }
9159
- /*LWC compiler v6.5.2*/
9299
+ /*LWC compiler v6.6.3*/
9160
9300
  }
9161
9301
  function registerContextConsumer(elm, adapterContextToken, subscriptionPayload) {
9162
9302
  dispatchEvent(elm, new WireContextSubscriptionEvent(adapterContextToken, subscriptionPayload));
@@ -9211,6 +9351,9 @@ LWR.define('lwc/v/6_5_2', ['exports'], (function (exports) { 'use strict';
9211
9351
  function previousSibling(node) {
9212
9352
  return node.previousSibling;
9213
9353
  }
9354
+ function getParentNode(node) {
9355
+ return node.parentNode;
9356
+ }
9214
9357
  function attachShadow(element, options) {
9215
9358
  // `shadowRoot` will be non-null in two cases:
9216
9359
  // 1. upon initial load with an SSR-generated DOM, while in Shadow render mode
@@ -9335,6 +9478,7 @@ LWR.define('lwc/v/6_5_2', ['exports'], (function (exports) { 'use strict';
9335
9478
  exports.getFirstElementChild = getFirstElementChild;
9336
9479
  exports.getLastChild = getLastChild;
9337
9480
  exports.getLastElementChild = getLastElementChild;
9481
+ exports.getParentNode = getParentNode;
9338
9482
  exports.getProperty = getProperty;
9339
9483
  exports.getTagName = getTagName;
9340
9484
  exports.insert = insert;
@@ -9566,7 +9710,7 @@ LWR.define('lwc/v/6_5_2', ['exports'], (function (exports) { 'use strict';
9566
9710
  formStateRestoreCallback(state, reason) {
9567
9711
  runFormStateRestoreCallback(this, state, reason);
9568
9712
  }
9569
- /*LWC compiler v6.5.2*/
9713
+ /*LWC compiler v6.6.3*/
9570
9714
  }, _a.observedAttributes = observedAttributes,
9571
9715
  // Note CustomElementConstructor is not upgraded by LWC and inherits directly from HTMLElement which means it calls the native
9572
9716
  // attachInternals API.
@@ -9630,9 +9774,6 @@ LWR.define('lwc/v/6_5_2', ['exports'], (function (exports) { 'use strict';
9630
9774
  }
9631
9775
  });
9632
9776
  }
9633
- // For some reason, JSDOC says "options.is" is a syntax error. And we can't disable the rule using
9634
- // `eslint-disable-next-line` because that gets included in the JSDOC, so we need this workaround.
9635
- /* eslint-disable jsdoc/valid-types */
9636
9777
  /**
9637
9778
  * EXPERIMENTAL: This function is almost identical to document.createElement with the slightly
9638
9779
  * difference that in the options, you can pass the `is` property set to a Constructor instead of
@@ -9647,8 +9788,7 @@ LWR.define('lwc/v/6_5_2', ['exports'], (function (exports) { 'use strict';
9647
9788
  * @example
9648
9789
  * const el = createElement('x-foo', { is: FooCtor });
9649
9790
  */
9650
- function createElement( /* eslint-enable jsdoc/valid-types */
9651
- sel, options) {
9791
+ function createElement(sel, options) {
9652
9792
  if (!isObject(options) || isNull(options)) {
9653
9793
  throw new TypeError(`"createElement" function expects an object as second parameter but received "${toString$1(options)}".`);
9654
9794
  }
@@ -9799,7 +9939,7 @@ LWR.define('lwc/v/6_5_2', ['exports'], (function (exports) { 'use strict';
9799
9939
  });
9800
9940
  });
9801
9941
  }
9802
- /** version: 6.5.2 */
9942
+ /** version: 6.6.3 */
9803
9943
 
9804
9944
  exports.LightningElement = LightningElement;
9805
9945
  exports.__unstable__ProfilerControl = profilerControl;