@oh-just-another/renderer-core 0.60.0 → 0.61.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.
- package/CHANGELOG.md +49 -0
- package/dist/.tsbuildinfo +1 -1
- package/dist/caches/edge-cache-bitmap.d.ts.map +1 -0
- package/dist/caches/edge-cache-bitmap.js.map +1 -0
- package/dist/caches/edge-cache.d.ts.map +1 -0
- package/dist/caches/edge-cache.js.map +1 -0
- package/dist/caches/layer-cache-composite.d.ts.map +1 -0
- package/dist/caches/layer-cache-composite.js.map +1 -0
- package/dist/caches/lru-cache.d.ts.map +1 -0
- package/dist/caches/lru-cache.js.map +1 -0
- package/dist/caches/shape-cache-bitmap.d.ts.map +1 -0
- package/dist/caches/shape-cache-bitmap.js.map +1 -0
- package/dist/caches/shape-cache.d.ts.map +1 -0
- package/dist/caches/shape-cache.js.map +1 -0
- package/dist/caches/tile-renderer.d.ts.map +1 -0
- package/dist/caches/tile-renderer.js.map +1 -0
- package/dist/constants.d.ts +95 -9
- package/dist/constants.d.ts.map +1 -1
- package/dist/constants.js +98 -11
- package/dist/constants.js.map +1 -1
- package/dist/index.d.ts +40 -37
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +24 -21
- package/dist/index.js.map +1 -1
- package/dist/raster/animation-adapter.d.ts.map +1 -0
- package/dist/raster/animation-adapter.js.map +1 -0
- package/dist/raster/image-source-guard.d.ts +2 -0
- package/dist/raster/image-source-guard.d.ts.map +1 -0
- package/dist/raster/image-source-guard.js +44 -0
- package/dist/raster/image-source-guard.js.map +1 -0
- package/dist/raster/js-rasterizer.d.ts.map +1 -0
- package/dist/raster/js-rasterizer.js.map +1 -0
- package/dist/raster/rasterizer.d.ts.map +1 -0
- package/dist/raster/rasterizer.js.map +1 -0
- package/dist/raster/wasm-bytes.d.ts.map +1 -0
- package/dist/raster/wasm-bytes.js.map +1 -0
- package/dist/rendering/built-in-renderers.d.ts +85 -0
- package/dist/rendering/built-in-renderers.d.ts.map +1 -0
- package/dist/rendering/built-in-renderers.js +1087 -0
- package/dist/rendering/built-in-renderers.js.map +1 -0
- package/dist/{edge-renderer.d.ts → rendering/edge-renderer.d.ts} +3 -3
- package/dist/rendering/edge-renderer.d.ts.map +1 -0
- package/dist/{edge-renderer.js → rendering/edge-renderer.js} +4 -4
- package/dist/rendering/edge-renderer.js.map +1 -0
- package/dist/{grid-renderer.d.ts → rendering/grid-renderer.d.ts} +1 -1
- package/dist/rendering/grid-renderer.d.ts.map +1 -0
- package/dist/{grid-renderer.js → rendering/grid-renderer.js} +1 -1
- package/dist/rendering/grid-renderer.js.map +1 -0
- package/dist/rendering/lod.d.ts +26 -0
- package/dist/rendering/lod.d.ts.map +1 -0
- package/dist/rendering/lod.js +5 -0
- package/dist/rendering/lod.js.map +1 -0
- package/dist/{scene-renderer.d.ts → rendering/scene-renderer.d.ts} +21 -21
- package/dist/rendering/scene-renderer.d.ts.map +1 -0
- package/dist/{scene-renderer.js → rendering/scene-renderer.js} +26 -9
- package/dist/rendering/scene-renderer.js.map +1 -0
- package/dist/{shape-renderer.d.ts → rendering/shape-renderer.d.ts} +32 -2
- package/dist/rendering/shape-renderer.d.ts.map +1 -0
- package/dist/rendering/shape-renderer.js.map +1 -0
- package/dist/targets/dim-target.d.ts.map +1 -0
- package/dist/targets/dim-target.js.map +1 -0
- package/dist/targets/layers.d.ts.map +1 -0
- package/dist/targets/layers.js.map +1 -0
- package/dist/{render-target.d.ts → targets/render-target.d.ts} +8 -0
- package/dist/targets/render-target.d.ts.map +1 -0
- package/dist/targets/render-target.js.map +1 -0
- package/dist/{text-editing.d.ts → text/text-editing.d.ts} +22 -1
- package/dist/text/text-editing.d.ts.map +1 -0
- package/dist/{text-editing.js → text/text-editing.js} +53 -12
- package/dist/text/text-editing.js.map +1 -0
- package/dist/{text-layout.d.ts → text/text-layout.d.ts} +1 -1
- package/dist/text/text-layout.d.ts.map +1 -0
- package/dist/text/text-layout.js.map +1 -0
- package/dist/{text-shaper.d.ts → text/text-shaper.d.ts} +9 -1
- package/dist/text/text-shaper.d.ts.map +1 -0
- package/dist/text/text-shaper.js +32 -0
- package/dist/text/text-shaper.js.map +1 -0
- package/package.json +3 -3
- package/dist/animation-adapter.d.ts.map +0 -1
- package/dist/animation-adapter.js.map +0 -1
- package/dist/built-in-renderers.d.ts +0 -25
- package/dist/built-in-renderers.d.ts.map +0 -1
- package/dist/built-in-renderers.js +0 -601
- package/dist/built-in-renderers.js.map +0 -1
- package/dist/dim-target.d.ts.map +0 -1
- package/dist/dim-target.js.map +0 -1
- package/dist/edge-cache-bitmap.d.ts.map +0 -1
- package/dist/edge-cache-bitmap.js.map +0 -1
- package/dist/edge-cache.d.ts.map +0 -1
- package/dist/edge-cache.js.map +0 -1
- package/dist/edge-renderer.d.ts.map +0 -1
- package/dist/edge-renderer.js.map +0 -1
- package/dist/grid-renderer.d.ts.map +0 -1
- package/dist/grid-renderer.js.map +0 -1
- package/dist/js-rasterizer.d.ts.map +0 -1
- package/dist/js-rasterizer.js.map +0 -1
- package/dist/layer-cache-composite.d.ts.map +0 -1
- package/dist/layer-cache-composite.js.map +0 -1
- package/dist/layers.d.ts.map +0 -1
- package/dist/layers.js.map +0 -1
- package/dist/lru-cache.d.ts.map +0 -1
- package/dist/lru-cache.js.map +0 -1
- package/dist/rasterizer.d.ts.map +0 -1
- package/dist/rasterizer.js.map +0 -1
- package/dist/render-target.d.ts.map +0 -1
- package/dist/render-target.js.map +0 -1
- package/dist/scene-renderer.d.ts.map +0 -1
- package/dist/scene-renderer.js.map +0 -1
- package/dist/shape-cache-bitmap.d.ts.map +0 -1
- package/dist/shape-cache-bitmap.js.map +0 -1
- package/dist/shape-cache.d.ts.map +0 -1
- package/dist/shape-cache.js.map +0 -1
- package/dist/shape-renderer.d.ts.map +0 -1
- package/dist/shape-renderer.js.map +0 -1
- package/dist/text-editing.d.ts.map +0 -1
- package/dist/text-editing.js.map +0 -1
- package/dist/text-layout.d.ts.map +0 -1
- package/dist/text-layout.js.map +0 -1
- package/dist/text-shaper.d.ts.map +0 -1
- package/dist/text-shaper.js +0 -16
- package/dist/text-shaper.js.map +0 -1
- package/dist/tile-renderer.d.ts.map +0 -1
- package/dist/tile-renderer.js.map +0 -1
- package/dist/wasm-bytes.d.ts.map +0 -1
- package/dist/wasm-bytes.js.map +0 -1
- /package/dist/{edge-cache-bitmap.d.ts → caches/edge-cache-bitmap.d.ts} +0 -0
- /package/dist/{edge-cache-bitmap.js → caches/edge-cache-bitmap.js} +0 -0
- /package/dist/{edge-cache.d.ts → caches/edge-cache.d.ts} +0 -0
- /package/dist/{edge-cache.js → caches/edge-cache.js} +0 -0
- /package/dist/{layer-cache-composite.d.ts → caches/layer-cache-composite.d.ts} +0 -0
- /package/dist/{layer-cache-composite.js → caches/layer-cache-composite.js} +0 -0
- /package/dist/{lru-cache.d.ts → caches/lru-cache.d.ts} +0 -0
- /package/dist/{lru-cache.js → caches/lru-cache.js} +0 -0
- /package/dist/{shape-cache-bitmap.d.ts → caches/shape-cache-bitmap.d.ts} +0 -0
- /package/dist/{shape-cache-bitmap.js → caches/shape-cache-bitmap.js} +0 -0
- /package/dist/{shape-cache.d.ts → caches/shape-cache.d.ts} +0 -0
- /package/dist/{shape-cache.js → caches/shape-cache.js} +0 -0
- /package/dist/{tile-renderer.d.ts → caches/tile-renderer.d.ts} +0 -0
- /package/dist/{tile-renderer.js → caches/tile-renderer.js} +0 -0
- /package/dist/{animation-adapter.d.ts → raster/animation-adapter.d.ts} +0 -0
- /package/dist/{animation-adapter.js → raster/animation-adapter.js} +0 -0
- /package/dist/{js-rasterizer.d.ts → raster/js-rasterizer.d.ts} +0 -0
- /package/dist/{js-rasterizer.js → raster/js-rasterizer.js} +0 -0
- /package/dist/{rasterizer.d.ts → raster/rasterizer.d.ts} +0 -0
- /package/dist/{rasterizer.js → raster/rasterizer.js} +0 -0
- /package/dist/{wasm-bytes.d.ts → raster/wasm-bytes.d.ts} +0 -0
- /package/dist/{wasm-bytes.js → raster/wasm-bytes.js} +0 -0
- /package/dist/{shape-renderer.js → rendering/shape-renderer.js} +0 -0
- /package/dist/{dim-target.d.ts → targets/dim-target.d.ts} +0 -0
- /package/dist/{dim-target.js → targets/dim-target.js} +0 -0
- /package/dist/{layers.d.ts → targets/layers.d.ts} +0 -0
- /package/dist/{layers.js → targets/layers.js} +0 -0
- /package/dist/{render-target.js → targets/render-target.js} +0 -0
- /package/dist/{text-layout.js → text/text-layout.js} +0 -0
|
@@ -1,601 +0,0 @@
|
|
|
1
|
-
import { polygon as polygonMath } from "@oh-just-another/math";
|
|
2
|
-
import { getCornerRadius, registerRenderOverflow, FRAME_HEADER_HEIGHT, FRAME_HEADER_PADDING_X, FRAME_HEADER_FONT_SIZE, sliceRuns, brushBodyColor, brushOutline, } from "@oh-just-another/scene";
|
|
3
|
-
import { registerElementRenderer } from "./shape-renderer.js";
|
|
4
|
-
import { layoutText } from "./text-editing.js";
|
|
5
|
-
import { resolveImageSource } from "./animation-adapter.js";
|
|
6
|
-
import { TEXT_DECORATION_THICKNESS, TEXT_UNDERLINE_OFFSET, TEXT_STRIKETHROUGH_OFFSET, ARROWHEAD_HEAD_RATIO, ARROWHEAD_BODY_THICKNESS, ARROWHEAD_RATIO_MIN, ARROWHEAD_RATIO_MAX, FRAME_STROKE_COLOR, FRAME_FILL_COLOR, FRAME_HEADER_BG_COLOR, FRAME_HEADER_TEXT_COLOR, } from "./constants.js";
|
|
7
|
-
import { req } from "@oh-just-another/types";
|
|
8
|
-
/**
|
|
9
|
-
* Applies common style fields to a target. Returns whether any fill or stroke
|
|
10
|
-
* was configured — shape renderers use the result to decide which paint call
|
|
11
|
-
* to issue.
|
|
12
|
-
*/
|
|
13
|
-
const applyStyle = (style, target) => {
|
|
14
|
-
const hasFill = style.fill !== undefined && style.fill !== "transparent";
|
|
15
|
-
const hasStroke = style.stroke !== undefined && style.stroke !== "transparent" && (style.strokeWidth ?? 1) > 0;
|
|
16
|
-
if (hasFill)
|
|
17
|
-
target.setFill(style.fill);
|
|
18
|
-
if (hasStroke) {
|
|
19
|
-
target.setStroke(style.stroke);
|
|
20
|
-
target.setStrokeWidth(style.strokeWidth ?? 1);
|
|
21
|
-
if (style.lineCap)
|
|
22
|
-
target.setLineCap(style.lineCap);
|
|
23
|
-
if (style.lineJoin)
|
|
24
|
-
target.setLineJoin(style.lineJoin);
|
|
25
|
-
if (style.dashArray)
|
|
26
|
-
target.setDashArray(style.dashArray);
|
|
27
|
-
}
|
|
28
|
-
if (style.opacity !== undefined)
|
|
29
|
-
target.setOpacity(style.opacity);
|
|
30
|
-
return { fill: hasFill, stroke: hasStroke };
|
|
31
|
-
};
|
|
32
|
-
const drawRectangle = (shape, target) => {
|
|
33
|
-
const { fill, stroke } = applyStyle(shape.style, target);
|
|
34
|
-
if (!fill && !stroke)
|
|
35
|
-
return;
|
|
36
|
-
const r = getCornerRadius(shape.style.roundness, shape.width, shape.height);
|
|
37
|
-
// Fill path — always uses the original shape geometry.
|
|
38
|
-
if (fill) {
|
|
39
|
-
target.beginPath();
|
|
40
|
-
if (r > 0) {
|
|
41
|
-
buildRoundedRectPath(target, 0, 0, shape.width, shape.height, r);
|
|
42
|
-
}
|
|
43
|
-
else {
|
|
44
|
-
target.rect(0, 0, shape.width, shape.height);
|
|
45
|
-
}
|
|
46
|
-
target.fill();
|
|
47
|
-
}
|
|
48
|
-
// Stroke path — offset by `strokeAlign` so the stroke sits inside
|
|
49
|
-
// / centred-on / outside the fill region. The default (omitted /
|
|
50
|
-
// `center`) reuses the fill geometry. Implemented at this layer so
|
|
51
|
-
// every backend (Canvas2D, WebGL2, SVG) honours strokeAlign without
|
|
52
|
-
// backend-specific work — the math is purely on the rect bounds.
|
|
53
|
-
if (stroke) {
|
|
54
|
-
const offset = strokeAlignOffset(shape.style);
|
|
55
|
-
const sx = offset;
|
|
56
|
-
const sy = offset;
|
|
57
|
-
const sw = shape.width - 2 * offset;
|
|
58
|
-
const sh = shape.height - 2 * offset;
|
|
59
|
-
if (sw <= 0 || sh <= 0)
|
|
60
|
-
return; // degenerate offset — skip
|
|
61
|
-
const sr = r > 0 ? Math.max(0, r - offset) : 0;
|
|
62
|
-
target.beginPath();
|
|
63
|
-
if (sr > 0) {
|
|
64
|
-
buildRoundedRectPath(target, sx, sy, sw, sh, sr);
|
|
65
|
-
}
|
|
66
|
-
else {
|
|
67
|
-
target.rect(sx, sy, sw, sh);
|
|
68
|
-
}
|
|
69
|
-
target.stroke();
|
|
70
|
-
}
|
|
71
|
-
};
|
|
72
|
-
/**
|
|
73
|
-
* Translate `Style.strokeAlign` into a path-offset distance in world
|
|
74
|
-
* units. The rendered stroke geometry shifts by `±half-width` along
|
|
75
|
-
* the inward / outward normal:
|
|
76
|
-
* center → 0 (path centred — Canvas2D / SVG default).
|
|
77
|
-
* inside → +half-width (path moves inward so the stroke's outer
|
|
78
|
-
* edge sits on the original fill boundary).
|
|
79
|
-
* outside → -half-width (path moves outward so the stroke's inner
|
|
80
|
-
* edge sits on the boundary).
|
|
81
|
-
*
|
|
82
|
-
* Only used by axis-aligned primitives (rectangle, container) where
|
|
83
|
-
* "inward" reduces to "subtract from bbox".
|
|
84
|
-
*/
|
|
85
|
-
const strokeAlignOffset = (style) => {
|
|
86
|
-
const align = style.strokeAlign ?? "center";
|
|
87
|
-
if (align === "center")
|
|
88
|
-
return 0;
|
|
89
|
-
const half = (style.strokeWidth ?? 1) / 2;
|
|
90
|
-
return align === "inside" ? half : -half;
|
|
91
|
-
};
|
|
92
|
-
/**
|
|
93
|
-
* Build a rounded-rect path via the standard "4 corners with
|
|
94
|
-
* quadratic Bezier arcs" pattern — same shape every backend
|
|
95
|
-
* understands without a special `roundRect()` API:
|
|
96
|
-
*
|
|
97
|
-
* ┌───arc───┐
|
|
98
|
-
* │ │
|
|
99
|
-
* arc arc
|
|
100
|
-
* │ │
|
|
101
|
-
* └───arc───┘
|
|
102
|
-
*
|
|
103
|
-
* Quadratic control points sit at each corner of the rect; the
|
|
104
|
-
* curve goes from `r` units along one side to `r` units along the
|
|
105
|
-
* adjacent side.
|
|
106
|
-
*
|
|
107
|
-
* Radius `r` is pre-clamped by `getCornerRadius` to half the
|
|
108
|
-
* smaller side, so no overlap-handling is needed here.
|
|
109
|
-
*/
|
|
110
|
-
export const buildRoundedRectPath = (target, x, y, w, h, r) => {
|
|
111
|
-
target.moveTo(x + r, y);
|
|
112
|
-
target.lineTo(x + w - r, y);
|
|
113
|
-
target.quadraticCurveTo(x + w, y, x + w, y + r);
|
|
114
|
-
target.lineTo(x + w, y + h - r);
|
|
115
|
-
target.quadraticCurveTo(x + w, y + h, x + w - r, y + h);
|
|
116
|
-
target.lineTo(x + r, y + h);
|
|
117
|
-
target.quadraticCurveTo(x, y + h, x, y + h - r);
|
|
118
|
-
target.lineTo(x, y + r);
|
|
119
|
-
target.quadraticCurveTo(x, y, x + r, y);
|
|
120
|
-
target.closePath();
|
|
121
|
-
};
|
|
122
|
-
const drawEllipse = (shape, target) => {
|
|
123
|
-
const { fill, stroke } = applyStyle(shape.style, target);
|
|
124
|
-
if (!fill && !stroke)
|
|
125
|
-
return;
|
|
126
|
-
const rx = shape.width / 2;
|
|
127
|
-
const ry = shape.height / 2;
|
|
128
|
-
if (fill) {
|
|
129
|
-
target.beginPath();
|
|
130
|
-
target.ellipse(rx, ry, rx, ry);
|
|
131
|
-
target.fill();
|
|
132
|
-
}
|
|
133
|
-
if (stroke) {
|
|
134
|
-
// Inset / outset radii by `strokeAlignOffset` so the stroke
|
|
135
|
-
// sits inside / centred-on / outside the fill ellipse. Centre
|
|
136
|
-
// stays the same; radii shift uniformly. Degenerate (radius ≤ 0)
|
|
137
|
-
// skips the pass.
|
|
138
|
-
const offset = strokeAlignOffset(shape.style);
|
|
139
|
-
const srx = rx - offset;
|
|
140
|
-
const sry = ry - offset;
|
|
141
|
-
if (srx <= 0 || sry <= 0)
|
|
142
|
-
return;
|
|
143
|
-
target.beginPath();
|
|
144
|
-
target.ellipse(rx, ry, srx, sry);
|
|
145
|
-
target.stroke();
|
|
146
|
-
}
|
|
147
|
-
};
|
|
148
|
-
const drawPolygon = (shape, target) => {
|
|
149
|
-
if (shape.points.length < 2)
|
|
150
|
-
return;
|
|
151
|
-
const { fill, stroke } = applyStyle(shape.style, target);
|
|
152
|
-
if (!fill && !stroke)
|
|
153
|
-
return;
|
|
154
|
-
if (fill) {
|
|
155
|
-
target.beginPath();
|
|
156
|
-
polygonPath(target, shape.points);
|
|
157
|
-
target.fill();
|
|
158
|
-
}
|
|
159
|
-
if (stroke) {
|
|
160
|
-
const offset = strokeAlignOffset(shape.style);
|
|
161
|
-
const pts = offset !== 0 ? polygonMath.offsetClosedPath(shape.points, offset) : shape.points;
|
|
162
|
-
target.beginPath();
|
|
163
|
-
polygonPath(target, pts);
|
|
164
|
-
target.stroke();
|
|
165
|
-
}
|
|
166
|
-
};
|
|
167
|
-
/** Emit a closed polygon outline as `moveTo` + `lineTo`s + `closePath`. */
|
|
168
|
-
const polygonPath = (target, pts) => {
|
|
169
|
-
const first = pts[0];
|
|
170
|
-
if (first === undefined)
|
|
171
|
-
return;
|
|
172
|
-
target.moveTo(first.x, first.y);
|
|
173
|
-
for (let i = 1; i < pts.length; i++) {
|
|
174
|
-
const p = pts[i];
|
|
175
|
-
if (p === undefined)
|
|
176
|
-
continue;
|
|
177
|
-
target.lineTo(p.x, p.y);
|
|
178
|
-
}
|
|
179
|
-
target.closePath();
|
|
180
|
-
};
|
|
181
|
-
const drawPath = (shape, target) => {
|
|
182
|
-
if (shape.commands.length === 0)
|
|
183
|
-
return;
|
|
184
|
-
const { fill, stroke } = applyStyle(shape.style, target);
|
|
185
|
-
if (!fill && !stroke)
|
|
186
|
-
return;
|
|
187
|
-
target.beginPath();
|
|
188
|
-
for (const cmd of shape.commands) {
|
|
189
|
-
switch (cmd.kind) {
|
|
190
|
-
case "M":
|
|
191
|
-
target.moveTo(cmd.to.x, cmd.to.y);
|
|
192
|
-
break;
|
|
193
|
-
case "L":
|
|
194
|
-
target.lineTo(cmd.to.x, cmd.to.y);
|
|
195
|
-
break;
|
|
196
|
-
case "Q":
|
|
197
|
-
target.quadraticCurveTo(cmd.control.x, cmd.control.y, cmd.to.x, cmd.to.y);
|
|
198
|
-
break;
|
|
199
|
-
case "C":
|
|
200
|
-
target.bezierCurveTo(cmd.control1.x, cmd.control1.y, cmd.control2.x, cmd.control2.y, cmd.to.x, cmd.to.y);
|
|
201
|
-
break;
|
|
202
|
-
case "Z":
|
|
203
|
-
target.closePath();
|
|
204
|
-
break;
|
|
205
|
-
}
|
|
206
|
-
}
|
|
207
|
-
if (fill)
|
|
208
|
-
target.fill();
|
|
209
|
-
if (stroke)
|
|
210
|
-
target.stroke();
|
|
211
|
-
};
|
|
212
|
-
/**
|
|
213
|
-
* Rich-text path: draw a text element whose glyphs carry per-run styling
|
|
214
|
-
* (bold / italic / colour / decoration). Each visual line is split into
|
|
215
|
-
* style segments (via `sliceRuns` against the line's source offsets) and each
|
|
216
|
-
* segment is painted with its own font + fill at an accumulated x offset —
|
|
217
|
-
* so it renders identically on Canvas2D, WebGL2 and SVG through the shared
|
|
218
|
-
* `RenderTarget`. Line breaking uses the ELEMENT's base font metrics (matches
|
|
219
|
-
* the plain-text path); per-run weight only affects glyph paint + segment
|
|
220
|
-
* widths, an acceptable etap-1 approximation for wrapping.
|
|
221
|
-
*/
|
|
222
|
-
const drawStyledText = (shape, target) => {
|
|
223
|
-
const align = shape.style.textAlign ?? "left";
|
|
224
|
-
const fontSize = shape.fontSize;
|
|
225
|
-
target.setTextAlign("left");
|
|
226
|
-
target.setTextBaseline(shape.style.textBaseline ?? "top");
|
|
227
|
-
// Apply the resolved font for a run: run overlay wins, element style is
|
|
228
|
-
// the fallback for any field the run omits.
|
|
229
|
-
const setSegFont = (st) => {
|
|
230
|
-
const weight = st?.fontWeight ?? shape.style.fontWeight;
|
|
231
|
-
const style = st?.fontStyle ?? shape.style.fontStyle;
|
|
232
|
-
target.setFont(shape.fontFamily, fontSize, {
|
|
233
|
-
...(weight ? { weight } : {}),
|
|
234
|
-
...(style ? { style } : {}),
|
|
235
|
-
});
|
|
236
|
-
};
|
|
237
|
-
// Base-font line breaking — same metrics the plain path wraps with.
|
|
238
|
-
setSegFont(undefined);
|
|
239
|
-
const layout = layoutText(shape.text, (s) => target.measureText(s).width, {
|
|
240
|
-
fontSize,
|
|
241
|
-
...(shape.maxWidth !== undefined ? { maxWidth: shape.maxWidth } : {}),
|
|
242
|
-
});
|
|
243
|
-
const perLine = layout.lines.map((line) => {
|
|
244
|
-
const segs = sliceRuns(shape, line.start, line.end).map((r) => {
|
|
245
|
-
setSegFont(r.style);
|
|
246
|
-
return { text: r.text, style: r.style, width: target.measureText(r.text).width };
|
|
247
|
-
});
|
|
248
|
-
const total = segs.reduce((a, s) => a + s.width, 0);
|
|
249
|
-
return { segs, total };
|
|
250
|
-
});
|
|
251
|
-
// Alignment box: fixed budget, or the widest STYLED line so bold text
|
|
252
|
-
// stays self-consistently aligned.
|
|
253
|
-
const blockWidth = shape.maxWidth ?? perLine.reduce((m, l) => Math.max(m, l.total), 0);
|
|
254
|
-
const thickness = Math.max(1, fontSize * TEXT_DECORATION_THICKNESS);
|
|
255
|
-
perLine.forEach((line, i) => {
|
|
256
|
-
const top = i * layout.lineHeight;
|
|
257
|
-
let x = align === "center"
|
|
258
|
-
? blockWidth / 2 - line.total / 2
|
|
259
|
-
: align === "right"
|
|
260
|
-
? blockWidth - line.total
|
|
261
|
-
: 0;
|
|
262
|
-
for (const seg of line.segs) {
|
|
263
|
-
const color = seg.style?.fill ?? shape.style.fill ?? "#000";
|
|
264
|
-
const opacity = seg.style?.opacity ?? shape.style.opacity;
|
|
265
|
-
setSegFont(seg.style);
|
|
266
|
-
target.setFill(color);
|
|
267
|
-
if (opacity !== undefined)
|
|
268
|
-
target.setOpacity(opacity);
|
|
269
|
-
target.fillText(seg.text, x, top);
|
|
270
|
-
const deco = seg.style?.textDecoration ?? shape.style.textDecoration;
|
|
271
|
-
if (seg.width > 0 && (deco?.underline || deco?.strikethrough)) {
|
|
272
|
-
if (deco.underline) {
|
|
273
|
-
target.beginPath();
|
|
274
|
-
target.rect(x, top + fontSize * TEXT_UNDERLINE_OFFSET, seg.width, thickness);
|
|
275
|
-
target.fill();
|
|
276
|
-
}
|
|
277
|
-
if (deco.strikethrough) {
|
|
278
|
-
target.beginPath();
|
|
279
|
-
target.rect(x, top + fontSize * TEXT_STRIKETHROUGH_OFFSET - thickness / 2, seg.width, thickness);
|
|
280
|
-
target.fill();
|
|
281
|
-
}
|
|
282
|
-
}
|
|
283
|
-
x += seg.width;
|
|
284
|
-
}
|
|
285
|
-
});
|
|
286
|
-
};
|
|
287
|
-
const drawText = (shape, target) => {
|
|
288
|
-
// Rich text (styled runs) takes a dedicated path; plain text keeps the
|
|
289
|
-
// original single-style path byte-for-byte (golden-SVG compatible).
|
|
290
|
-
if (shape.runs !== undefined && shape.runs.length > 0) {
|
|
291
|
-
drawStyledText(shape, target);
|
|
292
|
-
return;
|
|
293
|
-
}
|
|
294
|
-
const align = shape.style.textAlign ?? "left";
|
|
295
|
-
const weight = shape.style.fontWeight;
|
|
296
|
-
const fontStyle = shape.style.fontStyle;
|
|
297
|
-
target.setFont(shape.fontFamily, shape.fontSize, {
|
|
298
|
-
...(weight ? { weight } : {}),
|
|
299
|
-
...(fontStyle ? { style: fontStyle } : {}),
|
|
300
|
-
});
|
|
301
|
-
// Lines are positioned manually (per-line x below) so the caret
|
|
302
|
-
// geometry computed from the same `layoutText` lines up exactly, so
|
|
303
|
-
// the target always draws left-anchored.
|
|
304
|
-
target.setTextAlign("left");
|
|
305
|
-
target.setTextBaseline(shape.style.textBaseline ?? "top");
|
|
306
|
-
// Color: use fill if specified, otherwise default to black.
|
|
307
|
-
const color = shape.style.fill ?? "#000";
|
|
308
|
-
target.setFill(color);
|
|
309
|
-
if (shape.style.opacity !== undefined)
|
|
310
|
-
target.setOpacity(shape.style.opacity);
|
|
311
|
-
// Resolve per-line geometry once (x = align offset, top = i ×
|
|
312
|
-
// lineHeight). Single-line text skips the wrap engine.
|
|
313
|
-
const fontSize = shape.fontSize;
|
|
314
|
-
let lines;
|
|
315
|
-
if (shape.maxWidth === undefined && !shape.text.includes("\n")) {
|
|
316
|
-
lines = [{ text: shape.text, x: 0, width: target.measureText(shape.text).width, top: 0 }];
|
|
317
|
-
}
|
|
318
|
-
else {
|
|
319
|
-
// Measure with the target's own `measureText` so wrapping matches
|
|
320
|
-
// exactly what this backend draws.
|
|
321
|
-
const measure = (s) => target.measureText(s).width;
|
|
322
|
-
const layout = layoutText(shape.text, measure, {
|
|
323
|
-
fontSize,
|
|
324
|
-
...(shape.maxWidth !== undefined ? { maxWidth: shape.maxWidth } : {}),
|
|
325
|
-
});
|
|
326
|
-
lines = layout.lines.map((line, i) => ({
|
|
327
|
-
text: line.text,
|
|
328
|
-
x: align === "center"
|
|
329
|
-
? layout.blockWidth / 2 - line.width / 2
|
|
330
|
-
: align === "right"
|
|
331
|
-
? layout.blockWidth - line.width
|
|
332
|
-
: 0,
|
|
333
|
-
width: line.width,
|
|
334
|
-
top: i * layout.lineHeight,
|
|
335
|
-
}));
|
|
336
|
-
}
|
|
337
|
-
for (const l of lines)
|
|
338
|
-
target.fillText(l.text, l.x, l.top);
|
|
339
|
-
// Underline / strikethrough — thin filled rects per line, same on
|
|
340
|
-
// Canvas2D and WebGL2 (uses the current text fill colour).
|
|
341
|
-
const deco = shape.style.textDecoration;
|
|
342
|
-
if (deco?.underline || deco?.strikethrough) {
|
|
343
|
-
const thickness = Math.max(1, fontSize * TEXT_DECORATION_THICKNESS);
|
|
344
|
-
for (const l of lines) {
|
|
345
|
-
if (l.width <= 0)
|
|
346
|
-
continue;
|
|
347
|
-
if (deco.underline) {
|
|
348
|
-
target.beginPath();
|
|
349
|
-
target.rect(l.x, l.top + fontSize * TEXT_UNDERLINE_OFFSET, l.width, thickness);
|
|
350
|
-
target.fill();
|
|
351
|
-
}
|
|
352
|
-
if (deco.strikethrough) {
|
|
353
|
-
target.beginPath();
|
|
354
|
-
target.rect(l.x, l.top + fontSize * TEXT_STRIKETHROUGH_OFFSET - thickness / 2, l.width, thickness);
|
|
355
|
-
target.fill();
|
|
356
|
-
}
|
|
357
|
-
}
|
|
358
|
-
}
|
|
359
|
-
};
|
|
360
|
-
/**
|
|
361
|
-
* Variable-width brush stroke. Each segment between two `BrushPoint`s
|
|
362
|
-
* is drawn as a quad (two triangles) — its width interpolates from
|
|
363
|
-
* `p.width` at the head to `q.width` at the tail. Renders
|
|
364
|
-
* pressure-sensitive ink that gets thicker / thinner along the path
|
|
365
|
-
* without needing per-segment `setStrokeWidth` calls (which most 2D
|
|
366
|
-
* APIs treat as a single line width).
|
|
367
|
-
*/
|
|
368
|
-
const drawBrush = (shape, target) => {
|
|
369
|
-
const pts = shape.points;
|
|
370
|
-
if (pts.length === 0)
|
|
371
|
-
return;
|
|
372
|
-
// Honour the stroke's opacity (drawBrush paints fills directly, so it can't
|
|
373
|
-
// rely on the shared `applyStyle` the other renderers use). Set once up front
|
|
374
|
-
// so both the enclosed-area fill and the body get it; the scene renderer resets
|
|
375
|
-
// opacity to 1 between shapes.
|
|
376
|
-
if (shape.style.opacity !== undefined)
|
|
377
|
-
target.setOpacity(shape.style.opacity);
|
|
378
|
-
// Closed stroke with a fill colour: paint the enclosed area FIRST (under the
|
|
379
|
-
// stroke body) as a polygon through the centreline points. Needs ≥3 points to
|
|
380
|
-
// enclose an area. Open strokes skip this entirely and are unchanged.
|
|
381
|
-
if (shape.closed === true && shape.style.fill !== undefined && pts.length >= 3) {
|
|
382
|
-
target.setFill(shape.style.fill);
|
|
383
|
-
target.setStroke(null);
|
|
384
|
-
target.beginPath();
|
|
385
|
-
const start = req(pts[0]);
|
|
386
|
-
target.moveTo(start.x, start.y);
|
|
387
|
-
for (let i = 1; i < pts.length; i++) {
|
|
388
|
-
const p = req(pts[i]);
|
|
389
|
-
target.lineTo(p.x, p.y);
|
|
390
|
-
}
|
|
391
|
-
target.closePath();
|
|
392
|
-
target.fill();
|
|
393
|
-
}
|
|
394
|
-
// The variable-width stroke body is painted with the shared brush-body colour
|
|
395
|
-
// (the same resolution the live preview uses — see `brushBodyColor`).
|
|
396
|
-
const paint = brushBodyColor(shape.style);
|
|
397
|
-
target.setFill(paint);
|
|
398
|
-
target.setStroke(null);
|
|
399
|
-
// Single dot for one-point strokes — degenerate quad would be invisible.
|
|
400
|
-
if (pts.length === 1) {
|
|
401
|
-
const p = req(pts[0]);
|
|
402
|
-
target.beginPath();
|
|
403
|
-
target.ellipse(p.x, p.y, p.width, p.width);
|
|
404
|
-
target.fill();
|
|
405
|
-
return;
|
|
406
|
-
}
|
|
407
|
-
// Body as ONE closed outline polygon, filled once. Per-segment quads + joint
|
|
408
|
-
// discs (the old approach) overlap, so at `opacity < 1` the joins double-blend
|
|
409
|
-
// into dark blotches; a single fill paints every pixel exactly once.
|
|
410
|
-
const outline = brushOutline(pts);
|
|
411
|
-
if (outline.length >= 3) {
|
|
412
|
-
target.beginPath();
|
|
413
|
-
const first = req(outline[0]);
|
|
414
|
-
target.moveTo(first.x, first.y);
|
|
415
|
-
for (let i = 1; i < outline.length; i++) {
|
|
416
|
-
const p = req(outline[i]);
|
|
417
|
-
target.lineTo(p.x, p.y);
|
|
418
|
-
}
|
|
419
|
-
target.closePath();
|
|
420
|
-
target.fill();
|
|
421
|
-
}
|
|
422
|
-
};
|
|
423
|
-
const drawImage = (shape, target, ctx) => {
|
|
424
|
-
// Priority: for an animated source prefer the per-frame image the
|
|
425
|
-
// registered adapter returns; otherwise a preloaded handle in
|
|
426
|
-
// `metadata.image`; otherwise the static `src` fallback.
|
|
427
|
-
// `resolveImageSource` returns `null` while an async decode is still
|
|
428
|
-
// in flight, which the backend's drawImage guard skips.
|
|
429
|
-
// Sample at the per-instance clock when the caller threaded one via the
|
|
430
|
-
// render context; `undefined` defers to `resolveImageSource`'s process-global
|
|
431
|
-
// fallback clock (headless / preview paths).
|
|
432
|
-
const t = ctx?.clock?.(shape);
|
|
433
|
-
const handle = shape.animationKind
|
|
434
|
-
? resolveImageSource(shape, t)
|
|
435
|
-
: (shape.metadata?.image ?? resolveImageSource(shape, t));
|
|
436
|
-
// `dynamic` → backends that cache the upload (WebGL2) re-upload the
|
|
437
|
-
// current frame. GIF / video sources flag `metadata.animated`, and
|
|
438
|
-
// any adapter-driven source is dynamic by definition.
|
|
439
|
-
const dynamic = shape.metadata?.animated === true || shape.animationKind !== undefined;
|
|
440
|
-
target.drawImage(handle, 0, 0, shape.width, shape.height, dynamic, shape.crop);
|
|
441
|
-
};
|
|
442
|
-
/**
|
|
443
|
-
* Registers renderers for every `BuiltinElement` type.
|
|
444
|
-
*/
|
|
445
|
-
export const installBuiltinRenderers = () => {
|
|
446
|
-
registerElementRenderer("rectangle", drawRectangle);
|
|
447
|
-
registerElementRenderer("ellipse", drawEllipse);
|
|
448
|
-
registerElementRenderer("polygon", drawPolygon);
|
|
449
|
-
registerElementRenderer("path", drawPath);
|
|
450
|
-
registerElementRenderer("text", drawText);
|
|
451
|
-
registerElementRenderer("image", drawImage);
|
|
452
|
-
// Group shapes are invisible containers — the shape itself paints nothing.
|
|
453
|
-
registerElementRenderer("group", () => {
|
|
454
|
-
/* intentional no-op: group shapes are invisible containers and paint nothing */
|
|
455
|
-
});
|
|
456
|
-
registerElementRenderer("frame", drawFrame);
|
|
457
|
-
// The frame paints its header strip ABOVE the rectangle, so its dirty
|
|
458
|
-
// region must extend up by the header height — otherwise deleting a
|
|
459
|
-
// frame leaves the header behind.
|
|
460
|
-
registerRenderOverflow("frame", () => ({ top: FRAME_HEADER_HEIGHT }));
|
|
461
|
-
registerElementRenderer("block-arrow", drawBlockArrow);
|
|
462
|
-
registerElementRenderer("brush", drawBrush);
|
|
463
|
-
};
|
|
464
|
-
/**
|
|
465
|
-
* Block-arrow silhouette: a rectangle body whose tip is replaced
|
|
466
|
-
* by a triangle, oriented by `direction`. Path is closed and filled
|
|
467
|
-
* with `style.fill`; stroke applies to the outline.
|
|
468
|
-
*
|
|
469
|
-
* right → ┌────┐▶
|
|
470
|
-
* │ body │
|
|
471
|
-
* └────┘
|
|
472
|
-
*
|
|
473
|
-
* up ↑ ▲
|
|
474
|
-
* ┌──┐
|
|
475
|
-
* │ │
|
|
476
|
-
* └──┘
|
|
477
|
-
*/
|
|
478
|
-
const drawBlockArrow = (shape, target) => {
|
|
479
|
-
const { fill, stroke } = applyStyle(shape.style, target);
|
|
480
|
-
const direction = shape.direction ?? "right";
|
|
481
|
-
const headRatio = Math.max(ARROWHEAD_RATIO_MIN, Math.min(ARROWHEAD_RATIO_MAX, shape.headRatio ?? ARROWHEAD_HEAD_RATIO));
|
|
482
|
-
const bodyT = Math.max(ARROWHEAD_RATIO_MIN, Math.min(ARROWHEAD_RATIO_MAX, shape.bodyThickness ?? ARROWHEAD_BODY_THICKNESS));
|
|
483
|
-
const w = shape.width;
|
|
484
|
-
const h = shape.height;
|
|
485
|
-
// Compute the local path for a `right`-pointing arrow inside
|
|
486
|
-
// [0, w] × [0, h], then rotate the resulting points if the
|
|
487
|
-
// direction is different. Keeps the drawing primitives in one
|
|
488
|
-
// place.
|
|
489
|
-
const headW = w * headRatio;
|
|
490
|
-
const bodyW = w - headW;
|
|
491
|
-
const bodyHalfH = (h * bodyT) / 2;
|
|
492
|
-
const cy = h / 2;
|
|
493
|
-
let points = [
|
|
494
|
-
[0, cy - bodyHalfH],
|
|
495
|
-
[bodyW, cy - bodyHalfH],
|
|
496
|
-
[bodyW, 0],
|
|
497
|
-
[w, cy],
|
|
498
|
-
[bodyW, h],
|
|
499
|
-
[bodyW, cy + bodyHalfH],
|
|
500
|
-
[0, cy + bodyHalfH],
|
|
501
|
-
];
|
|
502
|
-
if (direction !== "right") {
|
|
503
|
-
points = points.map(([x, y]) => rotateLocal([x, y], direction, w, h));
|
|
504
|
-
}
|
|
505
|
-
const ptObjs = points.map(([x, y]) => ({ x, y }));
|
|
506
|
-
if (fill) {
|
|
507
|
-
target.beginPath();
|
|
508
|
-
polygonPath(target, ptObjs);
|
|
509
|
-
target.fill();
|
|
510
|
-
}
|
|
511
|
-
if (stroke) {
|
|
512
|
-
const offset = strokeAlignOffset(shape.style);
|
|
513
|
-
const sPts = offset !== 0 ? polygonMath.offsetClosedPath(ptObjs, offset) : ptObjs;
|
|
514
|
-
target.beginPath();
|
|
515
|
-
polygonPath(target, sPts);
|
|
516
|
-
target.stroke();
|
|
517
|
-
}
|
|
518
|
-
};
|
|
519
|
-
const rotateLocal = ([x, y], direction, w, h) => {
|
|
520
|
-
switch (direction) {
|
|
521
|
-
case "left":
|
|
522
|
-
return [w - x, y];
|
|
523
|
-
case "up":
|
|
524
|
-
// Rotate 90° CCW around the box centre, then translate so the
|
|
525
|
-
// result still fits inside [0, w] × [0, h].
|
|
526
|
-
return [y * (w / h), h - x * (h / w)];
|
|
527
|
-
case "down":
|
|
528
|
-
return [(h - y) * (w / h), x * (h / w)];
|
|
529
|
-
}
|
|
530
|
-
};
|
|
531
|
-
const FRAME_HEADER_ELLIPSIS = "…";
|
|
532
|
-
/**
|
|
533
|
-
* Trim `text` with a trailing ellipsis until it fits `maxWidth` (in the
|
|
534
|
-
* font already set on `target`). Returns the full text when it fits, the
|
|
535
|
-
* longest prefix + "…" otherwise, or just "…" when even one char can't
|
|
536
|
-
* fit. Binary-searches the prefix length to keep `measureText` calls ~log.
|
|
537
|
-
*/
|
|
538
|
-
const ellipsizeToWidth = (text, maxWidth, target) => {
|
|
539
|
-
if (maxWidth <= 0)
|
|
540
|
-
return "";
|
|
541
|
-
if (target.measureText(text).width <= maxWidth)
|
|
542
|
-
return text;
|
|
543
|
-
let lo = 0;
|
|
544
|
-
let hi = text.length;
|
|
545
|
-
while (lo < hi) {
|
|
546
|
-
const mid = Math.ceil((lo + hi) / 2);
|
|
547
|
-
const w = target.measureText(text.slice(0, mid) + FRAME_HEADER_ELLIPSIS).width;
|
|
548
|
-
if (w <= maxWidth)
|
|
549
|
-
lo = mid;
|
|
550
|
-
else
|
|
551
|
-
hi = mid - 1;
|
|
552
|
-
}
|
|
553
|
-
return lo > 0 ? text.slice(0, lo) + FRAME_HEADER_ELLIPSIS : FRAME_HEADER_ELLIPSIS;
|
|
554
|
-
};
|
|
555
|
-
const drawFrame = (shape, target, ctx) => {
|
|
556
|
-
// Body — solid fill + thin solid outline. Frames sit at the bottom
|
|
557
|
-
// z-order, so the fill backs their members without covering them.
|
|
558
|
-
// Honours an explicit `style.fill`, else default white.
|
|
559
|
-
target.setFill(shape.style.fill ?? FRAME_FILL_COLOR);
|
|
560
|
-
target.setStroke(null);
|
|
561
|
-
target.setDashArray(null);
|
|
562
|
-
target.beginPath();
|
|
563
|
-
target.rect(0, 0, shape.width, shape.height);
|
|
564
|
-
target.fill();
|
|
565
|
-
// Outline on top of the fill — a 1px SCREEN-constant hairline (doesn't scale
|
|
566
|
-
// with zoom). The renderer draws in local coords where 1 unit = zoom × scale
|
|
567
|
-
// device px, so divide to keep the stroke at one device pixel. Falls back to
|
|
568
|
-
// 1 world-px when no zoom context is supplied (preview / export at 1:1).
|
|
569
|
-
const screenScale = (ctx?.zoom ?? 1) * (shape.scale.x || 1);
|
|
570
|
-
target.setFill(null);
|
|
571
|
-
target.setStroke(FRAME_STROKE_COLOR);
|
|
572
|
-
target.setStrokeWidth(1 / (screenScale || 1));
|
|
573
|
-
target.setDashArray(null);
|
|
574
|
-
target.beginPath();
|
|
575
|
-
target.rect(0, 0, shape.width, shape.height);
|
|
576
|
-
target.stroke();
|
|
577
|
-
// Header label: the strip hugs the text width but never exceeds the
|
|
578
|
-
// frame's right edge; a name too long for the frame is ellipsised.
|
|
579
|
-
const name = shape.name ?? "Frame";
|
|
580
|
-
target.setFont("system-ui, sans-serif", FRAME_HEADER_FONT_SIZE);
|
|
581
|
-
const avail = shape.width - FRAME_HEADER_PADDING_X * 2;
|
|
582
|
-
const fits = target.measureText(name).width <= avail;
|
|
583
|
-
// Fits → the strip hugs the text. Too long → ellipsise the text and
|
|
584
|
-
// stretch the strip to the frame's full width (the label runs to the
|
|
585
|
-
// right edge).
|
|
586
|
-
const label = fits ? name : ellipsizeToWidth(name, avail, target);
|
|
587
|
-
const headerWidth = fits
|
|
588
|
-
? Math.min(target.measureText(name).width + FRAME_HEADER_PADDING_X * 2, shape.width)
|
|
589
|
-
: shape.width;
|
|
590
|
-
// Header label background — stretches to fit the (possibly truncated) text.
|
|
591
|
-
target.setFill(FRAME_HEADER_BG_COLOR);
|
|
592
|
-
target.beginPath();
|
|
593
|
-
target.rect(0, -FRAME_HEADER_HEIGHT, headerWidth, FRAME_HEADER_HEIGHT);
|
|
594
|
-
target.fill();
|
|
595
|
-
// Header label text.
|
|
596
|
-
target.setFill(FRAME_HEADER_TEXT_COLOR);
|
|
597
|
-
target.setTextBaseline("middle");
|
|
598
|
-
target.setTextAlign("left");
|
|
599
|
-
target.fillText(label, FRAME_HEADER_PADDING_X, -FRAME_HEADER_HEIGHT / 2);
|
|
600
|
-
};
|
|
601
|
-
//# sourceMappingURL=built-in-renderers.js.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"built-in-renderers.js","sourceRoot":"","sources":["../src/built-in-renderers.ts"],"names":[],"mappings":"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"}
|
package/dist/dim-target.d.ts.map
DELETED
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"dim-target.d.ts","sourceRoot":"","sources":["../src/dim-target.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,oBAAoB,CAAC;AAEvD;;;;;;;;;;;;;;;;GAgBG;AACH,eAAO,MAAM,eAAe,GAAI,OAAO,YAAY,EAAE,QAAQ,MAAM,KAAG,YAiBrE,CAAC"}
|
package/dist/dim-target.js.map
DELETED
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"dim-target.js","sourceRoot":"","sources":["../src/dim-target.ts"],"names":[],"mappings":"AAEA;;;;;;;;;;;;;;;;GAgBG;AACH,MAAM,CAAC,MAAM,eAAe,GAAG,CAAC,KAAmB,EAAE,MAAc,EAAgB,EAAE;IACnF,MAAM,KAAK,GAAG,IAAI,GAAG,EAAwB,CAAC;IAC9C,MAAM,gBAAgB,GAAG,CAAC,CAAS,EAAQ,EAAE;QAC3C,KAAK,CAAC,UAAU,CAAC,CAAC,GAAG,MAAM,CAAC,CAAC;IAC/B,CAAC,CAAC;IACF,MAAM,OAAO,GAA+B;QAC1C,GAAG,CAAC,MAAM,EAAE,IAAI;YACd,IAAI,IAAI,KAAK,YAAY;gBAAE,OAAO,gBAAgB,CAAC;YACnD,IAAI,KAAK,CAAC,GAAG,CAAC,IAAI,CAAC;gBAAE,OAAO,KAAK,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC;YAC5C,MAAM,KAAK,GAAY,OAAO,CAAC,GAAG,CAAC,MAAM,EAAE,IAAI,CAAC,CAAC;YACjD,MAAM,QAAQ,GACZ,OAAO,KAAK,KAAK,UAAU,CAAC,CAAC,CAAE,KAAsC,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC;YAC7F,KAAK,CAAC,GAAG,CAAC,IAAI,EAAE,QAAQ,CAAC,CAAC;YAC1B,OAAO,QAAQ,CAAC;QAClB,CAAC;KACF,CAAC;IACF,OAAO,IAAI,KAAK,CAAC,KAAK,EAAE,OAAO,CAAC,CAAC;AACnC,CAAC,CAAC"}
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"edge-cache-bitmap.d.ts","sourceRoot":"","sources":["../src/edge-cache-bitmap.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,IAAI,EAAE,MAAM,wBAAwB,CAAC;AAGnD;;;;;;;;;;;;;;GAcG;AAEH,MAAM,WAAW,eAAe,CAAC,CAAC,GAAG,OAAO;IAC1C,GAAG,CAAC,IAAI,EAAE,IAAI,EAAE,UAAU,EAAE,MAAM,GAAG,CAAC,GAAG,SAAS,CAAC;IACnD,GAAG,CAAC,IAAI,EAAE,IAAI,EAAE,UAAU,EAAE,MAAM,EAAE,KAAK,EAAE,CAAC,GAAG,IAAI,CAAC;IACpD,MAAM,CAAC,IAAI,EAAE,IAAI,EAAE,UAAU,EAAE,MAAM,GAAG,IAAI,CAAC;IAC7C,KAAK,IAAI,IAAI,CAAC;IACd,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAC;CACvB;AASD,qBAAa,uBAAuB,CAAC,CAAC,CAAE,YAAW,eAAe,CAAC,CAAC,CAAC;IACnE,OAAO,CAAC,QAAQ,CAAC,OAAO,CAA6B;gBAEzC,GAAG,SAAM;IAIrB,IAAI,IAAI,IAAI,MAAM,CAEjB;IAED,GAAG,CAAC,IAAI,EAAE,IAAI,EAAE,UAAU,EAAE,MAAM,GAAG,CAAC,GAAG,SAAS;IAWlD,GAAG,CAAC,IAAI,EAAE,IAAI,EAAE,UAAU,EAAE,MAAM,EAAE,KAAK,EAAE,CAAC,GAAG,IAAI;IAInD,MAAM,CAAC,IAAI,EAAE,IAAI,EAAE,UAAU,EAAE,MAAM,GAAG,IAAI;IAI5C,KAAK,IAAI,IAAI;CAGd"}
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"edge-cache-bitmap.js","sourceRoot":"","sources":["../src/edge-cache-bitmap.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,QAAQ,EAAE,MAAM,gBAAgB,CAAC;AA+B1C,MAAM,MAAM,GAAG,CAAC,IAAU,EAAE,UAAkB,EAAU,EAAE,CAAC,GAAG,IAAI,CAAC,EAAE,IAAI,UAAU,EAAE,CAAC;AAEtF,MAAM,OAAO,uBAAuB;IACjB,OAAO,CAA6B;IAErD,YAAY,GAAG,GAAG,GAAG;QACnB,IAAI,CAAC,OAAO,GAAG,IAAI,QAAQ,CAAC,GAAG,CAAC,CAAC;IACnC,CAAC;IAED,IAAI,IAAI;QACN,OAAO,IAAI,CAAC,OAAO,CAAC,IAAI,CAAC;IAC3B,CAAC;IAED,GAAG,CAAC,IAAU,EAAE,UAAkB;QAChC,MAAM,GAAG,GAAG,MAAM,CAAC,IAAI,EAAE,UAAU,CAAC,CAAC;QACrC,MAAM,CAAC,GAAG,IAAI,CAAC,OAAO,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC;QAChC,IAAI,CAAC,CAAC;YAAE,OAAO,SAAS,CAAC;QACzB,IAAI,CAAC,CAAC,OAAO,KAAK,IAAI,EAAE,CAAC;YACvB,IAAI,CAAC,OAAO,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC;YACzB,OAAO,SAAS,CAAC;QACnB,CAAC;QACD,OAAO,CAAC,CAAC,KAAK,CAAC;IACjB,CAAC;IAED,GAAG,CAAC,IAAU,EAAE,UAAkB,EAAE,KAAQ;QAC1C,IAAI,CAAC,OAAO,CAAC,GAAG,CAAC,MAAM,CAAC,IAAI,EAAE,UAAU,CAAC,EAAE,EAAE,OAAO,EAAE,IAAI,EAAE,KAAK,EAAE,CAAC,CAAC;IACvE,CAAC;IAED,MAAM,CAAC,IAAU,EAAE,UAAkB;QACnC,IAAI,CAAC,OAAO,CAAC,MAAM,CAAC,MAAM,CAAC,IAAI,EAAE,UAAU,CAAC,CAAC,CAAC;IAChD,CAAC;IAED,KAAK;QACH,IAAI,CAAC,OAAO,CAAC,KAAK,EAAE,CAAC;IACvB,CAAC;CACF"}
|
package/dist/edge-cache.d.ts.map
DELETED
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"edge-cache.d.ts","sourceRoot":"","sources":["../src/edge-cache.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,wBAAwB,CAAC;AAC7D,OAAO,EAGL,KAAK,IAAI,EACT,KAAK,KAAK,EACX,MAAM,wBAAwB,CAAC;AAEhC;;;;;;GAMG;AACH,qBAAa,eAAe;IAC1B,OAAO,CAAC,QAAQ,CAAC,OAAO,CAGpB;IAEJ,GAAG,CAAC,KAAK,EAAE,KAAK,EAAE,IAAI,EAAE,IAAI,GAAG,MAAM,GAAG,IAAI,GAAG,SAAS;IAUxD,GAAG,CAAC,KAAK,EAAE,KAAK,EAAE,IAAI,EAAE,IAAI,EAAE,KAAK,EAAE,MAAM,GAAG,IAAI,GAAG,MAAM,GAAG,IAAI;IAKlE,YAAY,CAAC,KAAK,EAAE,KAAK,EAAE,IAAI,EAAE,IAAI,GAAG,MAAM,GAAG,IAAI;IAMrD,UAAU,CAAC,EAAE,EAAE,MAAM,GAAG,IAAI;IAI5B,KAAK,IAAI,IAAI;IAIb,KAAK,CAAC,KAAK,EAAE,KAAK,GAAG,IAAI;IAMzB,IAAI,IAAI,IAAI,MAAM,CAEjB;CACF;AAED;;;;GAIG;AACH,eAAO,MAAM,sBAAsB,GAAI,OAAO,KAAK,EAAE,MAAM,IAAI,KAAG,MAAM,GAAG,IAyC1E,CAAC;AAEF;;;;GAIG;AACH,eAAO,MAAM,qBAAqB,EAAE,eAAuC,CAAC"}
|