1- import { useSymbolsStore , type SymbolsElement } from '../store/Symbols' ;
1+ import { useSymbolsStore , type SymbolsElement , type SymbolsElementResult } from '../store/Symbols' ;
22import { type TagType } from '../store/Types' ;
33import { useExpandsStore } from '../store/Expands' ;
44
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+ ) => {
68 const { Quote : Comp = { } } = useSymbolsStore ( ) ;
7- const { isNumber, ...other } = props ;
9+ const { isNumber, value , parentValue , keyName , keys , ...other } = props ;
810 if ( isNumber ) return null ;
911 const { as, render, ...reset } = Comp ;
1012 const Elm = as || 'span' ;
1113 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 ) ;
1316 if ( child ) return child ;
1417 return < Elm { ...elmProps } /> ;
1518} ;
@@ -22,59 +25,68 @@ export const ValueQuote = (props: React.HTMLAttributes<HTMLElement>) => {
2225 const { as, render, ...reset } = Comp ;
2326 const Elm = as || 'span' ;
2427 const elmProps = { ...other , ...reset } ;
25- const child = render && typeof render === 'function' && render ( elmProps ) ;
28+ const child = render && typeof render === 'function' && render ( elmProps , { } ) ;
2629 if ( child ) return child ;
2730 return < Elm { ...elmProps } /> ;
2831} ;
2932
3033ValueQuote . displayName = 'JVR.ValueQuote' ;
3134
32- export const Colon = ( ) => {
35+ export const Colon = < T extends object > ( props : SymbolsElementResult < T > ) => {
36+ const { value, parentValue, keyName, keys } = props ;
3337 const { Colon : Comp = { } } = useSymbolsStore ( ) ;
3438 const { as, render, ...reset } = Comp ;
3539 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+ } ) ;
3749 if ( child ) return child ;
3850 return < Elm { ...reset } /> ;
3951} ;
4052
4153Colon . displayName = 'JVR.Colon' ;
4254
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+ ) => {
4458 const { Arrow : Comp = { } } = useSymbolsStore ( ) ;
4559 const expands = useExpandsStore ( ) ;
46- const { expandKey } = props ;
60+ const { expandKey, style : resetStyle , value , parentValue , keyName , keys } = props ;
4761 const isExpanded = ! ! expands [ expandKey ] ;
4862 const { as, style, render, ...reset } = Comp ;
4963 const Elm = as || 'span' ;
5064 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 ) ;
5268 if ( child ) return child ;
53- return < Elm { ...reset } style = { { ...style , ...props . style } } /> ;
69+ return < Elm { ...reset } style = { { ...style , ...resetStyle } } /> ;
5470} ;
5571
5672Arrow . displayName = 'JVR.Arrow' ;
5773
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 ;
6576 const { BracketsLeft = { } , BraceLeft = { } } = useSymbolsStore ( ) ;
77+ const result = { value, parentValue, keyName, keys : keys || ( keyName ? [ keyName ] : [ ] ) } ;
6678 if ( isBrackets ) {
6779 const { as, render, ...reset } = BracketsLeft ;
6880 const BracketsLeftComp = as || 'span' ;
69- const child = render && typeof render === 'function' && render ( reset ) ;
81+ const child = render && typeof render === 'function' && render ( reset , result ) ;
7082 if ( child ) return child ;
7183 return < BracketsLeftComp { ...reset } /> ;
7284 }
73- const { as : elm , render, ...props } = BraceLeft ;
85+ const { as : elm , render, ...resetProps } = BraceLeft ;
7486 const BraceLeftComp = elm || 'span' ;
75- const child = render && typeof render === 'function' && render ( props ) ;
87+ const child = render && typeof render === 'function' && render ( resetProps , result ) ;
7688 if ( child ) return child ;
77- return < BraceLeftComp { ...props } /> ;
89+ return < BraceLeftComp { ...resetProps } /> ;
7890} ;
7991
8092BracketsOpen . displayName = 'JVR.BracketsOpen' ;
@@ -84,19 +96,21 @@ type BracketsCloseProps = {
8496 isVisiable ?: boolean ;
8597} ;
8698
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 ] : [ ] ) } ;
88102 if ( ! isVisiable ) return null ;
89103 const { BracketsRight = { } , BraceRight = { } } = useSymbolsStore ( ) ;
90104 if ( isBrackets ) {
91105 const { as, render, ...reset } = BracketsRight ;
92106 const BracketsRightComp = as || 'span' ;
93- const child = render && typeof render === 'function' && render ( reset ) ;
107+ const child = render && typeof render === 'function' && render ( reset , result ) ;
94108 if ( child ) return child ;
95109 return < BracketsRightComp { ...reset } /> ;
96110 }
97111 const { as : elm , render, ...reset } = BraceRight ;
98112 const BraceRightComp = elm || 'span' ;
99- const child = render && typeof render === 'function' && render ( reset ) ;
113+ const child = render && typeof render === 'function' && render ( reset , result ) ;
100114 if ( child ) return child ;
101115 return < BraceRightComp { ...reset } /> ;
102116} ;
0 commit comments