@searchcraft/javascript-sdk 0.3.1 → 0.4.1

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 (344) hide show
  1. package/README.md +197 -0
  2. package/dist/cjs/{index-264ebadc.js → index-6916cc47.js} +30 -3
  3. package/dist/cjs/index-6916cc47.js.map +1 -0
  4. package/dist/cjs/index.cjs.js +4 -5
  5. package/dist/cjs/index.cjs.js.map +1 -1
  6. package/dist/cjs/loader.cjs.js +2 -2
  7. package/dist/cjs/{package-35d3b670.js → package-38f7e2c7.js} +3 -3
  8. package/dist/cjs/package-38f7e2c7.js.map +1 -0
  9. package/dist/cjs/searchcraft-auto-search-form.cjs.entry.js +143 -0
  10. package/dist/cjs/searchcraft-auto-search-form.cjs.entry.js.map +1 -0
  11. package/dist/cjs/searchcraft-base-search-form.cjs.entry.js +8 -11
  12. package/dist/cjs/searchcraft-base-search-form.cjs.entry.js.map +1 -1
  13. package/dist/cjs/searchcraft-base-search-result.cjs.entry.js +74 -0
  14. package/dist/cjs/searchcraft-base-search-result.cjs.entry.js.map +1 -0
  15. package/dist/cjs/searchcraft-base-search-results.cjs.entry.js +109 -0
  16. package/dist/cjs/searchcraft-base-search-results.cjs.entry.js.map +1 -0
  17. package/dist/cjs/searchcraft-button-icon.cjs.entry.js +1 -1
  18. package/dist/cjs/searchcraft-button.cjs.entry.js +3 -8
  19. package/dist/cjs/searchcraft-button.cjs.entry.js.map +1 -1
  20. package/dist/cjs/searchcraft-check-icon_2.cjs.entry.js +28 -0
  21. package/dist/cjs/searchcraft-check-icon_2.cjs.entry.js.map +1 -0
  22. package/dist/cjs/searchcraft-clear-icon-set.cjs.entry.js +30 -0
  23. package/dist/cjs/searchcraft-clear-icon-set.cjs.entry.js.map +1 -0
  24. package/dist/cjs/searchcraft-error-message_3.cjs.entry.js +95 -0
  25. package/dist/cjs/searchcraft-error-message_3.cjs.entry.js.map +1 -0
  26. package/dist/cjs/searchcraft-facet-list_3.cjs.entry.js +236 -0
  27. package/dist/cjs/searchcraft-facet-list_3.cjs.entry.js.map +1 -0
  28. package/dist/cjs/searchcraft-filter-panel.cjs.entry.js +115 -0
  29. package/dist/cjs/searchcraft-filter-panel.cjs.entry.js.map +1 -0
  30. package/dist/cjs/searchcraft-javascript-sdk.cjs.js +2 -2
  31. package/dist/cjs/searchcraft-results-info.cjs.entry.js +46 -0
  32. package/dist/cjs/searchcraft-results-info.cjs.entry.js.map +1 -0
  33. package/dist/cjs/searchcraft-search-icon-set.cjs.entry.js +33 -0
  34. package/dist/cjs/searchcraft-search-icon-set.cjs.entry.js.map +1 -0
  35. package/dist/cjs/searchcraft-spinner-dark.cjs.entry.js +3 -3
  36. package/dist/cjs/searchcraft-spinner-dark.cjs.entry.js.map +1 -1
  37. package/dist/cjs/searchcraft-spinner-light.cjs.entry.js +3 -3
  38. package/dist/cjs/searchcraft-spinner-light.cjs.entry.js.map +1 -1
  39. package/dist/{esm/store-b519dd0b.js → cjs/store-afa727af.js} +148 -208
  40. package/dist/cjs/store-afa727af.js.map +1 -0
  41. package/dist/cjs/utils-0f309f6d.js +226 -0
  42. package/dist/cjs/utils-0f309f6d.js.map +1 -0
  43. package/dist/collection/collection-manifest.json +2 -4
  44. package/dist/collection/components/searchcraft-auto-search-form/searchcraft-auto-search-form.js +46 -95
  45. package/dist/collection/components/searchcraft-auto-search-form/searchcraft-auto-search-form.js.map +1 -1
  46. package/dist/collection/components/searchcraft-auto-search-form/searchcraft-auto-search-form.module.css +98 -9
  47. package/dist/collection/components/searchcraft-base-search-form/searchcraft-base-search-form.js +31 -16
  48. package/dist/collection/components/searchcraft-base-search-form/searchcraft-base-search-form.js.map +1 -1
  49. package/dist/collection/components/searchcraft-base-search-form/searchcraft-base-search-form.module.css +94 -8
  50. package/dist/collection/components/searchcraft-base-search-result/searchcraft-base-search-result.js +125 -153
  51. package/dist/collection/components/searchcraft-base-search-result/searchcraft-base-search-result.js.map +1 -1
  52. package/dist/collection/components/searchcraft-base-search-result/searchcraft-base-search-result.module.css +139 -206
  53. package/dist/collection/components/searchcraft-base-search-results/searchcraft-base-search-results.js +121 -92
  54. package/dist/collection/components/searchcraft-base-search-results/searchcraft-base-search-results.js.map +1 -1
  55. package/dist/collection/components/searchcraft-base-search-results/searchcraft-base-search-results.module.css +105 -23
  56. package/dist/collection/components/searchcraft-button/searchcraft-button.js +2 -8
  57. package/dist/collection/components/searchcraft-button/searchcraft-button.js.map +1 -1
  58. package/dist/collection/components/searchcraft-button/searchcraft-button.module.css +107 -36
  59. package/dist/collection/components/searchcraft-error-message/searchcraft-error-message.js +1 -22
  60. package/dist/collection/components/searchcraft-error-message/searchcraft-error-message.js.map +1 -1
  61. package/dist/collection/components/searchcraft-error-message/searchcraft-error-message.module.css +101 -15
  62. package/dist/collection/components/searchcraft-facet-list/searchcraft-facet-list.js +171 -0
  63. package/dist/collection/components/searchcraft-facet-list/searchcraft-facet-list.js.map +1 -0
  64. package/dist/collection/components/searchcraft-facet-list/searchcraft-facet-list.module.css +216 -0
  65. package/dist/collection/components/searchcraft-filter-panel/searchcraft-filter-panel.js +148 -0
  66. package/dist/collection/components/searchcraft-filter-panel/searchcraft-filter-panel.js.map +1 -0
  67. package/dist/collection/components/searchcraft-filter-panel/searchcraft-filter-panel.module.css +118 -0
  68. package/dist/collection/components/searchcraft-input/searchcraft-input.js +36 -125
  69. package/dist/collection/components/searchcraft-input/searchcraft-input.js.map +1 -1
  70. package/dist/collection/components/searchcraft-input/searchcraft-input.module.css +158 -209
  71. package/dist/collection/components/searchcraft-input-label/searchcraft-input-label.js +1 -12
  72. package/dist/collection/components/searchcraft-input-label/searchcraft-input-label.js.map +1 -1
  73. package/dist/collection/components/searchcraft-input-label/searchcraft-input-label.module.css +102 -14
  74. package/dist/collection/components/searchcraft-results-info/searchcraft-results-info.js +1 -2
  75. package/dist/collection/components/searchcraft-results-info/searchcraft-results-info.js.map +1 -1
  76. package/dist/collection/components/searchcraft-results-info/searchcraft-results-info.module.css +103 -9
  77. package/dist/collection/components/searchcraft-slider/searchcraft-slider.js +93 -68
  78. package/dist/collection/components/searchcraft-slider/searchcraft-slider.js.map +1 -1
  79. package/dist/collection/components/searchcraft-slider/searchcraft-slider.module.css +117 -18
  80. package/dist/collection/components/searchcraft-spinner-dark/searchcraft-spinner-dark.js +1 -1
  81. package/dist/collection/components/searchcraft-spinner-dark/searchcraft-spinner-dark.module.css +103 -4
  82. package/dist/collection/components/searchcraft-spinner-light/searchcraft-spinner-light.js +1 -1
  83. package/dist/collection/components/searchcraft-spinner-light/searchcraft-spinner-light.module.css +102 -3
  84. package/dist/collection/components/searchcraft-toggle-button/searchcraft-toggle-button.js +62 -59
  85. package/dist/collection/components/searchcraft-toggle-button/searchcraft-toggle-button.js.map +1 -1
  86. package/dist/collection/components/searchcraft-toggle-button/searchcraft-toggle-button.module.css +135 -9
  87. package/dist/collection/index.js +2 -1
  88. package/dist/collection/index.js.map +1 -1
  89. package/dist/collection/provider/store.js +54 -34
  90. package/dist/collection/provider/store.js.map +1 -1
  91. package/dist/collection/types/index.js +3 -0
  92. package/dist/collection/types/index.js.map +1 -0
  93. package/dist/collection/types/searchcraft-base-search-results.types.js +2 -0
  94. package/dist/collection/types/searchcraft-base-search-results.types.js.map +1 -0
  95. package/dist/collection/types/searchcraft-filter-panel.types.js +2 -0
  96. package/dist/collection/types/searchcraft-filter-panel.types.js.map +1 -0
  97. package/dist/collection/utils/utils.js +171 -35
  98. package/dist/collection/utils/utils.js.map +1 -1
  99. package/dist/components/index.js +7 -11
  100. package/dist/components/index.js.map +1 -1
  101. package/dist/components/{p-bbf9973a.js → p-04d13314.js} +2 -2
  102. package/dist/components/{p-bbf9973a.js.map → p-04d13314.js.map} +1 -1
  103. package/dist/components/p-08e421ca.js +99 -0
  104. package/dist/components/p-08e421ca.js.map +1 -0
  105. package/dist/components/p-37f54c0b.js +54 -0
  106. package/dist/components/p-37f54c0b.js.map +1 -0
  107. package/dist/components/{p-727bfc38.js → p-3c181808.js} +135 -113
  108. package/dist/components/p-3c181808.js.map +1 -0
  109. package/dist/components/p-415f7b11.js +101 -0
  110. package/dist/components/p-415f7b11.js.map +1 -0
  111. package/dist/components/p-4353a2b8.js +155 -0
  112. package/dist/components/p-4353a2b8.js.map +1 -0
  113. package/dist/components/{p-b0c1fd63.js → p-4c89f065.js} +3 -3
  114. package/dist/components/p-4c89f065.js.map +1 -0
  115. package/dist/components/p-4fad3388.js +82 -0
  116. package/dist/components/p-4fad3388.js.map +1 -0
  117. package/dist/components/{p-6b353c3e.js → p-5639be85.js} +23 -3
  118. package/dist/components/p-5639be85.js.map +1 -0
  119. package/dist/components/p-9982883f.js +218 -0
  120. package/dist/components/p-9982883f.js.map +1 -0
  121. package/dist/components/p-9b9df0ca.js +67 -0
  122. package/dist/components/p-9b9df0ca.js.map +1 -0
  123. package/dist/components/p-9f2b8375.js +33 -0
  124. package/dist/components/p-9f2b8375.js.map +1 -0
  125. package/dist/components/p-ace4e6a0.js +35 -0
  126. package/dist/components/p-ace4e6a0.js.map +1 -0
  127. package/dist/components/p-c8bc1e4f.js +40 -0
  128. package/dist/components/p-c8bc1e4f.js.map +1 -0
  129. package/dist/components/{p-aad03c2a.js → p-de50441f.js} +2 -2
  130. package/dist/components/{p-aad03c2a.js.map → p-de50441f.js.map} +1 -1
  131. package/dist/components/searchcraft-auto-search-form.js +54 -82
  132. package/dist/components/searchcraft-auto-search-form.js.map +1 -1
  133. package/dist/components/searchcraft-base-search-form.js +20 -52
  134. package/dist/components/searchcraft-base-search-form.js.map +1 -1
  135. package/dist/components/searchcraft-base-search-result.js +1 -1
  136. package/dist/components/searchcraft-base-search-results.js +51 -52
  137. package/dist/components/searchcraft-base-search-results.js.map +1 -1
  138. package/dist/components/searchcraft-button-icon.js +1 -1
  139. package/dist/components/searchcraft-button.js +1 -1
  140. package/dist/components/searchcraft-check-icon.js +1 -1
  141. package/dist/components/searchcraft-clear-icon-set.js +39 -1
  142. package/dist/components/searchcraft-clear-icon-set.js.map +1 -1
  143. package/dist/components/searchcraft-dash-icon.js +1 -1
  144. package/dist/components/searchcraft-error-message.js +1 -1
  145. package/dist/components/searchcraft-facet-list.d.ts +11 -0
  146. package/dist/components/searchcraft-facet-list.js +8 -0
  147. package/dist/components/searchcraft-facet-list.js.map +1 -0
  148. package/dist/components/searchcraft-filter-panel.d.ts +11 -0
  149. package/dist/components/searchcraft-filter-panel.js +162 -0
  150. package/dist/components/searchcraft-filter-panel.js.map +1 -0
  151. package/dist/components/searchcraft-input-label.js +1 -1
  152. package/dist/components/searchcraft-input.js +1 -1
  153. package/dist/components/searchcraft-results-info.js +5 -6
  154. package/dist/components/searchcraft-results-info.js.map +1 -1
  155. package/dist/components/searchcraft-search-icon-set.js +44 -1
  156. package/dist/components/searchcraft-search-icon-set.js.map +1 -1
  157. package/dist/components/searchcraft-slider.js +1 -104
  158. package/dist/components/searchcraft-slider.js.map +1 -1
  159. package/dist/components/searchcraft-spinner-dark.js +1 -1
  160. package/dist/components/searchcraft-spinner-light.js +3 -3
  161. package/dist/components/searchcraft-spinner-light.js.map +1 -1
  162. package/dist/components/searchcraft-toggle-button.js +1 -93
  163. package/dist/components/searchcraft-toggle-button.js.map +1 -1
  164. package/dist/esm/{index-d851fb46.js → index-921fe029.js} +30 -4
  165. package/dist/esm/index-921fe029.js.map +1 -0
  166. package/dist/esm/index.js +2 -1
  167. package/dist/esm/index.js.map +1 -1
  168. package/dist/esm/loader.js +3 -3
  169. package/dist/esm/{package-82baadd7.js → package-e62ac63a.js} +3 -3
  170. package/dist/esm/package-e62ac63a.js.map +1 -0
  171. package/dist/esm/searchcraft-auto-search-form.entry.js +139 -0
  172. package/dist/esm/searchcraft-auto-search-form.entry.js.map +1 -0
  173. package/dist/esm/searchcraft-base-search-form.entry.js +8 -11
  174. package/dist/esm/searchcraft-base-search-form.entry.js.map +1 -1
  175. package/dist/esm/searchcraft-base-search-result.entry.js +70 -0
  176. package/dist/esm/searchcraft-base-search-result.entry.js.map +1 -0
  177. package/dist/esm/searchcraft-base-search-results.entry.js +105 -0
  178. package/dist/esm/searchcraft-base-search-results.entry.js.map +1 -0
  179. package/dist/esm/searchcraft-button-icon.entry.js +1 -1
  180. package/dist/esm/searchcraft-button.entry.js +3 -8
  181. package/dist/esm/searchcraft-button.entry.js.map +1 -1
  182. package/dist/esm/searchcraft-check-icon_2.entry.js +23 -0
  183. package/dist/esm/searchcraft-check-icon_2.entry.js.map +1 -0
  184. package/dist/{components/p-62e6b69c.js → esm/searchcraft-clear-icon-set.entry.js} +7 -24
  185. package/dist/esm/searchcraft-clear-icon-set.entry.js.map +1 -0
  186. package/dist/esm/searchcraft-error-message_3.entry.js +89 -0
  187. package/dist/esm/searchcraft-error-message_3.entry.js.map +1 -0
  188. package/dist/esm/searchcraft-facet-list_3.entry.js +230 -0
  189. package/dist/esm/searchcraft-facet-list_3.entry.js.map +1 -0
  190. package/dist/esm/searchcraft-filter-panel.entry.js +111 -0
  191. package/dist/esm/searchcraft-filter-panel.entry.js.map +1 -0
  192. package/dist/esm/searchcraft-javascript-sdk.js +3 -3
  193. package/dist/esm/searchcraft-results-info.entry.js +42 -0
  194. package/dist/esm/searchcraft-results-info.entry.js.map +1 -0
  195. package/dist/{components/p-5a872bdf.js → esm/searchcraft-search-icon-set.entry.js} +7 -26
  196. package/dist/esm/searchcraft-search-icon-set.entry.js.map +1 -0
  197. package/dist/esm/searchcraft-spinner-dark.entry.js +3 -3
  198. package/dist/esm/searchcraft-spinner-dark.entry.js.map +1 -1
  199. package/dist/esm/searchcraft-spinner-light.entry.js +3 -3
  200. package/dist/esm/searchcraft-spinner-light.entry.js.map +1 -1
  201. package/dist/{cjs/store-e3bbdd49.js → esm/store-8d82e948.js} +145 -220
  202. package/dist/esm/store-8d82e948.js.map +1 -0
  203. package/dist/esm/utils-ee63b542.js +218 -0
  204. package/dist/esm/utils-ee63b542.js.map +1 -0
  205. package/dist/searchcraft-javascript-sdk/index.esm.js +1 -1
  206. package/dist/searchcraft-javascript-sdk/p-15e0ce05.entry.js +2 -0
  207. package/dist/searchcraft-javascript-sdk/p-15e0ce05.entry.js.map +1 -0
  208. package/dist/searchcraft-javascript-sdk/p-2816782c.entry.js +2 -0
  209. package/dist/searchcraft-javascript-sdk/p-2816782c.entry.js.map +1 -0
  210. package/dist/searchcraft-javascript-sdk/p-3292e706.entry.js +2 -0
  211. package/dist/searchcraft-javascript-sdk/p-3292e706.entry.js.map +1 -0
  212. package/dist/searchcraft-javascript-sdk/p-4a2d1f44.entry.js +2 -0
  213. package/dist/searchcraft-javascript-sdk/p-4a2d1f44.entry.js.map +1 -0
  214. package/dist/searchcraft-javascript-sdk/p-4c89f065.js +2 -0
  215. package/dist/searchcraft-javascript-sdk/p-80e3f29f.js +3 -0
  216. package/dist/searchcraft-javascript-sdk/p-80e3f29f.js.map +1 -0
  217. package/dist/searchcraft-javascript-sdk/p-8a9b0762.entry.js +2 -0
  218. package/dist/searchcraft-javascript-sdk/p-8a9b0762.entry.js.map +1 -0
  219. package/dist/searchcraft-javascript-sdk/p-92d080a7.entry.js +2 -0
  220. package/dist/searchcraft-javascript-sdk/p-92d080a7.entry.js.map +1 -0
  221. package/dist/searchcraft-javascript-sdk/p-9982883f.js +2 -0
  222. package/dist/searchcraft-javascript-sdk/p-9982883f.js.map +1 -0
  223. package/dist/searchcraft-javascript-sdk/p-9f29b018.entry.js +2 -0
  224. package/dist/searchcraft-javascript-sdk/p-9f29b018.entry.js.map +1 -0
  225. package/dist/searchcraft-javascript-sdk/p-a148febe.entry.js +2 -0
  226. package/dist/searchcraft-javascript-sdk/p-a148febe.entry.js.map +1 -0
  227. package/dist/searchcraft-javascript-sdk/p-a2801518.js +11 -0
  228. package/dist/searchcraft-javascript-sdk/p-a2801518.js.map +1 -0
  229. package/dist/searchcraft-javascript-sdk/p-bcc68b15.entry.js +2 -0
  230. package/dist/searchcraft-javascript-sdk/p-bcc68b15.entry.js.map +1 -0
  231. package/dist/searchcraft-javascript-sdk/p-c70b31ae.entry.js +2 -0
  232. package/dist/searchcraft-javascript-sdk/p-c70b31ae.entry.js.map +1 -0
  233. package/dist/searchcraft-javascript-sdk/p-cc614ce6.entry.js +2 -0
  234. package/dist/searchcraft-javascript-sdk/p-cc614ce6.entry.js.map +1 -0
  235. package/dist/searchcraft-javascript-sdk/p-d4a7d8bd.entry.js +2 -0
  236. package/dist/searchcraft-javascript-sdk/p-d4a7d8bd.entry.js.map +1 -0
  237. package/dist/searchcraft-javascript-sdk/p-e108dd2e.entry.js +2 -0
  238. package/dist/searchcraft-javascript-sdk/p-e108dd2e.entry.js.map +1 -0
  239. package/dist/searchcraft-javascript-sdk/{p-99356c9a.entry.js → p-e8a96dca.entry.js} +2 -2
  240. package/dist/searchcraft-javascript-sdk/p-efb41d6d.entry.js +2 -0
  241. package/dist/searchcraft-javascript-sdk/p-efb41d6d.entry.js.map +1 -0
  242. package/dist/searchcraft-javascript-sdk/searchcraft-javascript-sdk.esm.js +1 -1
  243. package/dist/searchcraft-javascript-sdk/searchcraft-javascript-sdk.esm.js.map +1 -1
  244. package/dist/types/components/searchcraft-auto-search-form/searchcraft-auto-search-form.d.ts +5 -5
  245. package/dist/types/components/searchcraft-base-search-form/searchcraft-base-search-form.d.ts +3 -2
  246. package/dist/types/components/searchcraft-base-search-result/searchcraft-base-search-result.d.ts +16 -18
  247. package/dist/types/components/searchcraft-base-search-results/searchcraft-base-search-results.d.ts +10 -6
  248. package/dist/types/components/searchcraft-button/searchcraft-button.d.ts +0 -2
  249. package/dist/types/components/searchcraft-error-message/searchcraft-error-message.d.ts +0 -1
  250. package/dist/types/components/searchcraft-facet-list/searchcraft-facet-list.d.ts +24 -0
  251. package/dist/types/components/searchcraft-filter-panel/searchcraft-filter-panel.d.ts +22 -0
  252. package/dist/types/components/searchcraft-input/searchcraft-input.d.ts +4 -10
  253. package/dist/types/components/searchcraft-input-label/searchcraft-input-label.d.ts +0 -2
  254. package/dist/types/components/searchcraft-slider/searchcraft-slider.d.ts +12 -15
  255. package/dist/types/components/searchcraft-toggle-button/searchcraft-toggle-button.d.ts +8 -9
  256. package/dist/types/components.d.ts +127 -185
  257. package/dist/types/index.d.ts +2 -1
  258. package/dist/types/provider/store.d.ts +15 -14
  259. package/dist/types/types/index.d.ts +2 -0
  260. package/dist/types/types/searchcraft-base-search-results.types.d.ts +17 -0
  261. package/dist/types/types/searchcraft-filter-panel.types.d.ts +42 -0
  262. package/dist/types/utils/utils.d.ts +23 -15
  263. package/package.json +2 -2
  264. package/dist/cjs/index-264ebadc.js.map +0 -1
  265. package/dist/cjs/package-35d3b670.js.map +0 -1
  266. package/dist/cjs/searchcraft-auto-search-form_17.cjs.entry.js +0 -867
  267. package/dist/cjs/searchcraft-auto-search-form_17.cjs.entry.js.map +0 -1
  268. package/dist/cjs/store-e3bbdd49.js.map +0 -1
  269. package/dist/collection/components/searchcraft-clear-input-button/searchcraft-clear-input-button.js +0 -94
  270. package/dist/collection/components/searchcraft-clear-input-button/searchcraft-clear-input-button.js.map +0 -1
  271. package/dist/collection/components/searchcraft-clear-input-button/searchcraft-clear-input-button.module.css +0 -33
  272. package/dist/collection/components/searchcraft-filters-list/searchcraft-filters-list.js +0 -168
  273. package/dist/collection/components/searchcraft-filters-list/searchcraft-filters-list.js.map +0 -1
  274. package/dist/collection/components/searchcraft-filters-list/searchcraft-filters-list.module.css +0 -111
  275. package/dist/collection/components/searchcraft-input-caption/searchcraft-input-caption.js +0 -121
  276. package/dist/collection/components/searchcraft-input-caption/searchcraft-input-caption.js.map +0 -1
  277. package/dist/collection/components/searchcraft-input-caption/searchcraft-input-caption.module.css +0 -79
  278. package/dist/collection/components/searchcraft-input-icon/searchcraft-input-icon.js +0 -109
  279. package/dist/collection/components/searchcraft-input-icon/searchcraft-input-icon.js.map +0 -1
  280. package/dist/collection/components/searchcraft-input-icon/searchcraft-input-icon.module.css +0 -17
  281. package/dist/components/p-4f939ba2.js +0 -53
  282. package/dist/components/p-4f939ba2.js.map +0 -1
  283. package/dist/components/p-5015a359.js +0 -39
  284. package/dist/components/p-5015a359.js.map +0 -1
  285. package/dist/components/p-54848b4d.js +0 -136
  286. package/dist/components/p-54848b4d.js.map +0 -1
  287. package/dist/components/p-5a872bdf.js.map +0 -1
  288. package/dist/components/p-62c40862.js +0 -91
  289. package/dist/components/p-62c40862.js.map +0 -1
  290. package/dist/components/p-62e6b69c.js.map +0 -1
  291. package/dist/components/p-69ee3b9a.js +0 -59
  292. package/dist/components/p-69ee3b9a.js.map +0 -1
  293. package/dist/components/p-6b353c3e.js.map +0 -1
  294. package/dist/components/p-727bfc38.js.map +0 -1
  295. package/dist/components/p-7c280820.js +0 -33
  296. package/dist/components/p-7c280820.js.map +0 -1
  297. package/dist/components/p-7d385ffb.js +0 -60
  298. package/dist/components/p-7d385ffb.js.map +0 -1
  299. package/dist/components/p-8524c749.js +0 -54
  300. package/dist/components/p-8524c749.js.map +0 -1
  301. package/dist/components/p-b0c1fd63.js.map +0 -1
  302. package/dist/components/p-b38d171d.js +0 -47
  303. package/dist/components/p-b38d171d.js.map +0 -1
  304. package/dist/components/p-cd9a038a.js +0 -105
  305. package/dist/components/p-cd9a038a.js.map +0 -1
  306. package/dist/components/searchcraft-clear-input-button.d.ts +0 -11
  307. package/dist/components/searchcraft-clear-input-button.js +0 -8
  308. package/dist/components/searchcraft-clear-input-button.js.map +0 -1
  309. package/dist/components/searchcraft-filters-list.d.ts +0 -11
  310. package/dist/components/searchcraft-filters-list.js +0 -151
  311. package/dist/components/searchcraft-filters-list.js.map +0 -1
  312. package/dist/components/searchcraft-input-caption.d.ts +0 -11
  313. package/dist/components/searchcraft-input-caption.js +0 -8
  314. package/dist/components/searchcraft-input-caption.js.map +0 -1
  315. package/dist/components/searchcraft-input-icon.d.ts +0 -11
  316. package/dist/components/searchcraft-input-icon.js +0 -8
  317. package/dist/components/searchcraft-input-icon.js.map +0 -1
  318. package/dist/esm/index-d851fb46.js.map +0 -1
  319. package/dist/esm/package-82baadd7.js.map +0 -1
  320. package/dist/esm/searchcraft-auto-search-form_17.entry.js +0 -847
  321. package/dist/esm/searchcraft-auto-search-form_17.entry.js.map +0 -1
  322. package/dist/esm/store-b519dd0b.js.map +0 -1
  323. package/dist/searchcraft-javascript-sdk/p-1f3ae7f3.entry.js +0 -2
  324. package/dist/searchcraft-javascript-sdk/p-1f3ae7f3.entry.js.map +0 -1
  325. package/dist/searchcraft-javascript-sdk/p-201cb2dc.entry.js +0 -2
  326. package/dist/searchcraft-javascript-sdk/p-201cb2dc.entry.js.map +0 -1
  327. package/dist/searchcraft-javascript-sdk/p-2c220368.entry.js +0 -2
  328. package/dist/searchcraft-javascript-sdk/p-2c220368.entry.js.map +0 -1
  329. package/dist/searchcraft-javascript-sdk/p-39c0ca33.entry.js +0 -2
  330. package/dist/searchcraft-javascript-sdk/p-39c0ca33.entry.js.map +0 -1
  331. package/dist/searchcraft-javascript-sdk/p-476829a4.entry.js +0 -2
  332. package/dist/searchcraft-javascript-sdk/p-476829a4.entry.js.map +0 -1
  333. package/dist/searchcraft-javascript-sdk/p-b0c1fd63.js +0 -2
  334. package/dist/searchcraft-javascript-sdk/p-b42eaa55.js +0 -3
  335. package/dist/searchcraft-javascript-sdk/p-b42eaa55.js.map +0 -1
  336. package/dist/searchcraft-javascript-sdk/p-d5f8dda2.js +0 -11
  337. package/dist/searchcraft-javascript-sdk/p-d5f8dda2.js.map +0 -1
  338. package/dist/types/components/searchcraft-clear-input-button/searchcraft-clear-input-button.d.ts +0 -10
  339. package/dist/types/components/searchcraft-filters-list/searchcraft-filters-list.d.ts +0 -34
  340. package/dist/types/components/searchcraft-input-caption/searchcraft-input-caption.d.ts +0 -9
  341. package/dist/types/components/searchcraft-input-icon/searchcraft-input-icon.d.ts +0 -9
  342. package/readme.md +0 -11
  343. /package/dist/searchcraft-javascript-sdk/{p-b0c1fd63.js.map → p-4c89f065.js.map} +0 -0
  344. /package/dist/searchcraft-javascript-sdk/{p-99356c9a.entry.js.map → p-e8a96dca.entry.js.map} +0 -0
@@ -1,6 +1,5 @@
1
1
  import { create } from "zustand";
2
2
  import { SDKDebugger, LogLevel, } from "@searchcraft/core";
3
- import { filterPaths } from "../utils/utils";
4
3
  // Zustand store for Searchcraft state
5
4
  const useSearchcraftStore = create((set, get) => {
6
5
  let searchcraft = null;
@@ -24,53 +23,74 @@ const useSearchcraftStore = create((set, get) => {
24
23
  }
25
24
  };
26
25
  return {
26
+ resetFacetPaths: () => {
27
+ set({
28
+ facetPathsForIndexFields: {},
29
+ });
30
+ },
31
+ addFacetPathsForIndexField: (data) => set((state) => ({
32
+ facetPathsForIndexFields: Object.assign(Object.assign({}, state.facetPathsForIndexFields), { [data.fieldName]: data }),
33
+ })),
34
+ removeFacetPathsForIndexField: (fieldName) => set((state) => {
35
+ const currentPaths = state.facetPathsForIndexFields;
36
+ delete currentPaths[fieldName];
37
+ return {
38
+ facetPathsForIndexFields: Object.assign({}, currentPaths),
39
+ };
40
+ }),
41
+ addRangeValueForIndexField: (data) => set((state) => ({
42
+ rangeValueForIndexFields: Object.assign(Object.assign({}, state.rangeValueForIndexFields), { [data.fieldName]: data }),
43
+ })),
44
+ removeRangeValueForIndexField: (fieldName) => set((state) => {
45
+ const currentValues = state.rangeValueForIndexFields;
46
+ delete currentValues[fieldName];
47
+ return {
48
+ rangeValueForIndexFields: Object.assign({}, currentValues),
49
+ };
50
+ }),
51
+ setSearchMode: (mode) => set({ searchMode: mode }),
52
+ setSortType: (type) => set({ sortType: type }),
53
+ searchMode: 'fuzzy',
54
+ sortType: 'asc',
55
+ facetPathsForIndexFields: {},
56
+ rangeValueForIndexFields: {},
27
57
  query: '',
28
58
  isRequesting: false,
29
59
  searchResults: null,
30
60
  facets: null,
31
61
  getSearchcraftInstance: () => searchcraft,
32
- selectedFilters: [],
33
- searchParams: {
34
- mode: 'fuzzy',
35
- sort: 'asc',
62
+ setQuery: (query) => {
63
+ /**
64
+ * When a new query is set, also reset the sort type, search mode, and facet paths.
65
+ */
66
+ set({
67
+ query,
68
+ facetPathsForIndexFields: {},
69
+ searchMode: 'fuzzy',
70
+ sortType: 'asc',
71
+ });
36
72
  },
37
- setQuery: (query) => set({ query }),
38
73
  setSearchResults: (results) => set({ searchResults: results }),
39
74
  setFacets: (facets) => set({ facets }),
40
- setSelectedFilters: (filters) => set({ selectedFilters: filters }),
41
75
  setIsRequesting: (isRequesting) => set({ isRequesting }),
42
- setSearchParams: (params) => set((state) => ({
43
- searchParams: Object.assign(Object.assign({}, state.searchParams), params),
44
- })),
45
- setYearsRange: (yearsRange) => set((state) => ({
46
- searchParams: Object.assign(Object.assign({}, state.searchParams), { yearsRange }),
47
- })),
48
76
  search: async () => {
49
- const { query, selectedFilters, setIsRequesting, setSearchResults, setFacets, searchParams, } = get();
77
+ const state = get();
50
78
  if (!searchcraft) {
51
79
  throw new Error('Searchcraft instance is not initialized.');
52
80
  }
53
- setIsRequesting(true);
54
- log(LogLevel.INFO, `Starting search with query: "${query}"`);
55
- const filters = filterPaths(selectedFilters);
81
+ state.setIsRequesting(true);
82
+ log(LogLevel.INFO, `Starting search with query: "${state.query}"`);
56
83
  try {
57
- const searchRequest = {
58
- query,
59
- mode: searchParams.mode,
60
- sort: searchParams.sort,
61
- facets: selectedFilters.length > 0
62
- ? {
63
- section: {
64
- counts: Object.fromEntries(filters.map((path) => [path, 1])),
65
- },
66
- }
67
- : null,
68
- yearsRange: searchParams.yearsRange,
69
- };
70
- const results = await searchcraft.search(searchRequest);
71
- setSearchResults(results);
84
+ const results = await searchcraft.search({
85
+ query: state.query,
86
+ mode: state.searchMode,
87
+ sort: state.sortType,
88
+ facetPathsForIndexFields: state.facetPathsForIndexFields,
89
+ rangeValueForIndexFields: state.rangeValueForIndexFields,
90
+ });
72
91
  const updatedFacets = results.data.facets || null;
73
- setFacets(updatedFacets);
92
+ state.setSearchResults(results);
93
+ state.setFacets(updatedFacets);
74
94
  log(LogLevel.DEBUG, `Search results: ${JSON.stringify(results)}`);
75
95
  log(LogLevel.DEBUG, `Updated facets: ${JSON.stringify(updatedFacets)}`);
76
96
  }
@@ -79,7 +99,7 @@ const useSearchcraftStore = create((set, get) => {
79
99
  log(LogLevel.ERROR, `Search failed with error: ${error.message}`);
80
100
  }
81
101
  finally {
82
- setIsRequesting(false);
102
+ state.setIsRequesting(false);
83
103
  }
84
104
  },
85
105
  initialize: (searchcraftInstance, debug = false) => {
@@ -1 +1 @@
1
- {"version":3,"file":"store.js","sourceRoot":"","sources":["../../../src/provider/store.tsx"],"names":[],"mappings":"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","sourcesContent":["import { create } from 'zustand';\n\nimport {\n type SearchcraftCore,\n SDKDebugger,\n LogLevel,\n type SearchcraftResponse,\n type Facets,\n} from '@searchcraft/core';\n\nimport { filterPaths } from '@utils/utils';\n\ninterface ThemeState {\n theme: 'light' | 'dark';\n toggleTheme: () => void;\n}\n\ninterface SearchParams {\n mode: 'fuzzy' | 'normal';\n sort: 'asc' | 'desc';\n yearsRange?: [number, number];\n}\n\ninterface SearchcraftState {\n facets: Facets | null;\n getSearchcraftInstance: () => SearchcraftCore | null;\n initialize: (searchcraft: SearchcraftCore, debug?: boolean) => void;\n isRequesting: boolean;\n query: string;\n search: () => Promise<void>;\n searchParams: SearchParams;\n searchResults: SearchcraftResponse | null;\n selectedFilters: string[]; // Add this to store selected filters\n setFacets: (facets: Facets) => void;\n setIsRequesting: (isRequesting: boolean) => void;\n setQuery: (query: string) => void;\n setSearchParams: (params: Partial<SearchParams>) => void;\n setSearchResults: (results: SearchcraftResponse | null) => void;\n setSelectedFilters: (filters: string[]) => void; // Update selected filters\n setYearsRange: (yearsRange: [number, number]) => void;\n}\n\n// Zustand store for Searchcraft state\nconst useSearchcraftStore = create<SearchcraftState>((set, get) => {\n let searchcraft: SearchcraftCore | null = null;\n let debuggerInstance: SDKDebugger | null = null;\n\n const log = (level: LogLevel, message: string) => {\n if (debuggerInstance) {\n switch (level) {\n case LogLevel.DEBUG:\n debuggerInstance.debug(message);\n break;\n case LogLevel.INFO:\n debuggerInstance.info(message);\n break;\n case LogLevel.WARN:\n debuggerInstance.warn(message);\n break;\n case LogLevel.ERROR:\n debuggerInstance.error(message);\n break;\n }\n }\n };\n\n return {\n query: '',\n isRequesting: false,\n searchResults: null,\n facets: null,\n getSearchcraftInstance: () => searchcraft,\n selectedFilters: [],\n searchParams: {\n mode: 'fuzzy',\n sort: 'asc',\n },\n setQuery: (query) => set({ query }),\n setSearchResults: (results) => set({ searchResults: results }),\n setFacets: (facets) => set({ facets }),\n setSelectedFilters: (filters) => set({ selectedFilters: filters }),\n setIsRequesting: (isRequesting) => set({ isRequesting }),\n setSearchParams: (params) =>\n set((state) => ({\n searchParams: {\n ...state.searchParams,\n ...params,\n },\n })),\n setYearsRange: (yearsRange) =>\n set((state) => ({\n searchParams: {\n ...state.searchParams,\n yearsRange,\n },\n })),\n search: async () => {\n const {\n query,\n selectedFilters,\n setIsRequesting,\n setSearchResults,\n setFacets,\n searchParams,\n } = get();\n if (!searchcraft) {\n throw new Error('Searchcraft instance is not initialized.');\n }\n setIsRequesting(true);\n log(LogLevel.INFO, `Starting search with query: \"${query}\"`);\n const filters = filterPaths(selectedFilters);\n try {\n const searchRequest = {\n query,\n mode: searchParams.mode,\n sort: searchParams.sort,\n facets:\n selectedFilters.length > 0\n ? {\n section: {\n counts: Object.fromEntries(\n filters.map((path) => [path, 1]),\n ),\n },\n }\n : null,\n yearsRange: searchParams.yearsRange,\n };\n\n const results = await searchcraft.search(searchRequest);\n setSearchResults(results);\n const updatedFacets = results.data.facets || null;\n setFacets(updatedFacets);\n\n log(LogLevel.DEBUG, `Search results: ${JSON.stringify(results)}`);\n log(LogLevel.DEBUG, `Updated facets: ${JSON.stringify(updatedFacets)}`);\n } catch (error) {\n console.error(`Search failed: ${(error as Error).message}`);\n log(\n LogLevel.ERROR,\n `Search failed with error: ${(error as Error).message}`,\n );\n } finally {\n setIsRequesting(false);\n }\n },\n initialize: (searchcraftInstance, debug = false) => {\n searchcraft = searchcraftInstance;\n debuggerInstance = debug\n ? new SDKDebugger({ logLevel: LogLevel.DEBUG })\n : null;\n\n log(LogLevel.INFO, 'Searchcraft store initialized.');\n },\n };\n});\n\nconst useThemeStore = create<ThemeState>((set) => ({\n theme: 'light',\n toggleTheme: () =>\n set((state) => ({ theme: state.theme === 'light' ? 'dark' : 'light' })),\n}));\n\nexport { useSearchcraftStore, useThemeStore };\n"]}
1
+ {"version":3,"file":"store.js","sourceRoot":"","sources":["../../../src/provider/store.tsx"],"names":[],"mappings":"AAAA,OAAO,EAAE,MAAM,EAAE,MAAM,SAAS,CAAC;AAEjC,OAAO,EAEL,WAAW,EACX,QAAQ,GAKT,MAAM,mBAAmB,CAAC;AAgC3B,sCAAsC;AACtC,MAAM,mBAAmB,GAAG,MAAM,CAAmB,CAAC,GAAG,EAAE,GAAG,EAAE,EAAE;IAChE,IAAI,WAAW,GAA2B,IAAI,CAAC;IAC/C,IAAI,gBAAgB,GAAuB,IAAI,CAAC;IAEhD,MAAM,GAAG,GAAG,CAAC,KAAe,EAAE,OAAe,EAAE,EAAE;QAC/C,IAAI,gBAAgB,EAAE,CAAC;YACrB,QAAQ,KAAK,EAAE,CAAC;gBACd,KAAK,QAAQ,CAAC,KAAK;oBACjB,gBAAgB,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC;oBAChC,MAAM;gBACR,KAAK,QAAQ,CAAC,IAAI;oBAChB,gBAAgB,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC;oBAC/B,MAAM;gBACR,KAAK,QAAQ,CAAC,IAAI;oBAChB,gBAAgB,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC;oBAC/B,MAAM;gBACR,KAAK,QAAQ,CAAC,KAAK;oBACjB,gBAAgB,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC;oBAChC,MAAM;YACV,CAAC;QACH,CAAC;IACH,CAAC,CAAC;IAEF,OAAO;QACL,eAAe,EAAE,GAAG,EAAE;YACpB,GAAG,CAAC;gBACF,wBAAwB,EAAE,EAAE;aAC7B,CAAC,CAAC;QACL,CAAC;QACD,0BAA0B,EAAE,CAAC,IAA6B,EAAE,EAAE,CAC5D,GAAG,CAAC,CAAC,KAAK,EAAE,EAAE,CAAC,CAAC;YACd,wBAAwB,kCACnB,KAAK,CAAC,wBAAwB,KACjC,CAAC,IAAI,CAAC,SAAS,CAAC,EAAE,IAAI,GACvB;SACF,CAAC,CAAC;QACL,6BAA6B,EAAE,CAAC,SAAiB,EAAE,EAAE,CACnD,GAAG,CAAC,CAAC,KAAK,EAAE,EAAE;YACZ,MAAM,YAAY,GAAG,KAAK,CAAC,wBAAwB,CAAC;YACpD,OAAO,YAAY,CAAC,SAAS,CAAC,CAAC;YAC/B,OAAO;gBACL,wBAAwB,oBACnB,YAAY,CAChB;aACF,CAAC;QACJ,CAAC,CAAC;QACJ,0BAA0B,EAAE,CAAC,IAA6B,EAAE,EAAE,CAC5D,GAAG,CAAC,CAAC,KAAK,EAAE,EAAE,CAAC,CAAC;YACd,wBAAwB,kCACnB,KAAK,CAAC,wBAAwB,KACjC,CAAC,IAAI,CAAC,SAAS,CAAC,EAAE,IAAI,GACvB;SACF,CAAC,CAAC;QACL,6BAA6B,EAAE,CAAC,SAAiB,EAAE,EAAE,CACnD,GAAG,CAAC,CAAC,KAAK,EAAE,EAAE;YACZ,MAAM,aAAa,GAAG,KAAK,CAAC,wBAAwB,CAAC;YACrD,OAAO,aAAa,CAAC,SAAS,CAAC,CAAC;YAChC,OAAO;gBACL,wBAAwB,oBACnB,aAAa,CACjB;aACF,CAAC;QACJ,CAAC,CAAC;QACJ,aAAa,EAAE,CAAC,IAAI,EAAE,EAAE,CAAC,GAAG,CAAC,EAAE,UAAU,EAAE,IAAI,EAAE,CAAC;QAClD,WAAW,EAAE,CAAC,IAAI,EAAE,EAAE,CAAC,GAAG,CAAC,EAAE,QAAQ,EAAE,IAAI,EAAE,CAAC;QAC9C,UAAU,EAAE,OAAO;QACnB,QAAQ,EAAE,KAAK;QACf,wBAAwB,EAAE,EAAE;QAC5B,wBAAwB,EAAE,EAAE;QAC5B,KAAK,EAAE,EAAE;QACT,YAAY,EAAE,KAAK;QACnB,aAAa,EAAE,IAAI;QACnB,MAAM,EAAE,IAAI;QACZ,sBAAsB,EAAE,GAAG,EAAE,CAAC,WAAW;QACzC,QAAQ,EAAE,CAAC,KAAK,EAAE,EAAE;YAClB;;eAEG;YACH,GAAG,CAAC;gBACF,KAAK;gBACL,wBAAwB,EAAE,EAAE;gBAC5B,UAAU,EAAE,OAAO;gBACnB,QAAQ,EAAE,KAAK;aAChB,CAAC,CAAC;QACL,CAAC;QACD,gBAAgB,EAAE,CAAC,OAAO,EAAE,EAAE,CAAC,GAAG,CAAC,EAAE,aAAa,EAAE,OAAO,EAAE,CAAC;QAC9D,SAAS,EAAE,CAAC,MAAM,EAAE,EAAE,CAAC,GAAG,CAAC,EAAE,MAAM,EAAE,CAAC;QACtC,eAAe,EAAE,CAAC,YAAY,EAAE,EAAE,CAAC,GAAG,CAAC,EAAE,YAAY,EAAE,CAAC;QACxD,MAAM,EAAE,KAAK,IAAI,EAAE;YACjB,MAAM,KAAK,GAAG,GAAG,EAAE,CAAC;YACpB,IAAI,CAAC,WAAW,EAAE,CAAC;gBACjB,MAAM,IAAI,KAAK,CAAC,0CAA0C,CAAC,CAAC;YAC9D,CAAC;YACD,KAAK,CAAC,eAAe,CAAC,IAAI,CAAC,CAAC;YAC5B,GAAG,CAAC,QAAQ,CAAC,IAAI,EAAE,gCAAgC,KAAK,CAAC,KAAK,GAAG,CAAC,CAAC;YACnE,IAAI,CAAC;gBACH,MAAM,OAAO,GAAG,MAAM,WAAW,CAAC,MAAM,CAAC;oBACvC,KAAK,EAAE,KAAK,CAAC,KAAK;oBAClB,IAAI,EAAE,KAAK,CAAC,UAAU;oBACtB,IAAI,EAAE,KAAK,CAAC,QAAQ;oBACpB,wBAAwB,EAAE,KAAK,CAAC,wBAAwB;oBACxD,wBAAwB,EAAE,KAAK,CAAC,wBAAwB;iBACzD,CAAC,CAAC;gBACH,MAAM,aAAa,GAAG,OAAO,CAAC,IAAI,CAAC,MAAM,IAAI,IAAI,CAAC;gBAElD,KAAK,CAAC,gBAAgB,CAAC,OAAO,CAAC,CAAC;gBAChC,KAAK,CAAC,SAAS,CAAC,aAAa,CAAC,CAAC;gBAE/B,GAAG,CAAC,QAAQ,CAAC,KAAK,EAAE,mBAAmB,IAAI,CAAC,SAAS,CAAC,OAAO,CAAC,EAAE,CAAC,CAAC;gBAClE,GAAG,CAAC,QAAQ,CAAC,KAAK,EAAE,mBAAmB,IAAI,CAAC,SAAS,CAAC,aAAa,CAAC,EAAE,CAAC,CAAC;YAC1E,CAAC;YAAC,OAAO,KAAK,EAAE,CAAC;gBACf,OAAO,CAAC,KAAK,CAAC,kBAAmB,KAAe,CAAC,OAAO,EAAE,CAAC,CAAC;gBAC5D,GAAG,CACD,QAAQ,CAAC,KAAK,EACd,6BAA8B,KAAe,CAAC,OAAO,EAAE,CACxD,CAAC;YACJ,CAAC;oBAAS,CAAC;gBACT,KAAK,CAAC,eAAe,CAAC,KAAK,CAAC,CAAC;YAC/B,CAAC;QACH,CAAC;QACD,UAAU,EAAE,CAAC,mBAAmB,EAAE,KAAK,GAAG,KAAK,EAAE,EAAE;YACjD,WAAW,GAAG,mBAAmB,CAAC;YAClC,gBAAgB,GAAG,KAAK;gBACtB,CAAC,CAAC,IAAI,WAAW,CAAC,EAAE,QAAQ,EAAE,QAAQ,CAAC,KAAK,EAAE,CAAC;gBAC/C,CAAC,CAAC,IAAI,CAAC;YAET,GAAG,CAAC,QAAQ,CAAC,IAAI,EAAE,gCAAgC,CAAC,CAAC;QACvD,CAAC;KACF,CAAC;AACJ,CAAC,CAAC,CAAC;AAEH,MAAM,aAAa,GAAG,MAAM,CAAa,CAAC,GAAG,EAAE,EAAE,CAAC,CAAC;IACjD,KAAK,EAAE,OAAO;IACd,WAAW,EAAE,GAAG,EAAE,CAChB,GAAG,CAAC,CAAC,KAAK,EAAE,EAAE,CAAC,CAAC,EAAE,KAAK,EAAE,KAAK,CAAC,KAAK,KAAK,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,OAAO,EAAE,CAAC,CAAC;CAC1E,CAAC,CAAC,CAAC;AAEJ,OAAO,EAAE,mBAAmB,EAAE,aAAa,EAAE,CAAC","sourcesContent":["import { create } from 'zustand';\n\nimport {\n type SearchcraftCore,\n SDKDebugger,\n LogLevel,\n type SearchcraftResponse,\n type FacetPrime,\n type FacetPathsForIndexField,\n type RangeValueForIndexField,\n} from '@searchcraft/core';\n\ninterface ThemeState {\n theme: 'light' | 'dark';\n toggleTheme: () => void;\n}\n\nexport interface SearchcraftState {\n resetFacetPaths: () => void;\n addFacetPathsForIndexField: (data: FacetPathsForIndexField) => void;\n removeFacetPathsForIndexField: (fieldName: string) => void;\n addRangeValueForIndexField: (data: RangeValueForIndexField) => void;\n removeRangeValueForIndexField: (fieldName: string) => void;\n setSearchMode: (mode: 'fuzzy' | 'normal') => void;\n setSortType: (type: 'asc' | 'desc') => void;\n facetPathsForIndexFields: Record<string, FacetPathsForIndexField>;\n rangeValueForIndexFields: Record<string, RangeValueForIndexField>;\n searchMode: 'fuzzy' | 'normal';\n sortType: 'asc' | 'desc';\n facets: FacetPrime | null;\n getSearchcraftInstance: () => SearchcraftCore | null;\n initialize: (searchcraft: SearchcraftCore, debug?: boolean) => void;\n isRequesting: boolean;\n query: string;\n search: () => Promise<void>;\n searchResults: SearchcraftResponse | null;\n setFacets: (facets: FacetPrime) => void;\n setIsRequesting: (isRequesting: boolean) => void;\n setQuery: (query: string) => void;\n setSearchResults: (results: SearchcraftResponse | null) => void;\n}\n\n// Zustand store for Searchcraft state\nconst useSearchcraftStore = create<SearchcraftState>((set, get) => {\n let searchcraft: SearchcraftCore | null = null;\n let debuggerInstance: SDKDebugger | null = null;\n\n const log = (level: LogLevel, message: string) => {\n if (debuggerInstance) {\n switch (level) {\n case LogLevel.DEBUG:\n debuggerInstance.debug(message);\n break;\n case LogLevel.INFO:\n debuggerInstance.info(message);\n break;\n case LogLevel.WARN:\n debuggerInstance.warn(message);\n break;\n case LogLevel.ERROR:\n debuggerInstance.error(message);\n break;\n }\n }\n };\n\n return {\n resetFacetPaths: () => {\n set({\n facetPathsForIndexFields: {},\n });\n },\n addFacetPathsForIndexField: (data: FacetPathsForIndexField) =>\n set((state) => ({\n facetPathsForIndexFields: {\n ...state.facetPathsForIndexFields,\n [data.fieldName]: data,\n },\n })),\n removeFacetPathsForIndexField: (fieldName: string) =>\n set((state) => {\n const currentPaths = state.facetPathsForIndexFields;\n delete currentPaths[fieldName];\n return {\n facetPathsForIndexFields: {\n ...currentPaths,\n },\n };\n }),\n addRangeValueForIndexField: (data: RangeValueForIndexField) =>\n set((state) => ({\n rangeValueForIndexFields: {\n ...state.rangeValueForIndexFields,\n [data.fieldName]: data,\n },\n })),\n removeRangeValueForIndexField: (fieldName: string) =>\n set((state) => {\n const currentValues = state.rangeValueForIndexFields;\n delete currentValues[fieldName];\n return {\n rangeValueForIndexFields: {\n ...currentValues,\n },\n };\n }),\n setSearchMode: (mode) => set({ searchMode: mode }),\n setSortType: (type) => set({ sortType: type }),\n searchMode: 'fuzzy',\n sortType: 'asc',\n facetPathsForIndexFields: {},\n rangeValueForIndexFields: {},\n query: '',\n isRequesting: false,\n searchResults: null,\n facets: null,\n getSearchcraftInstance: () => searchcraft,\n setQuery: (query) => {\n /**\n * When a new query is set, also reset the sort type, search mode, and facet paths.\n */\n set({\n query,\n facetPathsForIndexFields: {},\n searchMode: 'fuzzy',\n sortType: 'asc',\n });\n },\n setSearchResults: (results) => set({ searchResults: results }),\n setFacets: (facets) => set({ facets }),\n setIsRequesting: (isRequesting) => set({ isRequesting }),\n search: async () => {\n const state = get();\n if (!searchcraft) {\n throw new Error('Searchcraft instance is not initialized.');\n }\n state.setIsRequesting(true);\n log(LogLevel.INFO, `Starting search with query: \"${state.query}\"`);\n try {\n const results = await searchcraft.search({\n query: state.query,\n mode: state.searchMode,\n sort: state.sortType,\n facetPathsForIndexFields: state.facetPathsForIndexFields,\n rangeValueForIndexFields: state.rangeValueForIndexFields,\n });\n const updatedFacets = results.data.facets || null;\n\n state.setSearchResults(results);\n state.setFacets(updatedFacets);\n\n log(LogLevel.DEBUG, `Search results: ${JSON.stringify(results)}`);\n log(LogLevel.DEBUG, `Updated facets: ${JSON.stringify(updatedFacets)}`);\n } catch (error) {\n console.error(`Search failed: ${(error as Error).message}`);\n log(\n LogLevel.ERROR,\n `Search failed with error: ${(error as Error).message}`,\n );\n } finally {\n state.setIsRequesting(false);\n }\n },\n initialize: (searchcraftInstance, debug = false) => {\n searchcraft = searchcraftInstance;\n debuggerInstance = debug\n ? new SDKDebugger({ logLevel: LogLevel.DEBUG })\n : null;\n\n log(LogLevel.INFO, 'Searchcraft store initialized.');\n },\n };\n});\n\nconst useThemeStore = create<ThemeState>((set) => ({\n theme: 'light',\n toggleTheme: () =>\n set((state) => ({ theme: state.theme === 'light' ? 'dark' : 'light' })),\n}));\n\nexport { useSearchcraftStore, useThemeStore };\n"]}
@@ -0,0 +1,3 @@
1
+ export * from './searchcraft-base-search-results.types';
2
+ export * from './searchcraft-filter-panel.types';
3
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/types/index.ts"],"names":[],"mappings":"AAAA,cAAc,yCAAyC,CAAC;AACxD,cAAc,kCAAkC,CAAC","sourcesContent":["export * from './searchcraft-base-search-results.types';\nexport * from './searchcraft-filter-panel.types';\n"]}
@@ -0,0 +1,2 @@
1
+ export {};
2
+ //# sourceMappingURL=searchcraft-base-search-results.types.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"searchcraft-base-search-results.types.js","sourceRoot":"","sources":["../../../src/types/searchcraft-base-search-results.types.ts"],"names":[],"mappings":"","sourcesContent":["export type SearchResultFieldName = {\n fieldName: string;\n dataType: 'text' | 'date';\n};\n\nexport type SearchResultMapping = {\n fieldNames: SearchResultFieldName[];\n delimeter?: string;\n};\n\nexport type SearchResultMappings = {\n body?: SearchResultMapping;\n buttonHref?: SearchResultMapping;\n containerHref?: SearchResultMapping;\n footer?: SearchResultMapping;\n imageSource?: SearchResultMapping;\n subtitle?: SearchResultMapping;\n title?: SearchResultMapping;\n};\n"]}
@@ -0,0 +1,2 @@
1
+ export {};
2
+ //# sourceMappingURL=searchcraft-filter-panel.types.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"searchcraft-filter-panel.types.js","sourceRoot":"","sources":["../../../src/types/searchcraft-filter-panel.types.ts"],"names":[],"mappings":"","sourcesContent":["export interface FilterItem {\n type:\n | 'facets'\n | 'dateRange'\n | 'numericRange'\n | 'exactMatchToggle'\n | 'mostRecentToggle';\n label: string;\n options: object | null;\n}\n\nexport interface FacetsFilterItem extends FilterItem {\n fieldName: string;\n type: 'facets';\n options: {\n showSublevel: boolean;\n };\n}\n\nexport interface NumericFilterItem extends FilterItem {\n fieldName: string;\n type: 'numericRange';\n options: {\n min: number;\n max: number;\n granularity: number;\n };\n}\n\nexport interface DateRangeFilterItem extends FilterItem {\n fieldName: string;\n type: 'dateRange';\n options: {\n minDate: Date;\n maxDate: Date;\n granularity: 'year' | 'month' | 'day' | 'hour';\n };\n}\n\nexport interface ExactMatchToggleFilterItem extends FilterItem {\n type: 'exactMatchToggle';\n options: {\n subLabel?: string;\n };\n}\n\nexport interface MostRecentToggleFilterItem extends FilterItem {\n type: 'mostRecentToggle';\n options: {\n subLabel?: string;\n };\n}\n"]}
@@ -10,28 +10,6 @@ export function parseCustomStyles(styles) {
10
10
  }
11
11
  return styles || {};
12
12
  }
13
- export function parseSearchKeys(documentAttributesForDisplay) {
14
- try {
15
- const parsedKeys = JSON.parse(documentAttributesForDisplay);
16
- if (Array.isArray(parsedKeys) &&
17
- parsedKeys.every((key) => typeof key === 'string')) {
18
- return parsedKeys;
19
- }
20
- console.warn('searchKeys must be a JSON array of strings. Defaulting to an empty array.');
21
- return [];
22
- }
23
- catch (error) {
24
- console.error('Failed to parse searchKeys:', error);
25
- return [];
26
- }
27
- }
28
- export function extractDynamicProperties(document, keys) {
29
- const extractedProperties = {};
30
- keys.forEach((key) => {
31
- extractedProperties[key] = document[key] || '';
32
- });
33
- return extractedProperties;
34
- }
35
13
  export function serializeStyles(styles) {
36
14
  try {
37
15
  return JSON.stringify(styles);
@@ -41,6 +19,13 @@ export function serializeStyles(styles) {
41
19
  return '{}';
42
20
  }
43
21
  }
22
+ /**
23
+ * Given a timestamp value, returns a formatted time string for the time
24
+ * since now.
25
+ *
26
+ * @param timestamp
27
+ * @returns {string} Formatted string value
28
+ */
44
29
  export function getFormattedTimeFromNow(timestamp) {
45
30
  const now = new Date();
46
31
  const inputTime = new Date(timestamp);
@@ -60,19 +45,6 @@ export function getFormattedTimeFromNow(timestamp) {
60
45
  }
61
46
  return `${years}y ago`;
62
47
  }
63
- export function flattenFacets(sections) {
64
- return sections.map((section) => {
65
- const fullPath = section.path;
66
- // Create the FacetCheckbox object
67
- const facetCheckbox = {
68
- label: fullPath.replace(/^\//, ''), // Format the label without leading slash
69
- value: fullPath, // The full path as the value
70
- count: section.count, // Count from the Section
71
- children: flattenFacets(section.children || []), // Recursively flatten children
72
- };
73
- return facetCheckbox;
74
- });
75
- }
76
48
  export function filterPaths(paths) {
77
49
  return paths.filter((path) => {
78
50
  const parts = path.split('/').filter(Boolean);
@@ -85,4 +57,168 @@ export function filterPaths(paths) {
85
57
  export function formatNumberWithCommas(number) {
86
58
  return number.toString().replace(/\B(?=(\d{3})+(?!\d))/g, ',');
87
59
  }
60
+ export function getMillis(unit) {
61
+ const millisInHour = 60 * 60 * 1000;
62
+ const millisInDay = 24 * millisInHour;
63
+ const millisInMonth = 30 * millisInDay;
64
+ const millisInYear = 365 * millisInDay;
65
+ switch (unit) {
66
+ case 'hour':
67
+ return millisInHour;
68
+ case 'day':
69
+ return millisInDay;
70
+ case 'month':
71
+ return millisInMonth;
72
+ case 'year':
73
+ return millisInYear;
74
+ default:
75
+ return 3600000;
76
+ }
77
+ }
78
+ /**
79
+ * Given an array of facet paths, removes parent facet paths.
80
+ */
81
+ export function removeSubstringMatches(arr) {
82
+ return arr.filter((entry, index, array) => !array.some((otherEntry, otherIndex) => otherIndex !== index && otherEntry.includes(entry)));
83
+ }
84
+ /**
85
+ * Given a document and a SearchResultMapping, return a mapped value from the document.
86
+ *
87
+ * @param document
88
+ * @param {SearchResultMapping} mapping
89
+ * @returns {string | undefined}
90
+ */
91
+ export function getDocumentValueFromSearchResultMapping(document, mapping) {
92
+ if (document && mapping) {
93
+ return mapping.fieldNames
94
+ .map((fieldNameDetails) => {
95
+ let valueFound = document[fieldNameDetails.fieldName];
96
+ if (valueFound && fieldNameDetails.dataType === 'date') {
97
+ valueFound = getFormattedTimeFromNow(valueFound);
98
+ }
99
+ return valueFound;
100
+ })
101
+ .filter((value) => !!value)
102
+ .join(mapping.delimeter || ' ');
103
+ }
104
+ }
105
+ function deepMergeWithSpread(obj1, obj2) {
106
+ const result = Object.assign({}, obj1);
107
+ for (const key in obj2) {
108
+ // biome-ignore lint/suspicious/noPrototypeBuiltins: <explanation>
109
+ if (obj2.hasOwnProperty(key)) {
110
+ if (obj2[key] instanceof Object && obj1[key] instanceof Object) {
111
+ result[key] = deepMergeWithSpread(obj1[key], obj2[key]);
112
+ }
113
+ else {
114
+ result[key] = obj2[key];
115
+ }
116
+ }
117
+ }
118
+ return result;
119
+ }
120
+ function facetToRecord(facet) {
121
+ const records = {};
122
+ const traverseAndAddToFragments = (facetChild) => {
123
+ var _a;
124
+ records[facetChild.path] = {
125
+ count: facetChild.count,
126
+ path: facetChild.path,
127
+ };
128
+ (_a = facetChild.children) === null || _a === void 0 ? void 0 : _a.forEach((child) => {
129
+ traverseAndAddToFragments(child);
130
+ });
131
+ };
132
+ traverseAndAddToFragments(facet);
133
+ return records;
134
+ }
135
+ function recordToObject(record) {
136
+ const root = {
137
+ count: 0,
138
+ path: '/',
139
+ children: {},
140
+ };
141
+ Object.keys(record).forEach((key) => {
142
+ const fragment = record[key];
143
+ if (fragment.path === '/') {
144
+ return;
145
+ }
146
+ const pathParts = fragment.path.substring(1).split('/');
147
+ let currentRoot = root;
148
+ let currentPath = '';
149
+ pathParts.forEach((part, index) => {
150
+ const nextPath = `${currentPath}/${part}`;
151
+ if (!currentRoot.children[nextPath]) {
152
+ currentRoot.children[nextPath] = {
153
+ count: 0,
154
+ path: nextPath,
155
+ children: {},
156
+ };
157
+ }
158
+ if (index === pathParts.length - 1) {
159
+ currentRoot.children[nextPath].count = fragment.count;
160
+ }
161
+ currentPath = nextPath;
162
+ currentRoot = currentRoot.children[nextPath];
163
+ });
164
+ });
165
+ return root;
166
+ }
167
+ function objectToFacet(childObject) {
168
+ const transformed = {
169
+ count: childObject.count,
170
+ path: childObject.path,
171
+ children: [],
172
+ };
173
+ if (Object.keys(childObject.children).length > 0) {
174
+ transformed.children = Object.values(childObject.children).map((subChildObject) => objectToFacet(subChildObject));
175
+ }
176
+ return transformed;
177
+ }
178
+ /**
179
+ * Filters records with the parent paths from record2 OUT of record1
180
+ */
181
+ function filterRecordByParentPaths(record1, record2) {
182
+ // Extract all paths (keys) both records
183
+ const paths1 = Object.keys(record1);
184
+ const paths2 = Object.keys(record2);
185
+ // Find all parent paths in record2
186
+ const parentPaths = new Set(paths2
187
+ .filter((path) => path.split('/').length > 2) // Only consider paths with more than one level
188
+ .map((path) => path.substring(0, path.lastIndexOf('/'))));
189
+ // Filter out keys in record1 that share a parent path with any of the identified parent paths
190
+ const filteredRecord = Object.fromEntries(paths1
191
+ .filter((path) => !parentPaths.has(path.substring(0, path.lastIndexOf('/'))))
192
+ .map((path) => [path, record1[path]]));
193
+ return filteredRecord;
194
+ }
195
+ export function mergeFacetRoots(fieldName, currentRoot, incomingRoot) {
196
+ const currentArray = currentRoot[fieldName];
197
+ const incomingArray = incomingRoot[fieldName];
198
+ const currentRootFacetChild = {
199
+ count: 0,
200
+ path: '/',
201
+ children: currentArray,
202
+ };
203
+ const incomingRootFacetChild = {
204
+ count: 0,
205
+ path: '/',
206
+ children: incomingArray,
207
+ };
208
+ // Flatten them into records
209
+ const currentRecord = facetToRecord(currentRootFacetChild);
210
+ const incomingRecord = facetToRecord(incomingRootFacetChild);
211
+ // Filter out the records from record1 (the current set of records)
212
+ // that share a parent path with record2 (the incoming records)
213
+ const filteredCurrentRecord = filterRecordByParentPaths(currentRecord, incomingRecord);
214
+ // Deep merge the records together
215
+ const mergedRecord = deepMergeWithSpread(filteredCurrentRecord, incomingRecord);
216
+ // Convert into a heirarchical object
217
+ const mergedObject = recordToObject(mergedRecord);
218
+ // Convert the heirarchical object back to the Facet child structure
219
+ const mergedFacetChild = objectToFacet(mergedObject);
220
+ return {
221
+ [fieldName]: mergedFacetChild.children,
222
+ };
223
+ }
88
224
  //# sourceMappingURL=utils.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"utils.js","sourceRoot":"","sources":["../../../src/utils/utils.ts"],"names":[],"mappings":"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","sourcesContent":["export function parseCustomStyles(\n styles: string | Record<string, string>,\n): Record<string, string> {\n if (typeof styles === 'string') {\n try {\n return JSON.parse(styles);\n } catch (error) {\n console.error('Invalid customStyles format:', styles);\n return {};\n }\n }\n return styles || {};\n}\n\nexport function parseSearchKeys(\n documentAttributesForDisplay: string,\n): string[] {\n try {\n const parsedKeys = JSON.parse(documentAttributesForDisplay);\n if (\n Array.isArray(parsedKeys) &&\n parsedKeys.every((key) => typeof key === 'string')\n ) {\n return parsedKeys;\n }\n console.warn(\n 'searchKeys must be a JSON array of strings. Defaulting to an empty array.',\n );\n return [];\n } catch (error) {\n console.error('Failed to parse searchKeys:', error);\n return [];\n }\n}\n\nexport function extractDynamicProperties(\n document: Record<string, string | number>,\n keys: string[],\n) {\n const extractedProperties: Record<string, string | number> = {};\n keys.forEach((key) => {\n extractedProperties[key] = document[key] || '';\n });\n return extractedProperties;\n}\n\nexport function serializeStyles(\n styles: Record<string, Record<string, string>>,\n): string {\n try {\n return JSON.stringify(styles);\n } catch (error) {\n console.error('Error serializing styles:', error);\n return '{}';\n }\n}\n\nexport function getFormattedTimeFromNow(timestamp: string): string {\n const now = new Date();\n const inputTime = new Date(timestamp);\n const diffInSeconds = Math.floor(\n (now.getTime() - inputTime.getTime()) / 1000,\n );\n\n const minutes = Math.floor(diffInSeconds / 60);\n const hours = Math.floor(minutes / 60);\n const days = Math.floor(hours / 24);\n const years = Math.floor(days / 365);\n\n if (minutes < 60) {\n return `${minutes}m ago`;\n }\n if (hours < 24) {\n return `${hours}h ago`;\n }\n if (days < 365) {\n return `${days}d ago`;\n }\n return `${years}y ago`;\n}\n\ntype Section = {\n count: number;\n path: string;\n children: Section[];\n};\n\ntype FacetCheckbox = {\n count: number;\n // biome-ignore lint/suspicious/noExplicitAny: <explanation>\n children: any[];\n label: string;\n value: string;\n};\n\nexport function flattenFacets(sections: Section[]): FacetCheckbox[] {\n return sections.map((section) => {\n const fullPath = section.path;\n\n // Create the FacetCheckbox object\n const facetCheckbox: FacetCheckbox = {\n label: fullPath.replace(/^\\//, ''), // Format the label without leading slash\n value: fullPath, // The full path as the value\n count: section.count, // Count from the Section\n children: flattenFacets(section.children || []), // Recursively flatten children\n };\n\n return facetCheckbox;\n });\n}\n\nexport function filterPaths(paths) {\n return paths.filter((path) => {\n const parts = path.split('/').filter(Boolean);\n\n if (parts.length > 1) {\n return true;\n }\n\n return !paths.some(\n (otherPath) => otherPath.startsWith(`${path}/`) && otherPath !== path,\n );\n });\n}\n\nexport function formatNumberWithCommas(number) {\n return number.toString().replace(/\\B(?=(\\d{3})+(?!\\d))/g, ',');\n}\n"]}
1
+ {"version":3,"file":"utils.js","sourceRoot":"","sources":["../../../src/utils/utils.ts"],"names":[],"mappings":"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","sourcesContent":["import type {\n FacetChild,\n FacetChildObject,\n FacetRoot,\n} from '@searchcraft/core';\nimport type { SearchResultMapping } from 'types';\n\nexport function parseCustomStyles(\n styles: string | Record<string, string>,\n): Record<string, string> {\n if (typeof styles === 'string') {\n try {\n return JSON.parse(styles);\n } catch (error) {\n console.error('Invalid customStyles format:', styles);\n return {};\n }\n }\n return styles || {};\n}\n\nexport function serializeStyles(\n styles: Record<string, Record<string, string>>,\n): string {\n try {\n return JSON.stringify(styles);\n } catch (error) {\n console.error('Error serializing styles:', error);\n return '{}';\n }\n}\n\n/**\n * Given a timestamp value, returns a formatted time string for the time\n * since now.\n *\n * @param timestamp\n * @returns {string} Formatted string value\n */\nexport function getFormattedTimeFromNow(timestamp: string): string {\n const now = new Date();\n const inputTime = new Date(timestamp);\n const diffInSeconds = Math.floor(\n (now.getTime() - inputTime.getTime()) / 1000,\n );\n\n const minutes = Math.floor(diffInSeconds / 60);\n const hours = Math.floor(minutes / 60);\n const days = Math.floor(hours / 24);\n const years = Math.floor(days / 365);\n\n if (minutes < 60) {\n return `${minutes}m ago`;\n }\n if (hours < 24) {\n return `${hours}h ago`;\n }\n if (days < 365) {\n return `${days}d ago`;\n }\n return `${years}y ago`;\n}\n\nexport function filterPaths(paths) {\n return paths.filter((path) => {\n const parts = path.split('/').filter(Boolean);\n\n if (parts.length > 1) {\n return true;\n }\n\n return !paths.some(\n (otherPath) => otherPath.startsWith(`${path}/`) && otherPath !== path,\n );\n });\n}\n\nexport function formatNumberWithCommas(number) {\n return number.toString().replace(/\\B(?=(\\d{3})+(?!\\d))/g, ',');\n}\n\nexport function getMillis(unit: 'year' | 'month' | 'day' | 'hour'): number {\n const millisInHour = 60 * 60 * 1000;\n const millisInDay = 24 * millisInHour;\n const millisInMonth = 30 * millisInDay;\n const millisInYear = 365 * millisInDay;\n\n switch (unit) {\n case 'hour':\n return millisInHour;\n case 'day':\n return millisInDay;\n case 'month':\n return millisInMonth;\n case 'year':\n return millisInYear;\n default:\n return 3600000;\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\n/**\n * Given a document and a SearchResultMapping, return a mapped value from the document.\n *\n * @param document\n * @param {SearchResultMapping} mapping\n * @returns {string | undefined}\n */\nexport function getDocumentValueFromSearchResultMapping(\n document: Record<string, unknown> | undefined,\n mapping: SearchResultMapping | undefined,\n): string | undefined {\n if (document && mapping) {\n return mapping.fieldNames\n .map((fieldNameDetails) => {\n let valueFound = document[fieldNameDetails.fieldName];\n\n if (valueFound && fieldNameDetails.dataType === 'date') {\n valueFound = getFormattedTimeFromNow(valueFound as string);\n }\n\n return valueFound;\n })\n .filter((value) => !!value)\n .join(mapping.delimeter || ' ');\n }\n}\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\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.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;\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 };\n}\n"]}
@@ -6,13 +6,11 @@ import { SearchcraftButton } from './searchcraft-button.js';
6
6
  import { SearchcraftButtonIcon } from './searchcraft-button-icon.js';
7
7
  import { SearchcraftCheckIcon } from './searchcraft-check-icon.js';
8
8
  import { SearchcraftClearIconSet } from './searchcraft-clear-icon-set.js';
9
- import { SearchcraftClearInputButton } from './searchcraft-clear-input-button.js';
10
9
  import { SearchcraftDashIcon } from './searchcraft-dash-icon.js';
11
10
  import { SearchcraftErrorMessage } from './searchcraft-error-message.js';
12
- import { SearchcraftFiltersList } from './searchcraft-filters-list.js';
11
+ import { SearchcraftFacetList } from './searchcraft-facet-list.js';
12
+ import { SearchcraftFilterPanel } from './searchcraft-filter-panel.js';
13
13
  import { SearchcraftInput } from './searchcraft-input.js';
14
- import { SearchcraftInputCaption } from './searchcraft-input-caption.js';
15
- import { SearchcraftInputIcon } from './searchcraft-input-icon.js';
16
14
  import { SearchcraftInputLabel } from './searchcraft-input-label.js';
17
15
  import { SearchcraftResultsInfo } from './searchcraft-results-info.js';
18
16
  import { SearchcraftSearchIconSet } from './searchcraft-search-icon-set.js';
@@ -20,9 +18,9 @@ import { SearchcraftSlider } from './searchcraft-slider.js';
20
18
  import { SearchcraftSpinnerDark } from './searchcraft-spinner-dark.js';
21
19
  import { SearchcraftSpinnerLight } from './searchcraft-spinner-light.js';
22
20
  import { SearchcraftToggleButton } from './searchcraft-toggle-button.js';
23
- export { g as getAssetPath, s as setAssetPath, a as setNonce, b as setPlatformOptions } from './p-6b353c3e.js';
24
- export { e as extractDynamicProperties, p as parseCustomStyles, a as parseSearchKeys, s as serializeStyles } from './p-62c40862.js';
25
- export { u as useSearchcraftStore, a as useThemeStore } from './p-727bfc38.js';
21
+ export { g as getAssetPath, s as setAssetPath, a as setNonce, b as setPlatformOptions } from './p-5639be85.js';
22
+ export { p as parseCustomStyles, s as serializeStyles } from './p-9982883f.js';
23
+ export { u as useSearchcraftStore, a as useThemeStore } from './p-3c181808.js';
26
24
 
27
25
  const defineCustomElements = (opts) => {
28
26
  if (typeof customElements !== 'undefined') {
@@ -35,13 +33,11 @@ const defineCustomElements = (opts) => {
35
33
  SearchcraftButtonIcon,
36
34
  SearchcraftCheckIcon,
37
35
  SearchcraftClearIconSet,
38
- SearchcraftClearInputButton,
39
36
  SearchcraftDashIcon,
40
37
  SearchcraftErrorMessage,
41
- SearchcraftFiltersList,
38
+ SearchcraftFacetList,
39
+ SearchcraftFilterPanel,
42
40
  SearchcraftInput,
43
- SearchcraftInputCaption,
44
- SearchcraftInputIcon,
45
41
  SearchcraftInputLabel,
46
42
  SearchcraftResultsInfo,
47
43
  SearchcraftSearchIconSet,
@@ -1 +1 @@
1
- {"file":"index.js","mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;","names":[],"sources":[],"sourcesContent":[],"version":3}
1
+ {"file":"index.js","mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;","names":[],"sources":[],"sourcesContent":[],"version":3}
@@ -1,4 +1,4 @@
1
- import { p as proxyCustomElement, H, h } from './p-6b353c3e.js';
1
+ import { p as proxyCustomElement, H, h } from './p-5639be85.js';
2
2
 
3
3
  const SearchcraftCheckIcon = /*@__PURE__*/ proxyCustomElement(class SearchcraftCheckIcon extends H {
4
4
  constructor() {
@@ -26,4 +26,4 @@ function defineCustomElement() {
26
26
 
27
27
  export { SearchcraftCheckIcon as S, defineCustomElement as d };
28
28
 
29
- //# sourceMappingURL=p-bbf9973a.js.map
29
+ //# sourceMappingURL=p-04d13314.js.map
@@ -1 +1 @@
1
- {"file":"p-bbf9973a.js","mappings":";;MAMa,oBAAoB;;;;;;IAC/B,MAAM;QACJ,QACE,4DAAK,KAAK,EAAC,IAAI,EAAC,MAAM,EAAC,IAAI,EAAC,OAAO,EAAC,WAAW,EAAC,IAAI,EAAC,MAAM,IACzD,iFAA6B,EAC7B,6DACE,CAAC,EAAC,uCAAuC,EACzC,MAAM,EAAC,OAAO,kBACD,GAAG,oBACD,OAAO,qBACN,OAAO,GACvB,CACE,EACN;KACH;;;;;;;;;;;;;;;;;;","names":[],"sources":["src/assets/searchcraft-check-icon.tsx"],"sourcesContent":["import { Component, h } from '@stencil/core';\n\n@Component({\n tag: 'searchcraft-check-icon',\n shadow: true,\n})\nexport class SearchcraftCheckIcon {\n render() {\n return (\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 );\n }\n}\n"],"version":3}
1
+ {"file":"p-04d13314.js","mappings":";;MAMa,oBAAoB;;;;;;IAC/B,MAAM;QACJ,QACE,4DAAK,KAAK,EAAC,IAAI,EAAC,MAAM,EAAC,IAAI,EAAC,OAAO,EAAC,WAAW,EAAC,IAAI,EAAC,MAAM,IACzD,iFAA6B,EAC7B,6DACE,CAAC,EAAC,uCAAuC,EACzC,MAAM,EAAC,OAAO,kBACD,GAAG,oBACD,OAAO,qBACN,OAAO,GACvB,CACE,EACN;KACH;;;;;;;;;;;;;;;;;;","names":[],"sources":["src/assets/searchcraft-check-icon.tsx"],"sourcesContent":["import { Component, h } from '@stencil/core';\n\n@Component({\n tag: 'searchcraft-check-icon',\n shadow: true,\n})\nexport class SearchcraftCheckIcon {\n render() {\n return (\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 );\n }\n}\n"],"version":3}