From 2a85732d1b7c3d31a6dd01d53c46ab20ad9f1454 Mon Sep 17 00:00:00 2001 From: Julian Nymark Date: Mon, 9 Dec 2024 16:32:06 +0100 Subject: [PATCH 01/20] change: support icon in ErrorMessage + warning icon for textarea error --- .../css/darkside/form/textarea.darkside.css | 23 ++++++++++++ .../core/react/src/form/textarea/Textarea.tsx | 13 ++++++- .../react/src/typography/ErrorMessage.tsx | 37 +++++++++++-------- 3 files changed, 56 insertions(+), 17 deletions(-) diff --git a/@navikt/core/css/darkside/form/textarea.darkside.css b/@navikt/core/css/darkside/form/textarea.darkside.css index 2e3bd00d5a..37137050ce 100644 --- a/@navikt/core/css/darkside/form/textarea.darkside.css +++ b/@navikt/core/css/darkside/form/textarea.darkside.css @@ -94,6 +94,29 @@ border-color: var(--ax-border-danger); } +.navds-textarea--error { + .navds-form-field__error { + display: flex; + align-items: center; + gap: 4px; + line-height: 20px; + } + + &.navds-form-field { + .navds-error-message { + gap: 0; + + &::before { + content: ""; + } + } + + svg { + margin-bottom: 2px; + } + } +} + @media (forced-colors: active) { .navds-textarea__input { background-color: field; diff --git a/@navikt/core/react/src/form/textarea/Textarea.tsx b/@navikt/core/react/src/form/textarea/Textarea.tsx index 6836c9cd84..5388378de5 100644 --- a/@navikt/core/react/src/form/textarea/Textarea.tsx +++ b/@navikt/core/react/src/form/textarea/Textarea.tsx @@ -1,5 +1,6 @@ import cl from "clsx"; import React, { forwardRef, useState } from "react"; +import { ExclamationmarkTriangleFillIcon } from "@navikt/aksel-icons"; import { BodyShort, ErrorMessage, Label } from "../../typography"; import { omit } from "../../util"; import TextareaAutosize from "../../util/TextareaAutoSize"; @@ -192,7 +193,17 @@ export const Textarea = forwardRef( aria-live="polite" > {showErrorMsg && ( - {props.error} + + } + > + {props.error} + )} diff --git a/@navikt/core/react/src/typography/ErrorMessage.tsx b/@navikt/core/react/src/typography/ErrorMessage.tsx index e89ddb4f0d..ba5c7ca783 100644 --- a/@navikt/core/react/src/typography/ErrorMessage.tsx +++ b/@navikt/core/react/src/typography/ErrorMessage.tsx @@ -16,6 +16,8 @@ export interface ErrorMessageProps * Error text. */ children: React.ReactNode; + + icon?: React.ReactNode; } /** @@ -36,22 +38,25 @@ export const ErrorMessage: OverridableComponent< ErrorMessageProps, HTMLParagraphElement > = forwardRef( - ({ className, size, spacing, as: Component = "p", ...rest }, ref) => ( - + ({ className, size, spacing, as: Component = "p", icon, ...rest }, ref) => ( + <> + {icon} + + ), ); From b27488897252ad91826d4ee7a817104272af61fd Mon Sep 17 00:00:00 2001 From: Julian Nymark Date: Tue, 10 Dec 2024 12:06:22 +0100 Subject: [PATCH 02/20] change: ignore icon on old CSS + tweaks --- .../css/darkside/form/textarea.darkside.css | 16 +++++++++++++--- @navikt/core/css/form/textarea.css | 6 ++++++ .../src/form/textarea/textarea.stories.tsx | 19 +++++++++++++++++++ 3 files changed, 38 insertions(+), 3 deletions(-) diff --git a/@navikt/core/css/darkside/form/textarea.darkside.css b/@navikt/core/css/darkside/form/textarea.darkside.css index 37137050ce..ef7fb1b238 100644 --- a/@navikt/core/css/darkside/form/textarea.darkside.css +++ b/@navikt/core/css/darkside/form/textarea.darkside.css @@ -97,9 +97,8 @@ .navds-textarea--error { .navds-form-field__error { display: flex; - align-items: center; + align-items: flex-start; gap: 4px; - line-height: 20px; } &.navds-form-field { @@ -112,7 +111,18 @@ } svg { - margin-bottom: 2px; + margin-top: 1px; + width: 18px; + flex: 1 0 auto; + } + } +} + +.navds-textarea--error.navds-form-field--small { + &.navds-form-field { + svg { + margin-top: 0; + width: 16px; } } } diff --git a/@navikt/core/css/form/textarea.css b/@navikt/core/css/form/textarea.css index 9918e0a845..8bfd562081 100644 --- a/@navikt/core/css/form/textarea.css +++ b/@navikt/core/css/form/textarea.css @@ -116,6 +116,12 @@ border-color: var(--ac-textarea-error-border, var(--__ac-textarea-error-border, var(--a-border-danger))); } +.navds-textarea--error { + svg { + display: none; + } +} + @supports not selector(:focus-visible) { .navds-textarea--error .navds-textarea__input:not(:hover, :focus, :disabled) { box-shadow: 0 0 0 1px var(--ac-textarea-error-border, var(--__ac-textarea-error-border, var(--a-border-danger))); diff --git a/@navikt/core/react/src/form/textarea/textarea.stories.tsx b/@navikt/core/react/src/form/textarea/textarea.stories.tsx index 1f4fc315a4..13772cdb50 100644 --- a/@navikt/core/react/src/form/textarea/textarea.stories.tsx +++ b/@navikt/core/react/src/form/textarea/textarea.stories.tsx @@ -2,6 +2,7 @@ import { Meta, StoryFn, StoryObj } from "@storybook/react"; import { expect, userEvent, within } from "@storybook/test"; import React, { useState } from "react"; import { Button } from "../../button"; +import { VStack } from "../../layout/stack"; import { Modal } from "../../modal"; import { Textarea } from "./index"; @@ -74,6 +75,24 @@ export const WithError: StoryFn = () => { size="small" /> + +