flipper-ui 0.26.22 → 0.27.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 (73) hide show
  1. package/core/AutoComplete.d.ts +1 -1
  2. package/core/ChipField.d.ts +1 -1
  3. package/core/DataTable/DataTable.d.ts +2 -2
  4. package/core/DataTable/DataTableAction.d.ts +1 -1
  5. package/core/DataTable/DataTableQueryPaginated.d.ts +2 -2
  6. package/core/DataTable/Rows.d.ts +2 -2
  7. package/core/DataTable/Rows.js +1 -1
  8. package/core/DataTable/types.d.ts +16 -16
  9. package/core/DataTable/useRowsState.d.ts +1 -1
  10. package/core/DateTime.d.ts +1 -1
  11. package/core/EditableTable.d.ts +1 -1
  12. package/core/Experimental/Button/Button.d.ts +9 -0
  13. package/core/Experimental/Button/Button.js +28 -0
  14. package/core/Experimental/Button/button.spec.d.ts +1 -0
  15. package/core/Experimental/Button/button.spec.js +32 -0
  16. package/core/Experimental/Button/button.stories.d.ts +6 -0
  17. package/core/Experimental/Button/button.stories.js +21 -0
  18. package/core/Experimental/Button/index.d.ts +1 -0
  19. package/core/Experimental/Button/index.js +13 -0
  20. package/core/Experimental/Card/Card.d.ts +29 -0
  21. package/core/Experimental/Card/Card.js +67 -0
  22. package/core/Experimental/Card/card.stories.d.ts +6 -0
  23. package/core/Experimental/Card/card.stories.js +22 -0
  24. package/core/Experimental/Card/index.d.ts +1 -0
  25. package/core/Experimental/Card/index.js +13 -0
  26. package/core/Experimental/Dialog/ConfirmDialog.d.ts +14 -0
  27. package/core/Experimental/Dialog/ConfirmDialog.js +35 -0
  28. package/core/Experimental/Dialog/Dialog.d.ts +21 -0
  29. package/core/Experimental/Dialog/Dialog.js +75 -0
  30. package/core/Experimental/Dialog/Dialog.stories.d.ts +12 -0
  31. package/core/Experimental/Dialog/Dialog.stories.js +84 -0
  32. package/core/Experimental/Dialog/RemoveDialog.d.ts +14 -0
  33. package/core/Experimental/Dialog/RemoveDialog.js +38 -0
  34. package/core/Experimental/Dialog/__test__/confirm-dialog.spec.d.ts +1 -0
  35. package/core/Experimental/Dialog/__test__/confirm-dialog.spec.js +132 -0
  36. package/core/Experimental/Dialog/__test__/dialog.spec.d.ts +1 -0
  37. package/core/Experimental/Dialog/__test__/dialog.spec.js +63 -0
  38. package/core/Experimental/Dialog/__test__/remove-dialog.spec.d.ts +1 -0
  39. package/core/Experimental/Dialog/__test__/remove-dialog.spec.js +131 -0
  40. package/core/Experimental/Dialog/index.d.ts +3 -0
  41. package/core/Experimental/Dialog/index.js +27 -0
  42. package/core/Experimental/Fab/Fab.d.ts +14 -0
  43. package/core/Experimental/Fab/Fab.js +48 -0
  44. package/core/Experimental/Fab/Fab.stories.d.ts +9 -0
  45. package/core/Experimental/Fab/Fab.stories.js +29 -0
  46. package/core/Experimental/Fab/FabWrapper.d.ts +10 -0
  47. package/core/Experimental/Fab/FabWrapper.js +32 -0
  48. package/core/Experimental/Fab/fab.spec.d.ts +1 -0
  49. package/core/Experimental/Fab/fab.spec.js +51 -0
  50. package/core/Experimental/Fab/index.d.ts +2 -0
  51. package/core/Experimental/Fab/index.js +20 -0
  52. package/core/Experimental/Sidebar/Sidebar.stories.d.ts +7 -0
  53. package/core/Experimental/Sidebar/Sidebar.stories.js +51 -0
  54. package/core/Experimental/Sidebar/SidebarV2.d.ts +19 -0
  55. package/core/Experimental/Sidebar/SidebarV2.js +143 -0
  56. package/core/Experimental/Sidebar/index.d.ts +1 -0
  57. package/core/Experimental/Sidebar/index.js +13 -0
  58. package/core/Experimental/Sidebar/sidebar.spec.d.ts +1 -0
  59. package/core/Experimental/Sidebar/sidebar.spec.js +129 -0
  60. package/core/Experimental/index.d.ts +5 -0
  61. package/core/Experimental/index.js +41 -0
  62. package/core/ListItem.js +1 -0
  63. package/core/Sidebar.js +1 -0
  64. package/core/Slider.d.ts +1 -1
  65. package/core/StepCard/StepCardDetails.js +2 -2
  66. package/core/StepCard/index.d.ts +9 -2
  67. package/core/Stepper.d.ts +1 -1
  68. package/core/TextField.d.ts +1 -1
  69. package/core/types.d.ts +1 -1
  70. package/index.d.ts +1 -0
  71. package/index.js +7 -1
  72. package/package.json +8 -10
  73. package/stories/Sidebar.stories.js +5 -0
@@ -0,0 +1,32 @@
1
+ "use strict";
2
+
3
+ var _interopRequireDefault = require("@babel/runtime/helpers/interopRequireDefault");
4
+ Object.defineProperty(exports, "__esModule", {
5
+ value: true
6
+ });
7
+ exports["default"] = void 0;
8
+ var _defineProperty2 = _interopRequireDefault(require("@babel/runtime/helpers/defineProperty"));
9
+ var _taggedTemplateLiteral2 = _interopRequireDefault(require("@babel/runtime/helpers/taggedTemplateLiteral"));
10
+ var _react = _interopRequireDefault(require("react"));
11
+ var _styledComponents = _interopRequireDefault(require("styled-components"));
12
+ var _templateObject;
13
+ function ownKeys(object, enumerableOnly) { var keys = Object.keys(object); if (Object.getOwnPropertySymbols) { var symbols = Object.getOwnPropertySymbols(object); enumerableOnly && (symbols = symbols.filter(function (sym) { return Object.getOwnPropertyDescriptor(object, sym).enumerable; })), keys.push.apply(keys, symbols); } return keys; }
14
+ function _objectSpread(target) { for (var i = 1; i < arguments.length; i++) { var source = null != arguments[i] ? arguments[i] : {}; i % 2 ? ownKeys(Object(source), !0).forEach(function (key) { (0, _defineProperty2["default"])(target, key, source[key]); }) : Object.getOwnPropertyDescriptors ? Object.defineProperties(target, Object.getOwnPropertyDescriptors(source)) : ownKeys(Object(source)).forEach(function (key) { Object.defineProperty(target, key, Object.getOwnPropertyDescriptor(source, key)); }); } return target; }
15
+ var Wrapper = _styledComponents["default"].div(_templateObject || (_templateObject = (0, _taggedTemplateLiteral2["default"])(["\n position: absolute;\n left: 0;\n top: 0;\n bottom: 0;\n right: 0;\n display: flex;\n align-items: center;\n justify-content: flex-end;\n opacity: 0;\n transition: opacity 200ms ease;\n &:hover {\n opacity: 1;\n }\n"])));
16
+ var FabWrapper = function FabWrapper(_ref) {
17
+ var padding = _ref.padding,
18
+ children = _ref.children,
19
+ style = _ref.style,
20
+ width = _ref.width,
21
+ height = _ref.height;
22
+ return /*#__PURE__*/_react["default"].createElement(Wrapper, {
23
+ className: "list-item-action",
24
+ style: _objectSpread({
25
+ padding: padding,
26
+ width: width,
27
+ height: height
28
+ }, style)
29
+ }, children);
30
+ };
31
+ var _default = FabWrapper;
32
+ exports["default"] = _default;
@@ -0,0 +1 @@
1
+ export {};
@@ -0,0 +1,51 @@
1
+ "use strict";
2
+
3
+ var _interopRequireDefault = require("@babel/runtime/helpers/interopRequireDefault");
4
+ var _typeof = require("@babel/runtime/helpers/typeof");
5
+ var React = _interopRequireWildcard(require("react"));
6
+ var _react2 = require("@testing-library/react");
7
+ var _userEvent = _interopRequireDefault(require("@testing-library/user-event"));
8
+ var _Fab = _interopRequireDefault(require("./Fab"));
9
+ var _FileCopy = _interopRequireDefault(require("@material-ui/icons/FileCopy"));
10
+ function _getRequireWildcardCache(nodeInterop) { if (typeof WeakMap !== "function") return null; var cacheBabelInterop = new WeakMap(); var cacheNodeInterop = new WeakMap(); return (_getRequireWildcardCache = function _getRequireWildcardCache(nodeInterop) { return nodeInterop ? cacheNodeInterop : cacheBabelInterop; })(nodeInterop); }
11
+ function _interopRequireWildcard(obj, nodeInterop) { if (!nodeInterop && obj && obj.__esModule) { return obj; } if (obj === null || _typeof(obj) !== "object" && typeof obj !== "function") { return { "default": obj }; } var cache = _getRequireWildcardCache(nodeInterop); if (cache && cache.has(obj)) { return cache.get(obj); } var newObj = {}; var hasPropertyDescriptor = Object.defineProperty && Object.getOwnPropertyDescriptor; for (var key in obj) { if (key !== "default" && Object.prototype.hasOwnProperty.call(obj, key)) { var desc = hasPropertyDescriptor ? Object.getOwnPropertyDescriptor(obj, key) : null; if (desc && (desc.get || desc.set)) { Object.defineProperty(newObj, key, desc); } else { newObj[key] = obj[key]; } } } newObj["default"] = obj; if (cache) { cache.set(obj, newObj); } return newObj; }
12
+ /* eslint-disable max-len */
13
+
14
+ describe('Sidebar', function () {
15
+ it('Should call onClick', function () {
16
+ var onClickSpy = jest.fn();
17
+ (0, _react2.render)( /*#__PURE__*/React.createElement(_Fab["default"], {
18
+ onClick: onClickSpy
19
+ }, /*#__PURE__*/React.createElement(_FileCopy["default"], null)));
20
+ var btn = _react2.screen.getByTestId('fab-button');
21
+ _userEvent["default"].click(btn);
22
+ (0, _react2.waitFor)(function () {
23
+ expect(onClickSpy).toHaveBeenCalled();
24
+ });
25
+ });
26
+ it('Should show tooltip', function () {
27
+ var onClickSpy = jest.fn();
28
+ (0, _react2.render)( /*#__PURE__*/React.createElement(_Fab["default"], {
29
+ onClick: onClickSpy,
30
+ tooltip: "tooltip-test"
31
+ }, /*#__PURE__*/React.createElement(_FileCopy["default"], null)));
32
+ var btn = _react2.screen.getByTestId('fab-button');
33
+ _userEvent["default"].hover(btn);
34
+ (0, _react2.waitFor)(function () {
35
+ var tooltipMessage = _react2.screen.getByText('tooltip-test');
36
+ expect(tooltipMessage).toBeDefined();
37
+ });
38
+ });
39
+ it('Snapshot', function () {
40
+ var onClickSpy = jest.fn();
41
+ var miniTrue = (0, _react2.render)( /*#__PURE__*/React.createElement(_Fab["default"], {
42
+ onClick: onClickSpy
43
+ }, /*#__PURE__*/React.createElement(_FileCopy["default"], null)));
44
+ expect(miniTrue).toMatchSnapshot();
45
+ var miniFalse = (0, _react2.render)( /*#__PURE__*/React.createElement(_Fab["default"], {
46
+ mini: false,
47
+ onClick: onClickSpy
48
+ }, /*#__PURE__*/React.createElement(_FileCopy["default"], null)));
49
+ expect(miniFalse).toMatchInlineSnapshot("\n {\n \"asFragment\": [Function],\n \"baseElement\": <body>\n <div>\n <button\n class=\"MuiButtonBase-root MuiFab-root MuiFab-sizeSmall\"\n data-testid=\"fab-button\"\n name=\"action-button\"\n tabindex=\"0\"\n type=\"button\"\n >\n <span\n class=\"MuiFab-label\"\n >\n <svg\n aria-hidden=\"true\"\n class=\"MuiSvgIcon-root\"\n focusable=\"false\"\n viewBox=\"0 0 24 24\"\n >\n <path\n d=\"M16 1H4c-1.1 0-2 .9-2 2v14h2V3h12V1zm-1 4l6 6v10c0 1.1-.9 2-2 2H7.99C6.89 23 6 22.1 6 21l.01-14c0-1.1.89-2 1.99-2h7zm-1 7h5.5L14 6.5V12z\"\n />\n </svg>\n </span>\n <span\n class=\"MuiTouchRipple-root\"\n />\n </button>\n </div>\n <div>\n <button\n class=\"MuiButtonBase-root MuiFab-root MuiFab-sizeMedium\"\n data-testid=\"fab-button\"\n name=\"action-button\"\n tabindex=\"0\"\n type=\"button\"\n >\n <span\n class=\"MuiFab-label\"\n >\n <svg\n aria-hidden=\"true\"\n class=\"MuiSvgIcon-root\"\n focusable=\"false\"\n viewBox=\"0 0 24 24\"\n >\n <path\n d=\"M16 1H4c-1.1 0-2 .9-2 2v14h2V3h12V1zm-1 4l6 6v10c0 1.1-.9 2-2 2H7.99C6.89 23 6 22.1 6 21l.01-14c0-1.1.89-2 1.99-2h7zm-1 7h5.5L14 6.5V12z\"\n />\n </svg>\n </span>\n <span\n class=\"MuiTouchRipple-root\"\n />\n </button>\n </div>\n </body>,\n \"container\": <div>\n <button\n class=\"MuiButtonBase-root MuiFab-root MuiFab-sizeMedium\"\n data-testid=\"fab-button\"\n name=\"action-button\"\n tabindex=\"0\"\n type=\"button\"\n >\n <span\n class=\"MuiFab-label\"\n >\n <svg\n aria-hidden=\"true\"\n class=\"MuiSvgIcon-root\"\n focusable=\"false\"\n viewBox=\"0 0 24 24\"\n >\n <path\n d=\"M16 1H4c-1.1 0-2 .9-2 2v14h2V3h12V1zm-1 4l6 6v10c0 1.1-.9 2-2 2H7.99C6.89 23 6 22.1 6 21l.01-14c0-1.1.89-2 1.99-2h7zm-1 7h5.5L14 6.5V12z\"\n />\n </svg>\n </span>\n <span\n class=\"MuiTouchRipple-root\"\n />\n </button>\n </div>,\n \"debug\": [Function],\n \"findAllByAltText\": [Function],\n \"findAllByDisplayValue\": [Function],\n \"findAllByLabelText\": [Function],\n \"findAllByPlaceholderText\": [Function],\n \"findAllByRole\": [Function],\n \"findAllByTestId\": [Function],\n \"findAllByText\": [Function],\n \"findAllByTitle\": [Function],\n \"findByAltText\": [Function],\n \"findByDisplayValue\": [Function],\n \"findByLabelText\": [Function],\n \"findByPlaceholderText\": [Function],\n \"findByRole\": [Function],\n \"findByTestId\": [Function],\n \"findByText\": [Function],\n \"findByTitle\": [Function],\n \"getAllByAltText\": [Function],\n \"getAllByDisplayValue\": [Function],\n \"getAllByLabelText\": [Function],\n \"getAllByPlaceholderText\": [Function],\n \"getAllByRole\": [Function],\n \"getAllByTestId\": [Function],\n \"getAllByText\": [Function],\n \"getAllByTitle\": [Function],\n \"getByAltText\": [Function],\n \"getByDisplayValue\": [Function],\n \"getByLabelText\": [Function],\n \"getByPlaceholderText\": [Function],\n \"getByRole\": [Function],\n \"getByTestId\": [Function],\n \"getByText\": [Function],\n \"getByTitle\": [Function],\n \"queryAllByAltText\": [Function],\n \"queryAllByDisplayValue\": [Function],\n \"queryAllByLabelText\": [Function],\n \"queryAllByPlaceholderText\": [Function],\n \"queryAllByRole\": [Function],\n \"queryAllByTestId\": [Function],\n \"queryAllByText\": [Function],\n \"queryAllByTitle\": [Function],\n \"queryByAltText\": [Function],\n \"queryByDisplayValue\": [Function],\n \"queryByLabelText\": [Function],\n \"queryByPlaceholderText\": [Function],\n \"queryByRole\": [Function],\n \"queryByTestId\": [Function],\n \"queryByText\": [Function],\n \"queryByTitle\": [Function],\n \"rerender\": [Function],\n \"unmount\": [Function],\n }\n ");
50
+ });
51
+ });
@@ -0,0 +1,2 @@
1
+ export { default } from './Fab';
2
+ export { default as FabWrapper } from './FabWrapper';
@@ -0,0 +1,20 @@
1
+ "use strict";
2
+
3
+ var _interopRequireDefault = require("@babel/runtime/helpers/interopRequireDefault");
4
+ Object.defineProperty(exports, "__esModule", {
5
+ value: true
6
+ });
7
+ Object.defineProperty(exports, "FabWrapper", {
8
+ enumerable: true,
9
+ get: function get() {
10
+ return _FabWrapper["default"];
11
+ }
12
+ });
13
+ Object.defineProperty(exports, "default", {
14
+ enumerable: true,
15
+ get: function get() {
16
+ return _Fab["default"];
17
+ }
18
+ });
19
+ var _Fab = _interopRequireDefault(require("./Fab"));
20
+ var _FabWrapper = _interopRequireDefault(require("./FabWrapper"));
@@ -0,0 +1,7 @@
1
+ export declare const loading: () => JSX.Element;
2
+ export declare const sidebar: () => JSX.Element;
3
+ declare const _default: {
4
+ title: string;
5
+ component: (props: import("./SidebarV2").IProps) => JSX.Element;
6
+ };
7
+ export default _default;
@@ -0,0 +1,51 @@
1
+ "use strict";
2
+
3
+ var _interopRequireDefault = require("@babel/runtime/helpers/interopRequireDefault");
4
+ Object.defineProperty(exports, "__esModule", {
5
+ value: true
6
+ });
7
+ exports.sidebar = exports.loading = exports["default"] = void 0;
8
+ var _react = _interopRequireDefault(require("react"));
9
+ var _SidebarV = _interopRequireDefault(require("./SidebarV2"));
10
+ var _Home = _interopRequireDefault(require("@material-ui/icons/Home"));
11
+ var _Computer = _interopRequireDefault(require("@material-ui/icons/Computer"));
12
+ var _Edit = _interopRequireDefault(require("@material-ui/icons/Edit"));
13
+ var loading = function loading() {
14
+ return /*#__PURE__*/_react["default"].createElement(_SidebarV["default"], {
15
+ loading: true,
16
+ options: []
17
+ });
18
+ };
19
+ exports.loading = loading;
20
+ var sidebar = function sidebar() {
21
+ return /*#__PURE__*/_react["default"].createElement(_SidebarV["default"], {
22
+ options: [{
23
+ icon: /*#__PURE__*/_react["default"].createElement(_Home["default"], null),
24
+ name: 'Home',
25
+ label: 'Home',
26
+ route: '/'
27
+ }, {
28
+ icon: /*#__PURE__*/_react["default"].createElement(_Computer["default"], null),
29
+ name: 'Computer',
30
+ label: 'Computer',
31
+ route: '/computer'
32
+ }],
33
+ extraOptions: [{
34
+ icon: /*#__PURE__*/_react["default"].createElement(_Edit["default"], null),
35
+ name: 'Edit',
36
+ label: 'edit',
37
+ route: '/edit'
38
+ }],
39
+ handleGoTo: function handleGoTo(foo, bar) {
40
+ return function () {
41
+ alert(foo + ' ' + bar);
42
+ };
43
+ }
44
+ });
45
+ };
46
+ exports.sidebar = sidebar;
47
+ var _default = {
48
+ title: 'v2/Sidebar',
49
+ component: _SidebarV["default"]
50
+ };
51
+ exports["default"] = _default;
@@ -0,0 +1,19 @@
1
+ import React from 'react';
2
+ export interface ISidebarOption {
3
+ icon: React.ReactElement;
4
+ label: string;
5
+ name: string;
6
+ route: string;
7
+ }
8
+ export interface IProps {
9
+ options: ISidebarOption[];
10
+ top?: number;
11
+ loading?: boolean;
12
+ handleGoTo?: (name: string, route: string) => () => void;
13
+ extraOptions?: ISidebarOption[];
14
+ }
15
+ /**
16
+ * Sidebar component V2
17
+ */
18
+ declare const Sidebar: (props: IProps) => JSX.Element;
19
+ export default Sidebar;
@@ -0,0 +1,143 @@
1
+ "use strict";
2
+
3
+ var _interopRequireDefault = require("@babel/runtime/helpers/interopRequireDefault");
4
+ var _typeof = require("@babel/runtime/helpers/typeof");
5
+ Object.defineProperty(exports, "__esModule", {
6
+ value: true
7
+ });
8
+ exports["default"] = void 0;
9
+ var _objectWithoutProperties2 = _interopRequireDefault(require("@babel/runtime/helpers/objectWithoutProperties"));
10
+ var _slicedToArray2 = _interopRequireDefault(require("@babel/runtime/helpers/slicedToArray"));
11
+ var _taggedTemplateLiteral2 = _interopRequireDefault(require("@babel/runtime/helpers/taggedTemplateLiteral"));
12
+ var _Sidebar = _interopRequireDefault(require("../../Sidebar"));
13
+ var _react = _interopRequireWildcard(require("react"));
14
+ var _styledComponents = _interopRequireDefault(require("styled-components"));
15
+ var _nginformaticaStyleguide = require("nginformatica-styleguide");
16
+ var _times = _interopRequireDefault(require("ramda/es/times"));
17
+ var _map = _interopRequireDefault(require("ramda/es/map"));
18
+ var _lab = require("@material-ui/lab");
19
+ var _Tooltip = _interopRequireDefault(require("../../Tooltip"));
20
+ var _List = _interopRequireDefault(require("../../List"));
21
+ var _ListItem = _interopRequireDefault(require("../../ListItem"));
22
+ var _excluded = ["options", "loading", "handleGoTo", "extraOptions", "top"];
23
+ var _templateObject, _templateObject2, _templateObject3, _templateObject4;
24
+ function _getRequireWildcardCache(nodeInterop) { if (typeof WeakMap !== "function") return null; var cacheBabelInterop = new WeakMap(); var cacheNodeInterop = new WeakMap(); return (_getRequireWildcardCache = function _getRequireWildcardCache(nodeInterop) { return nodeInterop ? cacheNodeInterop : cacheBabelInterop; })(nodeInterop); }
25
+ function _interopRequireWildcard(obj, nodeInterop) { if (!nodeInterop && obj && obj.__esModule) { return obj; } if (obj === null || _typeof(obj) !== "object" && typeof obj !== "function") { return { "default": obj }; } var cache = _getRequireWildcardCache(nodeInterop); if (cache && cache.has(obj)) { return cache.get(obj); } var newObj = {}; var hasPropertyDescriptor = Object.defineProperty && Object.getOwnPropertyDescriptor; for (var key in obj) { if (key !== "default" && Object.prototype.hasOwnProperty.call(obj, key)) { var desc = hasPropertyDescriptor ? Object.getOwnPropertyDescriptor(obj, key) : null; if (desc && (desc.get || desc.set)) { Object.defineProperty(newObj, key, desc); } else { newObj[key] = obj[key]; } } } newObj["default"] = obj; if (cache) { cache.set(obj, newObj); } return newObj; }
26
+ var StyledFlipperSidebar = (0, _styledComponents["default"])(_Sidebar["default"])(_templateObject || (_templateObject = (0, _taggedTemplateLiteral2["default"])(["\n & > div {\n border-right: 1px solid ", ";\n }\n"])), _nginformaticaStyleguide.theme.colors.grays.g6);
27
+ var MenuItem = (0, _styledComponents["default"])(_ListItem["default"])(_templateObject2 || (_templateObject2 = (0, _taggedTemplateLiteral2["default"])(["\n &&& {\n & div {\n padding: 0;\n }\n }\n"])));
28
+ var Link = _styledComponents["default"].a(_templateObject3 || (_templateObject3 = (0, _taggedTemplateLiteral2["default"])(["\n color: ", ";\n text-decoration: none;\n"])), _nginformaticaStyleguide.theme.colors.primary.main);
29
+ var PaperBar = _styledComponents["default"].div(_templateObject4 || (_templateObject4 = (0, _taggedTemplateLiteral2["default"])(["\n flex-direction: column;\n display: flex;\n justify-content: space-between;\n flex: 1;\n padding-bottom: 16px;\n"])));
30
+ var LABEL_TIMEOUT = 300;
31
+ var renderSkeleton = function renderSkeleton(index) {
32
+ return /*#__PURE__*/_react["default"].createElement("div", {
33
+ className: "skeleton-container",
34
+ role: "skeleton",
35
+ key: "sidebar-skeleton-".concat(index),
36
+ style: {
37
+ padding: '2px 10px'
38
+ }
39
+ }, /*#__PURE__*/_react["default"].createElement(_lab.Skeleton, {
40
+ width: 36,
41
+ height: 36
42
+ }));
43
+ };
44
+ var SIDEBAR_SKELETON_SIZE = 6;
45
+ var sidebarSkeleton = (0, _times["default"])(renderSkeleton, SIDEBAR_SKELETON_SIZE);
46
+
47
+ // create a function that extract path from location.pathname
48
+ // and return the route
49
+ var extract = function extract(location) {
50
+ var lastSlashIndex = location.lastIndexOf('/');
51
+ return '/' + location.slice(lastSlashIndex + 1);
52
+ };
53
+ var useSidebar = function useSidebar() {
54
+ var _useState = (0, _react.useState)(false),
55
+ _useState2 = (0, _slicedToArray2["default"])(_useState, 2),
56
+ expanded = _useState2[0],
57
+ setExpanded = _useState2[1];
58
+ var route = extract(location.pathname);
59
+ var toggle = (0, _react.useCallback)(function () {
60
+ setExpanded(!expanded);
61
+ }, [expanded]);
62
+ return {
63
+ toggle: toggle,
64
+ expanded: expanded,
65
+ route: route
66
+ };
67
+ };
68
+ var emptyList = [];
69
+
70
+ /**
71
+ * Sidebar component V2
72
+ */
73
+ var Sidebar = function Sidebar(props) {
74
+ var options = props.options,
75
+ loading = props.loading,
76
+ handleGoTo = props.handleGoTo,
77
+ _props$extraOptions = props.extraOptions,
78
+ extraOptions = _props$extraOptions === void 0 ? emptyList : _props$extraOptions,
79
+ top = props.top,
80
+ otherProps = (0, _objectWithoutProperties2["default"])(props, _excluded);
81
+ var _useSidebar = useSidebar(),
82
+ expanded = _useSidebar.expanded,
83
+ route = _useSidebar.route,
84
+ toggle = _useSidebar.toggle;
85
+ var _useState3 = (0, _react.useState)(expanded),
86
+ _useState4 = (0, _slicedToArray2["default"])(_useState3, 2),
87
+ showLabel = _useState4[0],
88
+ setShowLabel = _useState4[1];
89
+ (0, _react.useEffect)(function () {
90
+ if (expanded) {
91
+ setTimeout(function () {
92
+ return setShowLabel(true);
93
+ }, LABEL_TIMEOUT);
94
+ } else {
95
+ setShowLabel(false);
96
+ }
97
+ }, [expanded]);
98
+ var renderOption = function renderOption(option) {
99
+ return /*#__PURE__*/_react["default"].createElement(Link, {
100
+ "data-testid": "sidebar-option-".concat(option.route.replace('/', '')),
101
+ key: option.name
102
+ }, /*#__PURE__*/_react["default"].createElement(_Tooltip["default"], {
103
+ withWrapper: true,
104
+ placement: "right",
105
+ enterDelay: 500,
106
+ title: expanded ? '' : option.label
107
+ }, /*#__PURE__*/_react["default"].createElement(MenuItem, {
108
+ key: option.name,
109
+ selected: option.name === route,
110
+ icon: option.icon,
111
+ style: {
112
+ minHeight: '42px'
113
+ },
114
+ padding: "0 18px",
115
+ subtitle: showLabel ? option.label : '',
116
+ onClick: handleGoTo === null || handleGoTo === void 0 ? void 0 : handleGoTo(option.name, option.route)
117
+ })));
118
+ };
119
+ return /*#__PURE__*/_react["default"].createElement(StyledFlipperSidebar, {
120
+ open: true,
121
+ docked: true,
122
+ name: "sidebar",
123
+ id: "sidebar",
124
+ ButtonProps: {
125
+ id: 'sidebar-toggle-button'
126
+ },
127
+ minWidth: 56,
128
+ maxWidth: 228,
129
+ style: {
130
+ transition: 'width 100ms ease-in-out',
131
+ zIndex: 1199
132
+ },
133
+ expanded: expanded,
134
+ onToggle: toggle,
135
+ top: top || 0
136
+ }, /*#__PURE__*/_react["default"].createElement(PaperBar, otherProps, /*#__PURE__*/_react["default"].createElement(_List["default"], {
137
+ dense: true
138
+ }, loading ? sidebarSkeleton : (0, _map["default"])(renderOption, options)), /*#__PURE__*/_react["default"].createElement(_List["default"], {
139
+ dense: true
140
+ }, !loading && (0, _map["default"])(renderOption, extraOptions))));
141
+ };
142
+ var _default = Sidebar;
143
+ exports["default"] = _default;
@@ -0,0 +1 @@
1
+ export { default } from './SidebarV2';
@@ -0,0 +1,13 @@
1
+ "use strict";
2
+
3
+ var _interopRequireDefault = require("@babel/runtime/helpers/interopRequireDefault");
4
+ Object.defineProperty(exports, "__esModule", {
5
+ value: true
6
+ });
7
+ Object.defineProperty(exports, "default", {
8
+ enumerable: true,
9
+ get: function get() {
10
+ return _SidebarV["default"];
11
+ }
12
+ });
13
+ var _SidebarV = _interopRequireDefault(require("./SidebarV2"));
@@ -0,0 +1 @@
1
+ export {};
@@ -0,0 +1,129 @@
1
+ "use strict";
2
+
3
+ var _interopRequireDefault = require("@babel/runtime/helpers/interopRequireDefault");
4
+ var _typeof = require("@babel/runtime/helpers/typeof");
5
+ var _regenerator = _interopRequireDefault(require("@babel/runtime/regenerator"));
6
+ var _asyncToGenerator2 = _interopRequireDefault(require("@babel/runtime/helpers/asyncToGenerator"));
7
+ var React = _interopRequireWildcard(require("react"));
8
+ var _react2 = require("@testing-library/react");
9
+ var _userEvent = _interopRequireDefault(require("@testing-library/user-event"));
10
+ var _SidebarV = _interopRequireDefault(require("./SidebarV2"));
11
+ function _getRequireWildcardCache(nodeInterop) { if (typeof WeakMap !== "function") return null; var cacheBabelInterop = new WeakMap(); var cacheNodeInterop = new WeakMap(); return (_getRequireWildcardCache = function _getRequireWildcardCache(nodeInterop) { return nodeInterop ? cacheNodeInterop : cacheBabelInterop; })(nodeInterop); }
12
+ function _interopRequireWildcard(obj, nodeInterop) { if (!nodeInterop && obj && obj.__esModule) { return obj; } if (obj === null || _typeof(obj) !== "object" && typeof obj !== "function") { return { "default": obj }; } var cache = _getRequireWildcardCache(nodeInterop); if (cache && cache.has(obj)) { return cache.get(obj); } var newObj = {}; var hasPropertyDescriptor = Object.defineProperty && Object.getOwnPropertyDescriptor; for (var key in obj) { if (key !== "default" && Object.prototype.hasOwnProperty.call(obj, key)) { var desc = hasPropertyDescriptor ? Object.getOwnPropertyDescriptor(obj, key) : null; if (desc && (desc.get || desc.set)) { Object.defineProperty(newObj, key, desc); } else { newObj[key] = obj[key]; } } } newObj["default"] = obj; if (cache) { cache.set(obj, newObj); } return newObj; }
13
+ var options = [{
14
+ icon: /*#__PURE__*/React.createElement("svg", null),
15
+ label: 'Option-1',
16
+ name: 'option1',
17
+ route: '/option1'
18
+ }, {
19
+ icon: /*#__PURE__*/React.createElement("svg", null),
20
+ label: 'Option-2',
21
+ name: 'option2',
22
+ route: '/option2'
23
+ }];
24
+ describe('Sidebar', function () {
25
+ it('renders the options', function () {
26
+ (0, _react2.render)( /*#__PURE__*/React.createElement(_SidebarV["default"], {
27
+ options: options
28
+ }));
29
+ options.forEach(function (option) {
30
+ expect(_react2.screen.getByTitle(option.label)).toBeDefined();
31
+ });
32
+ });
33
+ it('calls handleGoTo when an option is clicked', function () {
34
+ var handleGoTo = jest.fn();
35
+ (0, _react2.render)( /*#__PURE__*/React.createElement(_SidebarV["default"], {
36
+ options: options,
37
+ handleGoTo: handleGoTo
38
+ }));
39
+ var expandBtn = _react2.screen.getByTestId('sidebar-option-option1');
40
+ expandBtn.addEventListener('click', function (event) {
41
+ return event.preventDefault();
42
+ }, false);
43
+ _userEvent["default"].click(expandBtn);
44
+ expect(handleGoTo).toHaveBeenCalledWith('option1', '/option1');
45
+ });
46
+ it('renders extraOptions when provided', function () {
47
+ var extraOptions = [{
48
+ icon: /*#__PURE__*/React.createElement("svg", null),
49
+ label: 'Extra Option 1',
50
+ name: 'extraOption1',
51
+ route: '/extraOption1'
52
+ }, {
53
+ icon: /*#__PURE__*/React.createElement("svg", null),
54
+ label: 'Extra Option 2',
55
+ name: 'extraOption2',
56
+ route: '/extraOption2'
57
+ }];
58
+ (0, _react2.render)( /*#__PURE__*/React.createElement(_SidebarV["default"], {
59
+ options: options,
60
+ extraOptions: extraOptions
61
+ }));
62
+ extraOptions.forEach(function (option) {
63
+ expect(_react2.screen.getByTitle(option.label)).toBeDefined();
64
+ });
65
+ });
66
+ it('renders a skeleton when loading', function () {
67
+ (0, _react2.render)( /*#__PURE__*/React.createElement(_SidebarV["default"], {
68
+ options: options,
69
+ loading: true
70
+ }));
71
+ expect(_react2.screen.queryAllByRole('skeleton')).toHaveLength(6);
72
+ });
73
+ it('should show labels when expanded', /*#__PURE__*/(0, _asyncToGenerator2["default"])( /*#__PURE__*/_regenerator["default"].mark(function _callee() {
74
+ var handleGoTo, expandBtn;
75
+ return _regenerator["default"].wrap(function _callee$(_context) {
76
+ while (1) {
77
+ switch (_context.prev = _context.next) {
78
+ case 0:
79
+ handleGoTo = jest.fn();
80
+ (0, _react2.render)( /*#__PURE__*/React.createElement(_SidebarV["default"], {
81
+ options: options,
82
+ handleGoTo: handleGoTo
83
+ }));
84
+ expandBtn = _react2.screen.getByTestId('sidebar-button');
85
+ _userEvent["default"].click(expandBtn);
86
+ _context.next = 6;
87
+ return (0, _react2.waitFor)(function () {
88
+ var labels = options.map(function (option) {
89
+ return _react2.screen.getByTestId("list-item-".concat(option.label));
90
+ });
91
+ labels.forEach(function (label) {
92
+ return expect(label).toBeDefined();
93
+ });
94
+ });
95
+ case 6:
96
+ case "end":
97
+ return _context.stop();
98
+ }
99
+ }
100
+ }, _callee);
101
+ })));
102
+ it('should now show labels when collapsed', /*#__PURE__*/(0, _asyncToGenerator2["default"])( /*#__PURE__*/_regenerator["default"].mark(function _callee2() {
103
+ var handleGoTo;
104
+ return _regenerator["default"].wrap(function _callee2$(_context2) {
105
+ while (1) {
106
+ switch (_context2.prev = _context2.next) {
107
+ case 0:
108
+ handleGoTo = jest.fn();
109
+ (0, _react2.render)( /*#__PURE__*/React.createElement(_SidebarV["default"], {
110
+ options: options,
111
+ handleGoTo: handleGoTo
112
+ }));
113
+ _context2.next = 4;
114
+ return (0, _react2.waitFor)(function () {
115
+ var labels = options.map(function (option) {
116
+ return _react2.screen.queryByTestId("list-item-".concat(option.label));
117
+ });
118
+ labels.forEach(function (label) {
119
+ return expect(label).toBeNull();
120
+ });
121
+ });
122
+ case 4:
123
+ case "end":
124
+ return _context2.stop();
125
+ }
126
+ }
127
+ }, _callee2);
128
+ })));
129
+ });
@@ -0,0 +1,5 @@
1
+ export { default as SidebarV2 } from './Sidebar';
2
+ export { default as FabV2 } from './Fab';
3
+ export { default as ButtonV2 } from './Button';
4
+ export { default as DialogV2 } from './Dialog';
5
+ export { default as CardV2 } from './Card';
@@ -0,0 +1,41 @@
1
+ "use strict";
2
+
3
+ var _interopRequireDefault = require("@babel/runtime/helpers/interopRequireDefault");
4
+ Object.defineProperty(exports, "__esModule", {
5
+ value: true
6
+ });
7
+ Object.defineProperty(exports, "ButtonV2", {
8
+ enumerable: true,
9
+ get: function get() {
10
+ return _Button["default"];
11
+ }
12
+ });
13
+ Object.defineProperty(exports, "CardV2", {
14
+ enumerable: true,
15
+ get: function get() {
16
+ return _Card["default"];
17
+ }
18
+ });
19
+ Object.defineProperty(exports, "DialogV2", {
20
+ enumerable: true,
21
+ get: function get() {
22
+ return _Dialog["default"];
23
+ }
24
+ });
25
+ Object.defineProperty(exports, "FabV2", {
26
+ enumerable: true,
27
+ get: function get() {
28
+ return _Fab["default"];
29
+ }
30
+ });
31
+ Object.defineProperty(exports, "SidebarV2", {
32
+ enumerable: true,
33
+ get: function get() {
34
+ return _Sidebar["default"];
35
+ }
36
+ });
37
+ var _Sidebar = _interopRequireDefault(require("./Sidebar"));
38
+ var _Fab = _interopRequireDefault(require("./Fab"));
39
+ var _Button = _interopRequireDefault(require("./Button"));
40
+ var _Dialog = _interopRequireDefault(require("./Dialog"));
41
+ var _Card = _interopRequireDefault(require("./Card"));
package/core/ListItem.js CHANGED
@@ -50,6 +50,7 @@ var ListItem = function ListItem(props) {
50
50
  }, props.icon), (props.title || props.subtitle) && /*#__PURE__*/_react["default"].createElement(_ListItemText["default"], {
51
51
  primaryTypographyProps: typographyProps,
52
52
  secondaryTypographyProps: typographyProps,
53
+ "data-testid": "list-item-".concat(props.subtitle),
53
54
  primary: props.title,
54
55
  secondary: props.subtitle,
55
56
  style: props.action ? {
package/core/Sidebar.js CHANGED
@@ -103,6 +103,7 @@ var Sidebar = function Sidebar(_ref) {
103
103
  }, /*#__PURE__*/_react["default"].createElement(_Button["default"], (0, _extends2["default"])({
104
104
  name: "button-".concat(name || 'sidebar'),
105
105
  color: color,
106
+ "data-testid": "sidebar-button",
106
107
  variant: "contained",
107
108
  className: classes.button,
108
109
  style: {
package/core/Slider.d.ts CHANGED
@@ -3,6 +3,6 @@ import { DefaultProps } from './types';
3
3
  interface ISliderProps {
4
4
  defaultValue?: number | number[];
5
5
  }
6
- export declare type FlipperSliderProps = Omit<SliderProps, 'defaultValue'> & DefaultProps & ISliderProps;
6
+ export type FlipperSliderProps = Omit<SliderProps, 'defaultValue'> & DefaultProps & ISliderProps;
7
7
  declare const Slider: ({ padding, margin, style, defaultValue, ...otherProps }: FlipperSliderProps) => JSX.Element;
8
8
  export default Slider;
@@ -68,9 +68,9 @@ var StepCardDetails = function StepCardDetails(props) {
68
68
  justifyContent: "start"
69
69
  }, /*#__PURE__*/_react["default"].createElement(StepsList, null)), image && /*#__PURE__*/_react["default"].createElement(_styles.StepCardColumn, {
70
70
  justifyContent: "end"
71
- }, /*#__PURE__*/_react["default"].createElement("img", {
71
+ }, typeof image === 'string' ? /*#__PURE__*/_react["default"].createElement("img", {
72
72
  src: image,
73
73
  alt: "Step Icon"
74
- })));
74
+ }) : image));
75
75
  };
76
76
  exports.StepCardDetails = StepCardDetails;
@@ -86,11 +86,18 @@ export interface IStepCardProps {
86
86
  subTitle?: string;
87
87
  /**
88
88
  * The image to be displayed on the expansion panel details
89
+ * Accepts a string or a JSX.Element
89
90
  *
90
- * @type {string}
91
+ * @type {string | JSX.Element}
92
+ * @example
93
+ * <StepCard image={<img src="https://picsum.photos/200" />} />
94
+ * @example
95
+ * <StepCard image="https://picsum.photos/200" />
96
+ * @example
97
+ * <StepCard image={<Image />} />
91
98
  * @memberof IStepCardProps
92
99
  */
93
- image?: string;
100
+ image?: string | JSX.Element;
94
101
  /**
95
102
  * The number of remaining steps
96
103
  * @type {number}
package/core/Stepper.d.ts CHANGED
@@ -5,7 +5,7 @@ export interface StepperProps extends DefaultProps {
5
5
  bottomLabel?: boolean;
6
6
  orientation?: 'horizontal' | 'vertical';
7
7
  }
8
- declare type TStep = {
8
+ type TStep = {
9
9
  label: JSX.Element | string;
10
10
  icon: JSX.Element | ((active?: boolean) => JSX.Element);
11
11
  };
@@ -48,7 +48,7 @@ interface IEditProps extends Pick<TextFieldProps, 'showEdit' | 'style'> {
48
48
  }
49
49
  export declare const TextFieldWrapper: import("styled-components").StyledComponent<"div", any, {}, never>;
50
50
  export declare const StaticTextFieldWrapper: import("styled-components").StyledComponent<"div", any, {}, never>;
51
- export declare const useStyles: (props?: any) => Record<"input" | "outlinedInput" | "outlinedLabel" | "outlinedMultiline" | "iconOutlined", string>;
51
+ export declare const useStyles: (props?: any) => import("@material-ui/styles").ClassNameMap<"input" | "outlinedInput" | "outlinedLabel" | "outlinedMultiline" | "iconOutlined">;
52
52
  export declare const HelperBox: (props: IHelperProps) => JSX.Element;
53
53
  export declare const EditBox: (props: IEditProps) => JSX.Element;
54
54
  declare const TextField: ({ margin, padding, style, error, variant, InputLabelProps, InputProps, SelectProps, autoComplete, onHelperClick, helperIcon, fullWidth, hasClear, onClear, ...otherProps }: TextFieldProps) => JSX.Element;
package/core/types.d.ts CHANGED
@@ -11,6 +11,6 @@ export interface DefaultProps {
11
11
  export interface HTMLElementWithDataCy<T> extends React.HTMLAttributes<T> {
12
12
  'data-cy': string;
13
13
  }
14
- export declare type PropWithDataCy<T> = Partial<T> & {
14
+ export type PropWithDataCy<T> = Partial<T> & {
15
15
  'data-cy': string;
16
16
  };
package/index.d.ts CHANGED
@@ -62,3 +62,4 @@ export { default as Chapter } from './core/Chapter';
62
62
  export { default as DataTable } from './core/DataTable';
63
63
  export { default as StepCard } from './core/StepCard';
64
64
  export { default as StepCardSkeleton } from './core/StepCardSkeleton';
65
+ export * as Experimental from './core/Experimental';