@uiw/react-json-view 1.4.0 → 1.5.1
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 +150 -13
- package/cjs/comps/ellipsis.d.ts +5 -0
- package/cjs/comps/ellipsis.js +32 -0
- package/cjs/comps/meta.d.ts +8 -0
- package/cjs/comps/meta.js +38 -0
- package/cjs/copied.js +5 -4
- package/cjs/editor/icon/edit.d.ts +4 -0
- package/cjs/editor/icon/edit.js +30 -0
- package/cjs/editor/index.d.ts +16 -0
- package/cjs/editor/index.js +48 -0
- package/cjs/editor/objectKey.d.ts +11 -0
- package/cjs/editor/objectKey.js +138 -0
- package/cjs/editor/value.d.ts +14 -0
- package/cjs/editor/value.js +165 -0
- package/cjs/index.d.ts +2 -1
- package/cjs/node.d.ts +0 -10
- package/cjs/node.js +45 -90
- package/cjs/semicolon.d.ts +11 -2
- package/cjs/semicolon.js +44 -25
- package/cjs/theme/dark.d.ts +2 -0
- package/cjs/theme/dark.js +2 -0
- package/cjs/theme/light.d.ts +2 -0
- package/cjs/theme/light.js +2 -0
- package/cjs/tools.d.ts +10 -0
- package/cjs/tools.js +24 -0
- package/cjs/value.d.ts +19 -4
- package/cjs/value.js +67 -28
- package/editor.d.ts +16 -0
- package/esm/comps/ellipsis.d.ts +5 -0
- package/esm/comps/ellipsis.js +26 -0
- package/esm/comps/meta.d.ts +8 -0
- package/esm/comps/meta.js +31 -0
- package/esm/copied.js +5 -4
- package/esm/editor/icon/edit.d.ts +4 -0
- package/esm/editor/icon/edit.js +24 -0
- package/esm/editor/index.d.ts +16 -0
- package/esm/editor/index.js +37 -0
- package/esm/editor/objectKey.d.ts +11 -0
- package/esm/editor/objectKey.js +122 -0
- package/esm/editor/value.d.ts +14 -0
- package/esm/editor/value.js +150 -0
- package/esm/index.d.ts +2 -1
- package/esm/node.d.ts +0 -10
- package/esm/node.js +35 -80
- package/esm/semicolon.d.ts +11 -2
- package/esm/semicolon.js +44 -25
- package/esm/theme/dark.d.ts +2 -0
- package/esm/theme/dark.js +2 -0
- package/esm/theme/light.d.ts +2 -0
- package/esm/theme/light.js +2 -0
- package/esm/tools.d.ts +10 -0
- package/esm/tools.js +20 -0
- package/esm/value.d.ts +19 -4
- package/esm/value.js +67 -28
- package/package.json +7 -1
package/README.md
CHANGED
|
@@ -112,6 +112,7 @@ const customTheme = {
|
|
|
112
112
|
'--w-rjv-background-color': '#1e1e1e',
|
|
113
113
|
'--w-rjv-line-color': '#323232',
|
|
114
114
|
'--w-rjv-arrow-color': 'var(--w-rjv-color)',
|
|
115
|
+
'--w-rjv-edit-color': 'var(--w-rjv-color)',
|
|
115
116
|
'--w-rjv-info-color': '#656565',
|
|
116
117
|
'--w-rjv-update-color': '#ebcb8b',
|
|
117
118
|
'--w-rjv-copied-color': '#9cdcfe',
|
|
@@ -126,6 +127,7 @@ const customTheme = {
|
|
|
126
127
|
'--w-rjv-type-bigint-color': '#268bd2',
|
|
127
128
|
'--w-rjv-type-boolean-color': '#559bd4',
|
|
128
129
|
'--w-rjv-type-date-color': '#586e75',
|
|
130
|
+
'--w-rjv-type-url-color': '#649bd8',
|
|
129
131
|
'--w-rjv-type-null-color': '#d33682',
|
|
130
132
|
'--w-rjv-type-nan-color': '#859900',
|
|
131
133
|
'--w-rjv-type-undefined-color': '#586e75',
|
|
@@ -143,9 +145,9 @@ export default function Demo() {
|
|
|
143
145
|
Online custom style example, please check in the [documentation website](https://uiwjs.github.io/react-json-view/)
|
|
144
146
|
|
|
145
147
|
```tsx mdx:preview:&title=Online Editing Theme
|
|
146
|
-
import React, { useState, useEffect
|
|
148
|
+
import React, { useState, useEffect } from 'react';
|
|
147
149
|
import Colorful from '@uiw/react-color-colorful';
|
|
148
|
-
import JsonView from '@uiw/react-json-view';
|
|
150
|
+
import JsonView from '@uiw/react-json-view/editor';
|
|
149
151
|
|
|
150
152
|
const object = {
|
|
151
153
|
avatar: 'https://i.imgur.com/MK3eW3As.jpg',
|
|
@@ -156,6 +158,7 @@ const object = {
|
|
|
156
158
|
null: null,
|
|
157
159
|
undefined,
|
|
158
160
|
timer: 0,
|
|
161
|
+
url: new URL('https://example.com'),
|
|
159
162
|
date: new Date('Tue Sep 13 2022 14:07:44 GMT-0500 (Central Daylight Time)'),
|
|
160
163
|
array: [19, 100.86, 'test', NaN, Infinity],
|
|
161
164
|
nestedArray: [
|
|
@@ -174,6 +177,7 @@ const customTheme = {
|
|
|
174
177
|
'--w-rjv-background-color': '#1e1e1e',
|
|
175
178
|
'--w-rjv-line-color': '#323232',
|
|
176
179
|
'--w-rjv-arrow-color': '#9cdcfe',
|
|
180
|
+
'--w-rjv-edit-color': '#9cdcfe',
|
|
177
181
|
'--w-rjv-info-color': '#656565',
|
|
178
182
|
'--w-rjv-update-color': '#ebcb8b',
|
|
179
183
|
'--w-rjv-copied-color': '#0184a6',
|
|
@@ -188,6 +192,7 @@ const customTheme = {
|
|
|
188
192
|
'--w-rjv-type-bigint-color': '#268bd2',
|
|
189
193
|
'--w-rjv-type-boolean-color': '#559bd4',
|
|
190
194
|
'--w-rjv-type-date-color': '#586e75',
|
|
195
|
+
'--w-rjv-type-url-color': '#0969da',
|
|
191
196
|
'--w-rjv-type-null-color': '#d33682',
|
|
192
197
|
'--w-rjv-type-nan-color': '#859900',
|
|
193
198
|
'--w-rjv-type-undefined-color': '#586e75',
|
|
@@ -196,6 +201,7 @@ const customTheme = {
|
|
|
196
201
|
export default function Demo() {
|
|
197
202
|
const [cssvar, setCssvar] = useState('--w-rjv-background-color');
|
|
198
203
|
const [hex, setHex] = useState("#1e1e1e");
|
|
204
|
+
const [editable, setEditable] = useState(false);
|
|
199
205
|
const [theme, setTheme] = useState(customTheme);
|
|
200
206
|
const onChange = ({ hexa }) => {
|
|
201
207
|
setHex(hexa);
|
|
@@ -214,13 +220,17 @@ export default function Demo() {
|
|
|
214
220
|
return () => clearInterval(id)
|
|
215
221
|
}, []);
|
|
216
222
|
|
|
223
|
+
const changeEditable = (evn) => setEditable(evn.target.checked);
|
|
217
224
|
return (
|
|
218
225
|
<React.Fragment>
|
|
219
|
-
<
|
|
220
|
-
<
|
|
226
|
+
<label>
|
|
227
|
+
<input type="checkbox" checked={editable} onChange={changeEditable} /> Editable
|
|
228
|
+
</label>
|
|
229
|
+
<div style={{ display: 'flex', gap: '1rem', alignItems: 'flex-start' }}>
|
|
230
|
+
<JsonView editable={editable} value={src} keyName="root" style={{ flex: 1, overflow: 'auto', ...theme }} />
|
|
221
231
|
<div>
|
|
222
232
|
<Colorful color={hex} onChange={onChange} />
|
|
223
|
-
<div style={{ display: 'flex', gap: '0.4rem',
|
|
233
|
+
<div style={{ display: 'flex', gap: '0.4rem', flexDirection: 'column' }}>
|
|
224
234
|
{Object.keys(customTheme).map((varname, idx) => {
|
|
225
235
|
const click = () => {
|
|
226
236
|
setCssvar(varname);
|
|
@@ -240,6 +250,7 @@ export default function Demo() {
|
|
|
240
250
|
)
|
|
241
251
|
}
|
|
242
252
|
```
|
|
253
|
+
|
|
243
254
|
## Render
|
|
244
255
|
|
|
245
256
|
```tsx mdx:preview
|
|
@@ -269,13 +280,13 @@ export default function Demo() {
|
|
|
269
280
|
'--w-rjv-border-left-width': '0',
|
|
270
281
|
}}
|
|
271
282
|
components={{
|
|
272
|
-
braces: () =>
|
|
273
|
-
ellipsis: () =>
|
|
274
|
-
objectKey: ({ value, ...props}) => {
|
|
275
|
-
if (
|
|
283
|
+
braces: () => <span />,
|
|
284
|
+
ellipsis: () => <React.Fragment />,
|
|
285
|
+
objectKey: ({ value, keyName, parentName, ...props}) => {
|
|
286
|
+
if (keyName === 'integer' && typeof value === 'number' && value > 40) {
|
|
276
287
|
return <del {...props} />
|
|
277
288
|
}
|
|
278
|
-
return <span {...props}
|
|
289
|
+
return <span {...props} />
|
|
279
290
|
}
|
|
280
291
|
}}
|
|
281
292
|
/>
|
|
@@ -295,7 +306,7 @@ const object = {
|
|
|
295
306
|
integer: 42,
|
|
296
307
|
}
|
|
297
308
|
|
|
298
|
-
function value({ type, children, ...props }) {
|
|
309
|
+
function value({ type, children, keyName, visible, ...props }) {
|
|
299
310
|
if (type === 'string' && /\.(jpg)$/.test(children)) {
|
|
300
311
|
return (
|
|
301
312
|
<span {...props}>
|
|
@@ -322,13 +333,117 @@ export default function Demo() {
|
|
|
322
333
|
}
|
|
323
334
|
```
|
|
324
335
|
|
|
336
|
+
**Support for the URL(opens in a new tab) API.**
|
|
337
|
+
|
|
338
|
+
```tsx mdx:preview
|
|
339
|
+
import React from 'react';
|
|
340
|
+
import JsonView from '@uiw/react-json-view';
|
|
341
|
+
|
|
342
|
+
export default function Demo() {
|
|
343
|
+
return (
|
|
344
|
+
<JsonView
|
|
345
|
+
value={{
|
|
346
|
+
url: new URL('https://example.com?t=12'),
|
|
347
|
+
urlStr: "https://example.com",
|
|
348
|
+
github: "https://example.com",
|
|
349
|
+
}}
|
|
350
|
+
style={{
|
|
351
|
+
'--w-rjv-background-color': '#ffffff',
|
|
352
|
+
}}
|
|
353
|
+
/>
|
|
354
|
+
)
|
|
355
|
+
}
|
|
356
|
+
```
|
|
357
|
+
|
|
358
|
+
```tsx mdx:preview
|
|
359
|
+
import React from 'react';
|
|
360
|
+
import JsonView from '@uiw/react-json-view';
|
|
361
|
+
|
|
362
|
+
function value({ type, children, visible, keyName, value, ...props }) {
|
|
363
|
+
if (value instanceof URL) {
|
|
364
|
+
return (
|
|
365
|
+
<span {...props}>
|
|
366
|
+
<a href={value.href} target="_blank" rel="noopener noreferrer">
|
|
367
|
+
{children}
|
|
368
|
+
</a>
|
|
369
|
+
Open URL
|
|
370
|
+
{visible && <del>Button</del>}
|
|
371
|
+
</span>
|
|
372
|
+
);
|
|
373
|
+
}
|
|
374
|
+
}
|
|
375
|
+
|
|
376
|
+
export default function Demo() {
|
|
377
|
+
return (
|
|
378
|
+
<JsonView
|
|
379
|
+
value={{
|
|
380
|
+
url: new URL('https://example.com?t=12'),
|
|
381
|
+
urlStr: "https://example.com",
|
|
382
|
+
github: "https://example.com",
|
|
383
|
+
}}
|
|
384
|
+
components={{ value }}
|
|
385
|
+
style={{
|
|
386
|
+
'--w-rjv-background-color': '#ffffff',
|
|
387
|
+
}}
|
|
388
|
+
/>
|
|
389
|
+
)
|
|
390
|
+
}
|
|
391
|
+
```
|
|
392
|
+
|
|
393
|
+
## Editor JSON
|
|
394
|
+
|
|
395
|
+
```tsx mdx:preview
|
|
396
|
+
import React from 'react';
|
|
397
|
+
import JsonViewEditor from '@uiw/react-json-view/editor';
|
|
398
|
+
|
|
399
|
+
const object = {
|
|
400
|
+
string: 'Lorem ipsum dolor sit amet',
|
|
401
|
+
integer: 42,
|
|
402
|
+
float: 114.514,
|
|
403
|
+
object: {
|
|
404
|
+
'first-child': true,
|
|
405
|
+
'second-child': false,
|
|
406
|
+
'last-child': null,
|
|
407
|
+
'child': {
|
|
408
|
+
'first': true,
|
|
409
|
+
'second': false,
|
|
410
|
+
'last': null,
|
|
411
|
+
},
|
|
412
|
+
},
|
|
413
|
+
nestedArray: [ [1, 2], [3, 4], { a: 1} ],
|
|
414
|
+
}
|
|
415
|
+
|
|
416
|
+
const ObjectKey = ({ value, keyName, parentName, ...reset }) => {
|
|
417
|
+
if (keyName === 'integer' && typeof value === 'number' && value > 40) {
|
|
418
|
+
return <del {...reset} />
|
|
419
|
+
}
|
|
420
|
+
return <span {...reset} />
|
|
421
|
+
};
|
|
422
|
+
|
|
423
|
+
export default function Demo() {
|
|
424
|
+
return (
|
|
425
|
+
<JsonViewEditor
|
|
426
|
+
value={object}
|
|
427
|
+
keyName="root"
|
|
428
|
+
style={{
|
|
429
|
+
'--w-rjv-background-color': '#ffffff',
|
|
430
|
+
}}
|
|
431
|
+
onEdit={(opts) => {
|
|
432
|
+
console.log('opts:', opts)
|
|
433
|
+
}}
|
|
434
|
+
components={{
|
|
435
|
+
objectKey: ObjectKey
|
|
436
|
+
}}
|
|
437
|
+
/>
|
|
438
|
+
);
|
|
439
|
+
}
|
|
440
|
+
```
|
|
441
|
+
|
|
325
442
|
## Highlight Updates
|
|
326
443
|
|
|
327
444
|
```tsx mdx:preview
|
|
328
445
|
import React, { useState, useEffect } from 'react';
|
|
329
446
|
import JsonView from '@uiw/react-json-view';
|
|
330
|
-
import { TriangleArrow } from '@uiw/react-json-view/triangle-arrow';
|
|
331
|
-
import { TriangleSolidArrow } from '@uiw/react-json-view/triangle-solid-arrow';
|
|
332
447
|
|
|
333
448
|
const object = {
|
|
334
449
|
string: 'Lorem ipsum dolor sit amet',
|
|
@@ -469,6 +584,8 @@ export default function Demo() {
|
|
|
469
584
|
|
|
470
585
|
## Props
|
|
471
586
|
|
|
587
|
+
### JsonView Props
|
|
588
|
+
|
|
472
589
|
```ts
|
|
473
590
|
import React from 'react';
|
|
474
591
|
import { MetaProps, SemicolonProps, EllipsisProps, ValueViewProps } from '@uiw/react-json-view';
|
|
@@ -516,6 +633,26 @@ declare const JsonView: React.ForwardRefExoticComponent<Omit<JsonViewProps<objec
|
|
|
516
633
|
export default JsonView;
|
|
517
634
|
```
|
|
518
635
|
|
|
636
|
+
### JsonView Editor Props
|
|
637
|
+
|
|
638
|
+
```ts
|
|
639
|
+
import { JsonViewProps } from '@uiw/react-json-view';
|
|
640
|
+
export interface JsonViewEditorProps<T extends object> extends JsonViewProps<T> {
|
|
641
|
+
/** Callback when value edit functionality */
|
|
642
|
+
onEdit?: (option: {
|
|
643
|
+
value: unknown;
|
|
644
|
+
oldValue: unknown;
|
|
645
|
+
keyName?: string | number;
|
|
646
|
+
parentName?: string | number;
|
|
647
|
+
type?: 'value' | 'key';
|
|
648
|
+
}) => void;
|
|
649
|
+
/** Whether enable edit feature. @default true */
|
|
650
|
+
editable?: boolean;
|
|
651
|
+
}
|
|
652
|
+
declare const JsonViewEditor: import("react").ForwardRefExoticComponent<Omit<JsonViewEditorProps<object>, "ref"> & import("react").RefAttributes<HTMLDivElement>>;
|
|
653
|
+
export default JsonViewEditor;
|
|
654
|
+
```
|
|
655
|
+
|
|
519
656
|
## Size and dependencies
|
|
520
657
|
|
|
521
658
|
Here is the size benchmark (using [bundlephobia.com](https://bundlephobia.com)) against similar React libraries (found by [`npmjs.com/search`](https://www.npmjs.com/search?q=react%20json&ranking=popularity)):
|
|
@@ -0,0 +1,32 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
|
|
3
|
+
var _interopRequireDefault = require("@babel/runtime/helpers/interopRequireDefault")["default"];
|
|
4
|
+
Object.defineProperty(exports, "__esModule", {
|
|
5
|
+
value: true
|
|
6
|
+
});
|
|
7
|
+
exports.Ellipsis = void 0;
|
|
8
|
+
var _objectSpread2 = _interopRequireDefault(require("@babel/runtime/helpers/objectSpread2"));
|
|
9
|
+
var _objectWithoutProperties2 = _interopRequireDefault(require("@babel/runtime/helpers/objectWithoutProperties"));
|
|
10
|
+
var _jsxRuntime = require("react/jsx-runtime");
|
|
11
|
+
var _excluded = ["style", "render"];
|
|
12
|
+
var Ellipsis = function Ellipsis(_ref) {
|
|
13
|
+
var style = _ref.style,
|
|
14
|
+
render = _ref.render,
|
|
15
|
+
props = (0, _objectWithoutProperties2["default"])(_ref, _excluded);
|
|
16
|
+
var styl = (0, _objectSpread2["default"])({
|
|
17
|
+
cursor: 'pointer'
|
|
18
|
+
}, style);
|
|
19
|
+
var className = "w-rjv-ellipsis ".concat(props.className || '');
|
|
20
|
+
if (render) return render((0, _objectSpread2["default"])((0, _objectSpread2["default"])({
|
|
21
|
+
style: styl
|
|
22
|
+
}, props), {}, {
|
|
23
|
+
className: className
|
|
24
|
+
}));
|
|
25
|
+
return /*#__PURE__*/(0, _jsxRuntime.jsx)("span", (0, _objectSpread2["default"])((0, _objectSpread2["default"])({
|
|
26
|
+
className: className,
|
|
27
|
+
style: styl
|
|
28
|
+
}, props), {}, {
|
|
29
|
+
children: "..."
|
|
30
|
+
}));
|
|
31
|
+
};
|
|
32
|
+
exports.Ellipsis = Ellipsis;
|
|
@@ -0,0 +1,8 @@
|
|
|
1
|
+
/// <reference types="react" />
|
|
2
|
+
import { LabelProps } from '../value';
|
|
3
|
+
export interface MetaProps extends LabelProps {
|
|
4
|
+
isArray?: boolean;
|
|
5
|
+
start?: boolean;
|
|
6
|
+
render?: (props: Pick<MetaProps, 'start' | 'isArray' | 'className' | 'children'>) => JSX.Element;
|
|
7
|
+
}
|
|
8
|
+
export declare function Meta(props: MetaProps): JSX.Element;
|
|
@@ -0,0 +1,38 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
|
|
3
|
+
var _interopRequireDefault = require("@babel/runtime/helpers/interopRequireDefault")["default"];
|
|
4
|
+
Object.defineProperty(exports, "__esModule", {
|
|
5
|
+
value: true
|
|
6
|
+
});
|
|
7
|
+
exports.Meta = Meta;
|
|
8
|
+
var _objectSpread2 = _interopRequireDefault(require("@babel/runtime/helpers/objectSpread2"));
|
|
9
|
+
var _objectWithoutProperties2 = _interopRequireDefault(require("@babel/runtime/helpers/objectWithoutProperties"));
|
|
10
|
+
var _value = require("../value");
|
|
11
|
+
var _jsxRuntime = require("react/jsx-runtime");
|
|
12
|
+
var _excluded = ["isArray", "start", "className", "render"];
|
|
13
|
+
function Meta(props) {
|
|
14
|
+
var _props$isArray = props.isArray,
|
|
15
|
+
isArray = _props$isArray === void 0 ? false : _props$isArray,
|
|
16
|
+
_props$start = props.start,
|
|
17
|
+
start = _props$start === void 0 ? false : _props$start,
|
|
18
|
+
className = props.className,
|
|
19
|
+
render = props.render,
|
|
20
|
+
reset = (0, _objectWithoutProperties2["default"])(props, _excluded);
|
|
21
|
+
var mark = isArray ? '[]' : '{}';
|
|
22
|
+
var cls = "w-rjv-".concat(isArray ? 'brackets' : 'curlybraces', "-").concat(start ? 'start' : 'end', " ").concat(className || '');
|
|
23
|
+
var color = "var(--w-rjv-".concat(isArray ? 'brackets' : 'curlybraces', "-color, #236a7c)");
|
|
24
|
+
if (render) return render((0, _objectSpread2["default"])({
|
|
25
|
+
isArray: isArray,
|
|
26
|
+
className: cls,
|
|
27
|
+
style: {
|
|
28
|
+
color: color
|
|
29
|
+
},
|
|
30
|
+
children: start ? mark.charAt(0) : mark.charAt(1)
|
|
31
|
+
}, reset));
|
|
32
|
+
return /*#__PURE__*/(0, _jsxRuntime.jsx)(_value.Label, (0, _objectSpread2["default"])((0, _objectSpread2["default"])({
|
|
33
|
+
color: color,
|
|
34
|
+
className: cls
|
|
35
|
+
}, reset), {}, {
|
|
36
|
+
children: start ? mark.charAt(0) : mark.charAt(1)
|
|
37
|
+
}));
|
|
38
|
+
}
|
package/cjs/copied.js
CHANGED
|
@@ -45,6 +45,7 @@ function Copied(props) {
|
|
|
45
45
|
};
|
|
46
46
|
var defalutStyle = (0, _objectSpread2["default"])((0, _objectSpread2["default"])({}, style), {}, {
|
|
47
47
|
cursor: 'pointer',
|
|
48
|
+
verticalAlign: 'middle',
|
|
48
49
|
marginLeft: 5
|
|
49
50
|
});
|
|
50
51
|
var svgProps = (0, _objectSpread2["default"])({
|
|
@@ -58,19 +59,19 @@ function Copied(props) {
|
|
|
58
59
|
if (render) return render((0, _objectSpread2["default"])((0, _objectSpread2["default"])({}, props), svgProps));
|
|
59
60
|
if (copied) {
|
|
60
61
|
return /*#__PURE__*/(0, _jsxRuntime.jsx)("svg", (0, _objectSpread2["default"])((0, _objectSpread2["default"])({
|
|
61
|
-
viewBox: "0 0
|
|
62
|
+
viewBox: "0 0 32 36"
|
|
62
63
|
}, svgProps), {}, {
|
|
63
64
|
fill: "var(--w-rjv-copied-success-color, #28a745)",
|
|
64
65
|
children: /*#__PURE__*/(0, _jsxRuntime.jsx)("path", {
|
|
65
|
-
d: "M27.5,
|
|
66
|
+
d: "M27.5,33 L2.5,33 L2.5,12.5 L27.5,12.5 L27.5,15.2249049 C29.1403264,13.8627542 29.9736597,13.1778155 30,13.1700887 C30,11.9705278 30,10.0804982 30,7.5 C30,6.1 28.9,5 27.5,5 L20,5 C20,2.2 17.8,0 15,0 C12.2,0 10,2.2 10,5 L2.5,5 C1.1,5 0,6.1 0,7.5 L0,33 C0,34.4 1.1,36 2.5,36 L27.5,36 C28.9,36 30,34.4 30,33 L30,26.1114493 L27.5,28.4926435 L27.5,33 Z M7.5,7.5 L10,7.5 C10,7.5 12.5,6.4 12.5,5 C12.5,3.6 13.6,2.5 15,2.5 C16.4,2.5 17.5,3.6 17.5,5 C17.5,6.4 18.8,7.5 20,7.5 L22.5,7.5 C22.5,7.5 25,8.6 25,10 L5,10 C5,8.5 6.1,7.5 7.5,7.5 Z M5,27.5 L10,27.5 L10,25 L5,25 L5,27.5 Z M28.5589286,16 L32,19.6 L21.0160714,30.5382252 L13.5303571,24.2571429 L17.1303571,20.6571429 L21.0160714,24.5428571 L28.5589286,16 Z M17.5,15 L5,15 L5,17.5 L17.5,17.5 L17.5,15 Z M10,20 L5,20 L5,22.5 L10,22.5 L10,20 Z"
|
|
66
67
|
})
|
|
67
68
|
}));
|
|
68
69
|
}
|
|
69
70
|
return /*#__PURE__*/(0, _jsxRuntime.jsx)("svg", (0, _objectSpread2["default"])((0, _objectSpread2["default"])({
|
|
70
|
-
viewBox: "0 0
|
|
71
|
+
viewBox: "0 0 32 36"
|
|
71
72
|
}, svgProps), {}, {
|
|
72
73
|
children: /*#__PURE__*/(0, _jsxRuntime.jsx)("path", {
|
|
73
|
-
d: "M27.5,
|
|
74
|
+
d: "M27.5,33 L2.5,33 L2.5,12.5 L27.5,12.5 L27.5,20 L30,20 L30,7.5 C30,6.1 28.9,5 27.5,5 L20,5 C20,2.2 17.8,0 15,0 C12.2,0 10,2.2 10,5 L2.5,5 C1.1,5 0,6.1 0,7.5 L0,33 C0,34.4 1.1,36 2.5,36 L27.5,36 C28.9,36 30,34.4 30,33 L30,29 L27.5,29 L27.5,33 Z M7.5,7.5 L10,7.5 C10,7.5 12.5,6.4 12.5,5 C12.5,3.6 13.6,2.5 15,2.5 C16.4,2.5 17.5,3.6 17.5,5 C17.5,6.4 18.8,7.5 20,7.5 L22.5,7.5 C22.5,7.5 25,8.6 25,10 L5,10 C5,8.5 6.1,7.5 7.5,7.5 Z M5,27.5 L10,27.5 L10,25 L5,25 L5,27.5 Z M22.5,21.5 L22.5,16.5 L12.5,24 L22.5,31.5 L22.5,26.5 L32,26.5 L32,21.5 L22.5,21.5 Z M17.5,15 L5,15 L5,17.5 L17.5,17.5 L17.5,15 Z M10,20 L5,20 L5,22.5 L10,22.5 L10,20 Z"
|
|
74
75
|
})
|
|
75
76
|
}));
|
|
76
77
|
}
|
|
@@ -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.EditIcon = void 0;
|
|
8
|
+
var _objectSpread2 = _interopRequireDefault(require("@babel/runtime/helpers/objectSpread2"));
|
|
9
|
+
var _jsxRuntime = require("react/jsx-runtime");
|
|
10
|
+
var EditIcon = function EditIcon(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 26 26",
|
|
22
|
+
fill: "var(--w-rjv-edit-color, currentColor)"
|
|
23
|
+
}, props), {}, {
|
|
24
|
+
style: (0, _objectSpread2["default"])((0, _objectSpread2["default"])({}, style), defaultStyle),
|
|
25
|
+
children: /*#__PURE__*/(0, _jsxRuntime.jsx)("path", {
|
|
26
|
+
d: "M18,0 L7.74666667,0 C2.89333333,0 0,2.89333333 0,7.74666667 L0,17.9066667 C0,22.7733333 2.89333333,26 7.74666667,26 L18,26 C22.8533333,26 26.0001422,22.7733333 26.0001422,17.92 L26.0001422,7.74666667 C26.0133333,2.89333333 22.8533333,0 18,0 Z M11.9333333,20.68 C11.5466667,21.0666667 10.8133333,21.44 10.28,21.52 L7,21.9866667 C6.88,22 6.76,22.0133333 6.64,22.0133333 C6.09333333,22.0133333 5.58666667,21.8266667 5.22666667,21.4666667 C4.78666667,21.0266667 4.6,20.3866667 4.70666667,19.68 L5.17333333,16.4 C5.25333333,15.8533333 5.61333333,15.1333333 6.01333333,14.7466667 L11.96,8.8 C12.1719034,9.3972484 12.4397602,9.97314063 12.76,10.52 C12.8933333,10.7466667 13.04,10.96 13.16,11.12 C13.3066667,11.3466667 13.48,11.56 13.5866667,11.68 C13.6533333,11.7733333 13.7066667,11.84 13.7333333,11.8666667 C14.0666667,12.2666667 14.4533333,12.64 14.7866667,12.92 C14.88,13.0133333 14.9333333,13.0666667 14.96,13.08 C15.16,13.24 15.36,13.4 15.5333333,13.52 C15.7466667,13.68 15.96,13.8266667 16.1866667,13.9466667 C16.4533333,14.1066667 16.7466667,14.2533333 17.04,14.4 C17.3466667,14.5333333 17.6266667,14.6533333 17.9066667,14.7466667 L11.9333333,20.68 L11.9333333,20.68 Z M20.4933333,12.12 L19.2666667,13.36 C19.1887174,13.4373865 19.0831716,13.4805643 18.9733333,13.4800055 C18.9333333,13.4800055 18.88,13.4800055 18.8533333,13.4666667 C16.1309823,12.6775025 14.0024975,10.5490177 13.2133333,7.82666667 C13.1733333,7.68 13.2133333,7.52 13.32,7.42666667 L14.56,6.18666667 C16.5866667,4.16 18.52,4.2 20.5066667,6.18666667 C21.52,7.2 22.0133333,8.17333333 22.0133333,9.18666667 C22,10.1466667 21.5066667,11.1066667 20.4933333,12.12 L20.4933333,12.12 Z"
|
|
27
|
+
})
|
|
28
|
+
}));
|
|
29
|
+
};
|
|
30
|
+
exports.EditIcon = EditIcon;
|
|
@@ -0,0 +1,16 @@
|
|
|
1
|
+
/// <reference types="react" />
|
|
2
|
+
import { JsonViewProps } from '../';
|
|
3
|
+
export interface JsonViewEditorProps<T extends object> extends JsonViewProps<T> {
|
|
4
|
+
/** Callback when value edit functionality */
|
|
5
|
+
onEdit?: (option: {
|
|
6
|
+
value: unknown;
|
|
7
|
+
oldValue: unknown;
|
|
8
|
+
keyName?: string | number;
|
|
9
|
+
parentName?: string | number;
|
|
10
|
+
type?: 'value' | 'key';
|
|
11
|
+
}) => void;
|
|
12
|
+
/** Whether enable edit feature. @default true */
|
|
13
|
+
editable?: boolean;
|
|
14
|
+
}
|
|
15
|
+
declare const JsonViewEditor: import("react").ForwardRefExoticComponent<Omit<JsonViewEditorProps<object>, "ref"> & import("react").RefAttributes<HTMLDivElement>>;
|
|
16
|
+
export default JsonViewEditor;
|
|
@@ -0,0 +1,48 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
|
|
3
|
+
var _interopRequireDefault = require("@babel/runtime/helpers/interopRequireDefault")["default"];
|
|
4
|
+
Object.defineProperty(exports, "__esModule", {
|
|
5
|
+
value: true
|
|
6
|
+
});
|
|
7
|
+
exports["default"] = void 0;
|
|
8
|
+
var _objectSpread2 = _interopRequireDefault(require("@babel/runtime/helpers/objectSpread2"));
|
|
9
|
+
var _objectWithoutProperties2 = _interopRequireDefault(require("@babel/runtime/helpers/objectWithoutProperties"));
|
|
10
|
+
var _react = require("react");
|
|
11
|
+
var _ = _interopRequireDefault(require("../"));
|
|
12
|
+
var _objectKey = require("./objectKey");
|
|
13
|
+
var _value = require("./value");
|
|
14
|
+
var _jsxRuntime = require("react/jsx-runtime");
|
|
15
|
+
var _excluded = ["onEdit", "components", "editable", "displayDataTypes"];
|
|
16
|
+
var JsonViewEditor = /*#__PURE__*/(0, _react.forwardRef)(function (props, ref) {
|
|
17
|
+
var onEdit = props.onEdit,
|
|
18
|
+
components = props.components,
|
|
19
|
+
_props$editable = props.editable,
|
|
20
|
+
editable = _props$editable === void 0 ? true : _props$editable,
|
|
21
|
+
_props$displayDataTyp = props.displayDataTypes,
|
|
22
|
+
displayDataTypes = _props$displayDataTyp === void 0 ? true : _props$displayDataTyp,
|
|
23
|
+
reset = (0, _objectWithoutProperties2["default"])(props, _excluded);
|
|
24
|
+
var comps = (0, _objectSpread2["default"])((0, _objectSpread2["default"])({}, components), {}, {
|
|
25
|
+
objectKey: function objectKey(reprops) {
|
|
26
|
+
return /*#__PURE__*/(0, _jsxRuntime.jsx)(_objectKey.ObjectKey, (0, _objectSpread2["default"])((0, _objectSpread2["default"])({}, reprops), {}, {
|
|
27
|
+
editableValue: editable,
|
|
28
|
+
onEdit: onEdit,
|
|
29
|
+
render: components === null || components === void 0 ? void 0 : components.objectKey
|
|
30
|
+
}));
|
|
31
|
+
},
|
|
32
|
+
value: function value(reprops) {
|
|
33
|
+
return /*#__PURE__*/(0, _jsxRuntime.jsx)(_value.ReValue, (0, _objectSpread2["default"])((0, _objectSpread2["default"])({}, reprops), {}, {
|
|
34
|
+
editableValue: editable,
|
|
35
|
+
displayDataTypes: displayDataTypes,
|
|
36
|
+
onEdit: onEdit
|
|
37
|
+
}));
|
|
38
|
+
}
|
|
39
|
+
});
|
|
40
|
+
return /*#__PURE__*/(0, _jsxRuntime.jsx)(_["default"], (0, _objectSpread2["default"])((0, _objectSpread2["default"])({}, reset), {}, {
|
|
41
|
+
displayDataTypes: false,
|
|
42
|
+
components: comps,
|
|
43
|
+
ref: ref
|
|
44
|
+
}));
|
|
45
|
+
});
|
|
46
|
+
var _default = JsonViewEditor;
|
|
47
|
+
exports["default"] = _default;
|
|
48
|
+
module.exports = exports.default;
|
|
@@ -0,0 +1,11 @@
|
|
|
1
|
+
import { FC } from 'react';
|
|
2
|
+
import { SemicolonProps } from '../semicolon';
|
|
3
|
+
import { JsonViewEditorProps } from './';
|
|
4
|
+
export interface ObjectKeyProps<T extends object> extends SemicolonProps {
|
|
5
|
+
onEdit?: JsonViewEditorProps<T>['onEdit'];
|
|
6
|
+
render?: (props: SemicolonProps & {
|
|
7
|
+
ref?: React.RefObject<HTMLElement>;
|
|
8
|
+
}) => React.ReactNode;
|
|
9
|
+
editableValue?: boolean;
|
|
10
|
+
}
|
|
11
|
+
export declare const ObjectKey: FC<ObjectKeyProps<object>>;
|
|
@@ -0,0 +1,138 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
|
|
3
|
+
var _interopRequireDefault = require("@babel/runtime/helpers/interopRequireDefault")["default"];
|
|
4
|
+
Object.defineProperty(exports, "__esModule", {
|
|
5
|
+
value: true
|
|
6
|
+
});
|
|
7
|
+
exports.ObjectKey = void 0;
|
|
8
|
+
var _objectSpread2 = _interopRequireDefault(require("@babel/runtime/helpers/objectSpread2"));
|
|
9
|
+
var _slicedToArray2 = _interopRequireDefault(require("@babel/runtime/helpers/slicedToArray"));
|
|
10
|
+
var _objectWithoutProperties2 = _interopRequireDefault(require("@babel/runtime/helpers/objectWithoutProperties"));
|
|
11
|
+
var _react = require("react");
|
|
12
|
+
var _semicolon = require("../semicolon");
|
|
13
|
+
var _value = require("../value");
|
|
14
|
+
var _jsxRuntime = require("react/jsx-runtime");
|
|
15
|
+
var _excluded = ["className", "value", "keyName", "parentName", "quotes", "label", "editableValue", "onEdit", "highlightUpdates", "render"];
|
|
16
|
+
var ObjectKey = function ObjectKey(props) {
|
|
17
|
+
var className = props.className,
|
|
18
|
+
value = props.value,
|
|
19
|
+
keyName = props.keyName,
|
|
20
|
+
parentName = props.parentName,
|
|
21
|
+
quotes = props.quotes,
|
|
22
|
+
label = props.label,
|
|
23
|
+
editableValue = props.editableValue,
|
|
24
|
+
onEdit = props.onEdit,
|
|
25
|
+
_props$highlightUpdat = props.highlightUpdates,
|
|
26
|
+
highlightUpdates = _props$highlightUpdat === void 0 ? true : _props$highlightUpdat,
|
|
27
|
+
render = props.render,
|
|
28
|
+
reset = (0, _objectWithoutProperties2["default"])(props, _excluded);
|
|
29
|
+
var _useState = (0, _react.useState)(false),
|
|
30
|
+
_useState2 = (0, _slicedToArray2["default"])(_useState, 2),
|
|
31
|
+
editable = _useState2[0],
|
|
32
|
+
setEditable = _useState2[1];
|
|
33
|
+
var _useState3 = (0, _react.useState)(label),
|
|
34
|
+
_useState4 = (0, _slicedToArray2["default"])(_useState3, 2),
|
|
35
|
+
curentLabel = _useState4[0],
|
|
36
|
+
setCurentLabel = _useState4[1];
|
|
37
|
+
(0, _react.useEffect)(function () {
|
|
38
|
+
return setCurentLabel(label);
|
|
39
|
+
}, [label]);
|
|
40
|
+
var $edit = (0, _react.useRef)(null);
|
|
41
|
+
(0, _semicolon.useHighlight)({
|
|
42
|
+
value: value,
|
|
43
|
+
highlightUpdates: highlightUpdates,
|
|
44
|
+
highlightContainer: $edit
|
|
45
|
+
});
|
|
46
|
+
var click = function click(evn) {
|
|
47
|
+
evn.stopPropagation();
|
|
48
|
+
if (!editableValue) return;
|
|
49
|
+
if (typeof keyName !== 'string') return;
|
|
50
|
+
if (editable) return;
|
|
51
|
+
setEditable(true);
|
|
52
|
+
if ($edit.current) {
|
|
53
|
+
var _$edit$current;
|
|
54
|
+
$edit.current.contentEditable = 'true';
|
|
55
|
+
(_$edit$current = $edit.current) === null || _$edit$current === void 0 ? void 0 : _$edit$current.focus();
|
|
56
|
+
}
|
|
57
|
+
};
|
|
58
|
+
var blur = function blur() {
|
|
59
|
+
setEditable(false);
|
|
60
|
+
if ($edit.current) {
|
|
61
|
+
var _$edit$current2;
|
|
62
|
+
$edit.current.contentEditable = 'false';
|
|
63
|
+
(_$edit$current2 = $edit.current) === null || _$edit$current2 === void 0 ? void 0 : _$edit$current2.focus();
|
|
64
|
+
setCurentLabel($edit.current.innerText);
|
|
65
|
+
onEdit && onEdit({
|
|
66
|
+
value: $edit.current.innerText,
|
|
67
|
+
oldValue: curentLabel,
|
|
68
|
+
keyName: keyName,
|
|
69
|
+
parentName: parentName,
|
|
70
|
+
type: 'key'
|
|
71
|
+
});
|
|
72
|
+
}
|
|
73
|
+
};
|
|
74
|
+
var focus = function focus() {
|
|
75
|
+
if ($edit.current) {
|
|
76
|
+
var _$edit$current3;
|
|
77
|
+
$edit.current.contentEditable = 'true';
|
|
78
|
+
(_$edit$current3 = $edit.current) === null || _$edit$current3 === void 0 ? void 0 : _$edit$current3.focus();
|
|
79
|
+
}
|
|
80
|
+
};
|
|
81
|
+
var keyDown = function keyDown(evn) {
|
|
82
|
+
if (evn.key === 'Enter') {
|
|
83
|
+
evn.stopPropagation();
|
|
84
|
+
evn.preventDefault();
|
|
85
|
+
$edit.current.contentEditable = 'false';
|
|
86
|
+
}
|
|
87
|
+
};
|
|
88
|
+
(0, _react.useEffect)(function () {
|
|
89
|
+
if ($edit.current) {
|
|
90
|
+
$edit.current.addEventListener("paste", function (e) {
|
|
91
|
+
e.preventDefault();
|
|
92
|
+
// @ts-ignore
|
|
93
|
+
var text = e.clipboardData.getData("text/plain");
|
|
94
|
+
document.execCommand("insertHTML", false, text);
|
|
95
|
+
});
|
|
96
|
+
}
|
|
97
|
+
}, [$edit]);
|
|
98
|
+
var style = {
|
|
99
|
+
minWidth: 34,
|
|
100
|
+
minHeight: 18,
|
|
101
|
+
paddingInline: 3,
|
|
102
|
+
display: 'inline-block'
|
|
103
|
+
};
|
|
104
|
+
var content = typeof keyName === 'string' ? "".concat(quotes).concat(curentLabel).concat(quotes) : curentLabel;
|
|
105
|
+
var spanProps = {
|
|
106
|
+
onClick: click,
|
|
107
|
+
onFocus: focus,
|
|
108
|
+
onBlur: blur,
|
|
109
|
+
onKeyDown: keyDown,
|
|
110
|
+
style: editable ? style : {},
|
|
111
|
+
contentEditable: editable,
|
|
112
|
+
spellCheck: false,
|
|
113
|
+
autoFocus: editable,
|
|
114
|
+
suppressContentEditableWarning: true,
|
|
115
|
+
children: editable ? curentLabel : content
|
|
116
|
+
};
|
|
117
|
+
if (render) {
|
|
118
|
+
spanProps.value = value;
|
|
119
|
+
spanProps.keyName = keyName;
|
|
120
|
+
spanProps.parentName = parentName;
|
|
121
|
+
return render((0, _objectSpread2["default"])((0, _objectSpread2["default"])((0, _objectSpread2["default"])({
|
|
122
|
+
className: className
|
|
123
|
+
}, reset), spanProps), {}, {
|
|
124
|
+
parentName: parentName,
|
|
125
|
+
label: curentLabel,
|
|
126
|
+
children: editable ? curentLabel : content,
|
|
127
|
+
ref: $edit
|
|
128
|
+
}));
|
|
129
|
+
}
|
|
130
|
+
return /*#__PURE__*/(0, _jsxRuntime.jsx)(_value.Label, (0, _objectSpread2["default"])((0, _objectSpread2["default"])((0, _objectSpread2["default"])({
|
|
131
|
+
className: className
|
|
132
|
+
}, reset), {}, {
|
|
133
|
+
autoFocus: editable
|
|
134
|
+
}, spanProps), {}, {
|
|
135
|
+
ref: $edit
|
|
136
|
+
}));
|
|
137
|
+
};
|
|
138
|
+
exports.ObjectKey = ObjectKey;
|
|
@@ -0,0 +1,14 @@
|
|
|
1
|
+
/// <reference types="react" />
|
|
2
|
+
import type { TypeProps } from '../value';
|
|
3
|
+
import { JsonViewEditorProps } from './';
|
|
4
|
+
export interface ReValueProps<T extends object> extends React.HTMLAttributes<HTMLSpanElement> {
|
|
5
|
+
onEdit?: JsonViewEditorProps<T>['onEdit'];
|
|
6
|
+
quotes?: JsonViewEditorProps<T>['quotes'];
|
|
7
|
+
keyName?: JsonViewEditorProps<T>['keyName'];
|
|
8
|
+
type: TypeProps['type'];
|
|
9
|
+
value?: unknown;
|
|
10
|
+
visible?: boolean;
|
|
11
|
+
editableValue?: boolean;
|
|
12
|
+
displayDataTypes?: boolean;
|
|
13
|
+
}
|
|
14
|
+
export declare function ReValue<T extends object>(props: ReValueProps<T>): import("react/jsx-runtime").JSX.Element;
|