@tet/tet-components 1.3.68-testing → 1.3.69-production

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 (493) hide show
  1. package/dist/cjs/{address-41ac19c2.js → address-7fde1462.js} +1 -1
  2. package/dist/cjs/{assets-0bdcfba7.js → assets-81eb2ab8.js} +1 -1
  3. package/dist/cjs/{async-request-42567909.js → async-request-f7162bb5.js} +1 -1
  4. package/dist/cjs/compare-cards-tab-products-filters-6a634be2.js +96 -0
  5. package/dist/cjs/{http-codes-bec9330b.js → http-codes-5b982e01.js} +2 -2
  6. package/dist/cjs/{index-84ede372.js → index-457201e1.js} +1 -1
  7. package/dist/cjs/{index-f559cb2e.js → index-66913c99.js} +11 -7
  8. package/dist/cjs/loader.cjs.js +2 -2
  9. package/dist/cjs/{old-utils-ff6ab3d4.js → old-utils-4ba8b736.js} +1 -1
  10. package/dist/cjs/{phone-96a87ac9.js → phone-54eba6d6.js} +2 -2
  11. package/dist/cjs/tet-accordion.cjs.entry.js +7 -7
  12. package/dist/cjs/{tet-compare-card_4.cjs.entry.js → tet-address-offers-filters-products_4.cjs.entry.js} +234 -554
  13. package/dist/cjs/tet-address-offers-view.cjs.entry.js +7 -7
  14. package/dist/cjs/tet-address-offers_4.cjs.entry.js +110 -105
  15. package/dist/cjs/tet-address-search.cjs.entry.js +7 -7
  16. package/dist/cjs/tet-asset-addresses.cjs.entry.js +3 -3
  17. package/dist/cjs/tet-autocomplete-dropdown.cjs.entry.js +2 -2
  18. package/dist/cjs/tet-autocomplete_2.cjs.entry.js +4 -4
  19. package/dist/cjs/tet-b2b-service-calculator.cjs.entry.js +4 -4
  20. package/dist/cjs/tet-banner-nav.cjs.entry.js +3 -3
  21. package/dist/cjs/tet-bar-graph.cjs.entry.js +1 -1
  22. package/dist/cjs/tet-border-radius.cjs.entry.js +2 -2
  23. package/dist/cjs/tet-business-card.cjs.entry.js +1 -1
  24. package/dist/cjs/tet-business-compare-card.cjs.entry.js +3 -3
  25. package/dist/cjs/tet-business-lines.cjs.entry.js +5 -5
  26. package/dist/cjs/tet-business-round-stepper.cjs.entry.js +1 -1
  27. package/dist/cjs/tet-button.cjs.entry.js +1 -1
  28. package/dist/cjs/tet-card-list.cjs.entry.js +5 -5
  29. package/dist/cjs/tet-carousel.cjs.entry.js +3 -3
  30. package/dist/cjs/tet-checkbox.cjs.entry.js +1 -1
  31. package/dist/cjs/tet-cloud-application-form-dialog.cjs.entry.js +3 -3
  32. package/dist/cjs/tet-cloud-configurator.cjs.entry.js +3 -3
  33. package/dist/cjs/tet-colors.cjs.entry.js +5 -5
  34. package/dist/cjs/tet-compare-cards-tab.cjs.entry.js +32 -18
  35. package/dist/cjs/{tet-compare-cards.cjs.entry.js → tet-compare-cards_2.cjs.entry.js} +140 -7
  36. package/dist/cjs/tet-components.cjs.js +2 -2
  37. package/dist/cjs/tet-contact-form.cjs.entry.js +6 -6
  38. package/dist/cjs/tet-contact-info.cjs.entry.js +1 -1
  39. package/dist/cjs/tet-container_2.cjs.entry.js +1 -1
  40. package/dist/cjs/tet-customer-assets.cjs.entry.js +4 -4
  41. package/dist/cjs/tet-datepicker-header_4.cjs.entry.js +6 -6
  42. package/dist/cjs/tet-datepicker.cjs.entry.js +5 -5
  43. package/dist/cjs/tet-dialog.cjs.entry.js +3 -3
  44. package/dist/cjs/tet-expandable-input.cjs.entry.js +1 -1
  45. package/dist/cjs/tet-expansion-panel.cjs.entry.js +2 -2
  46. package/dist/cjs/tet-font-weight.cjs.entry.js +2 -2
  47. package/dist/cjs/tet-fonts.cjs.entry.js +2 -2
  48. package/dist/cjs/tet-grid.cjs.entry.js +2 -2
  49. package/dist/cjs/tet-icon.cjs.entry.js +3 -3
  50. package/dist/cjs/tet-inline-message.cjs.entry.js +1 -1
  51. package/dist/cjs/tet-input.cjs.entry.js +3 -3
  52. package/dist/cjs/tet-label.cjs.entry.js +5 -5
  53. package/dist/cjs/tet-layout.cjs.entry.js +2 -2
  54. package/dist/cjs/tet-link.cjs.entry.js +2 -2
  55. package/dist/cjs/tet-loader.cjs.entry.js +2 -2
  56. package/dist/cjs/tet-macd-view.cjs.entry.js +6 -6
  57. package/dist/cjs/tet-menu-mobile.cjs.entry.js +1 -1
  58. package/dist/cjs/tet-menu.cjs.entry.js +1 -1
  59. package/dist/cjs/tet-multi-step-dialog.cjs.entry.js +4 -4
  60. package/dist/cjs/tet-navigation-mobile.cjs.entry.js +4 -4
  61. package/dist/cjs/tet-news-card-list.cjs.entry.js +2 -2
  62. package/dist/cjs/tet-notification.cjs.entry.js +2 -2
  63. package/dist/cjs/tet-number-input_2.cjs.entry.js +4 -4
  64. package/dist/cjs/tet-placeholder.cjs.entry.js +2 -2
  65. package/dist/cjs/tet-price-view.cjs.entry.js +1 -1
  66. package/dist/cjs/tet-radio.cjs.entry.js +1 -1
  67. package/dist/cjs/tet-range-slider_2.cjs.entry.js +8 -8
  68. package/dist/cjs/tet-referral.cjs.entry.js +7 -7
  69. package/dist/cjs/tet-round-stepper.cjs.entry.js +1 -1
  70. package/dist/cjs/tet-spacing.cjs.entry.js +2 -2
  71. package/dist/cjs/tet-stepper-v2.cjs.entry.js +1 -1
  72. package/dist/cjs/tet-stepper-v3.cjs.entry.js +6 -3
  73. package/dist/cjs/tet-stepper.cjs.entry.js +1 -1
  74. package/dist/cjs/tet-tab-header.cjs.entry.js +434 -0
  75. package/dist/cjs/tet-table.cjs.entry.js +1 -1
  76. package/dist/cjs/tet-tag.cjs.entry.js +44 -0
  77. package/dist/cjs/tet-text-list.cjs.entry.js +1 -1
  78. package/dist/cjs/tet-textarea.cjs.entry.js +3 -3
  79. package/dist/cjs/tet-thank-you-view-v2.cjs.entry.js +3 -3
  80. package/dist/cjs/tet-thank-you-view-v3.cjs.entry.js +4 -4
  81. package/dist/cjs/tet-thank-you-view.cjs.entry.js +1 -1
  82. package/dist/cjs/tet-tooltip.cjs.entry.js +2 -2
  83. package/dist/cjs/tet-tv-gift-block.cjs.entry.js +2 -2
  84. package/dist/cjs/tet-tv-gift-list.cjs.entry.js +3 -3
  85. package/dist/cjs/{theme-wrapper-a5bbadf6.js → theme-wrapper-d753e207.js} +2 -2
  86. package/dist/cjs/{translations-9c00ed63.js → translations-bb8512bf.js} +1 -1
  87. package/dist/collection/collection-manifest.json +1 -0
  88. package/dist/collection/components/advanced/address/tet-address-offers/address-offers.store.js +4 -1
  89. package/dist/collection/components/advanced/address/tet-address-offers/address-product-offers.store.js +21 -0
  90. package/dist/collection/components/advanced/address/tet-address-offers/tet-address-offers.css +58 -0
  91. package/dist/collection/components/advanced/address/tet-address-offers/tet-address-offers.js +115 -83
  92. package/dist/collection/components/advanced/address/tet-address-offers-filters/address-offers-filters.js +21 -8
  93. package/dist/collection/components/advanced/address/tet-address-offers-filters-products/address-offers-products-filters.js +95 -0
  94. package/dist/collection/components/advanced/address/tet-address-offers-filters-products/test/tet-address-offers-filters-products.spec.js +23 -0
  95. package/dist/collection/components/advanced/address/tet-address-offers-filters-products/tet-address-offers-filters-products.css +411 -0
  96. package/dist/collection/components/advanced/address/tet-address-offers-filters-products/tet-address-offers-filters-products.js +314 -0
  97. package/dist/collection/components/advanced/address/tet-address-search/tet-address-search.js +3 -3
  98. package/dist/collection/components/advanced/address/tet-autocomplete-dropdown/tet-autocomplete-dropdown.js +1 -1
  99. package/dist/collection/components/advanced/cards/tet-business-compare-card/tet-business-compare-card.js +2 -2
  100. package/dist/collection/components/advanced/cards/tet-card-list/tet-card-list.js +4 -4
  101. package/dist/collection/components/advanced/cards/tet-compare-card/test/tet-compare-card.spec.js +6 -0
  102. package/dist/collection/components/advanced/cards/tet-compare-card/tet-compare-card.css +8 -0
  103. package/dist/collection/components/advanced/cards/tet-compare-card/tet-compare-card.js +23 -3
  104. package/dist/collection/components/advanced/cards/tet-compare-cards/tet-compare-cards.css +0 -1
  105. package/dist/collection/components/advanced/cards/tet-compare-cards/tet-compare-cards.js +3 -3
  106. package/dist/collection/components/advanced/cards/tet-compare-cards-tab/compare-cards-tab-products-filters.js +93 -0
  107. package/dist/collection/components/advanced/cards/tet-compare-cards-tab/tet-compare-cards-tab.css +5 -0
  108. package/dist/collection/components/advanced/cards/tet-compare-cards-tab/tet-compare-cards-tab.js +30 -15
  109. package/dist/collection/components/advanced/customer/tet-customer-assets/tet-customer-assets.js +1 -1
  110. package/dist/collection/components/advanced/customer/tet-referral/tet-referral.js +2 -2
  111. package/dist/collection/components/advanced/dialog/tet-multi-step-dialog/tet-multi-step-dialog.js +1 -1
  112. package/dist/collection/components/advanced/forms/tet-availability-contact-form/tet-availability-contact-form.js +1 -1
  113. package/dist/collection/components/advanced/forms/tet-contact-form/tet-contact-form.js +1 -1
  114. package/dist/collection/components/advanced/promotions/tv-gift/tet-tv-gift-block/tet-tv-gift-block.js +1 -1
  115. package/dist/collection/components/advanced/promotions/tv-gift/tet-tv-gift-list/tet-tv-gift-list.js +2 -2
  116. package/dist/collection/components/basic/buttons/tet-tabs/tet-tab-content/tet-tab-content.js +2 -2
  117. package/dist/collection/components/basic/buttons/tet-tabs/tet-tab-header/tet-tab-header.js +2 -2
  118. package/dist/collection/components/basic/buttons/tet-tag/tet-tag.css +19 -3
  119. package/dist/collection/components/basic/buttons/tet-tag/tet-tag.js +21 -2
  120. package/dist/collection/components/basic/buttons/tet-tag-group/tet-tag-group.js +2 -2
  121. package/dist/collection/components/basic/carousel/tet-carousel/tet-carousel.js +2 -2
  122. package/dist/collection/components/basic/icon/tet-icon.js +1 -1
  123. package/dist/collection/components/basic/loaders/tet-loader/tet-loader.js +1 -1
  124. package/dist/collection/components/basic/loaders/tet-placeholder/tet-placeholder.js +1 -1
  125. package/dist/collection/components/basic/loaders/tet-spinner/tet-spinner.js +3 -3
  126. package/dist/collection/components/basic/misc/tet-label/tet-label.js +2 -2
  127. package/dist/collection/components/basic/steppers/tet-stepper-v3/tet-stepper-v3.css +34 -7
  128. package/dist/collection/components/basic/steppers/tet-stepper-v3/tet-stepper-v3.js +4 -1
  129. package/dist/collection/components/simple/inputs/tet-datepicker/partials/tet-datepicker-header/tet-datepicker-header.js +2 -2
  130. package/dist/collection/components/simple/inputs/tet-datepicker/partials/tet-datepicker-month-view/tet-datepicker-month-view.js +1 -1
  131. package/dist/collection/components/simple/inputs/tet-datepicker/partials/tet-datepicker-multi-year-view/tet-datepicker-multi-year-view.js +1 -1
  132. package/dist/collection/components/simple/inputs/tet-datepicker/partials/tet-datepicker-year-view/tet-datepicker-year-view.js +1 -1
  133. package/dist/collection/components/simple/inputs/tet-datepicker/tet-datepicker.js +4 -4
  134. package/dist/collection/components/simple/inputs/tet-range-slider/tet-range-slider.js +7 -7
  135. package/dist/collection/components/simple/inputs/tet-stepper-input/tet-stepper-input.js +1 -1
  136. package/dist/collection/components/simple/inputs/tet-textarea/tet-textarea.js +2 -2
  137. package/dist/collection/components/simple/lists/tet-news-card-list/tet-news-card-list.js +1 -1
  138. package/dist/collection/components/simple/menu/tet-navigation-mobile/tet-navigation-mobile.js +3 -3
  139. package/dist/collection/components/simple/structural/tet-accordion/tet-accordion.js +6 -6
  140. package/dist/collection/components/simple/structural/tet-expansion-panel/tet-expansion-panel.js +1 -1
  141. package/dist/collection/components/simple/text-blocks/tet-notification/tet-notification.js +1 -1
  142. package/dist/collection/components/simple/text-blocks/tet-tooltip/tet-tooltip.js +1 -1
  143. package/dist/collection/components/views/tet-address-offers-view/tet-address-offers-view.css +2 -4
  144. package/dist/collection/components/views/tet-address-offers-view/tet-address-offers-view.js +3 -3
  145. package/dist/collection/components/views/tet-b2b-service-calculator/tet-b2b-service-calculator.js +1 -1
  146. package/dist/collection/components/views/tet-business-lines/tet-business-lines.js +1 -1
  147. package/dist/collection/components/views/tet-thank-you-view-v3/tet-thank-you-view-v3.css +12 -4
  148. package/dist/collection/docs/styling/border-radius/tet-border-radius.js +1 -1
  149. package/dist/collection/docs/styling/colors/tet-colors.js +4 -4
  150. package/dist/collection/docs/styling/font-weight/tet-font-weight.js +1 -1
  151. package/dist/collection/docs/styling/fonts/tet-fonts.js +1 -1
  152. package/dist/collection/docs/styling/layout/tet-layout.js +1 -1
  153. package/dist/collection/docs/styling/link/tet-link.js +1 -1
  154. package/dist/collection/docs/styling/spacing/tet-spacing.js +1 -1
  155. package/dist/collection/docs/styling/tet-grid/tet-grid.js +1 -1
  156. package/dist/components/index.js +3 -1
  157. package/dist/components/{p-1c3075c7.js → p-004a1783.js} +2 -2
  158. package/dist/components/{p-1f8c84e9.js → p-03e69bb8.js} +2 -2
  159. package/dist/components/{p-13051901.js → p-06f249ce.js} +3 -3
  160. package/dist/components/{p-72dc8bb7.js → p-084b6798.js} +1 -1
  161. package/dist/components/{p-8bf4c1bc.js → p-15c94fd5.js} +2 -2
  162. package/dist/components/{p-4c25d5fb.js → p-1d44a94e.js} +3 -3
  163. package/dist/components/{p-cd8f3a84.js → p-1e39449b.js} +3 -3
  164. package/dist/components/{p-fde9ecef.js → p-3032ed77.js} +5 -5
  165. package/dist/components/{p-93e9c848.js → p-36109fb0.js} +13 -13
  166. package/dist/components/{p-aea191fd.js → p-38ad9047.js} +2 -2
  167. package/dist/components/{p-ceb45b17.js → p-3919b539.js} +4 -4
  168. package/dist/components/{p-74ff4f72.js → p-3e987c51.js} +1 -1
  169. package/dist/components/{p-8caa2e3e.js → p-430ff09c.js} +2 -2
  170. package/dist/components/{p-c44c8848.js → p-480ccc8d.js} +2 -2
  171. package/dist/components/{p-a0d406ca.js → p-4d00761a.js} +1 -1
  172. package/dist/components/{p-4f1c7348.js → p-505aaed1.js} +8 -6
  173. package/dist/components/{p-470276e6.js → p-5841617c.js} +1 -1
  174. package/dist/components/{p-37ed3ebb.js → p-599035b8.js} +1 -1
  175. package/dist/components/{p-50f47d0c.js → p-5d62e662.js} +5 -5
  176. package/dist/components/{p-fe0cc309.js → p-5e6c2118.js} +10 -10
  177. package/dist/components/{p-d0c96e9c.js → p-5e9de7d5.js} +3 -3
  178. package/dist/components/{p-ed7db4de.js → p-618e07b7.js} +2 -2
  179. package/dist/components/{p-b215fe36.js → p-680ce735.js} +1 -1
  180. package/dist/components/{p-39e60f54.js → p-6e0f6f88.js} +2 -2
  181. package/dist/components/{p-5cba049c.js → p-77f8b5db.js} +11 -11
  182. package/dist/components/{p-a63d3582.js → p-798cf5b6.js} +3 -3
  183. package/dist/components/{p-22444d39.js → p-7ef501a2.js} +7 -7
  184. package/dist/components/{p-ae1f41ee.js → p-84b6941e.js} +1 -1
  185. package/dist/components/p-8a25fdd3.js +360 -0
  186. package/dist/components/{p-9361fcb4.js → p-94622def.js} +7 -4
  187. package/dist/components/{p-a16b2429.js → p-95d6c397.js} +7 -7
  188. package/dist/components/{p-e51cbb09.js → p-97c791b8.js} +2 -2
  189. package/dist/components/{p-b5c85303.js → p-9a3121bc.js} +2 -2
  190. package/dist/components/{p-8c37c237.js → p-9bc13031.js} +1 -1
  191. package/dist/components/{p-f854817f.js → p-a22521b3.js} +1 -1
  192. package/dist/components/{p-3b3af880.js → p-a2f0236d.js} +4 -4
  193. package/dist/components/{p-aca37faa.js → p-a7cf4a7a.js} +7 -7
  194. package/dist/components/{p-9cb78c6f.js → p-ab1270fa.js} +103 -105
  195. package/dist/components/{p-f7de89c3.js → p-b38f9875.js} +3 -3
  196. package/dist/components/{p-447e727f.js → p-b9bc2f1a.js} +26 -10
  197. package/dist/components/{p-6f457b76.js → p-c753ab82.js} +1 -1
  198. package/dist/components/{p-139b55b9.js → p-ca44877c.js} +3 -3
  199. package/dist/components/{p-2e1448b5.js → p-cd90d45c.js} +3 -3
  200. package/dist/components/{p-80cbecdd.js → p-e165a4cc.js} +13 -13
  201. package/dist/components/{p-72b8586b.js → p-e2f0e8da.js} +1 -1
  202. package/dist/components/{p-8b7e53db.js → p-e5451722.js} +12 -9
  203. package/dist/components/{p-815407aa.js → p-ec157aef.js} +2 -2
  204. package/dist/components/{p-a6d99476.js → p-f60762e2.js} +3 -3
  205. package/dist/components/{p-c3552274.js → p-fbea31dc.js} +2 -2
  206. package/dist/components/{p-ffeb7385.js → p-ff2a5e22.js} +3 -3
  207. package/dist/components/tet-accordion.js +8 -8
  208. package/dist/components/tet-address-offers-filters-products.d.ts +11 -0
  209. package/dist/components/tet-address-offers-filters-products.js +6 -0
  210. package/dist/components/tet-address-offers-filters.js +1 -1
  211. package/dist/components/tet-address-offers-view.js +48 -54
  212. package/dist/components/tet-address-offers.js +1 -1
  213. package/dist/components/tet-address-search.js +1 -1
  214. package/dist/components/tet-asset-addresses.js +13 -13
  215. package/dist/components/tet-asset-availability-addresses.js +1 -1
  216. package/dist/components/tet-autocomplete-dropdown.js +6 -6
  217. package/dist/components/tet-autocomplete.js +1 -1
  218. package/dist/components/tet-availability-contact-form.js +1 -1
  219. package/dist/components/tet-b2b-service-calculator.js +9 -9
  220. package/dist/components/tet-banner-nav.js +3 -3
  221. package/dist/components/tet-bar-graph.js +1 -1
  222. package/dist/components/tet-border-radius.js +2 -2
  223. package/dist/components/tet-business-card.js +1 -1
  224. package/dist/components/tet-business-compare-card.js +5 -5
  225. package/dist/components/tet-business-lines.js +6 -6
  226. package/dist/components/tet-business-round-stepper.js +2 -2
  227. package/dist/components/tet-button.js +1 -1
  228. package/dist/components/tet-card-list.js +1 -1
  229. package/dist/components/tet-carousel.js +5 -5
  230. package/dist/components/tet-checkbox.js +1 -1
  231. package/dist/components/tet-cloud-application-form-dialog.js +8 -8
  232. package/dist/components/tet-cloud-configurator.js +11 -11
  233. package/dist/components/tet-colors.js +5 -5
  234. package/dist/components/tet-compare-card.js +1 -1
  235. package/dist/components/tet-compare-cards-tab.js +69 -37
  236. package/dist/components/tet-compare-cards.js +1 -1
  237. package/dist/components/tet-contact-form.js +10 -10
  238. package/dist/components/tet-contact-info.js +1 -1
  239. package/dist/components/tet-container.js +1 -1
  240. package/dist/components/tet-customer-assets.js +9 -9
  241. package/dist/components/tet-datepicker-header.js +1 -1
  242. package/dist/components/tet-datepicker-month-view.js +1 -1
  243. package/dist/components/tet-datepicker-multi-year-view.js +1 -1
  244. package/dist/components/tet-datepicker-year-view.js +1 -1
  245. package/dist/components/tet-datepicker.js +10 -10
  246. package/dist/components/tet-dialog.js +1 -1
  247. package/dist/components/tet-dropdown.js +1 -1
  248. package/dist/components/tet-expandable-input.js +3 -3
  249. package/dist/components/tet-expansion-panel.js +2 -2
  250. package/dist/components/tet-font-weight.js +2 -2
  251. package/dist/components/tet-fonts.js +2 -2
  252. package/dist/components/tet-grid.js +2 -2
  253. package/dist/components/tet-icon.js +1 -1
  254. package/dist/components/tet-inline-message.js +2 -2
  255. package/dist/components/tet-input.js +1 -1
  256. package/dist/components/tet-label.js +5 -5
  257. package/dist/components/tet-layout.js +2 -2
  258. package/dist/components/tet-link.js +2 -2
  259. package/dist/components/tet-loader.js +1 -1
  260. package/dist/components/tet-macd-view.js +11 -11
  261. package/dist/components/tet-menu-mobile.js +2 -2
  262. package/dist/components/tet-menu.js +2 -2
  263. package/dist/components/tet-multi-step-dialog.js +6 -6
  264. package/dist/components/tet-navigation-mobile.js +5 -5
  265. package/dist/components/tet-news-card-list.js +5 -5
  266. package/dist/components/tet-notification.js +1 -1
  267. package/dist/components/tet-number-input.js +1 -1
  268. package/dist/components/tet-placeholder.js +1 -1
  269. package/dist/components/tet-price-view.js +1 -1
  270. package/dist/components/tet-radio.js +1 -1
  271. package/dist/components/tet-range-slider.js +1 -1
  272. package/dist/components/tet-referral.js +9 -9
  273. package/dist/components/tet-round-stepper.js +2 -2
  274. package/dist/components/tet-selection-list.js +1 -1
  275. package/dist/components/tet-spacing.js +2 -2
  276. package/dist/components/tet-spinner.js +1 -1
  277. package/dist/components/tet-stepper-input.js +1 -1
  278. package/dist/components/tet-stepper-v2.js +1 -1
  279. package/dist/components/tet-stepper-v3.js +1 -1
  280. package/dist/components/tet-stepper.js +1 -1
  281. package/dist/components/tet-switch.js +1 -1
  282. package/dist/components/tet-tab-content.js +1 -1
  283. package/dist/components/tet-tab-header.js +1 -1
  284. package/dist/components/tet-table.js +3 -3
  285. package/dist/components/tet-tag-group.js +1 -1
  286. package/dist/components/tet-tag.js +1 -1
  287. package/dist/components/tet-text-list.js +1 -1
  288. package/dist/components/tet-textarea.js +3 -3
  289. package/dist/components/tet-thank-you-view-v2.js +5 -5
  290. package/dist/components/tet-thank-you-view-v3.js +6 -6
  291. package/dist/components/tet-thank-you-view.js +4 -4
  292. package/dist/components/tet-tooltip.js +1 -1
  293. package/dist/components/tet-tv-gift-block.js +2 -2
  294. package/dist/components/tet-tv-gift-list.js +4 -4
  295. package/dist/esm/{address-9dfd3c9e.js → address-446e44d1.js} +1 -1
  296. package/dist/esm/{assets-c074d2b9.js → assets-fba60496.js} +1 -1
  297. package/dist/esm/{async-request-754d6810.js → async-request-3be8369e.js} +1 -1
  298. package/dist/esm/compare-cards-tab-products-filters-094fdd08.js +94 -0
  299. package/dist/esm/{http-codes-42779195.js → http-codes-94d247ea.js} +2 -2
  300. package/dist/esm/{index-7f1e2a22.js → index-ce62f11b.js} +11 -7
  301. package/dist/esm/{index-1bf36cb9.js → index-d502e34e.js} +1 -1
  302. package/dist/esm/loader.js +3 -3
  303. package/dist/esm/{old-utils-e93e9607.js → old-utils-bb8e99c5.js} +1 -1
  304. package/dist/esm/{phone-66ff151d.js → phone-3dfebff1.js} +2 -2
  305. package/dist/esm/tet-accordion.entry.js +7 -7
  306. package/dist/esm/{tet-compare-card_4.entry.js → tet-address-offers-filters-products_4.entry.js} +233 -553
  307. package/dist/esm/tet-address-offers-view.entry.js +7 -7
  308. package/dist/esm/tet-address-offers_4.entry.js +110 -105
  309. package/dist/esm/tet-address-search.entry.js +7 -7
  310. package/dist/esm/tet-asset-addresses.entry.js +3 -3
  311. package/dist/esm/tet-autocomplete-dropdown.entry.js +2 -2
  312. package/dist/esm/tet-autocomplete_2.entry.js +4 -4
  313. package/dist/esm/tet-b2b-service-calculator.entry.js +4 -4
  314. package/dist/esm/tet-banner-nav.entry.js +3 -3
  315. package/dist/esm/tet-bar-graph.entry.js +1 -1
  316. package/dist/esm/tet-border-radius.entry.js +2 -2
  317. package/dist/esm/tet-business-card.entry.js +1 -1
  318. package/dist/esm/tet-business-compare-card.entry.js +3 -3
  319. package/dist/esm/tet-business-lines.entry.js +5 -5
  320. package/dist/esm/tet-business-round-stepper.entry.js +1 -1
  321. package/dist/esm/tet-button.entry.js +1 -1
  322. package/dist/esm/tet-card-list.entry.js +5 -5
  323. package/dist/esm/tet-carousel.entry.js +3 -3
  324. package/dist/esm/tet-checkbox.entry.js +1 -1
  325. package/dist/esm/tet-cloud-application-form-dialog.entry.js +3 -3
  326. package/dist/esm/tet-cloud-configurator.entry.js +3 -3
  327. package/dist/esm/tet-colors.entry.js +5 -5
  328. package/dist/esm/tet-compare-cards-tab.entry.js +32 -18
  329. package/dist/esm/{tet-compare-cards.entry.js → tet-compare-cards_2.entry.js} +140 -8
  330. package/dist/esm/tet-components.js +3 -3
  331. package/dist/esm/tet-contact-form.entry.js +6 -6
  332. package/dist/esm/tet-contact-info.entry.js +1 -1
  333. package/dist/esm/tet-container_2.entry.js +1 -1
  334. package/dist/esm/tet-customer-assets.entry.js +4 -4
  335. package/dist/esm/tet-datepicker-header_4.entry.js +6 -6
  336. package/dist/esm/tet-datepicker.entry.js +5 -5
  337. package/dist/esm/tet-dialog.entry.js +3 -3
  338. package/dist/esm/tet-expandable-input.entry.js +1 -1
  339. package/dist/esm/tet-expansion-panel.entry.js +2 -2
  340. package/dist/esm/tet-font-weight.entry.js +2 -2
  341. package/dist/esm/tet-fonts.entry.js +2 -2
  342. package/dist/esm/tet-grid.entry.js +2 -2
  343. package/dist/esm/tet-icon.entry.js +3 -3
  344. package/dist/esm/tet-inline-message.entry.js +1 -1
  345. package/dist/esm/tet-input.entry.js +3 -3
  346. package/dist/esm/tet-label.entry.js +5 -5
  347. package/dist/esm/tet-layout.entry.js +2 -2
  348. package/dist/esm/tet-link.entry.js +2 -2
  349. package/dist/esm/tet-loader.entry.js +2 -2
  350. package/dist/esm/tet-macd-view.entry.js +6 -6
  351. package/dist/esm/tet-menu-mobile.entry.js +1 -1
  352. package/dist/esm/tet-menu.entry.js +1 -1
  353. package/dist/esm/tet-multi-step-dialog.entry.js +4 -4
  354. package/dist/esm/tet-navigation-mobile.entry.js +4 -4
  355. package/dist/esm/tet-news-card-list.entry.js +2 -2
  356. package/dist/esm/tet-notification.entry.js +2 -2
  357. package/dist/esm/tet-number-input_2.entry.js +4 -4
  358. package/dist/esm/tet-placeholder.entry.js +2 -2
  359. package/dist/esm/tet-price-view.entry.js +1 -1
  360. package/dist/esm/tet-radio.entry.js +1 -1
  361. package/dist/esm/tet-range-slider_2.entry.js +8 -8
  362. package/dist/esm/tet-referral.entry.js +7 -7
  363. package/dist/esm/tet-round-stepper.entry.js +1 -1
  364. package/dist/esm/tet-spacing.entry.js +2 -2
  365. package/dist/esm/tet-stepper-v2.entry.js +1 -1
  366. package/dist/esm/tet-stepper-v3.entry.js +6 -3
  367. package/dist/esm/tet-stepper.entry.js +1 -1
  368. package/dist/esm/tet-tab-header.entry.js +430 -0
  369. package/dist/esm/tet-table.entry.js +1 -1
  370. package/dist/esm/tet-tag.entry.js +40 -0
  371. package/dist/esm/tet-text-list.entry.js +1 -1
  372. package/dist/esm/tet-textarea.entry.js +3 -3
  373. package/dist/esm/tet-thank-you-view-v2.entry.js +3 -3
  374. package/dist/esm/tet-thank-you-view-v3.entry.js +4 -4
  375. package/dist/esm/tet-thank-you-view.entry.js +1 -1
  376. package/dist/esm/tet-tooltip.entry.js +2 -2
  377. package/dist/esm/tet-tv-gift-block.entry.js +2 -2
  378. package/dist/esm/tet-tv-gift-list.entry.js +3 -3
  379. package/dist/esm/{theme-wrapper-6e6b2089.js → theme-wrapper-bf063190.js} +2 -2
  380. package/dist/esm/{translations-5c723a5f.js → translations-7cd34c7f.js} +1 -1
  381. package/dist/tet-components/{p-5786fab1.entry.js → p-06f46328.entry.js} +1 -1
  382. package/dist/tet-components/{p-325515ed.entry.js → p-070a8a51.entry.js} +1 -1
  383. package/dist/tet-components/{p-2de3f58f.entry.js → p-08a4652a.entry.js} +1 -1
  384. package/dist/tet-components/{p-d6c31a48.entry.js → p-0ae0c699.entry.js} +1 -1
  385. package/dist/tet-components/{p-f55a4508.entry.js → p-0bc0b0a2.entry.js} +1 -1
  386. package/dist/tet-components/p-0bec7586.entry.js +1 -0
  387. package/dist/tet-components/{p-87b47774.js → p-0d1e7cd6.js} +1 -1
  388. package/dist/tet-components/{p-faaf4f9e.entry.js → p-0e9714d1.entry.js} +1 -1
  389. package/dist/tet-components/{p-e0bb4410.entry.js → p-0f364200.entry.js} +1 -1
  390. package/dist/tet-components/{p-6a703ebb.entry.js → p-1097442d.entry.js} +1 -1
  391. package/dist/tet-components/{p-433fa62c.entry.js → p-11437185.entry.js} +1 -1
  392. package/dist/tet-components/{p-ca27b8cd.entry.js → p-14a302cb.entry.js} +1 -1
  393. package/dist/tet-components/{p-95877586.entry.js → p-14ea4439.entry.js} +1 -1
  394. package/dist/tet-components/{p-c4ba2330.entry.js → p-18e44b52.entry.js} +1 -1
  395. package/dist/tet-components/{p-8d198756.entry.js → p-1976e991.entry.js} +1 -1
  396. package/dist/tet-components/{p-bc1748c1.entry.js → p-1a5ed4b2.entry.js} +1 -1
  397. package/dist/tet-components/p-1d14c865.js +2 -0
  398. package/dist/tet-components/{p-3287547c.entry.js → p-20d5a05d.entry.js} +1 -1
  399. package/dist/tet-components/{p-6821b8e3.entry.js → p-239c5d3c.entry.js} +1 -1
  400. package/dist/tet-components/{p-82f39730.entry.js → p-251db7ef.entry.js} +1 -1
  401. package/dist/tet-components/{p-3dd44730.entry.js → p-2566226a.entry.js} +1 -1
  402. package/dist/tet-components/{p-4026fd82.entry.js → p-296f1706.entry.js} +1 -1
  403. package/dist/tet-components/{p-a96ad9aa.entry.js → p-30c078c5.entry.js} +1 -1
  404. package/dist/tet-components/{p-428dff99.entry.js → p-337cac3f.entry.js} +1 -1
  405. package/dist/tet-components/{p-520c7411.entry.js → p-34c9374c.entry.js} +1 -1
  406. package/dist/tet-components/{p-c47d5e36.entry.js → p-3659fe95.entry.js} +1 -1
  407. package/dist/tet-components/{p-257ee876.entry.js → p-3723442c.entry.js} +1 -1
  408. package/dist/tet-components/{p-dacff13f.entry.js → p-3819d28c.entry.js} +1 -1
  409. package/dist/tet-components/{p-11d5cdb7.entry.js → p-43d1a3f3.entry.js} +1 -1
  410. package/dist/tet-components/{p-1f33c4d8.entry.js → p-4d26aaca.entry.js} +1 -1
  411. package/dist/tet-components/{p-17219f8f.js → p-513c1986.js} +1 -1
  412. package/dist/tet-components/{p-9174fad4.entry.js → p-530d8ebd.entry.js} +1 -1
  413. package/dist/tet-components/{p-ac290b65.entry.js → p-53dfd0d1.entry.js} +1 -1
  414. package/dist/tet-components/{p-d51fb8f0.entry.js → p-5478765f.entry.js} +1 -1
  415. package/dist/tet-components/{p-6b022547.entry.js → p-564b1597.entry.js} +1 -1
  416. package/dist/tet-components/{p-13834305.entry.js → p-565aa846.entry.js} +1 -1
  417. package/dist/tet-components/{p-f52944ee.entry.js → p-571028b6.entry.js} +1 -1
  418. package/dist/tet-components/{p-7123c8cb.js → p-5f102998.js} +1 -1
  419. package/dist/tet-components/p-611377f2.entry.js +1 -0
  420. package/dist/tet-components/{p-138065a5.entry.js → p-616daa7e.entry.js} +1 -1
  421. package/dist/tet-components/p-63b7e0d0.entry.js +1 -0
  422. package/dist/tet-components/{p-b6fc2059.entry.js → p-6439c804.entry.js} +1 -1
  423. package/dist/tet-components/{p-1338b2c9.entry.js → p-652e2b67.entry.js} +1 -1
  424. package/dist/tet-components/{p-99dfcd9d.entry.js → p-683df0c1.entry.js} +1 -1
  425. package/dist/tet-components/{p-9c0ed718.entry.js → p-684d453b.entry.js} +1 -1
  426. package/dist/tet-components/{p-25498380.entry.js → p-6a8ebb69.entry.js} +1 -1
  427. package/dist/tet-components/{p-4b9d2f1e.js → p-6e6dafb1.js} +1 -1
  428. package/dist/tet-components/{p-91aebae3.entry.js → p-74940338.entry.js} +1 -1
  429. package/dist/tet-components/{p-1ae8df7d.js → p-766fd113.js} +1 -1
  430. package/dist/tet-components/p-7b21d33f.entry.js +1 -0
  431. package/dist/tet-components/p-7c136b44.entry.js +1 -0
  432. package/dist/tet-components/{p-8cadf068.entry.js → p-7eecadbc.entry.js} +1 -1
  433. package/dist/tet-components/{p-46a33f5c.entry.js → p-80c10282.entry.js} +1 -1
  434. package/dist/tet-components/{p-07081ea1.entry.js → p-88ff4729.entry.js} +1 -1
  435. package/dist/tet-components/p-8b9f2ed6.js +1 -0
  436. package/dist/tet-components/{p-01d2c9b2.entry.js → p-8e19e1de.entry.js} +1 -1
  437. package/dist/tet-components/{p-0e44600c.entry.js → p-8e59bc6e.entry.js} +1 -1
  438. package/dist/tet-components/{p-10271e23.entry.js → p-8fd66a80.entry.js} +1 -1
  439. package/dist/tet-components/p-a2e7d95d.entry.js +1 -0
  440. package/dist/tet-components/{p-8a211672.entry.js → p-a77d95aa.entry.js} +1 -1
  441. package/dist/tet-components/{p-010608e8.js → p-a9820b87.js} +1 -1
  442. package/dist/tet-components/{p-77372984.js → p-aba811f3.js} +1 -1
  443. package/dist/tet-components/{p-a89b07db.entry.js → p-ae6af193.entry.js} +1 -1
  444. package/dist/tet-components/{p-747fa00c.entry.js → p-b20f2137.entry.js} +1 -1
  445. package/dist/tet-components/{p-8e64a695.entry.js → p-b245b2cf.entry.js} +1 -1
  446. package/dist/tet-components/{p-2024adb8.entry.js → p-b324cfd1.entry.js} +1 -1
  447. package/dist/tet-components/{p-39de75af.js → p-b66cbe8a.js} +1 -1
  448. package/dist/tet-components/{p-f4786b25.entry.js → p-ba9dcdb2.entry.js} +1 -1
  449. package/dist/tet-components/{p-771146d4.entry.js → p-bd19cb33.entry.js} +1 -1
  450. package/dist/tet-components/p-c0be9da7.js +1 -0
  451. package/dist/tet-components/{p-1f61bc97.entry.js → p-c0d1f124.entry.js} +1 -1
  452. package/dist/tet-components/{p-3b5a822d.entry.js → p-c3934b44.entry.js} +1 -1
  453. package/dist/tet-components/{p-9eafff73.entry.js → p-c892bc9f.entry.js} +1 -1
  454. package/dist/tet-components/{p-76fc9aa4.entry.js → p-d96d0258.entry.js} +1 -1
  455. package/dist/tet-components/{p-ff769397.entry.js → p-decb5ec7.entry.js} +1 -1
  456. package/dist/tet-components/{p-8b174961.entry.js → p-df4e82bc.entry.js} +1 -1
  457. package/dist/tet-components/{p-d7b12aa8.entry.js → p-e412616e.entry.js} +1 -1
  458. package/dist/tet-components/{p-dce3f9e4.entry.js → p-e84bba1a.entry.js} +1 -1
  459. package/dist/tet-components/{p-e5a15112.entry.js → p-eab907b1.entry.js} +1 -1
  460. package/dist/tet-components/p-ee684ac3.entry.js +1 -0
  461. package/dist/tet-components/{p-4b3fc9e2.entry.js → p-f1bdb246.entry.js} +1 -1
  462. package/dist/tet-components/{p-121d2baf.entry.js → p-f1e5cd46.entry.js} +1 -1
  463. package/dist/tet-components/{p-d635d4b3.entry.js → p-faff3a4c.entry.js} +1 -1
  464. package/dist/tet-components/{p-3d20ced4.entry.js → p-fc19ac2a.entry.js} +1 -1
  465. package/dist/tet-components/tet-components.esm.js +1 -1
  466. package/dist/types/components/advanced/address/tet-address-offers/address-product-offers.store.d.ts +14 -0
  467. package/dist/types/components/advanced/address/tet-address-offers/tet-address-offers.d.ts +16 -12
  468. package/dist/types/components/advanced/address/tet-address-offers-filters/address-offers-filters.d.ts +2 -0
  469. package/dist/types/components/advanced/address/tet-address-offers-filters-products/address-offers-products-filters.d.ts +25 -0
  470. package/dist/types/components/advanced/address/tet-address-offers-filters-products/tet-address-offers-filters-products.d.ts +70 -0
  471. package/dist/types/components/advanced/cards/old-utils.d.ts +2 -2
  472. package/dist/types/components/advanced/cards/tet-compare-card/tet-compare-card.d.ts +5 -1
  473. package/dist/types/components/advanced/cards/tet-compare-cards/tet-compare-cards.d.ts +1 -0
  474. package/dist/types/components/advanced/cards/tet-compare-cards-tab/compare-cards-tab-products-filters.d.ts +36 -0
  475. package/dist/types/components/advanced/cards/tet-compare-cards-tab/tet-compare-cards-tab.d.ts +13 -5
  476. package/dist/types/components/advanced/cards/utils.d.ts +2 -2
  477. package/dist/types/components/basic/buttons/tet-tag/tet-tag.d.ts +2 -0
  478. package/dist/types/components/basic/buttons/tet-tag-group/tet-tag-group.d.ts +2 -0
  479. package/dist/types/components.d.ts +133 -2
  480. package/dist/types/services/api/index.d.ts +2 -2
  481. package/dist/types/services/api/services/catalog/product-comparison.d.ts +21 -14
  482. package/dist/types/services/api/services/catalog/service-availability-services.d.ts +19 -1
  483. package/package.json +1 -1
  484. package/dist/cjs/tet-tag_2.cjs.entry.js +0 -68
  485. package/dist/esm/tet-tag_2.entry.js +0 -63
  486. package/dist/tet-components/p-1ec7f341.js +0 -2
  487. package/dist/tet-components/p-3053f5a3.entry.js +0 -1
  488. package/dist/tet-components/p-49e636bb.entry.js +0 -1
  489. package/dist/tet-components/p-5d02dddb.entry.js +0 -1
  490. package/dist/tet-components/p-80a612b2.entry.js +0 -1
  491. package/dist/tet-components/p-ad9e7b19.entry.js +0 -1
  492. package/dist/tet-components/p-b2b384d2.js +0 -1
  493. package/dist/tet-components/p-fe5d035f.entry.js +0 -1
@@ -0,0 +1,21 @@
1
+ import { createStore } from "@stencil/store";
2
+ const { state, onChange } = createStore({
3
+ catalog: {
4
+ addressKey: '',
5
+ structure: [],
6
+ productTags: [],
7
+ meta: []
8
+ },
9
+ availableTvProducts: [],
10
+ activeTvFilters: ['']
11
+ });
12
+ function clearFilters() {
13
+ state.activeTvFilters = [''];
14
+ state.availableTvProducts = state.availableTvProducts.map((availableTvFilter) => {
15
+ availableTvFilter.active = availableTvFilter.id === '';
16
+ return availableTvFilter;
17
+ });
18
+ }
19
+ ;
20
+ export default state;
21
+ export { state, onChange, clearFilters };
@@ -472,6 +472,12 @@
472
472
  flex-direction: column;
473
473
  gap: 1rem;
474
474
  }
475
+ .subcategory-filters {
476
+ display: flex;
477
+ justify-content: center;
478
+ margin-top: 1.5rem;
479
+ margin-bottom: 1.5rem;
480
+ }
475
481
 
476
482
  .product {
477
483
  width: 100%;
@@ -485,6 +491,58 @@
485
491
  padding: 0;
486
492
  }
487
493
  }
494
+ .product .upsell-block {
495
+ display: flex;
496
+ flex-direction: column;
497
+ }
498
+ .product .upsell-block--title {
499
+ margin-bottom: 0.5rem;
500
+ font: 500 0.875rem/1.25rem Inter, Gilroy, Arial, sans-serif;
501
+ color: var(--tc-text-secondary);
502
+ }
503
+ .product .upsell-block--title.dark {
504
+ color: rgb(153, 160, 174);
505
+ }
506
+ .product .upsell-block--content {
507
+ background: rgb(255, 255, 255);
508
+ padding: 0.75rem;
509
+ display: flex;
510
+ flex-direction: row;
511
+ align-items: center;
512
+ margin-bottom: 1.5rem;
513
+ border-radius: 0.5rem;
514
+ }
515
+ .product .upsell-block--content.dark {
516
+ background: var(--tc-grey-minus-10-dark);
517
+ }
518
+ .product .upsell-block--icon {
519
+ width: 1.5rem;
520
+ height: 1.5rem;
521
+ margin-right: 0.75rem;
522
+ }
523
+ .product .upsell-block--name {
524
+ color: var(--tc-text-primary);
525
+ font: 500 0.875rem/1.25rem Inter, Gilroy, Arial, sans-serif;
526
+ margin-right: auto;
527
+ }
528
+ .product .upsell-block--name.dark {
529
+ color: var(--tc-grey-110-dark);
530
+ }
531
+ .product .upsell-block--amount {
532
+ color: var(--tc-text-primary);
533
+ font: 500 0.875rem/1.25rem Inter, Gilroy, Arial, sans-serif;
534
+ background: var(--tc-background-secondary);
535
+ border-radius: 0.25rem;
536
+ padding: 0.125rem 0.25rem;
537
+ margin-right: 0.75rem;
538
+ }
539
+ .product .upsell-block--amount.dark {
540
+ background: var(--tc-grey-10-dark);
541
+ color: var(--tc-grey-110-dark);
542
+ }
543
+ .product .upsell-block--tooltip {
544
+ cursor: pointer;
545
+ }
488
546
 
489
547
  .placeholder-section {
490
548
  margin-bottom: 2rem;
@@ -6,11 +6,6 @@ import { generateFormUrl } from "../../../../services/url/build-form-url";
6
6
  import { formatPrice } from "../../../../services/utils/index";
7
7
  import { Host, forceUpdate, h } from "@stencil/core";
8
8
  import { sprintf } from "sprintf-js";
9
- import tetTvPlusLogo from "../../../../assets/images/tet-tv-plus-logo.svg";
10
- import tetTvPlusLogoWhite from "../../../../assets/images/tet-tv-plus-logo-white.svg";
11
- import tetTvLogo from "../../../../assets/images/tet-tv-logo.svg";
12
- import tetTvLogoWhite from "../../../../assets/images/tet-tv-logo-white.svg";
13
- import netflixLogo from "../../../../assets/images/netflix-logo.svg";
14
9
  /**
15
10
  * This component displays the available Tet catalog offers in the given address.
16
11
  */
@@ -31,19 +26,15 @@ export class TetAddressOffers {
31
26
  * @param category
32
27
  */
33
28
  this.filterCategoryProducts = (category) => {
29
+ const filteredCodes = this.subcategoryProductFilters[category.key] || [];
30
+ if (filteredCodes.length > 0) {
31
+ return category.products.filter(product => filteredCodes.includes(product.productCode));
32
+ }
34
33
  const { activeFilters } = addressOffersStore;
35
- return category.products.filter((product) => {
36
- var _a;
37
- // Exclude Netflix premium products
38
- if (category.hasNetflixToggle) {
39
- const isNetflixPremiumProduct = (_a = product.attributes) === null || _a === void 0 ? void 0 : _a.some((attr) => attr.key === 'isNetflixPremiumProduct' && attr.value === true);
40
- if (isNetflixPremiumProduct) {
41
- return false;
42
- }
43
- }
44
- // Apply active filters logic
45
- return activeFilters.includes('promotions') ? this.productHasPromotion(product) : true;
46
- });
34
+ if (activeFilters.includes('promotions')) {
35
+ return category.products.filter(this.productHasPromotion.bind(this));
36
+ }
37
+ return category.products;
47
38
  };
48
39
  /**
49
40
  * Determines whether the particular category should be rendered.
@@ -59,7 +50,8 @@ export class TetAddressOffers {
59
50
  return ((!category.tag ||
60
51
  ['all', (_b = category.tag) !== null && _b !== void 0 ? _b : ''].some((tag) => activeFilters.includes(tag)) ||
61
52
  (activeFilters.includes('promotions') && this.categoryContainsPromotions(category))) &&
62
- this.categoryContainsContractTerms(category));
53
+ this.categoryContainsContractTerms(category) &&
54
+ this.filterCategoryProducts(category).length > 0);
63
55
  };
64
56
  this.renderSubCategoryHeader = ({ displayTitle, name, landingPage, isOneTv }) => {
65
57
  const categoryName = this.translateProperty(name);
@@ -78,12 +70,15 @@ export class TetAddressOffers {
78
70
  })));
79
71
  };
80
72
  this.addressKey = undefined;
73
+ this.catalog = undefined;
81
74
  this.theme = 'light';
82
75
  this.darkMode = false;
83
76
  this.termText = undefined;
84
77
  this.formParameters = '';
85
78
  this.language = 'lv';
79
+ this.allowedTvProductCodes = [];
86
80
  this.showLoader = true;
81
+ this.subcategoryProductFilters = {};
87
82
  }
88
83
  /**
89
84
  * Loads new data on addressKey change
@@ -98,6 +93,12 @@ export class TetAddressOffers {
98
93
  await processTranslations(this.translationsGroup, language);
99
94
  forceUpdate(this);
100
95
  }
96
+ /**
97
+ * @param event The event containing the filtered product IDs for the particular subcategory.
98
+ */
99
+ handleFilteredProductsChanged(event) {
100
+ this.subcategoryProductFilters = Object.assign(Object.assign({}, this.subcategoryProductFilters), { [event.detail.subcategoryId]: event.detail.filteredProductIds });
101
+ }
101
102
  /**
102
103
  * Prepares the translations before the component is rendered.
103
104
  */
@@ -110,7 +111,6 @@ export class TetAddressOffers {
110
111
  async componentDidLoad() {
111
112
  await this.loadCatalogData();
112
113
  this.initFilterChangeEvent();
113
- this.handleTabContentInit();
114
114
  }
115
115
  /**
116
116
  * Initializes the active filter change event on the component.
@@ -125,21 +125,8 @@ export class TetAddressOffers {
125
125
  activeFilters: addressOffersStore.activeFilters,
126
126
  availableFilters: translatedFilters
127
127
  });
128
- this.handleTabContentInit();
129
128
  });
130
129
  }
131
- /**
132
- * Handle the init of tab conents.
133
- */
134
- async handleTabContentInit() {
135
- await new Promise(requestAnimationFrame);
136
- const tabContents = this.element.shadowRoot.querySelectorAll('tet-tab-content');
137
- if (tabContents) {
138
- tabContents.forEach((tabContent) => {
139
- tabContent.parentContainer = this.element.shadowRoot;
140
- });
141
- }
142
- }
143
130
  /**
144
131
  * Loads the catalog data from the gateway.
145
132
  */
@@ -147,9 +134,11 @@ export class TetAddressOffers {
147
134
  this.showLoader = true;
148
135
  addressOffersStore.availableFilters = [];
149
136
  try {
150
- addressOffersStore.catalog = await serviceAvailabilityServices(this.addressKey);
137
+ const catalogData = await serviceAvailabilityServices(this.addressKey);
138
+ this.catalog = catalogData;
139
+ addressOffersStore.catalog = catalogData;
151
140
  this.catalogChange.emit({
152
- catalog: addressOffersStore.catalog,
141
+ catalog: catalogData,
153
142
  activeFilters: addressOffersStore.activeFilters,
154
143
  availableFilters: addressOffersStore.availableFilters
155
144
  });
@@ -212,56 +201,44 @@ export class TetAddressOffers {
212
201
  renderTopCategories() {
213
202
  var _a, _b;
214
203
  return (_b = (_a = addressOffersStore.catalog) === null || _a === void 0 ? void 0 : _a.structure) === null || _b === void 0 ? void 0 : _b.filter(this.showCategory).map((structure) => {
204
+ var _a;
215
205
  const categoryName = this.translateProperty(structure.name);
216
- return (h("section", { class: { 'category': true, [`category--${this.theme}`]: !!this.theme, [this.theme]: true } }, categoryName && h("h2", { class: { 'category-title': true, [`category-title--${this.theme}`]: !!this.theme, [this.theme]: true } }, categoryName), h("div", { class: { 'category-subcategories': true, [`category-subcategories--${this.theme}`]: !!this.theme, [this.theme]: true } }, this.renderSubCategories(structure.subgroups || []))));
217
- });
218
- }
219
- /**
220
- * Filters products based on whether they are Netflix or non-Netflix.
221
- *
222
- * @param category The category structure model containing products and attributes.
223
- * @param isNetflix If true, returns only Netflix products. If false, returns non-Netflix products.
224
- */
225
- filterProductsByNetflix(category, isNetflix) {
226
- // Return all products if there's no Netflix toggle
227
- if (!category.hasNetflixToggle) {
228
- return category.products;
229
- }
230
- return category.products.filter((product) => {
231
- var _a, _b;
232
- // Exclude Netflix premium products
233
- const isNetflixPremiumProduct = (_a = product.attributes) === null || _a === void 0 ? void 0 : _a.some((attr) => attr.key === 'isNetflixPremiumProduct' && attr.value === true);
234
- if (isNetflixPremiumProduct) {
235
- return false;
236
- }
237
- // Check if the product is a Netflix product
238
- const isNetflixProduct = (_b = product.attributes) === null || _b === void 0 ? void 0 : _b.some((attr) => attr.key === 'isNetflixProduct' && attr.value === true);
239
- // Return based on the `isNetflix` flag
240
- return isNetflix ? isNetflixProduct : !isNetflixProduct;
206
+ return (h("section", { class: { 'category': true, [`category--${this.theme}`]: !!this.theme, [this.theme]: true } }, categoryName && h("h2", { class: { 'category-title': true, [`category-title--${this.theme}`]: !!this.theme, [this.theme]: true } }, categoryName), h("div", { class: { 'category-subcategories': true, [`category-subcategories--${this.theme}`]: !!this.theme, [this.theme]: true } }, this.renderSubCategories(structure.subgroups || [], (_a = addressOffersStore.catalog) === null || _a === void 0 ? void 0 : _a.meta))));
241
207
  });
242
208
  }
243
209
  /**
244
210
  * Renders sub-category blocks.
245
211
  *
246
212
  * @param {StructureModel[]} categories
213
+ * @param {MetaModel[]} meta
247
214
  * @returns {FunctionalComponent[]}
248
215
  */
249
- renderSubCategories(categories) {
216
+ renderSubCategories(categories, meta) {
250
217
  return categories.filter(this.showCategory).map((category) => {
251
- // If the category has a Netflix toggle, render the tabs
252
- if (category.hasNetflixToggle) {
253
- const nonNetflixProducts = this.filterProductsByNetflix(category, false);
254
- const netflixProducts = this.filterProductsByNetflix(category, true);
255
- const isIptvCategory = category.key === "iptv";
256
- return (h("div", { class: "subcategory" }, h("div", { class: { 'subcategory-header': true, [`subcategory-header--${this.theme}`]: !!this.theme, [this.theme]: true } }, this.renderSubCategoryHeader(category)), h("div", { class: "tab-header" }, h("tet-tab-header", { class: "header-switch", theme: this.theme, position: "center", "data-name": category.key, "default-tab": category.key + '1', segmented: true, sizing: "web", "hide-header-underline": false }, h("button", { class: { 'text-first': true, [`text-first--${this.theme}`]: !!this.theme, [this.theme]: true }, "data-name": category.key + '1' }, h("img", { src: isIptvCategory
257
- ? (this.theme === 'dark' ? tetTvLogoWhite : tetTvLogo)
258
- : (this.theme === 'dark' ? tetTvPlusLogoWhite : tetTvPlusLogo), alt: "tet-tv-logo", class: "tab-header-image", style: { maxHeight: '1.5rem' } }), t('components-tab-subscriptions')), h("button", { class: { 'text-first': true, [`text-first--${this.theme}`]: !!this.theme, [this.theme]: true }, "data-name": category.key + '2', "data-image": netflixLogo, "data-image-alt": "netflix" }, isIptvCategory ? t('components-tab-tet-tv') : t('components-tab-tet-tv-plus')))), h("tet-tab-content", { class: "tab-content", "data-name": category.key, "default-tab": category.key + '1', "use-visibility": false }, h("div", { "data-name": category.key + '1' }, h("div", { class: "subcategory-tab" }, nonNetflixProducts.map((product) => this.renderProduct(product, category.theme)))), h("div", { "data-name": category.key + '2' }, h("div", { class: "subcategory-tab" }, netflixProducts.map((product) => this.renderProduct(product, category.theme)))))));
259
- }
260
- // For categories without Netflix toggle, render normally
261
- const filteredProducts = this.filterCategoryProducts(category);
262
- return (h("div", { class: "subcategory" }, h("div", { class: "subcategory-header" }, this.renderSubCategoryHeader(category)), h("div", { class: "subcategory-products" }, filteredProducts.map((product) => this.renderProduct(product, category.theme)))));
218
+ return (h("div", { class: "subcategory" }, h("div", { class: "subcategory-header" }, this.renderSubCategoryHeader(category)), category.hasProductTags &&
219
+ h("div", { class: "subcategory-filters" }, h("tet-address-offers-filters-products", { catalog: this.catalog, class: `center`, language: this.language, clearFilterButton: true, subcategoryId: category.key, onFilteredProductsChanged: event => this.handleFilteredProductsChanged(event), category: category, theme: this.theme })), h("div", { class: "subcategory-products" }, this.filterCategoryProducts(category).map((product) => this.renderProduct(product, category.theme, meta)))));
263
220
  });
264
221
  }
222
+ renderUpsellBlock(name, icons, amount) {
223
+ let icon = icons.find(icon => icon.key === 'upsell-adjust-offers-light');
224
+ const isDarkTheme = this.theme === 'dark';
225
+ if (isDarkTheme) {
226
+ icon = icons.find(icon => icon.key === 'upsell-adjust-offers-dark');
227
+ }
228
+ return (h("div", { class: "upsell-block" }, h("div", { class: {
229
+ 'upsell-block--title': true,
230
+ 'dark': isDarkTheme
231
+ } }, t('components-max-sport-upsell-title')), h("div", { class: {
232
+ 'upsell-block--content': true,
233
+ 'dark': isDarkTheme
234
+ } }, h("img", { src: icon.icon, class: { 'upsell-block--icon': true } }), h("div", { class: {
235
+ 'upsell-block--name': true,
236
+ 'dark': isDarkTheme
237
+ } }, name), h("div", { class: {
238
+ 'upsell-block--amount': true,
239
+ 'dark': isDarkTheme
240
+ } }, "+", amount, " Eur"), h("div", { class: { 'upsell-block--tooltip': true } }, h("tet-icon", { class: "icon", name: "info-circle", focusable: true, theme: this.theme }), h("tet-tooltip", { theme: this.theme }, t('components-max-sport-upsell-tooltip-info'))))));
241
+ }
265
242
  /**
266
243
  * Renders a single product.
267
244
  *
@@ -269,15 +246,15 @@ export class TetAddressOffers {
269
246
  * @param {ServiceAvailabilityServicesCategoryTheme} theme
270
247
  * @returns {FunctionalComponent}
271
248
  */
272
- renderProduct(product, theme = 'light') {
273
- var _a, _b, _c, _d, _e;
249
+ renderProduct(product, theme = 'light', meta) {
250
+ var _a, _b, _c, _d, _e, _f, _g, _h, _j;
274
251
  if (!this.getContractTerm(product)) {
275
252
  return;
276
253
  }
277
254
  const tp = (property) => this.translateProperty(property);
278
255
  const tooltip = (text) => `
279
- <tet-icon class="icon" name="info-circle" focusable={true}></tet-icon>
280
- <tet-tooltip>${text}</tet-tooltip>
256
+ <tet-icon class="icon" name="info-circle" focusable="${true}"></tet-icon>
257
+ <tet-tooltip theme="${this.theme}">${text}</tet-tooltip>
281
258
  `.trim();
282
259
  const buttonTheme = this.darkMode ? 'dark' : 'light';
283
260
  const button = (text, link) => `
@@ -295,13 +272,22 @@ export class TetAddressOffers {
295
272
  const priceDescription = tp(this.getContractTermProperty(product, 'priceDescription'));
296
273
  const contract = this.getContractTermProperty(product, 'contract');
297
274
  const bestChoice = (_b = (_a = this.getAttribute(product.attributes, 'isBestChoice')) === null || _a === void 0 ? void 0 : _a.value) !== null && _b !== void 0 ? _b : false;
275
+ const showMaxSportUpsell = (_d = (_c = this.getAttribute(product.attributes, 'showMaxSportUpsell')) === null || _c === void 0 ? void 0 : _c.value) !== null && _d !== void 0 ? _d : false;
276
+ let upsellBlock = null;
277
+ if (showMaxSportUpsell && Object.keys(meta)[0] === 'hboMaxSport') {
278
+ const upsellProduct = Object.values(meta)[0];
279
+ const name = upsellProduct.name ? upsellProduct.name[this.language] : '';
280
+ const icons = upsellProduct.icons ? upsellProduct.icons : [];
281
+ const amount = upsellProduct.amount ? upsellProduct.amount : null;
282
+ upsellBlock = this.renderUpsellBlock(name, icons, amount);
283
+ }
298
284
  let termText = null;
299
285
  if (this.termText) {
300
286
  const contractTerm = this.getContractTermProperty(product, 'term');
301
287
  if (contractTerm !== 0) {
302
288
  termText = sprintf(this.termText, contractTerm);
303
289
  }
304
- if ((_d = (_c = this.getAttribute(product.attributes, 'availabilityTermUnlimitedOverride')) === null || _c === void 0 ? void 0 : _c.value) !== null && _d !== void 0 ? _d : false) {
290
+ if ((_f = (_e = this.getAttribute(product.attributes, 'availabilityTermUnlimitedOverride')) === null || _e === void 0 ? void 0 : _e.value) !== null && _f !== void 0 ? _f : false) {
305
291
  termText = t('components-indefinite');
306
292
  }
307
293
  }
@@ -313,6 +299,16 @@ export class TetAddressOffers {
313
299
  }
314
300
  }
315
301
  const benefitItems = benefits === null || benefits === void 0 ? void 0 : benefits.split('\n').filter(Boolean);
302
+ let productDescription = null;
303
+ if ((_g = this.getAttribute(product.attributes, 'isNetflixProduct')) === null || _g === void 0 ? void 0 : _g.value) {
304
+ productDescription = t('components-netflix-card-description');
305
+ }
306
+ else if ((_h = this.getAttribute(product.attributes, 'isNetflixMaxProduct')) === null || _h === void 0 ? void 0 : _h.value) {
307
+ productDescription = t('components-netflix-max-card-description');
308
+ }
309
+ else if ((_j = this.getAttribute(product.attributes, 'isMaxProduct')) === null || _j === void 0 ? void 0 : _j.value) {
310
+ productDescription = t('components-max-card-description');
311
+ }
316
312
  const options = {
317
313
  mainTitle: tp(product.name),
318
314
  subTitle: this.getProductSubtitle(product),
@@ -330,13 +326,11 @@ export class TetAddressOffers {
330
326
  secondaryLink: contract,
331
327
  secondaryLinkText: t('components-offers-contract-term-link'),
332
328
  secondaryLinkOpenBlank: true,
333
- netflixProductDescription: ((_e = this.getAttribute(product.attributes, 'isNetflixProduct')) === null || _e === void 0 ? void 0 : _e.value)
334
- ? t('components-netflix-card-description')
335
- : null,
329
+ netflixProductDescription: productDescription,
336
330
  };
337
331
  return (h("tet-compare-card", { class: { 'product': true, 'best-choice': bestChoice }, options: options, cardType: "wide60-40", minWideWidth: 768, theme: theme, bestChoice: bestChoice,
338
332
  // Resets the best choice card height to 100% and removes negative margin
339
- cardList: true, darkMode: this.darkMode }));
333
+ cardList: true, darkMode: this.darkMode, darkModeOverride: this.theme == "dark" }, h("div", { slot: "upsell-block-slot" }, upsellBlock)));
340
334
  }
341
335
  /**
342
336
  * Returns the product subtitle with the dynamic broadband speed if the product is broadband or a TV/TV+ hard bundle.
@@ -424,7 +418,7 @@ export class TetAddressOffers {
424
418
  return generateFormUrl(baseUrl, parameters);
425
419
  }
426
420
  render() {
427
- return (h(Host, { key: '581f2290f683f9bcf77bb2ae8a00b951f06b4606' }, this.showLoader ? this.renderLoader() : addressOffersStore.catalog && this.renderTopCategories()));
421
+ return (h(Host, { key: '2995d979e507e7ceafe7a8c51712314a35d59c1e' }, this.showLoader ? this.renderLoader() : addressOffersStore.catalog && this.renderTopCategories()));
428
422
  }
429
423
  static get is() { return "tet-address-offers"; }
430
424
  static get encapsulation() { return "shadow"; }
@@ -457,6 +451,27 @@ export class TetAddressOffers {
457
451
  "attribute": "address-key",
458
452
  "reflect": false
459
453
  },
454
+ "catalog": {
455
+ "type": "unknown",
456
+ "mutable": false,
457
+ "complexType": {
458
+ "original": "AvailableServicesModel",
459
+ "resolved": "AvailableServicesModel",
460
+ "references": {
461
+ "AvailableServicesModel": {
462
+ "location": "import",
463
+ "path": "@services/api/services/catalog/service-availability-services",
464
+ "id": "src/services/api/services/catalog/service-availability-services.ts::AvailableServicesModel"
465
+ }
466
+ }
467
+ },
468
+ "required": false,
469
+ "optional": false,
470
+ "docs": {
471
+ "tags": [],
472
+ "text": "The catalog data."
473
+ }
474
+ },
460
475
  "theme": {
461
476
  "type": "string",
462
477
  "mutable": false,
@@ -551,12 +566,29 @@ export class TetAddressOffers {
551
566
  "attribute": "language",
552
567
  "reflect": false,
553
568
  "defaultValue": "'lv'"
569
+ },
570
+ "allowedTvProductCodes": {
571
+ "type": "unknown",
572
+ "mutable": false,
573
+ "complexType": {
574
+ "original": "string[]",
575
+ "resolved": "string[]",
576
+ "references": {}
577
+ },
578
+ "required": false,
579
+ "optional": false,
580
+ "docs": {
581
+ "tags": [],
582
+ "text": "The currently active tv product filters."
583
+ },
584
+ "defaultValue": "[]"
554
585
  }
555
586
  };
556
587
  }
557
588
  static get states() {
558
589
  return {
559
- "showLoader": {}
590
+ "showLoader": {},
591
+ "subcategoryProductFilters": {}
560
592
  };
561
593
  }
562
594
  static get events() {
@@ -49,13 +49,14 @@ class AddressOffersFilters {
49
49
  this.resolveFilters = (serviceAvailabilityData) => {
50
50
  const filtersCount = this.calculateFilterCounts(serviceAvailabilityData);
51
51
  return (this.allFilters
52
- // Show only filters that have some products.
52
+ // Show filters that have some products and filters without product as disabled.
53
53
  .filter(({ id }) => filtersCount[id])
54
54
  .map((filter) => ({
55
55
  id: filter.id,
56
56
  title: filter.titleTranslationKey,
57
57
  count: filtersCount[filter.id],
58
58
  active: filter.active,
59
+ showIcon: filter.id === 'all' ? false : filter.active,
59
60
  clickAction: this.filterClickAction.bind(this, filter)
60
61
  })));
61
62
  };
@@ -104,22 +105,34 @@ class AddressOffersFilters {
104
105
  return;
105
106
  }
106
107
  if (this.singleSelectionFilters.includes(availableFilter.id)) {
107
- // De-select all filters.
108
- this.availableFilters.forEach((forEachFilter) => (forEachFilter.active = false));
108
+ this.deSelectAllFilers(availableFilter);
109
109
  }
110
110
  else {
111
- // De-select those filters that cannot be included in multiple filter selection.
112
- this.availableFilters
113
- .filter(({ id }) => this.singleSelectionFilters.includes(id))
114
- .forEach((forEachFilter) => (forEachFilter.active = false));
111
+ this.deSelectSingleSelectionFilters();
115
112
  }
116
113
  availableFilter.active = !availableFilter.active;
114
+ availableFilter.showIcon = availableFilter.id === 'all' ? false : !availableFilter.showIcon;
117
115
  // If all filters become de-selected, then automatically select all offers filter.
118
116
  if (!this.availableFilters.some(({ active }) => active)) {
119
- this.availableFilters.find(({ id }) => id === 'all').active = true;
117
+ const allSelectedFilters = this.availableFilters.find(({ id }) => id === 'all');
118
+ allSelectedFilters.active = true;
120
119
  }
121
120
  this.onFilterSelect(this.availableFilters);
122
121
  };
122
+ // De-select all filters if all filter tab or not active single selection tab clicked.
123
+ this.deSelectAllFilers = (availableFilter) => {
124
+ const { id, active } = availableFilter;
125
+ if (id === 'all' || !active) {
126
+ this.availableFilters
127
+ .forEach((forEachFilter) => { forEachFilter.active = false; forEachFilter.showIcon = false; });
128
+ }
129
+ };
130
+ //De-select those filters that cannot be included in multiple filter selection.
131
+ this.deSelectSingleSelectionFilters = () => {
132
+ this.availableFilters
133
+ .filter(({ id }) => this.singleSelectionFilters.includes(id))
134
+ .forEach((forEachFilter) => { forEachFilter.active = false; forEachFilter.showIcon = false; });
135
+ };
123
136
  }
124
137
  }
125
138
  export { AddressOffersFilters };
@@ -0,0 +1,95 @@
1
+ class AddressOffersProductsFilters {
2
+ constructor(onFilterSelect) {
3
+ this.onFilterSelect = onFilterSelect;
4
+ this.availableTvFilters = [];
5
+ this.allFilters = [];
6
+ this.initialize = (serviceAvailabilityData, category) => {
7
+ if (serviceAvailabilityData.productTags) {
8
+ this.availableTvFilters = this.resolveFilters(serviceAvailabilityData, category);
9
+ }
10
+ this.updateDisabledFilters();
11
+ this.onFilterSelect([...this.availableTvFilters], this.getActiveFilterIds(), this.getFilteredProductIds(category));
12
+ };
13
+ this.getAvailableFilters = () => {
14
+ return [...this.availableTvFilters];
15
+ };
16
+ this.clearFilters = (category) => {
17
+ this.availableTvFilters.forEach(filter => (filter.active = false));
18
+ this.updateDisabledFilters();
19
+ this.onFilterSelect([...this.availableTvFilters], [], this.getFilteredProductIds(category));
20
+ };
21
+ this.resolveFilters = (serviceAvailabilityData, category) => {
22
+ const subcategoryProductCodes = new Set(category.products.map(product => product.productCode));
23
+ const productTags = serviceAvailabilityData.productTags || [];
24
+ return productTags
25
+ .map(tag => {
26
+ const localProducts = (tag.products || []).filter(productCode => subcategoryProductCodes.has(productCode));
27
+ return {
28
+ id: tag.tag,
29
+ title: tag.title,
30
+ products: localProducts,
31
+ active: false,
32
+ disabled: false,
33
+ showIcon: false,
34
+ clickAction: this.filterClickAction.bind(this)
35
+ };
36
+ })
37
+ .filter(filter => filter.products.length > 0); // Only include if products present in this group
38
+ };
39
+ this.updateDisabledFilters = () => {
40
+ const activeFilters = this.availableTvFilters.filter(f => f.active);
41
+ const activeCount = activeFilters.length;
42
+ let intersection = null;
43
+ if (activeCount > 0) {
44
+ intersection = new Set(activeFilters[0].products);
45
+ for (let i = 1; i < activeFilters.length; i++) {
46
+ intersection = new Set([...intersection].filter(productCode => activeFilters[i].products.includes(productCode)));
47
+ }
48
+ }
49
+ for (const filter of this.availableTvFilters) {
50
+ if (filter.active || activeCount === 0) {
51
+ filter.disabled = false;
52
+ }
53
+ else {
54
+ let simulatedIntersection = intersection ? [...intersection] : filter.products;
55
+ if (intersection) {
56
+ simulatedIntersection = simulatedIntersection.filter(code => filter.products.includes(code));
57
+ }
58
+ filter.disabled = simulatedIntersection.length <= 1;
59
+ filter.showIcon = false;
60
+ }
61
+ }
62
+ };
63
+ this.filterClickAction = (filter, category) => {
64
+ const availableFilter = this.availableTvFilters.find(({ id }) => id === filter.id);
65
+ if (!availableFilter)
66
+ return;
67
+ if (availableFilter.disabled)
68
+ return;
69
+ availableFilter.active = !availableFilter.active;
70
+ availableFilter.showIcon = !availableFilter.showIcon;
71
+ this.updateDisabledFilters();
72
+ this.onFilterSelect([...this.availableTvFilters], this.getActiveFilterIds(), this.getFilteredProductIds(category));
73
+ };
74
+ this.getActiveFilterIds = () => {
75
+ return this.availableTvFilters.filter(filter => filter.active).map(filter => filter.id);
76
+ };
77
+ this.getFilteredProductIds = (category = null) => {
78
+ if (!category || !category.products) {
79
+ return [];
80
+ }
81
+ const activeTags = this.availableTvFilters.filter(tag => tag.active);
82
+ if (activeTags.length === 0) {
83
+ return category.products.map(product => product.productCode);
84
+ }
85
+ let intersection = [...activeTags[0].products];
86
+ for (let i = 1; i < activeTags.length; i++) {
87
+ intersection = intersection.filter(productCode => activeTags[i].products.includes(productCode));
88
+ }
89
+ const productsInCategory = new Set(category.products.map(product => product.productCode));
90
+ intersection = intersection.filter(productCode => productsInCategory.has(productCode));
91
+ return intersection;
92
+ };
93
+ }
94
+ }
95
+ export { AddressOffersProductsFilters };
@@ -0,0 +1,23 @@
1
+ import { newSpecPage } from "@stencil/core/testing";
2
+ import { TetAddressOffersFiltersProducts } from "../tet-address-offers-filters-products";
3
+ describe('tet-address-offers-filters-products', () => {
4
+ it('renders', async () => {
5
+ const page = await newSpecPage({
6
+ components: [TetAddressOffersFiltersProducts],
7
+ html: `<tet-address-offers-filters-products></tet-address-offers-filters-products>`
8
+ });
9
+ expect(page.root).toEqualHtml(`
10
+ <tet-address-offers-filters-products>
11
+ <mock:shadow-root>
12
+ <div class="loader">
13
+ <tet-placeholder class="tag-placeholder" height="2rem" width="8rem"></tet-placeholder>
14
+ <tet-placeholder class="tag-placeholder" height="2rem" width="8rem"></tet-placeholder>
15
+ <tet-placeholder class="tag-placeholder" height="2rem" width="8rem"></tet-placeholder>
16
+ <tet-placeholder class="tag-placeholder" height="2rem" width="8rem"></tet-placeholder>
17
+ </div>
18
+ <tet-tag-group language="lv" theme="light"></tet-tag-group>
19
+ </mock:shadow-root>
20
+ </tet-address-offers-filters-products>
21
+ `);
22
+ });
23
+ });