npm package discovery and stats viewer.

Discover Tips

  • General search

    [free text search, go nuts!]

  • Package details

    pkg:[package-name]

  • User packages

    @[username]

Sponsor

Optimize Toolset

I’ve always been into building performant and accessible sites, but lately I’ve been taking it extremely seriously. So much so that I’ve been building a tool to help me optimize and monitor the sites that I build to make sure that I’m making an attempt to offer the best experience to those who visit them. If you’re into performant, accessible and SEO friendly sites, you might like it too! You can check it out at Optimize Toolset.

About

Hi, 👋, I’m Ryan Hefner  and I built this site for me, and you! The goal of this site was to provide an easy way for me to check the stats on my npm packages, both for prioritizing issues and updates, and to give me a little kick in the pants to keep up on stuff.

As I was building it, I realized that I was actually using the tool to build the tool, and figured I might as well put this out there and hopefully others will find it to be a fast and useful way to search and browse npm packages as I have.

If you’re interested in other things I’m working on, follow me on Twitter or check out the open source projects I’ve been publishing on GitHub.

I am also working on a Twitter bot for this site to tweet the most popular, newest, random packages from npm. Please follow that account now and it will start sending out packages soon–ish.

Open Software & Tools

This site wouldn’t be possible without the immense generosity and tireless efforts from the people who make contributions to the world and share their work via open source initiatives. Thank you 🙏

© 2026 – Pkg Stats / Ryan Hefner

@molecule/app-auth-ui-react

v1.0.1

Published

React auth-kit components (OAuthButtons, LoginForm scaffolds)

Readme

@molecule/app-auth-ui-react

Auto-generated, AI-first package reference for the molecule.dev ecosystem. It is written to be read by coding agents as much as by people, and is generated from this package's source — edit src/index.ts JSDoc, not this file.

React auth-kit components for molecule.dev.

Exports <OAuthButtons> — the config-driven OAuth row for branded Login/Signup pages: reads providers from useOAuth(oauthConfig), renders the "or continue with" divider + provider buttons, and owns the CALLBACK half of the page-based flow (?code&state exchange on the page it is mounted on, with a visible inline error on failure).

NOT the same component as OAuthButtons from @molecule/app-oauth-buttons-react — that lower-level primitive takes an explicit providers list and renders only the row; this one wraps it and takes the app's oauthConfig from config.ts. Structural pieces only — branded layout, copy, and chrome stay at the app level.

Quick Start

import { OAuthButtons } from '@molecule/app-auth-ui-react'
import { oauthConfig } from './config.js'

// On the Login/Signup page (the OAuth redirect must land back here):
;<OAuthButtons oauthConfig={oauthConfig} showLabels onSuccess={() => navigate('/dashboard')} />

Type

feature

Installation

npm install @molecule/app-auth-ui-react @molecule/app-oauth-buttons-react @molecule/app-react @molecule/app-ui react
npm install -D @types/react

API

Interfaces

OAuthButtonsProps

Props for {@link OAuthButtons}.

interface OAuthButtonsProps {
  /**
   * OAuth config object consumed by `useOAuth()`. Typed as `any` here
   * because the concrete shape lives in the app's `config.ts`.
   */
  // eslint-disable-next-line @typescript-eslint/no-explicit-any
  oauthConfig: any
  /** Extra class applied to the outer wrapper. */
  className?: string
  /** Icon size in pixels. Defaults to 30. */
  iconSize?: number
  /** Logo color mode — `'brand'` (default, official multi-color) or `'mono'`. */
  iconMode?: 'brand' | 'mono'
  /** When true, render the provider label text next to the logo. */
  showLabels?: boolean
  /** Override the default "or continue with" divider text. */
  dividerKey?: string
  dividerDefault?: string
  /**
   * Called after a successful OAuth login (the session is already
   * established) — e.g. `() => navigate('/dashboard')`.
   */
  onSuccess?: () => void
  /**
   * Called when the OAuth callback exchange fails. The (already visible)
   * inline error message is passed through for hosts that also want to
   * surface it elsewhere.
   */
  onError?: (error: string) => void
}

Functions

OAuthButtons(props)

Config-driven OAuth provider button row rendered beneath a login/signup form.

This is the convenience layer over the primitives in @molecule/app-oauth-buttons-react: it reads providers + redirect from useOAuth(oauthConfig), then composes <OAuthDivider> (the "or continue with" rule) above <OAuthButtons> (the button row). Apps with an oauthConfig object use this; apps that already hold a raw provider list use the lower-level <OAuthButtons> directly.

The component also owns the CALLBACK half of the page-based flow: useOAuth detects ?code&state on the page this row is mounted on, exchanges the code, and reports the outcome here — a failed exchange (forged/expired code, state mismatch, provider rejection) renders a VISIBLE inline error (data-mol-id="oauth-error", role="alert") instead of failing silently, and a success fires onSuccess so the host can navigate into the app.

function OAuthButtons({
  oauthConfig,
  className,
  iconSize = 30,
  iconMode = 'brand',
  showLabels = false,
  dividerKey = 'oauth.orContinueWith',
  dividerDefault = 'or continue with',
  onSuccess,
  onError,
}: OAuthButtonsProps): JSX.Element | null
  • props — Component props (see {@link OAuthButtonsProps}).

Injection Notes

Requirements

Peer dependencies:

  • @molecule/app-oauth-buttons-react ^1.0.1
  • @molecule/app-react ^1.0.1
  • @molecule/app-ui ^1.0.1
  • react ^18.0.0 || ^19.0.0

Runtime Dependencies

  • @molecule/app-oauth-buttons-react
  • @molecule/app-react
  • @molecule/app-ui
  • react

Renders null when oauthConfig yields no providers — safe to include unconditionally. Mount it on the page the OAuth provider redirects back to, or the code exchange never runs. A failed exchange renders an inline role="alert" error (data-mol-id="oauth-error") and also calls onError. Divider copy defaults to "or continue with" (override via dividerKey / dividerDefault); translations come from the companion @molecule/app-locales-oauth-buttons locale bond.