` : ''}
`;
}
@@ -347,6 +384,18 @@ export class FhiTextInput extends LitElement {
}
}
+ slot[name='start'] {
+ color: var(--fhi-color-neutral-text-subtle);
+ }
+
+ input:not([disabled]):not([readonly]):hover ~ slot[name='start'] {
+ color: var(--fhi-color-accent-text-subtle);
+ }
+ input:not([disabled]):not([readonly]):active ~ slot[name='start'],
+ input:not([disabled]):not([readonly]):focus ~ slot[name='start'] {
+ color: var(--fhi-color-accent-text-default);
+ }
+
.message {
margin: var(--dimension-message-margin-top) 0 0 0;
color: var(--color-message-text);
@@ -364,6 +413,34 @@ export class FhiTextInput extends LitElement {
letter-spacing: var(--typography-help-text-letter-spacing);
margin: 0 0 var(--dimension-help-text-margin-bottom) 0;
}
+
+ .input-container {
+ position: relative;
+ width: fit-content;
+ }
+
+ slot[name='start'] {
+ display: block;
+ position: absolute;
+ left: 0;
+ top: 50%;
+ transform: translateY(-50%);
+ margin-left: 8px;
+ height: fit-content;
+ pointer-events: none;
+ }
+
+ slot[name='end'] {
+ display: block;
+ position: absolute;
+ right: 0;
+ top: 50%;
+ transform: translateY(-50%);
+ margin-right: 8px;
+ height: fit-content;
+ pointer-events: none;
+ color: var(--fhi-color-neutral-text-subtle);
+ }
}
:host([disabled]) {
@@ -406,6 +483,16 @@ export class FhiTextInput extends LitElement {
.help-text {
color: var(--color-help-text-text-error);
}
+ slot[name='start'] {
+ color: var(--fhi-color-danger-text-subtle);
+ }
+
+ input:hover ~ slot[name='start'] {
+ color: var(--fhi-color-danger-text-subtle);
+ }
+ input:focus ~ slot[name='start'] {
+ color: var(--fhi-color-danger-text-subtle);
+ }
}
`;
}
diff --git a/packages/fhi-designsystem/src/components/fhi-text-input/fhi-text-input.docs.mdx b/packages/fhi-designsystem/src/components/fhi-text-input/fhi-text-input.docs.mdx
index 1957ae00..d91f6016 100644
--- a/packages/fhi-designsystem/src/components/fhi-text-input/fhi-text-input.docs.mdx
+++ b/packages/fhi-designsystem/src/components/fhi-text-input/fhi-text-input.docs.mdx
@@ -29,6 +29,16 @@ Text Input lar brukere skrive inn data, slik som navn, telefonnumre og e-postadr
Uttrykker at noe mangler eller er skrevet feil.
+### Ikon
+
+Ikon kan settes til venstre i feltet for å gi visuelle signaler om hvilken data man etterspør. Noen eksempler kan være en konvolutt for e-postadresse, en nøkkel eller lås for passord og bruker for navn eller brukernavn.
+
+Bruk ikon med omhu. Ethvert ikon er et nytt visuelt element som brukeren må forholde seg til. Det kan bli mange på skjermen samtidig, noe som kan føles unødvendig travelt ut.
+
+Hvis ikonet skal være knyttet til en handling, settes det til høyre. Dette kan for eksempel være å la brukeren nullstille verdien eller vise og skjule passordet man skriver inn. Dette kan også vurderes til å indikere validering, om svaret er gyldig eller ikke.
+
+
+
### Form Controls
#### `readonly`
Gjør at feltet ikke kan endres. Feltet vil fortsatt kunne fokuseres og vil automatisk bli inkludert i FormData.
diff --git a/packages/fhi-designsystem/src/components/fhi-text-input/fhi-text-input.stories.ts b/packages/fhi-designsystem/src/components/fhi-text-input/fhi-text-input.stories.ts
index 7bc07f34..ebbfbae4 100644
--- a/packages/fhi-designsystem/src/components/fhi-text-input/fhi-text-input.stories.ts
+++ b/packages/fhi-designsystem/src/components/fhi-text-input/fhi-text-input.stories.ts
@@ -6,8 +6,12 @@ import { ifDefined } from 'lit/directives/if-defined.js';
import { FhiStorybookMeta } from '../../../.storybook/fhi-meta';
import { FhiTextInput } from './fhi-text-input.component';
+import { FhiIconUser } from '../icons/fhi-icon-user.component';
+import { FhiIconSearch } from '../icons/fhi-icon-search.component';
new FhiTextInput();
+new FhiIconUser();
+new FhiIconSearch();
const meta: FhiStorybookMeta = {
title: 'Komponenter/Text Input',
@@ -32,8 +36,25 @@ const meta: FhiStorybookMeta = {
valueLocation: ['event.target.value'],
},
],
+ slotTypes: [
+ {
+ name: 'start',
+ description: 'Ikon på venstre side i inputfeltet.',
+ },
+ {
+ name: 'end',
+ description: 'Ikon på høyre side i inputfeltet.',
+ },
+ ],
},
- decorators: [story => html`