No description
Find a file
2026-05-18 17:54:24 -07:00
src types(component-types): 🏷️ Refactor component-specific type exports in src/index.ts to enhance type safety by consolidating and re-exporting new UI components 2026-05-18 17:54:24 -07:00
.gitignore initial commit: @cocotte/astro-chrome 2026-05-18 16:55:41 -07:00
package.json deps-upgrade(deps): ⬆️ Update dependencies to latest stable versions for bug fixes and performance improvements 2026-05-18 17:54:24 -07:00
README.md initial commit: @cocotte/astro-chrome 2026-05-18 16:55:41 -07:00
tsconfig.json initial commit: @cocotte/astro-chrome 2026-05-18 16:55:41 -07:00

@cocotte/astro-chrome

Theme-agnostic Astro chrome primitives for Cocotte brand marketing sites: BaseLayout, NavBar, SiteFoot.

Philosophy

The package ships structure, not style. Components emit semantic HTML decorated with .cocotte-* class names. Each brand site provides all visual styling via its own CSS targeting those classes.

Components

``

Page frame with named slots: `head`, `header`, `default`, `footer`.

``

Props: `brand`, `brandHref`, `nav: NavItem[]`, `current?`, `cta?`. Slots: `brand` (overrides the `brand` prop for custom mark composition). Ships a tiny inline script that wires `.cocotte-nav-toggle` ↔ `.cocotte-nav-links.is-open` for the hamburger.

``

Slot-driven: `mark`, `links`, `cross`, `fine`, plus default freeform.

Example brand layout

```astro

import { BaseLayout, NavBar, SiteFoot, type NavItem } from '@cocotte/astro-chrome'; import '@cocotte/astro-tokens/tokens.css'; import '../styles/tokens.css'; import '../styles/globals.css';

const FWT_NAV: NavItem[] = [ { key: 'about', label: 'About', href: '/about' }, { key: 'stop01', label: 'Stop 01', href: '/stops/01' }, ];

const { current, title, description } = Astro.props;

Futa Waifu Tour

Adult · 18+ only

\`\`\`