Select

Om komponenten

<select> er plassbesparende, og brukes ved 5+ valg hvor det ikke er et behov for Ă„ synliggjĂžre alle valg. Elementet skal ha et forhĂ„ndssatt valg uten verdi som navngis pĂ„ en mĂ„te som informerer brukeren om konteksten (eksempel “Velg firma Ă„ representere”).

Avhengigheter

Ekspanderende hjelpetekst:

  • pkt-alert
  • pkt-button

Bruk i Vue og React

Denne komponenten fungerer som en drop-in erstatning for <select> og har ingen innebygget funksjonalitet i selve nedtrekksfeltet. Det betyr at du selv mÄ legge inn <option> i komponentens slot (Vue) / children (React). Vi anbefaler at du bruker v-model rett pÄ PktSelect-komponenten om du bruker Vue, eller value og onChange om du bruker React.

Dynamiske alternativer

Hvis alternativene er endrer seg dynamisk, sÄ anbefales det at alternativer sendes inn som en array av objekter i options-prop. Hvert option-objekt har fÞlgende egenskaper:

  • value: Verdi for alternativet
  • label: Tekst for alternativet
  • selected: Angir om alternativet er valgt som default
  • disabled: Angir om alternativet er deaktivert
const options = [
  { value: 0, label: "Velg ditt foretrukne rammeverk" },
  { value: 1, label: "Vue.js" },
  { value: 2, label: "React" },
  { value: 3, label: "Web components" },
  { value: 4, label: "Svelte" },
];

<pkt-select options={options}></pkt-select>

Varianter

<div class="pkt-inputwrapper">
  <label class="pkt-inputwrapper__label" for="exampleSelect1">
    <span>Hva er ditt foretrukne frontendrammeverk?</span>
    <div class="pkt-inputwrapper__helptext">
      Vi bruker ikke svarene pÄ denne til noe nyttig.
    </div>
    <select class="pkt-input" id="exampleSelect1">
      <option selected>Velg ditt foretrukne rammeverk</option>
      <option value="1">Vue.js</option>
      <option value="2">React</option>
      <option value="3">Web components</option>
      <option value="4">Svelte</option>
    </select>
  </label>
</div>
<PktSelect
  label="Hva er ditt foretrukne frontendrammeverk?"
  helptext="Vi bruker ikke svarene pÄ denne til noe nyttig."
  id="exampleSelect1"
  v-model="preferedframework"
>
  <option selected>Velg ditt foretrukne rammeverk</option>
  <option value="1">Vue.js</option>
  <option value="2">React</option>
  <option value="3">Web components</option>
  <option value="4">Svelte</option>
</PktSelect>
<PktSelect
  label="Hva er ditt foretrukne frontendrammeverk?"
  helptext="Vi bruker ikke svarene pÄ denne til noe nyttig."
  id="exampleSelect1"
  value={preferedframework}
  onChange={setPreferedFramework}
>
  <option selected>Velg ditt foretrukne rammeverk</option>
  <option value="1">Vue.js</option>
  <option value="2">React</option>
  <option value="3">Web components</option>
  <option value="4">Svelte</option>
</PktSelect>

Disabled

<div class="pkt-inputwrapper pkt-inputwrapper--disabled">
  <label class="pkt-inputwrapper__label" for="exampleSelect1">
    <span>Hva er ditt foretrukne frontendrammeverk? (Disabled)</span>
    <div class="pkt-inputwrapper__helptext">
      Vi bruker ikke svarene pÄ denne til noe nyttig.
    </div>
    <select class="pkt-input" id="exampleSelect1" disabled>
      <option selected>Velg ditt foretrukne rammeverk</option>
      <option value="1">Vue.js</option>
      <option value="2">React</option>
      <option value="3">Web components</option>
      <option value="4">Svelte</option>
    </select>
  </label>
</div>
<PktSelect
  label="Hva er ditt foretrukne frontendrammeverk?"
  helptext="Vi bruker ikke svarene pÄ denne til noe nyttig."
  id="exampleSelect1"
  v-model="preferedframework"
  disabled
>
  <option selected>Velg ditt foretrukne rammeverk</option>
  <option value="1">Vue.js</option>
  <option value="2">React</option>
  <option value="3">Web components</option>
  <option value="4">Svelte</option>
</PktSelect>
<PktSelect
  label="Hva er ditt foretrukne frontendrammeverk?"
  helptext="Vi bruker ikke svarene pÄ denne til noe nyttig."
  id="exampleSelect1"
  value={preferedframework}
  onChange={setPreferedFramework}
  disabled
>
  <option selected>Velg ditt foretrukne rammeverk</option>
  <option value="1">Vue.js</option>
  <option value="2">React</option>
  <option value="3">Web components</option>
  <option value="4">Svelte</option>
</PktSelect>

Error

Dette er en feilmelding
  <div class="pkt-inputwrapper pkt-inputwrapper--error">
    <label class="pkt-inputwrapper__label" for="exampleSelect1">
      <span>Hva er ditt foretrukne frontendrammeverk? (Disabled)</span>
      <div class="pkt-inputwrapper__helptext">
        Vi bruker ikke svarene pÄ denne til noe nyttig.
      </div>
      <select class="pkt-input" id="exampleSelect1">
        <option selected>Velg ditt foretrukne rammeverk</option>
        <option value="1">Vue.js</option>
        <option value="2">React</option>
        <option value="3">Web components</option>
        <option value="4">Svelte</option>
      </select>
    </label>
    <div class="pkt-alert pkt-alert--error pkt-alert--compact" aria-live="assertive">
      <span class="pkt-icon pkt-alert__icon">
        <svg viewBox="0 0 32 32" aria-hidden="true">
          <use href="#alert-error"></use>
        </svg>
      </span>
      <div class="pkt-alert__text">Dette er en feilmelding</div>
    </div>
  </div>
<PktSelect
  label="Hva er ditt foretrukne frontendrammeverk?"
  helptext="Vi bruker ikke svarene pÄ denne til noe nyttig."
  id="exampleSelect1"
  v-model="preferedframework"
  hasError
  errorMessage="Dette er en feilmelding"
>
  <option selected>Velg ditt foretrukne rammeverk</option>
  <option value="1">Vue.js</option>
  <option value="2">React</option>
  <option value="3">Web components</option>
  <option value="4">Svelte</option>
</PktSelect>
<PktSelect
  label="Hva er ditt foretrukne frontendrammeverk?"
  helptext="Vi bruker ikke svarene pÄ denne til noe nyttig."
  id="exampleSelect1"
  value={preferedframework}
  onChange={setPreferedFramework}
  hasError
  errorMessage="Dette er en feilmelding"
>
  <option selected>Velg ditt foretrukne rammeverk</option>
  <option value="1">Vue.js</option>
  <option value="2">React</option>
  <option value="3">Web components</option>
  <option value="4">Svelte</option>
</PktSelect>

CSS oversikt

I Punkt brukes BEM-styling. Under er Select sin CSS-struktur.

Block:

  • .pkt-select
  • .pkt-inputwrapper

Elements:

  • .pkt-inputwrapper__label
  • .pkt-inputwrapper__helptext
  • .pkt-input__container
  • .pkt-input
  • .pkt-inputwrapper__helptext-expandable
  • .pkt-inputwrapper__helptext-expandable-heading
  • .pkt-inputwrapper__helptext-expandable-open
  • .pkt-inputwrapper__helptext-expandable-closed

Modifiers:

  • .pkt-inputwrapper--disabled
  • .pkt-inputwrapper--error
  • .pkt-inputwrapper--inline
  • .pkt-input--fullwidth

Props, slots og events

Props

PropsTypeValidationDefaultBeskrivelse
idstringRequired-ID for inputfeltet
labelstringRequired-Etiketten for inputfeltet
ariaDescribedbystring--aria for elementet som beskriver inputfeltet
ariaLabelledbystring--aria for elementet som beskriver inputfeltet
classNamestring--Tilpasset CSS-klasse for inputfeltet
disabledboolean-falseAngir om inputfeltet er deaktivert
errorMessagestring, ReactNode, ReactNode[]--Feilmelding som vises nÄr det er en feil i inputfeltet
hasErrorboolean-falseAngir om inputfeltet har en feil
helptextstring, ReactNode, ReactNode[]--Hjelpetekst som vises over inputfeltet
helptextDropdownstring, ReactNode, ReactNode[]--Hjelpetekst som er skjult bak “Les mer”-knapp
helptextDropdownButtonstring--Alternativ tekst til “Les mer”-knapp
inlineboolean-falseAngir om inputfelt skal vises i en linje
fullwidthboolean-falseSett select-elementet til Ă„ ha full bredde
namestring-idNavnet for inputfeltet
optionalTagboolean-falseAngir om inputfeltet skal ha et valgfritt-merke
optionalTextstring-‘Valgfritt’Overstyre tekst for optionalTag-merke
requiredTagboolean-falseAngir om inputfeltet er pÄkrevd
requiredTextstring-‘MĂ„ fylles ut’Overstyre tekst for requiredTag-merke
useWrapperboolean-trueAngir om feltet skal ha label og hjelpetekst eller om det skal stÄ alene
valuestring--Verdien for inputfeltet
optionsTSelectOption[]--Alternativer for feltet. Hvis alternativene er endrer seg dynamisk, bĂžr alternativer sendes inn her.

TSelectOption

TSelectOption er en type som brukes til Ă„ definere alternativer for PktSelect. Denne er et objekt med fĂžlgende egenskaper props:

PropTypeValidationDefaultBeskrivelse
valuestringRequiredVerdi for alternativet
labelstringRequiredTekst for alternativet
selectedboolean--Angir om alternativet er valgt som default
disabledboolean--Angir om alternativet er deaktivert

Slots

SlotsTypeValidationDefaultBeskrivelse
defaultVue--
childrenReact--

Events

EventsTypeValidationDefaultBeskrivelse
inputVueUtlÞses nÄr verdien i inputfeltet endres. Sender den nye verdien som parameter til eventet.

React Merk: Denne komponenten er videresendt med forwardRef, sÄ den stÞtter ogsÄ Ä motta en ref som en ekstra prop. Denne ref-propen kan brukes til Ä referere til selve inputfeltet og fÄ tilgang til dets egenskaper og metoder.

Les mer