JSPM

  • Created
  • Published
  • Downloads 12
  • Score
    100M100P100Q112393F
  • License MIT

Startnext Chrome Web Components (Header & Footer)

Package Exports

  • @startnext/chrome
  • @startnext/chrome/dist/index.js

This package does not declare an exports field, so the exports above have been automatically detected and optimized by JSPM instead. If any package subpath is missing, it is recommended to post an issue to the original package (@startnext/chrome) to support the "exports" field. If that is not possible, create a JSPM override to customize the exports field for this package.

Readme

@startnext/chrome

Startnext Header/Footer Web Components

Wiederverwendbare Header- und Footer-Components für alle Startnext Microservices.

Installation

npm install @startnext/chrome
# or
pnpm add @startnext/chrome

Quick Start

Modern JavaScript (React, Vue, etc.)

import '@startnext/chrome';
<startnext-header></startnext-header>
<startnext-footer></startnext-footer>

Via CDN (PHP, Vanilla HTML)

<script type="module" src="https://unpkg.com/@startnext/chrome@latest/dist/index.js"></script>

<startnext-header></startnext-header>
<startnext-footer></startnext-footer>

API

<startnext-header>

Attributes:

Attribute Type Default Description
lang string 'de' Sprache ('de', 'en')
light boolean false Heller Header (weiße Schrift/Icons über dunklem Hero, wechselt automatisch zu dunkel beim Scrollen). Standard ohne Attribut: dunkler Header
large-animation boolean false Große Lottie-Logo-Animation mit Claim und horizontaler Navigation
authenticated boolean false Zeigt User-Avatar statt "Anmelden" Button
user-name string - Name des eingeloggten Users
user-avatar string - Avatar-URL des Users

Events:

Event Detail Description
burger-menu-toggle { open: boolean } Burger-Menü geöffnet/geschlossen
user-menu-toggle { open: boolean } User-Menü geöffnet/geschlossen
navigation-click { item: NavigationItem } Navigation-Link geklickt
cta-click { url: string } "Projekt starten" Button geklickt
logout {} Abmelden geklickt
language-change { language: string } Sprache gewechselt
scroll-state-change { scrolled: boolean, slideUp: boolean } Scroll-Zustand geändert

Usage Examples:

<!-- Default: dunkler Header (dunkle Schrift für helle Seiten) -->
<startnext-header></startnext-header>

<!-- Heller Header (weiße Schrift über dunklem Hero) -->
<startnext-header light></startnext-header>

<!-- Heller Header + große Animation (z.B. Startseite) -->
<startnext-header light large-animation></startnext-header>

<!-- Heller Header + groß + eingeloggt -->
<startnext-header
  light
  large-animation
  authenticated
  user-name="Elias Groesel"
  user-avatar="https://..."
></startnext-header>
const header = document.querySelector('startnext-header');

header.addEventListener('navigation-click', (e) => {
  console.log(e.detail.item);
  // e.preventDefault() to handle navigation yourself
});

header.addEventListener('language-change', (e) => {
  // Sprache auch im Footer synchronisieren
  document.querySelector('startnext-footer').setAttribute('lang', e.detail.language);
});

header.addEventListener('logout', () => {
  // Handle logout
});

Attributes:

Attribute Type Default Description
lang string 'de' Sprache ('de', 'en')

Events:

Event Detail Description
navigation-click { item: { url, label } } Footer-Link geklickt

Theming

Override CSS Custom Properties:

startnext-header {
  --primary-color: #0066FF;
  --btn-primary-bg: #0066FF;
  --header-bg-scrolled: #FAFAFA;
}

startnext-footer {
  --footer-bg: #111111;
  --footer-link-hover: #0066FF;
}

Browser Support

  • Chrome/Edge 90+
  • Firefox 88+
  • Safari 14+

Development

# Install deps (from monorepo root)
pnpm install

# Dev mode (watch)
pnpm --filter @startnext/chrome dev

# Build
pnpm --filter @startnext/chrome build

# Lint
pnpm --filter @startnext/chrome lint

Demo-Seite öffnen: packages/sn-chrome-web-component/examples/vanilla/index.html

Architecture

Jede Component ist modular in drei Dateien aufgeteilt:

src/
├── components/
│   ├── base/
│   │   ├── BaseComponent.ts    # Abstrakte Basis (Shadow DOM, Events, Theming)
│   │   ├── icons.ts            # SVG-Icon-Registry
│   │   └── styles.ts           # Shared Reset-CSS
│   ├── header/
│   │   ├── StartnextHeader.ts  # Logik (Scroll, Drawers, Lottie, Events)
│   │   ├── header.css.ts       # CSS als Template-Literal-Export
│   │   └── header.template.ts  # Render-Funktionen (HTML-Strings)
│   └── footer/
│       ├── StartnextFooter.ts  # Logik (Render, Events)
│       ├── footer.css.ts       # CSS als Template-Literal-Export
│       └── footer.template.ts  # Render-Funktion (HTML-String)
├── data/
│   └── mockData.ts             # Mock-Daten
├── types/
│   └── index.ts                # Alle TypeScript-Interfaces
└── index.ts                    # Barrel-Export

Konventionen:

  • CSS in *.css.ts als exportierter Template-Literal-String (kein extra Build-Plugin nötig)
  • Templates in *.template.ts als reine Funktionen die HTML-Strings zurückgeben
  • Logik in der Hauptdatei: Event-Handling, State, Lifecycle
  • BEM-Naming für CSS-Klassen (headbar__left, drawer__item--highlighted)
  • Shadow DOM (open mode), kein Virtual DOM

Monorepo Structure

packages/
  scs-chrome-web-component/   ← this package
  scs-chrome-api/             ← API service