@coveo/atomic 3.31.2-pre.ebf2a83c47 → 3.31.2-pre.f527c8a944

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 (255) hide show
  1. package/dist/atomic/_atomic.esm.js +1 -1
  2. package/dist/atomic/atomic.esm.js.map +1 -1
  3. package/dist/atomic/components/_index.d.ts +0 -4
  4. package/dist/atomic/components/_index.js +0 -2
  5. package/dist/atomic/components/analytics-config.js +1 -1
  6. package/dist/atomic/components/atomic-category-facet.js +1 -1
  7. package/dist/atomic/components/atomic-facet.js +1 -1
  8. package/dist/atomic/components/atomic-format-currency.js +1 -1
  9. package/dist/atomic/components/atomic-format-number.js +1 -1
  10. package/dist/atomic/components/atomic-format-unit.js +1 -1
  11. package/dist/atomic/components/atomic-numeric-facet.js +1 -1
  12. package/dist/atomic/components/atomic-quickview-modal2.js +1 -1
  13. package/dist/atomic/components/atomic-quickview.js +1 -1
  14. package/dist/atomic/components/atomic-result-children.js +1 -1
  15. package/dist/atomic/components/atomic-result-fields-list.js +1 -1
  16. package/dist/atomic/components/atomic-result-link.js +1 -1
  17. package/dist/atomic/components/atomic-result-list.js +1 -1
  18. package/dist/atomic/components/atomic-search-box-query-suggestions2.js +1 -1
  19. package/dist/atomic/components/atomic-search-box-recent-queries2.js +1 -1
  20. package/dist/atomic/components/atomic-search-interface.js +1 -7
  21. package/dist/atomic/components/atomic-search-interface.js.map +1 -1
  22. package/dist/atomic/components/atomic-smart-snippet-feedback-modal2.js +2 -2
  23. package/dist/atomic/components/atomic-sort-dropdown.js +2 -2
  24. package/dist/atomic/components/atomic-sort-expression.js +1 -1
  25. package/dist/atomic/components/atomic-tab-manager.js +1 -1
  26. package/dist/atomic/components/components/commerce/atomic-commerce-interface/analytics-config.js +2 -0
  27. package/dist/atomic/components/components/commerce/atomic-commerce-interface/atomic-commerce-interface.js +6 -1
  28. package/dist/atomic/components/components/commerce/atomic-commerce-recommendation-interface/atomic-commerce-recommendation-interface.js +6 -1
  29. package/dist/atomic/components/components/commerce/atomic-product-description/atomic-product-description.js +149 -0
  30. package/dist/atomic/components/components/commerce/atomic-product-description/atomic-product-description.tw.css.js +3 -0
  31. package/dist/atomic/components/components/commerce/atomic-product-template/atomic-product-template.js +1 -0
  32. package/dist/atomic/components/components/commerce/index.js +1 -0
  33. package/dist/atomic/components/components/commerce/lazy-index.js +1 -0
  34. package/dist/atomic/components/components/common/atomic-aria-live/atomic-aria-live.js +102 -0
  35. package/dist/atomic/components/components/common/index.js +1 -0
  36. package/dist/atomic/components/components/common/interface/analytics-config.js +38 -0
  37. package/dist/atomic/components/components/common/lazy-index.js +1 -0
  38. package/dist/atomic/components/debounce-utils.js +1 -34
  39. package/dist/atomic/components/debounce-utils.js.map +1 -1
  40. package/dist/atomic/components/global/environment.js +1 -1
  41. package/dist/atomic/components/index.js.map +1 -1
  42. package/dist/atomic/components/stencil-accessibility-utils.js.map +1 -1
  43. package/dist/atomic/components/stencil-facet-show-more-less.js +7 -1
  44. package/dist/atomic/components/stencil-facet-show-more-less.js.map +1 -1
  45. package/dist/atomic/p-01c91b69.js +2 -0
  46. package/dist/atomic/p-01c91b69.js.map +1 -0
  47. package/dist/atomic/{p-1b491649.entry.js → p-0af927f0.entry.js} +2 -2
  48. package/dist/atomic/{p-b043958c.entry.js → p-0b9cd281.entry.js} +2 -2
  49. package/dist/atomic/{p-e44ba87e.entry.js → p-0f5ae66e.entry.js} +2 -2
  50. package/dist/atomic/{p-0674783d.entry.js → p-1b329f85.entry.js} +2 -2
  51. package/dist/atomic/p-271cf67e.entry.js +2 -0
  52. package/dist/atomic/p-271cf67e.entry.js.map +1 -0
  53. package/dist/atomic/{p-f699c143.entry.js → p-2d132fd3.entry.js} +2 -2
  54. package/dist/atomic/{p-43188440.entry.js → p-2e2a6fe8.entry.js} +2 -2
  55. package/dist/atomic/p-306161d1.entry.js +2 -0
  56. package/dist/atomic/p-417b1b64.js +2 -0
  57. package/dist/atomic/{p-c100197d.js.map → p-417b1b64.js.map} +1 -1
  58. package/dist/atomic/p-44a3c052.entry.js +2 -0
  59. package/dist/atomic/{p-e215ba76.entry.js.map → p-44a3c052.entry.js.map} +1 -1
  60. package/dist/atomic/{p-a0445771.entry.js → p-4c5702ba.entry.js} +2 -2
  61. package/dist/atomic/{p-acc4d5de.js → p-53bcc515.js} +2 -2
  62. package/dist/atomic/{p-e2560da8.entry.js → p-5f64bbe0.entry.js} +2 -2
  63. package/dist/atomic/{p-fc73190d.entry.js → p-6638ca39.entry.js} +2 -2
  64. package/dist/atomic/{p-1176959c.entry.js → p-6f8ae3d2.entry.js} +2 -2
  65. package/dist/atomic/{p-0ed0e8b8.entry.js → p-731f82ed.entry.js} +2 -2
  66. package/dist/atomic/{p-25f8b8d8.entry.js → p-7a07530d.entry.js} +2 -2
  67. package/dist/atomic/{p-c8d47706.entry.js → p-7a5d346b.entry.js} +2 -2
  68. package/dist/atomic/p-8434625a.entry.js +2 -0
  69. package/dist/atomic/{p-8bb323e8.entry.js.map → p-8434625a.entry.js.map} +1 -1
  70. package/dist/atomic/{p-5b888121.entry.js → p-89721f11.entry.js} +2 -2
  71. package/dist/atomic/p-91477908.entry.js +2 -0
  72. package/dist/atomic/{p-3f881919.entry.js.map → p-91477908.entry.js.map} +1 -1
  73. package/dist/atomic/p-91d52cad.entry.js +2 -0
  74. package/dist/atomic/{p-4e77fe24.entry.js.map → p-91d52cad.entry.js.map} +1 -1
  75. package/dist/atomic/p-96a6f84f.js.map +1 -1
  76. package/dist/atomic/{p-29f21264.entry.js → p-9c8e5057.entry.js} +2 -2
  77. package/dist/atomic/{p-11dd759c.entry.js → p-b1f7ac63.entry.js} +2 -2
  78. package/dist/atomic/{p-5fc9f751.entry.js → p-bf5d5c79.entry.js} +2 -2
  79. package/dist/atomic/{p-716e9e1d.entry.js → p-c0025d4c.entry.js} +2 -2
  80. package/dist/atomic/{p-494c57a0.entry.js → p-e406cacd.entry.js} +2 -2
  81. package/dist/atomic/p-e8ba8acd.entry.js +2 -0
  82. package/dist/atomic/{p-0873c1b8.entry.js.map → p-e8ba8acd.entry.js.map} +1 -1
  83. package/dist/atomic/p-f0e861c5.entry.js +2 -0
  84. package/dist/atomic/{p-a55cd386.js → p-f865008d.js} +2 -2
  85. package/dist/atomic/{p-391c26ba.entry.js → p-f9bfd18b.entry.js} +2 -2
  86. package/dist/cjs/_loader.cjs.js +1 -1
  87. package/dist/cjs/{analytics-config-8482ce49.js → analytics-config-0e7adcce.js} +2 -2
  88. package/dist/cjs/{analytics-config-8482ce49.js.map → analytics-config-0e7adcce.js.map} +1 -1
  89. package/dist/cjs/atomic-category-facet.cjs.entry.js +2 -3
  90. package/dist/cjs/atomic-category-facet.cjs.entry.js.map +1 -1
  91. package/dist/cjs/atomic-color-facet.cjs.entry.js +1 -2
  92. package/dist/cjs/atomic-color-facet.cjs.entry.js.map +1 -1
  93. package/dist/cjs/atomic-commerce-category-facet_4.cjs.entry.js +1 -2
  94. package/dist/cjs/atomic-commerce-category-facet_4.cjs.entry.js.map +1 -1
  95. package/dist/cjs/atomic-facet.cjs.entry.js +2 -3
  96. package/dist/cjs/atomic-facet.cjs.entry.js.map +1 -1
  97. package/dist/cjs/atomic-format-currency.cjs.entry.js +1 -1
  98. package/dist/cjs/atomic-format-number.cjs.entry.js +1 -1
  99. package/dist/cjs/atomic-format-unit.cjs.entry.js +1 -1
  100. package/dist/cjs/atomic-generated-answer.cjs.entry.js +1 -1
  101. package/dist/cjs/atomic-insight-facet.cjs.entry.js +1 -2
  102. package/dist/cjs/atomic-insight-facet.cjs.entry.js.map +1 -1
  103. package/dist/cjs/atomic-insight-generated-answer.cjs.entry.js +1 -1
  104. package/dist/cjs/atomic-insight-interface.cjs.entry.js +1 -1
  105. package/dist/cjs/atomic-insight-search-box.cjs.entry.js +2 -2
  106. package/dist/cjs/atomic-numeric-facet.cjs.entry.js +1 -1
  107. package/dist/cjs/atomic-quickview-modal.cjs.entry.js +1 -1
  108. package/dist/cjs/atomic-quickview.cjs.entry.js +1 -1
  109. package/dist/cjs/atomic-recs-interface.cjs.entry.js +1 -1
  110. package/dist/cjs/{atomic-aria-live_2.cjs.entry.js → atomic-relevance-inspector.cjs.entry.js} +1 -68
  111. package/dist/cjs/atomic-relevance-inspector.cjs.entry.js.map +1 -0
  112. package/dist/cjs/atomic-result-children.cjs.entry.js +1 -1
  113. package/dist/cjs/atomic-result-fields-list.cjs.entry.js +1 -1
  114. package/dist/cjs/atomic-result-link.cjs.entry.js +1 -1
  115. package/dist/cjs/atomic-result-list.cjs.entry.js +1 -1
  116. package/dist/cjs/atomic-search-box-query-suggestions_2.cjs.entry.js +2 -2
  117. package/dist/cjs/atomic-search-box.cjs.entry.js +2 -2
  118. package/dist/cjs/atomic-search-interface.cjs.entry.js +1 -1
  119. package/dist/cjs/atomic-smart-snippet-feedback-modal.cjs.entry.js +2 -2
  120. package/dist/cjs/atomic-sort-dropdown.cjs.entry.js +2 -2
  121. package/dist/cjs/atomic-sort-expression.cjs.entry.js +1 -1
  122. package/dist/cjs/atomic-tab-manager.cjs.entry.js +1 -1
  123. package/dist/cjs/atomic.cjs.js +1 -1
  124. package/dist/cjs/debounce-utils-d26bcad4.js +15 -0
  125. package/dist/cjs/debounce-utils-d26bcad4.js.map +1 -0
  126. package/dist/cjs/index-757bc886.js +4 -8
  127. package/dist/cjs/stencil-accessibility-utils-aa4c9f6c.js.map +1 -1
  128. package/dist/cjs/{stencil-facet-show-more-less-21d22973.js → stencil-facet-show-more-less-541e1544.js} +10 -4
  129. package/dist/cjs/stencil-facet-show-more-less-541e1544.js.map +1 -0
  130. package/dist/cjs/{stencil-suggestion-manager-6f778cf0.js → stencil-suggestion-manager-5fa3ac70.js} +2 -2
  131. package/dist/cjs/{stencil-suggestion-manager-6f778cf0.js.map → stencil-suggestion-manager-5fa3ac70.js.map} +1 -1
  132. package/dist/cjs/version.cjs.js +2 -2
  133. package/dist/esm/_loader.js +1 -1
  134. package/dist/esm/{analytics-config-d42bd300.js → analytics-config-5ffedd10.js} +2 -2
  135. package/dist/esm/{analytics-config-d42bd300.js.map → analytics-config-5ffedd10.js.map} +1 -1
  136. package/dist/esm/atomic-category-facet.entry.js +2 -3
  137. package/dist/esm/atomic-category-facet.entry.js.map +1 -1
  138. package/dist/esm/atomic-color-facet.entry.js +1 -2
  139. package/dist/esm/atomic-color-facet.entry.js.map +1 -1
  140. package/dist/esm/atomic-commerce-category-facet_4.entry.js +1 -2
  141. package/dist/esm/atomic-commerce-category-facet_4.entry.js.map +1 -1
  142. package/dist/esm/atomic-facet.entry.js +2 -3
  143. package/dist/esm/atomic-facet.entry.js.map +1 -1
  144. package/dist/esm/atomic-format-currency.entry.js +1 -1
  145. package/dist/esm/atomic-format-number.entry.js +1 -1
  146. package/dist/esm/atomic-format-unit.entry.js +1 -1
  147. package/dist/esm/atomic-generated-answer.entry.js +1 -1
  148. package/dist/esm/atomic-insight-facet.entry.js +1 -2
  149. package/dist/esm/atomic-insight-facet.entry.js.map +1 -1
  150. package/dist/esm/atomic-insight-generated-answer.entry.js +1 -1
  151. package/dist/esm/atomic-insight-interface.entry.js +1 -1
  152. package/dist/esm/atomic-insight-search-box.entry.js +2 -2
  153. package/dist/esm/atomic-numeric-facet.entry.js +1 -1
  154. package/dist/esm/atomic-quickview-modal.entry.js +1 -1
  155. package/dist/esm/atomic-quickview.entry.js +1 -1
  156. package/dist/esm/atomic-recs-interface.entry.js +1 -1
  157. package/dist/esm/{atomic-aria-live_2.entry.js → atomic-relevance-inspector.entry.js} +3 -69
  158. package/dist/esm/atomic-relevance-inspector.entry.js.map +1 -0
  159. package/dist/esm/atomic-result-children.entry.js +1 -1
  160. package/dist/esm/atomic-result-fields-list.entry.js +1 -1
  161. package/dist/esm/atomic-result-link.entry.js +1 -1
  162. package/dist/esm/atomic-result-list.entry.js +1 -1
  163. package/dist/esm/atomic-search-box-query-suggestions_2.entry.js +2 -2
  164. package/dist/esm/atomic-search-box.entry.js +2 -2
  165. package/dist/esm/atomic-search-interface.entry.js +1 -1
  166. package/dist/esm/atomic-smart-snippet-feedback-modal.entry.js +2 -2
  167. package/dist/esm/atomic-sort-dropdown.entry.js +2 -2
  168. package/dist/esm/atomic-sort-expression.entry.js +1 -1
  169. package/dist/esm/atomic-tab-manager.entry.js +1 -1
  170. package/dist/esm/atomic.js +1 -1
  171. package/dist/esm/debounce-utils-8619dece.js +13 -0
  172. package/dist/esm/{debounce-utils-efa015c0.js.map → debounce-utils-8619dece.js.map} +1 -1
  173. package/dist/esm/index-3f35faca.js +4 -8
  174. package/dist/esm/stencil-accessibility-utils-bc273be5.js.map +1 -1
  175. package/dist/esm/{stencil-facet-show-more-less-4b023ee3.js → stencil-facet-show-more-less-1198472f.js} +8 -2
  176. package/dist/esm/stencil-facet-show-more-less-1198472f.js.map +1 -0
  177. package/dist/esm/{stencil-suggestion-manager-91706623.js → stencil-suggestion-manager-f52c6e39.js} +2 -2
  178. package/dist/esm/{stencil-suggestion-manager-91706623.js.map → stencil-suggestion-manager-f52c6e39.js.map} +1 -1
  179. package/dist/esm/version.js +2 -2
  180. package/dist/types/components/commerce/atomic-product-description/atomic-product-description.d.ts +21 -10
  181. package/dist/types/components/commerce/atomic-product-template/atomic-product-template.d.ts +1 -0
  182. package/dist/types/components/commerce/index.d.ts +1 -0
  183. package/dist/types/components/common/atomic-aria-live/atomic-aria-live.d.ts +38 -0
  184. package/dist/types/components/common/index.d.ts +1 -0
  185. package/dist/types/components.d.ts +0 -78
  186. package/dist/types/utils/accessibility-utils.d.ts +2 -1
  187. package/dist/types/utils/stencil-accessibility-utils.d.ts +2 -1
  188. package/docs/atomic-docs.json +1 -157
  189. package/package.json +3 -3
  190. package/dist/atomic/components/atomic-aria-live.d.ts +0 -11
  191. package/dist/atomic/components/atomic-aria-live.js +0 -8
  192. package/dist/atomic/components/atomic-aria-live.js.map +0 -1
  193. package/dist/atomic/components/atomic-aria-live2.js +0 -87
  194. package/dist/atomic/components/atomic-aria-live2.js.map +0 -1
  195. package/dist/atomic/components/atomic-product-description.d.ts +0 -11
  196. package/dist/atomic/components/atomic-product-description.js +0 -153
  197. package/dist/atomic/components/atomic-product-description.js.map +0 -1
  198. package/dist/atomic/components/plus.js +0 -10
  199. package/dist/atomic/components/plus.js.map +0 -1
  200. package/dist/atomic/p-0873c1b8.entry.js +0 -2
  201. package/dist/atomic/p-37b7705c.js +0 -2
  202. package/dist/atomic/p-37b7705c.js.map +0 -1
  203. package/dist/atomic/p-3f2442d3.entry.js +0 -2
  204. package/dist/atomic/p-3f2442d3.entry.js.map +0 -1
  205. package/dist/atomic/p-3f881919.entry.js +0 -2
  206. package/dist/atomic/p-4e77fe24.entry.js +0 -2
  207. package/dist/atomic/p-8bb323e8.entry.js +0 -2
  208. package/dist/atomic/p-8f20d930.js +0 -2
  209. package/dist/atomic/p-8f20d930.js.map +0 -1
  210. package/dist/atomic/p-c100197d.js +0 -2
  211. package/dist/atomic/p-e215ba76.entry.js +0 -2
  212. package/dist/atomic/p-e790d557.entry.js +0 -2
  213. package/dist/atomic/p-efd2bb5f.entry.js +0 -2
  214. package/dist/atomic/p-f2d31b97.entry.js +0 -2
  215. package/dist/atomic/p-f2d31b97.entry.js.map +0 -1
  216. package/dist/cjs/atomic-aria-live_2.cjs.entry.js.map +0 -1
  217. package/dist/cjs/atomic-product-description.cjs.entry.js +0 -141
  218. package/dist/cjs/atomic-product-description.cjs.entry.js.map +0 -1
  219. package/dist/cjs/debounce-utils-e014935f.js +0 -49
  220. package/dist/cjs/debounce-utils-e014935f.js.map +0 -1
  221. package/dist/cjs/plus-07843914.js +0 -13
  222. package/dist/cjs/plus-07843914.js.map +0 -1
  223. package/dist/cjs/stencil-facet-show-more-less-21d22973.js.map +0 -1
  224. package/dist/esm/atomic-aria-live_2.entry.js.map +0 -1
  225. package/dist/esm/atomic-product-description.entry.js +0 -137
  226. package/dist/esm/atomic-product-description.entry.js.map +0 -1
  227. package/dist/esm/debounce-utils-efa015c0.js +0 -46
  228. package/dist/esm/plus-00840ff6.js +0 -10
  229. package/dist/esm/plus-00840ff6.js.map +0 -1
  230. package/dist/esm/stencil-facet-show-more-less-4b023ee3.js.map +0 -1
  231. package/dist/types/components/search/atomic-search-interface/atomic-aria-live.d.ts +0 -23
  232. /package/dist/atomic/{p-1b491649.entry.js.map → p-0af927f0.entry.js.map} +0 -0
  233. /package/dist/atomic/{p-b043958c.entry.js.map → p-0b9cd281.entry.js.map} +0 -0
  234. /package/dist/atomic/{p-e44ba87e.entry.js.map → p-0f5ae66e.entry.js.map} +0 -0
  235. /package/dist/atomic/{p-0674783d.entry.js.map → p-1b329f85.entry.js.map} +0 -0
  236. /package/dist/atomic/{p-f699c143.entry.js.map → p-2d132fd3.entry.js.map} +0 -0
  237. /package/dist/atomic/{p-43188440.entry.js.map → p-2e2a6fe8.entry.js.map} +0 -0
  238. /package/dist/atomic/{p-efd2bb5f.entry.js.map → p-306161d1.entry.js.map} +0 -0
  239. /package/dist/atomic/{p-a0445771.entry.js.map → p-4c5702ba.entry.js.map} +0 -0
  240. /package/dist/atomic/{p-acc4d5de.js.map → p-53bcc515.js.map} +0 -0
  241. /package/dist/atomic/{p-e2560da8.entry.js.map → p-5f64bbe0.entry.js.map} +0 -0
  242. /package/dist/atomic/{p-fc73190d.entry.js.map → p-6638ca39.entry.js.map} +0 -0
  243. /package/dist/atomic/{p-1176959c.entry.js.map → p-6f8ae3d2.entry.js.map} +0 -0
  244. /package/dist/atomic/{p-0ed0e8b8.entry.js.map → p-731f82ed.entry.js.map} +0 -0
  245. /package/dist/atomic/{p-25f8b8d8.entry.js.map → p-7a07530d.entry.js.map} +0 -0
  246. /package/dist/atomic/{p-c8d47706.entry.js.map → p-7a5d346b.entry.js.map} +0 -0
  247. /package/dist/atomic/{p-5b888121.entry.js.map → p-89721f11.entry.js.map} +0 -0
  248. /package/dist/atomic/{p-29f21264.entry.js.map → p-9c8e5057.entry.js.map} +0 -0
  249. /package/dist/atomic/{p-11dd759c.entry.js.map → p-b1f7ac63.entry.js.map} +0 -0
  250. /package/dist/atomic/{p-5fc9f751.entry.js.map → p-bf5d5c79.entry.js.map} +0 -0
  251. /package/dist/atomic/{p-716e9e1d.entry.js.map → p-c0025d4c.entry.js.map} +0 -0
  252. /package/dist/atomic/{p-494c57a0.entry.js.map → p-e406cacd.entry.js.map} +0 -0
  253. /package/dist/atomic/{p-e790d557.entry.js.map → p-f0e861c5.entry.js.map} +0 -0
  254. /package/dist/atomic/{p-a55cd386.js.map → p-f865008d.js.map} +0 -0
  255. /package/dist/atomic/{p-391c26ba.entry.js.map → p-f9bfd18b.entry.js.map} +0 -0
@@ -1,2 +0,0 @@
1
- import{h as e,r as t,g as i}from"./p-dc3df5ce.js";import{Schema as s,StringValue as n}from"@coveo/bueno";import{I as l,H as o}from"./p-d6e6dbc3.js";import{M as a,P as c}from"./p-8f20d930.js";import{B as r}from"./p-28a6dd9b.js";import{P as h}from"./p-fe23d27e.js";import"./p-c9074946.js";import"./p-1580513b.js";import"./p-05de7ca3.js";import"./p-f77160c6.js";import"./p-ef905286.js";import"./p-21ab6f55.js";import"./p-3dc06261.js";const p=e=>{const t={none:"line-clamp-none",1:"line-clamp-1",2:"line-clamp-2",3:"line-clamp-3",4:"line-clamp-4"};return t[e]||"line-clamp-2"};const d=(t,i,s,n,l,o)=>{let h="expandable-text-button p-1 text-xs leading-[calc(1/.75)]";if(!i&&!t){h+=" invisible"}else if(!s&&!i&&t){h+=" hidden"}const p=t?o:l;return e(r,{style:"text-primary",class:h,title:p,onClick:n},e("atomic-icon",{icon:t?a:c,class:"mx-1 w-2 align-baseline"}),p)};const f=({isExpanded:t,isTruncated:i,truncateAfter:s,onToggleExpand:n,showMoreLabel:l,showLessLabel:o,isCollapsible:a=false},c)=>e("div",{class:"flex flex-col items-start"},e("div",{part:"expandable-text",class:`expandable-text ${!t?p(s):""} min-lines-${s}`},c),d(t,i,a,n,l,o));const m="/*! tailwindcss v4.1.11 | MIT License | https://tailwindcss.com */.expandable-text{line-height:var(--line-height)}.min-lines-1{min-height:calc(var(--line-height) * 1)}.min-lines-2{min-height:calc(var(--line-height) * 2)}.min-lines-3{min-height:calc(var(--line-height) * 3)}.min-lines-4{min-height:calc(var(--line-height) * 4)}";const u=m;var b=undefined&&undefined.__decorate||function(e,t,i,s){var n=arguments.length,l=n<3?t:s===null?s=Object.getOwnPropertyDescriptor(t,i):s,o;if(typeof Reflect==="object"&&typeof Reflect.decorate==="function")l=Reflect.decorate(e,t,i,s);else for(var a=e.length-1;a>=0;a--)if(o=e[a])l=(n<3?o(l):n>3?o(t,i,l):o(t,i))||l;return n>3&&l&&Object.defineProperty(t,i,l),l};const x=class{constructor(e){t(this,e);this.isExpanded=false;this.isTruncated=false;this.truncateAfter="2";this.field="ec_shortdesc";this.isCollapsible=true;this.isExpanded=false;this.isTruncated=false;this.truncateAfter="2";this.field="ec_shortdesc";this.isCollapsible=true;this.resizeObserver=new ResizeObserver((()=>{if(this.descriptionText&&this.descriptionText.scrollHeight>this.descriptionText.clientHeight){this.isTruncated=true}else{this.isTruncated=false}}));this.validateProps()}validateProps(){new s({truncateAfter:new n({constrainTo:["none","1","2","3","4"]}),field:new n({constrainTo:["ec_shortdesc","ec_description"]})}).validate({truncateAfter:this.truncateAfter,field:this.field})}componentDidLoad(){this.descriptionText=this.hostElement.querySelector(".expandable-text");if(this.descriptionText){this.resizeObserver.observe(this.descriptionText)}}onToggleExpand(e){if(e){e.stopPropagation()}this.isExpanded=!this.isExpanded}disconnectedCallback(){this.resizeObserver.disconnect()}render(){const t=this.product[this.field]??null;if(!t){return e(o,null)}return e(f,{isExpanded:this.isExpanded,isTruncated:this.isTruncated,truncateAfter:this.truncateAfter,onToggleExpand:e=>this.onToggleExpand(e),showMoreLabel:this.bindings.i18n.t("show-more"),showLessLabel:this.bindings.i18n.t("show-less"),isCollapsible:this.isCollapsible},e("atomic-product-text",{field:this.field}))}get hostElement(){return i(this)}};b([l()],x.prototype,"bindings",void 0);b([h()],x.prototype,"product",void 0);x.style=u;export{x as atomic_product_description};
2
- //# sourceMappingURL=p-f2d31b97.entry.js.map
@@ -1 +0,0 @@
1
- {"version":3,"names":["getLineClampClass","truncateAfter","lineClampMap","none","renderShowHideButton","isExpanded","isTruncated","isCollapsible","onToggleExpand","showMoreLabel","showLessLabel","buttonClass","label","h","Button","style","class","title","onClick","icon","MinusIcon","PlusIcon","ExpandableText","children","part","atomicProductDescriptionCss","AtomicProductDescriptionStyle0","AtomicProductDescription","constructor","hostRef","this","field","resizeObserver","ResizeObserver","descriptionText","scrollHeight","clientHeight","validateProps","Schema","StringValue","constrainTo","validate","componentDidLoad","hostElement","querySelector","observe","e","stopPropagation","disconnectedCallback","disconnect","render","productDescription","product","Hidden","bindings","i18n","t","__decorate","InitializeBindings","ProductContext"],"sources":["src/components/common/expandable-text/stencil-expandable-text.tsx","src/components/commerce/atomic-product-description/atomic-product-description.pcss?tag=atomic-product-description","src/components/commerce/atomic-product-description/atomic-product-description.tsx"],"sourcesContent":["import {FunctionalComponent, h} from '@stencil/core';\nimport MinusIcon from '../../../images/minus.svg';\nimport PlusIcon from '../../../images/plus.svg';\nimport {Button} from '../stencil-button';\n\nexport type TruncateAfter = 'none' | '1' | '2' | '3' | '4';\n\ninterface ExpandableTextProps {\n isExpanded: boolean;\n isTruncated: boolean;\n isCollapsible?: boolean;\n truncateAfter: TruncateAfter;\n onToggleExpand: (e: MouseEvent | undefined) => void;\n showMoreLabel: string;\n showLessLabel: string;\n}\n\nconst getLineClampClass = (truncateAfter: TruncateAfter) => {\n const lineClampMap: Record<TruncateAfter, string> = {\n none: 'line-clamp-none',\n 1: 'line-clamp-1',\n 2: 'line-clamp-2',\n 3: 'line-clamp-3',\n 4: 'line-clamp-4',\n };\n return lineClampMap[truncateAfter] || 'line-clamp-2';\n};\n\nconst renderShowHideButton = (\n isExpanded: boolean,\n isTruncated: boolean,\n isCollapsible: boolean,\n onToggleExpand: (e?: MouseEvent) => void,\n showMoreLabel: string,\n showLessLabel: string\n) => {\n let buttonClass = 'expandable-text-button p-1 text-xs leading-[calc(1/.75)]';\n if (!isTruncated && !isExpanded) {\n buttonClass += ' invisible';\n } else if (!isCollapsible && !isTruncated && isExpanded) {\n buttonClass += ' hidden';\n }\n\n const label = isExpanded ? showLessLabel : showMoreLabel;\n\n return (\n <Button\n style=\"text-primary\"\n class={buttonClass}\n title={label}\n onClick={onToggleExpand}\n >\n <atomic-icon\n icon={isExpanded ? MinusIcon : PlusIcon}\n class=\"mx-1 w-2 align-baseline\"\n ></atomic-icon>\n {label}\n </Button>\n );\n};\n\nexport const ExpandableText: FunctionalComponent<ExpandableTextProps> = (\n {\n isExpanded,\n isTruncated,\n truncateAfter,\n onToggleExpand,\n showMoreLabel,\n showLessLabel,\n isCollapsible = false,\n },\n children\n) => {\n return (\n <div class=\"flex flex-col items-start\">\n <div\n part=\"expandable-text\"\n class={`expandable-text ${!isExpanded ? getLineClampClass(truncateAfter) : ''} min-lines-${truncateAfter}`}\n >\n {children}\n </div>\n {renderShowHideButton(\n isExpanded,\n isTruncated,\n isCollapsible,\n onToggleExpand,\n showMoreLabel,\n showLessLabel\n )}\n </div>\n );\n};\n","@import '../../common/expandable-text/expandable-text.pcss';\n","import {Schema, StringValue} from '@coveo/bueno';\nimport {Product} from '@coveo/headless/commerce';\nimport {Component, State, h, Element, Prop} from '@stencil/core';\nimport {\n InitializableComponent,\n InitializeBindings,\n} from '../../../utils/initialization-utils';\nimport {\n ExpandableText,\n TruncateAfter,\n} from '../../common/expandable-text/stencil-expandable-text';\nimport {Hidden} from '../../common/stencil-hidden';\nimport {CommerceBindings} from '../atomic-commerce-interface/atomic-commerce-interface';\nimport {ProductContext} from '../product-template-component-utils/stencil-product-template-decorators';\n\n/**\n * @alpha\n * The `atomic-product-description` component renders the description of a product.\n */\n@Component({\n tag: 'atomic-product-description',\n styleUrl: 'atomic-product-description.pcss',\n shadow: false,\n})\nexport class AtomicProductDescription\n implements InitializableComponent<CommerceBindings>\n{\n @InitializeBindings() public bindings!: CommerceBindings;\n @ProductContext() private product!: Product;\n\n @Element() hostElement!: HTMLElement;\n\n public error!: Error;\n\n @State() private isExpanded = false;\n @State() private isTruncated = false;\n\n private descriptionText!: HTMLDivElement;\n private resizeObserver: ResizeObserver;\n\n /**\n * The number of lines after which the product description should be truncated. A value of \"none\" will disable truncation.\n */\n @Prop() public truncateAfter: TruncateAfter = '2';\n\n /**\n * The name of the description field to use.\n */\n @Prop() public field: 'ec_description' | 'ec_shortdesc' = 'ec_shortdesc';\n\n /**\n * Whether the description should be collapsible after being expanded.\n */\n @Prop() public isCollapsible = true;\n\n constructor() {\n this.resizeObserver = new ResizeObserver(() => {\n if (\n this.descriptionText &&\n this.descriptionText.scrollHeight > this.descriptionText.clientHeight\n ) {\n this.isTruncated = true;\n } else {\n this.isTruncated = false;\n }\n });\n this.validateProps();\n }\n\n private validateProps() {\n new Schema({\n truncateAfter: new StringValue({\n constrainTo: ['none', '1', '2', '3', '4'],\n }),\n field: new StringValue({\n constrainTo: ['ec_shortdesc', 'ec_description'],\n }),\n }).validate({\n truncateAfter: this.truncateAfter,\n field: this.field,\n });\n }\n\n componentDidLoad() {\n this.descriptionText = this.hostElement.querySelector(\n '.expandable-text'\n ) as HTMLDivElement;\n if (this.descriptionText) {\n this.resizeObserver.observe(this.descriptionText);\n }\n }\n\n private onToggleExpand(e?: MouseEvent) {\n if (e) {\n e.stopPropagation();\n }\n\n this.isExpanded = !this.isExpanded;\n }\n\n disconnectedCallback() {\n this.resizeObserver.disconnect();\n }\n\n public render() {\n const productDescription = this.product[this.field] ?? null;\n\n if (!productDescription) {\n return <Hidden />;\n }\n\n return (\n <ExpandableText\n isExpanded={this.isExpanded}\n isTruncated={this.isTruncated}\n truncateAfter={this.truncateAfter}\n onToggleExpand={(e) => this.onToggleExpand(e)}\n showMoreLabel={this.bindings.i18n.t('show-more')}\n showLessLabel={this.bindings.i18n.t('show-less')}\n isCollapsible={this.isCollapsible}\n >\n <atomic-product-text field={this.field}></atomic-product-text>\n </ExpandableText>\n );\n }\n}\n"],"mappings":"+aAiBA,MAAMA,EAAqBC,IACzB,MAAMC,EAA8C,CAClDC,KAAM,kBACN,EAAG,eACH,EAAG,eACH,EAAG,eACH,EAAG,gBAEL,OAAOD,EAAaD,IAAkB,cAAc,EAGtD,MAAMG,EAAuB,CAC3BC,EACAC,EACAC,EACAC,EACAC,EACAC,KAEA,IAAIC,EAAc,2DAClB,IAAKL,IAAgBD,EAAY,CAC/BM,GAAe,Y,MACV,IAAKJ,IAAkBD,GAAeD,EAAY,CACvDM,GAAe,S,CAGjB,MAAMC,EAAQP,EAAaK,EAAgBD,EAE3C,OACEI,EAACC,EAAM,CACLC,MAAM,eACNC,MAAOL,EACPM,MAAOL,EACPM,QAASV,GAETK,EAAA,eACEM,KAAMd,EAAae,EAAYC,EAC/BL,MAAM,4BAEPJ,EACM,EAIN,MAAMU,EAA2D,EAEpEjB,aACAC,cACAL,gBACAO,iBACAC,gBACAC,gBACAH,gBAAgB,OAElBgB,IAGEV,EAAA,OAAKG,MAAM,6BACTH,EAAA,OACEW,KAAK,kBACLR,MAAO,oBAAoBX,EAAaL,EAAkBC,GAAiB,gBAAgBA,KAE1FsB,GAEFnB,EACCC,EACAC,EACAC,EACAC,EACAC,EACAC,ICvFR,MAAMe,EAA8B,yUACpC,MAAAC,EAAeD,E,iXCuBFE,EAAwB,MA+BnC,WAAAC,CAAAC,G,UArBiBC,KAAAzB,WAAa,MACbyB,KAAAxB,YAAc,MAQhBwB,KAAA7B,cAA+B,IAK/B6B,KAAAC,MAA2C,eAK3CD,KAAAvB,cAAgB,K,gBAnBD,M,iBACC,M,mBAQe,I,WAKY,e,mBAK3B,KAG7BuB,KAAKE,eAAiB,IAAIC,gBAAe,KACvC,GACEH,KAAKI,iBACLJ,KAAKI,gBAAgBC,aAAeL,KAAKI,gBAAgBE,aACzD,CACAN,KAAKxB,YAAc,I,KACd,CACLwB,KAAKxB,YAAc,K,KAGvBwB,KAAKO,e,CAGC,aAAAA,GACN,IAAIC,EAAO,CACTrC,cAAe,IAAIsC,EAAY,CAC7BC,YAAa,CAAC,OAAQ,IAAK,IAAK,IAAK,OAEvCT,MAAO,IAAIQ,EAAY,CACrBC,YAAa,CAAC,eAAgB,sBAE/BC,SAAS,CACVxC,cAAe6B,KAAK7B,cACpB8B,MAAOD,KAAKC,O,CAIhB,gBAAAW,GACEZ,KAAKI,gBAAkBJ,KAAKa,YAAYC,cACtC,oBAEF,GAAId,KAAKI,gBAAiB,CACxBJ,KAAKE,eAAea,QAAQf,KAAKI,gB,EAI7B,cAAA1B,CAAesC,GACrB,GAAIA,EAAG,CACLA,EAAEC,iB,CAGJjB,KAAKzB,YAAcyB,KAAKzB,U,CAG1B,oBAAA2C,GACElB,KAAKE,eAAeiB,Y,CAGf,MAAAC,GACL,MAAMC,EAAqBrB,KAAKsB,QAAQtB,KAAKC,QAAU,KAEvD,IAAKoB,EAAoB,CACvB,OAAOtC,EAACwC,EAAM,K,CAGhB,OACExC,EAACS,EAAc,CACbjB,WAAYyB,KAAKzB,WACjBC,YAAawB,KAAKxB,YAClBL,cAAe6B,KAAK7B,cACpBO,eAAiBsC,GAAMhB,KAAKtB,eAAesC,GAC3CrC,cAAeqB,KAAKwB,SAASC,KAAKC,EAAE,aACpC9C,cAAeoB,KAAKwB,SAASC,KAAKC,EAAE,aACpCjD,cAAeuB,KAAKvB,eAEpBM,EAAA,uBAAqBkB,MAAOD,KAAKC,Q,oCA9FV0B,EAAA,CAA5BC,K,+BACyBD,EAAA,CAAzBE,K","ignoreList":[]}
@@ -1 +0,0 @@
1
- {"file":"atomic-aria-live.atomic-relevance-inspector.entry.cjs.js","mappings":"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","names":["buildDebouncedQueue","randomID","h","Host","Button","getOrganizationEndpoint"],"sources":["src/components/search/atomic-search-interface/atomic-aria-live.tsx","src/components/search/atomic-relevance-inspector/atomic-relevance-inspector.pcss?tag=atomic-relevance-inspector&encapsulation=shadow","src/components/search/atomic-relevance-inspector/atomic-relevance-inspector.tsx"],"sourcesContent":["import {\n Component,\n h,\n State,\n Element,\n Method,\n Listen,\n Host,\n} from '@stencil/core';\nimport {buildDebouncedQueue} from '../../../utils/debounce-utils';\nimport {FindAriaLiveEventArgs} from '../../../utils/stencil-accessibility-utils';\nimport {randomID} from '../../../utils/utils';\n\ntype Regions = {[regionName: string]: {assertive: boolean; message: string}};\n\n/**\n * The `atomic-aria-live` component notifies screen readers of changes in the search interface.\n */\n@Component({\n tag: 'atomic-aria-live',\n shadow: false,\n})\nexport class AtomicAriaLive {\n @Element() private host!: HTMLAtomicAriaLiveElement;\n @State() private regions: Readonly<Regions> = {};\n\n private messagesQueue = buildDebouncedQueue({delay: 500});\n private id!: string;\n\n @Listen('atomic/accessibility/findAriaLive', {target: 'document'})\n protected onFindAriaLive({detail: args}: CustomEvent<FindAriaLiveEventArgs>) {\n if (!args.element || !this.isInSearchInterface) {\n args.element = this.host;\n }\n }\n\n private get isInSearchInterface() {\n let element: Element | null = this.host;\n while (element) {\n if (element.tagName === 'ATOMIC-SEARCH-INTERFACE') {\n return true;\n }\n element = element.parentElement;\n }\n return false;\n }\n\n connectedCallback() {\n this.id = randomID('atomic-aria-live-');\n }\n\n /**\n * @internal\n */\n @Method()\n public async updateMessage(\n region: string,\n message: string,\n assertive: boolean\n ) {\n const updateRegion = () =>\n (this.regions = {...this.regions, [region]: {assertive, message}});\n\n if (message) {\n this.messagesQueue.enqueue(updateRegion, region);\n } else {\n this.messagesQueue.cancelActionIfQueued(region);\n updateRegion();\n }\n }\n\n /**\n * @internal\n */\n @Method()\n public async registerRegion(region: string, assertive: boolean) {\n if (region in this.regions) {\n return;\n }\n this.regions = {...this.regions, [region]: {assertive, message: ''}};\n }\n\n public disconnectedCallback() {\n this.messagesQueue.clear();\n }\n\n public render() {\n return (\n <Host\n style={{\n position: 'absolute',\n display: 'block',\n height: '0',\n overflow: 'hidden',\n margin: '0',\n }}\n >\n {Object.entries(this.regions).map(\n ([regionName, {assertive, message}]) => (\n <div\n key={regionName}\n id={`${this.id}-${regionName}`}\n aria-live={assertive ? 'assertive' : 'polite'}\n role=\"status\"\n >\n {message}\n </div>\n )\n )}\n </Host>\n );\n }\n}\n","@import '../../../global/global.pcss';\n","import {getOrganizationEndpoint} from '@coveo/headless';\nimport {Component, h, Prop, Event, EventEmitter} from '@stencil/core';\nimport {Button} from '../../common/stencil-button';\nimport {Bindings} from '../atomic-search-interface/atomic-search-interface';\n\n/**\n * The `atomic-relevance-inspector` component is used internally to offer insight on search page relevance, as well as information to help troubleshoot issues during development.\n */\n@Component({\n tag: 'atomic-relevance-inspector',\n styleUrl: 'atomic-relevance-inspector.pcss',\n shadow: true,\n})\nexport class AtomicRelevanceInspector {\n /**\n * The Atomic interface bindings, namely the headless search engine and i18n instances.\n */\n @Prop() bindings!: Bindings;\n\n @Prop({reflect: true}) open = false;\n\n @Event({eventName: 'atomic/relevanceInspector/close'})\n closeRelevanceInspector: EventEmitter<null> | undefined;\n\n public render() {\n return (\n <atomic-modal\n exportparts=\"footer\"\n isOpen={this.open}\n close={() => {\n this.closeRelevanceInspector?.emit();\n }}\n >\n <p slot=\"header\">Open the relevance inspector</p>\n <p slot=\"body\">\n The Relevance Inspector will open in the Coveo Administration Console.\n </p>\n <div slot=\"footer\" class=\"flex w-full items-center justify-end\">\n <Button\n style=\"outline-primary\"\n class=\"mr-2 p-2\"\n onClick={() => this.closeRelevanceInspector?.emit()}\n >\n Ignore\n </Button>\n <a\n class=\"btn-primary p-2\"\n target=\"_blank\"\n href={this.adminHref}\n onClick={() => this.closeRelevanceInspector?.emit()}\n >\n Open\n </a>\n </div>\n </atomic-modal>\n );\n }\n\n private get adminHref() {\n const {organizationId, environment} =\n this.bindings.engine.state.configuration;\n\n const admin = getOrganizationEndpoint(organizationId, environment, 'admin');\n const {searchResponseId} = this.bindings.engine.state.search;\n return `${admin}/admin/#/${organizationId}/search/relevanceInspector/${searchResponseId}`;\n }\n}\n"],"version":3}
@@ -1,141 +0,0 @@
1
- 'use strict';
2
-
3
- Object.defineProperty(exports, '__esModule', { value: true });
4
-
5
- const index = require('./index-757bc886.js');
6
- const bueno = require('@coveo/bueno');
7
- const initializationUtils = require('./initialization-utils-62dc9852.js');
8
- const plus = require('./plus-07843914.js');
9
- const stencilButton = require('./stencil-button-aa4c0879.js');
10
- const stencilProductTemplateDecorators = require('./stencil-product-template-decorators-1edee0eb.js');
11
- require('./dom-utils-d4790328.js');
12
- require('./event-utils-9bfcf3c5.js');
13
- require('./init-queue-a18aa323.js');
14
- require('./initialization-lit-stencil-common-utils-24279cfa.js');
15
- require('./ripple-4070d750.js');
16
- require('./stencil-button-style-ba779fe2.js');
17
- require('./stencil-item-decorators-43a96f33.js');
18
-
19
- const getLineClampClass = (truncateAfter) => {
20
- const lineClampMap = {
21
- none: 'line-clamp-none',
22
- 1: 'line-clamp-1',
23
- 2: 'line-clamp-2',
24
- 3: 'line-clamp-3',
25
- 4: 'line-clamp-4',
26
- };
27
- return lineClampMap[truncateAfter] || 'line-clamp-2';
28
- };
29
- const renderShowHideButton = (isExpanded, isTruncated, isCollapsible, onToggleExpand, showMoreLabel, showLessLabel) => {
30
- let buttonClass = 'expandable-text-button p-1 text-xs leading-[calc(1/.75)]';
31
- if (!isTruncated && !isExpanded) {
32
- buttonClass += ' invisible';
33
- }
34
- else if (!isCollapsible && !isTruncated && isExpanded) {
35
- buttonClass += ' hidden';
36
- }
37
- const label = isExpanded ? showLessLabel : showMoreLabel;
38
- return (index.h(stencilButton.Button, { style: "text-primary", class: buttonClass, title: label, onClick: onToggleExpand },
39
- index.h("atomic-icon", { icon: isExpanded ? plus.MinusIcon : plus.PlusIcon, class: "mx-1 w-2 align-baseline" }),
40
- label));
41
- };
42
- const ExpandableText = ({ isExpanded, isTruncated, truncateAfter, onToggleExpand, showMoreLabel, showLessLabel, isCollapsible = false, }, children) => {
43
- return (index.h("div", { class: "flex flex-col items-start" },
44
- index.h("div", { part: "expandable-text", class: `expandable-text ${!isExpanded ? getLineClampClass(truncateAfter) : ''} min-lines-${truncateAfter}` }, children),
45
- renderShowHideButton(isExpanded, isTruncated, isCollapsible, onToggleExpand, showMoreLabel, showLessLabel)));
46
- };
47
-
48
- const atomicProductDescriptionCss = "/*! tailwindcss v4.1.11 | MIT License | https://tailwindcss.com */.expandable-text{line-height:var(--line-height)}.min-lines-1{min-height:calc(var(--line-height) * 1)}.min-lines-2{min-height:calc(var(--line-height) * 2)}.min-lines-3{min-height:calc(var(--line-height) * 3)}.min-lines-4{min-height:calc(var(--line-height) * 4)}";
49
- const AtomicProductDescriptionStyle0 = atomicProductDescriptionCss;
50
-
51
- var __decorate = (undefined && undefined.__decorate) || function (decorators, target, key, desc) {
52
- var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;
53
- if (typeof Reflect === "object" && typeof Reflect.decorate === "function")
54
- r = Reflect.decorate(decorators, target, key, desc);
55
- else
56
- for (var i = decorators.length - 1; i >= 0; i--)
57
- if (d = decorators[i])
58
- r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;
59
- return c > 3 && r && Object.defineProperty(target, key, r), r;
60
- };
61
- const AtomicProductDescription = class {
62
- constructor(hostRef) {
63
- index.registerInstance(this, hostRef);
64
- this.isExpanded = false;
65
- this.isTruncated = false;
66
- /**
67
- * The number of lines after which the product description should be truncated. A value of "none" will disable truncation.
68
- */
69
- this.truncateAfter = '2';
70
- /**
71
- * The name of the description field to use.
72
- */
73
- this.field = 'ec_shortdesc';
74
- /**
75
- * Whether the description should be collapsible after being expanded.
76
- */
77
- this.isCollapsible = true;
78
- this.isExpanded = false;
79
- this.isTruncated = false;
80
- this.truncateAfter = '2';
81
- this.field = 'ec_shortdesc';
82
- this.isCollapsible = true;
83
- this.resizeObserver = new ResizeObserver(() => {
84
- if (this.descriptionText &&
85
- this.descriptionText.scrollHeight > this.descriptionText.clientHeight) {
86
- this.isTruncated = true;
87
- }
88
- else {
89
- this.isTruncated = false;
90
- }
91
- });
92
- this.validateProps();
93
- }
94
- validateProps() {
95
- new bueno.Schema({
96
- truncateAfter: new bueno.StringValue({
97
- constrainTo: ['none', '1', '2', '3', '4'],
98
- }),
99
- field: new bueno.StringValue({
100
- constrainTo: ['ec_shortdesc', 'ec_description'],
101
- }),
102
- }).validate({
103
- truncateAfter: this.truncateAfter,
104
- field: this.field,
105
- });
106
- }
107
- componentDidLoad() {
108
- this.descriptionText = this.hostElement.querySelector('.expandable-text');
109
- if (this.descriptionText) {
110
- this.resizeObserver.observe(this.descriptionText);
111
- }
112
- }
113
- onToggleExpand(e) {
114
- if (e) {
115
- e.stopPropagation();
116
- }
117
- this.isExpanded = !this.isExpanded;
118
- }
119
- disconnectedCallback() {
120
- this.resizeObserver.disconnect();
121
- }
122
- render() {
123
- const productDescription = this.product[this.field] ?? null;
124
- if (!productDescription) {
125
- return index.h(initializationUtils.Hidden, null);
126
- }
127
- return (index.h(ExpandableText, { isExpanded: this.isExpanded, isTruncated: this.isTruncated, truncateAfter: this.truncateAfter, onToggleExpand: (e) => this.onToggleExpand(e), showMoreLabel: this.bindings.i18n.t('show-more'), showLessLabel: this.bindings.i18n.t('show-less'), isCollapsible: this.isCollapsible }, index.h("atomic-product-text", { field: this.field })));
128
- }
129
- get hostElement() { return index.getElement(this); }
130
- };
131
- __decorate([
132
- initializationUtils.InitializeBindings()
133
- ], AtomicProductDescription.prototype, "bindings", void 0);
134
- __decorate([
135
- stencilProductTemplateDecorators.ProductContext()
136
- ], AtomicProductDescription.prototype, "product", void 0);
137
- AtomicProductDescription.style = AtomicProductDescriptionStyle0;
138
-
139
- exports.atomic_product_description = AtomicProductDescription;
140
-
141
- //# sourceMappingURL=atomic-product-description.cjs.entry.js.map
@@ -1 +0,0 @@
1
- {"file":"atomic-product-description.entry.cjs.js","mappings":"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","names":["h","Button","MinusIcon","PlusIcon","Schema","StringValue","Hidden","InitializeBindings","ProductContext"],"sources":["src/components/common/expandable-text/stencil-expandable-text.tsx","src/components/commerce/atomic-product-description/atomic-product-description.pcss?tag=atomic-product-description","src/components/commerce/atomic-product-description/atomic-product-description.tsx"],"sourcesContent":["import {FunctionalComponent, h} from '@stencil/core';\nimport MinusIcon from '../../../images/minus.svg';\nimport PlusIcon from '../../../images/plus.svg';\nimport {Button} from '../stencil-button';\n\nexport type TruncateAfter = 'none' | '1' | '2' | '3' | '4';\n\ninterface ExpandableTextProps {\n isExpanded: boolean;\n isTruncated: boolean;\n isCollapsible?: boolean;\n truncateAfter: TruncateAfter;\n onToggleExpand: (e: MouseEvent | undefined) => void;\n showMoreLabel: string;\n showLessLabel: string;\n}\n\nconst getLineClampClass = (truncateAfter: TruncateAfter) => {\n const lineClampMap: Record<TruncateAfter, string> = {\n none: 'line-clamp-none',\n 1: 'line-clamp-1',\n 2: 'line-clamp-2',\n 3: 'line-clamp-3',\n 4: 'line-clamp-4',\n };\n return lineClampMap[truncateAfter] || 'line-clamp-2';\n};\n\nconst renderShowHideButton = (\n isExpanded: boolean,\n isTruncated: boolean,\n isCollapsible: boolean,\n onToggleExpand: (e?: MouseEvent) => void,\n showMoreLabel: string,\n showLessLabel: string\n) => {\n let buttonClass = 'expandable-text-button p-1 text-xs leading-[calc(1/.75)]';\n if (!isTruncated && !isExpanded) {\n buttonClass += ' invisible';\n } else if (!isCollapsible && !isTruncated && isExpanded) {\n buttonClass += ' hidden';\n }\n\n const label = isExpanded ? showLessLabel : showMoreLabel;\n\n return (\n <Button\n style=\"text-primary\"\n class={buttonClass}\n title={label}\n onClick={onToggleExpand}\n >\n <atomic-icon\n icon={isExpanded ? MinusIcon : PlusIcon}\n class=\"mx-1 w-2 align-baseline\"\n ></atomic-icon>\n {label}\n </Button>\n );\n};\n\nexport const ExpandableText: FunctionalComponent<ExpandableTextProps> = (\n {\n isExpanded,\n isTruncated,\n truncateAfter,\n onToggleExpand,\n showMoreLabel,\n showLessLabel,\n isCollapsible = false,\n },\n children\n) => {\n return (\n <div class=\"flex flex-col items-start\">\n <div\n part=\"expandable-text\"\n class={`expandable-text ${!isExpanded ? getLineClampClass(truncateAfter) : ''} min-lines-${truncateAfter}`}\n >\n {children}\n </div>\n {renderShowHideButton(\n isExpanded,\n isTruncated,\n isCollapsible,\n onToggleExpand,\n showMoreLabel,\n showLessLabel\n )}\n </div>\n );\n};\n","@import '../../common/expandable-text/expandable-text.pcss';\n","import {Schema, StringValue} from '@coveo/bueno';\nimport {Product} from '@coveo/headless/commerce';\nimport {Component, State, h, Element, Prop} from '@stencil/core';\nimport {\n InitializableComponent,\n InitializeBindings,\n} from '../../../utils/initialization-utils';\nimport {\n ExpandableText,\n TruncateAfter,\n} from '../../common/expandable-text/stencil-expandable-text';\nimport {Hidden} from '../../common/stencil-hidden';\nimport {CommerceBindings} from '../atomic-commerce-interface/atomic-commerce-interface';\nimport {ProductContext} from '../product-template-component-utils/stencil-product-template-decorators';\n\n/**\n * @alpha\n * The `atomic-product-description` component renders the description of a product.\n */\n@Component({\n tag: 'atomic-product-description',\n styleUrl: 'atomic-product-description.pcss',\n shadow: false,\n})\nexport class AtomicProductDescription\n implements InitializableComponent<CommerceBindings>\n{\n @InitializeBindings() public bindings!: CommerceBindings;\n @ProductContext() private product!: Product;\n\n @Element() hostElement!: HTMLElement;\n\n public error!: Error;\n\n @State() private isExpanded = false;\n @State() private isTruncated = false;\n\n private descriptionText!: HTMLDivElement;\n private resizeObserver: ResizeObserver;\n\n /**\n * The number of lines after which the product description should be truncated. A value of \"none\" will disable truncation.\n */\n @Prop() public truncateAfter: TruncateAfter = '2';\n\n /**\n * The name of the description field to use.\n */\n @Prop() public field: 'ec_description' | 'ec_shortdesc' = 'ec_shortdesc';\n\n /**\n * Whether the description should be collapsible after being expanded.\n */\n @Prop() public isCollapsible = true;\n\n constructor() {\n this.resizeObserver = new ResizeObserver(() => {\n if (\n this.descriptionText &&\n this.descriptionText.scrollHeight > this.descriptionText.clientHeight\n ) {\n this.isTruncated = true;\n } else {\n this.isTruncated = false;\n }\n });\n this.validateProps();\n }\n\n private validateProps() {\n new Schema({\n truncateAfter: new StringValue({\n constrainTo: ['none', '1', '2', '3', '4'],\n }),\n field: new StringValue({\n constrainTo: ['ec_shortdesc', 'ec_description'],\n }),\n }).validate({\n truncateAfter: this.truncateAfter,\n field: this.field,\n });\n }\n\n componentDidLoad() {\n this.descriptionText = this.hostElement.querySelector(\n '.expandable-text'\n ) as HTMLDivElement;\n if (this.descriptionText) {\n this.resizeObserver.observe(this.descriptionText);\n }\n }\n\n private onToggleExpand(e?: MouseEvent) {\n if (e) {\n e.stopPropagation();\n }\n\n this.isExpanded = !this.isExpanded;\n }\n\n disconnectedCallback() {\n this.resizeObserver.disconnect();\n }\n\n public render() {\n const productDescription = this.product[this.field] ?? null;\n\n if (!productDescription) {\n return <Hidden />;\n }\n\n return (\n <ExpandableText\n isExpanded={this.isExpanded}\n isTruncated={this.isTruncated}\n truncateAfter={this.truncateAfter}\n onToggleExpand={(e) => this.onToggleExpand(e)}\n showMoreLabel={this.bindings.i18n.t('show-more')}\n showLessLabel={this.bindings.i18n.t('show-less')}\n isCollapsible={this.isCollapsible}\n >\n <atomic-product-text field={this.field}></atomic-product-text>\n </ExpandableText>\n );\n }\n}\n"],"version":3}
@@ -1,49 +0,0 @@
1
- 'use strict';
2
-
3
- function buildDebouncedQueue(options) {
4
- let actions = [];
5
- let intervalId = null;
6
- function dequeueAction() {
7
- const action = actions.shift();
8
- if (action) {
9
- action.execute();
10
- }
11
- else {
12
- clearInterval(intervalId);
13
- intervalId = null;
14
- }
15
- }
16
- function cancelActionIfQueued(id) {
17
- actions = actions.filter((action) => action.id !== id);
18
- }
19
- return {
20
- enqueue(execute, uniqueId) {
21
- if (uniqueId) {
22
- cancelActionIfQueued(uniqueId);
23
- }
24
- actions.push({ id: uniqueId, execute });
25
- if (intervalId === null) {
26
- dequeueAction();
27
- intervalId = setInterval(dequeueAction, options.delay);
28
- }
29
- },
30
- clear() {
31
- actions = [];
32
- },
33
- cancelActionIfQueued,
34
- };
35
- }
36
- function debounce(execute, wait) {
37
- let timer;
38
- return (...args) => {
39
- clearTimeout(timer);
40
- return new Promise((resolve) => {
41
- timer = setTimeout(() => resolve(execute(...args)), wait);
42
- });
43
- };
44
- }
45
-
46
- exports.buildDebouncedQueue = buildDebouncedQueue;
47
- exports.debounce = debounce;
48
-
49
- //# sourceMappingURL=debounce-utils-e014935f.js.map
@@ -1 +0,0 @@
1
- {"file":"debounce-utils-e014935f.js","mappings":";;SAegB,mBAAmB,CACjC,OAA8B;IAE9B,IAAI,OAAO,GAAmB,EAAE,CAAC;IACjC,IAAI,UAAU,GAA0C,IAAI,CAAC;IAE7D,SAAS,aAAa;QACpB,MAAM,MAAM,GAAG,OAAO,CAAC,KAAK,EAAE,CAAC;QAC/B,IAAI,MAAM,EAAE;YACV,MAAM,CAAC,OAAO,EAAE,CAAC;SAClB;aAAM;YACL,aAAa,CAAC,UAAW,CAAC,CAAC;YAC3B,UAAU,GAAG,IAAI,CAAC;SACnB;KACF;IAED,SAAS,oBAAoB,CAAC,EAAU;QACtC,OAAO,GAAG,OAAO,CAAC,MAAM,CAAC,CAAC,MAAM,KAAK,MAAM,CAAC,EAAE,KAAK,EAAE,CAAC,CAAC;KACxD;IAED,OAAO;QACL,OAAO,CAAC,OAAmB,EAAE,QAAiB;YAC5C,IAAI,QAAQ,EAAE;gBACZ,oBAAoB,CAAC,QAAQ,CAAC,CAAC;aAChC;YACD,OAAO,CAAC,IAAI,CAAC,EAAC,EAAE,EAAE,QAAQ,EAAE,OAAO,EAAC,CAAC,CAAC;YACtC,IAAI,UAAU,KAAK,IAAI,EAAE;gBACvB,aAAa,EAAE,CAAC;gBAChB,UAAU,GAAG,WAAW,CAAC,aAAa,EAAE,OAAO,CAAC,KAAK,CAAC,CAAC;aACxD;SACF;QACD,KAAK;YACH,OAAO,GAAG,EAAE,CAAC;SACd;QACD,oBAAoB;KACrB,CAAC;AACJ,CAAC;SAEe,QAAQ,CAItB,OAEmD,EACnD,IAAY;IAEZ,IAAI,KAAoC,CAAC;IAEzC,OAAO,CAAC,GAAG,IAAuB;QAChC,YAAY,CAAC,KAAK,CAAC,CAAC;QACpB,OAAO,IAAI,OAAO,CAAC,CAAC,OAAO;YACzB,KAAK,GAAG,UAAU,CAAC,MAAM,OAAO,CAAC,OAAO,CAAC,GAAG,IAAI,CAAC,CAAC,EAAE,IAAI,CAAC,CAAC;SAC3D,CAAC,CAAC;KACJ,CAAC;AACJ;;;;;","names":[],"sources":["src/utils/debounce-utils.ts"],"sourcesContent":["export interface DebouncedQueueOptions {\n delay: number;\n}\n\nexport interface DebouncedQueue {\n enqueue(execute: () => void, uniqueId?: string): void;\n clear(): void;\n cancelActionIfQueued(id: string): void;\n}\n\ninterface QueuedAction {\n id?: string;\n execute: () => void;\n}\n\nexport function buildDebouncedQueue(\n options: DebouncedQueueOptions\n): DebouncedQueue {\n let actions: QueuedAction[] = [];\n let intervalId: ReturnType<typeof setInterval> | null = null;\n\n function dequeueAction() {\n const action = actions.shift();\n if (action) {\n action.execute();\n } else {\n clearInterval(intervalId!);\n intervalId = null;\n }\n }\n\n function cancelActionIfQueued(id: string) {\n actions = actions.filter((action) => action.id !== id);\n }\n\n return {\n enqueue(execute: () => void, uniqueId?: string) {\n if (uniqueId) {\n cancelActionIfQueued(uniqueId);\n }\n actions.push({id: uniqueId, execute});\n if (intervalId === null) {\n dequeueAction();\n intervalId = setInterval(dequeueAction, options.delay);\n }\n },\n clear() {\n actions = [];\n },\n cancelActionIfQueued,\n };\n}\n\nexport function debounce<\n ExecuteParameters extends unknown[],\n ExecuteReturnType,\n>(\n execute: (\n ...args: ExecuteParameters\n ) => Promise<ExecuteReturnType> | ExecuteReturnType,\n wait: number\n) {\n let timer: ReturnType<typeof setTimeout>;\n\n return (...args: ExecuteParameters): Promise<ExecuteReturnType> => {\n clearTimeout(timer);\n return new Promise((resolve) => {\n timer = setTimeout(() => resolve(execute(...args)), wait);\n });\n };\n}\n"],"version":3}
@@ -1,13 +0,0 @@
1
- 'use strict';
2
-
3
- const MinusIcon = `<svg viewBox="0 0 512 512" xmlns="http://www.w3.org/2000/svg"><path d="m64 208h384v96h-384z"/></svg>`;
4
-
5
- const PlusIcon = `<svg viewBox="0 0 512 512" xmlns="http://www.w3.org/2000/svg">
6
- <path d="M496 208H304V16h-96v192H16v96h192v192h96V304h192"/>
7
- </svg>
8
- `;
9
-
10
- exports.MinusIcon = MinusIcon;
11
- exports.PlusIcon = PlusIcon;
12
-
13
- //# sourceMappingURL=plus-07843914.js.map
@@ -1 +0,0 @@
1
- {"file":"plus-07843914.js","mappings":";;;;;;;;;;;;","names":[],"sources":[],"sourcesContent":[],"version":3}
@@ -1 +0,0 @@
1
- {"file":"stencil-facet-show-more-less-21d22973.js","mappings":";;;;;;;SAIgB,sCAAsC,CACpD,KAA0E,EAC1E,KAAa,EACb,WAAkC,EAClC,IAAU;IAEV,IAAI,SAAS,GAAG,KAAK,CAAC,KAAK,CAAC,WAAW,CAAC;IACxC,KAAK,CAAC,SAAS,CAAC;QACd,IACEA,gEAAgC,CAAC,KAAK,CAAC,KAAK,CAAC,WAAW,EAAE,SAAS,CAAC;YACpE,KAAK,CAAC,KAAK,CAAC,WAAW,CAAC,KAAK,EAC7B;YACA,SAAS,GAAG,KAAK,CAAC,KAAK,CAAC,WAAW,CAAC;YAEpC,WAAW,CACT,IAAI,CAAC,CAAC,CAAC,4BAA4B,EAAE;gBACnC,KAAK,EAAE,KAAK,CAAC,KAAK,CAAC,WAAW,CAAC,MAAM,CAAC,MAAM;gBAC5C,KAAK;aACN,CAAC,CACH,CAAC;SACH;KACF,CAAC,CAAC;AACL;;MCTa,iBAAiB,GAA4C,CACxE,KAAK;IAEL,MAAM,KAAK,GAAG,KAAK,CAAC,IAAI,CAAC,CAAC,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC;IACxC,MAAM,QAAQ,GAAG,KAAK,CAAC,IAAI,CAAC,CAAC,CAAC,WAAW,CAAC,CAAC;IAC3C,MAAM,mBAAmB,GAAG,KAAK,CAAC,IAAI,CAAC,CAAC,CAAC,wBAAwB,EAAE;QACjE,KAAK;KACN,CAAC,CAAC;IACH,MAAM,QAAQ,GAAG,KAAK,CAAC,IAAI,CAAC,CAAC,CAAC,WAAW,CAAC,CAAC;IAC3C,MAAM,mBAAmB,GAAG,KAAK,CAAC,IAAI,CAAC,CAAC,CAAC,wBAAwB,EAAE;QACjE,KAAK;KACN,CAAC,CAAC;IACH,MAAM,UAAU,GAAG,sDAAsD,CAAC;IAC1E,MAAM,WAAW,GAAG,cAAc,CAAC;IACnC,IAAI,CAAC,KAAK,CAAC,iBAAiB,IAAI,CAAC,KAAK,CAAC,iBAAiB,EAAE;QACxD,OAAO;KACR;IAED,QACEC,iBAAK,KAAK,EAAC,MAAM;QACfA,QAACC,oBAAM,IACL,KAAK,EAAC,cAAc,EACpB,IAAI,EAAC,WAAW,EAChB,KAAK,EAAE,GAAG,UAAU,IAAI,KAAK,CAAC,iBAAiB,GAAG,EAAE,GAAG,QAAQ,EAAE,EACjE,SAAS,EAAE,mBAAmB,EAC9B,OAAO,EAAE,MAAM,KAAK,CAAC,UAAU,EAAE,EACjC,GAAG,EAAE,KAAK,CAAC,WAAW;YAEtBD,yBACE,IAAI,EAAC,qBAAqB,EAC1B,KAAK,EAAE,WAAW,EAClB,IAAI,EAAEE,cAAS,GACF;YACfF,kBAAM,KAAK,EAAC,UAAU,IAAE,QAAQ,CAAQ,CACjC;QACTA,QAACC,oBAAM,IACL,KAAK,EAAC,cAAc,EACpB,IAAI,EAAC,WAAW,EAChB,KAAK,EAAE,GAAG,UAAU,IAAI,KAAK,CAAC,iBAAiB,GAAG,EAAE,GAAG,QAAQ,EAAE,EACjE,SAAS,EAAE,mBAAmB,EAC9B,OAAO,EAAE,MAAM,KAAK,CAAC,UAAU,EAAE,EACjC,GAAG,EAAE,KAAK,CAAC,WAAW;YAEtBD,yBACE,IAAI,EAAC,qBAAqB,EAC1B,KAAK,EAAE,WAAW,EAClB,IAAI,EAAEG,aAAQ,GACD;YACfH,kBAAM,KAAK,EAAC,UAAU,IAAE,QAAQ,CAAQ,CACjC,CACL,EACN;AACJ;;;;;","names":["shouldUpdateFacetSearchComponent","h","Button","MinusIcon","PlusIcon"],"sources":["src/components/common/facets/facet-search/facet-search-aria-live.ts","src/components/common/facets/facet-show-more-less/stencil-facet-show-more-less.tsx"],"sourcesContent":["import type {Facet, FacetSearchState} from '@coveo/headless';\nimport type {i18n} from 'i18next';\nimport {shouldUpdateFacetSearchComponent} from './facet-search-utils';\n\nexport function announceFacetSearchResultsWithAriaLive(\n facet: Pick<Facet, 'subscribe'> & {state: {facetSearch: FacetSearchState}},\n label: string,\n setAriaLive: (msg: string) => void,\n i18n: i18n\n) {\n let prevState = facet.state.facetSearch;\n facet.subscribe(() => {\n if (\n shouldUpdateFacetSearchComponent(facet.state.facetSearch, prevState) &&\n facet.state.facetSearch.query\n ) {\n prevState = facet.state.facetSearch;\n\n setAriaLive(\n i18n.t('facet-search-results-count', {\n count: facet.state.facetSearch.values.length,\n label,\n })\n );\n }\n });\n}\n","import {FunctionalComponent, h} from '@stencil/core';\nimport {i18n} from 'i18next';\nimport MinusIcon from '../../../../images/minus.svg';\nimport PlusIcon from '../../../../images/plus.svg';\nimport {Button} from '../../stencil-button';\n\ninterface FacetShowMoreProps {\n label: string;\n i18n: i18n;\n canShowLessValues: boolean;\n canShowMoreValues: boolean;\n onShowMore(): void;\n onShowLess(): void;\n showMoreRef?: (element?: HTMLButtonElement) => void;\n showLessRef?: (element?: HTMLButtonElement) => void;\n}\n\nexport const FacetShowMoreLess: FunctionalComponent<FacetShowMoreProps> = (\n props\n) => {\n const label = props.i18n.t(props.label);\n const showMore = props.i18n.t('show-more');\n const showMoreFacetValues = props.i18n.t('show-more-facet-values', {\n label,\n });\n const showLess = props.i18n.t('show-less');\n const showLessFacetValues = props.i18n.t('show-less-facet-values', {\n label,\n });\n const btnClasses = 'flex items-baseline text-left p-2 text-sm max-w-full';\n const iconClasses = 'w-2 h-2 mr-1';\n if (!props.canShowLessValues && !props.canShowMoreValues) {\n return;\n }\n\n return (\n <div class=\"mt-2\">\n <Button\n style=\"text-primary\"\n part=\"show-less\"\n class={`${btnClasses} ${props.canShowLessValues ? '' : 'hidden'}`}\n ariaLabel={showLessFacetValues}\n onClick={() => props.onShowLess()}\n ref={props.showLessRef}\n >\n <atomic-icon\n part=\"show-more-less-icon\"\n class={iconClasses}\n icon={MinusIcon}\n ></atomic-icon>\n <span class=\"truncate\">{showLess}</span>\n </Button>\n <Button\n style=\"text-primary\"\n part=\"show-more\"\n class={`${btnClasses} ${props.canShowMoreValues ? '' : 'hidden'}`}\n ariaLabel={showMoreFacetValues}\n onClick={() => props.onShowMore()}\n ref={props.showMoreRef}\n >\n <atomic-icon\n part=\"show-more-less-icon\"\n class={iconClasses}\n icon={PlusIcon}\n ></atomic-icon>\n <span class=\"truncate\">{showMore}</span>\n </Button>\n </div>\n );\n};\n"],"version":3}
@@ -1 +0,0 @@
1
- {"file":"atomic-aria-live.atomic-relevance-inspector.entry.js","mappings":"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","names":[],"sources":["src/components/search/atomic-search-interface/atomic-aria-live.tsx","src/components/search/atomic-relevance-inspector/atomic-relevance-inspector.pcss?tag=atomic-relevance-inspector&encapsulation=shadow","src/components/search/atomic-relevance-inspector/atomic-relevance-inspector.tsx"],"sourcesContent":["import {\n Component,\n h,\n State,\n Element,\n Method,\n Listen,\n Host,\n} from '@stencil/core';\nimport {buildDebouncedQueue} from '../../../utils/debounce-utils';\nimport {FindAriaLiveEventArgs} from '../../../utils/stencil-accessibility-utils';\nimport {randomID} from '../../../utils/utils';\n\ntype Regions = {[regionName: string]: {assertive: boolean; message: string}};\n\n/**\n * The `atomic-aria-live` component notifies screen readers of changes in the search interface.\n */\n@Component({\n tag: 'atomic-aria-live',\n shadow: false,\n})\nexport class AtomicAriaLive {\n @Element() private host!: HTMLAtomicAriaLiveElement;\n @State() private regions: Readonly<Regions> = {};\n\n private messagesQueue = buildDebouncedQueue({delay: 500});\n private id!: string;\n\n @Listen('atomic/accessibility/findAriaLive', {target: 'document'})\n protected onFindAriaLive({detail: args}: CustomEvent<FindAriaLiveEventArgs>) {\n if (!args.element || !this.isInSearchInterface) {\n args.element = this.host;\n }\n }\n\n private get isInSearchInterface() {\n let element: Element | null = this.host;\n while (element) {\n if (element.tagName === 'ATOMIC-SEARCH-INTERFACE') {\n return true;\n }\n element = element.parentElement;\n }\n return false;\n }\n\n connectedCallback() {\n this.id = randomID('atomic-aria-live-');\n }\n\n /**\n * @internal\n */\n @Method()\n public async updateMessage(\n region: string,\n message: string,\n assertive: boolean\n ) {\n const updateRegion = () =>\n (this.regions = {...this.regions, [region]: {assertive, message}});\n\n if (message) {\n this.messagesQueue.enqueue(updateRegion, region);\n } else {\n this.messagesQueue.cancelActionIfQueued(region);\n updateRegion();\n }\n }\n\n /**\n * @internal\n */\n @Method()\n public async registerRegion(region: string, assertive: boolean) {\n if (region in this.regions) {\n return;\n }\n this.regions = {...this.regions, [region]: {assertive, message: ''}};\n }\n\n public disconnectedCallback() {\n this.messagesQueue.clear();\n }\n\n public render() {\n return (\n <Host\n style={{\n position: 'absolute',\n display: 'block',\n height: '0',\n overflow: 'hidden',\n margin: '0',\n }}\n >\n {Object.entries(this.regions).map(\n ([regionName, {assertive, message}]) => (\n <div\n key={regionName}\n id={`${this.id}-${regionName}`}\n aria-live={assertive ? 'assertive' : 'polite'}\n role=\"status\"\n >\n {message}\n </div>\n )\n )}\n </Host>\n );\n }\n}\n","@import '../../../global/global.pcss';\n","import {getOrganizationEndpoint} from '@coveo/headless';\nimport {Component, h, Prop, Event, EventEmitter} from '@stencil/core';\nimport {Button} from '../../common/stencil-button';\nimport {Bindings} from '../atomic-search-interface/atomic-search-interface';\n\n/**\n * The `atomic-relevance-inspector` component is used internally to offer insight on search page relevance, as well as information to help troubleshoot issues during development.\n */\n@Component({\n tag: 'atomic-relevance-inspector',\n styleUrl: 'atomic-relevance-inspector.pcss',\n shadow: true,\n})\nexport class AtomicRelevanceInspector {\n /**\n * The Atomic interface bindings, namely the headless search engine and i18n instances.\n */\n @Prop() bindings!: Bindings;\n\n @Prop({reflect: true}) open = false;\n\n @Event({eventName: 'atomic/relevanceInspector/close'})\n closeRelevanceInspector: EventEmitter<null> | undefined;\n\n public render() {\n return (\n <atomic-modal\n exportparts=\"footer\"\n isOpen={this.open}\n close={() => {\n this.closeRelevanceInspector?.emit();\n }}\n >\n <p slot=\"header\">Open the relevance inspector</p>\n <p slot=\"body\">\n The Relevance Inspector will open in the Coveo Administration Console.\n </p>\n <div slot=\"footer\" class=\"flex w-full items-center justify-end\">\n <Button\n style=\"outline-primary\"\n class=\"mr-2 p-2\"\n onClick={() => this.closeRelevanceInspector?.emit()}\n >\n Ignore\n </Button>\n <a\n class=\"btn-primary p-2\"\n target=\"_blank\"\n href={this.adminHref}\n onClick={() => this.closeRelevanceInspector?.emit()}\n >\n Open\n </a>\n </div>\n </atomic-modal>\n );\n }\n\n private get adminHref() {\n const {organizationId, environment} =\n this.bindings.engine.state.configuration;\n\n const admin = getOrganizationEndpoint(organizationId, environment, 'admin');\n const {searchResponseId} = this.bindings.engine.state.search;\n return `${admin}/admin/#/${organizationId}/search/relevanceInspector/${searchResponseId}`;\n }\n}\n"],"version":3}
@@ -1,137 +0,0 @@
1
- import { h, r as registerInstance, g as getElement } from './index-3f35faca.js';
2
- import { Schema, StringValue } from '@coveo/bueno';
3
- import { I as InitializeBindings, H as Hidden } from './initialization-utils-ff3edf9a.js';
4
- import { M as MinusIcon, P as PlusIcon } from './plus-00840ff6.js';
5
- import { B as Button } from './stencil-button-2a8cc429.js';
6
- import { P as ProductContext } from './stencil-product-template-decorators-58cfc116.js';
7
- import './dom-utils-f6086cd3.js';
8
- import './event-utils-8de63ec3.js';
9
- import './init-queue-fbe942c3.js';
10
- import './initialization-lit-stencil-common-utils-9e0c895f.js';
11
- import './ripple-b1f0b09d.js';
12
- import './stencil-button-style-0bc80040.js';
13
- import './stencil-item-decorators-6c453c11.js';
14
-
15
- const getLineClampClass = (truncateAfter) => {
16
- const lineClampMap = {
17
- none: 'line-clamp-none',
18
- 1: 'line-clamp-1',
19
- 2: 'line-clamp-2',
20
- 3: 'line-clamp-3',
21
- 4: 'line-clamp-4',
22
- };
23
- return lineClampMap[truncateAfter] || 'line-clamp-2';
24
- };
25
- const renderShowHideButton = (isExpanded, isTruncated, isCollapsible, onToggleExpand, showMoreLabel, showLessLabel) => {
26
- let buttonClass = 'expandable-text-button p-1 text-xs leading-[calc(1/.75)]';
27
- if (!isTruncated && !isExpanded) {
28
- buttonClass += ' invisible';
29
- }
30
- else if (!isCollapsible && !isTruncated && isExpanded) {
31
- buttonClass += ' hidden';
32
- }
33
- const label = isExpanded ? showLessLabel : showMoreLabel;
34
- return (h(Button, { style: "text-primary", class: buttonClass, title: label, onClick: onToggleExpand },
35
- h("atomic-icon", { icon: isExpanded ? MinusIcon : PlusIcon, class: "mx-1 w-2 align-baseline" }),
36
- label));
37
- };
38
- const ExpandableText = ({ isExpanded, isTruncated, truncateAfter, onToggleExpand, showMoreLabel, showLessLabel, isCollapsible = false, }, children) => {
39
- return (h("div", { class: "flex flex-col items-start" },
40
- h("div", { part: "expandable-text", class: `expandable-text ${!isExpanded ? getLineClampClass(truncateAfter) : ''} min-lines-${truncateAfter}` }, children),
41
- renderShowHideButton(isExpanded, isTruncated, isCollapsible, onToggleExpand, showMoreLabel, showLessLabel)));
42
- };
43
-
44
- const atomicProductDescriptionCss = "/*! tailwindcss v4.1.11 | MIT License | https://tailwindcss.com */.expandable-text{line-height:var(--line-height)}.min-lines-1{min-height:calc(var(--line-height) * 1)}.min-lines-2{min-height:calc(var(--line-height) * 2)}.min-lines-3{min-height:calc(var(--line-height) * 3)}.min-lines-4{min-height:calc(var(--line-height) * 4)}";
45
- const AtomicProductDescriptionStyle0 = atomicProductDescriptionCss;
46
-
47
- var __decorate = (undefined && undefined.__decorate) || function (decorators, target, key, desc) {
48
- var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;
49
- if (typeof Reflect === "object" && typeof Reflect.decorate === "function")
50
- r = Reflect.decorate(decorators, target, key, desc);
51
- else
52
- for (var i = decorators.length - 1; i >= 0; i--)
53
- if (d = decorators[i])
54
- r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;
55
- return c > 3 && r && Object.defineProperty(target, key, r), r;
56
- };
57
- const AtomicProductDescription = class {
58
- constructor(hostRef) {
59
- registerInstance(this, hostRef);
60
- this.isExpanded = false;
61
- this.isTruncated = false;
62
- /**
63
- * The number of lines after which the product description should be truncated. A value of "none" will disable truncation.
64
- */
65
- this.truncateAfter = '2';
66
- /**
67
- * The name of the description field to use.
68
- */
69
- this.field = 'ec_shortdesc';
70
- /**
71
- * Whether the description should be collapsible after being expanded.
72
- */
73
- this.isCollapsible = true;
74
- this.isExpanded = false;
75
- this.isTruncated = false;
76
- this.truncateAfter = '2';
77
- this.field = 'ec_shortdesc';
78
- this.isCollapsible = true;
79
- this.resizeObserver = new ResizeObserver(() => {
80
- if (this.descriptionText &&
81
- this.descriptionText.scrollHeight > this.descriptionText.clientHeight) {
82
- this.isTruncated = true;
83
- }
84
- else {
85
- this.isTruncated = false;
86
- }
87
- });
88
- this.validateProps();
89
- }
90
- validateProps() {
91
- new Schema({
92
- truncateAfter: new StringValue({
93
- constrainTo: ['none', '1', '2', '3', '4'],
94
- }),
95
- field: new StringValue({
96
- constrainTo: ['ec_shortdesc', 'ec_description'],
97
- }),
98
- }).validate({
99
- truncateAfter: this.truncateAfter,
100
- field: this.field,
101
- });
102
- }
103
- componentDidLoad() {
104
- this.descriptionText = this.hostElement.querySelector('.expandable-text');
105
- if (this.descriptionText) {
106
- this.resizeObserver.observe(this.descriptionText);
107
- }
108
- }
109
- onToggleExpand(e) {
110
- if (e) {
111
- e.stopPropagation();
112
- }
113
- this.isExpanded = !this.isExpanded;
114
- }
115
- disconnectedCallback() {
116
- this.resizeObserver.disconnect();
117
- }
118
- render() {
119
- const productDescription = this.product[this.field] ?? null;
120
- if (!productDescription) {
121
- return h(Hidden, null);
122
- }
123
- return (h(ExpandableText, { isExpanded: this.isExpanded, isTruncated: this.isTruncated, truncateAfter: this.truncateAfter, onToggleExpand: (e) => this.onToggleExpand(e), showMoreLabel: this.bindings.i18n.t('show-more'), showLessLabel: this.bindings.i18n.t('show-less'), isCollapsible: this.isCollapsible }, h("atomic-product-text", { field: this.field })));
124
- }
125
- get hostElement() { return getElement(this); }
126
- };
127
- __decorate([
128
- InitializeBindings()
129
- ], AtomicProductDescription.prototype, "bindings", void 0);
130
- __decorate([
131
- ProductContext()
132
- ], AtomicProductDescription.prototype, "product", void 0);
133
- AtomicProductDescription.style = AtomicProductDescriptionStyle0;
134
-
135
- export { AtomicProductDescription as atomic_product_description };
136
-
137
- //# sourceMappingURL=atomic-product-description.entry.js.map
@@ -1 +0,0 @@
1
- {"file":"atomic-product-description.entry.js","mappings":"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","names":[],"sources":["src/components/common/expandable-text/stencil-expandable-text.tsx","src/components/commerce/atomic-product-description/atomic-product-description.pcss?tag=atomic-product-description","src/components/commerce/atomic-product-description/atomic-product-description.tsx"],"sourcesContent":["import {FunctionalComponent, h} from '@stencil/core';\nimport MinusIcon from '../../../images/minus.svg';\nimport PlusIcon from '../../../images/plus.svg';\nimport {Button} from '../stencil-button';\n\nexport type TruncateAfter = 'none' | '1' | '2' | '3' | '4';\n\ninterface ExpandableTextProps {\n isExpanded: boolean;\n isTruncated: boolean;\n isCollapsible?: boolean;\n truncateAfter: TruncateAfter;\n onToggleExpand: (e: MouseEvent | undefined) => void;\n showMoreLabel: string;\n showLessLabel: string;\n}\n\nconst getLineClampClass = (truncateAfter: TruncateAfter) => {\n const lineClampMap: Record<TruncateAfter, string> = {\n none: 'line-clamp-none',\n 1: 'line-clamp-1',\n 2: 'line-clamp-2',\n 3: 'line-clamp-3',\n 4: 'line-clamp-4',\n };\n return lineClampMap[truncateAfter] || 'line-clamp-2';\n};\n\nconst renderShowHideButton = (\n isExpanded: boolean,\n isTruncated: boolean,\n isCollapsible: boolean,\n onToggleExpand: (e?: MouseEvent) => void,\n showMoreLabel: string,\n showLessLabel: string\n) => {\n let buttonClass = 'expandable-text-button p-1 text-xs leading-[calc(1/.75)]';\n if (!isTruncated && !isExpanded) {\n buttonClass += ' invisible';\n } else if (!isCollapsible && !isTruncated && isExpanded) {\n buttonClass += ' hidden';\n }\n\n const label = isExpanded ? showLessLabel : showMoreLabel;\n\n return (\n <Button\n style=\"text-primary\"\n class={buttonClass}\n title={label}\n onClick={onToggleExpand}\n >\n <atomic-icon\n icon={isExpanded ? MinusIcon : PlusIcon}\n class=\"mx-1 w-2 align-baseline\"\n ></atomic-icon>\n {label}\n </Button>\n );\n};\n\nexport const ExpandableText: FunctionalComponent<ExpandableTextProps> = (\n {\n isExpanded,\n isTruncated,\n truncateAfter,\n onToggleExpand,\n showMoreLabel,\n showLessLabel,\n isCollapsible = false,\n },\n children\n) => {\n return (\n <div class=\"flex flex-col items-start\">\n <div\n part=\"expandable-text\"\n class={`expandable-text ${!isExpanded ? getLineClampClass(truncateAfter) : ''} min-lines-${truncateAfter}`}\n >\n {children}\n </div>\n {renderShowHideButton(\n isExpanded,\n isTruncated,\n isCollapsible,\n onToggleExpand,\n showMoreLabel,\n showLessLabel\n )}\n </div>\n );\n};\n","@import '../../common/expandable-text/expandable-text.pcss';\n","import {Schema, StringValue} from '@coveo/bueno';\nimport {Product} from '@coveo/headless/commerce';\nimport {Component, State, h, Element, Prop} from '@stencil/core';\nimport {\n InitializableComponent,\n InitializeBindings,\n} from '../../../utils/initialization-utils';\nimport {\n ExpandableText,\n TruncateAfter,\n} from '../../common/expandable-text/stencil-expandable-text';\nimport {Hidden} from '../../common/stencil-hidden';\nimport {CommerceBindings} from '../atomic-commerce-interface/atomic-commerce-interface';\nimport {ProductContext} from '../product-template-component-utils/stencil-product-template-decorators';\n\n/**\n * @alpha\n * The `atomic-product-description` component renders the description of a product.\n */\n@Component({\n tag: 'atomic-product-description',\n styleUrl: 'atomic-product-description.pcss',\n shadow: false,\n})\nexport class AtomicProductDescription\n implements InitializableComponent<CommerceBindings>\n{\n @InitializeBindings() public bindings!: CommerceBindings;\n @ProductContext() private product!: Product;\n\n @Element() hostElement!: HTMLElement;\n\n public error!: Error;\n\n @State() private isExpanded = false;\n @State() private isTruncated = false;\n\n private descriptionText!: HTMLDivElement;\n private resizeObserver: ResizeObserver;\n\n /**\n * The number of lines after which the product description should be truncated. A value of \"none\" will disable truncation.\n */\n @Prop() public truncateAfter: TruncateAfter = '2';\n\n /**\n * The name of the description field to use.\n */\n @Prop() public field: 'ec_description' | 'ec_shortdesc' = 'ec_shortdesc';\n\n /**\n * Whether the description should be collapsible after being expanded.\n */\n @Prop() public isCollapsible = true;\n\n constructor() {\n this.resizeObserver = new ResizeObserver(() => {\n if (\n this.descriptionText &&\n this.descriptionText.scrollHeight > this.descriptionText.clientHeight\n ) {\n this.isTruncated = true;\n } else {\n this.isTruncated = false;\n }\n });\n this.validateProps();\n }\n\n private validateProps() {\n new Schema({\n truncateAfter: new StringValue({\n constrainTo: ['none', '1', '2', '3', '4'],\n }),\n field: new StringValue({\n constrainTo: ['ec_shortdesc', 'ec_description'],\n }),\n }).validate({\n truncateAfter: this.truncateAfter,\n field: this.field,\n });\n }\n\n componentDidLoad() {\n this.descriptionText = this.hostElement.querySelector(\n '.expandable-text'\n ) as HTMLDivElement;\n if (this.descriptionText) {\n this.resizeObserver.observe(this.descriptionText);\n }\n }\n\n private onToggleExpand(e?: MouseEvent) {\n if (e) {\n e.stopPropagation();\n }\n\n this.isExpanded = !this.isExpanded;\n }\n\n disconnectedCallback() {\n this.resizeObserver.disconnect();\n }\n\n public render() {\n const productDescription = this.product[this.field] ?? null;\n\n if (!productDescription) {\n return <Hidden />;\n }\n\n return (\n <ExpandableText\n isExpanded={this.isExpanded}\n isTruncated={this.isTruncated}\n truncateAfter={this.truncateAfter}\n onToggleExpand={(e) => this.onToggleExpand(e)}\n showMoreLabel={this.bindings.i18n.t('show-more')}\n showLessLabel={this.bindings.i18n.t('show-less')}\n isCollapsible={this.isCollapsible}\n >\n <atomic-product-text field={this.field}></atomic-product-text>\n </ExpandableText>\n );\n }\n}\n"],"version":3}
@@ -1,46 +0,0 @@
1
- function buildDebouncedQueue(options) {
2
- let actions = [];
3
- let intervalId = null;
4
- function dequeueAction() {
5
- const action = actions.shift();
6
- if (action) {
7
- action.execute();
8
- }
9
- else {
10
- clearInterval(intervalId);
11
- intervalId = null;
12
- }
13
- }
14
- function cancelActionIfQueued(id) {
15
- actions = actions.filter((action) => action.id !== id);
16
- }
17
- return {
18
- enqueue(execute, uniqueId) {
19
- if (uniqueId) {
20
- cancelActionIfQueued(uniqueId);
21
- }
22
- actions.push({ id: uniqueId, execute });
23
- if (intervalId === null) {
24
- dequeueAction();
25
- intervalId = setInterval(dequeueAction, options.delay);
26
- }
27
- },
28
- clear() {
29
- actions = [];
30
- },
31
- cancelActionIfQueued,
32
- };
33
- }
34
- function debounce(execute, wait) {
35
- let timer;
36
- return (...args) => {
37
- clearTimeout(timer);
38
- return new Promise((resolve) => {
39
- timer = setTimeout(() => resolve(execute(...args)), wait);
40
- });
41
- };
42
- }
43
-
44
- export { buildDebouncedQueue as b, debounce as d };
45
-
46
- //# sourceMappingURL=debounce-utils-efa015c0.js.map
@@ -1,10 +0,0 @@
1
- const MinusIcon = `<svg viewBox="0 0 512 512" xmlns="http://www.w3.org/2000/svg"><path d="m64 208h384v96h-384z"/></svg>`;
2
-
3
- const PlusIcon = `<svg viewBox="0 0 512 512" xmlns="http://www.w3.org/2000/svg">
4
- <path d="M496 208H304V16h-96v192H16v96h192v192h96V304h192"/>
5
- </svg>
6
- `;
7
-
8
- export { MinusIcon as M, PlusIcon as P };
9
-
10
- //# sourceMappingURL=plus-00840ff6.js.map
@@ -1 +0,0 @@
1
- {"file":"plus-00840ff6.js","mappings":";;;;;;;;;","names":[],"sources":[],"sourcesContent":[],"version":3}
@@ -1 +0,0 @@
1
- {"file":"stencil-facet-show-more-less-4b023ee3.js","mappings":";;;;;SAIgB,sCAAsC,CACpD,KAA0E,EAC1E,KAAa,EACb,WAAkC,EAClC,IAAU;IAEV,IAAI,SAAS,GAAG,KAAK,CAAC,KAAK,CAAC,WAAW,CAAC;IACxC,KAAK,CAAC,SAAS,CAAC;QACd,IACE,gCAAgC,CAAC,KAAK,CAAC,KAAK,CAAC,WAAW,EAAE,SAAS,CAAC;YACpE,KAAK,CAAC,KAAK,CAAC,WAAW,CAAC,KAAK,EAC7B;YACA,SAAS,GAAG,KAAK,CAAC,KAAK,CAAC,WAAW,CAAC;YAEpC,WAAW,CACT,IAAI,CAAC,CAAC,CAAC,4BAA4B,EAAE;gBACnC,KAAK,EAAE,KAAK,CAAC,KAAK,CAAC,WAAW,CAAC,MAAM,CAAC,MAAM;gBAC5C,KAAK;aACN,CAAC,CACH,CAAC;SACH;KACF,CAAC,CAAC;AACL;;MCTa,iBAAiB,GAA4C,CACxE,KAAK;IAEL,MAAM,KAAK,GAAG,KAAK,CAAC,IAAI,CAAC,CAAC,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC;IACxC,MAAM,QAAQ,GAAG,KAAK,CAAC,IAAI,CAAC,CAAC,CAAC,WAAW,CAAC,CAAC;IAC3C,MAAM,mBAAmB,GAAG,KAAK,CAAC,IAAI,CAAC,CAAC,CAAC,wBAAwB,EAAE;QACjE,KAAK;KACN,CAAC,CAAC;IACH,MAAM,QAAQ,GAAG,KAAK,CAAC,IAAI,CAAC,CAAC,CAAC,WAAW,CAAC,CAAC;IAC3C,MAAM,mBAAmB,GAAG,KAAK,CAAC,IAAI,CAAC,CAAC,CAAC,wBAAwB,EAAE;QACjE,KAAK;KACN,CAAC,CAAC;IACH,MAAM,UAAU,GAAG,sDAAsD,CAAC;IAC1E,MAAM,WAAW,GAAG,cAAc,CAAC;IACnC,IAAI,CAAC,KAAK,CAAC,iBAAiB,IAAI,CAAC,KAAK,CAAC,iBAAiB,EAAE;QACxD,OAAO;KACR;IAED,QACE,WAAK,KAAK,EAAC,MAAM;QACf,EAAC,MAAM,IACL,KAAK,EAAC,cAAc,EACpB,IAAI,EAAC,WAAW,EAChB,KAAK,EAAE,GAAG,UAAU,IAAI,KAAK,CAAC,iBAAiB,GAAG,EAAE,GAAG,QAAQ,EAAE,EACjE,SAAS,EAAE,mBAAmB,EAC9B,OAAO,EAAE,MAAM,KAAK,CAAC,UAAU,EAAE,EACjC,GAAG,EAAE,KAAK,CAAC,WAAW;YAEtB,mBACE,IAAI,EAAC,qBAAqB,EAC1B,KAAK,EAAE,WAAW,EAClB,IAAI,EAAE,SAAS,GACF;YACf,YAAM,KAAK,EAAC,UAAU,IAAE,QAAQ,CAAQ,CACjC;QACT,EAAC,MAAM,IACL,KAAK,EAAC,cAAc,EACpB,IAAI,EAAC,WAAW,EAChB,KAAK,EAAE,GAAG,UAAU,IAAI,KAAK,CAAC,iBAAiB,GAAG,EAAE,GAAG,QAAQ,EAAE,EACjE,SAAS,EAAE,mBAAmB,EAC9B,OAAO,EAAE,MAAM,KAAK,CAAC,UAAU,EAAE,EACjC,GAAG,EAAE,KAAK,CAAC,WAAW;YAEtB,mBACE,IAAI,EAAC,qBAAqB,EAC1B,KAAK,EAAE,WAAW,EAClB,IAAI,EAAE,QAAQ,GACD;YACf,YAAM,KAAK,EAAC,UAAU,IAAE,QAAQ,CAAQ,CACjC,CACL,EACN;AACJ;;;;","names":[],"sources":["src/components/common/facets/facet-search/facet-search-aria-live.ts","src/components/common/facets/facet-show-more-less/stencil-facet-show-more-less.tsx"],"sourcesContent":["import type {Facet, FacetSearchState} from '@coveo/headless';\nimport type {i18n} from 'i18next';\nimport {shouldUpdateFacetSearchComponent} from './facet-search-utils';\n\nexport function announceFacetSearchResultsWithAriaLive(\n facet: Pick<Facet, 'subscribe'> & {state: {facetSearch: FacetSearchState}},\n label: string,\n setAriaLive: (msg: string) => void,\n i18n: i18n\n) {\n let prevState = facet.state.facetSearch;\n facet.subscribe(() => {\n if (\n shouldUpdateFacetSearchComponent(facet.state.facetSearch, prevState) &&\n facet.state.facetSearch.query\n ) {\n prevState = facet.state.facetSearch;\n\n setAriaLive(\n i18n.t('facet-search-results-count', {\n count: facet.state.facetSearch.values.length,\n label,\n })\n );\n }\n });\n}\n","import {FunctionalComponent, h} from '@stencil/core';\nimport {i18n} from 'i18next';\nimport MinusIcon from '../../../../images/minus.svg';\nimport PlusIcon from '../../../../images/plus.svg';\nimport {Button} from '../../stencil-button';\n\ninterface FacetShowMoreProps {\n label: string;\n i18n: i18n;\n canShowLessValues: boolean;\n canShowMoreValues: boolean;\n onShowMore(): void;\n onShowLess(): void;\n showMoreRef?: (element?: HTMLButtonElement) => void;\n showLessRef?: (element?: HTMLButtonElement) => void;\n}\n\nexport const FacetShowMoreLess: FunctionalComponent<FacetShowMoreProps> = (\n props\n) => {\n const label = props.i18n.t(props.label);\n const showMore = props.i18n.t('show-more');\n const showMoreFacetValues = props.i18n.t('show-more-facet-values', {\n label,\n });\n const showLess = props.i18n.t('show-less');\n const showLessFacetValues = props.i18n.t('show-less-facet-values', {\n label,\n });\n const btnClasses = 'flex items-baseline text-left p-2 text-sm max-w-full';\n const iconClasses = 'w-2 h-2 mr-1';\n if (!props.canShowLessValues && !props.canShowMoreValues) {\n return;\n }\n\n return (\n <div class=\"mt-2\">\n <Button\n style=\"text-primary\"\n part=\"show-less\"\n class={`${btnClasses} ${props.canShowLessValues ? '' : 'hidden'}`}\n ariaLabel={showLessFacetValues}\n onClick={() => props.onShowLess()}\n ref={props.showLessRef}\n >\n <atomic-icon\n part=\"show-more-less-icon\"\n class={iconClasses}\n icon={MinusIcon}\n ></atomic-icon>\n <span class=\"truncate\">{showLess}</span>\n </Button>\n <Button\n style=\"text-primary\"\n part=\"show-more\"\n class={`${btnClasses} ${props.canShowMoreValues ? '' : 'hidden'}`}\n ariaLabel={showMoreFacetValues}\n onClick={() => props.onShowMore()}\n ref={props.showMoreRef}\n >\n <atomic-icon\n part=\"show-more-less-icon\"\n class={iconClasses}\n icon={PlusIcon}\n ></atomic-icon>\n <span class=\"truncate\">{showMore}</span>\n </Button>\n </div>\n );\n};\n"],"version":3}
@@ -1,23 +0,0 @@
1
- import { FindAriaLiveEventArgs } from '../../../utils/stencil-accessibility-utils';
2
- /**
3
- * The `atomic-aria-live` component notifies screen readers of changes in the search interface.
4
- */
5
- export declare class AtomicAriaLive {
6
- private host;
7
- private regions;
8
- private messagesQueue;
9
- private id;
10
- protected onFindAriaLive({ detail: args }: CustomEvent<FindAriaLiveEventArgs>): void;
11
- private get isInSearchInterface();
12
- connectedCallback(): void;
13
- /**
14
- * @internal
15
- */
16
- updateMessage(region: string, message: string, assertive: boolean): Promise<void>;
17
- /**
18
- * @internal
19
- */
20
- registerRegion(region: string, assertive: boolean): Promise<void>;
21
- disconnectedCallback(): void;
22
- render(): any;
23
- }