@deque/cauldron-react 6.20.2-canary.1e05925a → 6.20.2-canary.1fcbfce2

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,7 +1790,9 @@ 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: {
@@ -3965,12 +3976,13 @@ function useComboboxContext() {
3965
3976
  * const intersectionRef = useIntersectionRef<HTMLElement>(elementRef)
3966
3977
  * return <span ref={elementRef}>...</span>
3967
3978
  */
3968
- function useIntersectionRef(element, intersectionObserverOptions) {
3979
+ function useIntersectionRef(elementOrRef, intersectionObserverOptions) {
3969
3980
  if (intersectionObserverOptions === void 0) { intersectionObserverOptions = {
3970
3981
  root: null,
3971
3982
  threshold: 1.0
3972
3983
  }; }
3973
3984
  var intersectionRef = React.useRef(null);
3985
+ var element = resolveElement(elementOrRef);
3974
3986
  React.useEffect(function () {
3975
3987
  // istanbul ignore else
3976
3988
  if ('IntersectionObserver' in globalThis &&
@@ -3978,8 +3990,7 @@ function useIntersectionRef(element, intersectionObserverOptions) {
3978
3990
  if (typeof element === 'undefined' || element === null) {
3979
3991
  return;
3980
3992
  }
3981
- if (!(element instanceof HTMLElement) &&
3982
- !(element.current instanceof HTMLElement)) {
3993
+ if (!(element instanceof HTMLElement)) {
3983
3994
  console.warn('An element or ref was provided to useIntersectionRef that was not an HTMLElement.');
3984
3995
  return;
3985
3996
  }
@@ -3988,7 +3999,7 @@ function useIntersectionRef(element, intersectionObserverOptions) {
3988
3999
  intersectionRef.current = entry;
3989
4000
  };
3990
4001
  var observer_1 = new IntersectionObserver(handleIntersection, intersectionObserverOptions);
3991
- observer_1.observe(element instanceof HTMLElement ? element : element.current);
4002
+ observer_1.observe(element);
3992
4003
  return function () {
3993
4004
  observer_1.disconnect();
3994
4005
  };
@@ -4158,7 +4169,7 @@ var ComboboxNoResults = function (_a) {
4158
4169
  return (React__default["default"].createElement("div", { className: "ComboboxListbox__empty", role: "alert", "aria-live": "polite" }, children || 'No results found.'));
4159
4170
  };
4160
4171
  var Combobox = React.forwardRef(function (_a, ref) {
4161
- 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"]);
4162
4173
  var _h = tslib.__read(React.useState(new Map()), 2), matchingOptions = _h[0], setMatchingOptions = _h[1];
4163
4174
  var _j = tslib.__read(React.useState(function () {
4164
4175
  var value = defaultValue || propValue;
@@ -4502,9 +4513,15 @@ var Combobox = React.forwardRef(function (_a, ref) {
4502
4513
  comboboxOptions,
4503
4514
  noMatchingOptions));
4504
4515
  var errorId = "".concat(id, "-error");
4505
- var inputProps = tslib.__assign(tslib.__assign({}, props), { 'aria-describedby': error
4506
- ? addIdRef(ariaDescribedby, errorId)
4507
- : 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 });
4508
4525
  return (React__default["default"].createElement("div", { id: id, className: classNames__default["default"]('Combobox', { 'Combobox--multiselect': multiselect }, className), ref: comboboxRef },
4509
4526
  name &&
4510
4527
  formValues.map(function (formValue, index) { return (React__default["default"].createElement("input", { type: "hidden", key: index, name: name, value: formValue })); }),
@@ -4514,6 +4531,10 @@ var Combobox = React.forwardRef(function (_a, ref) {
4514
4531
  }), id: "".concat(id, "-label"), htmlFor: "".concat(id, "-input") },
4515
4532
  React__default["default"].createElement("span", null, label),
4516
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)),
4517
4538
  React__default["default"].createElement(TextFieldWrapper, { className: classNames__default["default"]({ 'TextFieldWrapper--error': hasError }),
4518
4539
  // We're handling click here to open the listbox when the wrapping element is clicked,
4519
4540
  // there's already keyboard handlers to open the listbox on the input element
@@ -4543,8 +4564,7 @@ var Combobox = React.forwardRef(function (_a, ref) {
4543
4564
  : portal.current ||
4544
4565
  // eslint-disable-next-line ssr-friendly/no-dom-globals-in-react-fc
4545
4566
  /* istanbul ignore next: default fallback value */ document.body)
4546
- : comboboxListbox),
4547
- hasError && (React__default["default"].createElement("div", { className: "Error", id: errorId }, error))));
4567
+ : comboboxListbox)));
4548
4568
  });
4549
4569
  Combobox.displayName = 'Combobox';
4550
4570
 
@@ -4623,25 +4643,25 @@ var Popover = React.forwardRef(function (_a, ref) {
4623
4643
  targetElement === null || targetElement === void 0 ? void 0 : targetElement.setAttribute('aria-haspopup', 'true');
4624
4644
  }
4625
4645
  }, [targetElement, id, show]);
4626
- 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) {
4627
4653
  if (e.target === targetElement) {
4628
4654
  return;
4629
4655
  }
4630
4656
  if (show) {
4631
4657
  handleClosePopover();
4632
4658
  }
4633
- };
4659
+ }, [show, targetElement, handleClosePopover]);
4634
4660
  var attachIsolator = function () {
4635
4661
  if (popoverRef === null || popoverRef === void 0 ? void 0 : popoverRef.current) {
4636
4662
  setIsolator(new AriaIsolate(popoverRef === null || popoverRef === void 0 ? void 0 : popoverRef.current));
4637
4663
  }
4638
4664
  };
4639
- var handleClosePopover = function () {
4640
- isolator === null || isolator === void 0 ? void 0 : isolator.deactivate();
4641
- if (show) {
4642
- onClose();
4643
- }
4644
- };
4645
4665
  useEscapeKey({
4646
4666
  callback: handleClosePopover,
4647
4667
  active: show
@@ -5056,10 +5076,10 @@ var ActionListSeparator = React.forwardRef(function (_a, ref) {
5056
5076
  ActionListSeparator.displayName = 'ActionListSeparator';
5057
5077
 
5058
5078
  var ActionListLinkItem = React.forwardRef(function (_a, ref) {
5059
- var key = _a.key, className = _a.className;
5079
+ var className = _a.className;
5060
5080
  // ActionListLinkItem should not be able to be "selected"
5061
5081
  // eslint-disable-next-line @typescript-eslint/no-unused-vars
5062
- _a.selected; var props = tslib.__rest(_a, ["key", "className", "selected"]);
5082
+ _a.selected; var props = tslib.__rest(_a, ["className", "selected"]);
5063
5083
  var contextRole = useActionListContext().role;
5064
5084
  var listItemRole = React.useMemo(function () {
5065
5085
  if (contextRole === 'menu') {
@@ -5071,7 +5091,7 @@ var ActionListLinkItem = React.forwardRef(function (_a, ref) {
5071
5091
  }
5072
5092
  return undefined;
5073
5093
  }, [contextRole]);
5074
- 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)));
5075
5095
  });
5076
5096
  ActionListLinkItem.displayName = 'ActionListLinkItem';
5077
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-canary.1e05925a",
3
+ "version": "6.20.2-canary.1fcbfce2",
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;