diff --git a/apps/v4/registry/directory.json b/apps/v4/registry/directory.json index 924be8c5694..3a5c6d2189f 100644 --- a/apps/v4/registry/directory.json +++ b/apps/v4/registry/directory.json @@ -1557,8 +1557,8 @@ }, { "name": "@soralabs", - "homepage": "https://ui.soralabs.io.vn", - "url": "https://ui.soralabs.io.vn/r/{name}.json", + "homepage": "https://ui.soralabs.studio", + "url": "https://ui.soralabs.studio/r/{name}.json", "description": "Motion-first React primitives and animated UI components for shadcn/ui. Copy, customize, and ship fluid interfaces.", "logo": "" }, diff --git a/packages/shadcn/src/registry/github-auth.ts b/packages/shadcn/src/registry/github-auth.ts index 7fb9565611b..b62a6d83807 100644 --- a/packages/shadcn/src/registry/github-auth.ts +++ b/packages/shadcn/src/registry/github-auth.ts @@ -26,10 +26,10 @@ const coordinators = new WeakMap>() // A command can make several top-level registry calls (preflight, catalog, // tree resolution), each with its own sourceCache. The notice dedupes // process-wide per credential mode so it prints once, not once per phase. -const notifiedSources = new Set() +const notifiedModes = new Set() export function resetGitHubAuthNotices() { - notifiedSources.clear() + notifiedModes.clear() } export function getGitHubAuthState(anchor: object, source: GitHubSource) { @@ -68,7 +68,7 @@ export function selectGitHubAuthMode( async function decideAndNotify() { const mode: GitHubAuthMode = getEnvGitHubToken() ? "token" : "gh" - if (notifiedSources.has(mode)) { + if (notifiedModes.has(mode)) { return mode } @@ -82,7 +82,7 @@ async function decideAndNotify() { // surrounding spinner output. logAboveSpinner(`${green("✔")} ${gray(notice)}`) } - notifiedSources.add(mode) + notifiedModes.add(mode) return mode } diff --git a/packages/shadcn/src/utils/spinner.ts b/packages/shadcn/src/utils/spinner.ts index 58df77857af..eddca1fe2ae 100644 --- a/packages/shadcn/src/utils/spinner.ts +++ b/packages/shadcn/src/utils/spinner.ts @@ -15,6 +15,14 @@ export function spinner( }) activeSpinners.add(instance) + // Every ora terminal method (succeed, fail, info, warn, stopAndPersist) + // funnels through stop, so wrapping it unregisters finished instances. + const stop = instance.stop.bind(instance) + instance.stop = () => { + activeSpinners.delete(instance) + return stop() + } + return instance }