{{ message }}
Repository navigation
Conversation
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
This branch has not been deployed
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.

Changes
@astrojs/ui, an integration that lets components use plain TypeScript with signals bound to the DOM. It's progressive enhancement: the server renders HTML, and<script scoped>attaches to it. The aim is a small, framework-free model that's easy to write correctly, including for agents.<script scoped>runs once per component instance. Itsscope(selector)sees only that instance's markup: not sibling instances, not child component internals, but it does see content passed into a child's<slot>. It throws when nothing matches. The integration parses.astrosource with@astrojs/compiler-rsbefore compilation, wraps each instance and slot in comment markers, and turns the scoped script into a normal bundled script that registers with a small client runtime (~3.6 KB gzipped, includingalien-signals).signal()in frontmatter renders its value with a marker in{count}andvalue={count}. The client revives each signal once by id, so one signal passed to several components stays shared in the browser, with no script needed.valueandcheckedbindings are two-way.scope.list(container, template, row => item)adopts server-rendered rows and clones a<template>for new ones. Reordering and filtering use keyed reconciliation ported from zebra'sList.test/fixtures/cells): a 26 × 100 spreadsheet where each cell is a formulasignalplus acomputedvalue, with a formula engine shared by server and client so the first render has real values. About 6 KB gzipped of client JS.Open questions (instances added after load, row disposal, build-time selector checks) are listed in the package README.
Testing
linkedom), and list reconciliation.Docs