@phcdevworks/spectre-ui-astro
v2.1.0
Published
@phcdevworks/spectre-ui-astro is the Astro adapter package of the Spectre system for Astro applications that consume the core Spectre UI contract.
Maintainers
Readme
@phcdevworks/spectre-ui-astro
@phcdevworks/spectre-ui-astro is the Astro adapter package of the Spectre
system for Astro applications that consume the core Spectre UI contract.
Maintained by PHCDevworks, it provides Astro-native components that wrap the
logic, styling contracts, and class recipes defined in
@phcdevworks/spectre-ui. It stays
strictly downstream of the core Spectre layers, keeps framework delivery
separate from design ownership, and serves as the reference adapter pattern for
future Spectre framework adapters.
Contributing | Changelog | Security Policy
Key capabilities
- Provides Astro-native components built on top of the
@phcdevworks/spectre-uirecipe and class contract - Keeps Astro delivery SSR-friendly and type-safe without redefining tokens or core styling logic
- Re-exports shared recipe helpers so Astro consumers can compose with the same styling API used downstream
- Keeps framework ergonomics aligned with the upstream Spectre UI contract instead of introducing adapter drift
- Establishes the reference adapter pattern for future Spectre framework packages
Installation
npm install @phcdevworks/spectre-ui-astro @phcdevworks/spectre-ui@phcdevworks/spectre-ui is a required peer dependency because this adapter
binds its upstream recipes, classes, and CSS contract for Astro rather than
redefining them locally.
If your project consumes Spectre tokens directly, install
@phcdevworks/spectre-tokens
as well.
Quick start
Astro component usage
Import Astro-native components from the package root:
---
import { SpBadge, SpButton, SpCard, SpInput } from '@phcdevworks/spectre-ui-astro'
---CSS import
This package does not ship its own CSS. Import the canonical Spectre UI
stylesheet from @phcdevworks/spectre-ui in your Astro layout or page:
---
import '@phcdevworks/spectre-ui/index.css'
---Astro-native component example
---
import '@phcdevworks/spectre-ui/index.css'
import {
SpBadge,
SpButton,
SpCard,
SpIconBox,
SpInput,
SpPricingCard
} from '@phcdevworks/spectre-ui-astro'
---
<section>
<SpCard variant="elevated">
<div>
<SpIconBox variant="primary" size="md">
<svg viewBox="0 0 24 24" aria-hidden="true">
<path d="M12 2l7 4v12l-7 4-7-4V6l7-4z" fill="currentColor" />
</svg>
</SpIconBox>
<div>
<SpBadge variant="success" size="sm">Stable contract</SpBadge>
<h2>Build Astro interfaces on the Spectre UI layer</h2>
<p>
Compose Astro-native components while keeping styling behavior aligned
with the shared Spectre recipe contract.
</p>
<SpButton variant="primary" size="lg">Get started</SpButton>
</div>
</div>
</SpCard>
<SpPricingCard featured>
<div slot="header">Pro</div>
<div slot="price">$29/mo</div>
<div slot="description">Astro delivery on top of the core Spectre UI layer.</div>
<SpButton variant="primary" fullWidth>Choose plan</SpButton>
</SpPricingCard>
<SpInput
id="email"
label="Email"
name="email"
type="email"
placeholder="[email protected]"
helperText="We will use this for product updates."
/>
</section>The README examples intentionally avoid adapter-owned layout or utility styling. For page-level composition, import the canonical Spectre UI CSS and add any application-specific layout styles in your app rather than this package.
SpInput requires an explicit id whenever you pass label, helperText, or
errorMessage, so Astro can render stable SSR markup and preserve the
associated accessibility wiring.
What this package owns
- Astro-native component delivery for Spectre UI recipes and classes
- Astro-friendly, SSR-safe component interfaces and composition patterns
- Type-safe framework bindings for the upstream Spectre UI contract
- Adapter-level ergonomics that make
@phcdevworks/spectre-uistraightforward to consume in Astro projects - A reference implementation for future Spectre framework adapters
Golden rule: bind the upstream Spectre UI contract for Astro, do not redefine it.
What this package does not own
- Design values or token meaning That belongs to
@phcdevworks/spectre-tokens. - Core CSS, utilities, Tailwind helpers, or class recipe logic That belongs to
@phcdevworks/spectre-ui. - Local styling systems that diverge from the shared Spectre contract This package consumes upstream styling behavior rather than replacing it.
Package exports / API surface
Root package
@phcdevworks/spectre-ui-astro exports:
SpBadgeSpButtonSpCardSpIconBoxSpInputSpPricingCardSpRatingSpTestimonial
The root package also re-exports shared recipe helpers and related TypeScript
option and variant types from @phcdevworks/spectre-ui, including:
getBadgeClassesgetButtonClassesgetCardClassesgetIconBoxClassesgetInputClassesgetPricingCardClassesgetPricingCardBadgeClassesgetPricingCardPriceContainerClassesgetPricingCardPriceClassesgetPricingCardDescriptionClassesgetRatingClassesgetRatingStarsClassesgetRatingStarClassesgetRatingTextClassesgetTestimonialClassesgetTestimonialQuoteClassesgetTestimonialAuthorClassesgetTestimonialAuthorInfoClassesgetTestimonialAuthorNameClassesgetTestimonialAuthorTitleClasses
The adapter does not export a SPECTRE_UI_CSS helper. Import the canonical
stylesheet directly from @phcdevworks/spectre-ui/index.css so CSS ownership
stays with the upstream UI package.
Component entry points
@phcdevworks/spectre-ui-astro/components/SpBadge.astro@phcdevworks/spectre-ui-astro/components/SpButton.astro@phcdevworks/spectre-ui-astro/components/SpCard.astro@phcdevworks/spectre-ui-astro/components/SpIconBox.astro@phcdevworks/spectre-ui-astro/components/SpInput.astro@phcdevworks/spectre-ui-astro/components/SpPricingCard.astro@phcdevworks/spectre-ui-astro/components/SpRating.astro@phcdevworks/spectre-ui-astro/components/SpTestimonial.astro
Relationship to the rest of Spectre
Spectre keeps responsibilities separate:
@phcdevworks/spectre-tokensdefines design values, semantic meaning, and token contracts@phcdevworks/spectre-uiturns those tokens into reusable CSS, utilities, Tailwind helpers, and type-safe class recipes@phcdevworks/spectre-ui-astrobinds that upstream UI contract into Astro-native components and framework ergonomics
That separation keeps design ownership centralized, keeps styling logic shared, and lets framework adapters stay thin and consistent.
Development
Install dependencies, then run the package checks:
npm run build
npm run typecheck
npm testKey source areas:
src/components/for Astro component implementationssrc/recipes/for re-exported recipe bindingssrc/index.tsfor package exportsexamples/for usage examplesscripts/for packaging support scripts
Contributing
PHCDevworks maintains this package as part of the Spectre suite.
When contributing:
- keep Astro components aligned with the upstream
@phcdevworks/spectre-uicontract - do not redefine tokens, CSS behavior, or recipe logic in this package
- keep the adapter SSR-friendly, type-safe, and framework-appropriate
- run
npm testto verify adapter exports, SSR rendering, and example/docs guardrails - run
npm run buildandnpm run typecheckbefore opening a pull request
See CONTRIBUTING.md for the full workflow.
License
MIT © PHCDevworks. See LICENSE.
