Penpot: The open-source design tool for design and code collaboration
278 matches across 10 categories. Click a row to expand file-level details.
| Severity | File | Line | Snippet |
|---|---|---|---|
| LOW | …d/text-editor/src/editor/content/dom/Paragraph.test.js | 75 | // "Lorem ipsum" as a paragraph with a text span. |
| LOW | …d/text-editor/src/editor/content/dom/Paragraph.test.js | 77 | const paragraph = createParagraphWith("Lorem ipsum"); |
| LOW | …d/text-editor/src/editor/content/dom/Paragraph.test.js | 83 | expect(paragraph.firstChild.firstChild.textContent).toBe("Lorem ipsum"); |
| LOW | …d/text-editor/src/editor/content/dom/Paragraph.test.js | 85 | // ["Lorem ipsum"] as a paragraph with a text span. |
| LOW | …d/text-editor/src/editor/content/dom/Paragraph.test.js | 87 | const paragraph = createParagraphWith(["Lorem ipsum"]); |
| LOW | …d/text-editor/src/editor/content/dom/Paragraph.test.js | 93 | expect(paragraph.firstChild.firstChild.textContent).toBe("Lorem ipsum"); |
| LOW | …d/text-editor/src/editor/content/dom/Paragraph.test.js | 95 | // ["Lorem ipsum","\n","dolor sit amet"] as a paragraph with multiple text spans. |
| LOW | …d/text-editor/src/editor/content/dom/Paragraph.test.js | 95 | // ["Lorem ipsum","\n","dolor sit amet"] as a paragraph with multiple text spans. |
| LOW | …d/text-editor/src/editor/content/dom/Paragraph.test.js | 97 | const paragraph = createParagraphWith(["Lorem ipsum", "\n", "dolor sit amet"]); |
| LOW | …d/text-editor/src/editor/content/dom/Paragraph.test.js | 97 | const paragraph = createParagraphWith(["Lorem ipsum", "\n", "dolor sit amet"]); |
| LOW | …d/text-editor/src/editor/content/dom/Paragraph.test.js | 103 | expect(paragraph.children.item(0).firstChild.textContent).toBe("Lorem ipsum"); |
| LOW | …d/text-editor/src/editor/content/dom/Paragraph.test.js | 108 | expect(paragraph.children.item(2).firstChild.textContent).toBe("dolor sit amet"); |
| LOW | …d/text-editor/src/editor/content/dom/Paragraph.test.js | 186 | createTextSpan(new Text("Lorem ipsum sit")), |
| LOW | …end/text-editor/src/editor/content/dom/Content.test.js | 49 | "Lorem ipsum", |
| LOW | …end/text-editor/src/editor/content/dom/Content.test.js | 50 | "Dolor sit amet", |
| LOW | …end/text-editor/src/editor/content/dom/Content.test.js | 55 | "<div>Lorem ipsum</div><div>Dolor sit amet</div><div>Sed iaculis blandit odio ornare sagittis.</div>", |
| LOW | …end/text-editor/src/editor/content/dom/Content.test.js | 55 | "<div>Lorem ipsum</div><div>Dolor sit amet</div><div>Sed iaculis blandit odio ornare sagittis.</div>", |
| LOW | …end/text-editor/src/editor/content/dom/Content.test.js | 75 | "Lorem ipsumDolor sit ametSed iaculis blandit odio ornare sagittis.", |
| LOW | …end/text-editor/src/editor/content/dom/Content.test.js | 75 | "Lorem ipsumDolor sit ametSed iaculis blandit odio ornare sagittis.", |
| LOW | …tor/src/editor/controllers/SelectionController.test.js | 339 | expect(textEditorMock.root.textContent).toBe("Lorem ipsum dolor"); |
| LOW | …tor/src/editor/controllers/SelectionController.test.js | 464 | expect(textEditorMock.root.textContent).toBe("Lorem ipsum dolor"); |
| LOW | …tor/src/editor/controllers/SelectionController.test.js | 1251 | ["Lorem ipsum"], |
| LOW | …tor/src/editor/controllers/SelectionController.test.js | 1252 | ["dolor sit amet"], |
| LOW | …ontend/playwright/ui/specs/dashboard-libraries.spec.js | 22 | const libraryItem = page.getByTitle(/Lorem Ipsum/); |
| LOW | frontend/playwright/ui/specs/workspace.spec.js | 409 | await page.evaluate(() => navigator.clipboard.writeText("Lorem ipsum dolor")); |
| LOW | frontend/playwright/ui/specs/workspace.spec.js | 414 | .getByText("Lorem ipsum dolor"); |
| LOW | frontend/playwright/ui/specs/text-editor-v2.spec.js | 79 | await workspace.clickLeafLayer("Lorem ipsum"); |
| LOW | frontend/playwright/ui/specs/text-editor-v2.spec.js | 82 | await page.keyboard.type(" dolor sit amet"); |
| LOW | frontend/playwright/ui/specs/text-editor-v2.spec.js | 84 | await workspace.waitForSelectedShapeName("Lorem ipsum dolor sit amet"); |
| LOW | frontend/playwright/ui/specs/text-editor-v2.spec.js | 84 | await workspace.waitForSelectedShapeName("Lorem ipsum dolor sit amet"); |
| LOW | frontend/playwright/ui/specs/text-editor-v2.spec.js | 96 | await workspace.clickLeafLayer("Lorem ipsum"); |
| LOW | frontend/playwright/ui/specs/text-editor-v2.spec.js | 99 | await page.keyboard.type("Dolor sit amet "); |
| LOW | frontend/playwright/ui/specs/text-editor-v2.spec.js | 101 | await workspace.waitForSelectedShapeName("Dolor sit amet Lorem ipsum"); |
| LOW | frontend/playwright/ui/specs/text-editor-v2.spec.js | 101 | await workspace.waitForSelectedShapeName("Dolor sit amet Lorem ipsum"); |
| LOW | frontend/playwright/ui/specs/text-editor-v2.spec.js | 113 | await workspace.clickLeafLayer("Lorem ipsum"); |
| LOW | frontend/playwright/ui/specs/text-editor-v2.spec.js | 116 | await page.keyboard.type(" dolor sit amet"); |
| LOW | frontend/playwright/ui/specs/text-editor-v2.spec.js | 118 | await workspace.waitForSelectedShapeName("Lorem dolor sit amet ipsum"); |
| LOW | frontend/playwright/ui/specs/text-editor-v2.spec.js | 124 | const textToPaste = " dolor sit amet"; |
| LOW | frontend/playwright/ui/specs/text-editor-v2.spec.js | 134 | await workspace.clickLeafLayer("Lorem ipsum"); |
| LOW | frontend/playwright/ui/specs/text-editor-v2.spec.js | 139 | await workspace.waitForSelectedShapeName("Lorem ipsum dolor sit amet"); |
| LOW | frontend/playwright/ui/specs/text-editor-v2.spec.js | 139 | await workspace.waitForSelectedShapeName("Lorem ipsum dolor sit amet"); |
| LOW | frontend/playwright/ui/specs/text-editor-v2.spec.js | 145 | const textToPaste = "Dolor sit amet "; |
| LOW | frontend/playwright/ui/specs/text-editor-v2.spec.js | 155 | await workspace.clickLeafLayer("Lorem ipsum"); |
| LOW | frontend/playwright/ui/specs/text-editor-v2.spec.js | 168 | const textToPaste = "Dolor sit amet"; |
| LOW | frontend/playwright/ui/specs/text-editor-v2.spec.js | 175 | await workspace.clickLeafLayer("Lorem ipsum"); |
| LOW | frontend/playwright/ui/specs/text-editor-v2.spec.js | 184 | await workspace.waitForSelectedShapeName("Dolor sit amet ipsum"); |
| LOW | frontend/playwright/ui/specs/text-editor-v2.spec.js | 190 | const textToPaste = "dolor sit amet"; |
| LOW | frontend/playwright/ui/specs/text-editor-v2.spec.js | 197 | await workspace.clickLeafLayer("Lorem ipsum"); |
| LOW | frontend/playwright/ui/specs/text-editor-v2.spec.js | 206 | await workspace.waitForSelectedShapeName("Lorem dolor sit amet"); |
| LOW | frontend/playwright/ui/specs/text-editor-v2.spec.js | 212 | const textToPaste = "dolor sit amet"; |
| LOW | frontend/playwright/ui/specs/text-editor-v2.spec.js | 219 | await workspace.clickLeafLayer("Lorem ipsum"); |
| LOW | frontend/playwright/ui/specs/text-editor-v2.spec.js | 228 | await workspace.waitForSelectedShapeName("Lordolor sit ametsum"); |
| LOW | frontend/playwright/ui/specs/text-editor-v2.spec.js | 17 | const initialText = "Lorem ipsum"; |
| LOW | frontend/playwright/ui/specs/text-editor-v2.spec.js | 31 | const textToPaste = "Lorem ipsum"; |
| LOW | frontend/playwright/ui/specs/text-editor-v2.spec.js | 53 | const textToPaste = "Lorem ipsum"; |
| LOW | frontend/playwright/ui/specs/text-editor-v2.spec.js | 241 | await workspace.clickLeafLayer("Lorem ipsum"); |
| LOW | frontend/playwright/ui/specs/text-editor-v2.spec.js | 261 | await workspace.clickLeafLayer("Lorem ipsum"); |
| LOW | frontend/playwright/ui/specs/text-editor-v2.spec.js | 281 | await workspace.clickLeafLayer("Lorem ipsum"); |
| LOW | frontend/playwright/ui/specs/text-editor-v2.spec.js | 300 | await workspace.doubleClickLeafLayer("Lorem ipsum"); |
| LOW | frontend/playwright/ui/specs/text-editor-v2.spec.js | 312 | await workspace.clickLeafLayer("Lorem ipsum"); |
| 92 more matches not shown… | |||
| Severity | File | Line | Snippet |
|---|---|---|---|
| MEDIUM | tools/gh.py | 40 | # ───────────────────────────────────────────── |
| MEDIUM | tools/gh.py | 42 | # ───────────────────────────────────────────── |
| MEDIUM | tools/gh.py | 74 | # ───────────────────────────────────────────── |
| MEDIUM | tools/gh.py | 76 | # ───────────────────────────────────────────── |
| MEDIUM | tools/gh.py | 177 | # ───────────────────────────────────────────── |
| MEDIUM | tools/gh.py | 179 | # ───────────────────────────────────────────── |
| MEDIUM | tools/gh.py | 317 | # ───────────────────────────────────────────── |
| MEDIUM | tools/gh.py | 319 | # ───────────────────────────────────────────── |
| MEDIUM | tools/gh.py | 400 | # ───────────────────────────────────────────── |
| MEDIUM | tools/gh.py | 402 | # ───────────────────────────────────────────── |
| MEDIUM | tools/gh.py | 533 | # ───────────────────────────────────────────── |
| MEDIUM | tools/gh.py | 535 | # ───────────────────────────────────────────── |
| MEDIUM | tools/taiga.py | 41 | # ── URL Parsing ────────────────────────────────────────────────────────────── |
| MEDIUM | tools/taiga.py | 57 | # ── API call ───────────────────────────────────────────────────────────────── |
| MEDIUM | tools/taiga.py | 81 | # ── Output formatting ──────────────────────────────────────────────────────── |
| MEDIUM | tools/taiga.py | 184 | # ── CLI ─────────────────────────────────────────────────────────────────────── |
| MEDIUM | frontend/packages/tokenscript/schemas.js | 580 | "script": "// OKHSL to OKLab Conversion\n// Reference: Björn Ottosson - \"A perceptual color picker: OKHSL a |
| MEDIUM | frontend/packages/tokenscript/schemas.js | 590 | "script": "// OKHSV to OKLab Conversion\n// Reference: Björn Ottosson - \"A perceptual color picker: OKHSL a |
| MEDIUM | frontend/packages/tokenscript/schemas.js | 708 | "script": "// OKLab to OKHSL Conversion\n// Reference: Björn Ottosson - \"A perceptual color picker: OKHSL a |
| MEDIUM | frontend/packages/tokenscript/schemas.js | 767 | "script": "// OKLab to OKHSV Conversion\n// Reference: Björn Ottosson - \"A perceptual color picker: OKHSL a |
| MEDIUM | mcp/packages/server/src/tools/CljCheckParentheses.ts | 150 | // ── Newline ────────────────────────────────────────────────────── |
| MEDIUM | mcp/packages/server/src/tools/CljCheckParentheses.ts | 158 | // ── Escape: skip next character ────────────────────────────────── |
| MEDIUM | mcp/packages/server/src/tools/CljCheckParentheses.ts | 164 | // ── Inside comment: skip until newline ─────────────────────────── |
| MEDIUM | mcp/packages/server/src/tools/CljCheckParentheses.ts | 167 | // ── Inside string literal ──────────────────────────────────────── |
| MEDIUM | mcp/packages/server/src/tools/CljCheckParentheses.ts | 174 | // ── Outside string / comment ───────────────────────────────────── |
| MEDIUM | mcp/packages/server/src/tools/CljCheckParentheses.ts | 188 | // ── Opening delimiter ──────────────────────────────────────────── |
| MEDIUM | mcp/packages/server/src/tools/CljCheckParentheses.ts | 222 | // ── Closing delimiter ──────────────────────────────────────────── |
| MEDIUM | mcp/packages/server/src/tools/CljCheckParentheses.ts | 234 | // ── EOF: no mismatch was found, but the stack is not empty ────────── |
| Severity | File | Line | Snippet |
|---|---|---|---|
| LOW | docker/devenv/files/serena_config.yml | 1 | language_backend: LSP |
| LOW | docker/devenv/files/serena_config.yml | 21 | # window being updated. Since we can't control how agno or Claude Desktop start Serena, |
| LOW | docker/devenv/files/serena_config.yml | 41 | |
| LOW | docker/devenv/files/serena_config.yml | 81 | # list of regex patterns which, when matched, mark a memory entry as read‑only. |
| LOW | docker/devenv/files/serena_config.yml | 121 | |
| LOW | docker/images/docker-compose.yaml | 1 | ## Common flags: |
| LOW | docker/images/docker-compose.yaml | 61 | # image: traefik:v3.3 |
| LOW | docker/images/docker-compose.yaml | 141 | ## unless the valkey container has different parameters or different name. |
| LOW | docker/images/files/config.js | 1 | // Frontend configuration |
| LOW | frontend/vitest.shims.d.ts | 1 | /// <reference types="@vitest/browser/providers/playwright" /> |
| LOW | frontend/resources/styles/main-default.scss | 21 | // Layouts |
| LOW | frontend/resources/styles/common/refactor/themes.scss | 1 | // This Source Code Form is subject to the terms of the Mozilla Public |
| LOW | frontend/playwright/scripts/MockWebSocket.js | 21 | } |
| LOW | frontend/packages/mousetrap/index.js | 561 | // if a sequence name is not specified, but this is a sequence at |
| LOW | frontend/packages/mousetrap/index.js | 641 | maxLevel = Math.max(maxLevel, callbacks[i].level); |
| LOW | frontend/packages/mousetrap/index.js | 681 | |
| LOW | frontend/packages/mousetrap/index.js | 801 | // weird race condition if a sequence ends with the key |
| LOW | frontend/src/app/util/path/arc_to_curve.js | 41 | |
| LOW | frontend/src/app/main/ui/auth/login.scss | 1 | // This Source Code Form is subject to the terms of the Mozilla Public |
| LOW | …nd/src/app/main/ui/workspace/sidebar/options/page.scss | 1 | // This Source Code Form is subject to the terms of the Mozilla Public |
| LOW | …/src/app/main/ui/workspace/sidebar/common/sidebar.scss | 1 | // This Source Code Form is subject to the terms of the Mozilla Public |
| LOW | …/src/app/main/ui/workspace/sidebar/common/sidebar.scss | 61 | grid-template-columns: repeat(#{$column-number}, #{$column-width}); |
| LOW | …/src/app/main/ui/workspace/sidebar/common/sidebar.scss | 81 | // But two blocks don’t fit perfectly: |
| LOW | plugins/apps/poc-tokens-plugin/src/plugin.ts | 261 | // if (token && selection) { |
| LOW | .serena/project.yml | 1 | # the name by which the project can be referenced within Serena |
| LOW | .serena/project.yml | 21 | # Note: |
| LOW | .serena/project.yml | 41 | # Possible values: unset (use global setting), "lf", "crlf", or "native" (platform default) |
| LOW | .serena/project.yml | 61 | # list of additional paths to ignore in this project. |
| LOW | .serena/project.yml | 81 | # fixed set of tools to use as the base tool set (if non-empty), replacing Serena's default set of tools. |
| LOW | .serena/project.yml | 121 | # Matching memories will not appear in list_memories or activate_project output |
| LOW | mcp/.serena/project.yml | 1 | |
| LOW | mcp/.serena/project.yml | 21 | # (contrary to the memories, which are loaded on demand). |
| LOW | mcp/.serena/project.yml | 41 | # This setting can, in turn, be overridden by CLI parameters (--mode). |
| LOW | mcp/.serena/project.yml | 61 | # al angular ansible bash clojure |
| LOW | mcp/.serena/project.yml | 81 | # - For SCSS / Sass / plain CSS, use scss (some-sass-language-server handles all three) |
| LOW | mcp/.serena/project.yml | 101 | # Note: the backend is fixed at startup. If a project with a different backend |
| LOW | mcp/.serena/project.yml | 121 | |
| LOW | common/src/app/common/svg/path/arc_to_bezier.js | 41 | dot = -1.0; |
| LOW | .github/workflows/commit-checker.yml | 41 | # pattern: '^[^#].{74}' |
| LOW | .github/workflows/plugins-deploy-packages.yml | 141 | # with: |
| LOW | render-wasm/src/shapes.rs | 201 | deleted: bool, |
| LOW | render-wasm/src/shapes.rs | 821 | /// - The base bounds (selection rectangle) |
| LOW | render-wasm/src/render.rs | 81 | /// |
| LOW | render-wasm/src/render.rs | 141 | /// Calculates the clip bounds for shadow rendering of a given shape. |
| LOW | render-wasm/src/render.rs | 201 | /// Focus mode allows selectively highlighting or isolating specific shapes (UUIDs) |
| LOW | render-wasm/src/render.rs | 361 | pub focus_mode: FocusMode, |
| LOW | render-wasm/src/render.rs | 3641 | .map_or(Vec::new(), |t| t.iter().copied().collect()); |
| LOW | render-wasm/src/render.rs | 3881 | Ok(()) |
| LOW | render-wasm/src/main.rs | 321 | } else { |
| LOW | render-wasm/src/mem.rs | 1 | use crate::{error::Result, performance}; |
| LOW | render-wasm/src/wasm/mem.rs | 1 | use std::alloc::{alloc, Layout}; |
| LOW | render-wasm/src/render/surfaces.rs | 401 | |
| LOW | render-wasm/src/render/surfaces.rs | 1081 | /// `scratch`, then returns the sub-region `[0, out_w) × [0, out_h)` as an image. |
| LOW | render-wasm/src/render/filters.rs | 61 | } |
| LOW | render-wasm/src/render/text.rs | 321 | let layer_rec = SaveLayerRec::default().paint(&opacity_paint); |
| LOW | render-wasm/src/render/text.rs | 621 | .surfaces |
| LOW | render-wasm/src/render/text.rs | 641 | // shadows::render_text_path_stroke_shadows( |
| LOW | render-wasm/src/state/shapes_pool.rs | 21 | /// A pool allocator for `Shape` objects that attempts to minimize memory reallocations. |
| Severity | File | Line | Snippet |
|---|---|---|---|
| LOW | tools/gh.py | 166 | def load_existing_issue_numbers(filepath: str) -> set[int]: |
| LOW | frontend/text-editor/src/editor/content/dom/Style.js | 120 | function getStyleDefaultsDeclaration() { |
| LOW | frontend/text-editor/src/editor/content/dom/Content.js | 29 | function isContentFragmentFromDocumentTextSpan(document) { |
| LOW | frontend/text-editor/src/editor/content/dom/Content.js | 56 | export function mapContentFragmentFromDocument(document, root, styleDefaults) { |
| LOW | frontend/text-editor/src/editor/content/dom/Content.js | 201 | export function mapContentFragmentFromHTML( |
| LOW | frontend/text-editor/src/editor/content/dom/Content.js | 228 | export function mapContentFragmentFromString(string, styleDefaults) { |
| LOW | frontend/text-editor/src/editor/clipboard/paste.js | 21 | function getFormattedFragmentFromClipboardData( |
| LOW | frontend/text-editor/src/editor/clipboard/paste.js | 37 | function getPlainFragmentFromClipboardData(selectionController, clipboardData) { |
| LOW | frontend/text-editor/src/editor/clipboard/paste.js | 50 | function getFormattedOrPlainFragmentFromClipboardData( |
| LOW | frontend/scripts/find-unused-translations.js | 51 | async function findExecutionTimeTranslations() { |
| LOW | frontend/scripts/_worker.js | 42 | function configureModulesProcessor(options) { |
| LOW | frontend/packages/draft-js/index.js | 201 | export function removeBlurSelectionEntity(state) { |
| LOW | …ns/libs/plugins-runtime/src/lib/api/plugin-api.spec.ts | 8 | function generateMockPluginManager() { |
| LOW | plugins/apps/poc-state-plugin/src/plugin.ts | 579 | function combineSelectedAsVariants() { |
| LOW | mcp/types-generator/prepare_api_docs.py | 134 | def _convert_strings_to_block(self, obj): |
| Severity | File | Line | Snippet |
|---|---|---|---|
| MEDIUM | tools/taiga.py | 66 | print(f"Error: HTTP {e.code} — {e.reason}", file=sys.stderr) |
| MEDIUM | tools/taiga.py | 74 | print(f"Error: {e.reason}", file=sys.stderr) |
| MEDIUM | tools/taiga.py | 77 | print(f"Error: invalid JSON response — {e}", file=sys.stderr) |
| MEDIUM | tools/taiga.py | 242 | print(f"Error: ref must be a number, got '{ref_str}'", file=sys.stderr) |
| LOW | backend/scripts/manage.py | 70 | except Exception as cause: |
| MEDIUM | backend/scripts/manage.py | 62 | def run_cmd(params): |
| Severity | File | Line | Snippet |
|---|---|---|---|
| MEDIUM | docker/devenv/files/serena_config.yml | 77 | # Same syntax as gitignore, so you can use * and **. |
| LOW | plugins/libs/plugins-runtime/vite.config.ts | 49 | // Don't forget to update your package.json as well. |
| MEDIUM | .serena/project.yml | 62 | # Same syntax as gitignore, so you can use * and **. |
| MEDIUM | mcp/.serena/project.yml | 6 | # Same syntax as gitignore, so you can use * and **. |
| Severity | File | Line | Snippet |
|---|---|---|---|
| LOW | frontend/packages/tokenscript/schemas.js | 560 | "script": "// XYZ-D65 to OKLab Conversion\n// Uses ColorJS-compatible matrices (recalculated for consistent |
| LOW | frontend/packages/tokenscript/schemas.js | 580 | "script": "// OKHSL to OKLab Conversion\n// Reference: Björn Ottosson - \"A perceptual color picker: OKHSL a |
| LOW | frontend/packages/tokenscript/schemas.js | 590 | "script": "// OKHSV to OKLab Conversion\n// Reference: Björn Ottosson - \"A perceptual color picker: OKHSL a |
| LOW | frontend/packages/tokenscript/schemas.js | 708 | "script": "// OKLab to OKHSL Conversion\n// Reference: Björn Ottosson - \"A perceptual color picker: OKHSL a |
| LOW | frontend/packages/tokenscript/schemas.js | 767 | "script": "// OKLab to OKHSV Conversion\n// Reference: Björn Ottosson - \"A perceptual color picker: OKHSL a |
| Severity | File | Line | Snippet |
|---|---|---|---|
| LOW | .serena/project.yml | 90 | # Set this to [] to disable base modes for this project. |
| LOW | .serena/project.yml | 91 | # Set this to a list of mode names to always include the respective modes for this project. |
| LOW | mcp/.serena/project.yml | 31 | # Set this to [] to disable base modes for this project. |
| LOW | mcp/.serena/project.yml | 32 | # Set this to a list of mode names to always include the respective modes for this project. |
| Severity | File | Line | Snippet |
|---|---|---|---|
| LOW | tools/gh.py | 240 | |
| LOW | tools/gh.py | 472 | |
| LOW | backend/scripts/manage.py | 38 | |
| LOW | mcp/types-generator/prepare_api_docs.py | 23 | |
| LOW | mcp/types-generator/prepare_api_docs.py | 205 |
| Severity | File | Line | Snippet |
|---|---|---|---|
| LOW | mcp/types-generator/prepare_api_docs.py | 50 | # for links, just return the text |