@uiw/react-json-view 1.7.0 → 1.8.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.
package/cjs/node.js CHANGED
@@ -8,6 +8,7 @@ exports.CountInfo = void 0;
8
8
  exports.RooNode = RooNode;
9
9
  var _objectSpread2 = _interopRequireDefault(require("@babel/runtime/helpers/objectSpread2"));
10
10
  var _typeof2 = _interopRequireDefault(require("@babel/runtime/helpers/typeof"));
11
+ var _toConsumableArray2 = _interopRequireDefault(require("@babel/runtime/helpers/toConsumableArray"));
11
12
  var _slicedToArray2 = _interopRequireDefault(require("@babel/runtime/helpers/slicedToArray"));
12
13
  var _objectWithoutProperties2 = _interopRequireDefault(require("@babel/runtime/helpers/objectWithoutProperties"));
13
14
  var _react = require("react");
@@ -19,7 +20,7 @@ var _copied = require("./copied");
19
20
  var _ellipsis = require("./comps/ellipsis");
20
21
  var _meta = require("./comps/meta");
21
22
  var _jsxRuntime = require("react/jsx-runtime");
22
- var _excluded = ["value", "keyName", "className", "displayDataTypes", "components", "displayObjectSize", "enableClipboard", "highlightUpdates", "objectSortKeys", "indentWidth", "collapsed", "level", "keyid", "quotes", "onCopied", "onExpand"];
23
+ var _excluded = ["value", "keyName", "className", "displayDataTypes", "components", "displayObjectSize", "enableClipboard", "highlightUpdates", "objectSortKeys", "indentWidth", "collapsed", "level", "keyid", "quotes", "onCopied", "onExpand", "parentValue", "setParentValue"];
23
24
  var CountInfo = function CountInfo(_ref) {
24
25
  var children = _ref.children;
25
26
  return /*#__PURE__*/(0, _jsxRuntime.jsx)(_value.Label, {
@@ -62,6 +63,8 @@ function RooNode(props) {
62
63
  quotes = _props$quotes === void 0 ? '"' : _props$quotes,
63
64
  onCopied = props.onCopied,
64
65
  onExpand = props.onExpand,
66
+ parentValue = props.parentValue,
67
+ setParentValue = props.setParentValue,
65
68
  reset = (0, _objectWithoutProperties2["default"])(props, _excluded);
66
69
  var isArray = Array.isArray(value);
67
70
  var subkeyid = (0, _react.useId)();
@@ -80,6 +83,10 @@ function RooNode(props) {
80
83
  });
81
84
  !expand ? _store.store.expand(keyid) : _store.store.collapse(keyid);
82
85
  };
86
+ var _useState = (0, _react.useState)(value),
87
+ _useState2 = (0, _slicedToArray2["default"])(_useState, 2),
88
+ valueData = _useState2[0],
89
+ setValueData = _useState2[1];
83
90
  var subNodeProps = {
84
91
  components: components,
85
92
  indentWidth: indentWidth,
@@ -90,6 +97,8 @@ function RooNode(props) {
90
97
  onCopied: onCopied,
91
98
  onExpand: onExpand,
92
99
  collapsed: collapsed,
100
+ parentValue: value,
101
+ setParentValue: setValueData,
93
102
  quotes: quotes,
94
103
  level: level + 1,
95
104
  style: {
@@ -101,7 +110,9 @@ function RooNode(props) {
101
110
  displayObjectSize: displayObjectSize,
102
111
  enableClipboard: enableClipboard,
103
112
  indentWidth: indentWidth,
113
+ data: valueData,
104
114
  quotes: quotes,
115
+ setValue: setValueData,
105
116
  renderBraces: components.braces,
106
117
  renderValue: components.value
107
118
  };
@@ -113,10 +124,10 @@ function RooNode(props) {
113
124
  style: arrowStyle,
114
125
  className: "w-rjv-arrow"
115
126
  });
116
- var _useState = (0, _react.useState)(false),
117
- _useState2 = (0, _slicedToArray2["default"])(_useState, 2),
118
- showTools = _useState2[0],
119
- setShowTools = _useState2[1];
127
+ var _useState3 = (0, _react.useState)(false),
128
+ _useState4 = (0, _slicedToArray2["default"])(_useState3, 2),
129
+ showTools = _useState4[0],
130
+ setShowTools = _useState4[1];
120
131
  var eventProps = {};
121
132
  if (enableClipboard) {
122
133
  eventProps.onMouseEnter = function () {
@@ -126,10 +137,6 @@ function RooNode(props) {
126
137
  return setShowTools(false);
127
138
  };
128
139
  }
129
- var _useState3 = (0, _react.useState)(value),
130
- _useState4 = (0, _slicedToArray2["default"])(_useState3, 2),
131
- valueData = _useState4[0],
132
- setValueData = _useState4[1];
133
140
  (0, _react.useEffect)(function () {
134
141
  return setValueData(value);
135
142
  }, [value]);
@@ -202,8 +209,11 @@ function RooNode(props) {
202
209
  count: nameKeys.length,
203
210
  level: level,
204
211
  showTools: showTools,
212
+ keyName: keyName,
205
213
  visible: expand,
206
214
  value: valueData,
215
+ parentValue: parentValue,
216
+ setParentValue: setParentValue,
207
217
  setValue: setValueData
208
218
  }), enableClipboard && /*#__PURE__*/(0, _jsxRuntime.jsx)(_copied.Copied, {
209
219
  show: showTools,
@@ -217,7 +227,7 @@ function RooNode(props) {
217
227
  borderLeft: 'var(--w-rjv-border-left-width, 1px) var(--w-rjv-line-style, solid) var(--w-rjv-line-color, #ebebeb)',
218
228
  marginLeft: 6
219
229
  },
220
- children: entries.length > 0 && entries.map(function (_ref10, idx) {
230
+ children: entries.length > 0 && (0, _toConsumableArray2["default"])(entries).map(function (_ref10, idx) {
221
231
  var _ref11 = (0, _slicedToArray2["default"])(_ref10, 2),
222
232
  key = _ref11[0],
223
233
  itemVal = _ref11[1];
package/cjs/value.d.ts CHANGED
@@ -46,9 +46,19 @@ export declare const typeMap: {
46
46
  };
47
47
  };
48
48
  export declare const Colon: FC<PropsWithChildren<React.HTMLAttributes<HTMLSpanElement>>>;
49
+ interface RenderValueProps<T extends object> extends React.HTMLAttributes<HTMLSpanElement> {
50
+ type: TypeProps['type'];
51
+ value?: unknown;
52
+ data?: T;
53
+ visible?: boolean;
54
+ quotes?: JsonViewProps<T>['quotes'];
55
+ setValue?: React.Dispatch<React.SetStateAction<T>>;
56
+ keyName?: ValueViewProps<T>['keyName'];
57
+ }
49
58
  export interface ValueViewProps<T extends object> extends React.DetailedHTMLProps<React.HTMLAttributes<HTMLSpanElement>, HTMLSpanElement> {
50
59
  keyName?: string | number;
51
60
  value?: unknown;
61
+ data?: T;
52
62
  displayDataTypes: boolean;
53
63
  displayObjectSize: boolean;
54
64
  enableClipboard: boolean;
@@ -57,13 +67,8 @@ export interface ValueViewProps<T extends object> extends React.DetailedHTMLProp
57
67
  quotes?: JsonViewProps<T>['quotes'];
58
68
  renderKey?: JSX.Element;
59
69
  renderBraces?: MetaProps['render'];
60
- renderValue?: (props: React.HTMLAttributes<HTMLSpanElement> & {
61
- type: TypeProps['type'];
62
- value?: unknown;
63
- visible?: boolean;
64
- quotes?: JsonViewProps<T>['quotes'];
65
- keyName?: ValueViewProps<T>['keyName'];
66
- }) => JSX.Element;
70
+ setValue?: React.Dispatch<React.SetStateAction<T>>;
71
+ renderValue?: (props: RenderValueProps<T>) => JSX.Element;
67
72
  }
68
73
  export declare function getValueString<T>(value: T): {
69
74
  type: "string" | "number" | "bigint" | "boolean" | "undefined" | "date" | "url" | "float" | "null" | "NaN";
@@ -81,3 +86,4 @@ export interface TypeProps extends React.DetailedHTMLProps<React.HTMLAttributes<
81
86
  type: keyof typeof typeMap;
82
87
  }
83
88
  export declare const Type: FC<PropsWithChildren<TypeProps>>;
89
+ export {};
package/cjs/value.js CHANGED
@@ -18,7 +18,7 @@ var _meta = require("./comps/meta");
18
18
  var _copied = require("./copied");
19
19
  var _jsxRuntime = require("react/jsx-runtime");
20
20
  var _excluded = ["children", "style"],
21
- _excluded2 = ["value", "keyName", "indentWidth", "renderKey", "quotes", "level", "renderValue", "renderBraces", "enableClipboard", "displayObjectSize", "displayDataTypes"],
21
+ _excluded2 = ["value", "setValue", "data", "keyName", "indentWidth", "renderKey", "quotes", "level", "renderValue", "renderBraces", "enableClipboard", "displayObjectSize", "displayDataTypes"],
22
22
  _excluded3 = ["children", "color", "fontSize", "opacity", "paddingRight", "style"];
23
23
  var Line = function Line(props) {
24
24
  return /*#__PURE__*/(0, _jsxRuntime.jsx)("div", (0, _objectSpread2["default"])({}, props));
@@ -55,7 +55,7 @@ var typeMap = {
55
55
  },
56
56
  url: {
57
57
  color: 'var(--w-rjv-type-url-color, #0969da)',
58
- label: 'URL'
58
+ label: 'url'
59
59
  },
60
60
  "null": {
61
61
  color: 'var(--w-rjv-type-null-color, #d33682)',
@@ -129,6 +129,8 @@ function getValueString(value) {
129
129
  function ValueView(props) {
130
130
  var _typeMap$type;
131
131
  var value = props.value,
132
+ setValue = props.setValue,
133
+ data = props.data,
132
134
  keyName = props.keyName,
133
135
  indentWidth = props.indentWidth,
134
136
  renderKey = props.renderKey,
@@ -192,6 +194,8 @@ function ValueView(props) {
192
194
  }, style),
193
195
  type: type,
194
196
  value: value,
197
+ setValue: setValue,
198
+ data: data,
195
199
  quotes: quotes,
196
200
  keyName: keyName,
197
201
  visible: showTools,
package/editor.d.ts CHANGED
@@ -23,6 +23,11 @@ declare module '@uiw/react-json-view/editor' {
23
23
  * @returns {boolean} Returning false from onAdd will prevent the change from being made.
24
24
  */
25
25
  onAdd?: CountInfoExtraProps<T>['onAdd'];
26
+ /**
27
+ * When a callback function is passed in, delete functionality is enabled. The callback is invoked before deletions are completed.
28
+ * @returns Returning false from onDelete will prevent the change from being made.
29
+ */
30
+ onDelete?: CountInfoExtraProps<T>['onDelete'];
26
31
  /** Whether enable edit feature. @default true */
27
32
  editable?: boolean;
28
33
  }
@@ -1,14 +1,22 @@
1
1
  /// <reference types="react" />
2
2
  import type { CountInfoProps } from '../';
3
- export interface CountInfoExtraProps<T> extends CountInfoProps {
3
+ export interface CountInfoExtraProps<T> extends Partial<CountInfoProps> {
4
4
  editable: boolean;
5
5
  showTools: boolean;
6
6
  value: T;
7
- setValue: React.Dispatch<React.SetStateAction<T>>;
7
+ parentValue?: T;
8
+ keyName?: string | number;
9
+ setValue?: React.Dispatch<React.SetStateAction<T>>;
10
+ setParentValue?: React.Dispatch<React.SetStateAction<T>>;
8
11
  /**
9
12
  * When a callback function is passed in, add functionality is enabled. The callback is invoked before additions are completed.
10
13
  * @returns {boolean} Returning false from onAdd will prevent the change from being made.
11
14
  */
12
15
  onAdd?: (keyOrValue: string, newValue: T, value: T, isAdd: boolean) => boolean;
16
+ /**
17
+ * When a callback function is passed in, delete functionality is enabled. The callback is invoked before deletions are completed.
18
+ * @returns Returning false from onDelete will prevent the change from being made.
19
+ */
20
+ onDelete?: (keyName: string | number, value: T, parentValue: T) => boolean;
13
21
  }
14
22
  export declare function CountInfoExtra<T extends object>(props: CountInfoExtraProps<T>): import("react/jsx-runtime").JSX.Element | null;
@@ -1,14 +1,22 @@
1
1
  import _extends from "@babel/runtime/helpers/extends";
2
2
  import _asyncToGenerator from "@babel/runtime/helpers/asyncToGenerator";
3
+ import { Fragment } from 'react';
3
4
  import { AddIcon } from './icon/add';
5
+ import { DeleteIcon } from './icon/delete';
4
6
  import { jsx as _jsx } from "react/jsx-runtime";
7
+ import { jsxs as _jsxs } from "react/jsx-runtime";
5
8
  export function CountInfoExtra(props) {
6
9
  var {
7
10
  visible,
8
11
  showTools,
12
+ editable,
13
+ keyName,
9
14
  value,
15
+ parentValue,
10
16
  setValue,
11
- onAdd
17
+ setParentValue,
18
+ onAdd,
19
+ onDelete
12
20
  } = props;
13
21
  if (!visible || !showTools) return null;
14
22
  var click = /*#__PURE__*/function () {
@@ -20,7 +28,7 @@ export function CountInfoExtra(props) {
20
28
  var result = isArray ? [...value, keyOrValue] : _extends({}, value, {
21
29
  [keyOrValue]: undefined
22
30
  });
23
- if (onAdd) {
31
+ if (onAdd && setValue) {
24
32
  var maybeAdd = yield onAdd(keyOrValue, result, props.value, isAdd);
25
33
  if (maybeAdd) {
26
34
  setValue(result);
@@ -31,8 +39,31 @@ export function CountInfoExtra(props) {
31
39
  return _ref.apply(this, arguments);
32
40
  };
33
41
  }();
34
- var svgProps = {
35
- onClick: click
36
- };
37
- return /*#__PURE__*/_jsx(AddIcon, _extends({}, svgProps));
42
+ var deleteHandle = /*#__PURE__*/function () {
43
+ var _ref2 = _asyncToGenerator(function* (event) {
44
+ event.stopPropagation();
45
+ if (onDelete && (keyName || typeof keyName === 'number') && parentValue) {
46
+ var maybeDelete = yield onDelete(keyName, value, parentValue);
47
+ if (maybeDelete && setParentValue) {
48
+ if (Array.isArray(parentValue)) {
49
+ parentValue.splice(keyName, 1);
50
+ setParentValue([...parentValue]);
51
+ } else if (keyName in parentValue) {
52
+ delete parentValue[keyName];
53
+ setParentValue(_extends({}, parentValue));
54
+ }
55
+ }
56
+ }
57
+ });
58
+ return function deleteHandle(_x2) {
59
+ return _ref2.apply(this, arguments);
60
+ };
61
+ }();
62
+ return /*#__PURE__*/_jsxs(Fragment, {
63
+ children: [editable && onAdd && /*#__PURE__*/_jsx(AddIcon, {
64
+ onClick: click
65
+ }), editable && onDelete && parentValue && /*#__PURE__*/_jsx(DeleteIcon, {
66
+ onClick: deleteHandle
67
+ })]
68
+ });
38
69
  }
@@ -13,12 +13,12 @@ export var AddIcon = props => {
13
13
  width: '1em'
14
14
  };
15
15
  return /*#__PURE__*/_jsx("svg", _extends({
16
- viewBox: "0 0 20 20",
17
- fill: "var(--w-rjv-edit-color, currentColor)"
16
+ viewBox: "0 0 40 40",
17
+ fill: "var(--w-rjv-add-color, currentColor)"
18
18
  }, props, {
19
19
  style: _extends({}, style, defaultStyle),
20
20
  children: /*#__PURE__*/_jsx("path", {
21
- d: "M14.1970498,0 L5.81288651,0 C2.17107809,0 0,2.17 0,5.81 L0,14.18 C0,17.83 2.17107809,20 5.81288651,20 L14.1870449,20 C17.8288533,20 19.9999658,17.83 19.9999658,14.19 L19.9999658,5.81 C20.0099363,2.17 17.8388583,0 14.1970498,0 Z M16.0079491,10.75 L10.7553408,10.75 L10.7553408,16 C10.7553408,16.41 10.4151719,16.75 10.0049682,16.75 C9.59476448,16.75 9.25459556,16.41 9.25459556,16 L9.25459556,10.75 L4.00198727,10.75 C3.59178357,10.75 3.25161466,10.41 3.25161466,10 C3.25161466,9.59 3.59178357,9.25 4.00198727,9.25 L9.25459556,9.25 L9.25459556,4 C9.25459556,3.59 9.59476448,3.25 10.0049682,3.25 C10.4151719,3.25 10.7553408,3.59 10.7553408,4 L10.7553408,9.25 L16.0079491,9.25 C16.4181528,9.25 16.7583217,9.59 16.7583217,10 C16.7583217,10.41 16.4181528,10.75 16.0079491,10.75 Z"
21
+ d: "M28.3940997,0 L11.625773,0 C4.34215619,0 0,4.34 0,11.62 L0,28.36 C0,35.66 4.34215619,40 11.625773,40 L28.3740897,40 C35.6577066,40 39.9999316,35.66 39.9999316,28.38 L39.9999316,11.62 C40.0198727,4.34 35.6777165,0 28.3940997,0 Z M30.12022,21.8947368 L21.9056145,21.8947368 L21.9056145,30.1052632 C21.9056145,31.1410526 21.0462404,32 20.0099363,32 C18.9736323,32 18.1142582,31.1410526 18.1142582,30.1052632 L18.1142582,21.8947368 L9.89965272,21.8947368 C8.86334865,21.8947368 8.00397454,21.0357895 8.00397454,20 C8.00397454,18.9642105 8.86334865,18.1052632 9.89965272,18.1052632 L18.1142582,18.1052632 L18.1142582,9.89473684 C18.1142582,8.85894737 18.9736323,8 20.0099363,8 C21.0462404,8 21.9056145,8.85894737 21.9056145,9.89473684 L21.9056145,18.1052632 L30.12022,18.1052632 C31.156524,18.1052632 32.0158982,18.9642105 32.0158982,20 C32.0158982,21.0357895 31.156524,21.8947368 30.12022,21.8947368 Z"
22
22
  })
23
23
  }));
24
24
  };
@@ -0,0 +1,4 @@
1
+ /// <reference types="react" />
2
+ export interface DeleteIconProps extends React.SVGAttributes<SVGElement> {
3
+ }
4
+ export declare const DeleteIcon: (props: DeleteIconProps) => import("react/jsx-runtime").JSX.Element;
@@ -0,0 +1,24 @@
1
+ import _extends from "@babel/runtime/helpers/extends";
2
+ import { jsx as _jsx } from "react/jsx-runtime";
3
+ export var DeleteIcon = props => {
4
+ var {
5
+ style
6
+ } = props;
7
+ var defaultStyle = {
8
+ verticalAlign: 'middle',
9
+ display: 'inline-block',
10
+ cursor: 'pointer',
11
+ marginLeft: 5,
12
+ height: '1em',
13
+ width: '1em'
14
+ };
15
+ return /*#__PURE__*/_jsx("svg", _extends({
16
+ viewBox: "0 0 40 40",
17
+ fill: "var(--w-rjv-delete-color, #dc3545)"
18
+ }, props, {
19
+ style: _extends({}, style, defaultStyle),
20
+ children: /*#__PURE__*/_jsx("path", {
21
+ d: "M28.3940997,0 L11.625773,0 C4.34215619,0 0,4.34 0,11.62 L0,28.36 C0,35.66 4.34215619,40 11.625773,40 L28.3740897,40 C35.6577066,40 39.9999316,35.66 39.9999316,28.38 L39.9999316,11.62 C40.0198727,4.34 35.6777165,0 28.3940997,0 Z M30.3428039,27.0681654 C31.2346195,27.9595381 31.2346195,29.4349136 30.3428039,30.3262862 C29.88152,30.7873411 29.2972271,31.0025 28.7129341,31.0025 C28.1286412,31.0025 27.5443483,30.7873411 27.0830644,30.3262862 L20.0100446,23.2567787 L12.9370249,30.3262862 C12.475741,30.7873411 11.891448,31.0025 11.3071551,31.0025 C10.7228621,31.0025 10.1385692,30.7873411 9.67728531,30.3262862 C8.78464325,29.4234847 8.78464325,27.9709669 9.67728531,27.0681654 L16.7503051,19.9986579 L9.67728531,12.9291504 C8.78464325,12.0263488 8.78464325,10.573831 9.67728531,9.67102951 C10.5691008,8.77965683 12.0452093,8.77965683 12.9370249,9.67102951 L20.0100446,16.740537 L27.0830644,9.67102951 C27.9748799,8.77965683 29.4509884,8.77965683 30.3428039,9.67102951 C31.2346195,10.5624022 31.2346195,12.0377777 30.3428039,12.9291504 L23.2697842,19.9986579 L30.3428039,27.0681654 L30.3428039,27.0681654 Z"
22
+ })
23
+ }));
24
+ };
@@ -2,19 +2,27 @@
2
2
  import type { JsonViewProps } from '../';
3
3
  import type { CountInfoExtraProps } from './countInfoExtra';
4
4
  export interface JsonViewEditorProps<T extends object> extends JsonViewProps<T> {
5
- /** Callback when value edit functionality */
5
+ /**
6
+ * When a callback function is passed in, edit functionality is enabled. The callback is invoked before edits are completed.
7
+ * @returns {boolean} Returning false from onEdit will prevent the change from being made.
8
+ */
6
9
  onEdit?: (option: {
7
10
  value: unknown;
8
11
  oldValue: unknown;
9
12
  keyName?: string | number;
10
13
  parentName?: string | number;
11
14
  type?: 'value' | 'key';
12
- }) => void;
15
+ }) => boolean;
13
16
  /**
14
17
  * When a callback function is passed in, add functionality is enabled. The callback is invoked before additions are completed.
15
18
  * @returns {boolean} Returning false from onAdd will prevent the change from being made.
16
19
  */
17
20
  onAdd?: CountInfoExtraProps<T>['onAdd'];
21
+ /**
22
+ * When a callback function is passed in, delete functionality is enabled. The callback is invoked before deletions are completed.
23
+ * @returns Returning false from onDelete will prevent the change from being made.
24
+ */
25
+ onDelete?: CountInfoExtraProps<T>['onDelete'];
18
26
  /** Whether enable edit feature. @default true */
19
27
  editable?: boolean;
20
28
  }
@@ -1,6 +1,6 @@
1
1
  import _extends from "@babel/runtime/helpers/extends";
2
2
  import _objectWithoutPropertiesLoose from "@babel/runtime/helpers/objectWithoutPropertiesLoose";
3
- var _excluded = ["onEdit", "components", "editable", "displayDataTypes", "onAdd"];
3
+ var _excluded = ["onEdit", "components", "editable", "displayDataTypes", "onAdd", "onDelete"];
4
4
  import { forwardRef } from 'react';
5
5
  import JsonView from '../';
6
6
  import { ObjectKey } from './objectKey';
@@ -13,13 +13,15 @@ var JsonViewEditor = /*#__PURE__*/forwardRef((props, ref) => {
13
13
  components,
14
14
  editable = true,
15
15
  displayDataTypes = true,
16
- onAdd
16
+ onAdd,
17
+ onDelete
17
18
  } = props,
18
19
  reset = _objectWithoutPropertiesLoose(props, _excluded);
19
20
  var comps = _extends({}, components, {
20
21
  countInfoExtra: reprops => /*#__PURE__*/_jsx(CountInfoExtra, _extends({}, reprops, {
21
22
  editable: editable,
22
- onAdd: onAdd
23
+ onAdd: onAdd,
24
+ onDelete: onDelete
23
25
  })),
24
26
  objectKey: reprops => /*#__PURE__*/_jsx(ObjectKey, _extends({}, reprops, {
25
27
  editableValue: editable,
@@ -30,6 +32,7 @@ var JsonViewEditor = /*#__PURE__*/forwardRef((props, ref) => {
30
32
  return /*#__PURE__*/_jsx(ReValue, _extends({}, reprops, {
31
33
  editableValue: editable,
32
34
  displayDataTypes: displayDataTypes,
35
+ onDelete: onDelete,
33
36
  onEdit: onEdit
34
37
  }));
35
38
  }
@@ -7,8 +7,11 @@ export interface ReValueProps<T extends object> extends React.HTMLAttributes<HTM
7
7
  keyName?: JsonViewEditorProps<T>['keyName'];
8
8
  type: TypeProps['type'];
9
9
  value?: unknown;
10
+ data?: T;
10
11
  visible?: boolean;
11
12
  editableValue?: boolean;
12
13
  displayDataTypes?: boolean;
14
+ setValue?: React.Dispatch<React.SetStateAction<T>>;
15
+ onDelete?: JsonViewEditorProps<T>['onDelete'];
13
16
  }
14
17
  export declare function ReValue<T extends object>(props: ReValueProps<T>): import("react/jsx-runtime").JSX.Element;
@@ -1,9 +1,11 @@
1
1
  import _extends from "@babel/runtime/helpers/extends";
2
+ import _asyncToGenerator from "@babel/runtime/helpers/asyncToGenerator";
2
3
  import _objectWithoutPropertiesLoose from "@babel/runtime/helpers/objectWithoutPropertiesLoose";
3
- var _excluded = ["type", "value", "keyName", "visible", "quotes", "style", "children", "displayDataTypes", "editableValue", "onEdit"];
4
+ var _excluded = ["type", "value", "setValue", "data", "keyName", "visible", "quotes", "style", "children", "displayDataTypes", "editableValue", "onDelete", "onEdit"];
4
5
  import { Fragment, useEffect, useRef, useState } from 'react';
5
6
  import { getValueString, isFloat, Type, typeMap } from '../value';
6
7
  import { EditIcon } from './icon/edit';
8
+ import { DeleteIcon } from './icon/delete';
7
9
  import { jsx as _jsx } from "react/jsx-runtime";
8
10
  import { jsxs as _jsxs } from "react/jsx-runtime";
9
11
  var Quotes = _ref => {
@@ -23,11 +25,15 @@ export function ReValue(props) {
23
25
  var {
24
26
  type,
25
27
  value,
28
+ setValue,
29
+ data,
30
+ keyName,
26
31
  visible,
27
32
  quotes,
28
33
  style,
29
34
  displayDataTypes,
30
35
  editableValue,
36
+ onDelete,
31
37
  onEdit
32
38
  } = props,
33
39
  reset = _objectWithoutPropertiesLoose(props, _excluded);
@@ -55,51 +61,68 @@ export function ReValue(props) {
55
61
  $edit.current.contentEditable = 'false';
56
62
  }
57
63
  };
58
- var blur = () => {
59
- if (!editableValue) return;
60
- setEditable(false);
61
- if ($edit.current) {
62
- $edit.current.contentEditable = 'false';
63
- var text = $edit.current.innerText;
64
- if (curentType === 'number' || curentType === 'float') {
65
- text = Number(text);
66
- setCurentType(isFloat(text) ? 'float' : 'number');
67
- }
68
- if (curentType === 'url' && typeof text === 'string') {
69
- text = new URL(text);
70
- }
71
- if (Number.isNaN(text)) {
72
- setCurentType('number');
73
- }
74
- if (typeof text === 'string' && /^(true|false)$/ig.test(text)) {
75
- text = /^(true)$/ig.test(text) ? true : false;
76
- setCurentType('boolean');
77
- } else if (typeof text === 'string' && /^[\d]+n$/ig.test(text)) {
78
- text = BigInt(text.replace(/n$/ig, ''));
79
- setCurentType('bigint');
80
- } else if (typeof text === 'string' && /^(null)$/ig.test(text)) {
81
- text = null;
82
- setCurentType('null');
83
- } else if (typeof text === 'string' && /^(undefined)$/ig.test(text)) {
84
- text = undefined;
85
- setCurentType('undefined');
86
- } else if (typeof text === 'string') {
87
- try {
88
- var dt = new Date(text);
89
- if (dt.toString() !== 'Invalid Date') {
90
- text = dt;
91
- setCurentType('date');
64
+ var blur = /*#__PURE__*/function () {
65
+ var _ref2 = _asyncToGenerator(function* () {
66
+ if (!editableValue) return;
67
+ setEditable(false);
68
+ if ($edit.current) {
69
+ $edit.current.contentEditable = 'false';
70
+ var text = $edit.current.innerText;
71
+ var _typeStr = curentType;
72
+ if (curentType === 'number' || curentType === 'float') {
73
+ text = Number(text);
74
+ _typeStr = isFloat(text) ? 'float' : 'number';
75
+ }
76
+ if (curentType === 'url' && typeof text === 'string') {
77
+ text = new URL(text);
78
+ _typeStr = 'url';
79
+ }
80
+ if (Number.isNaN(text)) {
81
+ _typeStr = 'number';
82
+ }
83
+ if (typeof text === 'string' && /^(true|false)$/ig.test(text)) {
84
+ text = /^(true)$/ig.test(text) ? true : false;
85
+ _typeStr = 'boolean';
86
+ } else if (typeof text === 'string' && /^[\d]+n$/ig.test(text)) {
87
+ text = BigInt(text.replace(/n$/ig, ''));
88
+ _typeStr = 'bigint';
89
+ } else if (typeof text === 'string' && /^(null)$/ig.test(text)) {
90
+ text = null;
91
+ _typeStr = 'null';
92
+ } else if (typeof text === 'string' && /^(undefined)$/ig.test(text)) {
93
+ text = undefined;
94
+ _typeStr = 'undefined';
95
+ } else if (typeof text === 'string') {
96
+ try {
97
+ if (text && text.length > 10 && !isNaN(Date.parse(text))) {
98
+ var dt = new Date(text);
99
+ text = dt;
100
+ _typeStr = 'date';
101
+ }
102
+ } catch (error) {}
103
+ }
104
+ if (onEdit) {
105
+ var result = yield onEdit({
106
+ type: 'value',
107
+ value: text,
108
+ oldValue: curentChild
109
+ });
110
+ if (result) {
111
+ setCurentType(_typeStr);
112
+ setCurentChild(text);
113
+ } else {
114
+ var {
115
+ content: oldChildStr
116
+ } = getValueString(curentChild);
117
+ $edit.current.innerHTML = String(oldChildStr);
92
118
  }
93
- } catch (error) {}
119
+ }
94
120
  }
95
- setCurentChild(text);
96
- onEdit && onEdit({
97
- type: 'value',
98
- value: text,
99
- oldValue: curentChild
100
- });
101
- }
102
- };
121
+ });
122
+ return function blur() {
123
+ return _ref2.apply(this, arguments);
124
+ };
125
+ }();
103
126
  var defaultStyle = {
104
127
  minWidth: 34,
105
128
  minHeight: 18,
@@ -127,23 +150,35 @@ export function ReValue(props) {
127
150
  if (typeStr === 'null' || typeStr === 'undefined') {
128
151
  typeView = /*#__PURE__*/_jsx(Fragment, {});
129
152
  }
153
+ var deleteHandle = /*#__PURE__*/function () {
154
+ var _ref3 = _asyncToGenerator(function* (evn) {
155
+ evn.stopPropagation();
156
+ if (data && keyName && keyName in data && setValue) {
157
+ delete data[keyName];
158
+ setValue(_extends({}, data));
159
+ }
160
+ });
161
+ return function deleteHandle(_x) {
162
+ return _ref3.apply(this, arguments);
163
+ };
164
+ }();
130
165
  return /*#__PURE__*/_jsxs(Fragment, {
131
- children: [displayDataTypes && typeView, /*#__PURE__*/_jsxs(Fragment, {
132
- children: [/*#__PURE__*/_jsx(Quotes, {
133
- style: style,
134
- quotes: quotes,
135
- show: typeStr === 'string'
136
- }), /*#__PURE__*/_jsx("span", _extends({}, spanProps, {
137
- ref: $edit,
138
- "data-value": childStr,
139
- children: typeof curentChild === 'string' ? curentChild : childStr
140
- })), /*#__PURE__*/_jsx(Quotes, {
141
- style: style,
142
- quotes: quotes,
143
- show: typeStr === 'string'
144
- })]
145
- }), visible && editableValue && /*#__PURE__*/_jsx(EditIcon, {
166
+ children: [displayDataTypes && typeView, /*#__PURE__*/_jsx(Quotes, {
167
+ style: style,
168
+ quotes: quotes,
169
+ show: typeStr === 'string'
170
+ }), /*#__PURE__*/_jsx("span", _extends({}, spanProps, {
171
+ ref: $edit,
172
+ "data-value": childStr,
173
+ children: typeof curentChild === 'string' ? curentChild : childStr
174
+ })), /*#__PURE__*/_jsx(Quotes, {
175
+ style: style,
176
+ quotes: quotes,
177
+ show: typeStr === 'string'
178
+ }), visible && editableValue && onEdit && /*#__PURE__*/_jsx(EditIcon, {
146
179
  onClick: click
180
+ }), visible && editableValue && onDelete && /*#__PURE__*/_jsx(DeleteIcon, {
181
+ onClick: deleteHandle
147
182
  })]
148
183
  });
149
184
  }
package/esm/node.d.ts CHANGED
@@ -6,5 +6,7 @@ export interface RooNodeProps<T extends object> extends JsonViewProps<T> {
6
6
  keyName?: string | number;
7
7
  keyid?: string;
8
8
  level?: number;
9
+ parentValue?: T;
10
+ setParentValue?: React.Dispatch<React.SetStateAction<T>>;
9
11
  }
10
12
  export declare function RooNode<T extends object>(props: RooNodeProps<T>): import("react/jsx-runtime").JSX.Element;