From f12dc9bf623196489953cbb58ae305c09026b8a0 Mon Sep 17 00:00:00 2001 From: eiserv69 <156132387+eiserv69@users.noreply.github.com> Date: Sat, 7 Nov 2026 21:05:23 +0100 Subject: [PATCH 1/2] feat: Spielwiese vereinfachen und Framework-Anbindungen robuster machen --- .github/workflows/ci.yml | 15 +- .github/workflows/publish.yml | 33 +- .gitignore | 3 + README.md | 274 +++------- browser-tests/playground.spec.mjs | 208 ++++++++ docs/architecture.md | 241 ++++----- docs/integration.md | 150 ++++++ docs/media/playground.png | Bin 93048 -> 109482 bytes docs/media/smoothing-extremes.png | Bin 7089 -> 50767 bytes examples/demo.css | 83 +++ examples/formen.svg | 5 + examples/playground.html | 795 +++++----------------------- examples/react/index.html | 156 +----- examples/react/main.tsx | 84 ++- examples/svelte/Beispiele.svelte | 42 ++ examples/svelte/index.html | 13 + examples/svelte/main.js | 4 + package-lock.json | 250 +++++++++ package.json | 17 +- playwright.config.ts | 13 + scripts/build-examples.mjs | 22 + scripts/create-visual-fixture.mjs | 34 +- scripts/screenshots.mjs | 54 ++ scripts/serve-playground.mjs | 23 +- src/clip-path.ts | 4 +- src/css/paint.ts | 4 +- src/css/radius.ts | 4 +- src/css/shadow.ts | 25 +- src/css/types.ts | 4 +- src/dom/apply-squircle.ts | 52 +- src/dom/layers.ts | 93 ++-- src/dom/observe-size.ts | 48 ++ src/dom/void-elements.ts | 4 +- src/geometry.ts | 31 +- src/react/squircle.tsx | 15 +- src/react/use-element-size.ts | 80 +-- src/react/use-squircle-clip-path.ts | 2 +- src/svelte/index.ts | 26 + test/clip-path.test.mjs | 6 +- test/css.test.mjs | 63 ++- test/geometry.test.mjs | 22 +- test/react.test.mjs | 18 +- test/size.test.mjs | 28 + tsconfig.json | 6 +- type-tests/react-api.tsx | 10 +- type-tests/svelte-api.ts | 9 + 46 files changed, 1555 insertions(+), 1518 deletions(-) create mode 100644 browser-tests/playground.spec.mjs create mode 100644 docs/integration.md create mode 100644 examples/demo.css create mode 100644 examples/formen.svg create mode 100644 examples/svelte/Beispiele.svelte create mode 100644 examples/svelte/index.html create mode 100644 examples/svelte/main.js create mode 100644 playwright.config.ts create mode 100644 scripts/screenshots.mjs create mode 100644 src/dom/observe-size.ts create mode 100644 src/svelte/index.ts create mode 100644 test/size.test.mjs create mode 100644 type-tests/svelte-api.ts diff --git a/.github/workflows/ci.yml b/.github/workflows/ci.yml index 17fd523..eee3d89 100644 --- a/.github/workflows/ci.yml +++ b/.github/workflows/ci.yml @@ -32,5 +32,18 @@ jobs: - run: npm ci - # Typecheck, build, tests, and a dry-run pack of the published files. + # Typprüfung, Erstellung, Tests und Prüfung des npm-Pakets. - run: npm run check + + browser: + name: Browsertests + runs-on: ubuntu-latest + steps: + - uses: actions/checkout@v7 + - uses: actions/setup-node@v7 + with: + node-version: 24 + cache: npm + - run: npm ci + - run: npx playwright install --with-deps chromium + - run: npm run test:browser diff --git a/.github/workflows/publish.yml b/.github/workflows/publish.yml index 55410d1..7a17bf6 100644 --- a/.github/workflows/publish.yml +++ b/.github/workflows/publish.yml @@ -1,14 +1,11 @@ -name: Release +name: Veröffentlichung -# Every push to main updates a release PR maintained by release-please. Merging -# that PR bumps package.json, writes CHANGELOG.md, tags vX.Y.Z, creates the -# GitHub Release, and publishes the package below. -# -# A release published by hand also publishes. Releases that release-please -# creates with GITHUB_TOKEN do not trigger the `release` event, so nothing is -# published twice. -# -# Keep this file name: npm trusted publishing is bound to it. +# Jeder Push auf main aktualisiert die Versions-PR von release-please. +# Ihr Merge aktualisiert Version und Änderungsverlauf, erstellt Tag und +# GitHub-Veröffentlichung und veröffentlicht anschließend das npm-Paket. +# Manuell veröffentlichte Releases starten ebenfalls die Veröffentlichung. +# Mit GITHUB_TOKEN erstellte Releases lösen kein weiteres release-Ereignis aus. +# Dateinamen beibehalten: Die vertrauenswürdige npm-Veröffentlichung ist daran gebunden. on: push: branches: [main] @@ -17,7 +14,7 @@ on: workflow_dispatch: inputs: dry-run: - description: "Build and pack, but do not publish" + description: "Erstellen und packen, ohne Veröffentlichung" type: boolean default: true @@ -48,7 +45,7 @@ jobs: publish: needs: release-please - # release-please is skipped for release and dispatch events; run anyway. + # Auch bei Release- und manuellen Ereignissen ohne release-please ausführen. if: >- !cancelled() && ( needs.release-please.outputs.release_created == 'true' || @@ -58,7 +55,7 @@ jobs: runs-on: ubuntu-latest permissions: contents: read - # Required for npm provenance and for trusted publishing. + # Für npm-Herkunftsnachweise und die vertrauenswürdige Veröffentlichung nötig. id-token: write steps: @@ -69,27 +66,27 @@ jobs: node-version: 22 registry-url: https://registry.npmjs.org - # npm 11.5.1+ is needed for trusted publishing. + # Die vertrauenswürdige Veröffentlichung benötigt npm ab 11.5.1. - run: npm install -g npm@latest - run: npm ci - - name: Verify the tag matches package.json + - name: Tag mit package.json abgleichen if: github.event_name != 'workflow_dispatch' env: TAG: ${{ needs.release-please.outputs.tag_name || github.ref_name }} run: | version="$(node -p 'require("./package.json").version')" if [ "${TAG#v}" != "$version" ]; then - echo "Tag $TAG does not match package.json version $version" >&2 + echo "Tag $TAG stimmt nicht mit Paketversion $version überein" >&2 exit 1 fi - run: npm run check - - name: Publish + - name: Veröffentlichen if: github.event_name != 'workflow_dispatch' || !inputs.dry-run run: npm publish --provenance --access public env: - # Ignored once trusted publishing is configured on npmjs.com. + # Wird nach Einrichtung der vertrauenswürdigen Veröffentlichung auf npmjs.com ignoriert. NODE_AUTH_TOKEN: ${{ secrets.NPM_TOKEN }} diff --git a/.gitignore b/.gitignore index 0ce2600..1b66e14 100644 --- a/.gitignore +++ b/.gitignore @@ -1,8 +1,11 @@ node_modules/ dist/ examples/react/main.js +examples/svelte/bundle.js .artifacts/ .npm-cache/ *.tgz *.tsbuildinfo .DS_Store +test-results/ +playwright-report/ diff --git a/README.md b/README.md index e2f56d8..7ecd7c2 100644 --- a/README.md +++ b/README.md @@ -1,256 +1,114 @@ # squircles -Small Figma-style squircles for TypeScript and React. +Eckenglättung nach Figma für das Web. Hintergrund, Kontur, Schatten und Hover +bleiben in deinem CSS. Ohne zusätzliche Hülle, mit optionaler React- und +Svelte-Anbindung und ohne Laufzeitabhängigkeiten im Geometrie- und DOM-Paket. -Adopting it changes an element's corner shape and nothing else. Background, -border, shadow, hover, dark mode, and everything else stay in your CSS, where -you already know how to write them. +

+ Die neutrale Spielwiese mit Reglern, Formvergleich und vergrößerter Ecke +

-- zero dependencies in the geometry package; -- React is an optional peer dependency; -- works on any element — buttons, links, cards, images, inputs; -- geometry and paint are read from ordinary CSS, not from props; -- no data-URL masks, canvas, paint worklets, or CSS-in-JS; -- responsive via `ResizeObserver`; -- plain `border-radius` during SSR and before hydration; -- ESM, strict TypeScript, and tree-shakeable entry points. - -## What it looks like - -`examples/playground.html` draws the same button twice — once through -`createSquirclePath()`, once with plain `border-radius` — and updates both while -you move radius, smoothing, size, and stroke width: - -```sh -npm run playground -``` - -![The playground with a 200 × 72 button at radius 24: the squircle and the -border-radius button side by side, their outlines overlaid, and the top left -corner magnified](docs/media/playground.png) - -At button-sized radii the two shapes are close, which is why the overlay and the -magnified corner are part of the page: they are the honest way to see the -difference. Note the corner budget in the readout — at radius 24 on a 72px-tall -button, Figma's constraint already reduces the effective smoothing. - -The difference shrinks with the radius. At a pill radius with `preserveSmoothing`, -the smoothed ends are almost identical to the semicircular `border-radius` -ends. But theres a sweet-spot- where differences are visible really well: - -![picture lol](docs/media/smoothing-extremes.png) - -## Why this exists - -Figma corner smoothing is not the same shape as `border-radius`. Existing web -solutions generally create an SVG path or clip path. A clip path works well for -fills, but a button border is easy to get wrong: subtracting a pixel from the -radius does not create the exact inner offset of a smoothed curve, and combining -a clip path with a separately rasterized mask can produce uneven-looking -one-pixel edges. - -This package draws the border as a native SVG stroke on the smoothed path -itself, inset by half its width. The stroke is therefore exactly as thick at a -smoothed corner as it is along a straight edge, and nothing is clipped away. - -## Install +## Installation ```sh npm install squircles ``` -## React - -Give the element a class and let CSS do the rest: - -```tsx -import { Squircle } from "squircles/react"; - -export function CallToAction() { - return ( - - Learn more - - ); -} -``` +## Ein CSS, mehrere Wege ```css -.button { - background: linear-gradient(#243a8f, #192d73); - border: 1px solid #e5e7eb; +.taste { + background: #242424; + color: white; + border: 1px solid #666; border-radius: 12px; --squircle-smoothing: 1; - min-height: 48px; - padding: 12px 16px; - color: white; - transition: background-color 150ms ease; -} - -.button:hover { - background: #14245e; -} - -.button:focus-visible { - outline: 2px solid #192d73; - outline-offset: 4px; + padding: 12px 20px; } ``` -The component reads `border-radius` and `--squircle-smoothing` from your CSS, so -it needs no props at all beyond `as`. Pass `radius`, `smoothing`, or -`preserveSmoothing` only when you want to override the stylesheet. - -Cards and images work the same way: +**React** (ab Version 18): ```tsx - - -

Some text

-
-``` +import { Squircle } from "squircles/react"; -```css -.card { - border-radius: 20px; - --squircle-smoothing: 1; - background: white; - border: 1px solid #dce1ed; - box-shadow: 0 12px 32px rgba(25, 45, 115, 0.18); -} + + Mehr erfahren + ``` -The shadow follows the smoothed contour rather than the `border-radius` one. +**Svelte** als [Action](https://svelte.dev/docs/svelte/use): -Use `as="a"` for a native link, or pass a ref-forwarding component such as -Next.js `Link`. In the Next.js App Router the file needs `"use client"`. +```svelte + -Do not enable `clipContent` on controls if their focus outline must remain -outside the shape. It is intended for cards whose content bleeds to the edge. + +``` -## Without React +**JavaScript, Vue oder andere Frameworks** über den DOM-Einstieg: ```ts import { applySquircle } from "squircles/dom"; -const dispose = applySquircle(document.querySelector(".card")); +const element = document.querySelector(".taste"); +const aufraeumen = element ? applySquircle(element) : () => {}; +// Beim Entfernen des Elements aufrufen. +aufraeumen(); ``` -With no options it reads everything from CSS, exactly like the React component, -and returns a cleanup function. It works on any element, in any framework, and -in plain HTML. - -## Existing components +Die Anbindungen lesen `border-radius` und `--squircle-smoothing` aus dem CSS. +Klassen-, Stil- und Größenänderungen sowie Hover und Fokus aktualisieren die Form. +Beim serverseitigen Rendern bleibt zunächst der normale CSS-Radius sichtbar. -`SquircleSurface` adds only the visual SVG layer, with fill and stroke on a -single path. Use it inside a component that already owns positioning and -semantics, or when you need a semi-transparent border: - -```tsx -import { SquircleSurface } from "squircles/react"; - -function ExistingButton() { - return ( - - ); -} -``` - -The parent must be positioned, its rectangular background/border must be -transparent, and its content must paint above the SVG. - -## Geometry only - -The root entry point does not import React or touch the DOM: +## Nur die Geometrie ```ts import { createSquirclePath, createSquircleClipPath } from "squircles"; -const path = createSquirclePath({ - width: 120, - height: 48, - radius: 8, - smoothing: 1, - inset: 0.5, -}); - -const clipPath = createSquircleClipPath({ width: 120, height: 48, radius: 8 }); +const optionen = { width: 200, height: 96, radius: 24, smoothing: 1 }; +const pfad = createSquirclePath(optionen); +const clipPath = createSquircleClipPath(optionen); ``` -`radius` accepts a number or individual corners: - -```ts -radius={{ - topLeft: 24, - topRight: 12, - bottomRight: 24, - bottomLeft: 12, -}} -``` +`radius` unterstützt einzelne Ecken; `smoothing` reicht von `0` bis `1`. +Bei wenig Platz wird die Glättung wie in Figma begrenzt. +`preserveSmoothing: true` erhält sie durch komprimierte Kontrollpunkte. +`inset` versetzt den Pfad nach innen, etwa um eine halbe SVG-Konturbreite. -## What is not supported +

+ Durchgezogene Squircle-Kontur und gestrichelter border-radius mit vergrößerter Ecke +

-These are deliberate limits, not bugs: +## Grenzen und weitere Beispiele -- **Focus rings.** `outline` always follows `border-radius`. With - `outline-offset` the mismatch is hard to see; a ring sitting directly on the - edge will not match. -- **Different borders per side.** Only `border-top-width` and - `border-top-color` are read. -- **Dashed and dotted borders.** Only `border-style: solid` is drawn. -- **`inset` shadows.** They are left on the element and keep following - `border-radius`. -- **Semi-transparent borders.** The surface's clip edge shows through the - stroke. Use `SquircleSurface` for that case. -- **`backdrop-filter`.** The element itself is not clipped, so a backdrop - filter stays rectangular. -- **No JavaScript, or before hydration.** The element renders with its own - `border-radius`. There is no layout shift, but there is no squircle either. +- Durchgezogene, einheitliche Konturen; keine unterschiedlichen Ränder pro Seite. +- Fokusmarkierungen und innere Schatten folgen weiterhin `border-radius`. +- Bilder und Eingaben erhalten einen Clip-Pfad, der auch ihre Kontur und ihren + Schatten beschneidet. Bei Bedarf ein umgebendes Element verwenden. +- Für halbtransparente Konturen gibt es `SquircleSurface` unter `squircles/react`. +- Ohne `ResizeObserver` wird beim Start und bei Fenstergrößenänderungen gemessen. + Für sonstige Layoutänderungen ist ein Polyfill nötig. -## Migrating from 0.1 +[Integration, Optionen und Migration](docs/integration.md) · +[Architektur und Grenzen](docs/architecture.md) -`Squircle` no longer takes paint props. Move them into your stylesheet: - -| 0.1 prop | Now | -|---|---| -| `fill="#192d73"` | `background: #192d73;` | -| `stroke="#e5e7eb"` | `border-color: #e5e7eb;` | -| `strokeWidth={1}` | `border-width: 1px; border-style: solid;` | -| `radius={12}` | `border-radius: 12px;` (or keep the prop) | -| `smoothing={1}` | `--squircle-smoothing: 1;` (or keep the prop) | -| `surfaceClassName` | style `[data-squircle-fill]` / `[data-squircle-stroke]` | -| `surfaceStyle` | style `[data-squircle-fill]` / `[data-squircle-stroke]` | - -`SquircleSurface` is unchanged and still accepts all of them. - -## Development +## Entwicklung ```sh -npm install +npm ci npm run check +npx playwright install chromium +npm run test:browser +npm run playground ``` -`npm run playground` builds the package and serves two example pages: -[examples/playground.html](examples/playground.html) on -, which shapes its own interface with the library, and -a React version on . `npm run visual:fixture` -writes a static rasterization fixture to `.artifacts/`. - -See [docs/architecture.md](docs/architecture.md) for the rendering rationale -and constraints. - -### Releasing +Spielwiese: [localhost:5173](http://localhost:5173/), React: +[localhost:5173/react](http://localhost:5173/react/). +Svelte-Beispiele: [localhost:5173/svelte](http://localhost:5173/svelte/). +`npm run screenshots` erstellt die README-Bilder mit transparentem Schatten neu. +`npm run visual:fixture` erzeugt weitere Geometriebeispiele in `.artifacts/`. -Commits on `main` follow [Conventional Commits](https://www.conventionalcommits.org/). -release-please keeps a release PR open that bumps the version and updates -[CHANGELOG.md](CHANGELOG.md); merging it tags the release, creates the GitHub -Release, and publishes to npm. +Commits auf `main` verwenden [Conventional Commits](https://www.conventionalcommits.org/). +release-please erstellt die Versions-PR; ihr Merge veröffentlicht das npm-Paket. diff --git a/browser-tests/playground.spec.mjs b/browser-tests/playground.spec.mjs new file mode 100644 index 0000000..10da6f0 --- /dev/null +++ b/browser-tests/playground.spec.mjs @@ -0,0 +1,208 @@ +import { test, expect } from "@playwright/test"; + +test("Spielwiese passt auf kleine Bildschirme und aktualisiert die Kontur", async ({ page }) => { + const fehler = []; + page.on("pageerror", (error) => fehler.push(error.message)); + await page.setViewportSize({ width: 375, height: 812 }); + await page.goto("/"); + const pfad = page.locator("#squircle path"); + await expect(pfad).toHaveAttribute("d", /^M /); + const vorher = await pfad.getAttribute("d"); + await page.locator("#radius").fill("0"); + await expect(pfad).not.toHaveAttribute("d", vorher); + await expect(page.locator("#hinweis")).toHaveText("Ohne Radius sind beide Formen identisch."); + await page.locator("#breite").fill("420"); + await expect.poll(() => page.evaluate(() => document.documentElement.scrollWidth <= innerWidth)).toBe(true); + expect(fehler).toEqual([]); +}); + +test("DOM-Messung berücksichtigt vertikale und seitliche Schreibrichtungen", async ({ page }) => { + await page.goto("/"); + for (const writingMode of ["horizontal-tb", "vertical-rl", "sideways-rl"]) { + await page.evaluate(async (mode) => { + document.getElementById("messung")?.remove(); + const { applySquircle } = await import("/dist/dom/index.js"); + const element = document.createElement("div"); + element.id = "messung"; + element.style.cssText = `width:160px;height:80px;writing-mode:${mode};border:1px solid black;border-radius:16px;background:white;box-sizing:border-box`; + document.body.append(element); + applySquircle(element); + }, writingMode); + await expect(page.locator("#messung [data-squircle-stroke]")).toHaveAttribute("viewBox", "0 0 160 80"); + } +}); + +test("Inline-Änderungen bleiben beim Neuzeichnen und Aufräumen erhalten", async ({ page }) => { + await page.goto("/"); + await page.evaluate(async () => { + const { applySquircle } = await import("/dist/dom/index.js"); + const element = document.createElement("button"); + element.id = "dynamisch"; + element.style.cssText = "width:180px;height:64px;border-radius:16px;background:rgb(10, 10, 10);padding:8px"; + document.body.append(element); + window.aufraeumen = applySquircle(element); + }); + const element = page.locator("#dynamisch"); + await expect(element.locator("[data-squircle-fill]")).toHaveCSS("background-color", "rgb(10, 10, 10)"); + await element.evaluate((node) => { + node.style.backgroundColor = "rgb(70, 70, 70)"; + node.style.padding = "12px"; + node.style.setProperty("--squircle-smoothing", "0.5"); + }); + await expect(element.locator("[data-squircle-fill]")).toHaveCSS("background-color", "rgb(70, 70, 70)"); + await page.evaluate(() => { window.aufraeumen(); window.aufraeumen(); }); + await expect(element.locator("[data-squircle-fill]")).toHaveCount(0); + await expect(element).toHaveCSS("background-color", "rgb(70, 70, 70)"); + await expect(element).toHaveCSS("padding-top", "12px"); + await expect(element).toHaveCSS("--squircle-smoothing", "0.5"); +}); + +test("ohne ResizeObserver funktionieren Start, Fensteränderung und Aufräumen", async ({ page }) => { + await page.addInitScript(() => { window.ResizeObserver = undefined; }); + await page.goto("/"); + await page.evaluate(async () => { + const { applySquircle } = await import("/dist/dom/index.js"); + const element = document.createElement("div"); + element.id = "ersatz"; + element.style.cssText = "width:160px;height:80px;border:1px solid black;border-radius:16px;box-sizing:border-box"; + document.body.append(element); + window.aufraeumen = applySquircle(element); + }); + await expect(page.locator("#ersatz svg")).toHaveAttribute("viewBox", "0 0 160 80"); + await page.evaluate(() => { + document.getElementById("ersatz").style.width = "200px"; + window.dispatchEvent(new Event("resize")); + }); + await expect(page.locator("#ersatz svg")).toHaveAttribute("viewBox", "0 0 200 80"); + await page.evaluate(() => window.aufraeumen()); + await expect(page.locator("#ersatz svg")).toHaveCount(0); +}); + +test("React folgt dem Wechsel des nativen Elements", async ({ page }) => { + await page.goto("/react/"); + const element = page.locator("[data-wechsel]"); + await expect(element.locator("[data-squircle-fill]")).toHaveCount(1); + await page.getByRole("button", { name: "Element wechseln" }).click(); + await expect(element).toHaveJSProperty("tagName", "A"); + await expect(element.locator("[data-squircle-fill]")).toHaveCount(1); + await page.getByRole("button", { name: "Element wechseln" }).click(); + await expect(element).toHaveJSProperty("tagName", "BUTTON"); + await expect(element.locator("[data-squircle-fill]")).toHaveCount(1); +}); + +test("Svelte-Action aktualisiert Optionen und räumt mehrfach sicher auf", async ({ page }) => { + await page.goto("/"); + await page.evaluate(async () => { + const { squircle } = await import("/dist/svelte/index.js"); + const element = document.createElement("button"); + element.id = "action"; + element.style.cssText = "width:160px;height:80px;border:1px solid black;border-radius:16px;box-sizing:border-box"; + document.body.append(element); + window.action = squircle(element); + }); + const kontur = page.locator("#action path"); + await expect(kontur).toHaveAttribute("d", /^M /); + const vorher = await kontur.getAttribute("d"); + await page.evaluate(() => window.action.update({ radius: 0 })); + await expect(kontur).not.toHaveAttribute("d", vorher); + await page.evaluate(() => window.action.update()); + await expect(kontur).toHaveAttribute("d", vorher); + await page.evaluate(() => { window.action.destroy(); window.action.destroy(); window.action.update({ radius: 24 }); }); + await expect(page.locator("#action [data-squircle-fill]")).toHaveCount(0); + await expect(page.locator("#action")).toHaveCSS("border-top-color", "rgb(0, 0, 0)"); +}); + +test("Darstellung erzeugt im Ruhezustand keine weiteren DOM-Änderungen", async ({ page }) => { + await page.goto("/react/"); + await expect(page.locator("[data-wechsel] [data-squircle-fill]")).toHaveCount(1); + const anzahl = await page.evaluate(async () => { + await new Promise((resolve) => requestAnimationFrame(() => requestAnimationFrame(resolve))); + let count = 0; + const observer = new MutationObserver((records) => { count += records.length; }); + observer.observe(document.querySelector("[data-wechsel]"), { attributes: true, childList: true, subtree: true }); + for (let i = 0; i < 8; i++) await new Promise(requestAnimationFrame); + observer.disconnect(); + return count; + }); + expect(anzahl).toBe(0); +}); + +test("Svelte rendert Action und Attachment mit reaktiven Änderungen", async ({ page }) => { + const fehler = []; + page.on("pageerror", (error) => fehler.push(error.message)); + await page.goto("/svelte/"); + const kontur = page.locator("[data-action] path"); + await expect(kontur).toHaveAttribute("d", /^M /); + await expect(page.locator("[data-attachment] [data-squircle-fill]")).toHaveCount(1); + const vorher = await kontur.getAttribute("d"); + await page.getByRole("slider", { name: "Glättung" }).fill("0"); + await expect(kontur).not.toHaveAttribute("d", vorher); + await page.getByRole("button", { name: "Beispiel entfernen" }).click(); + await expect(page.locator("[data-action]")).toHaveCount(0); + await page.getByRole("button", { name: "Beispiel anzeigen" }).click(); + await expect(kontur).toHaveAttribute("d", /^M /); + expect(fehler).toEqual([]); +}); + +test("entfernte Inline-Stile und Prioritäten bleiben nach dem Aufräumen korrekt", async ({ page }) => { + await page.goto("/"); + await page.evaluate(async () => { + const { applySquircle } = await import("/dist/dom/index.js"); + const element = document.createElement("div"); + element.id = "inline"; + element.style.cssText = "width:160px;height:80px;background:rgb(20,20,20);padding:4px;border-radius:16px"; + document.body.append(element); + window.aufraeumen = applySquircle(element); + }); + await expect(page.locator("#inline [data-squircle-fill]")).toHaveCount(1); + await page.locator("#inline").evaluate((node) => { + node.style.removeProperty("padding"); + node.style.setProperty("background-color", "rgb(80, 80, 80)", "important"); + }); + await expect(page.locator("#inline [data-squircle-fill]")).toHaveCSS("background-color", "rgb(80, 80, 80)"); + await page.evaluate(() => window.aufraeumen()); + const styles = await page.locator("#inline").evaluate((node) => ({ + padding: node.style.padding, + priority: node.style.getPropertyPriority("background-color"), + color: node.style.backgroundColor, + })); + expect(styles).toEqual({ padding: "", priority: "important", color: "rgb(80, 80, 80)" }); +}); + +test("vollständig geschrumpfte Schatten verhindern die Darstellung nicht", async ({ page }) => { + const fehler = []; + page.on("pageerror", (error) => fehler.push(error.message)); + await page.goto("/"); + await page.evaluate(async () => { + const { applySquircle } = await import("/dist/dom/index.js"); + const element = document.createElement("div"); + element.id = "schatten"; + element.style.cssText = "width:160px;height:80px;background:white;border-radius:16px;box-shadow:0 2px 4px -100px oklch(40% 0 0)"; + document.body.append(element); + applySquircle(element); + }); + await expect(page.locator("#schatten [data-squircle-fill]")).toHaveCount(1); + await expect(page.locator("#schatten [data-squircle-shadow]")).toHaveCount(0); + expect(fehler).toEqual([]); +}); + +test("ein komplett ersetztes style-Attribut bleibt nach dem Aufräumen erhalten", async ({ page }) => { + await page.goto("/"); + await page.evaluate(async () => { + const { applySquircle } = await import("/dist/dom/index.js"); + const element = document.createElement("div"); + element.id = "ersetzte-stile"; + element.style.cssText = "width:160px;height:80px;background:black;border:1px solid black;border-radius:16px;padding:4px"; + document.body.append(element); + window.aufraeumen = applySquircle(element); + }); + const element = page.locator("#ersetzte-stile"); + await expect(element.locator("[data-squircle-fill]")).toHaveCount(1); + await element.evaluate((node) => { node.style.cssText = "width:200px;height:100px;background:rgb(60,60,60);border:2px solid rgb(90,90,90);border-radius:24px"; }); + await expect(element.locator("svg")).toHaveAttribute("viewBox", "0 0 200 100"); + await expect(element.locator("[data-squircle-fill]")).toHaveCSS("background-color", "rgb(60, 60, 60)"); + await page.evaluate(() => window.aufraeumen()); + await expect(element).toHaveCSS("border-top-color", "rgb(90, 90, 90)"); + await expect(element).toHaveCSS("padding-top", "0px"); + await expect(element).toHaveCSS("background-color", "rgb(60, 60, 60)"); +}); diff --git a/docs/architecture.md b/docs/architecture.md index b9d2a43..a907571 100644 --- a/docs/architecture.md +++ b/docs/architecture.md @@ -1,140 +1,101 @@ -# Architecture - -## Why SVG instead of a mask - -The outer fill and border must be rasterized from the same geometry. Building a -border from an outer clip path plus a separately calculated inner mask has -three failure modes: - -1. reducing the radius does not create an exact parallel offset of a smoothed - Bézier curve; -2. `clip-path` and an encoded SVG mask can be rasterized in separate passes; -3. fractional layout sizes can quantize those two passes differently. - -This package draws one SVG path with both `fill` and `stroke`. The path is inset -by half the stroke width, so the complete stroke stays inside the component -box. There is no inner contour to drift away from the outer contour. - -## Layers - -- `squircles` is pure geometry and has no runtime dependencies. -- `squircles/dom` adds `applySquircle`, which shapes any element from its own - CSS. It has no React dependency. -- `squircles/react` adds the `Squircle`, `SquircleSurface`, `useSquirclePath`, - and `useSquircleClipPath` APIs. -- React is an optional peer dependency. The geometry entry point does not load - React and does not touch the DOM. -- `src/css/` converts `CSSStyleDeclaration` values into plain data. It never - reaches for a DOM global, which is what makes it unit-testable under - `node --test`. - -## Paint model - -`Squircle` renders only the host element and calls `applySquircle` in an effect, -so the paint layers never pass through React reconciliation. That is also why a -void element such as `img` works: nothing is rendered as its child. - -`applySquircle` appends up to three kinds of absolutely positioned layer inside -the host, each with `pointer-events: none`: - -| Layer | z-index | Purpose | -|---|---|---| -| `[data-squircle-shadow]` (one per shadow) | -3 | An offset, blurred, colour-filled shape, clipped to the contour grown by the shadow's spread | -| `[data-squircle-fill]` | -2 | The host's copied background longhands, clipped to the contour | -| `[data-squircle-stroke]` | -1 | An SVG path carrying the border as a stroke | - -All three layers are offset outwards by the border width. The geometry is -measured on the border box, but absolute offsets inside the host resolve against -its padding box, so on a bordered element the two would disagree by the border -width on every side — the outermost band of the contour would fall outside the -layer and the corners would be cut off square. - -The host itself is deliberately **not** clipped. `clip-path` removes everything -outside the contour, including shadows and including descendants, so clipping -the host would make shadows impossible. Instead the host's background is copied -onto the fill layer and the host is set to `transparent`; its `border-color` is -set to `transparent` rather than removing the border, so the border box and the -layout stay intact. - -Separating surface and stroke does not reintroduce the two-contour problem. The -stroke is inset by half its width and completely covers the fill's clip edge, so -there is still never a fill edge and a border edge that must agree. A -semi-transparent border is the exception: the clip edge shows through it, and -`SquircleSurface` remains the escape hatch for that case. - -## Reading the author's CSS - -Because the layers overwrite `background-color`, `background-image`, -`border-color`, and `box-shadow` on the host, those overrides are lifted again -for the duration of every read. Two consequences are worth knowing: - -- each re-read costs one style recalculation, which is why reads are coalesced - into a single `requestAnimationFrame`; -- transitions are suppressed during the read. Lifting an override on a property - that carries a transition makes the browser interpolate from the override, so - a plain read returns the value in flight rather than the authored target. A - hovered button with a background transition would otherwise keep its idle - colour. - -## Geometry - -The curve uses the cubic Bézier construction described in Figma's -"Desperately seeking squircles" article: - -- smoothing `0` is a normal circular corner; -- smoothing `1` uses the full transition and no circular arc; -- each corner gets a proportional budget on its two adjacent sides; -- by default smoothing is reduced if the requested curve would exceed that - budget, matching Figma's documented constraint; -- `preserveSmoothing` keeps the requested smoothing and compresses the first - Bézier controls instead. - -The implementation is original TypeScript structured around immutable corner -data, explicit input validation, per-corner radii, and stroke insetting. The -published Figma article and the MIT-licensed reference implementations are -credited in `NOTICE`. - -## Rendering contract - -`Squircle` is the high-level, polymorphic component. It: - -- preserves the semantic host (`div`, `button`, `a`, `img`, or a custom React - component); -- measures only layout-size changes with `ResizeObserver`; -- falls back to the element's own `border-radius` before the first measurement, - which needs no special handling because the host keeps its own CSS; -- does not clip focus outlines by default; -- re-reads on `ResizeObserver`, on `class` and `style` mutations, and on - `pointerenter`, `pointerleave`, `focusin`, `focusout`, `transitionrun`, and - `transitionend`. - -Void elements (`img`, `input`, and the rest) cannot hold layers. They get -`clip-path` directly and therefore support neither a border nor a shadow; wrap -them in a `Squircle` when those are needed. - -`SquircleSurface` is the low-level SVG visual. It is useful inside an existing -component that already owns positioning, semantics, and fallback behavior. - -## Known boundaries - -No renderer can make the two physical edges of an element land on identical -device-pixel phases when the element itself has a fractional physical-pixel -width. This package avoids amplifying that unavoidable rasterization detail: -it does not quantize layout to arbitrary quarter pixels, and it never combines -two independently rasterized contours. - -Beyond that, and by decision rather than by accident: - -- `outline`, and therefore every focus ring, follows `border-radius`. No - renderer exposes a hook to change that. -- Only `border-top-width`, `border-top-style`, and `border-top-color` are read. - Per-side borders cannot be expressed as one stroke. -- Only `border-style: solid` is drawn. `stroke-dasharray` could approximate - dashed and dotted borders, but the dash rhythm around a smoothed curve would - not match what CSS draws. -- `inset` shadows are ignored and left on the element. -- Multiple shadows become one layer each. They composite as stacked layers - rather than the way `box-shadow` composites its list. -- `backdrop-filter` on the host stays rectangular, because the host is not - clipped. -- An element whose size is animated recalculates its path once per frame. +# Architektur + +## Paketgrenzen + +- `squircles`: reine Geometrie ohne DOM-Zugriffe und Laufzeitabhängigkeiten. +- `squircles/dom`: CSS-basierte Darstellung mit `applySquircle`. +- `squircles/react`: Komponenten und Hooks, React als optionale Peer-Abhängigkeit. +- `squircles/svelte`: Action mit Aktualisierung und Aufräumen, ohne Svelte-Import. +- `src/css/`: strukturelle Leser für berechnete CSS-Werte, in Node testbar. + +Die englischen Namen der veröffentlichten API und der CSS-Eigenschaften bleiben +zur Kompatibilität bestehen. Kommentare, Beispiele und Fehlermeldungen sind deutsch. + +## Geometrie und Kontur + +Die Geometrie folgt Figmas veröffentlichter kubischer Bézier-Konstruktion: +`smoothing: 0` ergibt Kreisbögen, `1` vollständig geglättete Übergänge. +Jede Ecke erhält einen proportionalen Anteil der benachbarten Seiten. +Reicht der Platz nicht aus, wird die Glättung begrenzt. `preserveSmoothing` +komprimiert stattdessen die ersten Kontrollpunkte. + +Eine Kontur entsteht als SVG-Stroke auf dem um eine halbe Konturbreite +versetzten Pfad. Eine separat berechnete innere Maske entfällt: Das bloße +Verkleinern eines Eckradius ergäbe keinen exakten parallelen Bézier-Versatz. +Quellen und Danksagungen stehen in `NOTICE`. + +## Darstellungsebenen + +`Squircle` rendert nur sein natives Element. Ein Effekt bindet `applySquircle` +an dieses Element. Die Darstellungsebenen liegen außerhalb von Reacts Abgleich. +Ein Wechsel von `as` entfernt die alte Anbindung und misst das neue Element. + +| Ebene | Stapelposition | Aufgabe | +| --- | --- | --- | +| `[data-squircle-shadow]` | -3 | Versetzte, weichgezeichnete Form pro äußerem Schatten | +| `[data-squircle-fill]` | -2 | Kopierter Hintergrund mit geglättetem Clip-Pfad | +| `[data-squircle-stroke]` | -1 | SVG-Kontur auf dem geglätteten Pfad | + +Alle Ebenen ignorieren Zeigereingaben. Ihr negativer Versatz um die Konturbreite +gleicht den Unterschied zwischen Innen- und Rahmenfläche aus. Die originale +Kontur wird transparent, behält aber ihre Breite, damit sich das Layout nicht +verschiebt. Das Element selbst bleibt standardmäßig unbeschnitten, sodass +Schatten und Fokusmarkierungen sichtbar bleiben. + +Die SVG-Kontur überdeckt den Rand der Hintergrundfläche. Bei halbtransparenten +Konturen kann dieser durchscheinen; `SquircleSurface` zeichnet Füllung und Kontur +gemeinsam auf einem SVG-Pfad und vermeidet diesen Fall. + +## CSS lesen und wiederherstellen + +Zum Lesen werden eigene Überschreibungen kurz aufgehoben. Übergänge bleiben +währenddessen deaktiviert, damit das Lesen keine Übergänge oder dauernde +Neuberechnungen auslöst. Änderungen werden pro Animationsframe gebündelt; +eigene Mutationseinträge werden anschließend verworfen. + +Pro Element werden die ursprünglichen und die zuletzt angewendeten Inline-Stile +gespeichert. Abweichungen gegenüber dem angewendeten Zustand werden in die +ursprünglichen Stile übernommen. Dadurch bleiben nachträgliche Änderungen durch +Frameworks beim Neuzeichnen und Aufräumen erhalten. Eine Zuweisung genau des +bereits von der Bibliothek gesetzten Werts ist davon nicht unterscheidbar. + +Eine Anbindung pro Element ist vorgesehen. Aufräumen ist idempotent und entfernt +Beobachter, Ereignisbehandlung, ausstehende Frames und eigene Ebenen. + +## Größenmessung + +DOM und React verwenden dieselbe Messung. `ResizeObserver` liefert logische +Inline- und Blockmaße, die anhand von `writing-mode` in physische Breite und Höhe +umgerechnet werden. Das umfasst `vertical-*` und `sideways-*`. +Auf 1/64 Pixel gerundete Maße vermeiden Änderungen durch minimale Messabweichungen. + +Fehlt `ResizeObserver`, werden die Abmessungen beim Start und bei +Fenstergrößenänderungen gemessen. Sonstige Layoutänderungen benötigen dann einen +Polyfill. Feste Größen umgehen die Messung in den React-Hooks vollständig. +Flächen mit Breite oder Höhe null ergeben keinen gültigen sichtbaren Pfad. + +## Grenzen + +- `outline` und innere Schatten folgen weiterhin der normalen CSS-Rundung. +- Nur durchgezogene Konturen anhand der oberen Rahmenwerte werden gezeichnet. +- Elliptische Radien werden auf den einbeschriebenen Kreis reduziert. +- Leere HTML-Elemente wie `img` und `input` erhalten direkt einen Clip-Pfad. + Dieser beschneidet auch ihre eigene Kontur und ihren Schatten. +- `backdrop-filter` bleibt ohne `clipContent` rechteckig. +- Schattenlisten werden als einzelne Ebenen zusammengesetzt. Innere Schatten + werden nicht nachgezeichnet; in gemischten Listen verschwinden sie beim + Unterdrücken des ursprünglichen Schattens. +- Änderungen ausschließlich an Vorfahren oder Stylesheets benötigen ein + beobachtetes Ereignis am Element, etwa eine Größen- oder Klassenänderung. +- Hintergrundübergänge werden weitergereicht; Geometrie- und Konturänderungen + werden zum Zeitpunkt der Aktualisierung neu gezeichnet. +- Bruchteile physischer Pixel können weiterhin leicht unterschiedliche + Rasterisierung an gegenüberliegenden Kanten ergeben. + +## Prüfung und Bilder + +`npm run check` prüft Typen, Geometrie, CSS-Leser, serverseitiges React-Rendering +und den Paketinhalt. `npm run test:browser` prüft die DOM-Lebenszyklen, +Stiländerungen, Schreibrichtungen und den Playground in Chromium. +`npm run screenshots` fotografiert den Playground und rendert den Schatten in +einen transparenten PNG-Rand. Die Bildbreiten im README sind explizit begrenzt. diff --git a/docs/integration.md b/docs/integration.md new file mode 100644 index 0000000..cf5e1d9 --- /dev/null +++ b/docs/integration.md @@ -0,0 +1,150 @@ +# Integration + +## CSS als Ausgangspunkt + +Die DOM-, React- und Svelte-Anbindungen verwenden dieselbe Darstellung. +`border-radius` und die folgenden CSS-Variablen bestimmen die Form: + +```css +.karte { + background: white; + border: 1px solid #ddd; + border-radius: 24px; + --squircle-smoothing: 1; + --squircle-preserve-smoothing: 1; + box-shadow: 0 8px 24px rgb(0 0 0 / 12%); +} +``` + +Prozentuale Radien werden pro Achse aufgelöst. Bei elliptischen CSS-Ecken wird +der einbeschriebene Kreis verwendet. Die obere Kontur bestimmt Breite und Farbe +aller Seiten. Äußere Schatten unterstützen auch `oklch()` und `color()`. +Innere Schatten lassen sich nicht mit äußeren Schatten kombinieren; bei einer +gemischten Liste unterdrückt die Ersatzdarstellung den ursprünglichen Schatten. + +Die optionalen Werte `radius`, `smoothing`, `preserveSmoothing` und `clipContent` +überschreiben das CSS. `clipContent` beschneidet auch Kinder und außenliegende +Fokusmarkierungen; auf Bedienelementen sollte es deshalb deaktiviert bleiben. + +Änderungen der eigenen `class`- und `style`-Attribute, der Größe, des Hover- und +Fokuszustands sowie Beginn und Ende eigener CSS-Übergänge lösen eine Aktualisierung +aus. Änderungen ausschließlich an Vorfahren, Stylesheets oder Medienabfragen +werden ohne eines dieser Ereignisse nicht automatisch erkannt. + +## React und Next.js + +```tsx +import { Squircle } from "squircles/react"; + +export function Karte() { + return ( + + +

Alle Eigenschaften des nativen Elements bleiben erhalten.

+
+ ); +} +``` + +`as` akzeptiert auch eigene Komponenten, die ihre Ref an ein HTML-Element +weiterreichen, etwa Next.js `Link`. Im App Router benötigt die aufrufende Datei +`"use client"`. Die Geometriefunktionen können auch auf dem Server laufen. +`Squircle` rendert dort zunächst nur das native Element; CSS liefert die Rundung. + +`useSquirclePath` und `useSquircleClipPath` messen eine eigene Ref. Mit der Option +`size: { width, height }` funktionieren sie ohne Größenbeobachtung und bereits +beim serverseitigen Rendern. Leere Flächen ergeben einen leeren Pfad bzw. `none`. + +### Bestehende Komponenten und halbtransparente Konturen + +`SquircleSurface` zeichnet Füllung und Kontur gemeinsam als SVG-Pfad: + +```tsx +import { SquircleSurface } from "squircles/react"; + + +``` + +Das Elternelement benötigt `position: relative`, transparente eigene Flächen +und Konturen sowie Text oberhalb des SVG, etwa über `position: relative` am `span`. +`width` und `height` ermöglichen auch hier eine feste Größe ohne Messung. + +## Svelte + +Die Action verwendet den [Lebenszyklus mit `update` und `destroy`](https://svelte.dev/docs/svelte-action). +Sie importiert keine Svelte-Laufzeit und eignet sich für Svelte 4 und 5. + +```svelte + + + + +``` + +Neue Optionen ersetzen die bisherigen. Das Entfernen des Elements räumt +Beobachter und Darstellung auf. Für Svelte ab 5.29 lässt sich die DOM-Funktion +auch direkt als [Attachment](https://svelte.dev/docs/svelte/@attach) verwenden: + +```svelte + + + +``` + +## Vue und andere Frameworks + +`applySquircle` benötigt ein gemountetes HTML-Element und liefert eine +Aufräumfunktion. Beispiel für Vue 3: + +```vue + + + +``` + +CSS-Änderungen am Element werden automatisch übernommen. Für neue +Geometrieoptionen die bisherige Anbindung aufräumen und erneut anwenden. +Die Aufräumfunktion darf mehrfach aufgerufen werden. Nachträgliche +Inline-Stiländerungen bleiben beim Neuzeichnen und Aufräumen erhalten. +Pro Element darf nur eine Anbindung gleichzeitig aktiv sein. + +## Migration von 0.1 + +Die Gestaltung von `Squircle` erfolgt seit 0.2 im CSS: + +| Frühere Eigenschaft | CSS oder Ersatz | +| --- | --- | +| `fill` | `background` | +| `stroke` | `border-color` | +| `strokeWidth` | `border-width` und `border-style: solid` | +| `radius` | `border-radius` oder weiterhin die Option | +| `smoothing` | `--squircle-smoothing` oder weiterhin die Option | +| `surfaceClassName`, `surfaceStyle` | `[data-squircle-fill]` und `[data-squircle-stroke]` | + +`SquircleSurface` unterstützt weiterhin die SVG-Gestaltungseigenschaften. diff --git a/docs/media/playground.png b/docs/media/playground.png index cb693f1ab6a1d3ff4d64b80a88239365116deacc..cc001c5c513a4d3e4439a4c25efe0d60af62005e 100644 GIT binary patch literal 109482 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

1r?7N$J!HUMt$}f+=9QVei;%GF2=2< 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 literal 93048 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%0DFPcQ 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 R_t1VLB_=OgF0AkWzW{40({}&> diff --git a/docs/media/smoothing-extremes.png b/docs/media/smoothing-extremes.png index cf2f68b049d45355cb09fc69cdeafe011260c4c4..fcb9ff74580c5d5bf5d8d66ecf86254fee389763 100644 GIT binary patch literal 50767 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 Cgy&WO literal 7089 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 ADF6Tf diff --git a/examples/demo.css b/examples/demo.css new file mode 100644 index 0000000..fa089ec --- /dev/null +++ b/examples/demo.css @@ -0,0 +1,83 @@ +:root { + color-scheme: light; + --papier: #ffffff; + --hintergrund: #f7f7f7; + --text: #242424; + --sekundaer: #666666; + --linie: #dedede; + --vergleich: #888888; + font: 15px/1.55 "Segoe UI", Helvetica, sans-serif; + color: var(--text); + background: var(--hintergrund); + -webkit-font-smoothing: antialiased; +} +* { box-sizing: border-box; } +body { margin: 0; } +main { max-width: 1040px; margin: 48px auto; padding: 0 32px; } +header { display: flex; justify-content: space-between; gap: 24px; align-items: baseline; margin-bottom: 32px; } +h1 { margin: 0 0 8px; font-size: 30px; font-weight: 600; letter-spacing: -.045em; line-height: 1.2; } +h2 { margin: 0 0 16px; font-size: 16px; font-weight: 600; } +p { margin: 0; } +header p, .hinweis { color: var(--sekundaer); max-width: 64ch; } +a { color: inherit; text-underline-offset: 4px; } +nav { display: flex; gap: 16px; flex-shrink: 0; font-size: 13px; } +button, input { font: inherit; } +:focus-visible { outline: 2px solid var(--text); outline-offset: 4px; } +.werkzeug { display: grid; grid-template-columns: 208px minmax(0, 1fr); background: var(--papier); border: 1px solid var(--linie); border-radius: 12px; overflow: hidden; } +.regler { display: grid; gap: 24px; align-content: start; padding: 28px 24px; border-right: 1px solid var(--linie); } +.regler label { display: grid; gap: 10px; font-size: 13px; } +.regler label:not(.schalter) > span { display: flex; justify-content: space-between; gap: 10px; } +output { color: var(--sekundaer); font-variant-numeric: tabular-nums; } +input[type="range"] { width: 100%; margin: 0; accent-color: var(--text); } +.regler .schalter { display: flex; align-items: start; gap: 8px; line-height: 1.4; } +.schalter input { accent-color: var(--text); margin: 2px 0 0; } +.regler small { display: block; color: var(--sekundaer); font-size: 12px; margin-top: 4px; } +.vorschau { min-width: 0; } +.vergleich { display: grid; grid-template-columns: 1fr 1fr; border-bottom: 1px solid var(--linie); } +figure { margin: 0; min-width: 0; } +.form-flaeche { height: 218px; display: grid; place-items: center; padding: 24px; overflow: hidden; } +.form-flaeche svg { display: block; overflow: visible; } +figcaption { color: var(--sekundaer); font-size: 12px; text-align: center; padding: 0 12px 20px; } +figcaption b { display: block; color: var(--text); font-size: 14px; font-weight: 600; margin-bottom: 2px; } +.analyse { display: grid; grid-template-columns: 1fr 1fr; } +.analyse figure { padding-top: 24px; } +.analyse .form-flaeche { height: 176px; padding: 12px 24px 24px; } +.analyse svg { width: 100%; height: 100%; } +.analyse figcaption { padding-bottom: 0; } +.legende { display: flex; justify-content: center; flex-wrap: wrap; gap: 18px; padding: 12px 16px 24px; font-size: 12px; color: var(--sekundaer); } +.legende span::before { content: ""; display: inline-block; width: 20px; margin-right: 6px; vertical-align: middle; border-top: 2px solid var(--text); } +.legende span:last-child::before { border-top: 2px dashed var(--vergleich); } +.hinweis { font-size: 13px; margin: 16px 0 24px; } +details { border-top: 1px solid var(--linie); padding: 18px 0; } +summary { cursor: pointer; font-size: 13px; } +pre { margin: 16px 0 0; overflow: auto; font: 12px/1.7 Consolas, monospace; } +code { font-size: .9em; } +.beispiele { margin-top: 40px; } +.reihe { display: flex; flex-wrap: wrap; align-items: start; gap: 24px; } +.stapel { display: grid; gap: 20px; justify-items: start; } +.taste { display: inline-grid; place-items: center; min-height: 44px; padding: 10px 20px; background: var(--text); border: 1px solid var(--text); border-radius: 12px; --squircle-smoothing: 1; color: white; font-weight: 600; cursor: pointer; text-decoration: none; transition: background-color 150ms ease; } +.taste:hover { background: #444; } +.taste--hell { background: white; color: var(--text); border-color: var(--linie); } +.taste--hell:hover { background: #eee; } +.karte { width: 264px; max-width: 100%; border: 1px solid var(--linie); border-radius: 20px; --squircle-smoothing: 1; background: white; box-shadow: 0 8px 20px rgb(0 0 0 / .08); } +.kartenbild { display: block; width: 100%; height: 124px; border-radius: 20px; object-fit: cover; } +.kartentext { display: grid; gap: 4px; padding: 16px; font-size: 13px; } +.kartentext span { color: var(--sekundaer); } +.eingabe { width: 220px; max-width: 100%; padding: 10px 12px; border: 1px solid #aaa; border-radius: 10px; background: white; color: var(--text); } +.feld { display: grid; gap: 8px; color: var(--sekundaer); font-size: 13px; } +.markierung { padding: 6px 14px; border-radius: 999px; background: #e9e9e9; font-size: 12px; } +@media (max-width: 720px) { + main { margin: 28px auto; padding: 0 20px; } + header { display: block; margin-bottom: 24px; } + nav { margin-top: 16px; } + .werkzeug { grid-template-columns: 1fr; } + .regler { grid-template-columns: 1fr 1fr; gap: 20px; padding: 20px; border-right: 0; border-bottom: 1px solid var(--linie); } + .form-flaeche { height: 190px; padding: 16px; } +} +@media (max-width: 400px) { + .vergleich { grid-template-columns: 1fr; } + .form-flaeche { height: 160px; } +} +@media (prefers-reduced-motion: reduce) { + *, *::before, *::after { transition: none !important; } +} diff --git a/examples/formen.svg b/examples/formen.svg new file mode 100644 index 0000000..602a745 --- /dev/null +++ b/examples/formen.svg @@ -0,0 +1,5 @@ + + + + + diff --git a/examples/playground.html b/examples/playground.html index 042d262..aaee464 100644 --- a/examples/playground.html +++ b/examples/playground.html @@ -1,694 +1,147 @@ - + - squircles playground - + squircles · Spielwiese +

-

squircles playground

-

- The same button, drawn twice. On the left with Figma corner smoothing, - on the right with plain border-radius. Move the sliders to - see where the two shapes disagree. -

+
+

squircles

+

Weichere Ecken, direkt aus deinem CSS. Vergleiche die Glättung mit border-radius.

+
+
-
-
- - - - - - - - - - - +
+ + + + + + + -
-
-
-
- -
-

- squircles - createSquirclePath() -

-
- -
-
- -
-

- border-radius - circular corners -

-
+
+
+
+
+
SquircleGeglättete Übergänge
+
+
+
+
border-radiusKreisförmige Ecken
+
- -
-
-
- -
-

- - squircle outline - - - border-radius outline - -

-
- -
-
- -
-

- Top left corner, magnified - The tinted band is the area corner smoothing adds. - -

-
-
- -
-
-
-
- -
- Card with a shadow - Background, border, and shadow all come from CSS. -
-
-
-

- Card - applySquircle() -

-
- -
-
- - Badge -
-

- Input and badge - any element -

-
-
- -
-

+          
+
Konturen im VergleichGleiche Maße, gleiche Radien
+
Die Ecke im DetailOben links, vergrößert
+
Squircleborder-radius
-
+

+
Geometrie als Code
+ +
+

Mit gewöhnlichem CSS

+
+
+ Zwei geglättete Formen in Grautönen +
Eine Karte, weichere Ecken.Hintergrund, Kontur und Schatten bleiben im CSS.
+
+
+ + + Ohne Abhängigkeiten +
+
+
+ diff --git a/examples/react/index.html b/examples/react/index.html index 623915a..7c606af 100644 --- a/examples/react/index.html +++ b/examples/react/index.html @@ -1,160 +1,10 @@ - + - squircles with React - + squircles · React-Beispiele +
diff --git a/examples/react/main.tsx b/examples/react/main.tsx index be54f73..a3b40e9 100644 --- a/examples/react/main.tsx +++ b/examples/react/main.tsx @@ -1,69 +1,55 @@ -import { StrictMode } from "react"; +import { StrictMode, useState } from "react"; import { createRoot } from "react-dom/client"; import { Squircle } from "../../src/react/index.js"; -function Demo() { +function Beispiele() { + const [alsLink, setzeAlsLink] = useState(false); return (
-

squircles with React

-

- Every shape below is styled in plain CSS. The components receive no - paint props at all — only as and a class name. -

+
+

squircles mit React

+

Native Elemente mit geglätteten Ecken. Die Gestaltung bleibt im CSS.

+
+
-
-

Buttons

-
- - Learn more - - - - Contact - +
+

Schaltflächen und Links

+
+ Mehr erfahren + Zu den Beispielen
-

- Hover them: the fill transitions, and the geometry is not recalculated - for a colour change. -

+

Hover, Fokusmarkierung und Hintergrund werden wie gewohnt per CSS gestaltet.

-
-

Card, image, input, badge

-
- - -
- Card with a shadow - Background, border, and shadow all come from CSS. -
+
+

Karte, Bild und Eingabe

+
+ + +
Eine Karte, weichere Ecken.Hintergrund, Kontur und Schatten bleiben im CSS.
- -
- - - Badge - +
+ + Ohne zusätzliche Hülle
+ +
+

Das Element wechseln

+
+ + {alsLink + ? Jetzt ein Link + : Jetzt eine Schaltfläche} +
+

Die Form folgt dem neuen Element; alte Beobachter werden entfernt.

+
); } const container = document.getElementById("root"); - -if (container) { - createRoot(container).render( - - - , - ); -} +if (container) createRoot(container).render(); diff --git a/examples/svelte/Beispiele.svelte b/examples/svelte/Beispiele.svelte new file mode 100644 index 0000000..195bc98 --- /dev/null +++ b/examples/svelte/Beispiele.svelte @@ -0,0 +1,42 @@ + + +
+
+
+

squircles mit Svelte

+

CSS-basierte Formen als Action oder Attachment. Ohne zusätzliche Hülle.

+
+ +
+ +
+

Eine Action mit reaktiven Optionen

+ +
+ {#if sichtbar} + + {/if} + +
+

Neue Optionen aktualisieren die Form. Beim Entfernen werden alle Beobachter aufgeräumt.

+
+ +
+

Als Attachment ab Svelte 5.29

+ +

Die DOM-Funktion liefert bereits die passende Aufräumfunktion zurück.

+
+
diff --git a/examples/svelte/index.html b/examples/svelte/index.html new file mode 100644 index 0000000..ff289c8 --- /dev/null +++ b/examples/svelte/index.html @@ -0,0 +1,13 @@ + + + + + + squircles · Svelte-Beispiele + + + +
+ + + diff --git a/examples/svelte/main.js b/examples/svelte/main.js new file mode 100644 index 0000000..ca3b376 --- /dev/null +++ b/examples/svelte/main.js @@ -0,0 +1,4 @@ +import { mount } from "svelte"; +import Beispiele from "./Beispiele.svelte"; + +mount(Beispiele, { target: document.getElementById("root") }); diff --git a/package-lock.json b/package-lock.json index f67d286..8b399ad 100644 --- a/package-lock.json +++ b/package-lock.json @@ -9,12 +9,14 @@ "version": "0.2.1", "license": "MIT", "devDependencies": { + "@playwright/test": "^1.65.0", "@types/node": "^24.0.0", "@types/react": "^19.0.0", "@types/react-dom": "^19.0.0", "esbuild": "^0.25.12", "react": "^19.0.0", "react-dom": "^19.0.0", + "svelte": "^5.57.3", "typescript": "^6.0.0" }, "engines": { @@ -471,6 +473,89 @@ "node": ">=18" } }, + "node_modules/@jridgewell/gen-mapping": { + "version": "0.3.13", + "resolved": "https://registry.npmjs.org/@jridgewell/gen-mapping/-/gen-mapping-0.3.13.tgz", + "integrity": "sha512-2kkt/7niJ6MgEPxF0bYdQ6etZaA+fQvDcLKckhy1yIQOzaoKjBBjSj63/aLVjYE3qhRt5dvM+uUyfCg6UKCBbA==", + "dev": true, + "license": "MIT", + "dependencies": { + "@jridgewell/sourcemap-codec": "^1.5.0", + "@jridgewell/trace-mapping": "^0.3.24" + } + }, + "node_modules/@jridgewell/remapping": { + "version": "2.3.5", + "resolved": "https://registry.npmjs.org/@jridgewell/remapping/-/remapping-2.3.5.tgz", + "integrity": "sha512-LI9u/+laYG4Ds1TDKSJW2YPrIlcVYOwi2fUC6xB43lueCjgxV4lffOCZCtYFiH6TNOX+tQKXx97T4IKHbhyHEQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "@jridgewell/gen-mapping": "^0.3.5", + "@jridgewell/trace-mapping": "^0.3.24" + } + }, + "node_modules/@jridgewell/resolve-uri": { + "version": "3.1.2", + "resolved": "https://registry.npmjs.org/@jridgewell/resolve-uri/-/resolve-uri-3.1.2.tgz", + "integrity": "sha512-bRISgCIjP20/tbWSPWMEi54QVPRZExkuD9lJL+UIxUKtwVJA8wW1Trb1jMs1RFXo1CBTNZ/5hpC9QvmKWdopKw==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=6.0.0" + } + }, + "node_modules/@jridgewell/sourcemap-codec": { + "version": "1.6.0", + "resolved": "https://registry.npmjs.org/@jridgewell/sourcemap-codec/-/sourcemap-codec-1.6.0.tgz", + "integrity": "sha512-T7jf+5zgsZHwNJ4lvQ7/aezbyk0nNX+zJVWpmHA7VYsEx7a7qr5Rg5IbtJFqkgze5Y2sruq1RUY8Q837Od7iFw==", + "dev": true, + "license": "MIT" + }, + "node_modules/@jridgewell/trace-mapping": { + "version": "0.3.31", + "resolved": "https://registry.npmjs.org/@jridgewell/trace-mapping/-/trace-mapping-0.3.31.tgz", + "integrity": "sha512-zzNR+SdQSDJzc8joaeP8QQoCQr8NuYx2dIIytl1QeBEZHJ9uW6hebsrYgbz8hJwUQao3TWCMtmfV8Nu1twOLAw==", + "dev": true, + "license": "MIT", + "dependencies": { + "@jridgewell/resolve-uri": "^3.1.0", + "@jridgewell/sourcemap-codec": "^1.4.14" + } + }, + "node_modules/@playwright/test": { + "version": "1.65.0", + "resolved": "https://registry.npmjs.org/@playwright/test/-/test-1.65.0.tgz", + "integrity": "sha512-iGURLGuKDLakSEl7Pgfv8h7f+XLT+V861Wfhz0zlEl5nyFuKUopdkFBPKqTllTUp06aOwPuH8iuUEb3yp3MpbQ==", + "dev": true, + "license": "Apache-2.0", + "dependencies": { + "playwright": "1.65.0" + }, + "bin": { + "playwright": "cli.js" + }, + "engines": { + "node": ">=20" + } + }, + "node_modules/@sveltejs/acorn-typescript": { + "version": "1.0.13", + "resolved": "https://registry.npmjs.org/@sveltejs/acorn-typescript/-/acorn-typescript-1.0.13.tgz", + "integrity": "sha512-wgKggnhZVL9Bfx1OaKKTrYY9BFRk6C8UAkQNUcIv1+llzYrIqy+RZm5HPKzn0NpEBvTVhTqB4kQyllZywsRBRQ==", + "dev": true, + "license": "MIT", + "peerDependencies": { + "acorn": "^8.9.0" + } + }, + "node_modules/@types/estree": { + "version": "1.0.10", + "resolved": "https://registry.npmjs.org/@types/estree/-/estree-1.0.10.tgz", + "integrity": "sha512-lTyOMnOcmRBzdCv6/4zUZCrEhV0xrqQiUZBZtVcbmLHBXKLnN8q89v/wKRF/Q0HbwVsqbIG3o5HDoFl9sduM+g==", + "dev": true, + "license": "MIT" + }, "node_modules/@types/node": { "version": "24.13.3", "resolved": "https://registry.npmjs.org/@types/node/-/node-24.13.3.tgz", @@ -501,6 +586,49 @@ "@types/react": "^19.2.0" } }, + "node_modules/acorn": { + "version": "8.19.0", + "resolved": "https://registry.npmjs.org/acorn/-/acorn-8.19.0.tgz", + "integrity": "sha512-oJlA3XiRm7Cyk6qFD2Jn8ak9B7jSy0qy00ADO3+8dpT0LSjFihQYv4C02LFCSYJV3Q37xYwwRy5m+IpIiUzqWw==", + "dev": true, + "license": "MIT", + "bin": { + "acorn": "bin/acorn" + }, + "engines": { + "node": ">=0.4.0" + } + }, + "node_modules/aria-query": { + "version": "5.3.1", + "resolved": "https://registry.npmjs.org/aria-query/-/aria-query-5.3.1.tgz", + "integrity": "sha512-Z/ZeOgVl7bcSYZ/u/rh0fOpvEpq//LZmdbkXyc7syVzjPAhfOa9ebsdTSjEBDU4vs5nC98Kfduj1uFo0qyET3g==", + "dev": true, + "license": "Apache-2.0", + "engines": { + "node": ">= 0.4" + } + }, + "node_modules/axobject-query": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/axobject-query/-/axobject-query-4.1.0.tgz", + "integrity": "sha512-qIj0G9wZbMGNLjLmg1PT6v2mE9AH2zlnADJD/2tC6E00hgmhUOfEB6greHPAfLRSufHqROIUTkw6E+M3lH0PTQ==", + "dev": true, + "license": "Apache-2.0", + "engines": { + "node": ">= 0.4" + } + }, + "node_modules/clsx": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/clsx/-/clsx-2.1.1.tgz", + "integrity": "sha512-eYm0QWBtUrBWZWG0d386OGAw16Z995PiOVo2B7bjWSbHedGl5e0ZWaq65kOGgUSNesEIDkB9ISbTg/JK9dhCZA==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=6" + } + }, "node_modules/csstype": { "version": "3.2.3", "resolved": "https://registry.npmjs.org/csstype/-/csstype-3.2.3.tgz", @@ -508,6 +636,13 @@ "dev": true, "license": "MIT" }, + "node_modules/devalue": { + "version": "5.9.4", + "resolved": "https://registry.npmjs.org/devalue/-/devalue-5.9.4.tgz", + "integrity": "sha512-sPAT4pztbu6586/hrhOnMKS17IJrvg12mXiSPSS3W5qDeN2RGgvZ0diZCm31dBbnevfVmujNO3IM2wrS4Y2Rhg==", + "dev": true, + "license": "MIT" + }, "node_modules/esbuild": { "version": "0.25.12", "resolved": "https://registry.npmjs.org/esbuild/-/esbuild-0.25.12.tgz", @@ -550,6 +685,87 @@ "@esbuild/win32-x64": "0.25.12" } }, + "node_modules/esm-env": { + "version": "1.2.2", + "resolved": "https://registry.npmjs.org/esm-env/-/esm-env-1.2.2.tgz", + "integrity": "sha512-Epxrv+Nr/CaL4ZcFGPJIYLWFom+YeV1DqMLHJoEd9SYRxNbaFruBwfEX/kkHUJf55j2+TUbmDcmuilbP1TmXHA==", + "dev": true, + "license": "MIT" + }, + "node_modules/esrap": { + "version": "2.4.0", + "resolved": "https://registry.npmjs.org/esrap/-/esrap-2.4.0.tgz", + "integrity": "sha512-CQPcneEHw/czj32uwQC52nYnax8H4SXt25FCM+LIwGZ49cMIxpOj3bP8wmzcI+Z0HIy5KkClaPhRLfCySzwHPA==", + "dev": true, + "license": "MIT", + "dependencies": { + "@jridgewell/sourcemap-codec": "^1.4.15" + }, + "peerDependencies": { + "@typescript-eslint/types": "^8.2.0" + }, + "peerDependenciesMeta": { + "@typescript-eslint/types": { + "optional": true + } + } + }, + "node_modules/is-reference": { + "version": "3.0.3", + "resolved": "https://registry.npmjs.org/is-reference/-/is-reference-3.0.3.tgz", + "integrity": "sha512-ixkJoqQvAP88E6wLydLGGqCJsrFUnqoH6HnaczB8XmDH1oaWU+xxdptvikTgaEhtZ53Ky6YXiBuUI2WXLMCwjw==", + "dev": true, + "license": "MIT", + "dependencies": { + "@types/estree": "^1.0.6" + } + }, + "node_modules/locate-character": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/locate-character/-/locate-character-3.0.0.tgz", + "integrity": "sha512-SW13ws7BjaeJ6p7Q6CO2nchbYEc3X3J6WrmTTDto7yMPqVSZTUyY5Tjbid+Ab8gLnATtygYtiDIJGQRRn2ZOiA==", + "dev": true, + "license": "MIT" + }, + "node_modules/magic-string": { + "version": "0.30.21", + "resolved": "https://registry.npmjs.org/magic-string/-/magic-string-0.30.21.tgz", + "integrity": "sha512-vd2F4YUyEXKGcLHoq+TEyCjxueSeHnFxyyjNp80yg0XV4vUhnDer/lvvlqM/arB5bXQN5K2/3oinyCRyx8T2CQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "@jridgewell/sourcemap-codec": "^1.5.5" + } + }, + "node_modules/playwright": { + "version": "1.65.0", + "resolved": "https://registry.npmjs.org/playwright/-/playwright-1.65.0.tgz", + "integrity": "sha512-F3AMWcR44qMBt4kq+6Kb6mX7bjGXshktKFOPULd7reED6ZJWevjbNRqysP7q+AATE9kdPEZBibex1BYsvpVoeA==", + "dev": true, + "license": "Apache-2.0", + "dependencies": { + "playwright-core": "1.65.0" + }, + "bin": { + "playwright": "cli.js" + }, + "engines": { + "node": ">=20" + } + }, + "node_modules/playwright-core": { + "version": "1.65.0", + "resolved": "https://registry.npmjs.org/playwright-core/-/playwright-core-1.65.0.tgz", + "integrity": "sha512-vNSKgH6YqtN7cdT/L334zo0a+YwkrpicyrHJlWWPIm/Q+Nn2SWInil01oT0mbu96U4GgoRtCYQD9CzJQgju+lA==", + "dev": true, + "license": "Apache-2.0", + "bin": { + "playwright-core": "cli.js" + }, + "engines": { + "node": ">=20" + } + }, "node_modules/react": { "version": "19.2.8", "resolved": "https://registry.npmjs.org/react/-/react-19.2.8.tgz", @@ -580,6 +796,33 @@ "dev": true, "license": "MIT" }, + "node_modules/svelte": { + "version": "5.57.3", + "resolved": "https://registry.npmjs.org/svelte/-/svelte-5.57.3.tgz", + "integrity": "sha512-5mAftM3SoDV9X0zdF386F9p2pv8iKOwi/KfBS1XnBAkVCKFzVOLHUoa8iGWAt4buoicLmyWVRpuuD5wplXOQsg==", + "dev": true, + "license": "MIT", + "dependencies": { + "@jridgewell/remapping": "^2.3.5", + "@jridgewell/sourcemap-codec": "^1.6.0", + "@sveltejs/acorn-typescript": "^1.0.13", + "@types/estree": "^1.0.9", + "acorn": "^8.18.0", + "aria-query": "5.3.1", + "axobject-query": "^4.1.0", + "clsx": "^2.1.1", + "devalue": "^5.9.2", + "esm-env": "^1.2.1", + "esrap": "^2.3.6", + "is-reference": "^3.0.3", + "locate-character": "^3.0.0", + "magic-string": "^0.30.11", + "zimmerframe": "^1.1.2" + }, + "engines": { + "node": ">=18" + } + }, "node_modules/typescript": { "version": "6.0.3", "resolved": "https://registry.npmjs.org/typescript/-/typescript-6.0.3.tgz", @@ -600,6 +843,13 @@ "integrity": "sha512-AsuCzffGHJybSaRrmr5eHr81mwJU3kjw6M+uprWvCXiNeN9SOGwQ3Jn8jb8m3Z6izVgknn1R0FTCEAP2QrLY/w==", "dev": true, "license": "MIT" + }, + "node_modules/zimmerframe": { + "version": "1.1.5", + "resolved": "https://registry.npmjs.org/zimmerframe/-/zimmerframe-1.1.5.tgz", + "integrity": "sha512-msJxIvYDYcoNL+PJsu+7qmpDWsYmAxTY+2TNYXXF0hzBzBk0BMecOqDOG/EckUoKCuKwObfbugIl8QpqHDXeFA==", + "dev": true, + "license": "MIT" } } } diff --git a/package.json b/package.json index 047c198..baade08 100644 --- a/package.json +++ b/package.json @@ -1,7 +1,7 @@ { "name": "squircles", "version": "0.2.1", - "description": "Small, dependency-free Figma-style squircle geometry with optional React components.", + "description": "Eckenglättung nach Figma ohne Laufzeitabhängigkeiten, mit DOM-, React- und Svelte-Anbindung.", "type": "module", "sideEffects": false, "files": [ @@ -30,6 +30,10 @@ "./react": { "types": "./dist/react/index.d.ts", "import": "./dist/react/index.js" + }, + "./svelte": { + "types": "./dist/svelte/index.d.ts", + "import": "./dist/svelte/index.js" } }, "scripts": { @@ -41,14 +45,19 @@ "prepublishOnly": "npm run typecheck && npm test", "visual:fixture": "npm run build && node scripts/create-visual-fixture.mjs", "build:examples": "node scripts/build-examples.mjs", - "playground": "npm run build && npm run build:examples && node scripts/serve-playground.mjs" + "playground": "npm run build && npm run build:examples && node scripts/serve-playground.mjs", + "test:browser": "npm run build && npm run build:examples && playwright test", + "screenshots": "npm run build && npm run build:examples && node scripts/screenshots.mjs" }, "keywords": [ "figma", "react", "squircle", "corner-smoothing", - "typescript" + "typescript", + "svelte", + "vue", + "css" ], "license": "MIT", "engines": { @@ -63,12 +72,14 @@ } }, "devDependencies": { + "@playwright/test": "^1.65.0", "@types/node": "^24.0.0", "@types/react": "^19.0.0", "@types/react-dom": "^19.0.0", "esbuild": "^0.25.12", "react": "^19.0.0", "react-dom": "^19.0.0", + "svelte": "^5.57.3", "typescript": "^6.0.0" }, "publishConfig": { diff --git a/playwright.config.ts b/playwright.config.ts new file mode 100644 index 0000000..a6d671e --- /dev/null +++ b/playwright.config.ts @@ -0,0 +1,13 @@ +import { defineConfig } from "@playwright/test"; +import process from "node:process"; + +export default defineConfig({ + testDir: "./browser-tests", + fullyParallel: true, + use: { baseURL: "http://127.0.0.1:5173", browserName: "chromium" }, + webServer: { + command: "node scripts/serve-playground.mjs", + url: "http://127.0.0.1:5173", + reuseExistingServer: !process.env.CI, + }, +}); diff --git a/scripts/build-examples.mjs b/scripts/build-examples.mjs index 8309bba..7e66429 100644 --- a/scripts/build-examples.mjs +++ b/scripts/build-examples.mjs @@ -1,4 +1,7 @@ import { build } from "esbuild"; +import { readFile } from "node:fs/promises"; +import { dirname } from "node:path"; +import { compile } from "svelte/compiler"; await build({ entryPoints: ["examples/react/main.tsx"], @@ -9,3 +12,22 @@ await build({ jsx: "automatic", logLevel: "info", }); + +await build({ + entryPoints: ["examples/svelte/main.js"], + outfile: "examples/svelte/bundle.js", + bundle: true, + format: "esm", + target: "es2022", + logLevel: "info", + plugins: [{ + name: "svelte-beispiele", + setup(build) { + build.onLoad({ filter: /\.svelte$/ }, async ({ path }) => { + const source = await readFile(path, "utf8"); + const { js } = compile(source, { filename: path, generate: "client" }); + return { contents: js.code, resolveDir: dirname(path), loader: "js" }; + }); + }, + }], +}); diff --git a/scripts/create-visual-fixture.mjs b/scripts/create-visual-fixture.mjs index 28c546f..a116368 100644 --- a/scripts/create-visual-fixture.mjs +++ b/scripts/create-visual-fixture.mjs @@ -8,7 +8,7 @@ const cases = [ { width: 48, height: 48, radius: 12, smoothing: 1, strokeWidth: 1 }, { width: 180, height: 64, radius: 20, smoothing: 1, strokeWidth: 1.5 }, { width: 240, height: 96, radius: 32, smoothing: 0.8, strokeWidth: 2 }, - // Card, borderless surface, and pill, matching the new example pages. + // Karte, Fläche ohne Kontur und Pillenform wie auf den Beispielseiten. { width: 260, height: 180, radius: 20, smoothing: 1, strokeWidth: 1 }, { width: 260, height: 120, radius: 12, smoothing: 1, strokeWidth: 0 }, { width: 120, height: 32, radius: 999, smoothing: 1, strokeWidth: 1 }, @@ -36,8 +36,8 @@ const rows = cases > - + - Squircle visual fixture + Squircle-Geometriebeispiele
-

Squircle rasterization fixture

-

One path, one fill, one centered SVG stroke inset by half its width.

+

Squircle-Rasterisierung

+

Ein Pfad, eine Füllung und eine SVG-Kontur, um ihre halbe Breite nach innen versetzt.

${rows}
diff --git a/scripts/screenshots.mjs b/scripts/screenshots.mjs new file mode 100644 index 0000000..d0428fa --- /dev/null +++ b/scripts/screenshots.mjs @@ -0,0 +1,54 @@ +import { spawn } from "node:child_process"; +import { once } from "node:events"; +import { fileURLToPath } from "node:url"; +import { chromium } from "@playwright/test"; + +const root = new URL("../", import.meta.url); +const port = 5174; +const server = spawn(process.execPath, ["scripts/serve-playground.mjs"], { + cwd: fileURLToPath(root), + env: { ...process.env, PORT: String(port) }, + stdio: ["ignore", "pipe", "pipe"], + windowsHide: true, +}); +let browser; +try { + // Erst nach der Startmeldung fotografieren; ein Portkonflikt bricht den Lauf ab. + await Promise.race([ + once(server.stdout, "data"), + once(server, "exit").then(() => { throw new Error("Der Vorschau-Server konnte nicht starten."); }), + once(server, "error").then(([error]) => { throw error; }), + ]); + browser = await chromium.launch(); + const page = await browser.newPage({ viewport: { width: 1040, height: 900 }, deviceScaleFactor: 2 }); + await page.goto(`http://127.0.0.1:${port}/`); + await page.locator("#squircle path").waitFor(); + await page.evaluate(() => document.fonts.ready); + + const bilder = [ + ["#werkzeug", "playground.png", 976], + ["#analyse", "smoothing-extremes.png", 600], + ]; + for (const [selector, filename, width] of bilder) { + if (selector === "#analyse") { + await page.locator("#breite").fill("160"); + await page.locator("#hoehe").fill("160"); + await page.locator("#radius").fill("40"); + await page.evaluate(() => new Promise((resolve) => requestAnimationFrame(() => requestAnimationFrame(resolve)))); + } + const screenshot = await page.locator(selector).screenshot(); + const rahmen = await browser.newPage({ viewport: { width: width + 80, height: 1200 }, deviceScaleFactor: 2 }); + await rahmen.setContent(`
`); + await rahmen.locator("img").evaluate((img) => img.decode()); + await rahmen.locator("figure").screenshot({ path: fileURLToPath(new URL(`docs/media/${filename}`, root)), omitBackground: true }); + await rahmen.close(); + console.log(`README-Bild erstellt: ${filename}`); + } +} finally { + await browser?.close(); + server.kill(); +} diff --git a/scripts/serve-playground.mjs b/scripts/serve-playground.mjs index 2ad6b69..d71d9b5 100644 --- a/scripts/serve-playground.mjs +++ b/scripts/serve-playground.mjs @@ -12,20 +12,26 @@ const types = { ".map": "application/json; charset=utf-8", ".css": "text/css; charset=utf-8", ".png": "image/png", + ".svg": "image/svg+xml", }; const pages = { "/": "examples/playground.html", "/react": "examples/react/index.html", "/react/": "examples/react/index.html", + "/svelte": "examples/svelte/index.html", + "/svelte/": "examples/svelte/index.html", }; -/** Resolves a request path inside the package, or null if it escapes it. */ +/** + * Löst einen Anfragepfad innerhalb des Pakets auf; außerhalb liegende Pfade werden + * verworfen. + */ function resolve(requestPath) { - // The React page is served under /react/, so its assets resolve there too. + // Die Framework-Seiten und ihre Dateien teilen sich jeweils einen Unterpfad. const relative = pages[requestPath] ?? - (requestPath.startsWith("/react/") + (/^\/(react|svelte)\//.test(requestPath) ? `examples${requestPath}` : requestPath.slice(1)); const target = new URL(relative, root); @@ -37,7 +43,7 @@ const server = createServer(async (request, response) => { const target = resolve(new URL(request.url, "http://localhost").pathname); if (!target) { - response.writeHead(403).end("Forbidden"); + response.writeHead(403).end("Zugriff verweigert"); return; } @@ -47,10 +53,10 @@ const server = createServer(async (request, response) => { const stats = await stat(path); if (!stats.isFile()) { - throw new Error("not a file"); + throw new Error("Keine Datei"); } } catch { - response.writeHead(404).end("Not found"); + response.writeHead(404).end("Nicht gefunden"); return; } @@ -62,6 +68,7 @@ const server = createServer(async (request, response) => { }); server.listen(port, () => { - console.log(`squircles playground: http://localhost:${port}/`); - console.log(`squircles with React: http://localhost:${port}/react/`); + console.log(`squircles Spielwiese: http://localhost:${port}/`); + console.log(`squircles mit React: http://localhost:${port}/react/`); + console.log(`squircles mit Svelte: http://localhost:${port}/svelte/`); }); diff --git a/src/clip-path.ts b/src/clip-path.ts index 6ec939c..1fceab2 100644 --- a/src/clip-path.ts +++ b/src/clip-path.ts @@ -1,8 +1,8 @@ import { createSquirclePath, type SquirclePathOptions } from "./geometry.js"; /** - * Builds a ready CSS `clip-path` value. Returns `none` for a degenerate box, - * so the result is always assignable to the property. + * Erzeugt einen direkt verwendbaren CSS-Clip-Pfad. Leere Flächen ergeben den gültigen + * Wert `none`. */ export function createSquircleClipPath(options: SquirclePathOptions): string { const path = createSquirclePath(options); diff --git a/src/css/paint.ts b/src/css/paint.ts index 3866189..72efbdc 100644 --- a/src/css/paint.ts +++ b/src/css/paint.ts @@ -6,8 +6,8 @@ function read(styles: StyleReader, property: string, fallback: string): string { } /** - * Only the top border is read. Per-side borders and dashed or dotted styles - * cannot be expressed as a single SVG stroke and are out of scope. + * Liest ausschließlich die obere Kontur. Unterschiedliche Seiten sowie gestrichelte und + * gepunktete Ränder lassen sich nicht als einzelne SVG-Kontur darstellen. */ export function readBorderFromComputed(styles: StyleReader): SquircleBorder { const style = read(styles, "border-top-style", "none"); diff --git a/src/css/radius.ts b/src/css/radius.ts index af33ca3..0f71c33 100644 --- a/src/css/radius.ts +++ b/src/css/radius.ts @@ -20,8 +20,8 @@ function toPixels(value: string, basis: number): number { } /** - * A squircle corner is circular, so an elliptical CSS corner is reduced to the - * circle that fits inside it. Percentages resolve per axis first. + * Reduziert elliptische CSS-Ecken auf den einbeschriebenen Kreis. Prozentwerte werden + * vorher pro Achse aufgelöst. */ function resolveCorner(value: string, size: ElementSize): number { const parts = value.trim().split(/\s+/).filter(Boolean); diff --git a/src/css/shadow.ts b/src/css/shadow.ts index 5d048c8..fa910d1 100644 --- a/src/css/shadow.ts +++ b/src/css/shadow.ts @@ -1,10 +1,9 @@ import type { SquircleShadow } from "./types.js"; -const COLOR = /(rgba?\([^)]*\)|#[0-9a-f]{3,8}|\b[a-z]+\b(?!\s*\())/i; -const LENGTH = /-?\d*\.?\d+px/g; +const LENGTH = /^-?(?:\d*\.)?\d+(?:e[+-]?\d+)?px$/i; -/** Splits on commas that are not inside a colour function. */ -function splitShadows(value: string): string[] { +/** Trennt nur außerhalb von Funktionen, auch bei beliebig tiefer Verschachtelung. */ +function splitOutsideFunctions(value: string, separator: RegExp): string[] { const parts: string[] = []; let depth = 0; let current = ""; @@ -14,7 +13,7 @@ function splitShadows(value: string): string[] { depth += 1; } else if (character === ")") { depth -= 1; - } else if (character === "," && depth === 0) { + } else if (separator.test(character) && depth === 0) { parts.push(current); current = ""; continue; @@ -25,13 +24,10 @@ function splitShadows(value: string): string[] { parts.push(current); - return parts.filter((part) => part.trim() !== ""); + return parts.map((part) => part.trim()).filter(Boolean); } -/** - * Computed `box-shadow` always serialises the colour first, which is why the - * colour can be lifted out before the lengths are read. - */ +/** Behält auch moderne Farbfunktionen wie oklch() und color() unverändert bei. */ function parseShadow(part: string): SquircleShadow | null { const text = part.trim(); @@ -39,10 +35,11 @@ function parseShadow(part: string): SquircleShadow | null { return null; } - const color = COLOR.exec(text)?.[0] ?? "currentColor"; - const lengths = text.replace(color, " ").match(LENGTH); + const tokens = splitOutsideFunctions(text, /\s/); + const lengths = tokens.filter((token) => LENGTH.test(token)); + const color = tokens.filter((token) => !LENGTH.test(token)).join(" ") || "currentColor"; - if (!lengths || lengths.length < 2) { + if (lengths.length < 2 || lengths.length > 4) { return null; } @@ -64,7 +61,7 @@ export function parseBoxShadow(value: string): readonly SquircleShadow[] { return []; } - return splitShadows(text) + return splitOutsideFunctions(text, /,/) .map(parseShadow) .filter((shadow): shadow is SquircleShadow => shadow !== null); } diff --git a/src/css/types.ts b/src/css/types.ts index 2097f02..f93a7b0 100644 --- a/src/css/types.ts +++ b/src/css/types.ts @@ -1,6 +1,6 @@ /** - * The slice of CSSStyleDeclaration these readers need. Declaring it - * structurally keeps this directory free of DOM types and testable in Node. + * Minimaler struktureller Ausschnitt aus CSSStyleDeclaration, damit die Leser ohne DOM + * in Node testbar bleiben. */ export type StyleReader = Readonly<{ getPropertyValue(property: string): string; diff --git a/src/dom/apply-squircle.ts b/src/dom/apply-squircle.ts index e2695c2..1622265 100644 --- a/src/dom/apply-squircle.ts +++ b/src/dom/apply-squircle.ts @@ -1,23 +1,19 @@ import type { ElementSize } from "../size.js"; +import { observeElementSize } from "./observe-size.js"; import { clearLayers, syncLayers, type SquircleGeometryOptions, } from "./layers.js"; -/** Matches the quantisation the React hook already uses. */ -function roundLayoutSize(value: number): number { - return Math.round(value * 64) / 64; -} - const REREAD_EVENTS = ["pointerenter", "pointerleave", "focusin", "focusout"] as const; -/** Only the host's own transitions; these bubble up from every descendant. */ +/** Übergangsereignisse von Kindelementen ignorieren. */ const TRANSITION_EVENTS = ["transitionrun", "transitionend"] as const; /** - * Shapes an element from its own CSS and keeps it in sync. Returns a cleanup - * function that removes the layers and restores the inline style. + * Formt ein Element anhand seines CSS. Die Rückgabe entfernt die Ebenen + * und stellt die ursprünglichen Inline-Stile wieder her. */ export function applySquircle( element: HTMLElement, @@ -35,12 +31,11 @@ export function applySquircle( } syncLayers(element, size, options); - // syncLayers writes the host's own inline style. Drop those records so - // the observer below does not schedule another sync every frame. + // Eigene Stiländerungen verwerfen, damit keine Endlosschleife entsteht. mutationObserver.takeRecords(); }; - // Hover, focus, and class changes all land in the same frame. + // Hover, Fokus und Klassenänderungen innerhalb eines Frames bündeln. const schedule = (): void => { if (disposed || frame !== 0) { return; @@ -49,12 +44,7 @@ export function applySquircle( frame = requestAnimationFrame(sync); }; - const measure = (width: number, height: number): void => { - const next = { - width: roundLayoutSize(width), - height: roundLayoutSize(height), - }; - + const measure = (next: ElementSize): void => { if (size?.width === next.width && size.height === next.height) { return; } @@ -63,35 +53,14 @@ export function applySquircle( schedule(); }; - const resizeObserver = new ResizeObserver((entries) => { - const entry = entries.at(-1); - - if (!entry) { - return; - } - - const sizes = entry.borderBoxSize as - | ResizeObserverSize - | readonly ResizeObserverSize[]; - const box = Array.isArray(sizes) ? sizes[0] : (sizes as ResizeObserverSize); - - if (box) { - measure(box.inlineSize, box.blockSize); - return; - } - - const rect = element.getBoundingClientRect(); - measure(rect.width, rect.height); - }); - - resizeObserver.observe(element, { box: "border-box" }); - const mutationObserver = new MutationObserver(schedule); mutationObserver.observe(element, { attributes: true, attributeFilter: ["class", "style"], }); + const stopMeasuring = observeElementSize(element, measure); + const scheduleOwnTransition = (event: Event): void => { if (event.target === element) { schedule(); @@ -107,13 +76,14 @@ export function applySquircle( } return () => { + if (disposed) return; disposed = true; if (frame !== 0) { cancelAnimationFrame(frame); } - resizeObserver.disconnect(); + stopMeasuring(); mutationObserver.disconnect(); for (const type of REREAD_EVENTS) { diff --git a/src/dom/layers.ts b/src/dom/layers.ts index b334ade..e3c88c0 100644 --- a/src/dom/layers.ts +++ b/src/dom/layers.ts @@ -24,7 +24,7 @@ const SHADOW = "data-squircle-shadow"; const SELECTOR = `[${FILL}], [${STROKE}], [${SHADOW}]`; const SVG_NAMESPACE = "http://www.w3.org/2000/svg"; -/** Everything `syncLayers` needs from the element's own CSS. */ +/** Alle CSS-Eigenschaften, die syncLayers vom Element benötigt. */ const READ_PROPERTIES = [ "border-top-left-radius", "border-top-right-radius", @@ -45,31 +45,57 @@ const READ_PROPERTIES = [ "position", ] as const; -const originalInline = new WeakMap(); +type InlineState = { authored: string; applied: string }; +const originalInline = new WeakMap(); function rememberInline(host: HTMLElement): void { if (!originalInline.has(host)) { - originalInline.set(host, host.style.cssText); + originalInline.set(host, { + authored: host.style.cssText, + applied: host.style.cssText, + }); + } +} + +/** Übernimmt nachträgliche Inline-Änderungen, etwa aus reaktiven Frameworks. */ +function reconcileInline(host: HTMLElement): InlineState | undefined { + const state = originalInline.get(host); + if (!state || state.applied === host.style.cssText) return state; + + const authored = host.ownerDocument.createElement("span").style; + const applied = host.ownerDocument.createElement("span").style; + authored.cssText = state.authored; + applied.cssText = state.applied; + const current = host.style; + const properties = new Set([...Array.from(applied), ...Array.from(current)]); + for (const property of properties) { + const value = current.getPropertyValue(property); + const priority = current.getPropertyPriority(property); + if (value !== applied.getPropertyValue(property) || priority !== applied.getPropertyPriority(property)) { + if (value) authored.setProperty(property, value, priority); + else authored.removeProperty(property); + } } + state.authored = authored.cssText; + return state; +} + +function rememberApplied(host: HTMLElement): void { + const state = originalInline.get(host); + if (state) state.applied = host.style.cssText; } /** - * Reads the styles the author wrote rather than the ones this module applied, - * by restoring the author's inline style for the duration of the read. - * - * Transitions stay off for the whole round trip. Otherwise lifting an - * override on a transitioned property starts a transition (and another one - * back on restore); its `transitionrun` schedules the next sync, which lifts - * the overrides again, and the element never settles. + * Hebt eigene Überschreibungen zum Lesen kurz auf. Übergänge bleiben dabei deaktiviert, + * damit das Lesen keine neuen Übergänge und damit Endlosschleifen auslöst. */ function readAuthoredStyles(host: HTMLElement): StyleReader { const applied = host.style.cssText; - const authored = originalInline.get(host) ?? applied; + const authored = reconcileInline(host)?.authored ?? applied; const computed = getComputedStyle(host); const snapshot = new Map(); - // This module never writes `transition` on the host, so the applied state - // already reports the authored value. + // transition wird am Element nicht überschrieben und lässt sich direkt lesen. snapshot.set("transition", computed.getPropertyValue("transition")); host.style.cssText = authored; @@ -83,8 +109,8 @@ function readAuthoredStyles(host: HTMLElement): StyleReader { snapshot.set(property, computed.getPropertyValue(property)); } - // Settle on the overrides while transitions are still off, so restoring the - // author's transition afterwards leaves nothing to animate. + // Überschreibungen bei deaktivierten Übergängen anwenden und erst danach die + // ursprüngliche Übergangsregel wiederherstellen. host.style.cssText = applied; host.style.setProperty("transition", "none"); computed.getPropertyValue("transition"); @@ -96,10 +122,8 @@ function readAuthoredStyles(host: HTMLElement): StyleReader { } /** - * Absolute offsets resolve against the padding box, but the geometry is - * measured on the border box. Pulling every layer out by the border width - * lines the two up again; without it a bordered element loses the outermost - * band of its shape and the corners read as square. + * Absolute Positionen beziehen sich auf die Innenfläche, die Geometrie auf die + * Rahmenfläche. Der negative Versatz gleicht die Rahmenbreite aus. */ function createLayer( marker: string, @@ -120,10 +144,10 @@ export function clearLayers(host: HTMLElement): void { } } - const inline = originalInline.get(host); + const inline = reconcileInline(host); if (inline !== undefined) { - host.style.cssText = inline; + host.style.cssText = inline.authored; originalInline.delete(host); } } @@ -146,17 +170,18 @@ export function syncLayers( const shadows = parseBoxShadow(styles.getPropertyValue("box-shadow")); const geometry = { ...size, radius, smoothing, preserveSmoothing }; - // A void element has no room for layers; only the clip survives. + // Leere HTML-Elemente erhalten ausschließlich einen Clip-Pfad. if (isVoidElement(host.tagName)) { host.style.setProperty("clip-path", createSquircleClipPath(geometry)); + rememberApplied(host); return; } clearLayers(host); rememberInline(host); - // From the snapshot: a fresh read here would see the host without its - // overrides and start the very transitions readAuthoredStyles avoids. + // Den Schnappschuss verwenden: Erneutes Lesen ohne Überschreibungen könnte Übergänge + // auslösen. if (styles.getPropertyValue("position") === "static") { host.style.setProperty("position", "relative"); } @@ -164,17 +189,22 @@ export function syncLayers( host.style.setProperty("isolation", "isolate"); for (const shadow of shadows) { + const width = size.width + shadow.spread * 2; + const height = size.height + shadow.spread * 2; + // Stark negative Ausbreitung kann den Schatten vollständig aufbrauchen. + if (width <= 0 || height <= 0) continue; + const layer = createLayer(SHADOW, -3, border.width); layer.style.transform = `translate(${shadow.offsetX}px, ${shadow.offsetY}px)`; - // CSS blur() takes a standard deviation; box-shadow's blur is twice that. + // blur() erwartet die Standardabweichung, box-shadow deren doppelten Wert. layer.style.filter = `blur(${shadow.blur / 2}px)`; const shape = document.createElement("span"); shape.style.cssText = `position:absolute;inset:${-shadow.spread}px;`; shape.style.background = shadow.color; shape.style.clipPath = createSquircleClipPath({ - width: size.width + shadow.spread * 2, - height: size.height + shadow.spread * 2, + width, + height, radius, smoothing, preserveSmoothing, @@ -184,7 +214,7 @@ export function syncLayers( host.append(layer); } - // Only suppress the original once a replacement has actually been drawn. + // Den ursprünglichen Schatten erst nach erfolgreichem Zeichnen unterdrücken. if (shadows.length > 0) { host.style.setProperty("box-shadow", "none"); } @@ -209,8 +239,8 @@ export function syncLayers( stroke.setAttribute("focusable", "false"); stroke.setAttribute("preserveAspectRatio", "none"); stroke.setAttribute("viewBox", `0 0 ${size.width} ${size.height}`); - // Same border box correction as createLayer, expressed as a size because - // an SVG with four offsets and no size falls back to its intrinsic one. + // Die Korrektur der Rahmenfläche als explizite Größe; SVG verwendet sonst seine + // intrinsische Größe. const outset = `calc(100% + ${border.width * 2}px)`; stroke.style.cssText = `position:absolute;left:${-border.width}px;top:${-border.width}px;z-index:-1;width:${outset};height:${outset};overflow:visible;pointer-events:none;display:block;`; @@ -228,11 +258,12 @@ export function syncLayers( stroke.append(path); host.append(stroke); - // Keeping the border box intact avoids a layout shift. + // Die transparente Kontur erhält die Abmessungen und verhindert Layoutsprünge. host.style.setProperty("border-color", "transparent"); } if (options.clipContent === true) { host.style.setProperty("clip-path", createSquircleClipPath(geometry)); } + rememberApplied(host); } diff --git a/src/dom/observe-size.ts b/src/dom/observe-size.ts new file mode 100644 index 0000000..c48fb5c --- /dev/null +++ b/src/dom/observe-size.ts @@ -0,0 +1,48 @@ +import type { ElementSize } from "../size.js"; + +function round(value: number): number { + return Math.round(value * 64) / 64; +} + +/** Liest physische Maße, auch bei vertikaler oder seitlicher Schreibrichtung. */ +export function readBorderBox(entry: ResizeObserverEntry): ElementSize | null { + const sizes = entry.borderBoxSize as + | ResizeObserverSize + | readonly ResizeObserverSize[]; + const box = Array.isArray(sizes) ? sizes[0] : (sizes as ResizeObserverSize); + if (!box) return null; + + const mode = getComputedStyle(entry.target).writingMode; + const vertical = /^(vertical|sideways)/.test(mode); + return { + width: round(vertical ? box.blockSize : box.inlineSize), + height: round(vertical ? box.inlineSize : box.blockSize), + }; +} + +/** Gemeinsame Größenmessung für DOM und React; ohne Observer bei Fensteränderungen. */ +export function observeElementSize( + element: Element, + update: (size: ElementSize) => void, +): () => void { + const measure = (): void => { + const rect = element.getBoundingClientRect(); + update({ width: round(rect.width), height: round(rect.height) }); + }; + + if (typeof ResizeObserver === "undefined") { + measure(); + window.addEventListener("resize", measure); + return () => window.removeEventListener("resize", measure); + } + + const observer = new ResizeObserver((entries) => { + const entry = entries.at(-1); + if (!entry) return; + const box = readBorderBox(entry); + if (box) update(box); + else measure(); + }); + observer.observe(element, { box: "border-box" }); + return () => observer.disconnect(); +} diff --git a/src/dom/void-elements.ts b/src/dom/void-elements.ts index 826a4a5..132b804 100644 --- a/src/dom/void-elements.ts +++ b/src/dom/void-elements.ts @@ -15,8 +15,8 @@ const VOID_ELEMENTS = new Set([ ]); /** - * Void elements cannot hold layers, so they are shaped with `clip-path` - * directly and lose border and shadow support. + * Leere HTML-Elemente können keine Ebenen aufnehmen. Ihr Clip-Pfad beschneidet auch + * Kontur und Schatten. */ export function isVoidElement(tag: string): boolean { return VOID_ELEMENTS.has(tag.toLowerCase()); diff --git a/src/geometry.ts b/src/geometry.ts index 82f633a..9de006a 100644 --- a/src/geometry.ts +++ b/src/geometry.ts @@ -12,21 +12,18 @@ export type SquirclePathOptions = Readonly<{ height: number; radius?: SquircleRadius; /** - * Figma corner smoothing in the range 0..1. - * 0 is a regular rounded rectangle; 1 is fully smoothed. + * Eckenglättung nach Figma von 0 bis 1: 0 ergibt Kreisbögen, 1 vollständig geglättete + * Übergänge. */ smoothing?: number; - /** - * Keeps the requested smoothing when a corner has little room. - * Figma-compatible budget clamping is used by default. - */ + /** Erhält die Glättung bei wenig Platz. Standardmäßig wird sie wie in Figma begrenzt. */ preserveSmoothing?: boolean; /** - * Moves the path inward on all sides and reduces the radii by the same - * amount. Use half a stroke width to keep an SVG stroke inside the box. + * Versetzt den Pfad nach innen und verkleinert die Radien entsprechend. Eine halbe + * Konturbreite hält die SVG-Kontur innerhalb der Fläche. */ inset?: number; - /** Decimal places used in the generated SVG path. */ + /** Anzahl der Nachkommastellen im erzeugten SVG-Pfad. */ precision?: number; }>; @@ -51,7 +48,7 @@ const DEFAULT_RADII: SquircleCornerRadii = { function assertFinite(name: string, value: number): void { if (!Number.isFinite(value)) { - throw new TypeError(`${name} must be a finite number`); + throw new TypeError(`${name} muss eine endliche Zahl sein`); } } @@ -107,8 +104,8 @@ function insetRadii( } /** - * Allocates each corner a share of both adjacent sides. This is deterministic, - * symmetric, and guarantees that neighboring corner reaches never overlap. + * Verteilt den Platz beider Nachbarseiten deterministisch und symmetrisch. Benachbarte + * Ecken überlappen dadurch nie. */ function getCornerBudgets( width: number, @@ -278,11 +275,9 @@ function topLeft(curve: CornerCurve, number: (value: number) => string) { } /** - * Creates a compact SVG path for Figma-style smoothed corners. - * - * The implementation follows Figma's published cubic Bézier construction. - * It adds strict input handling, per-corner radii, deterministic corner - * budgeting, and an inset mode intended for artifact-free SVG strokes. + * Erzeugt einen kompakten SVG-Pfad mit Eckenglättung nach Figmas Bézier-Konstruktion. + * Eingaben werden geprüft, Radien pro Ecke unterstützt und Konturen bei Bedarf nach + * innen versetzt. */ export function createSquirclePath({ width, @@ -300,7 +295,7 @@ export function createSquirclePath({ assertFinite("precision", precision); if (width < 0 || height < 0) { - throw new RangeError("width and height must be zero or greater"); + throw new RangeError("width und height dürfen nicht negativ sein"); } if (width === 0 || height === 0) { diff --git a/src/react/squircle.tsx b/src/react/squircle.tsx index 07f617e..35719ae 100644 --- a/src/react/squircle.tsx +++ b/src/react/squircle.tsx @@ -23,14 +23,14 @@ type PolymorphicRef = type SquircleOwnProps = { as?: ElementType; children?: ReactNode; - /** Overrides the element's own `border-radius`. */ + /** Überschreibt den CSS-Wert `border-radius`. */ radius?: SquircleRadius; - /** Overrides the element's own `--squircle-smoothing`. */ + /** Überschreibt den CSS-Wert `--squircle-smoothing`. */ smoothing?: number; preserveSmoothing?: boolean; /** - * Additionally clips the element's children. Keep this false on controls - * whose focus outline must remain visible. + * Beschneidet zusätzlich die Kinder. Bei Bedienelementen mit außenliegender + * Fokusmarkierung deaktiviert lassen. */ clipContent?: boolean; }; @@ -79,11 +79,10 @@ function SquircleImplementation( useEffect(() => { const element = ref.current; return element ? applySquircle(element, options) : undefined; - }, [options]); + }, [Element, options]); - // The layers are appended imperatively, so a void host stays childless. - // createElement with two arguments omits `children` entirely, which JSX - // cannot express and which a void element requires. + // Die Ebenen entstehen außerhalb von React. Zwei Argumente für createElement + // verhindern das children-Attribut bei leeren HTML-Elementen. const hostProps = { ref, ...elementProps }; return typeof Element === "string" && isVoidElement(Element) diff --git a/src/react/use-element-size.ts b/src/react/use-element-size.ts index 8bb11c5..6fc3614 100644 --- a/src/react/use-element-size.ts +++ b/src/react/use-element-size.ts @@ -1,9 +1,5 @@ -import { - useEffect, - useLayoutEffect, - useState, - type RefObject, -} from "react"; +import { useEffect, useLayoutEffect, useState, type RefObject } from "react"; +import { observeElementSize } from "../dom/observe-size.js"; import type { ElementSize } from "../size.js"; export type { ElementSize }; @@ -11,31 +7,6 @@ export type { ElementSize }; const useBrowserLayoutEffect = typeof window === "undefined" ? useEffect : useLayoutEffect; -function roundLayoutSize(value: number): number { - return Math.round(value * 64) / 64; -} - -function readBorderBox(entry: ResizeObserverEntry): ElementSize | null { - const sizes = entry.borderBoxSize as - | ResizeObserverSize - | readonly ResizeObserverSize[]; - const size = Array.isArray(sizes) - ? sizes[0] - : (sizes as ResizeObserverSize); - - if (!size) { - return null; - } - - const writingMode = getComputedStyle(entry.target).writingMode; - const vertical = writingMode.startsWith("vertical"); - - return { - width: roundLayoutSize(vertical ? size.blockSize : size.inlineSize), - height: roundLayoutSize(vertical ? size.inlineSize : size.blockSize), - }; -} - export function useElementSize( ref: RefObject, fixedSize?: ElementSize, @@ -43,57 +14,14 @@ export function useElementSize( const [size, setSize] = useState(null); useBrowserLayoutEffect(() => { - if (fixedSize) { - return; - } - - const element = ref.current; - if (!element) { - return; - } - - const update = (next: ElementSize) => { - if (next.width <= 0 || next.height <= 0) { - return; - } - + if (fixedSize || !ref.current) return; + return observeElementSize(ref.current, (next) => { setSize((current) => current?.width === next.width && current.height === next.height ? current : next, ); - }; - - if (typeof ResizeObserver === "undefined") { - const rect = element.getBoundingClientRect(); - update({ - width: roundLayoutSize(rect.width), - height: roundLayoutSize(rect.height), - }); - return; - } - - const observer = new ResizeObserver((entries) => { - const entry = entries.at(-1); - if (!entry) { - return; - } - - const borderBox = readBorderBox(entry); - if (borderBox) { - update(borderBox); - return; - } - - const rect = element.getBoundingClientRect(); - update({ - width: roundLayoutSize(rect.width), - height: roundLayoutSize(rect.height), - }); }); - - observer.observe(element, { box: "border-box" }); - return () => observer.disconnect(); }, [fixedSize?.height, fixedSize?.width, ref]); return fixedSize ?? size; diff --git a/src/react/use-squircle-clip-path.ts b/src/react/use-squircle-clip-path.ts index f7a42d9..bd2033e 100644 --- a/src/react/use-squircle-clip-path.ts +++ b/src/react/use-squircle-clip-path.ts @@ -17,7 +17,7 @@ export type SquircleClipPathResult = Readonly<{ ready: boolean; }>; -/** Gives an own component the CSS `clip-path` value for its measured box. */ +/** Liefert den CSS-Clip-Pfad für die gemessene Fläche einer eigenen Komponente. */ export function useSquircleClipPath( ref: RefObject, options: UseSquircleClipPathOptions = {}, diff --git a/src/svelte/index.ts b/src/svelte/index.ts new file mode 100644 index 0000000..157a74a --- /dev/null +++ b/src/svelte/index.ts @@ -0,0 +1,26 @@ +import { applySquircle } from "../dom/apply-squircle.js"; +import type { SquircleGeometryOptions } from "../dom/layers.js"; + +export type { SquircleGeometryOptions }; + +/** Svelte-Action mit CSS-Vorgaben, reaktiven Optionen und automatischem Aufräumen. */ +export function squircle( + element: HTMLElement, + options: SquircleGeometryOptions = {}, +): { update(options?: SquircleGeometryOptions): void; destroy(): void } { + let dispose = applySquircle(element, options); + let destroyed = false; + + return { + update(next = {}) { + if (destroyed) return; + dispose(); + dispose = applySquircle(element, next); + }, + destroy() { + if (destroyed) return; + destroyed = true; + dispose(); + }, + }; +} diff --git a/test/clip-path.test.mjs b/test/clip-path.test.mjs index ce14f14..4ba9a7e 100644 --- a/test/clip-path.test.mjs +++ b/test/clip-path.test.mjs @@ -2,7 +2,7 @@ import assert from "node:assert/strict"; import test from "node:test"; import { createSquircleClipPath } from "../dist/index.js"; -test("wraps a path in a CSS path() value", () => { +test("verpackt den Pfad als CSS-Wert", () => { const value = createSquircleClipPath({ width: 120, height: 48, @@ -14,12 +14,12 @@ test("wraps a path in a CSS path() value", () => { assert.ok(value.endsWith(" Z')"), value); }); -test("returns none for a degenerate box so the CSS value stays valid", () => { +test("liefert bei leeren Flächen den gültigen CSS-Wert none", () => { assert.equal(createSquircleClipPath({ width: 0, height: 48 }), "none"); assert.equal(createSquircleClipPath({ width: 120, height: 0 }), "none"); }); -test("passes options through to the geometry", () => { +test("reicht Optionen an die Geometrie weiter", () => { const inset = createSquircleClipPath({ width: 120, height: 48, diff --git a/test/css.test.mjs b/test/css.test.mjs index 2c7fd3a..2f65bdd 100644 --- a/test/css.test.mjs +++ b/test/css.test.mjs @@ -9,14 +9,14 @@ import { } from "../dist/css/index.js"; import { isVoidElement } from "../dist/dom/index.js"; -/** Minimal stand-in for CSSStyleDeclaration. */ +/** Minimaler Ersatz für CSSStyleDeclaration. */ function styles(values) { return { getPropertyValue: (property) => values[property] ?? "", }; } -test("reads four pixel corners", () => { +test("liest vier Eckradien in Pixeln", () => { const radii = resolveRadiusFromComputed( styles({ "border-top-left-radius": "12px", @@ -35,17 +35,17 @@ test("reads four pixel corners", () => { }); }); -test("resolves percentages against the shorter axis", () => { +test("löst Prozentwerte anhand der kürzeren Achse auf", () => { const radii = resolveRadiusFromComputed( styles({ "border-top-left-radius": "50%" }), { width: 200, height: 100 }, ); - // 50% of 200 is 100 horizontally, 50 vertically; the circle must fit both. + // 50 % von 200 ergeben horizontal 100, vertikal 50. Der Kreis muss in beide Achsen passen. assert.equal(radii.topLeft, 50); }); -test("takes the inscribed circle of an elliptical corner", () => { +test("verwendet den einbeschriebenen Kreis elliptischer Ecken", () => { const radii = resolveRadiusFromComputed( styles({ "border-top-left-radius": "40px 10px" }), { width: 200, height: 100 }, @@ -54,7 +54,7 @@ test("takes the inscribed circle of an elliptical corner", () => { assert.equal(radii.topLeft, 10); }); -test("treats missing and unparseable values as zero", () => { +test("behandelt fehlende und unlesbare Werte als null", () => { const radii = resolveRadiusFromComputed(styles({}), { width: 200, height: 100, @@ -68,14 +68,14 @@ test("treats missing and unparseable values as zero", () => { }); }); -test("defaults smoothing to full and preserve to off", () => { +test("glättet standardmäßig vollständig ohne Erhaltungszwang", () => { assert.deepEqual(resolveSmoothingFromComputed(styles({})), { smoothing: 1, preserveSmoothing: false, }); }); -test("reads smoothing and preserve from custom properties", () => { +test("liest Glättung und Erhaltung aus CSS-Variablen", () => { assert.deepEqual( resolveSmoothingFromComputed( styles({ @@ -87,7 +87,7 @@ test("reads smoothing and preserve from custom properties", () => { ); }); -test("clamps smoothing into the supported range", () => { +test("begrenzt die Glättung auf den gültigen Bereich", () => { assert.equal( resolveSmoothingFromComputed(styles({ "--squircle-smoothing": "5" })) .smoothing, @@ -100,12 +100,12 @@ test("clamps smoothing into the supported range", () => { ); }); -test("returns nothing for none", () => { +test("liefert bei none keine Schatten", () => { assert.deepEqual(parseBoxShadow("none"), []); assert.deepEqual(parseBoxShadow(""), []); }); -test("parses a single shadow with all four lengths", () => { +test("liest einen Schatten mit vier Längen", () => { assert.deepEqual(parseBoxShadow("rgba(0, 0, 0, 0.15) 0px 4px 12px 2px"), [ { color: "rgba(0, 0, 0, 0.15)", @@ -117,13 +117,13 @@ test("parses a single shadow with all four lengths", () => { ]); }); -test("defaults blur and spread when omitted", () => { +test("ergänzt fehlende Unschärfe und Ausbreitung", () => { assert.deepEqual(parseBoxShadow("rgb(0, 0, 0) 1px 2px"), [ { color: "rgb(0, 0, 0)", offsetX: 1, offsetY: 2, blur: 0, spread: 0 }, ]); }); -test("splits multiple shadows without breaking on colour commas", () => { +test("trennt Schatten ohne Farbfunktionen zu zerlegen", () => { const shadows = parseBoxShadow( "rgba(0, 0, 0, 0.1) 0px 1px 2px 0px, rgba(0, 0, 0, 0.2) 0px 8px 24px -4px", ); @@ -134,7 +134,7 @@ test("splits multiple shadows without breaking on colour commas", () => { assert.equal(shadows[1].spread, -4); }); -test("skips inset shadows", () => { +test("überspringt innere Schatten", () => { const shadows = parseBoxShadow( "rgb(0, 0, 0) 0px 2px 4px 0px inset, rgb(255, 0, 0) 0px 3px 6px 0px", ); @@ -143,13 +143,32 @@ test("skips inset shadows", () => { assert.equal(shadows[0].color, "rgb(255, 0, 0)"); }); -test("handles negative offsets", () => { +test("verarbeitet negative Versätze", () => { assert.deepEqual(parseBoxShadow("rgb(0, 0, 0) -2px -4px 8px 0px"), [ { color: "rgb(0, 0, 0)", offsetX: -2, offsetY: -4, blur: 8, spread: 0 }, ]); }); -test("reads a solid border", () => { +test("erhält moderne CSS-Farbfunktionen in Schatten", () => { + for (const color of [ + "oklch(40% 0.05 270 / 0.2)", + "color(display-p3 0.2 0.3 0.4 / 0.5)", + "hsl(120 20% 30% / 0.4)", + "color-mix(in oklch, color(display-p3 0.2 0.3 0.4), rgb(0, 0, 0))", + ]) { + assert.deepEqual(parseBoxShadow(`${color} 1px -2px 8px 0px`), [ + { color, offsetX: 1, offsetY: -2, blur: 8, spread: 0 }, + ]); + } +}); + +test("liest Schatten auch mit nachgestellter Farbe und ohne Farbangabe", () => { + assert.equal(parseBoxShadow("1px 2px 4px oklch(40% 0 0)")[0].color, "oklch(40% 0 0)"); + assert.equal(parseBoxShadow("1px 2px")[0].color, "currentColor"); + assert.deepEqual(parseBoxShadow("unlesbar"), []); +}); + +test("liest eine durchgezogene Kontur", () => { assert.deepEqual( readBorderFromComputed( styles({ @@ -162,7 +181,7 @@ test("reads a solid border", () => { ); }); -test("reports no border for unsupported styles", () => { +test("zeichnet keine nicht unterstützten Konturstile", () => { for (const style of ["none", "dashed", "dotted", "double"]) { assert.deepEqual( readBorderFromComputed( @@ -178,7 +197,7 @@ test("reports no border for unsupported styles", () => { } }); -test("reports no border for a zero width", () => { +test("zeichnet bei Breite null keine Kontur", () => { assert.equal( readBorderFromComputed( styles({ "border-top-width": "0px", "border-top-style": "solid" }), @@ -187,7 +206,7 @@ test("reports no border for a zero width", () => { ); }); -test("copies the background longhands and the transition", () => { +test("kopiert Hintergrundeigenschaften und Übergänge", () => { assert.deepEqual( readSurfaceFromComputed( styles({ @@ -210,7 +229,7 @@ test("copies the background longhands and the transition", () => { ); }); -test("falls back to transparent and none for a bare element", () => { +test("nutzt transparente Vorgaben für ungestaltete Elemente", () => { assert.deepEqual(readSurfaceFromComputed(styles({})), { backgroundColor: "transparent", backgroundImage: "none", @@ -221,13 +240,13 @@ test("falls back to transparent and none for a bare element", () => { }); }); -test("recognises void elements", () => { +test("erkennt leere HTML-Elemente", () => { for (const tag of ["img", "input", "br", "hr", "IMG", "INPUT"]) { assert.equal(isVoidElement(tag), true, tag); } }); -test("does not treat container elements as void", () => { +test("behandelt Container als nicht leer", () => { for (const tag of ["div", "button", "a", "span", "section"]) { assert.equal(isVoidElement(tag), false, tag); } diff --git a/test/geometry.test.mjs b/test/geometry.test.mjs index 5b20496..6693b23 100644 --- a/test/geometry.test.mjs +++ b/test/geometry.test.mjs @@ -2,14 +2,14 @@ import assert from "node:assert/strict"; import test from "node:test"; import { createSquirclePath, resolveSquircleRadii } from "../dist/index.js"; -test("creates a plain rectangle when the radius is zero", () => { +test("erzeugt bei Radius null ein Rechteck", () => { assert.equal( createSquirclePath({ width: 100, height: 48 }), "M 100 0 L 100 48 L 0 48 L 0 0 Z", ); }); -test("creates a stable fully smoothed button path", () => { +test("erzeugt einen stabilen vollständig geglätteten Pfad", () => { assert.equal( createSquirclePath({ width: 120, @@ -21,7 +21,7 @@ test("creates a stable fully smoothed button path", () => { ); }); -test("keeps a one-pixel SVG stroke fully inside the box", () => { +test("hält eine 1-Pixel-Kontur innerhalb der Fläche", () => { const path = createSquirclePath({ width: 120, height: 48, @@ -36,7 +36,7 @@ test("keeps a one-pixel SVG stroke fully inside the box", () => { assert.match(path, / L 0\.5 15\.5 /); }); -test("normalizes individual corners without overlap", () => { +test("normalisiert einzelne Ecken ohne Überlappung", () => { const path = createSquirclePath({ width: 60, height: 40, @@ -54,7 +54,7 @@ test("normalizes individual corners without overlap", () => { assert.ok(!path.includes("Infinity")); }); -test("clamps smoothing and negative radii", () => { +test("begrenzt die Glättung und negative Radien", () => { assert.equal( createSquirclePath({ width: 100, @@ -66,22 +66,22 @@ test("clamps smoothing and negative radii", () => { ); }); -test("returns an empty path for a zero-sized box", () => { +test("liefert einen leeren Pfad für eine leere Fläche", () => { assert.equal(createSquirclePath({ width: 0, height: 48, radius: 8 }), ""); }); -test("rejects invalid numeric input", () => { +test("weist ungültige Zahlen zurück", () => { assert.throws( () => createSquirclePath({ width: Number.NaN, height: 48 }), - /width must be a finite number/, + /width muss eine endliche Zahl sein/, ); assert.throws( () => createSquirclePath({ width: -1, height: 48 }), - /zero or greater/, + /nicht negativ/, ); }); -test("resolves shorthand and per-corner radii", () => { +test("löst einheitliche und individuelle Radien auf", () => { assert.deepEqual(resolveSquircleRadii(8), { topLeft: 8, topRight: 8, @@ -96,7 +96,7 @@ test("resolves shorthand and per-corner radii", () => { }); }); -test("stays finite across responsive sizes and corner budgets", () => { +test("bleibt bei wechselnden Maßen und begrenztem Eckraum endlich", () => { for (let index = 1; index <= 500; index += 1) { const width = 24 + ((index * 37) % 320) + (index % 3) / 3; const height = 20 + ((index * 19) % 140) + (index % 5) / 5; diff --git a/test/react.test.mjs b/test/react.test.mjs index 634905d..04ad970 100644 --- a/test/react.test.mjs +++ b/test/react.test.mjs @@ -4,32 +4,32 @@ import { createElement } from "react"; import { renderToStaticMarkup } from "react-dom/server"; import { Squircle, SquircleSurface } from "../dist/react/index.js"; -test("renders the semantic host and nothing else", () => { +test("rendert das semantische Element ohne zusätzliche Hülle", () => { const html = renderToStaticMarkup( createElement( Squircle, { as: "button", type: "button", radius: 8, className: "button" }, - "Learn more", + "Mehr erfahren", ), ); assert.equal( html, - '', + '', ); }); -test("does not crash on a void element", () => { +test("unterstützt leere HTML-Elemente", () => { const html = renderToStaticMarkup( - createElement(Squircle, { as: "img", src: "/a.jpg", alt: "A picture" }), + createElement(Squircle, { as: "img", src: "/a.jpg", alt: "Ein Bild" }), ); - // React 19 also emits a preload link for images; only the tag itself matters. - assert.match(html, /A picture/); + // React 19 ergänzt einen Ladehinweis für Bilder; hier zählt nur das Bildelement. + assert.match(html, /Ein Bild/); assert.doesNotMatch(html, /]*>[^<]/); }); -test("passes the caller's style through untouched", () => { +test("reicht übergebene Stile unverändert weiter", () => { const html = renderToStaticMarkup( createElement(Squircle, { as: "div", @@ -40,7 +40,7 @@ test("passes the caller's style through untouched", () => { assert.match(html, /style="padding:12px"/); }); -test("renders a deterministic fixed-size SVG surface on the server", () => { +test("rendert auf dem Server eine deterministische SVG-Fläche mit festen Maßen", () => { const html = renderToStaticMarkup( createElement(SquircleSurface, { width: 120, diff --git a/test/size.test.mjs b/test/size.test.mjs new file mode 100644 index 0000000..ac99dc0 --- /dev/null +++ b/test/size.test.mjs @@ -0,0 +1,28 @@ +import assert from "node:assert/strict"; +import test from "node:test"; +import { readBorderBox } from "../dist/dom/observe-size.js"; + +test("verarbeitet ältere Observer mit einem einzelnen Größenobjekt", () => { + const original = globalThis.getComputedStyle; + globalThis.getComputedStyle = (element) => ({ writingMode: element.mode }); + try { + for (const mode of ["horizontal-tb", "vertical-rl", "sideways-lr"]) { + const vertical = mode !== "horizontal-tb"; + const box = { inlineSize: vertical ? 48 : 120, blockSize: vertical ? 120 : 48 }; + for (const borderBoxSize of [box, [box]]) { + assert.deepEqual(readBorderBox({ target: { mode }, borderBoxSize }), { + width: 120, + height: 48, + }); + } + } + } finally { + if (original === undefined) delete globalThis.getComputedStyle; + else globalThis.getComputedStyle = original; + } +}); + +test("fehlende Border-Box-Daten erlauben die Ersatzmessung", () => { + assert.equal(readBorderBox({ borderBoxSize: undefined }), null); + assert.equal(readBorderBox({ borderBoxSize: [] }), null); +}); diff --git a/tsconfig.json b/tsconfig.json index 2621c7c..ce76383 100644 --- a/tsconfig.json +++ b/tsconfig.json @@ -4,6 +4,7 @@ "module": "NodeNext", "moduleResolution": "NodeNext", "jsx": "react-jsx", + "types": ["node"], "strict": true, "exactOptionalPropertyTypes": true, "noUncheckedIndexedAccess": true, @@ -17,6 +18,9 @@ "include": [ "src/**/*.ts", "src/**/*.tsx", - "type-tests/**/*.tsx" + "type-tests/**/*.tsx", + "type-tests/**/*.ts", + "examples/react/**/*.tsx", + "playwright.config.ts" ] } diff --git a/type-tests/react-api.tsx b/type-tests/react-api.tsx index 462cd11..2ca9e45 100644 --- a/type-tests/react-api.tsx +++ b/type-tests/react-api.tsx @@ -14,25 +14,25 @@ const CustomLink = forwardRef< const button = ( - Submit + Absenden ); -const image = ; +const image = ; const link = ( - Contact + Kontakt ); type InferredButtonProps = ComponentPropsWithoutRef; const defaultProps: InferredButtonProps = { radius: 12 }; -// @ts-expect-error Paint is expressed in CSS, not in props. +// @ts-expect-error Die Gestaltung erfolgt per CSS. const invalidPaint = ; -// @ts-expect-error A native button does not accept href. +// @ts-expect-error Native Schaltflächen unterstützen kein href. const invalidButton = ; void button; diff --git a/type-tests/svelte-api.ts b/type-tests/svelte-api.ts new file mode 100644 index 0000000..85181b8 --- /dev/null +++ b/type-tests/svelte-api.ts @@ -0,0 +1,9 @@ +import type { Action } from "svelte/action"; +import type { Attachment } from "svelte/attachments"; +import { squircle, type SquircleGeometryOptions } from "../src/svelte/index.js"; +import { applySquircle } from "../src/dom/index.js"; + +const action: Action = squircle; +const attachment: Attachment = (element) => applySquircle(element); +void action; +void attachment; From e8eea7f5016233b2e173dee2cbe10e919cfeacf5 Mon Sep 17 00:00:00 2001 From: eiserv69 <156132387+eiserv69@users.noreply.github.com> Date: Sat, 7 Nov 2026 21:14:58 +0100 Subject: [PATCH 2/2] docs: use English throughout and add README badges --- .github/workflows/ci.yml | 4 +- .github/workflows/publish.yml | 33 ++-- README.md | 100 +++++----- browser-tests/playground.spec.mjs | 138 +++++++------- docs/architecture.md | 176 +++++++++--------- docs/integration.md | 133 +++++++------ docs/media/playground.png | Bin 109482 -> 108997 bytes docs/media/smoothing-extremes.png | Bin 50767 -> 47157 bytes .../plans/2026-07-28-css-driven-squircles.md | 6 +- examples/demo.css | 98 +++++----- examples/playground.html | 170 ++++++++--------- examples/react/index.html | 4 +- examples/react/main.tsx | 58 +++--- examples/{formen.svg => shapes.svg} | 0 examples/svelte/Beispiele.svelte | 42 ----- examples/svelte/Examples.svelte | 42 +++++ examples/svelte/index.html | 4 +- examples/svelte/main.js | 4 +- package.json | 2 +- scripts/build-examples.mjs | 2 +- scripts/create-visual-fixture.mjs | 10 +- scripts/screenshots.mjs | 30 +-- scripts/serve-playground.mjs | 19 +- src/clip-path.ts | 5 +- src/css/paint.ts | 4 +- src/css/radius.ts | 4 +- src/css/shadow.ts | 4 +- src/css/types.ts | 4 +- src/dom/apply-squircle.ts | 10 +- src/dom/layers.ts | 35 ++-- src/dom/observe-size.ts | 7 +- src/dom/void-elements.ts | 4 +- src/geometry.ts | 28 +-- src/react/squircle.tsx | 12 +- src/react/use-squircle-clip-path.ts | 2 +- src/svelte/index.ts | 2 +- test/clip-path.test.mjs | 6 +- test/css.test.mjs | 50 ++--- test/geometry.test.mjs | 22 +-- test/react.test.mjs | 18 +- test/size.test.mjs | 4 +- type-tests/react-api.tsx | 10 +- 42 files changed, 653 insertions(+), 653 deletions(-) rename examples/{formen.svg => shapes.svg} (100%) delete mode 100644 examples/svelte/Beispiele.svelte create mode 100644 examples/svelte/Examples.svelte diff --git a/.github/workflows/ci.yml b/.github/workflows/ci.yml index eee3d89..409fac6 100644 --- a/.github/workflows/ci.yml +++ b/.github/workflows/ci.yml @@ -32,11 +32,11 @@ jobs: - run: npm ci - # Typprüfung, Erstellung, Tests und Prüfung des npm-Pakets. + # Type checking, build, tests, and a dry-run pack of the published files. - run: npm run check browser: - name: Browsertests + name: Browser tests runs-on: ubuntu-latest steps: - uses: actions/checkout@v7 diff --git a/.github/workflows/publish.yml b/.github/workflows/publish.yml index 7a17bf6..55410d1 100644 --- a/.github/workflows/publish.yml +++ b/.github/workflows/publish.yml @@ -1,11 +1,14 @@ -name: Veröffentlichung +name: Release -# Jeder Push auf main aktualisiert die Versions-PR von release-please. -# Ihr Merge aktualisiert Version und Änderungsverlauf, erstellt Tag und -# GitHub-Veröffentlichung und veröffentlicht anschließend das npm-Paket. -# Manuell veröffentlichte Releases starten ebenfalls die Veröffentlichung. -# Mit GITHUB_TOKEN erstellte Releases lösen kein weiteres release-Ereignis aus. -# Dateinamen beibehalten: Die vertrauenswürdige npm-Veröffentlichung ist daran gebunden. +# Every push to main updates a release PR maintained by release-please. Merging +# that PR bumps package.json, writes CHANGELOG.md, tags vX.Y.Z, creates the +# GitHub Release, and publishes the package below. +# +# A release published by hand also publishes. Releases that release-please +# creates with GITHUB_TOKEN do not trigger the `release` event, so nothing is +# published twice. +# +# Keep this file name: npm trusted publishing is bound to it. on: push: branches: [main] @@ -14,7 +17,7 @@ on: workflow_dispatch: inputs: dry-run: - description: "Erstellen und packen, ohne Veröffentlichung" + description: "Build and pack, but do not publish" type: boolean default: true @@ -45,7 +48,7 @@ jobs: publish: needs: release-please - # Auch bei Release- und manuellen Ereignissen ohne release-please ausführen. + # release-please is skipped for release and dispatch events; run anyway. if: >- !cancelled() && ( needs.release-please.outputs.release_created == 'true' || @@ -55,7 +58,7 @@ jobs: runs-on: ubuntu-latest permissions: contents: read - # Für npm-Herkunftsnachweise und die vertrauenswürdige Veröffentlichung nötig. + # Required for npm provenance and for trusted publishing. id-token: write steps: @@ -66,27 +69,27 @@ jobs: node-version: 22 registry-url: https://registry.npmjs.org - # Die vertrauenswürdige Veröffentlichung benötigt npm ab 11.5.1. + # npm 11.5.1+ is needed for trusted publishing. - run: npm install -g npm@latest - run: npm ci - - name: Tag mit package.json abgleichen + - name: Verify the tag matches package.json if: github.event_name != 'workflow_dispatch' env: TAG: ${{ needs.release-please.outputs.tag_name || github.ref_name }} run: | version="$(node -p 'require("./package.json").version')" if [ "${TAG#v}" != "$version" ]; then - echo "Tag $TAG stimmt nicht mit Paketversion $version überein" >&2 + echo "Tag $TAG does not match package.json version $version" >&2 exit 1 fi - run: npm run check - - name: Veröffentlichen + - name: Publish if: github.event_name != 'workflow_dispatch' || !inputs.dry-run run: npm publish --provenance --access public env: - # Wird nach Einrichtung der vertrauenswürdigen Veröffentlichung auf npmjs.com ignoriert. + # Ignored once trusted publishing is configured on npmjs.com. NODE_AUTH_TOKEN: ${{ secrets.NPM_TOKEN }} diff --git a/README.md b/README.md index 7ecd7c2..f484ff1 100644 --- a/README.md +++ b/README.md @@ -1,23 +1,29 @@ # squircles -Eckenglättung nach Figma für das Web. Hintergrund, Kontur, Schatten und Hover -bleiben in deinem CSS. Ohne zusätzliche Hülle, mit optionaler React- und -Svelte-Anbindung und ohne Laufzeitabhängigkeiten im Geometrie- und DOM-Paket. +[![npm version](https://img.shields.io/npm/v/squircles?style=flat-square&color=242424)](https://www.npmjs.com/package/squircles) +[![CI](https://img.shields.io/github/actions/workflow/status/eiserv/squircles/ci.yml?branch=main&style=flat-square&label=CI)](https://github.com/eiserv/squircles/actions/workflows/ci.yml) +[![npm downloads](https://img.shields.io/npm/dm/squircles?style=flat-square&color=666666)](https://www.npmjs.com/package/squircles) +[![TypeScript types included](https://img.shields.io/badge/TypeScript-types_included-3178c6?style=flat-square&logo=typescript&logoColor=white)](https://github.com/eiserv/squircles/blob/main/src/index.ts) +[![MIT license](https://img.shields.io/github/license/eiserv/squircles?style=flat-square&color=666666)](LICENSE) + +Figma-style corner smoothing for the web. Backgrounds, borders, shadows, and hover +states stay in your CSS. No extra wrapper, optional React and Svelte integrations, +and no runtime dependencies in the geometry or DOM packages.

- Die neutrale Spielwiese mit Reglern, Formvergleich und vergrößerter Ecke + The neutral playground with controls, shape comparison, and an enlarged corner

-## Installation +## Install ```sh npm install squircles ``` -## Ein CSS, mehrere Wege +## One stylesheet, several ways to use it ```css -.taste { +.button { background: #242424; color: white; border: 1px solid #666; @@ -27,74 +33,74 @@ npm install squircles } ``` -**React** (ab Version 18): +**React** (18 or later): ```tsx import { Squircle } from "squircles/react"; - - Mehr erfahren + + Learn more ``` -**Svelte** als [Action](https://svelte.dev/docs/svelte/use): +**Svelte** as an [action](https://svelte.dev/docs/svelte/use): ```svelte - + ``` -**JavaScript, Vue oder andere Frameworks** über den DOM-Einstieg: +**JavaScript, Vue, or other frameworks** through the DOM entry point: ```ts import { applySquircle } from "squircles/dom"; -const element = document.querySelector(".taste"); -const aufraeumen = element ? applySquircle(element) : () => {}; -// Beim Entfernen des Elements aufrufen. -aufraeumen(); +const element = document.querySelector(".button"); +const cleanup = element ? applySquircle(element) : () => {}; +// Call when the element is removed. +cleanup(); ``` -Die Anbindungen lesen `border-radius` und `--squircle-smoothing` aus dem CSS. -Klassen-, Stil- und Größenänderungen sowie Hover und Fokus aktualisieren die Form. -Beim serverseitigen Rendern bleibt zunächst der normale CSS-Radius sichtbar. +The integrations read `border-radius` and `--squircle-smoothing` from CSS. +Class, style, and size changes, along with hover and focus, update the shape. +Server-rendered elements initially use their ordinary CSS radius. -## Nur die Geometrie +## Geometry only ```ts import { createSquirclePath, createSquircleClipPath } from "squircles"; -const optionen = { width: 200, height: 96, radius: 24, smoothing: 1 }; -const pfad = createSquirclePath(optionen); -const clipPath = createSquircleClipPath(optionen); +const options = { width: 200, height: 96, radius: 24, smoothing: 1 }; +const path = createSquirclePath(options); +const clipPath = createSquircleClipPath(options); ``` -`radius` unterstützt einzelne Ecken; `smoothing` reicht von `0` bis `1`. -Bei wenig Platz wird die Glättung wie in Figma begrenzt. -`preserveSmoothing: true` erhält sie durch komprimierte Kontrollpunkte. -`inset` versetzt den Pfad nach innen, etwa um eine halbe SVG-Konturbreite. +`radius` supports individual corners; `smoothing` ranges from `0` to `1`. +When space is limited, smoothing is constrained as in Figma. +`preserveSmoothing: true` keeps it by compressing the control points. +`inset` moves the path inward, for example by half an SVG stroke width.

- Durchgezogene Squircle-Kontur und gestrichelter border-radius mit vergrößerter Ecke + Solid squircle and dashed border-radius outlines with an enlarged corner

-## Grenzen und weitere Beispiele +## Limits and more examples -- Durchgezogene, einheitliche Konturen; keine unterschiedlichen Ränder pro Seite. -- Fokusmarkierungen und innere Schatten folgen weiterhin `border-radius`. -- Bilder und Eingaben erhalten einen Clip-Pfad, der auch ihre Kontur und ihren - Schatten beschneidet. Bei Bedarf ein umgebendes Element verwenden. -- Für halbtransparente Konturen gibt es `SquircleSurface` unter `squircles/react`. -- Ohne `ResizeObserver` wird beim Start und bei Fenstergrößenänderungen gemessen. - Für sonstige Layoutänderungen ist ein Polyfill nötig. +- Borders must be solid and uniform; different borders per side are not supported. +- Focus outlines and inset shadows still follow `border-radius`. +- Images and inputs receive a clip path that also clips their border and shadow. + Use a wrapper when needed. +- For semi-transparent borders, use `SquircleSurface` from `squircles/react`. +- Without `ResizeObserver`, measurement runs on startup and window resize. + Other layout changes require a polyfill. -[Integration, Optionen und Migration](docs/integration.md) · -[Architektur und Grenzen](docs/architecture.md) +[Integration, options, and migration](docs/integration.md) · +[Architecture and limits](docs/architecture.md) -## Entwicklung +## Development ```sh npm ci @@ -104,11 +110,11 @@ npm run test:browser npm run playground ``` -Spielwiese: [localhost:5173](http://localhost:5173/), React: -[localhost:5173/react](http://localhost:5173/react/). -Svelte-Beispiele: [localhost:5173/svelte](http://localhost:5173/svelte/). -`npm run screenshots` erstellt die README-Bilder mit transparentem Schatten neu. -`npm run visual:fixture` erzeugt weitere Geometriebeispiele in `.artifacts/`. +Playground: [localhost:5173](http://localhost:5173/), React: +[localhost:5173/react](http://localhost:5173/react/), Svelte: +[localhost:5173/svelte](http://localhost:5173/svelte/). +`npm run screenshots` regenerates the README images with transparent shadows. +`npm run visual:fixture` creates more geometry examples in `.artifacts/`. -Commits auf `main` verwenden [Conventional Commits](https://www.conventionalcommits.org/). -release-please erstellt die Versions-PR; ihr Merge veröffentlicht das npm-Paket. +Commits on `main` follow [Conventional Commits](https://www.conventionalcommits.org/). +release-please opens a release PR; merging it publishes the npm package. diff --git a/browser-tests/playground.spec.mjs b/browser-tests/playground.spec.mjs index 10da6f0..9a308fd 100644 --- a/browser-tests/playground.spec.mjs +++ b/browser-tests/playground.spec.mjs @@ -1,48 +1,48 @@ import { test, expect } from "@playwright/test"; -test("Spielwiese passt auf kleine Bildschirme und aktualisiert die Kontur", async ({ page }) => { - const fehler = []; - page.on("pageerror", (error) => fehler.push(error.message)); +test("playground fits small screens and updates the outline", async ({ page }) => { + const errors = []; + page.on("pageerror", (error) => errors.push(error.message)); await page.setViewportSize({ width: 375, height: 812 }); await page.goto("/"); - const pfad = page.locator("#squircle path"); - await expect(pfad).toHaveAttribute("d", /^M /); - const vorher = await pfad.getAttribute("d"); + const path = page.locator("#squircle path"); + await expect(path).toHaveAttribute("d", /^M /); + const before = await path.getAttribute("d"); await page.locator("#radius").fill("0"); - await expect(pfad).not.toHaveAttribute("d", vorher); - await expect(page.locator("#hinweis")).toHaveText("Ohne Radius sind beide Formen identisch."); - await page.locator("#breite").fill("420"); + await expect(path).not.toHaveAttribute("d", before); + await expect(page.locator("#note")).toHaveText("Without a radius, both shapes are identical."); + await page.locator("#width").fill("420"); await expect.poll(() => page.evaluate(() => document.documentElement.scrollWidth <= innerWidth)).toBe(true); - expect(fehler).toEqual([]); + expect(errors).toEqual([]); }); -test("DOM-Messung berücksichtigt vertikale und seitliche Schreibrichtungen", async ({ page }) => { +test("DOM measurement handles vertical and sideways writing modes", async ({ page }) => { await page.goto("/"); for (const writingMode of ["horizontal-tb", "vertical-rl", "sideways-rl"]) { await page.evaluate(async (mode) => { - document.getElementById("messung")?.remove(); + document.getElementById("measurement")?.remove(); const { applySquircle } = await import("/dist/dom/index.js"); const element = document.createElement("div"); - element.id = "messung"; + element.id = "measurement"; element.style.cssText = `width:160px;height:80px;writing-mode:${mode};border:1px solid black;border-radius:16px;background:white;box-sizing:border-box`; document.body.append(element); applySquircle(element); }, writingMode); - await expect(page.locator("#messung [data-squircle-stroke]")).toHaveAttribute("viewBox", "0 0 160 80"); + await expect(page.locator("#measurement [data-squircle-stroke]")).toHaveAttribute("viewBox", "0 0 160 80"); } }); -test("Inline-Änderungen bleiben beim Neuzeichnen und Aufräumen erhalten", async ({ page }) => { +test("inline changes survive redraw and cleanup", async ({ page }) => { await page.goto("/"); await page.evaluate(async () => { const { applySquircle } = await import("/dist/dom/index.js"); const element = document.createElement("button"); - element.id = "dynamisch"; + element.id = "dynamic"; element.style.cssText = "width:180px;height:64px;border-radius:16px;background:rgb(10, 10, 10);padding:8px"; document.body.append(element); - window.aufraeumen = applySquircle(element); + window.cleanup = applySquircle(element); }); - const element = page.locator("#dynamisch"); + const element = page.locator("#dynamic"); await expect(element.locator("[data-squircle-fill]")).toHaveCSS("background-color", "rgb(10, 10, 10)"); await element.evaluate((node) => { node.style.backgroundColor = "rgb(70, 70, 70)"; @@ -50,47 +50,47 @@ test("Inline-Änderungen bleiben beim Neuzeichnen und Aufräumen erhalten", asyn node.style.setProperty("--squircle-smoothing", "0.5"); }); await expect(element.locator("[data-squircle-fill]")).toHaveCSS("background-color", "rgb(70, 70, 70)"); - await page.evaluate(() => { window.aufraeumen(); window.aufraeumen(); }); + await page.evaluate(() => { window.cleanup(); window.cleanup(); }); await expect(element.locator("[data-squircle-fill]")).toHaveCount(0); await expect(element).toHaveCSS("background-color", "rgb(70, 70, 70)"); await expect(element).toHaveCSS("padding-top", "12px"); await expect(element).toHaveCSS("--squircle-smoothing", "0.5"); }); -test("ohne ResizeObserver funktionieren Start, Fensteränderung und Aufräumen", async ({ page }) => { +test("startup, window resize, and cleanup work without ResizeObserver", async ({ page }) => { await page.addInitScript(() => { window.ResizeObserver = undefined; }); await page.goto("/"); await page.evaluate(async () => { const { applySquircle } = await import("/dist/dom/index.js"); const element = document.createElement("div"); - element.id = "ersatz"; + element.id = "fallback"; element.style.cssText = "width:160px;height:80px;border:1px solid black;border-radius:16px;box-sizing:border-box"; document.body.append(element); - window.aufraeumen = applySquircle(element); + window.cleanup = applySquircle(element); }); - await expect(page.locator("#ersatz svg")).toHaveAttribute("viewBox", "0 0 160 80"); + await expect(page.locator("#fallback svg")).toHaveAttribute("viewBox", "0 0 160 80"); await page.evaluate(() => { - document.getElementById("ersatz").style.width = "200px"; + document.getElementById("fallback").style.width = "200px"; window.dispatchEvent(new Event("resize")); }); - await expect(page.locator("#ersatz svg")).toHaveAttribute("viewBox", "0 0 200 80"); - await page.evaluate(() => window.aufraeumen()); - await expect(page.locator("#ersatz svg")).toHaveCount(0); + await expect(page.locator("#fallback svg")).toHaveAttribute("viewBox", "0 0 200 80"); + await page.evaluate(() => window.cleanup()); + await expect(page.locator("#fallback svg")).toHaveCount(0); }); -test("React folgt dem Wechsel des nativen Elements", async ({ page }) => { +test("React follows a change of the native host element", async ({ page }) => { await page.goto("/react/"); - const element = page.locator("[data-wechsel]"); + const element = page.locator("[data-switch]"); await expect(element.locator("[data-squircle-fill]")).toHaveCount(1); - await page.getByRole("button", { name: "Element wechseln" }).click(); + await page.getByRole("button", { name: "Switch element" }).click(); await expect(element).toHaveJSProperty("tagName", "A"); await expect(element.locator("[data-squircle-fill]")).toHaveCount(1); - await page.getByRole("button", { name: "Element wechseln" }).click(); + await page.getByRole("button", { name: "Switch element" }).click(); await expect(element).toHaveJSProperty("tagName", "BUTTON"); await expect(element.locator("[data-squircle-fill]")).toHaveCount(1); }); -test("Svelte-Action aktualisiert Optionen und räumt mehrfach sicher auf", async ({ page }) => { +test("Svelte action updates options and safely handles repeated cleanup", async ({ page }) => { await page.goto("/"); await page.evaluate(async () => { const { squircle } = await import("/dist/svelte/index.js"); @@ -100,51 +100,51 @@ test("Svelte-Action aktualisiert Optionen und räumt mehrfach sicher auf", async document.body.append(element); window.action = squircle(element); }); - const kontur = page.locator("#action path"); - await expect(kontur).toHaveAttribute("d", /^M /); - const vorher = await kontur.getAttribute("d"); + const stroke = page.locator("#action path"); + await expect(stroke).toHaveAttribute("d", /^M /); + const before = await stroke.getAttribute("d"); await page.evaluate(() => window.action.update({ radius: 0 })); - await expect(kontur).not.toHaveAttribute("d", vorher); + await expect(stroke).not.toHaveAttribute("d", before); await page.evaluate(() => window.action.update()); - await expect(kontur).toHaveAttribute("d", vorher); + await expect(stroke).toHaveAttribute("d", before); await page.evaluate(() => { window.action.destroy(); window.action.destroy(); window.action.update({ radius: 24 }); }); await expect(page.locator("#action [data-squircle-fill]")).toHaveCount(0); await expect(page.locator("#action")).toHaveCSS("border-top-color", "rgb(0, 0, 0)"); }); -test("Darstellung erzeugt im Ruhezustand keine weiteren DOM-Änderungen", async ({ page }) => { +test("idle rendering produces no further DOM mutations", async ({ page }) => { await page.goto("/react/"); - await expect(page.locator("[data-wechsel] [data-squircle-fill]")).toHaveCount(1); - const anzahl = await page.evaluate(async () => { + await expect(page.locator("[data-switch] [data-squircle-fill]")).toHaveCount(1); + const count = await page.evaluate(async () => { await new Promise((resolve) => requestAnimationFrame(() => requestAnimationFrame(resolve))); let count = 0; const observer = new MutationObserver((records) => { count += records.length; }); - observer.observe(document.querySelector("[data-wechsel]"), { attributes: true, childList: true, subtree: true }); + observer.observe(document.querySelector("[data-switch]"), { attributes: true, childList: true, subtree: true }); for (let i = 0; i < 8; i++) await new Promise(requestAnimationFrame); observer.disconnect(); return count; }); - expect(anzahl).toBe(0); + expect(count).toBe(0); }); -test("Svelte rendert Action und Attachment mit reaktiven Änderungen", async ({ page }) => { - const fehler = []; - page.on("pageerror", (error) => fehler.push(error.message)); +test("Svelte renders actions and attachments with reactive changes", async ({ page }) => { + const errors = []; + page.on("pageerror", (error) => errors.push(error.message)); await page.goto("/svelte/"); - const kontur = page.locator("[data-action] path"); - await expect(kontur).toHaveAttribute("d", /^M /); + const stroke = page.locator("[data-action] path"); + await expect(stroke).toHaveAttribute("d", /^M /); await expect(page.locator("[data-attachment] [data-squircle-fill]")).toHaveCount(1); - const vorher = await kontur.getAttribute("d"); - await page.getByRole("slider", { name: "Glättung" }).fill("0"); - await expect(kontur).not.toHaveAttribute("d", vorher); - await page.getByRole("button", { name: "Beispiel entfernen" }).click(); + const before = await stroke.getAttribute("d"); + await page.getByRole("slider", { name: "Smoothing" }).fill("0"); + await expect(stroke).not.toHaveAttribute("d", before); + await page.getByRole("button", { name: "Remove example" }).click(); await expect(page.locator("[data-action]")).toHaveCount(0); - await page.getByRole("button", { name: "Beispiel anzeigen" }).click(); - await expect(kontur).toHaveAttribute("d", /^M /); - expect(fehler).toEqual([]); + await page.getByRole("button", { name: "Show example" }).click(); + await expect(stroke).toHaveAttribute("d", /^M /); + expect(errors).toEqual([]); }); -test("entfernte Inline-Stile und Prioritäten bleiben nach dem Aufräumen korrekt", async ({ page }) => { +test("removed inline styles and priorities remain correct after cleanup", async ({ page }) => { await page.goto("/"); await page.evaluate(async () => { const { applySquircle } = await import("/dist/dom/index.js"); @@ -152,7 +152,7 @@ test("entfernte Inline-Stile und Prioritäten bleiben nach dem Aufräumen korrek element.id = "inline"; element.style.cssText = "width:160px;height:80px;background:rgb(20,20,20);padding:4px;border-radius:16px"; document.body.append(element); - window.aufraeumen = applySquircle(element); + window.cleanup = applySquircle(element); }); await expect(page.locator("#inline [data-squircle-fill]")).toHaveCount(1); await page.locator("#inline").evaluate((node) => { @@ -160,7 +160,7 @@ test("entfernte Inline-Stile und Prioritäten bleiben nach dem Aufräumen korrek node.style.setProperty("background-color", "rgb(80, 80, 80)", "important"); }); await expect(page.locator("#inline [data-squircle-fill]")).toHaveCSS("background-color", "rgb(80, 80, 80)"); - await page.evaluate(() => window.aufraeumen()); + await page.evaluate(() => window.cleanup()); const styles = await page.locator("#inline").evaluate((node) => ({ padding: node.style.padding, priority: node.style.getPropertyPriority("background-color"), @@ -169,39 +169,39 @@ test("entfernte Inline-Stile und Prioritäten bleiben nach dem Aufräumen korrek expect(styles).toEqual({ padding: "", priority: "important", color: "rgb(80, 80, 80)" }); }); -test("vollständig geschrumpfte Schatten verhindern die Darstellung nicht", async ({ page }) => { - const fehler = []; - page.on("pageerror", (error) => fehler.push(error.message)); +test("fully contracted shadows do not prevent rendering", async ({ page }) => { + const errors = []; + page.on("pageerror", (error) => errors.push(error.message)); await page.goto("/"); await page.evaluate(async () => { const { applySquircle } = await import("/dist/dom/index.js"); const element = document.createElement("div"); - element.id = "schatten"; + element.id = "shadow"; element.style.cssText = "width:160px;height:80px;background:white;border-radius:16px;box-shadow:0 2px 4px -100px oklch(40% 0 0)"; document.body.append(element); applySquircle(element); }); - await expect(page.locator("#schatten [data-squircle-fill]")).toHaveCount(1); - await expect(page.locator("#schatten [data-squircle-shadow]")).toHaveCount(0); - expect(fehler).toEqual([]); + await expect(page.locator("#shadow [data-squircle-fill]")).toHaveCount(1); + await expect(page.locator("#shadow [data-squircle-shadow]")).toHaveCount(0); + expect(errors).toEqual([]); }); -test("ein komplett ersetztes style-Attribut bleibt nach dem Aufräumen erhalten", async ({ page }) => { +test("a fully replaced style attribute survives cleanup", async ({ page }) => { await page.goto("/"); await page.evaluate(async () => { const { applySquircle } = await import("/dist/dom/index.js"); const element = document.createElement("div"); - element.id = "ersetzte-stile"; + element.id = "replaced-styles"; element.style.cssText = "width:160px;height:80px;background:black;border:1px solid black;border-radius:16px;padding:4px"; document.body.append(element); - window.aufraeumen = applySquircle(element); + window.cleanup = applySquircle(element); }); - const element = page.locator("#ersetzte-stile"); + const element = page.locator("#replaced-styles"); await expect(element.locator("[data-squircle-fill]")).toHaveCount(1); await element.evaluate((node) => { node.style.cssText = "width:200px;height:100px;background:rgb(60,60,60);border:2px solid rgb(90,90,90);border-radius:24px"; }); await expect(element.locator("svg")).toHaveAttribute("viewBox", "0 0 200 100"); await expect(element.locator("[data-squircle-fill]")).toHaveCSS("background-color", "rgb(60, 60, 60)"); - await page.evaluate(() => window.aufraeumen()); + await page.evaluate(() => window.cleanup()); await expect(element).toHaveCSS("border-top-color", "rgb(90, 90, 90)"); await expect(element).toHaveCSS("padding-top", "0px"); await expect(element).toHaveCSS("background-color", "rgb(60, 60, 60)"); diff --git a/docs/architecture.md b/docs/architecture.md index a907571..6af4bc4 100644 --- a/docs/architecture.md +++ b/docs/architecture.md @@ -1,101 +1,95 @@ -# Architektur +# Architecture -## Paketgrenzen +## Package boundaries -- `squircles`: reine Geometrie ohne DOM-Zugriffe und Laufzeitabhängigkeiten. -- `squircles/dom`: CSS-basierte Darstellung mit `applySquircle`. -- `squircles/react`: Komponenten und Hooks, React als optionale Peer-Abhängigkeit. -- `squircles/svelte`: Action mit Aktualisierung und Aufräumen, ohne Svelte-Import. -- `src/css/`: strukturelle Leser für berechnete CSS-Werte, in Node testbar. +- `squircles`: pure geometry with no DOM access or runtime dependencies. +- `squircles/dom`: CSS-driven rendering through `applySquircle`. +- `squircles/react`: components and hooks, with React as an optional peer. +- `squircles/svelte`: an action with updates and cleanup, without a Svelte import. +- `src/css/`: structural readers for computed CSS values, testable in Node. -Die englischen Namen der veröffentlichten API und der CSS-Eigenschaften bleiben -zur Kompatibilität bestehen. Kommentare, Beispiele und Fehlermeldungen sind deutsch. +The public API, documentation, comments, examples, and error messages use English. -## Geometrie und Kontur +## Geometry and borders -Die Geometrie folgt Figmas veröffentlichter kubischer Bézier-Konstruktion: -`smoothing: 0` ergibt Kreisbögen, `1` vollständig geglättete Übergänge. -Jede Ecke erhält einen proportionalen Anteil der benachbarten Seiten. -Reicht der Platz nicht aus, wird die Glättung begrenzt. `preserveSmoothing` -komprimiert stattdessen die ersten Kontrollpunkte. +The geometry follows Figma's published cubic Bézier construction: +`smoothing: 0` uses circular arcs; `1` uses fully smoothed transitions. +Each corner receives a proportional share of its adjacent sides. When space is +limited, smoothing is constrained. `preserveSmoothing` instead compresses the +first control points. -Eine Kontur entsteht als SVG-Stroke auf dem um eine halbe Konturbreite -versetzten Pfad. Eine separat berechnete innere Maske entfällt: Das bloße -Verkleinern eines Eckradius ergäbe keinen exakten parallelen Bézier-Versatz. -Quellen und Danksagungen stehen in `NOTICE`. +Borders use an SVG stroke on a path inset by half the stroke width. There is no +separate inner mask: simply shrinking a corner radius would not produce an exact +parallel offset of a Bézier curve. Sources and acknowledgments are in `NOTICE`. -## Darstellungsebenen +## Rendering layers -`Squircle` rendert nur sein natives Element. Ein Effekt bindet `applySquircle` -an dieses Element. Die Darstellungsebenen liegen außerhalb von Reacts Abgleich. -Ein Wechsel von `as` entfernt die alte Anbindung und misst das neue Element. +`Squircle` renders only its native element. An effect binds `applySquircle` to +that element, keeping rendering layers outside React reconciliation. Changing +`as` removes the previous binding and measures the new element. -| Ebene | Stapelposition | Aufgabe | +| Layer | Stacking order | Purpose | | --- | --- | --- | -| `[data-squircle-shadow]` | -3 | Versetzte, weichgezeichnete Form pro äußerem Schatten | -| `[data-squircle-fill]` | -2 | Kopierter Hintergrund mit geglättetem Clip-Pfad | -| `[data-squircle-stroke]` | -1 | SVG-Kontur auf dem geglätteten Pfad | - -Alle Ebenen ignorieren Zeigereingaben. Ihr negativer Versatz um die Konturbreite -gleicht den Unterschied zwischen Innen- und Rahmenfläche aus. Die originale -Kontur wird transparent, behält aber ihre Breite, damit sich das Layout nicht -verschiebt. Das Element selbst bleibt standardmäßig unbeschnitten, sodass -Schatten und Fokusmarkierungen sichtbar bleiben. - -Die SVG-Kontur überdeckt den Rand der Hintergrundfläche. Bei halbtransparenten -Konturen kann dieser durchscheinen; `SquircleSurface` zeichnet Füllung und Kontur -gemeinsam auf einem SVG-Pfad und vermeidet diesen Fall. - -## CSS lesen und wiederherstellen - -Zum Lesen werden eigene Überschreibungen kurz aufgehoben. Übergänge bleiben -währenddessen deaktiviert, damit das Lesen keine Übergänge oder dauernde -Neuberechnungen auslöst. Änderungen werden pro Animationsframe gebündelt; -eigene Mutationseinträge werden anschließend verworfen. - -Pro Element werden die ursprünglichen und die zuletzt angewendeten Inline-Stile -gespeichert. Abweichungen gegenüber dem angewendeten Zustand werden in die -ursprünglichen Stile übernommen. Dadurch bleiben nachträgliche Änderungen durch -Frameworks beim Neuzeichnen und Aufräumen erhalten. Eine Zuweisung genau des -bereits von der Bibliothek gesetzten Werts ist davon nicht unterscheidbar. - -Eine Anbindung pro Element ist vorgesehen. Aufräumen ist idempotent und entfernt -Beobachter, Ereignisbehandlung, ausstehende Frames und eigene Ebenen. - -## Größenmessung - -DOM und React verwenden dieselbe Messung. `ResizeObserver` liefert logische -Inline- und Blockmaße, die anhand von `writing-mode` in physische Breite und Höhe -umgerechnet werden. Das umfasst `vertical-*` und `sideways-*`. -Auf 1/64 Pixel gerundete Maße vermeiden Änderungen durch minimale Messabweichungen. - -Fehlt `ResizeObserver`, werden die Abmessungen beim Start und bei -Fenstergrößenänderungen gemessen. Sonstige Layoutänderungen benötigen dann einen -Polyfill. Feste Größen umgehen die Messung in den React-Hooks vollständig. -Flächen mit Breite oder Höhe null ergeben keinen gültigen sichtbaren Pfad. - -## Grenzen - -- `outline` und innere Schatten folgen weiterhin der normalen CSS-Rundung. -- Nur durchgezogene Konturen anhand der oberen Rahmenwerte werden gezeichnet. -- Elliptische Radien werden auf den einbeschriebenen Kreis reduziert. -- Leere HTML-Elemente wie `img` und `input` erhalten direkt einen Clip-Pfad. - Dieser beschneidet auch ihre eigene Kontur und ihren Schatten. -- `backdrop-filter` bleibt ohne `clipContent` rechteckig. -- Schattenlisten werden als einzelne Ebenen zusammengesetzt. Innere Schatten - werden nicht nachgezeichnet; in gemischten Listen verschwinden sie beim - Unterdrücken des ursprünglichen Schattens. -- Änderungen ausschließlich an Vorfahren oder Stylesheets benötigen ein - beobachtetes Ereignis am Element, etwa eine Größen- oder Klassenänderung. -- Hintergrundübergänge werden weitergereicht; Geometrie- und Konturänderungen - werden zum Zeitpunkt der Aktualisierung neu gezeichnet. -- Bruchteile physischer Pixel können weiterhin leicht unterschiedliche - Rasterisierung an gegenüberliegenden Kanten ergeben. - -## Prüfung und Bilder - -`npm run check` prüft Typen, Geometrie, CSS-Leser, serverseitiges React-Rendering -und den Paketinhalt. `npm run test:browser` prüft die DOM-Lebenszyklen, -Stiländerungen, Schreibrichtungen und den Playground in Chromium. -`npm run screenshots` fotografiert den Playground und rendert den Schatten in -einen transparenten PNG-Rand. Die Bildbreiten im README sind explizit begrenzt. +| `[data-squircle-shadow]` | -3 | An offset, blurred shape for each outer shadow | +| `[data-squircle-fill]` | -2 | A copied background clipped to the smoothed shape | +| `[data-squircle-stroke]` | -1 | An SVG stroke on the smoothed path | + +All layers ignore pointer events. Their negative offset by the border width +compensates for the difference between padding and border boxes. The original +border becomes transparent but retains its width to prevent layout shifts. +The host is not clipped by default, keeping shadows and focus outlines visible. + +The SVG stroke covers the clipped background edge. Semi-transparent borders may +expose that edge; `SquircleSurface` avoids this by drawing fill and stroke +together on one SVG path. + +## Reading and restoring CSS + +Our overrides are temporarily lifted to read authored styles. Transitions stay +disabled during the read to prevent new transitions or endless updates. +Updates are coalesced per animation frame; our own mutation records are discarded +afterward. + +Each element stores its authored and most recently applied inline styles. +Differences from the applied state are merged into the authored state, preserving +later framework changes across redraws and cleanup. Assigning exactly the same +value already applied by the library cannot be distinguished from our override. + +Only one binding per element is supported. Cleanup is idempotent and removes +observers, event handlers, pending frames, and our own layers. + +## Size measurement + +DOM and React share the same measurement code. `ResizeObserver` provides logical +inline and block dimensions, which are mapped to physical width and height using +`writing-mode`, including `vertical-*` and `sideways-*`. Sizes are rounded to +1/64 pixel to avoid updates caused by tiny measurement differences. + +Without `ResizeObserver`, dimensions are measured on startup and window resize. +Other layout changes require a polyfill. Fixed sizes bypass measurement in the +React hooks. Boxes with zero width or height have no visible valid path. + +## Limits + +- `outline` and inset shadows still follow ordinary CSS rounding. +- Only solid borders based on the top border values are drawn. +- Elliptical radii are reduced to the inscribed circle. +- Void HTML elements such as `img` and `input` receive a clip path directly, + which also clips their own border and shadow. +- `backdrop-filter` remains rectangular unless `clipContent` is enabled. +- Shadow lists are composited as individual layers. Inset shadows are not + redrawn; in mixed lists, they disappear when the original shadow is suppressed. +- Changes exclusively to ancestors or stylesheets need an observed event on the + element, such as a size or class change. +- Background transitions are forwarded; geometry and border changes are redrawn + at update time. +- Fractional physical pixels can still produce slightly different rasterization + on opposite edges. + +## Verification and images + +`npm run check` verifies types, geometry, CSS readers, server-side React rendering, +and package contents. `npm run test:browser` checks DOM lifecycles, style changes, +writing modes, and the playground in Chromium. `npm run screenshots` captures the +playground and renders its shadow into a transparent PNG margin. Image widths in +the README are explicitly limited. diff --git a/docs/integration.md b/docs/integration.md index cf5e1d9..9da475d 100644 --- a/docs/integration.md +++ b/docs/integration.md @@ -1,12 +1,12 @@ # Integration -## CSS als Ausgangspunkt +## Start with CSS -Die DOM-, React- und Svelte-Anbindungen verwenden dieselbe Darstellung. -`border-radius` und die folgenden CSS-Variablen bestimmen die Form: +The DOM, React, and Svelte integrations share the same renderer. +`border-radius` and the following CSS custom properties define the shape: ```css -.karte { +.card { background: white; border: 1px solid #ddd; border-radius: 24px; @@ -16,99 +16,99 @@ Die DOM-, React- und Svelte-Anbindungen verwenden dieselbe Darstellung. } ``` -Prozentuale Radien werden pro Achse aufgelöst. Bei elliptischen CSS-Ecken wird -der einbeschriebene Kreis verwendet. Die obere Kontur bestimmt Breite und Farbe -aller Seiten. Äußere Schatten unterstützen auch `oklch()` und `color()`. -Innere Schatten lassen sich nicht mit äußeren Schatten kombinieren; bei einer -gemischten Liste unterdrückt die Ersatzdarstellung den ursprünglichen Schatten. +Percentage radii resolve per axis. Elliptical CSS corners use the inscribed +circle. The top border determines the width and color of all sides. Outer +shadows also support `oklch()` and `color()`. Inset and outer shadows cannot be +combined: for mixed lists, the replacement rendering suppresses the original +shadow, including its inset entries. -Die optionalen Werte `radius`, `smoothing`, `preserveSmoothing` und `clipContent` -überschreiben das CSS. `clipContent` beschneidet auch Kinder und außenliegende -Fokusmarkierungen; auf Bedienelementen sollte es deshalb deaktiviert bleiben. +The optional `radius`, `smoothing`, `preserveSmoothing`, and `clipContent` values +override CSS. `clipContent` also clips children and external focus outlines; +leave it disabled on controls that need those outlines. -Änderungen der eigenen `class`- und `style`-Attribute, der Größe, des Hover- und -Fokuszustands sowie Beginn und Ende eigener CSS-Übergänge lösen eine Aktualisierung -aus. Änderungen ausschließlich an Vorfahren, Stylesheets oder Medienabfragen -werden ohne eines dieser Ereignisse nicht automatisch erkannt. +Changes to the element's own `class` and `style` attributes, size, hover and focus +states, and the start and end of its own CSS transitions trigger updates. +Changes exclusively to ancestors, stylesheets, or media queries are not detected +automatically without one of these events. -## React und Next.js +## React and Next.js ```tsx import { Squircle } from "squircles/react"; -export function Karte() { +export function Card() { return ( - - -

Alle Eigenschaften des nativen Elements bleiben erhalten.

+ + +

All native element properties remain available.

); } ``` -`as` akzeptiert auch eigene Komponenten, die ihre Ref an ein HTML-Element -weiterreichen, etwa Next.js `Link`. Im App Router benötigt die aufrufende Datei -`"use client"`. Die Geometriefunktionen können auch auf dem Server laufen. -`Squircle` rendert dort zunächst nur das native Element; CSS liefert die Rundung. +`as` also accepts custom components that forward their ref to an HTML element, +such as Next.js `Link`. In the App Router, the calling file needs `"use client"`. +Geometry functions can also run on the server. `Squircle` initially renders only +its native element there, with CSS supplying the rounded-corner fallback. -`useSquirclePath` und `useSquircleClipPath` messen eine eigene Ref. Mit der Option -`size: { width, height }` funktionieren sie ohne Größenbeobachtung und bereits -beim serverseitigen Rendern. Leere Flächen ergeben einen leeren Pfad bzw. `none`. +`useSquirclePath` and `useSquircleClipPath` measure a custom ref. With the option +`size: { width, height }`, they work without observation and during server-side +rendering. Empty boxes produce an empty path or `none`. -### Bestehende Komponenten und halbtransparente Konturen +### Existing components and semi-transparent borders -`SquircleSurface` zeichnet Füllung und Kontur gemeinsam als SVG-Pfad: +`SquircleSurface` draws fill and stroke together on one SVG path: ```tsx import { SquircleSurface } from "squircles/react"; - ``` -Das Elternelement benötigt `position: relative`, transparente eigene Flächen -und Konturen sowie Text oberhalb des SVG, etwa über `position: relative` am `span`. -`width` und `height` ermöglichen auch hier eine feste Größe ohne Messung. +The parent needs `position: relative`, transparent backgrounds and borders, +and text above the SVG, for example with `position: relative` on the `span`. +`width` and `height` also allow fixed dimensions without measurement. ## Svelte -Die Action verwendet den [Lebenszyklus mit `update` und `destroy`](https://svelte.dev/docs/svelte-action). -Sie importiert keine Svelte-Laufzeit und eignet sich für Svelte 4 und 5. +The action uses the [`update` and `destroy` lifecycle](https://svelte.dev/docs/svelte-action). +It imports no Svelte runtime and works with Svelte 4 and 5. ```svelte - - ``` -Neue Optionen ersetzen die bisherigen. Das Entfernen des Elements räumt -Beobachter und Darstellung auf. Für Svelte ab 5.29 lässt sich die DOM-Funktion -auch direkt als [Attachment](https://svelte.dev/docs/svelte/@attach) verwenden: +New options replace previous ones. Removing the element cleans up observers and +rendered layers. In Svelte 5.29 or later, the DOM function can also be used +directly as an [attachment](https://svelte.dev/docs/svelte/@attach): ```svelte - ``` -## Vue und andere Frameworks +## Vue and other frameworks -`applySquircle` benötigt ein gemountetes HTML-Element und liefert eine -Aufräumfunktion. Beispiel für Vue 3: +`applySquircle` needs a mounted HTML element and returns a cleanup function. +For example, in Vue 3: ```vue ``` -CSS-Änderungen am Element werden automatisch übernommen. Für neue -Geometrieoptionen die bisherige Anbindung aufräumen und erneut anwenden. -Die Aufräumfunktion darf mehrfach aufgerufen werden. Nachträgliche -Inline-Stiländerungen bleiben beim Neuzeichnen und Aufräumen erhalten. -Pro Element darf nur eine Anbindung gleichzeitig aktiv sein. +CSS changes on the element are picked up automatically. To change geometry +options, clean up the previous binding and apply it again. Cleanup can be called +repeatedly. Later inline style changes survive redraws and cleanup. +Only one active binding per element is supported. -## Migration von 0.1 +## Migrating from 0.1 -Die Gestaltung von `Squircle` erfolgt seit 0.2 im CSS: +Since 0.2, `Squircle` takes its paint styles from CSS: -| Frühere Eigenschaft | CSS oder Ersatz | +| Previous prop | CSS or replacement | | --- | --- | | `fill` | `background` | | `stroke` | `border-color` | -| `strokeWidth` | `border-width` und `border-style: solid` | -| `radius` | `border-radius` oder weiterhin die Option | -| `smoothing` | `--squircle-smoothing` oder weiterhin die Option | -| `surfaceClassName`, `surfaceStyle` | `[data-squircle-fill]` und `[data-squircle-stroke]` | +| `strokeWidth` | `border-width` and `border-style: solid` | +| `radius` | `border-radius`, or keep using the option | +| `smoothing` | `--squircle-smoothing`, or keep using the option | +| `surfaceClassName`, `surfaceStyle` | `[data-squircle-fill]` and `[data-squircle-stroke]` | -`SquircleSurface` unterstützt weiterhin die SVG-Gestaltungseigenschaften. +`SquircleSurface` still supports SVG paint props. diff --git a/docs/media/playground.png b/docs/media/playground.png index cc001c5c513a4d3e4439a4c25efe0d60af62005e..71e3957135c84ea902e2eed5d369c955aac21f07 100644 GIT binary patch literal 108997 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

1r?7N$J!HUMt$}f+=9QVei;%GF2=2< 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 diff --git a/docs/media/smoothing-extremes.png b/docs/media/smoothing-extremes.png index fcb9ff74580c5d5bf5d8d66ecf86254fee389763..61234f1fcbc0be097c5a5af2ea38042873e82f1e 100644 GIT binary patch literal 47157 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 Al>h($ literal 50767 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 Cgy&WO diff --git a/docs/superpowers/plans/2026-07-28-css-driven-squircles.md b/docs/superpowers/plans/2026-07-28-css-driven-squircles.md index 47985b6..8d8fd89 100644 --- a/docs/superpowers/plans/2026-07-28-css-driven-squircles.md +++ b/docs/superpowers/plans/2026-07-28-css-driven-squircles.md @@ -1695,8 +1695,8 @@ Insert after the `.insights` section, before `

`:
- Card mit Schatten - Hintergrund, Rand und Schatten kommen aus CSS. + Card with a shadow + Background, border, and shadow come from CSS.
@@ -1708,7 +1708,7 @@ Insert after the `.insights` section, before `
`: Badge -

Input und Badgebeliebige Elemente

+

Input and badgeany element

``` diff --git a/examples/demo.css b/examples/demo.css index fa089ec..e1c2a7e 100644 --- a/examples/demo.css +++ b/examples/demo.css @@ -1,14 +1,14 @@ :root { color-scheme: light; - --papier: #ffffff; - --hintergrund: #f7f7f7; + --paper: #ffffff; + --background: #f7f7f7; --text: #242424; - --sekundaer: #666666; - --linie: #dedede; - --vergleich: #888888; + --secondary: #666666; + --line: #dedede; + --comparison: #888888; font: 15px/1.55 "Segoe UI", Helvetica, sans-serif; color: var(--text); - background: var(--hintergrund); + background: var(--background); -webkit-font-smoothing: antialiased; } * { box-sizing: border-box; } @@ -18,65 +18,65 @@ header { display: flex; justify-content: space-between; gap: 24px; align-items: h1 { margin: 0 0 8px; font-size: 30px; font-weight: 600; letter-spacing: -.045em; line-height: 1.2; } h2 { margin: 0 0 16px; font-size: 16px; font-weight: 600; } p { margin: 0; } -header p, .hinweis { color: var(--sekundaer); max-width: 64ch; } +header p, .note { color: var(--secondary); max-width: 64ch; } a { color: inherit; text-underline-offset: 4px; } nav { display: flex; gap: 16px; flex-shrink: 0; font-size: 13px; } button, input { font: inherit; } :focus-visible { outline: 2px solid var(--text); outline-offset: 4px; } -.werkzeug { display: grid; grid-template-columns: 208px minmax(0, 1fr); background: var(--papier); border: 1px solid var(--linie); border-radius: 12px; overflow: hidden; } -.regler { display: grid; gap: 24px; align-content: start; padding: 28px 24px; border-right: 1px solid var(--linie); } -.regler label { display: grid; gap: 10px; font-size: 13px; } -.regler label:not(.schalter) > span { display: flex; justify-content: space-between; gap: 10px; } -output { color: var(--sekundaer); font-variant-numeric: tabular-nums; } +.playground { display: grid; grid-template-columns: 208px minmax(0, 1fr); background: var(--paper); border: 1px solid var(--line); border-radius: 12px; overflow: hidden; } +.controls { display: grid; gap: 24px; align-content: start; padding: 28px 24px; border-right: 1px solid var(--line); } +.controls label { display: grid; gap: 10px; font-size: 13px; } +.controls label:not(.toggle) > span { display: flex; justify-content: space-between; gap: 10px; } +output { color: var(--secondary); font-variant-numeric: tabular-nums; } input[type="range"] { width: 100%; margin: 0; accent-color: var(--text); } -.regler .schalter { display: flex; align-items: start; gap: 8px; line-height: 1.4; } -.schalter input { accent-color: var(--text); margin: 2px 0 0; } -.regler small { display: block; color: var(--sekundaer); font-size: 12px; margin-top: 4px; } -.vorschau { min-width: 0; } -.vergleich { display: grid; grid-template-columns: 1fr 1fr; border-bottom: 1px solid var(--linie); } +.controls .toggle { display: flex; align-items: start; gap: 8px; line-height: 1.4; } +.toggle input { accent-color: var(--text); margin: 2px 0 0; } +.controls small { display: block; color: var(--secondary); font-size: 12px; margin-top: 4px; } +.preview { min-width: 0; } +.comparison { display: grid; grid-template-columns: 1fr 1fr; border-bottom: 1px solid var(--line); } figure { margin: 0; min-width: 0; } -.form-flaeche { height: 218px; display: grid; place-items: center; padding: 24px; overflow: hidden; } -.form-flaeche svg { display: block; overflow: visible; } -figcaption { color: var(--sekundaer); font-size: 12px; text-align: center; padding: 0 12px 20px; } +.shape-stage { height: 218px; display: grid; place-items: center; padding: 24px; overflow: hidden; } +.shape-stage svg { display: block; overflow: visible; } +figcaption { color: var(--secondary); font-size: 12px; text-align: center; padding: 0 12px 20px; } figcaption b { display: block; color: var(--text); font-size: 14px; font-weight: 600; margin-bottom: 2px; } -.analyse { display: grid; grid-template-columns: 1fr 1fr; } -.analyse figure { padding-top: 24px; } -.analyse .form-flaeche { height: 176px; padding: 12px 24px 24px; } -.analyse svg { width: 100%; height: 100%; } -.analyse figcaption { padding-bottom: 0; } -.legende { display: flex; justify-content: center; flex-wrap: wrap; gap: 18px; padding: 12px 16px 24px; font-size: 12px; color: var(--sekundaer); } -.legende span::before { content: ""; display: inline-block; width: 20px; margin-right: 6px; vertical-align: middle; border-top: 2px solid var(--text); } -.legende span:last-child::before { border-top: 2px dashed var(--vergleich); } -.hinweis { font-size: 13px; margin: 16px 0 24px; } -details { border-top: 1px solid var(--linie); padding: 18px 0; } +.analysis { display: grid; grid-template-columns: 1fr 1fr; } +.analysis figure { padding-top: 24px; } +.analysis .shape-stage { height: 176px; padding: 12px 24px 24px; } +.analysis svg { width: 100%; height: 100%; } +.analysis figcaption { padding-bottom: 0; } +.legend { display: flex; justify-content: center; flex-wrap: wrap; gap: 18px; padding: 12px 16px 24px; font-size: 12px; color: var(--secondary); } +.legend span::before { content: ""; display: inline-block; width: 20px; margin-right: 6px; vertical-align: middle; border-top: 2px solid var(--text); } +.legend span:last-child::before { border-top: 2px dashed var(--comparison); } +.note { font-size: 13px; margin: 16px 0 24px; } +details { border-top: 1px solid var(--line); padding: 18px 0; } summary { cursor: pointer; font-size: 13px; } pre { margin: 16px 0 0; overflow: auto; font: 12px/1.7 Consolas, monospace; } code { font-size: .9em; } -.beispiele { margin-top: 40px; } -.reihe { display: flex; flex-wrap: wrap; align-items: start; gap: 24px; } -.stapel { display: grid; gap: 20px; justify-items: start; } -.taste { display: inline-grid; place-items: center; min-height: 44px; padding: 10px 20px; background: var(--text); border: 1px solid var(--text); border-radius: 12px; --squircle-smoothing: 1; color: white; font-weight: 600; cursor: pointer; text-decoration: none; transition: background-color 150ms ease; } -.taste:hover { background: #444; } -.taste--hell { background: white; color: var(--text); border-color: var(--linie); } -.taste--hell:hover { background: #eee; } -.karte { width: 264px; max-width: 100%; border: 1px solid var(--linie); border-radius: 20px; --squircle-smoothing: 1; background: white; box-shadow: 0 8px 20px rgb(0 0 0 / .08); } -.kartenbild { display: block; width: 100%; height: 124px; border-radius: 20px; object-fit: cover; } -.kartentext { display: grid; gap: 4px; padding: 16px; font-size: 13px; } -.kartentext span { color: var(--sekundaer); } -.eingabe { width: 220px; max-width: 100%; padding: 10px 12px; border: 1px solid #aaa; border-radius: 10px; background: white; color: var(--text); } -.feld { display: grid; gap: 8px; color: var(--sekundaer); font-size: 13px; } -.markierung { padding: 6px 14px; border-radius: 999px; background: #e9e9e9; font-size: 12px; } +.examples { margin-top: 40px; } +.row { display: flex; flex-wrap: wrap; align-items: start; gap: 24px; } +.stack { display: grid; gap: 20px; justify-items: start; } +.button { display: inline-grid; place-items: center; min-height: 44px; padding: 10px 20px; background: var(--text); border: 1px solid var(--text); border-radius: 12px; --squircle-smoothing: 1; color: white; font-weight: 600; cursor: pointer; text-decoration: none; transition: background-color 150ms ease; } +.button:hover { background: #444; } +.button--light { background: white; color: var(--text); border-color: var(--line); } +.button--light:hover { background: #eee; } +.card { width: 264px; max-width: 100%; border: 1px solid var(--line); border-radius: 20px; --squircle-smoothing: 1; background: white; box-shadow: 0 8px 20px rgb(0 0 0 / .08); } +.card-image { display: block; width: 100%; height: 124px; border-radius: 20px; object-fit: cover; } +.card-body { display: grid; gap: 4px; padding: 16px; font-size: 13px; } +.card-body span { color: var(--secondary); } +.input { width: 220px; max-width: 100%; padding: 10px 12px; border: 1px solid #aaa; border-radius: 10px; background: white; color: var(--text); } +.field { display: grid; gap: 8px; color: var(--secondary); font-size: 13px; } +.badge { padding: 6px 14px; border-radius: 999px; background: #e9e9e9; font-size: 12px; } @media (max-width: 720px) { main { margin: 28px auto; padding: 0 20px; } header { display: block; margin-bottom: 24px; } nav { margin-top: 16px; } - .werkzeug { grid-template-columns: 1fr; } - .regler { grid-template-columns: 1fr 1fr; gap: 20px; padding: 20px; border-right: 0; border-bottom: 1px solid var(--linie); } - .form-flaeche { height: 190px; padding: 16px; } + .playground { grid-template-columns: 1fr; } + .controls { grid-template-columns: 1fr 1fr; gap: 20px; padding: 20px; border-right: 0; border-bottom: 1px solid var(--line); } + .shape-stage { height: 190px; padding: 16px; } } @media (max-width: 400px) { - .vergleich { grid-template-columns: 1fr; } - .form-flaeche { height: 160px; } + .comparison { grid-template-columns: 1fr; } + .shape-stage { height: 160px; } } @media (prefers-reduced-motion: reduce) { *, *::before, *::after { transition: none !important; } diff --git a/examples/playground.html b/examples/playground.html index aaee464..009c693 100644 --- a/examples/playground.html +++ b/examples/playground.html @@ -1,9 +1,9 @@ - + - squircles · Spielwiese + squircles · Playground @@ -11,58 +11,58 @@

squircles

-

Weichere Ecken, direkt aus deinem CSS. Vergleiche die Glättung mit border-radius.

+

Smoother corners, straight from your CSS. Compare smoothing with border-radius.

-
-
-
- - - - - - +
+ + + + + + + -
-
+
+
-
-
SquircleGeglättete Übergänge
+
+
SquircleSmoothed transitions
-
-
border-radiusKreisförmige Ecken
+
+
border-radiusCircular corners
-
-
Konturen im VergleichGleiche Maße, gleiche Radien
-
Die Ecke im DetailOben links, vergrößert
+
+
Compare outlinesSame size, same radii
+
A closer lookTop left corner, enlarged
-
Squircleborder-radius
+
Squircleborder-radius
-

-
Geometrie als Code
+

+
Geometry as code
-
-

Mit gewöhnlichem CSS

-
-
- Zwei geglättete Formen in Grautönen -
Eine Karte, weichere Ecken.Hintergrund, Kontur und Schatten bleiben im CSS.
+
+

With ordinary CSS

+
+
+ Two smoothed shapes in grayscale +
A card with smoother corners.Background, border, and shadow stay in CSS.
-
- - - Ohne Abhängigkeiten +
+ + + No dependencies
@@ -73,75 +73,75 @@

Mit gewöhnlichem CSS

for (const element of document.querySelectorAll("[data-demo]")) applySquircle(element); - const felder = Object.fromEntries( - ["breite", "hoehe", "radius", "glaettung", "kontur", "erhalten"].map((name) => [name, document.getElementById(name)]), + const inputs = Object.fromEntries( + ["width", "height", "radius", "smoothing", "stroke", "preserve"].map((name) => [name, document.getElementById(name)]), ); const squircle = document.getElementById("squircle"); - const rundung = document.getElementById("rundung"); - const ueberlagerung = document.getElementById("ueberlagerung"); + const rounded = document.getElementById("rounded"); + const overlay = document.getElementById("overlay"); const detail = document.getElementById("detail"); let frame = 0; - function zeichnen() { + function render() { frame = 0; - const width = Number(felder.breite.value); - const height = Number(felder.hoehe.value); - const radius = Number(felder.radius.value); - const smoothing = Number(felder.glaettung.value); - const strokeWidth = Number(felder.kontur.value); - const preserveSmoothing = felder.erhalten.checked; - const optionen = { width, height, radius, smoothing, preserveSmoothing }; - const pfad = createSquirclePath(optionen); - const begrenzterRadius = Math.min(radius, width / 2, height / 2); + const width = Number(inputs.width.value); + const height = Number(inputs.height.value); + const radius = Number(inputs.radius.value); + const smoothing = Number(inputs.smoothing.value); + const strokeWidth = Number(inputs.stroke.value); + const preserveSmoothing = inputs.preserve.checked; + const options = { width, height, radius, smoothing, preserveSmoothing }; + const path = createSquirclePath(options); + const cappedRadius = Math.min(radius, width / 2, height / 2); - for (const [name, feld] of Object.entries(felder)) { - if (name === "erhalten") continue; - document.getElementById(`${name}-wert`).value = name === "glaettung" - ? Number(feld.value).toLocaleString("de-DE", { minimumFractionDigits: 2 }) - : `${feld.value} px`; + for (const [name, field] of Object.entries(inputs)) { + if (name === "preserve") continue; + document.getElementById(`${name}-value`).value = name === "smoothing" + ? Number(field.value).toLocaleString("en-US", { minimumFractionDigits: 2 }) + : `${field.value} px`; } - // Beide Formen gemeinsam verkleinern, wenn die Vorschau zu schmal wird. - const platz = Math.min(...["squircle-flaeche", "radius-flaeche"].map((id) => document.getElementById(id).clientWidth - 48)); - const faktor = Math.min(1, Math.max(1, platz) / width, 140 / height); - for (const svg of [squircle, rundung]) { + // Scale both shapes together when the preview becomes too narrow. + const space = Math.min(...["squircle-stage", "radius-stage"].map((id) => document.getElementById(id).clientWidth - 48)); + const scale = Math.min(1, Math.max(1, space) / width, 140 / height); + for (const svg of [squircle, rounded]) { svg.setAttribute("viewBox", `0 0 ${width} ${height}`); - svg.setAttribute("width", width * faktor); - svg.setAttribute("height", height * faktor); + svg.setAttribute("width", width * scale); + svg.setAttribute("height", height * scale); svg.firstElementChild.setAttribute("stroke-width", strokeWidth); } - squircle.firstElementChild.setAttribute("d", createSquirclePath({ ...optionen, inset: strokeWidth / 2 })); + squircle.firstElementChild.setAttribute("d", createSquirclePath({ ...options, inset: strokeWidth / 2 })); const inset = strokeWidth / 2; - for (const [name, wert] of Object.entries({ x: inset, y: inset, width: width - strokeWidth, height: height - strokeWidth, rx: Math.max(0, begrenzterRadius - inset) })) { - rundung.firstElementChild.setAttribute(name, wert); + for (const [name, value] of Object.entries({ x: inset, y: inset, width: width - strokeWidth, height: height - strokeWidth, rx: Math.max(0, cappedRadius - inset) })) { + rounded.firstElementChild.setAttribute(name, value); } - // Die gestrichelte Kontur bleibt auch ohne Farbakzent unterscheidbar. - const konturen = ``; - ueberlagerung.setAttribute("viewBox", `-8 -8 ${width + 16} ${height + 16}`); - const ausschnitt = Math.max(8, Math.min(width / 2, height / 2, begrenzterRadius * 1.8)); - detail.setAttribute("viewBox", `-2 -2 ${ausschnitt + 4} ${ausschnitt + 4}`); - ueberlagerung.innerHTML = konturen; - detail.innerHTML = konturen; + // The dashed outline stays distinct without relying on color. + const outlines = ``; + overlay.setAttribute("viewBox", `-8 -8 ${width + 16} ${height + 16}`); + const crop = Math.max(8, Math.min(width / 2, height / 2, cappedRadius * 1.8)); + detail.setAttribute("viewBox", `-2 -2 ${crop + 4} ${crop + 4}`); + overlay.innerHTML = outlines; + detail.innerHTML = outlines; - const start = /^M\s+(-?[\d.]+)/.exec(pfad); - const reichweite = start ? width - Number(start[1]) : 0; - const begrenzt = reichweite + .05 < (1 + smoothing) * begrenzterRadius; - document.getElementById("hinweis").textContent = radius === 0 - ? "Ohne Radius sind beide Formen identisch." + const start = /^M\s+(-?[\d.]+)/.exec(path); + const reach = start ? width - Number(start[1]) : 0; + const constrained = reach + .05 < (1 + smoothing) * cappedRadius; + document.getElementById("note").textContent = radius === 0 + ? "Without a radius, both shapes are identical." : smoothing === 0 - ? "Ohne Glättung entspricht die Squircle einem abgerundeten Rechteck." - : begrenzt + ? "Without smoothing, the squircle is a rounded rectangle." + : constrained ? preserveSmoothing - ? "Wenig Platz: Die Kontrollpunkte werden zusammengedrückt, die Glättung bleibt erhalten." - : "Wenig Platz: Die Glättung wird wie in Figma begrenzt. Aktiviere bei Bedarf „Glättung erhalten“." - : "Die Glättung verlängert den Übergang zwischen gerader Kante und runder Ecke."; - document.getElementById("ausgabe").textContent = `createSquirclePath(${JSON.stringify({ ...optionen, inset }, null, 2)})`; + ? "Limited space: control points are compressed to preserve smoothing." + : "Limited space: smoothing is constrained as in Figma. Enable “Preserve smoothing” to keep it." + : "Smoothing extends the transition between straight edges and rounded corners."; + document.getElementById("output").textContent = `createSquirclePath(${JSON.stringify({ ...options, inset }, null, 2)})`; } - function vormerken() { if (!frame) frame = requestAnimationFrame(zeichnen); } - document.getElementById("regler").addEventListener("input", vormerken); - window.addEventListener("resize", vormerken); - zeichnen(); + function schedule() { if (!frame) frame = requestAnimationFrame(render); } + document.getElementById("controls").addEventListener("input", schedule); + window.addEventListener("resize", schedule); + render(); diff --git a/examples/react/index.html b/examples/react/index.html index 7c606af..bdc438f 100644 --- a/examples/react/index.html +++ b/examples/react/index.html @@ -1,9 +1,9 @@ - + - squircles · React-Beispiele + squircles · React examples diff --git a/examples/react/main.tsx b/examples/react/main.tsx index a3b40e9..1369512 100644 --- a/examples/react/main.tsx +++ b/examples/react/main.tsx @@ -2,54 +2,54 @@ import { StrictMode, useState } from "react"; import { createRoot } from "react-dom/client"; import { Squircle } from "../../src/react/index.js"; -function Beispiele() { - const [alsLink, setzeAlsLink] = useState(false); +function Examples() { + const [asLink, setAsLink] = useState(false); return (
-

squircles mit React

-

Native Elemente mit geglätteten Ecken. Die Gestaltung bleibt im CSS.

+

squircles with React

+

Native elements with smoother corners. Styling stays in CSS.

- +
-
-

Schaltflächen und Links

-
- Mehr erfahren - Zu den Beispielen +
+

Buttons and links

+
+ Learn more + See the examples
-

Hover, Fokusmarkierung und Hintergrund werden wie gewohnt per CSS gestaltet.

+

Style hover, focus outlines, and backgrounds in ordinary CSS.

-
-

Karte, Bild und Eingabe

-
- - -
Eine Karte, weichere Ecken.Hintergrund, Kontur und Schatten bleiben im CSS.
+
+

Card, image, and input

+
+ + +
A card with smoother corners.Background, border, and shadow stay in CSS.
-
- - Ohne zusätzliche Hülle +
+ + No extra wrapper
-
-

Das Element wechseln

-
- - {alsLink - ? Jetzt ein Link - : Jetzt eine Schaltfläche} +
+

Switch the element

+
+ + {asLink + ? Now a link + : Now a button}
-

Die Form folgt dem neuen Element; alte Beobachter werden entfernt.

+

The shape follows the new element; old observers are removed.

); } const container = document.getElementById("root"); -if (container) createRoot(container).render(); +if (container) createRoot(container).render(); diff --git a/examples/formen.svg b/examples/shapes.svg similarity index 100% rename from examples/formen.svg rename to examples/shapes.svg diff --git a/examples/svelte/Beispiele.svelte b/examples/svelte/Beispiele.svelte deleted file mode 100644 index 195bc98..0000000 --- a/examples/svelte/Beispiele.svelte +++ /dev/null @@ -1,42 +0,0 @@ - - -
-
-
-

squircles mit Svelte

-

CSS-basierte Formen als Action oder Attachment. Ohne zusätzliche Hülle.

-
- -
- -
-

Eine Action mit reaktiven Optionen

- -
- {#if sichtbar} - - {/if} - -
-

Neue Optionen aktualisieren die Form. Beim Entfernen werden alle Beobachter aufgeräumt.

-
- -
-

Als Attachment ab Svelte 5.29

- -

Die DOM-Funktion liefert bereits die passende Aufräumfunktion zurück.

-
-
diff --git a/examples/svelte/Examples.svelte b/examples/svelte/Examples.svelte new file mode 100644 index 0000000..0425cb8 --- /dev/null +++ b/examples/svelte/Examples.svelte @@ -0,0 +1,42 @@ + + +
+
+
+

squircles with Svelte

+

CSS-driven shapes as actions or attachments. No extra wrapper.

+
+ +
+ +
+

An action with reactive options

+ +
+ {#if visible} + + {/if} + +
+

New options update the shape. Removing the element cleans up all observers.

+
+ +
+

As an attachment in Svelte 5.29+

+ +

The DOM function already returns the required cleanup function.

+
+
diff --git a/examples/svelte/index.html b/examples/svelte/index.html index ff289c8..9187f90 100644 --- a/examples/svelte/index.html +++ b/examples/svelte/index.html @@ -1,9 +1,9 @@ - + - squircles · Svelte-Beispiele + squircles · Svelte examples diff --git a/examples/svelte/main.js b/examples/svelte/main.js index ca3b376..089caf3 100644 --- a/examples/svelte/main.js +++ b/examples/svelte/main.js @@ -1,4 +1,4 @@ import { mount } from "svelte"; -import Beispiele from "./Beispiele.svelte"; +import Examples from "./Examples.svelte"; -mount(Beispiele, { target: document.getElementById("root") }); +mount(Examples, { target: document.getElementById("root") }); diff --git a/package.json b/package.json index baade08..f7309a3 100644 --- a/package.json +++ b/package.json @@ -1,7 +1,7 @@ { "name": "squircles", "version": "0.2.1", - "description": "Eckenglättung nach Figma ohne Laufzeitabhängigkeiten, mit DOM-, React- und Svelte-Anbindung.", + "description": "Dependency-free Figma-style corner smoothing with DOM, React, and Svelte integrations.", "type": "module", "sideEffects": false, "files": [ diff --git a/scripts/build-examples.mjs b/scripts/build-examples.mjs index 7e66429..3e92de0 100644 --- a/scripts/build-examples.mjs +++ b/scripts/build-examples.mjs @@ -21,7 +21,7 @@ await build({ target: "es2022", logLevel: "info", plugins: [{ - name: "svelte-beispiele", + name: "svelte-examples", setup(build) { build.onLoad({ filter: /\.svelte$/ }, async ({ path }) => { const source = await readFile(path, "utf8"); diff --git a/scripts/create-visual-fixture.mjs b/scripts/create-visual-fixture.mjs index a116368..ac547fa 100644 --- a/scripts/create-visual-fixture.mjs +++ b/scripts/create-visual-fixture.mjs @@ -8,7 +8,7 @@ const cases = [ { width: 48, height: 48, radius: 12, smoothing: 1, strokeWidth: 1 }, { width: 180, height: 64, radius: 20, smoothing: 1, strokeWidth: 1.5 }, { width: 240, height: 96, radius: 32, smoothing: 0.8, strokeWidth: 2 }, - // Karte, Fläche ohne Kontur und Pillenform wie auf den Beispielseiten. + // Card, borderless surface, and pill, matching the example pages. { width: 260, height: 180, radius: 20, smoothing: 1, strokeWidth: 1 }, { width: 260, height: 120, radius: 12, smoothing: 1, strokeWidth: 0 }, { width: 120, height: 32, radius: 999, smoothing: 1, strokeWidth: 1 }, @@ -50,11 +50,11 @@ const rows = cases .join(""); const html = ` - + - Squircle-Geometriebeispiele + Squircle geometry examples
`); - await rahmen.locator("img").evaluate((img) => img.decode()); - await rahmen.locator("figure").screenshot({ path: fileURLToPath(new URL(`docs/media/${filename}`, root)), omitBackground: true }); - await rahmen.close(); - console.log(`README-Bild erstellt: ${filename}`); + await frame.locator("img").evaluate((img) => img.decode()); + await frame.locator("figure").screenshot({ path: fileURLToPath(new URL(`docs/media/${filename}`, root)), omitBackground: true }); + await frame.close(); + console.log(`README image created: ${filename}`); } } finally { await browser?.close(); diff --git a/scripts/serve-playground.mjs b/scripts/serve-playground.mjs index d71d9b5..5399789 100644 --- a/scripts/serve-playground.mjs +++ b/scripts/serve-playground.mjs @@ -23,12 +23,9 @@ const pages = { "/svelte/": "examples/svelte/index.html", }; -/** - * Löst einen Anfragepfad innerhalb des Pakets auf; außerhalb liegende Pfade werden - * verworfen. - */ +/** Resolves a request path inside the package and rejects paths outside it. */ function resolve(requestPath) { - // Die Framework-Seiten und ihre Dateien teilen sich jeweils einen Unterpfad. + // Each framework page shares a subpath with its assets. const relative = pages[requestPath] ?? (/^\/(react|svelte)\//.test(requestPath) @@ -43,7 +40,7 @@ const server = createServer(async (request, response) => { const target = resolve(new URL(request.url, "http://localhost").pathname); if (!target) { - response.writeHead(403).end("Zugriff verweigert"); + response.writeHead(403).end("Forbidden"); return; } @@ -53,10 +50,10 @@ const server = createServer(async (request, response) => { const stats = await stat(path); if (!stats.isFile()) { - throw new Error("Keine Datei"); + throw new Error("Not a file"); } } catch { - response.writeHead(404).end("Nicht gefunden"); + response.writeHead(404).end("Not found"); return; } @@ -68,7 +65,7 @@ const server = createServer(async (request, response) => { }); server.listen(port, () => { - console.log(`squircles Spielwiese: http://localhost:${port}/`); - console.log(`squircles mit React: http://localhost:${port}/react/`); - console.log(`squircles mit Svelte: http://localhost:${port}/svelte/`); + console.log(`squircles Playground: http://localhost:${port}/`); + console.log(`squircles with React: http://localhost:${port}/react/`); + console.log(`squircles with Svelte: http://localhost:${port}/svelte/`); }); diff --git a/src/clip-path.ts b/src/clip-path.ts index 1fceab2..34be0fe 100644 --- a/src/clip-path.ts +++ b/src/clip-path.ts @@ -1,9 +1,6 @@ import { createSquirclePath, type SquirclePathOptions } from "./geometry.js"; -/** - * Erzeugt einen direkt verwendbaren CSS-Clip-Pfad. Leere Flächen ergeben den gültigen - * Wert `none`. - */ +/** Builds a ready-to-use CSS clip path. Empty boxes return the valid value `none`. */ export function createSquircleClipPath(options: SquirclePathOptions): string { const path = createSquirclePath(options); return path === "" ? "none" : `path('${path}')`; diff --git a/src/css/paint.ts b/src/css/paint.ts index 72efbdc..e24eb65 100644 --- a/src/css/paint.ts +++ b/src/css/paint.ts @@ -6,8 +6,8 @@ function read(styles: StyleReader, property: string, fallback: string): string { } /** - * Liest ausschließlich die obere Kontur. Unterschiedliche Seiten sowie gestrichelte und - * gepunktete Ränder lassen sich nicht als einzelne SVG-Kontur darstellen. + * Reads only the top border. Per-side, dashed, and dotted borders cannot be + * represented by a single SVG stroke. */ export function readBorderFromComputed(styles: StyleReader): SquircleBorder { const style = read(styles, "border-top-style", "none"); diff --git a/src/css/radius.ts b/src/css/radius.ts index 0f71c33..91afc41 100644 --- a/src/css/radius.ts +++ b/src/css/radius.ts @@ -20,8 +20,8 @@ function toPixels(value: string, basis: number): number { } /** - * Reduziert elliptische CSS-Ecken auf den einbeschriebenen Kreis. Prozentwerte werden - * vorher pro Achse aufgelöst. + * Reduces elliptical CSS corners to the inscribed circle. Percentages are resolved + * per axis first. */ function resolveCorner(value: string, size: ElementSize): number { const parts = value.trim().split(/\s+/).filter(Boolean); diff --git a/src/css/shadow.ts b/src/css/shadow.ts index fa910d1..8d5947f 100644 --- a/src/css/shadow.ts +++ b/src/css/shadow.ts @@ -2,7 +2,7 @@ import type { SquircleShadow } from "./types.js"; const LENGTH = /^-?(?:\d*\.)?\d+(?:e[+-]?\d+)?px$/i; -/** Trennt nur außerhalb von Funktionen, auch bei beliebig tiefer Verschachtelung. */ +/** Splits only outside functions, including arbitrarily nested functions. */ function splitOutsideFunctions(value: string, separator: RegExp): string[] { const parts: string[] = []; let depth = 0; @@ -27,7 +27,7 @@ function splitOutsideFunctions(value: string, separator: RegExp): string[] { return parts.map((part) => part.trim()).filter(Boolean); } -/** Behält auch moderne Farbfunktionen wie oklch() und color() unverändert bei. */ +/** Preserves modern color functions such as oklch() and color(). */ function parseShadow(part: string): SquircleShadow | null { const text = part.trim(); diff --git a/src/css/types.ts b/src/css/types.ts index f93a7b0..b5052d3 100644 --- a/src/css/types.ts +++ b/src/css/types.ts @@ -1,6 +1,6 @@ /** - * Minimaler struktureller Ausschnitt aus CSSStyleDeclaration, damit die Leser ohne DOM - * in Node testbar bleiben. + * The structural subset of CSSStyleDeclaration needed by the readers, keeping them + * testable in Node without a DOM. */ export type StyleReader = Readonly<{ getPropertyValue(property: string): string; diff --git a/src/dom/apply-squircle.ts b/src/dom/apply-squircle.ts index 1622265..b7d43fe 100644 --- a/src/dom/apply-squircle.ts +++ b/src/dom/apply-squircle.ts @@ -8,12 +8,12 @@ import { const REREAD_EVENTS = ["pointerenter", "pointerleave", "focusin", "focusout"] as const; -/** Übergangsereignisse von Kindelementen ignorieren. */ +/** Ignores transition events from descendant elements. */ const TRANSITION_EVENTS = ["transitionrun", "transitionend"] as const; /** - * Formt ein Element anhand seines CSS. Die Rückgabe entfernt die Ebenen - * und stellt die ursprünglichen Inline-Stile wieder her. + * Shapes an element from its CSS. The returned cleanup removes the layers and + * restores the authored inline styles. */ export function applySquircle( element: HTMLElement, @@ -31,11 +31,11 @@ export function applySquircle( } syncLayers(element, size, options); - // Eigene Stiländerungen verwerfen, damit keine Endlosschleife entsteht. + // Discard our own style mutations to avoid an endless update loop. mutationObserver.takeRecords(); }; - // Hover, Fokus und Klassenänderungen innerhalb eines Frames bündeln. + // Coalesce hover, focus, and class changes into a single frame. const schedule = (): void => { if (disposed || frame !== 0) { return; diff --git a/src/dom/layers.ts b/src/dom/layers.ts index e3c88c0..016f631 100644 --- a/src/dom/layers.ts +++ b/src/dom/layers.ts @@ -24,7 +24,7 @@ const SHADOW = "data-squircle-shadow"; const SELECTOR = `[${FILL}], [${STROKE}], [${SHADOW}]`; const SVG_NAMESPACE = "http://www.w3.org/2000/svg"; -/** Alle CSS-Eigenschaften, die syncLayers vom Element benötigt. */ +/** All CSS properties syncLayers needs from the host element. */ const READ_PROPERTIES = [ "border-top-left-radius", "border-top-right-radius", @@ -57,7 +57,7 @@ function rememberInline(host: HTMLElement): void { } } -/** Übernimmt nachträgliche Inline-Änderungen, etwa aus reaktiven Frameworks. */ +/** Preserves later inline changes, including those made by reactive frameworks. */ function reconcileInline(host: HTMLElement): InlineState | undefined { const state = originalInline.get(host); if (!state || state.applied === host.style.cssText) return state; @@ -86,8 +86,8 @@ function rememberApplied(host: HTMLElement): void { } /** - * Hebt eigene Überschreibungen zum Lesen kurz auf. Übergänge bleiben dabei deaktiviert, - * damit das Lesen keine neuen Übergänge und damit Endlosschleifen auslöst. + * Temporarily lifts our overrides while reading authored styles. Transitions stay + * disabled so reads cannot start new transitions and endless updates. */ function readAuthoredStyles(host: HTMLElement): StyleReader { const applied = host.style.cssText; @@ -95,7 +95,7 @@ function readAuthoredStyles(host: HTMLElement): StyleReader { const computed = getComputedStyle(host); const snapshot = new Map(); - // transition wird am Element nicht überschrieben und lässt sich direkt lesen. + // The host transition is never overridden, so it can be read directly. snapshot.set("transition", computed.getPropertyValue("transition")); host.style.cssText = authored; @@ -109,8 +109,8 @@ function readAuthoredStyles(host: HTMLElement): StyleReader { snapshot.set(property, computed.getPropertyValue(property)); } - // Überschreibungen bei deaktivierten Übergängen anwenden und erst danach die - // ursprüngliche Übergangsregel wiederherstellen. + // Apply overrides with transitions disabled, then restore the author's transition + // rule. host.style.cssText = applied; host.style.setProperty("transition", "none"); computed.getPropertyValue("transition"); @@ -122,8 +122,8 @@ function readAuthoredStyles(host: HTMLElement): StyleReader { } /** - * Absolute Positionen beziehen sich auf die Innenfläche, die Geometrie auf die - * Rahmenfläche. Der negative Versatz gleicht die Rahmenbreite aus. + * Absolute positioning uses the padding box; geometry uses the border box. The + * negative offset compensates for the border width. */ function createLayer( marker: string, @@ -170,7 +170,7 @@ export function syncLayers( const shadows = parseBoxShadow(styles.getPropertyValue("box-shadow")); const geometry = { ...size, radius, smoothing, preserveSmoothing }; - // Leere HTML-Elemente erhalten ausschließlich einen Clip-Pfad. + // Void elements receive only a clip path. if (isVoidElement(host.tagName)) { host.style.setProperty("clip-path", createSquircleClipPath(geometry)); rememberApplied(host); @@ -180,8 +180,7 @@ export function syncLayers( clearLayers(host); rememberInline(host); - // Den Schnappschuss verwenden: Erneutes Lesen ohne Überschreibungen könnte Übergänge - // auslösen. + // Use the snapshot: reading again without overrides could trigger transitions. if (styles.getPropertyValue("position") === "static") { host.style.setProperty("position", "relative"); } @@ -191,12 +190,12 @@ export function syncLayers( for (const shadow of shadows) { const width = size.width + shadow.spread * 2; const height = size.height + shadow.spread * 2; - // Stark negative Ausbreitung kann den Schatten vollständig aufbrauchen. + // A sufficiently negative spread can consume the entire shadow. if (width <= 0 || height <= 0) continue; const layer = createLayer(SHADOW, -3, border.width); layer.style.transform = `translate(${shadow.offsetX}px, ${shadow.offsetY}px)`; - // blur() erwartet die Standardabweichung, box-shadow deren doppelten Wert. + // blur() uses the standard deviation; box-shadow uses twice that value. layer.style.filter = `blur(${shadow.blur / 2}px)`; const shape = document.createElement("span"); @@ -214,7 +213,7 @@ export function syncLayers( host.append(layer); } - // Den ursprünglichen Schatten erst nach erfolgreichem Zeichnen unterdrücken. + // Suppress the original outer shadows after processing their replacement shapes. if (shadows.length > 0) { host.style.setProperty("box-shadow", "none"); } @@ -239,8 +238,8 @@ export function syncLayers( stroke.setAttribute("focusable", "false"); stroke.setAttribute("preserveAspectRatio", "none"); stroke.setAttribute("viewBox", `0 0 ${size.width} ${size.height}`); - // Die Korrektur der Rahmenfläche als explizite Größe; SVG verwendet sonst seine - // intrinsische Größe. + // Express the border-box correction as an explicit size; otherwise SVG uses its + // intrinsic size. const outset = `calc(100% + ${border.width * 2}px)`; stroke.style.cssText = `position:absolute;left:${-border.width}px;top:${-border.width}px;z-index:-1;width:${outset};height:${outset};overflow:visible;pointer-events:none;display:block;`; @@ -258,7 +257,7 @@ export function syncLayers( stroke.append(path); host.append(stroke); - // Die transparente Kontur erhält die Abmessungen und verhindert Layoutsprünge. + // A transparent border preserves dimensions and prevents layout shifts. host.style.setProperty("border-color", "transparent"); } diff --git a/src/dom/observe-size.ts b/src/dom/observe-size.ts index c48fb5c..1aea34c 100644 --- a/src/dom/observe-size.ts +++ b/src/dom/observe-size.ts @@ -4,7 +4,7 @@ function round(value: number): number { return Math.round(value * 64) / 64; } -/** Liest physische Maße, auch bei vertikaler oder seitlicher Schreibrichtung. */ +/** Reads physical dimensions, including vertical and sideways writing modes. */ export function readBorderBox(entry: ResizeObserverEntry): ElementSize | null { const sizes = entry.borderBoxSize as | ResizeObserverSize @@ -20,7 +20,10 @@ export function readBorderBox(entry: ResizeObserverEntry): ElementSize | null { }; } -/** Gemeinsame Größenmessung für DOM und React; ohne Observer bei Fensteränderungen. */ +/** + * Shared DOM and React measurement, with window resize updates when no observer is + * available. + */ export function observeElementSize( element: Element, update: (size: ElementSize) => void, diff --git a/src/dom/void-elements.ts b/src/dom/void-elements.ts index 132b804..c8c7b93 100644 --- a/src/dom/void-elements.ts +++ b/src/dom/void-elements.ts @@ -15,8 +15,8 @@ const VOID_ELEMENTS = new Set([ ]); /** - * Leere HTML-Elemente können keine Ebenen aufnehmen. Ihr Clip-Pfad beschneidet auch - * Kontur und Schatten. + * Void HTML elements cannot contain layers. Their clip path also clips their border + * and shadow. */ export function isVoidElement(tag: string): boolean { return VOID_ELEMENTS.has(tag.toLowerCase()); diff --git a/src/geometry.ts b/src/geometry.ts index 9de006a..ef0f40a 100644 --- a/src/geometry.ts +++ b/src/geometry.ts @@ -12,18 +12,21 @@ export type SquirclePathOptions = Readonly<{ height: number; radius?: SquircleRadius; /** - * Eckenglättung nach Figma von 0 bis 1: 0 ergibt Kreisbögen, 1 vollständig geglättete - * Übergänge. + * Figma corner smoothing from 0 to 1: 0 uses circular arcs; 1 uses fully smoothed + * transitions. */ smoothing?: number; - /** Erhält die Glättung bei wenig Platz. Standardmäßig wird sie wie in Figma begrenzt. */ + /** + * Preserves smoothing when a corner runs out of room. By default, smoothing is + * constrained as in Figma. + */ preserveSmoothing?: boolean; /** - * Versetzt den Pfad nach innen und verkleinert die Radien entsprechend. Eine halbe - * Konturbreite hält die SVG-Kontur innerhalb der Fläche. + * Insets the path and reduces the radii by the same amount. Half a stroke width + * keeps the SVG stroke inside the box. */ inset?: number; - /** Anzahl der Nachkommastellen im erzeugten SVG-Pfad. */ + /** Decimal places used in the generated SVG path. */ precision?: number; }>; @@ -48,7 +51,7 @@ const DEFAULT_RADII: SquircleCornerRadii = { function assertFinite(name: string, value: number): void { if (!Number.isFinite(value)) { - throw new TypeError(`${name} muss eine endliche Zahl sein`); + throw new TypeError(`${name} must be a finite number`); } } @@ -104,8 +107,8 @@ function insetRadii( } /** - * Verteilt den Platz beider Nachbarseiten deterministisch und symmetrisch. Benachbarte - * Ecken überlappen dadurch nie. + * Allocates each corner a deterministic, symmetric share of its adjacent sides, + * preventing neighboring corners from overlapping. */ function getCornerBudgets( width: number, @@ -275,9 +278,8 @@ function topLeft(curve: CornerCurve, number: (value: number) => string) { } /** - * Erzeugt einen kompakten SVG-Pfad mit Eckenglättung nach Figmas Bézier-Konstruktion. - * Eingaben werden geprüft, Radien pro Ecke unterstützt und Konturen bei Bedarf nach - * innen versetzt. + * Creates a compact SVG path using Figma's cubic Bézier construction, with input + * validation, per-corner radii, and optional stroke insetting. */ export function createSquirclePath({ width, @@ -295,7 +297,7 @@ export function createSquirclePath({ assertFinite("precision", precision); if (width < 0 || height < 0) { - throw new RangeError("width und height dürfen nicht negativ sein"); + throw new RangeError("width and height must be zero or greater"); } if (width === 0 || height === 0) { diff --git a/src/react/squircle.tsx b/src/react/squircle.tsx index 35719ae..2938399 100644 --- a/src/react/squircle.tsx +++ b/src/react/squircle.tsx @@ -23,14 +23,14 @@ type PolymorphicRef = type SquircleOwnProps = { as?: ElementType; children?: ReactNode; - /** Überschreibt den CSS-Wert `border-radius`. */ + /** Overrides the element's CSS border-radius. */ radius?: SquircleRadius; - /** Überschreibt den CSS-Wert `--squircle-smoothing`. */ + /** Overrides the element's CSS --squircle-smoothing. */ smoothing?: number; preserveSmoothing?: boolean; /** - * Beschneidet zusätzlich die Kinder. Bei Bedienelementen mit außenliegender - * Fokusmarkierung deaktiviert lassen. + * Also clips children. Leave disabled on controls with focus outlines outside the + * shape. */ clipContent?: boolean; }; @@ -81,8 +81,8 @@ function SquircleImplementation( return element ? applySquircle(element, options) : undefined; }, [Element, options]); - // Die Ebenen entstehen außerhalb von React. Zwei Argumente für createElement - // verhindern das children-Attribut bei leeren HTML-Elementen. + // Layers are managed outside React. Two createElement arguments omit children on + // void HTML elements. const hostProps = { ref, ...elementProps }; return typeof Element === "string" && isVoidElement(Element) diff --git a/src/react/use-squircle-clip-path.ts b/src/react/use-squircle-clip-path.ts index bd2033e..ab7636c 100644 --- a/src/react/use-squircle-clip-path.ts +++ b/src/react/use-squircle-clip-path.ts @@ -17,7 +17,7 @@ export type SquircleClipPathResult = Readonly<{ ready: boolean; }>; -/** Liefert den CSS-Clip-Pfad für die gemessene Fläche einer eigenen Komponente. */ +/** Returns a CSS clip path for the measured box of a custom component. */ export function useSquircleClipPath( ref: RefObject, options: UseSquircleClipPathOptions = {}, diff --git a/src/svelte/index.ts b/src/svelte/index.ts index 157a74a..4cd2269 100644 --- a/src/svelte/index.ts +++ b/src/svelte/index.ts @@ -3,7 +3,7 @@ import type { SquircleGeometryOptions } from "../dom/layers.js"; export type { SquircleGeometryOptions }; -/** Svelte-Action mit CSS-Vorgaben, reaktiven Optionen und automatischem Aufräumen. */ +/** Svelte action with CSS defaults, reactive options, and automatic cleanup. */ export function squircle( element: HTMLElement, options: SquircleGeometryOptions = {}, diff --git a/test/clip-path.test.mjs b/test/clip-path.test.mjs index 4ba9a7e..ce14f14 100644 --- a/test/clip-path.test.mjs +++ b/test/clip-path.test.mjs @@ -2,7 +2,7 @@ import assert from "node:assert/strict"; import test from "node:test"; import { createSquircleClipPath } from "../dist/index.js"; -test("verpackt den Pfad als CSS-Wert", () => { +test("wraps a path in a CSS path() value", () => { const value = createSquircleClipPath({ width: 120, height: 48, @@ -14,12 +14,12 @@ test("verpackt den Pfad als CSS-Wert", () => { assert.ok(value.endsWith(" Z')"), value); }); -test("liefert bei leeren Flächen den gültigen CSS-Wert none", () => { +test("returns none for a degenerate box so the CSS value stays valid", () => { assert.equal(createSquircleClipPath({ width: 0, height: 48 }), "none"); assert.equal(createSquircleClipPath({ width: 120, height: 0 }), "none"); }); -test("reicht Optionen an die Geometrie weiter", () => { +test("passes options through to the geometry", () => { const inset = createSquircleClipPath({ width: 120, height: 48, diff --git a/test/css.test.mjs b/test/css.test.mjs index 2f65bdd..2964405 100644 --- a/test/css.test.mjs +++ b/test/css.test.mjs @@ -9,14 +9,14 @@ import { } from "../dist/css/index.js"; import { isVoidElement } from "../dist/dom/index.js"; -/** Minimaler Ersatz für CSSStyleDeclaration. */ +/** Minimal stand-in for CSSStyleDeclaration. */ function styles(values) { return { getPropertyValue: (property) => values[property] ?? "", }; } -test("liest vier Eckradien in Pixeln", () => { +test("reads four pixel corners", () => { const radii = resolveRadiusFromComputed( styles({ "border-top-left-radius": "12px", @@ -35,17 +35,17 @@ test("liest vier Eckradien in Pixeln", () => { }); }); -test("löst Prozentwerte anhand der kürzeren Achse auf", () => { +test("resolves percentages against the shorter axis", () => { const radii = resolveRadiusFromComputed( styles({ "border-top-left-radius": "50%" }), { width: 200, height: 100 }, ); - // 50 % von 200 ergeben horizontal 100, vertikal 50. Der Kreis muss in beide Achsen passen. + // 50% of 200 is 100 horizontally and 50 vertically; the circle must fit both. assert.equal(radii.topLeft, 50); }); -test("verwendet den einbeschriebenen Kreis elliptischer Ecken", () => { +test("takes the inscribed circle of an elliptical corner", () => { const radii = resolveRadiusFromComputed( styles({ "border-top-left-radius": "40px 10px" }), { width: 200, height: 100 }, @@ -54,7 +54,7 @@ test("verwendet den einbeschriebenen Kreis elliptischer Ecken", () => { assert.equal(radii.topLeft, 10); }); -test("behandelt fehlende und unlesbare Werte als null", () => { +test("treats missing and unparseable values as zero", () => { const radii = resolveRadiusFromComputed(styles({}), { width: 200, height: 100, @@ -68,14 +68,14 @@ test("behandelt fehlende und unlesbare Werte als null", () => { }); }); -test("glättet standardmäßig vollständig ohne Erhaltungszwang", () => { +test("defaults smoothing to full and preserve to off", () => { assert.deepEqual(resolveSmoothingFromComputed(styles({})), { smoothing: 1, preserveSmoothing: false, }); }); -test("liest Glättung und Erhaltung aus CSS-Variablen", () => { +test("reads smoothing and preserve from custom properties", () => { assert.deepEqual( resolveSmoothingFromComputed( styles({ @@ -87,7 +87,7 @@ test("liest Glättung und Erhaltung aus CSS-Variablen", () => { ); }); -test("begrenzt die Glättung auf den gültigen Bereich", () => { +test("clamps smoothing into the supported range", () => { assert.equal( resolveSmoothingFromComputed(styles({ "--squircle-smoothing": "5" })) .smoothing, @@ -100,12 +100,12 @@ test("begrenzt die Glättung auf den gültigen Bereich", () => { ); }); -test("liefert bei none keine Schatten", () => { +test("returns nothing for none", () => { assert.deepEqual(parseBoxShadow("none"), []); assert.deepEqual(parseBoxShadow(""), []); }); -test("liest einen Schatten mit vier Längen", () => { +test("parses a single shadow with all four lengths", () => { assert.deepEqual(parseBoxShadow("rgba(0, 0, 0, 0.15) 0px 4px 12px 2px"), [ { color: "rgba(0, 0, 0, 0.15)", @@ -117,13 +117,13 @@ test("liest einen Schatten mit vier Längen", () => { ]); }); -test("ergänzt fehlende Unschärfe und Ausbreitung", () => { +test("defaults blur and spread when omitted", () => { assert.deepEqual(parseBoxShadow("rgb(0, 0, 0) 1px 2px"), [ { color: "rgb(0, 0, 0)", offsetX: 1, offsetY: 2, blur: 0, spread: 0 }, ]); }); -test("trennt Schatten ohne Farbfunktionen zu zerlegen", () => { +test("splits multiple shadows without breaking on colour commas", () => { const shadows = parseBoxShadow( "rgba(0, 0, 0, 0.1) 0px 1px 2px 0px, rgba(0, 0, 0, 0.2) 0px 8px 24px -4px", ); @@ -134,7 +134,7 @@ test("trennt Schatten ohne Farbfunktionen zu zerlegen", () => { assert.equal(shadows[1].spread, -4); }); -test("überspringt innere Schatten", () => { +test("skips inset shadows", () => { const shadows = parseBoxShadow( "rgb(0, 0, 0) 0px 2px 4px 0px inset, rgb(255, 0, 0) 0px 3px 6px 0px", ); @@ -143,13 +143,13 @@ test("überspringt innere Schatten", () => { assert.equal(shadows[0].color, "rgb(255, 0, 0)"); }); -test("verarbeitet negative Versätze", () => { +test("handles negative offsets", () => { assert.deepEqual(parseBoxShadow("rgb(0, 0, 0) -2px -4px 8px 0px"), [ { color: "rgb(0, 0, 0)", offsetX: -2, offsetY: -4, blur: 8, spread: 0 }, ]); }); -test("erhält moderne CSS-Farbfunktionen in Schatten", () => { +test("preserves modern CSS color functions in shadows", () => { for (const color of [ "oklch(40% 0.05 270 / 0.2)", "color(display-p3 0.2 0.3 0.4 / 0.5)", @@ -162,13 +162,13 @@ test("erhält moderne CSS-Farbfunktionen in Schatten", () => { } }); -test("liest Schatten auch mit nachgestellter Farbe und ohne Farbangabe", () => { +test("reads shadows with trailing colors or without a color", () => { assert.equal(parseBoxShadow("1px 2px 4px oklch(40% 0 0)")[0].color, "oklch(40% 0 0)"); assert.equal(parseBoxShadow("1px 2px")[0].color, "currentColor"); - assert.deepEqual(parseBoxShadow("unlesbar"), []); + assert.deepEqual(parseBoxShadow("unreadable"), []); }); -test("liest eine durchgezogene Kontur", () => { +test("reads a solid border", () => { assert.deepEqual( readBorderFromComputed( styles({ @@ -181,7 +181,7 @@ test("liest eine durchgezogene Kontur", () => { ); }); -test("zeichnet keine nicht unterstützten Konturstile", () => { +test("reports no border for unsupported styles", () => { for (const style of ["none", "dashed", "dotted", "double"]) { assert.deepEqual( readBorderFromComputed( @@ -197,7 +197,7 @@ test("zeichnet keine nicht unterstützten Konturstile", () => { } }); -test("zeichnet bei Breite null keine Kontur", () => { +test("reports no border for a zero width", () => { assert.equal( readBorderFromComputed( styles({ "border-top-width": "0px", "border-top-style": "solid" }), @@ -206,7 +206,7 @@ test("zeichnet bei Breite null keine Kontur", () => { ); }); -test("kopiert Hintergrundeigenschaften und Übergänge", () => { +test("copies the background longhands and the transition", () => { assert.deepEqual( readSurfaceFromComputed( styles({ @@ -229,7 +229,7 @@ test("kopiert Hintergrundeigenschaften und Übergänge", () => { ); }); -test("nutzt transparente Vorgaben für ungestaltete Elemente", () => { +test("falls back to transparent and none for a bare element", () => { assert.deepEqual(readSurfaceFromComputed(styles({})), { backgroundColor: "transparent", backgroundImage: "none", @@ -240,13 +240,13 @@ test("nutzt transparente Vorgaben für ungestaltete Elemente", () => { }); }); -test("erkennt leere HTML-Elemente", () => { +test("recognises void elements", () => { for (const tag of ["img", "input", "br", "hr", "IMG", "INPUT"]) { assert.equal(isVoidElement(tag), true, tag); } }); -test("behandelt Container als nicht leer", () => { +test("does not treat container elements as void", () => { for (const tag of ["div", "button", "a", "span", "section"]) { assert.equal(isVoidElement(tag), false, tag); } diff --git a/test/geometry.test.mjs b/test/geometry.test.mjs index 6693b23..5b20496 100644 --- a/test/geometry.test.mjs +++ b/test/geometry.test.mjs @@ -2,14 +2,14 @@ import assert from "node:assert/strict"; import test from "node:test"; import { createSquirclePath, resolveSquircleRadii } from "../dist/index.js"; -test("erzeugt bei Radius null ein Rechteck", () => { +test("creates a plain rectangle when the radius is zero", () => { assert.equal( createSquirclePath({ width: 100, height: 48 }), "M 100 0 L 100 48 L 0 48 L 0 0 Z", ); }); -test("erzeugt einen stabilen vollständig geglätteten Pfad", () => { +test("creates a stable fully smoothed button path", () => { assert.equal( createSquirclePath({ width: 120, @@ -21,7 +21,7 @@ test("erzeugt einen stabilen vollständig geglätteten Pfad", () => { ); }); -test("hält eine 1-Pixel-Kontur innerhalb der Fläche", () => { +test("keeps a one-pixel SVG stroke fully inside the box", () => { const path = createSquirclePath({ width: 120, height: 48, @@ -36,7 +36,7 @@ test("hält eine 1-Pixel-Kontur innerhalb der Fläche", () => { assert.match(path, / L 0\.5 15\.5 /); }); -test("normalisiert einzelne Ecken ohne Überlappung", () => { +test("normalizes individual corners without overlap", () => { const path = createSquirclePath({ width: 60, height: 40, @@ -54,7 +54,7 @@ test("normalisiert einzelne Ecken ohne Überlappung", () => { assert.ok(!path.includes("Infinity")); }); -test("begrenzt die Glättung und negative Radien", () => { +test("clamps smoothing and negative radii", () => { assert.equal( createSquirclePath({ width: 100, @@ -66,22 +66,22 @@ test("begrenzt die Glättung und negative Radien", () => { ); }); -test("liefert einen leeren Pfad für eine leere Fläche", () => { +test("returns an empty path for a zero-sized box", () => { assert.equal(createSquirclePath({ width: 0, height: 48, radius: 8 }), ""); }); -test("weist ungültige Zahlen zurück", () => { +test("rejects invalid numeric input", () => { assert.throws( () => createSquirclePath({ width: Number.NaN, height: 48 }), - /width muss eine endliche Zahl sein/, + /width must be a finite number/, ); assert.throws( () => createSquirclePath({ width: -1, height: 48 }), - /nicht negativ/, + /zero or greater/, ); }); -test("löst einheitliche und individuelle Radien auf", () => { +test("resolves shorthand and per-corner radii", () => { assert.deepEqual(resolveSquircleRadii(8), { topLeft: 8, topRight: 8, @@ -96,7 +96,7 @@ test("löst einheitliche und individuelle Radien auf", () => { }); }); -test("bleibt bei wechselnden Maßen und begrenztem Eckraum endlich", () => { +test("stays finite across responsive sizes and corner budgets", () => { for (let index = 1; index <= 500; index += 1) { const width = 24 + ((index * 37) % 320) + (index % 3) / 3; const height = 20 + ((index * 19) % 140) + (index % 5) / 5; diff --git a/test/react.test.mjs b/test/react.test.mjs index 04ad970..8ec3fb9 100644 --- a/test/react.test.mjs +++ b/test/react.test.mjs @@ -4,32 +4,32 @@ import { createElement } from "react"; import { renderToStaticMarkup } from "react-dom/server"; import { Squircle, SquircleSurface } from "../dist/react/index.js"; -test("rendert das semantische Element ohne zusätzliche Hülle", () => { +test("renders the semantic host and nothing else", () => { const html = renderToStaticMarkup( createElement( Squircle, { as: "button", type: "button", radius: 8, className: "button" }, - "Mehr erfahren", + "Learn more", ), ); assert.equal( html, - '', + '', ); }); -test("unterstützt leere HTML-Elemente", () => { +test("does not crash on a void element", () => { const html = renderToStaticMarkup( - createElement(Squircle, { as: "img", src: "/a.jpg", alt: "Ein Bild" }), + createElement(Squircle, { as: "img", src: "/a.jpg", alt: "A picture" }), ); - // React 19 ergänzt einen Ladehinweis für Bilder; hier zählt nur das Bildelement. - assert.match(html, /Ein Bild/); + // React 19 also emits an image preload link; only the image element matters here. + assert.match(html, /A picture/); assert.doesNotMatch(html, /]*>[^<]/); }); -test("reicht übergebene Stile unverändert weiter", () => { +test("passes the caller's style through untouched", () => { const html = renderToStaticMarkup( createElement(Squircle, { as: "div", @@ -40,7 +40,7 @@ test("reicht übergebene Stile unverändert weiter", () => { assert.match(html, /style="padding:12px"/); }); -test("rendert auf dem Server eine deterministische SVG-Fläche mit festen Maßen", () => { +test("renders a deterministic fixed-size SVG surface on the server", () => { const html = renderToStaticMarkup( createElement(SquircleSurface, { width: 120, diff --git a/test/size.test.mjs b/test/size.test.mjs index ac99dc0..3cbf7f8 100644 --- a/test/size.test.mjs +++ b/test/size.test.mjs @@ -2,7 +2,7 @@ import assert from "node:assert/strict"; import test from "node:test"; import { readBorderBox } from "../dist/dom/observe-size.js"; -test("verarbeitet ältere Observer mit einem einzelnen Größenobjekt", () => { +test("handles older observers with a single size object", () => { const original = globalThis.getComputedStyle; globalThis.getComputedStyle = (element) => ({ writingMode: element.mode }); try { @@ -22,7 +22,7 @@ test("verarbeitet ältere Observer mit einem einzelnen Größenobjekt", () => { } }); -test("fehlende Border-Box-Daten erlauben die Ersatzmessung", () => { +test("missing border-box data allows fallback measurement", () => { assert.equal(readBorderBox({ borderBoxSize: undefined }), null); assert.equal(readBorderBox({ borderBoxSize: [] }), null); }); diff --git a/type-tests/react-api.tsx b/type-tests/react-api.tsx index 2ca9e45..462cd11 100644 --- a/type-tests/react-api.tsx +++ b/type-tests/react-api.tsx @@ -14,25 +14,25 @@ const CustomLink = forwardRef< const button = ( - Absenden + Submit ); -const image = ; +const image = ; const link = ( - Kontakt + Contact ); type InferredButtonProps = ComponentPropsWithoutRef; const defaultProps: InferredButtonProps = { radius: 12 }; -// @ts-expect-error Die Gestaltung erfolgt per CSS. +// @ts-expect-error Paint is expressed in CSS, not in props. const invalidPaint = ; -// @ts-expect-error Native Schaltflächen unterstützen kein href. +// @ts-expect-error A native button does not accept href. const invalidButton = ; void button;

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