@empathyco/x-components 6.0.0-alpha.183 → 6.0.0-alpha.185

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 (632) hide show
  1. package/CHANGELOG.md +16 -0
  2. package/docs/API-reference/api/x-components.aioverview.md +22 -8
  3. package/docs/API-reference/api/x-components.allfilter.md +6 -4
  4. package/docs/API-reference/api/x-components.animatewidth.md +1 -1
  5. package/docs/API-reference/api/x-components.autoprogressbar.md +5 -5
  6. package/docs/API-reference/api/x-components.banner.md +5 -5
  7. package/docs/API-reference/api/x-components.bannerslist.md +5 -5
  8. package/docs/API-reference/api/x-components.baseaddtocart.md +6 -4
  9. package/docs/API-reference/api/x-components.basecolumnpickerdropdown.md +8 -6
  10. package/docs/API-reference/api/x-components.basecolumnpickerlist.md +7 -5
  11. package/docs/API-reference/api/x-components.basecurrency.md +4 -4
  12. package/docs/API-reference/api/x-components.basedropdown.md +12 -12
  13. package/docs/API-reference/api/x-components.baseeventbutton.md +5 -5
  14. package/docs/API-reference/api/x-components.baseeventsmodal.md +10 -8
  15. package/docs/API-reference/api/x-components.baseeventsmodalclose.md +7 -5
  16. package/docs/API-reference/api/x-components.baseeventsmodalopen.md +7 -5
  17. package/docs/API-reference/api/x-components.basegrid.md +9 -7
  18. package/docs/API-reference/api/x-components.baseheadertogglepanel.md +9 -7
  19. package/docs/API-reference/api/x-components.baseidmodal.md +8 -6
  20. package/docs/API-reference/api/x-components.baseidmodalclose.md +4 -4
  21. package/docs/API-reference/api/x-components.baseidmodalopen.md +4 -4
  22. package/docs/API-reference/api/x-components.baseidtogglepanel.md +8 -6
  23. package/docs/API-reference/api/x-components.baseidtogglepanelbutton.md +7 -5
  24. package/docs/API-reference/api/x-components.basekeyboardnavigation.md +6 -6
  25. package/docs/API-reference/api/x-components.basemodal.md +9 -9
  26. package/docs/API-reference/api/x-components.basepricefilterlabel.md +6 -4
  27. package/docs/API-reference/api/x-components.baserating.md +7 -5
  28. package/docs/API-reference/api/x-components.baseratingfilterlabel.md +7 -5
  29. package/docs/API-reference/api/x-components.baseresultcurrentprice.md +6 -4
  30. package/docs/API-reference/api/x-components.baseresultimage.md +9 -9
  31. package/docs/API-reference/api/x-components.baseresultlink.md +5 -5
  32. package/docs/API-reference/api/x-components.baseresultpreviousprice.md +5 -3
  33. package/docs/API-reference/api/x-components.baseresultrating.md +7 -5
  34. package/docs/API-reference/api/x-components.basescroll.md +7 -7
  35. package/docs/API-reference/api/x-components.baseslider.md +7 -7
  36. package/docs/API-reference/api/x-components.basesuggestion.md +8 -6
  37. package/docs/API-reference/api/x-components.basesuggestions.md +5 -5
  38. package/docs/API-reference/api/x-components.baseswitch.md +6 -6
  39. package/docs/API-reference/api/x-components.basetabspanel.md +6 -6
  40. package/docs/API-reference/api/x-components.baseteleport.md +6 -6
  41. package/docs/API-reference/api/x-components.basetogglepanel.md +4 -4
  42. package/docs/API-reference/api/x-components.basevariablecolumngrid.md +7 -5
  43. package/docs/API-reference/api/x-components.changeheight.md +2 -2
  44. package/docs/API-reference/api/x-components.clearfilters.md +7 -5
  45. package/docs/API-reference/api/x-components.clearhistoryqueries.md +3 -1
  46. package/docs/API-reference/api/x-components.clearsearchinput.md +7 -1
  47. package/docs/API-reference/api/x-components.closemainmodal.md +3 -1
  48. package/docs/API-reference/api/x-components.collapseheight.md +5 -5
  49. package/docs/API-reference/api/x-components.collapsewidth.md +5 -5
  50. package/docs/API-reference/api/x-components.crossfade.md +4 -4
  51. package/docs/API-reference/api/x-components.devicedetector.md +9 -5
  52. package/docs/API-reference/api/x-components.displayclickprovider.md +5 -5
  53. package/docs/API-reference/api/x-components.displayemitter.md +4 -4
  54. package/docs/API-reference/api/x-components.editablenumberrangefilter.md +7 -7
  55. package/docs/API-reference/api/x-components.empathize.md +6 -6
  56. package/docs/API-reference/api/x-components.excludefilterswithnoresults.md +4 -4
  57. package/docs/API-reference/api/x-components.experiencecontrols.md +1 -1
  58. package/docs/API-reference/api/x-components.extraparams.md +3 -3
  59. package/docs/API-reference/api/x-components.facets.md +5 -5
  60. package/docs/API-reference/api/x-components.facetsprovider.md +4 -4
  61. package/docs/API-reference/api/x-components.fade.md +4 -4
  62. package/docs/API-reference/api/x-components.fadeandslide.md +5 -5
  63. package/docs/API-reference/api/x-components.fallbackdisclaimer.md +1 -1
  64. package/docs/API-reference/api/x-components.filterslist.md +5 -5
  65. package/docs/API-reference/api/x-components.filterssearch.md +6 -6
  66. package/docs/API-reference/api/x-components.fixedheaderandasideslayout.md +9 -5
  67. package/docs/API-reference/api/x-components.globalxbus.md +3 -3
  68. package/docs/API-reference/api/x-components.hierarchicalfilter.md +8 -5
  69. package/docs/API-reference/api/x-components.highlight_2.md +5 -5
  70. package/docs/API-reference/api/x-components.historyqueries.md +4 -1
  71. package/docs/API-reference/api/x-components.historyqueriesswitch.md +3 -1
  72. package/docs/API-reference/api/x-components.historyquery.md +8 -5
  73. package/docs/API-reference/api/x-components.identifierresult.md +4 -4
  74. package/docs/API-reference/api/x-components.identifierresults.md +5 -5
  75. package/docs/API-reference/api/x-components.itemslist.md +5 -5
  76. package/docs/API-reference/api/x-components.locationprovider.md +4 -4
  77. package/docs/API-reference/api/x-components.mainmodal.md +6 -4
  78. package/docs/API-reference/api/x-components.mainscroll.md +5 -5
  79. package/docs/API-reference/api/x-components.mainscrollitem.md +6 -6
  80. package/docs/API-reference/api/x-components.md +1 -0
  81. package/docs/API-reference/api/x-components.multicolumnmaxwidthlayout.md +9 -5
  82. package/docs/API-reference/api/x-components.myhistory.md +8 -5
  83. package/docs/API-reference/api/x-components.nextqueries.md +8 -5
  84. package/docs/API-reference/api/x-components.nextquerieslist.md +5 -5
  85. package/docs/API-reference/api/x-components.nextquery.md +7 -5
  86. package/docs/API-reference/api/x-components.nextquerypreview.md +4 -4
  87. package/docs/API-reference/api/x-components.noanimation.md +2 -2
  88. package/docs/API-reference/api/x-components.numberrangefilter.md +7 -5
  89. package/docs/API-reference/api/x-components.openmainmodal.md +3 -1
  90. package/docs/API-reference/api/x-components.pageloaderbutton.md +7 -5
  91. package/docs/API-reference/api/x-components.pageselector.md +5 -5
  92. package/docs/API-reference/api/x-components.partialquerybutton.md +5 -5
  93. package/docs/API-reference/api/x-components.partialresultslist.md +5 -5
  94. package/docs/API-reference/api/x-components.popularsearch.md +6 -4
  95. package/docs/API-reference/api/x-components.popularsearches.md +4 -1
  96. package/docs/API-reference/api/x-components.preselectedfilters.md +5 -5
  97. package/docs/API-reference/api/x-components.promoted.md +4 -4
  98. package/docs/API-reference/api/x-components.promotedslist.md +5 -5
  99. package/docs/API-reference/api/x-components.querypreview.md +6 -6
  100. package/docs/API-reference/api/x-components.querypreviewbutton.md +6 -4
  101. package/docs/API-reference/api/x-components.querypreviewlist.md +8 -6
  102. package/docs/API-reference/api/x-components.querysuggestion.md +6 -4
  103. package/docs/API-reference/api/x-components.querysuggestions.md +4 -1
  104. package/docs/API-reference/api/x-components.recommendations.md +5 -5
  105. package/docs/API-reference/api/x-components.redirection.md +6 -6
  106. package/docs/API-reference/api/x-components.relatedprompt.md +9 -4
  107. package/docs/API-reference/api/x-components.relatedpromptslist.md +5 -5
  108. package/docs/API-reference/api/x-components.relatedpromptstaglist.md +11 -7
  109. package/docs/API-reference/api/x-components.relatedtag.md +6 -6
  110. package/docs/API-reference/api/x-components.relatedtags.md +7 -5
  111. package/docs/API-reference/api/x-components.removehistoryquery.md +6 -4
  112. package/docs/API-reference/api/x-components.renderlessextraparams.md +4 -4
  113. package/docs/API-reference/api/x-components.renderlessfilter.md +5 -5
  114. package/docs/API-reference/api/x-components.resultslist.md +6 -6
  115. package/docs/API-reference/api/x-components.resultvariantselector.md +6 -6
  116. package/docs/API-reference/api/x-components.resultvariantsprovider.md +5 -5
  117. package/docs/API-reference/api/x-components.scroll.md +8 -6
  118. package/docs/API-reference/api/x-components.scrolltotop.md +7 -5
  119. package/docs/API-reference/api/x-components.searchbutton.md +2 -2
  120. package/docs/API-reference/api/x-components.searchinput.md +6 -6
  121. package/docs/API-reference/api/x-components.searchinputplaceholder.md +6 -6
  122. package/docs/API-reference/api/x-components.selectedfilters.md +5 -5
  123. package/docs/API-reference/api/x-components.selectedfilterslist.md +7 -5
  124. package/docs/API-reference/api/x-components.semanticqueries.md +4 -1
  125. package/docs/API-reference/api/x-components.semanticquery.md +6 -4
  126. package/docs/API-reference/api/x-components.simplefilter.md +7 -5
  127. package/docs/API-reference/api/x-components.singlecolumnlayout.md +10 -5
  128. package/docs/API-reference/api/x-components.slicedfilters.md +6 -6
  129. package/docs/API-reference/api/x-components.slidingpanel.md +8 -8
  130. package/docs/API-reference/api/x-components.snippetcallbacks.md +3 -1
  131. package/docs/API-reference/api/x-components.snippetconfigextraparams.md +8 -6
  132. package/docs/API-reference/api/x-components.sortdropdown.md +8 -6
  133. package/docs/API-reference/api/x-components.sortedfilters.md +4 -4
  134. package/docs/API-reference/api/x-components.sortlist.md +7 -5
  135. package/docs/API-reference/api/x-components.sortpickerlist.md +7 -5
  136. package/docs/API-reference/api/x-components.spellcheck.md +1 -1
  137. package/docs/API-reference/api/x-components.spellcheckbutton.md +2 -2
  138. package/docs/API-reference/api/x-components.staggeredfadeandslide.md +5 -5
  139. package/docs/API-reference/api/x-components.tagging.md +4 -4
  140. package/docs/API-reference/api/x-components.typinghtmlelement.__timeoutid.md +11 -0
  141. package/docs/API-reference/api/x-components.typinghtmlelement.md +19 -0
  142. package/docs/API-reference/api/x-components.urlhandler.md +5 -1
  143. package/js/components/animations/animate-width.vue.js.map +1 -1
  144. package/js/components/animations/collapse-height.vue.js.map +1 -1
  145. package/js/components/animations/collapse-width.vue.js.map +1 -1
  146. package/js/components/animations/cross-fade.vue.js.map +1 -1
  147. package/js/components/animations/fade-and-slide.vue.js.map +1 -1
  148. package/js/components/animations/fade.vue.js.map +1 -1
  149. package/js/components/animations/staggered-fade-and-slide.vue.js.map +1 -1
  150. package/js/components/auto-progress-bar.vue.js.map +1 -1
  151. package/js/components/base-dropdown.vue.js.map +1 -1
  152. package/js/components/base-grid.vue.js.map +1 -1
  153. package/js/components/base-keyboard-navigation.vue.js.map +1 -1
  154. package/js/components/base-rating.vue.js.map +1 -1
  155. package/js/components/base-slider.vue.js +16 -18
  156. package/js/components/base-slider.vue.js.map +1 -1
  157. package/js/components/base-switch.vue.js +10 -13
  158. package/js/components/base-switch.vue.js.map +1 -1
  159. package/js/components/base-teleport.vue.js.map +1 -1
  160. package/js/components/base-variable-column-grid.vue.js.map +1 -1
  161. package/js/components/column-picker/base-column-picker-dropdown.vue.js.map +1 -1
  162. package/js/components/column-picker/base-column-picker-list.vue.js.map +1 -1
  163. package/js/components/currency/base-currency.vue.js.map +1 -1
  164. package/js/components/filters/labels/base-rating-filter-label.vue.js.map +1 -1
  165. package/js/components/highlight.vue.js.map +1 -1
  166. package/js/components/icons/ai-star.vue.js +19 -22
  167. package/js/components/icons/ai-star.vue.js.map +1 -1
  168. package/js/components/icons/arrow-down.vue.js +16 -19
  169. package/js/components/icons/arrow-down.vue.js.map +1 -1
  170. package/js/components/icons/arrow-left.vue.js +16 -19
  171. package/js/components/icons/arrow-left.vue.js.map +1 -1
  172. package/js/components/icons/arrow-right.vue.js +16 -19
  173. package/js/components/icons/arrow-right.vue.js.map +1 -1
  174. package/js/components/icons/arrow-up.vue.js +16 -19
  175. package/js/components/icons/arrow-up.vue.js.map +1 -1
  176. package/js/components/icons/bag.vue.js +16 -19
  177. package/js/components/icons/bag.vue.js.map +1 -1
  178. package/js/components/icons/bar-code.vue.js +8 -10
  179. package/js/components/icons/bar-code.vue.js.map +1 -1
  180. package/js/components/icons/barcode-tiny.vue.js +8 -10
  181. package/js/components/icons/barcode-tiny.vue.js.map +1 -1
  182. package/js/components/icons/cart-filled.vue.js +21 -25
  183. package/js/components/icons/cart-filled.vue.js.map +1 -1
  184. package/js/components/icons/cart.vue.js +16 -19
  185. package/js/components/icons/cart.vue.js.map +1 -1
  186. package/js/components/icons/check-tiny.vue.js +9 -11
  187. package/js/components/icons/check-tiny.vue.js.map +1 -1
  188. package/js/components/icons/check.vue.js +9 -11
  189. package/js/components/icons/check.vue.js.map +1 -1
  190. package/js/components/icons/checkbox-selected-filled.vue.js +20 -23
  191. package/js/components/icons/checkbox-selected-filled.vue.js.map +1 -1
  192. package/js/components/icons/checkbox-selected.vue.js +19 -22
  193. package/js/components/icons/checkbox-selected.vue.js.map +1 -1
  194. package/js/components/icons/checkbox-unselected-filled.vue.js +13 -15
  195. package/js/components/icons/checkbox-unselected-filled.vue.js.map +1 -1
  196. package/js/components/icons/checkbox-unselected.vue.js +12 -14
  197. package/js/components/icons/checkbox-unselected.vue.js.map +1 -1
  198. package/js/components/icons/chevron-down.vue.js +9 -11
  199. package/js/components/icons/chevron-down.vue.js.map +1 -1
  200. package/js/components/icons/chevron-left.vue.js +9 -11
  201. package/js/components/icons/chevron-left.vue.js.map +1 -1
  202. package/js/components/icons/chevron-right.vue.js +9 -11
  203. package/js/components/icons/chevron-right.vue.js.map +1 -1
  204. package/js/components/icons/chevron-tiny-down.vue.js +9 -11
  205. package/js/components/icons/chevron-tiny-down.vue.js.map +1 -1
  206. package/js/components/icons/chevron-tiny-left.vue.js +9 -11
  207. package/js/components/icons/chevron-tiny-left.vue.js.map +1 -1
  208. package/js/components/icons/chevron-tiny-right.vue.js +9 -11
  209. package/js/components/icons/chevron-tiny-right.vue.js.map +1 -1
  210. package/js/components/icons/chevron-tiny-up.vue.js +9 -11
  211. package/js/components/icons/chevron-tiny-up.vue.js.map +1 -1
  212. package/js/components/icons/chevron-up.vue.js +9 -11
  213. package/js/components/icons/chevron-up.vue.js.map +1 -1
  214. package/js/components/icons/corner-arrow-left.vue.js +9 -11
  215. package/js/components/icons/corner-arrow-left.vue.js.map +1 -1
  216. package/js/components/icons/corner-arrow-right.vue.js +9 -11
  217. package/js/components/icons/corner-arrow-right.vue.js.map +1 -1
  218. package/js/components/icons/cross-tiny.vue.js +9 -11
  219. package/js/components/icons/cross-tiny.vue.js.map +1 -1
  220. package/js/components/icons/cross.vue.js +9 -11
  221. package/js/components/icons/cross.vue.js.map +1 -1
  222. package/js/components/icons/curated-check-filled.vue.js +19 -22
  223. package/js/components/icons/curated-check-filled.vue.js.map +1 -1
  224. package/js/components/icons/curated-check-tiny-filled.vue.js +19 -22
  225. package/js/components/icons/curated-check-tiny-filled.vue.js.map +1 -1
  226. package/js/components/icons/curated-check-tiny.vue.js +18 -21
  227. package/js/components/icons/curated-check-tiny.vue.js.map +1 -1
  228. package/js/components/icons/curated-check.vue.js +18 -21
  229. package/js/components/icons/curated-check.vue.js.map +1 -1
  230. package/js/components/icons/diagonal-arrow-left-down.vue.js +9 -11
  231. package/js/components/icons/diagonal-arrow-left-down.vue.js.map +1 -1
  232. package/js/components/icons/diagonal-arrow-left-top.vue.js +9 -11
  233. package/js/components/icons/diagonal-arrow-left-top.vue.js.map +1 -1
  234. package/js/components/icons/diagonal-arrow-right-down.vue.js +9 -11
  235. package/js/components/icons/diagonal-arrow-right-down.vue.js.map +1 -1
  236. package/js/components/icons/diagonal-arrow-right-top.vue.js +9 -11
  237. package/js/components/icons/diagonal-arrow-right-top.vue.js.map +1 -1
  238. package/js/components/icons/filters.vue.js +8 -10
  239. package/js/components/icons/filters.vue.js.map +1 -1
  240. package/js/components/icons/grid-1-col.vue.js +8 -10
  241. package/js/components/icons/grid-1-col.vue.js.map +1 -1
  242. package/js/components/icons/grid-2-col.vue.js +8 -10
  243. package/js/components/icons/grid-2-col.vue.js.map +1 -1
  244. package/js/components/icons/grid-2-rows.vue.js +19 -22
  245. package/js/components/icons/grid-2-rows.vue.js.map +1 -1
  246. package/js/components/icons/grid-4-col.vue.js +8 -10
  247. package/js/components/icons/grid-4-col.vue.js.map +1 -1
  248. package/js/components/icons/heart-filled.vue.js +10 -12
  249. package/js/components/icons/heart-filled.vue.js.map +1 -1
  250. package/js/components/icons/heart.vue.js +9 -11
  251. package/js/components/icons/heart.vue.js.map +1 -1
  252. package/js/components/icons/hide.vue.js +9 -11
  253. package/js/components/icons/hide.vue.js.map +1 -1
  254. package/js/components/icons/history-tiny.vue.js +16 -19
  255. package/js/components/icons/history-tiny.vue.js.map +1 -1
  256. package/js/components/icons/history.vue.js +16 -19
  257. package/js/components/icons/history.vue.js.map +1 -1
  258. package/js/components/icons/light-bulb-off.vue.js +14 -17
  259. package/js/components/icons/light-bulb-off.vue.js.map +1 -1
  260. package/js/components/icons/light-bulb-on.vue.js +20 -24
  261. package/js/components/icons/light-bulb-on.vue.js.map +1 -1
  262. package/js/components/icons/menu.vue.js +9 -11
  263. package/js/components/icons/menu.vue.js.map +1 -1
  264. package/js/components/icons/minus-tiny.vue.js +9 -11
  265. package/js/components/icons/minus-tiny.vue.js.map +1 -1
  266. package/js/components/icons/minus.vue.js +9 -11
  267. package/js/components/icons/minus.vue.js.map +1 -1
  268. package/js/components/icons/plus-tiny.vue.js +9 -11
  269. package/js/components/icons/plus-tiny.vue.js.map +1 -1
  270. package/js/components/icons/plus.vue.js +9 -11
  271. package/js/components/icons/plus.vue.js.map +1 -1
  272. package/js/components/icons/radiobutton-selected.vue.js +3 -5
  273. package/js/components/icons/radiobutton-selected.vue.js.map +1 -1
  274. package/js/components/icons/radiobutton-unselected.vue.js +20 -23
  275. package/js/components/icons/radiobutton-unselected.vue.js.map +1 -1
  276. package/js/components/icons/search-tiny.vue.js +9 -11
  277. package/js/components/icons/search-tiny.vue.js.map +1 -1
  278. package/js/components/icons/search.vue.js +9 -11
  279. package/js/components/icons/search.vue.js.map +1 -1
  280. package/js/components/icons/settings.vue.js +3 -5
  281. package/js/components/icons/settings.vue.js.map +1 -1
  282. package/js/components/icons/show.vue.js +18 -21
  283. package/js/components/icons/show.vue.js.map +1 -1
  284. package/js/components/icons/sort-az.vue.js +31 -36
  285. package/js/components/icons/sort-az.vue.js.map +1 -1
  286. package/js/components/icons/sort-price-down.vue.js +3 -5
  287. package/js/components/icons/sort-price-down.vue.js.map +1 -1
  288. package/js/components/icons/sort-price-up.vue.js +3 -5
  289. package/js/components/icons/sort-price-up.vue.js.map +1 -1
  290. package/js/components/icons/sort-relevancy.vue.js +23 -27
  291. package/js/components/icons/sort-relevancy.vue.js.map +1 -1
  292. package/js/components/icons/sort-za.vue.js +31 -36
  293. package/js/components/icons/sort-za.vue.js.map +1 -1
  294. package/js/components/icons/spinner.vue.js +3 -5
  295. package/js/components/icons/spinner.vue.js.map +1 -1
  296. package/js/components/icons/star-filled.vue.js +23 -26
  297. package/js/components/icons/star-filled.vue.js.map +1 -1
  298. package/js/components/icons/star.vue.js +11 -13
  299. package/js/components/icons/star.vue.js.map +1 -1
  300. package/js/components/icons/tag-filled.vue.js +17 -20
  301. package/js/components/icons/tag-filled.vue.js.map +1 -1
  302. package/js/components/icons/tag.vue.js +16 -19
  303. package/js/components/icons/tag.vue.js.map +1 -1
  304. package/js/components/icons/trash-open.vue.js +3 -5
  305. package/js/components/icons/trash-open.vue.js.map +1 -1
  306. package/js/components/icons/trash.vue.js +3 -5
  307. package/js/components/icons/trash.vue.js.map +1 -1
  308. package/js/components/icons/trending-tiny.vue.js +16 -19
  309. package/js/components/icons/trending-tiny.vue.js.map +1 -1
  310. package/js/components/icons/trending.vue.js +16 -19
  311. package/js/components/icons/trending.vue.js.map +1 -1
  312. package/js/components/icons/user-filled.vue.js +13 -16
  313. package/js/components/icons/user-filled.vue.js.map +1 -1
  314. package/js/components/icons/user.vue.js +9 -11
  315. package/js/components/icons/user.vue.js.map +1 -1
  316. package/js/components/items-list.vue.js.map +1 -1
  317. package/js/components/layouts/fixed-header-and-asides-layout.vue.js.map +1 -1
  318. package/js/components/layouts/multi-column-max-width-layout.vue.js.map +1 -1
  319. package/js/components/layouts/single-column-layout.vue.js.map +1 -1
  320. package/js/components/modals/base-events-modal-close.vue.js.map +1 -1
  321. package/js/components/modals/base-events-modal-open.vue.js.map +1 -1
  322. package/js/components/modals/base-events-modal.vue.js.map +1 -1
  323. package/js/components/modals/base-id-modal.vue.js.map +1 -1
  324. package/js/components/modals/base-modal.vue.js.map +1 -1
  325. package/js/components/modals/close-main-modal.vue.js.map +1 -1
  326. package/js/components/modals/main-modal.vue.js.map +1 -1
  327. package/js/components/modals/open-main-modal.vue.js.map +1 -1
  328. package/js/components/page-loader-button.vue.js +5 -1
  329. package/js/components/page-loader-button.vue.js.map +1 -1
  330. package/js/components/page-selector.vue.js +10 -2
  331. package/js/components/page-selector.vue.js.map +1 -1
  332. package/js/components/panels/base-header-toggle-panel.vue.js.map +1 -1
  333. package/js/components/panels/base-id-toggle-panel-button.vue.js.map +1 -1
  334. package/js/components/panels/base-id-toggle-panel.vue.js.map +1 -1
  335. package/js/components/panels/base-tabs-panel.vue.js.map +1 -1
  336. package/js/components/panels/base-toggle-panel.vue.js.map +1 -1
  337. package/js/components/result/base-result-add-to-cart.vue.js.map +1 -1
  338. package/js/components/result/base-result-current-price.vue.js.map +1 -1
  339. package/js/components/result/base-result-fallback-image.vue.js +15 -18
  340. package/js/components/result/base-result-fallback-image.vue.js.map +1 -1
  341. package/js/components/result/base-result-image.vue.js.map +1 -1
  342. package/js/components/result/base-result-link.vue.js.map +1 -1
  343. package/js/components/result/base-result-placeholder-image.vue.js +14 -17
  344. package/js/components/result/base-result-placeholder-image.vue.js.map +1 -1
  345. package/js/components/result/base-result-previous-price.vue.js.map +1 -1
  346. package/js/components/result/base-result-rating.vue.js.map +1 -1
  347. package/js/components/result/result-variant-selector.vue.js.map +1 -1
  348. package/js/components/sliding-panel.vue.js +10 -2
  349. package/js/components/sliding-panel.vue.js.map +1 -1
  350. package/js/components/suggestions/base-suggestion.vue.js.map +1 -1
  351. package/js/components/suggestions/base-suggestions.vue.js.map +1 -1
  352. package/js/composables/use-on-display.js +1 -1
  353. package/js/composables/use-on-display.js.map +1 -1
  354. package/js/directives/infinite-scroll.js +1 -1
  355. package/js/directives/infinite-scroll.js.map +1 -1
  356. package/js/directives/typing.js.map +1 -1
  357. package/js/x-modules/ai/components/ai-overview.vue.js +25 -26
  358. package/js/x-modules/ai/components/ai-overview.vue.js.map +1 -1
  359. package/js/x-modules/device/components/device-detector.vue.js.map +1 -1
  360. package/js/x-modules/empathize/components/empathize.vue.js.map +1 -1
  361. package/js/x-modules/facets/components/clear-filters.vue.js.map +1 -1
  362. package/js/x-modules/facets/components/facets/facets.vue.js.map +1 -1
  363. package/js/x-modules/facets/components/filters/all-filter.vue.js +5 -1
  364. package/js/x-modules/facets/components/filters/all-filter.vue.js.map +1 -1
  365. package/js/x-modules/facets/components/filters/editable-number-range-filter.vue.js +10 -2
  366. package/js/x-modules/facets/components/filters/editable-number-range-filter.vue.js.map +1 -1
  367. package/js/x-modules/facets/components/filters/hierarchical-filter.vue.js +3 -3
  368. package/js/x-modules/facets/components/filters/hierarchical-filter.vue.js.map +1 -1
  369. package/js/x-modules/facets/components/filters/number-range-filter.vue.js.map +1 -1
  370. package/js/x-modules/facets/components/filters/simple-filter.vue.js.map +1 -1
  371. package/js/x-modules/facets/components/lists/filters-list.vue.js.map +1 -1
  372. package/js/x-modules/facets/components/lists/filters-search.vue.js.map +1 -1
  373. package/js/x-modules/facets/components/lists/selected-filters-list.vue.js.map +1 -1
  374. package/js/x-modules/facets/components/lists/sliced-filters.vue.js +20 -4
  375. package/js/x-modules/facets/components/lists/sliced-filters.vue.js.map +1 -1
  376. package/js/x-modules/history-queries/components/clear-history-queries.vue.js +5 -1
  377. package/js/x-modules/history-queries/components/clear-history-queries.vue.js.map +1 -1
  378. package/js/x-modules/history-queries/components/history-queries.vue.js.map +1 -1
  379. package/js/x-modules/history-queries/components/history-query.vue.js +5 -1
  380. package/js/x-modules/history-queries/components/history-query.vue.js.map +1 -1
  381. package/js/x-modules/history-queries/components/my-history.vue.js +3 -3
  382. package/js/x-modules/history-queries/components/my-history.vue.js.map +1 -1
  383. package/js/x-modules/history-queries/components/remove-history-query.vue.js.map +1 -1
  384. package/js/x-modules/identifier-results/components/identifier-result.vue.js.map +1 -1
  385. package/js/x-modules/identifier-results/components/identifier-results.vue.js.map +1 -1
  386. package/js/x-modules/next-queries/components/next-queries.vue.js.map +1 -1
  387. package/js/x-modules/next-queries/components/next-query-preview.vue.js.map +1 -1
  388. package/js/x-modules/next-queries/components/next-query.vue.js.map +1 -1
  389. package/js/x-modules/popular-searches/components/popular-search.vue.js.map +1 -1
  390. package/js/x-modules/popular-searches/components/popular-searches.vue.js.map +1 -1
  391. package/js/x-modules/queries-preview/components/query-preview-button.vue.js.map +1 -1
  392. package/js/x-modules/queries-preview/components/query-preview-list.vue.js.map +1 -1
  393. package/js/x-modules/queries-preview/components/query-preview.vue.js.map +1 -1
  394. package/js/x-modules/query-suggestions/components/query-suggestion.vue.js.map +1 -1
  395. package/js/x-modules/query-suggestions/components/query-suggestions.vue.js.map +1 -1
  396. package/js/x-modules/recommendations/components/recommendations.vue.js.map +1 -1
  397. package/js/x-modules/related-prompts/components/related-prompt.vue.js.map +1 -1
  398. package/js/x-modules/related-prompts/components/related-prompts-tag-list.vue.js.map +1 -1
  399. package/js/x-modules/related-tags/components/related-tag.vue.js.map +1 -1
  400. package/js/x-modules/related-tags/components/related-tags.vue.js +3 -3
  401. package/js/x-modules/related-tags/components/related-tags.vue.js.map +1 -1
  402. package/js/x-modules/scroll/components/main-scroll-item.vue.js.map +1 -1
  403. package/js/x-modules/scroll/components/scroll-to-top.vue.js.map +1 -1
  404. package/js/x-modules/scroll/components/scroll.vue.js.map +1 -1
  405. package/js/x-modules/search/components/banner.vue.js.map +1 -1
  406. package/js/x-modules/search/components/fallback-disclaimer.vue.js.map +1 -1
  407. package/js/x-modules/search/components/partial-query-button.vue.js.map +1 -1
  408. package/js/x-modules/search/components/partial-results-list.vue.js.map +1 -1
  409. package/js/x-modules/search/components/promoted.vue.js.map +1 -1
  410. package/js/x-modules/search/components/redirection.vue.js.map +1 -1
  411. package/js/x-modules/search/components/sort-dropdown.vue.js.map +1 -1
  412. package/js/x-modules/search/components/sort-list.vue.js.map +1 -1
  413. package/js/x-modules/search/components/sort-picker-list.vue.js.map +1 -1
  414. package/js/x-modules/search/components/spellcheck-button.vue.js.map +1 -1
  415. package/js/x-modules/search/components/spellcheck.vue.js.map +1 -1
  416. package/js/x-modules/search-box/components/clear-search-input.vue.js +5 -1
  417. package/js/x-modules/search-box/components/clear-search-input.vue.js.map +1 -1
  418. package/js/x-modules/search-box/components/search-button.vue.js +7 -8
  419. package/js/x-modules/search-box/components/search-button.vue.js.map +1 -1
  420. package/js/x-modules/search-box/components/search-input-placeholder.vue.js.map +1 -1
  421. package/js/x-modules/search-box/components/search-input.vue.js.map +1 -1
  422. package/js/x-modules/semantic-queries/components/semantic-queries.vue.js +3 -3
  423. package/js/x-modules/semantic-queries/components/semantic-queries.vue.js.map +1 -1
  424. package/js/x-modules/semantic-queries/components/semantic-query.vue.js.map +1 -1
  425. package/package.json +7 -7
  426. package/report/x-components.api.json +6216 -1603
  427. package/report/x-components.api.md +819 -647
  428. package/types/components/animations/animate-width.vue.d.ts +1 -1
  429. package/types/components/animations/change-height.vue.d.ts +2 -2
  430. package/types/components/animations/collapse-height.vue.d.ts +5 -5
  431. package/types/components/animations/collapse-width.vue.d.ts +5 -5
  432. package/types/components/animations/cross-fade.vue.d.ts +4 -4
  433. package/types/components/animations/fade-and-slide.vue.d.ts +5 -5
  434. package/types/components/animations/fade.vue.d.ts +4 -4
  435. package/types/components/animations/no-animation.vue.d.ts +2 -2
  436. package/types/components/animations/staggered-fade-and-slide.vue.d.ts +5 -5
  437. package/types/components/animations/staggered-fade-and-slide.vue.d.ts.map +1 -1
  438. package/types/components/auto-progress-bar.vue.d.ts +5 -5
  439. package/types/components/base-dropdown.vue.d.ts +12 -12
  440. package/types/components/base-event-button.vue.d.ts +5 -5
  441. package/types/components/base-grid.vue.d.ts +9 -7
  442. package/types/components/base-grid.vue.d.ts.map +1 -1
  443. package/types/components/base-keyboard-navigation.vue.d.ts +6 -6
  444. package/types/components/base-rating.vue.d.ts +7 -5
  445. package/types/components/base-rating.vue.d.ts.map +1 -1
  446. package/types/components/base-slider.vue.d.ts +7 -7
  447. package/types/components/base-switch.vue.d.ts +6 -6
  448. package/types/components/base-teleport.vue.d.ts +6 -6
  449. package/types/components/base-variable-column-grid.vue.d.ts +7 -5
  450. package/types/components/base-variable-column-grid.vue.d.ts.map +1 -1
  451. package/types/components/column-picker/base-column-picker-dropdown.vue.d.ts +8 -6
  452. package/types/components/column-picker/base-column-picker-dropdown.vue.d.ts.map +1 -1
  453. package/types/components/column-picker/base-column-picker-list.vue.d.ts +7 -5
  454. package/types/components/column-picker/base-column-picker-list.vue.d.ts.map +1 -1
  455. package/types/components/currency/base-currency.vue.d.ts +4 -4
  456. package/types/components/display-click-provider.vue.d.ts +5 -5
  457. package/types/components/display-emitter.vue.d.ts +4 -4
  458. package/types/components/filters/labels/base-price-filter-label.vue.d.ts +6 -4
  459. package/types/components/filters/labels/base-price-filter-label.vue.d.ts.map +1 -1
  460. package/types/components/filters/labels/base-rating-filter-label.vue.d.ts +7 -5
  461. package/types/components/filters/labels/base-rating-filter-label.vue.d.ts.map +1 -1
  462. package/types/components/global-x-bus.vue.d.ts +3 -3
  463. package/types/components/highlight.vue.d.ts +5 -5
  464. package/types/components/items-list.vue.d.ts +5 -5
  465. package/types/components/layouts/fixed-header-and-asides-layout.vue.d.ts +9 -5
  466. package/types/components/layouts/fixed-header-and-asides-layout.vue.d.ts.map +1 -1
  467. package/types/components/layouts/multi-column-max-width-layout.vue.d.ts +9 -5
  468. package/types/components/layouts/multi-column-max-width-layout.vue.d.ts.map +1 -1
  469. package/types/components/layouts/single-column-layout.vue.d.ts +10 -5
  470. package/types/components/layouts/single-column-layout.vue.d.ts.map +1 -1
  471. package/types/components/location-provider.vue.d.ts +4 -4
  472. package/types/components/modals/base-events-modal-close.vue.d.ts +7 -5
  473. package/types/components/modals/base-events-modal-close.vue.d.ts.map +1 -1
  474. package/types/components/modals/base-events-modal-open.vue.d.ts +7 -5
  475. package/types/components/modals/base-events-modal-open.vue.d.ts.map +1 -1
  476. package/types/components/modals/base-events-modal.vue.d.ts +10 -8
  477. package/types/components/modals/base-events-modal.vue.d.ts.map +1 -1
  478. package/types/components/modals/base-id-modal-close.vue.d.ts +4 -4
  479. package/types/components/modals/base-id-modal-open.vue.d.ts +4 -4
  480. package/types/components/modals/base-id-modal.vue.d.ts +8 -6
  481. package/types/components/modals/base-id-modal.vue.d.ts.map +1 -1
  482. package/types/components/modals/base-modal.vue.d.ts +9 -9
  483. package/types/components/modals/close-main-modal.vue.d.ts +3 -1
  484. package/types/components/modals/close-main-modal.vue.d.ts.map +1 -1
  485. package/types/components/modals/main-modal.vue.d.ts +6 -4
  486. package/types/components/modals/main-modal.vue.d.ts.map +1 -1
  487. package/types/components/modals/open-main-modal.vue.d.ts +3 -1
  488. package/types/components/modals/open-main-modal.vue.d.ts.map +1 -1
  489. package/types/components/page-loader-button.vue.d.ts +7 -5
  490. package/types/components/page-loader-button.vue.d.ts.map +1 -1
  491. package/types/components/page-selector.vue.d.ts +5 -5
  492. package/types/components/panels/base-header-toggle-panel.vue.d.ts +9 -7
  493. package/types/components/panels/base-header-toggle-panel.vue.d.ts.map +1 -1
  494. package/types/components/panels/base-id-toggle-panel-button.vue.d.ts +7 -5
  495. package/types/components/panels/base-id-toggle-panel-button.vue.d.ts.map +1 -1
  496. package/types/components/panels/base-id-toggle-panel.vue.d.ts +8 -6
  497. package/types/components/panels/base-id-toggle-panel.vue.d.ts.map +1 -1
  498. package/types/components/panels/base-tabs-panel.vue.d.ts +6 -6
  499. package/types/components/panels/base-toggle-panel.vue.d.ts +4 -4
  500. package/types/components/result/base-result-add-to-cart.vue.d.ts +6 -4
  501. package/types/components/result/base-result-add-to-cart.vue.d.ts.map +1 -1
  502. package/types/components/result/base-result-current-price.vue.d.ts +6 -4
  503. package/types/components/result/base-result-current-price.vue.d.ts.map +1 -1
  504. package/types/components/result/base-result-image.vue.d.ts +9 -9
  505. package/types/components/result/base-result-link.vue.d.ts +5 -5
  506. package/types/components/result/base-result-previous-price.vue.d.ts +5 -3
  507. package/types/components/result/base-result-previous-price.vue.d.ts.map +1 -1
  508. package/types/components/result/base-result-rating.vue.d.ts +7 -5
  509. package/types/components/result/base-result-rating.vue.d.ts.map +1 -1
  510. package/types/components/result/result-variant-selector.vue.d.ts +6 -6
  511. package/types/components/result/result-variants-provider.vue.d.ts +5 -5
  512. package/types/components/scroll/base-scroll.vue.d.ts +7 -7
  513. package/types/components/sliding-panel.vue.d.ts +8 -8
  514. package/types/components/snippet-callbacks.vue.d.ts +3 -1
  515. package/types/components/snippet-callbacks.vue.d.ts.map +1 -1
  516. package/types/components/suggestions/base-suggestion.vue.d.ts +8 -6
  517. package/types/components/suggestions/base-suggestion.vue.d.ts.map +1 -1
  518. package/types/components/suggestions/base-suggestions.vue.d.ts +5 -5
  519. package/types/directives/infinite-scroll.d.ts.map +1 -1
  520. package/types/directives/typing.d.ts +1 -2
  521. package/types/directives/typing.d.ts.map +1 -1
  522. package/types/views/adapter.d.ts.map +1 -1
  523. package/types/x-modules/ai/components/ai-overview.vue.d.ts +22 -8
  524. package/types/x-modules/ai/components/ai-overview.vue.d.ts.map +1 -1
  525. package/types/x-modules/device/components/device-detector.vue.d.ts +9 -5
  526. package/types/x-modules/device/components/device-detector.vue.d.ts.map +1 -1
  527. package/types/x-modules/empathize/components/empathize.vue.d.ts +6 -6
  528. package/types/x-modules/experience-controls/components/experience-controls.vue.d.ts +1 -1
  529. package/types/x-modules/extra-params/components/extra-params.vue.d.ts +3 -3
  530. package/types/x-modules/extra-params/components/renderless-extra-param.vue.d.ts +4 -4
  531. package/types/x-modules/extra-params/components/snippet-config-extra-params.vue.d.ts +8 -6
  532. package/types/x-modules/extra-params/components/snippet-config-extra-params.vue.d.ts.map +1 -1
  533. package/types/x-modules/facets/components/clear-filters.vue.d.ts +7 -5
  534. package/types/x-modules/facets/components/clear-filters.vue.d.ts.map +1 -1
  535. package/types/x-modules/facets/components/facets/facets-provider.vue.d.ts +4 -4
  536. package/types/x-modules/facets/components/facets/facets.vue.d.ts +5 -5
  537. package/types/x-modules/facets/components/filters/all-filter.vue.d.ts +6 -4
  538. package/types/x-modules/facets/components/filters/all-filter.vue.d.ts.map +1 -1
  539. package/types/x-modules/facets/components/filters/editable-number-range-filter.vue.d.ts +7 -7
  540. package/types/x-modules/facets/components/filters/hierarchical-filter.vue.d.ts +8 -5
  541. package/types/x-modules/facets/components/filters/hierarchical-filter.vue.d.ts.map +1 -1
  542. package/types/x-modules/facets/components/filters/number-range-filter.vue.d.ts +7 -5
  543. package/types/x-modules/facets/components/filters/number-range-filter.vue.d.ts.map +1 -1
  544. package/types/x-modules/facets/components/filters/renderless-filter.vue.d.ts +5 -5
  545. package/types/x-modules/facets/components/filters/simple-filter.vue.d.ts +7 -5
  546. package/types/x-modules/facets/components/filters/simple-filter.vue.d.ts.map +1 -1
  547. package/types/x-modules/facets/components/lists/exclude-filters-with-no-results.vue.d.ts +4 -4
  548. package/types/x-modules/facets/components/lists/filters-list.vue.d.ts +5 -5
  549. package/types/x-modules/facets/components/lists/filters-search.vue.d.ts +6 -6
  550. package/types/x-modules/facets/components/lists/selected-filters-list.vue.d.ts +7 -5
  551. package/types/x-modules/facets/components/lists/selected-filters-list.vue.d.ts.map +1 -1
  552. package/types/x-modules/facets/components/lists/selected-filters.vue.d.ts +5 -5
  553. package/types/x-modules/facets/components/lists/sliced-filters.vue.d.ts +6 -6
  554. package/types/x-modules/facets/components/lists/sorted-filters.vue.d.ts +4 -4
  555. package/types/x-modules/facets/components/preselected-filters.vue.d.ts +5 -5
  556. package/types/x-modules/history-queries/components/clear-history-queries.vue.d.ts +3 -1
  557. package/types/x-modules/history-queries/components/clear-history-queries.vue.d.ts.map +1 -1
  558. package/types/x-modules/history-queries/components/history-queries-switch.vue.d.ts +3 -1
  559. package/types/x-modules/history-queries/components/history-queries-switch.vue.d.ts.map +1 -1
  560. package/types/x-modules/history-queries/components/history-queries.vue.d.ts +4 -1
  561. package/types/x-modules/history-queries/components/history-queries.vue.d.ts.map +1 -1
  562. package/types/x-modules/history-queries/components/history-query.vue.d.ts +8 -5
  563. package/types/x-modules/history-queries/components/history-query.vue.d.ts.map +1 -1
  564. package/types/x-modules/history-queries/components/my-history.vue.d.ts +8 -5
  565. package/types/x-modules/history-queries/components/my-history.vue.d.ts.map +1 -1
  566. package/types/x-modules/history-queries/components/remove-history-query.vue.d.ts +6 -4
  567. package/types/x-modules/history-queries/components/remove-history-query.vue.d.ts.map +1 -1
  568. package/types/x-modules/identifier-results/components/identifier-result.vue.d.ts +4 -4
  569. package/types/x-modules/identifier-results/components/identifier-results.vue.d.ts +5 -5
  570. package/types/x-modules/next-queries/components/next-queries-list.vue.d.ts +5 -5
  571. package/types/x-modules/next-queries/components/next-queries.vue.d.ts +8 -5
  572. package/types/x-modules/next-queries/components/next-queries.vue.d.ts.map +1 -1
  573. package/types/x-modules/next-queries/components/next-query-preview.vue.d.ts +4 -4
  574. package/types/x-modules/next-queries/components/next-query.vue.d.ts +7 -5
  575. package/types/x-modules/next-queries/components/next-query.vue.d.ts.map +1 -1
  576. package/types/x-modules/popular-searches/components/popular-search.vue.d.ts +6 -4
  577. package/types/x-modules/popular-searches/components/popular-search.vue.d.ts.map +1 -1
  578. package/types/x-modules/popular-searches/components/popular-searches.vue.d.ts +4 -1
  579. package/types/x-modules/popular-searches/components/popular-searches.vue.d.ts.map +1 -1
  580. package/types/x-modules/queries-preview/components/query-preview-button.vue.d.ts +6 -4
  581. package/types/x-modules/queries-preview/components/query-preview-button.vue.d.ts.map +1 -1
  582. package/types/x-modules/queries-preview/components/query-preview-list.vue.d.ts +8 -6
  583. package/types/x-modules/queries-preview/components/query-preview-list.vue.d.ts.map +1 -1
  584. package/types/x-modules/queries-preview/components/query-preview.vue.d.ts +6 -6
  585. package/types/x-modules/query-suggestions/components/query-suggestion.vue.d.ts +6 -4
  586. package/types/x-modules/query-suggestions/components/query-suggestion.vue.d.ts.map +1 -1
  587. package/types/x-modules/query-suggestions/components/query-suggestions.vue.d.ts +4 -1
  588. package/types/x-modules/query-suggestions/components/query-suggestions.vue.d.ts.map +1 -1
  589. package/types/x-modules/recommendations/components/recommendations.vue.d.ts +5 -5
  590. package/types/x-modules/related-prompts/components/related-prompt.vue.d.ts +9 -4
  591. package/types/x-modules/related-prompts/components/related-prompt.vue.d.ts.map +1 -1
  592. package/types/x-modules/related-prompts/components/related-prompts-list.vue.d.ts +5 -5
  593. package/types/x-modules/related-prompts/components/related-prompts-tag-list.vue.d.ts +11 -7
  594. package/types/x-modules/related-prompts/components/related-prompts-tag-list.vue.d.ts.map +1 -1
  595. package/types/x-modules/related-tags/components/related-tag.vue.d.ts +6 -6
  596. package/types/x-modules/related-tags/components/related-tags.vue.d.ts +7 -5
  597. package/types/x-modules/related-tags/components/related-tags.vue.d.ts.map +1 -1
  598. package/types/x-modules/scroll/components/main-scroll-item.vue.d.ts +6 -6
  599. package/types/x-modules/scroll/components/main-scroll.vue.d.ts +5 -5
  600. package/types/x-modules/scroll/components/scroll-to-top.vue.d.ts +7 -5
  601. package/types/x-modules/scroll/components/scroll-to-top.vue.d.ts.map +1 -1
  602. package/types/x-modules/scroll/components/scroll.vue.d.ts +8 -6
  603. package/types/x-modules/scroll/components/scroll.vue.d.ts.map +1 -1
  604. package/types/x-modules/search/components/banner.vue.d.ts +5 -5
  605. package/types/x-modules/search/components/banners-list.vue.d.ts +5 -5
  606. package/types/x-modules/search/components/fallback-disclaimer.vue.d.ts +1 -1
  607. package/types/x-modules/search/components/partial-query-button.vue.d.ts +5 -5
  608. package/types/x-modules/search/components/partial-results-list.vue.d.ts +5 -5
  609. package/types/x-modules/search/components/promoted.vue.d.ts +4 -4
  610. package/types/x-modules/search/components/promoteds-list.vue.d.ts +5 -5
  611. package/types/x-modules/search/components/redirection.vue.d.ts +6 -6
  612. package/types/x-modules/search/components/results-list.vue.d.ts +6 -6
  613. package/types/x-modules/search/components/sort-dropdown.vue.d.ts +8 -6
  614. package/types/x-modules/search/components/sort-dropdown.vue.d.ts.map +1 -1
  615. package/types/x-modules/search/components/sort-list.vue.d.ts +7 -5
  616. package/types/x-modules/search/components/sort-list.vue.d.ts.map +1 -1
  617. package/types/x-modules/search/components/sort-picker-list.vue.d.ts +7 -5
  618. package/types/x-modules/search/components/sort-picker-list.vue.d.ts.map +1 -1
  619. package/types/x-modules/search/components/spellcheck-button.vue.d.ts +2 -2
  620. package/types/x-modules/search/components/spellcheck.vue.d.ts +1 -1
  621. package/types/x-modules/search-box/components/clear-search-input.vue.d.ts +7 -1
  622. package/types/x-modules/search-box/components/clear-search-input.vue.d.ts.map +1 -1
  623. package/types/x-modules/search-box/components/search-button.vue.d.ts +2 -2
  624. package/types/x-modules/search-box/components/search-input-placeholder.vue.d.ts +6 -6
  625. package/types/x-modules/search-box/components/search-input.vue.d.ts +6 -6
  626. package/types/x-modules/semantic-queries/components/semantic-queries.vue.d.ts +4 -1
  627. package/types/x-modules/semantic-queries/components/semantic-queries.vue.d.ts.map +1 -1
  628. package/types/x-modules/semantic-queries/components/semantic-query.vue.d.ts +6 -4
  629. package/types/x-modules/semantic-queries/components/semantic-query.vue.d.ts.map +1 -1
  630. package/types/x-modules/tagging/components/tagging.vue.d.ts +4 -4
  631. package/types/x-modules/url/components/url-handler.vue.d.ts +5 -1
  632. package/types/x-modules/url/components/url-handler.vue.d.ts.map +1 -1
@@ -1 +1 @@
1
- {"version":3,"file":"base-events-modal-open.vue.js","sources":["../../../../src/components/modals/base-events-modal-open.vue"],"sourcesContent":["<template>\n <BaseEventButton\n :events=\"events\"\n class=\"x-events-modal-open-button x-button\"\n data-test=\"open-modal\"\n aria-label=\"Open\"\n >\n <!-- @slot (Required) Button content with a text, an icon or both -->\n <slot />\n </BaseEventButton>\n</template>\n\n<script lang=\"ts\">\nimport type { PropType } from 'vue'\nimport type { PropsWithType } from '../../utils/types'\nimport type { XEventsTypes } from '../../wiring/events.types'\nimport { computed, defineComponent } from 'vue'\nimport BaseEventButton from '../base-event-button.vue'\n\n/**\n * Component contains an event button that emits {@link XEventsTypes.UserClickedOpenEventsModal}\n * when clicked. It has a default slot to customize its contents.\n *\n * @public\n */\nexport default defineComponent({\n components: {\n BaseEventButton,\n },\n props: {\n /**\n * Event name to use for opening the modal.\n *\n * @public\n */\n openingEvent: {\n type: String as PropType<PropsWithType<XEventsTypes, void>>,\n default: 'UserClickedOpenEventsModal',\n },\n },\n setup(props) {\n const events = computed<Partial<XEventsTypes>>(() => ({ [props.openingEvent]: undefined }))\n\n return {\n events,\n }\n },\n})\n</script>\n\n<docs lang=\"mdx\">\n## Events\n\nA list of events that the component will emit:\n\n- [`UserClickedOpenEventsModal`](https://github.com/empathyco/x/blob/main/packages/x-components/src/wiring/events.types.ts):\n the event is emitted after the user clicks the button.\n\n## Examples\n\nThis component serves to open the `BaseEventsModal`.\n\n### Basic example\n\nOn clicked, the component closes the `BaseEventsModal`. The only needed thing is the content that\nthe button should render, that can be any thing: a text, an image, an icon, a combination of the two\nof them...\n\n```vue\n<template>\n <BaseEventsModalOpen>\n <img src=\"./open-button-icon.svg\" />\n <span>Open</span>\n </BaseEventsModalOpen>\n</template>\n\n<script>\nimport { BaseEventsModalOpen } from '@empathyco/x-components'\n\nexport default {\n name: 'BaseEventsModalOpenTest',\n components: {\n BaseEventsModalOpen,\n },\n}\n</script>\n```\n\n### Defining another event to emit when clicking the button\n\nBy default it uses the same `openingEvent` that the `BaseEventsModal` is listening by default too.\nThis event can be changed using the `openingEvent` prop, but remember to change it in the target\n`BaseEventsModal` too.\n\n```vue\n<template>\n <BaseEventsModalOpen openingEvent=\"UserOpenedEmpathize\">\n <span>Open</span>\n </BaseEventsModalOpen>\n</template>\n\n<script>\nimport { BaseEventsModalOpen } from '@empathyco/x-components'\n\nexport default {\n name: 'BaseEventsModalOpenTest',\n components: {\n BaseEventsModalOpen,\n },\n}\n</script>\n```\n</docs>\n"],"names":["_createBlock","_withCtx","_renderSlot"],"mappings":";;;;;;sBACEA,WAQkB,CAAA,0BAAA,EAAA;AAAA,IAPf,MAAQ,EAAA,IAAA,CAAA,MAAA;AAAA,IACT,KAAM,EAAA,qCAAA;AAAA,IACN,WAAU,EAAA,YAAA;AAAA,IACV,YAAW,EAAA,MAAA;AAAA,GAAA,EAAA;AALf,IAAA,OAAA,EAAAC,OAAA,CAQI,MAAQ;AAAA,MAARC,UAAQ,CAAA,IAAA,CAAA,MAAA,EAAA,SAAA,CAAA;AAAA,KAAA,CAAA;AARZ,IAAA,CAAA,EAAA,CAAA;AAAA;AAAA,GAAA,EAAA,CAAA,EAAA,CAAA,QAAA,CAAA,CAAA,CAAA;;;;;;"}
1
+ {"version":3,"file":"base-events-modal-open.vue.js","sources":["../../../../src/components/modals/base-events-modal-open.vue"],"sourcesContent":["<template>\n <BaseEventButton\n :events=\"events\"\n class=\"x-events-modal-open-button x-button\"\n data-test=\"open-modal\"\n aria-label=\"Open\"\n >\n <!-- @slot (Required) Button content with a text, an icon or both -->\n <slot />\n </BaseEventButton>\n</template>\n\n<script lang=\"ts\">\nimport type { PropType } from 'vue'\nimport type { PropsWithType } from '../../utils/types'\nimport type { XEventsTypes } from '../../wiring/events.types'\nimport { computed, defineComponent } from 'vue'\nimport BaseEventButton from '../base-event-button.vue'\n\n/**\n * Component contains an event button that emits {@link XEventsTypes.UserClickedOpenEventsModal}\n * when clicked. It has a default slot to customize its contents.\n *\n * @public\n */\nexport default defineComponent({\n components: {\n BaseEventButton,\n },\n props: {\n /**\n * Event name to use for opening the modal.\n *\n * @public\n */\n openingEvent: {\n type: String as PropType<PropsWithType<XEventsTypes, void>>,\n default: 'UserClickedOpenEventsModal',\n },\n },\n setup(props) {\n const events = computed<Partial<XEventsTypes>>(() => ({ [props.openingEvent]: undefined }))\n\n return {\n events,\n }\n },\n})\n</script>\n\n<docs lang=\"mdx\">\n## Events\n\nA list of events that the component will emit:\n\n- [`UserClickedOpenEventsModal`](https://github.com/empathyco/x/blob/main/packages/x-components/src/wiring/events.types.ts):\n the event is emitted after the user clicks the button.\n\n## Examples\n\nThis component serves to open the `BaseEventsModal`.\n\n### Basic example\n\nOn clicked, the component closes the `BaseEventsModal`. The only needed thing is the content that\nthe button should render, that can be any thing: a text, an image, an icon, a combination of the two\nof them...\n\n```vue\n<template>\n <BaseEventsModalOpen>\n <img src=\"./open-button-icon.svg\" />\n <span>Open</span>\n </BaseEventsModalOpen>\n</template>\n\n<script>\nimport { BaseEventsModalOpen } from '@empathyco/x-components'\n\nexport default {\n name: 'BaseEventsModalOpenTest',\n components: {\n BaseEventsModalOpen,\n },\n}\n</script>\n```\n\n### Defining another event to emit when clicking the button\n\nBy default it uses the same `openingEvent` that the `BaseEventsModal` is listening by default too.\nThis event can be changed using the `openingEvent` prop, but remember to change it in the target\n`BaseEventsModal` too.\n\n```vue\n<template>\n <BaseEventsModalOpen openingEvent=\"UserOpenedEmpathize\">\n <span>Open</span>\n </BaseEventsModalOpen>\n</template>\n\n<script>\nimport { BaseEventsModalOpen } from '@empathyco/x-components'\n\nexport default {\n name: 'BaseEventsModalOpenTest',\n components: {\n BaseEventsModalOpen,\n },\n}\n</script>\n```\n</docs>\n"],"names":["_createBlock","_renderSlot"],"mappings":";;;;;;sBACEA,WAQkB,CAAA,0BAAA,EAAA;AAAA,IAPf,MAAQ,EAAA,IAAA,CAAA,MAAA;AAAA,IACT,KAAM,EAAA,qCAAA;AAAA,IACN,WAAU,EAAA,YAAA;AAAA,IACV,YAAW,EAAA,MAAA;AAAA,GAAA,EAAA;qBAGX,MAAQ;AAAA,MAARC,UAAQ,CAAA,IAAA,CAAA,MAAA,EAAA,SAAA,CAAA;AAAA,KAAA,CAAA;;;;;;;;;"}
@@ -1 +1 @@
1
- {"version":3,"file":"base-events-modal.vue.js","sources":["../../../../src/components/modals/base-events-modal.vue"],"sourcesContent":["<template>\n <BaseModal\n ref=\"baseModalEl\"\n :animation=\"animation\"\n :open=\"isOpen\"\n @click:overlay=\"emitBodyClickEvent\"\n @focusin:body=\"emitBodyClickEvent\"\n >\n <slot />\n </BaseModal>\n</template>\n\n<script lang=\"ts\">\nimport type { PropType } from 'vue'\nimport type { XEvent } from '../../wiring/events.types'\nimport { defineComponent, ref } from 'vue'\nimport { use$x } from '../../composables/use-$x'\nimport { AnimationProp } from '../../types/animation-prop'\nimport { getTargetElement, isElementEqualOrContained } from '../../utils/html'\nimport BaseModal from './base-modal.vue'\n\n/**\n * Component containing a modal that emits a {@link XEventsTypes.UserClickedCloseEventsModal} when\n * clicking outside the content rendered in the default slot and can receive, through the\n * eventsToCloseModal prop, a list of {@link XEvent} to listen to in order to close\n * also the modal, eventsToOpenModal prop, another list of {@link XEvent} to customize\n * the events to listen to open the modal and a prop, displayOverlay, to display an\n * overlay over the rest of the html. The default slot offers the possibility to customize the\n * modal content.\n *\n * @public\n */\nexport default defineComponent({\n name: 'BaseEventsModal',\n components: {\n BaseModal,\n },\n props: {\n /** Array of {@link XEvent} to listen to open the modal. */\n eventsToOpenModal: {\n type: Array as PropType<XEvent[]>,\n default: (): XEvent[] => ['UserClickedOpenEventsModal'],\n },\n /** Array of {@link XEvent} to listen to close the modal. */\n eventsToCloseModal: {\n type: Array as PropType<XEvent[]>,\n default: (): XEvent[] => ['UserClickedCloseEventsModal', 'UserClickedOutOfEventsModal'],\n },\n /** Event to emit when any part of the website out of the modal has been clicked. */\n bodyClickEvent: {\n type: String as PropType<XEvent>,\n default: 'UserClickedOutOfEventsModal',\n },\n /** Animation to use for opening/closing the modal. */\n animation: AnimationProp,\n },\n setup(props) {\n const $x = use$x()\n\n /** Whether the modal is open or not. */\n const isOpen = ref(false)\n\n /** The element that opened the modal. */\n const openerElement = ref<HTMLElement>()\n const baseModalEl = ref<HTMLElement>()\n\n /**\n * Opens the modal.\n *\n * @param _payload - The payload of the event that opened the modal.\n * @param metadata - The metadata of the event that opened the modal.\n */\n props.eventsToOpenModal?.forEach(event =>\n $x.on(event, true).subscribe(({ metadata }) => {\n if (!isOpen.value) {\n openerElement.value = metadata.target\n isOpen.value = true\n }\n }),\n )\n\n /** Closes the modal. */\n props.eventsToCloseModal?.forEach(event =>\n $x.on(event, false).subscribe(() => {\n if (isOpen.value) {\n isOpen.value = false\n }\n }),\n )\n\n /**\n * Emits the event defined in the {@link BaseEventsModal.bodyClickEvent} event unless the passed\n * event target is the button that opened the modal.\n *\n * @param event - The event that triggered the close attempt.\n */\n const emitBodyClickEvent = (event: MouseEvent | FocusEvent) => {\n // Prevents clicking the open button when the panel is already open to close the panel.\n if (\n !openerElement.value ||\n !isElementEqualOrContained(openerElement.value, getTargetElement(event))\n ) {\n $x.emit(props.bodyClickEvent, undefined, { target: baseModalEl.value as HTMLElement })\n }\n }\n\n return {\n isOpen,\n openerElement,\n baseModalEl,\n emitBodyClickEvent,\n }\n },\n})\n</script>\n\n<docs lang=\"mdx\">\n## Events\n\nA list of events that the component will emit:\n\n- [`UserClickedCloseEventsModal`](https://github.com/empathyco/x/blob/main/packages/x-components/src/wiring/events.types.ts):\n the event is emitted after clicking outside the content rendered in the default slot.\n- [`UserClickedOutOfEventsModal`](https://github.com/empathyco/x/blob/main/packages/x-components/src/wiring/events.types.ts):\n the event is emitted after clicking outside the modal.\n- Custom events to open or close the modal.\n\n## Examples\n\nThe `BaseEventsModal` component handles the modal open/close state via the events passed via props.\nIts configured by default to work as a modal for a whole search application, but if the events are\nchanged, it can work as a modal that is opened/closed when the events it is listening are emitted.\n\n### Basic usage\n\nThe component interacts with the open and close components, which are preconfigured by default to\nemit the same events that the `BaseEventsModal` component is listening to:\n\n```vue\n<template>\n <div>\n <BaseEventsModalOpen>Open</BaseEventsModalOpen>\n <BaseEventsModal>\n <BaseEventsModalClose>Close</BaseEventsModalClose>\n <img src=\"success.png\" />\n </BaseEventsModal>\n </div>\n</template>\n\n<script>\nimport { BaseEventsModalOpen, BaseEventsModal } from '@empathyco/x-components'\n\nexport default {\n name: 'ModalTest',\n components: {\n BaseEventsModalOpen,\n BaseEventsModal,\n },\n}\n</script>\n```\n\n### Customizing the events\n\nIf needed, the events to open/close the modal can be changed. The modal can listen one or more\nevents. To do so, the `eventsToCloseModal` and `eventsToOpenModal` props can be used. Below you can\nsee a full example on how this would work with custom events.\n\n```vue\n<template>\n <div>\n <BaseEventsModalOpen openingEvent=\"UserClickedOpenMyCustomModal\">Open</BaseEventsModalOpen>\n <BaseEventsModal\n :eventsToCloseModal=\"eventsToCloseModal\"\n :eventsToOpenModal=\"eventsToOpenModal\"\n >\n <BaseEventsModalClose closingEvent=\"UserClickedCloseMyCustomModalFromHeader\">\n Close from header\n </BaseEventsModalClose>\n <img src=\"success.png\" />\n <BaseEventsModalClose closingEvent=\"UserClickedCloseMyCustomModalFromFooter\">\n Close from footer\n </BaseEventsModalClose>\n </BaseEventsModal>\n </div>\n</template>\n\n<script>\nimport { BaseEventsModalOpen, BaseEventsModal, BaseEventsModalClose } from '@empathyco/x-components'\n\nexport default {\n name: 'ModalTest',\n components: {\n BaseEventsModalOpen,\n BaseEventsModal,\n BaseEventsModalClose,\n },\n}\n</script>\n```\n\n### Customizing the content with classes\n\nThe `contentClass` prop can be used to add classes to the modal content.\n\n```vue\n<template>\n <div>\n <BaseEventsModalOpen>Open</BaseEventsModalOpen>\n <BaseEventsModal contentClass=\"x-bg-neutral-75\">\n <BaseEventsModalClose>Close</BaseEventsModalClose>\n <img src=\"success.png\" />\n </BaseEventsModal>\n </div>\n</template>\n\n<script>\nimport { BaseEventsModalOpen, BaseEventsModal } from '@empathyco/x-components'\n\nexport default {\n name: 'ModalTest',\n components: {\n BaseEventsModalOpen,\n BaseEventsModal,\n },\n}\n</script>\n```\n</docs>\n"],"names":["_createBlock","_withCtx","_renderSlot"],"mappings":";;;;;;sBACEA,WAQY,CAAA,oBAAA,EAAA;AAAA,IAPV,GAAI,EAAA,aAAA;AAAA,IACH,SAAW,EAAA,IAAA,CAAA,SAAA;AAAA,IACX,IAAM,EAAA,IAAA,CAAA,MAAA;AAAA,IACN,iBAAe,EAAA,IAAA,CAAA,kBAAA;AAAA,IACf,gBAAc,EAAA,IAAA,CAAA,kBAAA;AAAA,GAAA,EAAA;AANnB,IAAA,OAAA,EAAAC,OAAA,CAQI,MAAQ;AAAA,MAARC,UAAQ,CAAA,IAAA,CAAA,MAAA,EAAA,SAAA,CAAA;AAAA,KAAA,CAAA;AARZ,IAAA,CAAA,EAAA,CAAA;AAAA;AAAA,GAAA,EAAA,CAAA,EAAA,CAAA,WAAA,EAAA,MAAA,EAAA,iBAAA,EAAA,gBAAA,CAAA,CAAA,CAAA;;;;;;"}
1
+ {"version":3,"file":"base-events-modal.vue.js","sources":["../../../../src/components/modals/base-events-modal.vue"],"sourcesContent":["<template>\n <BaseModal\n ref=\"baseModalEl\"\n :animation=\"animation\"\n :open=\"isOpen\"\n @click:overlay=\"emitBodyClickEvent\"\n @focusin:body=\"emitBodyClickEvent\"\n >\n <slot />\n </BaseModal>\n</template>\n\n<script lang=\"ts\">\nimport type { PropType } from 'vue'\nimport type { XEvent } from '../../wiring/events.types'\nimport { defineComponent, ref } from 'vue'\nimport { use$x } from '../../composables/use-$x'\nimport { AnimationProp } from '../../types/animation-prop'\nimport { getTargetElement, isElementEqualOrContained } from '../../utils/html'\nimport BaseModal from './base-modal.vue'\n\n/**\n * Component containing a modal that emits a {@link XEventsTypes.UserClickedCloseEventsModal} when\n * clicking outside the content rendered in the default slot and can receive, through the\n * eventsToCloseModal prop, a list of {@link XEvent} to listen to in order to close\n * also the modal, eventsToOpenModal prop, another list of {@link XEvent} to customize\n * the events to listen to open the modal and a prop, displayOverlay, to display an\n * overlay over the rest of the html. The default slot offers the possibility to customize the\n * modal content.\n *\n * @public\n */\nexport default defineComponent({\n name: 'BaseEventsModal',\n components: {\n BaseModal,\n },\n props: {\n /** Array of {@link XEvent} to listen to open the modal. */\n eventsToOpenModal: {\n type: Array as PropType<XEvent[]>,\n default: (): XEvent[] => ['UserClickedOpenEventsModal'],\n },\n /** Array of {@link XEvent} to listen to close the modal. */\n eventsToCloseModal: {\n type: Array as PropType<XEvent[]>,\n default: (): XEvent[] => ['UserClickedCloseEventsModal', 'UserClickedOutOfEventsModal'],\n },\n /** Event to emit when any part of the website out of the modal has been clicked. */\n bodyClickEvent: {\n type: String as PropType<XEvent>,\n default: 'UserClickedOutOfEventsModal',\n },\n /** Animation to use for opening/closing the modal. */\n animation: AnimationProp,\n },\n setup(props) {\n const $x = use$x()\n\n /** Whether the modal is open or not. */\n const isOpen = ref(false)\n\n /** The element that opened the modal. */\n const openerElement = ref<HTMLElement>()\n const baseModalEl = ref<HTMLElement>()\n\n /**\n * Opens the modal.\n *\n * @param _payload - The payload of the event that opened the modal.\n * @param metadata - The metadata of the event that opened the modal.\n */\n props.eventsToOpenModal?.forEach(event =>\n $x.on(event, true).subscribe(({ metadata }) => {\n if (!isOpen.value) {\n openerElement.value = metadata.target\n isOpen.value = true\n }\n }),\n )\n\n /** Closes the modal. */\n props.eventsToCloseModal?.forEach(event =>\n $x.on(event, false).subscribe(() => {\n if (isOpen.value) {\n isOpen.value = false\n }\n }),\n )\n\n /**\n * Emits the event defined in the {@link BaseEventsModal.bodyClickEvent} event unless the passed\n * event target is the button that opened the modal.\n *\n * @param event - The event that triggered the close attempt.\n */\n const emitBodyClickEvent = (event: MouseEvent | FocusEvent) => {\n // Prevents clicking the open button when the panel is already open to close the panel.\n if (\n !openerElement.value ||\n !isElementEqualOrContained(openerElement.value, getTargetElement(event))\n ) {\n $x.emit(props.bodyClickEvent, undefined, { target: baseModalEl.value as HTMLElement })\n }\n }\n\n return {\n isOpen,\n openerElement,\n baseModalEl,\n emitBodyClickEvent,\n }\n },\n})\n</script>\n\n<docs lang=\"mdx\">\n## Events\n\nA list of events that the component will emit:\n\n- [`UserClickedCloseEventsModal`](https://github.com/empathyco/x/blob/main/packages/x-components/src/wiring/events.types.ts):\n the event is emitted after clicking outside the content rendered in the default slot.\n- [`UserClickedOutOfEventsModal`](https://github.com/empathyco/x/blob/main/packages/x-components/src/wiring/events.types.ts):\n the event is emitted after clicking outside the modal.\n- Custom events to open or close the modal.\n\n## Examples\n\nThe `BaseEventsModal` component handles the modal open/close state via the events passed via props.\nIts configured by default to work as a modal for a whole search application, but if the events are\nchanged, it can work as a modal that is opened/closed when the events it is listening are emitted.\n\n### Basic usage\n\nThe component interacts with the open and close components, which are preconfigured by default to\nemit the same events that the `BaseEventsModal` component is listening to:\n\n```vue\n<template>\n <div>\n <BaseEventsModalOpen>Open</BaseEventsModalOpen>\n <BaseEventsModal>\n <BaseEventsModalClose>Close</BaseEventsModalClose>\n <img src=\"success.png\" />\n </BaseEventsModal>\n </div>\n</template>\n\n<script>\nimport { BaseEventsModalOpen, BaseEventsModal } from '@empathyco/x-components'\n\nexport default {\n name: 'ModalTest',\n components: {\n BaseEventsModalOpen,\n BaseEventsModal,\n },\n}\n</script>\n```\n\n### Customizing the events\n\nIf needed, the events to open/close the modal can be changed. The modal can listen one or more\nevents. To do so, the `eventsToCloseModal` and `eventsToOpenModal` props can be used. Below you can\nsee a full example on how this would work with custom events.\n\n```vue\n<template>\n <div>\n <BaseEventsModalOpen openingEvent=\"UserClickedOpenMyCustomModal\">Open</BaseEventsModalOpen>\n <BaseEventsModal\n :eventsToCloseModal=\"eventsToCloseModal\"\n :eventsToOpenModal=\"eventsToOpenModal\"\n >\n <BaseEventsModalClose closingEvent=\"UserClickedCloseMyCustomModalFromHeader\">\n Close from header\n </BaseEventsModalClose>\n <img src=\"success.png\" />\n <BaseEventsModalClose closingEvent=\"UserClickedCloseMyCustomModalFromFooter\">\n Close from footer\n </BaseEventsModalClose>\n </BaseEventsModal>\n </div>\n</template>\n\n<script>\nimport { BaseEventsModalOpen, BaseEventsModal, BaseEventsModalClose } from '@empathyco/x-components'\n\nexport default {\n name: 'ModalTest',\n components: {\n BaseEventsModalOpen,\n BaseEventsModal,\n BaseEventsModalClose,\n },\n}\n</script>\n```\n\n### Customizing the content with classes\n\nThe `contentClass` prop can be used to add classes to the modal content.\n\n```vue\n<template>\n <div>\n <BaseEventsModalOpen>Open</BaseEventsModalOpen>\n <BaseEventsModal contentClass=\"x-bg-neutral-75\">\n <BaseEventsModalClose>Close</BaseEventsModalClose>\n <img src=\"success.png\" />\n </BaseEventsModal>\n </div>\n</template>\n\n<script>\nimport { BaseEventsModalOpen, BaseEventsModal } from '@empathyco/x-components'\n\nexport default {\n name: 'ModalTest',\n components: {\n BaseEventsModalOpen,\n BaseEventsModal,\n },\n}\n</script>\n```\n</docs>\n"],"names":["_createBlock","_renderSlot"],"mappings":";;;;;;sBACEA,WAQY,CAAA,oBAAA,EAAA;AAAA,IAPV,GAAI,EAAA,aAAA;AAAA,IACH,SAAW,EAAA,IAAA,CAAA,SAAA;AAAA,IACX,IAAM,EAAA,IAAA,CAAA,MAAA;AAAA,IACN,iBAAe,EAAA,IAAA,CAAA,kBAAA;AAAA,IACf,gBAAc,EAAA,IAAA,CAAA,kBAAA;AAAA,GAAA,EAAA;qBAEf,MAAQ;AAAA,MAARC,UAAQ,CAAA,IAAA,CAAA,MAAA,EAAA,SAAA,CAAA;AAAA,KAAA,CAAA;;;;;;;;;"}
@@ -1 +1 @@
1
- {"version":3,"file":"base-id-modal.vue.js","sources":["../../../../src/components/modals/base-id-modal.vue"],"sourcesContent":["<template>\n <BaseModal\n :ref=\"el\"\n :animation=\"animation\"\n :open=\"isOpen\"\n @click:overlay=\"emitClickOutOfModal\"\n @focusin:body=\"emitClickOutOfModal\"\n >\n <slot />\n </BaseModal>\n</template>\n\n<script lang=\"ts\">\nimport type { XEvent } from '../../wiring/events.types'\nimport type { WireMetadata } from '../../wiring/wiring.types'\nimport { defineComponent, ref } from 'vue'\nimport { useXBus } from '../../composables'\nimport { AnimationProp } from '../../types/animation-prop'\nimport { getTargetElement, isElementEqualOrContained } from '../../utils/html'\nimport BaseModal from './base-modal.vue'\n\n/**\n * Component containing a modal expecting a required prop, named `modalId`. It reacts to\n * `UserClickedOpenModal`, `UserClickedCloseModal` and `UserClickedOutOfModal` events, when their\n * payload matches the component's 'modalId' prop, to handle its open/close state. The default\n * slot offers the possibility to customise the modal content.\n *\n * @public\n */\nexport default defineComponent({\n name: 'BaseIdModal',\n components: { BaseModal },\n props: {\n /**\n * Animation to use for opening/closing the modal.\n */\n animation: {\n type: AnimationProp,\n },\n /**\n * The modalId to use for the open and close event listeners.\n */\n modalId: {\n type: String,\n required: true,\n },\n },\n setup(props) {\n /** The element that opened the modal. */\n let openerElement: HTMLElement | undefined\n\n /** Whether the modal is open or not. */\n const isOpen = ref(false)\n\n const el = ref<HTMLElement>()\n\n const closeModalEvents: XEvent[] = ['UserClickedCloseModal', 'UserClickedOutOfModal']\n\n const xBus = useXBus()\n\n /**\n * Opens the modal.\n *\n * @param modalId - The payload of the {@link XEventsTypes.UserClickedOpenModal} event.\n * @param metadata - The metadata of the emitted event.\n * @public\n */\n function openModal(modalId: string, metadata: WireMetadata): void {\n if (!isOpen.value && props.modalId === modalId) {\n openerElement = metadata.target\n isOpen.value = true\n }\n }\n\n /**\n * Closes the modal.\n *\n * @param payload - The payload of the closing events:\n * {@link XEventsTypes.UserClickedCloseModal} or {@link XEventsTypes.UserClickedOutOfModal}.\n *\n * @public\n */\n function closeModal(payload: string): void {\n if (isOpen.value && props.modalId === payload) {\n isOpen.value = false\n }\n }\n\n /**\n * Emits a {@link XEventsTypes.UserClickedOutOfModal} event unless the passed event target\n * is the button that opened the modal.\n *\n * @param event - The event that triggered the close attempt.\n * @public\n */\n function emitClickOutOfModal(event: MouseEvent | FocusEvent): void {\n // Prevents clicking the open button when the panel is already open to close the panel.\n if (!openerElement || !isElementEqualOrContained(openerElement, getTargetElement(event))) {\n xBus.emit('UserClickedOutOfModal', props.modalId, { target: el.value as HTMLElement })\n }\n }\n\n xBus\n .on('UserClickedOpenModal', true)\n .subscribe(({ eventPayload, metadata }) => openModal(eventPayload, metadata))\n\n closeModalEvents.forEach(event => {\n xBus.on(event, false).subscribe(eventPayload => closeModal(eventPayload as string))\n })\n\n return {\n el,\n isOpen,\n emitClickOutOfModal,\n }\n },\n})\n</script>\n\n<docs lang=\"mdx\">\n## Events\n\nA list of events that the component will emit:\n\n- [`UserClickedOutOfModal`](https://github.com/empathyco/x/blob/main/packages/x-components/src/wiring/events.types.ts):\n the event is emitted after the user clicks outside the modal. The event payload is the id of the\n modal and a metadata with the target element that emitted it.\n\n## Examples\n\nThe `BaseIdModal` component reacts to the `UserClickedOpenModal`, `UserClickedCloseModal` and\n`UserClickedOutOfModal` to handle its open/close state. The component filters out the events which\npayload doesn't match its `modalId` prop and reacts only to those who match this criteria.\n\n### Basic usage\n\nThe component interacts with both `BaseIdModalOpen` and `BaseIdModalClose` components, which have to\nshare the same value in their `modalId` prop to work:\n\n```vue\n<template>\n <div>\n <BaseIdModalOpen modalId=\"myModal\">Open</BaseIdModalOpen>\n <BaseIdModal modalId=\"myModal\">\n <img src=\"success.png\" />\n <BaseIdModalClose modalId=\"myModal\">Close</BaseIdModalClose>\n </BaseIdModal>\n </div>\n</template>\n\n<script>\nimport { BaseIdModalOpen, BaseIdModal, BaseIdModalClose } from '@empathyco/x-components'\n\nexport default {\n name: 'TestModal',\n components: {\n BaseIdModalOpen,\n BaseIdModal,\n BaseIdModalClose,\n },\n}\n</script>\n```\n\n### Customized usage\n\n#### Customizing the content with classes\n\nThe `contentClass` prop can be used to add classes to the modal content.\n\n```vue\n<template>\n <div>\n <BaseIdModalOpen modalId=\"myModal\">Open</BaseIdModalOpen>\n <BaseIdModal modalId=\"myModal\" contentClass=\"x-bg-neutral-75\">\n <img src=\"success.png\" />\n <BaseIdModalClose modalId=\"myModal\">Close</BaseIdModalClose>\n </BaseIdModal>\n </div>\n</template>\n\n<script>\nimport { BaseIdModalOpen, BaseIdModal, BaseIdModalClose } from '@empathyco/x-components'\n\nexport default {\n name: 'TestModal',\n components: {\n BaseIdModalOpen,\n BaseIdModal,\n BaseIdModalClose,\n },\n}\n</script>\n```\n</docs>\n"],"names":["_createBlock","_withCtx","_renderSlot"],"mappings":";;;;;;sBACEA,WAQY,CAAA,oBAAA,EAAA;AAAA,IAPT,GAAK,EAAA,IAAA,CAAA,EAAA;AAAA,IACL,SAAW,EAAA,IAAA,CAAA,SAAA;AAAA,IACX,IAAM,EAAA,IAAA,CAAA,MAAA;AAAA,IACN,iBAAe,EAAA,IAAA,CAAA,mBAAA;AAAA,IACf,gBAAc,EAAA,IAAA,CAAA,mBAAA;AAAA,GAAA,EAAA;AANnB,IAAA,OAAA,EAAAC,OAAA,CAQI,MAAQ;AAAA,MAARC,UAAQ,CAAA,IAAA,CAAA,MAAA,EAAA,SAAA,CAAA;AAAA,KAAA,CAAA;AARZ,IAAA,CAAA,EAAA,CAAA;AAAA;AAAA,GAAA,EAAA,CAAA,EAAA,CAAA,WAAA,EAAA,MAAA,EAAA,iBAAA,EAAA,gBAAA,CAAA,CAAA,CAAA;;;;;;"}
1
+ {"version":3,"file":"base-id-modal.vue.js","sources":["../../../../src/components/modals/base-id-modal.vue"],"sourcesContent":["<template>\n <BaseModal\n :ref=\"el\"\n :animation=\"animation\"\n :open=\"isOpen\"\n @click:overlay=\"emitClickOutOfModal\"\n @focusin:body=\"emitClickOutOfModal\"\n >\n <slot />\n </BaseModal>\n</template>\n\n<script lang=\"ts\">\nimport type { XEvent } from '../../wiring/events.types'\nimport type { WireMetadata } from '../../wiring/wiring.types'\nimport { defineComponent, ref } from 'vue'\nimport { useXBus } from '../../composables'\nimport { AnimationProp } from '../../types/animation-prop'\nimport { getTargetElement, isElementEqualOrContained } from '../../utils/html'\nimport BaseModal from './base-modal.vue'\n\n/**\n * Component containing a modal expecting a required prop, named `modalId`. It reacts to\n * `UserClickedOpenModal`, `UserClickedCloseModal` and `UserClickedOutOfModal` events, when their\n * payload matches the component's 'modalId' prop, to handle its open/close state. The default\n * slot offers the possibility to customise the modal content.\n *\n * @public\n */\nexport default defineComponent({\n name: 'BaseIdModal',\n components: { BaseModal },\n props: {\n /**\n * Animation to use for opening/closing the modal.\n */\n animation: {\n type: AnimationProp,\n },\n /**\n * The modalId to use for the open and close event listeners.\n */\n modalId: {\n type: String,\n required: true,\n },\n },\n setup(props) {\n /** The element that opened the modal. */\n let openerElement: HTMLElement | undefined\n\n /** Whether the modal is open or not. */\n const isOpen = ref(false)\n\n const el = ref<HTMLElement>()\n\n const closeModalEvents: XEvent[] = ['UserClickedCloseModal', 'UserClickedOutOfModal']\n\n const xBus = useXBus()\n\n /**\n * Opens the modal.\n *\n * @param modalId - The payload of the {@link XEventsTypes.UserClickedOpenModal} event.\n * @param metadata - The metadata of the emitted event.\n * @public\n */\n function openModal(modalId: string, metadata: WireMetadata): void {\n if (!isOpen.value && props.modalId === modalId) {\n openerElement = metadata.target\n isOpen.value = true\n }\n }\n\n /**\n * Closes the modal.\n *\n * @param payload - The payload of the closing events:\n * {@link XEventsTypes.UserClickedCloseModal} or {@link XEventsTypes.UserClickedOutOfModal}.\n *\n * @public\n */\n function closeModal(payload: string): void {\n if (isOpen.value && props.modalId === payload) {\n isOpen.value = false\n }\n }\n\n /**\n * Emits a {@link XEventsTypes.UserClickedOutOfModal} event unless the passed event target\n * is the button that opened the modal.\n *\n * @param event - The event that triggered the close attempt.\n * @public\n */\n function emitClickOutOfModal(event: MouseEvent | FocusEvent): void {\n // Prevents clicking the open button when the panel is already open to close the panel.\n if (!openerElement || !isElementEqualOrContained(openerElement, getTargetElement(event))) {\n xBus.emit('UserClickedOutOfModal', props.modalId, { target: el.value as HTMLElement })\n }\n }\n\n xBus\n .on('UserClickedOpenModal', true)\n .subscribe(({ eventPayload, metadata }) => openModal(eventPayload, metadata))\n\n closeModalEvents.forEach(event => {\n xBus.on(event, false).subscribe(eventPayload => closeModal(eventPayload as string))\n })\n\n return {\n el,\n isOpen,\n emitClickOutOfModal,\n }\n },\n})\n</script>\n\n<docs lang=\"mdx\">\n## Events\n\nA list of events that the component will emit:\n\n- [`UserClickedOutOfModal`](https://github.com/empathyco/x/blob/main/packages/x-components/src/wiring/events.types.ts):\n the event is emitted after the user clicks outside the modal. The event payload is the id of the\n modal and a metadata with the target element that emitted it.\n\n## Examples\n\nThe `BaseIdModal` component reacts to the `UserClickedOpenModal`, `UserClickedCloseModal` and\n`UserClickedOutOfModal` to handle its open/close state. The component filters out the events which\npayload doesn't match its `modalId` prop and reacts only to those who match this criteria.\n\n### Basic usage\n\nThe component interacts with both `BaseIdModalOpen` and `BaseIdModalClose` components, which have to\nshare the same value in their `modalId` prop to work:\n\n```vue\n<template>\n <div>\n <BaseIdModalOpen modalId=\"myModal\">Open</BaseIdModalOpen>\n <BaseIdModal modalId=\"myModal\">\n <img src=\"success.png\" />\n <BaseIdModalClose modalId=\"myModal\">Close</BaseIdModalClose>\n </BaseIdModal>\n </div>\n</template>\n\n<script>\nimport { BaseIdModalOpen, BaseIdModal, BaseIdModalClose } from '@empathyco/x-components'\n\nexport default {\n name: 'TestModal',\n components: {\n BaseIdModalOpen,\n BaseIdModal,\n BaseIdModalClose,\n },\n}\n</script>\n```\n\n### Customized usage\n\n#### Customizing the content with classes\n\nThe `contentClass` prop can be used to add classes to the modal content.\n\n```vue\n<template>\n <div>\n <BaseIdModalOpen modalId=\"myModal\">Open</BaseIdModalOpen>\n <BaseIdModal modalId=\"myModal\" contentClass=\"x-bg-neutral-75\">\n <img src=\"success.png\" />\n <BaseIdModalClose modalId=\"myModal\">Close</BaseIdModalClose>\n </BaseIdModal>\n </div>\n</template>\n\n<script>\nimport { BaseIdModalOpen, BaseIdModal, BaseIdModalClose } from '@empathyco/x-components'\n\nexport default {\n name: 'TestModal',\n components: {\n BaseIdModalOpen,\n BaseIdModal,\n BaseIdModalClose,\n },\n}\n</script>\n```\n</docs>\n"],"names":["_createBlock","_renderSlot"],"mappings":";;;;;;sBACEA,WAQY,CAAA,oBAAA,EAAA;AAAA,IAPT,GAAK,EAAA,IAAA,CAAA,EAAA;AAAA,IACL,SAAW,EAAA,IAAA,CAAA,SAAA;AAAA,IACX,IAAM,EAAA,IAAA,CAAA,MAAA;AAAA,IACN,iBAAe,EAAA,IAAA,CAAA,mBAAA;AAAA,IACf,gBAAc,EAAA,IAAA,CAAA,mBAAA;AAAA,GAAA,EAAA;qBAEf,MAAQ;AAAA,MAARC,UAAQ,CAAA,IAAA,CAAA,MAAA,EAAA,SAAA,CAAA;AAAA,KAAA,CAAA;;;;;;;;;"}
@@ -1 +1 @@
1
- {"version":3,"file":"base-modal.vue.js","sources":["../../../../src/components/modals/base-modal.vue"],"sourcesContent":["<template>\n <div v-show=\"isWaitingForLeave || open\" ref=\"modalRef\" class=\"x-modal\" data-test=\"modal\">\n <component\n :is=\"animation\"\n @before-leave=\"isWaitingForLeave = true\"\n @after-leave=\"isWaitingForLeave = false\"\n >\n <div\n v-if=\"open\"\n ref=\"modalContentRef\"\n class=\"x-modal__content\"\n data-test=\"modal-content\"\n role=\"dialog\"\n :class=\"contentClass\"\n aria-label=\"Base modal content\"\n >\n <!-- @slot (Required) Modal container content -->\n <slot />\n </div>\n </component>\n <component :is=\"overlayAnimation\">\n <div\n v-if=\"open\"\n class=\"x-modal__overlay\"\n :class=\"overlayClass\"\n data-test=\"modal-overlay\"\n @click=\"emitOverlayClicked\"\n @keydown=\"emitOverlayClicked\"\n />\n </component>\n </div>\n</template>\n\n<script lang=\"ts\">\nimport { defineComponent, nextTick, onBeforeUnmount, onMounted, ref, watch } from 'vue'\nimport { useDebounce } from '../../composables'\nimport { AnimationProp } from '../../types'\nimport { FOCUSABLE_SELECTORS, getTargetElement } from '../../utils'\nimport { Fade, NoAnimation } from '../animations'\n\n/**\n * Base component with no XPlugin dependencies that serves as a utility for constructing more\n * complex modals.\n *\n * @public\n */\nexport default defineComponent({\n name: 'BaseModal',\n props: {\n /** Determines if the modal is open or not. */\n open: {\n type: Boolean,\n required: true,\n },\n /**\n * Determines if the focused element changes to one inside the modal when it opens. Either the\n * first element with a positive tabindex or just the first focusable element.\n */\n focusOnOpen: {\n type: Boolean,\n default: true,\n },\n /**\n * The reference selector of a DOM element to use as reference to position the modal.\n * This selector can be an ID or a class, if it is a class, it will use the first\n * element that matches.\n */\n referenceSelector: String,\n /** Animation to use for opening/closing the modal.This animation only affects the content. */\n animation: {\n type: AnimationProp,\n default: () => NoAnimation,\n },\n /**\n * Animation to use for the overlay (backdrop) part of the modal. By default, it uses\n * a fade transition.\n */\n overlayAnimation: {\n type: AnimationProp,\n default: () => Fade,\n },\n /** Class inherited by content element. */\n contentClass: String,\n /** Class inherited by overlay element. */\n overlayClass: String,\n },\n emits: ['click:overlay', 'focusin:body'],\n setup(props, { emit }) {\n /** Reference to the modal element in the DOM. */\n const modalRef = ref<HTMLDivElement>()\n /** Reference to the modal content element in the DOM. */\n const modalContentRef = ref<HTMLDivElement>()\n\n /** The previous value of the body overflow style. */\n const previousBodyOverflow = ref('')\n /** The previous value of the HTML element overflow style. */\n const previousHTMLOverflow = ref('')\n /** Boolean to delay the leave animation until it has completed. */\n const isWaitingForLeave = ref(false)\n /** The reference element to use to find the modal's position. */\n let referenceElement: HTMLElement | undefined\n\n /** Disables the scroll of both the body and the window. */\n function disableScroll() {\n previousBodyOverflow.value = document.body.style.overflow\n previousHTMLOverflow.value = document.documentElement.style.overflow\n document.body.style.overflow = document.documentElement.style.overflow = 'hidden'\n }\n\n /** Restores the scroll of both the body and the window. */\n function enableScroll() {\n document.body.style.overflow = previousBodyOverflow.value\n document.documentElement.style.overflow = previousHTMLOverflow.value\n }\n\n /**\n * Emits the `click:overlay` event if the click has been triggered in the overlay layer.\n *\n * @param event - The click event.\n */\n function emitOverlayClicked(event: Event) {\n // eslint-disable-next-line vue/custom-event-name-casing\n emit('click:overlay', event)\n }\n\n /**\n * Emits the `focusin:body` event if a focus event has been triggered outside the modal.\n *\n * @param event - The focusin event.\n */\n function emitFocusInBody(event: FocusEvent) {\n if (!modalContentRef.value?.contains(getTargetElement(event))) {\n // eslint-disable-next-line vue/custom-event-name-casing\n emit('focusin:body', event)\n }\n }\n\n /**\n * Adds listeners to the body element ot detect if the modal should be closed.\n *\n * @remarks TODO find a better solution and remove the timeout\n * To avoid emit the focusin on opening X that provokes closing it immediately.\n * This is because this event was emitted after the open of main modal when the user clicks\n * on the customer website search box (focus event). This way we avoid add the listener before\n * the open and the avoid the event that provokes the close.\n */\n function addBodyListeners() {\n setTimeout(() => {\n document.body.addEventListener('focusin', emitFocusInBody)\n })\n }\n\n /** Removes the body listeners. */\n function removeBodyListeners() {\n document.body.removeEventListener('focusin', emitFocusInBody)\n }\n\n /**\n * Sets the focused element to the first element either the first element with a positive\n * tabindex or, if there isn't any, the first focusable element inside the modal.\n */\n function setFocus() {\n const candidates: HTMLElement[] = Array.from(\n modalContentRef.value?.querySelectorAll(FOCUSABLE_SELECTORS) ?? [],\n )\n const element = candidates.find(element => element.tabIndex) ?? candidates[0]\n element?.focus()\n }\n\n /**\n * Syncs the body to the open state of the modal, adding or removing styles and listeners.\n *\n * @remarks nextTick() to wait for `modalContentRef` to be updated to look for focusable\n * candidates inside.\n *\n * @param isOpen - True when the modal is opened.\n */\n async function syncBody(isOpen: boolean) {\n if (isOpen) {\n disableScroll()\n addBodyListeners()\n if (props.focusOnOpen) {\n await nextTick()\n setFocus()\n }\n } else {\n enableScroll()\n removeBodyListeners()\n }\n }\n\n /**\n * Updates the position of the modal setting the top of the element depending\n * on the selector. The modal will be placed under this selector.\n */\n const debouncedUpdatePosition = useDebounce(\n () => {\n const { height, y } = referenceElement?.getBoundingClientRect() ?? { height: 0, y: 0 }\n modalRef.value!.style.top = `${height + y}px`\n modalRef.value!.style.bottom = '0'\n modalRef.value!.style.height = 'auto'\n },\n 100,\n { leading: true },\n )\n\n let resizeObserver: ResizeObserver\n\n onMounted(() => {\n watch(() => props.open, syncBody)\n if (props.open) {\n syncBody(true)\n }\n\n resizeObserver = new ResizeObserver(debouncedUpdatePosition)\n\n watch(\n () => props.referenceSelector,\n () => {\n resizeObserver.disconnect()\n\n if (props.referenceSelector) {\n const element = document.querySelector(props.referenceSelector) as HTMLElement\n if (element) {\n referenceElement = element\n resizeObserver.observe(element)\n }\n } else {\n referenceElement = undefined\n debouncedUpdatePosition()\n }\n },\n { immediate: true },\n )\n })\n\n onBeforeUnmount(() => {\n if (props.open) {\n removeBodyListeners()\n enableScroll()\n }\n resizeObserver.disconnect()\n })\n\n return {\n emitOverlayClicked,\n isWaitingForLeave,\n modalContentRef,\n modalRef,\n }\n },\n})\n</script>\n\n<style lang=\"css\" scoped>\n.x-modal {\n position: fixed;\n top: 0;\n left: 0;\n display: flex;\n align-items: flex-start;\n justify-content: flex-start;\n width: 100%;\n height: 100%;\n z-index: 1;\n}\n\n.x-modal__content {\n display: flex;\n flex-flow: column nowrap;\n z-index: 1;\n}\n\n.x-modal__overlay {\n width: 100%;\n height: 100%;\n position: absolute;\n background-color: rgb(0, 0, 0);\n opacity: 0.3;\n}\n</style>\n\n<docs lang=\"mdx\">\n## Examples\n\nThe `BaseModal` is a simple component that serves to create complex modals. Its open state has to be\npassed via prop. There is a prop, `referenceSelector`, used to place the modal under some element\ninstead of set the top of the element directly. It also accepts an animation to use for opening &\nclosing.\n\nIt emits a `click:overlay` event when any part out of the content is clicked, but only if the modal\nis open.\n\n```vue\n<template>\n <div>\n <button @click=\"open = true\">Open modal</button>\n <BaseModal\n :animation=\"fadeAndSlide\"\n :open=\"open\"\n @click:overlay=\"open = false\"\n referenceSelector=\".header\"\n >\n <h1>Hello</h1>\n <p>The modal is working</p>\n <button @click=\"open = false\">Close modal</button>\n </BaseModal>\n </div>\n</template>\n\n<script>\nimport { BaseModal, FadeAndSlide } from '@empathyco/x-components'\nimport Vue from 'vue'\n\nVue.component('fadeAndSlide', FadeAndSlide)\n\nexport default {\n components: {\n BaseModal,\n },\n data() {\n return {\n open: false,\n }\n },\n}\n</script>\n```\n\n### Customized usage\n\n#### Customizing the content with classes\n\nThe `contentClass` prop can be used to add classes to the modal content.\n\n```vue\n<template>\n <div>\n <button @click=\"open = true\">Open modal</button>\n <BaseModal\n :animation=\"fadeAndSlide\"\n :open=\"open\"\n @click:overlay=\"open = false\"\n referenceSelector=\".header\"\n contentClass=\"x-bg-neutral-75\"\n >\n <h1>Hello</h1>\n <p>The modal is working</p>\n <button @click=\"open = false\">Close modal</button>\n </BaseModal>\n </div>\n</template>\n\n<script>\nimport { BaseModal, FadeAndSlide } from '@empathyco/x-components'\nimport Vue from 'vue'\n\nVue.component('fadeAndSlide', FadeAndSlide)\n\nexport default {\n components: {\n BaseModal,\n },\n data() {\n return {\n open: false,\n }\n },\n}\n</script>\n```\n\n#### Customizing the overlay with classes\n\nThe `overlayClass` prop can be used to add classes to the modal overlay.\n\n```vue\n<template>\n <div>\n <button @click=\"open = true\">Open modal</button>\n <BaseModal\n :animation=\"fadeAndSlide\"\n :open=\"open\"\n @click:overlay=\"open = false\"\n referenceSelector=\".header\"\n overlayClass=\"x-bg-neutral-75\"\n >\n <h1>Hello</h1>\n <p>The modal is working</p>\n <button @click=\"open = false\">Close modal</button>\n </BaseModal>\n </div>\n</template>\n\n<script>\nimport { BaseModal, FadeAndSlide } from '@empathyco/x-components'\nimport Vue from 'vue'\n\nVue.component('fadeAndSlide', FadeAndSlide)\n\nexport default {\n components: {\n BaseModal,\n },\n data() {\n return {\n open: false,\n }\n },\n}\n</script>\n```\n\n## Vue Events\n\nA list of events that the component will emit:\n\n- `click:overlay`: the event is emitted after the user clicks any part out of the content but only\n if the modal is open. The event payload is the mouse event that triggers it.\n- `focusin:body`: the event is emitted after the user focus in any part out of the content but only\n if the modal is open. The event payload is the focus event that triggers it.\n</docs>\n"],"names":["_withDirectives","_openBlock","_createElementBlock","_createBlock","_resolveDynamicComponent","_withCtx","_normalizeClass","_renderSlot","_createCommentVNode","_vShow"],"mappings":";;;;;;EAC0C,GAAI,EAAA,UAAA;AAAA,EAAW,KAAM,EAAA,SAAA;AAAA,EAAU,WAAU,EAAA,OAAA;;;AAAjF,EAAA,OAAAA,cAAA,EAAAC,SAAA,EAAA,EAAAC,kBAAA;AAAA,IA6BM,KAAA;AAAA,IA7BN,UAAA;AAAA,IA6BM;AAAA,OA5BJD,SAAA,EAAA,EAAAE,WAAA;AAAA,QAiBYC,wBAhBL,IAAS,CAAA,SAAA,CAAA;AAAA,QAAA;AAAA,UACb,aAAA,EAAY,sCAAE,IAAiB,CAAA,iBAAA,GAAA,IAAA,CAAA;AAAA,UAC/B,YAAA,EAAW,sCAAE,IAAiB,CAAA,iBAAA,GAAA,KAAA,CAAA;AAAA,SAAA;;AALrC,UAAA,OAAA,EAAAC,OAAA,CAOM,MAWM;AAAA,YAVE,IADR,CAAA,IAAA,IAAAJ,SAAA,EAAA,EAAAC,kBAAA;AAAA,cAWM,KAAA;AAAA,cAAA;AAAA,gBAlBZ,GAAA,EAAA,CAAA;AAAA,gBASQ,GAAI,EAAA,iBAAA;AAAA,gBACJ,KAAA,EAVRI,cAUc,CAAA,CAAA,kBAAA,EAGE,IAAY,CAAA,YAAA,CAAA,CAAA;AAAA,gBAFpB,WAAU,EAAA,eAAA;AAAA,gBACV,IAAK,EAAA,QAAA;AAAA,gBAEL,YAAW,EAAA,oBAAA;AAAA,eAAA;;gBAGXC,UAAQ,CAAA,IAAA,CAAA,MAAA,EAAA,SAAA,EAAA,EAAA,EAAA,KAAA,CAAA,EAAA,IAAA,CAAA;AAAA,eAAA;;;AAjBhB,aAAA,IAAAC,kBAAA,CAAA,MAAA,EAAA,IAAA,CAAA;AAAA,WAAA,CAAA;AAAA,UAAA,CAAA,EAAA,CAAA;AAAA;AAAA,SAAA;;;;AAoBI,OAAAP,SAAA,EAAA,EAAAE,WAAA,CASYC,wBATI,IAAgB,CAAA,gBAAA,CAAA,EAAA,IAAA,EAAA;AAAA,QApBpC,iBAqBM,MAOE;AAAA,UANM,IADR,CAAA,IAAA,IAAAH,SAAA,EAAA,EAAAC,kBAAA;AAAA,YAOE,KAAA;AAAA,YAAA;AAAA,cA5BR,GAAA,EAAA,CAAA;AAAA,cAuBQ,KAAA,EAvBRI,cAuBc,CAAA,CAAA,kBAAA,EACE,IAAY,CAAA,YAAA,CAAA,CAAA;AAAA,cACpB,WAAU,EAAA,eAAA;AAAA,cACT,SAAK,MAAE,CAAA,CAAA,CAAA,KAAA,MAAA,CAAA,CAAA,CAAA,GAAA,CAAA,GAAA,IAAA,KAAA,IAAA,CAAA,kBAAA,IAAA,IAAA,CAAA,kBAAA,CAAA,GAAA,IAAA,CAAA,CAAA;AAAA,cACP,WAAO,MAAE,CAAA,CAAA,CAAA,KAAA,MAAA,CAAA,CAAA,CAAA,GAAA,CAAA,GAAA,IAAA,KAAA,IAAA,CAAA,kBAAA,IAAA,IAAA,CAAA,kBAAA,CAAA,GAAA,IAAA,CAAA,CAAA;AAAA,aAAA;;;;AA3BlB,WAAA,IAAAE,kBAAA,CAAA,MAAA,EAAA,IAAA,CAAA;AAAA,SAAA,CAAA;AAAA,QAAA,CAAA,EAAA,CAAA;AAAA;AAAA,OAAA,CAAA;;;;;AACe,IAAA,CAAAC,KAAA,EAAA,IAAA,CAAA,iBAAA,IAAqB,IAAI,CAAA,IAAA,CAAA;AAAA,GAAA,CAAA,CAAA;;;;;;"}
1
+ {"version":3,"file":"base-modal.vue.js","sources":["../../../../src/components/modals/base-modal.vue"],"sourcesContent":["<template>\n <div v-show=\"isWaitingForLeave || open\" ref=\"modalRef\" class=\"x-modal\" data-test=\"modal\">\n <component\n :is=\"animation\"\n @before-leave=\"isWaitingForLeave = true\"\n @after-leave=\"isWaitingForLeave = false\"\n >\n <div\n v-if=\"open\"\n ref=\"modalContentRef\"\n class=\"x-modal__content\"\n data-test=\"modal-content\"\n role=\"dialog\"\n :class=\"contentClass\"\n aria-label=\"Base modal content\"\n >\n <!-- @slot (Required) Modal container content -->\n <slot />\n </div>\n </component>\n <component :is=\"overlayAnimation\">\n <div\n v-if=\"open\"\n class=\"x-modal__overlay\"\n :class=\"overlayClass\"\n data-test=\"modal-overlay\"\n @click=\"emitOverlayClicked\"\n @keydown=\"emitOverlayClicked\"\n />\n </component>\n </div>\n</template>\n\n<script lang=\"ts\">\nimport { defineComponent, nextTick, onBeforeUnmount, onMounted, ref, watch } from 'vue'\nimport { useDebounce } from '../../composables'\nimport { AnimationProp } from '../../types'\nimport { FOCUSABLE_SELECTORS, getTargetElement } from '../../utils'\nimport { Fade, NoAnimation } from '../animations'\n\n/**\n * Base component with no XPlugin dependencies that serves as a utility for constructing more\n * complex modals.\n *\n * @public\n */\nexport default defineComponent({\n name: 'BaseModal',\n props: {\n /** Determines if the modal is open or not. */\n open: {\n type: Boolean,\n required: true,\n },\n /**\n * Determines if the focused element changes to one inside the modal when it opens. Either the\n * first element with a positive tabindex or just the first focusable element.\n */\n focusOnOpen: {\n type: Boolean,\n default: true,\n },\n /**\n * The reference selector of a DOM element to use as reference to position the modal.\n * This selector can be an ID or a class, if it is a class, it will use the first\n * element that matches.\n */\n referenceSelector: String,\n /** Animation to use for opening/closing the modal.This animation only affects the content. */\n animation: {\n type: AnimationProp,\n default: () => NoAnimation,\n },\n /**\n * Animation to use for the overlay (backdrop) part of the modal. By default, it uses\n * a fade transition.\n */\n overlayAnimation: {\n type: AnimationProp,\n default: () => Fade,\n },\n /** Class inherited by content element. */\n contentClass: String,\n /** Class inherited by overlay element. */\n overlayClass: String,\n },\n emits: ['click:overlay', 'focusin:body'],\n setup(props, { emit }) {\n /** Reference to the modal element in the DOM. */\n const modalRef = ref<HTMLDivElement>()\n /** Reference to the modal content element in the DOM. */\n const modalContentRef = ref<HTMLDivElement>()\n\n /** The previous value of the body overflow style. */\n const previousBodyOverflow = ref('')\n /** The previous value of the HTML element overflow style. */\n const previousHTMLOverflow = ref('')\n /** Boolean to delay the leave animation until it has completed. */\n const isWaitingForLeave = ref(false)\n /** The reference element to use to find the modal's position. */\n let referenceElement: HTMLElement | undefined\n\n /** Disables the scroll of both the body and the window. */\n function disableScroll() {\n previousBodyOverflow.value = document.body.style.overflow\n previousHTMLOverflow.value = document.documentElement.style.overflow\n document.body.style.overflow = document.documentElement.style.overflow = 'hidden'\n }\n\n /** Restores the scroll of both the body and the window. */\n function enableScroll() {\n document.body.style.overflow = previousBodyOverflow.value\n document.documentElement.style.overflow = previousHTMLOverflow.value\n }\n\n /**\n * Emits the `click:overlay` event if the click has been triggered in the overlay layer.\n *\n * @param event - The click event.\n */\n function emitOverlayClicked(event: Event) {\n // eslint-disable-next-line vue/custom-event-name-casing\n emit('click:overlay', event)\n }\n\n /**\n * Emits the `focusin:body` event if a focus event has been triggered outside the modal.\n *\n * @param event - The focusin event.\n */\n function emitFocusInBody(event: FocusEvent) {\n if (!modalContentRef.value?.contains(getTargetElement(event))) {\n // eslint-disable-next-line vue/custom-event-name-casing\n emit('focusin:body', event)\n }\n }\n\n /**\n * Adds listeners to the body element ot detect if the modal should be closed.\n *\n * @remarks TODO find a better solution and remove the timeout\n * To avoid emit the focusin on opening X that provokes closing it immediately.\n * This is because this event was emitted after the open of main modal when the user clicks\n * on the customer website search box (focus event). This way we avoid add the listener before\n * the open and the avoid the event that provokes the close.\n */\n function addBodyListeners() {\n setTimeout(() => {\n document.body.addEventListener('focusin', emitFocusInBody)\n })\n }\n\n /** Removes the body listeners. */\n function removeBodyListeners() {\n document.body.removeEventListener('focusin', emitFocusInBody)\n }\n\n /**\n * Sets the focused element to the first element either the first element with a positive\n * tabindex or, if there isn't any, the first focusable element inside the modal.\n */\n function setFocus() {\n const candidates: HTMLElement[] = Array.from(\n modalContentRef.value?.querySelectorAll(FOCUSABLE_SELECTORS) ?? [],\n )\n const element = candidates.find(element => element.tabIndex) ?? candidates[0]\n element?.focus()\n }\n\n /**\n * Syncs the body to the open state of the modal, adding or removing styles and listeners.\n *\n * @remarks nextTick() to wait for `modalContentRef` to be updated to look for focusable\n * candidates inside.\n *\n * @param isOpen - True when the modal is opened.\n */\n async function syncBody(isOpen: boolean) {\n if (isOpen) {\n disableScroll()\n addBodyListeners()\n if (props.focusOnOpen) {\n await nextTick()\n setFocus()\n }\n } else {\n enableScroll()\n removeBodyListeners()\n }\n }\n\n /**\n * Updates the position of the modal setting the top of the element depending\n * on the selector. The modal will be placed under this selector.\n */\n const debouncedUpdatePosition = useDebounce(\n () => {\n const { height, y } = referenceElement?.getBoundingClientRect() ?? { height: 0, y: 0 }\n modalRef.value!.style.top = `${height + y}px`\n modalRef.value!.style.bottom = '0'\n modalRef.value!.style.height = 'auto'\n },\n 100,\n { leading: true },\n )\n\n let resizeObserver: ResizeObserver\n\n onMounted(() => {\n watch(() => props.open, syncBody)\n if (props.open) {\n syncBody(true)\n }\n\n resizeObserver = new ResizeObserver(debouncedUpdatePosition)\n\n watch(\n () => props.referenceSelector,\n () => {\n resizeObserver.disconnect()\n\n if (props.referenceSelector) {\n const element = document.querySelector(props.referenceSelector) as HTMLElement\n if (element) {\n referenceElement = element\n resizeObserver.observe(element)\n }\n } else {\n referenceElement = undefined\n debouncedUpdatePosition()\n }\n },\n { immediate: true },\n )\n })\n\n onBeforeUnmount(() => {\n if (props.open) {\n removeBodyListeners()\n enableScroll()\n }\n resizeObserver.disconnect()\n })\n\n return {\n emitOverlayClicked,\n isWaitingForLeave,\n modalContentRef,\n modalRef,\n }\n },\n})\n</script>\n\n<style lang=\"css\" scoped>\n.x-modal {\n position: fixed;\n top: 0;\n left: 0;\n display: flex;\n align-items: flex-start;\n justify-content: flex-start;\n width: 100%;\n height: 100%;\n z-index: 1;\n}\n\n.x-modal__content {\n display: flex;\n flex-flow: column nowrap;\n z-index: 1;\n}\n\n.x-modal__overlay {\n width: 100%;\n height: 100%;\n position: absolute;\n background-color: rgb(0, 0, 0);\n opacity: 0.3;\n}\n</style>\n\n<docs lang=\"mdx\">\n## Examples\n\nThe `BaseModal` is a simple component that serves to create complex modals. Its open state has to be\npassed via prop. There is a prop, `referenceSelector`, used to place the modal under some element\ninstead of set the top of the element directly. It also accepts an animation to use for opening &\nclosing.\n\nIt emits a `click:overlay` event when any part out of the content is clicked, but only if the modal\nis open.\n\n```vue\n<template>\n <div>\n <button @click=\"open = true\">Open modal</button>\n <BaseModal\n :animation=\"fadeAndSlide\"\n :open=\"open\"\n @click:overlay=\"open = false\"\n referenceSelector=\".header\"\n >\n <h1>Hello</h1>\n <p>The modal is working</p>\n <button @click=\"open = false\">Close modal</button>\n </BaseModal>\n </div>\n</template>\n\n<script>\nimport { BaseModal, FadeAndSlide } from '@empathyco/x-components'\nimport Vue from 'vue'\n\nVue.component('fadeAndSlide', FadeAndSlide)\n\nexport default {\n components: {\n BaseModal,\n },\n data() {\n return {\n open: false,\n }\n },\n}\n</script>\n```\n\n### Customized usage\n\n#### Customizing the content with classes\n\nThe `contentClass` prop can be used to add classes to the modal content.\n\n```vue\n<template>\n <div>\n <button @click=\"open = true\">Open modal</button>\n <BaseModal\n :animation=\"fadeAndSlide\"\n :open=\"open\"\n @click:overlay=\"open = false\"\n referenceSelector=\".header\"\n contentClass=\"x-bg-neutral-75\"\n >\n <h1>Hello</h1>\n <p>The modal is working</p>\n <button @click=\"open = false\">Close modal</button>\n </BaseModal>\n </div>\n</template>\n\n<script>\nimport { BaseModal, FadeAndSlide } from '@empathyco/x-components'\nimport Vue from 'vue'\n\nVue.component('fadeAndSlide', FadeAndSlide)\n\nexport default {\n components: {\n BaseModal,\n },\n data() {\n return {\n open: false,\n }\n },\n}\n</script>\n```\n\n#### Customizing the overlay with classes\n\nThe `overlayClass` prop can be used to add classes to the modal overlay.\n\n```vue\n<template>\n <div>\n <button @click=\"open = true\">Open modal</button>\n <BaseModal\n :animation=\"fadeAndSlide\"\n :open=\"open\"\n @click:overlay=\"open = false\"\n referenceSelector=\".header\"\n overlayClass=\"x-bg-neutral-75\"\n >\n <h1>Hello</h1>\n <p>The modal is working</p>\n <button @click=\"open = false\">Close modal</button>\n </BaseModal>\n </div>\n</template>\n\n<script>\nimport { BaseModal, FadeAndSlide } from '@empathyco/x-components'\nimport Vue from 'vue'\n\nVue.component('fadeAndSlide', FadeAndSlide)\n\nexport default {\n components: {\n BaseModal,\n },\n data() {\n return {\n open: false,\n }\n },\n}\n</script>\n```\n\n## Vue Events\n\nA list of events that the component will emit:\n\n- `click:overlay`: the event is emitted after the user clicks any part out of the content but only\n if the modal is open. The event payload is the mouse event that triggers it.\n- `focusin:body`: the event is emitted after the user focus in any part out of the content but only\n if the modal is open. The event payload is the focus event that triggers it.\n</docs>\n"],"names":["_withDirectives","_openBlock","_createElementBlock","_createBlock","_resolveDynamicComponent","_normalizeClass","_renderSlot","_withCtx","_vShow"],"mappings":";;;;;;EAC0C,GAAI,EAAA,UAAA;AAAA,EAAW,KAAM,EAAA,SAAA;AAAA,EAAU,WAAU,EAAA,OAAA;;;AAAjF,EAAA,OAAAA,cAAA,EAAAC,SAAA,EAAA,EAAAC,kBAAA;AAAA,IA6BM,KAAA;AAAA,IA7BN,UAAA;AAAA,IA6BM;AAAA,OA5BJD,SAAA,EAAA,EAAAE,WAAA;AAAA,QAiBYC,wBAhBL,IAAS,CAAA,SAAA,CAAA;AAAA,QAAA;AAAA,UACb,aAAA,EAAY,sCAAE,IAAiB,CAAA,iBAAA,GAAA,IAAA,CAAA;AAAA,UAC/B,YAAA,EAAW,sCAAE,IAAiB,CAAA,iBAAA,GAAA,KAAA,CAAA;AAAA,SAAA;;2BAE/B,MAWM;AAAA,YAVE,IADR,CAAA,IAAA,IAAAH,SAAA,EAAA,EAAAC,kBAAA;AAAA,cAWM,KAAA;AAAA,cAAA;AAAA,gBAAA,GAAA,EAAA,CAAA;gBATJ,GAAI,EAAA,iBAAA;AAAA,gBACJ,KAAA,EAAKG,cAAC,CAAA,CAAA,kBAAA,EAGE,IAAY,CAAA,YAAA,CAAA,CAAA;AAAA,gBAFpB,WAAU,EAAA,eAAA;AAAA,gBACV,IAAK,EAAA,QAAA;AAAA,gBAEL,YAAW,EAAA,oBAAA;AAAA,eAAA;;gBAGXC,UAAQ,CAAA,IAAA,CAAA,MAAA,EAAA,SAAA,EAAA,EAAA,EAAA,KAAA,CAAA,EAAA,IAAA,CAAA;AAAA,eAAA;;;;;;;;;;;AAGZ,OAAAL,SAAA,EAAA,EAAAE,WAAA,CASYC,wBATI,IAAgB,CAAA,gBAAA,CAAA,EAAA,IAAA,EAAA;AAAA,QAAA,OAAA,EAAAG,OAAA,CAC9B,MAOE;AAAA,UANM,IADR,CAAA,IAAA,IAAAN,SAAA,EAAA,EAAAC,kBAAA;AAAA,YAOE,KAAA;AAAA,YAAA;AAAA,cAAA,GAAA,EAAA,CAAA;cALA,KAAK,EAAAG,cAAA,CAAA,CAAC,oBACE,IAAY,CAAA,YAAA,CAAA,CAAA;AAAA,cACpB,WAAU,EAAA,eAAA;AAAA,cACT,SAAK,MAAE,CAAA,CAAA,CAAA,KAAA,MAAA,CAAA,CAAA,CAAA,GAAA,CAAA,GAAA,IAAA,KAAA,IAAA,CAAA,kBAAA,IAAA,IAAA,CAAA,kBAAA,CAAA,GAAA,IAAA,CAAA,CAAA;AAAA,cACP,WAAO,MAAE,CAAA,CAAA,CAAA,KAAA,MAAA,CAAA,CAAA,CAAA,GAAA,CAAA,GAAA,IAAA,KAAA,IAAA,CAAA,kBAAA,IAAA,IAAA,CAAA,kBAAA,CAAA,GAAA,IAAA,CAAA,CAAA;AAAA,aAAA;;;;;;;;;;;;;AA1BH,IAAA,CAAAG,KAAA,EAAA,IAAA,CAAA,iBAAA,IAAqB,IAAI,CAAA,IAAA,CAAA;AAAA,GAAA,CAAA,CAAA;;;;;;"}
@@ -1 +1 @@
1
- {"version":3,"file":"close-main-modal.vue.js","sources":["../../../../src/components/modals/close-main-modal.vue"],"sourcesContent":["<template>\n <BaseEventsModalClose\n class=\"x-close-main-modal\"\n data-test=\"close-main-modal\"\n :closing-event=\"closingEvent\"\n >\n <slot />\n </BaseEventsModalClose>\n</template>\n\n<script lang=\"ts\">\nimport type { XEvent } from '../../wiring/events.types'\nimport { defineComponent } from 'vue'\nimport BaseEventsModalClose from './base-events-modal-close.vue'\n\n/**\n * Button to close the {@link MainModal}.\n *\n * @public\n */\nexport default defineComponent({\n components: {\n BaseEventsModalClose,\n },\n setup() {\n /**\n * Event to be emitted to close the {@link MainModal}.\n *\n * @internal\n */\n const closingEvent: XEvent = 'UserClickedCloseX'\n\n return {\n closingEvent,\n }\n },\n})\n</script>\n\n<docs lang=\"mdx\">\n## Events\n\nThis component emits the following events:\n\n- [`UserClickedCloseX`](https://github.com/empathyco/x/blob/main/packages/x-components/src/wiring/events.types.ts)\n\n## See it in action\n\nHere you have a basic example of how the close main modal button works.\n\n```vue live\n<template>\n <div>\n <OpenMainModal>Open X</OpenMainModal>\n <MainModal>\n <CloseMainModal>Close X</CloseMainModal>\n </MainModal>\n </div>\n</template>\n\n<script>\nimport { MainModal, CloseMainModal, OpenMainModal } from '@empathyco/x-components'\n\nexport default {\n name: 'XModalDemo',\n components: {\n MainModal,\n CloseMainModal,\n OpenMainModal,\n },\n}\n</script>\n```\n</docs>\n"],"names":["_createBlock","_withCtx","_renderSlot"],"mappings":";;;;;;sBACEA,WAMuB,CAAA,+BAAA,EAAA;AAAA,IALrB,KAAM,EAAA,oBAAA;AAAA,IACN,WAAU,EAAA,kBAAA;AAAA,IACT,eAAe,EAAA,IAAA,CAAA,YAAA;AAAA,GAAA,EAAA;AAJpB,IAAA,OAAA,EAAAC,OAAA,CAMI,MAAQ;AAAA,MAARC,UAAQ,CAAA,IAAA,CAAA,MAAA,EAAA,SAAA,CAAA;AAAA,KAAA,CAAA;AANZ,IAAA,CAAA,EAAA,CAAA;AAAA;AAAA,GAAA,EAAA,CAAA,EAAA,CAAA,eAAA,CAAA,CAAA,CAAA;;;;;;"}
1
+ {"version":3,"file":"close-main-modal.vue.js","sources":["../../../../src/components/modals/close-main-modal.vue"],"sourcesContent":["<template>\n <BaseEventsModalClose\n class=\"x-close-main-modal\"\n data-test=\"close-main-modal\"\n :closing-event=\"closingEvent\"\n >\n <slot />\n </BaseEventsModalClose>\n</template>\n\n<script lang=\"ts\">\nimport type { XEvent } from '../../wiring/events.types'\nimport { defineComponent } from 'vue'\nimport BaseEventsModalClose from './base-events-modal-close.vue'\n\n/**\n * Button to close the {@link MainModal}.\n *\n * @public\n */\nexport default defineComponent({\n components: {\n BaseEventsModalClose,\n },\n setup() {\n /**\n * Event to be emitted to close the {@link MainModal}.\n *\n * @internal\n */\n const closingEvent: XEvent = 'UserClickedCloseX'\n\n return {\n closingEvent,\n }\n },\n})\n</script>\n\n<docs lang=\"mdx\">\n## Events\n\nThis component emits the following events:\n\n- [`UserClickedCloseX`](https://github.com/empathyco/x/blob/main/packages/x-components/src/wiring/events.types.ts)\n\n## See it in action\n\nHere you have a basic example of how the close main modal button works.\n\n```vue live\n<template>\n <div>\n <OpenMainModal>Open X</OpenMainModal>\n <MainModal>\n <CloseMainModal>Close X</CloseMainModal>\n </MainModal>\n </div>\n</template>\n\n<script>\nimport { MainModal, CloseMainModal, OpenMainModal } from '@empathyco/x-components'\n\nexport default {\n name: 'XModalDemo',\n components: {\n MainModal,\n CloseMainModal,\n OpenMainModal,\n },\n}\n</script>\n```\n</docs>\n"],"names":["_createBlock","_renderSlot"],"mappings":";;;;;;sBACEA,WAMuB,CAAA,+BAAA,EAAA;AAAA,IALrB,KAAM,EAAA,oBAAA;AAAA,IACN,WAAU,EAAA,kBAAA;AAAA,IACT,eAAe,EAAA,IAAA,CAAA,YAAA;AAAA,GAAA,EAAA;qBAEhB,MAAQ;AAAA,MAARC,UAAQ,CAAA,IAAA,CAAA,MAAA,EAAA,SAAA,CAAA;AAAA,KAAA,CAAA;;;;;;;;;"}
@@ -1 +1 @@
1
- {"version":3,"file":"main-modal.vue.js","sources":["../../../../src/components/modals/main-modal.vue"],"sourcesContent":["<template>\n <BaseEventsModal\n class=\"x-main-modal\"\n data-test=\"main-modal\"\n :events-to-open-modal=\"openEvents\"\n :events-to-close-modal=\"closeEvents\"\n :body-click-event=\"outOfModalClickEvent\"\n :animation=\"animation\"\n :focus-on-open=\"focusOnOpen\"\n >\n <slot />\n </BaseEventsModal>\n</template>\n\n<script lang=\"ts\">\nimport type { PropType } from 'vue'\nimport type { XEvent } from '../../wiring/events.types'\nimport { defineComponent } from 'vue'\nimport { AnimationProp } from '../../types/animation-prop'\nimport BaseEventsModal from './base-events-modal.vue'\n\n/**\n * A specialised version of a modal component, made to contain a full search application.\n *\n * @public\n */\nexport default defineComponent({\n components: {\n BaseEventsModal,\n },\n props: {\n /**\n * Animation to use for opening/closing the modal.\n *\n * @public\n */\n animation: {\n type: AnimationProp,\n },\n /**\n * Events to listen for closing the main modal.\n */\n closeEvents: {\n type: Array as PropType<XEvent[]>,\n default: () => ['UserClickedCloseX', 'UserClickedOutOfMainModal'],\n },\n /**\n * Determines if the focused element changes to one inside the modal when it opens. Either the\n * first element with a positive tabindex or just the first focusable element.\n */\n focusOnOpen: {\n type: Boolean,\n default: false,\n },\n /**\n * Events to listen for opening the main modal.\n */\n openEvents: {\n type: Array as PropType<XEvent[]>,\n default: () => ['UserClickedOpenX', 'UserOpenXProgrammatically'],\n },\n /**\n * Event to be emitted by the modal when clicked out of its content.\n */\n outOfModalClickEvent: {\n type: (String as PropType<XEvent>) || null,\n default: 'UserClickedOutOfMainModal',\n },\n },\n})\n</script>\n\n<docs lang=\"mdx\">\n## Events\n\nThis component emits the following events:\n\n- [`UserClickedOutOfMainModal`](https://github.com/empathyco/x/blob/main/packages/x-components/src/wiring/events.types.ts)\n\n## See it in action\n\nHere you have a basic example of how the main modal works.\n\n```vue live\n<template>\n <div>\n <OpenMainModal>Open X</OpenMainModal>\n <MainModal>\n <CloseMainModal>Close X</CloseMainModal>\n </MainModal>\n </div>\n</template>\n\n<script>\nimport { MainModal, CloseMainModal, OpenMainModal } from '@empathyco/x-components'\n\nexport default {\n name: 'MainModalDemo',\n components: {\n MainModal,\n CloseMainModal,\n OpenMainModal,\n },\n}\n</script>\n```\n\n### Customizing the content with classes\n\nThe `contentClass` prop can be used to add classes to the modal content.\n\n```vue live\n<template>\n <div>\n <OpenMainModal>Open X</OpenMainModal>\n <MainModal contentClass=\"x-bg-neutral-75\">\n <CloseMainModal>Close X</CloseMainModal>\n </MainModal>\n </div>\n</template>\n\n<script>\nimport { MainModal, CloseMainModal, OpenMainModal } from '@empathyco/x-components'\n\nexport default {\n name: 'MainModalDemo',\n components: {\n MainModal,\n CloseMainModal,\n OpenMainModal,\n },\n}\n</script>\n```\n\n### Customizing the modal events\n\nThe modal events can be customized by changing its props values:\n\n- To add or subtract events to open or close the modal,\n- To modify or remove the default\n [`UserClickedOutOfMainModal`](https://github.com/empathyco/x/blob/main/packages/x-components/src/wiring/events.types.ts)\n that the modal emits.\n\nIn this example, we are changing the `openEvents` prop to add another event, and removing the event\nthat the modal would emit when the user clicks out of the modal.\n\n```vue live\n<template>\n <div>\n <OpenMainModal>Open X</OpenMainModal>\n <MainModal\n :openEvents=\"['UserClickedOpenX', 'UserOpenXProgrammatically', 'MyCustomXEvent']\"\n :outOfModalClickEvent=\"null\"\n >\n <CloseMainModal>Close X</CloseMainModal>\n </MainModal>\n </div>\n</template>\n\n<script>\nimport { MainModal, CloseMainModal, OpenMainModal } from '@empathyco/x-components'\n\nexport default {\n name: 'MainModalDemo',\n components: {\n MainModal,\n CloseMainModal,\n OpenMainModal,\n },\n}\n</script>\n```\n</docs>\n"],"names":["_createBlock","_withCtx","_renderSlot"],"mappings":";;;;;;sBACEA,WAUkB,CAAA,0BAAA,EAAA;AAAA,IAThB,KAAM,EAAA,cAAA;AAAA,IACN,WAAU,EAAA,YAAA;AAAA,IACT,sBAAsB,EAAA,IAAA,CAAA,UAAA;AAAA,IACtB,uBAAuB,EAAA,IAAA,CAAA,WAAA;AAAA,IACvB,kBAAkB,EAAA,IAAA,CAAA,oBAAA;AAAA,IAClB,SAAW,EAAA,IAAA,CAAA,SAAA;AAAA,IACX,eAAe,EAAA,IAAA,CAAA,WAAA;AAAA,GAAA,EAAA;AARpB,IAAA,OAAA,EAAAC,OAAA,CAUI,MAAQ;AAAA,MAARC,UAAQ,CAAA,IAAA,CAAA,MAAA,EAAA,SAAA,CAAA;AAAA,KAAA,CAAA;AAVZ,IAAA,CAAA,EAAA,CAAA;AAAA;AAAA,GAAA,EAAA,CAAA,EAAA,CAAA,sBAAA,EAAA,uBAAA,EAAA,kBAAA,EAAA,WAAA,EAAA,eAAA,CAAA,CAAA,CAAA;;;;;;"}
1
+ {"version":3,"file":"main-modal.vue.js","sources":["../../../../src/components/modals/main-modal.vue"],"sourcesContent":["<template>\n <BaseEventsModal\n class=\"x-main-modal\"\n data-test=\"main-modal\"\n :events-to-open-modal=\"openEvents\"\n :events-to-close-modal=\"closeEvents\"\n :body-click-event=\"outOfModalClickEvent\"\n :animation=\"animation\"\n :focus-on-open=\"focusOnOpen\"\n >\n <slot />\n </BaseEventsModal>\n</template>\n\n<script lang=\"ts\">\nimport type { PropType } from 'vue'\nimport type { XEvent } from '../../wiring/events.types'\nimport { defineComponent } from 'vue'\nimport { AnimationProp } from '../../types/animation-prop'\nimport BaseEventsModal from './base-events-modal.vue'\n\n/**\n * A specialised version of a modal component, made to contain a full search application.\n *\n * @public\n */\nexport default defineComponent({\n components: {\n BaseEventsModal,\n },\n props: {\n /**\n * Animation to use for opening/closing the modal.\n *\n * @public\n */\n animation: {\n type: AnimationProp,\n },\n /**\n * Events to listen for closing the main modal.\n */\n closeEvents: {\n type: Array as PropType<XEvent[]>,\n default: () => ['UserClickedCloseX', 'UserClickedOutOfMainModal'],\n },\n /**\n * Determines if the focused element changes to one inside the modal when it opens. Either the\n * first element with a positive tabindex or just the first focusable element.\n */\n focusOnOpen: {\n type: Boolean,\n default: false,\n },\n /**\n * Events to listen for opening the main modal.\n */\n openEvents: {\n type: Array as PropType<XEvent[]>,\n default: () => ['UserClickedOpenX', 'UserOpenXProgrammatically'],\n },\n /**\n * Event to be emitted by the modal when clicked out of its content.\n */\n outOfModalClickEvent: {\n type: (String as PropType<XEvent>) || null,\n default: 'UserClickedOutOfMainModal',\n },\n },\n})\n</script>\n\n<docs lang=\"mdx\">\n## Events\n\nThis component emits the following events:\n\n- [`UserClickedOutOfMainModal`](https://github.com/empathyco/x/blob/main/packages/x-components/src/wiring/events.types.ts)\n\n## See it in action\n\nHere you have a basic example of how the main modal works.\n\n```vue live\n<template>\n <div>\n <OpenMainModal>Open X</OpenMainModal>\n <MainModal>\n <CloseMainModal>Close X</CloseMainModal>\n </MainModal>\n </div>\n</template>\n\n<script>\nimport { MainModal, CloseMainModal, OpenMainModal } from '@empathyco/x-components'\n\nexport default {\n name: 'MainModalDemo',\n components: {\n MainModal,\n CloseMainModal,\n OpenMainModal,\n },\n}\n</script>\n```\n\n### Customizing the content with classes\n\nThe `contentClass` prop can be used to add classes to the modal content.\n\n```vue live\n<template>\n <div>\n <OpenMainModal>Open X</OpenMainModal>\n <MainModal contentClass=\"x-bg-neutral-75\">\n <CloseMainModal>Close X</CloseMainModal>\n </MainModal>\n </div>\n</template>\n\n<script>\nimport { MainModal, CloseMainModal, OpenMainModal } from '@empathyco/x-components'\n\nexport default {\n name: 'MainModalDemo',\n components: {\n MainModal,\n CloseMainModal,\n OpenMainModal,\n },\n}\n</script>\n```\n\n### Customizing the modal events\n\nThe modal events can be customized by changing its props values:\n\n- To add or subtract events to open or close the modal,\n- To modify or remove the default\n [`UserClickedOutOfMainModal`](https://github.com/empathyco/x/blob/main/packages/x-components/src/wiring/events.types.ts)\n that the modal emits.\n\nIn this example, we are changing the `openEvents` prop to add another event, and removing the event\nthat the modal would emit when the user clicks out of the modal.\n\n```vue live\n<template>\n <div>\n <OpenMainModal>Open X</OpenMainModal>\n <MainModal\n :openEvents=\"['UserClickedOpenX', 'UserOpenXProgrammatically', 'MyCustomXEvent']\"\n :outOfModalClickEvent=\"null\"\n >\n <CloseMainModal>Close X</CloseMainModal>\n </MainModal>\n </div>\n</template>\n\n<script>\nimport { MainModal, CloseMainModal, OpenMainModal } from '@empathyco/x-components'\n\nexport default {\n name: 'MainModalDemo',\n components: {\n MainModal,\n CloseMainModal,\n OpenMainModal,\n },\n}\n</script>\n```\n</docs>\n"],"names":["_createBlock","_renderSlot"],"mappings":";;;;;;sBACEA,WAUkB,CAAA,0BAAA,EAAA;AAAA,IAThB,KAAM,EAAA,cAAA;AAAA,IACN,WAAU,EAAA,YAAA;AAAA,IACT,sBAAsB,EAAA,IAAA,CAAA,UAAA;AAAA,IACtB,uBAAuB,EAAA,IAAA,CAAA,WAAA;AAAA,IACvB,kBAAkB,EAAA,IAAA,CAAA,oBAAA;AAAA,IAClB,SAAW,EAAA,IAAA,CAAA,SAAA;AAAA,IACX,eAAe,EAAA,IAAA,CAAA,WAAA;AAAA,GAAA,EAAA;qBAEhB,MAAQ;AAAA,MAARC,UAAQ,CAAA,IAAA,CAAA,MAAA,EAAA,SAAA,CAAA;AAAA,KAAA,CAAA;;;;;;;;;"}
@@ -1 +1 @@
1
- {"version":3,"file":"open-main-modal.vue.js","sources":["../../../../src/components/modals/open-main-modal.vue"],"sourcesContent":["<template>\n <BaseEventsModalOpen\n class=\"x-open-main-modal\"\n data-test=\"open-main-modal\"\n :opening-event=\"openingEvent\"\n >\n <slot />\n </BaseEventsModalOpen>\n</template>\n\n<script lang=\"ts\">\nimport type { XEvent } from '../../wiring/events.types'\nimport { defineComponent } from 'vue'\nimport BaseEventsModalOpen from './base-events-modal-open.vue'\n\n/**\n * Button to open the {@link MainModal}.\n *\n * @public\n */\nexport default defineComponent({\n components: {\n BaseEventsModalOpen,\n },\n setup() {\n /**\n * Event to be emitted to open the {@link MainModal}.\n *\n * @internal\n */\n const openingEvent: XEvent = 'UserClickedOpenX'\n\n return {\n openingEvent,\n }\n },\n})\n</script>\n\n<docs lang=\"mdx\">\n## Events\n\nThis component emits the following events:\n\n- [`UserClickedOpenX`](https://github.com/empathyco/x/blob/main/packages/x-components/src/wiring/events.types.ts)\n\n## See it in action\n\nHere you have a basic example of how the open main modal button works.\n\n```vue live\n<template>\n <div>\n <OpenMainModal>Open X</OpenMainModal>\n <MainModal>\n <CloseMainModal>Close X</CloseMainModal>\n </MainModal>\n </div>\n</template>\n\n<script>\nimport { MainModal, CloseMainModal, OpenMainModal } from '@empathyco/x-components'\n\nexport default {\n name: 'XModalDemo',\n components: {\n MainModal,\n CloseMainModal,\n OpenMainModal,\n },\n}\n</script>\n```\n</docs>\n"],"names":["_createBlock","_withCtx","_renderSlot"],"mappings":";;;;;;sBACEA,WAMsB,CAAA,8BAAA,EAAA;AAAA,IALpB,KAAM,EAAA,mBAAA;AAAA,IACN,WAAU,EAAA,iBAAA;AAAA,IACT,eAAe,EAAA,IAAA,CAAA,YAAA;AAAA,GAAA,EAAA;AAJpB,IAAA,OAAA,EAAAC,OAAA,CAMI,MAAQ;AAAA,MAARC,UAAQ,CAAA,IAAA,CAAA,MAAA,EAAA,SAAA,CAAA;AAAA,KAAA,CAAA;AANZ,IAAA,CAAA,EAAA,CAAA;AAAA;AAAA,GAAA,EAAA,CAAA,EAAA,CAAA,eAAA,CAAA,CAAA,CAAA;;;;;;"}
1
+ {"version":3,"file":"open-main-modal.vue.js","sources":["../../../../src/components/modals/open-main-modal.vue"],"sourcesContent":["<template>\n <BaseEventsModalOpen\n class=\"x-open-main-modal\"\n data-test=\"open-main-modal\"\n :opening-event=\"openingEvent\"\n >\n <slot />\n </BaseEventsModalOpen>\n</template>\n\n<script lang=\"ts\">\nimport type { XEvent } from '../../wiring/events.types'\nimport { defineComponent } from 'vue'\nimport BaseEventsModalOpen from './base-events-modal-open.vue'\n\n/**\n * Button to open the {@link MainModal}.\n *\n * @public\n */\nexport default defineComponent({\n components: {\n BaseEventsModalOpen,\n },\n setup() {\n /**\n * Event to be emitted to open the {@link MainModal}.\n *\n * @internal\n */\n const openingEvent: XEvent = 'UserClickedOpenX'\n\n return {\n openingEvent,\n }\n },\n})\n</script>\n\n<docs lang=\"mdx\">\n## Events\n\nThis component emits the following events:\n\n- [`UserClickedOpenX`](https://github.com/empathyco/x/blob/main/packages/x-components/src/wiring/events.types.ts)\n\n## See it in action\n\nHere you have a basic example of how the open main modal button works.\n\n```vue live\n<template>\n <div>\n <OpenMainModal>Open X</OpenMainModal>\n <MainModal>\n <CloseMainModal>Close X</CloseMainModal>\n </MainModal>\n </div>\n</template>\n\n<script>\nimport { MainModal, CloseMainModal, OpenMainModal } from '@empathyco/x-components'\n\nexport default {\n name: 'XModalDemo',\n components: {\n MainModal,\n CloseMainModal,\n OpenMainModal,\n },\n}\n</script>\n```\n</docs>\n"],"names":["_createBlock","_renderSlot"],"mappings":";;;;;;sBACEA,WAMsB,CAAA,8BAAA,EAAA;AAAA,IALpB,KAAM,EAAA,mBAAA;AAAA,IACN,WAAU,EAAA,iBAAA;AAAA,IACT,eAAe,EAAA,IAAA,CAAA,YAAA;AAAA,GAAA,EAAA;qBAEhB,MAAQ;AAAA,MAARC,UAAQ,CAAA,IAAA,CAAA,MAAA,EAAA,SAAA,CAAA;AAAA,KAAA,CAAA;;;;;;;;;"}
@@ -35,7 +35,11 @@ function _sfc_render(_ctx, _cache, $props, $setup, $data, $options) {
35
35
  }, {
36
36
  default: withCtx(() => [
37
37
  renderSlot(_ctx.$slots, "buttonContent", {}, () => [
38
- createTextVNode("Load")
38
+ _cache[0] || (_cache[0] = createTextVNode(
39
+ "Load",
40
+ -1
41
+ /* CACHED */
42
+ ))
39
43
  ], true)
40
44
  ]),
41
45
  _: 3
@@ -1 +1 @@
1
- {"version":3,"file":"page-loader-button.vue.js","sources":["../../../src/components/page-loader-button.vue"],"sourcesContent":["<template>\n <div class=\"x-page-loader\" data-test=\"page-loader\">\n <!--\n @slot default\n @binding {number} resultsLength - The search result's length\n @binding {number} totalResults - The totalResults of a searched query\n -->\n <slot v-bind=\"{ resultsLength, totalResults }\">\n <!-- @slot Rendered count with a text and the number of results displayed & remaining. -->\n <slot name=\"textContent\" :results-length=\"resultsLength\" :total-results=\"totalResults\">\n <p class=\"x-page-loader__text-content\" data-test=\"text-content\">\n You are seeing {{ resultsLength }} of {{ totalResults }} results\n </p>\n </slot>\n <BaseEventButton\n class=\"x-button\"\n :class=\"buttonClasses\"\n :events=\"events\"\n data-test=\"load-content\"\n aria-label=\"Load\"\n >\n <!-- @slot Button content with a text, an icon or both -->\n <slot name=\"buttonContent\">Load</slot>\n </BaseEventButton>\n </slot>\n </div>\n</template>\n\n<script lang=\"ts\">\nimport type { PropType } from 'vue'\nimport type { VueCSSClasses } from '../utils/types'\nimport type { XEventsTypes } from '../wiring'\nimport { computed, defineComponent } from 'vue'\nimport { use$x } from '../composables'\nimport BaseEventButton from './base-event-button.vue'\n\n/**\n * Component that renders a text with the number of rendered results and\n * the remaining ones and a `<BaseEventButton>` with the logic of emitting\n * the event \"UserReachedResultsListEnd\" to load more results on click.\n *\n * @public\n */\nexport default defineComponent({\n name: 'PageLoaderButton',\n components: { BaseEventButton },\n props: {\n /**\n * CSS classes to customize the loader button.\n *\n * @internal\n */\n buttonClasses: {\n type: String as PropType<VueCSSClasses>,\n default: '',\n },\n /**\n * Events to customize what will be emitted by the loader button.\n *\n * @internal\n */\n buttonEvents: {\n type: Object as PropType<Partial<XEventsTypes>>,\n },\n },\n setup(props) {\n const $x = use$x()\n const resultsLength = computed(() => $x.results.length)\n const totalResults = computed(() => $x.totalResults)\n\n /**\n * The events that will be emitted when clicking on the loader button.\n *\n * @returns The {@link XEvent} to emit.\n * @public\n */\n const events = computed<Partial<XEventsTypes>>(() => {\n return { UserReachedResultsListEnd: undefined, ...props.buttonEvents }\n })\n\n return {\n resultsLength,\n totalResults,\n events,\n }\n },\n})\n</script>\n\n<style scoped>\n.x-page-loader {\n display: flex;\n flex-direction: column;\n align-items: center;\n padding: 32px 0;\n}\n\n.x-page-loader__text-content {\n padding: 16px 0;\n}\n</style>\n\n<docs lang=\"mdx\">\n## Events\n\nThis component emits the \"UserReachedResultsListEnd\" event by default. This can be changed using the\nbuttonEvents prop:\n\n```vue live\n<template>\n <PageLoaderButton :buttonEvents=\"{ UserClickedCloseX: undefined }\" />\n</template>\n\n<script>\nimport { PageLoaderButton } from '@empathyco/x-components'\n\nexport default {\n name: 'PageLoaderButtonDemo',\n components: {\n PageLoaderButton,\n },\n}\n</script>\n```\n\n## See it in action\n\nHere you have a basic example of how the page loader component is rendered.\n\n```vue live\n<template>\n <PageLoaderButton />\n</template>\n\n<script>\nimport { PageLoaderButton } from '@empathyco/x-components'\n\nexport default {\n name: 'PageLoaderButtonDemo',\n components: {\n PageLoaderButton,\n },\n}\n</script>\n```\n\n### Customise the default layout\n\nThis component has a default slot which allows to customise the entire layout.\n\n```vue live\n<template>\n <PageLoaderButton>\n <template #default=\"{ resultsLength, totalResults }\">\n <div class=\"x-flex x-flex-col\">\n <div class=\"x-flex x-gap-4 x-text\">\n <span class=\"x-text-accent-50 x-font-bold\">{{ resultsLength }}</span>\n <span>of</span>\n <span class=\"x-text-accent-50\">{{ totalResults }}</span>\n </div>\n <button\n @click=\"$x.emit('UserReachedResultsListEnd', undefined)\"\n class=\"x-button x-button-ghost\"\n >\n Load more\n </button>\n </div>\n </template>\n </PageLoaderButton>\n</template>\n\n<script>\nimport { PageLoaderButton } from '@empathyco/x-components'\n\nexport default {\n name: 'PageLoaderButtonDemo',\n components: {\n PageLoaderButton,\n },\n}\n</script>\n```\n\n### Customise the slots\n\nThis component allows to customise both the textContent and the buttonContent slots. The\ntextContent's slot layout can be replaced entirely, while the buttonContent's slot enables wrapping\ncontent inside and customizing its style using the buttonClasses prop.\n\n```vue live\n<template>\n <PageLoaderButton :buttonClasses=\"buttonClasses\">\n <template #textContent=\"{ resultsLength, totalResults }\">\n <div class=\"x-flex x-gap-4 x-text\">\n <span class=\"x-text-accent-50 x-font-bold\">{{ resultsLength }}</span>\n <span>of</span>\n <span class=\"x-text-accent-50\">{{ totalResults }}</span>\n </div>\n </template>\n <template #buttonContent>Load more results</template>\n </PageLoaderButton>\n</template>\n\n<script>\nimport { PageLoaderButton } from '@empathyco/x-components'\n\nexport default {\n name: 'PageLoaderButtonDemo',\n components: {\n PageLoaderButton,\n },\n data() {\n return {\n buttonClasses: 'x-rounded-full',\n }\n },\n}\n</script>\n```\n</docs>\n"],"names":["_openBlock","_createElementBlock","_renderSlot","_normalizeProps","_guardReactiveProps","_createElementVNode","_toDisplayString","_createVNode","_normalizeClass","_withCtx","_createTextVNode"],"mappings":";;;;;;EACO,KAAM,EAAA,eAAA;AAAA,EAAgB,WAAU,EAAA,aAAA;;;EAS5B,KAAM,EAAA,6BAAA;AAAA,EAA8B,WAAU,EAAA,cAAA;;;;AATvD,EAAA,OAAAA,SAAA,EAAA,EAAAC,kBAAA,CAwBM,OAxBN,UAwBM,EAAA;AAAA,IAlBJC,WAiBO,IAxBX,CAAA,MAAA,EAAA,SAAA,EAAAC,cAAA,CAAAC,kBAAA,CAAA,EAAA,aAAA,EAOoB,oBAAa,YAAE,EAAA,IAAA,CAAA,YAAA,MAA/B,MAiBO;AAAA,MAfLF,UAIO,CAAA,IAAA,CAAA,MAAA,EAAA,aAAA,EAAA;AAAA,QAJmB,aAAgB,EAAA,IAAA,CAAA,aAAA;AAAA,QAAgB,YAAe,EAAA,IAAA,CAAA,YAAA;AAAA,OAAA,EAAzE,MAIO;AAAA,QAHLG,kBAAA;AAAA,UAEI,GAAA;AAAA,UAFJ,UAAA;AAAA,UAAgE,qBAC/CC,eAAG,CAAA,IAAA,CAAA,aAAa,IAAG,MAAI,GAAAA,eAAA,CAAG,iBAAY,CAAG,GAAA,WAAA;AAAA,UAC1D,CAAA;AAAA;AAAA,SAAA;AAAA,OAAA,EAAA,IAAA,CAAA;MAEFC,WASkB,CAAA,0BAAA,EAAA;AAAA,QARhB,KAAA,EAfRC,cAec,CAAA,CAAA,UAAA,EACE,IAAa,CAAA,aAAA,CAAA,CAAA;AAAA,QACpB,MAAQ,EAAA,IAAA,CAAA,MAAA;AAAA,QACT,WAAU,EAAA,cAAA;AAAA,QACV,YAAW,EAAA,MAAA;AAAA,OAAA,EAAA;AAnBnB,QAAA,OAAA,EAAAC,OAAA,CAsBQ,MAAsC;AAAA,UAAtCP,UAAA,CAAsC,kCAAtC,MAAsC;AAAA,YAtB9CQ,gBAsBmC,MAAI,CAAA;AAAA,WAAA,EAAA,IAAA,CAAA;;AAtBvC,QAAA,CAAA,EAAA,CAAA;AAAA;AAAA,OAAA,EAAA,CAAA,EAAA,CAAA,OAAA,EAAA,QAAA,CAAA,CAAA;;;;;;;;"}
1
+ {"version":3,"file":"page-loader-button.vue.js","sources":["../../../src/components/page-loader-button.vue"],"sourcesContent":["<template>\n <div class=\"x-page-loader\" data-test=\"page-loader\">\n <!--\n @slot default\n @binding {number} resultsLength - The search result's length\n @binding {number} totalResults - The totalResults of a searched query\n -->\n <slot v-bind=\"{ resultsLength, totalResults }\">\n <!-- @slot Rendered count with a text and the number of results displayed & remaining. -->\n <slot name=\"textContent\" :results-length=\"resultsLength\" :total-results=\"totalResults\">\n <p class=\"x-page-loader__text-content\" data-test=\"text-content\">\n You are seeing {{ resultsLength }} of {{ totalResults }} results\n </p>\n </slot>\n <BaseEventButton\n class=\"x-button\"\n :class=\"buttonClasses\"\n :events=\"events\"\n data-test=\"load-content\"\n aria-label=\"Load\"\n >\n <!-- @slot Button content with a text, an icon or both -->\n <slot name=\"buttonContent\">Load</slot>\n </BaseEventButton>\n </slot>\n </div>\n</template>\n\n<script lang=\"ts\">\nimport type { PropType } from 'vue'\nimport type { VueCSSClasses } from '../utils/types'\nimport type { XEventsTypes } from '../wiring'\nimport { computed, defineComponent } from 'vue'\nimport { use$x } from '../composables'\nimport BaseEventButton from './base-event-button.vue'\n\n/**\n * Component that renders a text with the number of rendered results and\n * the remaining ones and a `<BaseEventButton>` with the logic of emitting\n * the event \"UserReachedResultsListEnd\" to load more results on click.\n *\n * @public\n */\nexport default defineComponent({\n name: 'PageLoaderButton',\n components: { BaseEventButton },\n props: {\n /**\n * CSS classes to customize the loader button.\n *\n * @internal\n */\n buttonClasses: {\n type: String as PropType<VueCSSClasses>,\n default: '',\n },\n /**\n * Events to customize what will be emitted by the loader button.\n *\n * @internal\n */\n buttonEvents: {\n type: Object as PropType<Partial<XEventsTypes>>,\n },\n },\n setup(props) {\n const $x = use$x()\n const resultsLength = computed(() => $x.results.length)\n const totalResults = computed(() => $x.totalResults)\n\n /**\n * The events that will be emitted when clicking on the loader button.\n *\n * @returns The {@link XEvent} to emit.\n * @public\n */\n const events = computed<Partial<XEventsTypes>>(() => {\n return { UserReachedResultsListEnd: undefined, ...props.buttonEvents }\n })\n\n return {\n resultsLength,\n totalResults,\n events,\n }\n },\n})\n</script>\n\n<style scoped>\n.x-page-loader {\n display: flex;\n flex-direction: column;\n align-items: center;\n padding: 32px 0;\n}\n\n.x-page-loader__text-content {\n padding: 16px 0;\n}\n</style>\n\n<docs lang=\"mdx\">\n## Events\n\nThis component emits the \"UserReachedResultsListEnd\" event by default. This can be changed using the\nbuttonEvents prop:\n\n```vue live\n<template>\n <PageLoaderButton :buttonEvents=\"{ UserClickedCloseX: undefined }\" />\n</template>\n\n<script>\nimport { PageLoaderButton } from '@empathyco/x-components'\n\nexport default {\n name: 'PageLoaderButtonDemo',\n components: {\n PageLoaderButton,\n },\n}\n</script>\n```\n\n## See it in action\n\nHere you have a basic example of how the page loader component is rendered.\n\n```vue live\n<template>\n <PageLoaderButton />\n</template>\n\n<script>\nimport { PageLoaderButton } from '@empathyco/x-components'\n\nexport default {\n name: 'PageLoaderButtonDemo',\n components: {\n PageLoaderButton,\n },\n}\n</script>\n```\n\n### Customise the default layout\n\nThis component has a default slot which allows to customise the entire layout.\n\n```vue live\n<template>\n <PageLoaderButton>\n <template #default=\"{ resultsLength, totalResults }\">\n <div class=\"x-flex x-flex-col\">\n <div class=\"x-flex x-gap-4 x-text\">\n <span class=\"x-text-accent-50 x-font-bold\">{{ resultsLength }}</span>\n <span>of</span>\n <span class=\"x-text-accent-50\">{{ totalResults }}</span>\n </div>\n <button\n @click=\"$x.emit('UserReachedResultsListEnd', undefined)\"\n class=\"x-button x-button-ghost\"\n >\n Load more\n </button>\n </div>\n </template>\n </PageLoaderButton>\n</template>\n\n<script>\nimport { PageLoaderButton } from '@empathyco/x-components'\n\nexport default {\n name: 'PageLoaderButtonDemo',\n components: {\n PageLoaderButton,\n },\n}\n</script>\n```\n\n### Customise the slots\n\nThis component allows to customise both the textContent and the buttonContent slots. The\ntextContent's slot layout can be replaced entirely, while the buttonContent's slot enables wrapping\ncontent inside and customizing its style using the buttonClasses prop.\n\n```vue live\n<template>\n <PageLoaderButton :buttonClasses=\"buttonClasses\">\n <template #textContent=\"{ resultsLength, totalResults }\">\n <div class=\"x-flex x-gap-4 x-text\">\n <span class=\"x-text-accent-50 x-font-bold\">{{ resultsLength }}</span>\n <span>of</span>\n <span class=\"x-text-accent-50\">{{ totalResults }}</span>\n </div>\n </template>\n <template #buttonContent>Load more results</template>\n </PageLoaderButton>\n</template>\n\n<script>\nimport { PageLoaderButton } from '@empathyco/x-components'\n\nexport default {\n name: 'PageLoaderButtonDemo',\n components: {\n PageLoaderButton,\n },\n data() {\n return {\n buttonClasses: 'x-rounded-full',\n }\n },\n}\n</script>\n```\n</docs>\n"],"names":["_openBlock","_createElementBlock","_renderSlot","_normalizeProps","_guardReactiveProps","_createElementVNode","_toDisplayString","_createVNode","_normalizeClass","_createTextVNode"],"mappings":";;;;;;EACO,KAAM,EAAA,eAAA;AAAA,EAAgB,WAAU,EAAA,aAAA;;;EAS5B,KAAM,EAAA,6BAAA;AAAA,EAA8B,WAAU,EAAA,cAAA;;;;AATvD,EAAA,OAAAA,SAAA,EAAA,EAAAC,kBAAA,CAwBM,OAxBN,UAwBM,EAAA;AAAA,IAlBJC,WAiBO,IAjBS,CAAA,MAAA,EAAA,SAAA,EAAAC,cAAA,CAAAC,kBAAA,CAAA,EAAA,aAAA,EAAA,IAAA,CAAA,aAAA,EAAa,YAAE,EAAA,IAAA,CAAA,YAAA,MAA/B,MAiBO;AAAA,MAfLF,UAIO,CAAA,IAAA,CAAA,MAAA,EAAA,aAAA,EAAA;AAAA,QAJmB,aAAgB,EAAA,IAAA,CAAA,aAAA;AAAA,QAAgB,YAAe,EAAA,IAAA,CAAA,YAAA;AAAA,OAAA,EAAzE,MAIO;AAAA,QAHLG,kBAAA;AAAA,UAEI,GAAA;AAAA,UAFJ,UAAA;AAAA,UAAgE,qBAC/CC,eAAG,CAAA,IAAA,CAAA,aAAa,IAAG,MAAI,GAAAA,eAAA,CAAG,iBAAY,CAAG,GAAA,WAAA;AAAA,UAC1D,CAAA;AAAA;AAAA,SAAA;AAAA,OAAA,EAAA,IAAA,CAAA;MAEFC,WASkB,CAAA,0BAAA,EAAA;AAAA,QARhB,KAAA,EAAKC,cAAC,CAAA,CAAA,UAAA,EACE,IAAa,CAAA,aAAA,CAAA,CAAA;AAAA,QACpB,MAAQ,EAAA,IAAA,CAAA,MAAA;AAAA,QACT,WAAU,EAAA,cAAA;AAAA,QACV,YAAW,EAAA,MAAA;AAAA,OAAA,EAAA;yBAGX,MAAsC;AAAA,UAAtCN,UAAA,CAAsC,kCAAtC,MAAsC;AAAA,YAAA,MAAA,CAAA,CAAA,CAAA,KAAA,MAAA,CAAA,CAAA,CAAA,GAAAO,eAAA;AAAX,cAAA,MAAA;AAAA,cAAI,CAAA,CAAA;AAAA;AAAA,aAAA,CAAA;AAAA,WAAA,EAAA,IAAA,CAAA;;;;;;;;;;;;"}
@@ -22,7 +22,11 @@ function _sfc_render(_ctx, _cache, $props, $setup, $data, $options) {
22
22
  onClick: _cache[0] || (_cache[0] = ($event) => _ctx.selectPage(_ctx.currentPage - 1))
23
23
  }, [
24
24
  renderSlot(_ctx.$slots, "previous-page-button", {}, () => [
25
- createTextVNode("Prev")
25
+ _cache[2] || (_cache[2] = createTextVNode(
26
+ "Prev",
27
+ -1
28
+ /* CACHED */
29
+ ))
26
30
  ], true)
27
31
  ], 10, _hoisted_2),
28
32
  (openBlock(true), createElementBlock(
@@ -67,7 +71,11 @@ function _sfc_render(_ctx, _cache, $props, $setup, $data, $options) {
67
71
  onClick: _cache[1] || (_cache[1] = ($event) => _ctx.selectPage(_ctx.currentPage + 1))
68
72
  }, [
69
73
  renderSlot(_ctx.$slots, "next-page-button", {}, () => [
70
- createTextVNode("Next")
74
+ _cache[3] || (_cache[3] = createTextVNode(
75
+ "Next",
76
+ -1
77
+ /* CACHED */
78
+ ))
71
79
  ], true)
72
80
  ], 10, _hoisted_4)
73
81
  ])) : createCommentVNode("v-if", true);
@@ -1 +1 @@
1
- {"version":3,"file":"page-selector.vue.js","sources":["../../../src/components/page-selector.vue"],"sourcesContent":["<template>\n <nav v-if=\"visiblePages?.length > 1\" class=\"x-page-selector\" aria-label=\"Pagination\">\n <button\n class=\"x-button\"\n :class=\"buttonClasses\"\n :disabled=\"currentPage === 1\"\n data-test=\"previous-page-button\"\n aria-label=\"Previous page\"\n :aria-disabled=\"currentPage === 1\"\n @click=\"selectPage(currentPage - 1)\"\n >\n <slot name=\"previous-page-button\">Prev</slot>\n </button>\n\n <button\n v-for=\"page in visiblePages\"\n :key=\"page.value\"\n class=\"x-button x-page-selector__page\"\n :class=\"[\n itemClasses(page.isSelected),\n {\n 'x-page-selector__page--current': page.isSelected,\n 'x-page-selector__page--hidden': page.value === hiddenPage,\n },\n ]\"\n :data-test=\"`page-button-${page.value}`\"\n :aria-label=\"`Page ${page.value}`\"\n :aria-current=\"page.isSelected ? 'page' : undefined\"\n @click=\"selectPage(page.value)\"\n >\n <slot name=\"page-button\" :page=\"page.value\" :is-selected=\"page.isSelected\">\n {{ page.value }}\n </slot>\n </button>\n\n <button\n class=\"x-button\"\n :class=\"buttonClasses\"\n :disabled=\"currentPage === totalPages\"\n data-test=\"next-page-button\"\n aria-label=\"Next page\"\n :aria-disabled=\"currentPage === totalPages\"\n @click=\"selectPage(currentPage + 1)\"\n >\n <slot name=\"next-page-button\">Next</slot>\n </button>\n </nav>\n</template>\n\n<script lang=\"ts\">\nimport type { Dictionary } from '@empathyco/x-utils'\nimport type { PropType } from 'vue'\nimport { computed, defineComponent } from 'vue'\nimport { useXBus } from '../composables'\n\ninterface PageItem {\n value: number | string\n isSelected: boolean\n}\n\n/**\n * Component that renders a pagination control with buttons for navigating\n * between pages. It displays the current page, allows selecting other pages,\n * and emits events when a page is selected.\n *\n * @public\n */\nexport default defineComponent({\n name: 'PageSelector',\n props: {\n /**\n * CSS classes to customize the prev/next buttons.\n */\n buttonClasses: {\n type: Array as PropType<(string | Dictionary<boolean>)[]>,\n default: () => [],\n },\n /**\n * The current page number.\n */\n currentPage: {\n type: Number,\n required: true,\n },\n /**\n * The string content of the hidden pages.\n */\n hiddenPage: {\n type: String,\n default: '...',\n },\n /**\n * CSS classes to customize the page items.\n */\n itemClasses: {\n type: Function as PropType<\n (isSelected: boolean) => string | Dictionary<boolean> | (string | Dictionary<boolean>)[]\n >,\n default: () => [],\n },\n /**\n * The number of pages to show before and after the current page.\n */\n range: {\n type: Number,\n default: 2,\n },\n /**\n * The class of the scroll container to scroll to top when a page is selected.\n */\n scrollTarget: {\n type: String,\n default: 'main-scroll',\n },\n /**\n * The total number of pages.\n */\n totalPages: {\n type: Number,\n required: true,\n },\n },\n setup(props) {\n const bus = useXBus()\n\n const visiblePages = computed(() => {\n const start = Math.max(props.currentPage - props.range, 1)\n const end = Math.min(props.currentPage + props.range, props.totalPages)\n const pages: PageItem[] = Array.from({ length: end - start + 1 }, (_, i) => {\n const pageValue: string | number = start + i\n return { value: pageValue, isSelected: pageValue === props.currentPage }\n })\n\n // Ensure first and last pages are always visible when needed\n if (start > 1) {\n pages.unshift({ value: 1, isSelected: props.currentPage === 1 })\n if (start > 2) {\n pages.splice(1, 0, { value: props.hiddenPage, isSelected: false })\n }\n }\n if (end < props.totalPages) {\n if (end < props.totalPages - 1) {\n pages.push({ value: props.hiddenPage, isSelected: false })\n }\n pages.push({\n value: props.totalPages,\n isSelected: props.totalPages === props.currentPage,\n })\n }\n\n return pages\n })\n\n /**\n * Handles the selection of a page.\n *\n * @param page - The page to select. Can be a number representing the page number or a string '...' indicating an ellipsis.\n */\n const selectPage = (page: number | string): void => {\n if (page === '...') {\n return\n }\n if (typeof page === 'number' && page > 0 && page <= props.totalPages) {\n bus.emit('UserSelectedAPage', page)\n /**\n * Emits scroll to top to prevent keeping the position if there is more content\n * after results, as for example Next Queries Preview.\n */\n bus.emit('UserClickedScrollToTop', props.scrollTarget)\n }\n }\n\n return {\n visiblePages,\n selectPage,\n }\n },\n})\n</script>\n\n<style scoped>\n.x-page-selector {\n display: flex;\n justify-content: center;\n align-items: center;\n gap: 2px;\n}\n\n.x-page-selector__page--current,\n.x-page-selector__page--hidden {\n cursor: default;\n}\n</style>\n\n<docs lang=\"mdx\">\n## Events\n\nThis component emits the \"UserSelectedAPage\" and the UserClickedScrollToTop events by default.\n\n## See it in action\n\nBasic example of how the component is rendered.\n\n```vue live\n<template>\n <PageSelector :current-page=\"page\" :total-pages=\"totalPages\" />\n</template>\n\n<script>\nimport { PageSelector } from '@empathyco/x-components'\n\nexport default {\n name: 'PageSelectorDemo',\n components: {\n PageSelector,\n },\n data() {\n return {\n page: 0,\n totalPages: 10,\n }\n },\n}\n</script>\n```\n\n### Customize the slots\n\nThis component allows to customise its content using slots.\n\n```vue live\n<template>\n <PageSelector\n :total-pages=\"totalPages\"\n :currentPage=\"page\"\n :item-classes=\"\n (isSelected: boolean) =>\n isSelected\n ? 'x-button-lead x-text-neutral-10'\n : 'x-text-neutral-90 x-button-outlined'\n \"\n :buttonClasses=\"['x-rounded-md']\"\n >\n <template #previous-page-button>\n <span>Back</span>\n </template>\n <template #page-button=\"{ page, isSelected }\">\n <h2 :class=\"{ 'x-text1': !isSelected }\">\n {{ page }}\n </h2>\n </template>\n <template #next-page-button>\n <span>Forward</span>\n </template>\n </PageSelector>\n</template>\n\n<script>\nimport { PageSelector } from '@empathyco/x-components'\n\nexport default {\n name: 'PageSelectorDemo',\n components: {\n PageSelector,\n },\n data() {\n return {\n page: 2,\n totalPages: 10,\n }\n },\n}\n</script>\n```\n\n### Customize the number of pages to show before and after the current page by changing the range default value.\n\n```vue live\n<template>\n <PageSelector :current-page=\"page\" :total-pages=\"totalPages\" :range=\"range\" />\n</template>\n\n<script>\nimport { PageSelector } from '@empathyco/x-components'\n\nexport default {\n name: 'PageSelectorDemo',\n components: {\n PageSelector,\n },\n data() {\n return {\n page: 6,\n totalPages: 100,\n range: 4,\n }\n },\n}\n</script>\n```\n</docs>\n"],"names":["_openBlock","_createElementBlock","_createElementVNode","_normalizeClass","_renderSlot","_createTextVNode","_Fragment","_renderList","_toDisplayString","_createCommentVNode"],"mappings":"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"}
1
+ {"version":3,"file":"page-selector.vue.js","sources":["../../../src/components/page-selector.vue"],"sourcesContent":["<template>\n <nav v-if=\"visiblePages?.length > 1\" class=\"x-page-selector\" aria-label=\"Pagination\">\n <button\n class=\"x-button\"\n :class=\"buttonClasses\"\n :disabled=\"currentPage === 1\"\n data-test=\"previous-page-button\"\n aria-label=\"Previous page\"\n :aria-disabled=\"currentPage === 1\"\n @click=\"selectPage(currentPage - 1)\"\n >\n <slot name=\"previous-page-button\">Prev</slot>\n </button>\n\n <button\n v-for=\"page in visiblePages\"\n :key=\"page.value\"\n class=\"x-button x-page-selector__page\"\n :class=\"[\n itemClasses(page.isSelected),\n {\n 'x-page-selector__page--current': page.isSelected,\n 'x-page-selector__page--hidden': page.value === hiddenPage,\n },\n ]\"\n :data-test=\"`page-button-${page.value}`\"\n :aria-label=\"`Page ${page.value}`\"\n :aria-current=\"page.isSelected ? 'page' : undefined\"\n @click=\"selectPage(page.value)\"\n >\n <slot name=\"page-button\" :page=\"page.value\" :is-selected=\"page.isSelected\">\n {{ page.value }}\n </slot>\n </button>\n\n <button\n class=\"x-button\"\n :class=\"buttonClasses\"\n :disabled=\"currentPage === totalPages\"\n data-test=\"next-page-button\"\n aria-label=\"Next page\"\n :aria-disabled=\"currentPage === totalPages\"\n @click=\"selectPage(currentPage + 1)\"\n >\n <slot name=\"next-page-button\">Next</slot>\n </button>\n </nav>\n</template>\n\n<script lang=\"ts\">\nimport type { Dictionary } from '@empathyco/x-utils'\nimport type { PropType } from 'vue'\nimport { computed, defineComponent } from 'vue'\nimport { useXBus } from '../composables'\n\ninterface PageItem {\n value: number | string\n isSelected: boolean\n}\n\n/**\n * Component that renders a pagination control with buttons for navigating\n * between pages. It displays the current page, allows selecting other pages,\n * and emits events when a page is selected.\n *\n * @public\n */\nexport default defineComponent({\n name: 'PageSelector',\n props: {\n /**\n * CSS classes to customize the prev/next buttons.\n */\n buttonClasses: {\n type: Array as PropType<(string | Dictionary<boolean>)[]>,\n default: () => [],\n },\n /**\n * The current page number.\n */\n currentPage: {\n type: Number,\n required: true,\n },\n /**\n * The string content of the hidden pages.\n */\n hiddenPage: {\n type: String,\n default: '...',\n },\n /**\n * CSS classes to customize the page items.\n */\n itemClasses: {\n type: Function as PropType<\n (isSelected: boolean) => string | Dictionary<boolean> | (string | Dictionary<boolean>)[]\n >,\n default: () => [],\n },\n /**\n * The number of pages to show before and after the current page.\n */\n range: {\n type: Number,\n default: 2,\n },\n /**\n * The class of the scroll container to scroll to top when a page is selected.\n */\n scrollTarget: {\n type: String,\n default: 'main-scroll',\n },\n /**\n * The total number of pages.\n */\n totalPages: {\n type: Number,\n required: true,\n },\n },\n setup(props) {\n const bus = useXBus()\n\n const visiblePages = computed(() => {\n const start = Math.max(props.currentPage - props.range, 1)\n const end = Math.min(props.currentPage + props.range, props.totalPages)\n const pages: PageItem[] = Array.from({ length: end - start + 1 }, (_, i) => {\n const pageValue: string | number = start + i\n return { value: pageValue, isSelected: pageValue === props.currentPage }\n })\n\n // Ensure first and last pages are always visible when needed\n if (start > 1) {\n pages.unshift({ value: 1, isSelected: props.currentPage === 1 })\n if (start > 2) {\n pages.splice(1, 0, { value: props.hiddenPage, isSelected: false })\n }\n }\n if (end < props.totalPages) {\n if (end < props.totalPages - 1) {\n pages.push({ value: props.hiddenPage, isSelected: false })\n }\n pages.push({\n value: props.totalPages,\n isSelected: props.totalPages === props.currentPage,\n })\n }\n\n return pages\n })\n\n /**\n * Handles the selection of a page.\n *\n * @param page - The page to select. Can be a number representing the page number or a string '...' indicating an ellipsis.\n */\n const selectPage = (page: number | string): void => {\n if (page === '...') {\n return\n }\n if (typeof page === 'number' && page > 0 && page <= props.totalPages) {\n bus.emit('UserSelectedAPage', page)\n /**\n * Emits scroll to top to prevent keeping the position if there is more content\n * after results, as for example Next Queries Preview.\n */\n bus.emit('UserClickedScrollToTop', props.scrollTarget)\n }\n }\n\n return {\n visiblePages,\n selectPage,\n }\n },\n})\n</script>\n\n<style scoped>\n.x-page-selector {\n display: flex;\n justify-content: center;\n align-items: center;\n gap: 2px;\n}\n\n.x-page-selector__page--current,\n.x-page-selector__page--hidden {\n cursor: default;\n}\n</style>\n\n<docs lang=\"mdx\">\n## Events\n\nThis component emits the \"UserSelectedAPage\" and the UserClickedScrollToTop events by default.\n\n## See it in action\n\nBasic example of how the component is rendered.\n\n```vue live\n<template>\n <PageSelector :current-page=\"page\" :total-pages=\"totalPages\" />\n</template>\n\n<script>\nimport { PageSelector } from '@empathyco/x-components'\n\nexport default {\n name: 'PageSelectorDemo',\n components: {\n PageSelector,\n },\n data() {\n return {\n page: 0,\n totalPages: 10,\n }\n },\n}\n</script>\n```\n\n### Customize the slots\n\nThis component allows to customise its content using slots.\n\n```vue live\n<template>\n <PageSelector\n :total-pages=\"totalPages\"\n :currentPage=\"page\"\n :item-classes=\"\n (isSelected: boolean) =>\n isSelected\n ? 'x-button-lead x-text-neutral-10'\n : 'x-text-neutral-90 x-button-outlined'\n \"\n :buttonClasses=\"['x-rounded-md']\"\n >\n <template #previous-page-button>\n <span>Back</span>\n </template>\n <template #page-button=\"{ page, isSelected }\">\n <h2 :class=\"{ 'x-text1': !isSelected }\">\n {{ page }}\n </h2>\n </template>\n <template #next-page-button>\n <span>Forward</span>\n </template>\n </PageSelector>\n</template>\n\n<script>\nimport { PageSelector } from '@empathyco/x-components'\n\nexport default {\n name: 'PageSelectorDemo',\n components: {\n PageSelector,\n },\n data() {\n return {\n page: 2,\n totalPages: 10,\n }\n },\n}\n</script>\n```\n\n### Customize the number of pages to show before and after the current page by changing the range default value.\n\n```vue live\n<template>\n <PageSelector :current-page=\"page\" :total-pages=\"totalPages\" :range=\"range\" />\n</template>\n\n<script>\nimport { PageSelector } from '@empathyco/x-components'\n\nexport default {\n name: 'PageSelectorDemo',\n components: {\n PageSelector,\n },\n data() {\n return {\n page: 6,\n totalPages: 100,\n range: 4,\n }\n },\n}\n</script>\n```\n</docs>\n"],"names":["_openBlock","_createElementBlock","_createElementVNode","_normalizeClass","_renderSlot","_createTextVNode","_Fragment","_renderList","_toDisplayString"],"mappings":"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"}
@@ -1 +1 @@
1
- {"version":3,"file":"base-header-toggle-panel.vue.js","sources":["../../../../src/components/panels/base-header-toggle-panel.vue"],"sourcesContent":["<template>\n <div class=\"x-header-toggle-panel\">\n <!-- @slot (Required) Slot that is be used for replacing the whole header. -->\n <slot name=\"header\" v-bind=\"{ toggleOpen, open }\">\n <!-- header-toggle-panel__header -->\n <button\n class=\"x-header-toggle-panel__header\"\n :class=\"headerClass\"\n data-test=\"toggle-panel-header\"\n @click=\"toggleOpen\"\n >\n <!-- @slot (Required) Slot used to just pass the content. -->\n <slot name=\"header-content\" v-bind=\"{ open }\"></slot>\n </button>\n </slot>\n\n <BaseTogglePanel :open=\"open\" :animation=\"animation\">\n <!-- @slot (Required) Default content. -->\n <slot />\n </BaseTogglePanel>\n </div>\n</template>\n\n<script lang=\"ts\">\nimport { defineComponent, ref } from 'vue'\nimport { AnimationProp } from '../../types'\nimport { NoAnimation } from '../animations'\nimport BaseTogglePanel from './base-toggle-panel.vue'\n\n/**\n * Toggle panel which uses the base toggle panel, adds a header and manage the\n * open / close state of the panel.\n *\n * @public\n */\nexport default defineComponent({\n name: 'BaseHeaderTogglePanel',\n components: { BaseTogglePanel },\n props: {\n /** Animation component that will be used to animate the base-toggle-panel. */\n animation: {\n type: AnimationProp,\n default: () => NoAnimation,\n },\n /** Handles if the panel is open by default. */\n startCollapsed: Boolean,\n /** Class inherited by content element. */\n headerClass: String,\n },\n setup(props, { emit }) {\n /**\n * Handles if the base panel is open or closed.\n *\n * @internal\n */\n const open = ref(!props.startCollapsed)\n\n /**\n * Emits open status event.\n *\n * @internal\n */\n const emitOpenStatusEvent = () => {\n emit(open.value ? 'open' : 'close')\n }\n\n /**\n * Toggles the open property.\n *\n * @internal\n */\n const toggleOpen = () => {\n open.value = !open.value\n emitOpenStatusEvent()\n }\n\n return {\n open,\n toggleOpen,\n }\n },\n})\n</script>\n\n<style lang=\"css\" scoped>\n.x-header-toggle-panel__header {\n cursor: pointer;\n}\n</style>\n\n<docs lang=\"mdx\">\n## Events\n\nA list of events that the component will emit:\n\n- `open`: the event is emitted after the user clicks the element and opens it.\n- `close`: the event is emitted after the user clicks the element and closes it.\n\n## Examples\n\nToggle panel which uses the base toggle panel, adds a header and manage the open / close state of\nthe panel.\n\n### Basic usage\n\n```vue\n<BaseHeaderTogglePanel :animation=\"collapseHeight\" :start-collapsed=\"false\">\n <template #header-content=\"{ open }\">\n <p>Header, open: {{ open ? 'close' : 'open' }}</p>\n </template>\n <template>\n <p>Default content</p>\n </template>\n</BaseHeaderTogglePanel>\n```\n\n### Custom header\n\n```vue\n<BaseHeaderTogglePanel :animation=\"collapseHeight\" :start-collapsed=\"true\">\n <template #header=\"{ toggleOpen, open }\">\n <p>Header, open: {{ open ? 'close' : 'open' }}</p>\n <button @click=\"toggleOpen\">Toggle</button>\n </template>\n <template>\n <p>Default content</p>\n </template>\n</BaseHeaderTogglePanel>\n```\n\n### Customizing default header with classes\n\nThe `headerClass` prop can be used to add classes to the header of the toggle panel.\n\n```vue\n<BaseHeaderTogglePanel\n headerClass=\"custom-class\"\n :animation=\"collapseHeight\"\n :start-collapsed=\"false\"\n>\n <template #header-content=\"{ open }\">\n <p>Header, open: {{ open ? 'close' : 'open' }}</p>\n </template>\n <template>\n <p>Default content</p>\n </template>\n</BaseHeaderTogglePanel>\n```\n</docs>\n"],"names":["_openBlock","_createElementBlock","_renderSlot","_normalizeProps","_guardReactiveProps","_createElementVNode","_normalizeClass","_createVNode","_withCtx"],"mappings":";;;;;AACO,MAAA,UAAA,GAAA,EAAA,KAAA,EAAM,uBAAuB,EAAA,CAAA;;;AAAlC,EAAA,OAAAA,SAAA,EAAA,EAAAC,kBAAA,CAmBM,OAnBN,UAmBM,EAAA;AAAA,IAjBJC,WAWO,IAdX,CAAA,MAAA,EAAA,QAAA,EAAAC,cAAA,CAAAC,kBAAA,CAAA,EAAA,UAAA,EAGkC,iBAAU,IAAE,EAAA,IAAA,CAAA,IAAA,MAA1C,MAWO;AAAA,MATLC,kBAAA;AAAA,QAQS,QAAA;AAAA,QAAA;AAAA,UAPP,KAAA,EANRC,cAMc,CAAA,CAAA,+BAAA,EACE,IAAW,CAAA,WAAA,CAAA,CAAA;AAAA,UACnB,WAAU,EAAA,qBAAA;AAAA,UACT,SAAK,MAAE,CAAA,CAAA,CAAA,KAAA,MAAA,CAAA,CAAA,CAAA,GAAA,CAAA,GAAA,IAAA,KAAA,IAAA,CAAA,UAAA,IAAA,IAAA,CAAA,UAAA,CAAA,GAAA,IAAA,CAAA,CAAA;AAAA,SAAA;;UAGRJ,UAAqD,CAAA,IAAA,CAAA,MAAA,EAAA,gBAAA,EAZ7DC,0CAY8C,IAAI,CAAA,IAAA,EAAA,CAAA,CAAA,EAAA,KAAA,CAAA,EAAA,IAAA,CAAA;AAAA,SAAA;;;;;IAI9CI,WAGkB,CAAA,0BAAA,EAAA;AAAA,MAHA,IAAM,EAAA,IAAA,CAAA,IAAA;AAAA,MAAO,SAAW,EAAA,IAAA,CAAA,SAAA;AAAA,KAAA,EAAA;AAhB9C,MAAA,OAAA,EAAAC,OAAA,CAkBM,MAAQ;AAAA,QAARN,UAAQ,CAAA,IAAA,CAAA,MAAA,EAAA,SAAA,EAAA,EAAA,EAAA,KAAA,CAAA,EAAA,IAAA,CAAA;AAAA,OAAA,CAAA;AAlBd,MAAA,CAAA,EAAA,CAAA;AAAA;AAAA,KAAA,EAAA,CAAA,EAAA,CAAA,MAAA,EAAA,WAAA,CAAA,CAAA;;;;;;;"}
1
+ {"version":3,"file":"base-header-toggle-panel.vue.js","sources":["../../../../src/components/panels/base-header-toggle-panel.vue"],"sourcesContent":["<template>\n <div class=\"x-header-toggle-panel\">\n <!-- @slot (Required) Slot that is be used for replacing the whole header. -->\n <slot name=\"header\" v-bind=\"{ toggleOpen, open }\">\n <!-- header-toggle-panel__header -->\n <button\n class=\"x-header-toggle-panel__header\"\n :class=\"headerClass\"\n data-test=\"toggle-panel-header\"\n @click=\"toggleOpen\"\n >\n <!-- @slot (Required) Slot used to just pass the content. -->\n <slot name=\"header-content\" v-bind=\"{ open }\"></slot>\n </button>\n </slot>\n\n <BaseTogglePanel :open=\"open\" :animation=\"animation\">\n <!-- @slot (Required) Default content. -->\n <slot />\n </BaseTogglePanel>\n </div>\n</template>\n\n<script lang=\"ts\">\nimport { defineComponent, ref } from 'vue'\nimport { AnimationProp } from '../../types'\nimport { NoAnimation } from '../animations'\nimport BaseTogglePanel from './base-toggle-panel.vue'\n\n/**\n * Toggle panel which uses the base toggle panel, adds a header and manage the\n * open / close state of the panel.\n *\n * @public\n */\nexport default defineComponent({\n name: 'BaseHeaderTogglePanel',\n components: { BaseTogglePanel },\n props: {\n /** Animation component that will be used to animate the base-toggle-panel. */\n animation: {\n type: AnimationProp,\n default: () => NoAnimation,\n },\n /** Handles if the panel is open by default. */\n startCollapsed: Boolean,\n /** Class inherited by content element. */\n headerClass: String,\n },\n setup(props, { emit }) {\n /**\n * Handles if the base panel is open or closed.\n *\n * @internal\n */\n const open = ref(!props.startCollapsed)\n\n /**\n * Emits open status event.\n *\n * @internal\n */\n const emitOpenStatusEvent = () => {\n emit(open.value ? 'open' : 'close')\n }\n\n /**\n * Toggles the open property.\n *\n * @internal\n */\n const toggleOpen = () => {\n open.value = !open.value\n emitOpenStatusEvent()\n }\n\n return {\n open,\n toggleOpen,\n }\n },\n})\n</script>\n\n<style lang=\"css\" scoped>\n.x-header-toggle-panel__header {\n cursor: pointer;\n}\n</style>\n\n<docs lang=\"mdx\">\n## Events\n\nA list of events that the component will emit:\n\n- `open`: the event is emitted after the user clicks the element and opens it.\n- `close`: the event is emitted after the user clicks the element and closes it.\n\n## Examples\n\nToggle panel which uses the base toggle panel, adds a header and manage the open / close state of\nthe panel.\n\n### Basic usage\n\n```vue\n<BaseHeaderTogglePanel :animation=\"collapseHeight\" :start-collapsed=\"false\">\n <template #header-content=\"{ open }\">\n <p>Header, open: {{ open ? 'close' : 'open' }}</p>\n </template>\n <template>\n <p>Default content</p>\n </template>\n</BaseHeaderTogglePanel>\n```\n\n### Custom header\n\n```vue\n<BaseHeaderTogglePanel :animation=\"collapseHeight\" :start-collapsed=\"true\">\n <template #header=\"{ toggleOpen, open }\">\n <p>Header, open: {{ open ? 'close' : 'open' }}</p>\n <button @click=\"toggleOpen\">Toggle</button>\n </template>\n <template>\n <p>Default content</p>\n </template>\n</BaseHeaderTogglePanel>\n```\n\n### Customizing default header with classes\n\nThe `headerClass` prop can be used to add classes to the header of the toggle panel.\n\n```vue\n<BaseHeaderTogglePanel\n headerClass=\"custom-class\"\n :animation=\"collapseHeight\"\n :start-collapsed=\"false\"\n>\n <template #header-content=\"{ open }\">\n <p>Header, open: {{ open ? 'close' : 'open' }}</p>\n </template>\n <template>\n <p>Default content</p>\n </template>\n</BaseHeaderTogglePanel>\n```\n</docs>\n"],"names":["_openBlock","_createElementBlock","_renderSlot","_normalizeProps","_guardReactiveProps","_createElementVNode","_normalizeClass","_createVNode"],"mappings":";;;;;AACO,MAAA,UAAA,GAAA,EAAA,KAAA,EAAM,uBAAuB,EAAA,CAAA;;;AAAlC,EAAA,OAAAA,SAAA,EAAA,EAAAC,kBAAA,CAmBM,OAnBN,UAmBM,EAAA;AAAA,IAjBJC,WAWO,IAXuB,CAAA,MAAA,EAAA,QAAA,EAAAC,cAAA,CAAAC,kBAAA,CAAA,EAAA,UAAA,EAAA,IAAA,CAAA,UAAA,EAAU,IAAE,EAAA,IAAA,CAAA,IAAA,MAA1C,MAWO;AAAA,MATLC,kBAAA;AAAA,QAQS,QAAA;AAAA,QAAA;AAAA,UAPP,KAAA,EAAKC,cAAC,CAAA,CAAA,+BAAA,EACE,IAAW,CAAA,WAAA,CAAA,CAAA;AAAA,UACnB,WAAU,EAAA,qBAAA;AAAA,UACT,SAAK,MAAE,CAAA,CAAA,CAAA,KAAA,MAAA,CAAA,CAAA,CAAA,GAAA,CAAA,GAAA,IAAA,KAAA,IAAA,CAAA,UAAA,IAAA,IAAA,CAAA,UAAA,CAAA,GAAA,IAAA,CAAA,CAAA;AAAA,SAAA;;AAGR,UAAAJ,UAAA,CAAqD,yEAAf,IAAI,CAAA,IAAA,EAAA,CAAA,CAAA,EAAA,KAAA,CAAA,EAAA,IAAA,CAAA;AAAA,SAAA;;;;;IAI9CK,WAGkB,CAAA,0BAAA,EAAA;AAAA,MAHA,IAAM,EAAA,IAAA,CAAA,IAAA;AAAA,MAAO,SAAW,EAAA,IAAA,CAAA,SAAA;AAAA,KAAA,EAAA;uBAExC,MAAQ;AAAA,QAARL,UAAQ,CAAA,IAAA,CAAA,MAAA,EAAA,SAAA,EAAA,EAAA,EAAA,KAAA,CAAA,EAAA,IAAA,CAAA;AAAA,OAAA,CAAA;;;;;;;;;;"}
@@ -1 +1 @@
1
- {"version":3,"file":"base-id-toggle-panel-button.vue.js","sources":["../../../../src/components/panels/base-id-toggle-panel-button.vue"],"sourcesContent":["<template>\n <BaseEventButton\n :events=\"events\"\n class=\"x-base-id-toggle-panel-button x-button\"\n data-test=\"base-id-toggle-button\"\n :aria-pressed=\"isPanelOpen.toString()\"\n >\n <!-- @slot (Required) Button content with a text, an icon or both -->\n <slot :is-panel-open=\"isPanelOpen\" />\n </BaseEventButton>\n</template>\n\n<script lang=\"ts\">\nimport type { XEventsTypes } from '../../wiring/events.types'\nimport type { WireMetadata } from '../../wiring/wiring.types'\nimport { computed, defineComponent, ref } from 'vue'\nimport { useXBus } from '../../composables'\nimport BaseEventButton from '../base-event-button.vue'\n\n/**\n * Component containing an event button that emits\n * {@link XEventsTypes.UserClickedPanelToggleButton} when clicked with\n * the panelId as payload.\n *\n * It has a default slot to customize its contents.\n *\n * @public\n */\nexport default defineComponent({\n name: 'BaseIdTogglePanelButton',\n components: { BaseEventButton },\n props: {\n /**\n * The panelId to use for the toggle event listeners.\n */\n panelId: {\n type: String,\n required: true,\n },\n },\n setup(props) {\n const bus = useXBus()\n\n /**\n * The panel state to pass through the slot.\n */\n const isPanelOpen = ref(false)\n\n /**\n * List of events to emit by the BaseEventButton.\n *\n * @returns An object with the event and payload.\n *\n * @internal\n */\n const events = computed(\n (): Partial<XEventsTypes> => ({ UserClickedPanelToggleButton: props.panelId }),\n )\n\n /**\n * The subscription to the {@link XEventsTypes.TogglePanelStateChanged} event\n * to update the `isPanelOpen` property.\n *\n * @param newState - The new isOpen state of the panel.\n * @param id - The `panelId`.\n * @param id.id - The ID of the `panelId`.\n */\n const updatePanelState = (newState: boolean, { id }: WireMetadata) => {\n if (props.panelId === id) {\n isPanelOpen.value = newState\n }\n }\n\n bus\n .on('TogglePanelStateChanged', false)\n .subscribe(newState => updatePanelState(newState, { id: props.panelId, moduleName: null }))\n\n return {\n isPanelOpen,\n events,\n }\n },\n})\n</script>\n\n<docs lang=\"mdx\">\n## Events\n\nA list of events that the component will emit:\n\n- [`UserClickedPanelToggleButton`](https://github.com/empathyco/x/blob/main/packages/x-components/src/wiring/events.types.ts):\n the event is emitted after the user clicks the button. The event payload is the id of the panelId\n that is going to be toggled.\n\n## Examples\n\n### Basic example\n\nThe component rendering content passed to the default slot and opening the panel toggle with panelId\n`my-toggle`.\n\n```vue\n<template>\n <div>\n <BaseIdTogglePanelButton v-slot=\"{ isPanelOpen }\" panelId=\"myToggle\">\n <template #default=\"{ isPanelOpen }\" v-if=\"isPanelOpen\">\n <img src=\"./close-button-icon.svg\" />\n <span>Close aside</span>\n </template>\n <template v-else>\n <img src=\"./open-button-icon.svg\" />\n <span>Open aside</span>\n </template>\n </BaseIdTogglePanelButton>\n <BaseIdTogglePanel :startOpen=\"true\" :animation=\"animation\" panelId=\"myToggle\">\n <div class=\"x-text1\">My toggle</div>\n </BaseIdTogglePanel>\n </div>\n</template>\n\n<script>\nimport {\n BaseIdTogglePanel,\n BaseIdTogglePanelButton,\n CollapseFromTop,\n} from '@empathyco/x-components'\n\nexport default {\n components: {\n BaseIdTogglePanel,\n BaseIdTogglePanelButton,\n CollapseFromTop,\n },\n data: function () {\n return {\n animation: CollapseFromTop,\n }\n },\n}\n</script>\n```\n</docs>\n"],"names":["_createBlock","_withCtx","_renderSlot"],"mappings":";;;;;;sBACEA,WAQkB,CAAA,0BAAA,EAAA;AAAA,IAPf,MAAQ,EAAA,IAAA,CAAA,MAAA;AAAA,IACT,KAAM,EAAA,wCAAA;AAAA,IACN,WAAU,EAAA,uBAAA;AAAA,IACT,cAAA,EAAc,iBAAY,QAAQ,EAAA;AAAA,GAAA,EAAA;AALvC,IAAA,OAAA,EAAAC,OAAA,CAQI,MAAqC;AAAA,MAArCC,UAAA,CAAqC,IAA9B,CAAA,MAAA,EAAA,SAAA,EAAA,EAAA,WAAA,EAAe,IAAW,CAAA,WAAA,EAAA,CAAA;AAAA,KAAA,CAAA;AARrC,IAAA,CAAA,EAAA,CAAA;AAAA;AAAA,GAAA,EAAA,CAAA,EAAA,CAAA,QAAA,EAAA,cAAA,CAAA,CAAA,CAAA;;;;;;"}
1
+ {"version":3,"file":"base-id-toggle-panel-button.vue.js","sources":["../../../../src/components/panels/base-id-toggle-panel-button.vue"],"sourcesContent":["<template>\n <BaseEventButton\n :events=\"events\"\n class=\"x-base-id-toggle-panel-button x-button\"\n data-test=\"base-id-toggle-button\"\n :aria-pressed=\"isPanelOpen.toString()\"\n >\n <!-- @slot (Required) Button content with a text, an icon or both -->\n <slot :is-panel-open=\"isPanelOpen\" />\n </BaseEventButton>\n</template>\n\n<script lang=\"ts\">\nimport type { XEventsTypes } from '../../wiring/events.types'\nimport type { WireMetadata } from '../../wiring/wiring.types'\nimport { computed, defineComponent, ref } from 'vue'\nimport { useXBus } from '../../composables'\nimport BaseEventButton from '../base-event-button.vue'\n\n/**\n * Component containing an event button that emits\n * {@link XEventsTypes.UserClickedPanelToggleButton} when clicked with\n * the panelId as payload.\n *\n * It has a default slot to customize its contents.\n *\n * @public\n */\nexport default defineComponent({\n name: 'BaseIdTogglePanelButton',\n components: { BaseEventButton },\n props: {\n /**\n * The panelId to use for the toggle event listeners.\n */\n panelId: {\n type: String,\n required: true,\n },\n },\n setup(props) {\n const bus = useXBus()\n\n /**\n * The panel state to pass through the slot.\n */\n const isPanelOpen = ref(false)\n\n /**\n * List of events to emit by the BaseEventButton.\n *\n * @returns An object with the event and payload.\n *\n * @internal\n */\n const events = computed(\n (): Partial<XEventsTypes> => ({ UserClickedPanelToggleButton: props.panelId }),\n )\n\n /**\n * The subscription to the {@link XEventsTypes.TogglePanelStateChanged} event\n * to update the `isPanelOpen` property.\n *\n * @param newState - The new isOpen state of the panel.\n * @param id - The `panelId`.\n * @param id.id - The ID of the `panelId`.\n */\n const updatePanelState = (newState: boolean, { id }: WireMetadata) => {\n if (props.panelId === id) {\n isPanelOpen.value = newState\n }\n }\n\n bus\n .on('TogglePanelStateChanged', false)\n .subscribe(newState => updatePanelState(newState, { id: props.panelId, moduleName: null }))\n\n return {\n isPanelOpen,\n events,\n }\n },\n})\n</script>\n\n<docs lang=\"mdx\">\n## Events\n\nA list of events that the component will emit:\n\n- [`UserClickedPanelToggleButton`](https://github.com/empathyco/x/blob/main/packages/x-components/src/wiring/events.types.ts):\n the event is emitted after the user clicks the button. The event payload is the id of the panelId\n that is going to be toggled.\n\n## Examples\n\n### Basic example\n\nThe component rendering content passed to the default slot and opening the panel toggle with panelId\n`my-toggle`.\n\n```vue\n<template>\n <div>\n <BaseIdTogglePanelButton v-slot=\"{ isPanelOpen }\" panelId=\"myToggle\">\n <template #default=\"{ isPanelOpen }\" v-if=\"isPanelOpen\">\n <img src=\"./close-button-icon.svg\" />\n <span>Close aside</span>\n </template>\n <template v-else>\n <img src=\"./open-button-icon.svg\" />\n <span>Open aside</span>\n </template>\n </BaseIdTogglePanelButton>\n <BaseIdTogglePanel :startOpen=\"true\" :animation=\"animation\" panelId=\"myToggle\">\n <div class=\"x-text1\">My toggle</div>\n </BaseIdTogglePanel>\n </div>\n</template>\n\n<script>\nimport {\n BaseIdTogglePanel,\n BaseIdTogglePanelButton,\n CollapseFromTop,\n} from '@empathyco/x-components'\n\nexport default {\n components: {\n BaseIdTogglePanel,\n BaseIdTogglePanelButton,\n CollapseFromTop,\n },\n data: function () {\n return {\n animation: CollapseFromTop,\n }\n },\n}\n</script>\n```\n</docs>\n"],"names":["_createBlock","_renderSlot"],"mappings":";;;;;;sBACEA,WAQkB,CAAA,0BAAA,EAAA;AAAA,IAPf,MAAQ,EAAA,IAAA,CAAA,MAAA;AAAA,IACT,KAAM,EAAA,wCAAA;AAAA,IACN,WAAU,EAAA,uBAAA;AAAA,IACT,cAAA,EAAc,iBAAY,QAAQ,EAAA;AAAA,GAAA,EAAA;qBAGnC,MAAqC;AAAA,MAArCC,UAAA,CAAqC,IAA9B,CAAA,MAAA,EAAA,SAAA,EAAA,EAAA,WAAA,EAAe,IAAW,CAAA,WAAA,EAAA,CAAA;AAAA,KAAA,CAAA;;;;;;;;;"}
@@ -1 +1 @@
1
- {"version":3,"file":"base-id-toggle-panel.vue.js","sources":["../../../../src/components/panels/base-id-toggle-panel.vue"],"sourcesContent":["<template>\n <BaseTogglePanel :open=\"isOpen\" :animation=\"animation\">\n <!-- @slot (Required) Default content -->\n <slot />\n </BaseTogglePanel>\n</template>\n\n<script lang=\"ts\">\nimport { defineComponent, ref, watch } from 'vue'\nimport { use$x } from '../../composables'\nimport { AnimationProp } from '../../types'\nimport { NoAnimation } from '../animations'\nimport BaseTogglePanel from './base-toggle-panel.vue'\n\n/**\n * Simple panel that could receives its initial open state via prop, if not the default is opens\n * and a required prop, named `panelId`, which are responsible of rendering default slot\n * inside a configurable transition.\n *\n * It reacts to `UserClickedPanelToggleButton` event, when their payload matches the component's\n * 'panelId' prop, to handle its open/close state.\n *\n * The default slot offers the possibility to customise the modal content.\n *\n * @public\n */\nexport default defineComponent({\n name: 'BaseIdTogglePanel',\n components: { BaseTogglePanel },\n props: {\n /** Shows the panel open at the beginning or not, depending on its state. */\n startOpen: {\n type: Boolean,\n default: true,\n },\n /** Animation component that will be used to animate the panel content. */\n animation: {\n type: AnimationProp,\n default: () => NoAnimation,\n },\n /**\n * The id to link with the BaseIdTogglePanelButton.\n * Both components must use the same Id to make them interact.\n */\n panelId: {\n type: String,\n required: true,\n },\n },\n setup(props) {\n const $x = use$x()\n\n /** Whether the toggle panel is open or not. */\n const isOpen = ref(props.startOpen)\n\n /**\n * Method to subscribe to the {@link XEventsTypes.UserClickedPanelToggleButton} event.\n *\n * @param panelId - The payload of the {@link XEventsTypes.UserClickedPanelToggleButton} event.\n *\n * @public\n */\n const togglePanel = (panelId: string) => {\n if (props.panelId === panelId) {\n isOpen.value = !isOpen.value\n }\n }\n\n $x.on('UserClickedPanelToggleButton', false).subscribe(togglePanel)\n\n /**\n * Emits the {@link XEventsTypes.TogglePanelStateChanged} event, when the internal state\n * changes.\n *\n * @remarks This event is necessary to link the state with the {@link BaseIdTogglePanelButton}\n * component.\n * @public\n */\n watch(\n () => isOpen.value,\n () => {\n $x.emit('TogglePanelStateChanged', isOpen.value, {\n id: props.panelId,\n target: document.getElementById(props.panelId) as HTMLElement,\n })\n },\n { immediate: true },\n )\n\n return { isOpen }\n },\n})\n</script>\n\n<docs lang=\"mdx\">\n## Events\n\nA list of events that the component will watch:\n\n- [`UserClickedPanelToggleButton`](https://github.com/empathyco/x/blob/main/packages/x-components/src/wiring/events.types.ts):\n the event is emitted after the user clicks the button. The event payload is the id of the panelId\n that is going to be toggled.\n\n## Examples\n\n### Basic usage\n\nUsing default slot:\n\n```vue\n<template>\n <div>\n <BaseIdTogglePanelButton panelId=\"myToggle\">\n <img src=\"./open-button-icon.svg\" />\n <span>Toggle Aside</span>\n </BaseIdTogglePanelButton>\n <BaseIdTogglePanel :startOpen=\"true\" :animation=\"animation\" panelId=\"myToggle\">\n <div class=\"x-text1\">My toggle</div>\n </BaseIdTogglePanel>\n </div>\n</template>\n\n<script>\nimport {\n BaseIdTogglePanel,\n BaseIdTogglePanelButton,\n CollapseFromTop,\n} from '@empathyco/x-components'\n\nexport default {\n components: {\n BaseIdTogglePanel,\n BaseIdTogglePanelButton,\n CollapseFromTop,\n },\n data: function () {\n return {\n animation: CollapseFromTop,\n }\n },\n}\n</script>\n```\n</docs>\n"],"names":["_createBlock","_withCtx","_renderSlot"],"mappings":";;;;;;sBACEA,WAGkB,CAAA,0BAAA,EAAA;AAAA,IAHA,IAAM,EAAA,IAAA,CAAA,MAAA;AAAA,IAAS,SAAW,EAAA,IAAA,CAAA,SAAA;AAAA,GAAA,EAAA;AAD9C,IAAA,OAAA,EAAAC,OAAA,CAGI,MAAQ;AAAA,MAARC,UAAQ,CAAA,IAAA,CAAA,MAAA,EAAA,SAAA,CAAA;AAAA,KAAA,CAAA;AAHZ,IAAA,CAAA,EAAA,CAAA;AAAA;AAAA,GAAA,EAAA,CAAA,EAAA,CAAA,MAAA,EAAA,WAAA,CAAA,CAAA,CAAA;;;;;;"}
1
+ {"version":3,"file":"base-id-toggle-panel.vue.js","sources":["../../../../src/components/panels/base-id-toggle-panel.vue"],"sourcesContent":["<template>\n <BaseTogglePanel :open=\"isOpen\" :animation=\"animation\">\n <!-- @slot (Required) Default content -->\n <slot />\n </BaseTogglePanel>\n</template>\n\n<script lang=\"ts\">\nimport { defineComponent, ref, watch } from 'vue'\nimport { use$x } from '../../composables'\nimport { AnimationProp } from '../../types'\nimport { NoAnimation } from '../animations'\nimport BaseTogglePanel from './base-toggle-panel.vue'\n\n/**\n * Simple panel that could receives its initial open state via prop, if not the default is opens\n * and a required prop, named `panelId`, which are responsible of rendering default slot\n * inside a configurable transition.\n *\n * It reacts to `UserClickedPanelToggleButton` event, when their payload matches the component's\n * 'panelId' prop, to handle its open/close state.\n *\n * The default slot offers the possibility to customise the modal content.\n *\n * @public\n */\nexport default defineComponent({\n name: 'BaseIdTogglePanel',\n components: { BaseTogglePanel },\n props: {\n /** Shows the panel open at the beginning or not, depending on its state. */\n startOpen: {\n type: Boolean,\n default: true,\n },\n /** Animation component that will be used to animate the panel content. */\n animation: {\n type: AnimationProp,\n default: () => NoAnimation,\n },\n /**\n * The id to link with the BaseIdTogglePanelButton.\n * Both components must use the same Id to make them interact.\n */\n panelId: {\n type: String,\n required: true,\n },\n },\n setup(props) {\n const $x = use$x()\n\n /** Whether the toggle panel is open or not. */\n const isOpen = ref(props.startOpen)\n\n /**\n * Method to subscribe to the {@link XEventsTypes.UserClickedPanelToggleButton} event.\n *\n * @param panelId - The payload of the {@link XEventsTypes.UserClickedPanelToggleButton} event.\n *\n * @public\n */\n const togglePanel = (panelId: string) => {\n if (props.panelId === panelId) {\n isOpen.value = !isOpen.value\n }\n }\n\n $x.on('UserClickedPanelToggleButton', false).subscribe(togglePanel)\n\n /**\n * Emits the {@link XEventsTypes.TogglePanelStateChanged} event, when the internal state\n * changes.\n *\n * @remarks This event is necessary to link the state with the {@link BaseIdTogglePanelButton}\n * component.\n * @public\n */\n watch(\n () => isOpen.value,\n () => {\n $x.emit('TogglePanelStateChanged', isOpen.value, {\n id: props.panelId,\n target: document.getElementById(props.panelId) as HTMLElement,\n })\n },\n { immediate: true },\n )\n\n return { isOpen }\n },\n})\n</script>\n\n<docs lang=\"mdx\">\n## Events\n\nA list of events that the component will watch:\n\n- [`UserClickedPanelToggleButton`](https://github.com/empathyco/x/blob/main/packages/x-components/src/wiring/events.types.ts):\n the event is emitted after the user clicks the button. The event payload is the id of the panelId\n that is going to be toggled.\n\n## Examples\n\n### Basic usage\n\nUsing default slot:\n\n```vue\n<template>\n <div>\n <BaseIdTogglePanelButton panelId=\"myToggle\">\n <img src=\"./open-button-icon.svg\" />\n <span>Toggle Aside</span>\n </BaseIdTogglePanelButton>\n <BaseIdTogglePanel :startOpen=\"true\" :animation=\"animation\" panelId=\"myToggle\">\n <div class=\"x-text1\">My toggle</div>\n </BaseIdTogglePanel>\n </div>\n</template>\n\n<script>\nimport {\n BaseIdTogglePanel,\n BaseIdTogglePanelButton,\n CollapseFromTop,\n} from '@empathyco/x-components'\n\nexport default {\n components: {\n BaseIdTogglePanel,\n BaseIdTogglePanelButton,\n CollapseFromTop,\n },\n data: function () {\n return {\n animation: CollapseFromTop,\n }\n },\n}\n</script>\n```\n</docs>\n"],"names":["_createBlock","_renderSlot"],"mappings":";;;;;;sBACEA,WAGkB,CAAA,0BAAA,EAAA;AAAA,IAHA,IAAM,EAAA,IAAA,CAAA,MAAA;AAAA,IAAS,SAAW,EAAA,IAAA,CAAA,SAAA;AAAA,GAAA,EAAA;qBAE1C,MAAQ;AAAA,MAARC,UAAQ,CAAA,IAAA,CAAA,MAAA,EAAA,SAAA,CAAA;AAAA,KAAA,CAAA;;;;;;;;;"}
@@ -1 +1 @@
1
- {"version":3,"file":"base-tabs-panel.vue.js","sources":["../../../../src/components/panels/base-tabs-panel.vue"],"sourcesContent":["<template>\n <section v-if=\"getTabs().length > 0\" class=\"x-tabs-panel\" data-test=\"base-tabs-panel\">\n <component\n :is=\"tabsAnimation\"\n class=\"x-tabs-panel__items-list\"\n :class=\"tabsListClass\"\n data-test=\"base-tabs-panel-list\"\n role=\"tablist\"\n >\n <!--\n @slot Slot used to replace the whole tab.\n @binding {string} tab - The tab name.\n @binding {boolean} isSelected - Indicates if the tab is selected.\n @binding {function} select - Function to select the tab.\n -->\n <slot\n v-for=\"tab in getTabs()\"\n name=\"tab\"\n v-bind=\"{ tab, isSelected: tabIsSelected(tab), select: () => selectTab(tab) }\"\n >\n <button\n :id=\"`base-tabs-panel-${tab}`\"\n :key=\"tab\"\n class=\"x-tabs-panel__list-item x-tabs-panel__button x-button\"\n :class=\"tabIsSelected(tab) ? activeTabClass : tabClass\"\n :aria-selected=\"tabIsSelected(tab).toString()\"\n data-test=\"base-tabs-panel-button\"\n role=\"tab\"\n @click=\"selectTab(tab)\"\n >\n <!--\n @slot Slot used to just pass the content.\n @binding {string} tab - The tab name.\n @binding {boolean} isSelected - Indicates if the tab is selected.\n -->\n <slot name=\"tab-content\" v-bind=\"{ tab, isSelected: tabIsSelected(tab) }\">\n {{ tab }}\n </slot>\n </button>\n </slot>\n </component>\n\n <component :is=\"contentAnimation\">\n <div\n v-if=\"selectedTab && slots[selectedTab]\"\n :key=\"selectedTab\"\n :class=\"contentClass\"\n :aria-labelledby=\"`base-tabs-panel-${selectedTab}`\"\n data-test=\"base-tabs-panel-content\"\n role=\"tabpanel\"\n >\n <!--\n @slot Slot used to display the selected tab content.\n @binding {string} tab - This content's tab name.\n @binding {function} selectTab - Function to select a tab.\n @binding {function} deselectTab - Function to deselect the tab.\n -->\n <slot\n :name=\"selectedTab\"\n v-bind=\"{ tab: selectedTab, selectTab, deselectTab: () => selectTab(selectedTab) }\"\n />\n </div>\n </component>\n </section>\n</template>\n\n<script lang=\"ts\">\nimport { defineComponent, ref } from 'vue'\nimport { AnimationProp } from '../../types'\nimport { NoAnimation } from '../animations'\n\n/**\n * Base Tabs Panel.\n *\n * @public\n */\nexport default defineComponent({\n name: 'BaseTabsPanel',\n props: {\n /**\n * Animation component that will be used to animate the tabs list.\n *\n * @public\n */\n tabsAnimation: {\n type: AnimationProp,\n default: 'header',\n },\n /**\n * Animation component that will be used to animate the selected tab content.\n *\n * @public\n */\n contentAnimation: {\n type: AnimationProp,\n default: () => NoAnimation,\n },\n /**\n * The tab to be initially selected.\n *\n * @public\n */\n initialTab: {\n type: String,\n default: '',\n },\n /**\n * Allows the tabs to be unselected.\n *\n * @public\n */\n allowTabDeselect: {\n type: Boolean,\n default: false,\n },\n /** Class inherited by content element. */\n activeTabClass: String,\n /** Class inherited by content element. */\n contentClass: String,\n /** Class inherited by content element. */\n tabClass: String,\n /** Class inherited by content element. */\n tabsListClass: String,\n },\n setup(props, { slots }) {\n /**\n * The currently selected tab.\n *\n * @internal\n */\n const selectedTab = ref(props.initialTab)\n\n /**\n * Extracts the tab from the slots.\n *\n * @returns The list of tabs.\n *\n * @internal\n */\n const getTabs = () =>\n Object.keys(slots).filter(slotName => !['tab', 'tab-content'].includes(slotName))\n\n /**\n * Changes the current selected tab. If the tab is already selected\n * and `allowTabDeselect` is `true`, the tab will be unselected.\n *\n * @param tab - The tab to be selected.\n *\n * @internal\n */\n const selectTab = (tab: string) => {\n if (props.allowTabDeselect && selectedTab.value === tab) {\n selectedTab.value = ''\n } else {\n selectedTab.value = tab\n }\n }\n\n /**\n * Checks if a tab is selected.\n *\n * @param tab - Tab to check.\n * @returns True if the tab is selected, false otherwise.\n *\n * @internal\n */\n const tabIsSelected = (tab: string) => selectedTab.value === tab\n\n return {\n selectedTab,\n slots,\n getTabs,\n selectTab,\n tabIsSelected,\n }\n },\n})\n</script>\n\n<style lang=\"css\" scoped>\n.x-tabs-panel__items-list {\n display: flex;\n}\n</style>\n\n<docs lang=\"mdx\">\n## Events\n\nThis component emits no events.\n\n## Examples\n\nThis component renders a list of tabs based on the name of the slots passed on its template. By\ndefault, the name of each slot will be used as tab label. If an initial tab is passed by prop, the\ncontent of its correspondent slot will displayed in a panel. Otherwise, no content will be displayed\nuntil a tab is selected.\n\n### Basic example\n\nIt renders a list of tabs and, when a tab is clicked, a panel with its content will be displayed.\n\n```vue\n<template>\n <BaseTabsPanel>\n <template #summer>\n <div>Summer Top Sales</div>\n </template>\n\n <template #fall>\n <div>Fall Top Sales</div>\n </template>\n\n <template #outlet>\n <div>Outlet Top Sales</div>\n </template>\n </BaseTabsPanel>\n</template>\n\n<script>\nimport { BaseTabsPanel } from '@empathyco/x-components'\n\nexport default {\n name: 'BaseTabsPanelDemo',\n components: {\n BaseTabsPanel,\n },\n}\n</script>\n```\n\n### Play with props\n\n#### Define the tab to be initially opened\n\nBy default, no tab is selected so any panel is displayed. The `initialTab` prop allows to indicate\nwhich tab should be opened at first.\n\n```vue\n<template>\n <BaseTabsPanel initialTab=\"summer\">\n <template #summer>\n <div>Summer Top Sales</div>\n </template>\n\n <template #fall>\n <div>Fall Top Sales</div>\n </template>\n\n <template #outlet>\n <div>Outlet Top Sales</div>\n </template>\n </BaseTabsPanel>\n</template>\n\n<script>\nimport { BaseTabsPanel } from '@empathyco/x-components'\n\nexport default {\n name: 'BaseTabsPanelDemo',\n components: {\n BaseTabsPanel,\n },\n}\n</script>\n```\n\n#### Allowing tabs deselection\n\nThe prop `allowTabDeselect` allows the tabs to be deselected. When a tab that is already selected is\nclicked again, the tab will be deselected and no panel content will be displayed. By default, this\nbehavior is deactivated.\n\n```vue\n<template>\n <BaseTabsPanel initialTab=\"summer\" allowTabDeselect>\n <template #summer>\n <div>Summer Top Sales</div>\n </template>\n\n <template #fall>\n <div>Fall Top Sales</div>\n </template>\n\n <template #outlet>\n <div>Outlet Top Sales</div>\n </template>\n </BaseTabsPanel>\n</template>\n\n<script>\nimport { BaseTabsPanel } from '@empathyco/x-components'\n\nexport default {\n name: 'BaseTabsPanelDemo',\n components: {\n BaseTabsPanel,\n },\n}\n</script>\n```\n\n#### Customizing the content with classes\n\n- The `activeTabClass` prop can be used to add classes to the active tab button.\n- The `contentClass` prop can be used to add classes to the content.\n- The `tabClass` prop can be used to add classes to the tab buttons.\n- The `tabsListClass` prop can be used to add classes to the tabs list.\n\n```vue\n<template>\n <BaseTabsPanel\n activeTabClass=\"x-button-auxiliary\"\n contentClass=\"x-p-12 x-bg-auxiliary-25\"\n tabClass=\"x-button-ghost\"\n tabListClass=\"x-flex-col\"\n >\n <template #summer>\n <div>Summer Top Sales</div>\n </template>\n\n <template #fall>\n <div>Fall Top Sales</div>\n </template>\n\n <template #outlet>\n <div>Outlet Top Sales</div>\n </template>\n </BaseTabsPanel>\n</template>\n\n<script>\nimport { BaseTabsPanel } from '@empathyco/x-components'\n\nexport default {\n name: 'BaseTabsPanelDemo',\n components: {\n BaseTabsPanel,\n },\n}\n</script>\n```\n\n#### Play with the animations\n\n- The `tabsAnimation` prop can be used to animate the tabs list.\n- The `contentAnimation` prop can be used to animate the selected tab content.\n\n```vue\n<template>\n <BaseTabsPanel :tabsAnimation=\"staggeredFadeAndSlide\" :contentAnimation=\"staggeredFadeAndSlide\">\n <template #summer>\n <div>Summer Top Sales</div>\n </template>\n\n <template #fall>\n <div>Fall Top Sales</div>\n </template>\n </BaseTabsPanel>\n</template>\n\n<script>\nimport { BaseTabsPanel, StaggeredFadeAndSlide } from '@empathyco/x-components'\n\nexport default {\n name: 'BaseTabsPanelDemo',\n components: {\n BaseTabsPanel,\n },\n data() {\n return {\n staggeredFadeAndSlide: StaggeredFadeAndSlide,\n }\n },\n}\n</script>\n```\n\n### Overriding the slots\n\n#### Customizing the tab button\n\nBy default, the component is rendering a button for each tab to be displayed. This button can be\nreplaced entirely through the `tab` slot.\n\n```vue\n<template>\n <BaseTabsPanel>\n <template #tab=\"{ tab, isSelected, select }\">\n <CheckIcon v-if=\"isSelected\" />\n This is the {{ tab }} tab.\n <button @click=\"select\">Open tab</button>\n </template>\n\n <template #summer>\n <div>Summer Top Sales</div>\n </template>\n\n <template #fall>\n <div>Fall Top Sales</div>\n </template>\n\n <template #outlet>\n <div>Outlet Top Sales</div>\n </template>\n </BaseTabsPanel>\n</template>\n\n<script>\nimport { BaseTabsPanel, CheckIcon } from '@empathyco/x-components'\n\nexport default {\n name: 'BaseTabsPanelDemo',\n components: {\n BaseTabsPanel,\n CheckIcon,\n },\n}\n</script>\n```\n\n#### Customizing the tab button content\n\nAlternatively to the previous example, instead of changing the whole tab button, the slot\n`tab-content` offers the possibility of changing just its contents.\n\n```vue\n<template>\n <BaseTabsPanel>\n <template #tab-content=\"{ tab, isSelected }\">\n <CheckIcon v-if=\"isSelected\" />\n {{ tab }}\n </template>\n\n <template #summer>\n <div>Summer Top Sales</div>\n </template>\n\n <template #fall>\n <div>Fall Top Sales</div>\n </template>\n\n <template #outlet>\n <div>Outlet Top Sales</div>\n </template>\n </BaseTabsPanel>\n</template>\n\n<script>\nimport { BaseTabsPanel, CheckIcon } from '@empathyco/x-components'\n\nexport default {\n name: 'BaseTabsPanelDemo',\n components: {\n BaseTabsPanel,\n CheckIcon,\n },\n}\n</script>\n```\n\n#### Customizing the tab panel content\n\nThe displayed tab name and a method to select a tab are exposed to the tab panel content slot.\n\n```vue\n<template>\n <BaseTabsPanel>\n <template #summer=\"{ tab, selectTab, deselectTab }\">\n <h1>{{ tab }}</h1>\n <button @click=\"() => selectTab('fall')\">Open Fall</button>\n <button @click=\"deselectTab\">Close tab</button>\n </template>\n\n <template #fall>\n <div>Fall Top Sales</div>\n </template>\n </BaseTabsPanel>\n</template>\n\n<script>\nimport { BaseTabsPanel } from '@empathyco/x-components'\n\nexport default {\n name: 'BaseTabsPanelDemo',\n components: {\n BaseTabsPanel,\n },\n}\n</script>\n```\n</docs>\n"],"names":["_openBlock","_createElementBlock","_createBlock","_resolveDynamicComponent","_normalizeClass","_withCtx","_Fragment","_renderList","_renderSlot","_mergeProps","_createTextVNode","_toDisplayString","_normalizeProps","_guardReactiveProps","_createCommentVNode"],"mappings":"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"}
1
+ {"version":3,"file":"base-tabs-panel.vue.js","sources":["../../../../src/components/panels/base-tabs-panel.vue"],"sourcesContent":["<template>\n <section v-if=\"getTabs().length > 0\" class=\"x-tabs-panel\" data-test=\"base-tabs-panel\">\n <component\n :is=\"tabsAnimation\"\n class=\"x-tabs-panel__items-list\"\n :class=\"tabsListClass\"\n data-test=\"base-tabs-panel-list\"\n role=\"tablist\"\n >\n <!--\n @slot Slot used to replace the whole tab.\n @binding {string} tab - The tab name.\n @binding {boolean} isSelected - Indicates if the tab is selected.\n @binding {function} select - Function to select the tab.\n -->\n <slot\n v-for=\"tab in getTabs()\"\n name=\"tab\"\n v-bind=\"{ tab, isSelected: tabIsSelected(tab), select: () => selectTab(tab) }\"\n >\n <button\n :id=\"`base-tabs-panel-${tab}`\"\n :key=\"tab\"\n class=\"x-tabs-panel__list-item x-tabs-panel__button x-button\"\n :class=\"tabIsSelected(tab) ? activeTabClass : tabClass\"\n :aria-selected=\"tabIsSelected(tab).toString()\"\n data-test=\"base-tabs-panel-button\"\n role=\"tab\"\n @click=\"selectTab(tab)\"\n >\n <!--\n @slot Slot used to just pass the content.\n @binding {string} tab - The tab name.\n @binding {boolean} isSelected - Indicates if the tab is selected.\n -->\n <slot name=\"tab-content\" v-bind=\"{ tab, isSelected: tabIsSelected(tab) }\">\n {{ tab }}\n </slot>\n </button>\n </slot>\n </component>\n\n <component :is=\"contentAnimation\">\n <div\n v-if=\"selectedTab && slots[selectedTab]\"\n :key=\"selectedTab\"\n :class=\"contentClass\"\n :aria-labelledby=\"`base-tabs-panel-${selectedTab}`\"\n data-test=\"base-tabs-panel-content\"\n role=\"tabpanel\"\n >\n <!--\n @slot Slot used to display the selected tab content.\n @binding {string} tab - This content's tab name.\n @binding {function} selectTab - Function to select a tab.\n @binding {function} deselectTab - Function to deselect the tab.\n -->\n <slot\n :name=\"selectedTab\"\n v-bind=\"{ tab: selectedTab, selectTab, deselectTab: () => selectTab(selectedTab) }\"\n />\n </div>\n </component>\n </section>\n</template>\n\n<script lang=\"ts\">\nimport { defineComponent, ref } from 'vue'\nimport { AnimationProp } from '../../types'\nimport { NoAnimation } from '../animations'\n\n/**\n * Base Tabs Panel.\n *\n * @public\n */\nexport default defineComponent({\n name: 'BaseTabsPanel',\n props: {\n /**\n * Animation component that will be used to animate the tabs list.\n *\n * @public\n */\n tabsAnimation: {\n type: AnimationProp,\n default: 'header',\n },\n /**\n * Animation component that will be used to animate the selected tab content.\n *\n * @public\n */\n contentAnimation: {\n type: AnimationProp,\n default: () => NoAnimation,\n },\n /**\n * The tab to be initially selected.\n *\n * @public\n */\n initialTab: {\n type: String,\n default: '',\n },\n /**\n * Allows the tabs to be unselected.\n *\n * @public\n */\n allowTabDeselect: {\n type: Boolean,\n default: false,\n },\n /** Class inherited by content element. */\n activeTabClass: String,\n /** Class inherited by content element. */\n contentClass: String,\n /** Class inherited by content element. */\n tabClass: String,\n /** Class inherited by content element. */\n tabsListClass: String,\n },\n setup(props, { slots }) {\n /**\n * The currently selected tab.\n *\n * @internal\n */\n const selectedTab = ref(props.initialTab)\n\n /**\n * Extracts the tab from the slots.\n *\n * @returns The list of tabs.\n *\n * @internal\n */\n const getTabs = () =>\n Object.keys(slots).filter(slotName => !['tab', 'tab-content'].includes(slotName))\n\n /**\n * Changes the current selected tab. If the tab is already selected\n * and `allowTabDeselect` is `true`, the tab will be unselected.\n *\n * @param tab - The tab to be selected.\n *\n * @internal\n */\n const selectTab = (tab: string) => {\n if (props.allowTabDeselect && selectedTab.value === tab) {\n selectedTab.value = ''\n } else {\n selectedTab.value = tab\n }\n }\n\n /**\n * Checks if a tab is selected.\n *\n * @param tab - Tab to check.\n * @returns True if the tab is selected, false otherwise.\n *\n * @internal\n */\n const tabIsSelected = (tab: string) => selectedTab.value === tab\n\n return {\n selectedTab,\n slots,\n getTabs,\n selectTab,\n tabIsSelected,\n }\n },\n})\n</script>\n\n<style lang=\"css\" scoped>\n.x-tabs-panel__items-list {\n display: flex;\n}\n</style>\n\n<docs lang=\"mdx\">\n## Events\n\nThis component emits no events.\n\n## Examples\n\nThis component renders a list of tabs based on the name of the slots passed on its template. By\ndefault, the name of each slot will be used as tab label. If an initial tab is passed by prop, the\ncontent of its correspondent slot will displayed in a panel. Otherwise, no content will be displayed\nuntil a tab is selected.\n\n### Basic example\n\nIt renders a list of tabs and, when a tab is clicked, a panel with its content will be displayed.\n\n```vue\n<template>\n <BaseTabsPanel>\n <template #summer>\n <div>Summer Top Sales</div>\n </template>\n\n <template #fall>\n <div>Fall Top Sales</div>\n </template>\n\n <template #outlet>\n <div>Outlet Top Sales</div>\n </template>\n </BaseTabsPanel>\n</template>\n\n<script>\nimport { BaseTabsPanel } from '@empathyco/x-components'\n\nexport default {\n name: 'BaseTabsPanelDemo',\n components: {\n BaseTabsPanel,\n },\n}\n</script>\n```\n\n### Play with props\n\n#### Define the tab to be initially opened\n\nBy default, no tab is selected so any panel is displayed. The `initialTab` prop allows to indicate\nwhich tab should be opened at first.\n\n```vue\n<template>\n <BaseTabsPanel initialTab=\"summer\">\n <template #summer>\n <div>Summer Top Sales</div>\n </template>\n\n <template #fall>\n <div>Fall Top Sales</div>\n </template>\n\n <template #outlet>\n <div>Outlet Top Sales</div>\n </template>\n </BaseTabsPanel>\n</template>\n\n<script>\nimport { BaseTabsPanel } from '@empathyco/x-components'\n\nexport default {\n name: 'BaseTabsPanelDemo',\n components: {\n BaseTabsPanel,\n },\n}\n</script>\n```\n\n#### Allowing tabs deselection\n\nThe prop `allowTabDeselect` allows the tabs to be deselected. When a tab that is already selected is\nclicked again, the tab will be deselected and no panel content will be displayed. By default, this\nbehavior is deactivated.\n\n```vue\n<template>\n <BaseTabsPanel initialTab=\"summer\" allowTabDeselect>\n <template #summer>\n <div>Summer Top Sales</div>\n </template>\n\n <template #fall>\n <div>Fall Top Sales</div>\n </template>\n\n <template #outlet>\n <div>Outlet Top Sales</div>\n </template>\n </BaseTabsPanel>\n</template>\n\n<script>\nimport { BaseTabsPanel } from '@empathyco/x-components'\n\nexport default {\n name: 'BaseTabsPanelDemo',\n components: {\n BaseTabsPanel,\n },\n}\n</script>\n```\n\n#### Customizing the content with classes\n\n- The `activeTabClass` prop can be used to add classes to the active tab button.\n- The `contentClass` prop can be used to add classes to the content.\n- The `tabClass` prop can be used to add classes to the tab buttons.\n- The `tabsListClass` prop can be used to add classes to the tabs list.\n\n```vue\n<template>\n <BaseTabsPanel\n activeTabClass=\"x-button-auxiliary\"\n contentClass=\"x-p-12 x-bg-auxiliary-25\"\n tabClass=\"x-button-ghost\"\n tabListClass=\"x-flex-col\"\n >\n <template #summer>\n <div>Summer Top Sales</div>\n </template>\n\n <template #fall>\n <div>Fall Top Sales</div>\n </template>\n\n <template #outlet>\n <div>Outlet Top Sales</div>\n </template>\n </BaseTabsPanel>\n</template>\n\n<script>\nimport { BaseTabsPanel } from '@empathyco/x-components'\n\nexport default {\n name: 'BaseTabsPanelDemo',\n components: {\n BaseTabsPanel,\n },\n}\n</script>\n```\n\n#### Play with the animations\n\n- The `tabsAnimation` prop can be used to animate the tabs list.\n- The `contentAnimation` prop can be used to animate the selected tab content.\n\n```vue\n<template>\n <BaseTabsPanel :tabsAnimation=\"staggeredFadeAndSlide\" :contentAnimation=\"staggeredFadeAndSlide\">\n <template #summer>\n <div>Summer Top Sales</div>\n </template>\n\n <template #fall>\n <div>Fall Top Sales</div>\n </template>\n </BaseTabsPanel>\n</template>\n\n<script>\nimport { BaseTabsPanel, StaggeredFadeAndSlide } from '@empathyco/x-components'\n\nexport default {\n name: 'BaseTabsPanelDemo',\n components: {\n BaseTabsPanel,\n },\n data() {\n return {\n staggeredFadeAndSlide: StaggeredFadeAndSlide,\n }\n },\n}\n</script>\n```\n\n### Overriding the slots\n\n#### Customizing the tab button\n\nBy default, the component is rendering a button for each tab to be displayed. This button can be\nreplaced entirely through the `tab` slot.\n\n```vue\n<template>\n <BaseTabsPanel>\n <template #tab=\"{ tab, isSelected, select }\">\n <CheckIcon v-if=\"isSelected\" />\n This is the {{ tab }} tab.\n <button @click=\"select\">Open tab</button>\n </template>\n\n <template #summer>\n <div>Summer Top Sales</div>\n </template>\n\n <template #fall>\n <div>Fall Top Sales</div>\n </template>\n\n <template #outlet>\n <div>Outlet Top Sales</div>\n </template>\n </BaseTabsPanel>\n</template>\n\n<script>\nimport { BaseTabsPanel, CheckIcon } from '@empathyco/x-components'\n\nexport default {\n name: 'BaseTabsPanelDemo',\n components: {\n BaseTabsPanel,\n CheckIcon,\n },\n}\n</script>\n```\n\n#### Customizing the tab button content\n\nAlternatively to the previous example, instead of changing the whole tab button, the slot\n`tab-content` offers the possibility of changing just its contents.\n\n```vue\n<template>\n <BaseTabsPanel>\n <template #tab-content=\"{ tab, isSelected }\">\n <CheckIcon v-if=\"isSelected\" />\n {{ tab }}\n </template>\n\n <template #summer>\n <div>Summer Top Sales</div>\n </template>\n\n <template #fall>\n <div>Fall Top Sales</div>\n </template>\n\n <template #outlet>\n <div>Outlet Top Sales</div>\n </template>\n </BaseTabsPanel>\n</template>\n\n<script>\nimport { BaseTabsPanel, CheckIcon } from '@empathyco/x-components'\n\nexport default {\n name: 'BaseTabsPanelDemo',\n components: {\n BaseTabsPanel,\n CheckIcon,\n },\n}\n</script>\n```\n\n#### Customizing the tab panel content\n\nThe displayed tab name and a method to select a tab are exposed to the tab panel content slot.\n\n```vue\n<template>\n <BaseTabsPanel>\n <template #summer=\"{ tab, selectTab, deselectTab }\">\n <h1>{{ tab }}</h1>\n <button @click=\"() => selectTab('fall')\">Open Fall</button>\n <button @click=\"deselectTab\">Close tab</button>\n </template>\n\n <template #fall>\n <div>Fall Top Sales</div>\n </template>\n </BaseTabsPanel>\n</template>\n\n<script>\nimport { BaseTabsPanel } from '@empathyco/x-components'\n\nexport default {\n name: 'BaseTabsPanelDemo',\n components: {\n BaseTabsPanel,\n },\n}\n</script>\n```\n</docs>\n"],"names":["_openBlock","_createElementBlock","_createBlock","_resolveDynamicComponent","_normalizeClass","_Fragment","_renderList","_renderSlot","_mergeProps","_createTextVNode","_withCtx","_normalizeProps","_guardReactiveProps","_createCommentVNode"],"mappings":"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"}
@@ -1 +1 @@
1
- {"version":3,"file":"base-toggle-panel.vue.js","sources":["../../../../src/components/panels/base-toggle-panel.vue"],"sourcesContent":["<template>\n <component :is=\"animation\">\n <div v-if=\"open\" class=\"x-toggle-panel\" data-test=\"base-toggle-panel\">\n <!-- @slot (Required) Default content -->\n <slot />\n </div>\n </component>\n</template>\n\n<script lang=\"ts\">\nimport { defineComponent } from 'vue'\nimport { AnimationProp } from '../../types/animation-prop'\n\n/**\n * Simple panel that receives its open state via prop, which is responsible of rendering\n * default slot inside a configurable transition.\n *\n * @public\n */\nexport default defineComponent({\n props: {\n /**\n * Handles if the panel is rendered. It is used with v-if instead of v-show to get better\n * performance.\n *\n * @public\n */\n open: {\n type: Boolean,\n required: true,\n },\n /**\n * Animation component that will be used to animate the panel content.\n *\n * @public\n */\n animation: {\n type: AnimationProp,\n default: 'div',\n },\n },\n})\n</script>\n\n<docs lang=\"mdx\">\n## Examples\n\nSimple panel that receives its open state via prop, which is responsible of rendering default slot\ninside a configurable transition.\n\n### Basic usage\n\nUsing default slot:\n\n```vue\n<BaseTogglePanel :open=\"true\" :animation=\"collapseFromTop\">\n <Filters :filters=\"filters\">\n <template #default=\"{ filter }\">\n <p>{{ filter.label }}</p>\n </template>\n </Filters>\n</BaseTogglePanel>\n```\n</docs>\n"],"names":["_openBlock","_createBlock","_resolveDynamicComponent","_createElementBlock","_renderSlot","_createCommentVNode"],"mappings":";;;;;AAAA,EAAA,GAAA,EAAA,CAAA;AAAA,EAEqB,KAAM,EAAA,gBAAA;AAAA,EAAiB,WAAU,EAAA,mBAAA;;;AADpD,EAAA,OAAAA,SAAA,EAAA,EAAAC,WAAA,CAKYC,wBALI,IAAS,CAAA,SAAA,CAAA,EAAA,IAAA,EAAA;AAAA,IAD3B,iBAEI,MAGM;AAAA,MAHK,IAAA,CAAA,IAAA,IAAAF,SAAA,EAAA,EAAXG,kBAGM,CAAA,KAAA,EAHN,UAGM,EAAA;AAAA,QADJC,UAAQ,CAAA,IAAA,CAAA,MAAA,EAAA,SAAA,CAAA;AAAA,OAJd,CAAA,IAAAC,kBAAA,CAAA,MAAA,EAAA,IAAA,CAAA;AAAA,KAAA,CAAA;AAAA,IAAA,CAAA,EAAA,CAAA;AAAA;AAAA,GAAA,CAAA,CAAA;;;;;;"}
1
+ {"version":3,"file":"base-toggle-panel.vue.js","sources":["../../../../src/components/panels/base-toggle-panel.vue"],"sourcesContent":["<template>\n <component :is=\"animation\">\n <div v-if=\"open\" class=\"x-toggle-panel\" data-test=\"base-toggle-panel\">\n <!-- @slot (Required) Default content -->\n <slot />\n </div>\n </component>\n</template>\n\n<script lang=\"ts\">\nimport { defineComponent } from 'vue'\nimport { AnimationProp } from '../../types/animation-prop'\n\n/**\n * Simple panel that receives its open state via prop, which is responsible of rendering\n * default slot inside a configurable transition.\n *\n * @public\n */\nexport default defineComponent({\n props: {\n /**\n * Handles if the panel is rendered. It is used with v-if instead of v-show to get better\n * performance.\n *\n * @public\n */\n open: {\n type: Boolean,\n required: true,\n },\n /**\n * Animation component that will be used to animate the panel content.\n *\n * @public\n */\n animation: {\n type: AnimationProp,\n default: 'div',\n },\n },\n})\n</script>\n\n<docs lang=\"mdx\">\n## Examples\n\nSimple panel that receives its open state via prop, which is responsible of rendering default slot\ninside a configurable transition.\n\n### Basic usage\n\nUsing default slot:\n\n```vue\n<BaseTogglePanel :open=\"true\" :animation=\"collapseFromTop\">\n <Filters :filters=\"filters\">\n <template #default=\"{ filter }\">\n <p>{{ filter.label }}</p>\n </template>\n </Filters>\n</BaseTogglePanel>\n```\n</docs>\n"],"names":["_openBlock","_createBlock","_resolveDynamicComponent","_withCtx","_createElementBlock","_renderSlot","_createCommentVNode"],"mappings":";;;;;;EAEqB,KAAM,EAAA,gBAAA;AAAA,EAAiB,WAAU,EAAA,mBAAA;;;AADpD,EAAA,OAAAA,SAAA,EAAA,EAAAC,WAAA,CAKYC,wBALI,IAAS,CAAA,SAAA,CAAA,EAAA,IAAA,EAAA;AAAA,IAAA,OAAA,EAAAC,OAAA,CACvB,MAGM;AAAA,MAHK,IAAA,CAAA,IAAA,IAAAH,SAAA,EAAA,EAAXI,kBAGM,CAAA,KAAA,EAHN,UAGM,EAAA;AAAA,QADJC,UAAQ,CAAA,IAAA,CAAA,MAAA,EAAA,SAAA,CAAA;AAAA,OAAA,CAAA,IAAAC,kBAAA,CAAA,MAAA,EAAA,IAAA,CAAA;;;;;;;;;;"}