flipper-ui 0.40.4 → 0.41.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 (78) hide show
  1. package/core/data-display/actions/actions.spec.d.ts +1 -1
  2. package/core/data-display/actions/actions.stories.d.ts +2 -1
  3. package/core/data-display/actions/index.d.ts +83 -3
  4. package/core/data-display/actions/index.js +46 -8
  5. package/core/data-display/actions/styles.d.ts +1 -1
  6. package/core/data-display/actions/styles.js +3 -3
  7. package/core/data-display/advertise/styles.d.ts +1 -1
  8. package/core/data-display/data-table/data-table.d.ts +5 -0
  9. package/core/data-display/data-table/data-table.js +18 -6
  10. package/core/data-display/data-table/data-table.stories.d.ts +110 -8
  11. package/core/data-display/data-table/rows.d.ts +7 -2
  12. package/core/data-display/data-table/rows.js +18 -6
  13. package/core/data-display/data-table/styles.d.ts +1 -1
  14. package/core/data-display/data-table/types.d.ts +2 -0
  15. package/core/data-display/list-item-dark/index.js +3 -4
  16. package/core/data-display/list-item-dark/styles.d.ts +1 -1
  17. package/core/data-display/table/index.js +34 -0
  18. package/core/data-display/table/styles.d.ts +42 -0
  19. package/core/data-display/table/styles.js +68 -0
  20. package/core/data-display/table/table-pagination.js +1 -1
  21. package/core/data-display/table-interactive/TableInteractive.d.ts +4 -0
  22. package/core/data-display/table-interactive/TableInteractive.js +18 -3
  23. package/core/data-display/table-interactive/TableInteractiveHead.d.ts +1 -1
  24. package/core/data-display/table-interactive/TableInteractiveHead.js +1 -1
  25. package/core/data-display/table-interactive/TableInteractiveHeader.js +1 -0
  26. package/core/data-display/table-interactive/index.d.ts +2 -0
  27. package/core/data-display/table-interactive/index.js +8 -1
  28. package/core/data-display/table-interactive/styles.js +1 -1
  29. package/core/data-display/table-interactive/table-interactive.stories.d.ts +2 -0
  30. package/core/data-display/table-interactive/utils.d.ts +1 -1
  31. package/core/data-display/table-interactive/utils.js +2 -1
  32. package/core/data-display/typography/index.d.ts +2 -1
  33. package/core/data-display/typography/index.js +18 -2
  34. package/core/data-display/view-mode/styles.d.ts +1 -1
  35. package/core/feedback/dialog-v2/dialog.js +6 -5
  36. package/core/feedback/nothing-found/index.d.ts +8 -1
  37. package/core/feedback/nothing-found/index.js +11 -2
  38. package/core/feedback/nothing-found/nothing-found.spec.d.ts +1 -1
  39. package/core/feedback/progress/index.d.ts +42 -2
  40. package/core/feedback/progress/index.js +79 -20
  41. package/core/feedback/progress/progress.spec.d.ts +1 -1
  42. package/core/feedback/progress/progress.stories.d.ts +4 -2
  43. package/core/feedback/progress/styles.d.ts +18 -0
  44. package/core/feedback/progress/styles.js +14 -0
  45. package/core/feedback/snackbar/index.js +1 -1
  46. package/core/inputs/checkbox/checkbox.spec.d.ts +1 -1
  47. package/core/inputs/checkbox/index.js +3 -1
  48. package/core/inputs/icon-button/icon-button.spec.d.ts +1 -1
  49. package/core/inputs/icon-button/index.d.ts +7 -0
  50. package/core/inputs/icon-button/index.js +11 -1
  51. package/core/inputs/select/index.js +2 -1
  52. package/core/inputs/text-field/index.d.ts +2 -2
  53. package/core/inputs/text-field/index.js +14 -4
  54. package/core/inputs/text-field/styles.js +1 -1
  55. package/core/inputs/text-field/text-field.spec.d.ts +1 -1
  56. package/core/navigation/menu/index.js +1 -1
  57. package/core/navigation/stepper/index.d.ts +38 -2
  58. package/core/navigation/stepper/index.js +36 -9
  59. package/core/navigation/stepper/stepper.stories.d.ts +2 -0
  60. package/core/surfaces/card/index.d.ts +13 -6
  61. package/core/surfaces/card/index.js +19 -12
  62. package/core/surfaces/card/styles.d.ts +3 -2
  63. package/core/surfaces/card/styles.js +2 -3
  64. package/core/surfaces/expansion-panel/index.d.ts +1 -0
  65. package/core/surfaces/expansion-panel/index.js +5 -3
  66. package/core/surfaces/step-card/index.d.ts +19 -9
  67. package/core/surfaces/step-card/index.js +2 -0
  68. package/core/surfaces/step-card/step-card-details.js +1 -0
  69. package/core/surfaces/step-card/step-card-panel.d.ts +1 -0
  70. package/core/surfaces/step-card/step-card-panel.js +2 -1
  71. package/core/surfaces/step-card/step-card.spec.d.ts +1 -1
  72. package/package.json +1 -1
  73. package/theme/index.d.ts +1 -0
  74. package/theme/index.js +1 -0
  75. package/theme/theme.d.ts +43 -0
  76. package/theme/theme.js +11 -1
  77. package/theme/typography.d.ts +96 -0
  78. package/theme/typography.js +59 -0
@@ -1,21 +1,45 @@
1
1
  "use strict";
2
2
 
3
3
  var _interopRequireDefault = require("@babel/runtime/helpers/interopRequireDefault");
4
+ var _typeof = require("@babel/runtime/helpers/typeof");
4
5
  Object.defineProperty(exports, "__esModule", {
5
6
  value: true
6
7
  });
7
8
  exports["default"] = void 0;
8
9
  var _extends2 = _interopRequireDefault(require("@babel/runtime/helpers/extends"));
9
10
  var _defineProperty2 = _interopRequireDefault(require("@babel/runtime/helpers/defineProperty"));
11
+ var _toConsumableArray2 = _interopRequireDefault(require("@babel/runtime/helpers/toConsumableArray"));
10
12
  var _objectWithoutProperties2 = _interopRequireDefault(require("@babel/runtime/helpers/objectWithoutProperties"));
11
- var _react = _interopRequireDefault(require("react"));
13
+ var _react = _interopRequireWildcard(require("react"));
12
14
  var _CircularProgress = _interopRequireDefault(require("@mui/material/CircularProgress"));
13
15
  var _LinearProgress = _interopRequireDefault(require("@mui/material/LinearProgress"));
14
- var _excluded = ["linear", "style", "margin", "padding", "valueBuffer", "primaryColor", "barPrimaryColor", "barSecondaryColor"];
16
+ var _typography = _interopRequireDefault(require("../../data-display/typography"));
17
+ var _styles = require("./styles");
18
+ var _excluded = ["sx", "label", "linear", "ariaLabel", "thickness", "borderRadius", "labelPosition", "style", "margin", "padding", "valueBuffer", "primaryColor", "barPrimaryColor", "barSecondaryColor"],
19
+ _excluded2 = ["variant"];
20
+ function _interopRequireWildcard(e, t) { if ("function" == typeof WeakMap) var r = new WeakMap(), n = new WeakMap(); return (_interopRequireWildcard = function _interopRequireWildcard(e, t) { if (!t && e && e.__esModule) return e; var o, i, f = { __proto__: null, "default": e }; if (null === e || "object" != _typeof(e) && "function" != typeof e) return f; if (o = t ? n : r) { if (o.has(e)) return o.get(e); o.set(e, f); } for (var _t in e) "default" !== _t && {}.hasOwnProperty.call(e, _t) && ((i = (o = Object.defineProperty) && Object.getOwnPropertyDescriptor(e, _t)) && (i.get || i.set) ? o(f, _t, i) : f[_t] = e[_t]); return f; })(e, t); }
15
21
  function ownKeys(e, r) { var t = Object.keys(e); if (Object.getOwnPropertySymbols) { var o = Object.getOwnPropertySymbols(e); r && (o = o.filter(function (r) { return Object.getOwnPropertyDescriptor(e, r).enumerable; })), t.push.apply(t, o); } return t; }
16
22
  function _objectSpread(e) { for (var r = 1; r < arguments.length; r++) { var t = null != arguments[r] ? arguments[r] : {}; r % 2 ? ownKeys(Object(t), !0).forEach(function (r) { (0, _defineProperty2["default"])(e, r, t[r]); }) : Object.getOwnPropertyDescriptors ? Object.defineProperties(e, Object.getOwnPropertyDescriptors(t)) : ownKeys(Object(t)).forEach(function (r) { Object.defineProperty(e, r, Object.getOwnPropertyDescriptor(t, r)); }); } return e; }
23
+ /**
24
+ * Below this diameter the label no longer fits inside the ring, so it is
25
+ * rendered beside it. Matches the MUI default `size`.
26
+ */
27
+ var MIN_INNER_LABEL_SIZE = 40;
28
+ var toPixels = function toPixels(size) {
29
+ if (typeof size === 'number') {
30
+ return size;
31
+ }
32
+ return typeof size === 'string' && size.endsWith('px') ? parseFloat(size) : undefined;
33
+ };
17
34
  var Progress = function Progress(_ref) {
18
- var linear = _ref.linear,
35
+ var _toPixels;
36
+ var sx = _ref.sx,
37
+ label = _ref.label,
38
+ linear = _ref.linear,
39
+ ariaLabel = _ref.ariaLabel,
40
+ thickness = _ref.thickness,
41
+ borderRadius = _ref.borderRadius,
42
+ labelPosition = _ref.labelPosition,
19
43
  _ref$style = _ref.style,
20
44
  style = _ref$style === void 0 ? {} : _ref$style,
21
45
  margin = _ref.margin,
@@ -25,26 +49,61 @@ var Progress = function Progress(_ref) {
25
49
  barPrimaryColor = _ref.barPrimaryColor,
26
50
  barSecondaryColor = _ref.barSecondaryColor,
27
51
  otherProps = (0, _objectWithoutProperties2["default"])(_ref, _excluded);
28
- return linear ? /*#__PURE__*/_react["default"].createElement(_LinearProgress["default"], (0, _extends2["default"])({
52
+ var labelId = (0, _react.useId)();
53
+ var withReceivedSx = function withReceivedSx(base) {
54
+ return sx ? [base].concat((0, _toConsumableArray2["default"])(Array.isArray(sx) ? sx : [sx])) : base;
55
+ };
56
+ var labelling = {
57
+ 'aria-label': ariaLabel,
58
+ 'aria-labelledby': !ariaLabel && label ? labelId : undefined,
59
+ 'aria-valuetext': typeof label === 'string' ? label : undefined
60
+ };
61
+ var renderLabel = function renderLabel() {
62
+ return /*#__PURE__*/_react["default"].createElement(_typography["default"], {
63
+ id: labelId,
64
+ variant: "caption"
65
+ }, label);
66
+ };
67
+ if (linear) {
68
+ var bar = /*#__PURE__*/_react["default"].createElement(_LinearProgress["default"], (0, _extends2["default"])({
69
+ style: _objectSpread({
70
+ margin: margin,
71
+ padding: padding
72
+ }, style),
73
+ valueBuffer: valueBuffer,
74
+ sx: withReceivedSx(_objectSpread(_objectSpread(_objectSpread({}, thickness === undefined ? {} : {
75
+ height: thickness
76
+ }), borderRadius === undefined ? {} : {
77
+ borderRadius: borderRadius
78
+ }), {}, {
79
+ backgroundColor: primaryColor,
80
+ '.MuiLinearProgress-barColorPrimary': {
81
+ backgroundColor: barPrimaryColor
82
+ },
83
+ '.MuiLinearProgress-barColorSecondary': {
84
+ backgroundColor: barSecondaryColor
85
+ }
86
+ }))
87
+ }, labelling, otherProps));
88
+ return label ? /*#__PURE__*/_react["default"].createElement(_styles.LinearWrapper, null, bar, renderLabel()) : bar;
89
+ }
90
+ var variant = otherProps.variant,
91
+ circularProps = (0, _objectWithoutProperties2["default"])(otherProps, _excluded2);
92
+ var ring = /*#__PURE__*/_react["default"].createElement(_CircularProgress["default"], (0, _extends2["default"])({
29
93
  style: _objectSpread({
30
94
  margin: margin,
31
95
  padding: padding
32
96
  }, style),
33
- valueBuffer: valueBuffer,
34
- sx: {
35
- backgroundColor: primaryColor,
36
- '.MuiLinearProgress-barColorPrimary': {
37
- backgroundColor: barPrimaryColor
38
- },
39
- '.MuiLinearProgress-barColorSecondary': {
40
- backgroundColor: barSecondaryColor
41
- }
42
- }
43
- }, otherProps)) : /*#__PURE__*/_react["default"].createElement(_CircularProgress["default"], (0, _extends2["default"])({
44
- style: _objectSpread({
45
- margin: margin,
46
- padding: padding
47
- }, style)
48
- }, otherProps));
97
+ sx: withReceivedSx()
98
+ // Forwarded verbatim: the ring renders a class of its own for
99
+ // `buffer` and `query`, so narrowing them here would change it.
100
+ ,
101
+ variant: variant
102
+ }, labelling, circularProps));
103
+ if (!label) {
104
+ return ring;
105
+ }
106
+ var fitsInside = labelPosition === undefined ? ((_toPixels = toPixels(circularProps.size)) !== null && _toPixels !== void 0 ? _toPixels : MIN_INNER_LABEL_SIZE) >= MIN_INNER_LABEL_SIZE : labelPosition === 'inside';
107
+ return fitsInside ? /*#__PURE__*/_react["default"].createElement(_styles.CircularWrapper, null, ring, /*#__PURE__*/_react["default"].createElement(_styles.CircularLabel, null, renderLabel())) : /*#__PURE__*/_react["default"].createElement(_styles.InlineWrapper, null, ring, renderLabel());
49
108
  };
50
109
  var _default = exports["default"] = Progress;
@@ -1 +1 @@
1
- export {};
1
+ import '@testing-library/jest-dom';
@@ -3,5 +3,7 @@ import Progress from '.';
3
3
  declare const meta: Meta<typeof Progress>;
4
4
  export default meta;
5
5
  type Story = StoryObj<typeof Progress>;
6
- export declare const progress: Story;
7
- export declare const progressCustom: Story;
6
+ export declare const loading: Story;
7
+ export declare const dataBar: Story;
8
+ export declare const circularWithLabel: Story;
9
+ export declare const customColors: Story;
@@ -0,0 +1,18 @@
1
+ export declare const InlineWrapper: import("@emotion/styled").StyledComponent<{
2
+ theme?: import("@emotion/react").Theme;
3
+ as?: React.ElementType;
4
+ }, import("react").DetailedHTMLProps<import("react").HTMLAttributes<HTMLDivElement>, HTMLDivElement>, {}>;
5
+ export declare const LinearWrapper: import("@emotion/styled").StyledComponent<{
6
+ theme?: import("@emotion/react").Theme;
7
+ as?: React.ElementType;
8
+ } & import("react").ClassAttributes<HTMLDivElement> & import("react").HTMLAttributes<HTMLDivElement> & {
9
+ theme?: import("@emotion/react").Theme;
10
+ }, {}, {}>;
11
+ export declare const CircularWrapper: import("@emotion/styled").StyledComponent<{
12
+ theme?: import("@emotion/react").Theme;
13
+ as?: React.ElementType;
14
+ }, import("react").DetailedHTMLProps<import("react").HTMLAttributes<HTMLDivElement>, HTMLDivElement>, {}>;
15
+ export declare const CircularLabel: import("@emotion/styled").StyledComponent<{
16
+ theme?: import("@emotion/react").Theme;
17
+ as?: React.ElementType;
18
+ }, import("react").DetailedHTMLProps<import("react").HTMLAttributes<HTMLDivElement>, HTMLDivElement>, {}>;
@@ -0,0 +1,14 @@
1
+ "use strict";
2
+
3
+ var _interopRequireDefault = require("@babel/runtime/helpers/interopRequireDefault");
4
+ Object.defineProperty(exports, "__esModule", {
5
+ value: true
6
+ });
7
+ exports.LinearWrapper = exports.InlineWrapper = exports.CircularWrapper = exports.CircularLabel = void 0;
8
+ var _taggedTemplateLiteral2 = _interopRequireDefault(require("@babel/runtime/helpers/taggedTemplateLiteral"));
9
+ var _styled = _interopRequireDefault(require("@emotion/styled"));
10
+ var _templateObject, _templateObject2, _templateObject3, _templateObject4;
11
+ var InlineWrapper = exports.InlineWrapper = _styled["default"].div(_templateObject || (_templateObject = (0, _taggedTemplateLiteral2["default"])(["\n display: flex;\n gap: 4px;\n align-items: center;\n"])));
12
+ var LinearWrapper = exports.LinearWrapper = (0, _styled["default"])(InlineWrapper)(_templateObject2 || (_templateObject2 = (0, _taggedTemplateLiteral2["default"])(["\n .MuiLinearProgress-root {\n flex: 1;\n }\n"])));
13
+ var CircularWrapper = exports.CircularWrapper = _styled["default"].div(_templateObject3 || (_templateObject3 = (0, _taggedTemplateLiteral2["default"])(["\n position: relative;\n display: inline-flex;\n"])));
14
+ var CircularLabel = exports.CircularLabel = _styled["default"].div(_templateObject4 || (_templateObject4 = (0, _taggedTemplateLiteral2["default"])(["\n position: absolute;\n inset: 0;\n display: flex;\n align-items: center;\n justify-content: center;\n"])));
@@ -103,7 +103,7 @@ var SnackBar = function SnackBar(props) {
103
103
  }), /*#__PURE__*/_react["default"].createElement("div", null, message)),
104
104
  action: action || /*#__PURE__*/_react["default"].createElement(_iconButton["default"], {
105
105
  key: "close",
106
- role: "close-icon-button",
106
+ "data-testid": "close-icon-button",
107
107
  "aria-label": "Close",
108
108
  color: "inherit",
109
109
  onClick: handleClose
@@ -1 +1 @@
1
- export {};
1
+ import '@testing-library/jest-dom';
@@ -43,7 +43,9 @@ var Checkbox = function Checkbox(props) {
43
43
  };
44
44
  var renderSwitch = function renderSwitch(checkboxProps) {
45
45
  return /*#__PURE__*/_react["default"].createElement(_Switch["default"], (0, _extends2["default"])({}, checkboxProps, {
46
- role: "switch",
46
+ inputProps: {
47
+ role: 'switch'
48
+ },
47
49
  sx: props.sx,
48
50
  name: props.name,
49
51
  value: props.name,
@@ -1 +1 @@
1
- export {};
1
+ import '@testing-library/jest-dom';
@@ -6,6 +6,13 @@ export interface IconButtonProps extends DefaultProps {
6
6
  role?: string;
7
7
  disabled?: boolean;
8
8
  'data-testid'?: string;
9
+ /**
10
+ * Accessible name. Falls back to `name` when the button has no text of
11
+ * its own — an icon alone leaves it unnamed, since the icon itself is
12
+ * `aria-hidden` (WCAG 4.1.2). Never applied over a text child, which
13
+ * already names the button.
14
+ */
15
+ 'aria-label'?: string;
9
16
  size?: 'small' | 'medium' | 'large';
10
17
  onClick?(event: MouseEvent<HTMLButtonElement>): void;
11
18
  }
@@ -1,6 +1,7 @@
1
1
  "use strict";
2
2
 
3
3
  var _interopRequireDefault = require("@babel/runtime/helpers/interopRequireDefault");
4
+ var _typeof = require("@babel/runtime/helpers/typeof");
4
5
  Object.defineProperty(exports, "__esModule", {
5
6
  value: true
6
7
  });
@@ -8,20 +9,29 @@ exports["default"] = void 0;
8
9
  var _extends2 = _interopRequireDefault(require("@babel/runtime/helpers/extends"));
9
10
  var _defineProperty2 = _interopRequireDefault(require("@babel/runtime/helpers/defineProperty"));
10
11
  var _objectWithoutProperties2 = _interopRequireDefault(require("@babel/runtime/helpers/objectWithoutProperties"));
11
- var _react = _interopRequireDefault(require("react"));
12
+ var _react = _interopRequireWildcard(require("react"));
12
13
  var _IconButton = _interopRequireDefault(require("@mui/material/IconButton"));
13
14
  var _excluded = ["children", "padding", "margin", "size", "style"];
15
+ function _interopRequireWildcard(e, t) { if ("function" == typeof WeakMap) var r = new WeakMap(), n = new WeakMap(); return (_interopRequireWildcard = function _interopRequireWildcard(e, t) { if (!t && e && e.__esModule) return e; var o, i, f = { __proto__: null, "default": e }; if (null === e || "object" != _typeof(e) && "function" != typeof e) return f; if (o = t ? n : r) { if (o.has(e)) return o.get(e); o.set(e, f); } for (var _t in e) "default" !== _t && {}.hasOwnProperty.call(e, _t) && ((i = (o = Object.defineProperty) && Object.getOwnPropertyDescriptor(e, _t)) && (i.get || i.set) ? o(f, _t, i) : f[_t] = e[_t]); return f; })(e, t); }
14
16
  function ownKeys(e, r) { var t = Object.keys(e); if (Object.getOwnPropertySymbols) { var o = Object.getOwnPropertySymbols(e); r && (o = o.filter(function (r) { return Object.getOwnPropertyDescriptor(e, r).enumerable; })), t.push.apply(t, o); } return t; }
15
17
  function _objectSpread(e) { for (var r = 1; r < arguments.length; r++) { var t = null != arguments[r] ? arguments[r] : {}; r % 2 ? ownKeys(Object(t), !0).forEach(function (r) { (0, _defineProperty2["default"])(e, r, t[r]); }) : Object.getOwnPropertyDescriptors ? Object.defineProperties(e, Object.getOwnPropertyDescriptors(t)) : ownKeys(Object(t)).forEach(function (r) { Object.defineProperty(e, r, Object.getOwnPropertyDescriptor(t, r)); }); } return e; }
18
+ var hasTextChild = function hasTextChild(children) {
19
+ return _react.Children.toArray(children).some(function (child) {
20
+ return typeof child === 'string' || typeof child === 'number';
21
+ });
22
+ };
16
23
  var IconButton = function IconButton(_ref) {
24
+ var _otherProps$ariaLabe;
17
25
  var children = _ref.children,
18
26
  padding = _ref.padding,
19
27
  margin = _ref.margin,
20
28
  size = _ref.size,
21
29
  style = _ref.style,
22
30
  otherProps = (0, _objectWithoutProperties2["default"])(_ref, _excluded);
31
+ var ariaLabel = (_otherProps$ariaLabe = otherProps['aria-label']) !== null && _otherProps$ariaLabe !== void 0 ? _otherProps$ariaLabe : hasTextChild(children) ? undefined : otherProps.name;
23
32
  return /*#__PURE__*/_react["default"].createElement(_IconButton["default"], (0, _extends2["default"])({}, otherProps, {
24
33
  size: size || 'large',
34
+ "aria-label": ariaLabel,
25
35
  style: _objectSpread({
26
36
  margin: margin,
27
37
  padding: padding
@@ -23,7 +23,8 @@ var renderEndAdornment = function renderEndAdornment(onClear) {
23
23
  paddingRight: '12px'
24
24
  }
25
25
  }, /*#__PURE__*/_react["default"].createElement(_IconButton["default"], {
26
- role: "end-adornment-component",
26
+ "data-testid": "end-adornment-component",
27
+ "aria-label": "Limpar",
27
28
  size: "small",
28
29
  onClick: onClear
29
30
  }, /*#__PURE__*/_react["default"].createElement(_mui.IconClose, {
@@ -1,5 +1,5 @@
1
1
  import React from 'react';
2
- import type { ChangeEvent, ClipboardEvent, KeyboardEvent, FocusEvent, ReactNode, MouseEvent, Ref } from 'react';
2
+ import type { ChangeEvent, ClipboardEvent, KeyboardEvent, FocusEvent, ReactNode, SyntheticEvent, Ref } from 'react';
3
3
  import type { DefaultProps } from '../../types';
4
4
  import type { InputBaseComponentProps } from '@mui/material/InputBase';
5
5
  import type { TextFieldProps } from '@mui/material/TextField';
@@ -49,7 +49,7 @@ export interface ITextFieldProps extends DefaultProps, Omit<TextFieldProps, 'mar
49
49
  }
50
50
  interface IHelperProps {
51
51
  helperIcon?: ReactNode;
52
- onHelperClick: (event: MouseEvent) => void;
52
+ onHelperClick: (event: SyntheticEvent) => void;
53
53
  }
54
54
  export declare const HelperBox: (props: IHelperProps) => React.JSX.Element;
55
55
  export declare const renderOptions: (options: ITextFieldProps["options"]) => React.JSX.Element[] | undefined;
@@ -43,10 +43,19 @@ var toLispCase = function toLispCase(name) {
43
43
  };
44
44
  var HelperBox = exports.HelperBox = function HelperBox(props) {
45
45
  return /*#__PURE__*/_react["default"].createElement(_styles.Helper, {
46
- role: "helper-box"
46
+ "data-testid": "helper-box"
47
47
  }, /*#__PURE__*/_react["default"].createElement(_styles.HelperButton, {
48
- onClick: function onClick(e) {
49
- return props.onHelperClick(e);
48
+ role: "button",
49
+ tabIndex: 0,
50
+ "aria-label": "Ajuda",
51
+ onClick: function onClick(event) {
52
+ return props.onHelperClick(event);
53
+ },
54
+ onKeyDown: function onKeyDown(event) {
55
+ if (event.key === 'Enter' || event.key === ' ') {
56
+ event.preventDefault();
57
+ props.onHelperClick(event);
58
+ }
50
59
  }
51
60
  }, props.helperIcon || /*#__PURE__*/_react["default"].createElement(_mui.IconHelp, {
52
61
  color: "primary"
@@ -70,7 +79,8 @@ var renderEndAdornment = function renderEndAdornment(disabled, onClear) {
70
79
  position: "end"
71
80
  }, /*#__PURE__*/_react["default"].createElement(_iconButton["default"], {
72
81
  size: "small",
73
- role: "clear-button",
82
+ "aria-label": "Limpar",
83
+ "data-testid": "clear-button",
74
84
  margin: "0 16px 0 0",
75
85
  disabled: disabled || false,
76
86
  onClick: onClear
@@ -14,7 +14,7 @@ var _theme$colors = _theme.theme.colors,
14
14
  primary = _theme$colors.primary;
15
15
  var Wrapper = exports.Wrapper = _styled["default"].div(_templateObject || (_templateObject = (0, _taggedTemplateLiteral2["default"])([""])));
16
16
  var Helper = exports.Helper = _styled["default"].div(_templateObject2 || (_templateObject2 = (0, _taggedTemplateLiteral2["default"])(["\n width: 42px;\n height: 38px;\n\n display: flex;\n align-items: center;\n"])));
17
- var HelperButton = exports.HelperButton = _styled["default"].div(_templateObject3 || (_templateObject3 = (0, _taggedTemplateLiteral2["default"])(["\n opacity: 0;\n padding: 4px;\n display: flex;\n border-radius: 100px;\n transition:\n opacity 0.2s ease,\n background-color 0.2s ease;\n\n &:hover {\n opacity: 1;\n cursor: pointer;\n background-color: ", "0a;\n }\n"])), primary.main);
17
+ var HelperButton = exports.HelperButton = _styled["default"].div(_templateObject3 || (_templateObject3 = (0, _taggedTemplateLiteral2["default"])(["\n opacity: 0;\n padding: 4px;\n display: flex;\n border-radius: 100px;\n transition:\n opacity 0.2s ease,\n background-color 0.2s ease;\n\n &:hover {\n opacity: 1;\n cursor: pointer;\n background-color: ", "0a;\n }\n\n &:focus-visible {\n opacity: 1;\n background-color: ", "0a;\n }\n"])), primary.main, primary.main);
18
18
  var TextFieldWrapper = exports.TextFieldWrapper = _styled["default"].div(_templateObject4 || (_templateObject4 = (0, _taggedTemplateLiteral2["default"])(["\n width: 100%;\n display: flex;\n align-items: center;\n\n button {\n display: none;\n }\n\n :hover button {\n display: flex;\n }\n"])));
19
19
  var StaticTextFieldWrapper = exports.StaticTextFieldWrapper = _styled["default"].div(_templateObject5 || (_templateObject5 = (0, _taggedTemplateLiteral2["default"])(["\n width: 100%;\n display: flex;\n align-items: center;\n"])));
20
20
  var CharactersCount = exports.CharactersCount = _styled["default"].span(_templateObject6 || (_templateObject6 = (0, _taggedTemplateLiteral2["default"])(["\n color: ", ";\n font-size: 14px;\n font-family:\n Roboto,\n Helvetica,\n Arial,\n sans- serif;\n"])), gray[600]);
@@ -1 +1 @@
1
- export {};
1
+ import '@testing-library/jest-dom';
@@ -36,7 +36,7 @@ var Menu = function Menu(_ref) {
36
36
  margin: margin
37
37
  }, style)
38
38
  }), withWrapper ? /*#__PURE__*/_react["default"].createElement("div", {
39
- role: "menu-wrapper-container"
39
+ "data-testid": "menu-wrapper-container"
40
40
  }, children) : children);
41
41
  };
42
42
  var _default = exports["default"] = Menu;
@@ -1,14 +1,50 @@
1
1
  import React from 'react';
2
+ import type { ReactNode } from 'react';
2
3
  import type { DefaultProps } from '../../types';
3
4
  export interface StepperProps extends DefaultProps {
4
5
  active?: number;
5
6
  steps: Array<string | TStep>;
6
7
  bottomLabel?: boolean;
7
8
  orientation?: 'horizontal' | 'vertical';
9
+ /**
10
+ * Frees the steps from `active`: none is completed or blocked by its
11
+ * position alone, each one carries its own `completed` and `disabled`.
12
+ * Required for free navigation — a linear stepper blocks every step
13
+ * after `active`, so clicking ahead does nothing.
14
+ * @optional
15
+ */
16
+ nonLinear?: boolean;
17
+ /**
18
+ * Called with the index of the clicked step. It only turns the steps into
19
+ * buttons alongside `nonLinear` — on its own the stepper stays the
20
+ * read-only trail it has always been, so a handler injected by tooling
21
+ * (Storybook auto-actions, a spread of props) cannot make it clickable.
22
+ * @optional
23
+ */
24
+ onStepClick?: (index: number) => void;
8
25
  }
9
26
  type TStep = {
10
27
  label: JSX.Element | string;
11
- icon: JSX.Element | ((active?: boolean) => JSX.Element);
28
+ icon?: JSX.Element | ((active?: boolean) => JSX.Element);
29
+ /**
30
+ * Overrides the completion the stepper would infer from `active`, and is
31
+ * the only source of it under `nonLinear`.
32
+ * @optional
33
+ */
34
+ completed?: boolean;
35
+ /**
36
+ * Blocks the step: greyed out, and unreachable by mouse or keyboard when
37
+ * `onStepClick` is set.
38
+ * @optional
39
+ */
40
+ disabled?: boolean;
41
+ /**
42
+ * Secondary line under the label — a percentage, a count. It lands inside
43
+ * the label, so it also names the step for screen readers: `'45%'` reads
44
+ * as part of the button. Inline content only.
45
+ * @optional
46
+ */
47
+ caption?: ReactNode;
12
48
  };
13
- declare const Stepper: ({ active, bottomLabel, steps, padding, margin, style, ...otherProps }: StepperProps) => React.JSX.Element;
49
+ declare const Stepper: ({ active, bottomLabel, steps, padding, margin, nonLinear, onStepClick, style, ...otherProps }: StepperProps) => React.JSX.Element;
14
50
  export default Stepper;
@@ -12,9 +12,11 @@ var _defineProperty2 = _interopRequireDefault(require("@babel/runtime/helpers/de
12
12
  var _objectWithoutProperties2 = _interopRequireDefault(require("@babel/runtime/helpers/objectWithoutProperties"));
13
13
  var _react = _interopRequireWildcard(require("react"));
14
14
  var _Step = _interopRequireDefault(require("@mui/material/Step"));
15
+ var _StepButton = _interopRequireDefault(require("@mui/material/StepButton"));
15
16
  var _StepLabel = _interopRequireDefault(require("@mui/material/StepLabel"));
16
17
  var _Stepper = _interopRequireDefault(require("@mui/material/Stepper"));
17
- var _excluded = ["active", "bottomLabel", "steps", "padding", "margin", "style"];
18
+ var _typography = _interopRequireDefault(require("../../data-display/typography"));
19
+ var _excluded = ["active", "bottomLabel", "steps", "padding", "margin", "nonLinear", "onStepClick", "style"];
18
20
  function _interopRequireWildcard(e, t) { if ("function" == typeof WeakMap) var r = new WeakMap(), n = new WeakMap(); return (_interopRequireWildcard = function _interopRequireWildcard(e, t) { if (!t && e && e.__esModule) return e; var o, i, f = { __proto__: null, "default": e }; if (null === e || "object" != _typeof3(e) && "function" != typeof e) return f; if (o = t ? n : r) { if (o.has(e)) return o.get(e); o.set(e, f); } for (var _t in e) "default" !== _t && {}.hasOwnProperty.call(e, _t) && ((i = (o = Object.defineProperty) && Object.getOwnPropertyDescriptor(e, _t)) && (i.get || i.set) ? o(f, _t, i) : f[_t] = e[_t]); return f; })(e, t); }
19
21
  function ownKeys(e, r) { var t = Object.keys(e); if (Object.getOwnPropertySymbols) { var o = Object.getOwnPropertySymbols(e); r && (o = o.filter(function (r) { return Object.getOwnPropertyDescriptor(e, r).enumerable; })), t.push.apply(t, o); } return t; }
20
22
  function _objectSpread(e) { for (var r = 1; r < arguments.length; r++) { var t = null != arguments[r] ? arguments[r] : {}; r % 2 ? ownKeys(Object(t), !0).forEach(function (r) { (0, _defineProperty2["default"])(e, r, t[r]); }) : Object.getOwnPropertyDescriptors ? Object.defineProperties(e, Object.getOwnPropertyDescriptors(t)) : ownKeys(Object(t)).forEach(function (r) { Object.defineProperty(e, r, Object.getOwnPropertyDescriptor(t, r)); }); } return e; }
@@ -38,26 +40,51 @@ var Stepper = function Stepper(_ref2) {
38
40
  steps = _ref2.steps,
39
41
  padding = _ref2.padding,
40
42
  margin = _ref2.margin,
43
+ nonLinear = _ref2.nonLinear,
44
+ onStepClick = _ref2.onStepClick,
41
45
  _ref2$style = _ref2.style,
42
46
  style = _ref2$style === void 0 ? {} : _ref2$style,
43
47
  otherProps = (0, _objectWithoutProperties2["default"])(_ref2, _excluded);
44
48
  return /*#__PURE__*/_react["default"].createElement(_Stepper["default"], (0, _extends2["default"])({
45
- role: "stepper-container",
49
+ "data-testid": "stepper-container",
46
50
  alternativeLabel: bottomLabel,
47
51
  activeStep: active,
52
+ nonLinear: nonLinear,
48
53
  style: _objectSpread({
49
54
  padding: padding,
50
55
  margin: margin
51
56
  }, style)
52
57
  }, otherProps), steps.map(function (step, index) {
58
+ var _ref3 = (0, _typeof2["default"])(step) === 'object' ? step : {
59
+ label: step
60
+ },
61
+ label = _ref3.label,
62
+ icon = _ref3.icon,
63
+ completed = _ref3.completed,
64
+ disabled = _ref3.disabled,
65
+ caption = _ref3.caption;
66
+ var stepActive = nonLinear ? index === active || !!completed : !!isActive(index, active);
67
+ var stepIcon = icon ? /*#__PURE__*/_react["default"].createElement(StepIcon, {
68
+ icon: icon,
69
+ active: stepActive
70
+ }) : index + 1;
71
+ var stepCaption = caption ? /*#__PURE__*/_react["default"].createElement(_typography["default"], {
72
+ variant: "caption"
73
+ }, caption) : undefined;
53
74
  return /*#__PURE__*/_react["default"].createElement(_Step["default"], {
54
- key: index
55
- }, /*#__PURE__*/_react["default"].createElement(_StepLabel["default"], {
56
- icon: (0, _typeof2["default"])(step) === 'object' ? /*#__PURE__*/_react["default"].createElement(StepIcon, {
57
- icon: step.icon,
58
- active: !!isActive(index, active)
59
- }) : index + 1
60
- }, (0, _typeof2["default"])(step) === 'object' ? step.label : step));
75
+ key: index,
76
+ completed: completed,
77
+ disabled: disabled
78
+ }, nonLinear && onStepClick ? /*#__PURE__*/_react["default"].createElement(_StepButton["default"], {
79
+ icon: stepIcon,
80
+ optional: stepCaption,
81
+ onClick: function onClick() {
82
+ return onStepClick(index);
83
+ }
84
+ }, label) : /*#__PURE__*/_react["default"].createElement(_StepLabel["default"], {
85
+ icon: stepIcon,
86
+ optional: stepCaption
87
+ }, label));
61
88
  }));
62
89
  };
63
90
  var _default = exports["default"] = Stepper;
@@ -5,3 +5,5 @@ export default meta;
5
5
  type Story = StoryObj<typeof Stepper>;
6
6
  export declare const stepper: Story;
7
7
  export declare const stepperWithIcon: Story;
8
+ export declare const stepperWithNavigation: Story;
9
+ export declare const stepperWithBlockedStep: Story;
@@ -1,23 +1,30 @@
1
1
  import React from 'react';
2
2
  import type { ReactNode } from 'react';
3
+ import type { ITypographyProps } from '@/core/data-display/typography';
3
4
  import type { IButtonProps } from '@/core/inputs/button';
4
5
  import type { IconButtonProps } from '@/core/inputs/icon-button';
5
6
  export interface IProps {
6
- children: ReactNode;
7
- nested?: boolean;
8
- title?: string;
7
+ id?: string;
9
8
  name: string;
9
+ title?: string;
10
10
  label?: string;
11
- id?: string;
11
+ nested?: boolean;
12
12
  editing?: boolean;
13
- action?: JSX.Element | null;
13
+ children: ReactNode;
14
14
  renderRemove?: boolean;
15
+ action?: JSX.Element | null;
16
+ /**
17
+ * Merged over the title defaults — `variant='h6'`, `color='primary'`.
18
+ * `variant` also sets the heading level, so `{ component: 'h2' }`
19
+ * keeps the `h6` type scale on an `<h2>` tag.
20
+ */
21
+ titleProps?: Partial<ITypographyProps>;
15
22
  onAddProps?: Partial<IButtonProps>;
16
23
  onEditProps?: Partial<IconButtonProps>;
17
24
  onRemoveProps?: Partial<IconButtonProps>;
25
+ onRemove?(): void;
18
26
  onClickAdd?(): void;
19
27
  onToggleEdit?(): void;
20
- onRemove?(): void;
21
28
  }
22
29
  declare const Card: (props: IProps) => React.JSX.Element;
23
30
  export default Card;
@@ -11,18 +11,18 @@ var _react = _interopRequireDefault(require("react"));
11
11
  var _line = _interopRequireDefault(require("../../data-display/line"));
12
12
  var _typography = _interopRequireDefault(require("../../data-display/typography"));
13
13
  var _addButton = _interopRequireDefault(require("../../inputs/add-button"));
14
+ var _iconButton = _interopRequireDefault(require("../../inputs/icon-button"));
14
15
  var _paper = _interopRequireDefault(require("../paper"));
15
16
  var _mui = require("../../../icons/mui");
16
17
  var _styles = require("./styles");
17
- var _theme = require("../../../theme");
18
- var _excluded = ["id", "name", "label", "nested", "title", "action", "onToggleEdit", "editing", "children", "renderRemove", "onRemove", "onClickAdd", "onAddProps", "onEditProps", "onRemoveProps"];
19
- var feedback = _theme.theme.colors.feedback;
18
+ var _excluded = ["id", "name", "label", "nested", "title", "titleProps", "action", "onToggleEdit", "editing", "children", "renderRemove", "onRemove", "onClickAdd", "onAddProps", "onEditProps", "onRemoveProps"];
20
19
  var Card = function Card(props) {
21
20
  var id = props.id,
22
21
  name = props.name,
23
22
  label = props.label,
24
23
  nested = props.nested,
25
24
  title = props.title,
25
+ titleProps = props.titleProps,
26
26
  action = props.action,
27
27
  onToggleEdit = props.onToggleEdit,
28
28
  editing = props.editing,
@@ -45,26 +45,33 @@ var Card = function Card(props) {
45
45
  display: 'flex',
46
46
  flexDirection: 'column'
47
47
  }
48
- }), title && /*#__PURE__*/_react["default"].createElement(_react["default"].Fragment, null, /*#__PURE__*/_react["default"].createElement(_styles.Header, null, title && /*#__PURE__*/_react["default"].createElement(_typography["default"], {
48
+ }), title && /*#__PURE__*/_react["default"].createElement(_react["default"].Fragment, null, /*#__PURE__*/_react["default"].createElement(_styles.Header, null, title && /*#__PURE__*/_react["default"].createElement(_typography["default"], (0, _extends2["default"])({
49
49
  name: name + '-title',
50
50
  flex: 1,
51
51
  variant: "h6",
52
52
  color: "primary"
53
- }, title), action, onRemove && !!renderRemove && /*#__PURE__*/_react["default"].createElement(_styles.CardButton, (0, _extends2["default"])({}, onRemoveProps, {
53
+ }, titleProps), title), /*#__PURE__*/_react["default"].createElement(_styles.ActionsWrapper, null, action, onRemove && !!renderRemove && /*#__PURE__*/_react["default"].createElement(_iconButton["default"], (0, _extends2["default"])({
54
+ "aria-label": "Excluir"
55
+ }, onRemoveProps, {
54
56
  className: editing ? '' : 'showable-target',
55
57
  name: "remove-".concat(name),
56
- margin: "-10px 20px",
57
- padding: "0px",
58
+ padding: "4px",
58
59
  onClick: onRemove
59
60
  }), /*#__PURE__*/_react["default"].createElement(_mui.IconDelete, {
60
- htmlColor: feedback.danger
61
- })), onToggleEdit && /*#__PURE__*/_react["default"].createElement(_styles.CardButton, (0, _extends2["default"])({}, onEditProps, {
61
+ color: "error",
62
+ fontSize: "small"
63
+ })), onToggleEdit && /*#__PURE__*/_react["default"].createElement(_iconButton["default"], (0, _extends2["default"])({
64
+ "aria-label": editing ? 'Cancelar' : 'Editar'
65
+ }, onEditProps, {
62
66
  className: editing ? '' : 'showable-target',
63
67
  name: "".concat(editing ? 'cancel' : 'edit', "-").concat(name),
64
- margin: "-10px",
65
- padding: "0px",
68
+ padding: "4px",
66
69
  onClick: onToggleEdit
67
- }), editing ? /*#__PURE__*/_react["default"].createElement(_mui.IconClose, null) : /*#__PURE__*/_react["default"].createElement(_mui.IconEdit, null))), /*#__PURE__*/_react["default"].createElement(_line["default"], null)), onClickAdd && /*#__PURE__*/_react["default"].createElement(_addButton["default"], (0, _extends2["default"])({}, onAddProps, {
70
+ }), editing ? /*#__PURE__*/_react["default"].createElement(_mui.IconClose, {
71
+ fontSize: "small"
72
+ }) : /*#__PURE__*/_react["default"].createElement(_mui.IconEdit, {
73
+ fontSize: "small"
74
+ })))), /*#__PURE__*/_react["default"].createElement(_line["default"], null)), onClickAdd && /*#__PURE__*/_react["default"].createElement(_addButton["default"], (0, _extends2["default"])({}, onAddProps, {
68
75
  name: name,
69
76
  label: label,
70
77
  onClick: onClickAdd
@@ -6,6 +6,7 @@ export declare const CardWrapper: import("@emotion/styled").StyledComponent<{
6
6
  theme?: import("@emotion/react").Theme;
7
7
  as?: React.ElementType;
8
8
  }, import("react").DetailedHTMLProps<import("react").HTMLAttributes<HTMLDivElement>, HTMLDivElement>, {}>;
9
- export declare const CardButton: import("@emotion/styled").StyledComponent<import("@/core/inputs/icon-button").IconButtonProps & {
9
+ export declare const ActionsWrapper: import("@emotion/styled").StyledComponent<{
10
10
  theme?: import("@emotion/react").Theme;
11
- }, {}, {}>;
11
+ as?: React.ElementType;
12
+ }, import("react").DetailedHTMLProps<import("react").HTMLAttributes<HTMLDivElement>, HTMLDivElement>, {}>;
@@ -4,11 +4,10 @@ var _interopRequireDefault = require("@babel/runtime/helpers/interopRequireDefau
4
4
  Object.defineProperty(exports, "__esModule", {
5
5
  value: true
6
6
  });
7
- exports.Header = exports.CardWrapper = exports.CardButton = void 0;
7
+ exports.Header = exports.CardWrapper = exports.ActionsWrapper = void 0;
8
8
  var _taggedTemplateLiteral2 = _interopRequireDefault(require("@babel/runtime/helpers/taggedTemplateLiteral"));
9
9
  var _styled = _interopRequireDefault(require("@emotion/styled"));
10
- var _iconButton = _interopRequireDefault(require("../../inputs/icon-button"));
11
10
  var _templateObject, _templateObject2, _templateObject3;
12
11
  var Header = exports.Header = _styled["default"].div(_templateObject || (_templateObject = (0, _taggedTemplateLiteral2["default"])(["\n display: flex;\n"])));
13
12
  var CardWrapper = exports.CardWrapper = _styled["default"].div(_templateObject2 || (_templateObject2 = (0, _taggedTemplateLiteral2["default"])(["\n width: 100%;\n"])));
14
- var CardButton = exports.CardButton = (0, _styled["default"])(_iconButton["default"])(_templateObject3 || (_templateObject3 = (0, _taggedTemplateLiteral2["default"])(["\n && {\n width: 36px;\n height: 36px;\n }\n"])));
13
+ var ActionsWrapper = exports.ActionsWrapper = _styled["default"].div(_templateObject3 || (_templateObject3 = (0, _taggedTemplateLiteral2["default"])(["\n display: flex;\n align-items: center;\n gap: 4px;\n"])));