@searchcraft/javascript-sdk 0.8.1 → 0.9.0

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 (289) hide show
  1. package/README.md +25 -37
  2. package/dist/components/defineCustomElements.d.ts +1 -0
  3. package/dist/components/defineCustomElements.js +46 -0
  4. package/dist/components/index.d.ts +44 -11
  5. package/dist/components/index.js +104 -53
  6. package/dist/components/index.js.map +1 -1
  7. package/dist/components/p-05872320.js +1462 -0
  8. package/dist/components/p-05872320.js.map +1 -0
  9. package/dist/components/{p-433f974c.js → p-11b05b94.js} +5 -5
  10. package/dist/components/p-11b05b94.js.map +1 -0
  11. package/dist/components/{p-ae78be68.js → p-3026f7d3.js} +18 -127
  12. package/dist/components/p-3026f7d3.js.map +1 -0
  13. package/dist/components/{p-ec0d230e.js → p-3568414f.js} +4 -4
  14. package/dist/components/p-3568414f.js.map +1 -0
  15. package/dist/{cjs/SearchcraftStore-75fac5e0.js → components/p-6d8b0ead.js} +1408 -1350
  16. package/dist/components/p-6d8b0ead.js.map +1 -0
  17. package/dist/components/{p-d19bf6ff.js → p-71cc28c1.js} +2 -2
  18. package/dist/components/p-71cc28c1.js.map +1 -0
  19. package/dist/components/{p-fc7cda96.js → p-7777d986.js} +4 -4
  20. package/dist/components/{p-fc7cda96.js.map → p-7777d986.js.map} +1 -1
  21. package/dist/components/p-b0bc5cee.js +102 -0
  22. package/dist/components/p-b0bc5cee.js.map +1 -0
  23. package/dist/components/{p-4e9cd62e.js → p-bb12ab5a.js} +3 -3
  24. package/dist/components/{p-4e9cd62e.js.map → p-bb12ab5a.js.map} +1 -1
  25. package/dist/components/{p-97332d3e.js → p-cd9ba361.js} +3 -3
  26. package/dist/components/p-cd9ba361.js.map +1 -0
  27. package/dist/components/searchcraft-ad.d.ts +11 -0
  28. package/dist/components/searchcraft-ad.js +8 -0
  29. package/dist/components/searchcraft-ad.js.map +1 -0
  30. package/dist/components/searchcraft-base-search-result.js +1 -1
  31. package/dist/components/searchcraft-base-search-results.js +79 -29
  32. package/dist/components/searchcraft-base-search-results.js.map +1 -1
  33. package/dist/components/searchcraft-button.js +1 -1
  34. package/dist/components/searchcraft-facet-list.js +1 -1
  35. package/dist/components/searchcraft-filter-panel.js +7 -7
  36. package/dist/components/searchcraft-filter-panel.js.map +1 -1
  37. package/dist/components/searchcraft-input-form.js +1 -1
  38. package/dist/components/searchcraft-pagination.js +5 -5
  39. package/dist/components/searchcraft-pagination.js.map +1 -1
  40. package/dist/components/searchcraft-popover-button.js +3 -3
  41. package/dist/components/searchcraft-popover-button.js.map +1 -1
  42. package/dist/components/searchcraft-popover-form.js +28 -35
  43. package/dist/components/searchcraft-popover-form.js.map +1 -1
  44. package/dist/components/searchcraft-popover-list-item.js +1 -1
  45. package/dist/components/searchcraft-popover-list-view.js +1 -1
  46. package/dist/components/searchcraft-results-info.js +2 -2
  47. package/dist/components/searchcraft-results-info.js.map +1 -1
  48. package/dist/components/searchcraft-search-results-per-page.js +3 -3
  49. package/dist/components/searchcraft-search-results-per-page.js.map +1 -1
  50. package/dist/components/searchcraft-slider.js +1 -1
  51. package/dist/components/searchcraft-theme.js +1 -1
  52. package/dist/components/searchcraft-theme.js.map +1 -1
  53. package/dist/components/searchcraft-toggle-button.js +1 -1
  54. package/dist/types/components/searchcraft-ad/searchcraft-ad.d.ts +19 -0
  55. package/dist/types/components/searchcraft-base-search-results/searchcraft-base-search-results.d.ts +10 -7
  56. package/dist/types/components/searchcraft-facet-list/searchcraft-facet-list.d.ts +1 -1
  57. package/dist/types/components/searchcraft-input-form/searchcraft-input-form.d.ts +4 -29
  58. package/dist/types/components/searchcraft-popover-form/searchcraft-popover-form.d.ts +1 -11
  59. package/dist/types/components/searchcraft-popover-list-view/searchcraft-popover-list-view.d.ts +4 -0
  60. package/dist/types/components.d.ts +33 -158
  61. package/dist/types/index.d.ts +10 -1
  62. package/dist/types/store/SearchcraftStore.d.ts +4 -0
  63. package/dist/types/{provider → store}/SearchcraftStore.types.d.ts +2 -1
  64. package/dist/{collection/provider/store.js → types/store/index.d.ts} +2 -2
  65. package/package.json +8 -17
  66. package/dist/cjs/SearchcraftStore-75fac5e0.js.map +0 -1
  67. package/dist/cjs/app-globals-3a1e7e63.js +0 -7
  68. package/dist/cjs/app-globals-3a1e7e63.js.map +0 -1
  69. package/dist/cjs/index-5b0b9d4c.js +0 -84
  70. package/dist/cjs/index-5b0b9d4c.js.map +0 -1
  71. package/dist/cjs/index-a81df4f0.js +0 -1577
  72. package/dist/cjs/index-a81df4f0.js.map +0 -1
  73. package/dist/cjs/index.cjs.js +0 -14
  74. package/dist/cjs/index.cjs.js.map +0 -1
  75. package/dist/cjs/loader.cjs.js +0 -17
  76. package/dist/cjs/loader.cjs.js.map +0 -1
  77. package/dist/cjs/searchcraft-base-search-result_2.cjs.entry.js +0 -152
  78. package/dist/cjs/searchcraft-base-search-result_2.cjs.entry.js.map +0 -1
  79. package/dist/cjs/searchcraft-base-search-results.cjs.entry.js +0 -97
  80. package/dist/cjs/searchcraft-base-search-results.cjs.entry.js.map +0 -1
  81. package/dist/cjs/searchcraft-button_3.cjs.entry.js +0 -88
  82. package/dist/cjs/searchcraft-button_3.cjs.entry.js.map +0 -1
  83. package/dist/cjs/searchcraft-facet-list_3.cjs.entry.js +0 -393
  84. package/dist/cjs/searchcraft-facet-list_3.cjs.entry.js.map +0 -1
  85. package/dist/cjs/searchcraft-filter-panel.cjs.entry.js +0 -113
  86. package/dist/cjs/searchcraft-filter-panel.cjs.entry.js.map +0 -1
  87. package/dist/cjs/searchcraft-input-form_2.cjs.entry.js +0 -260
  88. package/dist/cjs/searchcraft-input-form_2.cjs.entry.js.map +0 -1
  89. package/dist/cjs/searchcraft-javascript-sdk.cjs.js +0 -27
  90. package/dist/cjs/searchcraft-javascript-sdk.cjs.js.map +0 -1
  91. package/dist/cjs/searchcraft-pagination.cjs.entry.js +0 -106
  92. package/dist/cjs/searchcraft-pagination.cjs.entry.js.map +0 -1
  93. package/dist/cjs/searchcraft-popover-button.cjs.entry.js +0 -22
  94. package/dist/cjs/searchcraft-popover-button.cjs.entry.js.map +0 -1
  95. package/dist/cjs/searchcraft-popover-form.cjs.entry.js +0 -234
  96. package/dist/cjs/searchcraft-popover-form.cjs.entry.js.map +0 -1
  97. package/dist/cjs/searchcraft-popover-list-item_2.cjs.entry.js +0 -101
  98. package/dist/cjs/searchcraft-popover-list-item_2.cjs.entry.js.map +0 -1
  99. package/dist/cjs/searchcraft-results-info.cjs.entry.js +0 -80
  100. package/dist/cjs/searchcraft-results-info.cjs.entry.js.map +0 -1
  101. package/dist/cjs/searchcraft-search-results-per-page.cjs.entry.js +0 -75
  102. package/dist/cjs/searchcraft-search-results-per-page.cjs.entry.js.map +0 -1
  103. package/dist/cjs/searchcraft-select.cjs.entry.js +0 -70
  104. package/dist/cjs/searchcraft-select.cjs.entry.js.map +0 -1
  105. package/dist/cjs/searchcraft-theme.cjs.entry.js +0 -56
  106. package/dist/cjs/searchcraft-theme.cjs.entry.js.map +0 -1
  107. package/dist/cjs/styles-7b2d06f2.js +0 -28
  108. package/dist/cjs/styles-7b2d06f2.js.map +0 -1
  109. package/dist/cjs/units-fe4d8083.js +0 -88
  110. package/dist/cjs/units-fe4d8083.js.map +0 -1
  111. package/dist/collection/collection-manifest.json +0 -32
  112. package/dist/collection/components/searchcraft-base-search-result/searchcraft-base-search-result.js +0 -302
  113. package/dist/collection/components/searchcraft-base-search-result/searchcraft-base-search-result.js.map +0 -1
  114. package/dist/collection/components/searchcraft-base-search-result-ad/searchcraft-base-search-result-ad.js +0 -73
  115. package/dist/collection/components/searchcraft-base-search-result-ad/searchcraft-base-search-result-ad.js.map +0 -1
  116. package/dist/collection/components/searchcraft-base-search-results/searchcraft-base-search-results.js +0 -313
  117. package/dist/collection/components/searchcraft-base-search-results/searchcraft-base-search-results.js.map +0 -1
  118. package/dist/collection/components/searchcraft-button/searchcraft-button.js +0 -217
  119. package/dist/collection/components/searchcraft-button/searchcraft-button.js.map +0 -1
  120. package/dist/collection/components/searchcraft-error-message/searchcraft-error-message.js +0 -44
  121. package/dist/collection/components/searchcraft-error-message/searchcraft-error-message.js.map +0 -1
  122. package/dist/collection/components/searchcraft-facet-list/searchcraft-facet-list.js +0 -200
  123. package/dist/collection/components/searchcraft-facet-list/searchcraft-facet-list.js.map +0 -1
  124. package/dist/collection/components/searchcraft-filter-panel/searchcraft-filter-panel.js +0 -149
  125. package/dist/collection/components/searchcraft-filter-panel/searchcraft-filter-panel.js.map +0 -1
  126. package/dist/collection/components/searchcraft-input-form/searchcraft-input-form.js +0 -443
  127. package/dist/collection/components/searchcraft-input-form/searchcraft-input-form.js.map +0 -1
  128. package/dist/collection/components/searchcraft-input-label/searchcraft-input-label.js +0 -67
  129. package/dist/collection/components/searchcraft-input-label/searchcraft-input-label.js.map +0 -1
  130. package/dist/collection/components/searchcraft-pagination/searchcraft-pagination.js +0 -141
  131. package/dist/collection/components/searchcraft-pagination/searchcraft-pagination.js.map +0 -1
  132. package/dist/collection/components/searchcraft-popover-button/searchcraft-popover-button.js +0 -15
  133. package/dist/collection/components/searchcraft-popover-button/searchcraft-popover-button.js.map +0 -1
  134. package/dist/collection/components/searchcraft-popover-form/searchcraft-popover-form.js +0 -381
  135. package/dist/collection/components/searchcraft-popover-form/searchcraft-popover-form.js.map +0 -1
  136. package/dist/collection/components/searchcraft-popover-list-item/searchcraft-popover-list-item.js +0 -128
  137. package/dist/collection/components/searchcraft-popover-list-item/searchcraft-popover-list-item.js.map +0 -1
  138. package/dist/collection/components/searchcraft-popover-list-item-ad/searchcraft-popover-list-item-ad.js +0 -73
  139. package/dist/collection/components/searchcraft-popover-list-item-ad/searchcraft-popover-list-item-ad.js.map +0 -1
  140. package/dist/collection/components/searchcraft-popover-list-view/searchcraft-popover-list-view.js +0 -141
  141. package/dist/collection/components/searchcraft-popover-list-view/searchcraft-popover-list-view.js.map +0 -1
  142. package/dist/collection/components/searchcraft-results-info/searchcraft-results-info.js +0 -138
  143. package/dist/collection/components/searchcraft-results-info/searchcraft-results-info.js.map +0 -1
  144. package/dist/collection/components/searchcraft-search-results-per-page/searchcraft-search-results-per-page.js +0 -129
  145. package/dist/collection/components/searchcraft-search-results-per-page/searchcraft-search-results-per-page.js.map +0 -1
  146. package/dist/collection/components/searchcraft-select/searchcraft-select.js +0 -261
  147. package/dist/collection/components/searchcraft-select/searchcraft-select.js.map +0 -1
  148. package/dist/collection/components/searchcraft-slider/searchcraft-slider.js +0 -194
  149. package/dist/collection/components/searchcraft-slider/searchcraft-slider.js.map +0 -1
  150. package/dist/collection/components/searchcraft-theme/searchcraft-theme.js +0 -97
  151. package/dist/collection/components/searchcraft-theme/searchcraft-theme.js.map +0 -1
  152. package/dist/collection/components/searchcraft-toggle-button/searchcraft-toggle-button.js +0 -118
  153. package/dist/collection/components/searchcraft-toggle-button/searchcraft-toggle-button.js.map +0 -1
  154. package/dist/collection/index.js +0 -3
  155. package/dist/collection/index.js.map +0 -1
  156. package/dist/collection/provider/SearchcraftStore.js +0 -160
  157. package/dist/collection/provider/SearchcraftStore.js.map +0 -1
  158. package/dist/collection/provider/SearchcraftStore.types.js +0 -2
  159. package/dist/collection/provider/SearchcraftStore.types.js.map +0 -1
  160. package/dist/collection/provider/store.js.map +0 -1
  161. package/dist/collection/utils/facets.js +0 -128
  162. package/dist/collection/utils/facets.js.map +0 -1
  163. package/dist/collection/utils/index.js +0 -4
  164. package/dist/collection/utils/index.js.map +0 -1
  165. package/dist/collection/utils/styles.js +0 -22
  166. package/dist/collection/utils/styles.js.map +0 -1
  167. package/dist/collection/utils/units.js +0 -83
  168. package/dist/collection/utils/units.js.map +0 -1
  169. package/dist/components/p-25ee7496.js +0 -58
  170. package/dist/components/p-25ee7496.js.map +0 -1
  171. package/dist/components/p-38419178.js +0 -1625
  172. package/dist/components/p-38419178.js.map +0 -1
  173. package/dist/components/p-433f974c.js.map +0 -1
  174. package/dist/components/p-97332d3e.js.map +0 -1
  175. package/dist/components/p-ae78be68.js.map +0 -1
  176. package/dist/components/p-bff4d3fc.js +0 -65
  177. package/dist/components/p-bff4d3fc.js.map +0 -1
  178. package/dist/components/p-d19bf6ff.js.map +0 -1
  179. package/dist/components/p-de4a48b1.js +0 -65
  180. package/dist/components/p-de4a48b1.js.map +0 -1
  181. package/dist/components/p-ec0d230e.js.map +0 -1
  182. package/dist/components/searchcraft-base-search-result-ad.d.ts +0 -11
  183. package/dist/components/searchcraft-base-search-result-ad.js +0 -8
  184. package/dist/components/searchcraft-base-search-result-ad.js.map +0 -1
  185. package/dist/components/searchcraft-popover-list-item-ad.d.ts +0 -11
  186. package/dist/components/searchcraft-popover-list-item-ad.js +0 -8
  187. package/dist/components/searchcraft-popover-list-item-ad.js.map +0 -1
  188. package/dist/esm/SearchcraftStore-3cfd565a.js +0 -1625
  189. package/dist/esm/SearchcraftStore-3cfd565a.js.map +0 -1
  190. package/dist/esm/app-globals-0f993ce5.js +0 -5
  191. package/dist/esm/app-globals-0f993ce5.js.map +0 -1
  192. package/dist/esm/index-3608c57d.js +0 -1548
  193. package/dist/esm/index-3608c57d.js.map +0 -1
  194. package/dist/esm/index-72ac5051.js +0 -82
  195. package/dist/esm/index-72ac5051.js.map +0 -1
  196. package/dist/esm/index.js +0 -4
  197. package/dist/esm/index.js.map +0 -1
  198. package/dist/esm/loader.js +0 -13
  199. package/dist/esm/loader.js.map +0 -1
  200. package/dist/esm/searchcraft-base-search-result_2.entry.js +0 -147
  201. package/dist/esm/searchcraft-base-search-result_2.entry.js.map +0 -1
  202. package/dist/esm/searchcraft-base-search-results.entry.js +0 -93
  203. package/dist/esm/searchcraft-base-search-results.entry.js.map +0 -1
  204. package/dist/esm/searchcraft-button_3.entry.js +0 -82
  205. package/dist/esm/searchcraft-button_3.entry.js.map +0 -1
  206. package/dist/esm/searchcraft-facet-list_3.entry.js +0 -387
  207. package/dist/esm/searchcraft-facet-list_3.entry.js.map +0 -1
  208. package/dist/esm/searchcraft-filter-panel.entry.js +0 -109
  209. package/dist/esm/searchcraft-filter-panel.entry.js.map +0 -1
  210. package/dist/esm/searchcraft-input-form_2.entry.js +0 -255
  211. package/dist/esm/searchcraft-input-form_2.entry.js.map +0 -1
  212. package/dist/esm/searchcraft-javascript-sdk.js +0 -22
  213. package/dist/esm/searchcraft-javascript-sdk.js.map +0 -1
  214. package/dist/esm/searchcraft-pagination.entry.js +0 -102
  215. package/dist/esm/searchcraft-pagination.entry.js.map +0 -1
  216. package/dist/esm/searchcraft-popover-button.entry.js +0 -18
  217. package/dist/esm/searchcraft-popover-button.entry.js.map +0 -1
  218. package/dist/esm/searchcraft-popover-form.entry.js +0 -230
  219. package/dist/esm/searchcraft-popover-form.entry.js.map +0 -1
  220. package/dist/esm/searchcraft-popover-list-item_2.entry.js +0 -96
  221. package/dist/esm/searchcraft-popover-list-item_2.entry.js.map +0 -1
  222. package/dist/esm/searchcraft-results-info.entry.js +0 -76
  223. package/dist/esm/searchcraft-results-info.entry.js.map +0 -1
  224. package/dist/esm/searchcraft-search-results-per-page.entry.js +0 -71
  225. package/dist/esm/searchcraft-search-results-per-page.entry.js.map +0 -1
  226. package/dist/esm/searchcraft-select.entry.js +0 -66
  227. package/dist/esm/searchcraft-select.entry.js.map +0 -1
  228. package/dist/esm/searchcraft-theme.entry.js +0 -52
  229. package/dist/esm/searchcraft-theme.entry.js.map +0 -1
  230. package/dist/esm/styles-961644ef.js +0 -25
  231. package/dist/esm/styles-961644ef.js.map +0 -1
  232. package/dist/esm/units-daaf96f5.js +0 -84
  233. package/dist/esm/units-daaf96f5.js.map +0 -1
  234. package/dist/index.cjs.js +0 -1
  235. package/dist/index.js +0 -1
  236. package/dist/loader/cdn.js +0 -1
  237. package/dist/loader/index.cjs.js +0 -1
  238. package/dist/loader/index.d.ts +0 -24
  239. package/dist/loader/index.es2017.js +0 -1
  240. package/dist/loader/index.js +0 -2
  241. package/dist/loader/package.json +0 -11
  242. package/dist/searchcraft-javascript-sdk/index.esm.js +0 -2
  243. package/dist/searchcraft-javascript-sdk/index.esm.js.map +0 -1
  244. package/dist/searchcraft-javascript-sdk/p-279f3e15.entry.js +0 -2
  245. package/dist/searchcraft-javascript-sdk/p-279f3e15.entry.js.map +0 -1
  246. package/dist/searchcraft-javascript-sdk/p-2bc82b48.entry.js +0 -2
  247. package/dist/searchcraft-javascript-sdk/p-2bc82b48.entry.js.map +0 -1
  248. package/dist/searchcraft-javascript-sdk/p-2dc07b47.entry.js +0 -2
  249. package/dist/searchcraft-javascript-sdk/p-2dc07b47.entry.js.map +0 -1
  250. package/dist/searchcraft-javascript-sdk/p-38419178.js +0 -11
  251. package/dist/searchcraft-javascript-sdk/p-38419178.js.map +0 -1
  252. package/dist/searchcraft-javascript-sdk/p-5cdc6210.js +0 -7
  253. package/dist/searchcraft-javascript-sdk/p-5cdc6210.js.map +0 -1
  254. package/dist/searchcraft-javascript-sdk/p-5e064c07.entry.js +0 -2
  255. package/dist/searchcraft-javascript-sdk/p-5e064c07.entry.js.map +0 -1
  256. package/dist/searchcraft-javascript-sdk/p-6104fe5d.js +0 -2
  257. package/dist/searchcraft-javascript-sdk/p-6104fe5d.js.map +0 -1
  258. package/dist/searchcraft-javascript-sdk/p-69da4e58.entry.js +0 -2
  259. package/dist/searchcraft-javascript-sdk/p-69da4e58.entry.js.map +0 -1
  260. package/dist/searchcraft-javascript-sdk/p-6bffd3f5.entry.js +0 -2
  261. package/dist/searchcraft-javascript-sdk/p-6bffd3f5.entry.js.map +0 -1
  262. package/dist/searchcraft-javascript-sdk/p-75779e4b.entry.js +0 -2
  263. package/dist/searchcraft-javascript-sdk/p-75779e4b.entry.js.map +0 -1
  264. package/dist/searchcraft-javascript-sdk/p-7e13c128.js +0 -3
  265. package/dist/searchcraft-javascript-sdk/p-7e13c128.js.map +0 -1
  266. package/dist/searchcraft-javascript-sdk/p-7f4dd50c.entry.js +0 -2
  267. package/dist/searchcraft-javascript-sdk/p-7f4dd50c.entry.js.map +0 -1
  268. package/dist/searchcraft-javascript-sdk/p-9340f4e4.entry.js +0 -2
  269. package/dist/searchcraft-javascript-sdk/p-9340f4e4.entry.js.map +0 -1
  270. package/dist/searchcraft-javascript-sdk/p-a84b1548.entry.js +0 -2
  271. package/dist/searchcraft-javascript-sdk/p-a84b1548.entry.js.map +0 -1
  272. package/dist/searchcraft-javascript-sdk/p-b8ea0454.entry.js +0 -2
  273. package/dist/searchcraft-javascript-sdk/p-b8ea0454.entry.js.map +0 -1
  274. package/dist/searchcraft-javascript-sdk/p-c4a9d8ab.entry.js +0 -2
  275. package/dist/searchcraft-javascript-sdk/p-c4a9d8ab.entry.js.map +0 -1
  276. package/dist/searchcraft-javascript-sdk/p-d2fffca9.entry.js +0 -2
  277. package/dist/searchcraft-javascript-sdk/p-d2fffca9.entry.js.map +0 -1
  278. package/dist/searchcraft-javascript-sdk/p-d9551738.js +0 -2
  279. package/dist/searchcraft-javascript-sdk/p-d9551738.js.map +0 -1
  280. package/dist/searchcraft-javascript-sdk/p-e11de2d6.entry.js +0 -2
  281. package/dist/searchcraft-javascript-sdk/p-e11de2d6.entry.js.map +0 -1
  282. package/dist/searchcraft-javascript-sdk/p-e1255160.js +0 -2
  283. package/dist/searchcraft-javascript-sdk/p-e1255160.js.map +0 -1
  284. package/dist/searchcraft-javascript-sdk/searchcraft-javascript-sdk.esm.js +0 -2
  285. package/dist/searchcraft-javascript-sdk/searchcraft-javascript-sdk.esm.js.map +0 -1
  286. package/dist/types/components/searchcraft-base-search-result-ad/searchcraft-base-search-result-ad.d.ts +0 -14
  287. package/dist/types/components/searchcraft-popover-list-item-ad/searchcraft-popover-list-item-ad.d.ts +0 -14
  288. package/dist/types/provider/SearchcraftStore.d.ts +0 -4
  289. package/dist/types/provider/store.d.ts +0 -3
@@ -1,393 +0,0 @@
1
- 'use strict';
2
-
3
- Object.defineProperty(exports, '__esModule', { value: true });
4
-
5
- const index = require('./index-a81df4f0.js');
6
- const index$1 = require('./index-5b0b9d4c.js');
7
- const SearchcraftStore = require('./SearchcraftStore-75fac5e0.js');
8
- const units = require('./units-fe4d8083.js');
9
-
10
- function deepMergeWithSpread(obj1, obj2) {
11
- const result = { ...obj1 };
12
- for (const key in obj2) {
13
- // biome-ignore lint/suspicious/noPrototypeBuiltins: <explanation>
14
- if (obj2.hasOwnProperty(key)) {
15
- if (obj2[key] instanceof Object && obj1[key] instanceof Object) {
16
- result[key] = deepMergeWithSpread(obj1[key], obj2[key]);
17
- }
18
- else {
19
- result[key] = obj2[key];
20
- }
21
- }
22
- }
23
- return result;
24
- }
25
- /**
26
- * Given an array of facet paths, removes parent facet paths.
27
- */
28
- function removeSubstringMatches(arr) {
29
- return arr.filter((entry, index, array) => !array.some((otherEntry, otherIndex) => otherIndex !== index && otherEntry.includes(entry)));
30
- }
31
- function facetToRecord(facet) {
32
- const records = {};
33
- const traverseAndAddToFragments = (facetChild) => {
34
- records[facetChild.path] = {
35
- count: facetChild.count,
36
- path: facetChild.path,
37
- };
38
- facetChild.children?.forEach((child) => {
39
- traverseAndAddToFragments(child);
40
- });
41
- };
42
- traverseAndAddToFragments(facet);
43
- return records;
44
- }
45
- function recordToObject(record) {
46
- const root = {
47
- count: 0,
48
- path: '/',
49
- children: {},
50
- };
51
- Object.keys(record).forEach((key) => {
52
- const fragment = record[key];
53
- if (!fragment) {
54
- return;
55
- }
56
- if (fragment.path === '/') {
57
- return;
58
- }
59
- const pathParts = fragment.path.substring(1).split('/');
60
- let currentRoot = root;
61
- let currentPath = '';
62
- pathParts.forEach((part, index) => {
63
- const nextPath = `${currentPath}/${part}`;
64
- if (!currentRoot.children[nextPath]) {
65
- currentRoot.children[nextPath] = {
66
- count: 0,
67
- path: nextPath,
68
- children: {},
69
- };
70
- }
71
- if (index === pathParts.length - 1) {
72
- currentRoot.children[nextPath].count = fragment.count;
73
- }
74
- currentPath = nextPath;
75
- currentRoot = currentRoot.children[nextPath];
76
- });
77
- });
78
- return root;
79
- }
80
- function objectToFacet(childObject) {
81
- const transformed = {
82
- count: childObject.count,
83
- path: childObject.path,
84
- children: [],
85
- };
86
- if (Object.keys(childObject.children).length > 0) {
87
- transformed.children = Object.values(childObject.children).map((subChildObject) => objectToFacet(subChildObject));
88
- }
89
- return transformed;
90
- }
91
- /**
92
- * Filters records with the parent paths from record2 OUT of record1
93
- */
94
- function filterRecordByParentPaths(record1, record2) {
95
- // Extract all paths (keys) both records
96
- const paths1 = Object.keys(record1);
97
- const paths2 = Object.keys(record2);
98
- // Find all parent paths in record2
99
- const parentPaths = new Set(paths2
100
- .filter((path) => path.split('/').length > 2) // Only consider paths with more than one level
101
- .map((path) => path.substring(0, path.lastIndexOf('/'))));
102
- // Filter out keys in record1 that share a parent path with any of the identified parent paths
103
- const filteredRecord = Object.fromEntries(paths1
104
- .filter((path) => !parentPaths.has(path.substring(0, path.lastIndexOf('/'))))
105
- .map((path) => [path, record1[path]]));
106
- return filteredRecord;
107
- }
108
- function mergeFacetRoots(fieldName, currentRoot, incomingRoot) {
109
- const currentArray = currentRoot[fieldName];
110
- const incomingArray = incomingRoot[fieldName];
111
- const currentRootFacetChild = {
112
- count: 0,
113
- path: '/',
114
- children: currentArray,
115
- };
116
- const incomingRootFacetChild = {
117
- count: 0,
118
- path: '/',
119
- children: incomingArray,
120
- };
121
- // Flatten them into records
122
- const currentRecord = facetToRecord(currentRootFacetChild);
123
- const incomingRecord = facetToRecord(incomingRootFacetChild);
124
- // Filter out the records from record1 (the current set of records)
125
- // that share a parent path with record2 (the incoming records)
126
- const filteredCurrentRecord = filterRecordByParentPaths(currentRecord, incomingRecord);
127
- // Deep merge the records together
128
- const mergedRecord = deepMergeWithSpread(filteredCurrentRecord, incomingRecord);
129
- // Convert into a heirarchical object
130
- const mergedObject = recordToObject(mergedRecord);
131
- // Convert the heirarchical object back to the Facet child structure
132
- const mergedFacetChild = objectToFacet(mergedObject);
133
- return {
134
- [fieldName]: mergedFacetChild.children,
135
- };
136
- }
137
-
138
- const SearchcraftFacetList = class {
139
- constructor(hostRef) {
140
- index.registerInstance(this, hostRef);
141
- this.facetSelectionUpdated = index.createEvent(this, "facetSelectionUpdated", 7);
142
- }
143
- /**
144
- * The name of the field where facets are applied.
145
- */
146
- fieldName = '';
147
- /**
148
- * When the facets are updated.
149
- */
150
- facetSelectionUpdated;
151
- baseFacetRoot;
152
- facetRoot;
153
- selectedPaths = {};
154
- lastTimeTaken;
155
- hasNewSearchTerm = false;
156
- lastSearchTerm;
157
- lastSearchMode;
158
- lastSortType;
159
- unsubscribe;
160
- searchStore = SearchcraftStore.useSearchcraftStore.getState();
161
- handleStateUpdate(state) {
162
- const facetPrime = state.searchResponseFacetPrime;
163
- const timeTaken = state.searchResponseTimeTaken;
164
- if (!this.fieldName) {
165
- return;
166
- }
167
- /** Things to do when the state's search term has changed, but before the response received */
168
- if (state.searchTerm !== this.lastSearchTerm ||
169
- state.searchMode !== this.lastSearchMode ||
170
- state.sortType !== this.lastSortType) {
171
- this.selectedPaths = {};
172
- this.hasNewSearchTerm = true;
173
- }
174
- /** Things to do when a new response with a new facet prime has been received */
175
- if (timeTaken !== this.lastTimeTaken && facetPrime) {
176
- this.facetRoot = undefined;
177
- const incomingFacetRoot = facetPrime.find((facet) => this.fieldName === Object.keys(facet)[0]);
178
- /** Data is from a new search term: completely override our facets */
179
- if (this.hasNewSearchTerm) {
180
- this.baseFacetRoot = incomingFacetRoot;
181
- this.facetRoot = incomingFacetRoot;
182
- this.hasNewSearchTerm = false;
183
- }
184
- else if (this.baseFacetRoot && incomingFacetRoot) {
185
- /** Data is from an existing search term, merge the facets together */
186
- this.facetRoot = mergeFacetRoots(this.fieldName, this.baseFacetRoot, incomingFacetRoot);
187
- }
188
- }
189
- this.lastSearchTerm = state.searchTerm;
190
- this.lastSearchMode = state.searchMode;
191
- this.lastSortType = state.sortType;
192
- this.lastTimeTaken = timeTaken;
193
- }
194
- connectedCallback() {
195
- this.handleStateUpdate(this.searchStore);
196
- this.unsubscribe = SearchcraftStore.useSearchcraftStore.subscribe((state) => {
197
- this.handleStateUpdate(state);
198
- });
199
- }
200
- disconnectedCallback() {
201
- this.unsubscribe?.();
202
- }
203
- handleCheckboxChange(path) {
204
- const isCheckboxChecked = !this.selectedPaths[path];
205
- if (isCheckboxChecked) {
206
- /**
207
- * Checkbox Checked: Add to the selectedPaths record
208
- * Uses spread operator here so UI updates.
209
- */
210
- this.selectedPaths = {
211
- ...this.selectedPaths,
212
- [path]: true,
213
- };
214
- }
215
- else {
216
- /**
217
- * Checkbox Uncheck: Remove any paths and sub-paths
218
- */
219
- const updatedPaths = Object.keys(this.selectedPaths).filter((testPath) => !testPath.includes(path));
220
- this.selectedPaths = updatedPaths.reduce((acc, str) => {
221
- acc[str] = true;
222
- return acc;
223
- }, {});
224
- }
225
- /**
226
- * Emit the paths array, with parent paths removed.
227
- */
228
- const paths = Object.keys(this.selectedPaths).filter((path) => this.selectedPaths[path]);
229
- const pathsWithParentPathsRemoved = removeSubstringMatches(paths);
230
- this.facetSelectionUpdated?.emit({ paths: pathsWithParentPathsRemoved });
231
- }
232
- formatLabel = (facetChild) => {
233
- const label = facetChild.path.replace(/^\//, '');
234
- const count = facetChild.count;
235
- return `${label.replace(/-/g, ' ').replace(/\b\w/g, (char) => char.toUpperCase())} (${count})`;
236
- };
237
- formatSubLabel = (facetChild, facetChildAncestor) => {
238
- const facetChildPath = facetChild.path.substring(facetChildAncestor.path.length);
239
- const label = facetChildPath.replace(/^\//, '');
240
- const count = facetChild.count;
241
- return `${label.replace(/-/g, ' ').replace(/\b\w/g, (char) => char.toUpperCase())} (${count})`;
242
- };
243
- render() {
244
- if (!this.fieldName) {
245
- return;
246
- }
247
- const firstFacet = this.facetRoot?.[this.fieldName];
248
- return (index.h("div", { class: index$1.classNames('filtersListContainer', 'searchcraft-filters-list-container') }, !firstFacet && (index.h("p", { class: 'searchcraft-facet-message' }, "Enter a search to view facets.")), firstFacet?.map((facetChild) => {
249
- const isChildSelected = facetChild.children
250
- ? facetChild.children?.some((child) => this.selectedPaths[child.path])
251
- : false;
252
- return (index.h("div", { key: facetChild.path, class: index$1.classNames('searchcraft-filters-list-item') }, index.h("label", { class: index$1.classNames('filterCheckboxLabel', 'searchcraft-filters-list-checkbox-label') }, index.h("input", { checked: this.selectedPaths[facetChild.path], onChange: (_event) => this.handleCheckboxChange(facetChild.path), type: 'checkbox' }), isChildSelected ? (index.h("div", { class: index$1.classNames('dashContainer', 'searchcraft-filter-list-dash-container') }, index.h("svg", { width: '14', height: '3', viewBox: '0 0 14 3', fill: 'none' }, index.h("title", null, "Checkbox Dash"), index.h("line", { x1: '1.5', y1: '1.5', x2: '12.5', y2: '1.5', stroke: 'white', "stroke-width": '3', "stroke-linecap": 'round' })))) : (index.h("div", { class: index$1.classNames('checkContainer', 'searchcraft-filter-list-check-container') }, index.h("svg", { width: '16', height: '16', viewBox: '0 0 16 16', fill: 'none' }, index.h("title", null, "Checkbox Check"), index.h("path", { d: 'M13.9999 2L5.74988 10L1.99988 6.36364', stroke: 'white', "stroke-width": '3', "stroke-linecap": 'round', "stroke-linejoin": 'round' })))), this.formatLabel(facetChild)), facetChild.children && facetChild.children.length > 0 && (index.h(index.Fragment, null, facetChild.children.map((grandchild) => (index.h("label", { key: grandchild.path, class: index$1.classNames('childFilterCheckboxLabel', 'searchcraft-child-filter-checkbox-label'), style: {
253
- display: this.selectedPaths[facetChild.path]
254
- ? 'flex'
255
- : 'none',
256
- } }, index.h("input", { checked: this.selectedPaths[grandchild.path], onChange: (_event) => {
257
- this.handleCheckboxChange(grandchild.path);
258
- }, type: 'checkbox' }), index.h("div", { class: index$1.classNames('checkContainer', 'searchcraft-filter-list-check-container') }, index.h("svg", { width: '16', height: '16', viewBox: '0 0 16 16', fill: 'none' }, index.h("title", null, "Checkbox Check"), index.h("path", { d: 'M13.9999 2L5.74988 10L1.99988 6.36364', stroke: 'white', "stroke-width": '3', "stroke-linecap": 'round', "stroke-linejoin": 'round' }))), this.formatSubLabel(grandchild, facetChild))))))));
259
- })));
260
- }
261
- };
262
-
263
- const SearchcraftSlider = class {
264
- constructor(hostRef) {
265
- index.registerInstance(this, hostRef);
266
- this.rangeChanged = index.createEvent(this, "rangeChanged", 7);
267
- }
268
- /**
269
- * The maximum value allowed.
270
- */
271
- max = 100;
272
- /**
273
- * The minimum value allowed.
274
- */
275
- min = 0;
276
- /**
277
- * The granularity that the value must adhere to.
278
- */
279
- granularity = units.getMillis('month');
280
- /** The type of data allowed. */
281
- dataType = 'number';
282
- endValue = this.max;
283
- startValue = this.min;
284
- lastFocusedHandle = 'max';
285
- /**
286
- * When the range has changed.
287
- * */
288
- rangeChanged;
289
- componentDidLoad() {
290
- this.startValue = this.min;
291
- this.endValue = this.max;
292
- }
293
- emitUpdate = async () => {
294
- this.rangeChanged?.emit({
295
- startValue: this.startValue,
296
- endValue: this.endValue,
297
- });
298
- };
299
- handleStartValueChange = (event) => {
300
- const inputElement = event.target;
301
- const value = Number.parseInt(inputElement.value, 10);
302
- this.lastFocusedHandle = 'min';
303
- if (value <= this.endValue) {
304
- this.startValue = value;
305
- this.emitUpdate();
306
- }
307
- else {
308
- this.startValue = this.endValue;
309
- inputElement.value = `${this.endValue}`;
310
- }
311
- };
312
- handleEndValueChange = (event) => {
313
- const inputElement = event.target;
314
- const value = Number.parseInt(inputElement.value, 10);
315
- this.lastFocusedHandle = 'max';
316
- if (value >= this.startValue) {
317
- this.endValue = value;
318
- this.emitUpdate();
319
- }
320
- else {
321
- this.endValue = this.startValue;
322
- inputElement.value = `${this.startValue}`;
323
- }
324
- };
325
- render() {
326
- const rangeMin = this.min;
327
- const rangeMax = this.max;
328
- const startPercent = ((this.startValue - rangeMin) / (rangeMax - rangeMin)) * 100;
329
- const endPercent = ((this.endValue - rangeMin) / (rangeMax - rangeMin)) * 100;
330
- const startLabel = this.dataType === 'number'
331
- ? this.startValue
332
- : new Date(this.startValue).getFullYear();
333
- const endLabel = this.dataType === 'number'
334
- ? this.endValue
335
- : new Date(this.endValue).getFullYear();
336
- return (index.h("div", { key: 'c5dd33e5dbeb14c6acf1a3caa2101c8aff186abf', class: 'searchcraft-slider-container' }, index.h("div", { key: '208354ad0176cfaa498ac4bb58cc584dd1976026', class: 'searchcraft-slider-range-container' }, index.h("div", { key: '9ad0890810211c2d5b9e4588d67d43a85f76f0bb', class: 'searchcraft-slider-active-range', style: {
337
- left: `${startPercent}%`,
338
- width: `${endPercent - startPercent}%`,
339
- } }), index.h("input", { key: '80d5d3847424991564fff0b6d16a0659b35fdcc2', class: index$1.classNames('searchcraft-slider-input', 'searchcraft-slider-input-min-handle'), max: this.max, min: this.min, onInput: this.handleStartValueChange.bind(this), step: this.granularity, style: { zIndex: this.lastFocusedHandle === 'min' ? '2' : '1' }, type: 'range', value: this.startValue }), index.h("input", { key: '063f4fc243a64dc3743d6cd8fbe6776e65f0d79e', class: index$1.classNames('searchcraft-slider-input', 'searchcraft-slider-input-max-handle'), max: this.max, min: this.min, onInput: this.handleEndValueChange.bind(this), step: this.granularity, style: { zIndex: this.lastFocusedHandle === 'max' ? '2' : '1' }, type: 'range', value: this.endValue })), index.h("div", { key: '148f3b70984ae66b0fe765d0351df380719fb5d8', class: 'searchcraft-slider-label-container' }, index.h("span", { key: 'e5f1ad86454262abcb5261eba7b3555e59822b49', class: 'searchcraft-slider-label' }, startLabel), index.h("span", { key: 'beac7a99a5a8fc1416712e4877eaf65574d8a42e', class: 'searchcraft-slider-label' }, endLabel))));
340
- }
341
- };
342
-
343
- const SearchcraftToggleButton = class {
344
- constructor(hostRef) {
345
- index.registerInstance(this, hostRef);
346
- this.toggleUpdated = index.createEvent(this, "toggleUpdated", 7);
347
- }
348
- /**
349
- * The label.
350
- */
351
- label = 'Toggle';
352
- /**
353
- * The secondary label displayed below the main label.
354
- */
355
- subLabel;
356
- /**
357
- * When the toggle element is changed.
358
- */
359
- toggleUpdated;
360
- isActive = false;
361
- unsubscribe;
362
- lastSearchTerm;
363
- handleToggle = async () => {
364
- this.isActive = !this.isActive;
365
- this.toggleUpdated?.emit(this.isActive);
366
- };
367
- connectedCallback() {
368
- /** When the query changes, sets toggle button state back to inactive. */
369
- this.unsubscribe = SearchcraftStore.useSearchcraftStore.subscribe((state) => {
370
- if (state.searchTerm !== this.lastSearchTerm &&
371
- state.searchTerm.trim().length === 0) {
372
- this.isActive = false;
373
- }
374
- this.lastSearchTerm = state.searchTerm;
375
- });
376
- }
377
- disconnectedCallback() {
378
- this.unsubscribe?.();
379
- }
380
- render() {
381
- return (index.h("div", { key: 'ff105efef07b5f57127ff83ddb105658398b205d', class: 'searchcraft-toggle-button-container' }, index.h("div", { key: '696046a2cb1f1bd0273bb77fda7c16ed5795422a' }, index.h("p", { key: '93690038f12e2c7cff406a8f8ceeedaa5b871b70', class: 'searchcraft-toggle-button-label' }, this.label), this.subLabel && (index.h("p", { key: '1eaa110307794a4c15812e252d8a6ac7e81e7408', class: 'searchcraft-toggle-button-sub-label' }, this.subLabel))), index.h("button", { key: 'a2671d9696db713763d44d0a84e08aff19bc8aa0', class: index$1.classNames('searchcraft-toggle-button-background', {
382
- active: this.isActive,
383
- }), onClick: this.handleToggle, type: 'button' }, index.h("div", { key: '12874ac4782f756c6568952764777b758452406f', class: index$1.classNames('searchcraft-toggle-button-handle', {
384
- active: this.isActive,
385
- }) }))));
386
- }
387
- };
388
-
389
- exports.searchcraft_facet_list = SearchcraftFacetList;
390
- exports.searchcraft_slider = SearchcraftSlider;
391
- exports.searchcraft_toggle_button = SearchcraftToggleButton;
392
-
393
- //# sourceMappingURL=searchcraft-facet-list_3.cjs.entry.js.map
@@ -1 +0,0 @@
1
- {"file":"searchcraft-facet-list.searchcraft-slider.searchcraft-toggle-button.entry.cjs.js","mappings":"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","names":["useSearchcraftStore","h","classNames","Fragment","getMillis"],"sources":["src/utils/facets.ts","src/components/searchcraft-facet-list/searchcraft-facet-list.tsx","src/components/searchcraft-slider/searchcraft-slider.tsx","src/components/searchcraft-toggle-button/searchcraft-toggle-button.tsx"],"sourcesContent":["import type {\n FacetChild,\n FacetChildObject,\n FacetRoot,\n} from '@searchcraft/core';\n\nfunction deepMergeWithSpread(obj1, obj2) {\n const result = { ...obj1 };\n\n for (const key in obj2) {\n // biome-ignore lint/suspicious/noPrototypeBuiltins: <explanation>\n if (obj2.hasOwnProperty(key)) {\n if (obj2[key] instanceof Object && obj1[key] instanceof Object) {\n result[key] = deepMergeWithSpread(obj1[key], obj2[key]);\n } else {\n result[key] = obj2[key];\n }\n }\n }\n\n return result;\n}\n\n/**\n * Given an array of facet paths, removes parent facet paths.\n */\nexport function removeSubstringMatches(arr: string[]): string[] {\n return arr.filter(\n (entry, index, array) =>\n !array.some(\n (otherEntry, otherIndex) =>\n otherIndex !== index && otherEntry.includes(entry),\n ),\n );\n}\n\ntype FacetChildFragment = {\n count: number;\n path: string;\n};\n\nfunction facetToRecord(facet: FacetChild): Record<string, FacetChildFragment> {\n const records: Record<string, FacetChildFragment> = {};\n\n const traverseAndAddToFragments = (facetChild: FacetChild) => {\n records[facetChild.path] = {\n count: facetChild.count,\n path: facetChild.path,\n };\n\n facetChild.children?.forEach((child) => {\n traverseAndAddToFragments(child);\n });\n };\n\n traverseAndAddToFragments(facet);\n\n return records;\n}\n\nfunction recordToObject(\n record: Record<string, FacetChildFragment>,\n): FacetChildObject {\n const root: FacetChildObject = {\n count: 0,\n path: '/',\n children: {},\n };\n\n Object.keys(record).forEach((key) => {\n const fragment = record[key];\n if (!fragment) {\n return;\n }\n\n if (fragment.path === '/') {\n return;\n }\n const pathParts = fragment.path.substring(1).split('/');\n let currentRoot = root;\n let currentPath = '';\n\n pathParts.forEach((part, index) => {\n const nextPath = `${currentPath}/${part}`;\n if (!currentRoot.children[nextPath]) {\n currentRoot.children[nextPath] = {\n count: 0,\n path: nextPath,\n children: {},\n };\n }\n\n if (index === pathParts.length - 1) {\n currentRoot.children[nextPath].count = fragment.count;\n }\n\n currentPath = nextPath;\n currentRoot = currentRoot.children[nextPath];\n });\n });\n\n return root;\n}\n\nfunction objectToFacet(childObject: FacetChildObject): FacetChild {\n const transformed: FacetChild = {\n count: childObject.count,\n path: childObject.path,\n children: [],\n };\n\n if (Object.keys(childObject.children).length > 0) {\n transformed.children = Object.values(childObject.children).map(\n (subChildObject) => objectToFacet(subChildObject),\n );\n }\n\n return transformed;\n}\n\n/**\n * Filters records with the parent paths from record2 OUT of record1\n */\nfunction filterRecordByParentPaths(\n record1: Record<string, FacetChild>,\n record2: Record<string, FacetChild>,\n): Record<string, FacetChild> {\n // Extract all paths (keys) both records\n const paths1 = Object.keys(record1);\n const paths2 = Object.keys(record2);\n\n // Find all parent paths in record2\n const parentPaths = new Set(\n paths2\n .filter((path) => path.split('/').length > 2) // Only consider paths with more than one level\n .map((path) => path.substring(0, path.lastIndexOf('/'))),\n );\n\n // Filter out keys in record1 that share a parent path with any of the identified parent paths\n const filteredRecord = Object.fromEntries(\n paths1\n .filter(\n (path) => !parentPaths.has(path.substring(0, path.lastIndexOf('/'))),\n )\n .map((path) => [path, record1[path]]), // Reconstruct the key-value pairs\n );\n\n return filteredRecord as Record<string, FacetChild>;\n}\n\nexport function mergeFacetRoots(\n fieldName: string,\n currentRoot: FacetRoot,\n incomingRoot: FacetRoot,\n): FacetRoot {\n const currentArray = currentRoot[fieldName];\n const incomingArray = incomingRoot[fieldName];\n\n const currentRootFacetChild: FacetChild = {\n count: 0,\n path: '/',\n children: currentArray,\n };\n\n const incomingRootFacetChild: FacetChild = {\n count: 0,\n path: '/',\n children: incomingArray,\n };\n\n // Flatten them into records\n const currentRecord: Record<string, FacetChildFragment> = facetToRecord(\n currentRootFacetChild,\n );\n\n const incomingRecord: Record<string, FacetChildFragment> = facetToRecord(\n incomingRootFacetChild,\n );\n\n // Filter out the records from record1 (the current set of records)\n // that share a parent path with record2 (the incoming records)\n const filteredCurrentRecord = filterRecordByParentPaths(\n currentRecord,\n incomingRecord,\n );\n\n // Deep merge the records together\n const mergedRecord: Record<string, FacetChildFragment> = deepMergeWithSpread(\n filteredCurrentRecord,\n incomingRecord,\n );\n\n // Convert into a heirarchical object\n const mergedObject: FacetChildObject = recordToObject(mergedRecord);\n\n // Convert the heirarchical object back to the Facet child structure\n const mergedFacetChild = objectToFacet(mergedObject);\n\n return {\n [fieldName]: mergedFacetChild.children,\n } as FacetRoot;\n}\n","import {\n Component,\n h,\n State,\n Prop,\n Event,\n type EventEmitter,\n Fragment,\n} from '@stencil/core';\nimport classNames from 'classnames';\n\nimport type { FacetChild, FacetRoot } from '@searchcraft/core';\n\nimport { useSearchcraftStore, type SearchcraftState } from '@provider/store';\nimport { mergeFacetRoots, removeSubstringMatches } from '@utils';\n\n/**\n * This web component is designed to display facets in a search interface, allowing users to refine their search results by applying filters based on various attributes.\n * It is consumed within the `searchcraft-filter-panel`.\n *\n * ## Usage\n * ```html\n * <!-- index.html -->\n * <searchcraft-facet-list field-name=\"title\" />\n * ```\n *\n * ```js\n * // index.js\n * const facetList = document.querySelector('searchcraft-facet-list');\n *\n * facetList.addEventListener('facetSelectionUpdated', () => {\n * console.log('Facet selection updated');\n * });\n * ```\n */\n@Component({\n tag: 'searchcraft-facet-list',\n shadow: false,\n})\nexport class SearchcraftFacetList {\n /**\n * The name of the field where facets are applied.\n */\n @Prop() fieldName = '';\n\n /**\n * When the facets are updated.\n */\n @Event() facetSelectionUpdated?: EventEmitter<{ paths: string[] }>;\n\n @State() baseFacetRoot: FacetRoot | undefined;\n @State() facetRoot: FacetRoot | undefined;\n @State() selectedPaths: Record<string, boolean> = {};\n @State() lastTimeTaken: number | undefined;\n @State() hasNewSearchTerm = false;\n\n @State() lastSearchTerm: string | undefined;\n @State() lastSearchMode: string | undefined;\n @State() lastSortType: string | undefined;\n\n @State() unsubscribe: (() => void) | undefined;\n\n private searchStore = useSearchcraftStore.getState();\n\n handleStateUpdate(state: SearchcraftState) {\n const facetPrime = state.searchResponseFacetPrime;\n const timeTaken = state.searchResponseTimeTaken;\n\n if (!this.fieldName) {\n return;\n }\n\n /** Things to do when the state's search term has changed, but before the response received */\n if (\n state.searchTerm !== this.lastSearchTerm ||\n state.searchMode !== this.lastSearchMode ||\n state.sortType !== this.lastSortType\n ) {\n this.selectedPaths = {};\n this.hasNewSearchTerm = true;\n }\n\n /** Things to do when a new response with a new facet prime has been received */\n if (timeTaken !== this.lastTimeTaken && facetPrime) {\n this.facetRoot = undefined;\n const incomingFacetRoot: FacetRoot | undefined = facetPrime.find(\n (facet) => this.fieldName === Object.keys(facet)[0],\n );\n\n /** Data is from a new search term: completely override our facets */\n if (this.hasNewSearchTerm) {\n this.baseFacetRoot = incomingFacetRoot;\n this.facetRoot = incomingFacetRoot;\n this.hasNewSearchTerm = false;\n } else if (this.baseFacetRoot && incomingFacetRoot) {\n /** Data is from an existing search term, merge the facets together */\n this.facetRoot = mergeFacetRoots(\n this.fieldName,\n this.baseFacetRoot,\n incomingFacetRoot,\n );\n }\n }\n\n this.lastSearchTerm = state.searchTerm;\n this.lastSearchMode = state.searchMode;\n this.lastSortType = state.sortType;\n this.lastTimeTaken = timeTaken;\n }\n\n connectedCallback() {\n this.handleStateUpdate(this.searchStore);\n\n this.unsubscribe = useSearchcraftStore.subscribe((state) => {\n this.handleStateUpdate(state);\n });\n }\n\n disconnectedCallback() {\n this.unsubscribe?.();\n }\n\n handleCheckboxChange(path: string) {\n const isCheckboxChecked = !this.selectedPaths[path];\n\n if (isCheckboxChecked) {\n /**\n * Checkbox Checked: Add to the selectedPaths record\n * Uses spread operator here so UI updates.\n */\n this.selectedPaths = {\n ...this.selectedPaths,\n [path]: true,\n };\n } else {\n /**\n * Checkbox Uncheck: Remove any paths and sub-paths\n */\n const updatedPaths = Object.keys(this.selectedPaths).filter(\n (testPath) => !testPath.includes(path),\n );\n\n this.selectedPaths = updatedPaths.reduce(\n (acc, str) => {\n acc[str] = true;\n return acc;\n },\n {} as Record<string, boolean>,\n );\n }\n\n /**\n * Emit the paths array, with parent paths removed.\n */\n const paths = Object.keys(this.selectedPaths).filter(\n (path) => this.selectedPaths[path],\n );\n const pathsWithParentPathsRemoved = removeSubstringMatches(paths);\n\n this.facetSelectionUpdated?.emit({ paths: pathsWithParentPathsRemoved });\n }\n\n formatLabel = (facetChild: FacetChild): string => {\n const label = facetChild.path.replace(/^\\//, '');\n const count = facetChild.count;\n return `${label.replace(/-/g, ' ').replace(/\\b\\w/g, (char) => char.toUpperCase())} (${count})`;\n };\n\n formatSubLabel = (\n facetChild: FacetChild,\n facetChildAncestor: FacetChild,\n ): string => {\n const facetChildPath = facetChild.path.substring(\n facetChildAncestor.path.length,\n );\n const label = facetChildPath.replace(/^\\//, '');\n const count = facetChild.count;\n return `${label.replace(/-/g, ' ').replace(/\\b\\w/g, (char) => char.toUpperCase())} (${count})`;\n };\n\n render() {\n if (!this.fieldName) {\n return;\n }\n\n const firstFacet = this.facetRoot?.[this.fieldName];\n\n return (\n <div\n class={classNames(\n 'filtersListContainer',\n 'searchcraft-filters-list-container',\n )}\n >\n {!firstFacet && (\n <p class='searchcraft-facet-message'>\n Enter a search to view facets.\n </p>\n )}\n {firstFacet?.map((facetChild: FacetChild) => {\n const isChildSelected = facetChild.children\n ? facetChild.children?.some(\n (child) => this.selectedPaths[child.path],\n )\n : false;\n\n return (\n <div\n key={facetChild.path}\n class={classNames('searchcraft-filters-list-item')}\n >\n <label\n class={classNames(\n 'filterCheckboxLabel',\n 'searchcraft-filters-list-checkbox-label',\n )}\n >\n <input\n checked={this.selectedPaths[facetChild.path]}\n onChange={(_event: Event) =>\n this.handleCheckboxChange(facetChild.path)\n }\n type='checkbox'\n />\n {isChildSelected ? (\n <div\n class={classNames(\n 'dashContainer',\n 'searchcraft-filter-list-dash-container',\n )}\n >\n <svg width='14' height='3' viewBox='0 0 14 3' fill='none'>\n <title>Checkbox Dash</title>\n <line\n x1='1.5'\n y1='1.5'\n x2='12.5'\n y2='1.5'\n stroke='white'\n stroke-width='3'\n stroke-linecap='round'\n />\n </svg>\n </div>\n ) : (\n <div\n class={classNames(\n 'checkContainer',\n 'searchcraft-filter-list-check-container',\n )}\n >\n <svg width='16' height='16' viewBox='0 0 16 16' fill='none'>\n <title>Checkbox Check</title>\n <path\n d='M13.9999 2L5.74988 10L1.99988 6.36364'\n stroke='white'\n stroke-width='3'\n stroke-linecap='round'\n stroke-linejoin='round'\n />\n </svg>\n </div>\n )}\n {this.formatLabel(facetChild)}\n </label>\n {facetChild.children && facetChild.children.length > 0 && (\n <Fragment>\n {facetChild.children.map((grandchild) => (\n <label\n key={grandchild.path}\n class={classNames(\n 'childFilterCheckboxLabel',\n 'searchcraft-child-filter-checkbox-label',\n )}\n style={{\n display: this.selectedPaths[facetChild.path]\n ? 'flex'\n : 'none',\n }}\n >\n <input\n checked={this.selectedPaths[grandchild.path]}\n onChange={(_event: Event) => {\n this.handleCheckboxChange(grandchild.path);\n }}\n type='checkbox'\n />\n <div\n class={classNames(\n 'checkContainer',\n 'searchcraft-filter-list-check-container',\n )}\n >\n <svg\n width='16'\n height='16'\n viewBox='0 0 16 16'\n fill='none'\n >\n <title>Checkbox Check</title>\n <path\n d='M13.9999 2L5.74988 10L1.99988 6.36364'\n stroke='white'\n stroke-width='3'\n stroke-linecap='round'\n stroke-linejoin='round'\n />\n </svg>\n </div>\n {this.formatSubLabel(grandchild, facetChild)}\n </label>\n ))}\n </Fragment>\n )}\n </div>\n );\n })}\n </div>\n );\n }\n}\n","import {\n Component,\n Event,\n type EventEmitter,\n h,\n State,\n Prop,\n} from '@stencil/core';\nimport { getMillis } from '@utils';\nimport classNames from 'classnames';\n\n/**\n * This web component is designed to allow users to select a value from a range defined by a minimum and maximum value.\n * The component renders a slider interface, which can be used to visually choose a value between two boundaries.\n * It is consumed by the `searchcraft-filter-panel` component.\n */\n@Component({\n tag: 'searchcraft-slider',\n shadow: false,\n})\nexport class SearchcraftSlider {\n /**\n * The maximum value allowed.\n */\n @Prop() max = 100;\n /**\n * The minimum value allowed.\n */\n @Prop() min = 0;\n /**\n * The granularity that the value must adhere to.\n */\n @Prop() granularity: number = getMillis('month');\n /** The type of data allowed. */\n @Prop() dataType: 'number' | 'date' = 'number';\n\n @State() endValue = this.max;\n @State() startValue = this.min;\n @State() lastFocusedHandle: 'min' | 'max' = 'max';\n\n /**\n * When the range has changed.\n * */\n @Event() rangeChanged:\n | EventEmitter<{ startValue: number; endValue: number }>\n | undefined;\n\n componentDidLoad() {\n this.startValue = this.min;\n this.endValue = this.max;\n }\n\n private emitUpdate = async () => {\n this.rangeChanged?.emit({\n startValue: this.startValue,\n endValue: this.endValue,\n });\n };\n\n private handleStartValueChange = (event: InputEvent) => {\n const inputElement = event.target as HTMLInputElement;\n const value = Number.parseInt(inputElement.value, 10);\n this.lastFocusedHandle = 'min';\n if (value <= this.endValue) {\n this.startValue = value;\n this.emitUpdate();\n } else {\n this.startValue = this.endValue;\n inputElement.value = `${this.endValue}`;\n }\n };\n\n private handleEndValueChange = (event: InputEvent) => {\n const inputElement = event.target as HTMLInputElement;\n const value = Number.parseInt(inputElement.value, 10);\n this.lastFocusedHandle = 'max';\n if (value >= this.startValue) {\n this.endValue = value;\n this.emitUpdate();\n } else {\n this.endValue = this.startValue;\n inputElement.value = `${this.startValue}`;\n }\n };\n\n render() {\n const rangeMin = this.min;\n const rangeMax = this.max;\n const startPercent =\n ((this.startValue - rangeMin) / (rangeMax - rangeMin)) * 100;\n const endPercent =\n ((this.endValue - rangeMin) / (rangeMax - rangeMin)) * 100;\n\n const startLabel =\n this.dataType === 'number'\n ? this.startValue\n : new Date(this.startValue).getFullYear();\n\n const endLabel =\n this.dataType === 'number'\n ? this.endValue\n : new Date(this.endValue).getFullYear();\n\n return (\n <div class='searchcraft-slider-container'>\n <div class='searchcraft-slider-range-container'>\n <div\n class='searchcraft-slider-active-range'\n style={{\n left: `${startPercent}%`,\n width: `${endPercent - startPercent}%`,\n }}\n />\n <input\n class={classNames(\n 'searchcraft-slider-input',\n 'searchcraft-slider-input-min-handle',\n )}\n max={this.max}\n min={this.min}\n onInput={this.handleStartValueChange.bind(this)}\n step={this.granularity}\n style={{ zIndex: this.lastFocusedHandle === 'min' ? '2' : '1' }}\n type='range'\n value={this.startValue}\n />\n <input\n class={classNames(\n 'searchcraft-slider-input',\n 'searchcraft-slider-input-max-handle',\n )}\n max={this.max}\n min={this.min}\n onInput={this.handleEndValueChange.bind(this)}\n step={this.granularity}\n style={{ zIndex: this.lastFocusedHandle === 'max' ? '2' : '1' }}\n type='range'\n value={this.endValue}\n />\n </div>\n <div class='searchcraft-slider-label-container'>\n <span class='searchcraft-slider-label'>{startLabel}</span>\n <span class='searchcraft-slider-label'>{endLabel}</span>\n </div>\n </div>\n );\n }\n}\n","import { useSearchcraftStore } from '@provider/store';\nimport {\n Component,\n Event,\n h,\n Prop,\n State,\n type EventEmitter,\n} from '@stencil/core';\nimport classNames from 'classnames';\n\n/**\n * This web component simulates a light switch functionality, providing a simple and intuitive toggle between two states—on and off.\n * It is consumed within the `searchcraft-filter-panel` component.\n */\n@Component({\n tag: 'searchcraft-toggle-button',\n shadow: false,\n})\nexport class SearchcraftToggleButton {\n /**\n * The label.\n */\n @Prop() label = 'Toggle';\n /**\n * The secondary label displayed below the main label.\n */\n @Prop() subLabel: string | undefined;\n\n /**\n * When the toggle element is changed.\n */\n @Event() toggleUpdated?: EventEmitter<boolean>;\n\n @State() isActive = false;\n @State() unsubscribe: (() => void) | undefined;\n @State() lastSearchTerm: string | undefined;\n\n private handleToggle = async () => {\n this.isActive = !this.isActive;\n this.toggleUpdated?.emit(this.isActive);\n };\n\n connectedCallback() {\n /** When the query changes, sets toggle button state back to inactive. */\n this.unsubscribe = useSearchcraftStore.subscribe((state) => {\n if (\n state.searchTerm !== this.lastSearchTerm &&\n state.searchTerm.trim().length === 0\n ) {\n this.isActive = false;\n }\n this.lastSearchTerm = state.searchTerm;\n });\n }\n\n disconnectedCallback() {\n this.unsubscribe?.();\n }\n\n render() {\n return (\n <div class='searchcraft-toggle-button-container'>\n <div>\n <p class='searchcraft-toggle-button-label'>{this.label}</p>\n {this.subLabel && (\n <p class='searchcraft-toggle-button-sub-label'>{this.subLabel}</p>\n )}\n </div>\n <button\n class={classNames('searchcraft-toggle-button-background', {\n active: this.isActive,\n })}\n onClick={this.handleToggle}\n type='button'\n >\n <div\n class={classNames('searchcraft-toggle-button-handle', {\n active: this.isActive,\n })}\n />\n </button>\n </div>\n );\n }\n}\n"],"version":3}
@@ -1,113 +0,0 @@
1
- 'use strict';
2
-
3
- Object.defineProperty(exports, '__esModule', { value: true });
4
-
5
- const index = require('./index-a81df4f0.js');
6
- const SearchcraftStore = require('./SearchcraftStore-75fac5e0.js');
7
- const units = require('./units-fe4d8083.js');
8
-
9
- const SearchcraftFilterPanel = class {
10
- constructor(hostRef) {
11
- index.registerInstance(this, hostRef);
12
- }
13
- /**
14
- * The items to filter.
15
- */
16
- items = [];
17
- unsubscribe;
18
- lastSearchTerm;
19
- searchStore = SearchcraftStore.useSearchcraftStore.getState();
20
- componentDidLoad() {
21
- this.unsubscribe = SearchcraftStore.useSearchcraftStore.subscribe((state) => {
22
- this.lastSearchTerm = state.searchTerm || '';
23
- });
24
- }
25
- disconnectedCallback() {
26
- this.unsubscribe?.();
27
- }
28
- handleDateRangeChanged(fieldName, min, max) {
29
- const start = new Date(min);
30
- const end = new Date(max);
31
- this.searchStore.addRangeValueForIndexField({
32
- fieldName,
33
- value: `${fieldName}:[${start.toISOString()} TO ${end.toISOString()}]`,
34
- });
35
- this.searchStore.search();
36
- }
37
- handleNumericRangeChanged(fieldName, min, max) {
38
- this.searchStore.addRangeValueForIndexField({
39
- fieldName,
40
- value: `${fieldName}:[${min} TO ${max}]`,
41
- });
42
- this.searchStore.search();
43
- }
44
- handleFacetSelectionUpdated(fieldName, paths) {
45
- if (paths.length > 0) {
46
- this.searchStore.addFacetPathsForIndexField({
47
- fieldName,
48
- value: `${fieldName}: IN [${paths.join(' ')}]`,
49
- });
50
- }
51
- else {
52
- this.searchStore.removeFacetPathsForIndexField(fieldName);
53
- }
54
- this.searchStore.search();
55
- }
56
- handleExactMatchToggleUpdated(isActive) {
57
- this.searchStore.setSearchMode(isActive ? 'exact' : 'fuzzy');
58
- this.searchStore.search();
59
- }
60
- handleMostRecentToggleUpdated(isActive) {
61
- this.searchStore.setSortType(isActive ? 'desc' : 'asc');
62
- this.searchStore.search();
63
- }
64
- /**
65
- * Iterate through `items` and render them based on `type`
66
- */
67
- render() {
68
- return (index.h("div", { key: '7e3e39a09d392e6da9c387d8cd641a50171ddc59', class: 'searchcraft-filter-panel' }, this.items.map((filterItem) => {
69
- switch (filterItem.type) {
70
- case 'dateRange': {
71
- const item = filterItem;
72
- const min = new Date(item.options.minDate).getTime();
73
- const max = new Date(item.options.maxDate).getTime();
74
- const granularityValue = units.getMillis(item.options.granularity);
75
- // return date range slider
76
- return (index.h("div", { class: 'searchcraft-filter-panel-section' }, index.h("p", { class: 'searchcraft-filter-panel-label' }, filterItem.label), index.h("searchcraft-slider", { min: min, max: max, granularity: granularityValue, dataType: 'date', onRangeChanged: (event) => {
77
- this.handleDateRangeChanged(item.fieldName, event.detail.startValue, event.detail.endValue);
78
- } })));
79
- }
80
- case 'numericRange': {
81
- const item = filterItem;
82
- // return date range slider
83
- return (index.h("div", { class: 'searchcraft-filter-panel-section' }, index.h("p", { class: 'searchcraft-filter-panel-label' }, filterItem.label), index.h("searchcraft-slider", { min: item.options.min, max: item.options.max, granularity: item.options.granularity, onRangeChanged: (event) => {
84
- this.handleNumericRangeChanged(item.fieldName, event.detail.startValue, event.detail.endValue);
85
- } })));
86
- }
87
- case 'facets': {
88
- const item = filterItem;
89
- // return "filters-list"
90
- return (index.h("div", { class: 'searchcraft-filter-panel-section' }, index.h("p", { class: 'searchcraft-filter-panel-label' }, filterItem.label), index.h("searchcraft-facet-list", { fieldName: item.fieldName, onFacetSelectionUpdated: (event) => {
91
- this.handleFacetSelectionUpdated(item.fieldName, event.detail.paths);
92
- } })));
93
- }
94
- case 'exactMatchToggle': {
95
- const item = filterItem;
96
- return (index.h("searchcraft-toggle-button", { label: item.label, subLabel: item.options.subLabel, onToggleUpdated: (event) => {
97
- this.handleExactMatchToggleUpdated(event.detail);
98
- } }));
99
- }
100
- case 'mostRecentToggle': {
101
- const item = filterItem;
102
- return (index.h("searchcraft-toggle-button", { label: item.label, subLabel: item.options.subLabel, onToggleUpdated: (event) => {
103
- this.handleMostRecentToggleUpdated(event.detail);
104
- } }));
105
- }
106
- }
107
- })));
108
- }
109
- };
110
-
111
- exports.searchcraft_filter_panel = SearchcraftFilterPanel;
112
-
113
- //# sourceMappingURL=searchcraft-filter-panel.cjs.entry.js.map
@@ -1 +0,0 @@
1
- {"file":"searchcraft-filter-panel.entry.cjs.js","mappings":"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","names":["useSearchcraftStore","h","getMillis"],"sources":["src/components/searchcraft-filter-panel/searchcraft-filter-panel.tsx"],"sourcesContent":["import { Component, h, Prop, State } from '@stencil/core';\nimport type {\n FilterItem,\n DateRangeFilterItem,\n NumericFilterItem,\n ExactMatchToggleFilterItem,\n FacetsFilterItem,\n} from '@searchcraft/core';\nimport { useSearchcraftStore } from '@provider/store';\nimport { getMillis } from '@utils';\n\n/**\n * This web component represents a series of filters that allows users to refine and control their search queries by applying various filter criteria.\n *\n * ## Usage\n * ```html\n * <!-- index.html -->\n * <searchcraft-filter-panel />\n * ```\n */\n@Component({\n tag: 'searchcraft-filter-panel',\n shadow: false,\n})\nexport class SearchcraftFilterPanel {\n /**\n * The items to filter.\n */\n @Prop() items: FilterItem[] = [];\n\n @State() unsubscribe: (() => void) | undefined;\n @State() lastSearchTerm: string | undefined;\n\n private searchStore = useSearchcraftStore.getState();\n\n componentDidLoad() {\n this.unsubscribe = useSearchcraftStore.subscribe((state) => {\n if (this.lastSearchTerm !== state.searchTerm) {\n // A place to put actions to do when the query changes\n }\n this.lastSearchTerm = state.searchTerm || '';\n });\n }\n\n disconnectedCallback() {\n this.unsubscribe?.();\n }\n\n handleDateRangeChanged(fieldName: string, min: number, max: number) {\n const start = new Date(min);\n const end = new Date(max);\n this.searchStore.addRangeValueForIndexField({\n fieldName,\n value: `${fieldName}:[${start.toISOString()} TO ${end.toISOString()}]`,\n });\n\n this.searchStore.search();\n }\n\n handleNumericRangeChanged(fieldName: string, min: number, max: number) {\n this.searchStore.addRangeValueForIndexField({\n fieldName,\n value: `${fieldName}:[${min} TO ${max}]`,\n });\n this.searchStore.search();\n }\n\n handleFacetSelectionUpdated(fieldName: string, paths: string[]) {\n if (paths.length > 0) {\n this.searchStore.addFacetPathsForIndexField({\n fieldName,\n value: `${fieldName}: IN [${paths.join(' ')}]`,\n });\n } else {\n this.searchStore.removeFacetPathsForIndexField(fieldName);\n }\n this.searchStore.search();\n }\n\n handleExactMatchToggleUpdated(isActive: boolean) {\n this.searchStore.setSearchMode(isActive ? 'exact' : 'fuzzy');\n this.searchStore.search();\n }\n\n handleMostRecentToggleUpdated(isActive: boolean) {\n this.searchStore.setSortType(isActive ? 'desc' : 'asc');\n this.searchStore.search();\n }\n\n /**\n * Iterate through `items` and render them based on `type`\n */\n render() {\n return (\n <div class='searchcraft-filter-panel'>\n {this.items.map((filterItem) => {\n switch (filterItem.type) {\n case 'dateRange': {\n const item = filterItem as DateRangeFilterItem;\n const min = new Date(item.options.minDate).getTime();\n const max = new Date(item.options.maxDate).getTime();\n const granularityValue = getMillis(item.options.granularity);\n // return date range slider\n return (\n <div class='searchcraft-filter-panel-section'>\n <p class='searchcraft-filter-panel-label'>\n {filterItem.label}\n </p>\n <searchcraft-slider\n min={min}\n max={max}\n granularity={granularityValue}\n dataType='date'\n onRangeChanged={(event) => {\n this.handleDateRangeChanged(\n item.fieldName,\n event.detail.startValue,\n event.detail.endValue,\n );\n }}\n />\n </div>\n );\n }\n case 'numericRange': {\n const item = filterItem as NumericFilterItem;\n // return date range slider\n return (\n <div class='searchcraft-filter-panel-section'>\n <p class='searchcraft-filter-panel-label'>\n {filterItem.label}\n </p>\n <searchcraft-slider\n min={item.options.min}\n max={item.options.max}\n granularity={item.options.granularity}\n onRangeChanged={(event) => {\n this.handleNumericRangeChanged(\n item.fieldName,\n event.detail.startValue,\n event.detail.endValue,\n );\n }}\n />\n </div>\n );\n }\n case 'facets': {\n const item = filterItem as FacetsFilterItem;\n // return \"filters-list\"\n return (\n <div class='searchcraft-filter-panel-section'>\n <p class='searchcraft-filter-panel-label'>\n {filterItem.label}\n </p>\n <searchcraft-facet-list\n fieldName={item.fieldName}\n onFacetSelectionUpdated={(event) => {\n this.handleFacetSelectionUpdated(\n item.fieldName,\n event.detail.paths,\n );\n }}\n />\n </div>\n );\n }\n case 'exactMatchToggle': {\n const item = filterItem as ExactMatchToggleFilterItem;\n return (\n <searchcraft-toggle-button\n label={item.label}\n subLabel={item.options.subLabel}\n onToggleUpdated={(event) => {\n this.handleExactMatchToggleUpdated(event.detail);\n }}\n />\n );\n }\n case 'mostRecentToggle': {\n const item = filterItem as ExactMatchToggleFilterItem;\n return (\n <searchcraft-toggle-button\n label={item.label}\n subLabel={item.options.subLabel}\n onToggleUpdated={(event) => {\n this.handleMostRecentToggleUpdated(event.detail);\n }}\n />\n );\n }\n }\n })}\n </div>\n );\n }\n}\n"],"version":3}