@stencil/core 5.0.0-beta.1 → 5.0.0-beta.10

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.
@@ -1797,7 +1797,8 @@ interface StencilConfig {
1797
1797
  * Will generate {@link https://nodejs.org/api/packages.html#packages_exports export map} entry points
1798
1798
  * for each component in the build when `true`.
1799
1799
  *
1800
- * @default false
1800
+ * Defaults to `true` for "no-config" projects (no `stencil.config.ts`/`.js` file), and `false`
1801
+ * whenever a config file is present - set this explicitly to opt an existing project in or out.
1801
1802
  */
1802
1803
  generateExportMaps?: boolean;
1803
1804
  /**
@@ -1,4 +1,4 @@
1
- import { Gn as FunctionalComponent, Qn as VNode, Wn as ErrorHandler, Xn as TagTransformer, Yn as ResolutionHandler, Zn as UserBuildConditionals, a as HostElement, l as PropsType, qn as RafCallback, t as ChildType, u as RuntimeRef } from "./index-BopBfjPu.mjs";
1
+ import { Gn as FunctionalComponent, Qn as VNode, Wn as ErrorHandler, Xn as TagTransformer, Yn as ResolutionHandler, Zn as UserBuildConditionals, a as HostElement, l as PropsType, qn as RafCallback, t as ChildType, u as RuntimeRef } from "./index-BvF31nqP.mjs";
2
2
  //#region src/client/client-build.d.ts
3
3
  declare const Build: UserBuildConditionals;
4
4
  //#endregion
@@ -1784,7 +1784,8 @@ interface StencilConfig {
1784
1784
  * Will generate {@link https://nodejs.org/api/packages.html#packages_exports export map} entry points
1785
1785
  * for each component in the build when `true`.
1786
1786
  *
1787
- * @default false
1787
+ * Defaults to `true` for "no-config" projects (no `stencil.config.ts`/`.js` file), and `false`
1788
+ * whenever a config file is present - set this explicitly to opt an existing project in or out.
1788
1789
  */
1789
1790
  generateExportMaps?: boolean;
1790
1791
  /**
package/dist/index.mjs CHANGED
@@ -1,4 +1,4 @@
1
- import { C as setErrorHandler, _ as getAssetPath, a as transformTag, b as writeTask, c as Mixin, d as Host, f as h, g as getShadowRoot, h as getElement, i as setTagTransformer, l as getMode, m as getRenderingRef, o as render, p as forceUpdate, s as ReactiveControllerHost, u as setMode, v as setAssetPath, w as Build, x as setPlatformHelpers, y as readTask } from "./client-BRu0GtRn.mjs";
1
+ import { C as setErrorHandler, _ as getAssetPath, a as transformTag, b as writeTask, c as Mixin, d as Host, f as h, g as getShadowRoot, h as getElement, i as setTagTransformer, l as getMode, m as getRenderingRef, o as render, p as forceUpdate, s as ReactiveControllerHost, u as setMode, v as setAssetPath, w as Build, x as setPlatformHelpers, y as readTask } from "./client-Db2rdxUM.mjs";
2
2
  import { t as Fragment } from "./fragment-Di1hWOC8.mjs";
3
3
  //#region src/client/client-decorators.ts
4
4
  /**
@@ -1,3 +1,3 @@
1
- import { n as jsxDEV, r as jsxs, t as jsx } from "./client-BRu0GtRn.mjs";
1
+ import { n as jsxDEV, r as jsxs, t as jsx } from "./client-Db2rdxUM.mjs";
2
2
  import { t as Fragment } from "./fragment-Di1hWOC8.mjs";
3
3
  export { Fragment, jsx, jsxDEV, jsxs };
@@ -1,5 +1,5 @@
1
1
  import { n as __require } from "./rolldown-runtime-BhDjJH2R.mjs";
2
- import "./client-BRu0GtRn.mjs";
2
+ import "./client-Db2rdxUM.mjs";
3
3
  import { c as isFunction, f as isString, m as noop, r as flatOne } from "./helpers-Cpp3qc3u.mjs";
4
4
  import { $ as catchError, K as normalizePath, X as buildError, Y as TASK_CANCELED_MSG, nt as shouldIgnoreError, rt as isGlob } from "./util-IKfWWLJo.mjs";
5
5
  import fs from "node:fs";
@@ -1983,16 +1983,33 @@ const signalNodeDisposers = /* @__PURE__ */ new WeakMap();
1983
1983
  const disposeSignalVNode = (vnode) => {
1984
1984
  const elm = vnode.$elm$;
1985
1985
  if (elm) {
1986
- const dispose = signalNodeDisposers.get(elm);
1987
- if (dispose) {
1988
- dispose();
1989
- signalNodeDisposers.delete(elm);
1990
- }
1986
+ disposeTextSignal(elm);
1991
1987
  disposeAllSignalAttrs(elm);
1992
1988
  }
1993
1989
  vnode.$children$?.forEach(disposeSignalVNode);
1994
1990
  };
1995
1991
  /**
1992
+ * Tear down a text node's signal subscription, if it has one.
1993
+ * @param textNode the text node to unsubscribe
1994
+ */
1995
+ const disposeTextSignal = (textNode) => {
1996
+ const dispose = signalNodeDisposers.get(textNode);
1997
+ if (dispose) {
1998
+ dispose();
1999
+ signalNodeDisposers.delete(textNode);
2000
+ }
2001
+ };
2002
+ /**
2003
+ * Subscribe a text node to a signal, keeping its `data` in sync on every change.
2004
+ * @param textNode the text node to keep in sync
2005
+ * @param textSig the signal to subscribe to
2006
+ */
2007
+ const wireTextSignal = (textNode, textSig) => {
2008
+ signalNodeDisposers.set(textNode, effect$1(() => {
2009
+ textNode.data = String(textSig.value);
2010
+ }));
2011
+ };
2012
+ /**
1996
2013
  * Create a DOM Node corresponding to one of the children of a given VNode.
1997
2014
  *
1998
2015
  * @param oldParentVNode the parent VNode from the previous render
@@ -2014,13 +2031,7 @@ const createElm = (oldParentVNode, newParentVNode, childIndex) => {
2014
2031
  if (BUILD.isDev && newVNode.$elm$) consoleDevError(`The JSX ${newVNode.$text$ !== null ? `"${newVNode.$text$}" text` : `"${String(newVNode.$tag$)}" element`} node should not be shared within the same renderer. The renderer caches element lookups in order to improve performance. However, a side effect from this is that the exact same JSX node should not be reused. For more information please see https://stenciljs.com/docs/templating-jsx#avoid-shared-jsx-nodes`);
2015
2032
  if (BUILD.vdomText && newVNode.$text$ != null) {
2016
2033
  elm = newVNode.$elm$ = win.document.createTextNode(newVNode.$text$);
2017
- if (BUILD.vdomSignals && newVNode.$signal$) {
2018
- const textSig = newVNode.$signal$;
2019
- const textNode = elm;
2020
- signalNodeDisposers.set(textNode, effect$1(() => {
2021
- textNode.data = String(textSig.value);
2022
- }));
2023
- }
2034
+ if (BUILD.vdomSignals && newVNode.$signal$) wireTextSignal(elm, newVNode.$signal$);
2024
2035
  } else if (BUILD.slotRelocation && newVNode.$flags$ & VNODE_FLAGS.isSlotReference) {
2025
2036
  elm = newVNode.$elm$ = BUILD.isDebug || BUILD.hydrateServerSide ? slotReferenceDebugNode(newVNode) : win.document.createTextNode("");
2026
2037
  if (typeof newVNode.$attrs$?.slot === "string") elm["s-sa"] = newVNode.$attrs$.slot;
@@ -2381,7 +2392,17 @@ const patch = (oldVNode, newVNode, isInitialRender = false) => {
2381
2392
  else if (BUILD.hydrateClientSide && isInitialRender && BUILD.updatable && oldChildren !== null && newChildren === null) newVNode.$children$ = oldChildren;
2382
2393
  if (BUILD.svg && isSvgMode && tag === "svg") isSvgMode = false;
2383
2394
  } else if (BUILD.vdomText && BUILD.slotRelocation && (defaultHolder = elm["s-cr"])) defaultHolder.parentNode.textContent = text;
2384
- else if (BUILD.vdomText && oldVNode.$text$ !== text) elm.data = text;
2395
+ else if (BUILD.vdomText) {
2396
+ if (BUILD.vdomSignals && newVNode.$signal$) {
2397
+ if (newVNode.$signal$ !== oldVNode.$signal$) {
2398
+ disposeTextSignal(elm);
2399
+ wireTextSignal(elm, newVNode.$signal$);
2400
+ }
2401
+ } else {
2402
+ if (BUILD.vdomSignals && oldVNode.$signal$) disposeTextSignal(elm);
2403
+ if (oldVNode.$text$ !== text) elm.data = text;
2404
+ }
2405
+ }
2385
2406
  };
2386
2407
  /**
2387
2408
  * Component-global information about nodes which are either currently being
@@ -3988,12 +4009,13 @@ const scopeSelector = (selector, scopeSelectorText, hostSelector, slotSelector)
3988
4009
  else return shallowPart.trim();
3989
4010
  }).join(", ");
3990
4011
  };
4012
+ const isScopableAtRule = (selector) => selector.startsWith("@media") || selector.startsWith("@supports") || selector.startsWith("@page") || selector.startsWith("@document") || selector.startsWith("@layer");
3991
4013
  const scopeSelectors = (cssText, scopeSelectorText, hostSelector, slotSelector, commentOriginalSelector) => {
3992
4014
  return processRules(cssText, (rule) => {
3993
4015
  let selector = rule.selector;
3994
4016
  let content = rule.content;
3995
4017
  if (rule.selector[0] !== "@") selector = scopeSelector(rule.selector, scopeSelectorText, hostSelector, slotSelector);
3996
- else if (rule.selector.startsWith("@media") || rule.selector.startsWith("@supports") || rule.selector.startsWith("@page") || rule.selector.startsWith("@document")) content = scopeSelectors(rule.content, scopeSelectorText, hostSelector, slotSelector, commentOriginalSelector);
4018
+ else if (isScopableAtRule(rule.selector)) content = scopeSelectors(rule.content, scopeSelectorText, hostSelector, slotSelector, commentOriginalSelector);
3997
4019
  return {
3998
4020
  selector: selector.replace(/\s{2,}/g, " ").trim(),
3999
4021
  content
@@ -4085,14 +4107,12 @@ const scopeCss = (cssText, scopeId, commentOriginalSelector) => {
4085
4107
  rule.selector = placeholder + rule.selector;
4086
4108
  return rule;
4087
4109
  };
4088
- cssText = processRules(cssText, (rule) => {
4110
+ const commentSelectors = (input) => processRules(input, (rule) => {
4089
4111
  if (rule.selector[0] !== "@") return processCommentedSelector(rule);
4090
- else if (rule.selector.startsWith("@media") || rule.selector.startsWith("@supports") || rule.selector.startsWith("@page") || rule.selector.startsWith("@document")) {
4091
- rule.content = processRules(rule.content, processCommentedSelector);
4092
- return rule;
4093
- }
4112
+ if (isScopableAtRule(rule.selector)) rule.content = commentSelectors(rule.content);
4094
4113
  return rule;
4095
4114
  });
4115
+ cssText = commentSelectors(cssText);
4096
4116
  }
4097
4117
  const scoped = scopeCssText(cssText, scopeId, hostScopeId, slotScopeId, commentOriginalSelector);
4098
4118
  cssText = [scoped.cssText, ...commentsWithHash].join("\n");
@@ -1977,16 +1977,33 @@ const signalNodeDisposers = /* @__PURE__ */ new WeakMap();
1977
1977
  const disposeSignalVNode = (vnode) => {
1978
1978
  const elm = vnode.$elm$;
1979
1979
  if (elm) {
1980
- const dispose = signalNodeDisposers.get(elm);
1981
- if (dispose) {
1982
- dispose();
1983
- signalNodeDisposers.delete(elm);
1984
- }
1980
+ disposeTextSignal(elm);
1985
1981
  disposeAllSignalAttrs(elm);
1986
1982
  }
1987
1983
  vnode.$children$?.forEach(disposeSignalVNode);
1988
1984
  };
1989
1985
  /**
1986
+ * Tear down a text node's signal subscription, if it has one.
1987
+ * @param textNode the text node to unsubscribe
1988
+ */
1989
+ const disposeTextSignal = (textNode) => {
1990
+ const dispose = signalNodeDisposers.get(textNode);
1991
+ if (dispose) {
1992
+ dispose();
1993
+ signalNodeDisposers.delete(textNode);
1994
+ }
1995
+ };
1996
+ /**
1997
+ * Subscribe a text node to a signal, keeping its `data` in sync on every change.
1998
+ * @param textNode the text node to keep in sync
1999
+ * @param textSig the signal to subscribe to
2000
+ */
2001
+ const wireTextSignal = (textNode, textSig) => {
2002
+ signalNodeDisposers.set(textNode, effect$1(() => {
2003
+ textNode.data = String(textSig.value);
2004
+ }));
2005
+ };
2006
+ /**
1990
2007
  * Create a DOM Node corresponding to one of the children of a given VNode.
1991
2008
  *
1992
2009
  * @param oldParentVNode the parent VNode from the previous render
@@ -2008,13 +2025,7 @@ const createElm = (oldParentVNode, newParentVNode, childIndex) => {
2008
2025
  if (BUILD$1.isDev && newVNode.$elm$) consoleDevError(`The JSX ${newVNode.$text$ !== null ? `"${newVNode.$text$}" text` : `"${String(newVNode.$tag$)}" element`} node should not be shared within the same renderer. The renderer caches element lookups in order to improve performance. However, a side effect from this is that the exact same JSX node should not be reused. For more information please see https://stenciljs.com/docs/templating-jsx#avoid-shared-jsx-nodes`);
2009
2026
  if (BUILD$1.vdomText && newVNode.$text$ != null) {
2010
2027
  elm = newVNode.$elm$ = win.document.createTextNode(newVNode.$text$);
2011
- if (BUILD$1.vdomSignals && newVNode.$signal$) {
2012
- const textSig = newVNode.$signal$;
2013
- const textNode = elm;
2014
- signalNodeDisposers.set(textNode, effect$1(() => {
2015
- textNode.data = String(textSig.value);
2016
- }));
2017
- }
2028
+ if (BUILD$1.vdomSignals && newVNode.$signal$) wireTextSignal(elm, newVNode.$signal$);
2018
2029
  } else if (BUILD$1.slotRelocation && newVNode.$flags$ & VNODE_FLAGS.isSlotReference) {
2019
2030
  elm = newVNode.$elm$ = BUILD$1.isDebug || BUILD$1.hydrateServerSide ? slotReferenceDebugNode(newVNode) : win.document.createTextNode("");
2020
2031
  if (typeof newVNode.$attrs$?.slot === "string") elm["s-sa"] = newVNode.$attrs$.slot;
@@ -2375,7 +2386,17 @@ const patch = (oldVNode, newVNode, isInitialRender = false) => {
2375
2386
  else if (BUILD$1.hydrateClientSide && isInitialRender && BUILD$1.updatable && oldChildren !== null && newChildren === null) newVNode.$children$ = oldChildren;
2376
2387
  if (BUILD$1.svg && isSvgMode && tag === "svg") isSvgMode = false;
2377
2388
  } else if (BUILD$1.vdomText && BUILD$1.slotRelocation && (defaultHolder = elm["s-cr"])) defaultHolder.parentNode.textContent = text;
2378
- else if (BUILD$1.vdomText && oldVNode.$text$ !== text) elm.data = text;
2389
+ else if (BUILD$1.vdomText) {
2390
+ if (BUILD$1.vdomSignals && newVNode.$signal$) {
2391
+ if (newVNode.$signal$ !== oldVNode.$signal$) {
2392
+ disposeTextSignal(elm);
2393
+ wireTextSignal(elm, newVNode.$signal$);
2394
+ }
2395
+ } else {
2396
+ if (BUILD$1.vdomSignals && oldVNode.$signal$) disposeTextSignal(elm);
2397
+ if (oldVNode.$text$ !== text) elm.data = text;
2398
+ }
2399
+ }
2379
2400
  };
2380
2401
  /**
2381
2402
  * Component-global information about nodes which are either currently being
@@ -3982,12 +4003,13 @@ const scopeSelector = (selector, scopeSelectorText, hostSelector, slotSelector)
3982
4003
  else return shallowPart.trim();
3983
4004
  }).join(", ");
3984
4005
  };
4006
+ const isScopableAtRule = (selector) => selector.startsWith("@media") || selector.startsWith("@supports") || selector.startsWith("@page") || selector.startsWith("@document") || selector.startsWith("@layer");
3985
4007
  const scopeSelectors = (cssText, scopeSelectorText, hostSelector, slotSelector, commentOriginalSelector) => {
3986
4008
  return processRules(cssText, (rule) => {
3987
4009
  let selector = rule.selector;
3988
4010
  let content = rule.content;
3989
4011
  if (rule.selector[0] !== "@") selector = scopeSelector(rule.selector, scopeSelectorText, hostSelector, slotSelector);
3990
- else if (rule.selector.startsWith("@media") || rule.selector.startsWith("@supports") || rule.selector.startsWith("@page") || rule.selector.startsWith("@document")) content = scopeSelectors(rule.content, scopeSelectorText, hostSelector, slotSelector, commentOriginalSelector);
4012
+ else if (isScopableAtRule(rule.selector)) content = scopeSelectors(rule.content, scopeSelectorText, hostSelector, slotSelector, commentOriginalSelector);
3991
4013
  return {
3992
4014
  selector: selector.replace(/\s{2,}/g, " ").trim(),
3993
4015
  content
@@ -4079,14 +4101,12 @@ const scopeCss = (cssText, scopeId, commentOriginalSelector) => {
4079
4101
  rule.selector = placeholder + rule.selector;
4080
4102
  return rule;
4081
4103
  };
4082
- cssText = processRules(cssText, (rule) => {
4104
+ const commentSelectors = (input) => processRules(input, (rule) => {
4083
4105
  if (rule.selector[0] !== "@") return processCommentedSelector(rule);
4084
- else if (rule.selector.startsWith("@media") || rule.selector.startsWith("@supports") || rule.selector.startsWith("@page") || rule.selector.startsWith("@document")) {
4085
- rule.content = processRules(rule.content, processCommentedSelector);
4086
- return rule;
4087
- }
4106
+ if (isScopableAtRule(rule.selector)) rule.content = commentSelectors(rule.content);
4088
4107
  return rule;
4089
4108
  });
4109
+ cssText = commentSelectors(cssText);
4090
4110
  }
4091
4111
  const scoped = scopeCssText(cssText, scopeId, hostScopeId, slotScopeId, commentOriginalSelector);
4092
4112
  cssText = [scoped.cssText, ...commentsWithHash].join("\n");
@@ -1849,16 +1849,33 @@ const signalNodeDisposers = /* @__PURE__ */ new WeakMap();
1849
1849
  const disposeSignalVNode = (vnode) => {
1850
1850
  const elm = vnode.$elm$;
1851
1851
  if (elm) {
1852
- const dispose = signalNodeDisposers.get(elm);
1853
- if (dispose) {
1854
- dispose();
1855
- signalNodeDisposers.delete(elm);
1856
- }
1852
+ disposeTextSignal(elm);
1857
1853
  disposeAllSignalAttrs(elm);
1858
1854
  }
1859
1855
  vnode.$children$?.forEach(disposeSignalVNode);
1860
1856
  };
1861
1857
  /**
1858
+ * Tear down a text node's signal subscription, if it has one.
1859
+ * @param textNode the text node to unsubscribe
1860
+ */
1861
+ const disposeTextSignal = (textNode) => {
1862
+ const dispose = signalNodeDisposers.get(textNode);
1863
+ if (dispose) {
1864
+ dispose();
1865
+ signalNodeDisposers.delete(textNode);
1866
+ }
1867
+ };
1868
+ /**
1869
+ * Subscribe a text node to a signal, keeping its `data` in sync on every change.
1870
+ * @param textNode the text node to keep in sync
1871
+ * @param textSig the signal to subscribe to
1872
+ */
1873
+ const wireTextSignal = (textNode, textSig) => {
1874
+ signalNodeDisposers.set(textNode, effect$1(() => {
1875
+ textNode.data = String(textSig.value);
1876
+ }));
1877
+ };
1878
+ /**
1862
1879
  * Create a DOM Node corresponding to one of the children of a given VNode.
1863
1880
  *
1864
1881
  * @param oldParentVNode the parent VNode from the previous render
@@ -1880,13 +1897,7 @@ const createElm = (oldParentVNode, newParentVNode, childIndex) => {
1880
1897
  if (BUILD.isDev && newVNode.$elm$) consoleDevError(`The JSX ${newVNode.$text$ !== null ? `"${newVNode.$text$}" text` : `"${String(newVNode.$tag$)}" element`} node should not be shared within the same renderer. The renderer caches element lookups in order to improve performance. However, a side effect from this is that the exact same JSX node should not be reused. For more information please see https://stenciljs.com/docs/templating-jsx#avoid-shared-jsx-nodes`);
1881
1898
  if (BUILD.vdomText && newVNode.$text$ != null) {
1882
1899
  elm = newVNode.$elm$ = win.document.createTextNode(newVNode.$text$);
1883
- if (BUILD.vdomSignals && newVNode.$signal$) {
1884
- const textSig = newVNode.$signal$;
1885
- const textNode = elm;
1886
- signalNodeDisposers.set(textNode, effect$1(() => {
1887
- textNode.data = String(textSig.value);
1888
- }));
1889
- }
1900
+ if (BUILD.vdomSignals && newVNode.$signal$) wireTextSignal(elm, newVNode.$signal$);
1890
1901
  } else if (BUILD.slotRelocation && newVNode.$flags$ & VNODE_FLAGS.isSlotReference) {
1891
1902
  elm = newVNode.$elm$ = BUILD.isDebug || BUILD.hydrateServerSide ? slotReferenceDebugNode(newVNode) : win.document.createTextNode("");
1892
1903
  if (typeof newVNode.$attrs$?.slot === "string") elm["s-sa"] = newVNode.$attrs$.slot;
@@ -2247,7 +2258,17 @@ const patch = (oldVNode, newVNode, isInitialRender = false) => {
2247
2258
  else if (BUILD.hydrateClientSide && isInitialRender && BUILD.updatable && oldChildren !== null && newChildren === null) newVNode.$children$ = oldChildren;
2248
2259
  if (BUILD.svg && isSvgMode && tag === "svg") isSvgMode = false;
2249
2260
  } else if (BUILD.vdomText && BUILD.slotRelocation && (defaultHolder = elm["s-cr"])) defaultHolder.parentNode.textContent = text;
2250
- else if (BUILD.vdomText && oldVNode.$text$ !== text) elm.data = text;
2261
+ else if (BUILD.vdomText) {
2262
+ if (BUILD.vdomSignals && newVNode.$signal$) {
2263
+ if (newVNode.$signal$ !== oldVNode.$signal$) {
2264
+ disposeTextSignal(elm);
2265
+ wireTextSignal(elm, newVNode.$signal$);
2266
+ }
2267
+ } else {
2268
+ if (BUILD.vdomSignals && oldVNode.$signal$) disposeTextSignal(elm);
2269
+ if (oldVNode.$text$ !== text) elm.data = text;
2270
+ }
2271
+ }
2251
2272
  };
2252
2273
  /**
2253
2274
  * Component-global information about nodes which are either currently being
@@ -3854,12 +3875,13 @@ const scopeSelector = (selector, scopeSelectorText, hostSelector, slotSelector)
3854
3875
  else return shallowPart.trim();
3855
3876
  }).join(", ");
3856
3877
  };
3878
+ const isScopableAtRule = (selector) => selector.startsWith("@media") || selector.startsWith("@supports") || selector.startsWith("@page") || selector.startsWith("@document") || selector.startsWith("@layer");
3857
3879
  const scopeSelectors = (cssText, scopeSelectorText, hostSelector, slotSelector, commentOriginalSelector) => {
3858
3880
  return processRules(cssText, (rule) => {
3859
3881
  let selector = rule.selector;
3860
3882
  let content = rule.content;
3861
3883
  if (rule.selector[0] !== "@") selector = scopeSelector(rule.selector, scopeSelectorText, hostSelector, slotSelector);
3862
- else if (rule.selector.startsWith("@media") || rule.selector.startsWith("@supports") || rule.selector.startsWith("@page") || rule.selector.startsWith("@document")) content = scopeSelectors(rule.content, scopeSelectorText, hostSelector, slotSelector, commentOriginalSelector);
3884
+ else if (isScopableAtRule(rule.selector)) content = scopeSelectors(rule.content, scopeSelectorText, hostSelector, slotSelector, commentOriginalSelector);
3863
3885
  return {
3864
3886
  selector: selector.replace(/\s{2,}/g, " ").trim(),
3865
3887
  content
@@ -3951,14 +3973,12 @@ const scopeCss = (cssText, scopeId, commentOriginalSelector) => {
3951
3973
  rule.selector = placeholder + rule.selector;
3952
3974
  return rule;
3953
3975
  };
3954
- cssText = processRules(cssText, (rule) => {
3976
+ const commentSelectors = (input) => processRules(input, (rule) => {
3955
3977
  if (rule.selector[0] !== "@") return processCommentedSelector(rule);
3956
- else if (rule.selector.startsWith("@media") || rule.selector.startsWith("@supports") || rule.selector.startsWith("@page") || rule.selector.startsWith("@document")) {
3957
- rule.content = processRules(rule.content, processCommentedSelector);
3958
- return rule;
3959
- }
3978
+ if (isScopableAtRule(rule.selector)) rule.content = commentSelectors(rule.content);
3960
3979
  return rule;
3961
3980
  });
3981
+ cssText = commentSelectors(cssText);
3962
3982
  }
3963
3983
  const scoped = scopeCssText(cssText, scopeId, hostScopeId, slotScopeId, commentOriginalSelector);
3964
3984
  cssText = [scoped.cssText, ...commentsWithHash].join("\n");
@@ -1597,16 +1597,33 @@ const signalNodeDisposers = /* @__PURE__ */ new WeakMap();
1597
1597
  const disposeSignalVNode = (vnode) => {
1598
1598
  const elm = vnode.$elm$;
1599
1599
  if (elm) {
1600
- const dispose = signalNodeDisposers.get(elm);
1601
- if (dispose) {
1602
- dispose();
1603
- signalNodeDisposers.delete(elm);
1604
- }
1600
+ disposeTextSignal(elm);
1605
1601
  disposeAllSignalAttrs(elm);
1606
1602
  }
1607
1603
  vnode.$children$?.forEach(disposeSignalVNode);
1608
1604
  };
1609
1605
  /**
1606
+ * Tear down a text node's signal subscription, if it has one.
1607
+ * @param textNode the text node to unsubscribe
1608
+ */
1609
+ const disposeTextSignal = (textNode) => {
1610
+ const dispose = signalNodeDisposers.get(textNode);
1611
+ if (dispose) {
1612
+ dispose();
1613
+ signalNodeDisposers.delete(textNode);
1614
+ }
1615
+ };
1616
+ /**
1617
+ * Subscribe a text node to a signal, keeping its `data` in sync on every change.
1618
+ * @param textNode the text node to keep in sync
1619
+ * @param textSig the signal to subscribe to
1620
+ */
1621
+ const wireTextSignal = (textNode, textSig) => {
1622
+ signalNodeDisposers.set(textNode, effect$1(() => {
1623
+ textNode.data = String(textSig.value);
1624
+ }));
1625
+ };
1626
+ /**
1610
1627
  * Create a DOM Node corresponding to one of the children of a given VNode.
1611
1628
  *
1612
1629
  * @param oldParentVNode the parent VNode from the previous render
@@ -1628,13 +1645,7 @@ const createElm = (oldParentVNode, newParentVNode, childIndex) => {
1628
1645
  if (BUILD$1.isDev && newVNode.$elm$) newVNode.$text$ !== null ? `${newVNode.$text$}` : `${String(newVNode.$tag$)}`;
1629
1646
  if (BUILD$1.vdomText && newVNode.$text$ != null) {
1630
1647
  elm = newVNode.$elm$ = win.document.createTextNode(newVNode.$text$);
1631
- if (BUILD$1.vdomSignals && newVNode.$signal$) {
1632
- const textSig = newVNode.$signal$;
1633
- const textNode = elm;
1634
- signalNodeDisposers.set(textNode, effect$1(() => {
1635
- textNode.data = String(textSig.value);
1636
- }));
1637
- }
1648
+ if (BUILD$1.vdomSignals && newVNode.$signal$) wireTextSignal(elm, newVNode.$signal$);
1638
1649
  } else if (BUILD$1.slotRelocation && newVNode.$flags$ & VNODE_FLAGS.isSlotReference) {
1639
1650
  elm = newVNode.$elm$ = BUILD$1.isDebug || BUILD$1.hydrateServerSide ? slotReferenceDebugNode(newVNode) : win.document.createTextNode("");
1640
1651
  if (typeof newVNode.$attrs$?.slot === "string") elm["s-sa"] = newVNode.$attrs$.slot;
@@ -1995,7 +2006,17 @@ const patch = (oldVNode, newVNode, isInitialRender = false) => {
1995
2006
  else if (BUILD$1.hydrateClientSide && isInitialRender && BUILD$1.updatable && oldChildren !== null && newChildren === null) newVNode.$children$ = oldChildren;
1996
2007
  if (BUILD$1.svg && isSvgMode && tag === "svg") isSvgMode = false;
1997
2008
  } else if (BUILD$1.vdomText && BUILD$1.slotRelocation && (defaultHolder = elm["s-cr"])) defaultHolder.parentNode.textContent = text;
1998
- else if (BUILD$1.vdomText && oldVNode.$text$ !== text) elm.data = text;
2009
+ else if (BUILD$1.vdomText) {
2010
+ if (BUILD$1.vdomSignals && newVNode.$signal$) {
2011
+ if (newVNode.$signal$ !== oldVNode.$signal$) {
2012
+ disposeTextSignal(elm);
2013
+ wireTextSignal(elm, newVNode.$signal$);
2014
+ }
2015
+ } else {
2016
+ if (BUILD$1.vdomSignals && oldVNode.$signal$) disposeTextSignal(elm);
2017
+ if (oldVNode.$text$ !== text) elm.data = text;
2018
+ }
2019
+ }
1999
2020
  };
2000
2021
  /**
2001
2022
  * Component-global information about nodes which are either currently being
@@ -3598,12 +3619,13 @@ const scopeSelector = (selector, scopeSelectorText, hostSelector, slotSelector)
3598
3619
  else return shallowPart.trim();
3599
3620
  }).join(", ");
3600
3621
  };
3622
+ const isScopableAtRule = (selector) => selector.startsWith("@media") || selector.startsWith("@supports") || selector.startsWith("@page") || selector.startsWith("@document") || selector.startsWith("@layer");
3601
3623
  const scopeSelectors = (cssText, scopeSelectorText, hostSelector, slotSelector, commentOriginalSelector) => {
3602
3624
  return processRules(cssText, (rule) => {
3603
3625
  let selector = rule.selector;
3604
3626
  let content = rule.content;
3605
3627
  if (rule.selector[0] !== "@") selector = scopeSelector(rule.selector, scopeSelectorText, hostSelector, slotSelector);
3606
- else if (rule.selector.startsWith("@media") || rule.selector.startsWith("@supports") || rule.selector.startsWith("@page") || rule.selector.startsWith("@document")) content = scopeSelectors(rule.content, scopeSelectorText, hostSelector, slotSelector, commentOriginalSelector);
3628
+ else if (isScopableAtRule(rule.selector)) content = scopeSelectors(rule.content, scopeSelectorText, hostSelector, slotSelector, commentOriginalSelector);
3607
3629
  return {
3608
3630
  selector: selector.replace(/\s{2,}/g, " ").trim(),
3609
3631
  content
@@ -3695,14 +3717,12 @@ const scopeCss = (cssText, scopeId, commentOriginalSelector) => {
3695
3717
  rule.selector = placeholder + rule.selector;
3696
3718
  return rule;
3697
3719
  };
3698
- cssText = processRules(cssText, (rule) => {
3720
+ const commentSelectors = (input) => processRules(input, (rule) => {
3699
3721
  if (rule.selector[0] !== "@") return processCommentedSelector(rule);
3700
- else if (rule.selector.startsWith("@media") || rule.selector.startsWith("@supports") || rule.selector.startsWith("@page") || rule.selector.startsWith("@document")) {
3701
- rule.content = processRules(rule.content, processCommentedSelector);
3702
- return rule;
3703
- }
3722
+ if (isScopableAtRule(rule.selector)) rule.content = commentSelectors(rule.content);
3704
3723
  return rule;
3705
3724
  });
3725
+ cssText = commentSelectors(cssText);
3706
3726
  }
3707
3727
  const scoped = scopeCssText(cssText, scopeId, hostScopeId, slotScopeId, commentOriginalSelector);
3708
3728
  cssText = [scoped.cssText, ...commentsWithHash].join("\n");
@@ -1,4 +1,4 @@
1
- import { J as CompilerSystem, jt as Logger } from "../../index-BopBfjPu.mjs";
1
+ import { J as CompilerSystem, jt as Logger } from "../../index-BvF31nqP.mjs";
2
2
  //#region src/sys/node/logger/index.d.ts
3
3
  /**
4
4
  * Create a logger to run in a Node environment
@@ -1,2 +1,2 @@
1
- import { n as setupNodeProcess, r as createNodeLogger, t as createNodeSys } from "../../node-75gQKkFz.mjs";
1
+ import { n as setupNodeProcess, r as createNodeLogger, t as createNodeSys } from "../../node-BKtLn2R9.mjs";
2
2
  export { createNodeLogger, createNodeSys, setupNodeProcess };
@@ -1,5 +1,5 @@
1
- import { l as createWorkerMessageHandler } from "../../compiler-CJG6qvQt.mjs";
2
- import { t as createNodeSys } from "../../node-75gQKkFz.mjs";
1
+ import { l as createWorkerMessageHandler } from "../../compiler-PoywOlbq.mjs";
2
+ import { t as createNodeSys } from "../../node-BKtLn2R9.mjs";
3
3
  //#region src/sys/node/node-worker-thread.ts
4
4
  /**
5
5
  * Initialize a worker thread, setting up various machinery for managing
@@ -919,7 +919,8 @@ interface StencilConfig {
919
919
  * Will generate {@link https://nodejs.org/api/packages.html#packages_exports export map} entry points
920
920
  * for each component in the build when `true`.
921
921
  *
922
- * @default false
922
+ * Defaults to `true` for "no-config" projects (no `stencil.config.ts`/`.js` file), and `false`
923
+ * whenever a config file is present - set this explicitly to opt an existing project in or out.
923
924
  */
924
925
  generateExportMaps?: boolean;
925
926
  /**
@@ -32,7 +32,7 @@ import "@rollup/pluginutils";
32
32
  import { createHash } from "crypto";
33
33
  import { afterAll, vi } from "vitest";
34
34
  //#region src/version.ts
35
- const version = "5.0.0-beta.1";
35
+ const version = "5.0.0-beta.10";
36
36
  const MEMBER_FLAGS = {
37
37
  String: 1,
38
38
  Number: 2,
@@ -2371,16 +2371,33 @@ const signalNodeDisposers = /* @__PURE__ */ new WeakMap();
2371
2371
  const disposeSignalVNode = (vnode) => {
2372
2372
  const elm = vnode.$elm$;
2373
2373
  if (elm) {
2374
- const dispose = signalNodeDisposers.get(elm);
2375
- if (dispose) {
2376
- dispose();
2377
- signalNodeDisposers.delete(elm);
2378
- }
2374
+ disposeTextSignal(elm);
2379
2375
  disposeAllSignalAttrs(elm);
2380
2376
  }
2381
2377
  vnode.$children$?.forEach(disposeSignalVNode);
2382
2378
  };
2383
2379
  /**
2380
+ * Tear down a text node's signal subscription, if it has one.
2381
+ * @param textNode the text node to unsubscribe
2382
+ */
2383
+ const disposeTextSignal = (textNode) => {
2384
+ const dispose = signalNodeDisposers.get(textNode);
2385
+ if (dispose) {
2386
+ dispose();
2387
+ signalNodeDisposers.delete(textNode);
2388
+ }
2389
+ };
2390
+ /**
2391
+ * Subscribe a text node to a signal, keeping its `data` in sync on every change.
2392
+ * @param textNode the text node to keep in sync
2393
+ * @param textSig the signal to subscribe to
2394
+ */
2395
+ const wireTextSignal = (textNode, textSig) => {
2396
+ signalNodeDisposers.set(textNode, effect$1(() => {
2397
+ textNode.data = String(textSig.value);
2398
+ }));
2399
+ };
2400
+ /**
2384
2401
  * Create a DOM Node corresponding to one of the children of a given VNode.
2385
2402
  *
2386
2403
  * @param oldParentVNode the parent VNode from the previous render
@@ -2402,13 +2419,7 @@ const createElm = (oldParentVNode, newParentVNode, childIndex) => {
2402
2419
  if (BUILD.isDev && newVNode.$elm$) consoleDevError(`The JSX ${newVNode.$text$ !== null ? `"${newVNode.$text$}" text` : `"${String(newVNode.$tag$)}" element`} node should not be shared within the same renderer. The renderer caches element lookups in order to improve performance. However, a side effect from this is that the exact same JSX node should not be reused. For more information please see https://stenciljs.com/docs/templating-jsx#avoid-shared-jsx-nodes`);
2403
2420
  if (BUILD.vdomText && newVNode.$text$ != null) {
2404
2421
  elm = newVNode.$elm$ = win.document.createTextNode(newVNode.$text$);
2405
- if (BUILD.vdomSignals && newVNode.$signal$) {
2406
- const textSig = newVNode.$signal$;
2407
- const textNode = elm;
2408
- signalNodeDisposers.set(textNode, effect$1(() => {
2409
- textNode.data = String(textSig.value);
2410
- }));
2411
- }
2422
+ if (BUILD.vdomSignals && newVNode.$signal$) wireTextSignal(elm, newVNode.$signal$);
2412
2423
  } else if (BUILD.slotRelocation && newVNode.$flags$ & VNODE_FLAGS.isSlotReference) {
2413
2424
  elm = newVNode.$elm$ = BUILD.isDebug || BUILD.hydrateServerSide ? slotReferenceDebugNode(newVNode) : win.document.createTextNode("");
2414
2425
  if (typeof newVNode.$attrs$?.slot === "string") elm["s-sa"] = newVNode.$attrs$.slot;
@@ -2769,7 +2780,17 @@ const patch = (oldVNode, newVNode, isInitialRender = false) => {
2769
2780
  else if (BUILD.hydrateClientSide && isInitialRender && BUILD.updatable && oldChildren !== null && newChildren === null) newVNode.$children$ = oldChildren;
2770
2781
  if (BUILD.svg && isSvgMode && tag === "svg") isSvgMode = false;
2771
2782
  } else if (BUILD.vdomText && BUILD.slotRelocation && (defaultHolder = elm["s-cr"])) defaultHolder.parentNode.textContent = text;
2772
- else if (BUILD.vdomText && oldVNode.$text$ !== text) elm.data = text;
2783
+ else if (BUILD.vdomText) {
2784
+ if (BUILD.vdomSignals && newVNode.$signal$) {
2785
+ if (newVNode.$signal$ !== oldVNode.$signal$) {
2786
+ disposeTextSignal(elm);
2787
+ wireTextSignal(elm, newVNode.$signal$);
2788
+ }
2789
+ } else {
2790
+ if (BUILD.vdomSignals && oldVNode.$signal$) disposeTextSignal(elm);
2791
+ if (oldVNode.$text$ !== text) elm.data = text;
2792
+ }
2793
+ }
2773
2794
  };
2774
2795
  /**
2775
2796
  * Component-global information about nodes which are either currently being
@@ -4365,12 +4386,13 @@ const scopeSelector = (selector, scopeSelectorText, hostSelector, slotSelector)
4365
4386
  else return shallowPart.trim();
4366
4387
  }).join(", ");
4367
4388
  };
4389
+ const isScopableAtRule = (selector) => selector.startsWith("@media") || selector.startsWith("@supports") || selector.startsWith("@page") || selector.startsWith("@document") || selector.startsWith("@layer");
4368
4390
  const scopeSelectors = (cssText, scopeSelectorText, hostSelector, slotSelector, commentOriginalSelector) => {
4369
4391
  return processRules(cssText, (rule) => {
4370
4392
  let selector = rule.selector;
4371
4393
  let content = rule.content;
4372
4394
  if (rule.selector[0] !== "@") selector = scopeSelector(rule.selector, scopeSelectorText, hostSelector, slotSelector);
4373
- else if (rule.selector.startsWith("@media") || rule.selector.startsWith("@supports") || rule.selector.startsWith("@page") || rule.selector.startsWith("@document")) content = scopeSelectors(rule.content, scopeSelectorText, hostSelector, slotSelector, commentOriginalSelector);
4395
+ else if (isScopableAtRule(rule.selector)) content = scopeSelectors(rule.content, scopeSelectorText, hostSelector, slotSelector, commentOriginalSelector);
4374
4396
  return {
4375
4397
  selector: selector.replace(/\s{2,}/g, " ").trim(),
4376
4398
  content
@@ -4462,14 +4484,12 @@ const scopeCss = (cssText, scopeId, commentOriginalSelector) => {
4462
4484
  rule.selector = placeholder + rule.selector;
4463
4485
  return rule;
4464
4486
  };
4465
- cssText = processRules(cssText, (rule) => {
4487
+ const commentSelectors = (input) => processRules(input, (rule) => {
4466
4488
  if (rule.selector[0] !== "@") return processCommentedSelector(rule);
4467
- else if (rule.selector.startsWith("@media") || rule.selector.startsWith("@supports") || rule.selector.startsWith("@page") || rule.selector.startsWith("@document")) {
4468
- rule.content = processRules(rule.content, processCommentedSelector);
4469
- return rule;
4470
- }
4489
+ if (isScopableAtRule(rule.selector)) rule.content = commentSelectors(rule.content);
4471
4490
  return rule;
4472
4491
  });
4492
+ cssText = commentSelectors(cssText);
4473
4493
  }
4474
4494
  const scoped = scopeCssText(cssText, scopeId, hostScopeId, slotScopeId, commentOriginalSelector);
4475
4495
  cssText = [scoped.cssText, ...commentsWithHash].join("\n");
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@stencil/core",
3
- "version": "5.0.0-beta.1",
3
+ "version": "5.0.0-beta.10",
4
4
  "description": "A Compiler for Web Components and Progressive Web Apps",
5
5
  "keywords": [
6
6
  "components",
@@ -125,9 +125,9 @@
125
125
  "terser": "^5.50.0",
126
126
  "tinyglobby": "^0.2.17",
127
127
  "typescript": ">5.0.0 <7.0.0",
128
- "@stencil/cli": "5.0.0-beta.1",
129
- "@stencil/mock-doc": "5.0.0-beta.1",
130
- "@stencil/dev-server": "5.0.0-beta.1"
128
+ "@stencil/dev-server": "5.0.0-beta.10",
129
+ "@stencil/cli": "5.0.0-beta.10",
130
+ "@stencil/mock-doc": "5.0.0-beta.10"
131
131
  },
132
132
  "devDependencies": {
133
133
  "@ionic/prettier-config": "^4.0.0",