@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,200 +0,0 @@
1
- import { h, Fragment, } from "@stencil/core";
2
- import classNames from "classnames";
3
- import { useSearchcraftStore } from "../../provider/store";
4
- import { mergeFacetRoots, removeSubstringMatches } from "../../utils/index";
5
- /**
6
- * 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.
7
- * It is consumed within the `searchcraft-filter-panel`.
8
- *
9
- * ## Usage
10
- * ```html
11
- * <!-- index.html -->
12
- * <searchcraft-facet-list field-name="title" />
13
- * ```
14
- *
15
- * ```js
16
- * // index.js
17
- * const facetList = document.querySelector('searchcraft-facet-list');
18
- *
19
- * facetList.addEventListener('facetSelectionUpdated', () => {
20
- * console.log('Facet selection updated');
21
- * });
22
- * ```
23
- */
24
- export class SearchcraftFacetList {
25
- /**
26
- * The name of the field where facets are applied.
27
- */
28
- fieldName = '';
29
- /**
30
- * When the facets are updated.
31
- */
32
- facetSelectionUpdated;
33
- baseFacetRoot;
34
- facetRoot;
35
- selectedPaths = {};
36
- lastTimeTaken;
37
- hasNewSearchTerm = false;
38
- lastSearchTerm;
39
- lastSearchMode;
40
- lastSortType;
41
- unsubscribe;
42
- searchStore = useSearchcraftStore.getState();
43
- handleStateUpdate(state) {
44
- const facetPrime = state.searchResponseFacetPrime;
45
- const timeTaken = state.searchResponseTimeTaken;
46
- if (!this.fieldName) {
47
- return;
48
- }
49
- /** Things to do when the state's search term has changed, but before the response received */
50
- if (state.searchTerm !== this.lastSearchTerm ||
51
- state.searchMode !== this.lastSearchMode ||
52
- state.sortType !== this.lastSortType) {
53
- this.selectedPaths = {};
54
- this.hasNewSearchTerm = true;
55
- }
56
- /** Things to do when a new response with a new facet prime has been received */
57
- if (timeTaken !== this.lastTimeTaken && facetPrime) {
58
- this.facetRoot = undefined;
59
- const incomingFacetRoot = facetPrime.find((facet) => this.fieldName === Object.keys(facet)[0]);
60
- /** Data is from a new search term: completely override our facets */
61
- if (this.hasNewSearchTerm) {
62
- this.baseFacetRoot = incomingFacetRoot;
63
- this.facetRoot = incomingFacetRoot;
64
- this.hasNewSearchTerm = false;
65
- }
66
- else if (this.baseFacetRoot && incomingFacetRoot) {
67
- /** Data is from an existing search term, merge the facets together */
68
- this.facetRoot = mergeFacetRoots(this.fieldName, this.baseFacetRoot, incomingFacetRoot);
69
- }
70
- }
71
- this.lastSearchTerm = state.searchTerm;
72
- this.lastSearchMode = state.searchMode;
73
- this.lastSortType = state.sortType;
74
- this.lastTimeTaken = timeTaken;
75
- }
76
- connectedCallback() {
77
- this.handleStateUpdate(this.searchStore);
78
- this.unsubscribe = useSearchcraftStore.subscribe((state) => {
79
- this.handleStateUpdate(state);
80
- });
81
- }
82
- disconnectedCallback() {
83
- this.unsubscribe?.();
84
- }
85
- handleCheckboxChange(path) {
86
- const isCheckboxChecked = !this.selectedPaths[path];
87
- if (isCheckboxChecked) {
88
- /**
89
- * Checkbox Checked: Add to the selectedPaths record
90
- * Uses spread operator here so UI updates.
91
- */
92
- this.selectedPaths = {
93
- ...this.selectedPaths,
94
- [path]: true,
95
- };
96
- }
97
- else {
98
- /**
99
- * Checkbox Uncheck: Remove any paths and sub-paths
100
- */
101
- const updatedPaths = Object.keys(this.selectedPaths).filter((testPath) => !testPath.includes(path));
102
- this.selectedPaths = updatedPaths.reduce((acc, str) => {
103
- acc[str] = true;
104
- return acc;
105
- }, {});
106
- }
107
- /**
108
- * Emit the paths array, with parent paths removed.
109
- */
110
- const paths = Object.keys(this.selectedPaths).filter((path) => this.selectedPaths[path]);
111
- const pathsWithParentPathsRemoved = removeSubstringMatches(paths);
112
- this.facetSelectionUpdated?.emit({ paths: pathsWithParentPathsRemoved });
113
- }
114
- formatLabel = (facetChild) => {
115
- const label = facetChild.path.replace(/^\//, '');
116
- const count = facetChild.count;
117
- return `${label.replace(/-/g, ' ').replace(/\b\w/g, (char) => char.toUpperCase())} (${count})`;
118
- };
119
- formatSubLabel = (facetChild, facetChildAncestor) => {
120
- const facetChildPath = facetChild.path.substring(facetChildAncestor.path.length);
121
- const label = facetChildPath.replace(/^\//, '');
122
- const count = facetChild.count;
123
- return `${label.replace(/-/g, ' ').replace(/\b\w/g, (char) => char.toUpperCase())} (${count})`;
124
- };
125
- render() {
126
- if (!this.fieldName) {
127
- return;
128
- }
129
- const firstFacet = this.facetRoot?.[this.fieldName];
130
- return (h("div", { class: classNames('filtersListContainer', 'searchcraft-filters-list-container') }, !firstFacet && (h("p", { class: 'searchcraft-facet-message' }, "Enter a search to view facets.")), firstFacet?.map((facetChild) => {
131
- const isChildSelected = facetChild.children
132
- ? facetChild.children?.some((child) => this.selectedPaths[child.path])
133
- : false;
134
- return (h("div", { key: facetChild.path, class: classNames('searchcraft-filters-list-item') }, h("label", { class: classNames('filterCheckboxLabel', 'searchcraft-filters-list-checkbox-label') }, h("input", { checked: this.selectedPaths[facetChild.path], onChange: (_event) => this.handleCheckboxChange(facetChild.path), type: 'checkbox' }), isChildSelected ? (h("div", { class: classNames('dashContainer', 'searchcraft-filter-list-dash-container') }, h("svg", { width: '14', height: '3', viewBox: '0 0 14 3', fill: 'none' }, h("title", null, "Checkbox Dash"), h("line", { x1: '1.5', y1: '1.5', x2: '12.5', y2: '1.5', stroke: 'white', "stroke-width": '3', "stroke-linecap": 'round' })))) : (h("div", { class: classNames('checkContainer', 'searchcraft-filter-list-check-container') }, h("svg", { width: '16', height: '16', viewBox: '0 0 16 16', fill: 'none' }, h("title", null, "Checkbox Check"), 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 && (h(Fragment, null, facetChild.children.map((grandchild) => (h("label", { key: grandchild.path, class: classNames('childFilterCheckboxLabel', 'searchcraft-child-filter-checkbox-label'), style: {
135
- display: this.selectedPaths[facetChild.path]
136
- ? 'flex'
137
- : 'none',
138
- } }, h("input", { checked: this.selectedPaths[grandchild.path], onChange: (_event) => {
139
- this.handleCheckboxChange(grandchild.path);
140
- }, type: 'checkbox' }), h("div", { class: classNames('checkContainer', 'searchcraft-filter-list-check-container') }, h("svg", { width: '16', height: '16', viewBox: '0 0 16 16', fill: 'none' }, h("title", null, "Checkbox Check"), 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))))))));
141
- })));
142
- }
143
- static get is() { return "searchcraft-facet-list"; }
144
- static get properties() {
145
- return {
146
- "fieldName": {
147
- "type": "string",
148
- "mutable": false,
149
- "complexType": {
150
- "original": "string",
151
- "resolved": "string",
152
- "references": {}
153
- },
154
- "required": false,
155
- "optional": false,
156
- "docs": {
157
- "tags": [],
158
- "text": "The name of the field where facets are applied."
159
- },
160
- "getter": false,
161
- "setter": false,
162
- "attribute": "field-name",
163
- "reflect": false,
164
- "defaultValue": "''"
165
- }
166
- };
167
- }
168
- static get states() {
169
- return {
170
- "baseFacetRoot": {},
171
- "facetRoot": {},
172
- "selectedPaths": {},
173
- "lastTimeTaken": {},
174
- "hasNewSearchTerm": {},
175
- "lastSearchTerm": {},
176
- "lastSearchMode": {},
177
- "lastSortType": {},
178
- "unsubscribe": {}
179
- };
180
- }
181
- static get events() {
182
- return [{
183
- "method": "facetSelectionUpdated",
184
- "name": "facetSelectionUpdated",
185
- "bubbles": true,
186
- "cancelable": true,
187
- "composed": true,
188
- "docs": {
189
- "tags": [],
190
- "text": "When the facets are updated."
191
- },
192
- "complexType": {
193
- "original": "{ paths: string[] }",
194
- "resolved": "{ paths: string[]; }",
195
- "references": {}
196
- }
197
- }];
198
- }
199
- }
200
- //# sourceMappingURL=searchcraft-facet-list.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"searchcraft-facet-list.js","sourceRoot":"","sources":["../../../../src/components/searchcraft-facet-list/searchcraft-facet-list.tsx"],"names":[],"mappings":"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","sourcesContent":["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"]}
@@ -1,149 +0,0 @@
1
- import { h } from "@stencil/core";
2
- import { useSearchcraftStore } from "../../provider/store";
3
- import { getMillis } from "../../utils/index";
4
- /**
5
- * This web component represents a series of filters that allows users to refine and control their search queries by applying various filter criteria.
6
- *
7
- * ## Usage
8
- * ```html
9
- * <!-- index.html -->
10
- * <searchcraft-filter-panel />
11
- * ```
12
- */
13
- export class SearchcraftFilterPanel {
14
- /**
15
- * The items to filter.
16
- */
17
- items = [];
18
- unsubscribe;
19
- lastSearchTerm;
20
- searchStore = useSearchcraftStore.getState();
21
- componentDidLoad() {
22
- this.unsubscribe = useSearchcraftStore.subscribe((state) => {
23
- if (this.lastSearchTerm !== state.searchTerm) {
24
- // A place to put actions to do when the query changes
25
- }
26
- this.lastSearchTerm = state.searchTerm || '';
27
- });
28
- }
29
- disconnectedCallback() {
30
- this.unsubscribe?.();
31
- }
32
- handleDateRangeChanged(fieldName, min, max) {
33
- const start = new Date(min);
34
- const end = new Date(max);
35
- this.searchStore.addRangeValueForIndexField({
36
- fieldName,
37
- value: `${fieldName}:[${start.toISOString()} TO ${end.toISOString()}]`,
38
- });
39
- this.searchStore.search();
40
- }
41
- handleNumericRangeChanged(fieldName, min, max) {
42
- this.searchStore.addRangeValueForIndexField({
43
- fieldName,
44
- value: `${fieldName}:[${min} TO ${max}]`,
45
- });
46
- this.searchStore.search();
47
- }
48
- handleFacetSelectionUpdated(fieldName, paths) {
49
- if (paths.length > 0) {
50
- this.searchStore.addFacetPathsForIndexField({
51
- fieldName,
52
- value: `${fieldName}: IN [${paths.join(' ')}]`,
53
- });
54
- }
55
- else {
56
- this.searchStore.removeFacetPathsForIndexField(fieldName);
57
- }
58
- this.searchStore.search();
59
- }
60
- handleExactMatchToggleUpdated(isActive) {
61
- this.searchStore.setSearchMode(isActive ? 'exact' : 'fuzzy');
62
- this.searchStore.search();
63
- }
64
- handleMostRecentToggleUpdated(isActive) {
65
- this.searchStore.setSortType(isActive ? 'desc' : 'asc');
66
- this.searchStore.search();
67
- }
68
- /**
69
- * Iterate through `items` and render them based on `type`
70
- */
71
- render() {
72
- return (h("div", { key: '7e3e39a09d392e6da9c387d8cd641a50171ddc59', class: 'searchcraft-filter-panel' }, this.items.map((filterItem) => {
73
- switch (filterItem.type) {
74
- case 'dateRange': {
75
- const item = filterItem;
76
- const min = new Date(item.options.minDate).getTime();
77
- const max = new Date(item.options.maxDate).getTime();
78
- const granularityValue = getMillis(item.options.granularity);
79
- // return date range slider
80
- return (h("div", { class: 'searchcraft-filter-panel-section' }, h("p", { class: 'searchcraft-filter-panel-label' }, filterItem.label), h("searchcraft-slider", { min: min, max: max, granularity: granularityValue, dataType: 'date', onRangeChanged: (event) => {
81
- this.handleDateRangeChanged(item.fieldName, event.detail.startValue, event.detail.endValue);
82
- } })));
83
- }
84
- case 'numericRange': {
85
- const item = filterItem;
86
- // return date range slider
87
- return (h("div", { class: 'searchcraft-filter-panel-section' }, h("p", { class: 'searchcraft-filter-panel-label' }, filterItem.label), h("searchcraft-slider", { min: item.options.min, max: item.options.max, granularity: item.options.granularity, onRangeChanged: (event) => {
88
- this.handleNumericRangeChanged(item.fieldName, event.detail.startValue, event.detail.endValue);
89
- } })));
90
- }
91
- case 'facets': {
92
- const item = filterItem;
93
- // return "filters-list"
94
- return (h("div", { class: 'searchcraft-filter-panel-section' }, h("p", { class: 'searchcraft-filter-panel-label' }, filterItem.label), h("searchcraft-facet-list", { fieldName: item.fieldName, onFacetSelectionUpdated: (event) => {
95
- this.handleFacetSelectionUpdated(item.fieldName, event.detail.paths);
96
- } })));
97
- }
98
- case 'exactMatchToggle': {
99
- const item = filterItem;
100
- return (h("searchcraft-toggle-button", { label: item.label, subLabel: item.options.subLabel, onToggleUpdated: (event) => {
101
- this.handleExactMatchToggleUpdated(event.detail);
102
- } }));
103
- }
104
- case 'mostRecentToggle': {
105
- const item = filterItem;
106
- return (h("searchcraft-toggle-button", { label: item.label, subLabel: item.options.subLabel, onToggleUpdated: (event) => {
107
- this.handleMostRecentToggleUpdated(event.detail);
108
- } }));
109
- }
110
- }
111
- })));
112
- }
113
- static get is() { return "searchcraft-filter-panel"; }
114
- static get properties() {
115
- return {
116
- "items": {
117
- "type": "unknown",
118
- "mutable": false,
119
- "complexType": {
120
- "original": "FilterItem[]",
121
- "resolved": "FilterItem[]",
122
- "references": {
123
- "FilterItem": {
124
- "location": "import",
125
- "path": "@searchcraft/core",
126
- "id": "../core-sdk/dist/index.d.ts::FilterItem"
127
- }
128
- }
129
- },
130
- "required": false,
131
- "optional": false,
132
- "docs": {
133
- "tags": [],
134
- "text": "The items to filter."
135
- },
136
- "getter": false,
137
- "setter": false,
138
- "defaultValue": "[]"
139
- }
140
- };
141
- }
142
- static get states() {
143
- return {
144
- "unsubscribe": {},
145
- "lastSearchTerm": {}
146
- };
147
- }
148
- }
149
- //# sourceMappingURL=searchcraft-filter-panel.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"searchcraft-filter-panel.js","sourceRoot":"","sources":["../../../../src/components/searchcraft-filter-panel/searchcraft-filter-panel.tsx"],"names":[],"mappings":"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","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"]}