Repository navigation
Cut 0.13.0, so the folding Panel, the stripes and filling steppers go out - #68
Merged
Merged
Conversation
.github/FUNDING.yml names FourCourtJester on GitHub Sponsors and fourcourtjester on Ko-fi. GitHub reads it from the default branch only, so the button appears once this is on main and Sponsorships is ticked under Settings > General > Features. Checked: prettier and lint pass. Not checked: either link resolves -- this environment cannot reach ko-fi.com or github.com/sponsors -- and the button itself, which only shows once this is merged. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01TFGhv32jx1vxD7qxaMoFxU
…e it templates/studio/.github/FUNDING.yml and templates/plugin/.github/FUNDING.yml are the same file as the repository's own. They have to live here rather than be pushed to the mirrors: a sync deletes everything in a mirror but .git and copies the template across, so a file added there directly is gone at the next one. The demo is left without, as asked. A project started from a template inherits the file, and with it a Sponsor button pointing at Single Studio. Each README now says to delete it or point it at your own accounts: the studio's beside its note about LICENSE, the plugin's as step 4 of building your own. Checked: lint passes; verify:template builds both templates and the demo against packed packages. Not checked: the mirrors themselves, which sync on merge; the links, which this environment cannot reach. Prettier flags templates/plugin/README.md, as it did before this change. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01TFGhv32jx1vxD7qxaMoFxU
The mirror job failed for both templates on #65, the first push that ever reached its install step: setup-node@v5 "Unable to locate executable file: pnpm". v5 turns on a package-manager cache by itself whenever the checked-out package.json has a "packageManager", and the root one names pnpm, which this job never installs -- it installs the mirror's copy with npm, from npm. Its only two runs before were the merge that added it, where nothing changed, and #63, which changed packages/ and so was left to the release. So the step had never run. package-manager-cache: false is setup-node's own switch for that (checked in its v5 action.yml: "Set to false to disable automatic caching based on the package manager field in package.json"). Nothing was pushed by the failed run, so the template repositories are still on their v0.12.0 sync. Checked: prettier and lint pass. Not checked: the job itself, which can only run on GitHub. This change touches only .github, so merging it does not mirror anything; Run workflow on the Mirror workflow, on main, is what will carry #65's FUNDING.yml across and prove the fix. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01TFGhv32jx1vxD7qxaMoFxU
docs/internal/next.md gets a "Raise these first" section, for what the owner wants reminding of at the top of any "where are we at": - a right-aligned toolbar on a Panel's title line, for extra components, with the three questions to settle before building it; - Sequence in a real OBS, which 0.12.0 shipped without. AGENTS.md is what every session reads first, so it now says to start from next.md, and that section, when asked where things stand. Without that the note would only be found by somebody already looking for it. Checked: lint passes. Prettier flags next.md, as it did before this change (two *emphasis* spans and a table, all older than this section). Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01TFGhv32jx1vxD7qxaMoFxU
A time input's clock icon is Chrome's to draw, and it draws it dark unless the page declares a dark theme, so on the board it all but disappeared. A studio fixed it with color-scheme: dark on its board in its own index.css, and found it also darkens the time picker's popup, the menus behind Select and the scrollbars. Every board is dark, so the line belongs in core's base.css, scoped to .ss-control as the board's cursors are, where it cannot reach a graphic. Queued, not done. The toolbar entry is renamed to the owner's word for it: an actions slot. Checked: lint passes. Not checked: anything in a browser; this only records the finding. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01TFGhv32jx1vxD7qxaMoFxU
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01TFGhv32jx1vxD7qxaMoFxU
…at built one SS-Mercy-Riftbound-2v2 built a collapsible Panel with header actions in its own src/control, because core's Panel has nothing beside its title. Its notes go into next.md so core can take it over rather than rediscover it: - the behaviour: everything starts folded on every load, and the fold is component state only -- not the show, which would fold every operator's board, and not localStorage, so a reload is always the same board; - the markup: the button inside the h2, not the other way round; - what bit: .ss-panel-body's display: flex beats the hidden attribute, and a grid of panels needs items-start; - the API it asks for: collapsible, defaultOpen, exported useCollapsed and Chevron, an actions slot, and size="sm" on the four header buttons, none of which has a size today. It replaces the earlier actions-slot entry in "Raise these first", which now points here. Checked: lint passes. Not checked: the hidden-attribute finding, which is the studio's. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01TFGhv32jx1vxD7qxaMoFxU
Two things a studio (SS-Mercy-Riftbound-2v2) built for itself because core's
Panel had nothing beside its title:
- `actions`: anything at all, right-aligned on the title line, or a function
given `{ open }` that returns it. They stay in the header and work while the
panel is folded, and in a slim dock take a line of their own under the
title rather than squeezing it.
- `collapsible`: the title becomes a button that folds the body away. A
collapsible panel starts folded on every load; `defaultOpen` starts one
open. The fold is component state only -- not the show, which would fold
every operator's board, and not storage, so a reload is the same board.
The body is hidden, not unmounted, so a draft in a folded panel survives.
Off unless asked for, so every existing panel renders as before, except that
its title now sits in a `.ss-panel-header` line. With no title, actions keep
their line and a collapsible panel gets a chevron of its own, named "Fold
panel" / "Open panel"; with nothing for a header to hold there is none. The
button sits inside the h2, never the reverse. `chevron` joins Icon.
Cross-checked against the studio's own Panel and collapse.jsx, and took its
header element and its larger title hit area. Not taken: its Tailwind
`hidden` class on the body. Its notes say `.ss-panel-body`'s display: flex
beats the hidden attribute, but Tailwind's preflight, which every studio
imports, has `[hidden] { display: none !important }`: a `[hidden]` rule
written into base.css for it changed nothing (the folded body measured 0px
tall without it), so it was taken out again rather than kept as code
nothing can catch.
Thirteen e2e checks, in their own section near the end. Placed after Rows
first, they wedged the asset library's folder upload a hundred lines later --
the stall AGENTS.md describes -- and moved, everything passed. Negative-tested
with nine breaks, each turning its check red: body not hidden; body unmounted
while folded; function actions not given the fold; a header with nothing in it;
collapsible by default; defaultOpen ignored; a header that does not wrap; a
header that toggles on any press inside it; a fold remembered in localStorage.
Docs: getting-started's Panel row and a paragraph with an example,
CHANGELOG Unreleased, api.md regenerated, and next.md now says what is built
and what the studio still wants: size="sm" on header buttons, useCollapsed and
Chevron exported for folding cards, and zebra striping.
Checked: test (core 603, every package passes), lint, typecheck,
verify:template, docs:build, and e2e 306 of 306 against a fresh build. Not
checked: in OBS's own browser, or in the studio itself, which still uses its
own Panel.
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01TFGhv32jx1vxD7qxaMoFxU
… buttons Four things from SS-Mercy-Riftbound-2v2 that every studio should have without writing them: - Striped panels, by default. Every other panel is a shade lighter, so a long board reads as blocks rather than one slab. The studio's own rule and colours: rgb(15 23 42 / 0.4) and rgb(30 41 59 / 0.7). The background moved from a class on the element into base.css, because the count -- nth-of-type among sibling panels -- can only be made in CSS; in the components layer, so a bg-* on one panel or a studio's own rule still wins. A panel wrapped in a <div> of its own never counts as even; documented rather than worked around. - color-scheme: dark on .ss-control. Chrome draws a time input's clock icon, its picker, a select's list and scrollbars in the page's scheme, and on the board they were black on slate. On the board only; a graphic stays normal. - size="sm" on Confirm, ResetButton, SwapButton and Toggle, for a button in a panel's header: text-xs, smaller padding, off the Row's input line, and a min-h-6 floor so it is never under the 24px pointer target WCAG 2.5.8 asks for. Replaces the studio's `min-h-0! px-2.5! py-1! text-xs!`, which had no floor. Measured: 24 or 26px against 40px on a row, 12px text. - useCollapsed and Chevron, exported from @single-studio/core/control, so a card folds the way a Panel does. Panel is now built on them, and both are in the API reference's list. Seven e2e checks, all near the end, and the small buttons mount only when those checks ask: mounted from the start, they gave earlier checks that find the board's one swap by class three to choose from. Negative-tested, each check red when broken for it: stripes removed; the scheme normal; the scheme on :root, reaching graphics; Toggle ignoring size; a confirming Reset not passing size on; the small size under 24px; useCollapsed starting open; the chevron never turning. Removing the min-h-6 floor at first changed nothing, because the padding alone makes 24px, so the fixture now squeezes one button's padding to zero and the floor is what holds it at 24. Checked: test (core 603, every package passes), lint, typecheck, verify:template, docs:build, and e2e 313 of 313 against a fresh build. The useCollapsed doc comment was reworded after that run; nothing else changed. Not checked: OBS's own browser, or the studio itself, which still uses its own Panel and CSS until core is released. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01TFGhv32jx1vxD7qxaMoFxU
…nels A stepper's number field stopped at 4rem, so a stepper was 160px in any cell and the rest of the cell sat empty -- the negative space at every breakpoint. Measured on the fixture: 170px of 330 in a 380px dock, 414px of 574 at 640px, 601px of 761 at 1600px. A stopwatch's readout did the same, up to 295px. Both now grow between their buttons (`grow`, not `flex-1`, so `w-16` is still the basis and a `col-auto` stepper keeps its own 160px). The same thing SS-Mercy-Riftbound-2v2's FillStepper did for itself, now for everyone. The demo, built against these packages: its two score steppers left 121-201px empty below 1024px on 0.12.0 and leave nothing now, measured at 380, 640, 800, 1024, 1280 and 1600px. Its panels are collapsible: the scoreboard starts open, the rest folded. Its Swap sides moved into the scoreboard's header at size="sm", where it works with the panel folded. The demo uses props 0.12.0 does not have, so it has to go out with the release; the mirror leaves a push that also changes packages/ to the release anyway. Nine e2e checks at 380, 800 and 1280px: every stepper on a Row reaches its cell's edge, so does a stopwatch, and a col-auto stepper is 160px. Negative- tested: the field not growing, the readout not growing, and the field sized to its cell (which loses col-auto its width) each turned their checks red. Checked: test (core 603, every package passes), lint, typecheck, verify:template, docs:build, and e2e 322 of 322 against a fresh build. Not checked: OBS's own browser. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01TFGhv32jx1vxD7qxaMoFxU
The API reference takes each component's opening paragraph, and the fill change only touched the markup and its comments, so docs/api.md still described a stepper as if it sat at 160px. One sentence in each opening paragraph, and api.md regenerated from the built types. Checked: lint, typecheck, test (core 603, every package passes), and `api-reference.mjs --check` says api.md matches the shipped types. Not run: e2e, since only doc comments changed; it passed, 322 of 322, on a3d3e31. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01TFGhv32jx1vxD7qxaMoFxU
… out Every published package moves to 0.13.0 together, as the release workflow requires: core, provider-supabase and the four plugins. The plugins' peer range on core, both templates and the demo move to ^0.13.0 -- in 0.x a caret on 0.12.0 does not reach 0.13.0, and the demo now uses collapsible, defaultOpen and size="sm", which 0.12.0 does not have. A minor: a board looks different after upgrading without asking -- every other panel lighter, a dark scheme for native pickers, steppers and stopwatches that fill their cell -- though no prop changes meaning and nothing is removed. The CHANGELOG's Unreleased section becomes 0.13.0, with a paragraph saying why it is a minor. next.md's first reminder becomes moving SS-Mercy-Riftbound-2v2 onto it. Checked: `pnpm install --frozen-lockfile` needs no lockfile change. test (core 603, every package passes), lint and typecheck pass. verify:template packs the 0.13.0 tarballs and builds both templates and the demo against them. docs:build passes. Not run: the end-to-end suite, since nothing the fixture loads changed but version numbers; it passed, 322 of 322, on #67's code. Not checked: the publish itself, which happens on the tag. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01TFGhv32jx1vxD7qxaMoFxU
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.
Every published package moves to 0.13.0 together, so #67 goes out on npm: the folding
Panelwith header actions, striped panels,color-scheme: darkon the board,size="sm"header buttons,useCollapsedandChevron, and steppers and stopwatches that fill their cell.Changes
^0.13.0everywhere that names core: the plugins' peer range, both templates and the demo. The demo needs this one: it now usescollapsible,defaultOpenandsize="sm".docs/internal/next.md: the first reminder is now moving SS-Mercy-Riftbound-2v2 onto 0.13.0.Verified
pnpm install --frozen-lockfileneeds no lockfile change.verify:templatepacks the 0.13.0 tarballs and builds both templates and the demo against them.docs:build.Not run: the end-to-end suite. Nothing the fixture loads changed except version numbers, and it passed 322 of 322 on #67's code.
Not checked: the publish itself, which happens on the tag.
After merging: wait for CI on main, then tag the merge commit:
mirror.ymlskips this PR because it touchespackages/. The release updates the templates and the demo.Generated by Claude Code