@pingux/astro 2.40.0-alpha.0 → 2.40.0-alpha.2

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.
@@ -15,12 +15,16 @@ _Object$defineProperty(exports, "__esModule", {
15
15
  value: true
16
16
  });
17
17
  exports["default"] = exports.Default = void 0;
18
+ var _extends2 = _interopRequireDefault(require("@babel/runtime-corejs3/helpers/extends"));
18
19
  var _defineProperty2 = _interopRequireDefault(require("@babel/runtime-corejs3/helpers/defineProperty"));
19
20
  var _slicedToArray2 = _interopRequireDefault(require("@babel/runtime-corejs3/helpers/slicedToArray"));
20
21
  var _react = _interopRequireWildcard(require("react"));
22
+ var _reactAria = require("react-aria");
21
23
  var _CheckIcon = _interopRequireDefault(require("@pingux/mdi-react/CheckIcon"));
22
24
  var _CloseIcon = _interopRequireDefault(require("@pingux/mdi-react/CloseIcon"));
25
+ var _interactions = require("@react-aria/interactions");
23
26
  var _storybookAddonDesigns = require("storybook-addon-designs");
27
+ var _hooks = require("../hooks");
24
28
  var _index = require("../index");
25
29
  var _figmaLinks = require("../utils/designUtils/figmaLinks");
26
30
  var _react2 = require("@emotion/react");
@@ -50,6 +54,14 @@ var inputProps = {
50
54
  ariaLabel: 'Example aria label'
51
55
  };
52
56
  var sx = {
57
+ containerFocused: {
58
+ padding: 0,
59
+ position: 'relative',
60
+ borderColor: 'accent.60',
61
+ borderStyle: 'solid',
62
+ borderRadius: '3px 2px 2px 3px',
63
+ borderWidth: '1px'
64
+ },
53
65
  editablePreview: {
54
66
  whiteSpace: 'pre-line',
55
67
  width: '100%',
@@ -63,37 +75,61 @@ var sx = {
63
75
  fontSize: 'md',
64
76
  fontWeight: 1,
65
77
  lineHeight: '18px',
78
+ '&:hover': {
79
+ cursor: 'pointer',
80
+ bg: 'accent.95'
81
+ },
66
82
  '&:focus': {
67
83
  outline: 'none',
68
- boxShadow: 'focus',
84
+ borderRadius: '2px',
69
85
  borderColor: 'active',
86
+ borderWidth: '2px',
87
+ borderStyle: 'solid',
88
+ paddingLeft: '3px',
89
+ paddingBottom: '4px'
90
+ },
91
+ '&.is-pressed': {
70
92
  borderWidth: '1px',
71
- borderStyle: 'solid'
93
+ paddingLeft: '4px',
94
+ paddingBottom: 'xs'
72
95
  }
73
96
  },
74
97
  editableInputWrapper: {
75
- marginRight: '30px',
76
- flexGrow: 1
98
+ marginRight: '36px',
99
+ flexGrow: 1,
100
+ '&.is-focused textarea': {
101
+ outline: 'none'
102
+ },
103
+ '& label': {
104
+ margin: 0
105
+ },
106
+ '& textarea': {
107
+ minHeight: '45px',
108
+ height: '45px',
109
+ padding: '13px 35px 15px 18px',
110
+ lineHeight: '100%',
111
+ resize: 'vertical'
112
+ }
77
113
  },
78
114
  editableInpuTextArea: {
79
115
  maxHeight: '150px'
80
116
  },
81
117
  editableControlWrapper: {
82
118
  position: 'absolute',
83
- right: '0',
84
- top: '27.5%',
119
+ right: '5px',
120
+ top: 'calc(50% - 13px)',
85
121
  alignItems: 'center',
86
122
  justifyContent: 'space-between'
87
123
  },
88
124
  editableControlIconButton: {
89
- marginRight: 'md',
125
+ marginRight: '20px',
90
126
  width: '20px',
91
127
  height: '20px'
92
128
  }
93
129
  };
94
130
  var Default = function Default() {
95
131
  return (0, _react2.jsx)(Editable, {
96
- value: "Some value..."
132
+ value: "Inline Editable text"
97
133
  }, (0, _react2.jsx)(EditablePreview, null), (0, _react2.jsx)(EditableInput, {
98
134
  inputProps: inputProps
99
135
  }), (0, _react2.jsx)(EditableControl, {
@@ -118,6 +154,7 @@ var Editable = function Editable(props) {
118
154
  isEditing = props.isEditing;
119
155
  var editableContextValue = {
120
156
  isEditing: isEditing || false,
157
+ isFocused: false,
121
158
  prevValue: '',
122
159
  value: value || ''
123
160
  };
@@ -126,7 +163,8 @@ var Editable = function Editable(props) {
126
163
  editableContext = _useState2[0],
127
164
  setEditableContext = _useState2[1];
128
165
  return (0, _react2.jsx)(_index.Box, {
129
- sx: {
166
+ sx: editableContext.isEditing && editableContext.isFocused ? sx.containerFocused : {
167
+ padding: '1px',
130
168
  position: 'relative'
131
169
  }
132
170
  }, (0, _react2.jsx)(EditableAreaProvider, {
@@ -148,6 +186,12 @@ var EditablePreview = function EditablePreview() {
148
186
  _useState4 = (0, _slicedToArray2["default"])(_useState3, 2),
149
187
  hasFocus = _useState4[0],
150
188
  setFocus = _useState4[1];
189
+ var editablePreview = (0, _react.useRef)(null);
190
+ var _usePress = (0, _interactions.usePress)({
191
+ ref: editablePreview
192
+ }),
193
+ pressProps = _usePress.pressProps,
194
+ isPressed = _usePress.isPressed;
151
195
  var editablePreviewDynamicSx = {
152
196
  backgroundColor: hasFocus ? 'accent.95' : 'white',
153
197
  borderBottom: editableContext.isEditing ? '0px' : '1px dashed',
@@ -155,6 +199,10 @@ var EditablePreview = function EditablePreview() {
155
199
  background: editableContext.isEditing ? 'white' : 'accent.95'
156
200
  }
157
201
  };
202
+ var _useStatusClasses = (0, _hooks.useStatusClasses)('', {
203
+ isPressed: isPressed
204
+ }),
205
+ classNames = _useStatusClasses.classNames;
158
206
  (0, _react.useEffect)(function () {
159
207
  if (hasFocus && editableContext.isEditing) {
160
208
  setFocus(false);
@@ -172,7 +220,8 @@ var EditablePreview = function EditablePreview() {
172
220
  }));
173
221
  }
174
222
  };
175
- return (0, _react2.jsx)(_index.Box, {
223
+ return (0, _react2.jsx)(_index.Box, (0, _extends2["default"])({}, pressProps, {
224
+ ref: editablePreview,
176
225
  tabIndex: editableContext.isEditing ? '-1' : '0',
177
226
  display: editableContext.isEditing ? 'none' : 'flex',
178
227
  "aria-hidden": editableContext.isEditing,
@@ -187,8 +236,9 @@ var EditablePreview = function EditablePreview() {
187
236
  return setFocus(false);
188
237
  },
189
238
  placeholder: "Click or press enter to edit text",
239
+ className: classNames,
190
240
  sx: _objectSpread(_objectSpread({}, editablePreviewDynamicSx), sx.editablePreview)
191
- }, editableContext.value);
241
+ }), editableContext.value);
192
242
  };
193
243
 
194
244
  /**
@@ -212,6 +262,14 @@ var EditableInput = function EditableInput(props) {
212
262
  _useState8 = (0, _slicedToArray2["default"])(_useState7, 2),
213
263
  editingValue = _useState8[0],
214
264
  setEditingValue = _useState8[1];
265
+ var _useFocusRing = (0, _reactAria.useFocusRing)(),
266
+ focusProps = _useFocusRing.focusProps,
267
+ isFocusVisible = _useFocusRing.isFocusVisible;
268
+ (0, _react.useEffect)(function () {
269
+ setEditableContext(_objectSpread(_objectSpread({}, editableContext), {}, {
270
+ isFocused: isFocusVisible
271
+ }));
272
+ }, [isFocusVisible]);
215
273
  (0, _react.useEffect)(function () {
216
274
  setEditingValue(editableContext.value);
217
275
  }, [editableContext.value]);
@@ -245,12 +303,18 @@ var EditableInput = function EditableInput(props) {
245
303
  }));
246
304
  }
247
305
  };
306
+ var _useStatusClasses2 = (0, _hooks.useStatusClasses)('', {
307
+ isFocused: isFocusVisible
308
+ }),
309
+ classNames = _useStatusClasses2.classNames;
248
310
  return (0, _react2.jsx)(_index.Box, {
249
311
  display: editableContext.isEditing ? 'flex' : 'none',
250
312
  "aria-hidden": !editableContext.isEditing,
313
+ className: classNames,
251
314
  sx: sx.editableInputWrapper
252
- }, (0, _react2.jsx)(_index.TextAreaField, {
253
- rows: 1,
315
+ }, (0, _react2.jsx)(_index.TextAreaField, (0, _extends2["default"])({
316
+ rows: 1
317
+ }, focusProps, {
254
318
  ref: editableInput,
255
319
  role: "textbox",
256
320
  contenteditable: "true",
@@ -259,9 +323,8 @@ var EditableInput = function EditableInput(props) {
259
323
  onKeyDown: handleKeyDown,
260
324
  value: editingValue,
261
325
  "aria-label": ariaLabel,
262
- sx: sx.editableInpuTextArea,
263
- isUnresizable: true
264
- }));
326
+ sx: sx.editableInpuTextArea
327
+ })));
265
328
  };
266
329
 
267
330
  /**
@@ -10,11 +10,11 @@ _Object$defineProperty(exports, "__esModule", {
10
10
  });
11
11
  exports["default"] = exports.LabelValuePairs = exports.EditPanel = exports.DisplayPanel = exports.ColorBlockButton = exports.AddAttributeButton = void 0;
12
12
  var _extends2 = _interopRequireDefault(require("@babel/runtime-corejs3/helpers/extends"));
13
+ var _concat = _interopRequireDefault(require("@babel/runtime-corejs3/core-js-stable/instance/concat"));
13
14
  var _map = _interopRequireDefault(require("@babel/runtime-corejs3/core-js-stable/instance/map"));
14
15
  var _keys = _interopRequireDefault(require("@babel/runtime-corejs3/core-js-stable/object/keys"));
15
- var _concat = _interopRequireDefault(require("@babel/runtime-corejs3/core-js-stable/instance/concat"));
16
16
  var _react = _interopRequireWildcard(require("react"));
17
- var _reactStately = require("react-stately");
17
+ var _ChevronRightIcon = _interopRequireDefault(require("@pingux/mdi-react/ChevronRightIcon"));
18
18
  var _PencilIcon = _interopRequireDefault(require("@pingux/mdi-react/PencilIcon"));
19
19
  var _PlusIcon = _interopRequireDefault(require("@pingux/mdi-react/PlusIcon"));
20
20
  var _hooks = require("../hooks");
@@ -107,12 +107,46 @@ var data = {
107
107
  }
108
108
  };
109
109
  var OverlayWrapper = function OverlayWrapper(_ref) {
110
- var children = _ref.children;
110
+ var _context, _context2, _context3;
111
+ var children = _ref.children,
112
+ isEditPanel = _ref.isEditPanel;
111
113
  var _useOverlayPanelState = (0, _hooks.useOverlayPanelState)({
112
114
  isDefaultOpen: true
113
115
  }),
114
116
  state = _useOverlayPanelState.state;
115
117
  var triggerRef = (0, _react.useRef)();
118
+ var personalInfo = data.personalInfo;
119
+ var fields = personalInfo.fields;
120
+ var renderBreadcrumbs = (0, _react2.jsx)(_index.Breadcrumbs, {
121
+ icon: _ChevronRightIcon["default"]
122
+ }, (0, _react2.jsx)(_index.Item, {
123
+ "aria-label": personalInfo.label,
124
+ href: "https://www.pingidentity.com",
125
+ key: personalInfo.key,
126
+ variant: "buttons.link"
127
+ }, (0, _concat["default"])(_context = "".concat(fields[0].value, " ")).call(_context, fields[1].value)), (0, _react2.jsx)(_index.Item, {
128
+ "aria-label": "Edit",
129
+ key: "editKey",
130
+ variant: "buttons.link"
131
+ }, "Edit"));
132
+ var image = {
133
+ src: _UserImage["default"],
134
+ alt: 'user image'
135
+ };
136
+ var panelHeaderProps = isEditPanel ? {
137
+ data: {
138
+ image: image
139
+ },
140
+ slots: {
141
+ rightOfData: renderBreadcrumbs
142
+ }
143
+ } : {
144
+ data: {
145
+ image: image,
146
+ text: (0, _concat["default"])(_context2 = "".concat(fields[0].value, " ")).call(_context2, fields[1].value),
147
+ subtext: (0, _concat["default"])(_context3 = "".concat(fields[0].value.toLowerCase())).call(_context3, fields[1].value.toLowerCase())
148
+ }
149
+ };
116
150
  return (0, _react2.jsx)(_index.OverlayProvider, null, (0, _react2.jsx)(_index.Button, {
117
151
  ref: triggerRef,
118
152
  onPress: state.open
@@ -121,21 +155,18 @@ var OverlayWrapper = function OverlayWrapper(_ref) {
121
155
  isTransitioning: state.isTransitioning,
122
156
  size: "large",
123
157
  p: "0"
124
- }, (0, _react2.jsx)(_index.PanelHeader, {
125
- data: {
126
- image: {
127
- src: _UserImage["default"],
128
- alt: 'user image'
129
- },
130
- text: data.personalInfo.fields[0].value,
131
- subtext: data.personalInfo.fields[1].value
132
- }
133
- }, (0, _react2.jsx)(_index.PanelHeaderSwitchField, null), (0, _react2.jsx)(_index.PanelHeaderMenu, null), (0, _react2.jsx)(_index.PanelHeaderCloseButton, {
158
+ }, (0, _react2.jsx)(_index.PanelHeader, panelHeaderProps, !isEditPanel && (0, _react2.jsx)(_index.PanelHeaderSwitchField, null), !isEditPanel && (0, _react2.jsx)(_index.PanelHeaderMenu, null, (0, _react2.jsx)(_index.Item, {
159
+ key: "enable"
160
+ }, "Enable user"), (0, _react2.jsx)(_index.Item, {
161
+ key: "disable"
162
+ }, "Disable user"), (0, _react2.jsx)(_index.Item, {
163
+ key: "delete"
164
+ }, "Delete user")), (0, _react2.jsx)(_index.PanelHeaderCloseButton, {
134
165
  onPress: state.close
135
166
  })), children));
136
167
  };
137
168
  var DisplayPanel = function DisplayPanel() {
138
- var _context, _context2;
169
+ var _context4, _context5;
139
170
  var renderProfileTab = (0, _react2.jsx)(_react["default"].Fragment, null, (0, _react2.jsx)(_index.Box, {
140
171
  isRow: true,
141
172
  gap: "md",
@@ -149,13 +180,13 @@ var DisplayPanel = function DisplayPanel() {
149
180
  isRow: true,
150
181
  justifyContent: "space-between"
151
182
  }, (0, _react2.jsx)(_index.AccordionGroup, {
152
- defaultExpandedKeys: (0, _map["default"])(_context = (0, _keys["default"])(data)).call(_context, function (item) {
183
+ defaultExpandedKeys: (0, _map["default"])(_context4 = (0, _keys["default"])(data)).call(_context4, function (item) {
153
184
  return data[item].key;
154
185
  }),
155
186
  labelHeadingTag: "h2"
156
- }, (0, _map["default"])(_context2 = (0, _keys["default"])(data)).call(_context2, function (item) {
157
- var _context3;
158
- return (0, _react2.jsx)(_reactStately.Item, {
187
+ }, (0, _map["default"])(_context5 = (0, _keys["default"])(data)).call(_context5, function (item) {
188
+ var _context6;
189
+ return (0, _react2.jsx)(_index.Item, {
159
190
  "data-id": data[item].label,
160
191
  key: data[item].key,
161
192
  label: data[item].label,
@@ -173,7 +204,7 @@ var DisplayPanel = function DisplayPanel() {
173
204
  }), data[item].badges && (0, _react2.jsx)(_index.Box, {
174
205
  isRow: true,
175
206
  gap: "sm"
176
- }, (0, _map["default"])(_context3 = data[item].badges).call(_context3, function (badge) {
207
+ }, (0, _map["default"])(_context6 = data[item].badges).call(_context6, function (badge) {
177
208
  return (0, _react2.jsx)(_index.Badge, {
178
209
  label: badge,
179
210
  variant: "defaultBadge",
@@ -366,8 +397,10 @@ var editData = {
366
397
  }
367
398
  };
368
399
  var EditPanel = function EditPanel() {
369
- var _context4, _context5, _context6;
370
- return (0, _react2.jsx)(OverlayWrapper, null, (0, _react2.jsx)(_index.Box, {
400
+ var _context7, _context8, _context9;
401
+ return (0, _react2.jsx)(OverlayWrapper, {
402
+ isEditPanel: true
403
+ }, (0, _react2.jsx)(_index.Box, {
371
404
  p: "lg",
372
405
  pb: "0"
373
406
  }, (0, _react2.jsx)(_index.Box, {
@@ -382,16 +415,16 @@ var EditPanel = function EditPanel() {
382
415
  label: "Population",
383
416
  isRequired: true,
384
417
  defaultSelectedKey: "population"
385
- }, (0, _react2.jsx)(_reactStately.Item, {
418
+ }, (0, _react2.jsx)(_index.Item, {
386
419
  key: "population"
387
420
  }, "Denver"))), (0, _react2.jsx)(_index.AccordionGroup, {
388
- defaultExpandedKeys: (0, _concat["default"])(_context4 = []).call(_context4, (0, _map["default"])(_context5 = (0, _keys["default"])(editData)).call(_context5, function (item) {
421
+ defaultExpandedKeys: (0, _concat["default"])(_context7 = []).call(_context7, (0, _map["default"])(_context8 = (0, _keys["default"])(editData)).call(_context8, function (item) {
389
422
  return editData[item].key;
390
423
  }), ['preferencesKey', 'customAttributesKey', 'jsonAttributesKey']),
391
424
  labelHeadingTag: "h2"
392
- }, (0, _map["default"])(_context6 = (0, _keys["default"])(editData)).call(_context6, function (item) {
393
- var _context7;
394
- return (0, _react2.jsx)(_reactStately.Item, {
425
+ }, (0, _map["default"])(_context9 = (0, _keys["default"])(editData)).call(_context9, function (item) {
426
+ var _context10;
427
+ return (0, _react2.jsx)(_index.Item, {
395
428
  "data-id": editData[item].label,
396
429
  key: editData[item].key,
397
430
  label: editData[item].label,
@@ -404,7 +437,7 @@ var EditPanel = function EditPanel() {
404
437
  previewHeight: 40,
405
438
  previewWidth: 40,
406
439
  previewImage: _UserImage["default"]
407
- }), (0, _map["default"])(_context7 = editData[item].fields).call(_context7, function (_ref5) {
440
+ }), (0, _map["default"])(_context10 = editData[item].fields).call(_context10, function (_ref5) {
408
441
  var label = _ref5.label,
409
442
  value = _ref5.value,
410
443
  slot = _ref5.slot;
@@ -415,7 +448,7 @@ var EditPanel = function EditPanel() {
415
448
  defaultValue: value
416
449
  }), slot);
417
450
  })));
418
- }), (0, _react2.jsx)(_reactStately.Item, {
451
+ }), (0, _react2.jsx)(_index.Item, {
419
452
  "data-id": "preferences",
420
453
  key: "preferencesKey",
421
454
  label: "Preferences",
@@ -426,19 +459,19 @@ var EditPanel = function EditPanel() {
426
459
  }, (0, _react2.jsx)(_index.SelectField, {
427
460
  label: "Preferred Language",
428
461
  defaultSelectedKey: "language"
429
- }, (0, _react2.jsx)(_reactStately.Item, {
462
+ }, (0, _react2.jsx)(_index.Item, {
430
463
  key: "language"
431
464
  }, "Select a Language")), (0, _react2.jsx)(_index.SelectField, {
432
465
  label: "Locale",
433
466
  defaultSelectedKey: "language"
434
- }, (0, _react2.jsx)(_reactStately.Item, {
467
+ }, (0, _react2.jsx)(_index.Item, {
435
468
  key: "language"
436
469
  }, "Select a locale")), (0, _react2.jsx)(_index.SelectField, {
437
470
  label: "Timezone",
438
471
  defaultSelectedKey: "language"
439
- }, (0, _react2.jsx)(_reactStately.Item, {
472
+ }, (0, _react2.jsx)(_index.Item, {
440
473
  key: "language"
441
- }, "Select a timezone")))), (0, _react2.jsx)(_reactStately.Item, {
474
+ }, "Select a timezone")))), (0, _react2.jsx)(_index.Item, {
442
475
  "data-id": "customAttributes",
443
476
  key: "customAttributesKey",
444
477
  label: "Custom Attributes",
@@ -447,7 +480,7 @@ var EditPanel = function EditPanel() {
447
480
  fontWeight: "-1",
448
481
  fontSize: "md",
449
482
  textAlign: "center"
450
- }, "Click + Add to select a custom attribute")), (0, _react2.jsx)(_reactStately.Item, {
483
+ }, "Click + Add to select a custom attribute")), (0, _react2.jsx)(_index.Item, {
451
484
  "data-id": "jsonAttributes",
452
485
  key: "jsonAttributesKey",
453
486
  label: "JSON Attributes",
@@ -6,14 +6,18 @@ import _forEachInstanceProperty from "@babel/runtime-corejs3/core-js-stable/inst
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
8
  import _Object$defineProperty from "@babel/runtime-corejs3/core-js-stable/object/define-property";
9
+ import _extends from "@babel/runtime-corejs3/helpers/esm/extends";
9
10
  import _defineProperty from "@babel/runtime-corejs3/helpers/esm/defineProperty";
10
11
  import _slicedToArray from "@babel/runtime-corejs3/helpers/esm/slicedToArray";
11
12
  function ownKeys(object, enumerableOnly) { var keys = _Object$keys(object); if (_Object$getOwnPropertySymbols) { var symbols = _Object$getOwnPropertySymbols(object); enumerableOnly && (symbols = _filterInstanceProperty(symbols).call(symbols, function (sym) { return _Object$getOwnPropertyDescriptor(object, sym).enumerable; })), keys.push.apply(keys, symbols); } return keys; }
12
13
  function _objectSpread(target) { for (var i = 1; i < arguments.length; i++) { var _context, _context2; var source = null != arguments[i] ? arguments[i] : {}; i % 2 ? _forEachInstanceProperty(_context = ownKeys(Object(source), !0)).call(_context, function (key) { _defineProperty(target, key, source[key]); }) : _Object$getOwnPropertyDescriptors ? _Object$defineProperties(target, _Object$getOwnPropertyDescriptors(source)) : _forEachInstanceProperty(_context2 = ownKeys(Object(source))).call(_context2, function (key) { _Object$defineProperty(target, key, _Object$getOwnPropertyDescriptor(source, key)); }); } return target; }
13
14
  import React, { createContext, useContext, useEffect, useRef, useState } from 'react';
15
+ import { useFocusRing } from 'react-aria';
14
16
  import CheckIcon from '@pingux/mdi-react/CheckIcon';
15
17
  import CloseIcon from '@pingux/mdi-react/CloseIcon';
18
+ import { usePress } from '@react-aria/interactions';
16
19
  import { withDesign } from 'storybook-addon-designs';
20
+ import { useStatusClasses } from '../hooks';
17
21
  import { Box, Icon, IconButton, TextAreaField } from '../index';
18
22
  import { FIGMA_LINKS } from '../utils/designUtils/figmaLinks';
19
23
  import { jsx as ___EmotionJSX } from "@emotion/react";
@@ -38,6 +42,14 @@ var inputProps = {
38
42
  ariaLabel: 'Example aria label'
39
43
  };
40
44
  var sx = {
45
+ containerFocused: {
46
+ padding: 0,
47
+ position: 'relative',
48
+ borderColor: 'accent.60',
49
+ borderStyle: 'solid',
50
+ borderRadius: '3px 2px 2px 3px',
51
+ borderWidth: '1px'
52
+ },
41
53
  editablePreview: {
42
54
  whiteSpace: 'pre-line',
43
55
  width: '100%',
@@ -51,37 +63,61 @@ var sx = {
51
63
  fontSize: 'md',
52
64
  fontWeight: 1,
53
65
  lineHeight: '18px',
66
+ '&:hover': {
67
+ cursor: 'pointer',
68
+ bg: 'accent.95'
69
+ },
54
70
  '&:focus': {
55
71
  outline: 'none',
56
- boxShadow: 'focus',
72
+ borderRadius: '2px',
57
73
  borderColor: 'active',
74
+ borderWidth: '2px',
75
+ borderStyle: 'solid',
76
+ paddingLeft: '3px',
77
+ paddingBottom: '4px'
78
+ },
79
+ '&.is-pressed': {
58
80
  borderWidth: '1px',
59
- borderStyle: 'solid'
81
+ paddingLeft: '4px',
82
+ paddingBottom: 'xs'
60
83
  }
61
84
  },
62
85
  editableInputWrapper: {
63
- marginRight: '30px',
64
- flexGrow: 1
86
+ marginRight: '36px',
87
+ flexGrow: 1,
88
+ '&.is-focused textarea': {
89
+ outline: 'none'
90
+ },
91
+ '& label': {
92
+ margin: 0
93
+ },
94
+ '& textarea': {
95
+ minHeight: '45px',
96
+ height: '45px',
97
+ padding: '13px 35px 15px 18px',
98
+ lineHeight: '100%',
99
+ resize: 'vertical'
100
+ }
65
101
  },
66
102
  editableInpuTextArea: {
67
103
  maxHeight: '150px'
68
104
  },
69
105
  editableControlWrapper: {
70
106
  position: 'absolute',
71
- right: '0',
72
- top: '27.5%',
107
+ right: '5px',
108
+ top: 'calc(50% - 13px)',
73
109
  alignItems: 'center',
74
110
  justifyContent: 'space-between'
75
111
  },
76
112
  editableControlIconButton: {
77
- marginRight: 'md',
113
+ marginRight: '20px',
78
114
  width: '20px',
79
115
  height: '20px'
80
116
  }
81
117
  };
82
118
  export var Default = function Default() {
83
119
  return ___EmotionJSX(Editable, {
84
- value: "Some value..."
120
+ value: "Inline Editable text"
85
121
  }, ___EmotionJSX(EditablePreview, null), ___EmotionJSX(EditableInput, {
86
122
  inputProps: inputProps
87
123
  }), ___EmotionJSX(EditableControl, {
@@ -105,6 +141,7 @@ var Editable = function Editable(props) {
105
141
  isEditing = props.isEditing;
106
142
  var editableContextValue = {
107
143
  isEditing: isEditing || false,
144
+ isFocused: false,
108
145
  prevValue: '',
109
146
  value: value || ''
110
147
  };
@@ -113,7 +150,8 @@ var Editable = function Editable(props) {
113
150
  editableContext = _useState2[0],
114
151
  setEditableContext = _useState2[1];
115
152
  return ___EmotionJSX(Box, {
116
- sx: {
153
+ sx: editableContext.isEditing && editableContext.isFocused ? sx.containerFocused : {
154
+ padding: '1px',
117
155
  position: 'relative'
118
156
  }
119
157
  }, ___EmotionJSX(EditableAreaProvider, {
@@ -135,6 +173,12 @@ var EditablePreview = function EditablePreview() {
135
173
  _useState4 = _slicedToArray(_useState3, 2),
136
174
  hasFocus = _useState4[0],
137
175
  setFocus = _useState4[1];
176
+ var editablePreview = useRef(null);
177
+ var _usePress = usePress({
178
+ ref: editablePreview
179
+ }),
180
+ pressProps = _usePress.pressProps,
181
+ isPressed = _usePress.isPressed;
138
182
  var editablePreviewDynamicSx = {
139
183
  backgroundColor: hasFocus ? 'accent.95' : 'white',
140
184
  borderBottom: editableContext.isEditing ? '0px' : '1px dashed',
@@ -142,6 +186,10 @@ var EditablePreview = function EditablePreview() {
142
186
  background: editableContext.isEditing ? 'white' : 'accent.95'
143
187
  }
144
188
  };
189
+ var _useStatusClasses = useStatusClasses('', {
190
+ isPressed: isPressed
191
+ }),
192
+ classNames = _useStatusClasses.classNames;
145
193
  useEffect(function () {
146
194
  if (hasFocus && editableContext.isEditing) {
147
195
  setFocus(false);
@@ -159,7 +207,8 @@ var EditablePreview = function EditablePreview() {
159
207
  }));
160
208
  }
161
209
  };
162
- return ___EmotionJSX(Box, {
210
+ return ___EmotionJSX(Box, _extends({}, pressProps, {
211
+ ref: editablePreview,
163
212
  tabIndex: editableContext.isEditing ? '-1' : '0',
164
213
  display: editableContext.isEditing ? 'none' : 'flex',
165
214
  "aria-hidden": editableContext.isEditing,
@@ -174,8 +223,9 @@ var EditablePreview = function EditablePreview() {
174
223
  return setFocus(false);
175
224
  },
176
225
  placeholder: "Click or press enter to edit text",
226
+ className: classNames,
177
227
  sx: _objectSpread(_objectSpread({}, editablePreviewDynamicSx), sx.editablePreview)
178
- }, editableContext.value);
228
+ }), editableContext.value);
179
229
  };
180
230
 
181
231
  /**
@@ -199,6 +249,14 @@ var EditableInput = function EditableInput(props) {
199
249
  _useState8 = _slicedToArray(_useState7, 2),
200
250
  editingValue = _useState8[0],
201
251
  setEditingValue = _useState8[1];
252
+ var _useFocusRing = useFocusRing(),
253
+ focusProps = _useFocusRing.focusProps,
254
+ isFocusVisible = _useFocusRing.isFocusVisible;
255
+ useEffect(function () {
256
+ setEditableContext(_objectSpread(_objectSpread({}, editableContext), {}, {
257
+ isFocused: isFocusVisible
258
+ }));
259
+ }, [isFocusVisible]);
202
260
  useEffect(function () {
203
261
  setEditingValue(editableContext.value);
204
262
  }, [editableContext.value]);
@@ -232,12 +290,18 @@ var EditableInput = function EditableInput(props) {
232
290
  }));
233
291
  }
234
292
  };
293
+ var _useStatusClasses2 = useStatusClasses('', {
294
+ isFocused: isFocusVisible
295
+ }),
296
+ classNames = _useStatusClasses2.classNames;
235
297
  return ___EmotionJSX(Box, {
236
298
  display: editableContext.isEditing ? 'flex' : 'none',
237
299
  "aria-hidden": !editableContext.isEditing,
300
+ className: classNames,
238
301
  sx: sx.editableInputWrapper
239
- }, ___EmotionJSX(TextAreaField, {
240
- rows: 1,
302
+ }, ___EmotionJSX(TextAreaField, _extends({
303
+ rows: 1
304
+ }, focusProps, {
241
305
  ref: editableInput,
242
306
  role: "textbox",
243
307
  contenteditable: "true",
@@ -246,9 +310,8 @@ var EditableInput = function EditableInput(props) {
246
310
  onKeyDown: handleKeyDown,
247
311
  value: editingValue,
248
312
  "aria-label": ariaLabel,
249
- sx: sx.editableInpuTextArea,
250
- isUnresizable: true
251
- }));
313
+ sx: sx.editableInpuTextArea
314
+ })));
252
315
  };
253
316
 
254
317
  /**
@@ -1,13 +1,13 @@
1
1
  import _extends from "@babel/runtime-corejs3/helpers/esm/extends";
2
+ import _concatInstanceProperty from "@babel/runtime-corejs3/core-js-stable/instance/concat";
2
3
  import _mapInstanceProperty from "@babel/runtime-corejs3/core-js-stable/instance/map";
3
4
  import _Object$keys from "@babel/runtime-corejs3/core-js-stable/object/keys";
4
- import _concatInstanceProperty from "@babel/runtime-corejs3/core-js-stable/instance/concat";
5
5
  import React, { useRef } from 'react';
6
- import { Item } from 'react-stately';
6
+ import ChevronRightIcon from '@pingux/mdi-react/ChevronRightIcon';
7
7
  import PencilIcon from '@pingux/mdi-react/PencilIcon';
8
8
  import PlusIcon from '@pingux/mdi-react/PlusIcon';
9
9
  import { useOverlayPanelState } from '../hooks';
10
- import { AccordionGroup, Badge, Box, Button, ButtonBar, CheckboxField, EditButton, Icon, Image, ImageUploadField, NoticeIcon, OverlayPanel, OverlayProvider, PanelHeader, PanelHeaderCloseButton, PanelHeaderMenu, PanelHeaderSwitchField, SelectField, Tab, Tabs, Text, TextField } from '../index';
10
+ import { AccordionGroup, Badge, Box, Breadcrumbs, Button, ButtonBar, CheckboxField, EditButton, Icon, Image, ImageUploadField, Item, NoticeIcon, OverlayPanel, OverlayProvider, PanelHeader, PanelHeaderCloseButton, PanelHeaderMenu, PanelHeaderSwitchField, SelectField, Tab, Tabs, Text, TextField } from '../index';
11
11
  import { FIGMA_LINKS } from '../utils/designUtils/figmaLinks.ts';
12
12
  import UserImage from '../utils/devUtils/assets/UserImage.png';
13
13
  import statuses from '../utils/devUtils/constants/statuses';
@@ -93,12 +93,46 @@ var data = {
93
93
  }
94
94
  };
95
95
  var OverlayWrapper = function OverlayWrapper(_ref) {
96
- var children = _ref.children;
96
+ var _context, _context2, _context3;
97
+ var children = _ref.children,
98
+ isEditPanel = _ref.isEditPanel;
97
99
  var _useOverlayPanelState = useOverlayPanelState({
98
100
  isDefaultOpen: true
99
101
  }),
100
102
  state = _useOverlayPanelState.state;
101
103
  var triggerRef = useRef();
104
+ var personalInfo = data.personalInfo;
105
+ var fields = personalInfo.fields;
106
+ var renderBreadcrumbs = ___EmotionJSX(Breadcrumbs, {
107
+ icon: ChevronRightIcon
108
+ }, ___EmotionJSX(Item, {
109
+ "aria-label": personalInfo.label,
110
+ href: "https://www.pingidentity.com",
111
+ key: personalInfo.key,
112
+ variant: "buttons.link"
113
+ }, _concatInstanceProperty(_context = "".concat(fields[0].value, " ")).call(_context, fields[1].value)), ___EmotionJSX(Item, {
114
+ "aria-label": "Edit",
115
+ key: "editKey",
116
+ variant: "buttons.link"
117
+ }, "Edit"));
118
+ var image = {
119
+ src: UserImage,
120
+ alt: 'user image'
121
+ };
122
+ var panelHeaderProps = isEditPanel ? {
123
+ data: {
124
+ image: image
125
+ },
126
+ slots: {
127
+ rightOfData: renderBreadcrumbs
128
+ }
129
+ } : {
130
+ data: {
131
+ image: image,
132
+ text: _concatInstanceProperty(_context2 = "".concat(fields[0].value, " ")).call(_context2, fields[1].value),
133
+ subtext: _concatInstanceProperty(_context3 = "".concat(fields[0].value.toLowerCase())).call(_context3, fields[1].value.toLowerCase())
134
+ }
135
+ };
102
136
  return ___EmotionJSX(OverlayProvider, null, ___EmotionJSX(Button, {
103
137
  ref: triggerRef,
104
138
  onPress: state.open
@@ -107,21 +141,18 @@ var OverlayWrapper = function OverlayWrapper(_ref) {
107
141
  isTransitioning: state.isTransitioning,
108
142
  size: "large",
109
143
  p: "0"
110
- }, ___EmotionJSX(PanelHeader, {
111
- data: {
112
- image: {
113
- src: UserImage,
114
- alt: 'user image'
115
- },
116
- text: data.personalInfo.fields[0].value,
117
- subtext: data.personalInfo.fields[1].value
118
- }
119
- }, ___EmotionJSX(PanelHeaderSwitchField, null), ___EmotionJSX(PanelHeaderMenu, null), ___EmotionJSX(PanelHeaderCloseButton, {
144
+ }, ___EmotionJSX(PanelHeader, panelHeaderProps, !isEditPanel && ___EmotionJSX(PanelHeaderSwitchField, null), !isEditPanel && ___EmotionJSX(PanelHeaderMenu, null, ___EmotionJSX(Item, {
145
+ key: "enable"
146
+ }, "Enable user"), ___EmotionJSX(Item, {
147
+ key: "disable"
148
+ }, "Disable user"), ___EmotionJSX(Item, {
149
+ key: "delete"
150
+ }, "Delete user")), ___EmotionJSX(PanelHeaderCloseButton, {
120
151
  onPress: state.close
121
152
  })), children));
122
153
  };
123
154
  export var DisplayPanel = function DisplayPanel() {
124
- var _context, _context2;
155
+ var _context4, _context5;
125
156
  var renderProfileTab = ___EmotionJSX(React.Fragment, null, ___EmotionJSX(Box, {
126
157
  isRow: true,
127
158
  gap: "md",
@@ -135,12 +166,12 @@ export var DisplayPanel = function DisplayPanel() {
135
166
  isRow: true,
136
167
  justifyContent: "space-between"
137
168
  }, ___EmotionJSX(AccordionGroup, {
138
- defaultExpandedKeys: _mapInstanceProperty(_context = _Object$keys(data)).call(_context, function (item) {
169
+ defaultExpandedKeys: _mapInstanceProperty(_context4 = _Object$keys(data)).call(_context4, function (item) {
139
170
  return data[item].key;
140
171
  }),
141
172
  labelHeadingTag: "h2"
142
- }, _mapInstanceProperty(_context2 = _Object$keys(data)).call(_context2, function (item) {
143
- var _context3;
173
+ }, _mapInstanceProperty(_context5 = _Object$keys(data)).call(_context5, function (item) {
174
+ var _context6;
144
175
  return ___EmotionJSX(Item, {
145
176
  "data-id": data[item].label,
146
177
  key: data[item].key,
@@ -159,7 +190,7 @@ export var DisplayPanel = function DisplayPanel() {
159
190
  }), data[item].badges && ___EmotionJSX(Box, {
160
191
  isRow: true,
161
192
  gap: "sm"
162
- }, _mapInstanceProperty(_context3 = data[item].badges).call(_context3, function (badge) {
193
+ }, _mapInstanceProperty(_context6 = data[item].badges).call(_context6, function (badge) {
163
194
  return ___EmotionJSX(Badge, {
164
195
  label: badge,
165
196
  variant: "defaultBadge",
@@ -349,8 +380,10 @@ var editData = {
349
380
  }
350
381
  };
351
382
  export var EditPanel = function EditPanel() {
352
- var _context4, _context5, _context6;
353
- return ___EmotionJSX(OverlayWrapper, null, ___EmotionJSX(Box, {
383
+ var _context7, _context8, _context9;
384
+ return ___EmotionJSX(OverlayWrapper, {
385
+ isEditPanel: true
386
+ }, ___EmotionJSX(Box, {
354
387
  p: "lg",
355
388
  pb: "0"
356
389
  }, ___EmotionJSX(Box, {
@@ -368,12 +401,12 @@ export var EditPanel = function EditPanel() {
368
401
  }, ___EmotionJSX(Item, {
369
402
  key: "population"
370
403
  }, "Denver"))), ___EmotionJSX(AccordionGroup, {
371
- defaultExpandedKeys: _concatInstanceProperty(_context4 = []).call(_context4, _mapInstanceProperty(_context5 = _Object$keys(editData)).call(_context5, function (item) {
404
+ defaultExpandedKeys: _concatInstanceProperty(_context7 = []).call(_context7, _mapInstanceProperty(_context8 = _Object$keys(editData)).call(_context8, function (item) {
372
405
  return editData[item].key;
373
406
  }), ['preferencesKey', 'customAttributesKey', 'jsonAttributesKey']),
374
407
  labelHeadingTag: "h2"
375
- }, _mapInstanceProperty(_context6 = _Object$keys(editData)).call(_context6, function (item) {
376
- var _context7;
408
+ }, _mapInstanceProperty(_context9 = _Object$keys(editData)).call(_context9, function (item) {
409
+ var _context10;
377
410
  return ___EmotionJSX(Item, {
378
411
  "data-id": editData[item].label,
379
412
  key: editData[item].key,
@@ -387,7 +420,7 @@ export var EditPanel = function EditPanel() {
387
420
  previewHeight: 40,
388
421
  previewWidth: 40,
389
422
  previewImage: UserImage
390
- }), _mapInstanceProperty(_context7 = editData[item].fields).call(_context7, function (_ref5) {
423
+ }), _mapInstanceProperty(_context10 = editData[item].fields).call(_context10, function (_ref5) {
391
424
  var label = _ref5.label,
392
425
  value = _ref5.value,
393
426
  slot = _ref5.slot;
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@pingux/astro",
3
- "version": "2.40.0-alpha.0",
3
+ "version": "2.40.0-alpha.2",
4
4
  "description": "React component library for Ping Identity's design system",
5
5
  "repository": {
6
6
  "type": "git",