Step 3 of the connector simplification. The gallery card and the connect screen were each deciding "what kind of connector is this" from raw method flags, which is how a card comes to offer Connect for something that then demands a pasted key. `connectionSetupStateForMethod` resolves one of instant/authorize/paste/ register, and the card's verb is a function of it. Both follow the instance's ownership availability rather than catalog order, so GitHub reads Add key until an operator configures the cloud connector and Connect afterwards. Two catalog realities the plan had wrong are now pinned by tests: a provider-generated URL (Zapier, Arcade, Executor) is not instant because the operator brings the endpoint, and a templated URL (Shopify) is not either. Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
@paperclipai/ui
Published static assets for the Paperclip board UI.
What gets published
The npm package contains the production build under dist/. It does not ship the UI source tree or workspace-only dependencies.
Storybook
Storybook config, stories, and fixtures live under ui/storybook/.
pnpm --filter @paperclipai/ui storybook
pnpm --filter @paperclipai/ui build-storybook
Typical use
Install the package, then serve or copy the built files from node_modules/@paperclipai/ui/dist.
Editor dependency identity
Keep the root and workspace overrides for @codemirror/state,
@codemirror/view, and @lezer/common aligned. CodeMirror requires shared
extension identity, while Lezer parsers and syntax highlighters require shared
NodeProp IDs. Multiple Lezer copies can crash code-block highlighting with
tags is not iterable. src/lib/codemirror-single-instance.test.ts checks the
installed dependency graph and highlights sample code through the editor's real
language dependencies. GitHub Actions owns regeneration of pnpm-lock.yaml.