Skip to content

Unify the extensions collection toolbars - #1020

Open
brsbl wants to merge 3 commits into
mainfrom
bb/update-extensions-experiment-ui-thr_dj4xb4qppr
Open

Unify the extensions collection toolbars#1020
brsbl wants to merge 3 commits into
mainfrom
bb/update-extensions-experiment-ui-thr_dj4xb4qppr

Conversation

@brsbl

@brsbl brsbl commented Aug 5, 2026

Copy link
Copy Markdown
Collaborator

Plugins, Skills, and Automations had each grown their own filter and sort treatment. This pulls them onto one set of shared primitives.

Filters

  • Automations — the separate Projects and Status dropdowns become one grouped ResourceFilterMenu. Each group keeps its own state and handler, so filtering behavior is identical; only the affordance merges.
  • No more "All" row. An empty selection already means "no filter", so ResourceMultiSelectMenu loses allOptionLabel entirely rather than keeping dead API.
  • Installed plugins gain a Type filter (bb Official / User), mapping builtin/catalog → bb Official.
  • Plugins Browse — category pills move into the toolbar as a multi-select. The pill row ended 170px short of every other band; folding it in removes that ragged strip and gives Browse the same filter language as Installed.
  • Skills type labels renamed to bb Official and Included in plugin.

Control styling

Toolbar filter and sort keys are now siblings of the search input beside them — same 32px box, same --input border, same radius — instead of floating chips in a recessed track. Engaged uses the app's one selection surface, bg-state-active (the same CONTEXT_SELECTION_SURFACE_CLASS behind selected sidebar rows, active tab pills, and focused split panes). Icon buttons carry no resting fill, which let a hardcoded background come off ResourceTemplateBrowseCard.

Sort triggers are ArrowUpDown on all three pages; Automations previously swapped in a direction-flipping arrow.

Layout

Every band — description, tabs, toolbar, results, footer — carries the same pr-1 scrollbar gutter, so they share one content width. Previously the description was capped at max-w-2xl and inset px-1, and the toolbar ran 4px wider than the results.

The Automations prompt footer now sits inside the box while editing, matching read-only geometry; it used to float below on mt-1.

Behavior change worth flagging

The Skills library now opens unfiltered (142 skills) rather than pre-filtered to bb Official (3). That follows from "nothing selected means all types", but it is the one user-visible behavior change here.

Verification

  • turbo run test --filter=@bb/app — 312 files / 2347 tests pass
  • turbo run typecheck — clean for @bb/app, @bb/shared-ui, bb-plugin-automations
  • ESLint clean on changed files
  • Every page and state driven in the running app; light/dark states covered by a new control-weight story, and the Nord palette checked via bb theme set nord to confirm the --canvas/--ink-derived tokens tint correctly

🤖 Generated with Claude Code

brsbl and others added 2 commits August 4, 2026 23:50
Plugins, Skills, and Automations each grew their own filter and sort
treatment. Pull them onto one set of shared primitives:

- Merge the Automations project and status dropdowns into one grouped
  ResourceFilterMenu; filtering behavior is unchanged, only the control.
- Drop the explicit "All" row from the type filters. An empty selection
  already means "no filter", so ResourceMultiSelectMenu loses the prop.
- Add a type filter (bb Official / User) to installed plugins, and move
  Browse's category pills into the same toolbar as a multi-select.
- Rename the Skills type labels to "bb Official" and "Included in plugin".
- Render toolbar filter and sort keys as siblings of the search input --
  same 32px box, --input border, and radius -- with the app's one
  selection surface (bg-state-active) when engaged. Icon buttons carry no
  resting fill, which drops a hardcoded background on the template card.
- Give every band the same pr-1 scrollbar gutter so description, tabs,
  toolbar, and results share one content width.
- Keep the Automations prompt footer inside the box while editing so edit
  and read-only modes have identical geometry.

Note: the Skills library now opens unfiltered rather than pre-filtered to
bb Official, which follows from "nothing selected means all types".

Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
packages/plugin-registry/r/button.json is generated from shared-ui's
button, and CI's build-registry --check gates both typecheck and test.

Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>

@SawyerHood SawyerHood left a comment

Copy link
Copy Markdown
Collaborator

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

🚨 SLOP COP 🚨 · review

I am the SlopCop. I am reviewing this pull request under the review rule.

The stack contains only PR #1020. I found no later pull requests after the required second scan.

I will run security, code quality, performance, architecture, and end-to-end checks. I will post each phase result here.

@SawyerHood SawyerHood left a comment

Copy link
Copy Markdown
Collaborator

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

🚨 SLOP COP 🚨 · review

Security review complete. I found no security problem.

I checked text injection, plugin provenance labels, permission controls, filter state, and the generated button registry source. The changes do not alter authorization, requests, routes, storage, or the host protocol.

@SawyerHood SawyerHood left a comment

Copy link
Copy Markdown
Collaborator

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

🚨 SLOP COP 🚨 · review

Performance review complete. I found no user-visible performance defect.

The Skills page now searches more items because it opens without a source filter. Current work remains within one frame. A future search index could remove repeated string work if the library grows.

Pagination still limits the DOM. The new menu state stays local, and the new filter work occurs only after a user action.

@SawyerHood SawyerHood left a comment

Copy link
Copy Markdown
Collaborator

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

🚨 SLOP COP 🚨 · review

End-to-end review complete. I found no functional or visual defect in the tested paths.

I tested the Skills Type filter, the installed Plugins Type filter, the Browse Category filter, and the grouped Automations filter. I also inspected the Automations toolbar and open menu.

The app suite passed 2,347 tests. The Automations suite passed 58 tests. The App, Shared UI, and Automations type checks passed.

shared-ui's button is embedded in the plugin starter files, and
generate-templates --check gates both typecheck and test.

Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
);
}

/** The toolbar's recessed track, so engaged reads in its real context. */

Copy link
Copy Markdown
Collaborator

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

🚨 slopcop/review — Replace the removed toolbar track in this story.

This story still renders the recessed 28px track that this PR removes. The shipped keys use separate 32px outline buttons with an input border. Build the story from the real trigger classes so it checks the design that users receive.

const source = skillSourceFilterId(skill);
if (source !== null && !sourceFilters.includes(source)) {
if (
sourceFilters.length > 0 &&

Copy link
Copy Markdown
Collaborator

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

🚨 slopcop/review — Add a User source option before this filter excludes user skills.

Any selected Type now removes every user and project scope because skillSourceFilterId returns null for them. The menu only offers bb Official and Included in plugin. Add a User value and map all user-authored scopes to it.

icon: "h-9 w-9",
},
},
compoundVariants: [

Copy link
Copy Markdown
Collaborator

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

🚨 slopcop/review — Regenerate the plugin starter template.

This button source also feeds packages/templates/src/generated/plugin-starter-files.generated.ts. The current PR updates the registry output but not this second output. Both @bb/templates tests and type checks fail their generation check. Run node packages/templates/scripts/generate-templates.mjs and commit the result.

@SawyerHood SawyerHood left a comment

Copy link
Copy Markdown
Collaborator

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

🚨 SLOP COP 🚨 · review

Code-quality and architecture review complete. I found one blocking build defect and two user-facing consistency defects.

The plugin starter template is stale. Both @bb/templates tests and type checks fail. The Skills Type menu omits user-authored skills. The new control story still shows the removed toolbar track.

The new grouped menu centralizes the main toolbar structure. Its option toggle logic still duplicates ResourceMultiSelectMenu, so a shared helper can reduce future drift. The Browse empty state also still says “this category” after the move to multiple selections.

I posted three inline comments for the actionable changed lines.

@SawyerHood SawyerHood left a comment

Copy link
Copy Markdown
Collaborator

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

🚨 SLOP COP 🚨 · review

Final review result: changes are required, but I am leaving a comment-only review as instructed.

The current PR state still fails the @bb/templates generation check. Regenerate and commit packages/templates/src/generated/plugin-starter-files.generated.ts.

Please also add a User value to the Skills Type filter. Update the new control story to use the shipped 32px outline keys.

Security review found no problem. Performance review found no user-visible defect at the current scale. Browser tests passed across Skills, Plugins, Browse, and Automations.

The app suite passed 2,347 tests. The Automations suite passed 58 tests. The relevant App, Shared UI, and Automations type checks passed.

The grouped menu is a good shared base. Extract the duplicated option-toggle logic before it causes behavior drift.

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

2 participants