@pingux/astro 2.216.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.
@@ -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"],
@@ -70,6 +70,7 @@ export * from './components/CollapsiblePanelItem';
70
70
  export { default as ColorField } from './components/ColorField';
71
71
  export { default as ComboBoxField } from './components/ComboBoxField';
72
72
  export { default as CopyText } from './components/CopyText';
73
+ export { default as CopyButton } from './components/CopyText/CopyButton';
73
74
  export { default as DataTable } from './components/DataTable';
74
75
  export * from './components/DataTable';
75
76
  export { default as DatePicker } from './components/DatePicker';
package/lib/cjs/index.js CHANGED
@@ -62,6 +62,7 @@ var _exportNames = {
62
62
  ColorField: true,
63
63
  ComboBoxField: true,
64
64
  CopyText: true,
65
+ CopyButton: true,
65
66
  DataTable: true,
66
67
  DatePicker: true,
67
68
  DateField: true,
@@ -395,6 +396,12 @@ _Object$defineProperty(exports, "ComboBoxField", {
395
396
  return _ComboBoxField["default"];
396
397
  }
397
398
  });
399
+ _Object$defineProperty(exports, "CopyButton", {
400
+ enumerable: true,
401
+ get: function get() {
402
+ return _CopyButton["default"];
403
+ }
404
+ });
398
405
  _Object$defineProperty(exports, "CopyText", {
399
406
  enumerable: true,
400
407
  get: function get() {
@@ -1507,6 +1514,7 @@ _forEachInstanceProperty(_context20 = _Object$keys(_CollapsiblePanelItem)).call(
1507
1514
  var _ColorField = _interopRequireDefault(require("./components/ColorField"));
1508
1515
  var _ComboBoxField = _interopRequireDefault(require("./components/ComboBoxField"));
1509
1516
  var _CopyText = _interopRequireDefault(require("./components/CopyText"));
1517
+ var _CopyButton = _interopRequireDefault(require("./components/CopyText/CopyButton"));
1510
1518
  var _DataTable = _interopRequireWildcard(require("./components/DataTable"));
1511
1519
  _forEachInstanceProperty(_context21 = _Object$keys(_DataTable)).call(_context21, function (key) {
1512
1520
  if (key === "default" || key === "__esModule") return;
@@ -1,7 +1,7 @@
1
1
  import _defineProperty from "@babel/runtime-corejs3/helpers/esm/defineProperty";
2
2
  import _extends from "@babel/runtime-corejs3/helpers/esm/extends";
3
3
  import _objectWithoutProperties from "@babel/runtime-corejs3/helpers/esm/objectWithoutProperties";
4
- var _excluded = ["avatarProps", "children", "className", "data", "headerProps", "headerWrapperProps", "slots", "subtextProps"];
4
+ var _excluded = ["avatarProps", "children", "className", "data", "headerProps", "headerWrapperProps", "isCopyable", "slots", "subtextProps"];
5
5
  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; }
6
6
  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) { _defineProperty(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; }
7
7
  import _concatInstanceProperty from "@babel/runtime-corejs3/core-js-stable/instance/concat";
@@ -16,7 +16,7 @@ import _Object$defineProperty from "@babel/runtime-corejs3/core-js-stable/object
16
16
  import React, { forwardRef } from 'react';
17
17
  import PropTypes from 'prop-types';
18
18
  import { useGetTheme } from '../../hooks';
19
- import { Avatar, Box, Icon, Image, Text } from '../../index';
19
+ import { Avatar, Box, CopyText, Icon, Image, Text } from '../../index';
20
20
  import { SharedItemPropTypes } from '../ListViewItem/listViewItemAttributes';
21
21
  import { jsx as ___EmotionJSX } from "@emotion/react";
22
22
  export var PANEL_HEADER_ICON = '-panel-header-icon';
@@ -28,6 +28,7 @@ var PanelHeader = /*#__PURE__*/forwardRef(function (_ref, ref) {
28
28
  data = _ref.data,
29
29
  headerProps = _ref.headerProps,
30
30
  headerWrapperProps = _ref.headerWrapperProps,
31
+ isCopyable = _ref.isCopyable,
31
32
  slots = _ref.slots,
32
33
  subtextProps = _ref.subtextProps,
33
34
  others = _objectWithoutProperties(_ref, _excluded);
@@ -91,7 +92,12 @@ var PanelHeader = /*#__PURE__*/forwardRef(function (_ref, ref) {
91
92
  variant: text || subtext ? 'panelHeader.data' : 'panelHeader.emptyData'
92
93
  }, renderLeftContent(), (text || subtext) && ___EmotionJSX(Box, headerWrapperPropsSpread, text && ___EmotionJSX(Text, _extends({}, headerPropsSpread, {
93
94
  variant: "panelHeaderText"
94
- }), text), subtext && ___EmotionJSX(Text, {
95
+ }), text), subtext && isCopyable ? ___EmotionJSX(CopyText, {
96
+ mode: "nonClickableContent",
97
+ textToCopy: subtext
98
+ }, ___EmotionJSX(Text, {
99
+ variant: "panelHeaderSubtext"
100
+ }, subtext)) : subtext && ___EmotionJSX(Text, {
95
101
  variant: "panelHeaderSubtext"
96
102
  }, subtext)));
97
103
  return ___EmotionJSX(Box, _extends({
@@ -113,6 +119,7 @@ var PanelHeader = /*#__PURE__*/forwardRef(function (_ref, ref) {
113
119
  }, children)));
114
120
  });
115
121
  PanelHeader.propTypes = _objectSpread(_objectSpread({}, SharedItemPropTypes), {}, {
122
+ isCopyable: PropTypes.bool,
116
123
  slots: PropTypes.shape({
117
124
  rightOfData: PropTypes.node
118
125
  })
@@ -164,8 +164,20 @@ export var BreadcrumbsWithExtraLongText = function BreadcrumbsWithExtraLongText(
164
164
  }
165
165
  }, ___EmotionJSX(PanelHeaderCloseButton, null));
166
166
  };
167
- export var WithExtraLongText = function WithExtraLongText(_ref4) {
167
+ export var WithCopyableSubtext = function WithCopyableSubtext(_ref4) {
168
168
  var args = _extends({}, (_objectDestructuringEmpty(_ref4), _ref4));
169
+ return ___EmotionJSX(PanelHeader, _extends({}, args, {
170
+ isCopyable: true,
171
+ data: {
172
+ icon: AccountIcon,
173
+ subtext: 'rad_developer@pingidentity.com',
174
+ text: 'Fons Vernall',
175
+ avatarDefaultText: 'FV'
176
+ }
177
+ }));
178
+ };
179
+ export var WithExtraLongText = function WithExtraLongText(_ref5) {
180
+ var args = _extends({}, (_objectDestructuringEmpty(_ref5), _ref5));
169
181
  return ___EmotionJSX(PanelHeader, _extends({}, args, {
170
182
  data: {
171
183
  avatarDefaultText: 'FV',
@@ -5,15 +5,36 @@ import _Object$getOwnPropertyDescriptor from "@babel/runtime-corejs3/core-js-sta
5
5
  import _forEachInstanceProperty from "@babel/runtime-corejs3/core-js-stable/instance/for-each";
6
6
  import _Object$getOwnPropertyDescriptors from "@babel/runtime-corejs3/core-js-stable/object/get-own-property-descriptors";
7
7
  import _Object$defineProperties from "@babel/runtime-corejs3/core-js-stable/object/define-properties";
8
- import _Object$defineProperty from "@babel/runtime-corejs3/core-js-stable/object/define-property";
8
+ import _Symbol from "@babel/runtime-corejs3/core-js-stable/symbol";
9
+ import _Object$create from "@babel/runtime-corejs3/core-js-stable/object/create";
10
+ import _bindInstanceProperty from "@babel/runtime-corejs3/core-js-stable/instance/bind";
11
+ import _Object$getPrototypeOf from "@babel/runtime-corejs3/core-js-stable/object/get-prototype-of";
12
+ import _Object$setPrototypeOf from "@babel/runtime-corejs3/core-js-stable/object/set-prototype-of";
13
+ import _Symbol$asyncIterator from "@babel/runtime-corejs3/core-js-stable/symbol/async-iterator";
14
+ import _Promise from "@babel/runtime-corejs3/core-js-stable/promise";
15
+ import _Symbol$iterator from "@babel/runtime-corejs3/core-js-stable/symbol/iterator";
16
+ import _reverseInstanceProperty from "@babel/runtime-corejs3/core-js-stable/instance/reverse";
17
+ import _typeof from "@babel/runtime-corejs3/helpers/esm/typeof";
18
+ import _asyncToGenerator from "@babel/runtime-corejs3/helpers/esm/asyncToGenerator";
9
19
  import _defineProperty from "@babel/runtime-corejs3/helpers/esm/defineProperty";
10
20
  import _extends from "@babel/runtime-corejs3/helpers/esm/extends";
21
+ 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 }; })(); }
22
+ 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"); }
23
+ 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; }; }
24
+ 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(); }); }
25
+ function _regeneratorAsyncGen(r, e, t, o, n) { return new _regeneratorAsyncIterator(_regenerator().w(r, e, t, o), n || _Promise); }
26
+ 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); }
27
+ 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 }; })(); }
28
+ function _regeneratorDefine2(e, r, n, t) { var i = _Object$defineProperty; 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); }
29
+ function _OverloadYield(e, d) { this.v = e, this.k = d; }
11
30
  import _concatInstanceProperty from "@babel/runtime-corejs3/core-js-stable/instance/concat";
31
+ import _Object$defineProperty from "@babel/runtime-corejs3/core-js-stable/object/define-property";
12
32
  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; }
13
- 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) { _defineProperty(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; }
33
+ 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) { _defineProperty(e, r, t[r]); }) : _Object$getOwnPropertyDescriptors ? _Object$defineProperties(e, _Object$getOwnPropertyDescriptors(t)) : _forEachInstanceProperty(_context5 = ownKeys(Object(t))).call(_context5, function (r) { _Object$defineProperty(e, r, _Object$getOwnPropertyDescriptor(t, r)); }); } return e; }
14
34
  import React from 'react';
15
35
  import AccountIcon from '@pingux/mdi-react/AccountIcon';
16
36
  import { act } from '@testing-library/react';
37
+ import userEvent from '@testing-library/user-event';
17
38
  import { AstroProvider, OnyxTheme, PanelHeader, PanelHeaderSwitchField } from '../../index';
18
39
  import { pingImg } from '../../utils/devUtils/constants/images';
19
40
  import { render, screen } from '../../utils/testUtils/testWrapper';
@@ -75,6 +96,96 @@ describe('PanelHeader', function () {
75
96
  });
76
97
  screen.getByRole('switch');
77
98
  });
99
+ describe('isCopyable', function () {
100
+ var originalClipboard = _objectSpread({}, global.navigator.clipboard);
101
+ beforeEach(function () {
102
+ var mockClipboard = {
103
+ writeText: jest.fn()
104
+ };
105
+ _Object$defineProperty(window, 'navigator', {
106
+ value: {
107
+ clipboard: mockClipboard
108
+ },
109
+ configurable: true
110
+ });
111
+ });
112
+ afterEach(function () {
113
+ _Object$defineProperty(window, 'navigator', {
114
+ value: {
115
+ clipboard: originalClipboard
116
+ },
117
+ configurable: true
118
+ });
119
+ jest.resetAllMocks();
120
+ });
121
+ test('renders copy button when isCopyable is true and subtext is present', function () {
122
+ render(___EmotionJSX(PanelHeader, _extends({}, defaultProps, {
123
+ isCopyable: true
124
+ })));
125
+ expect(screen.getByRole('button', {
126
+ name: 'copy to clipboard'
127
+ })).toBeInTheDocument();
128
+ });
129
+ test('does not render copy button when isCopyable is omitted and subtext is present', function () {
130
+ render(___EmotionJSX(PanelHeader, defaultProps));
131
+ expect(screen.queryByRole('button', {
132
+ name: 'copy to clipboard'
133
+ })).not.toBeInTheDocument();
134
+ });
135
+ test('does not render copy button when isCopyable is false and subtext is present', function () {
136
+ render(___EmotionJSX(PanelHeader, _extends({}, defaultProps, {
137
+ isCopyable: false
138
+ })));
139
+ expect(screen.queryByRole('button', {
140
+ name: 'copy to clipboard'
141
+ })).not.toBeInTheDocument();
142
+ });
143
+ test('does not render copy button when isCopyable is true and subtext is absent', function () {
144
+ var propsWithoutSubtext = {
145
+ data: {
146
+ text: 'testText'
147
+ }
148
+ };
149
+ render(___EmotionJSX(PanelHeader, _extends({}, propsWithoutSubtext, {
150
+ isCopyable: true
151
+ })));
152
+ expect(screen.queryByRole('button', {
153
+ name: 'copy to clipboard'
154
+ })).not.toBeInTheDocument();
155
+ });
156
+ test('clicking copy button calls navigator.clipboard.writeText with the subtext value', /*#__PURE__*/_asyncToGenerator(/*#__PURE__*/_regeneratorRuntime().mark(function _callee2() {
157
+ var copyButton;
158
+ return _regeneratorRuntime().wrap(function _callee2$(_context3) {
159
+ while (1) switch (_context3.prev = _context3.next) {
160
+ case 0:
161
+ render(___EmotionJSX(PanelHeader, _extends({}, defaultProps, {
162
+ isCopyable: true
163
+ })));
164
+ copyButton = screen.getByRole('button', {
165
+ name: 'copy to clipboard'
166
+ });
167
+ _context3.next = 4;
168
+ return act(/*#__PURE__*/_asyncToGenerator(/*#__PURE__*/_regeneratorRuntime().mark(function _callee() {
169
+ return _regeneratorRuntime().wrap(function _callee$(_context2) {
170
+ while (1) switch (_context2.prev = _context2.next) {
171
+ case 0:
172
+ return _context2.abrupt("return", userEvent.click(copyButton));
173
+ case 1:
174
+ case "end":
175
+ return _context2.stop();
176
+ }
177
+ }, _callee);
178
+ })));
179
+ case 4:
180
+ expect(navigator.clipboard.writeText).toHaveBeenCalledTimes(1);
181
+ expect(navigator.clipboard.writeText).toHaveBeenCalledWith(defaultProps.data.subtext);
182
+ case 6:
183
+ case "end":
184
+ return _context3.stop();
185
+ }
186
+ }, _callee2);
187
+ })));
188
+ });
78
189
  });
79
190
  test('renders icon if both icon and image are passed', function () {
80
191
  getComponent();
@@ -63,6 +63,14 @@ var PanelHeaderComponent = function PanelHeaderComponent() {
63
63
  rightOfData: breadcrumbs
64
64
  }
65
65
  }, ___EmotionJSX(PanelHeaderCloseButton, null)), ___EmotionJSX(PanelHeader, {
66
+ isCopyable: true,
67
+ data: {
68
+ icon: AccountIcon,
69
+ subtext: 'rad_developer@pingidentity.com',
70
+ text: 'Fons Vernall',
71
+ avatarDefaultText: 'FV'
72
+ }
73
+ }), ___EmotionJSX(PanelHeader, {
66
74
  data: {
67
75
  avatarDefaultText: 'FV',
68
76
  icon: AccountIcon,
package/lib/index.js CHANGED
@@ -73,6 +73,7 @@ export * from './components/CollapsiblePanelItem';
73
73
  export { default as ColorField } from './components/ColorField';
74
74
  export { default as ComboBoxField } from './components/ComboBoxField';
75
75
  export { default as CopyText } from './components/CopyText';
76
+ export { default as CopyButton } from './components/CopyText/CopyButton';
76
77
  export { default as DataTable } from './components/DataTable';
77
78
  export * from './components/DataTable';
78
79
  export { default as DatePicker } from './components/DatePicker';
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@pingux/astro",
3
- "version": "2.216.0-alpha.0",
3
+ "version": "2.217.0-alpha.0",
4
4
  "description": "React component library for Ping Identity's design system",
5
5
  "repository": {
6
6
  "type": "git",