@oh-just-another/templates 0.57.0

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.
Files changed (97) hide show
  1. package/CHANGELOG.md +15 -0
  2. package/LICENSE +21 -0
  3. package/README.md +73 -0
  4. package/dist/.tsbuildinfo +1 -0
  5. package/dist/built-in.d.ts +16 -0
  6. package/dist/built-in.d.ts.map +1 -0
  7. package/dist/built-in.js +204 -0
  8. package/dist/built-in.js.map +1 -0
  9. package/dist/constants.d.ts +11 -0
  10. package/dist/constants.d.ts.map +1 -0
  11. package/dist/constants.js +11 -0
  12. package/dist/constants.js.map +1 -0
  13. package/dist/icons.d.ts +21 -0
  14. package/dist/icons.d.ts.map +1 -0
  15. package/dist/icons.js +24 -0
  16. package/dist/icons.js.map +1 -0
  17. package/dist/index.d.ts +10 -0
  18. package/dist/index.d.ts.map +1 -0
  19. package/dist/index.js +10 -0
  20. package/dist/index.js.map +1 -0
  21. package/dist/library.d.ts +29 -0
  22. package/dist/library.d.ts.map +1 -0
  23. package/dist/library.js +60 -0
  24. package/dist/library.js.map +1 -0
  25. package/dist/registry.d.ts +27 -0
  26. package/dist/registry.d.ts.map +1 -0
  27. package/dist/registry.js +48 -0
  28. package/dist/registry.js.map +1 -0
  29. package/dist/rich/binding.d.ts +10 -0
  30. package/dist/rich/binding.d.ts.map +1 -0
  31. package/dist/rich/binding.js +42 -0
  32. package/dist/rich/binding.js.map +1 -0
  33. package/dist/rich/bounds.d.ts +16 -0
  34. package/dist/rich/bounds.d.ts.map +1 -0
  35. package/dist/rich/bounds.js +13 -0
  36. package/dist/rich/bounds.js.map +1 -0
  37. package/dist/rich/define.d.ts +44 -0
  38. package/dist/rich/define.d.ts.map +1 -0
  39. package/dist/rich/define.js +3 -0
  40. package/dist/rich/define.js.map +1 -0
  41. package/dist/rich/drop-zones.d.ts +25 -0
  42. package/dist/rich/drop-zones.d.ts.map +1 -0
  43. package/dist/rich/drop-zones.js +63 -0
  44. package/dist/rich/drop-zones.js.map +1 -0
  45. package/dist/rich/extends.d.ts +35 -0
  46. package/dist/rich/extends.d.ts.map +1 -0
  47. package/dist/rich/extends.js +46 -0
  48. package/dist/rich/extends.js.map +1 -0
  49. package/dist/rich/hit-test.d.ts +14 -0
  50. package/dist/rich/hit-test.d.ts.map +1 -0
  51. package/dist/rich/hit-test.js +53 -0
  52. package/dist/rich/hit-test.js.map +1 -0
  53. package/dist/rich/index.d.ts +22 -0
  54. package/dist/rich/index.d.ts.map +1 -0
  55. package/dist/rich/index.js +15 -0
  56. package/dist/rich/index.js.map +1 -0
  57. package/dist/rich/interactive.d.ts +44 -0
  58. package/dist/rich/interactive.d.ts.map +1 -0
  59. package/dist/rich/interactive.js +80 -0
  60. package/dist/rich/interactive.js.map +1 -0
  61. package/dist/rich/layout.d.ts +44 -0
  62. package/dist/rich/layout.d.ts.map +1 -0
  63. package/dist/rich/layout.js +418 -0
  64. package/dist/rich/layout.js.map +1 -0
  65. package/dist/rich/node.d.ts +96 -0
  66. package/dist/rich/node.d.ts.map +1 -0
  67. package/dist/rich/node.js +7 -0
  68. package/dist/rich/node.js.map +1 -0
  69. package/dist/rich/ports.d.ts +19 -0
  70. package/dist/rich/ports.d.ts.map +1 -0
  71. package/dist/rich/ports.js +52 -0
  72. package/dist/rich/ports.js.map +1 -0
  73. package/dist/rich/registry.d.ts +19 -0
  74. package/dist/rich/registry.d.ts.map +1 -0
  75. package/dist/rich/registry.js +35 -0
  76. package/dist/rich/registry.js.map +1 -0
  77. package/dist/rich/render.d.ts +19 -0
  78. package/dist/rich/render.d.ts.map +1 -0
  79. package/dist/rich/render.js +306 -0
  80. package/dist/rich/render.js.map +1 -0
  81. package/dist/rich/style.d.ts +126 -0
  82. package/dist/rich/style.d.ts.map +1 -0
  83. package/dist/rich/style.js +35 -0
  84. package/dist/rich/style.js.map +1 -0
  85. package/dist/rich/svg.d.ts +90 -0
  86. package/dist/rich/svg.d.ts.map +1 -0
  87. package/dist/rich/svg.js +415 -0
  88. package/dist/rich/svg.js.map +1 -0
  89. package/dist/spec.d.ts +2789 -0
  90. package/dist/spec.d.ts.map +1 -0
  91. package/dist/spec.js +239 -0
  92. package/dist/spec.js.map +1 -0
  93. package/dist/types.d.ts +57 -0
  94. package/dist/types.d.ts.map +1 -0
  95. package/dist/types.js +2 -0
  96. package/dist/types.js.map +1 -0
  97. package/package.json +57 -0
@@ -0,0 +1,415 @@
1
+ /**
2
+ * Tiny SVG parser + painter for rich-template `Icon` nodes.
3
+ *
4
+ * Scope: just enough to render the icon strings the demo and built-in
5
+ * templates produce. **Not** a complete SVG implementation — there's no
6
+ * CSS, no nested `<defs>`/`<use>`, no gradients, no text, no images, and
7
+ * the parser uses regex over the raw markup rather than a real XML
8
+ * tokenizer. For richer icons hosts can register a custom shape renderer.
9
+ *
10
+ * Pure: no DOMParser, runs in Node and the browser the same way.
11
+ */
12
+ /** Index-access helper: asserts a provably-valid index is present. */
13
+ const req = (v) => {
14
+ if (v === undefined)
15
+ throw new Error("packages/templates: index out of range");
16
+ return v;
17
+ };
18
+ /**
19
+ * Parse an SVG markup string. Returns `null` if the input is unrecognisable.
20
+ * `currentColor` in `fill` / `stroke` is replaced with `defaultColor` so the
21
+ * painter doesn't need to track context.
22
+ */
23
+ export const parseSvg = (markup, defaultColor = "#222") => {
24
+ const svgMatch = /<svg\b([^>]*)>([\s\S]*?)<\/svg>/i.exec(markup);
25
+ if (!svgMatch)
26
+ return null;
27
+ const svgAttrs = parseAttrs(svgMatch[1] ?? "");
28
+ const viewBox = parseViewBox(svgAttrs.viewBox) ?? { x: 0, y: 0, width: 24, height: 24 };
29
+ const rootPaint = {
30
+ fill: normaliseColor(svgAttrs.fill ?? null, defaultColor),
31
+ stroke: normaliseColor(svgAttrs.stroke ?? null, defaultColor),
32
+ strokeWidth: toNumber(svgAttrs["stroke-width"], 1),
33
+ };
34
+ const body = svgMatch[2] ?? "";
35
+ const elements = [];
36
+ collect(body, rootPaint, elements, defaultColor);
37
+ return { viewBox, elements };
38
+ };
39
+ const collect = (body, inherit, out, defaultColor) => {
40
+ // Walk top-level elements with a regex that captures self-closing and
41
+ // open-close pairs (for `<g>`). Order matters because nested `<g>` need
42
+ // their own paint inheritance applied first.
43
+ const elRe = /<(g|path|rect|circle|ellipse|line|polyline|polygon)\b([^>]*?)(\/>|>([\s\S]*?)<\/\1>)/gi;
44
+ let m;
45
+ while ((m = elRe.exec(body)) !== null) {
46
+ const tag = (m[1] ?? "").toLowerCase();
47
+ const attrs = parseAttrs(m[2] ?? "");
48
+ const paint = mergePaint(inherit, attrs, defaultColor);
49
+ if (tag === "g") {
50
+ const inner = m[4] ?? "";
51
+ collect(inner, paint, out, defaultColor);
52
+ continue;
53
+ }
54
+ if (tag === "path") {
55
+ const commands = parsePathData(attrs.d ?? "");
56
+ if (commands.length > 0)
57
+ out.push({ kind: "path", commands, paint });
58
+ continue;
59
+ }
60
+ if (tag === "polygon" || tag === "polyline") {
61
+ const points = parsePoints(attrs.points ?? "");
62
+ if (points.length > 0)
63
+ out.push({ kind: tag, points, paint });
64
+ continue;
65
+ }
66
+ // Primitive shapes (rect/circle/ellipse/line). Keep numeric attrs only.
67
+ const numericAttrs = {};
68
+ for (const [k, v] of Object.entries(attrs)) {
69
+ const n = parseFloat(v);
70
+ if (!Number.isNaN(n))
71
+ numericAttrs[k] = n;
72
+ }
73
+ out.push({ kind: tag, attrs: numericAttrs, paint });
74
+ }
75
+ };
76
+ /**
77
+ * Paint a parsed icon into the given bounds. The painter scales the viewBox
78
+ * uniformly with `slice` semantics — preserving aspect ratio and centering.
79
+ */
80
+ export const paintSvgIcon = (icon, bounds, target) => {
81
+ if (bounds.width <= 0 || bounds.height <= 0)
82
+ return;
83
+ const sx = bounds.width / icon.viewBox.width;
84
+ const sy = bounds.height / icon.viewBox.height;
85
+ const s = Math.min(sx, sy);
86
+ const offsetX = bounds.x + (bounds.width - icon.viewBox.width * s) / 2;
87
+ const offsetY = bounds.y + (bounds.height - icon.viewBox.height * s) / 2;
88
+ target.save();
89
+ target.translate(offsetX, offsetY);
90
+ target.scale(s, s);
91
+ target.translate(-icon.viewBox.x, -icon.viewBox.y);
92
+ for (const el of icon.elements) {
93
+ paintElement(el, target);
94
+ }
95
+ target.restore();
96
+ };
97
+ const paintElement = (el, target) => {
98
+ switch (el.kind) {
99
+ case "path":
100
+ paintPath(el, target);
101
+ return;
102
+ case "polygon":
103
+ case "polyline":
104
+ paintPolygon(el, target);
105
+ return;
106
+ case "rect":
107
+ paintRect(el, target);
108
+ return;
109
+ case "circle":
110
+ paintCircle(el, target);
111
+ return;
112
+ case "ellipse":
113
+ paintEllipse(el, target);
114
+ return;
115
+ case "line":
116
+ paintLine(el, target);
117
+ return;
118
+ }
119
+ };
120
+ const paintPath = (el, target) => {
121
+ applyPaint(el.paint, target);
122
+ target.beginPath();
123
+ for (const c of el.commands) {
124
+ switch (c.kind) {
125
+ case "move":
126
+ target.moveTo(c.x, c.y);
127
+ break;
128
+ case "line":
129
+ target.lineTo(c.x, c.y);
130
+ break;
131
+ case "quad":
132
+ target.quadraticCurveTo(c.cx, c.cy, c.x, c.y);
133
+ break;
134
+ case "cubic":
135
+ target.bezierCurveTo(c.c1x, c.c1y, c.c2x, c.c2y, c.x, c.y);
136
+ break;
137
+ case "close":
138
+ target.closePath();
139
+ break;
140
+ }
141
+ }
142
+ if (el.paint.fill)
143
+ target.fill();
144
+ if (el.paint.stroke)
145
+ target.stroke();
146
+ };
147
+ const paintPolygon = (el, target) => {
148
+ const first = el.points[0];
149
+ if (first === undefined)
150
+ return;
151
+ applyPaint(el.paint, target);
152
+ target.beginPath();
153
+ target.moveTo(first.x, first.y);
154
+ for (let i = 1; i < el.points.length; i++) {
155
+ const p = req(el.points[i]);
156
+ target.lineTo(p.x, p.y);
157
+ }
158
+ if (el.kind === "polygon")
159
+ target.closePath();
160
+ if (el.paint.fill)
161
+ target.fill();
162
+ if (el.paint.stroke)
163
+ target.stroke();
164
+ };
165
+ const paintRect = (el, target) => {
166
+ const x = el.attrs.x ?? 0;
167
+ const y = el.attrs.y ?? 0;
168
+ const w = el.attrs.width ?? 0;
169
+ const h = el.attrs.height ?? 0;
170
+ applyPaint(el.paint, target);
171
+ target.beginPath();
172
+ target.rect(x, y, w, h);
173
+ if (el.paint.fill)
174
+ target.fill();
175
+ if (el.paint.stroke)
176
+ target.stroke();
177
+ };
178
+ const paintCircle = (el, target) => {
179
+ const cx = el.attrs.cx ?? 0;
180
+ const cy = el.attrs.cy ?? 0;
181
+ const r = el.attrs.r ?? 0;
182
+ applyPaint(el.paint, target);
183
+ target.beginPath();
184
+ target.ellipse(cx, cy, r, r);
185
+ if (el.paint.fill)
186
+ target.fill();
187
+ if (el.paint.stroke)
188
+ target.stroke();
189
+ };
190
+ const paintEllipse = (el, target) => {
191
+ const cx = el.attrs.cx ?? 0;
192
+ const cy = el.attrs.cy ?? 0;
193
+ const rx = el.attrs.rx ?? 0;
194
+ const ry = el.attrs.ry ?? 0;
195
+ applyPaint(el.paint, target);
196
+ target.beginPath();
197
+ target.ellipse(cx, cy, rx, ry);
198
+ if (el.paint.fill)
199
+ target.fill();
200
+ if (el.paint.stroke)
201
+ target.stroke();
202
+ };
203
+ const paintLine = (el, target) => {
204
+ const x1 = el.attrs.x1 ?? 0;
205
+ const y1 = el.attrs.y1 ?? 0;
206
+ const x2 = el.attrs.x2 ?? 0;
207
+ const y2 = el.attrs.y2 ?? 0;
208
+ applyPaint(el.paint, target);
209
+ target.beginPath();
210
+ target.moveTo(x1, y1);
211
+ target.lineTo(x2, y2);
212
+ if (el.paint.stroke)
213
+ target.stroke();
214
+ };
215
+ const applyPaint = (paint, target) => {
216
+ if (paint.fill)
217
+ target.setFill(paint.fill);
218
+ if (paint.stroke)
219
+ target.setStroke(paint.stroke);
220
+ target.setStrokeWidth(paint.strokeWidth);
221
+ };
222
+ // --- Helpers ---
223
+ const parseAttrs = (s) => {
224
+ const out = {};
225
+ const re = /([a-zA-Z_:][\w:.-]*)\s*=\s*"([^"]*)"/g;
226
+ let m;
227
+ while ((m = re.exec(s)) !== null)
228
+ out[m[1] ?? ""] = m[2] ?? "";
229
+ return out;
230
+ };
231
+ const parseViewBox = (value) => {
232
+ if (!value)
233
+ return null;
234
+ const parts = value
235
+ .trim()
236
+ .split(/[\s,]+/)
237
+ .map(Number);
238
+ if (parts.length !== 4 || parts.some(Number.isNaN))
239
+ return null;
240
+ return { x: req(parts[0]), y: req(parts[1]), width: req(parts[2]), height: req(parts[3]) };
241
+ };
242
+ const parsePoints = (value) => {
243
+ const nums = value
244
+ .trim()
245
+ .split(/[\s,]+/)
246
+ .map(Number)
247
+ .filter((n) => !Number.isNaN(n));
248
+ const out = [];
249
+ for (let i = 0; i + 1 < nums.length; i += 2)
250
+ out.push({ x: req(nums[i]), y: req(nums[i + 1]) });
251
+ return out;
252
+ };
253
+ const mergePaint = (inherit, attrs, defaultColor) => ({
254
+ fill: attrs.fill !== undefined ? normaliseColor(attrs.fill, defaultColor) : inherit.fill,
255
+ stroke: attrs.stroke !== undefined ? normaliseColor(attrs.stroke, defaultColor) : inherit.stroke,
256
+ strokeWidth: attrs["stroke-width"] !== undefined
257
+ ? toNumber(attrs["stroke-width"], inherit.strokeWidth)
258
+ : inherit.strokeWidth,
259
+ });
260
+ const normaliseColor = (raw, defaultColor) => {
261
+ if (raw === null)
262
+ return null;
263
+ const v = raw.trim().toLowerCase();
264
+ if (v === "none")
265
+ return null;
266
+ if (v === "currentcolor")
267
+ return defaultColor;
268
+ return raw;
269
+ };
270
+ const toNumber = (raw, fallback) => {
271
+ if (raw === undefined)
272
+ return fallback;
273
+ const n = parseFloat(raw);
274
+ return Number.isFinite(n) ? n : fallback;
275
+ };
276
+ // --- Path data parser ---
277
+ /**
278
+ * Parse SVG path `d` attribute into our command sequence. Supports M/L/H/V/
279
+ * C/Q/Z and their relative forms (m/l/h/v/c/q/z). Repeated coordinate sets
280
+ * after M default to L (per the SVG spec). Arc (`A/a`), smooth cubics
281
+ * (`S/s`) and smooth quads (`T/t`) are **not** supported — they return
282
+ * an incomplete command stream rather than throwing, which is enough for
283
+ * editor-style icons.
284
+ */
285
+ const parsePathData = (d) => {
286
+ const out = [];
287
+ // Tokenize: command letter or number.
288
+ const tokens = d.match(/[MLHVCSQTAZmlhvcsqtaz]|-?\d*\.?\d+(?:[eE][-+]?\d+)?/g);
289
+ if (!tokens)
290
+ return out;
291
+ let i = 0;
292
+ let cx = 0;
293
+ let cy = 0;
294
+ let startX = 0;
295
+ let startY = 0;
296
+ const take = (n) => {
297
+ const r = [];
298
+ for (let k = 0; k < n; k++)
299
+ r.push(parseFloat(req(tokens[i++])));
300
+ return r;
301
+ };
302
+ while (i < tokens.length) {
303
+ const t = req(tokens[i]);
304
+ if (!/^[MLHVCSQTAZmlhvcsqtaz]$/.test(t)) {
305
+ // Numeric without a preceding command: skip.
306
+ i++;
307
+ continue;
308
+ }
309
+ const cmd = t;
310
+ i++;
311
+ while (i < tokens.length && /^-?\d*\.?\d+(?:[eE][-+]?\d+)?$/.test(req(tokens[i]))) {
312
+ switch (cmd) {
313
+ case "M":
314
+ case "m": {
315
+ const [dx, dy] = take(2);
316
+ if (cmd === "M") {
317
+ cx = dx;
318
+ cy = dy;
319
+ }
320
+ else {
321
+ cx += dx;
322
+ cy += dy;
323
+ }
324
+ startX = cx;
325
+ startY = cy;
326
+ out.push({ kind: "move", x: cx, y: cy });
327
+ break;
328
+ }
329
+ case "L":
330
+ case "l": {
331
+ const [dx, dy] = take(2);
332
+ if (cmd === "L") {
333
+ cx = dx;
334
+ cy = dy;
335
+ }
336
+ else {
337
+ cx += dx;
338
+ cy += dy;
339
+ }
340
+ out.push({ kind: "line", x: cx, y: cy });
341
+ break;
342
+ }
343
+ case "H":
344
+ case "h": {
345
+ const [dx] = take(1);
346
+ cx = cmd === "H" ? dx : cx + dx;
347
+ out.push({ kind: "line", x: cx, y: cy });
348
+ break;
349
+ }
350
+ case "V":
351
+ case "v": {
352
+ const [dy] = take(1);
353
+ cy = cmd === "V" ? dy : cy + dy;
354
+ out.push({ kind: "line", x: cx, y: cy });
355
+ break;
356
+ }
357
+ case "C":
358
+ case "c": {
359
+ const [c1x, c1y, c2x, c2y, x, y] = take(6);
360
+ const rel = cmd === "c";
361
+ const C1x = rel ? cx + c1x : c1x;
362
+ const C1y = rel ? cy + c1y : c1y;
363
+ const C2x = rel ? cx + c2x : c2x;
364
+ const C2y = rel ? cy + c2y : c2y;
365
+ const X = rel ? cx + x : x;
366
+ const Y = rel ? cy + y : y;
367
+ out.push({ kind: "cubic", c1x: C1x, c1y: C1y, c2x: C2x, c2y: C2y, x: X, y: Y });
368
+ cx = X;
369
+ cy = Y;
370
+ break;
371
+ }
372
+ case "Q":
373
+ case "q": {
374
+ const [c1x, c1y, x, y] = take(4);
375
+ const rel = cmd === "q";
376
+ const CX = rel ? cx + c1x : c1x;
377
+ const CY = rel ? cy + c1y : c1y;
378
+ const X = rel ? cx + x : x;
379
+ const Y = rel ? cy + y : y;
380
+ out.push({ kind: "quad", cx: CX, cy: CY, x: X, y: Y });
381
+ cx = X;
382
+ cy = Y;
383
+ break;
384
+ }
385
+ case "Z":
386
+ case "z":
387
+ out.push({ kind: "close" });
388
+ cx = startX;
389
+ cy = startY;
390
+ // Z takes no operands; the outer `while` will see the next token
391
+ // as a command letter (or end-of-input) and re-dispatch.
392
+ break;
393
+ case "S":
394
+ case "s":
395
+ case "T":
396
+ case "t":
397
+ case "A":
398
+ case "a":
399
+ // Unsupported — skip remaining numbers as best we can.
400
+ // S/s = 4 nums, T/t = 2, A/a = 7.
401
+ {
402
+ const skip = cmd === "S" || cmd === "s" ? 4 : cmd === "T" || cmd === "t" ? 2 : 7;
403
+ take(skip);
404
+ }
405
+ break;
406
+ default:
407
+ i++;
408
+ }
409
+ if (cmd === "Z" || cmd === "z")
410
+ break;
411
+ }
412
+ }
413
+ return out;
414
+ };
415
+ //# sourceMappingURL=svg.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"svg.js","sourceRoot":"","sources":["../../src/rich/svg.ts"],"names":[],"mappings":"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"}