@pingux/astro 2.215.0-alpha.0 → 2.217.0-alpha.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 (36) hide show
  1. package/lib/cjs/components/PanelHeader/PanelHeader.js +9 -2
  2. package/lib/cjs/components/PanelHeader/PanelHeader.stories.js +14 -2
  3. package/lib/cjs/components/PanelHeader/PanelHeader.test.js +115 -3
  4. package/lib/cjs/components/PanelHeader/stories/OnyxPanelHeaderComponent.js +8 -0
  5. package/lib/cjs/components/Table/Table.mdx +2 -3
  6. package/lib/cjs/components/TableBase/Convenience/TableBaseEmptyState.stories.js +73 -0
  7. package/lib/cjs/components/TableBase/Customization/CustomEmptyState.stories.js +62 -0
  8. package/lib/cjs/components/TableBase/TableBase.js +62 -19
  9. package/lib/cjs/components/TableBase/TableBase.stories.js +144 -26
  10. package/lib/cjs/components/TableBase/TableBase.test.js +95 -0
  11. package/lib/cjs/components/TableBase/TableBaseEmptyState.d.ts +4 -0
  12. package/lib/cjs/components/TableBase/TableBaseEmptyState.js +72 -0
  13. package/lib/cjs/components/TableBase/TableBaseEmptyState.test.js +54 -0
  14. package/lib/cjs/components/TableBase/index.d.ts +1 -0
  15. package/lib/cjs/components/TableBase/index.js +8 -1
  16. package/lib/cjs/components/TableBase/tableBaseAttributes.d.ts +20 -0
  17. package/lib/cjs/components/TableBase/tableBaseAttributes.js +21 -1
  18. package/lib/cjs/index.d.ts +2 -0
  19. package/lib/cjs/index.js +16 -0
  20. package/lib/cjs/types/tableBase.d.ts +10 -1
  21. package/lib/components/PanelHeader/PanelHeader.js +10 -3
  22. package/lib/components/PanelHeader/PanelHeader.stories.js +13 -1
  23. package/lib/components/PanelHeader/PanelHeader.test.js +113 -2
  24. package/lib/components/PanelHeader/stories/OnyxPanelHeaderComponent.js +8 -0
  25. package/lib/components/Table/Table.mdx +2 -3
  26. package/lib/components/TableBase/Convenience/TableBaseEmptyState.stories.js +65 -0
  27. package/lib/components/TableBase/Customization/CustomEmptyState.stories.js +54 -0
  28. package/lib/components/TableBase/TableBase.js +64 -19
  29. package/lib/components/TableBase/TableBase.stories.js +145 -26
  30. package/lib/components/TableBase/TableBase.test.js +95 -0
  31. package/lib/components/TableBase/TableBaseEmptyState.js +60 -0
  32. package/lib/components/TableBase/TableBaseEmptyState.test.js +51 -0
  33. package/lib/components/TableBase/index.js +2 -1
  34. package/lib/components/TableBase/tableBaseAttributes.js +20 -0
  35. package/lib/index.js +2 -0
  36. package/package.json +1 -1
@@ -25,7 +25,7 @@ var _hooks = require("../../hooks");
25
25
  var _index = require("../../index");
26
26
  var _listViewItemAttributes = require("../ListViewItem/listViewItemAttributes");
27
27
  var _react2 = require("@emotion/react");
28
- var _excluded = ["avatarProps", "children", "className", "data", "headerProps", "headerWrapperProps", "slots", "subtextProps"];
28
+ var _excluded = ["avatarProps", "children", "className", "data", "headerProps", "headerWrapperProps", "isCopyable", "slots", "subtextProps"];
29
29
  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); }
30
30
  function ownKeys(e, r) { var t = _Object$keys(e); if (_Object$getOwnPropertySymbols) { var o = _Object$getOwnPropertySymbols(e); r && (o = _filterInstanceProperty(o).call(o, function (r) { return _Object$getOwnPropertyDescriptor(e, r).enumerable; })), t.push.apply(t, o); } return t; }
31
31
  function _objectSpread(e) { for (var r = 1; r < arguments.length; r++) { var _context2, _context3; var t = null != arguments[r] ? arguments[r] : {}; r % 2 ? _forEachInstanceProperty(_context2 = ownKeys(Object(t), !0)).call(_context2, function (r) { (0, _defineProperty2["default"])(e, r, t[r]); }) : _Object$getOwnPropertyDescriptors ? _Object$defineProperties(e, _Object$getOwnPropertyDescriptors(t)) : _forEachInstanceProperty(_context3 = ownKeys(Object(t))).call(_context3, function (r) { _Object$defineProperty(e, r, _Object$getOwnPropertyDescriptor(t, r)); }); } return e; }
@@ -38,6 +38,7 @@ var PanelHeader = /*#__PURE__*/(0, _react.forwardRef)(function (_ref, ref) {
38
38
  data = _ref.data,
39
39
  headerProps = _ref.headerProps,
40
40
  headerWrapperProps = _ref.headerWrapperProps,
41
+ isCopyable = _ref.isCopyable,
41
42
  slots = _ref.slots,
42
43
  subtextProps = _ref.subtextProps,
43
44
  others = (0, _objectWithoutProperties2["default"])(_ref, _excluded);
@@ -101,7 +102,12 @@ var PanelHeader = /*#__PURE__*/(0, _react.forwardRef)(function (_ref, ref) {
101
102
  variant: text || subtext ? 'panelHeader.data' : 'panelHeader.emptyData'
102
103
  }, renderLeftContent(), (text || subtext) && (0, _react2.jsx)(_index.Box, headerWrapperPropsSpread, text && (0, _react2.jsx)(_index.Text, (0, _extends2["default"])({}, headerPropsSpread, {
103
104
  variant: "panelHeaderText"
104
- }), text), subtext && (0, _react2.jsx)(_index.Text, {
105
+ }), text), subtext && isCopyable ? (0, _react2.jsx)(_index.CopyText, {
106
+ mode: "nonClickableContent",
107
+ textToCopy: subtext
108
+ }, (0, _react2.jsx)(_index.Text, {
109
+ variant: "panelHeaderSubtext"
110
+ }, subtext)) : subtext && (0, _react2.jsx)(_index.Text, {
105
111
  variant: "panelHeaderSubtext"
106
112
  }, subtext)));
107
113
  return (0, _react2.jsx)(_index.Box, (0, _extends2["default"])({
@@ -123,6 +129,7 @@ var PanelHeader = /*#__PURE__*/(0, _react.forwardRef)(function (_ref, ref) {
123
129
  }, children)));
124
130
  });
125
131
  PanelHeader.propTypes = _objectSpread(_objectSpread({}, _listViewItemAttributes.SharedItemPropTypes), {}, {
132
+ isCopyable: _propTypes["default"].bool,
126
133
  slots: _propTypes["default"].shape({
127
134
  rightOfData: _propTypes["default"].node
128
135
  })
@@ -5,7 +5,7 @@ var _interopRequireDefault = require("@babel/runtime-corejs3/helpers/interopRequ
5
5
  _Object$defineProperty(exports, "__esModule", {
6
6
  value: true
7
7
  });
8
- exports["default"] = exports.WithSubtext = exports.WithImage = exports.WithExtraLongText = exports.WithControls = exports.WithBreadcrumbs = exports.WithAvatar = exports.Default = exports.BreadcrumbsWithExtraLongText = void 0;
8
+ exports["default"] = exports.WithSubtext = exports.WithImage = exports.WithExtraLongText = exports.WithCopyableSubtext = exports.WithControls = exports.WithBreadcrumbs = exports.WithAvatar = exports.Default = exports.BreadcrumbsWithExtraLongText = void 0;
9
9
  var _objectDestructuringEmpty2 = _interopRequireDefault(require("@babel/runtime-corejs3/helpers/objectDestructuringEmpty"));
10
10
  var _extends2 = _interopRequireDefault(require("@babel/runtime-corejs3/helpers/extends"));
11
11
  var _react = _interopRequireDefault(require("react"));
@@ -172,8 +172,20 @@ var BreadcrumbsWithExtraLongText = exports.BreadcrumbsWithExtraLongText = functi
172
172
  }
173
173
  }, (0, _react2.jsx)(_index.PanelHeaderCloseButton, null));
174
174
  };
175
- var WithExtraLongText = exports.WithExtraLongText = function WithExtraLongText(_ref4) {
175
+ var WithCopyableSubtext = exports.WithCopyableSubtext = function WithCopyableSubtext(_ref4) {
176
176
  var args = (0, _extends2["default"])({}, ((0, _objectDestructuringEmpty2["default"])(_ref4), _ref4));
177
+ return (0, _react2.jsx)(_index.PanelHeader, (0, _extends2["default"])({}, args, {
178
+ isCopyable: true,
179
+ data: {
180
+ icon: _AccountIcon["default"],
181
+ subtext: 'rad_developer@pingidentity.com',
182
+ text: 'Fons Vernall',
183
+ avatarDefaultText: 'FV'
184
+ }
185
+ }));
186
+ };
187
+ var WithExtraLongText = exports.WithExtraLongText = function WithExtraLongText(_ref5) {
188
+ var args = (0, _extends2["default"])({}, ((0, _objectDestructuringEmpty2["default"])(_ref5), _ref5));
177
189
  return (0, _react2.jsx)(_index.PanelHeader, (0, _extends2["default"])({}, args, {
178
190
  data: {
179
191
  avatarDefaultText: 'FV',
@@ -1,5 +1,6 @@
1
1
  "use strict";
2
2
 
3
+ var _typeof = require("@babel/runtime-corejs3/helpers/typeof");
3
4
  var _Object$keys = require("@babel/runtime-corejs3/core-js-stable/object/keys");
4
5
  var _Object$getOwnPropertySymbols = require("@babel/runtime-corejs3/core-js-stable/object/get-own-property-symbols");
5
6
  var _filterInstanceProperty = require("@babel/runtime-corejs3/core-js-stable/instance/filter");
@@ -7,22 +8,43 @@ var _Object$getOwnPropertyDescriptor = require("@babel/runtime-corejs3/core-js-s
7
8
  var _forEachInstanceProperty = require("@babel/runtime-corejs3/core-js-stable/instance/for-each");
8
9
  var _Object$getOwnPropertyDescriptors = require("@babel/runtime-corejs3/core-js-stable/object/get-own-property-descriptors");
9
10
  var _Object$defineProperties = require("@babel/runtime-corejs3/core-js-stable/object/define-properties");
10
- var _Object$defineProperty = require("@babel/runtime-corejs3/core-js-stable/object/define-property");
11
+ var _Object$defineProperty2 = require("@babel/runtime-corejs3/core-js-stable/object/define-property");
12
+ var _Symbol = require("@babel/runtime-corejs3/core-js-stable/symbol");
13
+ var _Object$create = require("@babel/runtime-corejs3/core-js-stable/object/create");
14
+ var _bindInstanceProperty = require("@babel/runtime-corejs3/core-js-stable/instance/bind");
15
+ var _Object$getPrototypeOf = require("@babel/runtime-corejs3/core-js-stable/object/get-prototype-of");
16
+ var _Object$setPrototypeOf = require("@babel/runtime-corejs3/core-js-stable/object/set-prototype-of");
17
+ var _Symbol$asyncIterator = require("@babel/runtime-corejs3/core-js-stable/symbol/async-iterator");
18
+ var _Promise = require("@babel/runtime-corejs3/core-js-stable/promise");
19
+ var _Symbol$iterator = require("@babel/runtime-corejs3/core-js-stable/symbol/iterator");
20
+ var _reverseInstanceProperty = require("@babel/runtime-corejs3/core-js-stable/instance/reverse");
11
21
  var _interopRequireDefault = require("@babel/runtime-corejs3/helpers/interopRequireDefault");
12
22
  var _concat = _interopRequireDefault(require("@babel/runtime-corejs3/core-js-stable/instance/concat"));
13
- var _defineProperty2 = _interopRequireDefault(require("@babel/runtime-corejs3/helpers/defineProperty"));
23
+ var _defineProperty2 = _interopRequireDefault(require("@babel/runtime-corejs3/core-js-stable/object/define-property"));
24
+ var _asyncToGenerator2 = _interopRequireDefault(require("@babel/runtime-corejs3/helpers/asyncToGenerator"));
25
+ var _defineProperty3 = _interopRequireDefault(require("@babel/runtime-corejs3/helpers/defineProperty"));
14
26
  var _extends2 = _interopRequireDefault(require("@babel/runtime-corejs3/helpers/extends"));
15
27
  var _react = _interopRequireDefault(require("react"));
16
28
  var _AccountIcon = _interopRequireDefault(require("@pingux/mdi-react/AccountIcon"));
17
29
  var _react2 = require("@testing-library/react");
30
+ var _userEvent = _interopRequireDefault(require("@testing-library/user-event"));
18
31
  var _index = require("../../index");
19
32
  var _images = require("../../utils/devUtils/constants/images");
20
33
  var _testWrapper = require("../../utils/testUtils/testWrapper");
21
34
  var _universalComponentTest = require("../../utils/testUtils/universalComponentTest");
22
35
  var _PanelHeader = require("./PanelHeader");
23
36
  var _react3 = require("@emotion/react");
37
+ function _regeneratorRuntime() { "use strict"; var r = _regenerator(), e = r.m(_regeneratorRuntime), t = (_Object$getPrototypeOf ? _Object$getPrototypeOf(e) : e.__proto__).constructor; function n(r) { var e = "function" == typeof r && r.constructor; return !!e && (e === t || "GeneratorFunction" === (e.displayName || e.name)); } var o = { "throw": 1, "return": 2, "break": 3, "continue": 3 }; function a(r) { var e, t; return function (n) { e || (e = { stop: function stop() { return t(n.a, 2); }, "catch": function _catch() { return n.v; }, abrupt: function abrupt(r, e) { return t(n.a, o[r], e); }, delegateYield: function delegateYield(r, o, a) { return e.resultName = o, t(n.d, _regeneratorValues(r), a); }, finish: function finish(r) { return t(n.f, r); } }, t = function t(r, _t, o) { n.p = e.prev, n.n = e.next; try { return r(_t, o); } finally { e.next = n.n; } }), e.resultName && (e[e.resultName] = n.v, e.resultName = void 0), e.sent = n.v, e.next = n.n; try { return r.call(this, e); } finally { n.p = e.prev, n.n = e.next; } }; } return (_regeneratorRuntime = function _regeneratorRuntime() { return { wrap: function wrap(e, t, n, o) { return r.w(a(e), t, n, o && _reverseInstanceProperty(o).call(o)); }, isGeneratorFunction: n, mark: r.m, awrap: function awrap(r, e) { return new _OverloadYield(r, e); }, AsyncIterator: _regeneratorAsyncIterator, async: function async(r, e, t, o, u) { return (n(e) ? _regeneratorAsyncGen : _regeneratorAsync)(a(r), e, t, o, u); }, keys: _regeneratorKeys, values: _regeneratorValues }; })(); }
38
+ function _regeneratorValues(e) { if (null != e) { var t = e["function" == typeof _Symbol && _Symbol$iterator || "@@iterator"], r = 0; if (t) return t.call(e); if ("function" == typeof e.next) return e; if (!isNaN(e.length)) return { next: function next() { return e && r >= e.length && (e = void 0), { value: e && e[r++], done: !e }; } }; } throw new TypeError(_typeof(e) + " is not iterable"); }
39
+ function _regeneratorKeys(e) { var n = Object(e), r = []; for (var t in n) r.unshift(t); return function e() { for (; r.length;) if ((t = r.pop()) in n) return e.value = t, e.done = !1, e; return e.done = !0, e; }; }
40
+ function _regeneratorAsync(n, e, r, t, o) { var a = _regeneratorAsyncGen(n, e, r, t, o); return a.next().then(function (n) { return n.done ? n.value : a.next(); }); }
41
+ function _regeneratorAsyncGen(r, e, t, o, n) { return new _regeneratorAsyncIterator(_regenerator().w(r, e, t, o), n || _Promise); }
42
+ function _regeneratorAsyncIterator(t, e) { function n(r, o, i, f) { try { var c = t[r](o), u = c.value; return u instanceof _OverloadYield ? e.resolve(u.v).then(function (t) { n("next", t, i, f); }, function (t) { n("throw", t, i, f); }) : e.resolve(u).then(function (t) { c.value = t, i(c); }, function (t) { return n("throw", t, i, f); }); } catch (t) { f(t); } } var r; this.next || (_regeneratorDefine2(_regeneratorAsyncIterator.prototype), _regeneratorDefine2(_regeneratorAsyncIterator.prototype, "function" == typeof _Symbol && _Symbol$asyncIterator || "@asyncIterator", function () { return this; })), _regeneratorDefine2(this, "_invoke", function (t, o, i) { function f() { return new e(function (e, r) { n(t, i, e, r); }); } return r = r ? r.then(f, f) : f(); }, !0); }
43
+ function _regenerator() { /*! regenerator-runtime -- Copyright (c) 2014-present, Facebook, Inc. -- license (MIT): https://github.com/babel/babel/blob/main/packages/babel-helpers/LICENSE */ var e, t, r = "function" == typeof _Symbol ? _Symbol : {}, n = r.iterator || "@@iterator", o = r.toStringTag || "@@toStringTag"; function i(r, n, o, i) { var c = n && n.prototype instanceof Generator ? n : Generator, u = _Object$create(c.prototype); return _regeneratorDefine2(u, "_invoke", function (r, n, o) { var i, c, u, f = 0, p = o || [], y = !1, G = { p: 0, n: 0, v: e, a: d, f: _bindInstanceProperty(d).call(d, e, 4), d: function d(t, r) { return i = t, c = 0, u = e, G.n = r, a; } }; function d(r, n) { for (c = r, u = n, t = 0; !y && f && !o && t < p.length; t++) { var o, i = p[t], d = G.p, l = i[2]; r > 3 ? (o = l === n) && (u = i[(c = i[4]) ? 5 : (c = 3, 3)], i[4] = i[5] = e) : i[0] <= d && ((o = r < 2 && d < i[1]) ? (c = 0, G.v = n, G.n = i[1]) : d < l && (o = r < 3 || i[0] > n || n > l) && (i[4] = r, i[5] = n, G.n = l, c = 0)); } if (o || r > 1) return a; throw y = !0, n; } return function (o, p, l) { if (f > 1) throw TypeError("Generator is already running"); for (y && 1 === p && d(p, l), c = p, u = l; (t = c < 2 ? e : u) || !y;) { i || (c ? c < 3 ? (c > 1 && (G.n = -1), d(c, u)) : G.n = u : G.v = u); try { if (f = 2, i) { if (c || (o = "next"), t = i[o]) { if (!(t = t.call(i, u))) throw TypeError("iterator result is not an object"); if (!t.done) return t; u = t.value, c < 2 && (c = 0); } else 1 === c && (t = i["return"]) && t.call(i), c < 2 && (u = TypeError("The iterator does not provide a '" + o + "' method"), c = 1); i = e; } else if ((t = (y = G.n < 0) ? u : r.call(n, G)) !== a) break; } catch (t) { i = e, c = 1, u = t; } finally { f = 1; } } return { value: t, done: y }; }; }(r, o, i), !0), u; } var a = {}; function Generator() {} function GeneratorFunction() {} function GeneratorFunctionPrototype() {} t = _Object$getPrototypeOf; var c = [][n] ? t(t([][n]())) : (_regeneratorDefine2(t = {}, n, function () { return this; }), t), u = GeneratorFunctionPrototype.prototype = Generator.prototype = _Object$create(c); function f(e) { return _Object$setPrototypeOf ? _Object$setPrototypeOf(e, GeneratorFunctionPrototype) : (e.__proto__ = GeneratorFunctionPrototype, _regeneratorDefine2(e, o, "GeneratorFunction")), e.prototype = _Object$create(u), e; } return GeneratorFunction.prototype = GeneratorFunctionPrototype, _regeneratorDefine2(u, "constructor", GeneratorFunctionPrototype), _regeneratorDefine2(GeneratorFunctionPrototype, "constructor", GeneratorFunction), GeneratorFunction.displayName = "GeneratorFunction", _regeneratorDefine2(GeneratorFunctionPrototype, o, "GeneratorFunction"), _regeneratorDefine2(u), _regeneratorDefine2(u, o, "Generator"), _regeneratorDefine2(u, n, function () { return this; }), _regeneratorDefine2(u, "toString", function () { return "[object Generator]"; }), (_regenerator = function _regenerator() { return { w: i, m: f }; })(); }
44
+ function _regeneratorDefine2(e, r, n, t) { var i = _Object$defineProperty2; try { i({}, "", {}); } catch (e) { i = 0; } _regeneratorDefine2 = function _regeneratorDefine(e, r, n, t) { function o(r, n) { _regeneratorDefine2(e, r, function (e) { return this._invoke(r, n, e); }); } r ? i ? i(e, r, { value: n, enumerable: !t, configurable: !t, writable: !t }) : e[r] = n : (o("next", 0), o("throw", 1), o("return", 2)); }, _regeneratorDefine2(e, r, n, t); }
45
+ function _OverloadYield(e, d) { this.v = e, this.k = d; }
24
46
  function ownKeys(e, r) { var t = _Object$keys(e); if (_Object$getOwnPropertySymbols) { var o = _Object$getOwnPropertySymbols(e); r && (o = _filterInstanceProperty(o).call(o, function (r) { return _Object$getOwnPropertyDescriptor(e, r).enumerable; })), t.push.apply(t, o); } return t; }
25
- function _objectSpread(e) { for (var r = 1; r < arguments.length; r++) { var _context2, _context3; var t = null != arguments[r] ? arguments[r] : {}; r % 2 ? _forEachInstanceProperty(_context2 = ownKeys(Object(t), !0)).call(_context2, function (r) { (0, _defineProperty2["default"])(e, r, t[r]); }) : _Object$getOwnPropertyDescriptors ? _Object$defineProperties(e, _Object$getOwnPropertyDescriptors(t)) : _forEachInstanceProperty(_context3 = ownKeys(Object(t))).call(_context3, function (r) { _Object$defineProperty(e, r, _Object$getOwnPropertyDescriptor(t, r)); }); } return e; }
47
+ function _objectSpread(e) { for (var r = 1; r < arguments.length; r++) { var _context4, _context5; var t = null != arguments[r] ? arguments[r] : {}; r % 2 ? _forEachInstanceProperty(_context4 = ownKeys(Object(t), !0)).call(_context4, function (r) { (0, _defineProperty3["default"])(e, r, t[r]); }) : _Object$getOwnPropertyDescriptors ? _Object$defineProperties(e, _Object$getOwnPropertyDescriptors(t)) : _forEachInstanceProperty(_context5 = ownKeys(Object(t))).call(_context5, function (r) { _Object$defineProperty2(e, r, _Object$getOwnPropertyDescriptor(t, r)); }); } return e; }
26
48
  var defaultProps = {
27
49
  data: {
28
50
  text: 'testText',
@@ -78,6 +100,96 @@ describe('PanelHeader', function () {
78
100
  });
79
101
  _testWrapper.screen.getByRole('switch');
80
102
  });
103
+ describe('isCopyable', function () {
104
+ var originalClipboard = _objectSpread({}, global.navigator.clipboard);
105
+ beforeEach(function () {
106
+ var mockClipboard = {
107
+ writeText: jest.fn()
108
+ };
109
+ (0, _defineProperty2["default"])(window, 'navigator', {
110
+ value: {
111
+ clipboard: mockClipboard
112
+ },
113
+ configurable: true
114
+ });
115
+ });
116
+ afterEach(function () {
117
+ (0, _defineProperty2["default"])(window, 'navigator', {
118
+ value: {
119
+ clipboard: originalClipboard
120
+ },
121
+ configurable: true
122
+ });
123
+ jest.resetAllMocks();
124
+ });
125
+ test('renders copy button when isCopyable is true and subtext is present', function () {
126
+ (0, _testWrapper.render)((0, _react3.jsx)(_index.PanelHeader, (0, _extends2["default"])({}, defaultProps, {
127
+ isCopyable: true
128
+ })));
129
+ expect(_testWrapper.screen.getByRole('button', {
130
+ name: 'copy to clipboard'
131
+ })).toBeInTheDocument();
132
+ });
133
+ test('does not render copy button when isCopyable is omitted and subtext is present', function () {
134
+ (0, _testWrapper.render)((0, _react3.jsx)(_index.PanelHeader, defaultProps));
135
+ expect(_testWrapper.screen.queryByRole('button', {
136
+ name: 'copy to clipboard'
137
+ })).not.toBeInTheDocument();
138
+ });
139
+ test('does not render copy button when isCopyable is false and subtext is present', function () {
140
+ (0, _testWrapper.render)((0, _react3.jsx)(_index.PanelHeader, (0, _extends2["default"])({}, defaultProps, {
141
+ isCopyable: false
142
+ })));
143
+ expect(_testWrapper.screen.queryByRole('button', {
144
+ name: 'copy to clipboard'
145
+ })).not.toBeInTheDocument();
146
+ });
147
+ test('does not render copy button when isCopyable is true and subtext is absent', function () {
148
+ var propsWithoutSubtext = {
149
+ data: {
150
+ text: 'testText'
151
+ }
152
+ };
153
+ (0, _testWrapper.render)((0, _react3.jsx)(_index.PanelHeader, (0, _extends2["default"])({}, propsWithoutSubtext, {
154
+ isCopyable: true
155
+ })));
156
+ expect(_testWrapper.screen.queryByRole('button', {
157
+ name: 'copy to clipboard'
158
+ })).not.toBeInTheDocument();
159
+ });
160
+ test('clicking copy button calls navigator.clipboard.writeText with the subtext value', /*#__PURE__*/(0, _asyncToGenerator2["default"])(/*#__PURE__*/_regeneratorRuntime().mark(function _callee2() {
161
+ var copyButton;
162
+ return _regeneratorRuntime().wrap(function _callee2$(_context3) {
163
+ while (1) switch (_context3.prev = _context3.next) {
164
+ case 0:
165
+ (0, _testWrapper.render)((0, _react3.jsx)(_index.PanelHeader, (0, _extends2["default"])({}, defaultProps, {
166
+ isCopyable: true
167
+ })));
168
+ copyButton = _testWrapper.screen.getByRole('button', {
169
+ name: 'copy to clipboard'
170
+ });
171
+ _context3.next = 4;
172
+ return (0, _react2.act)(/*#__PURE__*/(0, _asyncToGenerator2["default"])(/*#__PURE__*/_regeneratorRuntime().mark(function _callee() {
173
+ return _regeneratorRuntime().wrap(function _callee$(_context2) {
174
+ while (1) switch (_context2.prev = _context2.next) {
175
+ case 0:
176
+ return _context2.abrupt("return", _userEvent["default"].click(copyButton));
177
+ case 1:
178
+ case "end":
179
+ return _context2.stop();
180
+ }
181
+ }, _callee);
182
+ })));
183
+ case 4:
184
+ expect(navigator.clipboard.writeText).toHaveBeenCalledTimes(1);
185
+ expect(navigator.clipboard.writeText).toHaveBeenCalledWith(defaultProps.data.subtext);
186
+ case 6:
187
+ case "end":
188
+ return _context3.stop();
189
+ }
190
+ }, _callee2);
191
+ })));
192
+ });
81
193
  });
82
194
  test('renders icon if both icon and image are passed', function () {
83
195
  getComponent();
@@ -71,6 +71,14 @@ var PanelHeaderComponent = function PanelHeaderComponent() {
71
71
  rightOfData: breadcrumbs
72
72
  }
73
73
  }, (0, _react2.jsx)(_.PanelHeaderCloseButton, null)), (0, _react2.jsx)(_.PanelHeader, {
74
+ isCopyable: true,
75
+ data: {
76
+ icon: _AccountIcon["default"],
77
+ subtext: 'rad_developer@pingidentity.com',
78
+ text: 'Fons Vernall',
79
+ avatarDefaultText: 'FV'
80
+ }
81
+ }), (0, _react2.jsx)(_.PanelHeader, {
74
82
  data: {
75
83
  avatarDefaultText: 'FV',
76
84
  icon: _AccountIcon["default"],
@@ -5,10 +5,9 @@ import * as TableStories from './Table.stories';
5
5
 
6
6
  # Table
7
7
 
8
- Data tables display information in a grid-like format of rows and columns.
9
- They organize information in a way that’s easy to scan so that users can look for patterns and develop insights from data.
8
+ The `Table` component (along with `TableCaption`, `TableHead`, `TableBody`, etc.) is a drop-in replacement for HTML table elements. This means it lacks internal state and logic. **NOTE:** For most cases, it’s recommended to use `TableBase` instead.
10
9
 
11
- Column header names describe the type of content displayed in each column.
10
+ Column header names describe the type of content displayed in each column.
12
11
  Each row contains data related to a single entity.
13
12
 
14
13
  Tables should:
@@ -0,0 +1,73 @@
1
+ "use strict";
2
+
3
+ var _Object$defineProperty = require("@babel/runtime-corejs3/core-js-stable/object/define-property");
4
+ var _interopRequireDefault = require("@babel/runtime-corejs3/helpers/interopRequireDefault");
5
+ _Object$defineProperty(exports, "__esModule", {
6
+ value: true
7
+ });
8
+ exports["default"] = exports.WithAddButton = exports.Default = exports.Customization = void 0;
9
+ var _extends2 = _interopRequireDefault(require("@babel/runtime-corejs3/helpers/extends"));
10
+ var _react = _interopRequireDefault(require("react"));
11
+ var _storybookDocsLayout = _interopRequireDefault(require("../../../../.storybook/storybookDocsLayout"));
12
+ var _index = require("../../../index");
13
+ var _react2 = require("@emotion/react");
14
+ var _default = exports["default"] = {
15
+ title: 'Components/TableBase/Convenience/TableBaseEmptyState',
16
+ component: _index.TableBaseEmptyState,
17
+ parameters: {
18
+ docs: {
19
+ page: function page() {
20
+ return (0, _react2.jsx)(_storybookDocsLayout["default"], null);
21
+ }
22
+ }
23
+ },
24
+ argTypes: {
25
+ headerLabel: {
26
+ control: {
27
+ type: 'text'
28
+ }
29
+ },
30
+ descriptionLabel: {
31
+ control: {
32
+ type: 'text'
33
+ }
34
+ },
35
+ addButtonLabel: {
36
+ control: {
37
+ type: 'text'
38
+ }
39
+ },
40
+ defaultIcon: {
41
+ control: false
42
+ }
43
+ },
44
+ args: {
45
+ headerLabel: 'No items exist',
46
+ descriptionLabel: 'Take action by doing x, y, z'
47
+ }
48
+ };
49
+ var Default = exports.Default = function Default(args) {
50
+ return (0, _react2.jsx)(_index.TableBaseEmptyState, args);
51
+ };
52
+ var WithAddButton = exports.WithAddButton = function WithAddButton(args) {
53
+ return (0, _react2.jsx)(_index.TableBaseEmptyState, (0, _extends2["default"])({}, args, {
54
+ addButtonLabel: "Add Item"
55
+ }));
56
+ };
57
+ var Customization = exports.Customization = function Customization() {
58
+ return (0, _react2.jsx)(_index.Box, {
59
+ isRow: false,
60
+ gap: "xl"
61
+ }, (0, _react2.jsx)(_index.TableBaseEmptyState, {
62
+ headerLabel: "No users found",
63
+ descriptionLabel: "Add your first user to get started.",
64
+ addButtonLabel: "New User"
65
+ }), (0, _react2.jsx)(_index.TableBaseEmptyState, {
66
+ headerLabel: "No results",
67
+ descriptionLabel: "Try adjusting your search or filters."
68
+ }), (0, _react2.jsx)(_index.TableBaseEmptyState, {
69
+ headerLabel: "Nothing here yet",
70
+ descriptionLabel: "Create a new entry to see it listed here.",
71
+ addButtonLabel: "Create Entry"
72
+ }));
73
+ };
@@ -0,0 +1,62 @@
1
+ "use strict";
2
+
3
+ var _Object$defineProperty = require("@babel/runtime-corejs3/core-js-stable/object/define-property");
4
+ var _interopRequireDefault = require("@babel/runtime-corejs3/helpers/interopRequireDefault");
5
+ _Object$defineProperty(exports, "__esModule", {
6
+ value: true
7
+ });
8
+ exports["default"] = exports.CustomEmptyState = void 0;
9
+ var _storybookDocsLayout = _interopRequireDefault(require("../../../../.storybook/storybookDocsLayout"));
10
+ var _index = require("../../../index");
11
+ var _react = require("@emotion/react");
12
+ var _default = exports["default"] = {
13
+ title: 'Components/TableBase/Customization',
14
+ component: _index.TableBase,
15
+ parameters: {
16
+ docs: {
17
+ page: function page() {
18
+ return (0, _react.jsx)(_storybookDocsLayout["default"], null);
19
+ }
20
+ }
21
+ }
22
+ };
23
+ var headers = [{
24
+ key: 'name',
25
+ name: 'Name'
26
+ }, {
27
+ key: 'email',
28
+ name: 'Email'
29
+ }, {
30
+ key: 'status',
31
+ name: 'Status'
32
+ }];
33
+ var CustomEmptyState = exports.CustomEmptyState = function CustomEmptyState() {
34
+ return (0, _react.jsx)(_index.Card, {
35
+ variant: "cards.tableWrapper"
36
+ }, (0, _react.jsx)(_index.TableBase, {
37
+ caption: "Custom empty state",
38
+ "aria-label": "table with custom empty state",
39
+ renderEmptyState: function renderEmptyState() {
40
+ return (0, _react.jsx)(_index.TableBaseEmptyState, {
41
+ headerLabel: "No resources found",
42
+ descriptionLabel: "Try adjusting your search or filters.",
43
+ addButtonLabel: "Add Resource"
44
+ });
45
+ }
46
+ }, (0, _react.jsx)(_index.THead, {
47
+ columns: headers
48
+ }, function (column) {
49
+ return (0, _react.jsx)(_index.Column, {
50
+ key: column.key,
51
+ minWidth: 200
52
+ }, column.name);
53
+ }), (0, _react.jsx)(_index.TBody, {
54
+ items: []
55
+ }, function () {
56
+ return (0, _react.jsx)(_index.Row, {
57
+ key: "unused"
58
+ }, function () {
59
+ return (0, _react.jsx)(_index.Cell, null, (0, _react.jsx)(_index.Text, null, "-"));
60
+ });
61
+ })));
62
+ };
@@ -15,13 +15,14 @@ _Object$defineProperty(exports, "__esModule", {
15
15
  value: true
16
16
  });
17
17
  exports["default"] = void 0;
18
+ var _set = _interopRequireDefault(require("@babel/runtime-corejs3/core-js-stable/set"));
18
19
  var _map = _interopRequireDefault(require("@babel/runtime-corejs3/core-js-stable/map"));
19
20
  var _setTimeout2 = _interopRequireDefault(require("@babel/runtime-corejs3/core-js-stable/set-timeout"));
20
21
  var _map2 = _interopRequireDefault(require("@babel/runtime-corejs3/core-js-stable/instance/map"));
21
22
  var _from = _interopRequireDefault(require("@babel/runtime-corejs3/core-js-stable/array/from"));
22
- var _extends2 = _interopRequireDefault(require("@babel/runtime-corejs3/helpers/extends"));
23
23
  var _defineProperty2 = _interopRequireDefault(require("@babel/runtime-corejs3/helpers/defineProperty"));
24
24
  var _slicedToArray2 = _interopRequireDefault(require("@babel/runtime-corejs3/helpers/slicedToArray"));
25
+ var _extends2 = _interopRequireDefault(require("@babel/runtime-corejs3/helpers/extends"));
25
26
  var _objectWithoutProperties2 = _interopRequireDefault(require("@babel/runtime-corejs3/helpers/objectWithoutProperties"));
26
27
  var _react = _interopRequireWildcard(require("react"));
27
28
  var _focus = require("@react-aria/focus");
@@ -32,13 +33,59 @@ var _visuallyHidden = require("@react-aria/visually-hidden");
32
33
  var _table2 = require("@react-stately/table");
33
34
  var _ = require("../..");
34
35
  var _hooks = require("../../hooks");
36
+ var _TableBaseEmptyState = _interopRequireDefault(require("./TableBaseEmptyState"));
35
37
  var _react2 = require("@emotion/react");
36
- var _excluded = ["caption", "selectionMode", "selectionBehavior", "hasSelectionCheckboxes", "isStickyHeader", "className", "isLastColumnSticky", "onResizeStart", "onResize", "onResizeEnd", "onRowAction"],
37
- _excluded2 = ["caption"],
38
- _excluded3 = ["type", "children", "className", "isSticky"];
38
+ var _excluded = ["children", "items", "renderEmptyState", "loadingState"],
39
+ _excluded2 = ["caption", "selectionMode", "selectionBehavior", "hasSelectionCheckboxes", "isStickyHeader", "className", "isLastColumnSticky", "loadingState", "renderEmptyState", "onResizeStart", "onResize", "onResizeEnd", "onRowAction"],
40
+ _excluded3 = ["caption"],
41
+ _excluded4 = ["type", "children", "className", "isSticky"]; // Strips react-stately collection props that must not reach the DOM tbody element.
39
42
  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); }
40
43
  function ownKeys(e, r) { var t = _Object$keys(e); if (_Object$getOwnPropertySymbols) { var o = _Object$getOwnPropertySymbols(e); r && (o = _filterInstanceProperty(o).call(o, function (r) { return _Object$getOwnPropertyDescriptor(e, r).enumerable; })), t.push.apply(t, o); } return t; }
41
44
  function _objectSpread(e) { for (var r = 1; r < arguments.length; r++) { var _context5, _context6; var t = null != arguments[r] ? arguments[r] : {}; r % 2 ? _forEachInstanceProperty(_context5 = ownKeys(Object(t), !0)).call(_context5, function (r) { (0, _defineProperty2["default"])(e, r, t[r]); }) : _Object$getOwnPropertyDescriptors ? _Object$defineProperties(e, _Object$getOwnPropertyDescriptors(t)) : _forEachInstanceProperty(_context6 = ownKeys(Object(t))).call(_context6, function (r) { _Object$defineProperty(e, r, _Object$getOwnPropertyDescriptor(t, r)); }); } return e; }
45
+ var omitTableBodyProps = function omitTableBodyProps(_ref) {
46
+ var children = _ref.children,
47
+ items = _ref.items,
48
+ renderEmptyState = _ref.renderEmptyState,
49
+ loadingState = _ref.loadingState,
50
+ rest = (0, _objectWithoutProperties2["default"])(_ref, _excluded);
51
+ return rest;
52
+ };
53
+ var LOADING_STATES = new _set["default"](['loading', 'sorting']);
54
+
55
+ // eslint-disable-next-line @typescript-eslint/no-explicit-any
56
+ var BoxCell = function BoxCell(props) {
57
+ return (0, _react2.jsx)(_.Box, (0, _extends2["default"])({
58
+ as: "td",
59
+ display: "table-cell"
60
+ }, props));
61
+ };
62
+ function LoadingOrEmptyState(_ref2) {
63
+ var _renderEmptyState;
64
+ var loadingState = _ref2.loadingState,
65
+ collectionSize = _ref2.collectionSize,
66
+ colSpan = _ref2.colSpan,
67
+ renderEmptyState = _ref2.renderEmptyState;
68
+ if (collectionSize > 0) return null;
69
+ if (loadingState && LOADING_STATES.has(loadingState)) {
70
+ return (0, _react2.jsx)(_.Box, {
71
+ as: "tr",
72
+ display: "table-row"
73
+ }, (0, _react2.jsx)(BoxCell, {
74
+ colSpan: colSpan
75
+ }, (0, _react2.jsx)(_.Loader, {
76
+ variant: "loader.withinDataTable"
77
+ })));
78
+ }
79
+ return (0, _react2.jsx)(_.Box, {
80
+ as: "tr",
81
+ display: "table-row"
82
+ }, (0, _react2.jsx)(BoxCell, {
83
+ colSpan: colSpan,
84
+ sx: {
85
+ textAlign: 'center'
86
+ }
87
+ }, (_renderEmptyState = renderEmptyState === null || renderEmptyState === void 0 ? void 0 : renderEmptyState()) !== null && _renderEmptyState !== void 0 ? _renderEmptyState : (0, _react2.jsx)(_TableBaseEmptyState["default"], null)));
88
+ }
42
89
  var useHandleFocusRef = function useHandleFocusRef(ref) {
43
90
  _react["default"].useEffect(function () {
44
91
  var el = ref.current;
@@ -68,11 +115,13 @@ var TableBase = /*#__PURE__*/(0, _react.forwardRef)(function (props, ref) {
68
115
  isStickyHeader = _props$isStickyHeader === void 0 ? false : _props$isStickyHeader,
69
116
  className = props.className,
70
117
  isLastColumnSticky = props.isLastColumnSticky,
118
+ loadingState = props.loadingState,
119
+ renderEmptyState = props.renderEmptyState,
71
120
  onResizeStart = props.onResizeStart,
72
121
  onResize = props.onResize,
73
122
  onResizeEnd = props.onResizeEnd,
74
123
  onRowAction = props.onRowAction,
75
- others = (0, _objectWithoutProperties2["default"])(props, _excluded);
124
+ others = (0, _objectWithoutProperties2["default"])(props, _excluded2);
76
125
  var tableRef = (0, _hooks.useLocalOrForwardRef)(ref);
77
126
  var headerRef = (0, _react.useRef)(null);
78
127
  var scrollRef = (0, _react.useRef)(null);
@@ -231,18 +280,12 @@ var TableBase = /*#__PURE__*/(0, _react.forwardRef)(function (props, ref) {
231
280
  })), (0, _react2.jsx)(TableRowGroup, (0, _extends2["default"])({
232
281
  ref: bodyRef,
233
282
  type: "tbody"
234
- }, collection.body.props), collection.size === 0 && (0, _react2.jsx)(_.Box, {
235
- as: "tr",
236
- role: "row",
237
- key: "loading",
238
- "data-testid": "loading",
239
- alignItems: "center",
240
- justifyContent: "center",
241
- px: "lg",
242
- py: "md"
243
- }, (0, _react2.jsx)(_.Loader, {
244
- variant: "loader.withinDataTable"
245
- })), (0, _map2["default"])(_context3 = (0, _from["default"])(collection.body.childNodes)).call(_context3, function (row) {
283
+ }, omitTableBodyProps(collection.body.props)), (0, _react2.jsx)(LoadingOrEmptyState, {
284
+ loadingState: loadingState,
285
+ collectionSize: collection.size,
286
+ colSpan: collection.columns.length,
287
+ renderEmptyState: renderEmptyState
288
+ }), (0, _map2["default"])(_context3 = (0, _from["default"])(collection.body.childNodes)).call(_context3, function (row) {
246
289
  var _context4, _collection$getChildr, _collection$getChildr2;
247
290
  return (0, _react2.jsx)(TableRow, {
248
291
  key: row.key,
@@ -271,7 +314,7 @@ var TableBase = /*#__PURE__*/(0, _react.forwardRef)(function (props, ref) {
271
314
  });
272
315
  var TableCaption = /*#__PURE__*/(0, _react.forwardRef)(function (props, ref) {
273
316
  var caption = props.caption,
274
- others = (0, _objectWithoutProperties2["default"])(props, _excluded2);
317
+ others = (0, _objectWithoutProperties2["default"])(props, _excluded3);
275
318
  if (!caption) {
276
319
  return null;
277
320
  }
@@ -288,7 +331,7 @@ var TableRowGroup = /*#__PURE__*/(0, _react.forwardRef)(function (props, ref) {
288
331
  children = props.children,
289
332
  className = props.className,
290
333
  isSticky = props.isSticky,
291
- others = (0, _objectWithoutProperties2["default"])(props, _excluded3);
334
+ others = (0, _objectWithoutProperties2["default"])(props, _excluded4);
292
335
  var _useTableRowGroup = (0, _table.useTableRowGroup)(),
293
336
  rowGroupProps = _useTableRowGroup.rowGroupProps;
294
337
  var _useStatusClasses2 = (0, _hooks.useStatusClasses)(className, {