A world-class math input for the web
at main 119 lines 3.3 kB view raw
1import { h, Pool, t, VNode } from "@caret-js/core"; 2 3export function renderPoolDebugView(pool: Pool): VNode { 4 let vNodes: VNode[] = []; 5 for (const [tokenId, tokenValue] of pool.tokens.entries()) { 6 vNodes.push( 7 h( 8 "div", 9 { 10 style: `border: 1px solid black; background: #fffa; padding: 4px; opacity: ${tokenValue.deleted ? 0.3 : 1};`, 11 }, 12 h("div", { style: "font: 10px monospace;" }, t(tokenId)), 13 h("div", { style: "font-weight: bold;" }, t(tokenValue.type)), 14 h( 15 "table", 16 { style: "width: 100%; border: 1px solid black; margin: 4px 0;" }, 17 h( 18 "tbody", 19 {}, 20 h( 21 "tr", 22 { style: "border: 1px solid black; padding: 4px;" }, 23 h( 24 "td", 25 { 26 style: "font: 9px monospace; text-align: center;", 27 colspan: "2", 28 }, 29 t(tokenValue.origin.dot), 30 ), 31 ), 32 h( 33 "tr", 34 {}, 35 h( 36 "td", 37 { 38 colspan: "2", 39 style: "font: 10px monospace; text-align: left;", 40 }, 41 t(`${tokenValue.origin.left}`), 42 ), 43 ), 44 h( 45 "tr", 46 {}, 47 h( 48 "td", 49 { 50 colspan: "2", 51 style: "font: 10px monospace; text-align: right;", 52 }, 53 t(`${tokenValue.origin.right}`), 54 ), 55 ), 56 ), 57 ), 58 h("div", { style: "margin-top: 8px;" }, t("Props:")), 59 h( 60 "ul", 61 { style: "padding-left: 24px; margin: 4px 0;" }, 62 ...[...tokenValue.props.entries()].map(([propName, propValue]) => { 63 return h( 64 "li", 65 {}, 66 h("div", { style: "font: 9px monospace;" }, t(propValue.dot)), 67 h( 68 "pre", 69 { style: "margin: 0;" }, 70 t(`${propName}: ${JSON.stringify(propValue.value)}`), 71 ), 72 ); 73 }), 74 ), 75 ), 76 ); 77 } 78 79 return h( 80 "div", 81 { 82 style: 83 "display: grid; grid-template-columns: repeat(auto-fill, minmax(265px, 1fr)); gap: 16px; padding: 16px; background: lightblue;", 84 }, 85 ...vNodes, 86 // Show cursor info 87 !pool.selection && 88 h( 89 "div", 90 { 91 style: 92 "grid-column: 1 / -1; background: #0005; border: 1px solid #000a; padding: 4px;", 93 }, 94 t(`No selection`), 95 ), 96 pool.selection && 97 h( 98 "div", 99 { 100 style: 101 "grid-column: 1 / -1; background: #f88a; border: 1px solid darkred; padding: 4px;", 102 }, 103 t( 104 `Head: ← ${pool.selection.head.left} | ${pool.selection.head.right}`, 105 ), 106 ), 107 pool.selection && 108 h( 109 "div", 110 { 111 style: 112 "grid-column: 1 / -1; background: #0005; border: 1px solid black; padding: 4px;", 113 }, 114 t( 115 `Anchor: ← ${pool.selection.anchor.left} | ${pool.selection.anchor.right}`, 116 ), 117 ), 118 ); 119}