Hopp til hovedinnhold
Meny

lmfaole.party / designsystem / komponenter / Bildeforhåndsvisning

  • Forside
  • Turer
  • Økonomi
  • Slides
  • <lm-preview-image> – Bildeforhåndsvisning / Image preview

    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
    srcstring""Bildekilde for miniatyrbildet (også brukt i forstørret dialog hvis full-src ikke er satt).
    full-srcstringOverstyrer bildekilden brukt i den forstørrede dialogen (f.eks. et bilde i høyere oppløsning enn miniatyren).
    altstring""Alt-tekst, satt på både miniatyr og forstørret bilde.
    captionstring""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:openCustomEventMiniatyrbildet klikkes og den forstørrede dialogen åpnes.

    Parts

    Part Beskrivelse
    miniatyrWrapperen rundt miniatyrvisningen.
    apne-knappKnappen som åpner dialogen.
    miniatyr-bildeBildet i miniatyren.
    miniatyr-tekstBildeteksten under miniatyren.
    dialogSelve <dialog>-elementet.
    lukk-knappLukkeknappen i dialogen.
    full-bildeBildet i full størrelse.
    dialog-tekstBildeteksten i dialogen.
    metadataMetadata-listen.
    kartInnebygd kart i dialogen.
    kart-lenkeLenken 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år alt fra komponentens alt-attributt, og den valgfrie kart-iframe-en har title="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år location er satt.
    • Komponenten har ingen egen animasjon eller høy-kontrastlogikk.

    Detaljer

    • Åpning og lukking styres deklarativt med Invoker Commands API via command="show-modal" og command="close", ikke med JS-kall til showModal() eller close().
    • Miniatyrbildet er kvadratisk som standard og kan styres utenfra via --lm-preview-image-aspect-ratio.
    • location bruker OpenStreetMap sitt nøkkelfrie embed-endepunkt, så komponenten trenger ingen ekstern kartpakke.
    • metadata og location er komplekse verdier og settes derfor som JS-properties, ikke attributter.

    Referanser

    Se også:

    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).