@uiw/react-json-view 1.1.1 → 1.2.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 CHANGED
@@ -368,34 +368,25 @@ const object = {
368
368
  }
369
369
 
370
370
  const Arrow = (props) => {
371
- const { style, 'data-expand': expand, ...reset } = props;
372
- const defaultStyle = {
373
- cursor: 'pointer',
374
- height: '1em',
375
- width: '1em',
376
- };
371
+ const { style, 'data-expand': expand, ...reset } = props;
372
+ const svgProps = {
373
+ style: { cursor: 'pointer', height: '1em', width: '1em' },
374
+ viewBox: '0 0 24 24',
375
+ fill: 'var(--w-rjv-arrow-color, currentColor)',
376
+ ...reset
377
+ }
377
378
  if (!expand) {
378
379
  return (
379
- <svg
380
- viewBox="0 0 24 24"
381
- fill="var(--w-rjv-arrow-color, currentColor)"
382
- style={defaultStyle}
383
- {...reset}
384
- >
380
+ <svg {...svgProps}>
385
381
  <path d="M12,20C7.59,20 4,16.41 4,12C4,7.59 7.59,4 12,4C16.41,4 20,7.59 20,12C20,16.41 16.41,20 12,20M12,2A10,10 0 0,0 2,12A10,10 0 0,0 12,22A10,10 0 0,0 22,12A10,10 0 0,0 12,2M13,7H11V11H7V13H11V17H13V13H17V11H13V7Z" />
386
382
  </svg>
387
- )
383
+ );
388
384
  }
389
385
  return (
390
- <svg
391
- viewBox="0 0 24 24"
392
- fill="var(--w-rjv-arrow-color, currentColor)"
393
- style={defaultStyle}
394
- {...reset}
395
- >
386
+ <svg {...svgProps}>
396
387
  <path d="M12,20C7.59,20 4,16.41 4,12C4,7.59 7.59,4 12,4C16.41,4 20,7.59 20,12C20,16.41 16.41,20 12,20M12,2A10,10 0 0,0 2,12A10,10 0 0,0 12,22A10,10 0 0,0 22,12A10,10 0 0,0 12,2M7,13H17V11H7" />
397
388
  </svg>
398
- )
389
+ );
399
390
  }
400
391
 
401
392
  export default function Demo() {
package/cjs/copied.d.ts CHANGED
@@ -2,6 +2,7 @@
2
2
  export interface CopiedProps<T = object> extends React.SVGProps<SVGSVGElement> {
3
3
  show?: boolean;
4
4
  text?: T;
5
+ onCopied?: (text: string, obj: T) => void;
5
6
  render?: (props: Omit<CopiedProps<T>, 'render'>) => JSX.Element;
6
7
  }
7
8
  export declare function Copied<T>(props: CopiedProps<T>): JSX.Element | null;
package/cjs/index.d.ts CHANGED
@@ -28,6 +28,8 @@ export interface JsonViewProps<T extends object> extends React.DetailedHTMLProps
28
28
  keyid: string;
29
29
  keyName?: string | number;
30
30
  }) => void;
31
+ /** Fires event when you copy */
32
+ onCopied?: CopiedProps<T>['onCopied'];
31
33
  /** Redefine interface elements to re-render. */
32
34
  components?: {
33
35
  braces?: MetaProps['render'];
package/cjs/node.js CHANGED
@@ -21,7 +21,7 @@ var _jsxRuntime = require("react/jsx-runtime");
21
21
  var _excluded = ["isArray", "start", "className", "render"],
22
22
  _excluded2 = ["style", "render"],
23
23
  _excluded3 = ["children", "render", "color", "value", "className", "show", "quotes"],
24
- _excluded4 = ["value", "keyName", "displayDataTypes", "components", "displayObjectSize", "enableClipboard", "indentWidth", "collapsed", "level", "keyid", "quotes", "onExpand"];
24
+ _excluded4 = ["value", "keyName", "displayDataTypes", "components", "displayObjectSize", "enableClipboard", "indentWidth", "collapsed", "level", "keyid", "quotes", "onCopied", "onExpand"];
25
25
  function Meta(props) {
26
26
  var _props$isArray = props.isArray,
27
27
  isArray = _props$isArray === void 0 ? false : _props$isArray,
@@ -105,7 +105,7 @@ var CountInfo = function CountInfo(_ref3) {
105
105
  fontStyle: 'italic'
106
106
  },
107
107
  color: "var(--w-rjv-info-color, #0000004d)",
108
- className: "object-size",
108
+ className: "w-rjv-object-size",
109
109
  children: children
110
110
  });
111
111
  };
@@ -132,6 +132,7 @@ function RooNode(props) {
132
132
  keyid = _props$keyid === void 0 ? 'root' : _props$keyid,
133
133
  _props$quotes = props.quotes,
134
134
  quotes = _props$quotes === void 0 ? '"' : _props$quotes,
135
+ onCopied = props.onCopied,
135
136
  onExpand = props.onExpand,
136
137
  reset = (0, _objectWithoutProperties2["default"])(props, _excluded4);
137
138
  var isArray = Array.isArray(value);
@@ -160,6 +161,7 @@ function RooNode(props) {
160
161
  displayDataTypes: displayDataTypes,
161
162
  displayObjectSize: displayObjectSize,
162
163
  enableClipboard: enableClipboard,
164
+ onCopied: onCopied,
163
165
  onExpand: onExpand,
164
166
  collapsed: collapsed,
165
167
  quotes: quotes,
@@ -173,13 +175,16 @@ function RooNode(props) {
173
175
  displayObjectSize: displayObjectSize,
174
176
  enableClipboard: enableClipboard,
175
177
  indentWidth: indentWidth,
178
+ renderBraces: components.braces,
176
179
  renderValue: components.value
177
180
  };
178
181
  var arrowView = components.arrow ? /*#__PURE__*/(0, _react.cloneElement)(components.arrow, {
179
182
  style: arrowStyle,
180
- 'data-expand': expand
183
+ 'data-expand': expand,
184
+ className: "w-rjv-arrow"
181
185
  }) : /*#__PURE__*/(0, _jsxRuntime.jsx)(_TriangleArrow.TriangleArrow, {
182
- style: arrowStyle
186
+ style: arrowStyle,
187
+ className: "w-rjv-arrow"
183
188
  });
184
189
  var _useState = (0, _react.useState)(false),
185
190
  _useState2 = (0, _slicedToArray2["default"])(_useState, 2),
@@ -188,6 +193,7 @@ function RooNode(props) {
188
193
  var tools = enableClipboard ? /*#__PURE__*/(0, _jsxRuntime.jsx)(_copied.Copied, {
189
194
  show: showTools,
190
195
  text: value,
196
+ onCopied: onCopied,
191
197
  render: components.copied
192
198
  }) : undefined;
193
199
  var eventProps = {};
@@ -199,7 +205,9 @@ function RooNode(props) {
199
205
  return setShowTools(false);
200
206
  };
201
207
  }
202
- return /*#__PURE__*/(0, _jsxRuntime.jsxs)("div", (0, _objectSpread2["default"])((0, _objectSpread2["default"])((0, _objectSpread2["default"])({}, reset), eventProps), {}, {
208
+ return /*#__PURE__*/(0, _jsxRuntime.jsxs)("div", (0, _objectSpread2["default"])((0, _objectSpread2["default"])((0, _objectSpread2["default"])({}, reset), {}, {
209
+ className: "w-rjv-inner"
210
+ }, eventProps), {}, {
203
211
  children: [/*#__PURE__*/(0, _jsxRuntime.jsxs)(_value.Line, {
204
212
  style: {
205
213
  display: 'inline-flex',
@@ -228,6 +236,7 @@ function RooNode(props) {
228
236
  children: [nameKeys.length, " items"]
229
237
  }), tools]
230
238
  }), expand && /*#__PURE__*/(0, _jsxRuntime.jsx)(_value.Line, {
239
+ className: "w-rjv-content",
231
240
  style: {
232
241
  borderLeft: 'var(--w-rjv-border-left-width, 1px) solid var(--w-rjv-line-color, #ebebeb)',
233
242
  marginLeft: 6
@@ -246,6 +255,7 @@ function RooNode(props) {
246
255
  if (Array.isArray(item) && !isEmpty) {
247
256
  var label = isArray ? idx : key;
248
257
  return /*#__PURE__*/(0, _jsxRuntime.jsx)(_value.Line, {
258
+ className: "w-rjv-wrap",
249
259
  children: /*#__PURE__*/(0, _jsxRuntime.jsx)(RooNode, (0, _objectSpread2["default"])({
250
260
  value: item,
251
261
  keyid: keyid + subkeyid + label,
@@ -255,6 +265,7 @@ function RooNode(props) {
255
265
  }
256
266
  if ((0, _typeof2["default"])(item) === 'object' && item && !(item instanceof Date) && !isEmpty) {
257
267
  return /*#__PURE__*/(0, _jsxRuntime.jsx)(_value.Line, {
268
+ className: "w-rjv-wrap",
258
269
  children: /*#__PURE__*/(0, _jsxRuntime.jsx)(RooNode, (0, _objectSpread2["default"])({
259
270
  keyid: keyid + subkeyid + key,
260
271
  value: item,
@@ -266,7 +277,6 @@ function RooNode(props) {
266
277
  return;
267
278
  }
268
279
  return /*#__PURE__*/(0, _jsxRuntime.jsx)(_value.ValueView, (0, _objectSpread2["default"])((0, _objectSpread2["default"])({}, valueViewProps), {}, {
269
- renderBraces: components.braces,
270
280
  renderKey: renderKey,
271
281
  keyName: key,
272
282
  value: item
package/cjs/value.js CHANGED
@@ -142,7 +142,12 @@ function ValueView(props) {
142
142
  show: showTools,
143
143
  text: value
144
144
  }) : undefined;
145
- var eventProps = {};
145
+ var eventProps = {
146
+ className: 'w-rjv-line',
147
+ style: {
148
+ paddingLeft: indentWidth
149
+ }
150
+ };
146
151
  if (enableClipboard) {
147
152
  eventProps.onMouseEnter = function () {
148
153
  return setShowTools(true);
@@ -167,11 +172,7 @@ function ValueView(props) {
167
172
  className: "w-rjv-value",
168
173
  children: content
169
174
  });
170
- return /*#__PURE__*/(0, _jsxRuntime.jsx)(Line, (0, _objectSpread2["default"])((0, _objectSpread2["default"])({
171
- style: {
172
- paddingLeft: indentWidth
173
- }
174
- }, eventProps), {}, {
175
+ return /*#__PURE__*/(0, _jsxRuntime.jsx)(Line, (0, _objectSpread2["default"])((0, _objectSpread2["default"])({}, eventProps), {}, {
175
176
  children: /*#__PURE__*/(0, _jsxRuntime.jsxs)(Label, (0, _objectSpread2["default"])((0, _objectSpread2["default"])({}, reset), {}, {
176
177
  children: [renderKey, /*#__PURE__*/(0, _jsxRuntime.jsx)(Colon, {}), typeView, valueView, tools]
177
178
  }))
@@ -190,11 +191,7 @@ function ValueView(props) {
190
191
  children: [length, " items"]
191
192
  })]
192
193
  });
193
- return /*#__PURE__*/(0, _jsxRuntime.jsx)(Line, (0, _objectSpread2["default"])((0, _objectSpread2["default"])({
194
- style: {
195
- paddingLeft: indentWidth
196
- }
197
- }, eventProps), {}, {
194
+ return /*#__PURE__*/(0, _jsxRuntime.jsx)(Line, (0, _objectSpread2["default"])((0, _objectSpread2["default"])({}, eventProps), {}, {
198
195
  children: /*#__PURE__*/(0, _jsxRuntime.jsxs)(Label, (0, _objectSpread2["default"])((0, _objectSpread2["default"])({}, reset), {}, {
199
196
  children: [renderKey, /*#__PURE__*/(0, _jsxRuntime.jsx)(Colon, {}), typeView, empty, tools]
200
197
  }))
package/esm/copied.d.ts CHANGED
@@ -2,6 +2,7 @@
2
2
  export interface CopiedProps<T = object> extends React.SVGProps<SVGSVGElement> {
3
3
  show?: boolean;
4
4
  text?: T;
5
+ onCopied?: (text: string, obj: T) => void;
5
6
  render?: (props: Omit<CopiedProps<T>, 'render'>) => JSX.Element;
6
7
  }
7
8
  export declare function Copied<T>(props: CopiedProps<T>): JSX.Element | null;
package/esm/index.d.ts CHANGED
@@ -28,6 +28,8 @@ export interface JsonViewProps<T extends object> extends React.DetailedHTMLProps
28
28
  keyid: string;
29
29
  keyName?: string | number;
30
30
  }) => void;
31
+ /** Fires event when you copy */
32
+ onCopied?: CopiedProps<T>['onCopied'];
31
33
  /** Redefine interface elements to re-render. */
32
34
  components?: {
33
35
  braces?: MetaProps['render'];
package/esm/node.js CHANGED
@@ -3,7 +3,7 @@ import _objectWithoutPropertiesLoose from "@babel/runtime/helpers/objectWithoutP
3
3
  var _excluded = ["isArray", "start", "className", "render"],
4
4
  _excluded2 = ["style", "render"],
5
5
  _excluded3 = ["children", "render", "color", "value", "className", "show", "quotes"],
6
- _excluded4 = ["value", "keyName", "displayDataTypes", "components", "displayObjectSize", "enableClipboard", "indentWidth", "collapsed", "level", "keyid", "quotes", "onExpand"];
6
+ _excluded4 = ["value", "keyName", "displayDataTypes", "components", "displayObjectSize", "enableClipboard", "indentWidth", "collapsed", "level", "keyid", "quotes", "onCopied", "onExpand"];
7
7
  import { Fragment, useId, cloneElement, useState } from 'react';
8
8
  import { ValueView, Colon, Label, Line, typeMap } from './value';
9
9
  import { TriangleArrow } from './arrow/TriangleArrow';
@@ -97,7 +97,7 @@ export var CountInfo = _ref3 => {
97
97
  fontStyle: 'italic'
98
98
  },
99
99
  color: "var(--w-rjv-info-color, #0000004d)",
100
- className: "object-size",
100
+ className: "w-rjv-object-size",
101
101
  children: children
102
102
  });
103
103
  };
@@ -115,6 +115,7 @@ export function RooNode(props) {
115
115
  level = 1,
116
116
  keyid = 'root',
117
117
  quotes = '"',
118
+ onCopied,
118
119
  onExpand
119
120
  } = props,
120
121
  reset = _objectWithoutPropertiesLoose(props, _excluded4);
@@ -142,6 +143,7 @@ export function RooNode(props) {
142
143
  displayDataTypes,
143
144
  displayObjectSize,
144
145
  enableClipboard,
146
+ onCopied,
145
147
  onExpand,
146
148
  collapsed,
147
149
  quotes,
@@ -155,18 +157,22 @@ export function RooNode(props) {
155
157
  displayObjectSize,
156
158
  enableClipboard,
157
159
  indentWidth,
160
+ renderBraces: components.braces,
158
161
  renderValue: components.value
159
162
  };
160
163
  var arrowView = components.arrow ? /*#__PURE__*/cloneElement(components.arrow, {
161
164
  style: arrowStyle,
162
- 'data-expand': expand
165
+ 'data-expand': expand,
166
+ className: "w-rjv-arrow"
163
167
  }) : /*#__PURE__*/_jsx(TriangleArrow, {
164
- style: arrowStyle
168
+ style: arrowStyle,
169
+ className: "w-rjv-arrow"
165
170
  });
166
171
  var [showTools, setShowTools] = useState(false);
167
172
  var tools = enableClipboard ? /*#__PURE__*/_jsx(Copied, {
168
173
  show: showTools,
169
174
  text: value,
175
+ onCopied: onCopied,
170
176
  render: components.copied
171
177
  }) : undefined;
172
178
  var eventProps = {};
@@ -174,7 +180,9 @@ export function RooNode(props) {
174
180
  eventProps.onMouseEnter = () => setShowTools(true);
175
181
  eventProps.onMouseLeave = () => setShowTools(false);
176
182
  }
177
- return /*#__PURE__*/_jsxs("div", _extends({}, reset, eventProps, {
183
+ return /*#__PURE__*/_jsxs("div", _extends({}, reset, {
184
+ className: "w-rjv-inner"
185
+ }, eventProps, {
178
186
  children: [/*#__PURE__*/_jsxs(Line, {
179
187
  style: {
180
188
  display: 'inline-flex',
@@ -203,6 +211,7 @@ export function RooNode(props) {
203
211
  children: [nameKeys.length, " items"]
204
212
  }), tools]
205
213
  }), expand && /*#__PURE__*/_jsx(Line, {
214
+ className: "w-rjv-content",
206
215
  style: {
207
216
  borderLeft: 'var(--w-rjv-border-left-width, 1px) solid var(--w-rjv-line-color, #ebebeb)',
208
217
  marginLeft: 6
@@ -221,6 +230,7 @@ export function RooNode(props) {
221
230
  if (Array.isArray(item) && !isEmpty) {
222
231
  var label = isArray ? idx : key;
223
232
  return /*#__PURE__*/_jsx(Line, {
233
+ className: "w-rjv-wrap",
224
234
  children: /*#__PURE__*/_jsx(RooNode, _extends({
225
235
  value: item,
226
236
  keyid: keyid + subkeyid + label,
@@ -230,6 +240,7 @@ export function RooNode(props) {
230
240
  }
231
241
  if (typeof item === 'object' && item && !(item instanceof Date) && !isEmpty) {
232
242
  return /*#__PURE__*/_jsx(Line, {
243
+ className: "w-rjv-wrap",
233
244
  children: /*#__PURE__*/_jsx(RooNode, _extends({
234
245
  keyid: keyid + subkeyid + key,
235
246
  value: item,
@@ -241,7 +252,6 @@ export function RooNode(props) {
241
252
  return;
242
253
  }
243
254
  return /*#__PURE__*/_jsx(ValueView, _extends({}, valueViewProps, {
244
- renderBraces: components.braces,
245
255
  renderKey: renderKey,
246
256
  keyName: key,
247
257
  value: item
package/esm/value.js CHANGED
@@ -124,7 +124,12 @@ export function ValueView(props) {
124
124
  show: showTools,
125
125
  text: value
126
126
  }) : undefined;
127
- var eventProps = {};
127
+ var eventProps = {
128
+ className: 'w-rjv-line',
129
+ style: {
130
+ paddingLeft: indentWidth
131
+ }
132
+ };
128
133
  if (enableClipboard) {
129
134
  eventProps.onMouseEnter = () => setShowTools(true);
130
135
  eventProps.onMouseLeave = () => setShowTools(false);
@@ -145,11 +150,7 @@ export function ValueView(props) {
145
150
  className: "w-rjv-value",
146
151
  children: content
147
152
  });
148
- return /*#__PURE__*/_jsx(Line, _extends({
149
- style: {
150
- paddingLeft: indentWidth
151
- }
152
- }, eventProps, {
153
+ return /*#__PURE__*/_jsx(Line, _extends({}, eventProps, {
153
154
  children: /*#__PURE__*/_jsxs(Label, _extends({}, reset, {
154
155
  children: [renderKey, /*#__PURE__*/_jsx(Colon, {}), typeView, valueView, tools]
155
156
  }))
@@ -168,11 +169,7 @@ export function ValueView(props) {
168
169
  children: [length, " items"]
169
170
  })]
170
171
  });
171
- return /*#__PURE__*/_jsx(Line, _extends({
172
- style: {
173
- paddingLeft: indentWidth
174
- }
175
- }, eventProps, {
172
+ return /*#__PURE__*/_jsx(Line, _extends({}, eventProps, {
176
173
  children: /*#__PURE__*/_jsxs(Label, _extends({}, reset, {
177
174
  children: [renderKey, /*#__PURE__*/_jsx(Colon, {}), typeView, empty, tools]
178
175
  }))
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@uiw/react-json-view",
3
- "version": "1.1.1",
3
+ "version": "1.2.0",
4
4
  "description": "JSON viewer for react.",
5
5
  "main": "cjs/index.js",
6
6
  "module": "esm/index.js",