instantsearch.js 4.52.0 → 4.54.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 (30) hide show
  1. package/README.md +1 -16
  2. package/cjs/connectors/current-refinements/connectCurrentRefinements.js +4 -0
  3. package/cjs/connectors/hierarchical-menu/connectHierarchicalMenu.js +4 -0
  4. package/cjs/connectors/menu/connectMenu.js +4 -0
  5. package/cjs/connectors/refinement-list/connectRefinementList.js +8 -0
  6. package/cjs/connectors/toggle-refinement/connectToggleRefinement.js +4 -0
  7. package/cjs/lib/version.js +1 -1
  8. package/cjs/widgets/panel/panel.js +1 -1
  9. package/cjs/widgets/places/places.js +1 -0
  10. package/cjs/widgets/search-box/defaultTemplates.js +6 -3
  11. package/dist/instantsearch.development.d.ts +4 -0
  12. package/dist/instantsearch.development.js +34 -6
  13. package/dist/instantsearch.development.js.map +1 -1
  14. package/dist/instantsearch.production.d.ts +4 -0
  15. package/dist/instantsearch.production.min.d.ts +4 -0
  16. package/dist/instantsearch.production.min.js +2 -2
  17. package/dist/instantsearch.production.min.js.map +1 -1
  18. package/es/connectors/current-refinements/connectCurrentRefinements.d.ts +4 -0
  19. package/es/connectors/current-refinements/connectCurrentRefinements.js +4 -0
  20. package/es/connectors/hierarchical-menu/connectHierarchicalMenu.js +4 -0
  21. package/es/connectors/menu/connectMenu.js +5 -1
  22. package/es/connectors/refinement-list/connectRefinementList.js +9 -1
  23. package/es/connectors/toggle-refinement/connectToggleRefinement.js +5 -1
  24. package/es/lib/version.d.ts +1 -1
  25. package/es/lib/version.js +1 -1
  26. package/es/widgets/panel/panel.js +1 -1
  27. package/es/widgets/places/places.d.ts +1 -1
  28. package/es/widgets/places/places.js +1 -0
  29. package/es/widgets/search-box/defaultTemplates.js +6 -3
  30. package/package.json +5 -5
package/README.md CHANGED
@@ -10,11 +10,6 @@
10
10
 
11
11
  ---
12
12
 
13
- [![Version][version-svg]][package-url]
14
- [![License][license-image]][license-url]
15
- [![Build Status][ci-svg]][ci-url]
16
- [![Pull reminders][pull-reminders-svg]][pull-reminders-url]
17
-
18
13
  InstantSearch.js is a vanilla JavaScript library that lets you create an instant-search result experience using [Algolia][algolia-website]’s search API. It is part of the InstantSearch family:
19
14
 
20
15
  **InstantSearch.js** | [React InstantSearch][react-instantsearch-github] | [Vue InstantSearch][vue-instantsearch-github] | [Angular InstantSearch][instantsearch-angular-github] | [React InstantSearch Native][react-instantsearch-github] | [InstantSearch Android][instantsearch-android-github] | [InstantSearch iOS][instantsearch-ios-github]
@@ -176,19 +171,9 @@ Please read [our contribution process](https://github.com/algolia/instantsearch.
176
171
 
177
172
  InstantSearch.js is [MIT licensed][license-url].
178
173
 
179
- <!-- Badges -->
180
-
181
- [version-svg]: https://img.shields.io/npm/v/instantsearch.js.svg?style=flat-square
182
- [package-url]: https://npmjs.org/package/instantsearch.js
183
- [ci-svg]: https://img.shields.io/circleci/project/github/algolia/instantsearch.js.svg?style=flat-square
184
- [ci-url]: https://circleci.com/gh/algolia/instantsearch.js
185
- [pull-reminders-svg]: https://img.shields.io/badge/pull%20reminders-✓-success.svg?style=flat-square
186
- [pull-reminders-url]: https://pullreminders.com?ref=badge
187
- [license-image]: http://img.shields.io/badge/license-MIT-green.svg?style=flat-square
188
- [license-url]: LICENSE
189
-
190
174
  <!-- Links -->
191
175
 
176
+ [license-url]: LICENSE
192
177
  [algolia-website]: https://www.algolia.com/?utm_source=instantsearch.js&utm_campaign=repository
193
178
  [react-instantsearch-github]: https://github.com/algolia/instantsearch.js/
194
179
  [vue-instantsearch-github]: https://github.com/algolia/vue-instantsearch
@@ -68,6 +68,7 @@ var connectCurrentRefinements = function connectCurrentRefinements(renderFn) {
68
68
  return transformItems(getRefinementsItems({
69
69
  results: {},
70
70
  helper: helper,
71
+ indexId: helper.state.index,
71
72
  includedAttributes: includedAttributes,
72
73
  excludedAttributes: excludedAttributes
73
74
  }), {
@@ -78,6 +79,7 @@ var connectCurrentRefinements = function connectCurrentRefinements(renderFn) {
78
79
  return accResults.concat(transformItems(getRefinementsItems({
79
80
  results: scopedResult.results,
80
81
  helper: scopedResult.helper,
82
+ indexId: scopedResult.indexId,
81
83
  includedAttributes: includedAttributes,
82
84
  excludedAttributes: excludedAttributes
83
85
  }), {
@@ -104,6 +106,7 @@ var connectCurrentRefinements = function connectCurrentRefinements(renderFn) {
104
106
  function getRefinementsItems(_ref3) {
105
107
  var results = _ref3.results,
106
108
  helper = _ref3.helper,
109
+ indexId = _ref3.indexId,
107
110
  includedAttributes = _ref3.includedAttributes,
108
111
  excludedAttributes = _ref3.excludedAttributes;
109
112
  var includesQuery = (includedAttributes || []).indexOf('query') !== -1 || (excludedAttributes || []).indexOf('query') === -1;
@@ -118,6 +121,7 @@ function getRefinementsItems(_ref3) {
118
121
  return item.attribute !== currentItem.attribute;
119
122
  })), [{
120
123
  indexName: helper.state.index,
124
+ indexId: indexId,
121
125
  attribute: currentItem.attribute,
122
126
  label: currentItem.attribute,
123
127
  refinements: items.filter(function (result) {
@@ -209,6 +209,10 @@ var connectHierarchicalMenu = function connectHierarchicalMenu(renderFn) {
209
209
  getWidgetSearchParameters: function getWidgetSearchParameters(searchParameters, _ref6) {
210
210
  var uiState = _ref6.uiState;
211
211
  var values = uiState.hierarchicalMenu && uiState.hierarchicalMenu[hierarchicalFacetName];
212
+ if (searchParameters.isConjunctiveFacet(hierarchicalFacetName) || searchParameters.isDisjunctiveFacet(hierarchicalFacetName)) {
213
+ process.env.NODE_ENV === 'development' ? (0, _utils.warning)(false, "HierarchicalMenu: Attribute \"".concat(hierarchicalFacetName, "\" is already used by another widget applying conjunctive or disjunctive faceting.\nAs this is not supported, please make sure to remove this other widget or this HierarchicalMenu widget will not work at all.")) : void 0;
214
+ return searchParameters;
215
+ }
212
216
  if (searchParameters.isHierarchicalFacet(hierarchicalFacetName)) {
213
217
  var facet = searchParameters.getHierarchicalFacetByName(hierarchicalFacetName);
214
218
  process.env.NODE_ENV === 'development' ? (0, _utils.warning)((0, _utils.isEqual)(facet.attributes, attributes) && facet.separator === separator && facet.rootPath === rootPath, 'Using Breadcrumb and HierarchicalMenu on the same facet with different options overrides the configuration of the HierarchicalMenu.') : void 0;
@@ -181,6 +181,10 @@ var connectMenu = function connectMenu(renderFn) {
181
181
  getWidgetSearchParameters: function getWidgetSearchParameters(searchParameters, _ref5) {
182
182
  var uiState = _ref5.uiState;
183
183
  var value = uiState.menu && uiState.menu[attribute];
184
+ if (searchParameters.isConjunctiveFacet(attribute) || searchParameters.isDisjunctiveFacet(attribute)) {
185
+ process.env.NODE_ENV === 'development' ? (0, _utils.warning)(false, "Menu: Attribute \"".concat(attribute, "\" is already used by another widget applying conjunctive or disjunctive faceting.\nAs this is not supported, please make sure to remove this other widget or this Menu widget will not work at all.")) : void 0;
186
+ return searchParameters;
187
+ }
184
188
  var withFacetConfiguration = searchParameters.removeHierarchicalFacet(attribute).addHierarchicalFacet({
185
189
  name: attribute,
186
190
  attributes: [attribute]
@@ -253,6 +253,14 @@ var connectRefinementList = function connectRefinementList(renderFn) {
253
253
  getWidgetSearchParameters: function getWidgetSearchParameters(searchParameters, _ref6) {
254
254
  var uiState = _ref6.uiState;
255
255
  var isDisjunctive = operator === 'or';
256
+ if (searchParameters.isHierarchicalFacet(attribute)) {
257
+ process.env.NODE_ENV === 'development' ? (0, _utils.warning)(false, "RefinementList: Attribute \"".concat(attribute, "\" is already used by another widget applying hierarchical faceting.\nAs this is not supported, please make sure to remove this other widget or this RefinementList widget will not work at all.")) : void 0;
258
+ return searchParameters;
259
+ }
260
+ if (isDisjunctive && searchParameters.isConjunctiveFacet(attribute) || !isDisjunctive && searchParameters.isDisjunctiveFacet(attribute)) {
261
+ process.env.NODE_ENV === 'development' ? (0, _utils.warning)(false, "RefinementList: Attribute \"".concat(attribute, "\" is used by another refinement list with a different operator.\nAs this is not supported, please make sure to only use this attribute with one of the two operators.")) : void 0;
262
+ return searchParameters;
263
+ }
256
264
  var values = uiState.refinementList && uiState.refinementList[attribute];
257
265
  var withoutRefinements = searchParameters.clearRefinements(attribute);
258
266
  var withFacetConfiguration = isDisjunctive ? withoutRefinements.addDisjunctiveFacet(attribute) : withoutRefinements.addFacet(attribute);
@@ -257,6 +257,10 @@ var connectToggleRefinement = function connectToggleRefinement(renderFn) {
257
257
  },
258
258
  getWidgetSearchParameters: function getWidgetSearchParameters(searchParameters, _ref11) {
259
259
  var uiState = _ref11.uiState;
260
+ if (searchParameters.isHierarchicalFacet(attribute) || searchParameters.isConjunctiveFacet(attribute)) {
261
+ process.env.NODE_ENV === 'development' ? (0, _utils.warning)(false, "ToggleRefinement: Attribute \"".concat(attribute, "\" is already used by another widget of a different type.\nAs this is not supported, please make sure to remove this other widget or this ToggleRefinement widget will not work at all.")) : void 0;
262
+ return searchParameters;
263
+ }
260
264
  var withFacetConfiguration = searchParameters.clearRefinements(attribute).addDisjunctiveFacet(attribute);
261
265
  var isRefined = Boolean(uiState.toggle && uiState.toggle[attribute]);
262
266
  if (isRefined) {
@@ -4,5 +4,5 @@ Object.defineProperty(exports, "__esModule", {
4
4
  value: true
5
5
  });
6
6
  exports.default = void 0;
7
- var _default = '4.52.0';
7
+ var _default = '4.54.0';
8
8
  exports.default = _default;
@@ -101,7 +101,7 @@ var panel = function panel(panelWidgetParams) {
101
101
  footer: '',
102
102
  collapseButtonText: function collapseButtonText(_ref4) {
103
103
  var isCollapsed = _ref4.collapsed;
104
- return "<svg\n class=\"".concat(cssClasses.collapseIcon, "\"\n width=\"1em\"\n height=\"1em\"\n viewBox=\"0 0 500 500\"\n >\n <path d=\"").concat(isCollapsed ? 'M100 250l300-150v300z' : 'M250 400l150-300H100z', "\" fill=\"currentColor\" />\n </svg>");
104
+ return "<svg\n class=\"".concat(cssClasses.collapseIcon, "\"\n style=\"width: 1em; height: 1em;\"\n viewBox=\"0 0 500 500\"\n >\n <path d=\"").concat(isCollapsed ? 'M100 250l300-150v300z' : 'M250 400l150-300H100z', "\" fill=\"currentColor\" />\n </svg>");
105
105
  }
106
106
  };
107
107
  var renderPanel = renderer({
@@ -14,6 +14,7 @@ function _toPropertyKey(arg) { var key = _toPrimitive(arg, "string"); return _ty
14
14
  function _toPrimitive(input, hint) { if (_typeof(input) !== "object" || input === null) return input; var prim = input[Symbol.toPrimitive]; if (prim !== undefined) { var res = prim.call(input, hint || "default"); if (_typeof(res) !== "object") return res; throw new TypeError("@@toPrimitive must return a primitive value."); } return (hint === "string" ? String : Number)(input); }
15
15
  function _objectWithoutProperties(source, excluded) { if (source == null) return {}; var target = _objectWithoutPropertiesLoose(source, excluded); var key, i; if (Object.getOwnPropertySymbols) { var sourceSymbolKeys = Object.getOwnPropertySymbols(source); for (i = 0; i < sourceSymbolKeys.length; i++) { key = sourceSymbolKeys[i]; if (excluded.indexOf(key) >= 0) continue; if (!Object.prototype.propertyIsEnumerable.call(source, key)) continue; target[key] = source[key]; } } return target; }
16
16
  function _objectWithoutPropertiesLoose(source, excluded) { if (source == null) return {}; var target = {}; var sourceKeys = Object.keys(source); var key, i; for (i = 0; i < sourceKeys.length; i++) { key = sourceKeys[i]; if (excluded.indexOf(key) >= 0) continue; target[key] = source[key]; } return target; }
17
+ /* Places.js is an optional dependency, no error should be reported if the package is missing */
17
18
  /** @ts-ignore */
18
19
 
19
20
  // using the type like this requires only one ts-ignore
@@ -39,7 +39,8 @@ var defaultTemplate = {
39
39
  className: cssClasses.resetIcon,
40
40
  viewBox: "0 0 20 20",
41
41
  width: "10",
42
- height: "10"
42
+ height: "10",
43
+ "aria-hidden": "true"
43
44
  }, _ref2);
44
45
  },
45
46
  submit: function submit(_ref3) {
@@ -48,7 +49,8 @@ var defaultTemplate = {
48
49
  className: cssClasses.submitIcon,
49
50
  width: "10",
50
51
  height: "10",
51
- viewBox: "0 0 40 40"
52
+ viewBox: "0 0 40 40",
53
+ "aria-hidden": "true"
52
54
  }, _ref4);
53
55
  },
54
56
  loadingIndicator: function loadingIndicator(_ref5) {
@@ -58,7 +60,8 @@ var defaultTemplate = {
58
60
  width: "16",
59
61
  height: "16",
60
62
  viewBox: "0 0 38 38",
61
- stroke: "#444"
63
+ stroke: "#444",
64
+ "aria-hidden": "true"
62
65
  }, _ref6);
63
66
  }
64
67
  };
@@ -957,6 +957,10 @@ declare type CurrentRefinementsConnectorParamsItem = {
957
957
  * The index name.
958
958
  */
959
959
  indexName: string;
960
+ /**
961
+ * The index id as provided to the index widget.
962
+ */
963
+ indexId: string;
960
964
  /**
961
965
  * The attribute on which the refinement is applied.
962
966
  */
@@ -1,4 +1,4 @@
1
- /*! InstantSearch.js 4.52.0 | © Algolia, Inc. and contributors; MIT License | https://github.com/algolia/instantsearch.js */
1
+ /*! InstantSearch.js 4.54.0 | © Algolia, Inc. and contributors; MIT License | https://github.com/algolia/instantsearch.js */
2
2
  (function (global, factory) {
3
3
  typeof exports === 'object' && typeof module !== 'undefined' ? module.exports = factory() :
4
4
  typeof define === 'function' && define.amd ? define(factory) :
@@ -2108,6 +2108,7 @@
2108
2108
  return transformItems(getRefinementsItems({
2109
2109
  results: {},
2110
2110
  helper: helper,
2111
+ indexId: helper.state.index,
2111
2112
  includedAttributes: includedAttributes,
2112
2113
  excludedAttributes: excludedAttributes
2113
2114
  }), {
@@ -2118,6 +2119,7 @@
2118
2119
  return accResults.concat(transformItems(getRefinementsItems({
2119
2120
  results: scopedResult.results,
2120
2121
  helper: scopedResult.helper,
2122
+ indexId: scopedResult.indexId,
2121
2123
  includedAttributes: includedAttributes,
2122
2124
  excludedAttributes: excludedAttributes
2123
2125
  }), {
@@ -2144,6 +2146,7 @@
2144
2146
  function getRefinementsItems(_ref3) {
2145
2147
  var results = _ref3.results,
2146
2148
  helper = _ref3.helper,
2149
+ indexId = _ref3.indexId,
2147
2150
  includedAttributes = _ref3.includedAttributes,
2148
2151
  excludedAttributes = _ref3.excludedAttributes;
2149
2152
  var includesQuery = (includedAttributes || []).indexOf('query') !== -1 || (excludedAttributes || []).indexOf('query') === -1;
@@ -2158,6 +2161,7 @@
2158
2161
  return item.attribute !== currentItem.attribute;
2159
2162
  })), [{
2160
2163
  indexName: helper.state.index,
2164
+ indexId: indexId,
2161
2165
  attribute: currentItem.attribute,
2162
2166
  label: currentItem.attribute,
2163
2167
  refinements: items.filter(function (result) {
@@ -2428,6 +2432,10 @@
2428
2432
  getWidgetSearchParameters: function getWidgetSearchParameters(searchParameters, _ref6) {
2429
2433
  var uiState = _ref6.uiState;
2430
2434
  var values = uiState.hierarchicalMenu && uiState.hierarchicalMenu[hierarchicalFacetName];
2435
+ if (searchParameters.isConjunctiveFacet(hierarchicalFacetName) || searchParameters.isDisjunctiveFacet(hierarchicalFacetName)) {
2436
+ _warning(false, "HierarchicalMenu: Attribute \"".concat(hierarchicalFacetName, "\" is already used by another widget applying conjunctive or disjunctive faceting.\nAs this is not supported, please make sure to remove this other widget or this HierarchicalMenu widget will not work at all.")) ;
2437
+ return searchParameters;
2438
+ }
2431
2439
  if (searchParameters.isHierarchicalFacet(hierarchicalFacetName)) {
2432
2440
  var facet = searchParameters.getHierarchicalFacetByName(hierarchicalFacetName);
2433
2441
  _warning(isEqual(facet.attributes, attributes) && facet.separator === separator && facet.rootPath === rootPath, 'Using Breadcrumb and HierarchicalMenu on the same facet with different options overrides the configuration of the HierarchicalMenu.') ;
@@ -3273,6 +3281,10 @@
3273
3281
  getWidgetSearchParameters: function getWidgetSearchParameters(searchParameters, _ref5) {
3274
3282
  var uiState = _ref5.uiState;
3275
3283
  var value = uiState.menu && uiState.menu[attribute];
3284
+ if (searchParameters.isConjunctiveFacet(attribute) || searchParameters.isDisjunctiveFacet(attribute)) {
3285
+ _warning(false, "Menu: Attribute \"".concat(attribute, "\" is already used by another widget applying conjunctive or disjunctive faceting.\nAs this is not supported, please make sure to remove this other widget or this Menu widget will not work at all.")) ;
3286
+ return searchParameters;
3287
+ }
3276
3288
  var withFacetConfiguration = searchParameters.removeHierarchicalFacet(attribute).addHierarchicalFacet({
3277
3289
  name: attribute,
3278
3290
  attributes: [attribute]
@@ -4219,6 +4231,14 @@
4219
4231
  getWidgetSearchParameters: function getWidgetSearchParameters(searchParameters, _ref6) {
4220
4232
  var uiState = _ref6.uiState;
4221
4233
  var isDisjunctive = operator === 'or';
4234
+ if (searchParameters.isHierarchicalFacet(attribute)) {
4235
+ _warning(false, "RefinementList: Attribute \"".concat(attribute, "\" is already used by another widget applying hierarchical faceting.\nAs this is not supported, please make sure to remove this other widget or this RefinementList widget will not work at all.")) ;
4236
+ return searchParameters;
4237
+ }
4238
+ if (isDisjunctive && searchParameters.isConjunctiveFacet(attribute) || !isDisjunctive && searchParameters.isDisjunctiveFacet(attribute)) {
4239
+ _warning(false, "RefinementList: Attribute \"".concat(attribute, "\" is used by another refinement list with a different operator.\nAs this is not supported, please make sure to only use this attribute with one of the two operators.")) ;
4240
+ return searchParameters;
4241
+ }
4222
4242
  var values = uiState.refinementList && uiState.refinementList[attribute];
4223
4243
  var withoutRefinements = searchParameters.clearRefinements(attribute);
4224
4244
  var withFacetConfiguration = isDisjunctive ? withoutRefinements.addDisjunctiveFacet(attribute) : withoutRefinements.addFacet(attribute);
@@ -4984,6 +5004,10 @@
4984
5004
  },
4985
5005
  getWidgetSearchParameters: function getWidgetSearchParameters(searchParameters, _ref11) {
4986
5006
  var uiState = _ref11.uiState;
5007
+ if (searchParameters.isHierarchicalFacet(attribute) || searchParameters.isConjunctiveFacet(attribute)) {
5008
+ _warning(false, "ToggleRefinement: Attribute \"".concat(attribute, "\" is already used by another widget of a different type.\nAs this is not supported, please make sure to remove this other widget or this ToggleRefinement widget will not work at all.")) ;
5009
+ return searchParameters;
5010
+ }
4987
5011
  var withFacetConfiguration = searchParameters.clearRefinements(attribute).addDisjunctiveFacet(attribute);
4988
5012
  var isRefined = Boolean(uiState.toggle && uiState.toggle[attribute]);
4989
5013
  if (isRefined) {
@@ -13616,7 +13640,7 @@
13616
13640
  };
13617
13641
  }
13618
13642
 
13619
- var version$1 = '4.52.0';
13643
+ var version$1 = '4.54.0';
13620
13644
 
13621
13645
  var withUsage$r = createDocumentationMessageGenerator({
13622
13646
  name: 'instantsearch'
@@ -18599,7 +18623,7 @@
18599
18623
  footer: '',
18600
18624
  collapseButtonText: function collapseButtonText(_ref4) {
18601
18625
  var isCollapsed = _ref4.collapsed;
18602
- return "<svg\n class=\"".concat(cssClasses.collapseIcon, "\"\n width=\"1em\"\n height=\"1em\"\n viewBox=\"0 0 500 500\"\n >\n <path d=\"").concat(isCollapsed ? 'M100 250l300-150v300z' : 'M250 400l150-300H100z', "\" fill=\"currentColor\" />\n </svg>");
18626
+ return "<svg\n class=\"".concat(cssClasses.collapseIcon, "\"\n style=\"width: 1em; height: 1em;\"\n viewBox=\"0 0 500 500\"\n >\n <path d=\"").concat(isCollapsed ? 'M100 250l300-150v300z' : 'M250 400l150-300H100z', "\" fill=\"currentColor\" />\n </svg>");
18603
18627
  }
18604
18628
  };
18605
18629
  var renderPanel = renderer$d({
@@ -18669,6 +18693,7 @@
18669
18693
 
18670
18694
  var _excluded$l = ["placesReference", "defaultPosition"],
18671
18695
  _excluded2$4 = ["places"];
18696
+ /* Places.js is an optional dependency, no error should be reported if the package is missing */
18672
18697
  /** @ts-ignore */
18673
18698
 
18674
18699
  // using the type like this requires only one ts-ignore
@@ -20237,7 +20262,8 @@
20237
20262
  className: cssClasses.resetIcon,
20238
20263
  viewBox: "0 0 20 20",
20239
20264
  width: "10",
20240
- height: "10"
20265
+ height: "10",
20266
+ "aria-hidden": "true"
20241
20267
  }, _ref2);
20242
20268
  },
20243
20269
  submit: function submit(_ref3) {
@@ -20246,7 +20272,8 @@
20246
20272
  className: cssClasses.submitIcon,
20247
20273
  width: "10",
20248
20274
  height: "10",
20249
- viewBox: "0 0 40 40"
20275
+ viewBox: "0 0 40 40",
20276
+ "aria-hidden": "true"
20250
20277
  }, _ref4$1);
20251
20278
  },
20252
20279
  loadingIndicator: function loadingIndicator(_ref5) {
@@ -20256,7 +20283,8 @@
20256
20283
  width: "16",
20257
20284
  height: "16",
20258
20285
  viewBox: "0 0 38 38",
20259
- stroke: "#444"
20286
+ stroke: "#444",
20287
+ "aria-hidden": "true"
20260
20288
  }, _ref6$1);
20261
20289
  }
20262
20290
  };