autokap 1.0.7 → 1.0.8

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 (278) hide show
  1. package/assets/cursors/macos.svg +4 -0
  2. package/assets/cursors/windows.svg +15 -0
  3. package/assets/skill/OPCODE-REFERENCE.md +607 -0
  4. package/assets/skill/README.md +39 -0
  5. package/assets/skill/SKILL.md +453 -468
  6. package/assets/skill/STUDIO-SKILL.md +476 -0
  7. package/assets/skill/references/examples.md +104 -0
  8. package/assets/skill/references/interactive-demo.md +225 -0
  9. package/assets/skill/references/mock-data.md +178 -0
  10. package/dist/action-verifier.d.ts +29 -0
  11. package/dist/action-verifier.js +133 -0
  12. package/dist/agent-action-recovery.d.ts +45 -0
  13. package/dist/agent-action-recovery.js +370 -0
  14. package/dist/agent-message-utils.d.ts +21 -0
  15. package/dist/agent-message-utils.js +77 -0
  16. package/dist/agent-url-utils.d.ts +30 -0
  17. package/dist/agent-url-utils.js +138 -0
  18. package/dist/agent.d.ts +92 -8
  19. package/dist/agent.js +2936 -781
  20. package/dist/ak-tree.d.ts +39 -0
  21. package/dist/ak-tree.js +368 -0
  22. package/dist/alt-text.d.ts +26 -0
  23. package/dist/alt-text.js +55 -0
  24. package/dist/auth-capture.d.ts +17 -0
  25. package/dist/auth-capture.js +164 -0
  26. package/dist/benchmark.d.ts +59 -0
  27. package/dist/benchmark.js +135 -0
  28. package/dist/browser-bar.d.ts +14 -6
  29. package/dist/browser-bar.js +145 -8
  30. package/dist/browser-pool.d.ts +7 -0
  31. package/dist/browser-pool.js +15 -5
  32. package/dist/browser-utils.d.ts +31 -0
  33. package/dist/browser-utils.js +97 -0
  34. package/dist/browser.d.ts +51 -1
  35. package/dist/browser.js +1481 -31
  36. package/dist/capture-alt-text.js +2 -1
  37. package/dist/capture-language-preflight.js +14 -0
  38. package/dist/capture-llm-page-identity.js +22 -10
  39. package/dist/capture-page-identity.d.ts +5 -7
  40. package/dist/capture-page-identity.js +211 -78
  41. package/dist/capture-preset-credentials.d.ts +50 -0
  42. package/dist/capture-preset-credentials.js +127 -0
  43. package/dist/capture-request-plan.d.ts +2 -2
  44. package/dist/capture-request-plan.js +64 -16
  45. package/dist/capture-run-optimizer.js +48 -33
  46. package/dist/capture-selector-memory.d.ts +5 -0
  47. package/dist/capture-selector-memory.js +18 -0
  48. package/dist/capture-strategy.d.ts +36 -0
  49. package/dist/capture-strategy.js +95 -0
  50. package/dist/capture-studio-sync.d.ts +1 -0
  51. package/dist/capture-studio-sync.js +9 -3
  52. package/dist/capture-surface-contract.d.ts +36 -0
  53. package/dist/capture-surface-contract.js +299 -0
  54. package/dist/capture-transition-engine.d.ts +28 -0
  55. package/dist/capture-transition-engine.js +292 -0
  56. package/dist/capture-variant-state.d.ts +2 -0
  57. package/dist/capture-variant-state.js +26 -0
  58. package/dist/capture-verification.d.ts +35 -0
  59. package/dist/capture-verification.js +95 -0
  60. package/dist/capture-viewport-lock.d.ts +48 -0
  61. package/dist/capture-viewport-lock.js +74 -0
  62. package/dist/circuit-breaker.d.ts +42 -0
  63. package/dist/circuit-breaker.js +119 -0
  64. package/dist/cli-config.d.ts +8 -1
  65. package/dist/cli-config.js +62 -6
  66. package/dist/cli-contract.d.ts +15 -0
  67. package/dist/cli-contract.js +167 -0
  68. package/dist/cli-runner-local.d.ts +12 -0
  69. package/dist/cli-runner-local.js +102 -0
  70. package/dist/cli-runner.d.ts +34 -0
  71. package/dist/cli-runner.js +433 -0
  72. package/dist/cli-utils.d.ts +0 -1
  73. package/dist/cli-utils.js +2 -5
  74. package/dist/cli.js +1005 -267
  75. package/dist/clip-orchestrator.js +9 -2
  76. package/dist/clip-postprocess.js +25 -16
  77. package/dist/cookie-dismiss.d.ts +2 -0
  78. package/dist/cookie-dismiss.js +48 -13
  79. package/dist/cost-logging.d.ts +8 -0
  80. package/dist/cost-logging.js +160 -46
  81. package/dist/cost-resolution-monitor.d.ts +16 -0
  82. package/dist/cost-resolution-monitor.js +34 -0
  83. package/dist/credential-templates.js +2 -2
  84. package/dist/cursor-overlay-script.d.ts +6 -0
  85. package/dist/cursor-overlay-script.js +169 -0
  86. package/dist/dom-css-purger.d.ts +65 -0
  87. package/dist/dom-css-purger.js +333 -0
  88. package/dist/dom-font-inliner.d.ts +45 -0
  89. package/dist/dom-font-inliner.js +148 -0
  90. package/dist/dom-patch-resolver.d.ts +52 -0
  91. package/dist/dom-patch-resolver.js +242 -0
  92. package/dist/dom-serializer.d.ts +82 -0
  93. package/dist/dom-serializer.js +378 -0
  94. package/dist/element-capture.d.ts +1 -41
  95. package/dist/element-capture.js +202 -446
  96. package/dist/env-validation.d.ts +5 -0
  97. package/dist/env-validation.js +29 -0
  98. package/dist/execution-schema.d.ts +4423 -0
  99. package/dist/execution-schema.js +507 -0
  100. package/dist/execution-types.d.ts +886 -0
  101. package/dist/execution-types.js +65 -0
  102. package/dist/fonts-loader.d.ts +14 -0
  103. package/dist/fonts-loader.js +55 -0
  104. package/dist/hybrid-navigator.js +12 -12
  105. package/dist/index.d.ts +9 -6
  106. package/dist/index.js +10 -4
  107. package/dist/legacy/agent-action-recovery.d.ts +45 -0
  108. package/dist/legacy/agent-action-recovery.js +370 -0
  109. package/dist/legacy/agent-message-utils.d.ts +21 -0
  110. package/dist/legacy/agent-message-utils.js +77 -0
  111. package/dist/legacy/agent-url-utils.d.ts +30 -0
  112. package/dist/legacy/agent-url-utils.js +138 -0
  113. package/dist/legacy/agent.d.ts +226 -0
  114. package/dist/legacy/agent.js +6666 -0
  115. package/dist/legacy/clip-orchestrator.d.ts +148 -0
  116. package/dist/legacy/clip-orchestrator.js +957 -0
  117. package/dist/legacy/credential-templates.d.ts +5 -0
  118. package/dist/legacy/credential-templates.js +60 -0
  119. package/dist/legacy/hybrid-navigator.d.ts +138 -0
  120. package/dist/legacy/hybrid-navigator.js +468 -0
  121. package/dist/legacy/llm-usage.d.ts +17 -0
  122. package/dist/legacy/llm-usage.js +45 -0
  123. package/dist/legacy/prompt-cache.d.ts +10 -0
  124. package/dist/legacy/prompt-cache.js +24 -0
  125. package/dist/legacy/prompts.d.ts +175 -0
  126. package/dist/legacy/prompts.js +1038 -0
  127. package/dist/legacy/tools.d.ts +4 -0
  128. package/dist/legacy/tools.js +216 -0
  129. package/dist/legacy/video-agent.d.ts +143 -0
  130. package/dist/legacy/video-agent.js +4788 -0
  131. package/dist/legacy/video-observation.d.ts +36 -0
  132. package/dist/legacy/video-observation.js +192 -0
  133. package/dist/legacy/video-planner.d.ts +12 -0
  134. package/dist/legacy/video-planner.js +501 -0
  135. package/dist/legacy/video-prompts.d.ts +37 -0
  136. package/dist/legacy/video-prompts.js +569 -0
  137. package/dist/legacy/video-tools.d.ts +3 -0
  138. package/dist/legacy/video-tools.js +59 -0
  139. package/dist/legacy/video-variant-state.d.ts +29 -0
  140. package/dist/legacy/video-variant-state.js +80 -0
  141. package/dist/legacy/vision-model.d.ts +17 -0
  142. package/dist/legacy/vision-model.js +74 -0
  143. package/dist/llm-healer.d.ts +63 -0
  144. package/dist/llm-healer.js +166 -0
  145. package/dist/llm-provider.d.ts +29 -0
  146. package/dist/llm-provider.js +80 -0
  147. package/dist/logger.d.ts +6 -2
  148. package/dist/logger.js +15 -1
  149. package/dist/mockup-html.js +35 -25
  150. package/dist/mockup.d.ts +95 -2
  151. package/dist/mockup.js +427 -166
  152. package/dist/mouse-animation.d.ts +2 -2
  153. package/dist/mouse-animation.js +34 -20
  154. package/dist/opcode-actions.d.ts +42 -0
  155. package/dist/opcode-actions.js +511 -0
  156. package/dist/opcode-runner.d.ts +51 -0
  157. package/dist/opcode-runner.js +770 -0
  158. package/dist/openrouter-client.d.ts +40 -0
  159. package/dist/openrouter-client.js +16 -0
  160. package/dist/overlay-engine.d.ts +24 -0
  161. package/dist/overlay-engine.js +176 -0
  162. package/dist/postcondition.d.ts +16 -0
  163. package/dist/postcondition.js +269 -0
  164. package/dist/program-patcher.d.ts +25 -0
  165. package/dist/program-patcher.js +44 -0
  166. package/dist/prompts.d.ts +13 -5
  167. package/dist/prompts.js +224 -351
  168. package/dist/provider-config.d.ts +12 -0
  169. package/dist/provider-config.js +15 -0
  170. package/dist/recovery-chain.d.ts +37 -0
  171. package/dist/recovery-chain.js +350 -0
  172. package/dist/remote-browser.d.ts +28 -4
  173. package/dist/remote-browser.js +60 -5
  174. package/dist/safari-browser-bar.d.ts +15 -0
  175. package/dist/safari-browser-bar.js +95 -0
  176. package/dist/safari-toolbar-asset.d.ts +15 -0
  177. package/dist/safari-toolbar-asset.js +12 -0
  178. package/dist/security.d.ts +2 -1
  179. package/dist/security.js +49 -10
  180. package/dist/selector-resolver.d.ts +34 -0
  181. package/dist/selector-resolver.js +181 -0
  182. package/dist/semantic-resolver.d.ts +35 -0
  183. package/dist/semantic-resolver.js +161 -0
  184. package/dist/server-capture-runtime.d.ts +5 -3
  185. package/dist/server-capture-runtime.js +42 -95
  186. package/dist/server-credit-usage.d.ts +2 -2
  187. package/dist/server-project-webhooks.d.ts +15 -1
  188. package/dist/server-project-webhooks.js +34 -8
  189. package/dist/server-screenshot-watermark.js +27 -5
  190. package/dist/session-profile.js +164 -1
  191. package/dist/sf-pro-symbols.d.ts +1 -0
  192. package/dist/sf-pro-symbols.js +55 -0
  193. package/dist/skill-packaging.d.ts +28 -0
  194. package/dist/skill-packaging.js +169 -0
  195. package/dist/smart-wait.d.ts +27 -0
  196. package/dist/smart-wait.js +81 -0
  197. package/dist/status-bar-render.d.ts +20 -0
  198. package/dist/status-bar-render.js +410 -0
  199. package/dist/status-bar.d.ts +9 -0
  200. package/dist/status-bar.js +298 -14
  201. package/dist/svg-browser-bar.d.ts +33 -0
  202. package/dist/svg-browser-bar.js +206 -0
  203. package/dist/svg-status-bar.d.ts +36 -0
  204. package/dist/svg-status-bar.js +597 -0
  205. package/dist/svg-text.d.ts +61 -0
  206. package/dist/svg-text.js +118 -0
  207. package/dist/tools.js +89 -451
  208. package/dist/types.d.ts +240 -5
  209. package/dist/types.js +23 -1
  210. package/dist/v2/action-verifier.d.ts +29 -0
  211. package/dist/v2/action-verifier.js +133 -0
  212. package/dist/v2/alt-text.d.ts +26 -0
  213. package/dist/v2/alt-text.js +55 -0
  214. package/dist/v2/benchmark.d.ts +59 -0
  215. package/dist/v2/benchmark.js +135 -0
  216. package/dist/v2/capture-strategy.d.ts +30 -0
  217. package/dist/v2/capture-strategy.js +67 -0
  218. package/dist/v2/capture-verification.d.ts +35 -0
  219. package/dist/v2/capture-verification.js +95 -0
  220. package/dist/v2/circuit-breaker.d.ts +42 -0
  221. package/dist/v2/circuit-breaker.js +119 -0
  222. package/dist/v2/cli-runner-local.d.ts +11 -0
  223. package/dist/v2/cli-runner-local.js +91 -0
  224. package/dist/v2/cli-runner.d.ts +34 -0
  225. package/dist/v2/cli-runner.js +300 -0
  226. package/dist/v2/compiler-prompts.d.ts +27 -0
  227. package/dist/v2/compiler-prompts.js +123 -0
  228. package/dist/v2/compiler.d.ts +37 -0
  229. package/dist/v2/compiler.js +147 -0
  230. package/dist/v2/explorer.d.ts +41 -0
  231. package/dist/v2/explorer.js +56 -0
  232. package/dist/v2/index.d.ts +37 -0
  233. package/dist/v2/index.js +31 -0
  234. package/dist/v2/llm-healer.d.ts +62 -0
  235. package/dist/v2/llm-healer.js +166 -0
  236. package/dist/v2/llm-provider.d.ts +29 -0
  237. package/dist/v2/llm-provider.js +80 -0
  238. package/dist/v2/opcode-runner.d.ts +47 -0
  239. package/dist/v2/opcode-runner.js +634 -0
  240. package/dist/v2/overlay-engine.d.ts +24 -0
  241. package/dist/v2/overlay-engine.js +150 -0
  242. package/dist/v2/postcondition.d.ts +16 -0
  243. package/dist/v2/postcondition.js +249 -0
  244. package/dist/v2/program-patcher.d.ts +25 -0
  245. package/dist/v2/program-patcher.js +44 -0
  246. package/dist/v2/recovery-chain.d.ts +30 -0
  247. package/dist/v2/recovery-chain.js +368 -0
  248. package/dist/v2/schema.d.ts +2580 -0
  249. package/dist/v2/schema.js +295 -0
  250. package/dist/v2/selector-resolver.d.ts +34 -0
  251. package/dist/v2/selector-resolver.js +181 -0
  252. package/dist/v2/semantic-resolver.d.ts +35 -0
  253. package/dist/v2/semantic-resolver.js +161 -0
  254. package/dist/v2/smart-wait.d.ts +27 -0
  255. package/dist/v2/smart-wait.js +81 -0
  256. package/dist/v2/types.d.ts +444 -0
  257. package/dist/v2/types.js +19 -0
  258. package/dist/v2/web-playwright-local.d.ts +69 -0
  259. package/dist/v2/web-playwright-local.js +392 -0
  260. package/dist/version.d.ts +1 -0
  261. package/dist/version.js +5 -0
  262. package/dist/video-agent.js +18 -13
  263. package/dist/video-planner.js +2 -1
  264. package/dist/video-prompts.js +3 -3
  265. package/dist/web-playwright-local.d.ts +126 -0
  266. package/dist/web-playwright-local.js +819 -0
  267. package/dist/ws-auth.js +4 -1
  268. package/dist/ws-broadcast.d.ts +34 -0
  269. package/dist/ws-broadcast.js +85 -0
  270. package/dist/ws-connection-limits.d.ts +12 -0
  271. package/dist/ws-connection-limits.js +44 -0
  272. package/dist/ws-handler-utils.d.ts +32 -0
  273. package/dist/ws-handler-utils.js +139 -0
  274. package/dist/ws-handler.js +294 -164
  275. package/dist/ws-metrics-server.d.ts +9 -0
  276. package/dist/ws-metrics-server.js +31 -0
  277. package/dist/ws-server.js +41 -1
  278. package/package.json +51 -34
@@ -0,0 +1,61 @@
1
+ /**
2
+ * SVG text rendering via fontkit.
3
+ *
4
+ * Converts text strings to native SVG `<path>` elements by laying out glyphs
5
+ * with fontkit and serializing each glyph's vector path. This avoids depending
6
+ * on a system font installation or any HTML rendering layer (no Playwright).
7
+ *
8
+ * Coordinate system:
9
+ * - SVG uses Y-down. Font glyphs use Y-up with the baseline at y=0.
10
+ * - We flip Y while serializing each glyph's path commands.
11
+ * - The caller passes a baseline Y position; glyphs are placed relative to it.
12
+ *
13
+ * Vertical alignment helper:
14
+ * - Use `baselineForCenteredText` to compute the baseline Y so the cap-height
15
+ * visual centroid lines up with the parent box's vertical centre. This
16
+ * matches what `display:flex; align-items:center; line-height:1` produces
17
+ * in CSS for the SF Pro status bar layouts.
18
+ */
19
+ import { type SfFontId } from './fonts-loader.js';
20
+ export interface MeasuredText {
21
+ /** SVG path data string for the entire run, ready for `<path d="...">`. */
22
+ pathData: string;
23
+ /** Visual width in CSS pixels (includes glyph advances + kerning). */
24
+ width: number;
25
+ /** Cap height in CSS pixels at this font size. */
26
+ capHeight: number;
27
+ /** Ascent in CSS pixels at this font size. */
28
+ ascent: number;
29
+ /** Descent in CSS pixels at this font size (positive). */
30
+ descent: number;
31
+ }
32
+ export interface TextRunOptions {
33
+ text: string;
34
+ fontId: SfFontId;
35
+ fontSize: number;
36
+ /** Optional letter-spacing in CSS pixels (positive widens, negative tightens). */
37
+ letterSpacing?: number;
38
+ /** Origin X (left of the first glyph's pen position). Defaults to 0. */
39
+ x?: number;
40
+ /** Baseline Y for the run. Defaults to `fontSize` (top-aligned). */
41
+ baselineY?: number;
42
+ }
43
+ /**
44
+ * Lay out a text run and serialize each glyph's vector path into a single
45
+ * SVG path data string. Y is flipped on the fly so the result is ready to
46
+ * embed in an SVG document with the standard top-left origin.
47
+ */
48
+ export declare function layoutText(opts: TextRunOptions): MeasuredText;
49
+ /** Measure a text run without producing path data. */
50
+ export declare function measureText(opts: TextRunOptions): {
51
+ width: number;
52
+ capHeight: number;
53
+ };
54
+ /**
55
+ * Compute the baseline Y so the cap-height visual centroid sits at parentY +
56
+ * parentH/2. This is what `align-items:center; line-height:1` does for short
57
+ * runs of digits / latin in SF Pro at status-bar sizes.
58
+ */
59
+ export declare function baselineForCenteredText(parentY: number, parentH: number, fontId: SfFontId, fontSize: number): number;
60
+ /** Default font id for SF Pro at status-bar sizes. */
61
+ export declare function pickStatusBarFontId(weight?: 'regular' | 'semibold'): SfFontId;
@@ -0,0 +1,118 @@
1
+ /**
2
+ * SVG text rendering via fontkit.
3
+ *
4
+ * Converts text strings to native SVG `<path>` elements by laying out glyphs
5
+ * with fontkit and serializing each glyph's vector path. This avoids depending
6
+ * on a system font installation or any HTML rendering layer (no Playwright).
7
+ *
8
+ * Coordinate system:
9
+ * - SVG uses Y-down. Font glyphs use Y-up with the baseline at y=0.
10
+ * - We flip Y while serializing each glyph's path commands.
11
+ * - The caller passes a baseline Y position; glyphs are placed relative to it.
12
+ *
13
+ * Vertical alignment helper:
14
+ * - Use `baselineForCenteredText` to compute the baseline Y so the cap-height
15
+ * visual centroid lines up with the parent box's vertical centre. This
16
+ * matches what `display:flex; align-items:center; line-height:1` produces
17
+ * in CSS for the SF Pro status bar layouts.
18
+ */
19
+ import { getFont } from './fonts-loader.js';
20
+ /**
21
+ * Lay out a text run and serialize each glyph's vector path into a single
22
+ * SVG path data string. Y is flipped on the fly so the result is ready to
23
+ * embed in an SVG document with the standard top-left origin.
24
+ */
25
+ export function layoutText(opts) {
26
+ const font = getFont(opts.fontId);
27
+ const fontSize = opts.fontSize;
28
+ const scale = fontSize / font.unitsPerEm;
29
+ const x0 = opts.x ?? 0;
30
+ const baselineY = opts.baselineY ?? fontSize;
31
+ const letterSpacing = opts.letterSpacing ?? 0;
32
+ const run = font.layout(opts.text);
33
+ let cursorX = x0;
34
+ let pathData = '';
35
+ for (let i = 0; i < run.glyphs.length; i++) {
36
+ const glyph = run.glyphs[i];
37
+ const pos = run.positions[i];
38
+ const glyphX = cursorX + pos.xOffset * scale;
39
+ const glyphY = baselineY - pos.yOffset * scale; // flipped
40
+ pathData += pathToSvgData(glyph.path, scale, glyphX, glyphY);
41
+ cursorX += pos.xAdvance * scale + letterSpacing;
42
+ }
43
+ return {
44
+ pathData,
45
+ width: cursorX - x0,
46
+ capHeight: font.capHeight * scale,
47
+ ascent: font.ascent * scale,
48
+ descent: -font.descent * scale,
49
+ };
50
+ }
51
+ /** Measure a text run without producing path data. */
52
+ export function measureText(opts) {
53
+ const font = getFont(opts.fontId);
54
+ const fontSize = opts.fontSize;
55
+ const scale = fontSize / font.unitsPerEm;
56
+ const letterSpacing = opts.letterSpacing ?? 0;
57
+ const run = font.layout(opts.text);
58
+ let width = 0;
59
+ for (let i = 0; i < run.positions.length; i++) {
60
+ width += run.positions[i].xAdvance * scale + letterSpacing;
61
+ }
62
+ return { width, capHeight: font.capHeight * scale };
63
+ }
64
+ /**
65
+ * Compute the baseline Y so the cap-height visual centroid sits at parentY +
66
+ * parentH/2. This is what `align-items:center; line-height:1` does for short
67
+ * runs of digits / latin in SF Pro at status-bar sizes.
68
+ */
69
+ export function baselineForCenteredText(parentY, parentH, fontId, fontSize) {
70
+ const font = getFont(fontId);
71
+ const cap = font.capHeight * (fontSize / font.unitsPerEm);
72
+ return parentY + (parentH + cap) / 2;
73
+ }
74
+ /** Default font id for SF Pro at status-bar sizes. */
75
+ export function pickStatusBarFontId(weight = 'regular') {
76
+ return weight === 'semibold' ? 'text-semibold' : 'text-regular';
77
+ }
78
+ // ── Internal: glyph path → SVG path data ──────────────────────────────
79
+ /**
80
+ * Convert a fontkit Path to SVG path data, scaled by `scale` and translated
81
+ * to (dx, dy). Y is flipped on every coordinate (font Y-up → SVG Y-down).
82
+ *
83
+ * fontkit's Path.toSVG() returns the data in font units with Y-up; we'd then
84
+ * need a wrapping `<g transform="...">` to place each glyph. Doing the math
85
+ * inline produces a single flat path string with no nested groups, which Sharp
86
+ * (librsvg) handles slightly faster and which is easier to debug.
87
+ */
88
+ function pathToSvgData(path, scale, dx, dy) {
89
+ let s = '';
90
+ for (const cmd of path.commands) {
91
+ const a = cmd.args;
92
+ switch (cmd.command) {
93
+ case 'moveTo':
94
+ s += `M${fmt(dx + a[0] * scale)},${fmt(dy - a[1] * scale)}`;
95
+ break;
96
+ case 'lineTo':
97
+ s += `L${fmt(dx + a[0] * scale)},${fmt(dy - a[1] * scale)}`;
98
+ break;
99
+ case 'quadraticCurveTo':
100
+ s += `Q${fmt(dx + a[0] * scale)},${fmt(dy - a[1] * scale)} ${fmt(dx + a[2] * scale)},${fmt(dy - a[3] * scale)}`;
101
+ break;
102
+ case 'bezierCurveTo':
103
+ s += `C${fmt(dx + a[0] * scale)},${fmt(dy - a[1] * scale)} ${fmt(dx + a[2] * scale)},${fmt(dy - a[3] * scale)} ${fmt(dx + a[4] * scale)},${fmt(dy - a[5] * scale)}`;
104
+ break;
105
+ case 'closePath':
106
+ s += 'Z';
107
+ break;
108
+ }
109
+ }
110
+ return s;
111
+ }
112
+ /** Round to 3 decimals to keep generated SVGs compact. */
113
+ function fmt(n) {
114
+ return Number.isInteger(n) ? String(n) : (Math.round(n * 1000) / 1000).toString();
115
+ }
116
+ // Keep Font import side-effect free.
117
+ void null;
118
+ //# sourceMappingURL=svg-text.js.map