@deque/cauldron-react 6.20.2 → 6.21.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.
@@ -21,6 +21,7 @@ interface BaseComboboxProps extends Omit<React.InputHTMLAttributes<HTMLInputElem
21
21
  renderNoResults?: (() => React.JSX.Element) | React.ReactElement;
22
22
  portal?: React.RefObject<HTMLElement> | HTMLElement;
23
23
  inputRef?: React.Ref<HTMLInputElement>;
24
+ description?: React.ReactNode;
24
25
  }
25
26
  interface SingleSelectComboboxProps extends BaseComboboxProps {
26
27
  value?: ComboboxValue;
@@ -2,6 +2,6 @@
2
2
  * GENERATED CODE. DO NOT EDIT DIRECTLY!
3
3
  */
4
4
  /** IconType represents each valid icon type. */
5
- export type IconType = 'add-user' | 'arrow-circle-up' | 'arrow-circle-down' | 'arrow-circle-left' | 'arrow-circle-right' | 'arrow-up' | 'arrow-down' | 'arrow-left' | 'arrow-right' | 'arrows-alt' | 'bolt' | 'broken-image' | 'caution' | 'check-circle' | 'check-shield' | 'check-solid' | 'check' | 'checkbox-checked' | 'checkbox-unchecked' | 'chevron-double-up' | 'chevron-double-down' | 'chevron-double-left' | 'chevron-double-right' | 'chevron-up' | 'chevron-down' | 'chevron-left' | 'chevron-right' | 'clipboard' | 'clock' | 'close' | 'code' | 'copy' | 'download' | 'dropper' | 'exchange' | 'export-solid' | 'external-link' | 'eye' | 'filter-solid' | 'filter' | 'flag' | 'gears' | 'github' | 'grid' | 'hamburger-menu' | 'hashtag' | 'highlight' | 'images' | 'info-circle-alt' | 'info-circle' | 'info-square' | 'kabob' | 'link' | 'linkedin' | 'list' | 'lock' | 'magnifying-glass' | 'menu' | 'minus' | 'new-releases' | 'new' | 'no' | 'pencil' | 'person-running' | 'play' | 'plus' | 'question-circle-alt' | 'question-circle' | 'radio-checked' | 'radio-unchecked' | 'recycle-square' | 'recycle' | 'resend' | 'robot' | 'run-again' | 'save' | 'share-nodes' | 'share' | 'sort-triangle' | 'sort' | 'star' | 'step-back' | 'step-forward' | 'sun' | 'table-sort-ascending' | 'table-sort-descending' | 'tag' | 'target' | 'trash' | 'triangle-up' | 'triangle-down' | 'triangle-left' | 'triangle-right' | 'twitter' | 'upload';
5
+ export type IconType = 'add-user' | 'arrow-circle-up' | 'arrow-circle-down' | 'arrow-circle-left' | 'arrow-circle-right' | 'arrow-up' | 'arrow-down' | 'arrow-left' | 'arrow-right' | 'arrows-alt' | 'bolt' | 'broken-image' | 'caution' | 'check-circle' | 'check-shield' | 'check-solid' | 'check' | 'checkbox-checked' | 'checkbox-unchecked' | 'chevron-double-up' | 'chevron-double-down' | 'chevron-double-left' | 'chevron-double-right' | 'chevron-up' | 'chevron-down' | 'chevron-left' | 'chevron-right' | 'clipboard' | 'clock' | 'close' | 'code' | 'copy' | 'download' | 'dropper' | 'exchange' | 'export-solid' | 'external-link' | 'eye' | 'filter' | 'flag' | 'gears' | 'github' | 'grid' | 'hamburger-menu' | 'hashtag' | 'highlight' | 'images' | 'info-circle-alt' | 'info-circle' | 'info-square' | 'kabob' | 'link' | 'linkedin' | 'list' | 'lock' | 'magnifying-glass' | 'menu' | 'minus' | 'new-releases' | 'new' | 'no' | 'pencil' | 'person-running' | 'play' | 'plus' | 'question-circle-alt' | 'question-circle' | 'radio-checked' | 'radio-unchecked' | 'recycle-square' | 'recycle' | 'resend' | 'robot' | 'run-again' | 'save' | 'share-nodes' | 'share' | 'sort-triangle' | 'sort' | 'star' | 'step-back' | 'step-forward' | 'sun' | 'table-sort-ascending' | 'table-sort-descending' | 'tag' | 'target' | 'trash' | 'triangle-up' | 'triangle-down' | 'triangle-left' | 'triangle-right' | 'twitter' | 'upload' | 'filter-solid';
6
6
  /** iconTypes holds each valid icon type. */
7
7
  export declare const iconTypes: string[];
package/lib/filter.js CHANGED
@@ -31,9 +31,9 @@ const SvgFilter = props => /*#__PURE__*/React__namespace.createElement("svg", _e
31
31
  height: 24,
32
32
  width: 24
33
33
  }, props), _path || (_path = /*#__PURE__*/React__namespace.createElement("path", {
34
- d: "M10 18h4v-2h-4v2zM3 6v2h18V6H3zm3 7h12v-2H6v2z",
35
- fill: "currentColor",
36
- vectorEffect: "non-scaling-stroke"
34
+ d: "M18.65 4.67H5.34a.616.616 0 0 0-.62.41c-.12.24-.06.55.16.73L10 10.94V16c0 .18.07.35.2.47l2.67 2.67c.12.13.29.2.47.2.09 0 .18-.02.26-.05.26-.1.42-.35.4-.63v-7.72l5.13-5.13c.21-.18.28-.48.15-.73a.628.628 0 0 0-.63-.41z",
35
+ vectorEffect: "non-scaling-stroke",
36
+ fill: "currentColor"
37
37
  })));
38
38
 
39
39
  exports["default"] = SvgFilter;
package/lib/index.js CHANGED
@@ -142,7 +142,6 @@ var iconTypes = [
142
142
  'export-solid',
143
143
  'external-link',
144
144
  'eye',
145
- 'filter-solid',
146
145
  'filter',
147
146
  'flag',
148
147
  'gears',
@@ -198,7 +197,8 @@ var iconTypes = [
198
197
  'triangle-left',
199
198
  'triangle-right',
200
199
  'twitter',
201
- 'upload'
200
+ 'upload',
201
+ 'filter-solid'
202
202
  ];
203
203
 
204
204
  function __variableDynamicImportRuntime0__(path) {
@@ -229,7 +229,6 @@ function __variableDynamicImportRuntime0__(path) {
229
229
  case './icons/export-solid.svg': return Promise.resolve().then(function () { return require('./export-solid.js'); });
230
230
  case './icons/external-link.svg': return Promise.resolve().then(function () { return require('./external-link.js'); });
231
231
  case './icons/eye.svg': return Promise.resolve().then(function () { return require('./eye.js'); });
232
- case './icons/filter-solid.svg': return Promise.resolve().then(function () { return require('./filter-solid.js'); });
233
232
  case './icons/filter.svg': return Promise.resolve().then(function () { return require('./filter.js'); });
234
233
  case './icons/flag.svg': return Promise.resolve().then(function () { return require('./flag.js'); });
235
234
  case './icons/gears.svg': return Promise.resolve().then(function () { return require('./gears.js'); });
@@ -290,6 +289,15 @@ function __variableDynamicImportRuntime0__(path) {
290
289
  })
291
290
  }
292
291
  }
292
+ /**
293
+ * Some icons have a mapped type different from their filename;
294
+ * This is only a temporary measure to consolidate similar icons
295
+ * until we can address Cauldron's iconography.
296
+ * see: https://github.com/dequelabs/cauldron/issues/869
297
+ */
298
+ var MAPPED_TYPES = {
299
+ 'filter-solid': 'filter'
300
+ };
293
301
  var Icon = React.forwardRef(function (_a, ref) {
294
302
  var _b;
295
303
  var label = _a.label, className = _a.className, type = _a.type, other = tslib.__rest(_a, ["label", "className", "type"]);
@@ -306,7 +314,8 @@ var Icon = React.forwardRef(function (_a, ref) {
306
314
  if (process.env.NODE_ENV === 'test') {
307
315
  return;
308
316
  }
309
- __variableDynamicImportRuntime0__("./icons/".concat(name, ".svg"))
317
+ var iconName = MAPPED_TYPES[name] || name;
318
+ __variableDynamicImportRuntime0__("./icons/".concat(iconName, ".svg"))
310
319
  .then(function (icon) {
311
320
  isMounted.current && setIcon(function () { return icon.default; });
312
321
  })
@@ -1781,15 +1790,16 @@ var AnchoredOverlay = React.forwardRef(function (_a, refProp) {
1781
1790
  ? reactDom$1.autoPlacement({
1782
1791
  alignment: getAutoAlignment(initialPlacement)
1783
1792
  })
1784
- : reactDom$1.flip(),
1793
+ : reactDom$1.flip({
1794
+ fallbackAxisSideDirection: 'start'
1795
+ }),
1785
1796
  reactDom$1.shift({ crossAxis: false })
1786
1797
  ].filter(Boolean),
1787
1798
  elements: {
1788
- reference: resolveElement(target),
1789
- floating: ref.current
1799
+ reference: resolveElement(target)
1790
1800
  },
1791
1801
  whileElementsMounted: dom.autoUpdate
1792
- }), floatingStyles = _f.floatingStyles, placement = _f.placement, middlewareData = _f.middlewareData;
1802
+ }), refs = _f.refs, floatingStyles = _f.floatingStyles, placement = _f.placement, middlewareData = _f.middlewareData;
1793
1803
  useEscapeKey({
1794
1804
  active: open,
1795
1805
  capture: true,
@@ -1819,7 +1829,10 @@ var AnchoredOverlay = React.forwardRef(function (_a, refProp) {
1819
1829
  });
1820
1830
  }
1821
1831
  }, [onShiftChange, (_b = middlewareData.shift) === null || _b === void 0 ? void 0 : _b.x, (_c = middlewareData.shift) === null || _c === void 0 ? void 0 : _c.y]);
1822
- var AnchoredOverlayComponent = (React__default["default"].createElement(Component, tslib.__assign({ ref: ref }, props, { style: tslib.__assign(tslib.__assign({}, floatingStyles), style) }), children));
1832
+ var AnchoredOverlayComponent = (React__default["default"].createElement(Component, tslib.__assign({ ref: function (element) {
1833
+ refs.setFloating(element);
1834
+ ref.current = element;
1835
+ } }, props, { style: tslib.__assign(tslib.__assign({}, floatingStyles), style) }), children));
1823
1836
  if (portal && !isBrowser()) {
1824
1837
  return null;
1825
1838
  }
@@ -3963,12 +3976,13 @@ function useComboboxContext() {
3963
3976
  * const intersectionRef = useIntersectionRef<HTMLElement>(elementRef)
3964
3977
  * return <span ref={elementRef}>...</span>
3965
3978
  */
3966
- function useIntersectionRef(element, intersectionObserverOptions) {
3979
+ function useIntersectionRef(elementOrRef, intersectionObserverOptions) {
3967
3980
  if (intersectionObserverOptions === void 0) { intersectionObserverOptions = {
3968
3981
  root: null,
3969
3982
  threshold: 1.0
3970
3983
  }; }
3971
3984
  var intersectionRef = React.useRef(null);
3985
+ var element = resolveElement(elementOrRef);
3972
3986
  React.useEffect(function () {
3973
3987
  // istanbul ignore else
3974
3988
  if ('IntersectionObserver' in globalThis &&
@@ -3976,8 +3990,7 @@ function useIntersectionRef(element, intersectionObserverOptions) {
3976
3990
  if (typeof element === 'undefined' || element === null) {
3977
3991
  return;
3978
3992
  }
3979
- if (!(element instanceof HTMLElement) &&
3980
- !(element.current instanceof HTMLElement)) {
3993
+ if (!(element instanceof HTMLElement)) {
3981
3994
  console.warn('An element or ref was provided to useIntersectionRef that was not an HTMLElement.');
3982
3995
  return;
3983
3996
  }
@@ -3986,7 +3999,7 @@ function useIntersectionRef(element, intersectionObserverOptions) {
3986
3999
  intersectionRef.current = entry;
3987
4000
  };
3988
4001
  var observer_1 = new IntersectionObserver(handleIntersection, intersectionObserverOptions);
3989
- observer_1.observe(element instanceof HTMLElement ? element : element.current);
4002
+ observer_1.observe(element);
3990
4003
  return function () {
3991
4004
  observer_1.disconnect();
3992
4005
  };
@@ -4156,7 +4169,7 @@ var ComboboxNoResults = function (_a) {
4156
4169
  return (React__default["default"].createElement("div", { className: "ComboboxListbox__empty", role: "alert", "aria-live": "polite" }, children || 'No results found.'));
4157
4170
  };
4158
4171
  var Combobox = React.forwardRef(function (_a, ref) {
4159
- var propId = _a.id, className = _a.className, label = _a.label, children = _a.children, _b = _a.options, options = _b === void 0 ? [] : _b, propValue = _a.value, defaultValue = _a.defaultValue, propInputValue = _a.inputValue, defaultInputValue = _a.defaultInputValue, _c = _a.multiselect, multiselect = _c === void 0 ? false : _c, _d = _a.requiredText, requiredText = _d === void 0 ? 'Required' : _d, error = _a.error, _e = _a.autocomplete, autocomplete = _e === void 0 ? 'manual' : _e, onSelectionChange = _a.onSelectionChange, onActiveChange = _a.onActiveChange, onChange = _a.onChange, onKeyDown = _a.onKeyDown, onFocus = _a.onFocus, onBlur = _a.onBlur, name = _a.name, renderNoResults = _a.renderNoResults, portal = _a.portal, _f = _a.inputRef, propInputRef = _f === void 0 ? null : _f, ariaDescribedby = _a["aria-describedby"], _g = _a.disabled, disabled = _g === void 0 ? false : _g, props = tslib.__rest(_a, ["id", "className", "label", "children", "options", "value", "defaultValue", "inputValue", "defaultInputValue", "multiselect", "requiredText", "error", "autocomplete", "onSelectionChange", "onActiveChange", "onChange", "onKeyDown", "onFocus", "onBlur", "name", "renderNoResults", "portal", "inputRef", 'aria-describedby', "disabled"]);
4172
+ var propId = _a.id, className = _a.className, label = _a.label, children = _a.children, _b = _a.options, options = _b === void 0 ? [] : _b, propValue = _a.value, defaultValue = _a.defaultValue, propInputValue = _a.inputValue, defaultInputValue = _a.defaultInputValue, _c = _a.multiselect, multiselect = _c === void 0 ? false : _c, _d = _a.requiredText, requiredText = _d === void 0 ? 'Required' : _d, error = _a.error, _e = _a.autocomplete, autocomplete = _e === void 0 ? 'manual' : _e, onSelectionChange = _a.onSelectionChange, onActiveChange = _a.onActiveChange, onChange = _a.onChange, onKeyDown = _a.onKeyDown, onFocus = _a.onFocus, onBlur = _a.onBlur, name = _a.name, renderNoResults = _a.renderNoResults, portal = _a.portal, _f = _a.inputRef, propInputRef = _f === void 0 ? null : _f, description = _a.description, ariaDescribedby = _a["aria-describedby"], _g = _a.disabled, disabled = _g === void 0 ? false : _g, props = tslib.__rest(_a, ["id", "className", "label", "children", "options", "value", "defaultValue", "inputValue", "defaultInputValue", "multiselect", "requiredText", "error", "autocomplete", "onSelectionChange", "onActiveChange", "onChange", "onKeyDown", "onFocus", "onBlur", "name", "renderNoResults", "portal", "inputRef", "description", 'aria-describedby', "disabled"]);
4160
4173
  var _h = tslib.__read(React.useState(new Map()), 2), matchingOptions = _h[0], setMatchingOptions = _h[1];
4161
4174
  var _j = tslib.__read(React.useState(function () {
4162
4175
  var value = defaultValue || propValue;
@@ -4500,9 +4513,15 @@ var Combobox = React.forwardRef(function (_a, ref) {
4500
4513
  comboboxOptions,
4501
4514
  noMatchingOptions));
4502
4515
  var errorId = "".concat(id, "-error");
4503
- var inputProps = tslib.__assign(tslib.__assign({}, props), { 'aria-describedby': error
4504
- ? addIdRef(ariaDescribedby, errorId)
4505
- : ariaDescribedby });
4516
+ var descriptionId = "".concat(id, "-description");
4517
+ var describedby = ariaDescribedby;
4518
+ if (description) {
4519
+ describedby = addIdRef(describedby, descriptionId);
4520
+ }
4521
+ if (error) {
4522
+ describedby = addIdRef(describedby, errorId);
4523
+ }
4524
+ var inputProps = tslib.__assign(tslib.__assign({}, props), { 'aria-describedby': describedby });
4506
4525
  return (React__default["default"].createElement("div", { id: id, className: classNames__default["default"]('Combobox', { 'Combobox--multiselect': multiselect }, className), ref: comboboxRef },
4507
4526
  name &&
4508
4527
  formValues.map(function (formValue, index) { return (React__default["default"].createElement("input", { type: "hidden", key: index, name: name, value: formValue })); }),
@@ -4512,6 +4531,10 @@ var Combobox = React.forwardRef(function (_a, ref) {
4512
4531
  }), id: "".concat(id, "-label"), htmlFor: "".concat(id, "-input") },
4513
4532
  React__default["default"].createElement("span", null, label),
4514
4533
  isRequired && (React__default["default"].createElement("span", { className: "Field__required-text", "aria-hidden": "true" }, requiredText))),
4534
+ description && (React__default["default"].createElement("span", { className: "Field__description", id: descriptionId }, description)),
4535
+ hasError && (React__default["default"].createElement("div", { className: "Field__error", id: errorId },
4536
+ React__default["default"].createElement(Icon, { type: "caution" }),
4537
+ error)),
4515
4538
  React__default["default"].createElement(TextFieldWrapper, { className: classNames__default["default"]({ 'TextFieldWrapper--error': hasError }),
4516
4539
  // We're handling click here to open the listbox when the wrapping element is clicked,
4517
4540
  // there's already keyboard handlers to open the listbox on the input element
@@ -4541,8 +4564,7 @@ var Combobox = React.forwardRef(function (_a, ref) {
4541
4564
  : portal.current ||
4542
4565
  // eslint-disable-next-line ssr-friendly/no-dom-globals-in-react-fc
4543
4566
  /* istanbul ignore next: default fallback value */ document.body)
4544
- : comboboxListbox),
4545
- hasError && (React__default["default"].createElement("div", { className: "Error", id: errorId }, error))));
4567
+ : comboboxListbox)));
4546
4568
  });
4547
4569
  Combobox.displayName = 'Combobox';
4548
4570
 
@@ -4621,25 +4643,25 @@ var Popover = React.forwardRef(function (_a, ref) {
4621
4643
  targetElement === null || targetElement === void 0 ? void 0 : targetElement.setAttribute('aria-haspopup', 'true');
4622
4644
  }
4623
4645
  }, [targetElement, id, show]);
4624
- var handleClickOutside = function (e) {
4646
+ var handleClosePopover = function () {
4647
+ isolator === null || isolator === void 0 ? void 0 : isolator.deactivate();
4648
+ if (show) {
4649
+ onClose();
4650
+ }
4651
+ };
4652
+ var handleClickOutside = React.useCallback(function (e) {
4625
4653
  if (e.target === targetElement) {
4626
4654
  return;
4627
4655
  }
4628
4656
  if (show) {
4629
4657
  handleClosePopover();
4630
4658
  }
4631
- };
4659
+ }, [show, targetElement, handleClosePopover]);
4632
4660
  var attachIsolator = function () {
4633
4661
  if (popoverRef === null || popoverRef === void 0 ? void 0 : popoverRef.current) {
4634
4662
  setIsolator(new AriaIsolate(popoverRef === null || popoverRef === void 0 ? void 0 : popoverRef.current));
4635
4663
  }
4636
4664
  };
4637
- var handleClosePopover = function () {
4638
- isolator === null || isolator === void 0 ? void 0 : isolator.deactivate();
4639
- if (show) {
4640
- onClose();
4641
- }
4642
- };
4643
4665
  useEscapeKey({
4644
4666
  callback: handleClosePopover,
4645
4667
  active: show
@@ -5054,10 +5076,10 @@ var ActionListSeparator = React.forwardRef(function (_a, ref) {
5054
5076
  ActionListSeparator.displayName = 'ActionListSeparator';
5055
5077
 
5056
5078
  var ActionListLinkItem = React.forwardRef(function (_a, ref) {
5057
- var key = _a.key, className = _a.className;
5079
+ var className = _a.className;
5058
5080
  // ActionListLinkItem should not be able to be "selected"
5059
5081
  // eslint-disable-next-line @typescript-eslint/no-unused-vars
5060
- _a.selected; var props = tslib.__rest(_a, ["key", "className", "selected"]);
5082
+ _a.selected; var props = tslib.__rest(_a, ["className", "selected"]);
5061
5083
  var contextRole = useActionListContext().role;
5062
5084
  var listItemRole = React.useMemo(function () {
5063
5085
  if (contextRole === 'menu') {
@@ -5069,7 +5091,7 @@ var ActionListLinkItem = React.forwardRef(function (_a, ref) {
5069
5091
  }
5070
5092
  return undefined;
5071
5093
  }, [contextRole]);
5072
- return (React__default["default"].createElement(ActionListItem, tslib.__assign({ key: key, ref: ref, className: classNames__default["default"]('Link ActionListLinkItem', className), as: "a", role: listItemRole, tabIndex: listItemRole === 'menuitem' ? -1 : undefined }, props)));
5094
+ return (React__default["default"].createElement(ActionListItem, tslib.__assign({ ref: ref, className: classNames__default["default"]('Link ActionListLinkItem', className), as: "a", role: listItemRole, tabIndex: listItemRole === 'menuitem' ? -1 : undefined }, props)));
5073
5095
  });
5074
5096
  ActionListLinkItem.displayName = 'ActionListLinkItem';
5075
5097
 
@@ -1,4 +1,5 @@
1
1
  import type { MutableRefObject } from 'react';
2
+ import type { ElementOrRef } from '../types';
2
3
  /**
3
4
  * When a component needs to track intersection via a ref, useIntersectionRef
4
5
  * will return a ref object containing the results from IntersectionObserver
@@ -9,4 +10,4 @@ import type { MutableRefObject } from 'react';
9
10
  * const intersectionRef = useIntersectionRef<HTMLElement>(elementRef)
10
11
  * return <span ref={elementRef}>...</span>
11
12
  */
12
- export default function useIntersectionRef<T extends HTMLElement>(element: T | MutableRefObject<T>, intersectionObserverOptions?: IntersectionObserverInit): MutableRefObject<IntersectionObserverEntry | null>;
13
+ export default function useIntersectionRef<T extends HTMLElement>(elementOrRef: ElementOrRef<T>, intersectionObserverOptions?: IntersectionObserverInit): MutableRefObject<IntersectionObserverEntry | null>;
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@deque/cauldron-react",
3
- "version": "6.20.2",
3
+ "version": "6.21.0",
4
4
  "license": "MPL-2.0",
5
5
  "description": "Fully accessible react components library for Deque Cauldron",
6
6
  "homepage": "https://cauldron.dequelabs.com/",
@@ -1,39 +0,0 @@
1
- 'use strict';
2
-
3
- var React = require('react');
4
-
5
- function _interopNamespace(e) {
6
- if (e && e.__esModule) return e;
7
- var n = Object.create(null);
8
- if (e) {
9
- Object.keys(e).forEach(function (k) {
10
- if (k !== 'default') {
11
- var d = Object.getOwnPropertyDescriptor(e, k);
12
- Object.defineProperty(n, k, d.get ? d : {
13
- enumerable: true,
14
- get: function () { return e[k]; }
15
- });
16
- }
17
- });
18
- }
19
- n["default"] = e;
20
- return Object.freeze(n);
21
- }
22
-
23
- var React__namespace = /*#__PURE__*/_interopNamespace(React);
24
-
25
- var _path;
26
- function _extends() { _extends = Object.assign ? Object.assign.bind() : 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); }
27
- const SvgFilterSolid = props => /*#__PURE__*/React__namespace.createElement("svg", _extends({
28
- overflow: "visible",
29
- preserveAspectRatio: "none",
30
- viewBox: "0 0 24 24",
31
- height: 24,
32
- width: 24
33
- }, props), _path || (_path = /*#__PURE__*/React__namespace.createElement("path", {
34
- d: "M18.65 4.67H5.34a.616.616 0 0 0-.62.41c-.12.24-.06.55.16.73L10 10.94V16c0 .18.07.35.2.47l2.67 2.67c.12.13.29.2.47.2.09 0 .18-.02.26-.05.26-.1.42-.35.4-.63v-7.72l5.13-5.13c.21-.18.28-.48.15-.73a.628.628 0 0 0-.63-.41z",
35
- vectorEffect: "non-scaling-stroke",
36
- fill: "currentColor"
37
- })));
38
-
39
- exports["default"] = SvgFilterSolid;