Om komponenten
Formål
Gjør et kodeeksempel i designsystem-dokumentasjonen kjørbart og redigerbart: brukeren ser umiddelbart hvordan en endring i markup (modus="html") eller i et funksjonskall (modus="js") påvirker resultatet, uten å måtte forlate siden eller åpne et eget verktøy. Brukes utelukkende av generer-designsystem-dokumentasjon.js, som seeder startkoden fra hver komponent-/funksjonsmanifests eksempler.
Egner seg for
- "Prøv selv"-seksjoner på komponent- og funksjonsdokumentasjonssider, der startkoden allerede finnes som et eksempel i manifestet.
- Korte, selvstendige kodeeksempler - et markup-utsnitt som kun bruker attributter/slots, eller et enkelt funksjonskall som ikke krever eksterne DOM-elementer/filer utenfor selve eksempelet.
Egner seg ikke for
- Fullverdig kodeeditering med syntaksmarkering, autofullføring eller flere filer - da trengs et ekte editor-bibliotek (CodeMirror/Monaco), noe som bevisst er unngått her for å holde komponenten enkel og avhengighetsfri.
- Eksempler som krever et reelt DOM-element utenfor selve kodeutsnittet (f.eks. en fil valgt av brukeren, eller et skjema definert andre steder på siden) - disse dokumenteres fortsatt med det statiske kodeeksempelet, uten en kjørbar lekeplass.
Bruk
Genereres normalt automatisk av generer-designsystem-dokumentasjon.js for hver komponent-/funksjonsside, men kan også settes opp for hånd - startkoden bestemmes av hvilket barn (<template> eller <script type="text/plain">) som ligger i lys-DOM.
HTML-modus - rediger markup, se resultatet live
<script type="module" src="/designsystem/komponenter/utvikling/kode-lekeplass/kode-lekeplass.js"></script>
<lm-kode-lekeplass modus="html">
<template>
<script type="module" src="/designsystem/komponenter/handling/button-group/button-group.js"></script>
<lm-button-group align="end">
<button type="button">Avbryt</button>
<button type="button">Lagre</button>
</lm-button-group>
</template>
</lm-kode-lekeplass>
JS-modus - rediger et funksjonskall, se returverdien live
<lm-kode-lekeplass modus="js" modul="/designsystem/funksjoner/formattering/format-currency/format-currency.js">
<script type="text/plain">formatCurrency(1250.5, "NOK");</script>
</lm-kode-lekeplass>
Attributter
| Attributt | Type | Standard | Beskrivelse |
|---|---|---|---|
modus | "html"|"js" | "html" | "html" rendrer redigert markup (inkl. eventuelle <script type="module" src="...">-tagger den finner og laster) i en forhåndsvisningsflate. "js" evaluerer redigert kode som et JS-uttrykk mot navngitte eksporter fra modul og viser returverdien. |
modul | string | Kun for modus="js" - rot-absolutt sti til ES-modulen som eksporterer funksjonen(e) uttrykket i koden skal kunne referere til (f.eks. /designsystem/funksjoner/formattering/format-currency/format-currency.js). |
Slots
| Slot | Beskrivelse |
|---|---|
| (standard) | Startkoden - et <template>-barn for modus="html" (rå markup, inkl. ev. script-tagger), eller et <script type="text/plain">-barn for modus="js" (et enkelt JS-uttrykk). |
Parts
| Part | Beskrivelse |
|---|---|
lekeplass | Den ytre rammen rundt resultat og editor. |
resultat | Beholderen for resultat-flaten (forhåndsvisning eller js-resultat). |
forhandsvisning | Flaten som rendrer redigert markup i modus="html". |
js-resultat | <pre>-elementet som viser returverdi/feilmelding i modus="js". |
rediger | Beholderen for editor-etikett, tekstfelt og tilbakestill-knapp. |
etikett | Etiketten rundt editor-tekstfeltet. |
editor | <textarea>-en brukeren redigerer koden i. |
tilbakestill-knapp | Knappen som setter koden tilbake til startverdien. |
Styling med ::part()
Hver part over kan restyles direkte fra et vanlig, ytre stilark - uten å måtte endre selve komponenten eller duplisere den:
lm-kode-lekeplass::part(lekeplass) {
/* egne stiler for "Den ytre rammen rundt resultat og editor." */
}
lm-kode-lekeplass::part(resultat) {
/* egne stiler for "Beholderen for resultat-flaten (forhåndsvisning eller js-resultat)." */
}
lm-kode-lekeplass::part(forhandsvisning) {
/* egne stiler for "Flaten som rendrer redigert markup i `modus="html"`." */
}
lm-kode-lekeplass::part(js-resultat) {
/* egne stiler for "`<pre>`-elementet som viser returverdi/feilmelding i `modus="js"`." */
}
lm-kode-lekeplass::part(rediger) {
/* egne stiler for "Beholderen for editor-etikett, tekstfelt og tilbakestill-knapp." */
}
lm-kode-lekeplass::part(etikett) {
/* egne stiler for "Etiketten rundt editor-tekstfeltet." */
}
lm-kode-lekeplass::part(editor) {
/* egne stiler for "`<textarea>`-en brukeren redigerer koden i." */
}
lm-kode-lekeplass::part(tilbakestill-knapp) {
/* egne stiler for "Knappen som setter koden tilbake til startverdien." */
}
Tilgjengelighet
Editor-tekstfeltet har en synlig, tilknyttet <label>. Resultatet i modus="js" har aria-live="polite" slik at skjermlesere får returverdien/feilmeldingen lest opp etter en redigering. modus="html" sin forhåndsvisningsflate har ikke aria-live, siden den kan inneholde vilkårlig, ofte visuelt orientert markup der kontinuerlige opplesninger av hver tastetrykk-drevne endring ville vært støy - den statiske kodeblokken over lekeplassen dekker det tekstlige innholdet for skjermleserbrukere.
Referanser
Se også:
../../ikon/ikon/index.html - Det eneste tidligere eksempelet på et levende, kjørende demo-element i dokumentasjonen (ikon-galleriet) - denne komponenten generaliserer samme idé.
Avhengigheter: Ingen