instantsearch.js 4.49.0 → 4.49.2

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 (376) hide show
  1. package/README.md +3 -3
  2. package/cjs/components/Answers/Answers.js +6 -16
  3. package/cjs/components/Breadcrumb/Breadcrumb.js +5 -12
  4. package/cjs/components/ClearRefinements/ClearRefinements.js +4 -11
  5. package/cjs/components/CurrentRefinements/CurrentRefinements.js +5 -12
  6. package/cjs/components/GeoSearchControls/GeoSearchButton.js +4 -6
  7. package/cjs/components/GeoSearchControls/GeoSearchControls.js +11 -20
  8. package/cjs/components/GeoSearchControls/GeoSearchToggle.js +4 -6
  9. package/cjs/components/Highlight/Highlight.js +3 -11
  10. package/cjs/components/Hits/Hits.js +8 -20
  11. package/cjs/components/InfiniteHits/InfiniteHits.js +13 -25
  12. package/cjs/components/InternalHighlight/InternalHighlight.js +0 -3
  13. package/cjs/components/MenuSelect/MenuSelect.js +9 -19
  14. package/cjs/components/Pagination/Pagination.js +10 -17
  15. package/cjs/components/Panel/Panel.js +7 -26
  16. package/cjs/components/PoweredBy/PoweredBy.js +4 -5
  17. package/cjs/components/QueryRuleCustomData/QueryRuleCustomData.js +2 -6
  18. package/cjs/components/RangeInput/RangeInput.js +16 -48
  19. package/cjs/components/RefinementList/RefinementList.js +19 -73
  20. package/cjs/components/RefinementList/RefinementListItem.js +8 -14
  21. package/cjs/components/RelevantSort/RelevantSort.js +4 -8
  22. package/cjs/components/ReverseHighlight/ReverseHighlight.js +3 -11
  23. package/cjs/components/ReverseSnippet/ReverseSnippet.js +3 -11
  24. package/cjs/components/SearchBox/SearchBox.js +25 -69
  25. package/cjs/components/Selector/Selector.js +3 -6
  26. package/cjs/components/Slider/Pit.js +3 -10
  27. package/cjs/components/Slider/Rheostat.js +63 -131
  28. package/cjs/components/Slider/Slider.js +28 -65
  29. package/cjs/components/Snippet/Snippet.js +3 -11
  30. package/cjs/components/Stats/Stats.js +7 -20
  31. package/cjs/components/Template/Template.js +8 -37
  32. package/cjs/components/ToggleRefinement/ToggleRefinement.js +4 -10
  33. package/cjs/components/VoiceSearch/VoiceSearch.js +8 -15
  34. package/cjs/connectors/answers/connectAnswers.js +21 -36
  35. package/cjs/connectors/autocomplete/connectAutocomplete.js +8 -25
  36. package/cjs/connectors/breadcrumb/connectBreadcrumb.js +17 -48
  37. package/cjs/connectors/clear-refinements/connectClearRefinements.js +27 -45
  38. package/cjs/connectors/configure/connectConfigure.js +6 -20
  39. package/cjs/connectors/configure-related-items/connectConfigureRelatedItems.js +11 -36
  40. package/cjs/connectors/current-refinements/connectCurrentRefinements.js +18 -57
  41. package/cjs/connectors/dynamic-widgets/connectDynamicWidgets.js +17 -37
  42. package/cjs/connectors/geo-search/connectGeoSearch.js +17 -47
  43. package/cjs/connectors/hierarchical-menu/connectHierarchicalMenu.js +38 -74
  44. package/cjs/connectors/hits/connectHits.js +10 -26
  45. package/cjs/connectors/hits/connectHitsWithInsights.js +0 -4
  46. package/cjs/connectors/hits-per-page/connectHitsPerPage.js +15 -38
  47. package/cjs/connectors/index.js +62 -96
  48. package/cjs/connectors/infinite-hits/connectInfiniteHits.js +26 -62
  49. package/cjs/connectors/infinite-hits/connectInfiniteHitsWithInsights.js +0 -4
  50. package/cjs/connectors/menu/connectMenu.js +28 -66
  51. package/cjs/connectors/numeric-menu/connectNumericMenu.js +24 -78
  52. package/cjs/connectors/pagination/Paginator.js +3 -20
  53. package/cjs/connectors/pagination/connectPagination.js +8 -25
  54. package/cjs/connectors/powered-by/connectPoweredBy.js +4 -13
  55. package/cjs/connectors/query-rules/connectQueryRules.js +32 -56
  56. package/cjs/connectors/range/connectRange.js +41 -101
  57. package/cjs/connectors/rating-menu/connectRatingMenu.js +23 -79
  58. package/cjs/connectors/refinement-list/connectRefinementList.js +37 -70
  59. package/cjs/connectors/relevant-sort/connectRelevantSort.js +4 -14
  60. package/cjs/connectors/search-box/connectSearchBox.js +7 -23
  61. package/cjs/connectors/sort-by/connectSortBy.js +11 -21
  62. package/cjs/connectors/stats/connectStats.js +4 -11
  63. package/cjs/connectors/toggle-refinement/connectToggleRefinement.js +29 -63
  64. package/cjs/connectors/voice-search/connectVoiceSearch.js +13 -35
  65. package/cjs/helpers/components/Highlight.js +4 -12
  66. package/cjs/helpers/components/ReverseHighlight.js +7 -19
  67. package/cjs/helpers/components/ReverseSnippet.js +7 -19
  68. package/cjs/helpers/components/Snippet.js +4 -12
  69. package/cjs/helpers/components/index.js +0 -8
  70. package/cjs/helpers/get-insights-anonymous-user-token.js +7 -12
  71. package/cjs/helpers/highlight.js +10 -16
  72. package/cjs/helpers/index.js +17 -31
  73. package/cjs/helpers/insights.js +5 -17
  74. package/cjs/helpers/reverseHighlight.js +10 -16
  75. package/cjs/helpers/reverseSnippet.js +10 -16
  76. package/cjs/helpers/snippet.js +10 -16
  77. package/cjs/index.js +3 -18
  78. package/cjs/lib/InstantSearch.js +79 -180
  79. package/cjs/lib/createHelpers.js +4 -11
  80. package/cjs/lib/formatNumber.js +0 -1
  81. package/cjs/lib/infiniteHitsCache/index.js +0 -2
  82. package/cjs/lib/infiniteHitsCache/sessionStorage.js +9 -18
  83. package/cjs/lib/insights/client.js +8 -34
  84. package/cjs/lib/insights/index.js +7 -13
  85. package/cjs/lib/insights/listener.js +4 -20
  86. package/cjs/lib/routers/history.js +63 -102
  87. package/cjs/lib/routers/index.js +0 -2
  88. package/cjs/lib/stateMappings/index.js +0 -3
  89. package/cjs/lib/stateMappings/simple.js +6 -13
  90. package/cjs/lib/stateMappings/singleIndex.js +1 -7
  91. package/cjs/lib/suit.js +2 -5
  92. package/cjs/lib/templating/index.js +0 -4
  93. package/cjs/lib/templating/prepareTemplateProps.js +8 -19
  94. package/cjs/lib/templating/renderTemplate.js +9 -24
  95. package/cjs/lib/utils/capitalize.js +0 -1
  96. package/cjs/lib/utils/checkIndexUiState.js +15 -43
  97. package/cjs/lib/utils/checkRendering.js +0 -2
  98. package/cjs/lib/utils/clearRefinements.js +2 -9
  99. package/cjs/lib/utils/concatHighlightedParts.js +1 -3
  100. package/cjs/lib/utils/createConcurrentSafePromise.js +0 -3
  101. package/cjs/lib/utils/createSendEventForFacet.js +7 -14
  102. package/cjs/lib/utils/createSendEventForHits.js +9 -33
  103. package/cjs/lib/utils/debounce.js +0 -3
  104. package/cjs/lib/utils/defer.js +0 -11
  105. package/cjs/lib/utils/detect-insights-client.js +0 -2
  106. package/cjs/lib/utils/documentation.js +2 -5
  107. package/cjs/lib/utils/escape-highlight.js +5 -22
  108. package/cjs/lib/utils/escape-html.js +9 -7
  109. package/cjs/lib/utils/escapeFacetValue.js +1 -5
  110. package/cjs/lib/utils/find.js +2 -5
  111. package/cjs/lib/utils/findIndex.js +0 -3
  112. package/cjs/lib/utils/geo-search.js +14 -34
  113. package/cjs/lib/utils/getAppIdAndApiKey.js +2 -3
  114. package/cjs/lib/utils/getContainerNode.js +0 -6
  115. package/cjs/lib/utils/getHighlightFromSiblings.js +0 -6
  116. package/cjs/lib/utils/getHighlightedParts.js +1 -4
  117. package/cjs/lib/utils/getObjectType.js +0 -1
  118. package/cjs/lib/utils/getPropertyByPath.js +0 -1
  119. package/cjs/lib/utils/getRefinements.js +13 -26
  120. package/cjs/lib/utils/getWidgetAttribute.js +0 -6
  121. package/cjs/lib/utils/hits-absolute-position.js +2 -6
  122. package/cjs/lib/utils/hits-query-id.js +2 -7
  123. package/cjs/lib/utils/index.js +0 -92
  124. package/cjs/lib/utils/isDomElement.js +0 -1
  125. package/cjs/lib/utils/isEqual.js +0 -8
  126. package/cjs/lib/utils/isFacetRefined.js +0 -1
  127. package/cjs/lib/utils/isFiniteNumber.js +0 -1
  128. package/cjs/lib/utils/isIndexWidget.js +0 -1
  129. package/cjs/lib/utils/isPlainObject.js +3 -11
  130. package/cjs/lib/utils/isSpecialClick.js +0 -1
  131. package/cjs/lib/utils/logger.js +3 -13
  132. package/cjs/lib/utils/mergeSearchParameters.js +16 -40
  133. package/cjs/lib/utils/noop.js +0 -1
  134. package/cjs/lib/utils/range.js +8 -14
  135. package/cjs/lib/utils/render-args.js +0 -2
  136. package/cjs/lib/utils/resolveSearchParameters.js +0 -3
  137. package/cjs/lib/utils/reverseHighlightedParts.js +2 -8
  138. package/cjs/lib/utils/safelyRunOnBrowser.js +7 -9
  139. package/cjs/lib/utils/serializer.js +1 -3
  140. package/cjs/lib/utils/setIndexHelperState.js +0 -5
  141. package/cjs/lib/utils/toArray.js +0 -1
  142. package/cjs/lib/utils/typedObject.js +0 -1
  143. package/cjs/lib/utils/uniq.js +0 -1
  144. package/cjs/lib/version.js +1 -1
  145. package/cjs/lib/voiceSearchHelper/index.js +8 -36
  146. package/cjs/middlewares/createInsightsMiddleware.js +15 -44
  147. package/cjs/middlewares/createMetadataMiddleware.js +4 -12
  148. package/cjs/middlewares/createRouterMiddleware.js +8 -19
  149. package/cjs/middlewares/index.js +0 -6
  150. package/cjs/types/algoliasearch.js +0 -2
  151. package/cjs/types/index.js +0 -28
  152. package/cjs/widgets/analytics/analytics.js +12 -47
  153. package/cjs/widgets/answers/answers.js +19 -39
  154. package/cjs/widgets/breadcrumb/breadcrumb.js +18 -38
  155. package/cjs/widgets/clear-refinements/clear-refinements.js +15 -35
  156. package/cjs/widgets/configure/configure.js +2 -10
  157. package/cjs/widgets/configure-related-items/configure-related-items.js +2 -10
  158. package/cjs/widgets/current-refinements/current-refinements.js +12 -30
  159. package/cjs/widgets/dynamic-widgets/dynamic-widgets.js +6 -25
  160. package/cjs/widgets/geo-search/GeoSearchRenderer.js +41 -68
  161. package/cjs/widgets/geo-search/createHTMLMarker.js +30 -60
  162. package/cjs/widgets/geo-search/defaultTemplates.js +0 -3
  163. package/cjs/widgets/geo-search/geo-search.js +27 -59
  164. package/cjs/widgets/hierarchical-menu/defaultTemplates.js +4 -7
  165. package/cjs/widgets/hierarchical-menu/hierarchical-menu.js +28 -47
  166. package/cjs/widgets/hits/hits.js +16 -37
  167. package/cjs/widgets/hits-per-page/hits-per-page.js +13 -31
  168. package/cjs/widgets/index/index.js +49 -95
  169. package/cjs/widgets/index.js +12 -50
  170. package/cjs/widgets/infinite-hits/infinite-hits.js +23 -44
  171. package/cjs/widgets/menu/defaultTemplates.js +3 -6
  172. package/cjs/widgets/menu/menu.js +23 -43
  173. package/cjs/widgets/menu-select/defaultTemplates.js +1 -3
  174. package/cjs/widgets/menu-select/menu-select.js +18 -38
  175. package/cjs/widgets/numeric-menu/defaultTemplates.js +3 -4
  176. package/cjs/widgets/numeric-menu/numeric-menu.js +17 -37
  177. package/cjs/widgets/pagination/pagination.js +32 -53
  178. package/cjs/widgets/panel/panel.js +20 -48
  179. package/cjs/widgets/places/places.js +16 -33
  180. package/cjs/widgets/powered-by/powered-by.js +10 -27
  181. package/cjs/widgets/query-rule-context/query-rule-context.js +2 -13
  182. package/cjs/widgets/query-rule-custom-data/query-rule-custom-data.js +14 -32
  183. package/cjs/widgets/range-input/range-input.js +23 -50
  184. package/cjs/widgets/range-slider/range-slider.js +28 -53
  185. package/cjs/widgets/rating-menu/defaultTemplates.js +8 -14
  186. package/cjs/widgets/rating-menu/rating-menu.js +17 -38
  187. package/cjs/widgets/refinement-list/defaultTemplates.js +5 -8
  188. package/cjs/widgets/refinement-list/refinement-list.js +39 -60
  189. package/cjs/widgets/relevant-sort/relevant-sort.js +10 -29
  190. package/cjs/widgets/search-box/defaultTemplates.js +0 -5
  191. package/cjs/widgets/search-box/search-box.js +31 -49
  192. package/cjs/widgets/sort-by/sort-by.js +11 -29
  193. package/cjs/widgets/stats/defaultTemplates.js +0 -1
  194. package/cjs/widgets/stats/stats.js +27 -57
  195. package/cjs/widgets/toggle-refinement/toggle-refinement.js +16 -36
  196. package/cjs/widgets/voice-search/defaultTemplates.js +4 -14
  197. package/cjs/widgets/voice-search/voice-search.js +17 -36
  198. package/dist/instantsearch.development.d.ts +8 -6
  199. package/dist/instantsearch.development.js +1725 -3087
  200. package/dist/instantsearch.development.js.map +1 -1
  201. package/dist/instantsearch.production.d.ts +8 -6
  202. package/dist/instantsearch.production.min.d.ts +8 -6
  203. package/dist/instantsearch.production.min.js +2 -2
  204. package/dist/instantsearch.production.min.js.map +1 -1
  205. package/es/components/Answers/Answers.js +6 -11
  206. package/es/components/Breadcrumb/Breadcrumb.js +5 -7
  207. package/es/components/ClearRefinements/ClearRefinements.js +4 -6
  208. package/es/components/CurrentRefinements/CurrentRefinements.js +7 -10
  209. package/es/components/GeoSearchControls/GeoSearchButton.js +6 -6
  210. package/es/components/GeoSearchControls/GeoSearchControls.js +11 -13
  211. package/es/components/GeoSearchControls/GeoSearchToggle.js +6 -6
  212. package/es/components/Highlight/Highlight.js +3 -7
  213. package/es/components/Hits/Hits.js +8 -15
  214. package/es/components/InfiniteHits/InfiniteHits.js +13 -20
  215. package/es/components/MenuSelect/MenuSelect.js +9 -13
  216. package/es/components/Pagination/Pagination.js +12 -15
  217. package/es/components/Panel/Panel.js +7 -20
  218. package/es/components/PoweredBy/PoweredBy.js +6 -5
  219. package/es/components/QueryRuleCustomData/QueryRuleCustomData.js +4 -4
  220. package/es/components/RangeInput/RangeInput.js +16 -43
  221. package/es/components/RefinementList/RefinementList.js +19 -64
  222. package/es/components/RefinementList/RefinementListItem.js +8 -10
  223. package/es/components/RelevantSort/RelevantSort.js +6 -6
  224. package/es/components/ReverseHighlight/ReverseHighlight.js +3 -7
  225. package/es/components/ReverseSnippet/ReverseSnippet.js +3 -7
  226. package/es/components/SearchBox/SearchBox.js +25 -63
  227. package/es/components/Selector/Selector.js +5 -5
  228. package/es/components/Slider/Pit.js +3 -7
  229. package/es/components/Slider/Rheostat.js +64 -129
  230. package/es/components/Slider/Slider.js +28 -58
  231. package/es/components/Snippet/Snippet.js +3 -7
  232. package/es/components/Stats/Stats.js +7 -15
  233. package/es/components/Template/Template.js +8 -32
  234. package/es/components/ToggleRefinement/ToggleRefinement.js +4 -6
  235. package/es/components/VoiceSearch/VoiceSearch.js +10 -13
  236. package/es/connectors/answers/connectAnswers.js +21 -35
  237. package/es/connectors/autocomplete/connectAutocomplete.js +8 -23
  238. package/es/connectors/breadcrumb/connectBreadcrumb.js +17 -46
  239. package/es/connectors/clear-refinements/connectClearRefinements.js +27 -43
  240. package/es/connectors/configure/connectConfigure.js +7 -16
  241. package/es/connectors/configure-related-items/connectConfigureRelatedItems.js +11 -31
  242. package/es/connectors/current-refinements/connectCurrentRefinements.js +18 -55
  243. package/es/connectors/dynamic-widgets/connectDynamicWidgets.js +17 -35
  244. package/es/connectors/geo-search/connectGeoSearch.js +17 -45
  245. package/es/connectors/hierarchical-menu/connectHierarchicalMenu.js +38 -72
  246. package/es/connectors/hits/connectHits.js +10 -24
  247. package/es/connectors/hits-per-page/connectHitsPerPage.js +15 -36
  248. package/es/connectors/index.d.ts +2 -1
  249. package/es/connectors/index.js +6 -3
  250. package/es/connectors/infinite-hits/connectInfiniteHits.js +26 -60
  251. package/es/connectors/menu/connectMenu.js +28 -64
  252. package/es/connectors/numeric-menu/connectNumericMenu.js +24 -76
  253. package/es/connectors/pagination/Paginator.js +3 -19
  254. package/es/connectors/pagination/connectPagination.js +8 -21
  255. package/es/connectors/powered-by/connectPoweredBy.js +4 -11
  256. package/es/connectors/query-rules/connectQueryRules.js +32 -54
  257. package/es/connectors/range/connectRange.js +41 -99
  258. package/es/connectors/rating-menu/connectRatingMenu.js +23 -77
  259. package/es/connectors/refinement-list/connectRefinementList.js +37 -68
  260. package/es/connectors/relevant-sort/connectRelevantSort.js +4 -13
  261. package/es/connectors/search-box/connectSearchBox.js +7 -21
  262. package/es/connectors/sort-by/connectSortBy.js +11 -19
  263. package/es/connectors/stats/connectStats.js +4 -9
  264. package/es/connectors/toggle-refinement/connectToggleRefinement.js +29 -61
  265. package/es/connectors/voice-search/connectVoiceSearch.js +13 -31
  266. package/es/helpers/components/Highlight.js +4 -8
  267. package/es/helpers/components/ReverseHighlight.js +7 -15
  268. package/es/helpers/components/ReverseSnippet.js +7 -15
  269. package/es/helpers/components/Snippet.js +4 -8
  270. package/es/helpers/get-insights-anonymous-user-token.js +5 -7
  271. package/es/helpers/highlight.js +9 -11
  272. package/es/helpers/insights.js +3 -10
  273. package/es/helpers/reverseHighlight.js +9 -11
  274. package/es/helpers/reverseSnippet.js +9 -11
  275. package/es/helpers/snippet.js +9 -11
  276. package/es/index.js +0 -2
  277. package/es/lib/InstantSearch.js +79 -170
  278. package/es/lib/createHelpers.js +4 -8
  279. package/es/lib/infiniteHitsCache/sessionStorage.js +9 -16
  280. package/es/lib/insights/client.js +8 -32
  281. package/es/lib/insights/listener.js +6 -18
  282. package/es/lib/routers/history.js +63 -99
  283. package/es/lib/stateMappings/simple.js +6 -12
  284. package/es/lib/stateMappings/singleIndex.js +1 -6
  285. package/es/lib/suit.js +2 -3
  286. package/es/lib/templating/prepareTemplateProps.js +8 -18
  287. package/es/lib/templating/renderTemplate.js +9 -20
  288. package/es/lib/utils/checkIndexUiState.js +18 -40
  289. package/es/lib/utils/clearRefinements.js +2 -8
  290. package/es/lib/utils/concatHighlightedParts.js +1 -1
  291. package/es/lib/utils/createConcurrentSafePromise.js +0 -2
  292. package/es/lib/utils/createSendEventForFacet.js +7 -12
  293. package/es/lib/utils/createSendEventForHits.js +8 -30
  294. package/es/lib/utils/debounce.js +0 -2
  295. package/es/lib/utils/defer.js +0 -10
  296. package/es/lib/utils/documentation.js +2 -3
  297. package/es/lib/utils/escape-highlight.js +3 -16
  298. package/es/lib/utils/escape-html.js +9 -5
  299. package/es/lib/utils/escapeFacetValue.js +0 -2
  300. package/es/lib/utils/find.js +2 -4
  301. package/es/lib/utils/findIndex.js +0 -2
  302. package/es/lib/utils/geo-search.js +14 -32
  303. package/es/lib/utils/getAppIdAndApiKey.js +2 -2
  304. package/es/lib/utils/getContainerNode.js +1 -5
  305. package/es/lib/utils/getHighlightFromSiblings.js +0 -3
  306. package/es/lib/utils/getHighlightedParts.js +1 -2
  307. package/es/lib/utils/getRefinements.js +13 -24
  308. package/es/lib/utils/getWidgetAttribute.js +0 -5
  309. package/es/lib/utils/hits-absolute-position.js +2 -5
  310. package/es/lib/utils/hits-query-id.js +2 -6
  311. package/es/lib/utils/isEqual.js +0 -7
  312. package/es/lib/utils/isPlainObject.js +3 -10
  313. package/es/lib/utils/logger.js +2 -12
  314. package/es/lib/utils/mergeSearchParameters.js +16 -37
  315. package/es/lib/utils/range.js +8 -13
  316. package/es/lib/utils/resolveSearchParameters.js +0 -2
  317. package/es/lib/utils/reverseHighlightedParts.js +2 -6
  318. package/es/lib/utils/safelyRunOnBrowser.js +7 -8
  319. package/es/lib/utils/setIndexHelperState.js +0 -2
  320. package/es/lib/version.d.ts +1 -1
  321. package/es/lib/version.js +1 -1
  322. package/es/lib/voiceSearchHelper/index.js +8 -35
  323. package/es/middlewares/createInsightsMiddleware.js +15 -41
  324. package/es/middlewares/createMetadataMiddleware.js +3 -9
  325. package/es/middlewares/createRouterMiddleware.js +8 -13
  326. package/es/types/index.js +9 -5
  327. package/es/widgets/analytics/analytics.js +12 -45
  328. package/es/widgets/answers/answers.js +19 -28
  329. package/es/widgets/breadcrumb/breadcrumb.js +18 -27
  330. package/es/widgets/clear-refinements/clear-refinements.js +15 -24
  331. package/es/widgets/configure/configure.js +3 -6
  332. package/es/widgets/configure-related-items/configure-related-items.js +2 -7
  333. package/es/widgets/current-refinements/current-refinements.js +12 -21
  334. package/es/widgets/dynamic-widgets/dynamic-widgets.js +6 -20
  335. package/es/widgets/geo-search/GeoSearchRenderer.js +41 -63
  336. package/es/widgets/geo-search/createHTMLMarker.js +30 -59
  337. package/es/widgets/geo-search/defaultTemplates.js +2 -2
  338. package/es/widgets/geo-search/geo-search.js +27 -49
  339. package/es/widgets/hierarchical-menu/defaultTemplates.js +5 -4
  340. package/es/widgets/hierarchical-menu/hierarchical-menu.js +28 -36
  341. package/es/widgets/hits/hits.js +16 -25
  342. package/es/widgets/hits-per-page/hits-per-page.js +13 -22
  343. package/es/widgets/index/index.js +49 -91
  344. package/es/widgets/index.d.ts +2 -1
  345. package/es/widgets/index.js +4 -3
  346. package/es/widgets/infinite-hits/infinite-hits.js +23 -32
  347. package/es/widgets/menu/defaultTemplates.js +4 -3
  348. package/es/widgets/menu/menu.js +23 -32
  349. package/es/widgets/menu-select/defaultTemplates.js +1 -1
  350. package/es/widgets/menu-select/menu-select.js +18 -27
  351. package/es/widgets/numeric-menu/defaultTemplates.js +4 -3
  352. package/es/widgets/numeric-menu/numeric-menu.js +17 -26
  353. package/es/widgets/pagination/pagination.js +32 -44
  354. package/es/widgets/panel/panel.js +20 -40
  355. package/es/widgets/places/places.js +16 -32
  356. package/es/widgets/powered-by/powered-by.js +10 -18
  357. package/es/widgets/query-rule-context/query-rule-context.js +2 -9
  358. package/es/widgets/query-rule-custom-data/query-rule-custom-data.js +13 -22
  359. package/es/widgets/range-input/range-input.js +23 -40
  360. package/es/widgets/range-slider/range-slider.js +28 -44
  361. package/es/widgets/rating-menu/defaultTemplates.js +9 -12
  362. package/es/widgets/rating-menu/rating-menu.js +17 -27
  363. package/es/widgets/refinement-list/defaultTemplates.js +6 -5
  364. package/es/widgets/refinement-list/refinement-list.js +39 -48
  365. package/es/widgets/relevant-sort/relevant-sort.js +10 -19
  366. package/es/widgets/search-box/defaultTemplates.js +1 -4
  367. package/es/widgets/search-box/search-box.js +31 -39
  368. package/es/widgets/sort-by/sort-by.js +11 -20
  369. package/es/widgets/stats/stats.js +26 -45
  370. package/es/widgets/toggle-refinement/toggle-refinement.js +16 -25
  371. package/es/widgets/voice-search/defaultTemplates.js +5 -13
  372. package/es/widgets/voice-search/voice-search.js +17 -26
  373. package/package.json +20 -119
  374. package/scripts/transforms/__testfixtures__/addWidget-to-addWidgets/imported.input.js +0 -1
  375. package/scripts/transforms/__testfixtures__/addWidget-to-addWidgets/imported.output.js +0 -1
  376. package/CHANGELOG.md +0 -3684
@@ -1,67 +1,42 @@
1
1
  "use strict";
2
2
 
3
- function _typeof(obj) { "@babel/helpers - typeof"; if (typeof Symbol === "function" && typeof Symbol.iterator === "symbol") { _typeof = function _typeof(obj) { return typeof obj; }; } else { _typeof = function _typeof(obj) { return obj && typeof Symbol === "function" && obj.constructor === Symbol && obj !== Symbol.prototype ? "symbol" : typeof obj; }; } return _typeof(obj); }
4
-
3
+ function _typeof(obj) { "@babel/helpers - typeof"; return _typeof = "function" == typeof Symbol && "symbol" == typeof Symbol.iterator ? function (obj) { return typeof obj; } : function (obj) { return obj && "function" == typeof Symbol && obj.constructor === Symbol && obj !== Symbol.prototype ? "symbol" : typeof obj; }, _typeof(obj); }
5
4
  Object.defineProperty(exports, "__esModule", {
6
5
  value: true
7
6
  });
8
7
  exports.default = void 0;
9
-
10
8
  var _algoliasearchHelper = _interopRequireDefault(require("algoliasearch-helper"));
11
-
12
9
  var _events = _interopRequireDefault(require("@algolia/events"));
13
-
14
10
  var _index = _interopRequireDefault(require("../widgets/index/index.js"));
15
-
16
11
  var _version = _interopRequireDefault(require("./version.js"));
17
-
18
12
  var _createHelpers = _interopRequireDefault(require("./createHelpers.js"));
19
-
20
13
  var _index2 = require("./utils/index.js");
21
-
22
14
  var _createRouterMiddleware = require("../middlewares/createRouterMiddleware.js");
23
-
24
15
  var _createMetadataMiddleware = require("../middlewares/createMetadataMiddleware.js");
25
-
26
16
  function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
27
-
28
- function ownKeys(object, enumerableOnly) { var keys = Object.keys(object); if (Object.getOwnPropertySymbols) { var symbols = Object.getOwnPropertySymbols(object); if (enumerableOnly) symbols = symbols.filter(function (sym) { return Object.getOwnPropertyDescriptor(object, sym).enumerable; }); keys.push.apply(keys, symbols); } return keys; }
29
-
30
- function _objectSpread(target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i] != null ? arguments[i] : {}; if (i % 2) { ownKeys(Object(source), true).forEach(function (key) { _defineProperty(target, key, source[key]); }); } else if (Object.getOwnPropertyDescriptors) { Object.defineProperties(target, Object.getOwnPropertyDescriptors(source)); } else { ownKeys(Object(source)).forEach(function (key) { Object.defineProperty(target, key, Object.getOwnPropertyDescriptor(source, key)); }); } } return target; }
31
-
17
+ function ownKeys(object, enumerableOnly) { var keys = Object.keys(object); if (Object.getOwnPropertySymbols) { var symbols = Object.getOwnPropertySymbols(object); enumerableOnly && (symbols = symbols.filter(function (sym) { return Object.getOwnPropertyDescriptor(object, sym).enumerable; })), keys.push.apply(keys, symbols); } return keys; }
18
+ function _objectSpread(target) { for (var i = 1; i < arguments.length; i++) { var source = null != arguments[i] ? arguments[i] : {}; i % 2 ? ownKeys(Object(source), !0).forEach(function (key) { _defineProperty(target, key, source[key]); }) : Object.getOwnPropertyDescriptors ? Object.defineProperties(target, Object.getOwnPropertyDescriptors(source)) : ownKeys(Object(source)).forEach(function (key) { Object.defineProperty(target, key, Object.getOwnPropertyDescriptor(source, key)); }); } return target; }
32
19
  function _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError("Cannot call a class as a function"); } }
33
-
34
20
  function _defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if ("value" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } }
35
-
36
- function _createClass(Constructor, protoProps, staticProps) { if (protoProps) _defineProperties(Constructor.prototype, protoProps); if (staticProps) _defineProperties(Constructor, staticProps); return Constructor; }
37
-
38
- function _inherits(subClass, superClass) { if (typeof superClass !== "function" && superClass !== null) { throw new TypeError("Super expression must either be null or a function"); } subClass.prototype = Object.create(superClass && superClass.prototype, { constructor: { value: subClass, writable: true, configurable: true } }); if (superClass) _setPrototypeOf(subClass, superClass); }
39
-
40
- function _setPrototypeOf(o, p) { _setPrototypeOf = Object.setPrototypeOf || function _setPrototypeOf(o, p) { o.__proto__ = p; return o; }; return _setPrototypeOf(o, p); }
41
-
21
+ function _createClass(Constructor, protoProps, staticProps) { if (protoProps) _defineProperties(Constructor.prototype, protoProps); if (staticProps) _defineProperties(Constructor, staticProps); Object.defineProperty(Constructor, "prototype", { writable: false }); return Constructor; }
22
+ function _inherits(subClass, superClass) { if (typeof superClass !== "function" && superClass !== null) { throw new TypeError("Super expression must either be null or a function"); } subClass.prototype = Object.create(superClass && superClass.prototype, { constructor: { value: subClass, writable: true, configurable: true } }); Object.defineProperty(subClass, "prototype", { writable: false }); if (superClass) _setPrototypeOf(subClass, superClass); }
23
+ function _setPrototypeOf(o, p) { _setPrototypeOf = Object.setPrototypeOf ? Object.setPrototypeOf.bind() : function _setPrototypeOf(o, p) { o.__proto__ = p; return o; }; return _setPrototypeOf(o, p); }
42
24
  function _createSuper(Derived) { var hasNativeReflectConstruct = _isNativeReflectConstruct(); return function _createSuperInternal() { var Super = _getPrototypeOf(Derived), result; if (hasNativeReflectConstruct) { var NewTarget = _getPrototypeOf(this).constructor; result = Reflect.construct(Super, arguments, NewTarget); } else { result = Super.apply(this, arguments); } return _possibleConstructorReturn(this, result); }; }
43
-
44
- function _possibleConstructorReturn(self, call) { if (call && (_typeof(call) === "object" || typeof call === "function")) { return call; } return _assertThisInitialized(self); }
45
-
25
+ function _possibleConstructorReturn(self, call) { if (call && (_typeof(call) === "object" || typeof call === "function")) { return call; } else if (call !== void 0) { throw new TypeError("Derived constructors may only return object or undefined"); } return _assertThisInitialized(self); }
46
26
  function _assertThisInitialized(self) { if (self === void 0) { throw new ReferenceError("this hasn't been initialised - super() hasn't been called"); } return self; }
47
-
48
- function _isNativeReflectConstruct() { if (typeof Reflect === "undefined" || !Reflect.construct) return false; if (Reflect.construct.sham) return false; if (typeof Proxy === "function") return true; try { Date.prototype.toString.call(Reflect.construct(Date, [], function () {})); return true; } catch (e) { return false; } }
49
-
50
- function _getPrototypeOf(o) { _getPrototypeOf = Object.setPrototypeOf ? Object.getPrototypeOf : function _getPrototypeOf(o) { return o.__proto__ || Object.getPrototypeOf(o); }; return _getPrototypeOf(o); }
51
-
27
+ function _isNativeReflectConstruct() { if (typeof Reflect === "undefined" || !Reflect.construct) return false; if (Reflect.construct.sham) return false; if (typeof Proxy === "function") return true; try { Boolean.prototype.valueOf.call(Reflect.construct(Boolean, [], function () {})); return true; } catch (e) { return false; } }
28
+ function _getPrototypeOf(o) { _getPrototypeOf = Object.setPrototypeOf ? Object.getPrototypeOf.bind() : function _getPrototypeOf(o) { return o.__proto__ || Object.getPrototypeOf(o); }; return _getPrototypeOf(o); }
52
29
  function _defineProperty(obj, key, value) { if (key in obj) { Object.defineProperty(obj, key, { value: value, enumerable: true, configurable: true, writable: true }); } else { obj[key] = value; } return obj; }
53
-
54
30
  var withUsage = (0, _index2.createDocumentationMessageGenerator)({
55
31
  name: 'instantsearch'
56
32
  });
57
-
58
33
  function defaultCreateURL() {
59
34
  return '#';
60
- } // this purposely breaks typescript's type inference to ensure it's not used
35
+ }
36
+
37
+ // this purposely breaks typescript's type inference to ensure it's not used
61
38
  // as it's used for a default parameter for example
62
39
  // source: https://github.com/Microsoft/TypeScript/issues/14829#issuecomment-504042546
63
-
64
-
65
40
  /**
66
41
  * The actual implementation of the InstantSearch. This is
67
42
  * created using the `instantsearch` factory function.
@@ -69,87 +44,56 @@ function defaultCreateURL() {
69
44
  */
70
45
  var InstantSearch = /*#__PURE__*/function (_EventEmitter) {
71
46
  _inherits(InstantSearch, _EventEmitter);
72
-
73
47
  var _super = _createSuper(InstantSearch);
74
-
75
48
  function InstantSearch(options) {
76
49
  var _this;
77
-
78
50
  _classCallCheck(this, InstantSearch);
51
+ _this = _super.call(this);
79
52
 
80
- _this = _super.call(this); // prevent `render` event listening from causing a warning
81
-
53
+ // prevent `render` event listening from causing a warning
82
54
  _defineProperty(_assertThisInitialized(_this), "client", void 0);
83
-
84
55
  _defineProperty(_assertThisInitialized(_this), "indexName", void 0);
85
-
86
56
  _defineProperty(_assertThisInitialized(_this), "insightsClient", void 0);
87
-
88
57
  _defineProperty(_assertThisInitialized(_this), "onStateChange", null);
89
-
90
58
  _defineProperty(_assertThisInitialized(_this), "helper", void 0);
91
-
92
59
  _defineProperty(_assertThisInitialized(_this), "mainHelper", void 0);
93
-
94
60
  _defineProperty(_assertThisInitialized(_this), "mainIndex", void 0);
95
-
96
61
  _defineProperty(_assertThisInitialized(_this), "started", void 0);
97
-
98
62
  _defineProperty(_assertThisInitialized(_this), "templatesConfig", void 0);
99
-
100
63
  _defineProperty(_assertThisInitialized(_this), "renderState", {});
101
-
102
64
  _defineProperty(_assertThisInitialized(_this), "_stalledSearchDelay", void 0);
103
-
104
65
  _defineProperty(_assertThisInitialized(_this), "_searchStalledTimer", void 0);
105
-
106
66
  _defineProperty(_assertThisInitialized(_this), "_initialUiState", void 0);
107
-
108
67
  _defineProperty(_assertThisInitialized(_this), "_initialResults", void 0);
109
-
110
68
  _defineProperty(_assertThisInitialized(_this), "_createURL", void 0);
111
-
112
69
  _defineProperty(_assertThisInitialized(_this), "_searchFunction", void 0);
113
-
114
70
  _defineProperty(_assertThisInitialized(_this), "_mainHelperSearch", void 0);
115
-
116
71
  _defineProperty(_assertThisInitialized(_this), "middleware", []);
117
-
118
72
  _defineProperty(_assertThisInitialized(_this), "sendEventToInsights", void 0);
119
-
120
73
  _defineProperty(_assertThisInitialized(_this), "status", 'idle');
121
-
122
74
  _defineProperty(_assertThisInitialized(_this), "error", undefined);
123
-
124
75
  _defineProperty(_assertThisInitialized(_this), "scheduleSearch", (0, _index2.defer)(function () {
125
76
  if (_this.started) {
126
77
  _this.mainHelper.search();
127
78
  }
128
79
  }));
129
-
130
80
  _defineProperty(_assertThisInitialized(_this), "scheduleRender", (0, _index2.defer)(function () {
131
81
  var shouldResetStatus = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : true;
132
-
133
82
  if (!_this.mainHelper.hasPendingRequests()) {
134
83
  clearTimeout(_this._searchStalledTimer);
135
84
  _this._searchStalledTimer = null;
136
-
137
85
  if (shouldResetStatus) {
138
86
  _this.status = 'idle';
139
87
  _this.error = undefined;
140
88
  }
141
89
  }
142
-
143
90
  _this.mainIndex.render({
144
91
  instantSearchInstance: _assertThisInitialized(_this)
145
92
  });
146
-
147
93
  _this.emit('render');
148
94
  }));
149
-
150
95
  _defineProperty(_assertThisInitialized(_this), "onInternalStateChange", (0, _index2.defer)(function () {
151
96
  var nextUiState = _this.mainIndex.getWidgetUiState({});
152
-
153
97
  _this.middleware.forEach(function (_ref) {
154
98
  var instance = _ref.instance;
155
99
  instance.onStateChange({
@@ -157,48 +101,39 @@ var InstantSearch = /*#__PURE__*/function (_EventEmitter) {
157
101
  });
158
102
  });
159
103
  }));
160
-
161
104
  _this.setMaxListeners(100);
162
-
163
105
  var _options$indexName = options.indexName,
164
- indexName = _options$indexName === void 0 ? null : _options$indexName,
165
- numberLocale = options.numberLocale,
166
- _options$initialUiSta = options.initialUiState,
167
- initialUiState = _options$initialUiSta === void 0 ? {} : _options$initialUiSta,
168
- _options$routing = options.routing,
169
- routing = _options$routing === void 0 ? null : _options$routing,
170
- searchFunction = options.searchFunction,
171
- _options$stalledSearc = options.stalledSearchDelay,
172
- stalledSearchDelay = _options$stalledSearc === void 0 ? 200 : _options$stalledSearc,
173
- _options$searchClient = options.searchClient,
174
- searchClient = _options$searchClient === void 0 ? null : _options$searchClient,
175
- _options$insightsClie = options.insightsClient,
176
- insightsClient = _options$insightsClie === void 0 ? null : _options$insightsClie,
177
- _options$onStateChang = options.onStateChange,
178
- onStateChange = _options$onStateChang === void 0 ? null : _options$onStateChang;
179
-
106
+ indexName = _options$indexName === void 0 ? null : _options$indexName,
107
+ numberLocale = options.numberLocale,
108
+ _options$initialUiSta = options.initialUiState,
109
+ initialUiState = _options$initialUiSta === void 0 ? {} : _options$initialUiSta,
110
+ _options$routing = options.routing,
111
+ routing = _options$routing === void 0 ? null : _options$routing,
112
+ searchFunction = options.searchFunction,
113
+ _options$stalledSearc = options.stalledSearchDelay,
114
+ stalledSearchDelay = _options$stalledSearc === void 0 ? 200 : _options$stalledSearc,
115
+ _options$searchClient = options.searchClient,
116
+ searchClient = _options$searchClient === void 0 ? null : _options$searchClient,
117
+ _options$insightsClie = options.insightsClient,
118
+ insightsClient = _options$insightsClie === void 0 ? null : _options$insightsClie,
119
+ _options$onStateChang = options.onStateChange,
120
+ onStateChange = _options$onStateChang === void 0 ? null : _options$onStateChang;
180
121
  if (indexName === null) {
181
122
  throw new Error(withUsage('The `indexName` option is required.'));
182
123
  }
183
-
184
124
  if (searchClient === null) {
185
125
  throw new Error(withUsage('The `searchClient` option is required.'));
186
126
  }
187
-
188
127
  if (typeof searchClient.search !== 'function') {
189
128
  throw new Error("The `searchClient` must implement a `search` method.\n\nSee: https://www.algolia.com/doc/guides/building-search-ui/going-further/backend-search/in-depth/backend-instantsearch/js/");
190
129
  }
191
-
192
130
  if (typeof searchClient.addAlgoliaAgent === 'function') {
193
131
  searchClient.addAlgoliaAgent("instantsearch.js (".concat(_version.default, ")"));
194
132
  }
195
-
196
133
  process.env.NODE_ENV === 'development' ? (0, _index2.warning)(insightsClient === null, "`insightsClient` property has been deprecated. It is still supported in 4.x releases, but not further. It is replaced by the `insights` middleware.\n\nFor more information, visit https://www.algolia.com/doc/guides/getting-insights-and-analytics/search-analytics/click-through-and-conversions/how-to/send-click-and-conversion-events-with-instantsearch/js/") : void 0;
197
-
198
134
  if (insightsClient && typeof insightsClient !== 'function') {
199
135
  throw new Error(withUsage('The `insightsClient` option should be a function.'));
200
136
  }
201
-
202
137
  process.env.NODE_ENV === 'development' ? (0, _index2.warning)(!options.searchParameters, "The `searchParameters` option is deprecated and will not be supported in InstantSearch.js 4.x.\n\nYou can replace it with the `configure` widget:\n\n```\nsearch.addWidgets([\n configure(".concat(JSON.stringify(options.searchParameters, null, 2), ")\n]);\n```\n\nSee ").concat((0, _index2.createDocumentationLink)({
203
138
  name: 'configure'
204
139
  }))) : void 0;
@@ -223,30 +158,23 @@ var InstantSearch = /*#__PURE__*/function (_EventEmitter) {
223
158
  _this._createURL = defaultCreateURL;
224
159
  _this._initialUiState = initialUiState;
225
160
  _this._initialResults = null;
226
-
227
161
  if (searchFunction) {
228
162
  _this._searchFunction = searchFunction;
229
163
  }
230
-
231
164
  _this.sendEventToInsights = _index2.noop;
232
-
233
165
  if (routing) {
234
166
  var routerOptions = typeof routing === 'boolean' ? undefined : routing;
235
-
236
167
  _this.use((0, _createRouterMiddleware.createRouterMiddleware)(routerOptions));
237
168
  }
238
-
239
169
  if ((0, _createMetadataMiddleware.isMetadataEnabled)()) {
240
170
  _this.use((0, _createMetadataMiddleware.createMetadataMiddleware)());
241
171
  }
242
-
243
172
  return _this;
244
173
  }
174
+
245
175
  /**
246
176
  * Hooks a middleware into the InstantSearch lifecycle.
247
177
  */
248
-
249
-
250
178
  _createClass(InstantSearch, [{
251
179
  key: "_isSearchStalled",
252
180
  get:
@@ -270,11 +198,9 @@ var InstantSearch = /*#__PURE__*/function (_EventEmitter) {
270
198
  key: "use",
271
199
  value: function use() {
272
200
  var _this2 = this;
273
-
274
201
  for (var _len = arguments.length, middleware = new Array(_len), _key = 0; _key < _len; _key++) {
275
202
  middleware[_key] = arguments[_key];
276
203
  }
277
-
278
204
  var newMiddlewareList = middleware.map(function (fn) {
279
205
  var newMiddleware = _objectSpread({
280
206
  subscribe: _index2.noop,
@@ -284,36 +210,33 @@ var InstantSearch = /*#__PURE__*/function (_EventEmitter) {
284
210
  }, fn({
285
211
  instantSearchInstance: _this2
286
212
  }));
287
-
288
213
  _this2.middleware.push({
289
214
  creator: fn,
290
215
  instance: newMiddleware
291
216
  });
292
-
293
217
  return newMiddleware;
294
- }); // If the instance has already started, we directly subscribe the
295
- // middleware so they're notified of changes.
218
+ });
296
219
 
220
+ // If the instance has already started, we directly subscribe the
221
+ // middleware so they're notified of changes.
297
222
  if (this.started) {
298
223
  newMiddlewareList.forEach(function (m) {
299
224
  m.subscribe();
300
225
  m.started();
301
226
  });
302
227
  }
303
-
304
228
  return this;
305
229
  }
230
+
306
231
  /**
307
232
  * Removes a middleware from the InstantSearch lifecycle.
308
233
  */
309
-
310
234
  }, {
311
235
  key: "unuse",
312
236
  value: function unuse() {
313
237
  for (var _len2 = arguments.length, middlewareToUnuse = new Array(_len2), _key2 = 0; _key2 < _len2; _key2++) {
314
238
  middlewareToUnuse[_key2] = arguments[_key2];
315
239
  }
316
-
317
240
  this.middleware.filter(function (m) {
318
241
  return middlewareToUnuse.includes(m.creator);
319
242
  }).forEach(function (m) {
@@ -323,14 +246,16 @@ var InstantSearch = /*#__PURE__*/function (_EventEmitter) {
323
246
  return !middlewareToUnuse.includes(m.creator);
324
247
  });
325
248
  return this;
326
- } // @major we shipped with EXPERIMENTAL_use, but have changed that to just `use` now
249
+ }
327
250
 
251
+ // @major we shipped with EXPERIMENTAL_use, but have changed that to just `use` now
328
252
  }, {
329
253
  key: "EXPERIMENTAL_use",
330
254
  value: function EXPERIMENTAL_use() {
331
255
  process.env.NODE_ENV === 'development' ? (0, _index2.warning)(false, 'The middleware API is now considered stable, so we recommend replacing `EXPERIMENTAL_use` with `use` before upgrading to the next major version.') : void 0;
332
256
  return this.use.apply(this, arguments);
333
257
  }
258
+
334
259
  /**
335
260
  * Adds a widget to the search instance.
336
261
  * A widget can be added either before or after InstantSearch has started.
@@ -338,35 +263,33 @@ var InstantSearch = /*#__PURE__*/function (_EventEmitter) {
338
263
  *
339
264
  * @deprecated This method will still be supported in 4.x releases, but not further. It is replaced by `addWidgets([widget])`.
340
265
  */
341
-
342
266
  }, {
343
267
  key: "addWidget",
344
268
  value: function addWidget(widget) {
345
269
  process.env.NODE_ENV === 'development' ? (0, _index2.warning)(false, 'addWidget will still be supported in 4.x releases, but not further. It is replaced by `addWidgets([widget])`') : void 0;
346
270
  return this.addWidgets([widget]);
347
271
  }
272
+
348
273
  /**
349
274
  * Adds multiple widgets to the search instance.
350
275
  * Widgets can be added either before or after InstantSearch has started.
351
276
  * @param widgets The array of widgets to add to InstantSearch.
352
277
  */
353
-
354
278
  }, {
355
279
  key: "addWidgets",
356
280
  value: function addWidgets(widgets) {
357
281
  if (!Array.isArray(widgets)) {
358
282
  throw new Error(withUsage('The `addWidgets` method expects an array of widgets. Please use `addWidget`.'));
359
283
  }
360
-
361
284
  if (widgets.some(function (widget) {
362
285
  return typeof widget.init !== 'function' && typeof widget.render !== 'function';
363
286
  })) {
364
287
  throw new Error(withUsage('The widget definition expects a `render` and/or an `init` method.'));
365
288
  }
366
-
367
289
  this.mainIndex.addWidgets(widgets);
368
290
  return this;
369
291
  }
292
+
370
293
  /**
371
294
  * Removes a widget from the search instance.
372
295
  * @deprecated This method will still be supported in 4.x releases, but not further. It is replaced by `removeWidgets([widget])`
@@ -374,75 +297,69 @@ var InstantSearch = /*#__PURE__*/function (_EventEmitter) {
374
297
  *
375
298
  * The widget must implement a `dispose()` method to clear its state.
376
299
  */
377
-
378
300
  }, {
379
301
  key: "removeWidget",
380
302
  value: function removeWidget(widget) {
381
303
  process.env.NODE_ENV === 'development' ? (0, _index2.warning)(false, 'removeWidget will still be supported in 4.x releases, but not further. It is replaced by `removeWidgets([widget])`') : void 0;
382
304
  return this.removeWidgets([widget]);
383
305
  }
306
+
384
307
  /**
385
308
  * Removes multiple widgets from the search instance.
386
309
  * @param widgets Array of widgets instances to remove from InstantSearch.
387
310
  *
388
311
  * The widgets must implement a `dispose()` method to clear their states.
389
312
  */
390
-
391
313
  }, {
392
314
  key: "removeWidgets",
393
315
  value: function removeWidgets(widgets) {
394
316
  if (!Array.isArray(widgets)) {
395
317
  throw new Error(withUsage('The `removeWidgets` method expects an array of widgets. Please use `removeWidget`.'));
396
318
  }
397
-
398
319
  if (widgets.some(function (widget) {
399
320
  return typeof widget.dispose !== 'function';
400
321
  })) {
401
322
  throw new Error(withUsage('The widget definition expects a `dispose` method.'));
402
323
  }
403
-
404
324
  this.mainIndex.removeWidgets(widgets);
405
325
  return this;
406
326
  }
327
+
407
328
  /**
408
329
  * Ends the initialization of InstantSearch.js and triggers the
409
330
  * first search. This method should be called after all widgets have been added
410
331
  * to the instance of InstantSearch.js. InstantSearch.js also supports adding and removing
411
332
  * widgets after the start as an **EXPERIMENTAL** feature.
412
333
  */
413
-
414
334
  }, {
415
335
  key: "start",
416
336
  value: function start() {
417
337
  var _this3 = this;
418
-
419
338
  if (this.started) {
420
339
  throw new Error(withUsage('The `start` method has already been called once.'));
421
- } // This Helper is used for the queries, we don't care about its state. The
340
+ }
341
+
342
+ // This Helper is used for the queries, we don't care about its state. The
422
343
  // states are managed at the `index` level. We use this Helper to create
423
344
  // DerivedHelper scoped into the `index` widgets.
424
345
  // In Vue InstantSearch' hydrate, a main helper gets set before start, so
425
346
  // we need to respect this helper as a way to keep all listeners correct.
426
-
427
-
428
347
  var mainHelper = this.mainHelper || (0, _algoliasearchHelper.default)(this.client, this.indexName);
429
-
430
348
  mainHelper.search = function () {
431
- _this3.status = 'loading'; // @MAJOR: use scheduleRender here
349
+ _this3.status = 'loading';
350
+ // @MAJOR: use scheduleRender here
432
351
  // For now, widgets don't expect to be rendered at the start of `loading`,
433
352
  // so it would be a breaking change to add an extra render. We don't have
434
353
  // these guarantees about the render event, thus emitting it once more
435
354
  // isn't a breaking change.
355
+ _this3.emit('render');
436
356
 
437
- _this3.emit('render'); // This solution allows us to keep the exact same API for the users but
357
+ // This solution allows us to keep the exact same API for the users but
438
358
  // under the hood, we have a different implementation. It should be
439
359
  // completely transparent for the rest of the codebase. Only this module
440
360
  // is impacted.
441
-
442
-
443
361
  return mainHelper.searchOnlyWithDerivedHelpers();
444
362
  };
445
-
446
363
  if (this._searchFunction) {
447
364
  // this client isn't used to actually search, but required for the helper
448
365
  // to not throw errors
@@ -452,34 +369,28 @@ var InstantSearch = /*#__PURE__*/function (_EventEmitter) {
452
369
  }
453
370
  };
454
371
  this._mainHelperSearch = mainHelper.search.bind(mainHelper);
455
-
456
372
  mainHelper.search = function () {
457
373
  var mainIndexHelper = _this3.mainIndex.getHelper();
458
-
459
374
  var searchFunctionHelper = (0, _algoliasearchHelper.default)(fakeClient, mainIndexHelper.state.index, mainIndexHelper.state);
460
375
  searchFunctionHelper.once('search', function (_ref2) {
461
376
  var state = _ref2.state;
462
377
  mainIndexHelper.overrideStateWithoutTriggeringChangeEvent(state);
463
-
464
378
  _this3._mainHelperSearch();
465
- }); // Forward state changes from `searchFunctionHelper` to `mainIndexHelper`
466
-
379
+ });
380
+ // Forward state changes from `searchFunctionHelper` to `mainIndexHelper`
467
381
  searchFunctionHelper.on('change', function (_ref3) {
468
382
  var state = _ref3.state;
469
383
  mainIndexHelper.setState(state);
470
384
  });
471
-
472
385
  _this3._searchFunction(searchFunctionHelper);
473
-
474
386
  return mainHelper;
475
387
  };
476
- } // Only the "main" Helper emits the `error` event vs the one for `search`
477
- // and `results` that are also emitted on the derived one.
478
-
388
+ }
479
389
 
390
+ // Only the "main" Helper emits the `error` event vs the one for `search`
391
+ // and `results` that are also emitted on the derived one.
480
392
  mainHelper.on('error', function (_ref4) {
481
393
  var error = _ref4.error;
482
-
483
394
  if (!(error instanceof Error)) {
484
395
  // typescript lies here, error is in some cases { name: string, message: string }
485
396
  var err = error;
@@ -487,21 +398,19 @@ var InstantSearch = /*#__PURE__*/function (_EventEmitter) {
487
398
  acc[key] = err[key];
488
399
  return acc;
489
400
  }, new Error(err.message));
490
- } // If an error is emitted, it is re-thrown by events. In previous versions
401
+ }
402
+ // If an error is emitted, it is re-thrown by events. In previous versions
491
403
  // we emitted {error}, which is thrown as:
492
404
  // "Uncaught, unspecified \"error\" event. ([object Object])"
493
405
  // To avoid breaking changes, we make the error available in both
494
406
  // `error` and `error.error`
495
407
  // @MAJOR emit only error
496
-
497
-
498
408
  error.error = error;
499
409
  _this3.error = error;
500
410
  _this3.status = 'error';
411
+ _this3.scheduleRender(false);
501
412
 
502
- _this3.scheduleRender(false); // This needs to execute last because it throws the error.
503
-
504
-
413
+ // This needs to execute last because it throws the error.
505
414
  _this3.emit('error', error);
506
415
  });
507
416
  this.mainHelper = mainHelper;
@@ -514,22 +423,22 @@ var InstantSearch = /*#__PURE__*/function (_EventEmitter) {
514
423
  parent: null,
515
424
  uiState: this._initialUiState
516
425
  });
517
-
518
426
  if (this._initialResults) {
519
- var originalScheduleSearch = this.scheduleSearch; // We don't schedule a first search when initial results are provided
427
+ var originalScheduleSearch = this.scheduleSearch;
428
+ // We don't schedule a first search when initial results are provided
520
429
  // because we already have the results to render. This skips the initial
521
430
  // network request on the browser on `start`.
522
-
523
- this.scheduleSearch = (0, _index2.defer)(_index2.noop); // We also skip the initial network request when widgets are dynamically
431
+ this.scheduleSearch = (0, _index2.defer)(_index2.noop);
432
+ // We also skip the initial network request when widgets are dynamically
524
433
  // added in the first tick (that's the case in all the framework-based flavors).
525
434
  // When we add a widget to `index`, it calls `scheduleSearch`. We can rely
526
435
  // on our `defer` util to restore the original `scheduleSearch` value once
527
436
  // widgets are added to hook back to the regular lifecycle.
528
-
529
437
  (0, _index2.defer)(function () {
530
438
  _this3.scheduleSearch = originalScheduleSearch;
531
439
  })();
532
- } // We only schedule a search when widgets have been added before `start()`
440
+ }
441
+ // We only schedule a search when widgets have been added before `start()`
533
442
  // because there are listeners that can use these results.
534
443
  // This is especially useful in framework-based flavors that wait for
535
444
  // dynamically-added widgets to trigger a network request. It avoids
@@ -538,27 +447,28 @@ var InstantSearch = /*#__PURE__*/function (_EventEmitter) {
538
447
  // Later, we could also skip `index()` widgets and widgets that don't read
539
448
  // the results, but this is an optimization that has a very low impact for now.
540
449
  else if (this.mainIndex.getWidgets().length > 0) {
541
- this.scheduleSearch();
542
- } // Keep the previous reference for legacy purpose, some pattern use
543
- // the direct Helper access `search.helper` (e.g multi-index).
450
+ this.scheduleSearch();
451
+ }
544
452
 
453
+ // Keep the previous reference for legacy purpose, some pattern use
454
+ // the direct Helper access `search.helper` (e.g multi-index).
455
+ this.helper = this.mainIndex.getHelper();
545
456
 
546
- this.helper = this.mainIndex.getHelper(); // track we started the search if we add more widgets,
457
+ // track we started the search if we add more widgets,
547
458
  // to init them directly after add
548
-
549
459
  this.started = true;
550
460
  this.middleware.forEach(function (_ref6) {
551
461
  var instance = _ref6.instance;
552
462
  instance.started();
553
463
  });
554
464
  }
465
+
555
466
  /**
556
467
  * Removes all widgets without triggering a search afterwards. This is an **EXPERIMENTAL** feature,
557
468
  * if you find an issue with it, please
558
469
  * [open an issue](https://github.com/algolia/instantsearch.js/issues/new?title=Problem%20with%20dispose).
559
470
  * @return {undefined} This method does not return anything
560
471
  */
561
-
562
472
  }, {
563
473
  key: "dispose",
564
474
  value: function dispose() {
@@ -566,13 +476,15 @@ var InstantSearch = /*#__PURE__*/function (_EventEmitter) {
566
476
  this.scheduleRender.cancel();
567
477
  clearTimeout(this._searchStalledTimer);
568
478
  this.removeWidgets(this.mainIndex.getWidgets());
569
- this.mainIndex.dispose(); // You can not start an instance two times, therefore a disposed instance
479
+ this.mainIndex.dispose();
480
+
481
+ // You can not start an instance two times, therefore a disposed instance
570
482
  // needs to set started as false otherwise this can not be restarted at a
571
483
  // later point.
484
+ this.started = false;
572
485
 
573
- this.started = false; // The helper needs to be reset to perform the next search from a fresh state.
486
+ // The helper needs to be reset to perform the next search from a fresh state.
574
487
  // If not reset, it would use the state stored before calling `dispose()`.
575
-
576
488
  this.removeAllListeners();
577
489
  this.mainHelper.removeAllListeners();
578
490
  this.mainHelper = null;
@@ -586,45 +498,38 @@ var InstantSearch = /*#__PURE__*/function (_EventEmitter) {
586
498
  key: "scheduleStalledRender",
587
499
  value: function scheduleStalledRender() {
588
500
  var _this4 = this;
589
-
590
501
  if (!this._searchStalledTimer) {
591
502
  this._searchStalledTimer = setTimeout(function () {
592
503
  _this4.status = 'stalled';
593
-
594
504
  _this4.scheduleRender();
595
505
  }, this._stalledSearchDelay);
596
506
  }
597
507
  }
508
+
598
509
  /**
599
510
  * Set the UI state and trigger a search.
600
511
  * @param uiState The next UI state or a function computing it from the current state
601
512
  * @param callOnStateChange private parameter used to know if the method is called from a state change
602
513
  */
603
-
604
514
  }, {
605
515
  key: "setUiState",
606
516
  value: function setUiState(uiState) {
607
517
  var _this5 = this;
608
-
609
518
  var callOnStateChange = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : true;
610
-
611
519
  if (!this.mainHelper) {
612
520
  throw new Error(withUsage('The `start` method needs to be called before `setUiState`.'));
613
- } // We refresh the index UI state to update the local UI state that the
614
- // main index passes to the function form of `setUiState`.
615
-
521
+ }
616
522
 
523
+ // We refresh the index UI state to update the local UI state that the
524
+ // main index passes to the function form of `setUiState`.
617
525
  this.mainIndex.refreshUiState();
618
526
  var nextUiState = typeof uiState === 'function' ? uiState(this.mainIndex.getWidgetUiState({})) : uiState;
619
-
620
527
  if (this.onStateChange && callOnStateChange) {
621
528
  this.onStateChange({
622
529
  uiState: nextUiState,
623
530
  setUiState: function setUiState(finalUiState) {
624
531
  (0, _index2.setIndexHelperState)(typeof finalUiState === 'function' ? finalUiState(nextUiState) : finalUiState, _this5.mainIndex);
625
-
626
532
  _this5.scheduleSearch();
627
-
628
533
  _this5.onInternalStateChange();
629
534
  }
630
535
  });
@@ -641,18 +546,15 @@ var InstantSearch = /*#__PURE__*/function (_EventEmitter) {
641
546
  // We refresh the index UI state to make sure changes from `refine` are taken in account
642
547
  this.mainIndex.refreshUiState();
643
548
  }
644
-
645
549
  return this.mainIndex.getWidgetUiState({});
646
550
  }
647
551
  }, {
648
552
  key: "createURL",
649
553
  value: function createURL() {
650
554
  var nextState = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : {};
651
-
652
555
  if (!this.started) {
653
556
  throw new Error(withUsage('The `start` method needs to be called before `createURL`.'));
654
557
  }
655
-
656
558
  return this._createURL(nextState);
657
559
  }
658
560
  }, {
@@ -661,13 +563,10 @@ var InstantSearch = /*#__PURE__*/function (_EventEmitter) {
661
563
  if (!this.mainHelper) {
662
564
  throw new Error(withUsage('The `start` method needs to be called before `refresh`.'));
663
565
  }
664
-
665
566
  this.mainHelper.clearCache().search();
666
567
  }
667
568
  }]);
668
-
669
569
  return InstantSearch;
670
570
  }(_events.default);
671
-
672
571
  var _default = InstantSearch;
673
572
  exports.default = _default;