All files / src/symbol index.tsx

100% Statements 88/88
68.81% Branches 64/93
100% Functions 6/6
100% Lines 78/78

Press n or j to go to the next uncovered block, b, p or k for the previous block.

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