High-performance engine for capturing, modifying, and converting DOM elements into any format.
This report summarizes scanner evidence for zumerlab/snapdom, a JavaScript project with 8,216 GitHub stars. SynthScan examined 178,444 lines of code across 731 source files, recording 259 pattern matches distributed across 10 syntactic categories. The legacy adjusted pattern signal is 2.3 (Low pattern signal); it is not an authorship estimate.
Use the findings to ask whether maintainers can explain intent, verify dependencies, simplify unnecessary scaffolding, and focus review effort. Risk Payload v1 adds ownership, supply-chain, over-engineering, and review-effort vectors when available. These are prompts for human verification, not probabilities, security findings, or measured maintenance costs.
Use each vector to guide manual verification of the underlying findings.
Payload schema: 1.0.0 · Engine: 2.0.0 · Scoring: heuristic-density-v1 · Scan date: 2026-10-31.
Can maintainers explain intent, assumptions, and trade-offs? 142 finding(s).
Are imports declared and package/API names verified? 44 finding(s).
Are wrappers, guards, and repeated structures necessary? 99 finding(s).
Which changes need focused human review? 259 finding(s).
This chart tracks the legacy adjusted pattern score across scan runs. Changes can reflect source changes, scan coverage, or detector/scoring versions; they do not measure AI adoption or prove that a team refactored code. Compare runs only when their scoring versions are compatible. The dashed line tracks the raw pattern-hit count.
Groups findings by configured severity weight. Severity is not a confidence estimate, security rating, or proof that a package is missing. Verify imports against the project's manifests and inspect each finding in its local design context.
This horizontal bar chart shows where configured pattern scores accumulate across directories. Treat the bars as locations to inspect, not as evidence of authorship or code quality. Use the file-level findings to decide whether a directory needs a focused ownership, dependency, complexity, or review check.
The scanner identified 259 distinct pattern matches across 10 syntactic categories. Each entry below represents a discrete location in the source code where the engine recorded a detector match to inspect in context. Expand any category row to inspect the individual file paths, line numbers, code snippets, and the lexical context (CODE, COMMENT, or STRING) in which each match was detected.
Reading the findings table: The Severity column indicates the configured finding weight (CRITICAL / HIGH / MEDIUM / LOW). The Context column identifies whether the match occurred inside executable code, an inline comment, or a string literal — legacy comment-context matches receive a ×1.5 score weight. The ⚡ bolt icon marks clustered matches: three or more patterns within a 10-line window, each receiving an additional ×1.5 density multiplier under the legacy scoring model.
| Severity | File | Line | Snippet | Context |
|---|---|---|---|---|
| MEDIUM | docs/labs/capture-stages/index.html | 93 | // ── the element under capture ──────────────────────────────────────────────────────── | COMMENT |
| MEDIUM | docs/labs/capture-stages/index.html | 97 | // ── two plugins, same knob, different depth ────────────────────────────────────────── | COMMENT |
| MEDIUM | docs/compare/live/harness.js | 93 | // ── Scenes ────────────────────────────────────────────────────────────────── | COMMENT |
| MEDIUM | docs/compare/live/harness.js | 312 | // ── Capability matrix: fixture + pixel oracle ─────────────────────────────── | COMMENT |
| MEDIUM | docs/compare/live/lab.js | 48 | // ── Scenes ────────────────────────────────────────────────────────────────── | COMMENT |
| MEDIUM | docs/compare/live/lab.js | 108 | // ── DOM ───────────────────────────────────────────────────────────────────── | COMMENT |
| MEDIUM | docs/compare/live/lab.js | 141 | // ── Measurement ───────────────────────────────────────────────────────────── | COMMENT |
| MEDIUM | docs/compare/live/lab.js | 289 | // ── Rendering ─────────────────────────────────────────────────────────────── | COMMENT |
| MEDIUM | docs/compare/live/lab.js | 437 | // ── Run ───────────────────────────────────────────────────────────────────── | COMMENT |
| MEDIUM | docs/compare/live/lab.js | 502 | // ── Capability matrix ─────────────────────────────────────────────────────── | COMMENT |
| MEDIUM | docs/compare/live/lab.js | 581 | // ── Wiring ────────────────────────────────────────────────────────────────── | COMMENT |
| MEDIUM | __tests__/module.fonts.more.more.test.js | 247 | // ───────────────────────────────────────────────────────────────────────────── | COMMENT |
| MEDIUM | __tests__/module.fonts.more.more.test.js | 250 | // ───────────────────────────────────────────────────────────────────────────── | COMMENT |
| MEDIUM | __tests__/category.capabilities.test.js | 37 | // ── Tests ─────────────────────────────────────────────────────────────────── | COMMENT |
| MEDIUM | __tests__/core.clone.more.test.js | 690 | // ───────────────────────────────────────────────────────────────────────────── | COMMENT |
| MEDIUM | __tests__/core.clone.more.test.js | 692 | // ───────────────────────────────────────────────────────────────────────────── | COMMENT |
| MEDIUM | __tests__/core.clone.more.test.js | 707 | // ── #277 ────────────────────────────────────────────────────────────────── | COMMENT |
| MEDIUM | __tests__/core.clone.more.test.js | 707 | // ── #277 ────────────────────────────────────────────────────────────────── | COMMENT |
| MEDIUM | __tests__/core.clone.more.test.js | 744 | // ── #365 ────────────────────────────────────────────────────────────────── | COMMENT |
| MEDIUM | __tests__/core.clone.more.test.js | 744 | // ── #365 ────────────────────────────────────────────────────────────────── | COMMENT |
| MEDIUM | __tests__/core.clone.more.test.js | 774 | // ── NEW-7 ───────────────────────────────────────────────────────────────── | COMMENT |
| MEDIUM | __tests__/core.clone.more.test.js | 798 | // ── #315 ────────────────────────────────────────────────────────────────── | COMMENT |
| MEDIUM | __tests__/core.clone.more.test.js | 798 | // ── #315 ────────────────────────────────────────────────────────────────── | COMMENT |
| MEDIUM | __tests__/core.clone.more.test.js | 826 | // ───────────────────────────────────────────────────────────────────────────── | COMMENT |
| MEDIUM | __tests__/core.clone.more.test.js | 828 | // ───────────────────────────────────────────────────────────────────────────── | COMMENT |
| MEDIUM | __tests__/core.clone.more.test.js | 893 | // ───────────────────────────────────────────────────────────────────────────── | COMMENT |
| MEDIUM | __tests__/core.clone.more.test.js | 895 | // ───────────────────────────────────────────────────────────────────────────── | COMMENT |
| MEDIUM | __tests__/core.clone.more.test.js | 928 | // ───────────────────────────────────────────────────────────────────────────── | COMMENT |
| MEDIUM | __tests__/core.clone.more.test.js | 931 | // ───────────────────────────────────────────────────────────────────────────── | COMMENT |
| MEDIUM | __tests__/core.clone.more.test.js | 989 | // ───────────────────────────────────────────────────────────────────────────── | COMMENT |
| MEDIUM | __tests__/core.clone.more.test.js | 991 | // ───────────────────────────────────────────────────────────────────────────── | COMMENT |
| MEDIUM | __tests__/snapdom.benchmark.js | 68 | // ── Image-heavy scenario (rasterized PNG) ─────────────────────────────────── | COMMENT |
| MEDIUM | __tests__/category.libs.js | 96 | // ── Scenes that need files on disk ────────────────────────────────────────── | COMMENT |
| MEDIUM⚡ | __tests__/core.capture.more.test.js | 533 | // ────────────────────────────────────────────────────────────────────────────── | COMMENT |
| MEDIUM⚡ | __tests__/core.capture.more.test.js | 534 | // ────────────────────────────────────────────────────────────────────────────── | COMMENT |
| MEDIUM⚡ | __tests__/core.capture.more.test.js | 536 | // ────────────────────────────────────────────────────────────────────────────── | COMMENT |
| MEDIUM | __tests__/core.capture.more.test.js | 35 | // ────────────────────────────────────────────────────────────────────────────── | COMMENT |
| MEDIUM | __tests__/core.capture.more.test.js | 37 | // ────────────────────────────────────────────────────────────────────────────── | COMMENT |
| MEDIUM | __tests__/core.capture.more.test.js | 62 | // ────────────────────────────────────────────────────────────────────────────── | COMMENT |
| MEDIUM | __tests__/core.capture.more.test.js | 64 | // ────────────────────────────────────────────────────────────────────────────── | COMMENT |
| MEDIUM | __tests__/core.capture.more.test.js | 91 | // ────────────────────────────────────────────────────────────────────────────── | COMMENT |
| MEDIUM | __tests__/core.capture.more.test.js | 93 | // ────────────────────────────────────────────────────────────────────────────── | COMMENT |
| MEDIUM | __tests__/core.capture.more.test.js | 114 | // ────────────────────────────────────────────────────────────────────────────── | COMMENT |
| MEDIUM | __tests__/core.capture.more.test.js | 116 | // ────────────────────────────────────────────────────────────────────────────── | COMMENT |
| MEDIUM | __tests__/core.capture.more.test.js | 165 | // ────────────────────────────────────────────────────────────────────────────── | COMMENT |
| MEDIUM | __tests__/core.capture.more.test.js | 167 | // ────────────────────────────────────────────────────────────────────────────── | COMMENT |
| MEDIUM | __tests__/core.capture.more.test.js | 183 | // ────────────────────────────────────────────────────────────────────────────── | COMMENT |
| MEDIUM | __tests__/core.capture.more.test.js | 185 | // ────────────────────────────────────────────────────────────────────────────── | COMMENT |
| MEDIUM | __tests__/core.capture.more.test.js | 210 | // ────────────────────────────────────────────────────────────────────────────── | COMMENT |
| MEDIUM | __tests__/core.capture.more.test.js | 212 | // ────────────────────────────────────────────────────────────────────────────── | COMMENT |
| MEDIUM | __tests__/core.capture.more.test.js | 244 | // ────────────────────────────────────────────────────────────────────────────── | COMMENT |
| MEDIUM | __tests__/core.capture.more.test.js | 246 | // ────────────────────────────────────────────────────────────────────────────── | COMMENT |
| MEDIUM | __tests__/core.capture.more.test.js | 276 | // ────────────────────────────────────────────────────────────────────────────── | COMMENT |
| MEDIUM | __tests__/core.capture.more.test.js | 278 | // ────────────────────────────────────────────────────────────────────────────── | COMMENT |
| MEDIUM | __tests__/core.capture.more.test.js | 306 | // ────────────────────────────────────────────────────────────────────────────── | COMMENT |
| MEDIUM | __tests__/core.capture.more.test.js | 308 | // ────────────────────────────────────────────────────────────────────────────── | COMMENT |
| MEDIUM | __tests__/core.capture.more.test.js | 332 | // ────────────────────────────────────────────────────────────────────────────── | COMMENT |
| MEDIUM | __tests__/core.capture.more.test.js | 336 | // ────────────────────────────────────────────────────────────────────────────── | COMMENT |
| MEDIUM | __tests__/core.capture.more.test.js | 356 | // ────────────────────────────────────────────────────────────────────────────── | COMMENT |
| MEDIUM | __tests__/core.capture.more.test.js | 358 | // ────────────────────────────────────────────────────────────────────────────── | COMMENT |
| 13 more matches not shown… | ||||
| Severity | File | Line | Snippet | Context |
|---|---|---|---|---|
| LOW | vitest.config.js | 21 | return snapDiffCommands({ baseDir })[name](ctx, ...args) | COMMENT |
| LOW | vitest.config.js | 81 | // probe is bounded and paid once per run. | COMMENT |
| LOW | docs/panes.js | 1 | // The 3-pane template (panes.css): sidebar · live demo · reading column. | COMMENT |
| LOW | docs/compare/live/harness.js | 1 | // Shared comparison harness — the SINGLE source of the public competitor adapters, the realistic | COMMENT |
| LOW | docs/compare/live/lab.js | 1 | // Live comparison lab — runs the repo's own measurement scenes in the visitor's browser. | COMMENT |
| LOW | docs/compare/live/lab.js | 21 | buildCapabilityFixture, analyzeCapabilities, CAPS, | COMMENT |
| LOW | __tests__/category.shadowdom.benchmark.js | 1 | // Deep shadow-DOM component tree at scale — the design-system norm. | COMMENT |
| LOW | __tests__/snapdom.issue516.test.js | 1 | // #516, Firefox-for-Android defects from the issue's two demos. | COMMENT |
| LOW | __tests__/module.styles.inlineImportant.test.js | 1 | // normalizeInlineStyleToComputed re-resolves an element's inline declarations through the | COMMENT |
| LOW | __tests__/visual.fidelity.crossengine.test.js | 1 | // Cross-engine pixel coverage for the five capture shapes the demos/ corpus never exercises. | COMMENT |
| LOW | __tests__/category.capabilities.test.js | 1 | // __tests__/category.capabilities.test.js | COMMENT |
| LOW | __tests__/category.images.benchmark.js | 1 | // Image-heavy page over REAL same-origin URLs — the fetch → inline path. | COMMENT |
| LOW | __tests__/snapdom.issue498.test.js | 1 | // #498 — three layout misalignments in one report. | COMMENT |
| LOW | __tests__/snapdom.issue491.test.js | 1 | // #491 — a row of inline boxes line-wrapped in the capture (ilios/frontend header buttons). | COMMENT |
| LOW | __tests__/category.gallery.benchmark.js | 1 | // Photo gallery — one 3000x1400 hero and eight 1500x1000 thumbnails shown at 960x360 and | COMMENT |
| LOW | __tests__/category.hostcss.benchmark.js | 1 | // Lo que la HOJA DE ESTILO de la pagina le cuesta a una captura. | COMMENT |
| LOW | __tests__/category.deeptree.benchmark.js | 1 | // Deep nested flex/grid tree — ~2,100 elements at depth ~11. | COMMENT |
| LOW | __tests__/visual.demos.shared.js | 1 | // Visual regression suite for snapdom demos. Shared by the visual.demos.N.test.js | COMMENT |
| LOW | __tests__/visual.demos.shared.js | 41 | // whichever demo happened to be waiting on the network when the machine was loaded: | COMMENT |
| LOW | __tests__/visual.demos.shared.js | 61 | // --------------------------------------- | COMMENT |
| LOW | __tests__/visual.demos.shared.js | 81 | // connection could not serve is not a failure of snapdom. | COMMENT |
| LOW | __tests__/visual.demos.shared.js | 141 | async function settle(win, budget = SETTLE_BUDGET_MS) { | COMMENT |
| LOW | __tests__/visual.demos.shared.js | 201 | // images before they lay out. On a link that cannot serve them those demos do not fail | COMMENT |
| LOW | __tests__/category.benchmark.js | 1 | // __tests__/category.benchmark.js | COMMENT |
| LOW | __tests__/snapdom.frozenHeightPrecision.test.js | 1 | // A frozen height must lay out at the live height, not 1/64px under it. | COMMENT |
| LOW | __tests__/core.clone.indeterminate.test.js | 1 | // An indeterminate checkbox lives in a DOM PROPERTY. XMLSerializer cannot emit it, so a | COMMENT |
| LOW | __tests__/snapdom.issue484.test.js | 1 | // #484 — `<span>` with `display:block` and an authored width lost that width. | COMMENT |
| LOW | __tests__/category.cold.benchmark.js | 1 | // Cold vs steady, PER ELEMENT — the number a one-shot user actually experiences. | COMMENT |
| LOW | __tests__/regression.interaction.staleness.test.js | 1 | // Interactions that produce no mutation record, reproduced with pixels rather than inferred | COMMENT |
| LOW | __tests__/module.styles.ruleEpoch.test.js | 1 | // The scanned property universe and the pseudo gates are memoized against the DOM epoch, | COMMENT |
| LOW | __tests__/category.fonts.benchmark.js | 1 | // Webfonts — the configured profile the defaults table cannot show. | COMMENT |
| LOW | __tests__/snapdom.issue486.test.js | 1 | // #486 — "the canvas animation cannot be captured". | COMMENT |
| LOW | __tests__/category.libs.js | 1 | // __tests__/category.libs.js | COMMENT |
| LOW | __tests__/category.libs.js | 41 | // against the same mounted element, and snapdom memoizes an element from its first capture, | COMMENT |
| LOW | __tests__/visual.fidelity.livedom.test.js | 1 | // Fidelity against GROUND TRUTH, not against a recorded baseline. | COMMENT |
| LOW | __tests__/snapdom.issue502.test.js | 1 | // #502: a meter styled with `appearance: none` and its ::-webkit-meter-* parts exported with the | COMMENT |
| LOW | __tests__/visual.competitors.compare.test.js | 1 | // Fidelity comparison: COMPETITORS vs snapdom over the REAL demo corpus, per engine. | COMMENT |
| LOW | __tests__/category.cssheavy.benchmark.js | 1 | // CSS-heavy page: ~10k author rules, ~1000 nodes styled ONLY by classes. | COMMENT |
| LOW | __tests__/category.polling.benchmark.js | 1 | // Cross-library POLLING — memoization allowed and labeled. | COMMENT |
| LOW | __tests__/helpers/network-gate.js | 1 | // Browser side of the network gate: keeps a test from failing for a reason that has | COMMENT |
| LOW | __tests__/helpers/network-gate.js | 21 | // beforeEach(gateOnNetwork) // gate every test in the file | COMMENT |
| LOW | __tests__/helpers/domlens.js | 1 | // Repository-only adapter, shared by category tests and the real-page benchmark. | COMMENT |
| LOW | packages/plugin-template/index.js | 21 | // beforeSnap(ctx) { | COMMENT |
| LOW | packages/plugin-template/index.js | 41 | COMMENT | |
| LOW | packages/plugins/html-export.js | 21 | fullDocument = true, | COMMENT |
| LOW | packages/plugins/pdf/src/paginate.js | 61 | * blank tail from a long one. `null` — a container: evidence of nothing. | COMMENT |
| LOW | packages/plugins/pdf/src/index.js | 1261 | const size = (run.size * s).toFixed(3) | COMMENT |
| LOW | packages/plugins/pdf/src/text-layer.js | 621 | // composites into its own plane is that context FLATTENED, and the flattened | COMMENT |
| LOW | packages/plugins/pdf/src/text-layer.js | 661 | // builds a transform node for it all the same — and a transform node is what | COMMENT |
| LOW | packages/plugins/pdf/src/text-layer.js | 681 | if (base.preserve3d && soft) bad = true | COMMENT |
| LOW | packages/plugins/pdf/src/text-layer.js | 841 | // accumulates downward over a long textarea. Recovering it needs a mirror | COMMENT |
| LOW | packages/plugins/pdf/src/text-layer.js | 1081 | // A DOMRectList, not an array — it indexes and has a length, and that is all. | COMMENT |
| LOW | packages/plugins/vector/demo/figma.html | 61 | display: none; } | COMMENT |
| LOW | packages/plugins/vector/demo/challenges.html | 101 | font-size: 13px; display: none; } | COMMENT |
| LOW | packages/plugins/vector/src/paint.js | 2221 | const pseudos = contents || !visible ? [] : findUnrepresentedPseudos(el, cs, textCarrier, st) | COMMENT |
| LOW | packages/plugins/vector/src/index.js | 341 | maxAssetBytes: Number.isFinite(options.maxAssetBytes) ? options.maxAssetBytes : BIG_ASSET_BYTES, | COMMENT |
| LOW | packages/plugins/vector/src/index.js | 681 | pitch, | COMMENT |
| LOW | packages/plugins/vector/src/index.js | 721 | COMMENT | |
| LOW | packages/plugins/vector/src/collect/box.js | 541 | COMMENT | |
| LOW | packages/plugins/vector/src/collect/text.js | 2821 | // | COMMENT |
| 38 more matches not shown… | ||||
| Severity | File | Line | Snippet | Context |
|---|---|---|---|---|
| LOW | FEATURES_CN.md | 154 | | `data-capture="placeholder"` | 将节点替换为占位框 | | CODE |
| LOW | FEATURES.md | 154 | | `data-capture="placeholder"` | Replace it with a placeholder | | CODE |
| LOW | docs/showcase/index.html | 779 | <input id="name" type="text" placeholder="John Doe" value="Ada Lovelace" /> | CODE |
| LOW | __tests__/snapdom.complex.benchmark.js | 58 | text.textContent = 'Lorem ipsum dolor sit amet, consectetur adipiscing elit.' | CODE |
| LOW | __tests__/snapdom.complex.benchmark.js | 58 | text.textContent = 'Lorem ipsum dolor sit amet, consectetur adipiscing elit.' | CODE |
| LOW | __tests__/core.capture.diff.test.js | 22 | text.textContent = 'Lorem ipsum dolor sit amet.' | CODE |
| LOW | __tests__/core.capture.diff.test.js | 22 | text.textContent = 'Lorem ipsum dolor sit amet.' | CODE |
| LOW | __tests__/plugins.redact.semantic.test.js | 40 | { selector: '[data-private-meta]', names: ['id', 'class', 'href', 'title', 'aria-label', 'name', 'placeholder'] | CODE |
| LOW | __tests__/plugins.redact.semantic.test.js | 218 | if (enabled) plugins.push(redactInputs({ attributes: [{ selector: '.absent', names: ['type', 'id', 'placeholder'] }] | CODE |
| LOW | __tests__/snapdom.attributes.test.js | 30 | it('should replace elements with data-capture="placeholder" and show placeholder text', async () => { | CODE |
| LOW | __tests__/snapdom.attributes.test.js | 32 | placeholder.setAttribute('data-capture', 'placeholder') | CODE |
| LOW | __tests__/core.clone.test.js | 68 | it('deepClone handles data-capture="placeholder"', async () => { | CODE |
| LOW | __tests__/core.clone.test.js | 70 | el.setAttribute('data-capture', 'placeholder') | CODE |
| LOW | __tests__/clip.benchmark.js | 19 | html += `<div style="background:#f1f5f9;border-radius:6px;padding:8px;box-shadow:0 1px 2px rgba(0,0,0,.2)"><b>Card | CODE |
| LOW | __tests__/clip.benchmark.js | 19 | html += `<div style="background:#f1f5f9;border-radius:6px;padding:8px;box-shadow:0 1px 2px rgba(0,0,0,.2)"><b>Card | CODE |
| LOW | __tests__/module.lineClamp.test.js | 46 | const longText = 'Lorem ipsum dolor sit amet consectetur adipiscing elit sed do eiusmod tempor incididunt ut labore | CODE |
| LOW | __tests__/module.lineClamp.test.js | 46 | const longText = 'Lorem ipsum dolor sit amet consectetur adipiscing elit sed do eiusmod tempor incididunt ut labore | CODE |
| LOW | __tests__/module.lineClamp.test.js | 91 | const longText = 'Lorem ipsum dolor sit amet consectetur adipiscing elit sed do eiusmod tempor incididunt ut labore | CODE |
| LOW | __tests__/module.lineClamp.test.js | 91 | const longText = 'Lorem ipsum dolor sit amet consectetur adipiscing elit sed do eiusmod tempor incididunt ut labore | CODE |
| LOW | __tests__/module.lineClamp.test.js | 108 | div.textContent = 'Lorem ipsum dolor sit amet consectetur adipiscing elit sed do eiusmod tempor.' | CODE |
| LOW | __tests__/module.lineClamp.test.js | 108 | div.textContent = 'Lorem ipsum dolor sit amet consectetur adipiscing elit sed do eiusmod tempor.' | CODE |
| LOW | __tests__/module.lineClamp.test.js | 119 | div.textContent = 'Lorem ipsum dolor sit amet consectetur adipiscing elit sed do eiusmod tempor.' | CODE |
| LOW | __tests__/module.lineClamp.test.js | 119 | div.textContent = 'Lorem ipsum dolor sit amet consectetur adipiscing elit sed do eiusmod tempor.' | CODE |
| LOW | __tests__/module.lineClamp.test.js | 139 | const longText = 'Lorem ipsum dolor sit amet consectetur adipiscing elit sed do eiusmod tempor incididunt.' | CODE |
| LOW | __tests__/module.lineClamp.test.js | 139 | const longText = 'Lorem ipsum dolor sit amet consectetur adipiscing elit sed do eiusmod tempor incididunt.' | CODE |
| LOW | __tests__/module.lineClamp.test.js | 160 | const longText = 'Lorem ipsum dolor sit amet consectetur adipiscing elit sed do eiusmod tempor incididunt ut labore. | CODE |
| LOW | __tests__/module.lineClamp.test.js | 160 | const longText = 'Lorem ipsum dolor sit amet consectetur adipiscing elit sed do eiusmod tempor incididunt ut labore. | CODE |
| LOW | __tests__/module.lineClamp.test.js | 207 | el.textContent = 'Lorem ipsum dolor sit amet consectetur adipiscing elit sed do eiusmod tempor incididunt' | CODE |
| LOW | __tests__/module.lineClamp.test.js | 207 | el.textContent = 'Lorem ipsum dolor sit amet consectetur adipiscing elit sed do eiusmod tempor incididunt' | CODE |
| LOW | packages/plugins/context-export.js | 189 | if (!redacts('placeholder') && el.placeholder) s.placeholder = el.placeholder | CODE |
| LOW | packages/plugins/agent-map.js | 490 | for (const name of ['href', 'type', 'name', 'placeholder', 'alt', 'title', 'role', 'aria-label']) { | CODE |
| LOW | packages/plugins/pdf/src/text-layer.js | 1474 | const placeholder = el.getAttribute && el.getAttribute('placeholder') | CODE |
| LOW | packages/plugins/vector/demo/vector.html | 620 | <div class="placeholder">Sin capturar todavía<br>Pulsá <b>Vectorizar</b></div> | CODE |
| LOW | packages/plugins/vector/demo/vector.html | 733 | ui.svgout.innerHTML = '<div class="placeholder">Sin capturar todavía<br>Pulsá <b>Vectorizar</b></div>' | CODE |
| LOW | demos/d7-scroll-test.html | 25 | <p>Line 01 — Lorem ipsum dolor sit amet, consectetur adipiscing elit.</p> | CODE |
| LOW | demos/d7-scroll-test.html | 25 | <p>Line 01 — Lorem ipsum dolor sit amet, consectetur adipiscing elit.</p> | CODE |
| LOW | demos/d9-flex-margin-auto-clip.html | 63 | Lorem ipsum dolor sit amet, consectetur adipisicing elit, sed do eiusmod | CODE |
| LOW | demos/d9-flex-margin-auto-clip.html | 63 | Lorem ipsum dolor sit amet, consectetur adipisicing elit, sed do eiusmod | CODE |
| LOW | demos/d61-saltosdelinea.html | 65 | >Lorem ipsum dolor sit amet, consectetur adipiscing elit, | CODE |
| LOW | demos/d61-saltosdelinea.html | 65 | >Lorem ipsum dolor sit amet, consectetur adipiscing elit, | CODE |
| LOW | demos/src449.html | 55 | <b>Item ${i}</b><br>lorem ipsum dolor sit amet, consectetur | CODE |
| LOW | demos/src449.html | 55 | <b>Item ${i}</b><br>lorem ipsum dolor sit amet, consectetur | CODE |
| LOW | src/core/clone.js | 161 | /** Tags dispatched BEFORE the data-capture="placeholder" branch (an <iframe> placeholder | COMMENT |
| LOW | src/core/clone.js | 797 | if (node.getAttribute('data-capture') === 'placeholder') { | CODE |
| Severity | File | Line | Snippet | Context |
|---|---|---|---|---|
| MEDIUM⚡ | docs/search-index.json | 1 | [{"title":"SnapDOM: capture DOM elements as PNG, SVG, PDF or video","path":"./","text":"High-performance DOM engine · ze | CODE |
| MEDIUM⚡ | docs/search-index.json | 1 | [{"title":"SnapDOM: capture DOM elements as PNG, SVG, PDF or video","path":"./","text":"High-performance DOM engine · ze | CODE |
| MEDIUM⚡ | docs/search-index.json | 1 | [{"title":"SnapDOM: capture DOM elements as PNG, SVG, PDF or video","path":"./","text":"High-performance DOM engine · ze | CODE |
| MEDIUM | docs/sitemap.xml | 240 | <loc>https://snapdom.dev/labs/webgl-seamless-dom/</loc> | CODE |
| MEDIUM | docs/ecosystem/index.html | 64 | <header class="doc-head"><div class="doc-head-bar"><nav class="doc-crumbs" aria-label="Breadcrumb"><span>Ecosystem</span | CODE |
| MEDIUM⚡ | docs/labs/webgl-seamless-dom/index.html | 9 | <link rel="canonical" href="https://snapdom.dev/labs/webgl-seamless-dom/" /> | CODE |
| MEDIUM⚡ | docs/labs/webgl-seamless-dom/index.html | 15 | <meta property="og:url" content="https://snapdom.dev/labs/webgl-seamless-dom/" /> | CODE |
| MEDIUM⚡ | docs/labs/webgl-seamless-dom/index.html | 20 | <script type="application/ld+json">{"@context":"https://schema.org","@type":"TechArticle","headline":"Seamless DOM to | CODE |
| MEDIUM⚡ | docs/labs/webgl-seamless-dom/index.html | 21 | <script type="application/ld+json">{"@context":"https://schema.org","@type":"BreadcrumbList","itemListElement":[{"@typ | CODE |
| MEDIUM⚡ | docs/labs/webgl-seamless-dom/index.html | 21 | <script type="application/ld+json">{"@context":"https://schema.org","@type":"BreadcrumbList","itemListElement":[{"@typ | CODE |
| MEDIUM | docs/showcase/index.html | 512 | <aside class="pane-side"><label class="pane-filter"><span aria-hidden="true">⌕</span><input type="search" placeholder="F | CODE |
| Severity | File | Line | Snippet | Context |
|---|---|---|---|---|
| LOW | __tests__/regression.scrolledLayout.test.js | 19 | async function expectItemsWhereThePageHasThem(root) { | CODE |
| LOW | packages/plugins/vector/src/collect/box.js | 1290 | function stickyCollapsedBorderIsElsewhere (el, cs) { | CODE |
| LOW | packages/plugins/vector/src/adapters/snapdom.js | 218 | function defuseUpgradedShadowRoots (clone) { | CODE |
| LOW | demos/d3-zumly-capture-demo.html | 375 | function createPersistentClonePlugin() { | CODE |
| LOW | src/core/burst.js | 116 | function mediaEnvironmentSignature(doc) { | CODE |
| LOW | src/core/diff.js | 52 | function retainedUsesBackdropFilter(R) { | CODE |
| LOW | src/core/diff.js | 65 | function subtreeUsesBackdropFilter(root, universe) { | CODE |
| LOW | src/exporters/toCanvas.js | 284 | function rewriteSvgBoxShadowToDropShadow(svgText) { | CODE |
| LOW | src/utils/transforms.helpers.js | 649 | export function hasBBoxAffectingTransform(el) { | CODE |
| LOW | src/utils/image.js | 20 | export async function inlineSingleBackgroundEntry(entry, options = {}) { | CODE |
| LOW | src/utils/clone.helpers.js | 267 | export function collectCustomPropsFromCSS(cssText) { | CODE |
| LOW | src/utils/clone.helpers.js | 342 | export async function getAccessibleIframeDocument(iframe, attempts = 3) { | CODE |
| LOW | src/utils/clone.helpers.js | 720 | export function createCheckboxRadioReplacement(node) { | CODE |
| LOW | src/utils/capture.helpers.js | 413 | export function neutralizeRootMarginCollapse(originalEl, cloneRoot, nodeMap, standIns = null) { | CODE |
| LOW | src/utils/capture.helpers.js | 674 | function contributesToParentHeight(el) { | CODE |
| LOW | src/utils/capture.helpers.js | 986 | function collectScrollbarRulesFromRules(rules, seen = new Set()) { | CODE |
| LOW | src/modules/pseudo.js | 401 | function deriveCounterCtxForPseudo(node, pseudoStyle, baseCtx) { | CODE |
| LOW | src/modules/pseudo.js | 550 | function resolvePseudoContentAndIncs(node, pseudo, baseCtx, siblingCounters) { | CODE |
| LOW | src/modules/svgDefs.js | 29 | export function inlineExternalDefsAndSymbols(element, lookupRoot, htmlSource) { | CODE |
| LOW | src/modules/selection.js | 218 | function textFieldSelectionBackground(field, own) { | CODE |
| LOW | src/modules/selection.js | 366 | export function applyTextFieldSelectionLayers(nodeMap) { | CODE |
| LOW | src/modules/styles.js | 821 | function snapshotComputedStyleFull(style, options = {}, el = null, universe = null) { | CODE |
| LOW | src/modules/styles.js | 1001 | function strokedTextShadowToFilter(source, clone, cs) { | CODE |
| LOW | src/modules/styles.js | 1187 | function usedWidthDiffersFromAvailable(el, cs) { | CODE |
| LOW | src/modules/styles.js | 1618 | function normalizeInlineStyleToComputed(source, clone, computed) { | CODE |
| LOW | src/modules/compress.js | 620 | export async function compressClonedBackgrounds(clone, options, nodeMap = new Map(), geometry = {}) { | CODE |
| Severity | File | Line | Snippet | Context |
|---|---|---|---|---|
| MEDIUM⚡ | docs/search-index.json | 1 | [{"title":"SnapDOM: capture DOM elements as PNG, SVG, PDF or video","path":"./","text":"High-performance DOM engine · ze | CODE |
| MEDIUM⚡ | docs/search-index.json | 1 | [{"title":"SnapDOM: capture DOM elements as PNG, SVG, PDF or video","path":"./","text":"High-performance DOM engine · ze | CODE |
| MEDIUM⚡ | docs/search-index.json | 1 | [{"title":"SnapDOM: capture DOM elements as PNG, SVG, PDF or video","path":"./","text":"High-performance DOM engine · ze | CODE |
| Severity | File | Line | Snippet | Context |
|---|---|---|---|---|
| MEDIUM⚡ | docs/search-index.json | 1 | [{"title":"SnapDOM: capture DOM elements as PNG, SVG, PDF or video","path":"./","text":"High-performance DOM engine · ze | CODE |
| Severity | File | Line | Snippet | Context |
|---|---|---|---|---|
| LOW | packages/plugins/vector/src/collect/text.js | 1014 | // Step 2: the binary renames it wherever the page's CSS name is not the | COMMENT |
| Severity | File | Line | Snippet | Context |
|---|---|---|---|---|
| LOW | packages/plugins/vector/src/collect/text.js | 1014 | // Step 2: the binary renames it wherever the page's CSS name is not the | COMMENT |
| Severity | File | Line | Snippet | Context |
|---|---|---|---|---|
| LOW | scripts/docs-site/finish.py | 8 | CODE |