@portnet/ui 0.1.20 → 0.1.21

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.
@@ -8,13 +8,16 @@ exports.default = void 0;
8
8
  require("core-js/modules/web.dom-collections.iterator.js");
9
9
  require("core-js/modules/es.symbol.description.js");
10
10
  var _styles = require("@mui/material/styles");
11
- var _DateTimePicker = require("@mui/x-date-pickers/DateTimePicker");
11
+ var _DatePicker = require("@mui/x-date-pickers/DatePicker");
12
12
  var _formik = require("formik");
13
13
  var _moment = _interopRequireDefault(require("moment"));
14
14
  var _propTypes = _interopRequireDefault(require("prop-types"));
15
15
  var React = _interopRequireWildcard(require("react"));
16
16
  var _apperance = require("../../config/apperance");
17
17
  var _StyledMuiTextField = _interopRequireDefault(require("../common/StyledMuiTextField"));
18
+ var _PuiTextField = _interopRequireDefault(require("./PuiTextField"));
19
+ var _PuiButton = _interopRequireDefault(require("../buttons/PuiButton"));
20
+ var _PuiDialog = _interopRequireDefault(require("../others/PuiDialog"));
18
21
  var _jsxRuntime = require("react/jsx-runtime");
19
22
  const _excluded = ["id", "className", "sx", "label", "name", "required", "value", "minDate", "maxDate", "inputFormat", "format", "disablePast", "disableFuture", "error", "readOnly", "fullWidth", "disabled", "helperText", "onChange", "onBlur"],
20
23
  _excluded2 = ["id", "className", "sx", "label", "name", "required", "value", "minDate", "maxDate", "inputFormat", "format", "disablePast", "disableFuture", "error", "readOnly", "fullWidth", "disabled", "helperText", "onChange", "onBlur"],
@@ -31,22 +34,93 @@ function _toPropertyKey(t) { var i = _toPrimitive(t, "string"); return "symbol"
31
34
  function _toPrimitive(t, r) { if ("object" != typeof t || !t) return t; var e = t[Symbol.toPrimitive]; if (void 0 !== e) { var i = e.call(t, r || "default"); if ("object" != typeof i) return i; throw new TypeError("@@toPrimitive must return a primitive value."); } return ("string" === r ? String : Number)(t); }
32
35
  const StyledDateMuiTextField = (0, _styles.styled)( /*#__PURE__*/React.forwardRef((props, ref) => /*#__PURE__*/(0, _jsxRuntime.jsx)(_StyledMuiTextField.default, _objectSpread({
33
36
  ref: ref
34
- }, props))))(() => {
35
- return {
36
- "&.MuiFormControl-root": {
37
- display: "block",
38
- "& .MuiInputAdornment-root .MuiButtonBase-root": {
39
- padding: "6px",
40
- marginRight: "-8px",
41
- "& .MuiSvgIcon-root": {
42
- width: "16px",
43
- height: "16px"
44
- }
37
+ }, props))))(() => ({
38
+ "&.MuiFormControl-root": {
39
+ display: "block",
40
+ "& .MuiInputAdornment-root .MuiButtonBase-root": {
41
+ padding: "6px",
42
+ marginRight: "-8px",
43
+ "& .MuiSvgIcon-root": {
44
+ width: "16px",
45
+ height: "16px"
45
46
  }
46
47
  }
48
+ }
49
+ }));
50
+ const TimePickerDialog = _ref => {
51
+ let {
52
+ open,
53
+ selectedDate,
54
+ onTimeSelected,
55
+ onClose
56
+ } = _ref;
57
+ const defaultTime = (0, _moment.default)(selectedDate).isValid() ? (0, _moment.default)(selectedDate).format("HH:mm") : (0, _moment.default)().format("HH:mm");
58
+ const [selectedTime, setSelectedTime] = React.useState(defaultTime);
59
+ const handleTimeChange = event => {
60
+ setSelectedTime(event.target.value);
47
61
  };
48
- });
49
- const PuiStandardDateTimeField = /*#__PURE__*/React.forwardRef((_ref, ref) => {
62
+ const handleOk = () => {
63
+ onTimeSelected(selectedTime);
64
+ onClose();
65
+ };
66
+ return /*#__PURE__*/(0, _jsxRuntime.jsxs)(_PuiDialog.default, {
67
+ open: open,
68
+ onClose: onClose,
69
+ slotProps: {
70
+ backdrop: {
71
+ style: {
72
+ backgroundColor: "transparent",
73
+ boxShadow: "none"
74
+ }
75
+ }
76
+ },
77
+ hideBackdrop: true,
78
+ PaperProps: {
79
+ elevation: 5,
80
+ sx: {
81
+ width: 380,
82
+ maxWidth: "720px!important"
83
+ }
84
+ },
85
+ sx: {
86
+ display: "flex",
87
+ alignItems: "center",
88
+ gap: 2,
89
+ width: 340,
90
+ justifyContent: "center",
91
+ alignSelf: "center"
92
+ },
93
+ children: [/*#__PURE__*/(0, _jsxRuntime.jsx)(_PuiTextField.default, {
94
+ id: "time",
95
+ type: "time",
96
+ value: selectedTime,
97
+ onChange: handleTimeChange,
98
+ InputLabelProps: {
99
+ shrink: true
100
+ },
101
+ inputProps: {
102
+ step: 60
103
+ },
104
+ formik: false,
105
+ sx: {
106
+ width: 150
107
+ }
108
+ }), /*#__PURE__*/(0, _jsxRuntime.jsx)(_PuiButton.default, {
109
+ onClick: onClose,
110
+ sx: {
111
+ color: _apperance.palette.primary
112
+ },
113
+ children: "Annuler"
114
+ }), /*#__PURE__*/(0, _jsxRuntime.jsx)(_PuiButton.default, {
115
+ onClick: handleOk,
116
+ sx: {
117
+ color: _apperance.palette.primary
118
+ },
119
+ children: "OK"
120
+ })]
121
+ });
122
+ };
123
+ const PuiStandardDateTimeField = /*#__PURE__*/React.forwardRef((_ref2, ref) => {
50
124
  let {
51
125
  id,
52
126
  className,
@@ -57,8 +131,8 @@ const PuiStandardDateTimeField = /*#__PURE__*/React.forwardRef((_ref, ref) => {
57
131
  value,
58
132
  minDate,
59
133
  maxDate,
60
- inputFormat,
61
- format,
134
+ inputFormat = "YYYY-MM-DDTHH:mm:ss.SSSZ",
135
+ format = "YYYY-MM-DDTHH:mm:ss.SSSZ",
62
136
  disablePast,
63
137
  disableFuture,
64
138
  error,
@@ -68,55 +142,71 @@ const PuiStandardDateTimeField = /*#__PURE__*/React.forwardRef((_ref, ref) => {
68
142
  helperText,
69
143
  onChange,
70
144
  onBlur
71
- } = _ref,
72
- rest = _objectWithoutProperties(_ref, _excluded);
73
- const handleChange = value => {
74
- const formattedValue = format ? value.format(format) : value.toISOString();
75
- onChange(formattedValue);
145
+ } = _ref2,
146
+ rest = _objectWithoutProperties(_ref2, _excluded);
147
+ const [dateTime, setDateTime] = React.useState(value || null);
148
+ const minDateObj = minDate ? (0, _moment.default)(minDate, format).toDate() : undefined;
149
+ const maxDateObj = maxDate ? (0, _moment.default)(maxDate, format).toDate() : undefined;
150
+ const [displayedDateTime, setDisplayedDateTime] = React.useState(value || null);
151
+ const [openTimePicker, setOpenTimePicker] = React.useState(false);
152
+ const handleDateChange = date => {
153
+ if (date) {
154
+ setDateTime((0, _moment.default)(date).format(format));
155
+ setOpenTimePicker(true);
156
+ }
76
157
  };
77
- return /*#__PURE__*/(0, _jsxRuntime.jsx)(_DateTimePicker.DateTimePicker, _objectSpread({
78
- ref: ref,
79
- sx: sx,
80
- ampm: false,
81
- label: label,
82
- inputFormat: inputFormat,
83
- value: value,
84
- onChange: handleChange,
85
- disablePast: disablePast,
86
- disableFuture: disableFuture,
87
- disabled: disabled,
88
- maxDate: maxDate,
89
- minDate: minDate,
90
- readOnly: readOnly,
91
- viewRenderers: {
92
- hours: null,
93
- minutes: null,
94
- seconds: null
95
- },
96
- PopperProps: {
97
- sx: {
98
- "& .MuiButtonBase-root.Mui-selected, & .MuiButtonBase-root.Mui-selected:focus, & .MuiButtonBase-root.Mui-selected:hover": {
99
- backgroundColor: _apperance.palette.primary
158
+ const handleTimeSelected = time => {
159
+ const newDateTime = (0, _moment.default)(dateTime).format("YYYY-MM-DD") + "T" + time;
160
+ const updatedDateTime = (0, _moment.default)(newDateTime, "YYYY-MM-DDTHH:mm").format(format);
161
+ setDateTime(updatedDateTime);
162
+ setDisplayedDateTime(updatedDateTime);
163
+ onChange(updatedDateTime);
164
+ };
165
+ return /*#__PURE__*/(0, _jsxRuntime.jsxs)(_jsxRuntime.Fragment, {
166
+ children: [/*#__PURE__*/(0, _jsxRuntime.jsx)(_DatePicker.DatePicker, _objectSpread({
167
+ ref: ref,
168
+ sx: sx,
169
+ ampm: false,
170
+ label: label,
171
+ inputFormat: "DD/MM/yyyy HH:mm",
172
+ value: displayedDateTime,
173
+ onChange: handleDateChange,
174
+ disablePast: disablePast,
175
+ disableFuture: disableFuture,
176
+ disabled: disabled,
177
+ maxDate: maxDateObj,
178
+ minDate: minDateObj,
179
+ readOnly: readOnly,
180
+ PopperProps: {
181
+ sx: {
182
+ "& .MuiButtonBase-root.Mui-selected, & .MuiButtonBase-root.Mui-selected:focus, & .MuiButtonBase-root.Mui-selected:hover": {
183
+ backgroundColor: _apperance.palette.primary
184
+ }
100
185
  }
101
- }
102
- },
103
- renderInput: params => /*#__PURE__*/(0, _jsxRuntime.jsx)(StyledDateMuiTextField, _objectSpread(_objectSpread({
104
- id: id,
105
- className: className,
106
- name: name,
107
- required: required,
108
- fullWidth: fullWidth,
109
- onBlur: onBlur,
110
- helperText: helperText
111
- }, params), {}, {
112
- error: params.error || error,
113
- inputProps: {
114
- name
115
- }
116
- }))
117
- }, rest));
186
+ },
187
+ renderInput: params => /*#__PURE__*/(0, _jsxRuntime.jsx)(StyledDateMuiTextField, _objectSpread(_objectSpread({}, params), {}, {
188
+ id: id,
189
+ className: className,
190
+ label: label,
191
+ name: name,
192
+ required: required,
193
+ fullWidth: fullWidth,
194
+ onBlur: onBlur,
195
+ helperText: helperText,
196
+ error: error,
197
+ inputProps: _objectSpread(_objectSpread({}, params.inputProps), {}, {
198
+ readOnly: readOnly
199
+ })
200
+ }))
201
+ }, rest)), /*#__PURE__*/(0, _jsxRuntime.jsx)(TimePickerDialog, {
202
+ open: openTimePicker,
203
+ selectedDate: dateTime,
204
+ onTimeSelected: handleTimeSelected,
205
+ onClose: () => setOpenTimePicker(false)
206
+ })]
207
+ });
118
208
  });
119
- const PuiFormikDateTimeField = /*#__PURE__*/React.forwardRef((_ref2, ref) => {
209
+ const PuiFormikDateTimeField = /*#__PURE__*/React.forwardRef((_ref3, ref) => {
120
210
  let {
121
211
  id,
122
212
  className,
@@ -138,17 +228,16 @@ const PuiFormikDateTimeField = /*#__PURE__*/React.forwardRef((_ref2, ref) => {
138
228
  helperText,
139
229
  onChange,
140
230
  onBlur
141
- } = _ref2,
142
- rest = _objectWithoutProperties(_ref2, _excluded2);
231
+ } = _ref3,
232
+ rest = _objectWithoutProperties(_ref3, _excluded2);
143
233
  const [field, meta] = (0, _formik.useField)(name);
144
234
  const formikContext = (0, _formik.useFormikContext)();
145
235
  const [hasError, setHasError] = React.useState(false);
236
+ const minDateObj = minDate ? (0, _moment.default)(minDate, format).toDate() : undefined;
237
+ const maxDateObj = maxDate ? (0, _moment.default)(maxDate, format).toDate() : undefined;
146
238
  const handleChange = value => {
147
- const formattedValue = format ? value.format(format) : value.toISOString();
148
- formikContext.setFieldValue(name, formattedValue);
149
- if (onChange) {
150
- onChange(formattedValue);
151
- }
239
+ formikContext.setFieldValue(name, value);
240
+ onChange(value);
152
241
  };
153
242
  const handleBlur = event => {
154
243
  onBlur(event);
@@ -173,7 +262,8 @@ const PuiFormikDateTimeField = /*#__PURE__*/React.forwardRef((_ref2, ref) => {
173
262
  required: required,
174
263
  value: Boolean(field.value) ? format ? _moment.default.utc(field.value, format) : _moment.default.utc(field.value) : null,
175
264
  format: format,
176
- minDate: minDate,
265
+ minDate: minDateObj,
266
+ maxDate: maxDateObj,
177
267
  inputFormat: inputFormat,
178
268
  disableFuture: disableFuture,
179
269
  disablePast: disablePast,
@@ -186,7 +276,7 @@ const PuiFormikDateTimeField = /*#__PURE__*/React.forwardRef((_ref2, ref) => {
186
276
  onBlur: handleBlur
187
277
  }, rest));
188
278
  });
189
- const PuiDateTimeField = /*#__PURE__*/React.forwardRef((_ref3, ref) => {
279
+ const PuiDateTimeField = /*#__PURE__*/React.forwardRef((_ref4, ref) => {
190
280
  let {
191
281
  formik,
192
282
  id,
@@ -209,8 +299,8 @@ const PuiDateTimeField = /*#__PURE__*/React.forwardRef((_ref3, ref) => {
209
299
  helperText,
210
300
  onChange,
211
301
  onBlur
212
- } = _ref3,
213
- rest = _objectWithoutProperties(_ref3, _excluded3);
302
+ } = _ref4,
303
+ rest = _objectWithoutProperties(_ref4, _excluded3);
214
304
  return /*#__PURE__*/React.createElement(formik ? PuiFormikDateTimeField : PuiStandardDateTimeField, _objectSpread({
215
305
  ref,
216
306
  id,
@@ -21,7 +21,7 @@ var _PuiTableAction = _interopRequireDefault(require("./PuiTableAction"));
21
21
  var _ActionPopover = _interopRequireDefault(require("./ActionPopover"));
22
22
  var _system = require("@mui/system");
23
23
  var _jsxRuntime = require("react/jsx-runtime");
24
- const _excluded = ["id", "className", "sx", "elevate", "rows", "rowCount", "columns", "paginationMode", "page", "pageSize", "checkboxSelection", "loading", "stripped", "actions", "oneActionOnly", "onSelect", "onPageChange", "onPageSizeChange"];
24
+ const _excluded = ["id", "className", "sx", "elevate", "rows", "rowCount", "columns", "paginationMode", "page", "pageSize", "checkboxSelection", "loading", "stripped", "actions", "oneActionOnly", "onSelect", "onPageChange", "onPageSizeChange", "rowDetailPanel"];
25
25
  function _getRequireWildcardCache(e) { if ("function" != typeof WeakMap) return null; var r = new WeakMap(), t = new WeakMap(); return (_getRequireWildcardCache = function _getRequireWildcardCache(e) { return e ? t : r; })(e); }
26
26
  function _interopRequireWildcard(e, r) { if (!r && e && e.__esModule) return e; if (null === e || "object" != typeof e && "function" != typeof e) return { default: e }; var t = _getRequireWildcardCache(r); if (t && t.has(e)) return t.get(e); var n = { __proto__: null }, a = Object.defineProperty && Object.getOwnPropertyDescriptor; for (var u in e) if ("default" !== u && Object.prototype.hasOwnProperty.call(e, u)) { var i = a ? Object.getOwnPropertyDescriptor(e, u) : null; i && (i.get || i.set) ? Object.defineProperty(n, u, i) : n[u] = e[u]; } return n.default = e, t && t.set(e, n), n; }
27
27
  function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
@@ -294,7 +294,8 @@ const PuiTable = /*#__PURE__*/React.forwardRef((_ref3, ref) => {
294
294
  oneActionOnly,
295
295
  onSelect,
296
296
  onPageChange,
297
- onPageSizeChange
297
+ onPageSizeChange,
298
+ rowDetailPanel
298
299
  } = _ref3,
299
300
  rest = _objectWithoutProperties(_ref3, _excluded);
300
301
  const [appColumns, setAppColumns] = React.useState(columns);
@@ -357,6 +358,15 @@ const PuiTable = /*#__PURE__*/React.forwardRef((_ref3, ref) => {
357
358
  }));
358
359
  // eslint-disable-next-line react-hooks/exhaustive-deps
359
360
  }, [actions, columns]);
361
+ const renderRowDetailPanel = params => {
362
+ const {
363
+ data
364
+ } = params;
365
+ // Render the passed rowDetailPanel component with the row data
366
+ return /*#__PURE__*/React.cloneElement(rowDetailPanel, {
367
+ rowData: data
368
+ });
369
+ };
360
370
  return /*#__PURE__*/(0, _jsxRuntime.jsx)("div", {
361
371
  style: {
362
372
  width: '100%'
@@ -398,7 +408,8 @@ const PuiTable = /*#__PURE__*/React.forwardRef((_ref3, ref) => {
398
408
  onPageChange: onPageChange,
399
409
  onPageSizeChange: onPageSizeChange,
400
410
  onSelectionModelChange: onSelect,
401
- autosizeOptions: autosizeOptions
411
+ autosizeOptions: autosizeOptions,
412
+ rowDetailPanel: renderRowDetailPanel
402
413
  }, rest))
403
414
  });
404
415
  });
@@ -421,7 +432,8 @@ PuiTable.propTypes = {
421
432
  onSelect: _propTypes.default.func,
422
433
  onPageChange: _propTypes.default.func,
423
434
  onPageSizeChange: _propTypes.default.func,
424
- onSelectionModelChange: _propTypes.default.func
435
+ onSelectionModelChange: _propTypes.default.func,
436
+ rowDetailPanel: _propTypes.default.element
425
437
  };
426
438
  PuiTable.defaultProps = {
427
439
  oneActionOnly: false,
package/package.json CHANGED
@@ -1,97 +1,99 @@
1
- {
2
- "name": "@portnet/ui",
3
- "version": "0.1.20",
4
- "description": "Portnet UI",
5
- "keywords": [
6
- "react",
7
- "components",
8
- "ui"
9
- ],
10
- "main": "dist/index.js",
11
- "private": false,
12
- "files": [
13
- "dist",
14
- "README.md"
15
- ],
16
- "dependencies": {
17
- "@emotion/react": "^11.10.5",
18
- "@emotion/styled": "^11.10.5",
19
- "@mui/icons-material": "^5.10.16",
20
- "@mui/lab": "^5.0.0-alpha.60",
21
- "@mui/material": "^5.10.16",
22
- "@mui/x-data-grid": "^5.17.26",
23
- "@mui/x-date-pickers": "^5.0.4",
24
- "@testing-library/jest-dom": "^5.16.5",
25
- "@testing-library/react": "^13.4.0",
26
- "@testing-library/user-event": "^13.5.0",
27
- "axios": "^0.27.2",
28
- "formik": "^2.2.9",
29
- "lodash": "^4.17.21",
30
- "moment": "^2.29.4",
31
- "react": "^18.2.0",
32
- "react-dom": "^18.2.0",
33
- "react-scripts": "^5.0.1",
34
- "react-transition-group": "^4.4.5",
35
- "styled-components": "^6.1.3",
36
- "uuid": "^9.0.0",
37
- "web-vitals": "^2.1.4",
38
- "yup": "^0.32.11"
39
- },
40
- "scripts": {
41
- "start": "react-scripts start",
42
- "build": "rimraf dist && cross-env NODE_ENV=production babel src/lib --out-dir dist --copy-files",
43
- "test": "react-scripts test",
44
- "eject": "react-scripts eject",
45
- "storybook": "storybook dev -p 6006 -s public",
46
- "build-storybook": "storybook build -s public"
47
- },
48
- "eslintConfig": {
49
- "extends": [
50
- "react-app",
51
- "react-app/jest"
52
- ],
53
- "overrides": [
54
- {
55
- "files": [
56
- "**/*.stories.*"
57
- ],
58
- "rules": {
59
- "import/no-anonymous-default-export": "off"
60
- }
61
- }
62
- ]
63
- },
64
- "browserslist": {
65
- "production": [
66
- ">0.2%",
67
- "not dead",
68
- "not op_mini all"
69
- ],
70
- "development": [
71
- "last 1 chrome version",
72
- "last 1 firefox version",
73
- "last 1 safari version"
74
- ]
75
- },
76
- "devDependencies": {
77
- "@babel/cli": "^7.19.3",
78
- "@babel/core": "^7.20.5",
79
- "@babel/preset-env": "^7.20.2",
80
- "@babel/preset-react": "^7.18.6",
81
- "@storybook/addon-actions": "^7.6.4",
82
- "@storybook/addon-essentials": "^7.6.4",
83
- "@storybook/addon-interactions": "^7.6.4",
84
- "@storybook/addon-links": "^7.6.4",
85
- "@storybook/node-logger": "^7.6.4",
86
- "@storybook/preset-create-react-app": "^7.6.4",
87
- "@storybook/react": "^7.6.4",
88
- "@storybook/react-webpack5": "^7.6.4",
89
- "@storybook/testing-library": "^0.2.2",
90
- "cross-env": "^7.0.3",
91
- "husky": "^4.3.8",
92
- "prop-types": "^15.8.1",
93
- "rimraf": "^5.0.5",
94
- "storybook": "^7.6.4",
95
- "webpack": "^5.75.0"
96
- }
97
- }
1
+ {
2
+ "name": "@portnet/ui",
3
+ "version": "0.1.21",
4
+ "description": "Portnet UI",
5
+ "keywords": [
6
+ "react",
7
+ "components",
8
+ "ui"
9
+ ],
10
+ "main": "dist/index.js",
11
+ "private": false,
12
+ "files": [
13
+ "dist",
14
+ "README.md"
15
+ ],
16
+ "dependencies": {
17
+ "@emotion/react": "^11.10.5",
18
+ "@emotion/styled": "^11.10.5",
19
+ "@mui/icons-material": "^5.10.16",
20
+ "@mui/lab": "^5.0.0-alpha.60",
21
+ "@mui/material": "^5.10.16",
22
+ "@mui/x-data-grid": "^5.17.26",
23
+ "@mui/x-data-grid-pro": "^5.17.26",
24
+ "@mui/x-date-pickers": "^5.0.4",
25
+ "@testing-library/jest-dom": "^5.16.5",
26
+ "@testing-library/react": "^13.4.0",
27
+ "@testing-library/user-event": "^13.5.0",
28
+ "axios": "^0.27.2",
29
+ "formik": "^2.2.9",
30
+ "lodash": "^4.17.21",
31
+ "moment": "^2.29.4",
32
+ "moment-timezone": "^0.5.45",
33
+ "react": "^18.2.0",
34
+ "react-dom": "^18.2.0",
35
+ "react-scripts": "^5.0.1",
36
+ "react-transition-group": "^4.4.5",
37
+ "styled-components": "^6.1.3",
38
+ "uuid": "^9.0.0",
39
+ "web-vitals": "^2.1.4",
40
+ "yup": "^0.32.11"
41
+ },
42
+ "scripts": {
43
+ "start": "react-scripts start",
44
+ "build": "rimraf dist && cross-env NODE_ENV=production babel src/lib --out-dir dist --copy-files",
45
+ "test": "react-scripts test",
46
+ "eject": "react-scripts eject",
47
+ "storybook": "storybook dev -p 6006 -s public",
48
+ "build-storybook": "storybook build -s public"
49
+ },
50
+ "eslintConfig": {
51
+ "extends": [
52
+ "react-app",
53
+ "react-app/jest"
54
+ ],
55
+ "overrides": [
56
+ {
57
+ "files": [
58
+ "**/*.stories.*"
59
+ ],
60
+ "rules": {
61
+ "import/no-anonymous-default-export": "off"
62
+ }
63
+ }
64
+ ]
65
+ },
66
+ "browserslist": {
67
+ "production": [
68
+ ">0.2%",
69
+ "not dead",
70
+ "not op_mini all"
71
+ ],
72
+ "development": [
73
+ "last 1 chrome version",
74
+ "last 1 firefox version",
75
+ "last 1 safari version"
76
+ ]
77
+ },
78
+ "devDependencies": {
79
+ "@babel/cli": "^7.19.3",
80
+ "@babel/core": "^7.20.5",
81
+ "@babel/preset-env": "^7.20.2",
82
+ "@babel/preset-react": "^7.18.6",
83
+ "@storybook/addon-actions": "^7.6.4",
84
+ "@storybook/addon-essentials": "^7.6.4",
85
+ "@storybook/addon-interactions": "^7.6.4",
86
+ "@storybook/addon-links": "^7.6.4",
87
+ "@storybook/node-logger": "^7.6.4",
88
+ "@storybook/preset-create-react-app": "^7.6.4",
89
+ "@storybook/react": "^7.6.4",
90
+ "@storybook/react-webpack5": "^7.6.4",
91
+ "@storybook/testing-library": "^0.2.2",
92
+ "cross-env": "^7.0.3",
93
+ "husky": "^4.3.8",
94
+ "prop-types": "^15.8.1",
95
+ "rimraf": "^5.0.5",
96
+ "storybook": "^7.6.4",
97
+ "webpack": "^5.75.0"
98
+ }
99
+ }