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/chromeQuick 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' |
Aktive Sprache (beliebiger 2-Buchstaben-Code, z. B. 'de', 'en', 'fr') |
languages |
string (JSON) |
- | JSON-Array von Sprachcodes, auf die der Language-Switcher eingeschränkt wird, z. B. '["de","en"]'. Ohne Attribut: alle vom API gelieferten Sprachen. Der Switcher wird automatisch ausgeblendet, wenn nur 1 Sprache verfügbar ist |
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 |
color-mode |
'light' | 'dark' |
auto | Farbmodus. Ohne Attribut: Header scannt <html> nach Klasse dark/light. Ohne Klasse: Default dark (dunkle Seite, heller Header). Toggle-Button wechselt <html>-Klasse und Header-Darstellung |
hide-color-mode |
boolean |
false |
Versteckt den Color-Mode Toggle-Button |
hide-lang |
boolean |
false |
Versteckt den Language-Switcher komplett |
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 |
color-mode-change |
{ mode: 'light' | 'dark' } |
Farbmodus gewechselt (per Toggle-Button) |
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><!-- Color Mode: Header scannt <html> automatisch -->
<!-- html.dark → heller Header, html.light → dunkler Header -->
<!-- Toggle-Button (Sun/Moon) im Header wechselt den Modus -->
<html class="dark">
<startnext-header light large-animation></startnext-header>
</html>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
});
header.addEventListener('color-mode-change', (e) => {
console.log(`Color mode: ${e.detail.mode}`); // 'light' | 'dark'
// <html>-Klasse wird automatisch vom Header gesetzt
});<startnext-footer>
Attributes:
| Attribute | Type | Default | Description |
|---|---|---|---|
lang |
string |
'de' |
Aktive Sprache (beliebiger 2-Buchstaben-Code) |
api-url |
string |
- | URL des SCS API. Ohne Attribut: statische Default-Daten |
lang-sync |
boolean |
true |
Synchronisiert lang automatisch beim language-change-Event des Headers |
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;
}Fonts
Standardmäßig nutzen die Components System-Fonts als Fallback. Für eigene Schriftarten @font-face im eigenen CSS deklarieren und --font-family setzen:
@font-face {
font-family: "PFDin";
font-weight: 400;
font-style: normal;
font-display: swap;
src: url("/fonts/PFDin-subset.woff2") format("woff2");
}
startnext-header, startnext-footer {
--font-family: "PFDin", -apple-system, BlinkMacSystemFont, "Segoe UI", sans-serif;
}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 lintDemo-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-ExportKonventionen:
- CSS in
*.css.tsals exportierter Template-Literal-String (kein extra Build-Plugin nötig) - Templates in
*.template.tsals 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-web-component/ ← this package
scs-api/ ← Express API service