@uiw/react-json-view 2.0.0-alpha.26 → 2.0.0-alpha.28

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
@@ -127,7 +127,6 @@ export default function Demo() {
127
127
  }
128
128
  ```
129
129
 
130
-
131
130
  Example of custom `vscode` theme styles:
132
131
 
133
132
  ```tsx mdx:preview
@@ -682,6 +681,35 @@ export default function Demo() {
682
681
 
683
682
  This feature can be disabled with `highlightUpdates={false}`, and the default color can be changed with `--w-rjv-update-color`.
684
683
 
684
+ ## Do not display array index
685
+
686
+ ```tsx mdx:preview
687
+ import React, { Fragment } from 'react';
688
+ import JsonView from '@uiw/react-json-view';
689
+
690
+ export default function Demo() {
691
+ const value = { data: ["123", 23] }
692
+ return (
693
+ <JsonView value={value} style={{ '--w-rjv-background-color': '#ffffff' }}>
694
+ <JsonView.Colon render={(props, { parentValue, value, keyName }) => {
695
+ if (Array.isArray(parentValue) && props.children == ":") {
696
+ return <span />
697
+ }
698
+ return <span {...props} />
699
+ }}/>
700
+ <JsonView.KeyName
701
+ render={({ ...props }, { type, parentValue, value, keyName }) => {
702
+ if (Array.isArray(parentValue) && Number.isFinite( props.children)) {
703
+ return <span />
704
+ }
705
+ return <span {...props} />
706
+ }}
707
+ />
708
+ </JsonView>
709
+ )
710
+ }
711
+ ```
712
+
685
713
  ## Modify Icon Style
686
714
 
687
715
  Use built-in default icons.
package/cjs/Container.js CHANGED
@@ -13,6 +13,7 @@ var _react = _interopRequireWildcard(require("react"));
13
13
  var _NestedClose = require("./comps/NestedClose");
14
14
  var _NestedOpen = require("./comps/NestedOpen");
15
15
  var _KeyValues = require("./comps/KeyValues");
16
+ var _useIdCompat = require("./comps/useIdCompat");
16
17
  var _ShowTools = require("./store/ShowTools");
17
18
  var _jsxRuntime = require("react/jsx-runtime");
18
19
  var _excluded = ["className", "children", "parentValue", "keyid", "level", "value", "initialValue", "keys", "keyName"];
@@ -30,7 +31,7 @@ var Container = exports.Container = /*#__PURE__*/(0, _react.forwardRef)(function
30
31
  keyName = props.keyName,
31
32
  elmProps = (0, _objectWithoutProperties2["default"])(props, _excluded);
32
33
  var dispatch = (0, _ShowTools.useShowToolsDispatch)();
33
- var subkeyid = (0, _react.useId)();
34
+ var subkeyid = (0, _useIdCompat.useIdCompat)();
34
35
  var defaultClassNames = [className, 'w-rjv-inner'].filter(Boolean).join(' ');
35
36
  var reset = {
36
37
  onMouseEnter: function onMouseEnter() {
@@ -5,9 +5,9 @@ Object.defineProperty(exports, "__esModule", {
5
5
  value: true
6
6
  });
7
7
  exports.KeyValuesItem = exports.KeyValues = exports.KayName = void 0;
8
- var _objectSpread2 = _interopRequireDefault(require("@babel/runtime/helpers/objectSpread2"));
9
8
  var _defineProperty2 = _interopRequireDefault(require("@babel/runtime/helpers/defineProperty"));
10
9
  var _typeof2 = _interopRequireDefault(require("@babel/runtime/helpers/typeof"));
10
+ var _objectSpread2 = _interopRequireDefault(require("@babel/runtime/helpers/objectSpread2"));
11
11
  var _toConsumableArray2 = _interopRequireDefault(require("@babel/runtime/helpers/toConsumableArray"));
12
12
  var _slicedToArray2 = _interopRequireDefault(require("@babel/runtime/helpers/slicedToArray"));
13
13
  var _react = require("react");
@@ -21,6 +21,7 @@ var _Container = require("../Container");
21
21
  var _symbol = require("../symbol");
22
22
  var _useHighlight = require("../utils/useHighlight");
23
23
  var _Copied = require("../comps/Copied");
24
+ var _useIdCompat = require("../comps/useIdCompat");
24
25
  var _jsxRuntime = require("react/jsx-runtime");
25
26
  var KeyValues = exports.KeyValues = function KeyValues(props) {
26
27
  var _expands$expandKey;
@@ -98,23 +99,25 @@ var KayName = exports.KayName = function KayName(props) {
98
99
  highlightUpdates: highlightUpdates,
99
100
  highlightContainer: highlightContainer
100
101
  });
102
+ var compProps = {
103
+ keyName: keyName,
104
+ value: value,
105
+ keys: keys,
106
+ parentValue: parentValue
107
+ };
101
108
  return /*#__PURE__*/(0, _jsxRuntime.jsxs)(_react.Fragment, {
102
109
  children: [/*#__PURE__*/(0, _jsxRuntime.jsxs)("span", {
103
110
  ref: highlightContainer,
104
- children: [/*#__PURE__*/(0, _jsxRuntime.jsx)(_symbol.Quote, {
111
+ children: [/*#__PURE__*/(0, _jsxRuntime.jsx)(_symbol.Quote, (0, _objectSpread2["default"])({
105
112
  isNumber: isNumber,
106
113
  "data-placement": "left"
107
- }), /*#__PURE__*/(0, _jsxRuntime.jsx)(_KeyName.KeyNameComp, {
108
- keyName: keyName,
109
- value: value,
110
- keys: keys,
111
- parentValue: parentValue,
114
+ }, compProps)), /*#__PURE__*/(0, _jsxRuntime.jsx)(_KeyName.KeyNameComp, (0, _objectSpread2["default"])((0, _objectSpread2["default"])({}, compProps), {}, {
112
115
  children: keyName
113
- }), /*#__PURE__*/(0, _jsxRuntime.jsx)(_symbol.Quote, {
116
+ })), /*#__PURE__*/(0, _jsxRuntime.jsx)(_symbol.Quote, (0, _objectSpread2["default"])({
114
117
  isNumber: isNumber,
115
118
  "data-placement": "right"
116
- })]
117
- }), /*#__PURE__*/(0, _jsxRuntime.jsx)(_symbol.Colon, {})]
119
+ }, compProps))]
120
+ }), /*#__PURE__*/(0, _jsxRuntime.jsx)(_symbol.Colon, (0, _objectSpread2["default"])({}, compProps))]
118
121
  });
119
122
  };
120
123
  KayName.displayName = 'JVR.KayName';
@@ -127,7 +130,7 @@ var KeyValuesItem = exports.KeyValuesItem = function KeyValuesItem(props) {
127
130
  _props$keys2 = props.keys,
128
131
  keys = _props$keys2 === void 0 ? [] : _props$keys2;
129
132
  var dispatch = (0, _ShowTools.useShowToolsDispatch)();
130
- var subkeyid = (0, _react.useId)();
133
+ var subkeyid = (0, _useIdCompat.useIdCompat)();
131
134
  var isMyArray = Array.isArray(value);
132
135
  var isMySet = value instanceof Set;
133
136
  var isMyMap = value instanceof Map;
@@ -62,11 +62,17 @@ var NestedOpen = exports.NestedOpen = function NestedOpen(props) {
62
62
  if (showArrow) {
63
63
  reset.onClick = click;
64
64
  }
65
+ var compProps = {
66
+ keyName: keyName,
67
+ value: value,
68
+ keys: keys,
69
+ parentValue: parentValue
70
+ };
65
71
  return /*#__PURE__*/(0, _jsxRuntime.jsxs)("span", (0, _objectSpread2["default"])((0, _objectSpread2["default"])({}, reset), {}, {
66
- children: [showArrow && /*#__PURE__*/(0, _jsxRuntime.jsx)(_symbol.Arrow, {
72
+ children: [showArrow && /*#__PURE__*/(0, _jsxRuntime.jsx)(_symbol.Arrow, (0, _objectSpread2["default"])({
67
73
  style: arrowStyle,
68
74
  expandKey: expandKey
69
- }), (keyName || typeof keyName === 'number') && /*#__PURE__*/(0, _jsxRuntime.jsx)(_KeyValues.KayName, {
75
+ }, compProps)), (keyName || typeof keyName === 'number') && /*#__PURE__*/(0, _jsxRuntime.jsx)(_KeyValues.KayName, {
70
76
  keyName: keyName
71
77
  }), /*#__PURE__*/(0, _jsxRuntime.jsx)(_types.SetComp, {
72
78
  value: initialValue,
@@ -74,16 +80,16 @@ var NestedOpen = exports.NestedOpen = function NestedOpen(props) {
74
80
  }), /*#__PURE__*/(0, _jsxRuntime.jsx)(_types.MapComp, {
75
81
  value: initialValue,
76
82
  keyName: keyName
77
- }), /*#__PURE__*/(0, _jsxRuntime.jsx)(_symbol.BracketsOpen, {
83
+ }), /*#__PURE__*/(0, _jsxRuntime.jsx)(_symbol.BracketsOpen, (0, _objectSpread2["default"])({
78
84
  isBrackets: isArray || isMySet
79
- }), /*#__PURE__*/(0, _jsxRuntime.jsx)(_Ellipsis.EllipsisComp, {
85
+ }, compProps)), /*#__PURE__*/(0, _jsxRuntime.jsx)(_Ellipsis.EllipsisComp, {
80
86
  keyName: keyName,
81
87
  value: value,
82
88
  isExpanded: isExpanded
83
- }), /*#__PURE__*/(0, _jsxRuntime.jsx)(_symbol.BracketsClose, {
89
+ }), /*#__PURE__*/(0, _jsxRuntime.jsx)(_symbol.BracketsClose, (0, _objectSpread2["default"])({
84
90
  isVisiable: isExpanded || !showArrow,
85
91
  isBrackets: isArray || isMySet
86
- }), /*#__PURE__*/(0, _jsxRuntime.jsx)(_CountInfo.CountInfoComp, {
92
+ }, compProps)), /*#__PURE__*/(0, _jsxRuntime.jsx)(_CountInfo.CountInfoComp, {
87
93
  value: value,
88
94
  keyName: keyName
89
95
  }), /*#__PURE__*/(0, _jsxRuntime.jsx)(_CountInfoExtra.CountInfoExtraComps, {
@@ -0,0 +1 @@
1
+ export declare function useIdCompat(): string;
@@ -0,0 +1,14 @@
1
+ "use strict";
2
+
3
+ Object.defineProperty(exports, "__esModule", {
4
+ value: true
5
+ });
6
+ exports.useIdCompat = useIdCompat;
7
+ var _react = require("react");
8
+ function useIdCompat() {
9
+ var idRef = (0, _react.useRef)(null);
10
+ if (idRef.current === null) {
11
+ idRef.current = 'custom-id-' + Math.random().toString(36).substr(2, 9);
12
+ }
13
+ return idRef.current;
14
+ }
@@ -1,8 +1,15 @@
1
1
  import { FC, PropsWithChildren, ElementType, ComponentPropsWithoutRef } from 'react';
2
2
  import { type TagType } from './Types';
3
+ export interface SymbolsElementResult<T extends object, K = string | number> {
4
+ value?: T;
5
+ parentValue?: T;
6
+ keyName?: K;
7
+ /** Index of the parent `keyName` */
8
+ keys?: K[];
9
+ }
3
10
  type SymbolsElementProps<T extends TagType = 'span'> = {
4
11
  as?: T;
5
- render?: (props: SymbolsElement<T>) => React.ReactNode;
12
+ render?: (props: SymbolsElement<T>, result: SymbolsElementResult<object>) => React.ReactNode;
6
13
  'data-type'?: string;
7
14
  };
8
15
  export type SymbolsElement<T extends TagType = 'span'> = SymbolsElementProps<T> & ComponentPropsWithoutRef<T>;
@@ -1,9 +1,9 @@
1
- import { type SymbolsElement } from '../store/Symbols';
1
+ import { type SymbolsElement, type SymbolsElementResult } from '../store/Symbols';
2
2
  import { type TagType } from '../store/Types';
3
3
  export declare const Quote: {
4
- (props: {
4
+ <T extends object>(props: {
5
5
  isNumber?: boolean;
6
- } & React.HTMLAttributes<HTMLElement>): string | number | true | Iterable<import("react").ReactNode> | import("react/jsx-runtime").JSX.Element | null;
6
+ } & React.HTMLAttributes<HTMLElement> & SymbolsElementResult<T>): string | number | true | Iterable<import("react").ReactNode> | import("react/jsx-runtime").JSX.Element | null;
7
7
  displayName: string;
8
8
  };
9
9
  export declare const ValueQuote: {
@@ -11,19 +11,19 @@ export declare const ValueQuote: {
11
11
  displayName: string;
12
12
  };
13
13
  export declare const Colon: {
14
- (): string | number | true | Iterable<import("react").ReactNode> | import("react/jsx-runtime").JSX.Element;
14
+ <T extends object>(props: SymbolsElementResult<T>): string | number | true | Iterable<import("react").ReactNode> | import("react/jsx-runtime").JSX.Element;
15
15
  displayName: string;
16
16
  };
17
17
  export declare const Arrow: {
18
- <T extends TagType>(props: SymbolsElement<T> & {
18
+ <T extends TagType, K extends object>(props: SymbolsElement<T> & {
19
19
  expandKey: string;
20
- }): string | number | true | Iterable<import("react").ReactNode> | import("react/jsx-runtime").JSX.Element;
20
+ } & SymbolsElementResult<K>): string | number | true | Iterable<import("react").ReactNode> | import("react/jsx-runtime").JSX.Element;
21
21
  displayName: string;
22
22
  };
23
23
  export declare const BracketsOpen: {
24
- ({ isBrackets }: {
24
+ <K extends object>(props: {
25
25
  isBrackets?: boolean;
26
- }): string | number | true | Iterable<import("react").ReactNode> | import("react/jsx-runtime").JSX.Element;
26
+ } & SymbolsElementResult<K>): string | number | true | Iterable<import("react").ReactNode> | import("react/jsx-runtime").JSX.Element;
27
27
  displayName: string;
28
28
  };
29
29
  type BracketsCloseProps = {
@@ -31,7 +31,7 @@ type BracketsCloseProps = {
31
31
  isVisiable?: boolean;
32
32
  };
33
33
  export declare const BracketsClose: {
34
- ({ isBrackets, isVisiable }: BracketsCloseProps): string | number | true | Iterable<import("react").ReactNode> | import("react/jsx-runtime").JSX.Element | null;
34
+ <K extends object>(props: BracketsCloseProps & SymbolsElementResult<K>): string | number | true | Iterable<import("react").ReactNode> | import("react/jsx-runtime").JSX.Element | null;
35
35
  displayName: string;
36
36
  };
37
37
  export {};
@@ -12,7 +12,7 @@ var _objectWithoutProperties2 = _interopRequireDefault(require("@babel/runtime/h
12
12
  var _Symbols = require("../store/Symbols");
13
13
  var _Expands = require("../store/Expands");
14
14
  var _jsxRuntime = require("react/jsx-runtime");
15
- var _excluded = ["isNumber"],
15
+ var _excluded = ["isNumber", "value", "parentValue", "keyName", "keys"],
16
16
  _excluded2 = ["as", "render"],
17
17
  _excluded3 = ["as", "render"],
18
18
  _excluded4 = ["as", "render"],
@@ -26,6 +26,10 @@ var Quote = exports.Quote = function Quote(props) {
26
26
  _useSymbolsStore$Quot = _useSymbolsStore.Quote,
27
27
  Comp = _useSymbolsStore$Quot === void 0 ? {} : _useSymbolsStore$Quot;
28
28
  var isNumber = props.isNumber,
29
+ value = props.value,
30
+ parentValue = props.parentValue,
31
+ keyName = props.keyName,
32
+ keys = props.keys,
29
33
  other = (0, _objectWithoutProperties2["default"])(props, _excluded);
30
34
  if (isNumber) return null;
31
35
  var as = Comp.as,
@@ -33,7 +37,13 @@ var Quote = exports.Quote = function Quote(props) {
33
37
  reset = (0, _objectWithoutProperties2["default"])(Comp, _excluded2);
34
38
  var Elm = as || 'span';
35
39
  var elmProps = (0, _objectSpread2["default"])((0, _objectSpread2["default"])({}, other), reset);
36
- var child = render && typeof render === 'function' && render(elmProps);
40
+ var result = {
41
+ value: value,
42
+ parentValue: parentValue,
43
+ keyName: keyName,
44
+ keys: keys || (keyName ? [keyName] : [])
45
+ };
46
+ var child = render && typeof render === 'function' && render(elmProps, result);
37
47
  if (child) return child;
38
48
  return /*#__PURE__*/(0, _jsxRuntime.jsx)(Elm, (0, _objectSpread2["default"])({}, elmProps));
39
49
  };
@@ -48,12 +58,16 @@ var ValueQuote = exports.ValueQuote = function ValueQuote(props) {
48
58
  reset = (0, _objectWithoutProperties2["default"])(Comp, _excluded3);
49
59
  var Elm = as || 'span';
50
60
  var elmProps = (0, _objectSpread2["default"])((0, _objectSpread2["default"])({}, other), reset);
51
- var child = render && typeof render === 'function' && render(elmProps);
61
+ var child = render && typeof render === 'function' && render(elmProps, {});
52
62
  if (child) return child;
53
63
  return /*#__PURE__*/(0, _jsxRuntime.jsx)(Elm, (0, _objectSpread2["default"])({}, elmProps));
54
64
  };
55
65
  ValueQuote.displayName = 'JVR.ValueQuote';
56
- var Colon = exports.Colon = function Colon() {
66
+ var Colon = exports.Colon = function Colon(props) {
67
+ var value = props.value,
68
+ parentValue = props.parentValue,
69
+ keyName = props.keyName,
70
+ keys = props.keys;
57
71
  var _useSymbolsStore3 = (0, _Symbols.useSymbolsStore)(),
58
72
  _useSymbolsStore3$Col = _useSymbolsStore3.Colon,
59
73
  Comp = _useSymbolsStore3$Col === void 0 ? {} : _useSymbolsStore3$Col;
@@ -61,7 +75,12 @@ var Colon = exports.Colon = function Colon() {
61
75
  render = Comp.render,
62
76
  reset = (0, _objectWithoutProperties2["default"])(Comp, _excluded4);
63
77
  var Elm = as || 'span';
64
- var child = render && typeof render === 'function' && render(reset);
78
+ var child = render && typeof render === 'function' && render(reset, {
79
+ value: value,
80
+ parentValue: parentValue,
81
+ keyName: keyName,
82
+ keys: keys || (keyName ? [keyName] : [])
83
+ });
65
84
  if (child) return child;
66
85
  return /*#__PURE__*/(0, _jsxRuntime.jsx)(Elm, (0, _objectSpread2["default"])({}, reset));
67
86
  };
@@ -71,7 +90,12 @@ var Arrow = exports.Arrow = function Arrow(props) {
71
90
  _useSymbolsStore4$Arr = _useSymbolsStore4.Arrow,
72
91
  Comp = _useSymbolsStore4$Arr === void 0 ? {} : _useSymbolsStore4$Arr;
73
92
  var expands = (0, _Expands.useExpandsStore)();
74
- var expandKey = props.expandKey;
93
+ var expandKey = props.expandKey,
94
+ resetStyle = props.style,
95
+ value = props.value,
96
+ parentValue = props.parentValue,
97
+ keyName = props.keyName,
98
+ keys = props.keys;
75
99
  var isExpanded = !!expands[expandKey];
76
100
  var as = Comp.as,
77
101
  style = Comp.style,
@@ -79,44 +103,71 @@ var Arrow = exports.Arrow = function Arrow(props) {
79
103
  reset = (0, _objectWithoutProperties2["default"])(Comp, _excluded5);
80
104
  var Elm = as || 'span';
81
105
  var isRender = render && typeof render === 'function';
82
- var child = isRender && render((0, _objectSpread2["default"])((0, _objectSpread2["default"])({}, reset), {}, {
106
+ var elmProps = (0, _objectSpread2["default"])((0, _objectSpread2["default"])({}, reset), {}, {
83
107
  'data-expanded': isExpanded,
84
- style: (0, _objectSpread2["default"])((0, _objectSpread2["default"])({}, style), props.style)
85
- }));
108
+ style: (0, _objectSpread2["default"])((0, _objectSpread2["default"])({}, style), resetStyle)
109
+ });
110
+ var result = {
111
+ value: value,
112
+ parentValue: parentValue,
113
+ keyName: keyName,
114
+ keys: keys || (keyName ? [keyName] : [])
115
+ };
116
+ var child = isRender && render(elmProps, result);
86
117
  if (child) return child;
87
118
  return /*#__PURE__*/(0, _jsxRuntime.jsx)(Elm, (0, _objectSpread2["default"])((0, _objectSpread2["default"])({}, reset), {}, {
88
- style: (0, _objectSpread2["default"])((0, _objectSpread2["default"])({}, style), props.style)
119
+ style: (0, _objectSpread2["default"])((0, _objectSpread2["default"])({}, style), resetStyle)
89
120
  }));
90
121
  };
91
122
  Arrow.displayName = 'JVR.Arrow';
92
- var BracketsOpen = exports.BracketsOpen = function BracketsOpen(_ref) {
93
- var isBrackets = _ref.isBrackets;
123
+ var BracketsOpen = exports.BracketsOpen = function BracketsOpen(props) {
124
+ var isBrackets = props.isBrackets,
125
+ value = props.value,
126
+ parentValue = props.parentValue,
127
+ keyName = props.keyName,
128
+ keys = props.keys;
94
129
  var _useSymbolsStore5 = (0, _Symbols.useSymbolsStore)(),
95
130
  _useSymbolsStore5$Bra = _useSymbolsStore5.BracketsLeft,
96
131
  BracketsLeft = _useSymbolsStore5$Bra === void 0 ? {} : _useSymbolsStore5$Bra,
97
132
  _useSymbolsStore5$Bra2 = _useSymbolsStore5.BraceLeft,
98
133
  BraceLeft = _useSymbolsStore5$Bra2 === void 0 ? {} : _useSymbolsStore5$Bra2;
134
+ var result = {
135
+ value: value,
136
+ parentValue: parentValue,
137
+ keyName: keyName,
138
+ keys: keys || (keyName ? [keyName] : [])
139
+ };
99
140
  if (isBrackets) {
100
141
  var as = BracketsLeft.as,
101
142
  _render = BracketsLeft.render,
102
143
  reset = (0, _objectWithoutProperties2["default"])(BracketsLeft, _excluded6);
103
144
  var BracketsLeftComp = as || 'span';
104
- var _child = _render && typeof _render === 'function' && _render(reset);
145
+ var _child = _render && typeof _render === 'function' && _render(reset, result);
105
146
  if (_child) return _child;
106
147
  return /*#__PURE__*/(0, _jsxRuntime.jsx)(BracketsLeftComp, (0, _objectSpread2["default"])({}, reset));
107
148
  }
108
149
  var elm = BraceLeft.as,
109
150
  render = BraceLeft.render,
110
- props = (0, _objectWithoutProperties2["default"])(BraceLeft, _excluded7);
151
+ resetProps = (0, _objectWithoutProperties2["default"])(BraceLeft, _excluded7);
111
152
  var BraceLeftComp = elm || 'span';
112
- var child = render && typeof render === 'function' && render(props);
153
+ var child = render && typeof render === 'function' && render(resetProps, result);
113
154
  if (child) return child;
114
- return /*#__PURE__*/(0, _jsxRuntime.jsx)(BraceLeftComp, (0, _objectSpread2["default"])({}, props));
155
+ return /*#__PURE__*/(0, _jsxRuntime.jsx)(BraceLeftComp, (0, _objectSpread2["default"])({}, resetProps));
115
156
  };
116
157
  BracketsOpen.displayName = 'JVR.BracketsOpen';
117
- var BracketsClose = exports.BracketsClose = function BracketsClose(_ref2) {
118
- var isBrackets = _ref2.isBrackets,
119
- isVisiable = _ref2.isVisiable;
158
+ var BracketsClose = exports.BracketsClose = function BracketsClose(props) {
159
+ var isBrackets = props.isBrackets,
160
+ isVisiable = props.isVisiable,
161
+ value = props.value,
162
+ parentValue = props.parentValue,
163
+ keyName = props.keyName,
164
+ keys = props.keys;
165
+ var result = {
166
+ value: value,
167
+ parentValue: parentValue,
168
+ keyName: keyName,
169
+ keys: keys || (keyName ? [keyName] : [])
170
+ };
120
171
  if (!isVisiable) return null;
121
172
  var _useSymbolsStore6 = (0, _Symbols.useSymbolsStore)(),
122
173
  _useSymbolsStore6$Bra = _useSymbolsStore6.BracketsRight,
@@ -128,7 +179,7 @@ var BracketsClose = exports.BracketsClose = function BracketsClose(_ref2) {
128
179
  _render2 = BracketsRight.render,
129
180
  _reset = (0, _objectWithoutProperties2["default"])(BracketsRight, _excluded8);
130
181
  var BracketsRightComp = as || 'span';
131
- var _child2 = _render2 && typeof _render2 === 'function' && _render2(_reset);
182
+ var _child2 = _render2 && typeof _render2 === 'function' && _render2(_reset, result);
132
183
  if (_child2) return _child2;
133
184
  return /*#__PURE__*/(0, _jsxRuntime.jsx)(BracketsRightComp, (0, _objectSpread2["default"])({}, _reset));
134
185
  }
@@ -136,7 +187,7 @@ var BracketsClose = exports.BracketsClose = function BracketsClose(_ref2) {
136
187
  render = BraceRight.render,
137
188
  reset = (0, _objectWithoutProperties2["default"])(BraceRight, _excluded9);
138
189
  var BraceRightComp = elm || 'span';
139
- var child = render && typeof render === 'function' && render(reset);
190
+ var child = render && typeof render === 'function' && render(reset, result);
140
191
  if (child) return child;
141
192
  return /*#__PURE__*/(0, _jsxRuntime.jsx)(BraceRightComp, (0, _objectSpread2["default"])({}, reset));
142
193
  };
package/esm/Container.js CHANGED
@@ -1,10 +1,11 @@
1
1
  import _extends from "@babel/runtime/helpers/extends";
2
2
  import _objectWithoutPropertiesLoose from "@babel/runtime/helpers/objectWithoutPropertiesLoose";
3
3
  var _excluded = ["className", "children", "parentValue", "keyid", "level", "value", "initialValue", "keys", "keyName"];
4
- import React, { forwardRef, useId } from 'react';
4
+ import React, { forwardRef } from 'react';
5
5
  import { NestedClose } from './comps/NestedClose';
6
6
  import { NestedOpen } from './comps/NestedOpen';
7
7
  import { KeyValues } from './comps/KeyValues';
8
+ import { useIdCompat } from './comps/useIdCompat';
8
9
  import { useShowToolsDispatch } from './store/ShowTools';
9
10
  import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
10
11
  export var Container = /*#__PURE__*/forwardRef((props, ref) => {
@@ -19,7 +20,7 @@ export var Container = /*#__PURE__*/forwardRef((props, ref) => {
19
20
  } = props,
20
21
  elmProps = _objectWithoutPropertiesLoose(props, _excluded);
21
22
  var dispatch = useShowToolsDispatch();
22
- var subkeyid = useId();
23
+ var subkeyid = useIdCompat();
23
24
  var defaultClassNames = [className, 'w-rjv-inner'].filter(Boolean).join(' ');
24
25
  var reset = {
25
26
  onMouseEnter: () => dispatch({
@@ -1,5 +1,5 @@
1
1
  import _extends from "@babel/runtime/helpers/extends";
2
- import { Fragment, useId, useRef } from 'react';
2
+ import { Fragment, useRef } from 'react';
3
3
  import { useStore } from '../store';
4
4
  import { useExpandsStore } from '../store/Expands';
5
5
  import { useShowToolsDispatch } from '../store/ShowTools';
@@ -10,6 +10,7 @@ import { Container } from '../Container';
10
10
  import { Quote, Colon } from '../symbol';
11
11
  import { useHighlight } from '../utils/useHighlight';
12
12
  import { Copied } from '../comps/Copied';
13
+ import { useIdCompat } from '../comps/useIdCompat';
13
14
  import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
14
15
  export var KeyValues = props => {
15
16
  var _expands$expandKey;
@@ -81,23 +82,25 @@ export var KayName = props => {
81
82
  highlightUpdates,
82
83
  highlightContainer
83
84
  });
85
+ var compProps = {
86
+ keyName,
87
+ value,
88
+ keys,
89
+ parentValue
90
+ };
84
91
  return /*#__PURE__*/_jsxs(Fragment, {
85
92
  children: [/*#__PURE__*/_jsxs("span", {
86
93
  ref: highlightContainer,
87
- children: [/*#__PURE__*/_jsx(Quote, {
94
+ children: [/*#__PURE__*/_jsx(Quote, _extends({
88
95
  isNumber: isNumber,
89
96
  "data-placement": "left"
90
- }), /*#__PURE__*/_jsx(KeyNameComp, {
91
- keyName: keyName,
92
- value: value,
93
- keys: keys,
94
- parentValue: parentValue,
97
+ }, compProps)), /*#__PURE__*/_jsx(KeyNameComp, _extends({}, compProps, {
95
98
  children: keyName
96
- }), /*#__PURE__*/_jsx(Quote, {
99
+ })), /*#__PURE__*/_jsx(Quote, _extends({
97
100
  isNumber: isNumber,
98
101
  "data-placement": "right"
99
- })]
100
- }), /*#__PURE__*/_jsx(Colon, {})]
102
+ }, compProps))]
103
+ }), /*#__PURE__*/_jsx(Colon, _extends({}, compProps))]
101
104
  });
102
105
  };
103
106
  KayName.displayName = 'JVR.KayName';
@@ -110,7 +113,7 @@ export var KeyValuesItem = props => {
110
113
  keys = []
111
114
  } = props;
112
115
  var dispatch = useShowToolsDispatch();
113
- var subkeyid = useId();
116
+ var subkeyid = useIdCompat();
114
117
  var isMyArray = Array.isArray(value);
115
118
  var isMySet = value instanceof Set;
116
119
  var isMyMap = value instanceof Map;
@@ -58,11 +58,17 @@ export var NestedOpen = props => {
58
58
  if (showArrow) {
59
59
  reset.onClick = click;
60
60
  }
61
+ var compProps = {
62
+ keyName,
63
+ value,
64
+ keys,
65
+ parentValue
66
+ };
61
67
  return /*#__PURE__*/_jsxs("span", _extends({}, reset, {
62
- children: [showArrow && /*#__PURE__*/_jsx(Arrow, {
68
+ children: [showArrow && /*#__PURE__*/_jsx(Arrow, _extends({
63
69
  style: arrowStyle,
64
70
  expandKey: expandKey
65
- }), (keyName || typeof keyName === 'number') && /*#__PURE__*/_jsx(KayName, {
71
+ }, compProps)), (keyName || typeof keyName === 'number') && /*#__PURE__*/_jsx(KayName, {
66
72
  keyName: keyName
67
73
  }), /*#__PURE__*/_jsx(SetComp, {
68
74
  value: initialValue,
@@ -70,16 +76,16 @@ export var NestedOpen = props => {
70
76
  }), /*#__PURE__*/_jsx(MapComp, {
71
77
  value: initialValue,
72
78
  keyName: keyName
73
- }), /*#__PURE__*/_jsx(BracketsOpen, {
79
+ }), /*#__PURE__*/_jsx(BracketsOpen, _extends({
74
80
  isBrackets: isArray || isMySet
75
- }), /*#__PURE__*/_jsx(EllipsisComp, {
81
+ }, compProps)), /*#__PURE__*/_jsx(EllipsisComp, {
76
82
  keyName: keyName,
77
83
  value: value,
78
84
  isExpanded: isExpanded
79
- }), /*#__PURE__*/_jsx(BracketsClose, {
85
+ }), /*#__PURE__*/_jsx(BracketsClose, _extends({
80
86
  isVisiable: isExpanded || !showArrow,
81
87
  isBrackets: isArray || isMySet
82
- }), /*#__PURE__*/_jsx(CountInfoComp, {
88
+ }, compProps)), /*#__PURE__*/_jsx(CountInfoComp, {
83
89
  value: value,
84
90
  keyName: keyName
85
91
  }), /*#__PURE__*/_jsx(CountInfoExtraComps, {
@@ -0,0 +1 @@
1
+ export declare function useIdCompat(): string;
@@ -0,0 +1,8 @@
1
+ import { useRef } from 'react';
2
+ export function useIdCompat() {
3
+ var idRef = useRef(null);
4
+ if (idRef.current === null) {
5
+ idRef.current = 'custom-id-' + Math.random().toString(36).substr(2, 9);
6
+ }
7
+ return idRef.current;
8
+ }
@@ -1,8 +1,15 @@
1
1
  import { FC, PropsWithChildren, ElementType, ComponentPropsWithoutRef } from 'react';
2
2
  import { type TagType } from './Types';
3
+ export interface SymbolsElementResult<T extends object, K = string | number> {
4
+ value?: T;
5
+ parentValue?: T;
6
+ keyName?: K;
7
+ /** Index of the parent `keyName` */
8
+ keys?: K[];
9
+ }
3
10
  type SymbolsElementProps<T extends TagType = 'span'> = {
4
11
  as?: T;
5
- render?: (props: SymbolsElement<T>) => React.ReactNode;
12
+ render?: (props: SymbolsElement<T>, result: SymbolsElementResult<object>) => React.ReactNode;
6
13
  'data-type'?: string;
7
14
  };
8
15
  export type SymbolsElement<T extends TagType = 'span'> = SymbolsElementProps<T> & ComponentPropsWithoutRef<T>;
@@ -1,9 +1,9 @@
1
- import { type SymbolsElement } from '../store/Symbols';
1
+ import { type SymbolsElement, type SymbolsElementResult } from '../store/Symbols';
2
2
  import { type TagType } from '../store/Types';
3
3
  export declare const Quote: {
4
- (props: {
4
+ <T extends object>(props: {
5
5
  isNumber?: boolean;
6
- } & React.HTMLAttributes<HTMLElement>): string | number | true | Iterable<import("react").ReactNode> | import("react/jsx-runtime").JSX.Element | null;
6
+ } & React.HTMLAttributes<HTMLElement> & SymbolsElementResult<T>): string | number | true | Iterable<import("react").ReactNode> | import("react/jsx-runtime").JSX.Element | null;
7
7
  displayName: string;
8
8
  };
9
9
  export declare const ValueQuote: {
@@ -11,19 +11,19 @@ export declare const ValueQuote: {
11
11
  displayName: string;
12
12
  };
13
13
  export declare const Colon: {
14
- (): string | number | true | Iterable<import("react").ReactNode> | import("react/jsx-runtime").JSX.Element;
14
+ <T extends object>(props: SymbolsElementResult<T>): string | number | true | Iterable<import("react").ReactNode> | import("react/jsx-runtime").JSX.Element;
15
15
  displayName: string;
16
16
  };
17
17
  export declare const Arrow: {
18
- <T extends TagType>(props: SymbolsElement<T> & {
18
+ <T extends TagType, K extends object>(props: SymbolsElement<T> & {
19
19
  expandKey: string;
20
- }): string | number | true | Iterable<import("react").ReactNode> | import("react/jsx-runtime").JSX.Element;
20
+ } & SymbolsElementResult<K>): string | number | true | Iterable<import("react").ReactNode> | import("react/jsx-runtime").JSX.Element;
21
21
  displayName: string;
22
22
  };
23
23
  export declare const BracketsOpen: {
24
- ({ isBrackets }: {
24
+ <K extends object>(props: {
25
25
  isBrackets?: boolean;
26
- }): string | number | true | Iterable<import("react").ReactNode> | import("react/jsx-runtime").JSX.Element;
26
+ } & SymbolsElementResult<K>): string | number | true | Iterable<import("react").ReactNode> | import("react/jsx-runtime").JSX.Element;
27
27
  displayName: string;
28
28
  };
29
29
  type BracketsCloseProps = {
@@ -31,7 +31,7 @@ type BracketsCloseProps = {
31
31
  isVisiable?: boolean;
32
32
  };
33
33
  export declare const BracketsClose: {
34
- ({ isBrackets, isVisiable }: BracketsCloseProps): string | number | true | Iterable<import("react").ReactNode> | import("react/jsx-runtime").JSX.Element | null;
34
+ <K extends object>(props: BracketsCloseProps & SymbolsElementResult<K>): string | number | true | Iterable<import("react").ReactNode> | import("react/jsx-runtime").JSX.Element | null;
35
35
  displayName: string;
36
36
  };
37
37
  export {};
@@ -1,7 +1,7 @@
1
1
  import _objectDestructuringEmpty from "@babel/runtime/helpers/objectDestructuringEmpty";
2
2
  import _extends from "@babel/runtime/helpers/extends";
3
3
  import _objectWithoutPropertiesLoose from "@babel/runtime/helpers/objectWithoutPropertiesLoose";
4
- var _excluded = ["isNumber"],
4
+ var _excluded = ["isNumber", "value", "parentValue", "keyName", "keys"],
5
5
  _excluded2 = ["as", "render"],
6
6
  _excluded3 = ["as", "render"],
7
7
  _excluded4 = ["as", "render"],
@@ -18,7 +18,11 @@ export var Quote = props => {
18
18
  Quote: Comp = {}
19
19
  } = useSymbolsStore();
20
20
  var {
21
- isNumber
21
+ isNumber,
22
+ value,
23
+ parentValue,
24
+ keyName,
25
+ keys
22
26
  } = props,
23
27
  other = _objectWithoutPropertiesLoose(props, _excluded);
24
28
  if (isNumber) return null;
@@ -29,7 +33,13 @@ export var Quote = props => {
29
33
  reset = _objectWithoutPropertiesLoose(Comp, _excluded2);
30
34
  var Elm = as || 'span';
31
35
  var elmProps = _extends({}, other, reset);
32
- var child = render && typeof render === 'function' && render(elmProps);
36
+ var result = {
37
+ value,
38
+ parentValue,
39
+ keyName,
40
+ keys: keys || (keyName ? [keyName] : [])
41
+ };
42
+ var child = render && typeof render === 'function' && render(elmProps, result);
33
43
  if (child) return child;
34
44
  return /*#__PURE__*/_jsx(Elm, _extends({}, elmProps));
35
45
  };
@@ -46,12 +56,18 @@ export var ValueQuote = props => {
46
56
  reset = _objectWithoutPropertiesLoose(Comp, _excluded3);
47
57
  var Elm = as || 'span';
48
58
  var elmProps = _extends({}, other, reset);
49
- var child = render && typeof render === 'function' && render(elmProps);
59
+ var child = render && typeof render === 'function' && render(elmProps, {});
50
60
  if (child) return child;
51
61
  return /*#__PURE__*/_jsx(Elm, _extends({}, elmProps));
52
62
  };
53
63
  ValueQuote.displayName = 'JVR.ValueQuote';
54
- export var Colon = () => {
64
+ export var Colon = props => {
65
+ var {
66
+ value,
67
+ parentValue,
68
+ keyName,
69
+ keys
70
+ } = props;
55
71
  var {
56
72
  Colon: Comp = {}
57
73
  } = useSymbolsStore();
@@ -61,7 +77,12 @@ export var Colon = () => {
61
77
  } = Comp,
62
78
  reset = _objectWithoutPropertiesLoose(Comp, _excluded4);
63
79
  var Elm = as || 'span';
64
- var child = render && typeof render === 'function' && render(reset);
80
+ var child = render && typeof render === 'function' && render(reset, {
81
+ value,
82
+ parentValue,
83
+ keyName,
84
+ keys: keys || (keyName ? [keyName] : [])
85
+ });
65
86
  if (child) return child;
66
87
  return /*#__PURE__*/_jsx(Elm, _extends({}, reset));
67
88
  };
@@ -72,7 +93,12 @@ export var Arrow = props => {
72
93
  } = useSymbolsStore();
73
94
  var expands = useExpandsStore();
74
95
  var {
75
- expandKey
96
+ expandKey,
97
+ style: resetStyle,
98
+ value,
99
+ parentValue,
100
+ keyName,
101
+ keys
76
102
  } = props;
77
103
  var isExpanded = !!expands[expandKey];
78
104
  var {
@@ -83,24 +109,41 @@ export var Arrow = props => {
83
109
  reset = _objectWithoutPropertiesLoose(Comp, _excluded5);
84
110
  var Elm = as || 'span';
85
111
  var isRender = render && typeof render === 'function';
86
- var child = isRender && render(_extends({}, reset, {
112
+ var elmProps = _extends({}, reset, {
87
113
  'data-expanded': isExpanded,
88
- style: _extends({}, style, props.style)
89
- }));
114
+ style: _extends({}, style, resetStyle)
115
+ });
116
+ var result = {
117
+ value,
118
+ parentValue,
119
+ keyName,
120
+ keys: keys || (keyName ? [keyName] : [])
121
+ };
122
+ var child = isRender && render(elmProps, result);
90
123
  if (child) return child;
91
124
  return /*#__PURE__*/_jsx(Elm, _extends({}, reset, {
92
- style: _extends({}, style, props.style)
125
+ style: _extends({}, style, resetStyle)
93
126
  }));
94
127
  };
95
128
  Arrow.displayName = 'JVR.Arrow';
96
- export var BracketsOpen = _ref => {
129
+ export var BracketsOpen = props => {
97
130
  var {
98
- isBrackets
99
- } = _ref;
131
+ isBrackets,
132
+ value,
133
+ parentValue,
134
+ keyName,
135
+ keys
136
+ } = props;
100
137
  var {
101
138
  BracketsLeft = {},
102
139
  BraceLeft = {}
103
140
  } = useSymbolsStore();
141
+ var result = {
142
+ value,
143
+ parentValue,
144
+ keyName,
145
+ keys: keys || (keyName ? [keyName] : [])
146
+ };
104
147
  if (isBrackets) {
105
148
  var {
106
149
  as,
@@ -108,7 +151,7 @@ export var BracketsOpen = _ref => {
108
151
  } = BracketsLeft,
109
152
  reset = _objectWithoutPropertiesLoose(BracketsLeft, _excluded6);
110
153
  var BracketsLeftComp = as || 'span';
111
- var _child = _render && typeof _render === 'function' && _render(reset);
154
+ var _child = _render && typeof _render === 'function' && _render(reset, result);
112
155
  if (_child) return _child;
113
156
  return /*#__PURE__*/_jsx(BracketsLeftComp, _extends({}, reset));
114
157
  }
@@ -116,18 +159,28 @@ export var BracketsOpen = _ref => {
116
159
  as: elm,
117
160
  render
118
161
  } = BraceLeft,
119
- props = _objectWithoutPropertiesLoose(BraceLeft, _excluded7);
162
+ resetProps = _objectWithoutPropertiesLoose(BraceLeft, _excluded7);
120
163
  var BraceLeftComp = elm || 'span';
121
- var child = render && typeof render === 'function' && render(props);
164
+ var child = render && typeof render === 'function' && render(resetProps, result);
122
165
  if (child) return child;
123
- return /*#__PURE__*/_jsx(BraceLeftComp, _extends({}, props));
166
+ return /*#__PURE__*/_jsx(BraceLeftComp, _extends({}, resetProps));
124
167
  };
125
168
  BracketsOpen.displayName = 'JVR.BracketsOpen';
126
- export var BracketsClose = _ref2 => {
169
+ export var BracketsClose = props => {
127
170
  var {
128
171
  isBrackets,
129
- isVisiable
130
- } = _ref2;
172
+ isVisiable,
173
+ value,
174
+ parentValue,
175
+ keyName,
176
+ keys
177
+ } = props;
178
+ var result = {
179
+ value,
180
+ parentValue,
181
+ keyName,
182
+ keys: keys || (keyName ? [keyName] : [])
183
+ };
131
184
  if (!isVisiable) return null;
132
185
  var {
133
186
  BracketsRight = {},
@@ -140,7 +193,7 @@ export var BracketsClose = _ref2 => {
140
193
  } = BracketsRight,
141
194
  _reset = _objectWithoutPropertiesLoose(BracketsRight, _excluded8);
142
195
  var BracketsRightComp = as || 'span';
143
- var _child2 = _render2 && typeof _render2 === 'function' && _render2(_reset);
196
+ var _child2 = _render2 && typeof _render2 === 'function' && _render2(_reset, result);
144
197
  if (_child2) return _child2;
145
198
  return /*#__PURE__*/_jsx(BracketsRightComp, _extends({}, _reset));
146
199
  }
@@ -150,7 +203,7 @@ export var BracketsClose = _ref2 => {
150
203
  } = BraceRight,
151
204
  reset = _objectWithoutPropertiesLoose(BraceRight, _excluded9);
152
205
  var BraceRightComp = elm || 'span';
153
- var child = render && typeof render === 'function' && render(reset);
206
+ var child = render && typeof render === 'function' && render(reset, result);
154
207
  if (child) return child;
155
208
  return /*#__PURE__*/_jsx(BraceRightComp, _extends({}, reset));
156
209
  };
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@uiw/react-json-view",
3
- "version": "2.0.0-alpha.26",
3
+ "version": "2.0.0-alpha.28",
4
4
  "description": "JSON viewer for react.",
5
5
  "main": "cjs/index.js",
6
6
  "module": "esm/index.js",