instantsearch.js 4.44.1 → 4.46.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (105) hide show
  1. package/CHANGELOG.md +28 -0
  2. package/cjs/components/Hits/Hits.js +3 -1
  3. package/cjs/components/InfiniteHits/InfiniteHits.js +3 -1
  4. package/cjs/components/Template/Template.js +13 -3
  5. package/cjs/connectors/hits-per-page/connectHitsPerPage.js +3 -1
  6. package/cjs/connectors/numeric-menu/connectNumericMenu.js +27 -2
  7. package/cjs/connectors/rating-menu/connectRatingMenu.js +10 -4
  8. package/cjs/connectors/sort-by/connectSortBy.js +3 -1
  9. package/cjs/lib/createHelpers.js +3 -1
  10. package/cjs/lib/formatNumber.js +10 -0
  11. package/cjs/lib/utils/cx.js +10 -0
  12. package/cjs/lib/utils/index.js +10 -1
  13. package/cjs/lib/utils/renderTemplate.js +17 -2
  14. package/cjs/lib/version.js +1 -1
  15. package/cjs/widgets/answers/defaultTemplates.js +6 -2
  16. package/cjs/widgets/breadcrumb/defaultTemplates.js +6 -2
  17. package/cjs/widgets/clear-refinements/clear-refinements.js +2 -2
  18. package/cjs/widgets/clear-refinements/defaultTemplates.js +3 -1
  19. package/cjs/widgets/geo-search/createHTMLMarker.js +10 -4
  20. package/cjs/widgets/geo-search/defaultTemplates.js +18 -4
  21. package/cjs/widgets/hierarchical-menu/defaultTemplates.js +26 -2
  22. package/cjs/widgets/hits/defaultTemplates.js +3 -1
  23. package/cjs/widgets/infinite-hits/defaultTemplates.js +9 -3
  24. package/cjs/widgets/menu/defaultTemplates.js +26 -2
  25. package/cjs/widgets/menu-select/defaultTemplates.js +11 -2
  26. package/cjs/widgets/numeric-menu/defaultTemplates.js +20 -1
  27. package/cjs/widgets/range-input/range-input.js +6 -2
  28. package/cjs/widgets/rating-menu/defaultTemplates.js +57 -1
  29. package/cjs/widgets/refinement-list/defaultTemplates.js +38 -3
  30. package/cjs/widgets/relevant-sort/defaultTemplates.js +3 -1
  31. package/cjs/widgets/search-box/defaultTemplates.js +62 -3
  32. package/cjs/widgets/stats/stats.js +70 -22
  33. package/cjs/widgets/toggle-refinement/defaultTemplates.js +4 -1
  34. package/cjs/widgets/voice-search/defaultTemplates.js +81 -9
  35. package/dist/instantsearch.development.d.ts +171 -29
  36. package/dist/instantsearch.development.js +1430 -671
  37. package/dist/instantsearch.development.js.map +1 -1
  38. package/dist/instantsearch.production.d.ts +171 -29
  39. package/dist/instantsearch.production.min.d.ts +171 -29
  40. package/dist/instantsearch.production.min.js +2 -2
  41. package/dist/instantsearch.production.min.js.map +1 -1
  42. package/es/components/Answers/Answers.d.ts +2 -2
  43. package/es/components/Hits/Hits.d.ts +3 -3
  44. package/es/components/Hits/Hits.js +3 -1
  45. package/es/components/InfiniteHits/InfiniteHits.d.ts +3 -3
  46. package/es/components/InfiniteHits/InfiniteHits.js +3 -1
  47. package/es/components/Template/Template.d.ts +4 -2
  48. package/es/components/Template/Template.js +14 -4
  49. package/es/connectors/answers/connectAnswers.d.ts +2 -2
  50. package/es/connectors/autocomplete/connectAutocomplete.d.ts +2 -2
  51. package/es/connectors/hits-per-page/connectHitsPerPage.d.ts +5 -0
  52. package/es/connectors/hits-per-page/connectHitsPerPage.js +3 -1
  53. package/es/connectors/numeric-menu/connectNumericMenu.d.ts +8 -0
  54. package/es/connectors/numeric-menu/connectNumericMenu.js +27 -2
  55. package/es/connectors/rating-menu/connectRatingMenu.d.ts +2 -0
  56. package/es/connectors/rating-menu/connectRatingMenu.js +10 -4
  57. package/es/connectors/sort-by/connectSortBy.d.ts +5 -0
  58. package/es/connectors/sort-by/connectSortBy.js +3 -1
  59. package/es/lib/createHelpers.js +2 -1
  60. package/es/lib/formatNumber.d.ts +1 -0
  61. package/es/lib/formatNumber.js +3 -0
  62. package/es/lib/insights/client.d.ts +2 -2
  63. package/es/lib/utils/createSendEventForHits.d.ts +3 -3
  64. package/es/lib/utils/cx.d.ts +1 -0
  65. package/es/lib/utils/cx.js +3 -0
  66. package/es/lib/utils/index.d.ts +1 -0
  67. package/es/lib/utils/index.js +2 -1
  68. package/es/lib/utils/renderTemplate.d.ts +4 -3
  69. package/es/lib/utils/renderTemplate.js +15 -2
  70. package/es/lib/version.d.ts +1 -1
  71. package/es/lib/version.js +1 -1
  72. package/es/types/connector.d.ts +2 -2
  73. package/es/types/templates.d.ts +16 -3
  74. package/es/widgets/answers/defaultTemplates.js +6 -2
  75. package/es/widgets/breadcrumb/defaultTemplates.js +6 -2
  76. package/es/widgets/clear-refinements/clear-refinements.d.ts +3 -1
  77. package/es/widgets/clear-refinements/clear-refinements.js +2 -2
  78. package/es/widgets/clear-refinements/defaultTemplates.js +3 -1
  79. package/es/widgets/geo-search/createHTMLMarker.d.ts +2 -1
  80. package/es/widgets/geo-search/createHTMLMarker.js +8 -1
  81. package/es/widgets/geo-search/defaultTemplates.d.ts +1 -0
  82. package/es/widgets/geo-search/defaultTemplates.js +17 -4
  83. package/es/widgets/hierarchical-menu/defaultTemplates.js +22 -2
  84. package/es/widgets/hierarchical-menu/hierarchical-menu.d.ts +2 -0
  85. package/es/widgets/hits/defaultTemplates.js +3 -1
  86. package/es/widgets/hits/hits.d.ts +2 -1
  87. package/es/widgets/infinite-hits/defaultTemplates.js +9 -3
  88. package/es/widgets/infinite-hits/infinite-hits.d.ts +1 -3
  89. package/es/widgets/menu/defaultTemplates.js +22 -2
  90. package/es/widgets/menu-select/defaultTemplates.js +9 -2
  91. package/es/widgets/numeric-menu/defaultTemplates.js +18 -1
  92. package/es/widgets/range-input/range-input.js +6 -2
  93. package/es/widgets/rating-menu/defaultTemplates.js +54 -1
  94. package/es/widgets/rating-menu/rating-menu.d.ts +6 -0
  95. package/es/widgets/refinement-list/defaultTemplates.js +34 -3
  96. package/es/widgets/refinement-list/refinement-list.d.ts +7 -1
  97. package/es/widgets/relevant-sort/defaultTemplates.js +3 -1
  98. package/es/widgets/search-box/defaultTemplates.js +61 -3
  99. package/es/widgets/search-box/search-box.d.ts +10 -3
  100. package/es/widgets/stats/stats.d.ts +10 -6
  101. package/es/widgets/stats/stats.js +69 -22
  102. package/es/widgets/toggle-refinement/defaultTemplates.js +4 -1
  103. package/es/widgets/toggle-refinement/toggle-refinement.d.ts +3 -1
  104. package/es/widgets/voice-search/defaultTemplates.js +81 -9
  105. package/package.json +7 -5
package/CHANGELOG.md CHANGED
@@ -1,3 +1,31 @@
1
+ # [4.46.0](https://github.com/algolia/instantsearch.js/compare/v4.45.1...v4.46.0) (2022-09-12)
2
+
3
+
4
+ ### Features
5
+
6
+ * **html:** deprecate Hogan.js and string-based templates ([#5095](https://github.com/algolia/instantsearch.js/issues/5095)) ([a06ddf5](https://github.com/algolia/instantsearch.js/commit/a06ddf55f1ffd1a93cddab2fcf95d2be3220a423))
7
+ * **html:** introduce `html` templating ([#5081](https://github.com/algolia/instantsearch.js/issues/5081)) ([e55e224](https://github.com/algolia/instantsearch.js/commit/e55e2245256193d27f2c85f24b8aab7c9048c554))
8
+
9
+
10
+
11
+ ## [4.45.1](https://github.com/algolia/instantsearch.js/compare/v4.45.0...v4.45.1) (2022-09-06)
12
+
13
+
14
+ ### Bug Fixes
15
+
16
+ * **ratingMenu:** fix `undefined` facet values error when `disjunctiveFacets` is empty ([#5096](https://github.com/algolia/instantsearch.js/issues/5096)) ([dd870d5](https://github.com/algolia/instantsearch.js/commit/dd870d5a658ce42b068eadf34f9b69772291aa20))
17
+
18
+
19
+
20
+ # [4.45.0](https://github.com/algolia/instantsearch.js/compare/v4.44.1...v4.45.0) (2022-08-29)
21
+
22
+
23
+ ### Features
24
+
25
+ * **connectors:** deprecate `hasNoResults` in favor of `canRefine` ([#5091](https://github.com/algolia/instantsearch.js/issues/5091)) ([1749a4e](https://github.com/algolia/instantsearch.js/commit/1749a4eb9a2f28fa4a8d442163e3b10acbde7c22))
26
+
27
+
28
+
1
29
  ## [4.44.1](https://github.com/algolia/instantsearch.js/compare/v4.44.0...v4.44.1) (2022-08-25)
2
30
 
3
31
 
@@ -25,6 +25,7 @@ var Hits = function Hits(_ref) {
25
25
  var results = _ref.results,
26
26
  hits = _ref.hits,
27
27
  bindEvent = _ref.bindEvent,
28
+ sendEvent = _ref.sendEvent,
28
29
  cssClasses = _ref.cssClasses,
29
30
  templateProps = _ref.templateProps;
30
31
 
@@ -53,7 +54,8 @@ var Hits = function Hits(_ref) {
53
54
  data: _objectSpread(_objectSpread({}, hit), {}, {
54
55
  __hitIndex: index
55
56
  }),
56
- bindEvent: bindEvent
57
+ bindEvent: bindEvent,
58
+ sendEvent: sendEvent
57
59
  }));
58
60
  })));
59
61
  };
@@ -25,6 +25,7 @@ var InfiniteHits = function InfiniteHits(_ref) {
25
25
  var results = _ref.results,
26
26
  hits = _ref.hits,
27
27
  bindEvent = _ref.bindEvent,
28
+ sendEvent = _ref.sendEvent,
28
29
  hasShowPrevious = _ref.hasShowPrevious,
29
30
  showPrevious = _ref.showPrevious,
30
31
  showMore = _ref.showMore,
@@ -66,7 +67,8 @@ var InfiniteHits = function InfiniteHits(_ref) {
66
67
  data: _objectSpread(_objectSpread({}, hit), {}, {
67
68
  __hitIndex: position
68
69
  }),
69
- bindEvent: bindEvent
70
+ bindEvent: bindEvent,
71
+ sendEvent: sendEvent
70
72
  }));
71
73
  })), (0, _preact.h)(_Template.default, _extends({}, templateProps, {
72
74
  templateKey: "showMoreText",
@@ -1,7 +1,5 @@
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
-
5
3
  Object.defineProperty(exports, "__esModule", {
6
4
  value: true
7
5
  });
@@ -13,6 +11,8 @@ var _index = require("../../lib/utils/index.js");
13
11
 
14
12
  function _extends() { _extends = Object.assign || function (target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i]; for (var key in source) { if (Object.prototype.hasOwnProperty.call(source, key)) { target[key] = source[key]; } } } return target; }; return _extends.apply(this, arguments); }
15
13
 
14
+ 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); }
15
+
16
16
  function _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError("Cannot call a class as a function"); } }
17
17
 
18
18
  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); } }
@@ -63,6 +63,11 @@ var Template = /*#__PURE__*/function (_Component) {
63
63
  }, {
64
64
  key: "render",
65
65
  value: function render() {
66
+ var _this = this;
67
+
68
+ process.env.NODE_ENV === 'development' ? (0, _index.warning)(Object.keys(this.props.templates).every(function (key) {
69
+ return typeof _this.props.templates[key] === 'function';
70
+ }), "Hogan.js and string-based templates are deprecated and will not be supported in InstantSearch.js 5.x.\n\nYou can replace them with function-form templates and use either the provided `html` function or JSX templates.\n\nSee: https://www.algolia.com/doc/guides/building-search-ui/upgrade-guides/js/#upgrade-templates") : void 0;
66
71
  var RootTagName = this.props.rootTagName;
67
72
  var useCustomCompileOptions = this.props.useCustomCompileOptions[this.props.templateKey];
68
73
  var compileOptions = useCustomCompileOptions ? this.props.templatesConfig.compileOptions : {};
@@ -72,7 +77,8 @@ var Template = /*#__PURE__*/function (_Component) {
72
77
  compileOptions: compileOptions,
73
78
  helpers: this.props.templatesConfig.helpers,
74
79
  data: this.props.data,
75
- bindEvent: this.props.bindEvent
80
+ bindEvent: this.props.bindEvent,
81
+ sendEvent: this.props.sendEvent
76
82
  });
77
83
 
78
84
  if (content === null) {
@@ -81,6 +87,10 @@ var Template = /*#__PURE__*/function (_Component) {
81
87
  return null;
82
88
  }
83
89
 
90
+ if (_typeof(content) === 'object') {
91
+ return (0, _preact.h)(RootTagName, this.props.rootProps, content);
92
+ }
93
+
84
94
  return (0, _preact.h)(RootTagName, _extends({}, this.props.rootProps, {
85
95
  dangerouslySetInnerHTML: {
86
96
  __html: content
@@ -127,6 +127,7 @@ var connectHitsPerPage = function connectHitsPerPage(renderFn) {
127
127
  results = _ref5.results,
128
128
  createURL = _ref5.createURL,
129
129
  helper = _ref5.helper;
130
+ var canRefine = results ? results.nbHits > 0 : false;
130
131
  return {
131
132
  items: transformItems(normalizeItems(state), {
132
133
  results: results
@@ -136,7 +137,8 @@ var connectHitsPerPage = function connectHitsPerPage(renderFn) {
136
137
  state: state,
137
138
  createURL: createURL
138
139
  }),
139
- hasNoResults: results ? results.nbHits === 0 : true,
140
+ hasNoResults: !canRefine,
141
+ canRefine: canRefine,
140
142
  widgetParams: widgetParams
141
143
  };
142
144
  },
@@ -7,6 +7,8 @@ exports.default = void 0;
7
7
 
8
8
  var _index = require("../../lib/utils/index.js");
9
9
 
10
+ function _createForOfIteratorHelper(o, allowArrayLike) { var it; if (typeof Symbol === "undefined" || o[Symbol.iterator] == null) { if (Array.isArray(o) || (it = _unsupportedIterableToArray(o)) || allowArrayLike && o && typeof o.length === "number") { if (it) o = it; var i = 0; var F = function F() {}; return { s: F, n: function n() { if (i >= o.length) return { done: true }; return { done: false, value: o[i++] }; }, e: function e(_e2) { throw _e2; }, f: F }; } throw new TypeError("Invalid attempt to iterate non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method."); } var normalCompletion = true, didErr = false, err; return { s: function s() { it = o[Symbol.iterator](); }, n: function n() { var step = it.next(); normalCompletion = step.done; return step; }, e: function e(_e3) { didErr = true; err = _e3; }, f: function f() { try { if (!normalCompletion && it.return != null) it.return(); } finally { if (didErr) throw err; } } }; }
11
+
10
12
  function _slicedToArray(arr, i) { return _arrayWithHoles(arr) || _iterableToArrayLimit(arr, i) || _unsupportedIterableToArray(arr, i) || _nonIterableRest(); }
11
13
 
12
14
  function _nonIterableRest() { throw new TypeError("Invalid attempt to destructure non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method."); }
@@ -185,12 +187,35 @@ var connectNumericMenu = function connectNumericMenu(renderFn) {
185
187
  });
186
188
  }
187
189
 
190
+ var hasNoResults = results ? results.nbHits === 0 : true;
191
+ var preparedItems = prepareItems(state);
192
+ var allIsSelected = true;
193
+
194
+ var _iterator = _createForOfIteratorHelper(preparedItems),
195
+ _step;
196
+
197
+ try {
198
+ for (_iterator.s(); !(_step = _iterator.n()).done;) {
199
+ var item = _step.value;
200
+
201
+ if (item.isRefined && decodeURI(item.value) !== '{}') {
202
+ allIsSelected = false;
203
+ break;
204
+ }
205
+ }
206
+ } catch (err) {
207
+ _iterator.e(err);
208
+ } finally {
209
+ _iterator.f();
210
+ }
211
+
188
212
  return {
189
213
  createURL: connectorState.createURL(state),
190
- items: transformItems(prepareItems(state), {
214
+ items: transformItems(preparedItems, {
191
215
  results: results
192
216
  }),
193
- hasNoResults: results ? results.nbHits === 0 : true,
217
+ hasNoResults: hasNoResults,
218
+ canRefine: !(hasNoResults && allIsSelected),
194
219
  refine: connectorState.refine,
195
220
  sendEvent: connectorState.sendEvent,
196
221
  widgetParams: widgetParams
@@ -218,8 +218,11 @@ var connectRatingMenu = function connectRatingMenu(renderFn) {
218
218
  });
219
219
  }
220
220
 
221
- if (results) {
222
- var facetResults = results.getFacetValues(attribute, {});
221
+ var refinementIsApplied = false;
222
+ var totalCount = 0;
223
+ var facetResults = results === null || results === void 0 ? void 0 : results.getFacetValues(attribute, {});
224
+
225
+ if (results && facetResults) {
223
226
  var maxValuesPerFacet = facetResults.length;
224
227
  var maxDecimalPlaces = getFacetsMaxDecimalPlaces(facetResults);
225
228
  var maxFacets = Math.pow(10, maxDecimalPlaces) * max;
@@ -233,6 +236,7 @@ var connectRatingMenu = function connectRatingMenu(renderFn) {
233
236
 
234
237
  var _loop = function _loop(star) {
235
238
  var isRefined = refinedStar === star;
239
+ refinementIsApplied = refinementIsApplied || isRefined;
236
240
  var count = facetResults.filter(function (f) {
237
241
  return Number(f.name) >= star && Number(f.name) <= max;
238
242
  }).map(function (f) {
@@ -240,6 +244,7 @@ var connectRatingMenu = function connectRatingMenu(renderFn) {
240
244
  }).reduce(function (sum, current) {
241
245
  return sum + current;
242
246
  }, 0);
247
+ totalCount += count;
243
248
 
244
249
  if (refinedStar && !isRefined && count === 0) {
245
250
  // skip count==0 when at least 1 refinement is enabled
@@ -269,10 +274,11 @@ var connectRatingMenu = function connectRatingMenu(renderFn) {
269
274
  }
270
275
 
271
276
  facetValues = facetValues.reverse();
277
+ var hasNoResults = results ? results.nbHits === 0 : true;
272
278
  return {
273
279
  items: facetValues,
274
- hasNoResults: results ? results.nbHits === 0 : true,
275
- canRefine: facetValues.length > 0,
280
+ hasNoResults: hasNoResults,
281
+ canRefine: (!hasNoResults || refinementIsApplied) && totalCount > 0,
276
282
  refine: connectorState.toggleRefinementFactory(helper),
277
283
  sendEvent: sendEvent,
278
284
  createURL: connectorState.createURLFactory({
@@ -85,13 +85,15 @@ var connectSortBy = function connectSortBy(renderFn) {
85
85
  };
86
86
  }
87
87
 
88
+ var hasNoResults = results ? results.nbHits === 0 : true;
88
89
  return {
89
90
  currentRefinement: state.index,
90
91
  options: transformItems(items, {
91
92
  results: results
92
93
  }),
93
94
  refine: connectorState.setIndex,
94
- hasNoResults: results ? results.nbHits === 0 : true,
95
+ hasNoResults: hasNoResults,
96
+ canRefine: !hasNoResults && items.length > 0,
95
97
  widgetParams: widgetParams
96
98
  };
97
99
  },
@@ -7,6 +7,8 @@ exports.default = hoganHelpers;
7
7
 
8
8
  var _index = require("../helpers/index.js");
9
9
 
10
+ var _formatNumber2 = require("./formatNumber.js");
11
+
10
12
  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; }
11
13
 
12
14
  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; }
@@ -17,7 +19,7 @@ function hoganHelpers(_ref) {
17
19
  var numberLocale = _ref.numberLocale;
18
20
  return {
19
21
  formatNumber: function formatNumber(value, render) {
20
- return Number(render(value)).toLocaleString(numberLocale);
22
+ return (0, _formatNumber2.formatNumber)(Number(render(value)), numberLocale);
21
23
  },
22
24
  highlight: function highlight(options, render) {
23
25
  try {
@@ -0,0 +1,10 @@
1
+ "use strict";
2
+
3
+ Object.defineProperty(exports, "__esModule", {
4
+ value: true
5
+ });
6
+ exports.formatNumber = formatNumber;
7
+
8
+ function formatNumber(value, numberLocale) {
9
+ return value.toLocaleString(numberLocale);
10
+ }
@@ -0,0 +1,10 @@
1
+ "use strict";
2
+
3
+ Object.defineProperty(exports, "__esModule", {
4
+ value: true
5
+ });
6
+ exports.cx = cx;
7
+
8
+ function cx(cssClasses) {
9
+ return Array.isArray(cssClasses) ? cssClasses.filter(Boolean).join(' ') : cssClasses || '';
10
+ }
@@ -56,7 +56,8 @@ var _exportNames = {
56
56
  serializePayload: true,
57
57
  deserializePayload: true,
58
58
  getWidgetAttribute: true,
59
- safelyRunOnBrowser: true
59
+ safelyRunOnBrowser: true,
60
+ cx: true
60
61
  };
61
62
  Object.defineProperty(exports, "capitalize", {
62
63
  enumerable: true,
@@ -376,6 +377,12 @@ Object.defineProperty(exports, "safelyRunOnBrowser", {
376
377
  return _safelyRunOnBrowser.safelyRunOnBrowser;
377
378
  }
378
379
  });
380
+ Object.defineProperty(exports, "cx", {
381
+ enumerable: true,
382
+ get: function get() {
383
+ return _cx.cx;
384
+ }
385
+ });
379
386
 
380
387
  var _capitalize = _interopRequireDefault(require("./capitalize.js"));
381
388
 
@@ -495,4 +502,6 @@ var _getWidgetAttribute = require("./getWidgetAttribute.js");
495
502
 
496
503
  var _safelyRunOnBrowser = require("./safelyRunOnBrowser.js");
497
504
 
505
+ var _cx = require("./cx.js");
506
+
498
507
  function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
@@ -7,6 +7,10 @@ exports.default = void 0;
7
7
 
8
8
  var _hogan = _interopRequireDefault(require("hogan.js"));
9
9
 
10
+ var _index = require("../../helpers/components/index.js");
11
+
12
+ var _preact = require("htm/preact");
13
+
10
14
  function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
11
15
 
12
16
  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); }
@@ -46,7 +50,8 @@ function renderTemplate(_ref) {
46
50
  compileOptions = _ref.compileOptions,
47
51
  helpers = _ref.helpers,
48
52
  data = _ref.data,
49
- bindEvent = _ref.bindEvent;
53
+ bindEvent = _ref.bindEvent,
54
+ sendEvent = _ref.sendEvent;
50
55
  var template = templates[templateKey];
51
56
 
52
57
  if (typeof template !== 'string' && typeof template !== 'function') {
@@ -54,7 +59,17 @@ function renderTemplate(_ref) {
54
59
  }
55
60
 
56
61
  if (typeof template === 'function') {
57
- return template(data, bindEvent);
62
+ // @MAJOR no longer pass bindEvent when string templates are removed
63
+ var params = bindEvent || {};
64
+ params.html = _preact.html;
65
+ params.sendEvent = sendEvent;
66
+ params.components = {
67
+ Highlight: _index.Highlight,
68
+ ReverseHighlight: _index.ReverseHighlight,
69
+ Snippet: _index.Snippet,
70
+ ReverseSnippet: _index.ReverseSnippet
71
+ };
72
+ return template(data, params);
58
73
  }
59
74
 
60
75
  var transformedHelpers = transformHelpersToHogan(helpers, compileOptions, data);
@@ -4,5 +4,5 @@ Object.defineProperty(exports, "__esModule", {
4
4
  value: true
5
5
  });
6
6
  exports.default = void 0;
7
- var _default = '4.44.1';
7
+ var _default = '4.46.0';
8
8
  exports.default = _default;
@@ -5,8 +5,12 @@ Object.defineProperty(exports, "__esModule", {
5
5
  });
6
6
  exports.default = void 0;
7
7
  var defaultTemplates = {
8
- header: '',
9
- loader: '',
8
+ header: function header() {
9
+ return '';
10
+ },
11
+ loader: function loader() {
12
+ return '';
13
+ },
10
14
  item: function item(_item) {
11
15
  return JSON.stringify(_item);
12
16
  }
@@ -5,8 +5,12 @@ Object.defineProperty(exports, "__esModule", {
5
5
  });
6
6
  exports.default = void 0;
7
7
  var defaultTemplates = {
8
- home: 'Home',
9
- separator: '>'
8
+ home: function home() {
9
+ return 'Home';
10
+ },
11
+ separator: function separator() {
12
+ return '>';
13
+ }
10
14
  };
11
15
  var _default = defaultTemplates;
12
16
  exports.default = _default;
@@ -39,7 +39,7 @@ var renderer = function renderer(_ref) {
39
39
  templates = _ref.templates;
40
40
  return function (_ref2, isFirstRendering) {
41
41
  var refine = _ref2.refine,
42
- hasRefinements = _ref2.hasRefinements,
42
+ canRefine = _ref2.canRefine,
43
43
  instantSearchInstance = _ref2.instantSearchInstance;
44
44
 
45
45
  if (isFirstRendering) {
@@ -54,7 +54,7 @@ var renderer = function renderer(_ref) {
54
54
  (0, _preact.render)((0, _preact.h)(_ClearRefinements.default, {
55
55
  refine: refine,
56
56
  cssClasses: cssClasses,
57
- hasRefinements: hasRefinements,
57
+ hasRefinements: canRefine,
58
58
  templateProps: renderState.templateProps
59
59
  }), containerNode);
60
60
  };
@@ -5,7 +5,9 @@ Object.defineProperty(exports, "__esModule", {
5
5
  });
6
6
  exports.default = void 0;
7
7
  var defaultTemplates = {
8
- resetLabel: 'Clear refinements'
8
+ resetLabel: function resetLabel() {
9
+ return 'Clear refinements';
10
+ }
9
11
  };
10
12
  var _default = defaultTemplates;
11
13
  exports.default = _default;
@@ -1,12 +1,14 @@
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
-
5
3
  Object.defineProperty(exports, "__esModule", {
6
4
  value: true
7
5
  });
8
6
  exports.default = void 0;
9
7
 
8
+ var _preact = require("preact");
9
+
10
+ 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); }
11
+
10
12
  function _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError("Cannot call a class as a function"); } }
11
13
 
12
14
  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); } }
@@ -29,7 +31,6 @@ function _getPrototypeOf(o) { _getPrototypeOf = Object.setPrototypeOf ? Object.g
29
31
 
30
32
  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; }
31
33
 
32
- /* global google EventListener */
33
34
  var createHTMLMarker = function createHTMLMarker(googleReference) {
34
35
  var HTMLMarker = /*#__PURE__*/function (_googleReference$maps) {
35
36
  _inherits(HTMLMarker, _googleReference$maps);
@@ -73,7 +74,12 @@ var createHTMLMarker = function createHTMLMarker(googleReference) {
73
74
  _this.element = document.createElement('div');
74
75
  _this.element.className = className;
75
76
  _this.element.style.position = 'absolute';
76
- _this.element.innerHTML = template;
77
+
78
+ if (_typeof(template) === 'object') {
79
+ (0, _preact.render)(template, _this.element);
80
+ } else {
81
+ _this.element.innerHTML = template;
82
+ }
77
83
 
78
84
  _this.setMap(map);
79
85
 
@@ -4,11 +4,25 @@ Object.defineProperty(exports, "__esModule", {
4
4
  value: true
5
5
  });
6
6
  exports.default = void 0;
7
+
8
+ var _preact = require("preact");
9
+
10
+ /** @jsx h */
11
+ var _ref = (0, _preact.h)("p", null, "Your custom HTML Marker");
12
+
7
13
  var defaultTemplates = {
8
- HTMLMarker: '<p>Your custom HTML Marker</p>',
9
- reset: 'Clear the map refinement',
10
- toggle: 'Search as I move the map',
11
- redo: 'Redo search here'
14
+ HTMLMarker: function HTMLMarker() {
15
+ return _ref;
16
+ },
17
+ reset: function reset() {
18
+ return 'Clear the map refinement';
19
+ },
20
+ toggle: function toggle() {
21
+ return 'Search as I move the map';
22
+ },
23
+ redo: function redo() {
24
+ return 'Redo search here';
25
+ }
12
26
  };
13
27
  var _default = defaultTemplates;
14
28
  exports.default = _default;
@@ -4,9 +4,33 @@ Object.defineProperty(exports, "__esModule", {
4
4
  value: true
5
5
  });
6
6
  exports.default = void 0;
7
+
8
+ var _preact = require("preact");
9
+
10
+ var _formatNumber = require("../../lib/formatNumber.js");
11
+
12
+ var _index = require("../../lib/utils/index.js");
13
+
14
+ /** @jsx h */
7
15
  var defaultTemplates = {
8
- item: '<a class="{{cssClasses.link}}" href="{{url}}">' + '<span class="{{cssClasses.label}}">{{label}}</span>' + '<span class="{{cssClasses.count}}">{{#helpers.formatNumber}}{{count}}{{/helpers.formatNumber}}</span>' + '</a>',
9
- showMoreText: "\n {{#isShowingMore}}\n Show less\n {{/isShowingMore}}\n {{^isShowingMore}}\n Show more\n {{/isShowingMore}}\n "
16
+ item: function item(_ref) {
17
+ var url = _ref.url,
18
+ label = _ref.label,
19
+ count = _ref.count,
20
+ cssClasses = _ref.cssClasses;
21
+ return (0, _preact.h)("a", {
22
+ className: (0, _index.cx)(cssClasses.link),
23
+ href: url
24
+ }, (0, _preact.h)("span", {
25
+ className: (0, _index.cx)(cssClasses.label)
26
+ }, label), (0, _preact.h)("span", {
27
+ className: (0, _index.cx)(cssClasses.count)
28
+ }, (0, _formatNumber.formatNumber)(count)));
29
+ },
30
+ showMoreText: function showMoreText(_ref2) {
31
+ var isShowingMore = _ref2.isShowingMore;
32
+ return isShowingMore ? 'Show less' : 'Show more';
33
+ }
10
34
  };
11
35
  var _default = defaultTemplates;
12
36
  exports.default = _default;
@@ -5,7 +5,9 @@ Object.defineProperty(exports, "__esModule", {
5
5
  });
6
6
  exports.default = void 0;
7
7
  var defaultTemplates = {
8
- empty: 'No results',
8
+ empty: function empty() {
9
+ return 'No results';
10
+ },
9
11
  item: function item(data) {
10
12
  return JSON.stringify(data, null, 2);
11
13
  }
@@ -5,9 +5,15 @@ Object.defineProperty(exports, "__esModule", {
5
5
  });
6
6
  exports.default = void 0;
7
7
  var defaultTemplates = {
8
- empty: 'No results',
9
- showPreviousText: 'Show previous results',
10
- showMoreText: 'Show more results',
8
+ empty: function empty() {
9
+ return 'No results';
10
+ },
11
+ showPreviousText: function showPreviousText() {
12
+ return 'Show previous results';
13
+ },
14
+ showMoreText: function showMoreText() {
15
+ return 'Show more results';
16
+ },
11
17
  item: function item(data) {
12
18
  return JSON.stringify(data, null, 2);
13
19
  }
@@ -4,9 +4,33 @@ Object.defineProperty(exports, "__esModule", {
4
4
  value: true
5
5
  });
6
6
  exports.default = void 0;
7
+
8
+ var _preact = require("preact");
9
+
10
+ var _formatNumber = require("../../lib/formatNumber.js");
11
+
12
+ var _index = require("../../lib/utils/index.js");
13
+
14
+ /** @jsx h */
7
15
  var defaultTemplates = {
8
- item: '<a class="{{cssClasses.link}}" href="{{url}}">' + '<span class="{{cssClasses.label}}">{{label}}</span>' + '<span class="{{cssClasses.count}}">{{#helpers.formatNumber}}{{count}}{{/helpers.formatNumber}}</span>' + '</a>',
9
- showMoreText: "\n {{#isShowingMore}}\n Show less\n {{/isShowingMore}}\n {{^isShowingMore}}\n Show more\n {{/isShowingMore}}\n "
16
+ item: function item(_ref) {
17
+ var cssClasses = _ref.cssClasses,
18
+ url = _ref.url,
19
+ label = _ref.label,
20
+ count = _ref.count;
21
+ return (0, _preact.h)("a", {
22
+ className: (0, _index.cx)(cssClasses.link),
23
+ href: url
24
+ }, (0, _preact.h)("span", {
25
+ className: (0, _index.cx)(cssClasses.label)
26
+ }, label), (0, _preact.h)("span", {
27
+ className: (0, _index.cx)(cssClasses.count)
28
+ }, (0, _formatNumber.formatNumber)(count)));
29
+ },
30
+ showMoreText: function showMoreText(_ref2) {
31
+ var isShowingMore = _ref2.isShowingMore;
32
+ return isShowingMore ? 'Show less' : 'Show more';
33
+ }
10
34
  };
11
35
  var _default = defaultTemplates;
12
36
  exports.default = _default;
@@ -4,9 +4,18 @@ Object.defineProperty(exports, "__esModule", {
4
4
  value: true
5
5
  });
6
6
  exports.default = void 0;
7
+
8
+ var _formatNumber = require("../../lib/formatNumber.js");
9
+
7
10
  var defaultTemplates = {
8
- item: '{{label}} ({{#helpers.formatNumber}}{{count}}{{/helpers.formatNumber}})',
9
- defaultOption: 'See all'
11
+ item: function item(_ref) {
12
+ var label = _ref.label,
13
+ count = _ref.count;
14
+ return "".concat(label, " (").concat((0, _formatNumber.formatNumber)(count), ")");
15
+ },
16
+ defaultOption: function defaultOption() {
17
+ return 'See all';
18
+ }
10
19
  };
11
20
  var _default = defaultTemplates;
12
21
  exports.default = _default;