@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/README.md +32 -7
- package/cjs/editor/countInfoExtra.d.ts +10 -2
- package/cjs/editor/countInfoExtra.js +50 -6
- package/cjs/editor/icon/add.js +3 -3
- package/cjs/editor/icon/delete.d.ts +4 -0
- package/cjs/editor/icon/delete.js +30 -0
- package/cjs/editor/index.d.ts +10 -2
- package/cjs/editor/index.js +5 -2
- package/cjs/editor/value.d.ts +3 -0
- package/cjs/editor/value.js +126 -64
- package/cjs/node.d.ts +2 -0
- package/cjs/node.js +20 -10
- package/cjs/value.d.ts +13 -7
- package/cjs/value.js +6 -2
- package/editor.d.ts +5 -0
- package/esm/editor/countInfoExtra.d.ts +10 -2
- package/esm/editor/countInfoExtra.js +37 -6
- package/esm/editor/icon/add.js +3 -3
- package/esm/editor/icon/delete.d.ts +4 -0
- package/esm/editor/icon/delete.js +24 -0
- package/esm/editor/index.d.ts +10 -2
- package/esm/editor/index.js +6 -3
- package/esm/editor/value.d.ts +3 -0
- package/esm/editor/value.js +94 -59
- package/esm/node.d.ts +2 -0
- package/esm/node.js +13 -4
- package/esm/value.d.ts +13 -7
- package/esm/value.js +6 -2
- package/package.json +1 -1
package/README.md
CHANGED
|
@@ -25,6 +25,8 @@ A React component for displaying and editing javascript arrays and JSON objects.
|
|
|
25
25
|
🎨 Support theme customization & [`online editing`](https://uiwjs.github.io/react-json-view/#online-editing-theme) theme
|
|
26
26
|
🌒 Support dark/light mode
|
|
27
27
|
📦 Zero dependencies
|
|
28
|
+
📋 Copy to Clipboard
|
|
29
|
+
✏️ Support editing and adding features
|
|
28
30
|
♻️ Whether to highlight updates.
|
|
29
31
|
|
|
30
32
|
## Quick Start
|
|
@@ -123,6 +125,8 @@ const customTheme = {
|
|
|
123
125
|
'--w-rjv-line-color': '#323232',
|
|
124
126
|
'--w-rjv-arrow-color': 'var(--w-rjv-color)',
|
|
125
127
|
'--w-rjv-edit-color': 'var(--w-rjv-color)',
|
|
128
|
+
'--w-rjv-add-color': 'var(--w-rjv-color)',
|
|
129
|
+
'--w-rjv-delete-color': '#dc3545',
|
|
126
130
|
'--w-rjv-info-color': '#656565',
|
|
127
131
|
'--w-rjv-update-color': '#ebcb8b',
|
|
128
132
|
'--w-rjv-copied-color': '#9cdcfe',
|
|
@@ -187,7 +191,9 @@ const customTheme = {
|
|
|
187
191
|
'--w-rjv-background-color': '#1e1e1e',
|
|
188
192
|
'--w-rjv-line-color': '#323232',
|
|
189
193
|
'--w-rjv-arrow-color': '#9cdcfe',
|
|
190
|
-
'--w-rjv-edit-color': '#
|
|
194
|
+
'--w-rjv-edit-color': '#0184a6',
|
|
195
|
+
'--w-rjv-add-color': '#0184a6',
|
|
196
|
+
'--w-rjv-delete-color': '#dc3545',
|
|
191
197
|
'--w-rjv-info-color': '#656565',
|
|
192
198
|
'--w-rjv-update-color': '#ebcb8b',
|
|
193
199
|
'--w-rjv-copied-color': '#0184a6',
|
|
@@ -237,7 +243,18 @@ export default function Demo() {
|
|
|
237
243
|
<input type="checkbox" checked={editable} onChange={changeEditable} /> Editable
|
|
238
244
|
</label>
|
|
239
245
|
<div style={{ display: 'flex', gap: '1rem', alignItems: 'flex-start' }}>
|
|
240
|
-
<JsonView
|
|
246
|
+
<JsonView
|
|
247
|
+
editable={editable}
|
|
248
|
+
value={src}
|
|
249
|
+
keyName="root"
|
|
250
|
+
onAdd={(keyOrValue, newValue, value, isAdd) => {
|
|
251
|
+
return isAdd;
|
|
252
|
+
}}
|
|
253
|
+
onEdit={(opts) => {
|
|
254
|
+
return true;
|
|
255
|
+
}}
|
|
256
|
+
style={{ flex: 1, overflow: 'auto', ...theme }}
|
|
257
|
+
/>
|
|
241
258
|
<div>
|
|
242
259
|
<Colorful color={hex} onChange={onChange} />
|
|
243
260
|
<div style={{ display: 'flex', gap: '0.4rem', flexDirection: 'column' }}>
|
|
@@ -247,7 +264,7 @@ export default function Demo() {
|
|
|
247
264
|
setHex(customTheme[varname]);
|
|
248
265
|
};
|
|
249
266
|
const active = cssvar === varname ? '#a8a8a8' : '';
|
|
250
|
-
return <button key={idx} style={{ background: active }} onClick={click}>{varname}</button>
|
|
267
|
+
return <button key={idx} style={{ background: active, border: 0,boxShadow: 'inset 0px 0px 1px #000', textAlign: 'left' }} onClick={click}>{varname}</button>
|
|
251
268
|
})}
|
|
252
269
|
</div>
|
|
253
270
|
</div>
|
|
@@ -316,7 +333,7 @@ const object = {
|
|
|
316
333
|
integer: 42,
|
|
317
334
|
}
|
|
318
335
|
|
|
319
|
-
function value({ type, children, value, keyName, visible, ...props }) {
|
|
336
|
+
function value({ type, children, value, setValue, keyName, visible, ...props }) {
|
|
320
337
|
if (type === 'string' && /\.(jpg)$/.test(value)) {
|
|
321
338
|
return (
|
|
322
339
|
<span {...props}>
|
|
@@ -369,7 +386,7 @@ export default function Demo() {
|
|
|
369
386
|
import React from 'react';
|
|
370
387
|
import JsonView from '@uiw/react-json-view';
|
|
371
388
|
|
|
372
|
-
function value({ type, children, visible, keyName, value, ...props }) {
|
|
389
|
+
function value({ type, children, visible, keyName, value, setValue, ...props }) {
|
|
373
390
|
if (value instanceof URL) {
|
|
374
391
|
return (
|
|
375
392
|
<span {...props}>
|
|
@@ -730,19 +747,27 @@ export interface CountInfoProps {
|
|
|
730
747
|
import { JsonViewProps } from '@uiw/react-json-view';
|
|
731
748
|
import type { CountInfoExtraProps } from '@uiw/react-json-view/cjs/editor/countInfoExtra';
|
|
732
749
|
export interface JsonViewEditorProps<T extends object> extends JsonViewProps<T> {
|
|
733
|
-
/**
|
|
750
|
+
/**
|
|
751
|
+
* When a callback function is passed in, edit functionality is enabled. The callback is invoked before edits are completed.
|
|
752
|
+
* @returns {boolean} Returning false from onEdit will prevent the change from being made.
|
|
753
|
+
*/
|
|
734
754
|
onEdit?: (option: {
|
|
735
755
|
value: unknown;
|
|
736
756
|
oldValue: unknown;
|
|
737
757
|
keyName?: string | number;
|
|
738
758
|
parentName?: string | number;
|
|
739
759
|
type?: 'value' | 'key';
|
|
740
|
-
}) =>
|
|
760
|
+
}) => boolean;
|
|
741
761
|
/**
|
|
742
762
|
* When a callback function is passed in, add functionality is enabled. The callback is invoked before additions are completed.
|
|
743
763
|
* @returns {boolean} Returning false from onAdd will prevent the change from being made.
|
|
744
764
|
*/
|
|
745
765
|
onAdd?: CountInfoExtraProps<T>['onAdd'];
|
|
766
|
+
/**
|
|
767
|
+
* When a callback function is passed in, delete functionality is enabled. The callback is invoked before deletions are completed.
|
|
768
|
+
* @returns Returning false from onDelete will prevent the change from being made.
|
|
769
|
+
*/
|
|
770
|
+
onDelete?: CountInfoExtraProps<T>['onDelete'];
|
|
746
771
|
/** Whether enable edit feature. @default true */
|
|
747
772
|
editable?: boolean;
|
|
748
773
|
}
|
|
@@ -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
|
-
|
|
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;
|
|
@@ -10,14 +10,21 @@ var _defineProperty2 = _interopRequireDefault(require("@babel/runtime/helpers/de
|
|
|
10
10
|
var _objectSpread3 = _interopRequireDefault(require("@babel/runtime/helpers/objectSpread2"));
|
|
11
11
|
var _toConsumableArray2 = _interopRequireDefault(require("@babel/runtime/helpers/toConsumableArray"));
|
|
12
12
|
var _asyncToGenerator2 = _interopRequireDefault(require("@babel/runtime/helpers/asyncToGenerator"));
|
|
13
|
+
var _react = require("react");
|
|
13
14
|
var _add = require("./icon/add");
|
|
15
|
+
var _delete = require("./icon/delete");
|
|
14
16
|
var _jsxRuntime = require("react/jsx-runtime");
|
|
15
17
|
function CountInfoExtra(props) {
|
|
16
18
|
var visible = props.visible,
|
|
17
19
|
showTools = props.showTools,
|
|
20
|
+
editable = props.editable,
|
|
21
|
+
keyName = props.keyName,
|
|
18
22
|
value = props.value,
|
|
23
|
+
parentValue = props.parentValue,
|
|
19
24
|
setValue = props.setValue,
|
|
20
|
-
|
|
25
|
+
setParentValue = props.setParentValue,
|
|
26
|
+
onAdd = props.onAdd,
|
|
27
|
+
onDelete = props.onDelete;
|
|
21
28
|
if (!visible || !showTools) return null;
|
|
22
29
|
var click = /*#__PURE__*/function () {
|
|
23
30
|
var _ref = (0, _asyncToGenerator2["default"])( /*#__PURE__*/(0, _regeneratorRuntime2["default"])().mark(function _callee(event) {
|
|
@@ -30,7 +37,7 @@ function CountInfoExtra(props) {
|
|
|
30
37
|
isArray = Array.isArray(value);
|
|
31
38
|
isAdd = isArray ? true : !(keyOrValue in value);
|
|
32
39
|
result = isArray ? [].concat((0, _toConsumableArray2["default"])(value), [keyOrValue]) : (0, _objectSpread3["default"])((0, _objectSpread3["default"])({}, value), {}, (0, _defineProperty2["default"])({}, keyOrValue, undefined));
|
|
33
|
-
if (!onAdd) {
|
|
40
|
+
if (!(onAdd && setValue)) {
|
|
34
41
|
_context.next = 10;
|
|
35
42
|
break;
|
|
36
43
|
}
|
|
@@ -51,8 +58,45 @@ function CountInfoExtra(props) {
|
|
|
51
58
|
return _ref.apply(this, arguments);
|
|
52
59
|
};
|
|
53
60
|
}();
|
|
54
|
-
var
|
|
55
|
-
|
|
56
|
-
|
|
57
|
-
|
|
61
|
+
var deleteHandle = /*#__PURE__*/function () {
|
|
62
|
+
var _ref2 = (0, _asyncToGenerator2["default"])( /*#__PURE__*/(0, _regeneratorRuntime2["default"])().mark(function _callee2(event) {
|
|
63
|
+
var maybeDelete;
|
|
64
|
+
return (0, _regeneratorRuntime2["default"])().wrap(function _callee2$(_context2) {
|
|
65
|
+
while (1) switch (_context2.prev = _context2.next) {
|
|
66
|
+
case 0:
|
|
67
|
+
event.stopPropagation();
|
|
68
|
+
if (!(onDelete && (keyName || typeof keyName === 'number') && parentValue)) {
|
|
69
|
+
_context2.next = 6;
|
|
70
|
+
break;
|
|
71
|
+
}
|
|
72
|
+
_context2.next = 4;
|
|
73
|
+
return onDelete(keyName, value, parentValue);
|
|
74
|
+
case 4:
|
|
75
|
+
maybeDelete = _context2.sent;
|
|
76
|
+
if (maybeDelete && setParentValue) {
|
|
77
|
+
if (Array.isArray(parentValue)) {
|
|
78
|
+
parentValue.splice(keyName, 1);
|
|
79
|
+
setParentValue((0, _toConsumableArray2["default"])(parentValue));
|
|
80
|
+
} else if (keyName in parentValue) {
|
|
81
|
+
delete parentValue[keyName];
|
|
82
|
+
setParentValue((0, _objectSpread3["default"])({}, parentValue));
|
|
83
|
+
}
|
|
84
|
+
}
|
|
85
|
+
case 6:
|
|
86
|
+
case "end":
|
|
87
|
+
return _context2.stop();
|
|
88
|
+
}
|
|
89
|
+
}, _callee2);
|
|
90
|
+
}));
|
|
91
|
+
return function deleteHandle(_x2) {
|
|
92
|
+
return _ref2.apply(this, arguments);
|
|
93
|
+
};
|
|
94
|
+
}();
|
|
95
|
+
return /*#__PURE__*/(0, _jsxRuntime.jsxs)(_react.Fragment, {
|
|
96
|
+
children: [editable && onAdd && /*#__PURE__*/(0, _jsxRuntime.jsx)(_add.AddIcon, {
|
|
97
|
+
onClick: click
|
|
98
|
+
}), editable && onDelete && parentValue && /*#__PURE__*/(0, _jsxRuntime.jsx)(_delete.DeleteIcon, {
|
|
99
|
+
onClick: deleteHandle
|
|
100
|
+
})]
|
|
101
|
+
});
|
|
58
102
|
}
|
package/cjs/editor/icon/add.js
CHANGED
|
@@ -18,12 +18,12 @@ var AddIcon = function AddIcon(props) {
|
|
|
18
18
|
width: '1em'
|
|
19
19
|
};
|
|
20
20
|
return /*#__PURE__*/(0, _jsxRuntime.jsx)("svg", (0, _objectSpread2["default"])((0, _objectSpread2["default"])({
|
|
21
|
-
viewBox: "0 0
|
|
22
|
-
fill: "var(--w-rjv-
|
|
21
|
+
viewBox: "0 0 40 40",
|
|
22
|
+
fill: "var(--w-rjv-add-color, currentColor)"
|
|
23
23
|
}, props), {}, {
|
|
24
24
|
style: (0, _objectSpread2["default"])((0, _objectSpread2["default"])({}, style), defaultStyle),
|
|
25
25
|
children: /*#__PURE__*/(0, _jsxRuntime.jsx)("path", {
|
|
26
|
-
d: "
|
|
26
|
+
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"
|
|
27
27
|
})
|
|
28
28
|
}));
|
|
29
29
|
};
|
|
@@ -0,0 +1,30 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
|
|
3
|
+
var _interopRequireDefault = require("@babel/runtime/helpers/interopRequireDefault")["default"];
|
|
4
|
+
Object.defineProperty(exports, "__esModule", {
|
|
5
|
+
value: true
|
|
6
|
+
});
|
|
7
|
+
exports.DeleteIcon = void 0;
|
|
8
|
+
var _objectSpread2 = _interopRequireDefault(require("@babel/runtime/helpers/objectSpread2"));
|
|
9
|
+
var _jsxRuntime = require("react/jsx-runtime");
|
|
10
|
+
var DeleteIcon = function DeleteIcon(props) {
|
|
11
|
+
var style = props.style;
|
|
12
|
+
var defaultStyle = {
|
|
13
|
+
verticalAlign: 'middle',
|
|
14
|
+
display: 'inline-block',
|
|
15
|
+
cursor: 'pointer',
|
|
16
|
+
marginLeft: 5,
|
|
17
|
+
height: '1em',
|
|
18
|
+
width: '1em'
|
|
19
|
+
};
|
|
20
|
+
return /*#__PURE__*/(0, _jsxRuntime.jsx)("svg", (0, _objectSpread2["default"])((0, _objectSpread2["default"])({
|
|
21
|
+
viewBox: "0 0 40 40",
|
|
22
|
+
fill: "var(--w-rjv-delete-color, #dc3545)"
|
|
23
|
+
}, props), {}, {
|
|
24
|
+
style: (0, _objectSpread2["default"])((0, _objectSpread2["default"])({}, style), defaultStyle),
|
|
25
|
+
children: /*#__PURE__*/(0, _jsxRuntime.jsx)("path", {
|
|
26
|
+
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"
|
|
27
|
+
})
|
|
28
|
+
}));
|
|
29
|
+
};
|
|
30
|
+
exports.DeleteIcon = DeleteIcon;
|
package/cjs/editor/index.d.ts
CHANGED
|
@@ -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
|
-
/**
|
|
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
|
-
}) =>
|
|
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
|
}
|
package/cjs/editor/index.js
CHANGED
|
@@ -13,7 +13,7 @@ var _objectKey = require("./objectKey");
|
|
|
13
13
|
var _value = require("./value");
|
|
14
14
|
var _countInfoExtra = require("./countInfoExtra");
|
|
15
15
|
var _jsxRuntime = require("react/jsx-runtime");
|
|
16
|
-
var _excluded = ["onEdit", "components", "editable", "displayDataTypes", "onAdd"];
|
|
16
|
+
var _excluded = ["onEdit", "components", "editable", "displayDataTypes", "onAdd", "onDelete"];
|
|
17
17
|
var JsonViewEditor = /*#__PURE__*/(0, _react.forwardRef)(function (props, ref) {
|
|
18
18
|
var onEdit = props.onEdit,
|
|
19
19
|
components = props.components,
|
|
@@ -22,12 +22,14 @@ var JsonViewEditor = /*#__PURE__*/(0, _react.forwardRef)(function (props, ref) {
|
|
|
22
22
|
_props$displayDataTyp = props.displayDataTypes,
|
|
23
23
|
displayDataTypes = _props$displayDataTyp === void 0 ? true : _props$displayDataTyp,
|
|
24
24
|
onAdd = props.onAdd,
|
|
25
|
+
onDelete = props.onDelete,
|
|
25
26
|
reset = (0, _objectWithoutProperties2["default"])(props, _excluded);
|
|
26
27
|
var comps = (0, _objectSpread2["default"])((0, _objectSpread2["default"])({}, components), {}, {
|
|
27
28
|
countInfoExtra: function countInfoExtra(reprops) {
|
|
28
29
|
return /*#__PURE__*/(0, _jsxRuntime.jsx)(_countInfoExtra.CountInfoExtra, (0, _objectSpread2["default"])((0, _objectSpread2["default"])({}, reprops), {}, {
|
|
29
30
|
editable: editable,
|
|
30
|
-
onAdd: onAdd
|
|
31
|
+
onAdd: onAdd,
|
|
32
|
+
onDelete: onDelete
|
|
31
33
|
}));
|
|
32
34
|
},
|
|
33
35
|
objectKey: function objectKey(reprops) {
|
|
@@ -41,6 +43,7 @@ var JsonViewEditor = /*#__PURE__*/(0, _react.forwardRef)(function (props, ref) {
|
|
|
41
43
|
return /*#__PURE__*/(0, _jsxRuntime.jsx)(_value.ReValue, (0, _objectSpread2["default"])((0, _objectSpread2["default"])({}, reprops), {}, {
|
|
42
44
|
editableValue: editable,
|
|
43
45
|
displayDataTypes: displayDataTypes,
|
|
46
|
+
onDelete: onDelete,
|
|
44
47
|
onEdit: onEdit
|
|
45
48
|
}));
|
|
46
49
|
}
|
package/cjs/editor/value.d.ts
CHANGED
|
@@ -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;
|
package/cjs/editor/value.js
CHANGED
|
@@ -6,13 +6,16 @@ Object.defineProperty(exports, "__esModule", {
|
|
|
6
6
|
});
|
|
7
7
|
exports.ReValue = ReValue;
|
|
8
8
|
var _objectSpread2 = _interopRequireDefault(require("@babel/runtime/helpers/objectSpread2"));
|
|
9
|
+
var _regeneratorRuntime2 = _interopRequireDefault(require("@babel/runtime/helpers/regeneratorRuntime"));
|
|
10
|
+
var _asyncToGenerator2 = _interopRequireDefault(require("@babel/runtime/helpers/asyncToGenerator"));
|
|
9
11
|
var _slicedToArray2 = _interopRequireDefault(require("@babel/runtime/helpers/slicedToArray"));
|
|
10
12
|
var _objectWithoutProperties2 = _interopRequireDefault(require("@babel/runtime/helpers/objectWithoutProperties"));
|
|
11
13
|
var _react = require("react");
|
|
12
14
|
var _value = require("../value");
|
|
13
15
|
var _edit = require("./icon/edit");
|
|
16
|
+
var _delete = require("./icon/delete");
|
|
14
17
|
var _jsxRuntime = require("react/jsx-runtime");
|
|
15
|
-
var _excluded = ["type", "value", "keyName", "visible", "quotes", "style", "children", "displayDataTypes", "editableValue", "onEdit"];
|
|
18
|
+
var _excluded = ["type", "value", "setValue", "data", "keyName", "visible", "quotes", "style", "children", "displayDataTypes", "editableValue", "onDelete", "onEdit"];
|
|
16
19
|
var Quotes = function Quotes(_ref) {
|
|
17
20
|
var show = _ref.show,
|
|
18
21
|
style = _ref.style,
|
|
@@ -27,6 +30,8 @@ function ReValue(props) {
|
|
|
27
30
|
var _typeMap$typeStr;
|
|
28
31
|
var type = props.type,
|
|
29
32
|
value = props.value,
|
|
33
|
+
setValue = props.setValue,
|
|
34
|
+
data = props.data,
|
|
30
35
|
keyName = props.keyName,
|
|
31
36
|
visible = props.visible,
|
|
32
37
|
quotes = props.quotes,
|
|
@@ -34,6 +39,7 @@ function ReValue(props) {
|
|
|
34
39
|
children = props.children,
|
|
35
40
|
displayDataTypes = props.displayDataTypes,
|
|
36
41
|
editableValue = props.editableValue,
|
|
42
|
+
onDelete = props.onDelete,
|
|
37
43
|
onEdit = props.onEdit,
|
|
38
44
|
reset = (0, _objectWithoutProperties2["default"])(props, _excluded);
|
|
39
45
|
var _useState = (0, _react.useState)(false),
|
|
@@ -71,60 +77,96 @@ function ReValue(props) {
|
|
|
71
77
|
$edit.current.contentEditable = 'false';
|
|
72
78
|
}
|
|
73
79
|
};
|
|
74
|
-
var blur = function
|
|
75
|
-
|
|
76
|
-
|
|
77
|
-
|
|
78
|
-
|
|
79
|
-
|
|
80
|
-
|
|
81
|
-
|
|
82
|
-
|
|
83
|
-
|
|
84
|
-
|
|
85
|
-
|
|
86
|
-
|
|
87
|
-
|
|
88
|
-
|
|
89
|
-
|
|
90
|
-
|
|
91
|
-
|
|
92
|
-
|
|
93
|
-
|
|
94
|
-
|
|
95
|
-
|
|
96
|
-
|
|
97
|
-
|
|
98
|
-
|
|
99
|
-
|
|
100
|
-
|
|
101
|
-
|
|
102
|
-
|
|
103
|
-
|
|
104
|
-
|
|
105
|
-
|
|
106
|
-
|
|
107
|
-
|
|
108
|
-
|
|
109
|
-
|
|
110
|
-
|
|
111
|
-
|
|
112
|
-
|
|
113
|
-
|
|
114
|
-
|
|
115
|
-
|
|
116
|
-
|
|
117
|
-
|
|
118
|
-
|
|
80
|
+
var blur = /*#__PURE__*/function () {
|
|
81
|
+
var _ref2 = (0, _asyncToGenerator2["default"])( /*#__PURE__*/(0, _regeneratorRuntime2["default"])().mark(function _callee() {
|
|
82
|
+
var text, _typeStr, dt, result, _getValueString, oldChildStr;
|
|
83
|
+
return (0, _regeneratorRuntime2["default"])().wrap(function _callee$(_context) {
|
|
84
|
+
while (1) switch (_context.prev = _context.next) {
|
|
85
|
+
case 0:
|
|
86
|
+
if (editableValue) {
|
|
87
|
+
_context.next = 2;
|
|
88
|
+
break;
|
|
89
|
+
}
|
|
90
|
+
return _context.abrupt("return");
|
|
91
|
+
case 2:
|
|
92
|
+
setEditable(false);
|
|
93
|
+
if (!$edit.current) {
|
|
94
|
+
_context.next = 16;
|
|
95
|
+
break;
|
|
96
|
+
}
|
|
97
|
+
$edit.current.contentEditable = 'false';
|
|
98
|
+
text = $edit.current.innerText;
|
|
99
|
+
_typeStr = curentType;
|
|
100
|
+
if (curentType === 'number' || curentType === 'float') {
|
|
101
|
+
text = Number(text);
|
|
102
|
+
_typeStr = (0, _value.isFloat)(text) ? 'float' : 'number';
|
|
103
|
+
}
|
|
104
|
+
if (curentType === 'url' && typeof text === 'string') {
|
|
105
|
+
text = new URL(text);
|
|
106
|
+
_typeStr = 'url';
|
|
107
|
+
}
|
|
108
|
+
if (Number.isNaN(text)) {
|
|
109
|
+
_typeStr = 'number';
|
|
110
|
+
}
|
|
111
|
+
if (typeof text === 'string' && /^(true|false)$/ig.test(text)) {
|
|
112
|
+
text = /^(true)$/ig.test(text) ? true : false;
|
|
113
|
+
_typeStr = 'boolean';
|
|
114
|
+
} else if (typeof text === 'string' && /^[\d]+n$/ig.test(text)) {
|
|
115
|
+
text = BigInt(text.replace(/n$/ig, ''));
|
|
116
|
+
_typeStr = 'bigint';
|
|
117
|
+
} else if (typeof text === 'string' && /^(null)$/ig.test(text)) {
|
|
118
|
+
text = null;
|
|
119
|
+
_typeStr = 'null';
|
|
120
|
+
} else if (typeof text === 'string' && /^(undefined)$/ig.test(text)) {
|
|
121
|
+
text = undefined;
|
|
122
|
+
_typeStr = 'undefined';
|
|
123
|
+
} else if (typeof text === 'string') {
|
|
124
|
+
try {
|
|
125
|
+
if (text && text.length > 10 && !isNaN(Date.parse(text))) {
|
|
126
|
+
dt = new Date(text);
|
|
127
|
+
text = dt;
|
|
128
|
+
_typeStr = 'date';
|
|
129
|
+
}
|
|
130
|
+
} catch (error) {}
|
|
131
|
+
}
|
|
132
|
+
if (!onEdit) {
|
|
133
|
+
_context.next = 16;
|
|
134
|
+
break;
|
|
135
|
+
}
|
|
136
|
+
_context.next = 14;
|
|
137
|
+
return onEdit({
|
|
138
|
+
type: 'value',
|
|
139
|
+
value: text,
|
|
140
|
+
oldValue: curentChild
|
|
141
|
+
});
|
|
142
|
+
case 14:
|
|
143
|
+
result = _context.sent;
|
|
144
|
+
if (result) {
|
|
145
|
+
setCurentType(_typeStr);
|
|
146
|
+
setCurentChild(text);
|
|
147
|
+
} else {
|
|
148
|
+
_getValueString = (0, _value.getValueString)(curentChild), oldChildStr = _getValueString.content;
|
|
149
|
+
$edit.current.innerHTML = String(oldChildStr);
|
|
150
|
+
}
|
|
151
|
+
case 16:
|
|
152
|
+
case "end":
|
|
153
|
+
return _context.stop();
|
|
154
|
+
}
|
|
155
|
+
}, _callee);
|
|
156
|
+
}));
|
|
157
|
+
return function blur() {
|
|
158
|
+
return _ref2.apply(this, arguments);
|
|
159
|
+
};
|
|
160
|
+
}();
|
|
119
161
|
var defaultStyle = {
|
|
120
162
|
minWidth: 34,
|
|
121
163
|
minHeight: 18,
|
|
122
164
|
paddingInline: 3,
|
|
123
165
|
display: 'inline-block'
|
|
124
166
|
};
|
|
125
|
-
var
|
|
126
|
-
typeStr =
|
|
127
|
-
childStr =
|
|
167
|
+
var _getValueString2 = (0, _value.getValueString)(curentChild),
|
|
168
|
+
typeStr = _getValueString2.type,
|
|
169
|
+
childStr = _getValueString2.content;
|
|
128
170
|
var color = ((_typeMap$typeStr = _value.typeMap[typeStr]) === null || _typeMap$typeStr === void 0 ? void 0 : _typeMap$typeStr.color) || '';
|
|
129
171
|
var spanProps = (0, _objectSpread2["default"])((0, _objectSpread2["default"])({}, reset), {}, {
|
|
130
172
|
onBlur: blur,
|
|
@@ -142,23 +184,43 @@ function ReValue(props) {
|
|
|
142
184
|
if (typeStr === 'null' || typeStr === 'undefined') {
|
|
143
185
|
typeView = /*#__PURE__*/(0, _jsxRuntime.jsx)(_react.Fragment, {});
|
|
144
186
|
}
|
|
187
|
+
var deleteHandle = /*#__PURE__*/function () {
|
|
188
|
+
var _ref3 = (0, _asyncToGenerator2["default"])( /*#__PURE__*/(0, _regeneratorRuntime2["default"])().mark(function _callee2(evn) {
|
|
189
|
+
return (0, _regeneratorRuntime2["default"])().wrap(function _callee2$(_context2) {
|
|
190
|
+
while (1) switch (_context2.prev = _context2.next) {
|
|
191
|
+
case 0:
|
|
192
|
+
evn.stopPropagation();
|
|
193
|
+
if (data && keyName && keyName in data && setValue) {
|
|
194
|
+
delete data[keyName];
|
|
195
|
+
setValue((0, _objectSpread2["default"])({}, data));
|
|
196
|
+
}
|
|
197
|
+
case 2:
|
|
198
|
+
case "end":
|
|
199
|
+
return _context2.stop();
|
|
200
|
+
}
|
|
201
|
+
}, _callee2);
|
|
202
|
+
}));
|
|
203
|
+
return function deleteHandle(_x) {
|
|
204
|
+
return _ref3.apply(this, arguments);
|
|
205
|
+
};
|
|
206
|
+
}();
|
|
145
207
|
return /*#__PURE__*/(0, _jsxRuntime.jsxs)(_react.Fragment, {
|
|
146
|
-
children: [displayDataTypes && typeView, /*#__PURE__*/(0, _jsxRuntime.
|
|
147
|
-
|
|
148
|
-
|
|
149
|
-
|
|
150
|
-
|
|
151
|
-
|
|
152
|
-
|
|
153
|
-
|
|
154
|
-
|
|
155
|
-
|
|
156
|
-
|
|
157
|
-
|
|
158
|
-
|
|
159
|
-
})]
|
|
160
|
-
}), visible && editableValue && /*#__PURE__*/(0, _jsxRuntime.jsx)(_edit.EditIcon, {
|
|
208
|
+
children: [displayDataTypes && typeView, /*#__PURE__*/(0, _jsxRuntime.jsx)(Quotes, {
|
|
209
|
+
style: style,
|
|
210
|
+
quotes: quotes,
|
|
211
|
+
show: typeStr === 'string'
|
|
212
|
+
}), /*#__PURE__*/(0, _jsxRuntime.jsx)("span", (0, _objectSpread2["default"])((0, _objectSpread2["default"])({}, spanProps), {}, {
|
|
213
|
+
ref: $edit,
|
|
214
|
+
"data-value": childStr,
|
|
215
|
+
children: typeof curentChild === 'string' ? curentChild : childStr
|
|
216
|
+
})), /*#__PURE__*/(0, _jsxRuntime.jsx)(Quotes, {
|
|
217
|
+
style: style,
|
|
218
|
+
quotes: quotes,
|
|
219
|
+
show: typeStr === 'string'
|
|
220
|
+
}), visible && editableValue && onEdit && /*#__PURE__*/(0, _jsxRuntime.jsx)(_edit.EditIcon, {
|
|
161
221
|
onClick: click
|
|
222
|
+
}), visible && editableValue && onDelete && /*#__PURE__*/(0, _jsxRuntime.jsx)(_delete.DeleteIcon, {
|
|
223
|
+
onClick: deleteHandle
|
|
162
224
|
})]
|
|
163
225
|
});
|
|
164
226
|
}
|
package/cjs/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;
|