@deque/cauldron-react 3.0.1-canary.b96841e1 → 3.0.1-canary.cfc22419

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.
@@ -8,19 +8,17 @@ var React__default = _interopDefault(React);
8
8
  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); }
9
9
 
10
10
  var _ref = /*#__PURE__*/React.createElement("path", {
11
- d: "M20 11H7.83l5.59-5.59L12 4l-8 8 8 8 1.41-1.41L7.83 13H20v-2z",
12
- vectorEffect: "non-scaling-stroke",
13
- fill: "currentColor"
11
+ d: "M20 12l-1.41-1.41L13 16.17V4h-2v12.17l-5.58-5.59L4 12l8 8 8-8z",
12
+ fill: "currentColor",
13
+ vectorEffect: "non-scaling-stroke"
14
14
  });
15
15
 
16
16
  function SvgArrow(props) {
17
17
  return /*#__PURE__*/React.createElement("svg", _extends({
18
18
  overflow: "visible",
19
19
  preserveAspectRatio: "none",
20
- viewBox: "0 0 24 24",
21
- width: 28,
22
- height: 28,
23
- transform: "rotate(180)"
20
+ width: 24,
21
+ height: 24
24
22
  }, props), _ref);
25
23
  }
26
24
 
@@ -8,19 +8,17 @@ var React__default = _interopDefault(React);
8
8
  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); }
9
9
 
10
10
  var _ref = /*#__PURE__*/React.createElement("path", {
11
- d: "M17.33 12.67c-.01.37-.3.66-.67.67h-5.22l2 2c.25.26.25.68 0 .94l-.95.95c-.26.25-.68.25-.94 0L6.8 12.47a.683.683 0 010-.94l4.72-4.72c.26-.25.68-.25.94 0l.95.95c.26.25.27.66.02.92l-.02.02-2 2h5.23c.37.01.66.3.67.67v1.33l.02-.03zM18.92 8A8.016 8.016 0 0016 5.08 7.798 7.798 0 0012 4c-1.41-.01-2.79.37-4 1.08-1.21.7-2.22 1.71-2.92 2.92A7.798 7.798 0 004 12c-.01 1.41.36 2.79 1.07 4 .7 1.21 1.71 2.22 2.93 2.92 1.21.71 2.59 1.09 4 1.08 1.41.01 2.79-.36 4-1.07 1.21-.7 2.22-1.71 2.92-2.93A7.798 7.798 0 0020 12c.01-1.41-.37-2.79-1.08-4z",
12
- vectorEffect: "non-scaling-stroke",
13
- fill: "currentColor"
11
+ d: "M17.37 12c0 .18-.06.35-.19.47l-4.71 4.73c-.26.25-.68.25-.94 0l-4.71-4.72a.683.683 0 010-.94l.95-.95c.25-.26.66-.27.92-.02l.02.02 2 2V7.34c.01-.37.3-.66.67-.67h1.33c.37.01.66.3.67.67v5.23l2-2c.26-.25.68-.25.94 0l.95.95c.13.12.19.29.19.47l-.09.01zm1.55-4A8.016 8.016 0 0016 5.08 7.798 7.798 0 0012 4c-1.41-.01-2.79.37-4 1.08-1.21.7-2.22 1.71-2.92 2.92A7.798 7.798 0 004 12c-.01 1.41.36 2.79 1.07 4 .7 1.21 1.71 2.22 2.93 2.92 1.21.71 2.59 1.09 4 1.08 1.41.01 2.79-.36 4-1.07 1.21-.7 2.22-1.71 2.92-2.93A7.798 7.798 0 0020 12c.01-1.41-.37-2.79-1.08-4z",
12
+ fill: "currentColor",
13
+ vectorEffect: "non-scaling-stroke"
14
14
  });
15
15
 
16
16
  function SvgArrowCircle(props) {
17
17
  return /*#__PURE__*/React.createElement("svg", _extends({
18
18
  overflow: "visible",
19
19
  preserveAspectRatio: "none",
20
- viewBox: "0 0 24 24",
21
- width: 17,
22
- height: 17,
23
- transform: "rotate(180)"
20
+ width: 24,
21
+ height: 24
24
22
  }, props), _ref);
25
23
  }
26
24
 
@@ -18,8 +18,8 @@ function SvgArrowsAlt(props) {
18
18
  overflow: "visible",
19
19
  preserveAspectRatio: "none",
20
20
  viewBox: "0 0 512 512",
21
- width: 28,
22
- height: 28
21
+ width: 24,
22
+ height: 24
23
23
  }, props), _ref);
24
24
  }
25
25
 
package/lib/cauldron.css CHANGED
@@ -48,19 +48,19 @@ a.Button--primary {
48
48
  display: block;
49
49
  }
50
50
 
51
- /* Icon--right is the default orientation */
51
+ /* Icon--down is the default orientation */
52
52
 
53
- .Icon__right {
54
- }
55
-
56
- .Icon__left {
57
- transform: scaleX(-1);
53
+ .Icon__down {
58
54
  }
59
55
 
60
56
  .Icon__up {
61
- transform: rotate(-90deg);
57
+ transform: scaleY(-1);
62
58
  }
63
59
 
64
- .Icon__down {
60
+ .Icon__left {
65
61
  transform: rotate(90deg);
66
62
  }
63
+
64
+ .Icon__right {
65
+ transform: rotate(-90deg);
66
+ }
@@ -8,18 +8,17 @@ var React__default = _interopDefault(React);
8
8
  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); }
9
9
 
10
10
  var _ref = /*#__PURE__*/React.createElement("path", {
11
- d: "M15.02 12a.35.35 0 00-.1-.24l-4.83-4.85a.332.332 0 00-.47-.01l-.01.01-.52.52c-.14.13-.14.33-.02.47l.01.01 4.1 4.09-4.1 4.09c-.13.13-.14.33-.01.47l.01.01.52.52c.13.13.33.14.47.01l.01-.01 4.85-4.85c.06-.07.09-.15.09-.24z",
12
- vectorEffect: "non-scaling-stroke",
13
- fill: "currentColor"
11
+ d: "M17.2 9.84a.35.35 0 00-.1-.24l-.52-.52a.332.332 0 00-.47-.01l-.01.01-4.1 4.1-4.09-4.1a.333.333 0 00-.47-.02l-.01.01-.52.53c-.13.13-.14.33-.01.47l.01.01 4.85 4.85c.13.13.33.14.47.01l.01-.01 4.85-4.85c.06-.06.1-.15.1-.24h.01z",
12
+ fill: "currentColor",
13
+ vectorEffect: "non-scaling-stroke"
14
14
  });
15
15
 
16
16
  function SvgChevron(props) {
17
17
  return /*#__PURE__*/React.createElement("svg", _extends({
18
18
  overflow: "visible",
19
19
  preserveAspectRatio: "none",
20
- viewBox: "0 0 24 24",
21
- width: 25,
22
- height: 25
20
+ width: 24,
21
+ height: 24
23
22
  }, props), _ref);
24
23
  }
25
24
 
@@ -8,18 +8,17 @@ var React__default = _interopDefault(React);
8
8
  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); }
9
9
 
10
10
  var _ref = /*#__PURE__*/React.createElement("path", {
11
- d: "M13.02 12a.35.35 0 00-.1-.24L8.09 6.91a.332.332 0 00-.47-.01l-.01.01-.52.52c-.14.13-.14.33-.02.47l.01.01 4.1 4.09-4.08 4.09c-.13.13-.14.33-.01.47l.01.01.52.52c.13.13.33.14.47.01l.01-.01 4.85-4.85c.05-.07.07-.15.07-.24zm4 0a.35.35 0 00-.1-.24l-4.83-4.85a.332.332 0 00-.47-.01l-.01.01-.52.52c-.13.13-.14.33-.01.47l.01.01 4.1 4.09-4.09 4.09c-.13.13-.14.33-.01.47l.01.01.52.52c.13.13.33.14.47.01l.01-.01 4.85-4.85c.05-.07.07-.15.07-.24z",
12
- vectorEffect: "non-scaling-stroke",
13
- fill: "currentColor"
11
+ d: "M17.2 11.84a.35.35 0 00-.1-.24l-.52-.52a.332.332 0 00-.47-.01l-.01.01-4.1 4.1-4.09-4.1a.332.332 0 00-.47-.01l-.01.01-.52.52c-.13.13-.14.33-.01.47l.01.01 4.85 4.85c.13.13.33.14.47.01l.01-.01 4.85-4.85c.06-.06.1-.15.1-.24h.01zm0-4a.35.35 0 00-.1-.24l-.52-.52a.332.332 0 00-.47-.01l-.01.01-4.1 4.1-4.09-4.09a.333.333 0 00-.47-.02l-.01.01-.52.53a.32.32 0 00-.02.46l.01.01 4.85 4.85c.13.13.33.14.47.01l.01-.01 4.85-4.85c.06-.06.1-.15.1-.24h.02z",
12
+ fill: "currentColor",
13
+ vectorEffect: "non-scaling-stroke"
14
14
  });
15
15
 
16
16
  function SvgChevronDouble(props) {
17
17
  return /*#__PURE__*/React.createElement("svg", _extends({
18
18
  overflow: "visible",
19
19
  preserveAspectRatio: "none",
20
- viewBox: "0 0 24 24",
21
- width: 25,
22
- height: 25
20
+ width: 24,
21
+ height: 24
23
22
  }, props), _ref);
24
23
  }
25
24
 
@@ -13,7 +13,7 @@ export declare const Address: {
13
13
  };
14
14
  declare type AddressLineProps = React.HTMLAttributes<HTMLElement>;
15
15
  export declare const AddressLine: {
16
- ({ children, className, ...other }: AddressLineProps): false | JSX.Element;
16
+ ({ children, className, ...other }: AddressLineProps): JSX.Element | null;
17
17
  displayName: string;
18
18
  propTypes: {
19
19
  children: PropTypes.Requireable<PropTypes.ReactNodeLike>;
@@ -26,7 +26,7 @@ interface AddressCityStateZipProps extends React.HTMLAttributes<HTMLElement> {
26
26
  zip: React.ReactNode;
27
27
  }
28
28
  export declare const AddressCityStateZip: {
29
- ({ city, state, zip, className, ...other }: AddressCityStateZipProps): false | JSX.Element;
29
+ ({ city, state, zip, className, ...other }: AddressCityStateZipProps): JSX.Element | null;
30
30
  displayName: string;
31
31
  propTypes: {
32
32
  city: PropTypes.Requireable<PropTypes.ReactNodeLike>;
@@ -1,7 +1,7 @@
1
- import React from 'react';
1
+ import * as Polymorphic from '../../utils/polymorphic-type';
2
2
  import { IconType } from '../Icon';
3
3
  import { TooltipProps } from '../Tooltip';
4
- export interface IconButtonProps extends React.ButtonHTMLAttributes<HTMLButtonElement> {
4
+ export interface IconButtonOwnProps {
5
5
  icon: IconType;
6
6
  label: string;
7
7
  tooltipPlacement?: TooltipProps['placement'];
@@ -9,5 +9,12 @@ export interface IconButtonProps extends React.ButtonHTMLAttributes<HTMLButtonEl
9
9
  tooltipPortal?: TooltipProps['portal'];
10
10
  variant?: 'primary' | 'secondary' | 'error';
11
11
  }
12
- declare const IconButton: React.ForwardRefExoticComponent<IconButtonProps & React.RefAttributes<HTMLButtonElement>>;
12
+ declare type PolymorphicIconButton = Polymorphic.ForwardRefComponent<'button', IconButtonOwnProps>;
13
+ /**
14
+ * Unfortunately, eslint does not recognize that this Polymorphic component has a displayName set
15
+ *
16
+ * We might be able to remove this if we upgrade eslint and associated plugins
17
+ * See: https://github.com/dequelabs/cauldron/issues/451
18
+ */
19
+ declare const IconButton: PolymorphicIconButton;
13
20
  export default IconButton;
@@ -0,0 +1,17 @@
1
+ import React from 'react';
2
+ import PropTypes from 'prop-types';
3
+ import IconButton from '../IconButton';
4
+ declare const IssuePanel: {
5
+ ({ className, title, actions, children }: {
6
+ className?: string | undefined;
7
+ title?: string | undefined;
8
+ actions?: import("../../utils/polymorphic-type").ForwardRefComponent<"button", import("../IconButton").IconButtonOwnProps>[] | undefined;
9
+ children: React.ReactNode;
10
+ }): JSX.Element;
11
+ displayName: string;
12
+ propTypes: {
13
+ children: PropTypes.Validator<string | number | boolean | {} | PropTypes.ReactElementLike | PropTypes.ReactNodeArray>;
14
+ className: PropTypes.Requireable<string>;
15
+ };
16
+ };
17
+ export default IssuePanel;
@@ -1,12 +1,11 @@
1
1
  import React from 'react';
2
2
  import PropTypes from 'prop-types';
3
3
  export interface LoaderProps extends React.HTMLAttributes<HTMLDivElement> {
4
- label: string;
4
+ label?: string;
5
5
  }
6
- declare function Loader({ label, className, ...other }: LoaderProps): JSX.Element;
6
+ declare function Loader({ className, label, ...other }: LoaderProps): JSX.Element;
7
7
  declare namespace Loader {
8
8
  var propTypes: {
9
- label: PropTypes.Requireable<string>;
10
9
  className: PropTypes.Requireable<string>;
11
10
  };
12
11
  var displayName: string;
@@ -1,16 +1,20 @@
1
- import React from 'react';
1
+ import { HTMLAttributes, ReactElement, ReactNode } from 'react';
2
2
  import PropTypes from 'prop-types';
3
- import IconButton from '../IconButton';
3
+ interface PanelProps extends HTMLAttributes<HTMLElement> {
4
+ children: ReactNode;
5
+ heading: ReactElement<any> | {
6
+ id?: string;
7
+ text: ReactElement<any>;
8
+ level: number | undefined;
9
+ };
10
+ className?: string;
11
+ }
4
12
  declare const Panel: {
5
- ({ className, title, actions, children }: {
6
- className?: string | undefined;
7
- title?: string | undefined;
8
- actions?: React.ForwardRefExoticComponent<import("../IconButton").IconButtonProps & React.RefAttributes<HTMLButtonElement>>[] | undefined;
9
- children: React.ReactNode;
10
- }): JSX.Element;
13
+ ({ children, className, heading, ...other }: PanelProps): JSX.Element;
11
14
  displayName: string;
12
15
  propTypes: {
13
16
  children: PropTypes.Validator<string | number | boolean | {} | PropTypes.ReactElementLike | PropTypes.ReactNodeArray>;
17
+ heading: PropTypes.Validator<string | number | boolean | {} | PropTypes.ReactElementLike | PropTypes.ReactNodeArray>;
14
18
  className: PropTypes.Requireable<string>;
15
19
  };
16
20
  };
@@ -5,6 +5,7 @@ export interface SideBarProps extends React.HTMLAttributes<HTMLUListElement> {
5
5
  onDismiss: () => void;
6
6
  className?: string;
7
7
  show: boolean;
8
+ navProps: React.HTMLAttributes<HTMLElement>;
8
9
  }
9
10
  interface SideBarState {
10
11
  wide: boolean;
@@ -9,6 +9,7 @@ interface StepWithChildren extends BaseStepProps {
9
9
  }
10
10
  interface StepWithTooltip extends BaseStepProps {
11
11
  tooltip: React.ReactNode;
12
+ tooltipText: string;
12
13
  }
13
14
  declare type StepProps = StepWithChildren | StepWithTooltip;
14
15
  export declare const Step: {
@@ -17,6 +18,7 @@ export declare const Step: {
17
18
  propTypes: {
18
19
  children: PropTypes.Requireable<PropTypes.ReactNodeLike>;
19
20
  tooltip: PropTypes.Requireable<PropTypes.ReactNodeLike>;
21
+ tooltipText: PropTypes.Requireable<string>;
20
22
  className: PropTypes.Requireable<string>;
21
23
  };
22
24
  };
@@ -1,6 +1,6 @@
1
- import React from 'react';
1
+ import React, { TdHTMLAttributes } from 'react';
2
2
  import PropTypes from 'prop-types';
3
- interface TableCellProps {
3
+ interface TableCellProps extends TdHTMLAttributes<HTMLTableCellElement> {
4
4
  children: React.ReactNode;
5
5
  className?: string;
6
6
  }
@@ -1,6 +1,6 @@
1
- import React from 'react';
1
+ import React, { ThHTMLAttributes } from 'react';
2
2
  import PropTypes from 'prop-types';
3
- interface TableHeaderProps {
3
+ interface TableHeaderProps extends ThHTMLAttributes<HTMLTableCellElement> {
4
4
  children: React.ReactNode;
5
5
  className?: string;
6
6
  }
@@ -6,9 +6,13 @@ declare type TabsProps = {
6
6
  initialActiveIndex?: number;
7
7
  thin?: boolean;
8
8
  className?: string;
9
+ onChange?: ({ activeTabIndex, target }: {
10
+ activeTabIndex: number;
11
+ target: HTMLLIElement | null;
12
+ }) => void;
9
13
  } & Cauldron.LabelProps;
10
14
  declare const Tabs: {
11
- ({ children, thin, initialActiveIndex, className, ...labelProp }: TabsProps): JSX.Element;
15
+ ({ children, thin, initialActiveIndex, className, onChange, ...labelProp }: TabsProps): JSX.Element;
12
16
  displayName: string;
13
17
  propTypes: {
14
18
  children: PropTypes.Validator<string | number | boolean | {} | PropTypes.ReactElementLike | PropTypes.ReactNodeArray>;
@@ -17,9 +17,8 @@ function SvgFilter(props) {
17
17
  return /*#__PURE__*/React.createElement("svg", _extends({
18
18
  overflow: "visible",
19
19
  preserveAspectRatio: "none",
20
- viewBox: "0 0 24 24",
21
- width: 32,
22
- height: 32
20
+ width: 24,
21
+ height: 24
23
22
  }, props), _ref);
24
23
  }
25
24
 
package/lib/index.d.ts CHANGED
@@ -42,6 +42,7 @@ export { default as Tabs, Tab, TabPanel } from './components/Tabs';
42
42
  export { DescriptionList, DescriptionListItem, DescriptionTerm, DescriptionDetails } from './components/DescriptionList';
43
43
  export { default as Stepper, Step } from './components/Stepper';
44
44
  export { default as Panel } from './components/Panel';
45
+ export { default as IssuePanel } from './components/IssuePanel';
45
46
  export { default as ProgressBar } from './components/ProgressBar';
46
47
  export { Address, AddressLine, AddressCityStateZip } from './components/Address';
47
48
  /**
package/lib/index.js CHANGED
@@ -193,9 +193,9 @@ var iconTypes = [
193
193
  function __variableDynamicImportRuntime0__(path) {
194
194
  switch (path) {
195
195
  case './icons/add-user.svg': return Promise.resolve().then(function () { return require('./add-user-075c63a1.js'); });
196
- case './icons/arrow-circle.svg': return Promise.resolve().then(function () { return require('./arrow-circle-7b95a2fd.js'); });
197
- case './icons/arrow.svg': return Promise.resolve().then(function () { return require('./arrow-97011665.js'); });
198
- case './icons/arrows-alt.svg': return Promise.resolve().then(function () { return require('./arrows-alt-b91e24b7.js'); });
196
+ case './icons/arrow-circle.svg': return Promise.resolve().then(function () { return require('./arrow-circle-858d89b5.js'); });
197
+ case './icons/arrow.svg': return Promise.resolve().then(function () { return require('./arrow-36f5cb02.js'); });
198
+ case './icons/arrows-alt.svg': return Promise.resolve().then(function () { return require('./arrows-alt-57b6a0ac.js'); });
199
199
  case './icons/bolt.svg': return Promise.resolve().then(function () { return require('./bolt-e44406fd.js'); });
200
200
  case './icons/caution.svg': return Promise.resolve().then(function () { return require('./caution-e048e1bf.js'); });
201
201
  case './icons/check-circle.svg': return Promise.resolve().then(function () { return require('./check-circle-8b5069b4.js'); });
@@ -204,8 +204,8 @@ function __variableDynamicImportRuntime0__(path) {
204
204
  case './icons/check.svg': return Promise.resolve().then(function () { return require('./check-c2912d5e.js'); });
205
205
  case './icons/checkbox-checked.svg': return Promise.resolve().then(function () { return require('./checkbox-checked-a262e99c.js'); });
206
206
  case './icons/checkbox-unchecked.svg': return Promise.resolve().then(function () { return require('./checkbox-unchecked-2ad5b4ae.js'); });
207
- case './icons/chevron-double.svg': return Promise.resolve().then(function () { return require('./chevron-double-65975fca.js'); });
208
- case './icons/chevron.svg': return Promise.resolve().then(function () { return require('./chevron-064d5f96.js'); });
207
+ case './icons/chevron-double.svg': return Promise.resolve().then(function () { return require('./chevron-double-42e4b50e.js'); });
208
+ case './icons/chevron.svg': return Promise.resolve().then(function () { return require('./chevron-cbfd92ec.js'); });
209
209
  case './icons/close.svg': return Promise.resolve().then(function () { return require('./close-31ce4dcf.js'); });
210
210
  case './icons/code.svg': return Promise.resolve().then(function () { return require('./code-e3365341.js'); });
211
211
  case './icons/copy.svg': return Promise.resolve().then(function () { return require('./copy-d2ade017.js'); });
@@ -213,7 +213,7 @@ function __variableDynamicImportRuntime0__(path) {
213
213
  case './icons/exchange.svg': return Promise.resolve().then(function () { return require('./exchange-1d290efb.js'); });
214
214
  case './icons/external-link.svg': return Promise.resolve().then(function () { return require('./external-link-ef122c95.js'); });
215
215
  case './icons/eye.svg': return Promise.resolve().then(function () { return require('./eye-a0d28243.js'); });
216
- case './icons/filter.svg': return Promise.resolve().then(function () { return require('./filter-d2057f4c.js'); });
216
+ case './icons/filter.svg': return Promise.resolve().then(function () { return require('./filter-b206c760.js'); });
217
217
  case './icons/flag.svg': return Promise.resolve().then(function () { return require('./flag-fb248a99.js'); });
218
218
  case './icons/gears.svg': return Promise.resolve().then(function () { return require('./gears-b9ee1585.js'); });
219
219
  case './icons/grid.svg': return Promise.resolve().then(function () { return require('./grid-ee446118.js'); });
@@ -246,7 +246,7 @@ function __variableDynamicImportRuntime0__(path) {
246
246
  case './icons/tag.svg': return Promise.resolve().then(function () { return require('./tag-56c32f4f.js'); });
247
247
  case './icons/target.svg': return Promise.resolve().then(function () { return require('./target-50f179e0.js'); });
248
248
  case './icons/trash.svg': return Promise.resolve().then(function () { return require('./trash-896a3291.js'); });
249
- case './icons/triangle.svg': return Promise.resolve().then(function () { return require('./triangle-51d7723a.js'); });
249
+ case './icons/triangle.svg': return Promise.resolve().then(function () { return require('./triangle-42e0eece.js'); });
250
250
  case './icons/upload.svg': return Promise.resolve().then(function () { return require('./upload-d71f0e44.js'); });
251
251
  default: return Promise.reject(new Error("Unknown variable dynamic import: " + path));
252
252
  }
@@ -1150,11 +1150,11 @@ var SideBar = /** @class */ (function (_super) {
1150
1150
  var _a = this.state, animateClass = _a.animateClass, wide = _a.wide;
1151
1151
  // disabling no-unused-vars to prevent onDismiss from being passed through to dom element
1152
1152
  // eslint-disable-next-line @typescript-eslint/no-unused-vars
1153
- var _b = this.props, children = _b.children, className = _b.className, show = _b.show, onDismiss = _b.onDismiss, other = tslib.__rest(_b, ["children", "className", "show", "onDismiss"]);
1153
+ var _b = this.props, children = _b.children, className = _b.className, show = _b.show, onDismiss = _b.onDismiss, navProps = _b.navProps, other = tslib.__rest(_b, ["children", "className", "show", "onDismiss", "navProps"]);
1154
1154
  /* eslint-disable jsx-a11y/no-noninteractive-element-interactions */
1155
1155
  return (React__default.createElement(React.Fragment, null,
1156
1156
  React__default.createElement(ClickOutsideListener, { onClickOutside: this.handleClickOutside },
1157
- React__default.createElement("nav", null,
1157
+ React__default.createElement("nav", tslib.__assign({}, navProps),
1158
1158
  React__default.createElement("ul", tslib.__assign({ className: classNames('SideBar', className, animateClass) }, other, { ref: this.navList, onKeyDown: this.onKeyDown }), children))),
1159
1159
  React__default.createElement(Scrim, { show: !wide && show })));
1160
1160
  /* eslint-enable jsx-a11y/no-noninteractive-element-interactions */
@@ -1617,21 +1617,52 @@ var TooltipContent = function (_a) {
1617
1617
  return (React__default.createElement("div", tslib.__assign({ className: classNames('TooltipContent', className) }, other)));
1618
1618
  };
1619
1619
 
1620
+ /**
1621
+ * Unfortunately, eslint does not recognize that this Polymorphic component has a displayName set
1622
+ *
1623
+ * We might be able to remove this if we upgrade eslint and associated plugins
1624
+ * See: https://github.com/dequelabs/cauldron/issues/451
1625
+ */
1626
+ // eslint-disable-next-line react/display-name
1620
1627
  var IconButton = React.forwardRef(function (_a, ref) {
1621
- var icon = _a.icon, label = _a.label, _b = _a.tooltipPlacement, tooltipPlacement = _b === void 0 ? 'auto' : _b, tooltipVariant = _a.tooltipVariant, tooltipPortal = _a.tooltipPortal, className = _a.className, _c = _a.variant, variant = _c === void 0 ? 'secondary' : _c, disabled = _a.disabled, other = tslib.__rest(_a, ["icon", "label", "tooltipPlacement", "tooltipVariant", "tooltipPortal", "className", "variant", "disabled"]);
1622
- var buttonRef = React.useRef();
1623
- React.useImperativeHandle(ref, function () { return buttonRef.current; });
1628
+ var _b = _a.as, Component = _b === void 0 ? 'button' : _b, icon = _a.icon, label = _a.label, _c = _a.tooltipPlacement, tooltipPlacement = _c === void 0 ? 'auto' : _c, tooltipVariant = _a.tooltipVariant, tooltipPortal = _a.tooltipPortal, className = _a.className, _d = _a.variant, variant = _d === void 0 ? 'secondary' : _d, disabled = _a.disabled, _e = _a.tabIndex, tabIndex = _e === void 0 ? 0 : _e, other = tslib.__rest(_a, ["as", "icon", "label", "tooltipPlacement", "tooltipVariant", "tooltipPortal", "className", "variant", "disabled", "tabIndex"]);
1629
+ var internalRef = React.useRef();
1630
+ React.useImperativeHandle(ref, function () { return internalRef.current; });
1631
+ // Configure additional properties based on the type of the Component
1632
+ // for accessibility
1633
+ var accessibilityProps = {};
1634
+ if (Component === 'button') {
1635
+ accessibilityProps.type = 'button';
1636
+ }
1637
+ else {
1638
+ // We don't need to set an anchor's role, since it would be redundant
1639
+ if (Component !== 'a') {
1640
+ accessibilityProps.role = other.href || other.to ? 'link' : 'button';
1641
+ }
1642
+ if (disabled) {
1643
+ accessibilityProps['aria-disabled'] = disabled;
1644
+ }
1645
+ }
1646
+ React.useEffect(function () {
1647
+ var _a;
1648
+ if (!disabled) {
1649
+ return;
1650
+ }
1651
+ (_a = internalRef.current) === null || _a === void 0 ? void 0 : _a.setAttribute('aria-label', label);
1652
+ }, [disabled]);
1624
1653
  return (React__default.createElement(React__default.Fragment, null,
1625
- React__default.createElement("button", tslib.__assign({ type: 'button', className: classNames(className, {
1654
+ React__default.createElement(Component, tslib.__assign({ className: classNames(className, {
1626
1655
  IconButton: true,
1627
1656
  'IconButton--primary': variant === 'primary',
1628
1657
  'IconButton--secondary': variant === 'secondary',
1629
1658
  'IconButton--error': variant === 'error'
1630
- }), ref: buttonRef, disabled: disabled }, other),
1659
+ }), ref: internalRef, disabled: disabled, tabIndex: disabled ? -1 : tabIndex }, accessibilityProps, other),
1631
1660
  React__default.createElement(Icon, { type: icon })),
1632
- !disabled && (React__default.createElement(Tooltip, { target: buttonRef, placement: tooltipPlacement, variant: tooltipVariant, portal: tooltipPortal, association: "aria-labelledby", hideElementOnHidden: true }, label))));
1661
+ !disabled && (React__default.createElement(Tooltip, { target: internalRef, placement: tooltipPlacement, variant: tooltipVariant, portal: tooltipPortal, association: "aria-labelledby", hideElementOnHidden: true }, label))));
1633
1662
  });
1634
1663
  IconButton.propTypes = {
1664
+ // @ts-expect-error
1665
+ as: PropTypes.elementType,
1635
1666
  // @ts-expect-error
1636
1667
  icon: PropTypes.string.isRequired,
1637
1668
  label: PropTypes.string.isRequired,
@@ -2162,22 +2193,18 @@ Link.propTypes = {
2162
2193
  Link.displayName = 'Link';
2163
2194
 
2164
2195
  function Loader(_a) {
2165
- var label = _a.label, className = _a.className, other = tslib.__rest(_a, ["label", "className"]);
2166
- var props = tslib.__assign(tslib.__assign({}, other), { className: classNames('Loader', className), 'aria-hidden': !label });
2167
- if (label) {
2168
- props.role = 'progressbar';
2169
- props['aria-valuetext'] = label;
2170
- props['aria-busy'] = true;
2171
- props['aria-valuemin'] = 0;
2172
- props['aria-valuemax'] = 100;
2173
- // According to the ARIA 1.2 spec (https://www.w3.org/TR/wai-aria-1.2/#progressbar),
2174
- // the aria-valuenow attribute SHOULD be omitted because the "value" of our progress
2175
- // is "indeterminate".
2196
+ var className = _a.className, label = _a.label, other = tslib.__rest(_a, ["className", "label"]);
2197
+ var props = tslib.__assign(tslib.__assign({}, other), { className: classNames('Loader', className) });
2198
+ if (label === null || label === void 0 ? void 0 : label.length) {
2199
+ props['role'] = 'alert';
2200
+ props.children = React__default.createElement(Offscreen, null, label);
2201
+ }
2202
+ else {
2203
+ props['aria-hidden'] = true;
2176
2204
  }
2177
2205
  return React__default.createElement("div", tslib.__assign({}, props));
2178
2206
  }
2179
2207
  Loader.propTypes = {
2180
- label: PropTypes.string,
2181
2208
  className: PropTypes.string
2182
2209
  };
2183
2210
  Loader.displayName = 'Loader';
@@ -2249,7 +2276,7 @@ var Select = React__default.forwardRef(function (_a, ref) {
2249
2276
  })
2250
2277
  : children),
2251
2278
  React__default.createElement("div", { className: "arrow-down" })),
2252
- React__default.createElement("div", { className: "Error", id: errorId }, error)));
2279
+ error && (React__default.createElement("div", { id: errorId, className: "Error" }, error))));
2253
2280
  /* eslint-disable jsx-a11y/no-onchange */
2254
2281
  });
2255
2282
  Select.displayName = 'Select';
@@ -2368,7 +2395,7 @@ var Checkbox = React.forwardRef(function (_a, ref) {
2368
2395
  (_b = checkRef.current) === null || _b === void 0 ? void 0 : _b.click();
2369
2396
  }
2370
2397
  } })),
2371
- React__default.createElement("div", { id: errorId, className: "Error" }, error)));
2398
+ error && (React__default.createElement("div", { id: errorId, className: "Error" }, error))));
2372
2399
  });
2373
2400
  Checkbox.displayName = 'Checkbox';
2374
2401
 
@@ -2475,7 +2502,7 @@ var TextField = /** @class */ (function (_super) {
2475
2502
  _this.input = input;
2476
2503
  setRef(fieldRef, input);
2477
2504
  } }, other, inputProps)),
2478
- React__default.createElement("div", { className: "Error", id: this.errorId }, error)));
2505
+ error && (React__default.createElement("div", { className: "Error", id: this.errorId }, error))));
2479
2506
  };
2480
2507
  TextField.prototype.onChange = function (e) {
2481
2508
  var _a, _b;
@@ -8023,9 +8050,29 @@ Tab.propTypes = {
8023
8050
  children: PropTypes.node
8024
8051
  };
8025
8052
 
8053
+ /**
8054
+ * Hook to be used similarly to the React.Component#componentDidMount.
8055
+ * Executes the provided `effect` when `dependencies` change but does not
8056
+ * execute the effect initially (on mount) - only on update.
8057
+ *
8058
+ * @param effect {Function} function to be executed when dependencies update
8059
+ * @param dependencies {Any} any valid dependency argument to React.useEffect
8060
+ */
8061
+ var useDidUpdate = function (effect, dependencies) {
8062
+ var mounted = React__default.useRef(false);
8063
+ React__default.useEffect(function () {
8064
+ if (!mounted.current) {
8065
+ mounted.current = true;
8066
+ return;
8067
+ }
8068
+ effect();
8069
+ }, dependencies);
8070
+ };
8071
+
8026
8072
  var Tabs = function (_a) {
8027
- var children = _a.children, thin = _a.thin, _b = _a.initialActiveIndex, initialActiveIndex = _b === void 0 ? 0 : _b, className = _a.className, labelProp = tslib.__rest(_a, ["children", "thin", "initialActiveIndex", "className"]);
8073
+ var children = _a.children, thin = _a.thin, _b = _a.initialActiveIndex, initialActiveIndex = _b === void 0 ? 0 : _b, className = _a.className, onChange = _a.onChange, labelProp = tslib.__rest(_a, ["children", "thin", "initialActiveIndex", "className", "onChange"]);
8028
8074
  var _c = React.useState(initialActiveIndex), activeIndex = _c[0], setActiveIndex = _c[1];
8075
+ var tabsRef = React.useRef(null);
8029
8076
  var focusedTabRef = React.useRef(null);
8030
8077
  var tabs = React__default.Children.toArray(children).filter(function (child) { return child.type === Tab; });
8031
8078
  var tabCount = tabs.length;
@@ -8090,10 +8137,13 @@ var Tabs = function (_a) {
8090
8137
  useDidUpdate(function () {
8091
8138
  var _a;
8092
8139
  (_a = focusedTabRef.current) === null || _a === void 0 ? void 0 : _a.focus();
8140
+ if (typeof onChange === 'function') {
8141
+ onChange({ activeTabIndex: activeIndex, target: focusedTabRef.current });
8142
+ }
8093
8143
  }, [activeIndex]);
8094
8144
  return (React__default.createElement("div", { className: classNames('Tabs', className, {
8095
8145
  'Tabs--thin': thin
8096
- }) },
8146
+ }), ref: tabsRef },
8097
8147
  React__default.createElement("ul", tslib.__assign({ role: "tablist", className: "Tablist" }, labelProp, { onKeyDown: handleKeyDown }), tabComponents)));
8098
8148
  };
8099
8149
  Tabs.displayName = 'Tabs';
@@ -8162,7 +8212,7 @@ var Step = function (props) {
8162
8212
  // list items, therefore it is safe to clobber
8163
8213
  // it with the contents of the tooltip in the
8164
8214
  // tab stop's accessible name.
8165
- association: "aria-labelledby" },
8215
+ association: "aria-labelledby", "aria-label": isTooltip(props) ? props.tooltipText : undefined },
8166
8216
  React__default.createElement("div", { className: "Stepper__step-indicator" }))) : (React__default.createElement(React__default.Fragment, null,
8167
8217
  React__default.createElement("div", { className: "Stepper__step-indicator" }),
8168
8218
  'children' in props && (React__default.createElement("div", { className: "Stepper__step-label" }, props.children)))))));
@@ -8171,6 +8221,7 @@ Step.displayName = 'Step';
8171
8221
  Step.propTypes = {
8172
8222
  children: PropTypes.node,
8173
8223
  tooltip: PropTypes.node,
8224
+ tooltipText: PropTypes.string,
8174
8225
  className: PropTypes.string
8175
8226
  };
8176
8227
  var Stepper = function (_a) {
@@ -8184,15 +8235,34 @@ Stepper.propTypes = {
8184
8235
  };
8185
8236
 
8186
8237
  var Panel = function (_a) {
8187
- var className = _a.className, _b = _a.title, title = _b === void 0 ? '' : _b, actions = _a.actions, children = _a.children;
8188
- return (React__default.createElement("div", { className: classNames('Panel', className) },
8189
- React__default.createElement("div", { className: "Panel__Header" },
8190
- title && React__default.createElement("div", { className: "Panel__Header-title" }, title),
8191
- actions && React__default.createElement("div", { className: "Panel__Header-actions" }, actions)),
8192
- React__default.createElement("div", { className: "Panel__Content" }, children)));
8238
+ var children = _a.children, className = _a.className, heading = _a.heading, other = tslib.__rest(_a, ["children", "className", "heading"]);
8239
+ var Heading = "h" + (typeof heading === 'object' && 'level' in heading && !!heading.level
8240
+ ? heading.level
8241
+ : 2);
8242
+ var headingId = typeof heading === 'object' && 'id' in heading ? heading.id : randomId();
8243
+ return (React__default.createElement("section", tslib.__assign({ "aria-labelledby": headingId, className: classNames('Panel', className) }, other),
8244
+ React__default.createElement(Heading, { id: headingId, className: "Panel__Heading" }, typeof heading === 'object' && 'text' in heading
8245
+ ? heading.text
8246
+ : heading),
8247
+ children));
8193
8248
  };
8194
8249
  Panel.displayName = 'Panel';
8195
8250
  Panel.propTypes = {
8251
+ children: PropTypes.node.isRequired,
8252
+ heading: PropTypes.oneOfType([PropTypes.object, PropTypes.node]).isRequired,
8253
+ className: PropTypes.string
8254
+ };
8255
+
8256
+ var IssuePanel = function (_a) {
8257
+ var className = _a.className, _b = _a.title, title = _b === void 0 ? '' : _b, actions = _a.actions, children = _a.children;
8258
+ return (React__default.createElement("div", { className: classNames('IssuePanel', className) },
8259
+ React__default.createElement("div", { className: "IssuePanel__Header" },
8260
+ title && React__default.createElement("div", { className: "IssuePanel__Header-title" }, title),
8261
+ actions && React__default.createElement("div", { className: "IssuePanel__Header-actions" }, actions)),
8262
+ React__default.createElement("div", { className: "IssuePanel__Content" }, children)));
8263
+ };
8264
+ IssuePanel.displayName = 'IssuePanel';
8265
+ IssuePanel.propTypes = {
8196
8266
  children: PropTypes.node.isRequired,
8197
8267
  className: PropTypes.string
8198
8268
  };
@@ -8216,7 +8286,7 @@ Address.propTypes = {
8216
8286
  };
8217
8287
  var AddressLine = function (_a) {
8218
8288
  var children = _a.children, className = _a.className, other = tslib.__rest(_a, ["children", "className"]);
8219
- return !!children && (React__default.createElement("div", tslib.__assign({ className: classNames('Address__line', className) }, other), children));
8289
+ return children ? (React__default.createElement("div", tslib.__assign({ className: classNames('Address__line', className) }, other), children)) : null;
8220
8290
  };
8221
8291
  AddressLine.displayName = 'AddressLine';
8222
8292
  AddressLine.propTypes = {
@@ -8225,9 +8295,9 @@ AddressLine.propTypes = {
8225
8295
  };
8226
8296
  var AddressCityStateZip = function (_a) {
8227
8297
  var city = _a.city, state = _a.state, zip = _a.zip, className = _a.className, other = tslib.__rest(_a, ["city", "state", "zip", "className"]);
8228
- return !!(city || state || zip) && (React__default.createElement("div", tslib.__assign({ className: classNames('Address__city-state-zip', className) }, other), [[city, state].filter(Boolean).join(', '), zip]
8298
+ return city || state || zip ? (React__default.createElement("div", tslib.__assign({ className: classNames('Address__city-state-zip', className) }, other), [[city, state].filter(Boolean).join(', '), zip]
8229
8299
  .filter(Boolean)
8230
- .join(' ')));
8300
+ .join(' '))) : null;
8231
8301
  };
8232
8302
  AddressCityStateZip.displayName = 'AddressCityStateZip';
8233
8303
  AddressCityStateZip.propTypes = {
@@ -8237,25 +8307,6 @@ AddressCityStateZip.propTypes = {
8237
8307
  className: PropTypes.string
8238
8308
  };
8239
8309
 
8240
- /**
8241
- * Hook to be used similarly to the React.Component#componentDidMount.
8242
- * Executes the provided `effect` when `dependencies` change but does not
8243
- * execute the effect initially (on mount) - only on update.
8244
- *
8245
- * @param effect {Function} function to be executed when dependencies update
8246
- * @param dependencies {Any} any valid dependency argument to React.useEffect
8247
- */
8248
- var useDidUpdate = function (effect, dependencies) {
8249
- var mounted = React__default.useRef(false);
8250
- React__default.useEffect(function () {
8251
- if (!mounted.current) {
8252
- mounted.current = true;
8253
- return;
8254
- }
8255
- effect();
8256
- }, dependencies);
8257
- };
8258
-
8259
8310
  var LIGHT_THEME_CLASS = 'cauldron--theme-light';
8260
8311
  var DARK_THEME_CLASS = 'cauldron--theme-dark';
8261
8312
  var ThemeContext = React.createContext({});
@@ -8330,6 +8381,7 @@ exports.DialogFooter = DialogFooter;
8330
8381
  exports.ExpandCollapsePanel = ExpandCollapsePanel;
8331
8382
  exports.Icon = Icon;
8332
8383
  exports.IconButton = IconButton;
8384
+ exports.IssuePanel = IssuePanel;
8333
8385
  exports.Layout = Layout;
8334
8386
  exports.Line = Line;
8335
8387
  exports.Link = Link;
@@ -9,18 +9,16 @@ function _extends() { _extends = Object.assign || function (target) { for (var i
9
9
 
10
10
  var _ref = /*#__PURE__*/React.createElement("path", {
11
11
  d: "M7 10l5 5 5-5z",
12
- vectorEffect: "non-scaling-stroke",
13
- fill: "currentColor"
12
+ fill: "currentColor",
13
+ vectorEffect: "non-scaling-stroke"
14
14
  });
15
15
 
16
16
  function SvgTriangle(props) {
17
17
  return /*#__PURE__*/React.createElement("svg", _extends({
18
18
  overflow: "visible",
19
19
  preserveAspectRatio: "none",
20
- viewBox: "0 0 24 24",
21
- width: 32,
22
- height: 32,
23
- transform: "rotate(270)"
20
+ width: 24,
21
+ height: 24
24
22
  }, props), _ref);
25
23
  }
26
24
 
@@ -0,0 +1,40 @@
1
+ /**
2
+ * Based on @radix-ui/polymorphic:
3
+ * https://github.com/radix-ui/primitives/blob/main/packages/react/polymorphic/src/polymorphic.ts
4
+ */
5
+ import * as React from 'react';
6
+ declare type Merge<P1 = {}, P2 = {}> = Omit<P1, keyof P2> & P2;
7
+ /**
8
+ * Infers the OwnProps if E is a ForwardRefExoticComponentWithAs
9
+ */
10
+ declare type OwnProps<E> = E extends ForwardRefComponent<any, infer P> ? P : {};
11
+ /**
12
+ * Infers the JSX.IntrinsicElement if E is a ForwardRefExoticComponentWithAs
13
+ */
14
+ declare type IntrinsicElement<E> = E extends ForwardRefComponent<infer I, any> ? I : never;
15
+ declare type ForwardRefExoticComponent<E, OwnProps> = React.ForwardRefExoticComponent<Merge<E extends React.ElementType ? React.ComponentPropsWithRef<E> : never, OwnProps & {
16
+ as?: E;
17
+ }>>;
18
+ interface ForwardRefComponent<IntrinsicElementString, OwnProps = {}
19
+ /**
20
+ * Extends original type to ensure built in React types play nice
21
+ * with polymorphic components still e.g. `React.ElementRef` etc.
22
+ */
23
+ > extends ForwardRefExoticComponent<IntrinsicElementString, OwnProps> {
24
+ /**
25
+ * When `as` prop is passed, use this overload.
26
+ * Merges original own props (without DOM props) and the inferred props
27
+ * from `as` element with the own props taking precendence.
28
+ *
29
+ * We explicitly avoid `React.ElementType` and manually narrow the prop types
30
+ * so that events are typed when using JSX.IntrinsicElements.
31
+ */
32
+ <As = IntrinsicElementString>(props: As extends '' ? {
33
+ as: keyof JSX.IntrinsicElements;
34
+ } : As extends React.ComponentType<infer P> ? Merge<P, OwnProps & {
35
+ as: As;
36
+ }> : As extends keyof JSX.IntrinsicElements ? Merge<JSX.IntrinsicElements[As], OwnProps & {
37
+ as: As;
38
+ }> : never): React.ReactElement | null;
39
+ }
40
+ export { ForwardRefComponent, OwnProps, IntrinsicElement, Merge };
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@deque/cauldron-react",
3
- "version": "3.0.1-canary.b96841e1",
3
+ "version": "3.0.1-canary.cfc22419",
4
4
  "description": "Fully accessible react components library for Deque Cauldron",
5
5
  "publishConfig": {
6
6
  "access": "public"