A world-class math input for the web
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}