@monoes/monomindcli 2.15.6 → 2.15.7

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 (180) hide show
  1. package/dist/src/orgrt/completion-gate.d.ts +15 -0
  2. package/dist/src/orgrt/completion-gate.d.ts.map +1 -1
  3. package/dist/src/orgrt/completion-gate.js +59 -3
  4. package/dist/src/orgrt/completion-gate.js.map +1 -1
  5. package/dist/src/orgrt/daemon.d.ts +4 -0
  6. package/dist/src/orgrt/daemon.d.ts.map +1 -1
  7. package/dist/src/orgrt/daemon.js +1 -0
  8. package/dist/src/orgrt/daemon.js.map +1 -1
  9. package/dist/src/orgrt/decisions.d.ts +17 -0
  10. package/dist/src/orgrt/decisions.d.ts.map +1 -1
  11. package/dist/src/orgrt/decisions.js +104 -4
  12. package/dist/src/orgrt/decisions.js.map +1 -1
  13. package/dist/src/orgrt/review-packet.d.ts +1 -1
  14. package/dist/src/orgrt/review-packet.d.ts.map +1 -1
  15. package/dist/src/orgrt/review-packet.js +2 -2
  16. package/dist/src/orgrt/review-packet.js.map +1 -1
  17. package/dist/src/orgrt/session.d.ts +3 -0
  18. package/dist/src/orgrt/session.d.ts.map +1 -1
  19. package/dist/src/orgrt/session.js +6 -1
  20. package/dist/src/orgrt/session.js.map +1 -1
  21. package/dist/src/orgrt/task-dag.d.ts +3 -0
  22. package/dist/src/orgrt/task-dag.d.ts.map +1 -1
  23. package/dist/src/orgrt/task-dag.js +6 -0
  24. package/dist/src/orgrt/task-dag.js.map +1 -1
  25. package/dist/tsconfig.tsbuildinfo +1 -1
  26. package/package.json +4 -4
  27. package/.claude/skills/monodesign/SKILL.md +0 -257
  28. package/.claude/skills/monodesign/adapt.md +0 -53
  29. package/.claude/skills/monodesign/agents/monodesign-asset-producer.md +0 -100
  30. package/.claude/skills/monodesign/agents/monodesign-manual-edit-applier.md +0 -103
  31. package/.claude/skills/monodesign/animate.md +0 -65
  32. package/.claude/skills/monodesign/audit.md +0 -89
  33. package/.claude/skills/monodesign/bolder.md +0 -50
  34. package/.claude/skills/monodesign/clarify.md +0 -64
  35. package/.claude/skills/monodesign/colorize.md +0 -68
  36. package/.claude/skills/monodesign/craft.md +0 -51
  37. package/.claude/skills/monodesign/critique.md +0 -66
  38. package/.claude/skills/monodesign/delight.md +0 -47
  39. package/.claude/skills/monodesign/distill.md +0 -56
  40. package/.claude/skills/monodesign/document.md +0 -83
  41. package/.claude/skills/monodesign/extract.md +0 -74
  42. package/.claude/skills/monodesign/harden.md +0 -65
  43. package/.claude/skills/monodesign/init.md +0 -30
  44. package/.claude/skills/monodesign/layout.md +0 -36
  45. package/.claude/skills/monodesign/live.md +0 -34
  46. package/.claude/skills/monodesign/onboard.md +0 -50
  47. package/.claude/skills/monodesign/optimize.md +0 -64
  48. package/.claude/skills/monodesign/overdrive.md +0 -56
  49. package/.claude/skills/monodesign/polish.md +0 -68
  50. package/.claude/skills/monodesign/quieter.md +0 -57
  51. package/.claude/skills/monodesign/reference/adapt.md +0 -312
  52. package/.claude/skills/monodesign/reference/adapt.native.md +0 -58
  53. package/.claude/skills/monodesign/reference/android.md +0 -40
  54. package/.claude/skills/monodesign/reference/animate.md +0 -203
  55. package/.claude/skills/monodesign/reference/antipatterns-catalog.md +0 -410
  56. package/.claude/skills/monodesign/reference/audit.md +0 -135
  57. package/.claude/skills/monodesign/reference/audit.native.md +0 -139
  58. package/.claude/skills/monodesign/reference/bolder.md +0 -120
  59. package/.claude/skills/monodesign/reference/brand-workflow.md +0 -180
  60. package/.claude/skills/monodesign/reference/brand.md +0 -108
  61. package/.claude/skills/monodesign/reference/clarify.md +0 -288
  62. package/.claude/skills/monodesign/reference/codex.md +0 -105
  63. package/.claude/skills/monodesign/reference/cognitive-load.md +0 -106
  64. package/.claude/skills/monodesign/reference/color-and-contrast.md +0 -105
  65. package/.claude/skills/monodesign/reference/colorize.md +0 -257
  66. package/.claude/skills/monodesign/reference/component-specs.md +0 -260
  67. package/.claude/skills/monodesign/reference/component-states.md +0 -274
  68. package/.claude/skills/monodesign/reference/component-system.md +0 -358
  69. package/.claude/skills/monodesign/reference/copy-formulas.md +0 -160
  70. package/.claude/skills/monodesign/reference/craft.md +0 -123
  71. package/.claude/skills/monodesign/reference/critique.md +0 -780
  72. package/.claude/skills/monodesign/reference/delight.md +0 -302
  73. package/.claude/skills/monodesign/reference/design-principles.md +0 -246
  74. package/.claude/skills/monodesign/reference/distill.md +0 -111
  75. package/.claude/skills/monodesign/reference/document.md +0 -429
  76. package/.claude/skills/monodesign/reference/extract.md +0 -69
  77. package/.claude/skills/monodesign/reference/harden.md +0 -347
  78. package/.claude/skills/monodesign/reference/heuristics-scoring.md +0 -234
  79. package/.claude/skills/monodesign/reference/hooks.md +0 -92
  80. package/.claude/skills/monodesign/reference/image-prompts.md +0 -130
  81. package/.claude/skills/monodesign/reference/init.md +0 -221
  82. package/.claude/skills/monodesign/reference/interaction-design.md +0 -189
  83. package/.claude/skills/monodesign/reference/ios.md +0 -45
  84. package/.claude/skills/monodesign/reference/layout.md +0 -185
  85. package/.claude/skills/monodesign/reference/live.md +0 -710
  86. package/.claude/skills/monodesign/reference/motion-design.md +0 -109
  87. package/.claude/skills/monodesign/reference/onboard.md +0 -234
  88. package/.claude/skills/monodesign/reference/optimize.md +0 -258
  89. package/.claude/skills/monodesign/reference/overdrive.md +0 -130
  90. package/.claude/skills/monodesign/reference/personas.md +0 -179
  91. package/.claude/skills/monodesign/reference/polish.md +0 -241
  92. package/.claude/skills/monodesign/reference/pre-delivery-checklist.md +0 -108
  93. package/.claude/skills/monodesign/reference/product.md +0 -60
  94. package/.claude/skills/monodesign/reference/quieter.md +0 -99
  95. package/.claude/skills/monodesign/reference/responsive-design.md +0 -114
  96. package/.claude/skills/monodesign/reference/shape.md +0 -165
  97. package/.claude/skills/monodesign/reference/spatial-design.md +0 -100
  98. package/.claude/skills/monodesign/reference/teach.md +0 -10
  99. package/.claude/skills/monodesign/reference/token-architecture.md +0 -222
  100. package/.claude/skills/monodesign/reference/typeset.md +0 -301
  101. package/.claude/skills/monodesign/reference/typography.md +0 -159
  102. package/.claude/skills/monodesign/reference/ux-research.md +0 -143
  103. package/.claude/skills/monodesign/reference/ux-rules.md +0 -211
  104. package/.claude/skills/monodesign/reference/ux-writing.md +0 -107
  105. package/.claude/skills/monodesign/scripts/command-metadata.json +0 -94
  106. package/.claude/skills/monodesign/scripts/context-signals.mjs +0 -260
  107. package/.claude/skills/monodesign/scripts/context.mjs +0 -1065
  108. package/.claude/skills/monodesign/scripts/critique-storage.mjs +0 -416
  109. package/.claude/skills/monodesign/scripts/detect-csp.mjs +0 -193
  110. package/.claude/skills/monodesign/scripts/detect.mjs +0 -33
  111. package/.claude/skills/monodesign/scripts/detector/browser/injected/index.mjs +0 -1960
  112. package/.claude/skills/monodesign/scripts/detector/cli/main.mjs +0 -321
  113. package/.claude/skills/monodesign/scripts/detector/design-system.mjs +0 -814
  114. package/.claude/skills/monodesign/scripts/detector/detect-antipatterns-browser.js +0 -5628
  115. package/.claude/skills/monodesign/scripts/detector/detect-antipatterns.mjs +0 -50
  116. package/.claude/skills/monodesign/scripts/detector/engines/browser/detect-url.mjs +0 -259
  117. package/.claude/skills/monodesign/scripts/detector/engines/browser/drivers.mjs +0 -339
  118. package/.claude/skills/monodesign/scripts/detector/engines/regex/detect-text.mjs +0 -636
  119. package/.claude/skills/monodesign/scripts/detector/engines/static-html/css-cascade.mjs +0 -1016
  120. package/.claude/skills/monodesign/scripts/detector/engines/static-html/detect-html.mjs +0 -253
  121. package/.claude/skills/monodesign/scripts/detector/engines/visual/screenshot-contrast.mjs +0 -198
  122. package/.claude/skills/monodesign/scripts/detector/findings.mjs +0 -12
  123. package/.claude/skills/monodesign/scripts/detector/fix/css-regions.mjs +0 -181
  124. package/.claude/skills/monodesign/scripts/detector/fix/fixers.mjs +0 -373
  125. package/.claude/skills/monodesign/scripts/detector/fix/index.mjs +0 -426
  126. package/.claude/skills/monodesign/scripts/detector/node/file-system.mjs +0 -198
  127. package/.claude/skills/monodesign/scripts/detector/profile/profiler.mjs +0 -166
  128. package/.claude/skills/monodesign/scripts/detector/registry/antipatterns.mjs +0 -563
  129. package/.claude/skills/monodesign/scripts/detector/rules/checks.mjs +0 -3024
  130. package/.claude/skills/monodesign/scripts/detector/shared/color.mjs +0 -124
  131. package/.claude/skills/monodesign/scripts/detector/shared/constants.mjs +0 -101
  132. package/.claude/skills/monodesign/scripts/detector/shared/fonts.mjs +0 -30
  133. package/.claude/skills/monodesign/scripts/detector/shared/inline-ignores.mjs +0 -148
  134. package/.claude/skills/monodesign/scripts/detector/shared/page.mjs +0 -7
  135. package/.claude/skills/monodesign/scripts/hook-admin.mjs +0 -694
  136. package/.claude/skills/monodesign/scripts/hook-before-edit.mjs +0 -516
  137. package/.claude/skills/monodesign/scripts/hook-lib.mjs +0 -1785
  138. package/.claude/skills/monodesign/scripts/hook.mjs +0 -61
  139. package/.claude/skills/monodesign/scripts/lib/design-parser.mjs +0 -809
  140. package/.claude/skills/monodesign/scripts/lib/is-generated.mjs +0 -69
  141. package/.claude/skills/monodesign/scripts/lib/monodesign-config.mjs +0 -640
  142. package/.claude/skills/monodesign/scripts/lib/monodesign-paths.mjs +0 -129
  143. package/.claude/skills/monodesign/scripts/lib/provider.mjs +0 -4
  144. package/.claude/skills/monodesign/scripts/lib/target-args.mjs +0 -42
  145. package/.claude/skills/monodesign/scripts/live/browser-script-parts.mjs +0 -50
  146. package/.claude/skills/monodesign/scripts/live/completion.mjs +0 -19
  147. package/.claude/skills/monodesign/scripts/live/event-validation.mjs +0 -137
  148. package/.claude/skills/monodesign/scripts/live/insert-ui.mjs +0 -458
  149. package/.claude/skills/monodesign/scripts/live/manual-apply.mjs +0 -939
  150. package/.claude/skills/monodesign/scripts/live/manual-edit-routes.mjs +0 -357
  151. package/.claude/skills/monodesign/scripts/live/manual-edits-buffer.mjs +0 -152
  152. package/.claude/skills/monodesign/scripts/live/session-store.mjs +0 -293
  153. package/.claude/skills/monodesign/scripts/live/svelte-component.mjs +0 -826
  154. package/.claude/skills/monodesign/scripts/live/sveltekit-adapter.mjs +0 -279
  155. package/.claude/skills/monodesign/scripts/live/ui-core.mjs +0 -180
  156. package/.claude/skills/monodesign/scripts/live/vocabulary.mjs +0 -36
  157. package/.claude/skills/monodesign/scripts/live-accept.mjs +0 -812
  158. package/.claude/skills/monodesign/scripts/live-browser-dom.js +0 -147
  159. package/.claude/skills/monodesign/scripts/live-browser-session.js +0 -124
  160. package/.claude/skills/monodesign/scripts/live-browser.js +0 -11213
  161. package/.claude/skills/monodesign/scripts/live-commit-manual-edits.mjs +0 -1241
  162. package/.claude/skills/monodesign/scripts/live-complete.mjs +0 -75
  163. package/.claude/skills/monodesign/scripts/live-copy-edit-agent.mjs +0 -683
  164. package/.claude/skills/monodesign/scripts/live-discard-manual-edits.mjs +0 -51
  165. package/.claude/skills/monodesign/scripts/live-inject.mjs +0 -596
  166. package/.claude/skills/monodesign/scripts/live-insert.mjs +0 -272
  167. package/.claude/skills/monodesign/scripts/live-manual-edit-evidence.mjs +0 -363
  168. package/.claude/skills/monodesign/scripts/live-poll.mjs +0 -384
  169. package/.claude/skills/monodesign/scripts/live-resume.mjs +0 -94
  170. package/.claude/skills/monodesign/scripts/live-server.mjs +0 -1210
  171. package/.claude/skills/monodesign/scripts/live-status.mjs +0 -61
  172. package/.claude/skills/monodesign/scripts/live-target.mjs +0 -30
  173. package/.claude/skills/monodesign/scripts/live-wrap.mjs +0 -884
  174. package/.claude/skills/monodesign/scripts/live.mjs +0 -297
  175. package/.claude/skills/monodesign/scripts/modern-screenshot.umd.js +0 -14
  176. package/.claude/skills/monodesign/scripts/palette.mjs +0 -635
  177. package/.claude/skills/monodesign/scripts/pin.mjs +0 -221
  178. package/.claude/skills/monodesign/shape.md +0 -71
  179. package/.claude/skills/monodesign/teach.md +0 -18
  180. package/.claude/skills/monodesign/typeset.md +0 -59
@@ -1,297 +0,0 @@
1
- /**
2
- * CLI entry point: prepare everything needed to enter the live variant poll loop.
3
- *
4
- * Does (all in one command):
5
- * 1. Check .monodesign/live/config.json (returns config_missing if first-ever run)
6
- * 2. Start the live server in the background (or reuse a running one)
7
- * 3. Inject the browser script tag into the project's entry file
8
- * 4. Read PRODUCT.md / DESIGN.md for project context
9
- * 5. Print a single JSON blob with everything the agent needs
10
- *
11
- * After this, the agent's only remaining steps are:
12
- * - Open the project's live dev/preview URL in the browser (optional, if browser automation exists)—not `serverPort`; that port is the Monodesign helper for /live.js and /poll
13
- * - Enter the poll loop: `node live-poll.mjs`
14
- *
15
- * Usage:
16
- * node live.mjs # Prepare everything, print JSON, exit
17
- * node live.mjs --help
18
- */
19
-
20
- import { execSync } from 'node:child_process';
21
- import fs from 'node:fs';
22
- import path from 'node:path';
23
- import { fileURLToPath } from 'node:url';
24
- import { loadContext, resolveTargetSelection } from './context.mjs';
25
- import { resolveFiles } from './live-inject.mjs';
26
- import { readLiveServerInfo } from './lib/monodesign-paths.mjs';
27
- import { resolveLiveTarget } from './live-target.mjs';
28
-
29
- const __dirname = path.dirname(fileURLToPath(import.meta.url));
30
-
31
- async function liveCli() {
32
- const args = process.argv.slice(2);
33
- const liveTarget = resolveLiveTarget(process.cwd(), args);
34
-
35
- if (args.includes('--help') || args.includes('-h')) {
36
- console.log(`Usage: node live.mjs
37
-
38
- Prepare everything for live variant mode in a single command:
39
- - Checks .monodesign/live/config.json (required, created once per project)
40
- - Starts (or reuses) the live server in the background
41
- - Injects the browser script tag
42
- - Reads PRODUCT.md / DESIGN.md for project context
43
- - In monorepos, choose a child app first; --target <path> is the fallback/manual path
44
-
45
- On success, prints a JSON blob with:
46
- { ok, serverPort, serverToken, pageFiles, projectRoot, repoRoot, targetPath, productPath, designPath }
47
-
48
- On target_selection_required, prints:
49
- { ok: false, error: "target_selection_required", targetCandidates }
50
-
51
- On config_missing, prints:
52
- { ok: false, error: "config_missing", configPath, hint }
53
-
54
- The agent should then:
55
- 1. If target_selection_required, ask which app to use and rerun from that child cwd
56
- 2. If config_missing, create the config and re-run this script
57
- 3. Optionally open the project's dev/preview URL in the browser (see reference/live.md—not serverPort)
58
- 4. Enter the poll loop: node live-poll.mjs`);
59
- process.exit(0);
60
- }
61
-
62
- const targetSelection = resolveTargetSelection(liveTarget.originalCwd, liveTarget.targetOptions);
63
- if (targetSelection) {
64
- console.log(JSON.stringify({
65
- ok: false,
66
- error: 'target_selection_required',
67
- ...targetSelection,
68
- hint: 'Ask the user which app Monodesign should use, then rerun live from that child app cwd. Use --target <path> only as a fallback or explicit path diagnostic.',
69
- }, null, 2));
70
- process.exit(0);
71
- }
72
-
73
- const ctx = loadContext(liveTarget.originalCwd, liveTarget.targetOptions);
74
- const activeCwd = ctx.projectRoot;
75
- const outputTargetPath = liveTarget.targetPath || null;
76
-
77
- const missingContext = missingLiveContext(ctx);
78
- if (missingContext.length > 0) {
79
- console.log(JSON.stringify({
80
- ok: false,
81
- error: 'context_missing',
82
- missing: missingContext,
83
- nextCommand: missingContext.includes('PRODUCT.md') ? 'init' : 'document',
84
- targetPath: outputTargetPath,
85
- projectRoot: ctx.projectRoot,
86
- repoRoot: ctx.repoRoot,
87
- productPath: ctx.productPath,
88
- designPath: ctx.designPath,
89
- }, null, 2));
90
- process.exit(0);
91
- }
92
-
93
- // 1. Check config (fail fast if missing — no point starting anything else)
94
- const checkOut = runScript('live-inject.mjs', ['--check'], { cwd: activeCwd });
95
- const checkResult = safeParse(checkOut);
96
- if (!checkResult?.ok) {
97
- console.log(JSON.stringify({
98
- ...(checkResult || { ok: false, error: 'check_failed', raw: checkOut }),
99
- targetPath: outputTargetPath,
100
- projectRoot: ctx.projectRoot,
101
- repoRoot: ctx.repoRoot,
102
- }));
103
- process.exit(0);
104
- }
105
-
106
- // 2. Start server (or reuse existing)
107
- const serverInfo = ensureServerRunning(activeCwd);
108
- if (!serverInfo) {
109
- console.log(JSON.stringify({ ok: false, error: 'server_start_failed' }));
110
- process.exit(1);
111
- }
112
-
113
- // 3. Inject the script tag at the current port
114
- const injectOut = runScript('live-inject.mjs', ['--port', String(serverInfo.port)], { cwd: activeCwd });
115
- const injectResult = safeParse(injectOut);
116
- if (!injectResult?.ok) {
117
- console.log(JSON.stringify({
118
- ok: false,
119
- error: 'inject_failed',
120
- detail: injectResult || injectOut,
121
- serverPort: serverInfo.port,
122
- }));
123
- process.exit(1);
124
- }
125
-
126
- // 4. Compute drift-heal: compare resolved inject targets against the
127
- // project's HTML files. Orphans are HTML files not covered by config.
128
- // Warning only — the agent decides whether to act.
129
- const resolvedFiles = resolveFiles(activeCwd, checkResult.config);
130
- const drift = scanForDrift(activeCwd, resolvedFiles, checkResult.config);
131
-
132
- // 5. Emit everything the agent needs
133
- console.log(JSON.stringify({
134
- ok: true,
135
- serverPort: serverInfo.port,
136
- serverToken: serverInfo.token,
137
- pageFiles: resolvedFiles,
138
- liveConfigPath: checkResult.path,
139
- configDrift: drift,
140
- targetPath: outputTargetPath,
141
- projectRoot: ctx.projectRoot,
142
- repoRoot: ctx.repoRoot,
143
- hasProduct: ctx.hasProduct,
144
- product: ctx.product,
145
- productPath: ctx.productPath,
146
- hasDesign: ctx.hasDesign,
147
- design: ctx.design,
148
- designPath: ctx.designPath,
149
- }, null, 2));
150
- }
151
-
152
- function missingLiveContext(ctx) {
153
- const missing = [];
154
- if (!ctx.hasProduct) missing.push('PRODUCT.md');
155
- if (!ctx.hasDesign) missing.push('DESIGN.md');
156
- return missing;
157
- }
158
-
159
- /**
160
- * Drift-heal scan. Walks the project for HTML files under common
161
- * page-source directories (public/, src/, app/, pages/) and reports any
162
- * that aren't covered by the resolved inject targets. This is purely
163
- * advisory — the agent can ignore it, or suggest the user add the
164
- * orphans to config.files.
165
- *
166
- * Skipped if config.files already contains at least one glob pattern
167
- * covering everything in practice (signaled by the orphan count being 0).
168
- */
169
- function scanForDrift(rootDir, resolvedFiles, config) {
170
- const SCAN_ROOTS = ['public', 'src', 'app', 'pages'];
171
- const IGNORE_DIRS = new Set([
172
- 'node_modules', '.git', '.next', '.nuxt', '.svelte-kit', '.astro',
173
- '.turbo', '.vercel', '.cache', 'coverage', 'dist', 'build',
174
- ]);
175
-
176
- const resolvedSet = new Set(resolvedFiles.map((f) => f.split(path.sep).join('/')));
177
-
178
- // Files matching the user's `exclude` globs are intentional omissions,
179
- // not drift. Compile them to regexes so the orphan list stays signal.
180
- const userExcludeRegexes = (Array.isArray(config.exclude) ? config.exclude : [])
181
- .map((p) => globToRegex(p));
182
- const isUserExcluded = (rel) => userExcludeRegexes.some((re) => re.test(rel));
183
-
184
- const orphans = [];
185
-
186
- const walk = (dir, relBase) => {
187
- let entries;
188
- try { entries = fs.readdirSync(dir, { withFileTypes: true }); }
189
- catch { return; }
190
- for (const e of entries) {
191
- const rel = relBase ? `${relBase}/${e.name}` : e.name;
192
- if (e.isDirectory()) {
193
- if (IGNORE_DIRS.has(e.name) || e.name.startsWith('.')) continue;
194
- walk(path.join(dir, e.name), rel);
195
- } else if (e.isFile() && e.name.endsWith('.html')) {
196
- if (resolvedSet.has(rel)) continue;
197
- if (isUserExcluded(rel)) continue;
198
- orphans.push(rel);
199
- }
200
- }
201
- };
202
-
203
- for (const root of SCAN_ROOTS) {
204
- const abs = path.join(rootDir, root);
205
- if (fs.existsSync(abs) && fs.statSync(abs).isDirectory()) {
206
- walk(abs, root);
207
- }
208
- }
209
-
210
- if (orphans.length === 0) return null;
211
- const capped = orphans.slice(0, 20);
212
- return {
213
- orphans: capped,
214
- orphanCount: orphans.length,
215
- hint: `${orphans.length} HTML file(s) exist but aren't in config.files. Consider adding them, or use a glob pattern like "public/**/*.html".`,
216
- };
217
- }
218
-
219
- /**
220
- * Same glob-to-regex mapping used by live-inject.mjs. Kept inline here
221
- * to avoid a circular import (live-inject.mjs already imports nothing
222
- * from live.mjs). The two must stay in sync.
223
- */
224
- function globToRegex(pattern) {
225
- let re = '';
226
- let i = 0;
227
- while (i < pattern.length) {
228
- const c = pattern[i];
229
- if (c === '*') {
230
- if (pattern[i + 1] === '*') {
231
- if (pattern[i + 2] === '/') { re += '(?:.*/)?'; i += 3; }
232
- else { re += '.*'; i += 2; }
233
- } else {
234
- re += '[^/]*';
235
- i += 1;
236
- }
237
- } else if (c === '?') {
238
- re += '[^/]';
239
- i += 1;
240
- } else if (/[.+^${}()|[\]\\]/.test(c)) {
241
- re += `\\${c}`;
242
- i += 1;
243
- } else {
244
- re += c;
245
- i += 1;
246
- }
247
- }
248
- return new RegExp(`^${re}$`);
249
- }
250
-
251
- // ---------------------------------------------------------------------------
252
- // Helpers
253
- // ---------------------------------------------------------------------------
254
-
255
- function runScript(name, args, options = {}) {
256
- const scriptPath = path.join(__dirname, name);
257
- const cmd = `node "${scriptPath}" ${args.map(a => `"${a}"`).join(' ')}`;
258
- try {
259
- return execSync(cmd, { encoding: 'utf-8', cwd: options.cwd || process.cwd(), timeout: 15_000 });
260
- } catch (err) {
261
- // execSync throws on non-zero exit; return stdout if any
262
- return err.stdout || err.message || '';
263
- }
264
- }
265
-
266
- function safeParse(out) {
267
- try { return JSON.parse(String(out).trim()); } catch { return null; }
268
- }
269
-
270
- /**
271
- * Return { pid, port, token } for the running live server, starting one if needed.
272
- */
273
- function ensureServerRunning(cwd = process.cwd()) {
274
- // Try to reuse an existing server
275
- try {
276
- const existing = readLiveServerInfo(cwd)?.info;
277
- if (existing?.pid) {
278
- try {
279
- process.kill(existing.pid, 0); // throws if dead
280
- return existing;
281
- } catch { /* stale PID file — the server script will clean it up */ }
282
- }
283
- } catch { /* no PID file */ }
284
-
285
- // Start a new server
286
- const out = runScript('live-server.mjs', ['--background'], { cwd });
287
- return safeParse(out);
288
- }
289
-
290
- // ---------------------------------------------------------------------------
291
- // Auto-execute
292
- // ---------------------------------------------------------------------------
293
-
294
- const _running = process.argv[1];
295
- if (_running?.endsWith('live.mjs') || _running?.endsWith('live.mjs/')) {
296
- liveCli();
297
- }
@@ -1,14 +0,0 @@
1
- (function(y,v){typeof exports=="object"&&typeof module!="undefined"?v(exports):typeof define=="function"&&define.amd?define(["exports"],v):(y=typeof globalThis!="undefined"?globalThis:y||self,v(y.modernScreenshot={}))})(this,function(y){"use strict";var rr=Object.defineProperty,nr=Object.defineProperties;var or=Object.getOwnPropertyDescriptors;var Z=Object.getOwnPropertySymbols;var xe=Object.prototype.hasOwnProperty,Me=Object.prototype.propertyIsEnumerable;var Oe=Math.pow,Le=(y,v,N)=>v in y?rr(y,v,{enumerable:!0,configurable:!0,writable:!0,value:N}):y[v]=N,D=(y,v)=>{for(var N in v||(v={}))xe.call(v,N)&&Le(y,N,v[N]);if(Z)for(var N of Z(v))Me.call(v,N)&&Le(y,N,v[N]);return y},M=(y,v)=>nr(y,or(v));var je=(y,v)=>{var N={};for(var R in y)xe.call(y,R)&&v.indexOf(R)<0&&(N[R]=y[R]);if(y!=null&&Z)for(var R of Z(y))v.indexOf(R)<0&&Me.call(y,R)&&(N[R]=y[R]);return N};var C=(y,v,N)=>new Promise((R,O)=>{var X=P=>{try{q(N.next(P))}catch(W){O(W)}},j=P=>{try{q(N.throw(P))}catch(W){O(W)}},q=P=>P.done?R(P.value):Promise.resolve(P.value).then(X,j);q((N=N.apply(y,v)).next())});var Be;function v(e,t){return e[13]=1,e[14]=t>>8,e[15]=t&255,e[16]=t>>8,e[17]=t&255,e}const N=112,R=72,O=89,X=115;let j;function q(){const e=new Int32Array(256);for(let t=0;t<256;t++){let r=t;for(let n=0;n<8;n++)r=r&1?3988292384^r>>>1:r>>>1;e[t]=r}return e}function P(e){let t=-1;j||(j=q());for(let r=0;r<e.length;r++)t=j[(t^e[r])&255]^t>>>8;return t^-1}function W(e){const t=e.length-1;for(let r=t;r>=4;r--)if(e[r-4]===9&&e[r-3]===N&&e[r-2]===R&&e[r-1]===O&&e[r]===X)return r-3;return 0}function ae(e,t,r=!1){const n=new Uint8Array(13);t*=39.3701,n[0]=N,n[1]=R,n[2]=O,n[3]=X,n[4]=t>>>24,n[5]=t>>>16,n[6]=t>>>8,n[7]=t&255,n[8]=n[4],n[9]=n[5],n[10]=n[6],n[11]=n[7],n[12]=1;const i=P(n),a=new Uint8Array(4);if(a[0]=i>>>24,a[1]=i>>>16,a[2]=i>>>8,a[3]=i&255,r){const s=W(e);return e.set(n,s),e.set(a,s+13),e}else{const s=new Uint8Array(4);s[0]=0,s[1]=0,s[2]=0,s[3]=9;const o=new Uint8Array(54);return o.set(e,0),o.set(s,33),o.set(n,37),o.set(a,50),o}}const qe="AAlwSFlz",We="AAAJcEhZ",He="AAAACXBI";function Ve(e){let t=e.indexOf(qe);return t===-1&&(t=e.indexOf(We)),t===-1&&(t=e.indexOf(He)),t}const se="[modern-screenshot]",U=typeof window!="undefined",ze=U&&"Worker"in window,ie=U&&"atob"in window,Xe=U&&"btoa"in window,ee=U?(Be=window.navigator)==null?void 0:Be.userAgent:"",le=ee.includes("Chrome"),G=ee.includes("AppleWebKit")&&!le,te=ee.includes("Firefox"),Ge=e=>e&&"__CONTEXT__"in e,Ye=e=>e.constructor.name==="CSSFontFaceRule",Je=e=>e.constructor.name==="CSSImportRule",Ke=e=>e.constructor.name==="CSSLayerBlockRule",I=e=>e.nodeType===1,H=e=>typeof e.className=="object",ce=e=>e.tagName==="image",Qe=e=>e.tagName==="use",V=e=>I(e)&&typeof e.style!="undefined"&&!H(e),Ze=e=>e.nodeType===8,et=e=>e.nodeType===3,$=e=>e.tagName==="IMG",Y=e=>e.tagName==="VIDEO",tt=e=>e.tagName==="CANVAS",rt=e=>e.tagName==="TEXTAREA",nt=e=>e.tagName==="INPUT",ot=e=>e.tagName==="STYLE",at=e=>e.tagName==="SCRIPT",st=e=>e.tagName==="SELECT",it=e=>e.tagName==="SLOT",lt=e=>e.tagName==="IFRAME",ct=(...e)=>console.warn(se,...e);function ut(e){var r;const t=(r=e==null?void 0:e.createElement)==null?void 0:r.call(e,"canvas");return t&&(t.height=t.width=1),!!t&&"toDataURL"in t&&!!t.toDataURL("image/webp").includes("image/webp")}const re=e=>e.startsWith("data:");function ue(e,t){if(e.match(/^[a-z]+:\/\//i))return e;if(U&&e.match(/^\/\//))return window.location.protocol+e;if(e.match(/^[a-z]+:/i)||!U)return e;const r=J().implementation.createHTMLDocument(),n=r.createElement("base"),i=r.createElement("a");return r.head.appendChild(n),r.body.appendChild(i),t&&(n.href=t),i.href=e,i.href}function J(e){var t;return(t=e&&I(e)?e==null?void 0:e.ownerDocument:e)!=null?t:window.document}const K="http://www.w3.org/2000/svg";function fe(e,t,r){const n=J(r).createElementNS(K,"svg");return n.setAttributeNS(null,"width",e.toString()),n.setAttributeNS(null,"height",t.toString()),n.setAttributeNS(null,"viewBox",`0 0 ${e} ${t}`),n}function de(e,t){let r=new XMLSerializer().serializeToString(e);return t&&(r=r.replace(/[\u0000-\u0008\v\f\u000E-\u001F\uD800-\uDFFF\uFFFE\uFFFF]/gu,"")),`data:image/svg+xml;charset=utf-8,${encodeURIComponent(r)}`}function ft(e,t="image/png",r=1){return C(this,null,function*(){try{return yield new Promise((n,i)=>{e.toBlob(a=>{a?n(a):i(new Error("Blob is null"))},t,r)})}catch(n){if(ie)return dt(e.toDataURL(t,r));throw n}})}function dt(e){var o,c;const[t,r]=e.split(","),n=(c=(o=t.match(/data:(.+);/))==null?void 0:o[1])!=null?c:void 0,i=window.atob(r),a=i.length,s=new Uint8Array(a);for(let u=0;u<a;u+=1)s[u]=i.charCodeAt(u);return new Blob([s],{type:n})}function ge(e,t){return new Promise((r,n)=>{const i=new FileReader;i.onload=()=>r(i.result),i.onerror=()=>n(i.error),i.onabort=()=>n(new Error(`Failed read blob to ${t}`)),t==="dataUrl"?i.readAsDataURL(e):t==="arrayBuffer"&&i.readAsArrayBuffer(e)})}const gt=e=>ge(e,"dataUrl"),mt=e=>ge(e,"arrayBuffer");function _(e,t){const r=J(t).createElement("img");return r.decoding="sync",r.loading="eager",r.src=e,r}function L(e,t){return new Promise(r=>{const{timeout:n,ownerDocument:i,onError:a,onWarn:s}=t!=null?t:{},o=typeof e=="string"?_(e,J(i)):e;let c=null,u=null;function l(){r(o),c&&clearTimeout(c),u==null||u()}if(n&&(c=setTimeout(l,n)),Y(o)){const d=o.currentSrc||o.src;if(!d)return o.poster?L(o.poster,t).then(r):l();if(o.readyState>=2)return l();const m=l,f=h=>{s==null||s("Failed video load",d,h),a==null||a(h),l()};u=()=>{o.removeEventListener("loadeddata",m),o.removeEventListener("error",f)},o.addEventListener("loadeddata",m,{once:!0}),o.addEventListener("error",f,{once:!0})}else{const d=ce(o)?o.href.baseVal:o.currentSrc||o.src;if(!d)return l();const m=()=>C(this,null,function*(){if($(o)&&"decode"in o)try{yield o.decode()}catch(h){s==null||s("Failed to decode image, trying to render anyway",o.dataset.originalSrc||d,h)}l()}),f=h=>{s==null||s("Failed image load",o.dataset.originalSrc||d,h),l()};if($(o)&&o.complete)return m();u=()=>{o.removeEventListener("load",m),o.removeEventListener("error",f)},o.addEventListener("load",m,{once:!0}),o.addEventListener("error",f,{once:!0})}})}function me(e,t){return C(this,null,function*(){V(e)&&($(e)||Y(e)?yield L(e,t):yield Promise.all(["img","video"].flatMap(r=>Array.from(e.querySelectorAll(r)).map(n=>L(n,t)))))})}const he=function(){let t=0;const r=()=>`0000${(Math.random()*Oe(36,4)<<0).toString(36)}`.slice(-4);return()=>(t+=1,`u${r()}${t}`)}();function we(e){return e==null?void 0:e.split(",").map(t=>t.trim().replace(/"|'/g,"").toLowerCase()).filter(Boolean)}let pe=0;function ht(e){const t=`${se}[#${pe}]`;return pe++,{time:r=>e&&console.time(`${t} ${r}`),timeEnd:r=>e&&console.timeEnd(`${t} ${r}`),warn:(...r)=>e&&ct(...r)}}function wt(e){return{cache:e?"no-cache":"force-cache"}}function k(e,t){return C(this,null,function*(){return Ge(e)?e:ye(e,M(D({},t),{autoDestruct:!0}))})}function ye(e,t){return C(this,null,function*(){var f,h,g,p,E;const{scale:r=1,workerUrl:n,workerNumber:i=1}=t||{},a=!!(t!=null&&t.debug),s=(f=t==null?void 0:t.features)!=null?f:!0,o=(h=e.ownerDocument)!=null?h:U?window.document:void 0,c=(p=(g=e.ownerDocument)==null?void 0:g.defaultView)!=null?p:U?window:void 0,u=new Map,l=M(D({width:0,height:0,quality:1,type:"image/png",scale:r,backgroundColor:null,style:null,filter:null,maximumCanvasSize:0,timeout:3e4,progress:null,debug:a,fetch:D({requestInit:wt((E=t==null?void 0:t.fetch)==null?void 0:E.bypassingCache),placeholderImage:"data:image/png;base64,R0lGODlhAQABAIAAAAAAAP///yH5BAEAAAAALAAAAAABAAEAAAIBRAA7",bypassingCache:!1},t==null?void 0:t.fetch),fetchFn:null,font:{},drawImageInterval:100,workerUrl:null,workerNumber:i,onCloneEachNode:null,onCloneNode:null,onEmbedNode:null,onCreateForeignObjectSvg:null,includeStyleProperties:null,autoDestruct:!1},t),{__CONTEXT__:!0,log:ht(a),node:e,ownerDocument:o,ownerWindow:c,dpi:r===1?null:96*r,svgStyleElement:be(o),svgDefsElement:o==null?void 0:o.createElementNS(K,"defs"),svgStyles:new Map,defaultComputedStyles:new Map,workers:[...Array.from({length:ze&&n&&i?i:0})].map(()=>{try{const b=new Worker(n);return b.onmessage=w=>C(this,null,function*(){var A,F,B,$e;const{url:S,result:T}=w.data;T?(F=(A=u.get(S))==null?void 0:A.resolve)==null||F.call(A,T):($e=(B=u.get(S))==null?void 0:B.reject)==null||$e.call(B,new Error(`Error receiving message from worker: ${S}`))}),b.onmessageerror=w=>{var T,A;const{url:S}=w.data;(A=(T=u.get(S))==null?void 0:T.reject)==null||A.call(T,new Error(`Error receiving message from worker: ${S}`))},b}catch(b){return l.log.warn("Failed to new Worker",b),null}}).filter(Boolean),fontFamilies:new Map,fontCssTexts:new Map,acceptOfImage:`${[ut(o)&&"image/webp","image/svg+xml","image/*","*/*"].filter(Boolean).join(",")};q=0.8`,requests:u,drawImageCount:0,tasks:[],features:s,isEnable:b=>{var w,S;return b==="restoreScrollPosition"?typeof s=="boolean"?!1:(w=s[b])!=null?w:!1:typeof s=="boolean"?s:(S=s[b])!=null?S:!0},shadowRoots:[]});l.log.time("wait until load"),yield me(e,{timeout:l.timeout,onWarn:l.log.warn}),l.log.timeEnd("wait until load");const{width:d,height:m}=pt(e,l);return l.width=d,l.height=m,l})}function be(e){if(!e)return;const t=e.createElement("style"),r=t.ownerDocument.createTextNode(`
2
- .______background-clip--text {
3
- background-clip: text;
4
- -webkit-background-clip: text;
5
- }
6
- `);return t.appendChild(r),t}function pt(e,t){let{width:r,height:n}=t;if(I(e)&&(!r||!n)){const i=e.getBoundingClientRect();r=r||i.width||Number(e.getAttribute("width"))||0,n=n||i.height||Number(e.getAttribute("height"))||0}return{width:r,height:n}}function yt(e,t){return C(this,null,function*(){const{log:r,timeout:n,drawImageCount:i,drawImageInterval:a}=t;r.time("image to canvas");const s=yield L(e,{timeout:n,onWarn:t.log.warn}),{canvas:o,context2d:c}=bt(e.ownerDocument,t),u=()=>{try{c==null||c.drawImage(s,0,0,o.width,o.height)}catch(l){t.log.warn("Failed to drawImage",l)}};if(u(),t.isEnable("fixSvgXmlDecode"))for(let l=0;l<i;l++)yield new Promise(d=>{setTimeout(()=>{c==null||c.clearRect(0,0,o.width,o.height),u(),d()},l+a)});return t.drawImageCount=0,r.timeEnd("image to canvas"),o})}function bt(e,t){const{width:r,height:n,scale:i,backgroundColor:a,maximumCanvasSize:s}=t,o=e.createElement("canvas");o.width=Math.floor(r*i),o.height=Math.floor(n*i),o.style.width=`${r}px`,o.style.height=`${n}px`,s&&(o.width>s||o.height>s)&&(o.width>s&&o.height>s?o.width>o.height?(o.height*=s/o.width,o.width=s):(o.width*=s/o.height,o.height=s):o.width>s?(o.height*=s/o.width,o.width=s):(o.width*=s/o.height,o.height=s));const c=o.getContext("2d");return c&&a&&(c.fillStyle=a,c.fillRect(0,0,o.width,o.height)),{canvas:o,context2d:c}}function Se(e,t){if(e.ownerDocument)try{const a=e.toDataURL();if(a!=="data:,")return _(a,e.ownerDocument)}catch(a){t.log.warn("Failed to clone canvas",a)}const r=e.cloneNode(!1),n=e.getContext("2d"),i=r.getContext("2d");try{return n&&i&&i.putImageData(n.getImageData(0,0,e.width,e.height),0,0),r}catch(a){t.log.warn("Failed to clone canvas",a)}return r}function St(e,t){var r;try{if((r=e==null?void 0:e.contentDocument)!=null&&r.documentElement)return ne(e.contentDocument.documentElement,t)}catch(n){t.log.warn("Failed to clone iframe",n)}return e.cloneNode(!1)}function Et(e){const t=e.cloneNode(!1);return e.currentSrc&&e.currentSrc!==e.src&&(t.src=e.currentSrc,t.srcset=""),t.loading==="lazy"&&(t.loading="eager"),t}function Ct(e,t){return C(this,null,function*(){if(e.ownerDocument&&!e.currentSrc&&e.poster)return _(e.poster,e.ownerDocument);const r=e.cloneNode(!1);r.crossOrigin="anonymous",e.currentSrc&&e.currentSrc!==e.src&&(r.src=e.currentSrc);const n=r.ownerDocument;if(n){let i=!0;if(yield L(r,{onError:()=>i=!1,onWarn:t.log.warn}),!i)return e.poster?_(e.poster,e.ownerDocument):r;r.currentTime=e.currentTime,yield new Promise(s=>{r.addEventListener("seeked",s,{once:!0})});const a=n.createElement("canvas");a.width=e.offsetWidth,a.height=e.offsetHeight;try{const s=a.getContext("2d");s&&s.drawImage(r,0,0,a.width,a.height)}catch(s){return t.log.warn("Failed to clone video",s),e.poster?_(e.poster,e.ownerDocument):r}return Se(a,t)}return r})}function Tt(e,t){return tt(e)?Se(e,t):lt(e)?St(e,t):$(e)?Et(e):Y(e)?Ct(e,t):e.cloneNode(!1)}function vt(e){let t=e.sandbox;if(!t){const{ownerDocument:r}=e;try{r&&(t=r.createElement("iframe"),t.id=`__SANDBOX__${he()}`,t.width="0",t.height="0",t.style.visibility="hidden",t.style.position="fixed",r.body.appendChild(t),t.srcdoc='<!DOCTYPE html><meta charset="UTF-8"><title></title><body>',e.sandbox=t)}catch(n){e.log.warn("Failed to getSandBox",n)}}return t}const At=["width","height","-webkit-text-fill-color"],Nt=["stroke","fill"];function Ee(e,t,r){const{defaultComputedStyles:n}=r,i=e.nodeName.toLowerCase(),a=H(e)&&i!=="svg",s=a?Nt.map(g=>[g,e.getAttribute(g)]).filter(([,g])=>g!==null):[],o=[a&&"svg",i,s.map((g,p)=>`${g}=${p}`).join(","),t].filter(Boolean).join(":");if(n.has(o))return n.get(o);const c=vt(r),u=c==null?void 0:c.contentWindow;if(!u)return new Map;const l=u==null?void 0:u.document;let d,m;a?(d=l.createElementNS(K,"svg"),m=d.ownerDocument.createElementNS(d.namespaceURI,i),s.forEach(([g,p])=>{m.setAttributeNS(null,g,p)}),d.appendChild(m)):d=m=l.createElement(i),m.textContent=" ",l.body.appendChild(d);const f=u.getComputedStyle(m,t),h=new Map;for(let g=f.length,p=0;p<g;p++){const E=f.item(p);At.includes(E)||h.set(E,f.getPropertyValue(E))}return l.body.removeChild(d),n.set(o,h),h}function Ce(e,t,r){var o;const n=new Map,i=[],a=new Map;if(r)for(const c of r)s(c);else for(let c=e.length,u=0;u<c;u++){const l=e.item(u);s(l)}for(let c=i.length,u=0;u<c;u++)(o=a.get(i[u]))==null||o.forEach((l,d)=>n.set(d,l));function s(c){const u=e.getPropertyValue(c),l=e.getPropertyPriority(c),d=c.lastIndexOf("-"),m=d>-1?c.substring(0,d):void 0;if(m){let f=a.get(m);f||(f=new Map,a.set(m,f)),f.set(c,[u,l])}t.get(c)===u&&!l||(m?i.push(m):n.set(c,[u,l]))}return n}function Rt(e,t,r,n){var d,m,f,h;const{ownerWindow:i,includeStyleProperties:a,currentParentNodeStyle:s}=n,o=t.style,c=i.getComputedStyle(e),u=Ee(e,null,n);s==null||s.forEach((g,p)=>{u.delete(p)});const l=Ce(c,u,a);l.delete("transition-property"),l.delete("all"),l.delete("d"),l.delete("content"),r&&(l.delete("position"),l.delete("margin-top"),l.delete("margin-right"),l.delete("margin-bottom"),l.delete("margin-left"),l.delete("margin-block-start"),l.delete("margin-block-end"),l.delete("margin-inline-start"),l.delete("margin-inline-end"),l.set("box-sizing",["border-box",""])),((d=l.get("background-clip"))==null?void 0:d[0])==="text"&&t.classList.add("______background-clip--text"),le&&(l.has("font-kerning")||l.set("font-kerning",["normal",""]),(((m=l.get("overflow-x"))==null?void 0:m[0])==="hidden"||((f=l.get("overflow-y"))==null?void 0:f[0])==="hidden")&&((h=l.get("text-overflow"))==null?void 0:h[0])==="ellipsis"&&e.scrollWidth===e.clientWidth&&l.set("text-overflow",["clip",""]));for(let g=o.length,p=0;p<g;p++)o.removeProperty(o.item(p));return l.forEach(([g,p],E)=>{o.setProperty(E,g,p)}),l}function It(e,t){(rt(e)||nt(e)||st(e))&&t.setAttribute("value",e.value)}const kt=["::before","::after"],Dt=["::-webkit-scrollbar","::-webkit-scrollbar-button","::-webkit-scrollbar-thumb","::-webkit-scrollbar-track","::-webkit-scrollbar-track-piece","::-webkit-scrollbar-corner","::-webkit-resizer"];function Pt(e,t,r,n,i){const{ownerWindow:a,svgStyleElement:s,svgStyles:o,currentNodeStyle:c}=n;if(!s||!a)return;function u(l){var w;const d=a.getComputedStyle(e,l);let m=d.getPropertyValue("content");if(!m||m==="none")return;i==null||i(m),m=m.replace(/(')|(")|(counter\(.+\))/g,"");const f=[he()],h=Ee(e,l,n);c==null||c.forEach((S,T)=>{h.delete(T)});const g=Ce(d,h,n.includeStyleProperties);g.delete("content"),g.delete("-webkit-locale"),((w=g.get("background-clip"))==null?void 0:w[0])==="text"&&t.classList.add("______background-clip--text");const p=[`content: '${m}';`];if(g.forEach(([S,T],A)=>{p.push(`${A}: ${S}${T?" !important":""};`)}),p.length===1)return;try{t.className=[t.className,...f].join(" ")}catch(S){n.log.warn("Failed to copyPseudoClass",S);return}const E=p.join(`
7
- `);let b=o.get(E);b||(b=[],o.set(E,b)),b.push(`.${f[0]}${l}`)}kt.forEach(u),r&&Dt.forEach(u)}const Te=new Set(["symbol"]);function ve(e,t,r,n,i){return C(this,null,function*(){if(I(r)&&(ot(r)||at(r))||n.filter&&!n.filter(r))return;Te.has(t.nodeName)||Te.has(r.nodeName)?n.currentParentNodeStyle=void 0:n.currentParentNodeStyle=n.currentNodeStyle;const a=yield ne(r,n,!1,i);n.isEnable("restoreScrollPosition")&&Ut(e,a),t.appendChild(a)})}function Ae(e,t,r,n){return C(this,null,function*(){var a;let i=e.firstChild;I(e)&&e.shadowRoot&&(i=(a=e.shadowRoot)==null?void 0:a.firstChild,r.shadowRoots.push(e.shadowRoot));for(let s=i;s;s=s.nextSibling)if(!Ze(s))if(I(s)&&it(s)&&typeof s.assignedNodes=="function"){const o=s.assignedNodes();for(let c=0;c<o.length;c++)yield ve(e,t,o[c],r,n)}else yield ve(e,t,s,r,n)})}function Ut(e,t){if(!V(e)||!V(t))return;const{scrollTop:r,scrollLeft:n}=e;if(!r&&!n)return;const{transform:i}=t.style,a=new DOMMatrix(i),{a:s,b:o,c,d:u}=a;a.a=1,a.b=0,a.c=0,a.d=1,a.translateSelf(-n,-r),a.a=s,a.b=o,a.c=c,a.d=u,t.style.transform=a.toString()}function _t(e,t){const{backgroundColor:r,width:n,height:i,style:a}=t,s=e.style;if(r&&s.setProperty("background-color",r,"important"),n&&s.setProperty("width",`${n}px`,"important"),i&&s.setProperty("height",`${i}px`,"important"),a)for(const o in a)s[o]=a[o]}const Ft=/^[\w-:]+$/;function ne(e,t,r=!1,n){return C(this,null,function*(){var u,l,d,m;const{ownerDocument:i,ownerWindow:a,fontFamilies:s,onCloneEachNode:o}=t;if(i&&et(e))return n&&/\S/.test(e.data)&&n(e.data),i.createTextNode(e.data);if(i&&a&&I(e)&&(V(e)||H(e))){const f=yield Tt(e,t);if(t.isEnable("removeAbnormalAttributes")){const w=f.getAttributeNames();for(let S=w.length,T=0;T<S;T++){const A=w[T];Ft.test(A)||f.removeAttribute(A)}}const h=t.currentNodeStyle=Rt(e,f,r,t);r&&_t(f,t);let g=!1;if(t.isEnable("copyScrollbar")){const w=[(u=h.get("overflow-x"))==null?void 0:u[0],(l=h.get("overflow-y"))==null?void 0:l[0]];g=w.includes("scroll")||(w.includes("auto")||w.includes("overlay"))&&(e.scrollHeight>e.clientHeight||e.scrollWidth>e.clientWidth)}const p=(d=h.get("text-transform"))==null?void 0:d[0],E=we((m=h.get("font-family"))==null?void 0:m[0]),b=E?w=>{p==="uppercase"?w=w.toUpperCase():p==="lowercase"?w=w.toLowerCase():p==="capitalize"&&(w=w[0].toUpperCase()+w.substring(1)),E.forEach(S=>{let T=s.get(S);T||s.set(S,T=new Set),w.split("").forEach(A=>T.add(A))})}:void 0;return Pt(e,f,g,t,b),It(e,f),Y(e)||(yield Ae(e,f,t,b)),yield o==null?void 0:o(f),f}const c=e.cloneNode(!1);return yield Ae(e,c,t),yield o==null?void 0:o(c),c})}function Ne(e){if(e.ownerDocument=void 0,e.ownerWindow=void 0,e.svgStyleElement=void 0,e.svgDefsElement=void 0,e.svgStyles.clear(),e.defaultComputedStyles.clear(),e.sandbox){try{e.sandbox.remove()}catch(t){e.log.warn("Failed to destroyContext",t)}e.sandbox=void 0}e.workers=[],e.fontFamilies.clear(),e.fontCssTexts.clear(),e.requests.clear(),e.tasks=[],e.shadowRoots=[]}function Bt(e){const o=e,{url:t,timeout:r,responseType:n}=o,i=je(o,["url","timeout","responseType"]),a=new AbortController,s=r?setTimeout(()=>a.abort(),r):void 0;return fetch(t,D({signal:a.signal},i)).then(c=>{if(!c.ok)throw new Error("Failed fetch, not 2xx response",{cause:c});switch(n){case"arrayBuffer":return c.arrayBuffer();case"dataUrl":return c.blob().then(gt);case"text":default:return c.text()}}).finally(()=>clearTimeout(s))}function z(e,t){const{url:r,requestType:n="text",responseType:i="text",imageDom:a}=t;let s=r;const{timeout:o,acceptOfImage:c,requests:u,fetchFn:l,fetch:{requestInit:d,bypassingCache:m,placeholderImage:f},font:h,workers:g,fontFamilies:p}=e;n==="image"&&(G||te)&&e.drawImageCount++;let E=u.get(r);if(!E){m&&m instanceof RegExp&&m.test(s)&&(s+=(/\?/.test(s)?"&":"?")+new Date().getTime());const b=n.startsWith("font")&&h&&h.minify,w=new Set;b&&n.split(";")[1].split(",").forEach(F=>{p.has(F)&&p.get(F).forEach(B=>w.add(B))});const S=b&&w.size,T=D({url:s,timeout:o,responseType:S?"arrayBuffer":i,headers:n==="image"?{accept:c}:void 0},d);E={type:n,resolve:void 0,reject:void 0,response:null},E.response=C(this,null,function*(){if(l&&n==="image"){const A=yield l(r);if(A)return A}return!G&&r.startsWith("http")&&g.length?new Promise((A,F)=>{g[u.size&g.length-1].postMessage(D({rawUrl:r},T)),E.resolve=A,E.reject=F}):Bt(T)}).catch(A=>{if(u.delete(r),n==="image"&&f)return e.log.warn("Failed to fetch image base64, trying to use placeholder image",s),typeof f=="string"?f:f(a);throw A}),u.set(r,E)}return E.response}function Re(e,t,r,n){return C(this,null,function*(){if(!Ie(e))return e;for(const[i,a]of $t(e,t))try{const s=yield z(r,{url:a,requestType:n?"image":"text",responseType:"dataUrl"});e=e.replace(Lt(i),`$1${s}$3`)}catch(s){r.log.warn("Failed to fetch css data url",i,s)}return e})}function Ie(e){return/url\((['"]?)([^'"]+?)\1\)/.test(e)}const ke=/url\((['"]?)([^'"]+?)\1\)/g;function $t(e,t){const r=[];return e.replace(ke,(n,i,a)=>(r.push([a,ue(a,t)]),n)),r.filter(([n])=>!re(n))}function Lt(e){const t=e.replace(/([.*+?^${}()|\[\]\/\\])/g,"\\$1");return new RegExp(`(url\\(['"]?)(${t})(['"]?\\))`,"g")}const xt=["background-image","border-image-source","-webkit-border-image","-webkit-mask-image","list-style-image"];function Mt(e,t){return xt.map(r=>{const n=e.getPropertyValue(r);return!n||n==="none"?null:((G||te)&&t.drawImageCount++,Re(n,null,t,!0).then(i=>{!i||n===i||e.setProperty(r,i,e.getPropertyPriority(r))}))}).filter(Boolean)}function Ot(e,t){if($(e)){const r=e.currentSrc||e.src;if(!re(r))return[z(t,{url:r,imageDom:e,requestType:"image",responseType:"dataUrl"}).then(n=>{n&&(e.srcset="",e.dataset.originalSrc=r,e.src=n||"")})];(G||te)&&t.drawImageCount++}else if(H(e)&&!re(e.href.baseVal)){const r=e.href.baseVal;return[z(t,{url:r,imageDom:e,requestType:"image",responseType:"dataUrl"}).then(n=>{n&&(e.dataset.originalSrc=r,e.href.baseVal=n||"")})]}return[]}function jt(e,t){var o;const{ownerDocument:r,svgDefsElement:n}=t,i=(o=e.getAttribute("href"))!=null?o:e.getAttribute("xlink:href");if(!i)return[];const[a,s]=i.split("#");if(s){const c=`#${s}`,u=t.shadowRoots.reduce((l,d)=>l!=null?l:d.querySelector(`svg ${c}`),r==null?void 0:r.querySelector(`svg ${c}`));if(a&&e.setAttribute("href",c),n!=null&&n.querySelector(c))return[];if(u)return n==null||n.appendChild(u.cloneNode(!0)),[];if(a)return[z(t,{url:a,responseType:"text"}).then(l=>{n==null||n.insertAdjacentHTML("beforeend",l)})]}return[]}function De(e,t){const{tasks:r}=t;I(e)&&(($(e)||ce(e))&&r.push(...Ot(e,t)),Qe(e)&&r.push(...jt(e,t))),V(e)&&r.push(...Mt(e.style,t)),e.childNodes.forEach(n=>{De(n,t)})}function qt(e,t){return C(this,null,function*(){const{ownerDocument:r,svgStyleElement:n,fontFamilies:i,fontCssTexts:a,tasks:s,font:o}=t;if(!(!r||!n||!i.size))if(o&&o.cssText){const c=Ue(o.cssText,t);n.appendChild(r.createTextNode(`${c}
8
- `))}else{const c=Array.from(r.styleSheets).filter(f=>{try{return"cssRules"in f&&!!f.cssRules.length}catch(h){return t.log.warn(`Error while reading CSS rules from ${f.href}`,h),!1}}),u=r.implementation.createHTMLDocument(""),l=u.createElement("style");u.head.appendChild(l);const d=l.sheet;yield Promise.all(c.flatMap(f=>Array.from(f.cssRules).map(h=>C(this,null,function*(){if(Je(h)){const g=h.href;let p="";try{p=yield z(t,{url:g,requestType:"text",responseType:"text"})}catch(b){t.log.warn(`Error fetch remote css import from ${g}`,b)}const E=p.replace(ke,(b,w,S)=>b.replace(S,ue(S,g)));for(const b of Ht(E))try{d.insertRule(b,d.cssRules.length)}catch(w){t.log.warn("Error inserting rule from remote css import",{rule:b,error:w})}}})))),d.cssRules.length&&c.push(d);const m=[];c.forEach(f=>{oe(f.cssRules,m)}),m.filter(f=>{var h;return Ye(f)&&Ie(f.style.getPropertyValue("src"))&&((h=we(f.style.getPropertyValue("font-family")))==null?void 0:h.some(g=>i.has(g)))}).forEach(f=>{const h=f,g=a.get(h.cssText);g?n.appendChild(r.createTextNode(`${g}
9
- `)):s.push(Re(h.cssText,h.parentStyleSheet?h.parentStyleSheet.href:null,t).then(p=>{p=Ue(p,t),a.set(h.cssText,p),n.appendChild(r.createTextNode(`${p}
10
- `))}))})}})}const Wt=/(\/\*[\s\S]*?\*\/)/g,Pe=/((@.*?keyframes [\s\S]*?){([\s\S]*?}\s*?)})/gi;function Ht(e){if(e==null)return[];const t=[];let r=e.replace(Wt,"");for(;;){const a=Pe.exec(r);if(!a)break;t.push(a[0])}r=r.replace(Pe,"");const n=/@import[\s\S]*?url\([^)]*\)[\s\S]*?;/gi,i=new RegExp("((\\s*?(?:\\/\\*[\\s\\S]*?\\*\\/)?\\s*?@media[\\s\\S]*?){([\\s\\S]*?)}\\s*?})|(([\\s\\S]*?){([\\s\\S]*?)})","gi");for(;;){let a=n.exec(r);if(a)i.lastIndex=n.lastIndex;else if(a=i.exec(r),a)n.lastIndex=i.lastIndex;else break;t.push(a[0])}return t}const Vt=/url\([^)]+\)\s*format\((["']?)([^"']+)\1\)/g,zt=/src:\s*(?:url\([^)]+\)\s*format\([^)]+\)[,;]\s*)+/g;function Ue(e,t){const{font:r}=t,n=r?r==null?void 0:r.preferredFormat:void 0;return n?e.replace(zt,i=>{for(;;){const[a,,s]=Vt.exec(i)||[];if(!s)return"";if(s===n)return`src: ${a};`}}):e}function oe(e,t=[]){for(const r of Array.from(e))Ke(r)?t.push(...oe(r.cssRules)):"cssRules"in r?oe(r.cssRules,t):t.push(r);return t}const Xt=/\bx?link:?href\s*=\s*["'](?!data:)[^"']+["']/i;function Gt(e){return Xt.test(e.innerHTML)}function _e(e,t){return C(this,null,function*(){const r=yield k(e,t);if(I(r.node)&&H(r.node)&&!Gt(r.node))return r.node;const{ownerDocument:n,log:i,tasks:a,svgStyleElement:s,svgDefsElement:o,svgStyles:c,font:u,progress:l,autoDestruct:d,onCloneNode:m,onEmbedNode:f,onCreateForeignObjectSvg:h}=r;i.time("clone node");const g=yield ne(r.node,r,!0);if(s&&n){let S="";c.forEach((T,A)=>{S+=`${T.join(`,
11
- `)} {
12
- ${A}
13
- }
14
- `}),s.appendChild(n.createTextNode(S))}i.timeEnd("clone node"),yield m==null?void 0:m(g),u!==!1&&I(g)&&(i.time("embed web font"),yield qt(g,r),i.timeEnd("embed web font")),i.time("embed node"),De(g,r);const p=a.length;let E=0;const b=()=>C(this,null,function*(){for(;;){const S=a.pop();if(!S)break;try{yield S}catch(T){r.log.warn("Failed to run task",T)}l==null||l(++E,p)}});l==null||l(E,p),yield Promise.all([...Array.from({length:4})].map(b)),i.timeEnd("embed node"),yield f==null?void 0:f(g);const w=Yt(g,r);return o&&w.insertBefore(o,w.children[0]),s&&w.insertBefore(s,w.children[0]),d&&Ne(r),yield h==null?void 0:h(w),w})}function Yt(e,t){const{width:r,height:n}=t,i=fe(r,n,e.ownerDocument),a=i.ownerDocument.createElementNS(i.namespaceURI,"foreignObject");return a.setAttributeNS(null,"x","0%"),a.setAttributeNS(null,"y","0%"),a.setAttributeNS(null,"width","100%"),a.setAttributeNS(null,"height","100%"),a.append(e),i.appendChild(a),i}function Q(e,t){return C(this,null,function*(){var s;const r=yield k(e,t),n=yield _e(r),i=de(n,r.isEnable("removeControlCharacter"));r.autoDestruct||(r.svgStyleElement=be(r.ownerDocument),r.svgDefsElement=(s=r.ownerDocument)==null?void 0:s.createElementNS(K,"defs"),r.svgStyles.clear());const a=_(i,n.ownerDocument);return yield yt(a,r)})}function Jt(e,t){return C(this,null,function*(){const r=yield k(e,t),{log:n,type:i,quality:a,dpi:s}=r,o=yield Q(r);n.time("canvas to blob");const c=yield ft(o,i,a);if(["image/png","image/jpeg"].includes(i)&&s){const u=yield mt(c.slice(0,33));let l=new Uint8Array(u);return i==="image/png"?l=ae(l,s):i==="image/jpeg"&&(l=v(l,s)),n.timeEnd("canvas to blob"),new Blob([l,c.slice(33)],{type:i})}return n.timeEnd("canvas to blob"),c})}function x(e,t){return C(this,null,function*(){const r=yield k(e,t),{log:n,quality:i,type:a,dpi:s}=r,o=yield Q(r);n.time("canvas to data url");let c=o.toDataURL(a,i);if(["image/png","image/jpeg"].includes(a)&&s&&ie&&Xe){const[u,l]=c.split(",");let d=0,m=!1;if(a==="image/png"){const w=Ve(l);w>=0?(d=Math.ceil((w+28)/3)*4,m=!0):d=33/3*4}else a==="image/jpeg"&&(d=18/3*4);const f=l.substring(0,d),h=l.substring(d),g=window.atob(f),p=new Uint8Array(g.length);for(let w=0;w<p.length;w++)p[w]=g.charCodeAt(w);const E=a==="image/png"?ae(p,s,m):v(p,s),b=window.btoa(String.fromCharCode(...E));c=[u,",",b,h].join("")}return n.timeEnd("canvas to data url"),c})}function Fe(e,t){return C(this,null,function*(){const r=yield k(e,t),{width:n,height:i,ownerDocument:a}=r,s=yield x(r),o=fe(n,i,a),c=o.ownerDocument.createElementNS(o.namespaceURI,"image");return c.setAttributeNS(null,"href",s),c.setAttributeNS(null,"height","100%"),c.setAttributeNS(null,"width","100%"),o.appendChild(c),de(o,r.isEnable("removeControlCharacter"))})}function Kt(e,t){return C(this,null,function*(){const r=yield k(e,t),{ownerDocument:n,width:i,height:a,scale:s,type:o}=r,c=o==="image/svg+xml"?yield Fe(r):yield x(r),u=_(c,n);return u.width=Math.floor(i*s),u.height=Math.floor(a*s),u.style.width=`${i}px`,u.style.height=`${a}px`,u})}function Qt(e,t){return C(this,null,function*(){return x(yield k(e,M(D({},t),{type:"image/jpeg"})))})}function Zt(e,t){return C(this,null,function*(){const r=yield k(e,t),n=yield Q(r);return n.getContext("2d").getImageData(0,0,n.width,n.height).data})}function er(e,t){return C(this,null,function*(){return x(yield k(e,M(D({},t),{type:"image/png"})))})}function tr(e,t){return C(this,null,function*(){return x(yield k(e,M(D({},t),{type:"image/webp"})))})}y.createContext=ye,y.destroyContext=Ne,y.domToBlob=Jt,y.domToCanvas=Q,y.domToDataUrl=x,y.domToForeignObjectSvg=_e,y.domToImage=Kt,y.domToJpeg=Qt,y.domToPixel=Zt,y.domToPng=er,y.domToSvg=Fe,y.domToWebp=tr,y.loadMedia=L,y.waitUntilLoad=me,Object.defineProperty(y,Symbol.toStringTag,{value:"Module"})});