graphics-debug 0.0.2 → 0.0.3

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -1,56 +0,0 @@
1
- import {
2
- getGraphicsObjectsFromLogString
3
- } from "./chunk-646ISP7J.js";
4
- import {
5
- getSvgFromGraphicsObject
6
- } from "./chunk-G7UBPMLZ.js";
7
-
8
- // lib/index.ts
9
- function getSvgFromLogString(logString) {
10
- const objects = getGraphicsObjectsFromLogString(logString);
11
- if (objects.length === 0) return "";
12
- return getSvgFromGraphicsObject(objects[0]);
13
- }
14
- function getHtmlFromLogString(logString) {
15
- const svgs = getSvgsFromLogString(logString);
16
- if (svgs.length === 0) return "";
17
- const sections = svgs.map(
18
- ({ title, svg }) => `
19
- <section>
20
- <h2>${title}</h2>
21
- ${svg}
22
- </section>
23
- `
24
- ).join("\n");
25
- return `
26
- <!DOCTYPE html>
27
- <html>
28
- <head>
29
- <title>Graphics Debug Output</title>
30
- <style>
31
- body { font-family: system-ui; max-width: 1200px; margin: 0 auto; padding: 20px; }
32
- h1 { color: #333; }
33
- section { margin: 40px 0; }
34
- svg { max-width: 100%; height: auto; border: 1px solid #eee; }
35
- </style>
36
- </head>
37
- <body>
38
- <h1>Graphics Debug Output</h1>
39
- ${sections}
40
- </body>
41
- </html>`;
42
- }
43
- function getSvgsFromLogString(logString) {
44
- const objects = getGraphicsObjectsFromLogString(logString);
45
- return objects.map((obj) => ({
46
- title: obj.graphics.title || "Untitled Graphic",
47
- svg: getSvgFromGraphicsObject(obj)
48
- }));
49
- }
50
-
51
- export {
52
- getSvgFromLogString,
53
- getHtmlFromLogString,
54
- getSvgsFromLogString
55
- };
56
- //# sourceMappingURL=chunk-GDKEOGZB.js.map
@@ -1 +0,0 @@
1
- {"version":3,"sources":["../lib/index.ts"],"sourcesContent":["import { getGraphicsObjectsFromLogString } from \"./getGraphicsObjectsFromLogString\"\nimport { getSvgFromGraphicsObject } from \"./getSvgFromGraphicsObject\"\n\nexport type { Point, Line, Rect, Circle, GraphicsObject } from \"./types\"\nexport { getGraphicsObjectsFromLogString } from \"./getGraphicsObjectsFromLogString\"\nexport { getSvgFromGraphicsObject } from \"./getSvgFromGraphicsObject\"\n\nexport function getSvgFromLogString(logString: string): string {\n const objects = getGraphicsObjectsFromLogString(logString)\n if (objects.length === 0) return \"\"\n return getSvgFromGraphicsObject(objects[0])\n}\n\nexport function getHtmlFromLogString(logString: string): string {\n const svgs = getSvgsFromLogString(logString)\n if (svgs.length === 0) return \"\"\n\n const sections = svgs\n .map(\n ({ title, svg }) => `\n <section>\n <h2>${title}</h2>\n ${svg}\n </section>\n `,\n )\n .join(\"\\n\")\n\n return `\n<!DOCTYPE html>\n<html>\n<head>\n <title>Graphics Debug Output</title>\n <style>\n body { font-family: system-ui; max-width: 1200px; margin: 0 auto; padding: 20px; }\n h1 { color: #333; }\n section { margin: 40px 0; }\n svg { max-width: 100%; height: auto; border: 1px solid #eee; }\n </style>\n</head>\n<body>\n <h1>Graphics Debug Output</h1>\n ${sections}\n</body>\n</html>`\n}\n\nexport function getSvgsFromLogString(\n logString: string,\n): Array<{ title: string; svg: string }> {\n const objects = getGraphicsObjectsFromLogString(logString)\n return objects.map((obj) => ({\n title: obj.graphics.title || \"Untitled Graphic\",\n svg: getSvgFromGraphicsObject(obj),\n }))\n}\n"],"mappings":";;;;;;;;AAOO,SAAS,oBAAoB,WAA2B;AAC7D,QAAM,UAAU,gCAAgC,SAAS;AACzD,MAAI,QAAQ,WAAW,EAAG,QAAO;AACjC,SAAO,yBAAyB,QAAQ,CAAC,CAAC;AAC5C;AAEO,SAAS,qBAAqB,WAA2B;AAC9D,QAAM,OAAO,qBAAqB,SAAS;AAC3C,MAAI,KAAK,WAAW,EAAG,QAAO;AAE9B,QAAM,WAAW,KACd;AAAA,IACC,CAAC,EAAE,OAAO,IAAI,MAAM;AAAA;AAAA,YAEd,KAAK;AAAA,QACT,GAAG;AAAA;AAAA;AAAA,EAGP,EACC,KAAK,IAAI;AAEZ,SAAO;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,IAcL,QAAQ;AAAA;AAAA;AAGZ;AAEO,SAAS,qBACd,WACuC;AACvC,QAAM,UAAU,gCAAgC,SAAS;AACzD,SAAO,QAAQ,IAAI,CAAC,SAAS;AAAA,IAC3B,OAAO,IAAI,SAAS,SAAS;AAAA,IAC7B,KAAK,yBAAyB,GAAG;AAAA,EACnC,EAAE;AACJ;","names":[]}
@@ -1,268 +0,0 @@
1
- // lib/getSvgFromGraphicsObject.ts
2
- import {
3
- compose,
4
- translate,
5
- scale,
6
- applyToPoint
7
- } from "transformation-matrix";
8
- import { stringify } from "svgson";
9
- import pretty from "pretty";
10
- var DEFAULT_SVG_SIZE = 640;
11
- var PADDING = 40;
12
- function getBounds(graphics) {
13
- const points = [
14
- ...graphics.points || [],
15
- ...(graphics.lines || []).flatMap((line) => line.points),
16
- ...(graphics.rects || []).flatMap((rect) => {
17
- const halfWidth = rect.width / 2;
18
- const halfHeight = rect.height / 2;
19
- return [
20
- { x: rect.centerX - halfWidth, y: rect.centerY - halfHeight },
21
- { x: rect.centerX + halfWidth, y: rect.centerY - halfHeight },
22
- { x: rect.centerX - halfWidth, y: rect.centerY + halfHeight },
23
- { x: rect.centerX + halfWidth, y: rect.centerY + halfHeight }
24
- ];
25
- }),
26
- ...(graphics.circles || []).flatMap((circle) => [
27
- { x: circle.center.x - circle.radius, y: circle.center.y },
28
- // left
29
- { x: circle.center.x + circle.radius, y: circle.center.y },
30
- // right
31
- { x: circle.center.x, y: circle.center.y - circle.radius },
32
- // top
33
- { x: circle.center.x, y: circle.center.y + circle.radius }
34
- // bottom
35
- ])
36
- ];
37
- if (points.length === 0) {
38
- return { minX: -1, maxX: 1, minY: -1, maxY: 1 };
39
- }
40
- return points.reduce(
41
- (bounds, point) => ({
42
- minX: Math.min(bounds.minX, point.x),
43
- maxX: Math.max(bounds.maxX, point.x),
44
- minY: Math.min(bounds.minY, point.y),
45
- maxY: Math.max(bounds.maxY, point.y)
46
- }),
47
- { minX: Infinity, maxX: -Infinity, minY: Infinity, maxY: -Infinity }
48
- );
49
- }
50
- function getProjectionMatrix(bounds, coordinateSystem) {
51
- const width = bounds.maxX - bounds.minX;
52
- const height = bounds.maxY - bounds.minY;
53
- const scale_factor = Math.min(
54
- (DEFAULT_SVG_SIZE - 2 * PADDING) / width,
55
- (DEFAULT_SVG_SIZE - 2 * PADDING) / height
56
- );
57
- return compose(
58
- translate(DEFAULT_SVG_SIZE / 2, DEFAULT_SVG_SIZE / 2),
59
- scale(
60
- scale_factor,
61
- coordinateSystem === "screen" ? -scale_factor : scale_factor
62
- ),
63
- translate(-(bounds.minX + width / 2), -(bounds.minY + height / 2))
64
- );
65
- }
66
- function projectPoint(point, matrix) {
67
- const projected = applyToPoint(matrix, { x: point.x, y: point.y });
68
- return { ...point, ...projected };
69
- }
70
- function getSvgFromGraphicsObject(graphicsObj) {
71
- const { graphics } = graphicsObj;
72
- const bounds = getBounds(graphics);
73
- const matrix = compose(getProjectionMatrix(bounds, graphics.coordinateSystem));
74
- const svgObject = {
75
- name: "svg",
76
- type: "element",
77
- attributes: {
78
- width: DEFAULT_SVG_SIZE.toString(),
79
- height: DEFAULT_SVG_SIZE.toString(),
80
- viewBox: `0 0 ${DEFAULT_SVG_SIZE} ${DEFAULT_SVG_SIZE}`,
81
- xmlns: "http://www.w3.org/2000/svg"
82
- },
83
- children: [
84
- // Points
85
- ...(graphics.points || []).map((point) => {
86
- const projected = projectPoint(point, matrix);
87
- return {
88
- name: "g",
89
- type: "element",
90
- children: [
91
- {
92
- name: "circle",
93
- type: "element",
94
- attributes: {
95
- cx: projected.x.toString(),
96
- cy: projected.y.toString(),
97
- r: "3",
98
- fill: point.color || "black"
99
- }
100
- },
101
- ...point.label ? [
102
- {
103
- name: "text",
104
- type: "element",
105
- attributes: {
106
- x: (projected.x + 5).toString(),
107
- y: (projected.y - 5).toString(),
108
- "font-family": "sans-serif",
109
- "font-size": "12"
110
- },
111
- children: [{ type: "text", value: point.label }]
112
- }
113
- ] : []
114
- ]
115
- };
116
- }),
117
- // Lines
118
- ...(graphics.lines || []).map((line) => ({
119
- name: "polyline",
120
- type: "element",
121
- attributes: {
122
- points: line.points.map((p) => projectPoint(p, matrix)).map((p) => `${p.x},${p.y}`).join(" "),
123
- fill: "none",
124
- stroke: "black",
125
- "stroke-width": (line.points[0].stroke || 1).toString()
126
- }
127
- })),
128
- // Rectangles
129
- ...(graphics.rects || []).map((rect) => {
130
- const projected = projectPoint({ x: rect.centerX, y: rect.centerY }, matrix);
131
- const scaledWidth = rect.width * matrix.a;
132
- const scaledHeight = rect.height * matrix.d;
133
- return {
134
- name: "rect",
135
- type: "element",
136
- attributes: {
137
- x: (projected.x - scaledWidth / 2).toString(),
138
- y: (projected.y - scaledHeight / 2).toString(),
139
- width: scaledWidth.toString(),
140
- height: Math.abs(scaledHeight).toString(),
141
- fill: rect.fill || "none",
142
- stroke: rect.stroke || "black"
143
- }
144
- };
145
- }),
146
- // Circles
147
- ...(graphics.circles || []).map((circle) => {
148
- const projected = projectPoint(circle.center, matrix);
149
- const scaledRadius = circle.radius * Math.abs(matrix.a);
150
- return {
151
- name: "circle",
152
- type: "element",
153
- attributes: {
154
- cx: projected.x.toString(),
155
- cy: projected.y.toString(),
156
- r: scaledRadius.toString(),
157
- fill: circle.fill || "none",
158
- stroke: circle.stroke || "black"
159
- }
160
- };
161
- }),
162
- // Crosshair lines and coordinates (initially hidden)
163
- {
164
- name: "g",
165
- type: "element",
166
- attributes: {
167
- id: "crosshair",
168
- style: "display: none"
169
- },
170
- children: [
171
- {
172
- name: "line",
173
- type: "element",
174
- attributes: {
175
- id: "crosshair-h",
176
- y1: "0",
177
- y2: DEFAULT_SVG_SIZE.toString(),
178
- stroke: "#666",
179
- "stroke-width": "0.5"
180
- }
181
- },
182
- {
183
- name: "line",
184
- type: "element",
185
- attributes: {
186
- id: "crosshair-v",
187
- x1: "0",
188
- x2: DEFAULT_SVG_SIZE.toString(),
189
- stroke: "#666",
190
- "stroke-width": "0.5"
191
- }
192
- },
193
- {
194
- name: "text",
195
- type: "element",
196
- attributes: {
197
- id: "coordinates",
198
- "font-family": "monospace",
199
- "font-size": "12",
200
- fill: "#666"
201
- },
202
- children: [{ type: "text", value: "" }]
203
- }
204
- ]
205
- },
206
- // Mouse tracking script
207
- {
208
- name: "script",
209
- type: "element",
210
- children: [
211
- {
212
- type: "text",
213
- value: `
214
- document.currentScript.parentElement.addEventListener('mousemove', (e) => {
215
- const svg = e.currentTarget;
216
- const rect = svg.getBoundingClientRect();
217
- const x = e.clientX - rect.left;
218
- const y = e.clientY - rect.top;
219
- const crosshair = svg.getElementById('crosshair');
220
- const h = svg.getElementById('crosshair-h');
221
- const v = svg.getElementById('crosshair-v');
222
- const coords = svg.getElementById('coordinates');
223
-
224
- crosshair.style.display = 'block';
225
- h.setAttribute('x1', '0');
226
- h.setAttribute('x2', '${DEFAULT_SVG_SIZE}');
227
- h.setAttribute('y1', y);
228
- h.setAttribute('y2', y);
229
- v.setAttribute('x1', x);
230
- v.setAttribute('x2', x);
231
- v.setAttribute('y1', '0');
232
- v.setAttribute('y2', '${DEFAULT_SVG_SIZE}');
233
-
234
- // Calculate real coordinates using inverse transformation
235
- const matrix = ${JSON.stringify(matrix)};
236
- // Manually invert and apply the affine transform
237
- // Since we only use translate and scale, we can directly compute:
238
- // x' = (x - tx) / sx
239
- // y' = (y - ty) / sy
240
- const sx = matrix.a;
241
- const sy = matrix.d;
242
- const tx = matrix.e;
243
- const ty = matrix.f;
244
- const realPoint = {
245
- x: (x - tx) / sx,
246
- y: -(y - ty) / sy // Flip y back since we used negative scale
247
- }
248
-
249
- coords.textContent = \`(\${realPoint.x.toFixed(2)}, \${realPoint.y.toFixed(2)})\`;
250
- coords.setAttribute('x', (x + 5).toString());
251
- coords.setAttribute('y', (y - 5).toString());
252
- });
253
- document.currentScript.parentElement.addEventListener('mouseleave', () => {
254
- document.currentScript.parentElement.getElementById('crosshair').style.display = 'none';
255
- });
256
- `
257
- }
258
- ]
259
- }
260
- ]
261
- };
262
- return pretty(stringify(svgObject));
263
- }
264
-
265
- export {
266
- getSvgFromGraphicsObject
267
- };
268
- //# sourceMappingURL=chunk-J2MYQBX3.js.map
@@ -1 +0,0 @@
1
- {"version":3,"sources":["../lib/getSvgFromGraphicsObject.ts"],"sourcesContent":["import {\n transform,\n compose,\n translate,\n scale,\n applyToPoint,\n identity,\n type Matrix,\n} from \"transformation-matrix\"\nimport type { GraphicsObject, Point } from \"./types\"\nimport { stringify } from \"svgson\"\nimport pretty from \"pretty\"\n\nconst DEFAULT_SVG_SIZE = 640\nconst PADDING = 40\n\ninterface Bounds {\n minX: number\n maxX: number\n minY: number\n maxY: number\n}\n\nfunction getBounds(graphics: GraphicsObject[\"graphics\"]): Bounds {\n const points: Point[] = [\n ...(graphics.points || []),\n ...(graphics.lines || []).flatMap((line) => line.points),\n ...(graphics.rects || []).flatMap((rect) => {\n const halfWidth = rect.width / 2\n const halfHeight = rect.height / 2\n return [\n { x: rect.centerX - halfWidth, y: rect.centerY - halfHeight },\n { x: rect.centerX + halfWidth, y: rect.centerY - halfHeight },\n { x: rect.centerX - halfWidth, y: rect.centerY + halfHeight },\n { x: rect.centerX + halfWidth, y: rect.centerY + halfHeight },\n ]\n }),\n ...(graphics.circles || []).flatMap((circle) => [\n { x: circle.center.x - circle.radius, y: circle.center.y }, // left\n { x: circle.center.x + circle.radius, y: circle.center.y }, // right\n { x: circle.center.x, y: circle.center.y - circle.radius }, // top\n { x: circle.center.x, y: circle.center.y + circle.radius }, // bottom\n ]),\n ]\n\n if (points.length === 0) {\n return { minX: -1, maxX: 1, minY: -1, maxY: 1 }\n }\n\n return points.reduce(\n (bounds, point) => ({\n minX: Math.min(bounds.minX, point.x),\n maxX: Math.max(bounds.maxX, point.x),\n minY: Math.min(bounds.minY, point.y),\n maxY: Math.max(bounds.maxY, point.y),\n }),\n { minX: Infinity, maxX: -Infinity, minY: Infinity, maxY: -Infinity },\n )\n}\n\nfunction getProjectionMatrix(\n bounds: Bounds,\n coordinateSystem: GraphicsObject[\"graphics\"][\"coordinateSystem\"],\n) {\n const width = bounds.maxX - bounds.minX\n const height = bounds.maxY - bounds.minY\n\n const scale_factor = Math.min(\n (DEFAULT_SVG_SIZE - 2 * PADDING) / width,\n (DEFAULT_SVG_SIZE - 2 * PADDING) / height,\n )\n\n return compose(\n translate(DEFAULT_SVG_SIZE / 2, DEFAULT_SVG_SIZE / 2),\n scale(\n scale_factor,\n coordinateSystem === \"screen\" ? -scale_factor : scale_factor,\n ),\n translate(-(bounds.minX + width / 2), -(bounds.minY + height / 2)),\n )\n}\n\nfunction projectPoint(point: Point, matrix: Matrix) {\n const projected = applyToPoint(matrix, { x: point.x, y: point.y })\n return { ...point, ...projected }\n}\n\nexport function getSvgFromGraphicsObject(graphicsObj: GraphicsObject): string {\n const { graphics } = graphicsObj\n const bounds = getBounds(graphics)\n const matrix = compose(getProjectionMatrix(bounds, graphics.coordinateSystem))\n\n const svgObject = {\n name: \"svg\",\n type: \"element\",\n attributes: {\n width: DEFAULT_SVG_SIZE.toString(),\n height: DEFAULT_SVG_SIZE.toString(),\n viewBox: `0 0 ${DEFAULT_SVG_SIZE} ${DEFAULT_SVG_SIZE}`,\n xmlns: \"http://www.w3.org/2000/svg\",\n },\n children: [\n // Points\n ...(graphics.points || []).map((point) => {\n const projected = projectPoint(point, matrix)\n return {\n name: \"g\",\n type: \"element\",\n children: [\n {\n name: \"circle\",\n type: \"element\",\n attributes: {\n cx: projected.x.toString(),\n cy: projected.y.toString(),\n r: \"3\",\n fill: point.color || \"black\",\n },\n },\n ...(point.label\n ? [\n {\n name: \"text\",\n type: \"element\",\n attributes: {\n x: (projected.x + 5).toString(),\n y: (projected.y - 5).toString(),\n \"font-family\": \"sans-serif\",\n \"font-size\": \"12\",\n },\n children: [{ type: \"text\", value: point.label }],\n },\n ]\n : []),\n ],\n }\n }),\n // Lines\n ...(graphics.lines || []).map((line) => ({\n name: \"polyline\",\n type: \"element\",\n attributes: {\n points: line.points\n .map((p) => projectPoint(p, matrix))\n .map((p) => `${p.x},${p.y}`)\n .join(\" \"),\n fill: \"none\",\n stroke: \"black\",\n \"stroke-width\": (line.points[0].stroke || 1).toString(),\n },\n })),\n // Rectangles\n ...(graphics.rects || []).map((rect) => {\n const projected = projectPoint({x: rect.centerX, y: rect.centerY}, matrix)\n const scaledWidth = rect.width * matrix.a\n const scaledHeight = rect.height * matrix.d\n return {\n name: \"rect\",\n type: \"element\",\n attributes: {\n x: (projected.x - scaledWidth / 2).toString(),\n y: (projected.y - scaledHeight / 2).toString(),\n width: scaledWidth.toString(),\n height: Math.abs(scaledHeight).toString(),\n fill: rect.fill || \"none\",\n stroke: rect.stroke || \"black\",\n },\n }\n }),\n // Circles\n ...(graphics.circles || []).map((circle) => {\n const projected = projectPoint(circle.center, matrix)\n const scaledRadius = circle.radius * Math.abs(matrix.a)\n return {\n name: \"circle\",\n type: \"element\",\n attributes: {\n cx: projected.x.toString(),\n cy: projected.y.toString(),\n r: scaledRadius.toString(),\n fill: circle.fill || \"none\",\n stroke: circle.stroke || \"black\",\n },\n }\n }),\n // Crosshair lines and coordinates (initially hidden)\n {\n name: \"g\",\n type: \"element\",\n attributes: {\n id: \"crosshair\",\n style: \"display: none\",\n },\n children: [\n {\n name: \"line\",\n type: \"element\",\n attributes: {\n id: \"crosshair-h\",\n y1: \"0\",\n y2: DEFAULT_SVG_SIZE.toString(),\n stroke: \"#666\",\n \"stroke-width\": \"0.5\",\n },\n },\n {\n name: \"line\",\n type: \"element\",\n attributes: {\n id: \"crosshair-v\",\n x1: \"0\",\n x2: DEFAULT_SVG_SIZE.toString(),\n stroke: \"#666\",\n \"stroke-width\": \"0.5\",\n },\n },\n {\n name: \"text\",\n type: \"element\",\n attributes: {\n id: \"coordinates\",\n \"font-family\": \"monospace\",\n \"font-size\": \"12\",\n fill: \"#666\",\n },\n children: [{ type: \"text\", value: \"\" }],\n },\n ],\n },\n // Mouse tracking script\n {\n name: \"script\",\n type: \"element\",\n children: [\n {\n type: \"text\",\n value: `\n document.currentScript.parentElement.addEventListener('mousemove', (e) => {\n const svg = e.currentTarget;\n const rect = svg.getBoundingClientRect();\n const x = e.clientX - rect.left;\n const y = e.clientY - rect.top;\n const crosshair = svg.getElementById('crosshair');\n const h = svg.getElementById('crosshair-h');\n const v = svg.getElementById('crosshair-v');\n const coords = svg.getElementById('coordinates');\n \n crosshair.style.display = 'block';\n h.setAttribute('x1', '0');\n h.setAttribute('x2', '${DEFAULT_SVG_SIZE}');\n h.setAttribute('y1', y);\n h.setAttribute('y2', y);\n v.setAttribute('x1', x);\n v.setAttribute('x2', x);\n v.setAttribute('y1', '0');\n v.setAttribute('y2', '${DEFAULT_SVG_SIZE}');\n\n // Calculate real coordinates using inverse transformation\n const matrix = ${JSON.stringify(matrix)};\n // Manually invert and apply the affine transform\n // Since we only use translate and scale, we can directly compute:\n // x' = (x - tx) / sx\n // y' = (y - ty) / sy\n const sx = matrix.a;\n const sy = matrix.d;\n const tx = matrix.e; \n const ty = matrix.f;\n const realPoint = {\n x: (x - tx) / sx,\n y: -(y - ty) / sy // Flip y back since we used negative scale\n }\n \n coords.textContent = \\`(\\${realPoint.x.toFixed(2)}, \\${realPoint.y.toFixed(2)})\\`;\n coords.setAttribute('x', (x + 5).toString());\n coords.setAttribute('y', (y - 5).toString());\n });\n document.currentScript.parentElement.addEventListener('mouseleave', () => {\n document.currentScript.parentElement.getElementById('crosshair').style.display = 'none';\n });\n `,\n },\n ],\n },\n ],\n }\n\n // biome-ignore lint/suspicious/noExplicitAny: TODO\n return pretty(stringify(svgObject as any))\n}\n"],"mappings":"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","names":[]}
@@ -1,56 +0,0 @@
1
- import {
2
- getGraphicsObjectsFromLogString
3
- } from "./chunk-646ISP7J.js";
4
- import {
5
- getSvgFromGraphicsObject
6
- } from "./chunk-J2MYQBX3.js";
7
-
8
- // lib/index.ts
9
- function getSvgFromLogString(logString) {
10
- const objects = getGraphicsObjectsFromLogString(logString);
11
- if (objects.length === 0) return "";
12
- return getSvgFromGraphicsObject(objects[0]);
13
- }
14
- function getHtmlFromLogString(logString) {
15
- const svgs = getSvgsFromLogString(logString);
16
- if (svgs.length === 0) return "";
17
- const sections = svgs.map(
18
- ({ title, svg }) => `
19
- <section>
20
- <h2>${title}</h2>
21
- ${svg}
22
- </section>
23
- `
24
- ).join("\n");
25
- return `
26
- <!DOCTYPE html>
27
- <html>
28
- <head>
29
- <title>Graphics Debug Output</title>
30
- <style>
31
- body { font-family: system-ui; max-width: 1200px; margin: 0 auto; padding: 20px; }
32
- h1 { color: #333; }
33
- section { margin: 40px 0; }
34
- svg { max-width: 100%; height: auto; border: 1px solid #eee; }
35
- </style>
36
- </head>
37
- <body>
38
- <h1>Graphics Debug Output</h1>
39
- ${sections}
40
- </body>
41
- </html>`;
42
- }
43
- function getSvgsFromLogString(logString) {
44
- const objects = getGraphicsObjectsFromLogString(logString);
45
- return objects.map((obj) => ({
46
- title: obj.graphics.title || "Untitled Graphic",
47
- svg: getSvgFromGraphicsObject(obj)
48
- }));
49
- }
50
-
51
- export {
52
- getSvgFromLogString,
53
- getHtmlFromLogString,
54
- getSvgsFromLogString
55
- };
56
- //# sourceMappingURL=chunk-MJCYFLWQ.js.map
@@ -1 +0,0 @@
1
- {"version":3,"sources":["../lib/index.ts"],"sourcesContent":["import { getGraphicsObjectsFromLogString } from \"./getGraphicsObjectsFromLogString\"\nimport { getSvgFromGraphicsObject } from \"./getSvgFromGraphicsObject\"\n\nexport type { Point, Line, Rect, Circle, GraphicsObject } from \"./types\"\nexport { getGraphicsObjectsFromLogString } from \"./getGraphicsObjectsFromLogString\"\nexport { getSvgFromGraphicsObject } from \"./getSvgFromGraphicsObject\"\n\nexport function getSvgFromLogString(logString: string): string {\n const objects = getGraphicsObjectsFromLogString(logString)\n if (objects.length === 0) return \"\"\n return getSvgFromGraphicsObject(objects[0])\n}\n\nexport function getHtmlFromLogString(logString: string): string {\n const svgs = getSvgsFromLogString(logString)\n if (svgs.length === 0) return \"\"\n\n const sections = svgs\n .map(\n ({ title, svg }) => `\n <section>\n <h2>${title}</h2>\n ${svg}\n </section>\n `,\n )\n .join(\"\\n\")\n\n return `\n<!DOCTYPE html>\n<html>\n<head>\n <title>Graphics Debug Output</title>\n <style>\n body { font-family: system-ui; max-width: 1200px; margin: 0 auto; padding: 20px; }\n h1 { color: #333; }\n section { margin: 40px 0; }\n svg { max-width: 100%; height: auto; border: 1px solid #eee; }\n </style>\n</head>\n<body>\n <h1>Graphics Debug Output</h1>\n ${sections}\n</body>\n</html>`\n}\n\nexport function getSvgsFromLogString(\n logString: string,\n): Array<{ title: string; svg: string }> {\n const objects = getGraphicsObjectsFromLogString(logString)\n return objects.map((obj) => ({\n title: obj.graphics.title || \"Untitled Graphic\",\n svg: getSvgFromGraphicsObject(obj),\n }))\n}\n"],"mappings":";;;;;;;;AAOO,SAAS,oBAAoB,WAA2B;AAC7D,QAAM,UAAU,gCAAgC,SAAS;AACzD,MAAI,QAAQ,WAAW,EAAG,QAAO;AACjC,SAAO,yBAAyB,QAAQ,CAAC,CAAC;AAC5C;AAEO,SAAS,qBAAqB,WAA2B;AAC9D,QAAM,OAAO,qBAAqB,SAAS;AAC3C,MAAI,KAAK,WAAW,EAAG,QAAO;AAE9B,QAAM,WAAW,KACd;AAAA,IACC,CAAC,EAAE,OAAO,IAAI,MAAM;AAAA;AAAA,YAEd,KAAK;AAAA,QACT,GAAG;AAAA;AAAA;AAAA,EAGP,EACC,KAAK,IAAI;AAEZ,SAAO;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,IAcL,QAAQ;AAAA;AAAA;AAGZ;AAEO,SAAS,qBACd,WACuC;AACvC,QAAM,UAAU,gCAAgC,SAAS;AACzD,SAAO,QAAQ,IAAI,CAAC,SAAS;AAAA,IAC3B,OAAO,IAAI,SAAS,SAAS;AAAA,IAC7B,KAAK,yBAAyB,GAAG;AAAA,EACnC,EAAE;AACJ;","names":[]}