From 20efce2404e8606489f1c6f9d239e3490a368a41 Mon Sep 17 00:00:00 2001 From: Sutu Sebastian Date: Fri, 17 Jul 2026 16:30:08 +0300 Subject: [PATCH 1/5] feat: add Alpine adapter at full matrix parity MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Ship @stainless-code/alpine-layers — plugin magics, x-layer-outlet, Rank-2 layerStack, Svelte-shaped hooks, CDN bootstrap, and docs/site parity. --- .agents/skills/docs-voice/SKILL.md | 2 +- .agents/skills/harden-pr/LEDGER.md | 3 + .changeset/alpine-adapter.md | 5 + .size-limit.json | 7 + README.md | 3 +- apps/docs/blume.config.ts | 2 +- apps/docs/content/adapters/alpine.mdx | 182 +++++ apps/docs/content/adapters/index.mdx | 35 +- apps/docs/content/adapters/meta.ts | 12 +- apps/docs/content/concepts/comparison.mdx | 194 ++--- apps/docs/content/concepts/glossary.mdx | 6 +- apps/docs/content/concepts/overview.mdx | 2 +- apps/docs/content/concepts/stability.mdx | 4 +- apps/docs/content/concepts/when-to-use.mdx | 26 +- apps/docs/content/examples/confirm-dialog.mdx | 51 +- .../content/guides/headless-rendering.mdx | 65 +- apps/docs/content/guides/install.mdx | 8 + apps/docs/content/guides/nested-overlays.mdx | 74 +- apps/docs/content/reference/adapter-hooks.mdx | 86 +- apps/docs/content/reference/api/index.mdx | 38 +- apps/docs/content/reference/core-api.mdx | 79 +- apps/docs/content/reference/index.mdx | 14 +- apps/docs/content/reference/migration.mdx | 12 +- apps/docs/content/reference/roadmap.mdx | 4 +- apps/docs/package.json | 1 + apps/docs/pages/_home/FrameworkTabs.astro | 21 +- apps/docs/pages/_home/Hero.astro | 2 +- apps/docs/pages/_home/UseCases.astro | 2 +- apps/docs/pages/_home/adapter-snippets.ts | 45 ++ apps/docs/public/icons/alpine.svg | 5 +- apps/docs/recipes/confirm-dialog/alpine.html | 49 ++ bun.lock | 31 +- docs/architecture.md | 26 +- docs/glossary.md | 6 +- docs/roadmap.md | 4 +- knip.json | 8 + packages/alpine/README.md | 75 ++ packages/alpine/package.json | 88 ++ packages/alpine/skills/alpine-layers/SKILL.md | 44 + packages/alpine/src/alpine-types.ts | 35 + packages/alpine/src/cdn.ts | 20 + packages/alpine/src/index.test.ts | 186 +++++ packages/alpine/src/index.ts | 753 ++++++++++++++++++ packages/alpine/src/layer-client.ts | 39 + packages/alpine/tests-dom/alpinejs.d.ts | 15 + packages/alpine/tests-dom/cdn.test.ts | 21 + packages/alpine/tests-dom/headless.test.ts | 75 ++ packages/alpine/tests-dom/inference.test-d.ts | 22 + packages/alpine/tests-dom/outlet.test.ts | 238 ++++++ packages/alpine/tsconfig.json | 4 + packages/alpine/tsdown.config.ts | 9 + packages/alpine/vitest.config.ts | 12 + 52 files changed, 2467 insertions(+), 283 deletions(-) create mode 100644 .changeset/alpine-adapter.md create mode 100644 apps/docs/content/adapters/alpine.mdx create mode 100644 apps/docs/recipes/confirm-dialog/alpine.html create mode 100644 packages/alpine/README.md create mode 100644 packages/alpine/package.json create mode 100644 packages/alpine/skills/alpine-layers/SKILL.md create mode 100644 packages/alpine/src/alpine-types.ts create mode 100644 packages/alpine/src/cdn.ts create mode 100644 packages/alpine/src/index.test.ts create mode 100644 packages/alpine/src/index.ts create mode 100644 packages/alpine/src/layer-client.ts create mode 100644 packages/alpine/tests-dom/alpinejs.d.ts create mode 100644 packages/alpine/tests-dom/cdn.test.ts create mode 100644 packages/alpine/tests-dom/headless.test.ts create mode 100644 packages/alpine/tests-dom/inference.test-d.ts create mode 100644 packages/alpine/tests-dom/outlet.test.ts create mode 100644 packages/alpine/tsconfig.json create mode 100644 packages/alpine/tsdown.config.ts create mode 100644 packages/alpine/vitest.config.ts diff --git a/.agents/skills/docs-voice/SKILL.md b/.agents/skills/docs-voice/SKILL.md index 282505d..e6ea098 100644 --- a/.agents/skills/docs-voice/SKILL.md +++ b/.agents/skills/docs-voice/SKILL.md @@ -34,7 +34,7 @@ was rejected) and the "when **not** to use it" anti-sell — keep both. `meta.ts` icons and tab icons stay. Nested brand groups (e.g. Svelte): icon on the group only — don't repeat the same SVG on indented children. - **Adapter list order:** core/vanilla → react → preact → solid → angular → - vue → lit → svelte (runes → store). Every multi-adapter listing. + vue → lit → alpine → svelte (runes → store). Every multi-adapter listing. ## Don't diff --git a/.agents/skills/harden-pr/LEDGER.md b/.agents/skills/harden-pr/LEDGER.md index 72fab88..05c104e 100644 --- a/.agents/skills/harden-pr/LEDGER.md +++ b/.agents/skills/harden-pr/LEDGER.md @@ -16,6 +16,9 @@ By-design or false-positive findings — do not re-raise. - **[public-api]** `packages/lit/src/index.ts` `layerClientContext` export — by-design; rationale on the const JSDoc. - **[public-api]** `packages/lit/src/index.ts` `StackController` `queued`/`deferClient`/`bindClient` — by-design; rationale on the class/ctor JSDoc (factories are the supported path). +- **[correctness]** `packages/alpine/src/index.ts` multi-child `x-layer-outlet` template — by-design; Alpine `