@coveo/atomic 3.33.3-pre.ee24f8bd85 → 3.33.3-pre.f230cfebef

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (118) hide show
  1. package/dist/atomic/_atomic.esm.js +1 -1
  2. package/dist/atomic/components/analytics-config.js +1 -1
  3. package/dist/atomic/components/atomic-insight-result2.js +1 -1
  4. package/dist/atomic/components/atomic-insight-result2.js.map +1 -1
  5. package/dist/atomic/components/atomic-recs-result2.js +1 -1
  6. package/dist/atomic/components/atomic-recs-result2.js.map +1 -1
  7. package/dist/atomic/components/atomic-result-placeholder2.js +1 -1
  8. package/dist/atomic/components/atomic-result-placeholder2.js.map +1 -1
  9. package/dist/atomic/components/atomic-result2.js +1 -1
  10. package/dist/atomic/components/atomic-result2.js.map +1 -1
  11. package/dist/atomic/components/components/commerce/atomic-commerce-facet-number-input/atomic-commerce-facet-number-input.js +2 -5
  12. package/dist/atomic/components/components/commerce/atomic-commerce-facets/atomic-commerce-facets.js +3 -7
  13. package/dist/atomic/components/components/commerce/atomic-commerce-layout/atomic-commerce-layout.js +9 -7
  14. package/dist/atomic/components/components/commerce/atomic-commerce-product-list/atomic-commerce-product-list.js +13 -3
  15. package/dist/atomic/components/components/commerce/atomic-commerce-recommendation-list/atomic-commerce-recommendation-list.js +7 -3
  16. package/dist/atomic/components/components/commerce/atomic-product/atomic-product.tw.css.js +1 -1
  17. package/dist/atomic/components/components/commerce/atomic-product-children/atomic-product-children.js +3 -7
  18. package/dist/atomic/components/components/commerce/atomic-product-description/atomic-product-description.js +3 -4
  19. package/dist/atomic/components/components/commerce/atomic-product-excerpt/atomic-product-excerpt.js +3 -4
  20. package/dist/atomic/components/components/commerce/atomic-product-field-condition/atomic-product-field-condition.js +2 -4
  21. package/dist/atomic/components/components/commerce/atomic-product-link/atomic-product-link.js +3 -6
  22. package/dist/atomic/components/components/commerce/atomic-product-numeric-field-value/atomic-product-numeric-field-value.js +3 -7
  23. package/dist/atomic/components/components/commerce/atomic-product-price/atomic-product-price.js +2 -3
  24. package/dist/atomic/components/components/commerce/atomic-product-rating/atomic-product-rating.js +3 -4
  25. package/dist/atomic/components/components/commerce/atomic-product-section-actions/atomic-product-section-actions.js +3 -2
  26. package/dist/atomic/components/components/commerce/atomic-product-section-metadata/atomic-product-section-metadata.js +3 -2
  27. package/dist/atomic/components/components/commerce/atomic-product-section-name/atomic-product-section-name.js +3 -2
  28. package/dist/atomic/components/components/commerce/atomic-product-section-visual/atomic-product-section-visual.js +4 -3
  29. package/dist/atomic/components/components/commerce/atomic-product-text/atomic-product-text.js +2 -4
  30. package/dist/atomic/components/components/common/atomic-aria-live/atomic-aria-live.js +2 -4
  31. package/dist/atomic/components/components/common/atomic-facet-date-input/atomic-facet-date-input.js +3 -7
  32. package/dist/atomic/components/components/common/atomic-icon/atomic-icon.js +3 -4
  33. package/dist/atomic/components/components/common/atomic-layout-section/atomic-layout-section.js +2 -4
  34. package/dist/atomic/components/components/common/item-list/styles/grid-display.tw.css.js +4 -0
  35. package/dist/atomic/components/components/common/item-list/styles/list-display.tw.css.js +4 -0
  36. package/dist/atomic/components/components/common/item-list/styles/placeholders.tw.css.js +3 -0
  37. package/dist/atomic/components/components/common/item-list/styles/table-display.tw.css.js +4 -0
  38. package/dist/atomic/components/components/search/atomic-search-layout/atomic-search-layout.js +7 -7
  39. package/dist/atomic/components/global/environment.js +1 -1
  40. package/dist/atomic/components/mixins/item-section-mixin.js +4 -13
  41. package/dist/atomic/components/mixins/light-dom.js +70 -0
  42. package/dist/atomic/p-45b200a8.entry.js +2 -0
  43. package/dist/atomic/{p-bce99a61.entry.js.map → p-45b200a8.entry.js.map} +1 -1
  44. package/dist/atomic/{p-0544aeaf.entry.js → p-8368d287.entry.js} +2 -2
  45. package/dist/atomic/{p-3bd7c3e2.entry.js → p-911c5765.entry.js} +2 -2
  46. package/dist/atomic/{p-d402d8a3.entry.js → p-9ff3ff9e.entry.js} +2 -2
  47. package/dist/atomic/{p-a13d7515.js → p-d1539193.js} +2 -2
  48. package/dist/atomic/p-e40a763b.entry.js +2 -0
  49. package/dist/atomic/{p-78aeb2d4.entry.js.map → p-e40a763b.entry.js.map} +1 -1
  50. package/dist/atomic/p-e91e8521.entry.js +2 -0
  51. package/dist/atomic/{p-2215b188.entry.js.map → p-e91e8521.entry.js.map} +1 -1
  52. package/dist/atomic/p-feb020b6.entry.js +2 -0
  53. package/dist/atomic/{p-0a58608a.entry.js.map → p-feb020b6.entry.js.map} +1 -1
  54. package/dist/cjs/{analytics-config-a0130d05.js → analytics-config-1e7b21a7.js} +2 -2
  55. package/dist/cjs/{analytics-config-a0130d05.js.map → analytics-config-1e7b21a7.js.map} +1 -1
  56. package/dist/cjs/atomic-insight-interface.cjs.entry.js +1 -1
  57. package/dist/cjs/atomic-insight-result.cjs.entry.js +1 -1
  58. package/dist/cjs/atomic-insight-result.cjs.entry.js.map +1 -1
  59. package/dist/cjs/atomic-recs-interface.cjs.entry.js +1 -1
  60. package/dist/cjs/atomic-recs-result.cjs.entry.js +1 -1
  61. package/dist/cjs/atomic-recs-result.cjs.entry.js.map +1 -1
  62. package/dist/cjs/atomic-result-placeholder_8.cjs.entry.js +1 -1
  63. package/dist/cjs/atomic-result-placeholder_8.cjs.entry.js.map +1 -1
  64. package/dist/cjs/atomic-result.cjs.entry.js +1 -1
  65. package/dist/cjs/atomic-result.cjs.entry.js.map +1 -1
  66. package/dist/cjs/atomic-search-interface.cjs.entry.js +1 -1
  67. package/dist/cjs/version.cjs.js +2 -2
  68. package/dist/esm/{analytics-config-ca9f2d02.js → analytics-config-3299bb39.js} +2 -2
  69. package/dist/esm/{analytics-config-ca9f2d02.js.map → analytics-config-3299bb39.js.map} +1 -1
  70. package/dist/esm/atomic-insight-interface.entry.js +1 -1
  71. package/dist/esm/atomic-insight-result.entry.js +1 -1
  72. package/dist/esm/atomic-insight-result.entry.js.map +1 -1
  73. package/dist/esm/atomic-recs-interface.entry.js +1 -1
  74. package/dist/esm/atomic-recs-result.entry.js +1 -1
  75. package/dist/esm/atomic-recs-result.entry.js.map +1 -1
  76. package/dist/esm/atomic-result-placeholder_8.entry.js +1 -1
  77. package/dist/esm/atomic-result-placeholder_8.entry.js.map +1 -1
  78. package/dist/esm/atomic-result.entry.js +1 -1
  79. package/dist/esm/atomic-result.entry.js.map +1 -1
  80. package/dist/esm/atomic-search-interface.entry.js +1 -1
  81. package/dist/esm/version.js +2 -2
  82. package/dist/types/components/commerce/atomic-commerce-facet-number-input/atomic-commerce-facet-number-input.d.ts +5 -1
  83. package/dist/types/components/commerce/atomic-commerce-facets/atomic-commerce-facets.d.ts +5 -2
  84. package/dist/types/components/commerce/atomic-commerce-layout/atomic-commerce-layout.d.ts +6 -2
  85. package/dist/types/components/commerce/atomic-product-children/atomic-product-children.d.ts +5 -2
  86. package/dist/types/components/commerce/atomic-product-description/atomic-product-description.d.ts +5 -1
  87. package/dist/types/components/commerce/atomic-product-excerpt/atomic-product-excerpt.d.ts +5 -1
  88. package/dist/types/components/commerce/atomic-product-field-condition/atomic-product-field-condition.d.ts +5 -2
  89. package/dist/types/components/commerce/atomic-product-link/atomic-product-link.d.ts +3 -1
  90. package/dist/types/components/commerce/atomic-product-numeric-field-value/atomic-product-numeric-field-value.d.ts +5 -2
  91. package/dist/types/components/commerce/atomic-product-price/atomic-product-price.d.ts +5 -1
  92. package/dist/types/components/commerce/atomic-product-rating/atomic-product-rating.d.ts +5 -1
  93. package/dist/types/components/commerce/atomic-product-text/atomic-product-text.d.ts +5 -2
  94. package/dist/types/components/common/atomic-aria-live/atomic-aria-live.d.ts +5 -2
  95. package/dist/types/components/common/atomic-facet-date-input/atomic-facet-date-input.d.ts +5 -2
  96. package/dist/types/components/common/atomic-icon/atomic-icon.d.ts +3 -1
  97. package/dist/types/components/common/atomic-layout-section/atomic-layout-section.d.ts +5 -2
  98. package/dist/types/components/common/interface/bindings.d.ts +1 -1
  99. package/dist/types/components/common/item-list/styles/placeholders.tw.css.d.ts +2 -0
  100. package/dist/types/components/common/item-list/styles/table-display.tw.css.d.ts +2 -0
  101. package/dist/types/components/search/atomic-search-layout/atomic-search-layout.d.ts +4 -2
  102. package/dist/types/mixins/light-dom.d.ts +25 -0
  103. package/docs/atomic-docs.json +1 -1
  104. package/package.json +3 -4
  105. package/dist/atomic/components/components/commerce/atomic-commerce-product-list/atomic-commerce-product-list.tw.css.js +0 -4
  106. package/dist/atomic/components/components/commerce/atomic-commerce-recommendation-list/atomic-commerce-recommendation-list.tw.css.js +0 -4
  107. package/dist/atomic/components/decorators/inject-styles-for-no-shadow-dom.js +0 -55
  108. package/dist/atomic/p-0a58608a.entry.js +0 -2
  109. package/dist/atomic/p-2215b188.entry.js +0 -2
  110. package/dist/atomic/p-78aeb2d4.entry.js +0 -2
  111. package/dist/atomic/p-bce99a61.entry.js +0 -2
  112. package/dist/types/decorators/inject-styles-for-no-shadow-dom.d.ts +0 -31
  113. /package/dist/atomic/{p-0544aeaf.entry.js.map → p-8368d287.entry.js.map} +0 -0
  114. /package/dist/atomic/{p-3bd7c3e2.entry.js.map → p-911c5765.entry.js.map} +0 -0
  115. /package/dist/atomic/{p-d402d8a3.entry.js.map → p-9ff3ff9e.entry.js.map} +0 -0
  116. /package/dist/atomic/{p-a13d7515.js.map → p-d1539193.js.map} +0 -0
  117. /package/dist/types/components/{commerce/atomic-commerce-product-list/atomic-commerce-product-list.tw.css.d.ts → common/item-list/styles/grid-display.tw.css.d.ts} +0 -0
  118. /package/dist/types/components/{commerce/atomic-commerce-recommendation-list/atomic-commerce-recommendation-list.tw.css.d.ts → common/item-list/styles/list-display.tw.css.d.ts} +0 -0
@@ -12,15 +12,15 @@ import { bindingGuard } from "../../../decorators/binding-guard.js";
12
12
  import { bindings } from "../../../decorators/bindings.js";
13
13
  import { createProductContextController } from "../../../decorators/commerce/product-template-decorators.js";
14
14
  import { errorGuard } from "../../../decorators/error-guard.js";
15
- import { injectStylesForNoShadowDOM } from "../../../decorators/inject-styles-for-no-shadow-dom.js";
16
15
  import { withTailwindStyles } from "../../../decorators/with-tailwind-styles.js";
17
16
  import { multiClassMap, tw } from "../../../directives/multi-class-map.js";
17
+ import { LightDomMixin } from "../../../mixins/light-dom.js";
18
18
  import { defaultCurrencyFormatter } from '../../common/formats/format-common.js';
19
19
  import { parseValue } from '../product-template-component-utils/product-utils.js';
20
20
  /**
21
21
  * The `atomic-product-price` component renders the price of a product.
22
22
  */
23
- let AtomicProductPrice = class AtomicProductPrice extends LitElement {
23
+ let AtomicProductPrice = class AtomicProductPrice extends LightDomMixin(LitElement) {
24
24
  constructor() {
25
25
  super(...arguments);
26
26
  this.productController = createProductContextController(this);
@@ -94,7 +94,6 @@ __decorate([
94
94
  AtomicProductPrice = __decorate([
95
95
  customElement('atomic-product-price'),
96
96
  bindings(),
97
- injectStylesForNoShadowDOM,
98
97
  withTailwindStyles
99
98
  ], AtomicProductPrice);
100
99
  export { AtomicProductPrice };
@@ -12,7 +12,7 @@ import { bindingGuard } from "../../../decorators/binding-guard";
12
12
  import { bindings } from "../../../decorators/bindings.js";
13
13
  import { createProductContextController } from "../../../decorators/commerce/product-template-decorators.js";
14
14
  import { errorGuard } from "../../../decorators/error-guard";
15
- import { injectStylesForNoShadowDOM } from "../../../decorators/inject-styles-for-no-shadow-dom";
15
+ import { LightDomMixin } from "../../../mixins/light-dom";
16
16
  const Star = "<svg xmlns=\"http://www.w3.org/2000/svg\" width=\"13\" height=\"13\" viewBox=\"0 0 13 13\">\n <path\n d=\"m 2.6226137,7.5483827 -1.73646599,-1.67659 c -0.58287,-0.56277 -0.2895686,-1.54878 0.50612799,-1.70148 l 2.630348,-0.50477 c 0.31897,-0.06121 0.58834,-0.27352 0.72239,-0.56935 l 0.84414,-1.86293 c 0.35481,-0.78302702 1.46689,-0.78302802 1.8217,0 l 0.84414,1.86293 c 0.13405,0.29583 0.40342,0.50814 0.72239,0.56935 l 2.6303203,0.50477 c 0.7957,0.1527 1.089,1.13871 0.5062,1.70148 l -1.73651,1.67659 c -0.23632,0.22817 -0.34551,0.55786 -0.2921,0.88198 l 0.45461,2.7587403 c 0.1357,0.824 -0.7386003,1.4416 -1.4698203,1.0382 l -2.087,-1.1515 c -0.30069,-0.1659 -0.66547,-0.1659 -0.96616,0 l -2.087,1.1515 c -0.73122,0.4034 -1.60555,-0.2142 -1.46978,-1.0382 l 0.45457,-2.7587403 c 0.05341,-0.32412 -0.05578,-0.65381 -0.2921,-0.88198 z\"\n stroke-width=\"0.8125\"\n />\n</svg>";
17
17
  import { computeNumberOfStars, renderRating, } from '../../common/atomic-rating/rating.js';
18
18
  /**
@@ -25,7 +25,7 @@ import { computeNumberOfStars, renderRating, } from '../../common/atomic-rating/
25
25
  * @cssprop --atomic-rating-icon-inactive-color - Color of the icon when inactive.
26
26
  * @cssprop --atomic-rating-icon-outline - Outline color of the icon.
27
27
  */
28
- let AtomicProductRating = class AtomicProductRating extends LitElement {
28
+ let AtomicProductRating = class AtomicProductRating extends LightDomMixin(LitElement) {
29
29
  constructor() {
30
30
  super(...arguments);
31
31
  this.productController = createProductContextController(this);
@@ -151,7 +151,6 @@ __decorate([
151
151
  ], AtomicProductRating.prototype, "render", null);
152
152
  AtomicProductRating = __decorate([
153
153
  customElement('atomic-product-rating'),
154
- bindings(),
155
- injectStylesForNoShadowDOM
154
+ bindings()
156
155
  ], AtomicProductRating);
157
156
  export { AtomicProductRating };
@@ -4,7 +4,7 @@ var __decorate = (this && this.__decorate) || function (decorators, target, key,
4
4
  else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;
5
5
  return c > 3 && r && Object.defineProperty(target, key, r), r;
6
6
  };
7
- import { LitElement } from 'lit';
7
+ import { css, LitElement } from 'lit';
8
8
  import { customElement } from 'lit/decorators.js';
9
9
  import { ItemSectionMixin } from "../../../mixins/item-section-mixin";
10
10
  /**
@@ -19,7 +19,8 @@ import { ItemSectionMixin } from "../../../mixins/item-section-mixin";
19
19
  *
20
20
  * @slot default - The actions to display.
21
21
  */
22
- let AtomicProductSectionActions = class AtomicProductSectionActions extends ItemSectionMixin(LitElement) {
22
+ let AtomicProductSectionActions = class AtomicProductSectionActions extends ItemSectionMixin(LitElement, css`/*! tailwindcss v4.1.12 | MIT License | https://tailwindcss.com */
23
+ atomic-product-section-actions{text-align:left;&.with-sections{text-overflow:ellipsis;overflow:hidden}&.with-sections{max-height:calc(2*var(--row-height,2rem) + .5rem);--row-height:2rem;flex-wrap:wrap;grid-area:actions;gap:.5rem;display:flex;& atomic-result-quickview{display:inline-block}@media (width>=1024px){&.display-list{&.density-comfortable{margin-bottom:1.5rem}&.density-normal,&.density-compact{margin-bottom:1rem}}&.display-grid{&.density-comfortable{--row-height:2.5rem;margin-top:2.25rem}&.density-normal{--font-size:var(--atomic-text-sm);font-size:var(--font-size);--line-height:calc(var(--font-size)*var(--atomic-line-height-ratio));line-height:var(--line-height);margin-top:1.75rem}&.density-compact{--font-size:var(--atomic-text-sm);font-size:var(--font-size);--line-height:calc(var(--font-size)*var(--atomic-line-height-ratio));line-height:var(--line-height);margin-top:1.25rem}}}@media not all and (width>=1024px){&.display-list{--row-height:2.5rem;&.density-comfortable{margin-top:1rem}&.density-normal{margin-top:.75rem}&.density-compact{margin-top:.5em}}&.display-grid{&.image-large{--row-height:2.5rem;&.density-comfortable{margin-top:1rem}&.density-normal{margin-top:.75rem}&.density-compact{margin-top:.5em}}&.image-small,&.image-icon,&.image-none{&.density-comfortable{margin-top:1.25rem}&.density-normal{margin-top:1rem}&.density-compact{margin-top:.75rem}}}}&.display-table{&.density-comfortable{margin-bottom:1.5rem}&.density-normal,&.density-compact{margin-bottom:1rem}}}}`) {
23
24
  };
24
25
  AtomicProductSectionActions = __decorate([
25
26
  customElement('atomic-product-section-actions')
@@ -4,7 +4,7 @@ var __decorate = (this && this.__decorate) || function (decorators, target, key,
4
4
  else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;
5
5
  return c > 3 && r && Object.defineProperty(target, key, r), r;
6
6
  };
7
- import { LitElement } from 'lit';
7
+ import { css, LitElement } from 'lit';
8
8
  import { customElement } from 'lit/decorators.js';
9
9
  import { ItemSectionMixin } from "../../../mixins/item-section-mixin";
10
10
  /**
@@ -18,7 +18,8 @@ import { ItemSectionMixin } from "../../../mixins/item-section-mixin";
18
18
  *
19
19
  * @slot default - The metadata to display.
20
20
  */
21
- let AtomicProductSectionMetadata = class AtomicProductSectionMetadata extends ItemSectionMixin(LitElement) {
21
+ let AtomicProductSectionMetadata = class AtomicProductSectionMetadata extends ItemSectionMixin(LitElement, css`/*! tailwindcss v4.1.12 | MIT License | https://tailwindcss.com */
22
+ atomic-product-section-metadata{--font-size:var(--atomic-text-sm);font-size:var(--font-size);--line-height:calc(var(--font-size)*var(--atomic-line-height-ratio));line-height:var(--line-height);&.with-sections{text-overflow:ellipsis;grid-area:title-metadata;margin-top:.475rem;overflow:hidden}}`) {
22
23
  };
23
24
  AtomicProductSectionMetadata = __decorate([
24
25
  customElement('atomic-product-section-metadata')
@@ -4,7 +4,7 @@ var __decorate = (this && this.__decorate) || function (decorators, target, key,
4
4
  else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;
5
5
  return c > 3 && r && Object.defineProperty(target, key, r), r;
6
6
  };
7
- import { LitElement } from 'lit';
7
+ import { css, LitElement } from 'lit';
8
8
  import { customElement } from 'lit/decorators.js';
9
9
  import { ItemSectionMixin } from "../../../mixins/item-section-mixin";
10
10
  /**
@@ -17,7 +17,8 @@ import { ItemSectionMixin } from "../../../mixins/item-section-mixin";
17
17
  *
18
18
  * @slot default - The name to display.
19
19
  */
20
- let AtomicProductSectionName = class AtomicProductSectionName extends ItemSectionMixin(LitElement) {
20
+ let AtomicProductSectionName = class AtomicProductSectionName extends ItemSectionMixin(LitElement, css`/*! tailwindcss v4.1.12 | MIT License | https://tailwindcss.com */
21
+ atomic-product-section-name{&.with-sections{text-overflow:ellipsis;overflow:hidden}&.with-sections{color:var(--atomic-on-background);--font-size:var(--atomic-text-xl);font-size:var(--font-size);--line-height:calc(var(--font-size)*var(--atomic-line-height-ratio));line-height:var(--line-height);grid-area:title;&.density-comfortable{--font-size:var(--atomic-text-2xl);font-size:var(--font-size);--line-height:calc(var(--font-size)*var(--atomic-line-height-ratio));line-height:var(--line-height)}@media (width>=1024px){&.display-grid{word-break:break-word;-webkit-line-clamp:2;-webkit-box-orient:vertical;display:-webkit-box;overflow:hidden}}@media not all and (width>=1024px){&.display-list{--font-size:var(--atomic-text-xl);font-size:var(--font-size);--line-height:calc(var(--font-size)*var(--atomic-line-height-ratio));line-height:var(--line-height)}&.display-grid{&.image-large{--font-size:var(--atomic-text-xl);font-size:var(--font-size);--line-height:calc(var(--font-size)*var(--atomic-line-height-ratio));line-height:var(--line-height)}&.image-small,&.image-icon,&.image-none{--font-size:var(--atomic-text-lg);font-size:var(--font-size);--line-height:calc(var(--font-size)*var(--atomic-line-height-ratio));line-height:var(--line-height);-webkit-line-clamp:2;-webkit-box-orient:vertical;max-height:3rem;display:-webkit-box;overflow:hidden}}}}& .with-sections{&.display-grid{min-height:calc(var(--line-height)*2);-webkit-line-clamp:2;-webkit-box-orient:vertical;display:-webkit-box;overflow:hidden}}}`) {
21
22
  };
22
23
  AtomicProductSectionName = __decorate([
23
24
  customElement('atomic-product-section-name')
@@ -4,7 +4,7 @@ var __decorate = (this && this.__decorate) || function (decorators, target, key,
4
4
  else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;
5
5
  return c > 3 && r && Object.defineProperty(target, key, r), r;
6
6
  };
7
- import { LitElement } from 'lit';
7
+ import { css, LitElement } from 'lit';
8
8
  import { customElement, property } from 'lit/decorators.js';
9
9
  import { ItemSectionMixin } from "../../../mixins/item-section-mixin";
10
10
  /**
@@ -18,10 +18,11 @@ import { ItemSectionMixin } from "../../../mixins/item-section-mixin";
18
18
  *
19
19
  * @slot default - The image to display.
20
20
  */
21
- let AtomicProductSectionVisual = class AtomicProductSectionVisual extends ItemSectionMixin(LitElement) {
21
+ let AtomicProductSectionVisual = class AtomicProductSectionVisual extends ItemSectionMixin(LitElement, css`/*! tailwindcss v4.1.12 | MIT License | https://tailwindcss.com */
22
+ atomic-product-section-visual{&.with-sections{text-overflow:ellipsis;overflow:hidden}&.with-sections{grid-area:visual;&.image-icon{border-radius:var(--atomic-border-radius);width:2rem;height:2rem}&.image-none{display:none}@media (width>=1024px){&.display-list{margin-right:1rem;&.density-comfortable{margin-right:1.5rem}&.image-large{&.density-compact{width:10rem;height:10rem}&.density-comfortable,&.density-normal{width:20.375rem;height:20.375rem}}&.image-small{width:10rem;height:10rem}}&.display-grid{margin-bottom:.5rem;&.image-large,&.image-small{width:100%;&.density-comfortable{margin:0 auto 2rem}&.density-normal{margin:0 auto 1.5rem}&.density-compact{margin:0 auto 1rem}}&.image-large{aspect-ratio:1;height:auto;@supports not (aspect-ratio:1 / 1){&{height:19.75rem}}}&.image-small{aspect-ratio:1;height:auto;@supports not (aspect-ratio:1 / 1){&{height:14rem}}}}}@media not all and (width>=1024px){&.display-list{margin-right:1rem;&.image-large{aspect-ratio:1;width:100%;height:auto;margin-bottom:1rem;margin-right:0;@supports not (aspect-ratio:1 / 1){&{height:7.25rem}}}&.image-small{width:24vw;height:24vw;margin-bottom:1rem}&.image-icon{margin-bottom:0}}&.display-grid{&.image-large{margin-right:1rem;&.image-large{aspect-ratio:1;width:100%;height:auto;margin-bottom:1rem;margin-right:0;@supports not (aspect-ratio:1 / 1){&{height:7.25rem}}}&.image-small{width:24vw;height:24vw;margin-bottom:1rem}&.image-icon{margin-bottom:0}}&.image-small,&.image-icon,&.image-none{&.image-large,&.image-small{width:100%;&.density-comfortable{margin-bottom:1rem}&.density-normal{margin-bottom:.75rem}&.density-compact{margin-bottom:.5rem}}&.image-small{aspect-ratio:1;width:10.25rem;height:10.25rem;@supports not (aspect-ratio:1 / 1){&{height:9rem}}}}}}&.display-table{margin-right:1rem;&.density-comfortable{margin-right:1.5rem}&.image-large{&.density-compact{width:10rem;height:10rem}&.density-comfortable,&.density-normal{width:20.375rem;height:20.375rem}}&.image-small{width:10rem;height:10rem}}}& .with-sections{&.image-icon{& atomic-product-image::part(previous-button),& atomic-product-image::part(next-button),& atomic-product-image::part(indicator){display:none}}}}`) {
22
23
  };
23
24
  __decorate([
24
- property({ reflect: true, attribute: 'image-size' })
25
+ property({ reflect: true, attribute: 'image-size', type: Object })
25
26
  ], AtomicProductSectionVisual.prototype, "imageSize", void 0);
26
27
  AtomicProductSectionVisual = __decorate([
27
28
  customElement('atomic-product-section-visual')
@@ -17,11 +17,12 @@ import { getFieldValueCaption } from '../../../utils/field-utils';
17
17
  import { renderItemTextFallback } from '../../common/item-text/item-text-fallback.js';
18
18
  import { renderItemTextHighlighted } from '../../common/item-text/item-text-highlighted.js';
19
19
  import '../atomic-commerce-text/atomic-commerce-text';
20
+ import { LightDomMixin } from "../../../mixins/light-dom";
20
21
  import { getStringValueFromProductOrNull } from '../product-template-component-utils/product-utils.js';
21
22
  /**
22
23
  * The `atomic-product-text` component renders the value of a string field for a given product.
23
24
  */
24
- let AtomicProductText = class AtomicProductText extends LitElement {
25
+ let AtomicProductText = class AtomicProductText extends LightDomMixin(LitElement) {
25
26
  constructor() {
26
27
  super(...arguments);
27
28
  /**
@@ -37,9 +38,6 @@ let AtomicProductText = class AtomicProductText extends LitElement {
37
38
  this.disableHighlight = false;
38
39
  this.productController = createProductContextController(this);
39
40
  }
40
- createRenderRoot() {
41
- return this;
42
- }
43
41
  initialize() {
44
42
  if (!this.product && this.productController.item) {
45
43
  this.product = this.productController.item;
@@ -7,6 +7,7 @@ var __decorate = (this && this.__decorate) || function (decorators, target, key,
7
7
  import { html, LitElement } from 'lit';
8
8
  import { customElement, state } from 'lit/decorators.js';
9
9
  import { styleMap } from 'lit/directives/style-map.js';
10
+ import { LightDomMixin } from "../../../mixins/light-dom";
10
11
  import { buildDebouncedQueue } from '../../../utils/debounce-utils';
11
12
  import { randomID } from '../../../utils/utils';
12
13
  /**
@@ -14,7 +15,7 @@ import { randomID } from '../../../utils/utils';
14
15
  *
15
16
  * @event atomic/accessibility/findAriaLive - Dispatches an event to find the `atomic-aria-live` element.
16
17
  */
17
- let AtomicAriaLive = class AtomicAriaLive extends LitElement {
18
+ let AtomicAriaLive = class AtomicAriaLive extends LightDomMixin(LitElement) {
18
19
  constructor() {
19
20
  super(...arguments);
20
21
  this.regions = {};
@@ -24,9 +25,6 @@ let AtomicAriaLive = class AtomicAriaLive extends LitElement {
24
25
  customEvent.detail.element = this;
25
26
  };
26
27
  }
27
- createRenderRoot() {
28
- return this;
29
- }
30
28
  connectedCallback() {
31
29
  super.connectedCallback();
32
30
  this.ariaLiveId = randomID('atomic-aria-live-');
@@ -13,7 +13,7 @@ import { renderButton } from "../button";
13
13
  import { bindingGuard } from "../../../decorators/binding-guard";
14
14
  import { bindings } from "../../../decorators/bindings";
15
15
  import { errorGuard } from "../../../decorators/error-guard";
16
- import { withTailwindStyles } from "../../../decorators/with-tailwind-styles.js";
16
+ import { LightDomMixin } from "../../../mixins/light-dom";
17
17
  import { parseDate } from "../../../utils/date-utils";
18
18
  /**
19
19
  * Internal component made to be integrated in a TimeframeFacet.
@@ -23,7 +23,7 @@ import { parseDate } from "../../../utils/date-utils";
23
23
  *
24
24
  * @internal
25
25
  */
26
- let AtomicFacetDateInput = class AtomicFacetDateInput extends LitElement {
26
+ let AtomicFacetDateInput = class AtomicFacetDateInput extends LightDomMixin(LitElement) {
27
27
  constructor() {
28
28
  super(...arguments);
29
29
  this.startRef = createRef();
@@ -41,9 +41,6 @@ let AtomicFacetDateInput = class AtomicFacetDateInput extends LitElement {
41
41
  ? parseDate(this.inputRange.end).toDate()
42
42
  : undefined;
43
43
  }
44
- createRenderRoot() {
45
- return this;
46
- }
47
44
  /**
48
45
  * Validates that this component is only used within an atomic-commerce-timeframe-facet.
49
46
  * This is an internal component and should not be used directly by consumers.
@@ -220,7 +217,6 @@ __decorate([
220
217
  ], AtomicFacetDateInput.prototype, "render", null);
221
218
  AtomicFacetDateInput = __decorate([
222
219
  customElement('atomic-facet-date-input'),
223
- bindings(),
224
- withTailwindStyles
220
+ bindings()
225
221
  ], AtomicFacetDateInput);
226
222
  export { AtomicFacetDateInput };
@@ -11,9 +11,9 @@ import { guard } from 'lit/directives/guard.js';
11
11
  import { unsafeSVG } from 'lit/directives/unsafe-svg.js';
12
12
  import { bindingGuard } from "../../../decorators/binding-guard";
13
13
  import { errorGuard } from "../../../decorators/error-guard";
14
- import { injectStylesForNoShadowDOM } from "../../../decorators/inject-styles-for-no-shadow-dom";
15
14
  import { watch } from "../../../decorators/watch";
16
15
  import { InitializeBindingsMixin } from "../../../mixins/bindings-mixin";
16
+ import { LightDomMixin } from "../../../mixins/light-dom";
17
17
  import { parseAssetURL } from "../../../utils/asset-path-utils";
18
18
  class IconFetchError extends Error {
19
19
  static fromStatusCode(url, statusCode, statusText) {
@@ -33,7 +33,7 @@ class IconFetchError extends Error {
33
33
  *
34
34
  * This component can display an icon from those available in the Atomic package, from a specific location, or as an inline SVG element.
35
35
  */
36
- let AtomicIcon = class AtomicIcon extends InitializeBindingsMixin(LitElement) {
36
+ let AtomicIcon = class AtomicIcon extends LightDomMixin(InitializeBindingsMixin(LitElement)) {
37
37
  constructor() {
38
38
  super(...arguments);
39
39
  this.svg = null;
@@ -108,7 +108,6 @@ __decorate([
108
108
  errorGuard()
109
109
  ], AtomicIcon.prototype, "render", null);
110
110
  AtomicIcon = __decorate([
111
- customElement('atomic-icon'),
112
- injectStylesForNoShadowDOM
111
+ customElement('atomic-icon')
113
112
  ], AtomicIcon);
114
113
  export { AtomicIcon };
@@ -6,15 +6,13 @@ var __decorate = (this && this.__decorate) || function (decorators, target, key,
6
6
  };
7
7
  import { LitElement } from 'lit';
8
8
  import { customElement, property } from 'lit/decorators.js';
9
+ import { LightDomMixin } from "../../../mixins/light-dom";
9
10
  /**
10
11
  * The `atomic-layout-section` lets you identify various sections for the related `atomic-search-layout` or `atomic-commerce-layout` component.
11
12
  *
12
13
  * @slot default - The default slot where you can add child components to the section.
13
14
  */
14
- let AtomicLayoutSection = class AtomicLayoutSection extends LitElement {
15
- createRenderRoot() {
16
- return this;
17
- }
15
+ let AtomicLayoutSection = class AtomicLayoutSection extends LightDomMixin(LitElement) {
18
16
  };
19
17
  __decorate([
20
18
  property({ type: String, reflect: true })
@@ -0,0 +1,4 @@
1
+ import { css } from 'lit';
2
+ const styles = css`/*! tailwindcss v4.1.12 | MIT License | https://tailwindcss.com */
3
+ @layer properties{@supports (((-webkit-hyphens:none)) and (not (margin-trim:inline))) or ((-moz-orient:inline) and (not (color:rgb(from red r g b)))){*,:before,:after,::backdrop{--tw-border-style:solid}}}:host{& [part~=outline][part~=result-list-grid-clickable-container]{border:1px solid #0000;border-radius:1rem;padding:1rem;transition:all .12s ease-out;position:relative;&:hover{border-style:var(--tw-border-style);border-width:1px;border-color:var(--atomic-neutral);box-shadow:0px 10px 25px var(--atomic-neutral);cursor:pointer}}& [part=result-list-grid-clickable]:focus-visible{border-style:var(--tw-border-style);border-width:2px;border-color:var(--atomic-primary);color:var(--atomic-primary);cursor:pointer;text-align:center;border-radius:2px;text-decoration:underline;display:inline-block;position:absolute}& [part=result-list-grid-clickable]:not(:focus){clip:rect(1px,1px,1px,1px);padding:0;position:absolute;overflow:hidden}& .list-wrapper{word-break:break-word}& .list-root.display-grid{justify-content:space-evenly;display:grid;& .result-component{box-sizing:border-box;height:100%}}& .list-root.display-grid{@media (width>=1024px){&{grid-template-columns:repeat(auto-fit,minmax(17rem,1fr))}&.density-comfortable{grid-row-gap:4rem;grid-column-gap:1.5rem}&.density-normal,&.density-compact{grid-row-gap:3rem;grid-column-gap:1.5rem}&.image-large{grid-template-columns:repeat(auto-fill,minmax(19rem,1fr))}&.image-small{@media not all and (width>=1024px){&{grid-template-columns:repeat(3,1fr)}}@media (width>=1024px){&{grid-template-columns:repeat(3,1fr)}}@media (width>=1280px){&{grid-template-columns:repeat(4,1fr)}}}}}& .list-root.display-grid{@media not all and (width>=1024px){&.image-large{@media not all and (width>=768px){&{grid-template-columns:minmax(auto,35rem)}&.density-comfortable{& [part~=outline]{&:before{margin:2rem 0}}}&.density-normal{& [part~=outline]{&:before{margin:1.5rem 0}}@media not all and (width>=1024px){& [part~=outline]{&:before{margin:1.75rem 0}}}}&.density-compact{& [part~=outline]{&:before{margin:1rem 0}}@media not all and (width>=1024px){& [part~=outline]{&:before{margin:1.5rem 0}}}}& [part~=outline]{&:before{content:" ";background-color:var(--atomic-neutral);height:1px;display:block}&:first-of-type:before{display:none}}& atomic-result-placeholder{&:before{background-color:#0000}}}@media (width>=768px){&{grid-column-gap:.5rem;grid-row-gap:.5rem;grid-template-columns:1fr 1fr}& [part~=outline]{border-style:var(--tw-border-style);border-width:1px;border-color:var(--atomic-neutral);border-radius:1rem;padding:1rem}& atomic-result-placeholder{border-color:#0000}}}&.image-small,&.image-icon,&.image-none{grid-column-gap:.5rem;grid-row-gap:.5rem;& [part~=outline]{border-style:var(--tw-border-style);border-width:1px;border-color:var(--atomic-neutral);border-radius:1rem;padding:1rem}& atomic-result-placeholder{border-color:#0000}@media not all and (width>=640px){&{grid-template-columns:minmax(0,1fr)}}@media (width>=768px){&{grid-template-columns:minmax(0,1fr) minmax(0,1fr)}}@media (width>=1024px){&{grid-template-columns:minmax(0,1fr) minmax(0,1fr) minmax(0,1fr)}}}}}}@property --tw-border-style{syntax:"*";inherits:false;initial-value:solid}`;
4
+ export default styles;
@@ -0,0 +1,4 @@
1
+ import { css } from 'lit';
2
+ const styles = css`/*! tailwindcss v4.1.12 | MIT License | https://tailwindcss.com */
3
+ @layer properties{@supports (((-webkit-hyphens:none)) and (not (margin-trim:inline))) or ((-moz-orient:inline) and (not (color:rgb(from red r g b)))){*,:before,:after,::backdrop{--tw-border-style:solid}}}[part~=divider]{margin-bottom:1rem;&:not(:last-child){border-bottom-color:var(--atomic-neutral);padding-bottom:1rem}}.list-root.display-list{flex-direction:column;display:flex;& .result-component,& atomic-result-placeholder{width:auto}@media (width>=1024px){&.density-comfortable{& [part~=outline]{&:before{margin:2rem 0}}}&.density-normal{& [part~=outline]{&:before{margin:1.5rem 0}}@media not all and (width>=1024px){& [part~=outline]{&:before{margin:1.75rem 0}}}}&.density-compact{& [part~=outline]{&:before{margin:1rem 0}}@media not all and (width>=1024px){& [part~=outline]{&:before{margin:1.5rem 0}}}}& [part~=outline]{&:before{content:" ";background-color:var(--atomic-neutral);height:1px;display:block}&:first-of-type:before{display:none}}& atomic-result-placeholder{&:before{background-color:#0000}}}@media not all and (width>=1024px){&.image-large{grid-template-columns:minmax(auto,35rem);justify-content:space-evenly;display:grid;&.density-comfortable{& [part~=outline]{&:before{margin:2rem 0}}}&.density-normal{& [part~=outline]{&:before{margin:1.5rem 0}}@media not all and (width>=1024px){& [part~=outline]{&:before{margin:1.75rem 0}}}}&.density-compact{& [part~=outline]{&:before{margin:1rem 0}}@media not all and (width>=1024px){& [part~=outline]{&:before{margin:1.5rem 0}}}}& [part~=outline]{&:before{content:" ";background-color:var(--atomic-neutral);height:1px;display:block}&:first-of-type:before{display:none}}& atomic-result-placeholder{&:before{background-color:#0000}}}&.image-small,&.image-icon,&.image-none{grid-row-gap:1rem;& [part~=outline]{border-style:var(--tw-border-style);border-width:1px;border-color:var(--atomic-neutral);border-radius:1rem;padding:1rem}& atomic-result-placeholder{border-color:#0000}}}}@property --tw-border-style{syntax:"*";inherits:false;initial-value:solid}`;
4
+ export default styles;
@@ -0,0 +1,3 @@
1
+ import { css } from 'lit';
2
+ const styles = css`.list-wrapper.placeholder{& .result-component,& table.list-root{display:none}}.list-wrapper:not(.placeholder){& atomic-result-placeholder,& atomic-result-table-placeholder{display:none}}.list-root.loading{animation:2s cubic-bezier(.4,0,.6,1) infinite pulse}@keyframes pulse{0%,to{opacity:.6}50%{opacity:.2}}`;
3
+ export default styles;
@@ -0,0 +1,4 @@
1
+ import { css } from 'lit';
2
+ const styles = css`/*! tailwindcss v4.1.12 | MIT License | https://tailwindcss.com */
3
+ @layer properties{@supports (((-webkit-hyphens:none)) and (not (margin-trim:inline))) or ((-moz-orient:inline) and (not (color:rgb(from red r g b)))){*,:before,:after,::backdrop{--tw-border-style:solid}}}.list-wrapper.display-table{display:grid;overflow-x:auto}.list-root.display-table{border-spacing:0;border-collapse:separate;min-width:100%;& th,& td{border-style:var(--tw-border-style);border-width:1px;border-color:var(--atomic-neutral);font-family:var(--atomic-font-family);font-size:var(--atomic-text-sm);line-height:var(--tw-leading,var(--text-sm--line-height,calc(1.25/.875)));white-space:nowrap;line-height:1rem;&:not(:first-child){border-left:none}&:first-child{min-width:19rem}}& th{background-color:var(--atomic-neutral-light);color:#000;padding:1rem var(--padding);text-align:left;border-bottom:none;font-weight:700;&:first-child{border-top-left-radius:var(--atomic-border-radius-xl)}&:last-child{border-top-right-radius:var(--atomic-border-radius-xl)}}& td{color:var(--atomic-neutral-dark);vertical-align:top;padding:var(--padding);border-top:none}&.density-comfortable{--padding:2rem}&.density-normal{--padding:1.5rem}&.density-compact{--padding:1rem}}@property --tw-border-style{syntax:"*";inherits:false;initial-value:solid}`;
4
+ export default styles;
@@ -6,8 +6,8 @@ var __decorate = (this && this.__decorate) || function (decorators, target, key,
6
6
  };
7
7
  import { LitElement, unsafeCSS } from 'lit';
8
8
  import { customElement, property, state } from 'lit/decorators.js';
9
- import { injectStylesForNoShadowDOM } from "../../../decorators/inject-styles-for-no-shadow-dom";
10
9
  import { ChildrenUpdateCompleteMixin } from "../../../mixins/children-update-complete-mixin";
10
+ import { LightDomMixin } from "../../../mixins/light-dom";
11
11
  import { randomID } from "../../../utils/utils";
12
12
  import { DEFAULT_MOBILE_BREAKPOINT } from '../../../utils/replace-breakpoint';
13
13
  import styles from './atomic-search-layout.tw.css';
@@ -19,7 +19,7 @@ import { buildSearchLayout } from './search-layout';
19
19
  * @cssprop --atomic-layout-max-search-box-double-suggestions-width: The maximum width that the search box suggestions will take when displaying a double list.
20
20
  * @cssprop --atomic-layout-search-box-left-suggestions-width: The width of the left list when displaying a double list.
21
21
  */
22
- let AtomicSearchLayout = class AtomicSearchLayout extends ChildrenUpdateCompleteMixin(LitElement) {
22
+ let AtomicSearchLayout = class AtomicSearchLayout extends LightDomMixin(ChildrenUpdateCompleteMixin(LitElement)) {
23
23
  constructor() {
24
24
  super(...arguments);
25
25
  /**
@@ -28,13 +28,14 @@ let AtomicSearchLayout = class AtomicSearchLayout extends ChildrenUpdateComplete
28
28
  */
29
29
  this.mobileBreakpoint = DEFAULT_MOBILE_BREAKPOINT;
30
30
  }
31
- static async dynamicStyles(instance) {
32
- await instance.getUpdateComplete();
33
- return unsafeCSS(buildSearchLayout(instance, instance.mobileBreakpoint));
31
+ async addStyles() {
32
+ await this.getUpdateComplete();
33
+ this.injectStyles(unsafeCSS(buildSearchLayout(this, this.mobileBreakpoint)));
34
34
  }
35
35
  connectedCallback() {
36
36
  super.connectedCallback();
37
37
  this.id = randomID('atomic-search-layout-');
38
+ this.addStyles();
38
39
  }
39
40
  };
40
41
  AtomicSearchLayout.styles = [styles];
@@ -45,7 +46,6 @@ __decorate([
45
46
  property({ type: String, reflect: true, attribute: 'mobile-breakpoint' })
46
47
  ], AtomicSearchLayout.prototype, "mobileBreakpoint", void 0);
47
48
  AtomicSearchLayout = __decorate([
48
- customElement('atomic-search-layout'),
49
- injectStylesForNoShadowDOM
49
+ customElement('atomic-search-layout')
50
50
  ], AtomicSearchLayout);
51
51
  export { AtomicSearchLayout };
@@ -3,7 +3,7 @@ function getWindow() {
3
3
  }
4
4
  export function getAtomicEnvironment(headlessVersion) {
5
5
  return {
6
- version: "3.33.3-pre.ee24f8bd85",
6
+ version: "3.33.3-pre.f230cfebef",
7
7
  headlessVersion,
8
8
  };
9
9
  }
@@ -1,11 +1,5 @@
1
- var __decorate = (this && this.__decorate) || function (decorators, target, key, desc) {
2
- var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;
3
- if (typeof Reflect === "object" && typeof Reflect.decorate === "function") r = Reflect.decorate(decorators, target, key, desc);
4
- else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;
5
- return c > 3 && r && Object.defineProperty(target, key, r), r;
6
- };
7
- import { hideEmptySection } from "../utils/item-section-utils";
8
- import { injectStylesForNoShadowDOM } from '../decorators/inject-styles-for-no-shadow-dom.js';
1
+ import { hideEmptySection } from '../utils/item-section-utils.js';
2
+ import { LightDomMixin } from './light-dom.js';
9
3
  /**
10
4
  * Mixin for product section components that provides common functionality.
11
5
  * All product section components extend LitElement and call hideEmptySection in updated().
@@ -15,14 +9,11 @@ import { injectStylesForNoShadowDOM } from '../decorators/inject-styles-for-no-s
15
9
  * @returns A class that extends the superClass with product section functionality
16
10
  */
17
11
  export function ItemSectionMixin(superClass, styles) {
18
- let ProductSectionMixinClass = class ProductSectionMixinClass extends superClass {
12
+ class ProductSectionMixinClass extends LightDomMixin(superClass) {
19
13
  updated() {
20
14
  hideEmptySection(this);
21
15
  }
22
- };
16
+ }
23
17
  ProductSectionMixinClass.styles = styles;
24
- ProductSectionMixinClass = __decorate([
25
- injectStylesForNoShadowDOM
26
- ], ProductSectionMixinClass);
27
18
  return ProductSectionMixinClass;
28
19
  }
@@ -0,0 +1,70 @@
1
+ /**
2
+ * Mixin that provides dynamic styles injection functionality for components that do not use Shadow DOM.
3
+ *
4
+ * Usage:
5
+ * class MyComponent extends LightDomMixin(LitElement) {
6
+ * static styles = css`div { color: blue; }`;
7
+ * render() { return html`<div>content</div>`; }
8
+ * }
9
+ *
10
+ * Features:
11
+ * - Automatically injects static styles from the component's `styles` property in `connectedCallback`
12
+ * - Exposes an `injectStyles` method that can be called manually with dynamic styles
13
+ * - Prevents duplicate style injection by checking for existing style sheets
14
+ * - Overrides `createRenderRoot` to return `this` (disabling Shadow DOM)
15
+ *
16
+ * @param superClass - The base class to extend (must be a LitElement constructor)
17
+ * @returns A class that extends the superClass with dynamic styles injection functionality
18
+ */
19
+ export const LightDomMixin = (superClass) => {
20
+ class LightDomMixinClass extends superClass {
21
+ createRenderRoot() {
22
+ return this;
23
+ }
24
+ connectedCallback() {
25
+ super.connectedCallback();
26
+ this.injectStyles();
27
+ }
28
+ /**
29
+ * Injects styles into the document or shadow root.
30
+ *
31
+ * When called without arguments, injects the component's static styles.
32
+ * When called with dynamic styles, injects both static and dynamic styles.
33
+ *
34
+ * @param dynamicStyles - Optional dynamic styles to inject along with static styles
35
+ */
36
+ async injectStyles(dynamicStyles) {
37
+ const parent = this.getRootNode();
38
+ const isDocumentOrShadowRoot = parent instanceof Document || parent instanceof ShadowRoot;
39
+ if (!isDocumentOrShadowRoot) {
40
+ return;
41
+ }
42
+ const constructorStyles = this.constructor.styles;
43
+ const staticStyles = Array.isArray(constructorStyles)
44
+ ? constructorStyles
45
+ : [constructorStyles];
46
+ const dynamicStylesArray = Array.isArray(dynamicStyles)
47
+ ? dynamicStyles
48
+ : [dynamicStyles];
49
+ const allStyles = [...staticStyles, ...dynamicStylesArray];
50
+ for (const style of allStyles) {
51
+ if (style) {
52
+ const styleSheet = this.getStyleSheet(style);
53
+ if (styleSheet && !parent.adoptedStyleSheets.includes(styleSheet)) {
54
+ parent.adoptedStyleSheets.push(styleSheet);
55
+ }
56
+ }
57
+ }
58
+ }
59
+ getStyleSheet(style) {
60
+ if (style instanceof CSSStyleSheet) {
61
+ return style;
62
+ }
63
+ if (style && typeof style === 'object' && 'styleSheet' in style) {
64
+ return style.styleSheet;
65
+ }
66
+ return null;
67
+ }
68
+ }
69
+ return LightDomMixinClass;
70
+ };