1
- import { useSymbolsStore , type SymbolsElement } from '../store/Symbols' ;
1
+ import { useSymbolsStore , type SymbolsElement , type SymbolsElementResult } from '../store/Symbols' ;
2
2
import { type TagType } from '../store/Types' ;
3
3
import { useExpandsStore } from '../store/Expands' ;
4
4
5
- export const Quote = ( props : { isNumber ?: boolean } & React . HTMLAttributes < HTMLElement > ) => {
5
+ export const Quote = < T extends object > (
6
+ props : { isNumber ?: boolean } & React . HTMLAttributes < HTMLElement > & SymbolsElementResult < T > ,
7
+ ) => {
6
8
const { Quote : Comp = { } } = useSymbolsStore ( ) ;
7
- const { isNumber, ...other } = props ;
9
+ const { isNumber, value , parentValue , keyName , keys , ...other } = props ;
8
10
if ( isNumber ) return null ;
9
11
const { as, render, ...reset } = Comp ;
10
12
const Elm = as || 'span' ;
11
13
const elmProps = { ...other , ...reset } ;
12
- const child = render && typeof render === 'function' && render ( elmProps ) ;
14
+ let result = { value, parentValue, keyName, keys : keys || ( keyName ? [ keyName ] : [ ] ) } ;
15
+ const child = render && typeof render === 'function' && render ( elmProps , result ) ;
13
16
if ( child ) return child ;
14
17
return < Elm { ...elmProps } /> ;
15
18
} ;
@@ -22,59 +25,68 @@ export const ValueQuote = (props: React.HTMLAttributes<HTMLElement>) => {
22
25
const { as, render, ...reset } = Comp ;
23
26
const Elm = as || 'span' ;
24
27
const elmProps = { ...other , ...reset } ;
25
- const child = render && typeof render === 'function' && render ( elmProps ) ;
28
+ const child = render && typeof render === 'function' && render ( elmProps , { } ) ;
26
29
if ( child ) return child ;
27
30
return < Elm { ...elmProps } /> ;
28
31
} ;
29
32
30
33
ValueQuote . displayName = 'JVR.ValueQuote' ;
31
34
32
- export const Colon = ( ) => {
35
+ export const Colon = < T extends object > ( props : SymbolsElementResult < T > ) => {
36
+ const { value, parentValue, keyName, keys } = props ;
33
37
const { Colon : Comp = { } } = useSymbolsStore ( ) ;
34
38
const { as, render, ...reset } = Comp ;
35
39
const Elm = as || 'span' ;
36
- const child = render && typeof render === 'function' && render ( reset ) ;
40
+ const child =
41
+ render &&
42
+ typeof render === 'function' &&
43
+ render ( reset , {
44
+ value,
45
+ parentValue,
46
+ keyName,
47
+ keys : keys || ( keyName ? [ keyName ] : [ ] ) ,
48
+ } ) ;
37
49
if ( child ) return child ;
38
50
return < Elm { ...reset } /> ;
39
51
} ;
40
52
41
53
Colon . displayName = 'JVR.Colon' ;
42
54
43
- export const Arrow = < T extends TagType > ( props : SymbolsElement < T > & { expandKey : string } ) => {
55
+ export const Arrow = < T extends TagType , K extends object > (
56
+ props : SymbolsElement < T > & { expandKey : string } & SymbolsElementResult < K > ,
57
+ ) => {
44
58
const { Arrow : Comp = { } } = useSymbolsStore ( ) ;
45
59
const expands = useExpandsStore ( ) ;
46
- const { expandKey } = props ;
60
+ const { expandKey, style : resetStyle , value , parentValue , keyName , keys } = props ;
47
61
const isExpanded = ! ! expands [ expandKey ] ;
48
62
const { as, style, render, ...reset } = Comp ;
49
63
const Elm = as || 'span' ;
50
64
const isRender = render && typeof render === 'function' ;
51
- const child = isRender && render ( { ...reset , 'data-expanded' : isExpanded , style : { ...style , ...props . style } } ) ;
65
+ const elmProps = { ...reset , 'data-expanded' : isExpanded , style : { ...style , ...resetStyle } } ;
66
+ const result = { value, parentValue, keyName, keys : keys || ( keyName ? [ keyName ] : [ ] ) } ;
67
+ const child = isRender && render ( elmProps , result ) ;
52
68
if ( child ) return child ;
53
- return < Elm { ...reset } style = { { ...style , ...props . style } } /> ;
69
+ return < Elm { ...reset } style = { { ...style , ...resetStyle } } /> ;
54
70
} ;
55
71
56
72
Arrow . displayName = 'JVR.Arrow' ;
57
73
58
- type EllipsisProps < T extends object > = {
59
- isExpanded ?: boolean ;
60
- keyName : string | number ;
61
- value ?: T ;
62
- } ;
63
-
64
- export const BracketsOpen = ( { isBrackets } : { isBrackets ?: boolean } ) => {
74
+ export const BracketsOpen = < K extends object > ( props : { isBrackets ?: boolean } & SymbolsElementResult < K > ) => {
75
+ const { isBrackets, value, parentValue, keyName, keys } = props ;
65
76
const { BracketsLeft = { } , BraceLeft = { } } = useSymbolsStore ( ) ;
77
+ const result = { value, parentValue, keyName, keys : keys || ( keyName ? [ keyName ] : [ ] ) } ;
66
78
if ( isBrackets ) {
67
79
const { as, render, ...reset } = BracketsLeft ;
68
80
const BracketsLeftComp = as || 'span' ;
69
- const child = render && typeof render === 'function' && render ( reset ) ;
81
+ const child = render && typeof render === 'function' && render ( reset , result ) ;
70
82
if ( child ) return child ;
71
83
return < BracketsLeftComp { ...reset } /> ;
72
84
}
73
- const { as : elm , render, ...props } = BraceLeft ;
85
+ const { as : elm , render, ...resetProps } = BraceLeft ;
74
86
const BraceLeftComp = elm || 'span' ;
75
- const child = render && typeof render === 'function' && render ( props ) ;
87
+ const child = render && typeof render === 'function' && render ( resetProps , result ) ;
76
88
if ( child ) return child ;
77
- return < BraceLeftComp { ...props } /> ;
89
+ return < BraceLeftComp { ...resetProps } /> ;
78
90
} ;
79
91
80
92
BracketsOpen . displayName = 'JVR.BracketsOpen' ;
@@ -84,19 +96,21 @@ type BracketsCloseProps = {
84
96
isVisiable ?: boolean ;
85
97
} ;
86
98
87
- export const BracketsClose = ( { isBrackets, isVisiable } : BracketsCloseProps ) => {
99
+ export const BracketsClose = < K extends object > ( props : BracketsCloseProps & SymbolsElementResult < K > ) => {
100
+ const { isBrackets, isVisiable, value, parentValue, keyName, keys } = props ;
101
+ const result = { value, parentValue, keyName, keys : keys || ( keyName ? [ keyName ] : [ ] ) } ;
88
102
if ( ! isVisiable ) return null ;
89
103
const { BracketsRight = { } , BraceRight = { } } = useSymbolsStore ( ) ;
90
104
if ( isBrackets ) {
91
105
const { as, render, ...reset } = BracketsRight ;
92
106
const BracketsRightComp = as || 'span' ;
93
- const child = render && typeof render === 'function' && render ( reset ) ;
107
+ const child = render && typeof render === 'function' && render ( reset , result ) ;
94
108
if ( child ) return child ;
95
109
return < BracketsRightComp { ...reset } /> ;
96
110
}
97
111
const { as : elm , render, ...reset } = BraceRight ;
98
112
const BraceRightComp = elm || 'span' ;
99
- const child = render && typeof render === 'function' && render ( reset ) ;
113
+ const child = render && typeof render === 'function' && render ( reset , result ) ;
100
114
if ( child ) return child ;
101
115
return < BraceRightComp { ...reset } /> ;
102
116
} ;
0 commit comments