Om komponenten
Formål
Generisk bildeprimitiv: viser et miniatyrbilde som åpnes i full størrelse i en dialog. Den kan også vise bildetekst, metadata og en valgfri kartposisjon.
Egner seg for
- Bildevedlegg eller gallerier der et klikk på miniatyren skal åpne full størrelse i dialog.
- Bilder som også trenger kort bildetekst, metadata og eventuelt en enkel kartposisjon.
Egner seg ikke for
- Zooming, beskjæring, annotering eller karusellnavigasjon mellom flere bilder; komponenten viser ett bilde om gangen.
- Tilfeller der miniatyr og fullvisning trenger helt ulik markup eller flere kartpunkter; komponenten eier strukturen og støtter bare én valgfri
{lat, lng}-posisjon.
Bruk
<script type="module" src="/designsystem/komponenter/medieinnhold/preview-image/preview-image.js"></script>
<lm-preview-image src="blob:..." alt="Kvittering fra hotell" caption="15. jun 2025 · Oslo"></lm-preview-image>
const bilde = document.querySelector("lm-preview-image");
bilde.metadata = [
{label: "Bildet tatt", value: "15. jun 2025"},
{label: "Sted", value: "Oslo, Norge"},
];
bilde.location = {lat: 59.91, lng: 10.75}; // viser innebygd kart i dialogen
bilde.addEventListener("preview-image:open", () => { ... });
Prøv selv
Rediger koden under - resultatet oppdateres live.
Attributter
| Attributt | Type | Standard | Beskrivelse |
|---|---|---|---|
src | string | "" | Bildekilde for miniatyrbildet (også brukt i forstørret dialog hvis full-src ikke er satt). |
full-src | string | Overstyrer bildekilden brukt i den forstørrede dialogen (f.eks. et bilde i høyere oppløsning enn miniatyren). | |
alt | string | "" | Alt-tekst, satt på både miniatyr og forstørret bilde. |
caption | string | "" | Kort tekst vist som et overlegg nederst på miniatyrbildet (før det åpnes), og øverst i den forstørrede dialogen. |
Events
| Event | Type | Beskrivelse |
|---|---|---|
preview-image:open | CustomEvent | Miniatyrbildet klikkes og den forstørrede dialogen åpnes. |
Parts
| Part | Beskrivelse |
|---|---|
miniatyr | Wrapperen rundt miniatyrvisningen. |
apne-knapp | Knappen som åpner dialogen. |
miniatyr-bilde | Bildet i miniatyren. |
miniatyr-tekst | Bildeteksten under miniatyren. |
dialog | Selve <dialog>-elementet. |
lukk-knapp | Lukkeknappen i dialogen. |
full-bilde | Bildet i full størrelse. |
dialog-tekst | Bildeteksten i dialogen. |
metadata | Metadata-listen. |
kart | Innebygd kart i dialogen. |
kart-lenke | Lenken som åpner posisjonen i ekstern karttjeneste. |
Styling med ::part()
Hver part over kan restyles direkte fra et vanlig, ytre stilark - uten å måtte endre selve komponenten eller duplisere den:
lm-preview-image::part(miniatyr) {
/* egne stiler for "Wrapperen rundt miniatyrvisningen." */
}
lm-preview-image::part(apne-knapp) {
/* egne stiler for "Knappen som åpner dialogen." */
}
lm-preview-image::part(miniatyr-bilde) {
/* egne stiler for "Bildet i miniatyren." */
}
lm-preview-image::part(miniatyr-tekst) {
/* egne stiler for "Bildeteksten under miniatyren." */
}
lm-preview-image::part(dialog) {
/* egne stiler for "Selve <dialog>-elementet." */
}
lm-preview-image::part(lukk-knapp) {
/* egne stiler for "Lukkeknappen i dialogen." */
}
lm-preview-image::part(full-bilde) {
/* egne stiler for "Bildet i full størrelse." */
}
lm-preview-image::part(dialog-tekst) {
/* egne stiler for "Bildeteksten i dialogen." */
}
lm-preview-image::part(metadata) {
/* egne stiler for "Metadata-listen." */
}
lm-preview-image::part(kart) {
/* egne stiler for "Innebygd kart i dialogen." */
}
lm-preview-image::part(kart-lenke) {
/* egne stiler for "Lenken som åpner posisjonen i ekstern karttjeneste." */
}
Tilgjengelighet
Åpneknappen har aria-label="Vis bilde i full størrelse", begge <img>-elementene får alt fra komponentens attributt, og den valgfrie kart-iframe-en har title="Kart over posisjon". Tastaturstøtten følger native knapper og dialog. Skjermlesere får alt-tekst, eventuell figcaption, metadata via <dl>, og lenke til fullt kart når location er satt.
- Åpneknappen har
aria-label="Vis bilde i full størrelse", begge<img>-elementene fåraltfra komponentensalt-attributt, og den valgfrie kart-iframe-en hartitle="Kart over posisjon". - Tastaturstøtten følger native knapper og dialog: miniatyren kan åpnes med Enter eller Mellomrom, Escape lukker dialogen, og lukkeknappen er en vanlig
<button>. - Skjermlesere får alt-tekst, eventuell
<figcaption>, metadata via<dl>, og en vanlig lenke til fullt kart nårlocationer satt. - Komponenten har ingen egen animasjon eller høy-kontrastlogikk.
Detaljer
- Åpning og lukking styres deklarativt med
Invoker Commands APIviacommand="show-modal"ogcommand="close", ikke med JS-kall tilshowModal()ellerclose(). - Miniatyrbildet er kvadratisk som standard og kan styres utenfra via
--lm-preview-image-aspect-ratio. locationbruker OpenStreetMap sitt nøkkelfrie embed-endepunkt, så komponenten trenger ingen ekstern kartpakke.metadataoglocationer komplekse verdier og settes derfor som JS-properties, ikke attributter.
Referanser
Se også:
../preview-document/index.html - Bruker samme miniatyr-til-dialog-mønster for dokumenter i stedet for bilder.../map-embed/index.html - Bruker samme type OpenStreetMap-iframe når forhåndsvisningen også skal vise en kjent posisjon.../../layout/grid/index.html - Brukes ofte som ytre layout for et responsivt galleri av bilde- eller kvitteringsforhåndsvisninger.
Brukes av:
turer/js/features/receipts/receipts.js - kvitteringsrutenettet (bildevedlegg vises som miniatyrer med bildetekst, klikk åpner dem i full størrelse sammen med EXIF-metadata og posisjon på kart hvis tilgjengelig).
Avhengigheter: designsystem/funksjoner/sikkerhet/escape-html/escape-html.js (trygg rendering av metadata-verdier).