Mal for B2B-portaler med valgfri statuslinje, sidefelt og hovedinnhold.
Oversikt
Template.Portal er en ferdig mal for B2B-portaler. Den gir en todelt layout med fast sidefelt til venstre og hovedinnhold til høyre, samt en valgfri statuslinje øverst. Malen dekker det typiske grunnoppsettet i Enturs B2B-produkter og er designet for å brukes sammen med SideNavigation fra @entur/menu.
Oppbygning
Template.Portal
Rotkomponenten lager et CSS-grid med to kolonner og full visningshøyde (100dvh). Høyden kan overstyres med CSS-variabelen --eds-viewport-height, f.eks. om portalen ikke skal fylle hele skjermen. Første kolonne er sidefeltet med bredde styrt av --eds-sidebar-width, andre kolonne fyller resten av tilgjengelig plass.
Template.Portal.StatusBar
Valgfri seksjon som spenner over hele bredden øverst i portalen, over både sidefelt og hovedinnhold. Brukes typisk til miljøindikator som viser om brukeren er i dev, staging eller produksjon.
Template.Portal.Sidebar
Vertikalt fleksområde som rendres som <aside> med kontrastfarge. Sidefeltet er festet til toppen av viewporten og begrenses til viewport-høyden, slik at langt innhold scroller internt i stedet for å dytte hele siden nedover. Inneholder valgfrie seksjoner i rekkefølge:
Logo— Produktlogo, lenker typisk til startsiden.User— Brukerindikator med innlogget bruker.Data— Ev. datasettvelger og/eller datasettvelger. Rendres som en flekskolonne med automatisk mellomrom mellom barn-elementer.Navigation— Hovednavigasjon, ment å brukes medSideNavigation. Fyller tilgjengelig plass og scroller internt ved overflow.Footer— Statisk støtteinformasjon nederst.
Template.Portal.Main
Hovedinnholdsområdet som rendres som <main>. Spenner fra andre kolonne til slutten av gridet og har konfigurerbar padding.
Når skal malen brukes?
Bruk Template.Portal i:
- B2B-verktøy og produkter med sidebar-navigasjon
- Løsninger med fast sidenavigasjon og skiftende hovedinnhold
- Produkter som trenger miljøindikator, brukerinfo og/eller datasettvelger i sidefeltet
Unngå malen når:
- Løsningen har få navigasjonselementer (færre enn 5) — vurder topbar i stedet
- Siden er en enkel landingsside uten behov for persistent navigasjon
Kollapserbart sidefelt
Sidefeltet kan gjøres kollapserbart ved å sette collapsed-propen. Dette lar brukeren minimere sidefeltet for å gi mer plass til hovedinnholdet. En toggle-knapp vises automatisk på kanten av sidefeltet.
Om sidebaren er åpen eller kollapset må du kontrollere — du styrer tilstanden via collapsed og onCollapseToggle.
Installasjon
# Installer den vanlige layout-pakken fra npm
# _ikke_ @entur/layout/beta
npm install @entur/layoutReact
import { Template } from '@entur/layout/beta';CSS
@import '@entur/layout/beta/styles';Kom i gang
import { Template } from "@entur/layout/beta";
{/* ... */}
<Template.Portal>
<Template.Portal.Sidebar>
<Template.Portal.Sidebar.Logo>
{/* Entur produktlogo */}
</Template.Portal.Sidebar.Logo>
<Template.Portal.Sidebar.Navigation>
{/* SideNavigation-komponent */}
</Template.Portal.Sidebar.Navigation>
</Template.Portal.Sidebar>
<Template.Portal.Main>
{/* Hovedinnhold */}
</Template.Portal.Main>
</Template.Portal>Komponenter
Alle komponentene fungerer som slots. Det vil si at de tar imot komponenter og legger de på riktig plass, f.eks logoen.
Alle komponentene støtter også propen as som lar deg endre hvilket HTML-element de faktisk vises som i nettleseren. Se Overskrive standardverdier for mer info.
Under ser du hvordan komponentene for denne malen finnes relativt til hverandre:
Komponenthierarki
Template.Portal
├── Template.Portal.StatusBar (valgfri — full bredde øverst)
├── Template.Portal.Sidebar
│ ├── Template.Portal.Sidebar.Logo
│ ├── Template.Portal.Sidebar.User
│ ├── Template.Portal.Sidebar.Data
│ ├── Template.Portal.Sidebar.Navigation
│ └── Template.Portal.Sidebar.Footer
└── Template.Portal.MainTemplate.Portal
Hoved-wrapper for malen, inneholder ingen visuelle elementer. Template.Portal skal ta hele skjermens størrelse, dvs. høyde på 100dvh og bredde 100dvw. Dette er standard oppførsel, men kan overskrives slik:
Template.Portal.Main
Hovedinnholdsområdet til høyre for sidefeltet. Det er her selve applikasjonsinnholdet skal ligge. Noen av standarverdiene til Main kan overskrives, se Overskrive standardverdier.
Template.Portal.Sidebar
Sidefelt som inneholder all navigasjon, status og innstillinger for portalen som en helhet. Noen av standarverdiene til Sidebar kan overskrives, se Overskrive standardverdier.
Kollapset visning
Sidebar har støtte for å kollapses. Bruk følgende props for å aktivere:
collapsed: (boolean)– Kollapset tilstand. Er sidebaren åpen eller kollapset.onCollapseToggle: ((collapsed: boolean) => void)– Callback når sidefeltet toggles. Når denne oppgis, vises en toggle-knapp.openSidebarAriaLabel: (string, standard "Åpne sidemeny")– aria-label for toggle-knappen når sidefeltet er kollapset.closeSidebarAriaLabel: (string, standard "Lukk sidemeny")– aria-label for toggle-knappen når sidefeltet er utvidet.
Template.Portal.Sidebar.Logo
Plass for tjenestens logo. Logoen bør være en lenke som sender bruker tilbake til startsiden for tjenesten.
Template.Portal.Sidebar.User
Plass for informasjon og handlinger for innlogget bruker.
Template.Portal.Sidebar.Data
Plass til datasettvelger, miljøvelger og/eller andre kontekstvelgere. Innhold plasseres under hverandre automatisk med mellomrom.
Template.Portal.Sidebar.Navigation
Hovednavigasjonen i sidefeltet, men til å brukes med SideNavigation. Fyller tilgjengelig plass mellom de andre seksjonene og skroller internt ved overflow.
Template.Portal.Sidebar.Footer
Statisk innhold nederst i sidefeltet, f.eks. støttelenker eller versjonsinfo.
Template.Portal.Statusbar
Brukes til miljøindikator-farge (dev/staging/prod) øverst på siden. Setter ikke farge automatisk per nå, du må selv fylle den med relevant farge til riktig tid.
Overskrive standardverdier
Mange av verdiene i denne malen kan overskrives med CSS-variabler eller as.
For CSS kan du enten sette det via en css-klasse på samme nivå eller høyere enn komponenten, eller ved en inline style. Her er en oversikt over alle overskrivbare variabler:
/* Height/max-height of portal and main area */
--eds-viewport-height: 100dvh;
/* Padding between sidebar and main content */
--eds-portal-main-padding: 1rem;
/* Total width of the sidebar */
--eds-sidebar-width: 20rem;
/* Inside padding in sidebar (does not affect navigation width)
--eds-sidebar-padding: 2rem;For å endre element som brukes i nettleseren kan du gi inn en HTML-tag til as:
{/* Defautl "as" values */}
<Template.Portal.Main as="main" />
<Template.Portal.Sidebar as="aside" />
<Template.Portal.Sidebar.Navigation as="nav" />
<Template.Portal.Sidebar.Footer as="footer" />Hvor finner jeg malen?
Du finner malen ved å søke etter "B2B side template" i asset-panelet i Figma, eller via lenken nedenfor. Malen inneholder sidebar, hovedinnhold med 12-kolonners grid, og varianter for dev, staging, prod og lokalt. Se dokumentasjonen i Figma for fullstendig oversikt over elementer og bruksregler.
(Hvis griden ikke vises, trykk ⇧G for å slå den på.)
Tilgjengelighet
Malen bruker semantiske HTML-elementer som standard for å sikre god tilgjengelighet:
- Sidefeltet rendres som
<aside>(landmark-rollecomplementary) - Hovedinnhold rendres som
<main>(landmark-rollemain) - Navigasjon rendres som
<nav>(landmark-rollenavigation) - Footer rendres som
<footer>(landmark-rollecontentinfo)
Disse elementene gir skjermlesere og andre hjelpeteknologier tydelige landemerker for navigering.
Kollapserbart sidefelt
Når sidefeltet er kollapserbart, vises en toggle-knapp med aria-expanded-attributt som indikerer om sidefeltet er åpent eller lukket. Knappen har konfigurerbare aria-labels via openSidebarAriaLabel (standard «Åpne sidemeny») og closeSidebarAriaLabel (standard «Lukk sidemeny»).
