From c916df00add50659139ba926927ad162110958be Mon Sep 17 00:00:00 2001 From: eirikbacker Date: Mon, 30 Sep 2024 16:50:25 +0200 Subject: [PATCH 01/29] feat: relative sizing --- packages/css/button.css | 9 --- .../src/components/Button/Button.stories.tsx | 79 ++++++++++++------- 2 files changed, 49 insertions(+), 39 deletions(-) diff --git a/packages/css/button.css b/packages/css/button.css index 2acc5171de..0d60c0e27f 100644 --- a/packages/css/button.css +++ b/packages/css/button.css @@ -38,19 +38,10 @@ } &[data-size='sm'] { - --dsc-button-gap: var(--ds-sizing-1); - --dsc-button-padding-block: var(--ds-spacing-2); - --dsc-button-padding-inline: var(--ds-spacing-3); - --dsc-button-size: var(--ds-sizing-10); - @composes ds-body-text--short-sm from './utilities.css'; } &[data-size='lg'] { - --dsc-button-padding-block: var(--ds-spacing-3); - --dsc-button-padding-inline: var(--ds-spacing-5); - --dsc-button-size: var(--ds-sizing-14); - @composes ds-body-text--short-lg from './utilities.css'; } diff --git a/packages/react/src/components/Button/Button.stories.tsx b/packages/react/src/components/Button/Button.stories.tsx index 3ee84be702..970ef69e03 100644 --- a/packages/react/src/components/Button/Button.stories.tsx +++ b/packages/react/src/components/Button/Button.stories.tsx @@ -8,14 +8,13 @@ import { ExternalLinkIcon, PencilWritingIcon, PlusCircleIcon, - PlusIcon, PrinterSmallIcon, TrashIcon, } from '@navikt/aksel-icons'; import type { Meta, ReactRenderer, StoryFn, StoryObj } from '@storybook/react'; import type { PartialStoryFn } from '@storybook/types'; -import { Spinner, Tooltip } from '../'; +import { Tooltip } from '../'; import { Button } from './'; @@ -24,15 +23,55 @@ type Story = StoryObj; const meta: Meta = { title: 'Komponenter/Button', component: Button, + decorators: [ + (Story: PartialStoryFn) => ( + + + + + ), + ], }; export default meta; -const stack = (Story: PartialStoryFn) => ( - - - -); export const Preview: Story = { render: ({ ...args }) => { return - - ); - -IconsOnlyPrimary.decorators = [stack]; From 76d98f4fa8e0913089c6af564324c3f0a17fef1e Mon Sep 17 00:00:00 2001 From: eirikbacker Date: Tue, 1 Oct 2024 08:44:28 +0200 Subject: [PATCH 02/29] fix: round values --- .../src/components/Button/Button.stories.tsx | 39 +++++-------------- 1 file changed, 9 insertions(+), 30 deletions(-) diff --git a/packages/react/src/components/Button/Button.stories.tsx b/packages/react/src/components/Button/Button.stories.tsx index 970ef69e03..08f6622460 100644 --- a/packages/react/src/components/Button/Button.stories.tsx +++ b/packages/react/src/components/Button/Button.stories.tsx @@ -28,37 +28,16 @@ const meta: Meta = { ), From f048a0993f9ae98bb956e9907767732c79ccdf73 Mon Sep 17 00:00:00 2001 From: eirikbacker Date: Mon, 21 Oct 2024 12:03:43 +0200 Subject: [PATCH 05/29] fix: adjust sizing to use relative --- packages/css/alert.css | 19 ---------------- packages/css/avatar.css | 30 ------------------------- packages/css/badge.css | 24 -------------------- packages/css/breadcrumbs.css | 16 -------------- packages/css/button.css | 22 +------------------ packages/css/card.css | 2 -- packages/css/chip.css | 17 --------------- packages/css/dropdown.css | 2 -- packages/css/helptext.css | 10 --------- packages/css/index.css | 16 ++++++++++++++ packages/css/input.css | 34 ----------------------------- packages/css/label.css | 17 +-------------- packages/css/list.css | 14 ------------ packages/css/pagination.css | 10 --------- packages/css/popover.css | 14 ------------ packages/css/spinner.css | 4 ++-- packages/css/table.css | 17 --------------- packages/css/tabs.css | 16 -------------- packages/css/tag.css | 16 -------------- packages/css/tooltip.css | 2 -- packages/css/validation-message.css | 21 ------------------ 21 files changed, 20 insertions(+), 303 deletions(-) diff --git a/packages/css/alert.css b/packages/css/alert.css index 09cb3c410c..411d271171 100644 --- a/packages/css/alert.css +++ b/packages/css/alert.css @@ -17,8 +17,6 @@ padding-block: var(--dsc-alert-padding); padding-inline: calc(var(--dsc-alert-padding) + var(--dsc-alert-icon-size) + var(--dsc-alert-gap)) var(--dsc-alert-padding); - @composes ds-body-text--md from './base/base.css'; - & > :is(h1, h2, h3, h4, h5, h6):first-child::before /* If Alert starts with Heading, align icon to this */, &:not(:has(> :is(h1, h2, h3, h4, h5, h6):first-child))::before /* If there is no Heading, align icon to Alert itself */ { background: var(--dsc-alert-icon-color); @@ -54,21 +52,4 @@ --dsc-alert-icon-color: var(--ds-color-danger-text-subtle); --dsc-alert-icon-url: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 24 24'%3E%3Cpath fill-rule='evenodd' d='M7.74 2.47a.75.75 0 0 1 .53-.22h7.46a.75.75 0 0 1 .53.22l5.27 5.27c.14.14.22.33.22.53v7.46a.75.75 0 0 1-.22.53l-5.27 5.27a.75.75 0 0 1-.53.22H8.27a.75.75 0 0 1-.53-.22l-5.27-5.27a.75.75 0 0 1-.22-.53V8.27a.75.75 0 0 1 .22-.53zm1.29 5.5a.75.75 0 0 0-1.06 1.06L10.94 12l-2.97 2.97a.75.75 0 1 0 1.06 1.06L12 13.06l2.97 2.97a.75.75 0 1 0 1.06-1.06L13.06 12l2.97-2.97a.75.75 0 0 0-1.06-1.06L12 10.94z'/%3E%3C/svg%3E"); } - - /** - * Sizes - */ - &[data-size='sm'] { - --dsc-alert-icon-size: var(--ds-sizing-6); - --dsc-alert-padding: var(--ds-spacing-5); - - @composes ds-body-text--sm from './base/base.css'; - } - - &[data-size='lg'] { - --dsc-alert-icon-size: var(--ds-sizing-8); - --dsc-alert-padding: var(--ds-spacing-7); - - @composes ds-body-text--lg from './base/base.css'; - } } diff --git a/packages/css/avatar.css b/packages/css/avatar.css index 960f218904..8a0f36cddc 100644 --- a/packages/css/avatar.css +++ b/packages/css/avatar.css @@ -19,8 +19,6 @@ text-transform: uppercase; user-select: none; - @composes ds-body-text--xs from './base/base.css'; - &:not(:has(> img)) { padding: var(--dsc-avatar-padding); } @@ -78,32 +76,4 @@ --dsc-avatar-background: var(--ds-color-brand3-base-default); --dsc-avatar-color: var(--ds-color-brand3-contrast-default); } - - &[data-size='xs'] { - --dsc-avatar-size: var(--ds-sizing-7); - --dsc-avatar-padding: var(--ds-spacing-1); - - @composes ds-body-text--xs from './base/base.css'; - } - - &[data-size='sm'] { - --dsc-avatar-size: var(--ds-sizing-9); - --dsc-avatar-padding: var(--ds-spacing-1); - - @composes ds-heading-text--2xs from './base/base.css'; - } - - &[data-size='md'] { - --dsc-avatar-size: var(--ds-sizing-12); - --dsc-avatar-padding: var(--ds-spacing-2); - - @composes ds-heading-text--sm from './base/base.css'; - } - - &[data-size='lg'] { - --dsc-avatar-size: var(--ds-sizing-15); - --dsc-avatar-padding: var(--ds-spacing-2); - - @composes ds-heading-text--md from './base/base.css'; - } } diff --git a/packages/css/badge.css b/packages/css/badge.css index 6d171b3bf8..0458429aa5 100644 --- a/packages/css/badge.css +++ b/packages/css/badge.css @@ -8,8 +8,6 @@ display: inline-flex; position: relative; - @composes ds-body-text--short-sm from './base/base.css'; - &::before { content: attr(data-count); background: var(--dsc-badge-background); @@ -23,28 +21,6 @@ place-items: center; } - &[data-size='sm'] { - --dsc-badge-size: var(--ds-sizing-3); - --dsc-badge-padding: 0 var(--ds-spacing-1); - - @composes ds-body-text--short-xs from './base/base.css'; - - &[data-count] { - --dsc-badge-size: var(--ds-sizing-5); - } - } - - &[data-size='lg'] { - --dsc-badge-size: var(--ds-sizing-4); - --dsc-badge-padding: 0 var(--ds-spacing-2); - - @composes ds-body-text--short-md from './base/base.css'; - - &[data-count] { - --dsc-badge-size: var(--ds-sizing-7); - } - } - &[data-color='info'] { --dsc-badge-background: var(--ds-color-info-base-default); --dsc-badge-color: var(--ds-color-info-contrast-default); diff --git a/packages/css/breadcrumbs.css b/packages/css/breadcrumbs.css index 851f4d2dda..fb778a47d0 100644 --- a/packages/css/breadcrumbs.css +++ b/packages/css/breadcrumbs.css @@ -3,22 +3,6 @@ --dsc-breadcrumbs-chevron-size: var(--ds-sizing-6); --dsc-breadcrumbs-icon-url: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' width='20' height='20' viewBox='0 0 24 24'%3E%3Cpath d='M9.47 5.97a.75.75 0 0 1 1.06 0l5.5 5.5a.75.75 0 0 1 0 1.06l-5.5 5.5a.75.75 0 1 1-1.06-1.06L14.44 12 9.47 7.03a.75.75 0 0 1 0-1.06'/%3E%3C/svg%3E"); - @composes ds-body-text--md from './base/base.css'; - - &[data-size='sm'] { - --dsc-breadcrumbs-spacing: var(--ds-spacing-1); - --dsc-breadcrumbs-chevron-size: var(--ds-sizing-5); - - @composes ds-body-text--sm from './base/base.css'; - } - - &[data-size='lg'] { - --dsc-breadcrumbs-spacing: var(--ds-spacing-3); - --dsc-breadcrumbs-chevron-size: var(--ds-sizing-7); - - @composes ds-body-text--lg from './base/base.css'; - } - & > :is(ol, ul) { display: flex; flex-wrap: wrap; diff --git a/packages/css/button.css b/packages/css/button.css index 8f4633e92f..ad74be8ab6 100644 --- a/packages/css/button.css +++ b/packages/css/button.css @@ -9,7 +9,6 @@ --dsc-button-padding-inline: var(--ds-spacing-4); --dsc-button-size: var(--ds-sizing-12); - @composes ds-body-text--short-md from './base/base.css'; @composes ds-focus from './base/base.css'; align-items: center; @@ -28,7 +27,7 @@ padding: var(--dsc-button-padding-block) var(--dsc-button-padding-inline); text-align: inherit; text-decoration: none; - font-weight: var(--ds-font-weight-medium); + font-weight: var(--ds-font-weight-medium) !important; /* TODO: Fix */ & svg, & img { @@ -43,25 +42,6 @@ display: flex; } - &[data-size='sm'] { - --dsc-button-gap: var(--ds-sizing-1); - --dsc-button-padding-block: var(--ds-spacing-2); - --dsc-button-padding-inline: var(--ds-spacing-3); - --dsc-button-size: var(--ds-sizing-10); - - @composes ds-body-text--short-sm from './base/base.css'; - font-weight: var(--ds-font-weight-medium); - } - - &[data-size='lg'] { - --dsc-button-padding-block: var(--ds-spacing-3); - --dsc-button-padding-inline: var(--ds-spacing-5); - --dsc-button-size: var(--ds-sizing-14); - - @composes ds-body-text--short-lg from './base/base.css'; - font-weight: var(--ds-font-weight-medium); - } - &[data-icon] { padding-inline: var(--dsc-button-padding-block); } diff --git a/packages/css/card.css b/packages/css/card.css index d6a3f56c93..40419ac7f5 100644 --- a/packages/css/card.css +++ b/packages/css/card.css @@ -18,8 +18,6 @@ overflow: clip; /* Needed to clip media elements and and Card.Block */ padding: var(--dsc-card-padding); - @composes ds-paragraph from './paragraph.css'; /* Must be after all: unset */ - /* Style link in heading, or heading when Card is anchor */ :is(h1, h2, h3, h4, h5, h6) a:any-link /* Using :any-link to target both a and a:visited */, &:is(a:any-link, button, [role='button']) :is(h1, h2, h3, h4, h5, h6) { diff --git a/packages/css/chip.css b/packages/css/chip.css index 691d73c1d2..c641b73fab 100644 --- a/packages/css/chip.css +++ b/packages/css/chip.css @@ -10,7 +10,6 @@ --dsc-chip-padding: 0 var(--ds-spacing-3); @composes ds-focus from './base/base.css'; - @composes ds-body-text--short-sm from './base/base.css'; align-items: center; background: var(--dsc-chip-background); @@ -54,22 +53,6 @@ width: var(--dsc-chip-icon-size); } - &[data-size='sm'] { - --dsc-chip-height: var(--ds-sizing-7); - --dsc-chip-icon-size: var(--ds-sizing-5); - --dsc-chip-input-size: var(--ds-spacing-4); - - @composes ds-body-text--short-xs from './base/base.css'; - } - - &[data-size='lg'] { - --dsc-chip-height: var(--ds-sizing-9); - --dsc-chip-icon-size: var(--ds-sizing-7); - --dsc-chip-input-size: var(--ds-spacing-6); - - @composes ds-body-text--short-md from './base/base.css'; - } - & > input { --gap: calc((var(--dsc-chip-height) - var(--dsc-chip-input-size)) / 2); /* Gap is based on remaining space between input and edge */ diff --git a/packages/css/dropdown.css b/packages/css/dropdown.css index 07d28a6234..8ba159ef03 100644 --- a/packages/css/dropdown.css +++ b/packages/css/dropdown.css @@ -25,7 +25,6 @@ } &[data-size='sm'] { - --dsc-dropdown-padding: var(--ds-spacing-2); --dsc-dropdown-min-width: 15rem; & .ds-dropdown__heading { @@ -34,7 +33,6 @@ } &[data-size='lg'] { - --dsc-dropdown-padding: var(--ds-spacing-4) var(--ds-spacing-2); --dsc-dropdown-min-width: 18rem; & .ds-dropdown__heading { diff --git a/packages/css/helptext.css b/packages/css/helptext.css index 9901e869dd..0b52a54e63 100644 --- a/packages/css/helptext.css +++ b/packages/css/helptext.css @@ -3,8 +3,6 @@ --dsc-helptext-icon-url: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' fill='none' viewBox='0 0 8 14'%3E%3Cpath fill='%23000' fill-rule='evenodd' d='M4 11a1.5 1.5 0 1 1 0 3 1.5 1.5 0 0 1 0-3ZM4 0c2.2 0 4 1.66 4 3.7 0 .98-.42 1.9-1.17 2.6l-.6.54-.29.29c-.48.46-.87.93-.94 1.41V9.5H3v-.81c0-1.26.84-2.22 1.68-3L5.42 5C5.8 4.65 6 4.2 6 3.7 6 2.66 5.1 1.83 4 1.83c-1.06 0-1.92.75-2 1.7v.15H0C0 1.66 1.8 0 4 0Z' clip-rule='evenodd'/%3E%3C/svg%3E"); --dsc-helptext-size: var(--ds-sizing-7); - @composes ds-focus from './base/base.css'; - border-radius: var(--ds-border-radius-full); border: 2px solid; box-sizing: border-box; @@ -33,14 +31,6 @@ mask-image: var(--dsc-helptext-icon-url), linear-gradient(currentcolor, currentcolor); /* Cut icon out of currentcolor surface */ } - &[data-size='sm'] { - --dsc-helptext-size: var(--ds-sizing-6); - } - - &[data-size='lg'] { - --dsc-helptext-size: var(--ds-sizing-8); - } - @media print { display: none; } diff --git a/packages/css/index.css b/packages/css/index.css index 24ae0a4cde..70ecc00318 100644 --- a/packages/css/index.css +++ b/packages/css/index.css @@ -55,6 +55,22 @@ Array.from( .join('\n') */ +[data-size='xs'] { + @composes ds-body-text--xs from './base/base.css'; +} + +[data-size='sm'] { + @composes ds-body-text--sm from './base/base.css'; +} + +[data-size='md'] { + @composes ds-body-text--md from './base/base.css'; +} + +[data-size='lg'] { + @composes ds-body-text--lg from './base/base.css'; +} + :root { --ds-sizing-scale-base: var(--ds-font-size-5); --ds-sizing-scale-min: 0.125rem; /* Minimum 2px steps */ diff --git a/packages/css/input.css b/packages/css/input.css index 958b2c7593..e6d24ca450 100644 --- a/packages/css/input.css +++ b/packages/css/input.css @@ -44,7 +44,6 @@ padding: var(--dsc-input-padding); position: relative; /* Ensure foucs outline renders on top */ - @composes ds-body-text--md from './base/base.css'; @composes ds-focus from './base/base.css'; /* Change switch background with low specificity to allow states to overwrite */ @@ -102,27 +101,6 @@ --dsc-input-color: var(--dsc-input-color--readonly); } - /** - * Sizes - */ - &[data-size='sm'] { - @composes ds-body-text--sm from './base/base.css'; - - --dsc-input-padding: var(--ds-spacing-1) var(--ds-spacing-2); - --dsc-input-size--switch: var(--ds-sizing-6); - --dsc-input-size--toggle: var(--ds-sizing-5); - --dsc-input-size: var(--ds-sizing-10); - } - - &[data-size='lg'] { - @composes ds-body-text--lg from './base/base.css'; - - --dsc-input-padding: var(--ds-spacing-3) var(--ds-spacing-4); - --dsc-input-size--switch: var(--ds-sizing-8); - --dsc-input-size--toggle: var(--ds-sizing-7); - --dsc-input-size: var(--ds-sizing-14); - } - /** * Toggle inputs */ @@ -233,16 +211,4 @@ label:has(input:is([type='checkbox'], [type='radio']):not(:disabled, [aria-disab flex: 1 1 auto; height: auto; } - - &:has([data-size='sm']) { - @composes ds-body-text--sm from './base/base.css'; - - --dsc-input-affix-padding-inline: var(--ds-spacing-3); - } - - &:has([data-size='lg']) { - @composes ds-body-text--lg from './base/base.css'; - - --dsc-input-affix-padding-inline: var(--ds-spacing-5); - } } diff --git a/packages/css/label.css b/packages/css/label.css index 952da6952c..6a0d9b1ef5 100644 --- a/packages/css/label.css +++ b/packages/css/label.css @@ -3,22 +3,7 @@ display: inline-block; margin: 0; padding: 0; - - @composes ds-label--md from './base/base.css'; - - font-weight: var(--ds-font-weight-medium); - - &[data-size='xs'] { - @composes ds-label--xs from './base/base.css'; - } - - &[data-size='sm'] { - @composes ds-label--sm from './base/base.css'; - } - - &[data-size='lg'] { - @composes ds-label--lg from './base/base.css'; - } + font-weight: var(--ds-font-weight-medium) !important; /* TODO: Fix */ &[data-weight='semibold'] { font-weight: var(--ds-font-weight-semibold); diff --git a/packages/css/list.css b/packages/css/list.css index cb7a19b13c..fe8bee54c1 100644 --- a/packages/css/list.css +++ b/packages/css/list.css @@ -6,8 +6,6 @@ margin: 0; padding-left: var(--dsc-list-padding-left); - @composes ds-body-text--md from './base/base.css'; - & > li + li { margin-top: var(--dsc-list-spacing); } @@ -23,16 +21,4 @@ content: '\200B'; position: absolute; } - - &[data-size='sm'] { - --dsc-list-padding-left: var(--ds-spacing-4); - - @composes ds-body-text--sm from './base/base.css'; - } - - &[data-size='lg'] { - --dsc-list-spacing: var(--ds-spacing-4); - - @composes ds-body-text--lg from './base/base.css'; - } } diff --git a/packages/css/pagination.css b/packages/css/pagination.css index 262114e19e..0a813398b9 100644 --- a/packages/css/pagination.css +++ b/packages/css/pagination.css @@ -41,16 +41,6 @@ } } - &[data-size='sm'] { - --dsc-pagination-gap: var(--ds-spacing-2); - --dsc-pagination-ellipsis-width: var(--ds-sizing-10); - } - - &[data-size='lg'] { - --dsc-pagination-gap: var(--ds-spacing-6); - --dsc-pagination-ellipsis-width: var(--ds-sizing-14); - } - &[data-compact] { --dsc-pagination-gap: var(--ds-spacing-0); } diff --git a/packages/css/popover.css b/packages/css/popover.css index f342e1114b..2640cf64bf 100644 --- a/packages/css/popover.css +++ b/packages/css/popover.css @@ -18,8 +18,6 @@ padding: var(--dsc-popover-padding); position: fixed; - @composes ds-body-text--md from './base/base.css'; - &::before { background: var(--dsc-popover-background); border: inherit; @@ -35,18 +33,6 @@ width: var(--dsc-popover-arrow-size); } - &[data-size='sm'] { - --dsc-popover-padding: var(--ds-spacing-2) var(--ds-spacing-3); - - @composes ds-body-text--sm from './base/base.css'; - } - - &[data-size='lg'] { - --dsc-popover-padding: var(--ds-spacing-3) var(--ds-spacing-5); - - @composes ds-body-text--lg from './base/base.css'; - } - &[data-placement='top']::before { top: 100%; rotate: 45deg; diff --git a/packages/css/spinner.css b/packages/css/spinner.css index e7caad77af..06d82a6af3 100644 --- a/packages/css/spinner.css +++ b/packages/css/spinner.css @@ -13,7 +13,7 @@ --dsc-spinner-stroke: var(--ds-color-accent-base-default); } - &[data-size='2xs'] { + /* &[data-size='2xs'] { --dsc-spinner-size: var(--ds-sizing-3); } @@ -31,7 +31,7 @@ &[data-size='xl'] { --dsc-spinner-size: var(--ds-sizing-22); - } + } */ } .ds-spinner__background { diff --git a/packages/css/table.css b/packages/css/table.css index 2d433b180e..13ccab5003 100644 --- a/packages/css/table.css +++ b/packages/css/table.css @@ -19,8 +19,6 @@ color: var(--dsc-table-color); width: 100%; - @composes ds-body-text--md from './base/base.css'; - & > :is(tbody, thead) > tr > :is(th, td) { background: var(--dsc-table-background); border-bottom: var(--dsc-table-border); @@ -110,21 +108,6 @@ } } - /** - * Sizes - */ - &[data-size='sm'] { - --dsc-table-padding: var(--ds-spacing-1) var(--ds-spacing-3); - - @composes ds-body-text--sm from './base/base.css'; - } - - &[data-size='lg'] { - --dsc-table-padding: var(--ds-spacing-3) var(--ds-spacing-3); - - @composes ds-body-text--lg from './base/base.css'; - } - /** * Configurations */ diff --git a/packages/css/tabs.css b/packages/css/tabs.css index af4b665671..12f1372025 100644 --- a/packages/css/tabs.css +++ b/packages/css/tabs.css @@ -5,22 +5,6 @@ --dsc-tabs-content-padding: var(--ds-spacing-5); --dsc-tabs-content-color: var(--ds-color-neutral-text-default); --dsc-tabs-list-border-color: var(--ds-color-neutral-border-subtle); - - @composes ds-body-text--short-md from './base/base.css'; - - &[data-size='sm'] { - --dsc-tabs-tab-padding: var(--ds-spacing-2) var(--ds-spacing-4); - --dsc-tabs-content-padding: var(--ds-spacing-4); - - @composes ds-body-text--short-sm from './base/base.css'; - } - - &[data-size='lg'] { - --dsc-tabs-tab-padding: var(--ds-spacing-4) var(--ds-spacing-6); - --dsc-tabs-content-padding: var(--ds-spacing-6); - - @composes ds-body-text--short-lg from './base/base.css'; - } } .ds-tabs__panel { diff --git a/packages/css/tag.css b/packages/css/tag.css index 51abf4219c..780958f54d 100644 --- a/packages/css/tag.css +++ b/packages/css/tag.css @@ -15,22 +15,6 @@ width: max-content; word-break: break-word; - @composes ds-body-text--short-md from './base/base.css'; - - &[data-size='sm'] { - --dsc-tag-padding: 0 var(--ds-spacing-2); - --dsc-tag-min-height: var(--ds-sizing-7); - - @composes ds-body-text--short-sm from './base/base.css'; - } - - &[data-size='lg'] { - --dsc-tag-padding: 0 var(--ds-spacing-3); - --dsc-tag-min-height: var(--ds-sizing-9); - - @composes ds-body-text--short-lg from './base/base.css'; - } - &[data-color='info'] { --dsc-tag-background: var(--ds-color-info-surface-default); --dsc-tag-color: var(--ds-color-info-text-default); diff --git a/packages/css/tooltip.css b/packages/css/tooltip.css index cc56d42579..2c907b6ed5 100644 --- a/packages/css/tooltip.css +++ b/packages/css/tooltip.css @@ -9,8 +9,6 @@ box-sizing: border-box; color: var(--dsc-tooltip-color); padding: var(--dsc-tooltip-padding); - - @composes ds-body-text--short-xs from './base/base.css'; } .ds-tooltip__arrow { diff --git a/packages/css/validation-message.css b/packages/css/validation-message.css index 29ac46c55d..52df534b52 100644 --- a/packages/css/validation-message.css +++ b/packages/css/validation-message.css @@ -5,27 +5,6 @@ margin: 0; /* Reset if rendered with

*/ - @composes ds-validation-message--md from './base/base.css'; - - &[data-size='xs'] { - --dsc-validation-message-icon-size: var(--ds-sizing-5); - --dsc-validation-message-gap: var(--ds-spacing-1); - - @composes ds-validation-message--xs from './base/base.css'; - } - - &[data-size='sm'] { - --dsc-validation-message-icon-size: var(--ds-sizing-6); - - @composes ds-validation-message--sm from './base/base.css'; - } - - &[data-size='lg'] { - --dsc-validation-message-icon-size: var(--ds-sizing-8); - - @composes ds-validation-message--lg from './base/base.css'; - } - /* Only render error icon if the ValidationMessage actually contains an error message */ &[data-error]:not(:empty) { color: var(--ds-color-danger-text-subtle); From a0b4cb8d0d7fd27aea17e9488cb3a6b2ccc2cbaa Mon Sep 17 00:00:00 2001 From: eirikbacker Date: Mon, 21 Oct 2024 12:32:37 +0200 Subject: [PATCH 06/29] fix(Button): adjust min-height --- packages/css/button.css | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/packages/css/button.css b/packages/css/button.css index ad74be8ab6..6df3e7e063 100644 --- a/packages/css/button.css +++ b/packages/css/button.css @@ -7,7 +7,7 @@ --dsc-button-gap: var(--ds-spacing-2); --dsc-button-padding-block: var(--ds-spacing-2); --dsc-button-padding-inline: var(--ds-spacing-4); - --dsc-button-size: var(--ds-sizing-12); + --dsc-button-size: var(--ds-sizing-9); @composes ds-focus from './base/base.css'; From 06439c9648b45251230887c26ecb73828178f3be Mon Sep 17 00:00:00 2001 From: eirikbacker Date: Tue, 22 Oct 2024 08:41:24 +0200 Subject: [PATCH 07/29] fix: start making sizing overview --- packages/css/accordion.css | 16 +-- packages/css/badge.css | 1 + packages/css/button.css | 25 ++-- packages/css/index.css | 80 ++++++++---- packages/css/input.css | 9 +- packages/css/label.css | 2 +- packages/css/pagination.css | 8 +- .../src/components/Alert/Alert.stories.tsx | 2 +- packages/react/src/components/Alert/Alert.tsx | 6 +- .../react/src/components/Avatar/Avatar.tsx | 2 +- packages/react/src/components/Badge/Badge.tsx | 2 +- .../react/src/components/Button/Button.mdx | 2 +- .../react/src/components/Button/Button.tsx | 3 +- .../form/Textarea/Textarea.stories.tsx | 1 - packages/react/stories/sizes.stories.tsx | 114 ++++++++++++++++++ 15 files changed, 212 insertions(+), 61 deletions(-) create mode 100644 packages/react/stories/sizes.stories.tsx diff --git a/packages/css/accordion.css b/packages/css/accordion.css index 6c42790b51..060a2626c4 100644 --- a/packages/css/accordion.css +++ b/packages/css/accordion.css @@ -8,7 +8,8 @@ --dsc-accordion-heading-background--hover: var(--ds-color-neutral-surface-default); --dsc-accordion-heading-background--open: var(--ds-color-neutral-background-subtle); --dsc-accordion-heading-background: var(--ds-color-neutral-background-default); - --dsc-accordion-padding: var(--ds-spacing-4); + --dsc-accordion-padding: var(--ds-spacing-2) var(--ds-spacing-4); + --dsc-accordion-size: var(--ds-sizing-14); &[data-border] > * { border: var(--dsc-accordion-border); @@ -65,16 +66,19 @@ box-sizing: border-box; & > :is(summary, u-summary) { + align-items: center; background: var(--dsc-accordion-heading-background); box-sizing: border-box; cursor: pointer; + display: flex; list-style: none; + min-height: var(--dsc-accordion-size); + gap: var(--dsc-accordion-chevron-gap); outline: none; - padding-block: var(--dsc-accordion-padding); - padding-inline: calc(var(--dsc-accordion-padding) + var(--dsc-accordion-chevron-size) + var(--dsc-accordion-chevron-gap)) var(--dsc-accordion-padding); + padding: var(--dsc-accordion-padding); @composes ds-focus from './base/base.css'; - @composes ds-body-text--sm from './base/base.css'; + /* @composes ds-body-text--sm from './base/base.css'; /* TODO fix using font sm */ &:focus-visible { position: relative; /* Ensure foucs outline renders on top */ @@ -84,11 +88,9 @@ background: currentcolor; border-radius: var(--ds-border-radius-md); content: ''; + flex-shrink: 0; height: var(--dsc-accordion-chevron-size); mask: 50% / contain no-repeat var(--dsc-accordion-chevron-url); - position: absolute; - margin-inline: calc((var(--dsc-accordion-chevron-size) + var(--dsc-accordion-chevron-gap)) * -1); /* Using margin instead of top/left to avoid position: relative and to support dir="rtl" */ - width: var(--dsc-accordion-chevron-size); } } diff --git a/packages/css/badge.css b/packages/css/badge.css index 0458429aa5..7cefd8b711 100644 --- a/packages/css/badge.css +++ b/packages/css/badge.css @@ -7,6 +7,7 @@ box-sizing: border-box; display: inline-flex; position: relative; + /* TODO fix using font sm */ &::before { content: attr(data-count); diff --git a/packages/css/button.css b/packages/css/button.css index 6df3e7e063..59b99787ca 100644 --- a/packages/css/button.css +++ b/packages/css/button.css @@ -5,11 +5,8 @@ --dsc-button-color: var(--ds-color-accent-contrast-default); --dsc-button-font-size: var(--ds-font-size-5); --dsc-button-gap: var(--ds-spacing-2); - --dsc-button-padding-block: var(--ds-spacing-2); - --dsc-button-padding-inline: var(--ds-spacing-4); - --dsc-button-size: var(--ds-sizing-9); - - @composes ds-focus from './base/base.css'; + --dsc-button-padding: var(--ds-spacing-2) var(--ds-spacing-4); + --dsc-button-size: var(--ds-sizing-11); align-items: center; background: var(--dsc-button-background); @@ -19,19 +16,27 @@ color: var(--dsc-button-color); cursor: pointer; font-family: inherit; + font-weight: var(--ds-font-weight-medium); gap: var(--dsc-button-gap); justify-content: center; + line-height: var(--ds-line-height-sm); min-height: var(--dsc-button-size); min-width: var(--dsc-button-size); outline: none; - padding: var(--dsc-button-padding-block) var(--dsc-button-padding-inline); + padding: var(--dsc-button-padding); text-align: inherit; text-decoration: none; - font-weight: var(--ds-font-weight-medium) !important; /* TODO: Fix */ - & svg, - & img { + @composes ds-focus from './base/base.css'; + + &:not([data-size]) { + font-size: inherit; /* Ensure inheriting font-size */ + } + + & :where(img, svg) { flex-shrink: 0; + font-size: 1.25em; + margin-block: -99em; /* Prevent large icon from crashing with padding */ } &:focus-visible { @@ -43,7 +48,7 @@ } &[data-icon] { - padding-inline: var(--dsc-button-padding-block); + padding: 0; } &[data-fullwidth] { diff --git a/packages/css/index.css b/packages/css/index.css index 70ecc00318..31de4df651 100644 --- a/packages/css/index.css +++ b/packages/css/index.css @@ -55,32 +55,75 @@ Array.from( .join('\n') */ -[data-size='xs'] { - @composes ds-body-text--xs from './base/base.css'; -} +/* TODO: Move */ +@layer ds.base { + [data-size='xs'] { + @composes ds-body-text--sm from './base/base.css'; + } -[data-size='sm'] { - @composes ds-body-text--sm from './base/base.css'; -} + [data-size='sm'] { + @composes ds-body-text--sm from './base/base.css'; + } -[data-size='md'] { - @composes ds-body-text--md from './base/base.css'; -} + body, + [data-size='md'] { + @composes ds-body-text--md from './base/base.css'; + } -[data-size='lg'] { - @composes ds-body-text--lg from './base/base.css'; + [data-size='lg'] { + @composes ds-body-text--lg from './base/base.css'; + } } +/* TODO: Move */ :root { --ds-sizing-scale-base: var(--ds-font-size-5); --ds-sizing-scale-min: 0.125rem; /* Minimum 2px steps */ --ds-sizing-scale: 0.25rem; /* Default 4px steps */ --ds-sizing-adjust: calc((var(--ds-sizing-scale-base) - 1em) * 0.5); /* Fallback if not supporting round() */ - - /* stylelint-disable-next-line declaration-block-no-duplicate-custom-properties */ --ds-sizing-adjust: round(up, calc((var(--ds-sizing-scale-base) - 1em) * 0.5), 0.0625rem); /* Sizing */ + --ds-sizing-1: round(down, 0.25em, 0.0625rem); + --ds-sizing-2: round(down, 0.5em, 0.0625rem); + --ds-sizing-3: round(down, 0.75em, 0.0625rem); + --ds-sizing-4: round(down, 1em, 0.0625rem); + --ds-sizing-5: round(down, 1.25em, 0.0625rem); + --ds-sizing-6: round(down, 1.5em, 0.0625rem); + --ds-sizing-7: round(down, 1.75em, 0.0625rem); + --ds-sizing-8: round(down, 2em, 0.0625rem); + --ds-sizing-9: round(down, 2.25em, 0.0625rem); + --ds-sizing-10: round(down, 2.5em, 0.0625rem); + --ds-sizing-11: round(down, 2.75em, 0.0625rem); + --ds-sizing-12: round(down, 3em, 0.0625rem); + --ds-sizing-13: round(down, 3.25em, 0.0625rem); + --ds-sizing-14: round(down, 3.5em, 0.0625rem); + --ds-sizing-15: round(down, 3.75em, 0.0625rem); + --ds-sizing-16: round(down, 4em, 0.0625rem); + --ds-sizing-17: round(down, 4.25em, 0.0625rem); + --ds-sizing-18: round(down, 4.5em, 0.0625rem); + --ds-sizing-19: round(down, 4.75em, 0.0625rem); + --ds-sizing-20: round(down, 5em, 0.0625rem); + --ds-sizing-21: round(down, 5.25em, 0.0625rem); + --ds-sizing-22: round(down, 5.5em, 0.0625rem); + --ds-sizing-23: round(down, 5.75em, 0.0625rem); + --ds-sizing-24: round(down, 6em, 0.0625rem); + --ds-sizing-25: round(down, 6.25em, 0.0625rem); + --ds-sizing-26: round(down, 6.5em, 0.0625rem); + --ds-sizing-27: round(down, 6.75em, 0.0625rem); + --ds-sizing-28: round(down, 7em, 0.0625rem); + --ds-sizing-29: round(down, 7.25em, 0.0625rem); + --ds-sizing-30: round(down, 7.5em, 0.0625rem); + + /*--ds-sizing-1: max(calc((var(--ds-sizing-scale) - var(--ds-sizing-adjust)) * 1 + var(--ds-sizing-adjust)), calc(var(--ds-sizing-scale-min) * 1)); + --ds-sizing-2: max(calc((var(--ds-sizing-scale) - var(--ds-sizing-adjust)) * 2 + var(--ds-sizing-adjust)), calc(var(--ds-sizing-scale-min) * 2)); + --ds-sizing-3: max(calc((var(--ds-sizing-scale) - var(--ds-sizing-adjust)) * 3 + var(--ds-sizing-adjust)), calc(var(--ds-sizing-scale-min) * 3)); + --ds-sizing-4: max(calc((var(--ds-sizing-scale) - var(--ds-sizing-adjust)) * 4 + var(--ds-sizing-adjust)), calc(var(--ds-sizing-scale-min) * 4)); + --ds-sizing-5: max(calc((var(--ds-sizing-scale) - var(--ds-sizing-adjust)) * 5 + var(--ds-sizing-adjust)), calc(var(--ds-sizing-scale-min) * 5)); + --ds-sizing-6: max(calc((var(--ds-sizing-scale) - var(--ds-sizing-adjust)) * 6 + var(--ds-sizing-adjust)), calc(var(--ds-sizing-scale-min) * 6)); + --ds-sizing-7: max(calc((var(--ds-sizing-scale) - var(--ds-sizing-adjust)) * 7 + var(--ds-sizing-adjust)), calc(var(--ds-sizing-scale-min) * 7)); + --ds-sizing-8: max(calc((var(--ds-sizing-scale) - var(--ds-sizing-adjust)) * 8 + var(--ds-sizing-adjust)), calc(var(--ds-sizing-scale-min) * 8)); + --ds-sizing-9: max(calc((var(--ds-sizing-scale) - var(--ds-sizing-adjust)) * 9 + var(--ds-sizing-adjust)), calc(var(--ds-sizing-scale-min) * 9)); --ds-sizing-10: max(calc((var(--ds-sizing-scale) - var(--ds-sizing-adjust)) * 10 + var(--ds-sizing-adjust)), calc(var(--ds-sizing-scale-min) * 10)); --ds-sizing-11: max(calc((var(--ds-sizing-scale) - var(--ds-sizing-adjust)) * 11 + var(--ds-sizing-adjust)), calc(var(--ds-sizing-scale-min) * 11)); --ds-sizing-12: max(calc((var(--ds-sizing-scale) - var(--ds-sizing-adjust)) * 12 + var(--ds-sizing-adjust)), calc(var(--ds-sizing-scale-min) * 12)); @@ -91,7 +134,6 @@ Array.from( --ds-sizing-17: max(calc((var(--ds-sizing-scale) - var(--ds-sizing-adjust)) * 17 + var(--ds-sizing-adjust)), calc(var(--ds-sizing-scale-min) * 17)); --ds-sizing-18: max(calc((var(--ds-sizing-scale) - var(--ds-sizing-adjust)) * 18 + var(--ds-sizing-adjust)), calc(var(--ds-sizing-scale-min) * 18)); --ds-sizing-19: max(calc((var(--ds-sizing-scale) - var(--ds-sizing-adjust)) * 19 + var(--ds-sizing-adjust)), calc(var(--ds-sizing-scale-min) * 19)); - --ds-sizing-1: max(calc((var(--ds-sizing-scale) - var(--ds-sizing-adjust)) * 1 + var(--ds-sizing-adjust)), calc(var(--ds-sizing-scale-min) * 1)); --ds-sizing-20: max(calc((var(--ds-sizing-scale) - var(--ds-sizing-adjust)) * 20 + var(--ds-sizing-adjust)), calc(var(--ds-sizing-scale-min) * 20)); --ds-sizing-21: max(calc((var(--ds-sizing-scale) - var(--ds-sizing-adjust)) * 21 + var(--ds-sizing-adjust)), calc(var(--ds-sizing-scale-min) * 21)); --ds-sizing-22: max(calc((var(--ds-sizing-scale) - var(--ds-sizing-adjust)) * 22 + var(--ds-sizing-adjust)), calc(var(--ds-sizing-scale-min) * 22)); @@ -102,15 +144,7 @@ Array.from( --ds-sizing-27: max(calc((var(--ds-sizing-scale) - var(--ds-sizing-adjust)) * 27 + var(--ds-sizing-adjust)), calc(var(--ds-sizing-scale-min) * 27)); --ds-sizing-28: max(calc((var(--ds-sizing-scale) - var(--ds-sizing-adjust)) * 28 + var(--ds-sizing-adjust)), calc(var(--ds-sizing-scale-min) * 28)); --ds-sizing-29: max(calc((var(--ds-sizing-scale) - var(--ds-sizing-adjust)) * 29 + var(--ds-sizing-adjust)), calc(var(--ds-sizing-scale-min) * 29)); - --ds-sizing-2: max(calc((var(--ds-sizing-scale) - var(--ds-sizing-adjust)) * 2 + var(--ds-sizing-adjust)), calc(var(--ds-sizing-scale-min) * 2)); - --ds-sizing-30: max(calc((var(--ds-sizing-scale) - var(--ds-sizing-adjust)) * 30 + var(--ds-sizing-adjust)), calc(var(--ds-sizing-scale-min) * 30)); - --ds-sizing-3: max(calc((var(--ds-sizing-scale) - var(--ds-sizing-adjust)) * 3 + var(--ds-sizing-adjust)), calc(var(--ds-sizing-scale-min) * 3)); - --ds-sizing-4: max(calc((var(--ds-sizing-scale) - var(--ds-sizing-adjust)) * 4 + var(--ds-sizing-adjust)), calc(var(--ds-sizing-scale-min) * 4)); - --ds-sizing-5: max(calc((var(--ds-sizing-scale) - var(--ds-sizing-adjust)) * 5 + var(--ds-sizing-adjust)), calc(var(--ds-sizing-scale-min) * 5)); - --ds-sizing-6: max(calc((var(--ds-sizing-scale) - var(--ds-sizing-adjust)) * 6 + var(--ds-sizing-adjust)), calc(var(--ds-sizing-scale-min) * 6)); - --ds-sizing-7: max(calc((var(--ds-sizing-scale) - var(--ds-sizing-adjust)) * 7 + var(--ds-sizing-adjust)), calc(var(--ds-sizing-scale-min) * 7)); - --ds-sizing-8: max(calc((var(--ds-sizing-scale) - var(--ds-sizing-adjust)) * 8 + var(--ds-sizing-adjust)), calc(var(--ds-sizing-scale-min) * 8)); - --ds-sizing-9: max(calc((var(--ds-sizing-scale) - var(--ds-sizing-adjust)) * 9 + var(--ds-sizing-adjust)), calc(var(--ds-sizing-scale-min) * 9)); + --ds-sizing-30: max(calc((var(--ds-sizing-scale) - var(--ds-sizing-adjust)) * 30 + var(--ds-sizing-adjust)), calc(var(--ds-sizing-scale-min) * 30));*/ /* Spacing */ --ds-spacing-10: var(--ds-sizing-10); diff --git a/packages/css/input.css b/packages/css/input.css index e6d24ca450..82c193c6e8 100644 --- a/packages/css/input.css +++ b/packages/css/input.css @@ -38,14 +38,19 @@ box-sizing: border-box; color: var(--dsc-input-color); font-family: inherit; - height: var(--dsc-input-size); + line-height: var(--ds-line-height-sm); margin: 0; /* Reset native margin on checkbox and radio */ max-width: 100%; /* Ensure input does not grow outside bounds even with a high value in size="" or cols="" */ + min-height: var(--dsc-input-size); padding: var(--dsc-input-padding); position: relative; /* Ensure foucs outline renders on top */ @composes ds-focus from './base/base.css'; + &:not([data-size]) { + font-size: inherit; /* Ensure inheriting font-size */ + } + /* Change switch background with low specificity to allow states to overwrite */ &:where([role='switch']) { --dsc-input-background: var(--dsc-input-background--switch); @@ -202,8 +207,6 @@ label:has(input:is([type='checkbox'], [type='radio']):not(:disabled, [aria-disab position: absolute; } - @composes ds-body-text--md from './base/base.css'; - /* Using double selector to ensure we win specificity */ .ds-input.ds-input { align-self: stretch; diff --git a/packages/css/label.css b/packages/css/label.css index 6a0d9b1ef5..f268be3d05 100644 --- a/packages/css/label.css +++ b/packages/css/label.css @@ -3,7 +3,7 @@ display: inline-block; margin: 0; padding: 0; - font-weight: var(--ds-font-weight-medium) !important; /* TODO: Fix */ + font-weight: var(--ds-font-weight-medium); &[data-weight='semibold'] { font-weight: var(--ds-font-weight-semibold); diff --git a/packages/css/pagination.css b/packages/css/pagination.css index 0a813398b9..6569328c5b 100644 --- a/packages/css/pagination.css +++ b/packages/css/pagination.css @@ -25,14 +25,10 @@ rotate: 180deg; } - /* Makes page buttons square */ - & > li:not(:first-child, :last-child) > :is(a, button) { - --dsc-button-padding-inline: var(--dsc-button-padding-block); - } - /* Style as non-interactive ellipsis when empty */ - & > li > [aria-hidden='true'] { + & > li > :empty { color: inherit; + padding: 0; /* Make ellipsis element square */ pointer-events: none; &::before { diff --git a/packages/react/src/components/Alert/Alert.stories.tsx b/packages/react/src/components/Alert/Alert.stories.tsx index 115e105244..5564cda053 100644 --- a/packages/react/src/components/Alert/Alert.stories.tsx +++ b/packages/react/src/components/Alert/Alert.stories.tsx @@ -20,7 +20,7 @@ export const Preview: Story = (args) => ; Preview.args = { color: 'info', - size: 'md', + size: undefined, children: 'En beskjed det er viktig at brukeren ser', }; diff --git a/packages/react/src/components/Alert/Alert.tsx b/packages/react/src/components/Alert/Alert.tsx index bbfe42ca25..116ebec6d3 100644 --- a/packages/react/src/components/Alert/Alert.tsx +++ b/packages/react/src/components/Alert/Alert.tsx @@ -11,10 +11,8 @@ export type AlertProps = { /** * Sets the size of the alert. * Does not affect font size. - * - * @default md */ - size?: 'sm' | 'md' | 'lg'; + size?: undefined | 'sm' | 'md' | 'lg'; } & HTMLAttributes; /** @@ -23,7 +21,7 @@ export type AlertProps = { * Dette er en informasjonsmelding */ export const Alert = forwardRef(function Alert( - { color = 'info', size = 'md', className, ...rest }, + { color = 'info', size, className, ...rest }, ref, ) { return ( diff --git a/packages/react/src/components/Avatar/Avatar.tsx b/packages/react/src/components/Avatar/Avatar.tsx index 6a4b0fe18d..4ab0181f73 100644 --- a/packages/react/src/components/Avatar/Avatar.tsx +++ b/packages/react/src/components/Avatar/Avatar.tsx @@ -54,7 +54,7 @@ export const Avatar = forwardRef(function Avatar( { 'aria-label': ariaLabel, color = 'accent', - size = 'md', + size, variant = 'circle', className, children, diff --git a/packages/react/src/components/Badge/Badge.tsx b/packages/react/src/components/Badge/Badge.tsx index 8bed93944a..99215a8787 100644 --- a/packages/react/src/components/Badge/Badge.tsx +++ b/packages/react/src/components/Badge/Badge.tsx @@ -63,7 +63,7 @@ export const Badge = forwardRef(function Badge( maxCount, overlap = 'rectangle', placement = 'top-right', - size = 'md', + size, ...rest }, ref, diff --git a/packages/react/src/components/Button/Button.mdx b/packages/react/src/components/Button/Button.mdx index affe2cdf48..7dd8229c9c 100644 --- a/packages/react/src/components/Button/Button.mdx +++ b/packages/react/src/components/Button/Button.mdx @@ -107,7 +107,7 @@ Som regel er det **venstre** som er den beste plasseringen, men det finnes unnta
-### Størrelse på ikon +### Størrelse på ikon TODO: Remove Når du bruker ikon må du sette størrelsen på ikonet selv. Vi anbefaler å bruke disse størrelsene for [Aksel](https://aksel.nav.no/ikoner) sine ikoner: diff --git a/packages/react/src/components/Button/Button.tsx b/packages/react/src/components/Button/Button.tsx index c39c955474..59adebbf7c 100644 --- a/packages/react/src/components/Button/Button.tsx +++ b/packages/react/src/components/Button/Button.tsx @@ -16,7 +16,6 @@ export type ButtonProps = { color?: 'accent' | 'neutral' | 'danger'; /** * Size - * @default md */ size?: 'sm' | 'md' | 'lg'; /** Toggle icon only styling, pass icon as children @@ -53,7 +52,7 @@ export const Button = forwardRef( color = 'accent', icon = false, loading = false, - size = 'md', + size, variant = 'primary', ...rest }, diff --git a/packages/react/src/components/form/Textarea/Textarea.stories.tsx b/packages/react/src/components/form/Textarea/Textarea.stories.tsx index 9472b2dfbf..c56d59d4d3 100644 --- a/packages/react/src/components/form/Textarea/Textarea.stories.tsx +++ b/packages/react/src/components/form/Textarea/Textarea.stories.tsx @@ -62,7 +62,6 @@ export const Preview: Story = { export const FullWidth: Story = { args: { - rows: 10, cols: 40, id: 'my-textarea', }, diff --git a/packages/react/stories/sizes.stories.tsx b/packages/react/stories/sizes.stories.tsx new file mode 100644 index 0000000000..150d147178 --- /dev/null +++ b/packages/react/stories/sizes.stories.tsx @@ -0,0 +1,114 @@ +import { PrinterSmallIcon } from '@navikt/aksel-icons'; +import type { Meta, StoryFn } from '@storybook/react'; + +import { + Accordion, + Alert, + Avatar, + Button, + Card, + Checkbox, + Combobox, + Divider, + Heading, + Link, + Pagination, + Paragraph, + Radio, + Search, + Select, + Switch, + Table, + Tabs, + Tag, + Textfield, + ToggleGroup, + Tooltip, +} from '../src'; + +export default { + title: 'Sizes', + parameters: { + layout: 'padded', + }, +} as Meta; + +export const Sizes: StoryFn = () => ( +

+ + + + Hvem kan registrere seg i Frivillighetsregisteret? + + + For å kunne bli registrert i Frivillighetsregisteret, må + organisasjonen drive frivillig virksomhet. Det er bare foreninger, + stiftelser og aksjeselskap som kan registreres. Virksomheten kan ikke + dele ut midler til fysiske personer. Virksomheten må ha et styre. + + + + + + + Hvem kan registrere seg i Frivillighetsregisteret? + + + For å kunne bli registrert i Frivillighetsregisteret, må + organisasjonen drive frivillig virksomhet. Det er bare foreninger, + stiftelser og aksjeselskap som kan registreres. Virksomheten kan ikke + dele ut midler til fysiske personer. Virksomheten må ha et styre. + + + + + + + Hvem kan registrere seg i Frivillighetsregisteret? + + + For å kunne bli registrert i Frivillighetsregisteret, må + organisasjonen drive frivillig virksomhet. Det er bare foreninger, + stiftelser og aksjeselskap som kan registreres. Virksomheten kan ikke + dele ut midler til fysiske personer. Virksomheten må ha et styre. + + + + Dette er en alert + Dette er en alert + Dette er en alert + + JD + + + JD + + + JD + +
+ +
+
+ +
+
+ +
+
+); From 1ec808dcdd05efec3b8f800d1ae9b1532810ba36 Mon Sep 17 00:00:00 2001 From: eirikbacker Date: Tue, 22 Oct 2024 11:00:02 +0200 Subject: [PATCH 08/29] docs: implement sizes page --- packages/css/avatar.css | 2 +- packages/css/card.css | 11 +- packages/css/index.css | 2 +- packages/css/paragraph.css | 2 - packages/css/tag.css | 2 +- .../react/src/components/Button/Button.tsx | 3 +- .../components/ErrorSummary/ErrorSummary.tsx | 2 +- .../src/components/HelpText/HelpText.tsx | 4 +- packages/react/src/components/Label/Label.tsx | 7 +- packages/react/src/components/List/Lists.tsx | 6 +- .../src/components/Pagination/Pagination.tsx | 25 +- .../Pagination/PaginationButton.tsx | 6 +- .../src/components/Paragraph/Paragraph.tsx | 8 +- .../react/src/components/Popover/Popover.tsx | 6 +- .../src/components/Table/Table.stories.tsx | 213 +++--- packages/react/src/components/Table/Table.tsx | 6 +- packages/react/src/components/Tabs/Tabs.tsx | 6 +- packages/react/src/components/Tag/Tag.tsx | 6 +- .../components/ToggleGroup/ToggleGroup.tsx | 21 +- .../ToggleGroup/ToggleGroupItem.tsx | 3 +- .../components/Tooltip/Tooltip.stories.tsx | 15 +- .../ValidationMessage/ValidationMessage.tsx | 7 +- .../react/src/components/form/Input/Input.tsx | 6 +- .../components/loaders/Spinner/Spinner.tsx | 7 +- packages/react/stories/sizes.stories.tsx | 719 ++++++++++++++++-- 25 files changed, 816 insertions(+), 279 deletions(-) diff --git a/packages/css/avatar.css b/packages/css/avatar.css index 8a0f36cddc..5694a2b043 100644 --- a/packages/css/avatar.css +++ b/packages/css/avatar.css @@ -1,7 +1,7 @@ .ds-avatar { --dsc-avatar-background: var(--ds-color-accent-base-default); --dsc-avatar-color: var(--ds-color-accent-contrast-default); - --dsc-avatar-size: var(--ds-sizing-12); + --dsc-avatar-size: var(--ds-sizing-8); --dsc-avatar-padding: var(--ds-spacing-2); --dsc-avatar-border-radius: 50%; diff --git a/packages/css/card.css b/packages/css/card.css index 40419ac7f5..e5527764ef 100644 --- a/packages/css/card.css +++ b/packages/css/card.css @@ -8,15 +8,22 @@ --dsc-card-gap: 1rem; --dsc-card-padding: var(--ds-spacing-6); - all: unset; /* Reset if + +); + +Preview.args = { + content: 'Tooltip text', + placement: 'top', }; export const Placement: Story = { diff --git a/packages/react/src/components/ValidationMessage/ValidationMessage.tsx b/packages/react/src/components/ValidationMessage/ValidationMessage.tsx index f6c1871c9f..6c74e38adb 100644 --- a/packages/react/src/components/ValidationMessage/ValidationMessage.tsx +++ b/packages/react/src/components/ValidationMessage/ValidationMessage.tsx @@ -3,12 +3,13 @@ import cl from 'clsx/lite'; import type { HTMLAttributes } from 'react'; import { forwardRef } from 'react'; +/* TODO: Remove size? */ export type ValidationMessageProps = { /** * Changes text sizing - * @default md + * @default undefined */ - size?: 'xs' | 'sm' | 'md' | 'lg'; + size?: undefined | 'xs' | 'sm' | 'md' | 'lg'; /** Toggle error color */ error?: boolean; /** @@ -23,7 +24,7 @@ export const ValidationMessage = forwardRef< HTMLParagraphElement, ValidationMessageProps >(function ValidationMessage( - { size = 'md', className, asChild, error = true, ...rest }, + { size, className, asChild, error = true, ...rest }, ref, ) { const Component = asChild ? Slot : 'div'; diff --git a/packages/react/src/components/form/Input/Input.tsx b/packages/react/src/components/form/Input/Input.tsx index f1aea063a0..5efaeccd66 100644 --- a/packages/react/src/components/form/Input/Input.tsx +++ b/packages/react/src/components/form/Input/Input.tsx @@ -6,9 +6,9 @@ type InputAttr = InputHTMLAttributes; export type InputProps = { /** * Changes field size and paddings - * @default md + * @default undefined */ - size?: 'sm' | 'md' | 'lg'; + size?: undefined | 'sm' | 'md' | 'lg'; /** Supported `input` types */ type?: InputAttr['type']; /** Exposes the HTML `size` attribute. @@ -33,7 +33,7 @@ export type InputProps = { * ``` */ export const Input = forwardRef(function Input( - { type = 'text', size = 'md', htmlSize, className, onClick, ...rest }, + { type = 'text', size, htmlSize, className, onClick, ...rest }, ref, ) { return ( diff --git a/packages/react/src/components/loaders/Spinner/Spinner.tsx b/packages/react/src/components/loaders/Spinner/Spinner.tsx index 93ea490ae6..c0d03b4c84 100644 --- a/packages/react/src/components/loaders/Spinner/Spinner.tsx +++ b/packages/react/src/components/loaders/Spinner/Spinner.tsx @@ -8,10 +8,9 @@ export type SpinnerProps = { title: string; /** * Spinner size - * - * @default md + * @default undefined */ - size?: '2xs' | 'xs' | 'sm' | 'md' | 'lg' | 'xl'; + size?: undefined | '2xs' | 'xs' | 'sm' | 'md' | 'lg' | 'xl'; /** * Spinner appearance * @default neutral @@ -23,7 +22,7 @@ export type SpinnerProps = { export const Spinner = ({ title, color = 'neutral', - size = 'md', + size, className, ...rest }: SpinnerProps): JSX.Element => { diff --git a/packages/react/stories/sizes.stories.tsx b/packages/react/stories/sizes.stories.tsx index 150d147178..84f63e4950 100644 --- a/packages/react/stories/sizes.stories.tsx +++ b/packages/react/stories/sizes.stories.tsx @@ -1,22 +1,36 @@ -import { PrinterSmallIcon } from '@navikt/aksel-icons'; +import { DivideIcon, PrinterSmallIcon } from '@navikt/aksel-icons'; import type { Meta, StoryFn } from '@storybook/react'; +import { useState } from 'react'; import { Accordion, Alert, Avatar, + Badge, + Breadcrumbs, Button, Card, Checkbox, + Chip, Combobox, Divider, + Dropdown, + ErrorSummary, + Field, Heading, + HelpText, + Input, + Label, Link, + List, + Modal, Pagination, Paragraph, + Popover, Radio, Search, Select, + Spinner, Switch, Table, Tabs, @@ -24,6 +38,8 @@ import { Textfield, ToggleGroup, Tooltip, + ValidationMessage, + usePagination, } from '../src'; export default { @@ -33,82 +49,627 @@ export default { }, } as Meta; -export const Sizes: StoryFn = () => ( -
- - - - Hvem kan registrere seg i Frivillighetsregisteret? - - - For å kunne bli registrert i Frivillighetsregisteret, må - organisasjonen drive frivillig virksomhet. Det er bare foreninger, - stiftelser og aksjeselskap som kan registreres. Virksomheten kan ikke - dele ut midler til fysiske personer. Virksomheten må ha et styre. - - - - - - - Hvem kan registrere seg i Frivillighetsregisteret? - - - For å kunne bli registrert i Frivillighetsregisteret, må - organisasjonen drive frivillig virksomhet. Det er bare foreninger, - stiftelser og aksjeselskap som kan registreres. Virksomheten kan ikke - dele ut midler til fysiske personer. Virksomheten må ha et styre. - - - - - - - Hvem kan registrere seg i Frivillighetsregisteret? - - - For å kunne bli registrert i Frivillighetsregisteret, må - organisasjonen drive frivillig virksomhet. Det er bare foreninger, - stiftelser og aksjeselskap som kan registreres. Virksomheten kan ikke - dele ut midler til fysiske personer. Virksomheten må ha et styre. - - - - Dette er en alert - Dette er en alert - Dette er en alert - - JD - - - JD - - - JD - -
- -
-
- -
-
- +export const Sizes: StoryFn = () => { + const [currentPage, setCurrentPage] = useState(4); + const { pages, nextButtonProps, prevButtonProps } = usePagination({ + currentPage, + onChange: console.log, // Open console to see this event + totalPages: 10, + showPages: 7, + setCurrentPage, + }); + + return ( +
+ + + + Hvem kan registrere seg i Frivillighetsregisteret? + + + For å kunne bli registrert i Frivillighetsregisteret, må + organisasjonen drive frivillig virksomhet. Det er bare foreninger, + stiftelser og aksjeselskap som kan registreres. Virksomheten kan + ikke dele ut midler til fysiske personer. Virksomheten må ha et + styre. + + + + + + + Hvem kan registrere seg i Frivillighetsregisteret? + + + For å kunne bli registrert i Frivillighetsregisteret, må + organisasjonen drive frivillig virksomhet. Det er bare foreninger, + stiftelser og aksjeselskap som kan registreres. Virksomheten kan + ikke dele ut midler til fysiske personer. Virksomheten må ha et + styre. + + + + + + + Hvem kan registrere seg i Frivillighetsregisteret? + + + For å kunne bli registrert i Frivillighetsregisteret, må + organisasjonen drive frivillig virksomhet. Det er bare foreninger, + stiftelser og aksjeselskap som kan registreres. Virksomheten kan + ikke dele ut midler til fysiske personer. Virksomheten må ha et + styre. + + + + Dette er en alert + Dette er en alert + Dette er en alert +
+ + JD + +
+
+ + JD + +
+
+ + JD + +
+ + + + + + + Nivå 1 + + + Nivå 2 + + + Nivå 3 + + + + + + + Nivå 1 + + + Nivå 2 + + + Nivå 3 + + + + + + + Nivå 1 + + + Nivå 2 + + + Nivå 3 + + + +
+ +
+
+ +
+
+ +
+ + + Card Neutral + + + Most provide as with carried business are much better more the + perfected designer. Writing slightly explain desk unable at supposedly + about this + + + + + Card Neutral + + + Most provide as with carried business are much better more the + perfected designer. Writing slightly explain desk unable at supposedly + about this + + + + + Card Neutral + + + Most provide as with carried business are much better more the + perfected designer. Writing slightly explain desk unable at supposedly + about this + + +
+ Radio + Check + Knapp +
+
+ Radio + Check + Knapp +
+
+ Radio + Check + Knapp +
+
+ + Dropdown + + Heading 1 + + Button 1.1 + Button 1.2 + + + +
+
+ + Dropdown + + Heading 1 + + Button 1.1 + Button 1.2 + + + +
+
+ + Dropdown + + Heading 1 + + Button 1.1 + Button 1.2 + + + +
+ + + For å gå videre må du rette opp følgende feil: + + + + Fødselsdato kan ikke være etter år 2005 + + E-post må være gyldig + + + + + For å gå videre må du rette opp følgende feil: + + + + Fødselsdato kan ikke være etter år 2005 + + E-post må være gyldig + + + + + For å gå videre må du rette opp følgende feil: + + + + Fødselsdato kan ikke være etter år 2005 + + E-post må være gyldig + + + {' '} + {/* TMP fix */} + + + + En feil + + + + + En feil + + + + + En feil + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + Mer tekst + + + Mer tekst + + + Mer tekst + +
+ Lenke +
+
+ Lenke +
+
+ Lenke +
+ + List Item 1 + List Item 2 + List Item 3 + + + List Item 1 + List Item 2 + List Item 3 + + + List Item 1 + List Item 2 + List Item 3 + + + + +
+ + Open Modal + + + Modal header + + + Lorem ipsum dolor sit, amet consectetur adipisicing elit. + Blanditiis doloremque obcaecati assumenda odio ducimus sunt et. + + + +
+
+ + Open Modal + + + Modal header + + + Lorem ipsum dolor sit, amet consectetur adipisicing elit. + Blanditiis doloremque obcaecati assumenda odio ducimus sunt et. + + + +
+
+ + Open Modal + + + Modal header + + + Lorem ipsum dolor sit, amet consectetur adipisicing elit. + Blanditiis doloremque obcaecati assumenda odio ducimus sunt et. + + + +
+ + + + + Forrige + + + {pages.map(({ page, itemKey, buttonProps }) => ( + + + {page} + + + ))} + + + Neste + + + + + + + + + Forrige + + + {pages.map(({ page, itemKey, buttonProps }) => ( + + + {page} + + + ))} + + + Neste + + + + + + + + + Forrige + + + {pages.map(({ page, itemKey, buttonProps }) => ( + + + {page} + + + ))} + + + Neste + + + + +
+ + My trigger! + popover content + +
+
+ + My trigger! + popover content + +
+
+ + My trigger! + popover content + +
+ + + + Header 1 + Header 2 + Header 3 + + + + + Cell 1 + Cell 2 + Cell 3 + + + Cell 4 + Cell 5 + Cell 6 + + +
+ + + + Header 1 + Header 2 + Header 3 + + + + + Cell 1 + Cell 2 + Cell 3 + + + Cell 4 + Cell 5 + Cell 6 + + +
+ + + + Header 1 + Header 2 + Header 3 + + + + + Cell 1 + Cell 2 + Cell 3 + + + Cell 4 + Cell 5 + Cell 6 + + +
+ + + Tab 1 + Tab 2 + Tab 3 + + content 1 + content 2 + content 3 + + + + Tab 1 + Tab 2 + Tab 3 + + content 1 + content 2 + content 3 + + + + Tab 1 + Tab 2 + Tab 3 + + content 1 + content 2 + content 3 + + Tag + Tag + Tag + + Innboks + Utkast + Arkiv + + + Innboks + Utkast + Arkiv + + + Innboks + Utkast + Arkiv + +
+ + + +
+
+ + + +
+
+ + + +
-
-); + ); +}; From 48f63aa887df503ad1a8d716be72a34601d1ab92 Mon Sep 17 00:00:00 2001 From: eirikbacker Date: Tue, 22 Oct 2024 11:02:54 +0200 Subject: [PATCH 09/29] fix: remove size form toggle group context --- .../react/src/components/ToggleGroup/useToggleGroupitem.ts | 3 --- 1 file changed, 3 deletions(-) diff --git a/packages/react/src/components/ToggleGroup/useToggleGroupitem.ts b/packages/react/src/components/ToggleGroup/useToggleGroupitem.ts index d3fbc0daf5..c8b863dbab 100644 --- a/packages/react/src/components/ToggleGroup/useToggleGroupitem.ts +++ b/packages/react/src/components/ToggleGroup/useToggleGroupitem.ts @@ -1,14 +1,12 @@ import { useContext, useId } from 'react'; import type { ButtonProps } from '../Button'; -import type { ToggleGroupContextProps } from './ToggleGroup'; import { ToggleGroupContext } from './ToggleGroup'; import type { ToggleGroupItemProps } from './ToggleGroupItem'; type UseToggleGroupItem = (props: ToggleGroupItemProps) => { active: boolean; - size?: ToggleGroupContextProps['size']; value: string; buttonProps?: Pick< ButtonProps, @@ -30,7 +28,6 @@ export const useToggleGroupItem: UseToggleGroupItem = ( return { ...rest, active: active, - size: toggleGroup?.size, value, buttonProps: { id: buttonId, From da7c3a28141c1db913c85cab13e6612be9ea6ddd Mon Sep 17 00:00:00 2001 From: eirikbacker Date: Tue, 22 Oct 2024 12:40:06 +0200 Subject: [PATCH 10/29] fix: change scaling --- packages/css/badge.css | 6 +- packages/css/base/base.css | 72 +--- packages/css/button.css | 4 +- packages/css/card.css | 4 +- packages/css/chip.css | 4 + packages/css/index.css | 78 ++-- packages/css/input.css | 2 +- packages/css/tabs.css | 11 +- packages/css/tag.css | 1 + packages/css/tooltip.css | 1 + .../src/components/Dropdown/Dropdown.tsx | 39 +- .../src/components/Dropdown/DropdownItem.tsx | 9 +- packages/react/stories/sizes.stories.tsx | 367 +++++++++++++++--- 13 files changed, 392 insertions(+), 206 deletions(-) diff --git a/packages/css/badge.css b/packages/css/badge.css index 7cefd8b711..d1d6e5984b 100644 --- a/packages/css/badge.css +++ b/packages/css/badge.css @@ -6,8 +6,8 @@ box-sizing: border-box; display: inline-flex; + line-height: var(--ds-line-height-sm); position: relative; - /* TODO fix using font sm */ &::before { content: attr(data-count); @@ -22,6 +22,10 @@ place-items: center; } + &:not([data-size]) { + font-size: var(--ds-font-size-sm); /* Default to small when size is not defined */ + } + &[data-color='info'] { --dsc-badge-background: var(--ds-color-info-base-default); --dsc-badge-color: var(--ds-color-info-contrast-default); diff --git a/packages/css/base/base.css b/packages/css/base/base.css index 5961d7efa3..37a1e31633 100644 --- a/packages/css/base/base.css +++ b/packages/css/base/base.css @@ -17,6 +17,8 @@ --dsc-focus-border-width: 3px; /* Default focus border width */ --dsc-focus-boxShadow: 0 0 0 var(--dsc-focus-border-width) var(--ds-color-focus-inner); --dsc-focus-outline: var(--ds-color-focus-outer) solid var(--dsc-focus-border-width); + --ds-font-size-sm: max(.9em, .875rem); /* Fallback if not supporting round() */ + --ds-font-size-sm: round(down, max(.9em, .875rem), 1px); /* Default to 90% of font-size, but minimum 14px */ color: var(--ds-color-neutral-text-default); background-color: var(--ds-color-neutral-background-default); @@ -78,76 +80,6 @@ letter-spacing: var(--ds-body-xl-letter-spacing); } -.ds-body-text--long-xs { - font-weight: var(--ds-body-long-xs-font-weight); - line-height: var(--ds-body-long-xs-line-height); - font-size: var(--ds-body-long-xs-font-size); - letter-spacing: var(--ds-body-long-xs-letter-spacing); -} - -.ds-body-text--long-sm { - font-weight: var(--ds-body-long-sm-font-weight); - line-height: var(--ds-body-long-sm-line-height); - font-size: var(--ds-body-long-sm-font-size); - letter-spacing: var(--ds-body-long-sm-letter-spacing); -} - -.ds-body-text--long-md { - font-weight: var(--ds-body-long-md-font-weight); - line-height: var(--ds-body-long-md-line-height); - font-size: var(--ds-body-long-md-font-size); - letter-spacing: var(--ds-body-long-md-letter-spacing); -} - -.ds-body-text--long-lg { - font-weight: var(--ds-body-long-lg-font-weight); - line-height: var(--ds-body-long-lg-line-height); - font-size: var(--ds-body-long-lg-font-size); - letter-spacing: var(--ds-body-long-lg-letter-spacing); -} - -.ds-body-text--long-xl { - font-weight: var(--ds-body-long-xl-font-weight); - line-height: var(--ds-body-long-xl-line-height); - font-size: var(--ds-body-long-xl-font-size); - letter-spacing: var(--ds-body-long-xl-letter-spacing); -} - -.ds-body-text--short-xs { - font-weight: var(--ds-body-short-xs-font-weight); - line-height: var(--ds-body-short-xs-line-height); - font-size: var(--ds-body-short-xs-font-size); - letter-spacing: var(--ds-body-short-xs-letter-spacing); -} - -.ds-body-text--short-sm { - font-weight: var(--ds-body-short-sm-font-weight); - line-height: var(--ds-body-short-sm-line-height); - font-size: var(--ds-body-short-sm-font-size); - letter-spacing: var(--ds-body-short-sm-letter-spacing); -} - -.ds-body-text--short-md { - font-weight: var(--ds-body-short-md-font-weight); - line-height: var(--ds-body-short-md-line-height); - font-size: var(--ds-body-short-md-font-size); - letter-spacing: var(--ds-body-short-md-letter-spacing); -} - -.ds-body-text--short-lg { - font-weight: var(--ds-body-short-lg-font-weight); - line-height: var(--ds-body-short-lg-line-height); - font-size: var(--ds-body-short-lg-font-size); - letter-spacing: var(--ds-body-short-lg-letter-spacing); -} - -.ds-body-text--short-xl { - font-weight: var(--ds-body-short-xl-font-weight); - line-height: var(--ds-body-short-xl-line-height); - font-size: var(--ds-body-short-xl-font-size); - letter-spacing: var(--ds-body-short-xl-letter-spacing); -} - /** Heading */ .ds-heading-text--2xs { diff --git a/packages/css/button.css b/packages/css/button.css index 59b99787ca..48a3228e7c 100644 --- a/packages/css/button.css +++ b/packages/css/button.css @@ -6,7 +6,7 @@ --dsc-button-font-size: var(--ds-font-size-5); --dsc-button-gap: var(--ds-spacing-2); --dsc-button-padding: var(--ds-spacing-2) var(--ds-spacing-4); - --dsc-button-size: var(--ds-sizing-11); + --dsc-button-size: var(--ds-sizing-12); align-items: center; background: var(--dsc-button-background); @@ -30,7 +30,7 @@ @composes ds-focus from './base/base.css'; &:not([data-size]) { - font-size: inherit; /* Ensure inheriting font-size */ + font-size: inherit; /* Ensure inheriting font-size when +
-
+ + + Card Neutral + + + Most provide as with carried business are much better more the + perfected designer. Writing slightly explain desk unable at supposedly + about this + + Card Neutral @@ -207,8 +254,8 @@ export const Sizes: StoryFn = () => { about this - - + + Card Neutral @@ -217,21 +264,50 @@ export const Sizes: StoryFn = () => { about this -
+
Radio Check Knapp
-
+
Radio Check Knapp
-
+
Radio Check Knapp
+
+ Radio + Check + Knapp +
+
+ + Dropdown + + Heading 1 + + Button 1.1 + Button 1.2 + + + +
Dropdown @@ -256,7 +332,7 @@ export const Sizes: StoryFn = () => {
-
+
Dropdown @@ -268,6 +344,17 @@ export const Sizes: StoryFn = () => {
+ + + For å gå videre må du rette opp følgende feil: + + + + Fødselsdato kan ikke være etter år 2005 + + E-post må være gyldig + + For å gå videre må du rette opp følgende feil: @@ -290,7 +377,7 @@ export const Sizes: StoryFn = () => { E-post må være gyldig - + For å gå videre må du rette opp følgende feil: @@ -302,11 +389,17 @@ export const Sizes: StoryFn = () => { {' '} - {/* TMP fix */} + {/* TMP fix */} + {` + .ds-field { display: block } + .ds-field input+label { margin: 0; font-weight: normal } + `} + + + + + En feil + @@ -317,92 +410,172 @@ export const Sizes: StoryFn = () => { En feil - + En feil + + + + + + + + + + + + + + Mer tekst + Mer tekst Mer tekst - + Mer tekst +
+ Lenke +
Lenke
Lenke
-
+
Lenke
+ + List Item 1 + List Item 2 + List Item 3 + List Item 1 List Item 2 @@ -413,14 +586,29 @@ export const Sizes: StoryFn = () => { List Item 2 List Item 3 - + List Item 1 List Item 2 List Item 3 + - + +
+ + Open Modal + + + Modal header + + + Lorem ipsum dolor sit, amet consectetur adipisicing elit. + Blanditiis doloremque obcaecati assumenda odio ducimus sunt et. + + + +
Open Modal @@ -449,7 +637,7 @@ export const Sizes: StoryFn = () => {
-
+
Open Modal @@ -463,6 +651,27 @@ export const Sizes: StoryFn = () => {
+ + + + + Forrige + + + {pages.map(({ page, itemKey, buttonProps }) => ( + + + {page} + + + ))} + + + Neste + + + + @@ -505,7 +714,7 @@ export const Sizes: StoryFn = () => { - + @@ -526,24 +735,51 @@ export const Sizes: StoryFn = () => { +
+ + My popup + popover content + +
- My trigger! + My popup popover content
- My trigger! + My popup popover content
-
+
- My trigger! + My popup popover content
+ + + + Header 1 + Header 2 + Header 3 + + + + + Cell 1 + Cell 2 + Cell 3 + + + Cell 4 + Cell 5 + Cell 6 + + +
@@ -586,7 +822,7 @@ export const Sizes: StoryFn = () => {
- +
Header 1 @@ -607,6 +843,16 @@ export const Sizes: StoryFn = () => {
+ + + Tab 1 + Tab 2 + Tab 3 + + content 1 + content 2 + content 3 + Tab 1 @@ -627,7 +873,7 @@ export const Sizes: StoryFn = () => { content 2 content 3 - + Tab 1 Tab 2 @@ -637,9 +883,15 @@ export const Sizes: StoryFn = () => { content 2 content 3 + Tag Tag Tag - Tag + Tag + + Innboks + Utkast + Arkiv + Innboks Utkast @@ -650,11 +902,16 @@ export const Sizes: StoryFn = () => { Utkast Arkiv - + Innboks Utkast Arkiv +
+ + + +
@@ -665,7 +922,7 @@ export const Sizes: StoryFn = () => {
-
+
From 47d3a26c1984c45012385ed9b30c101df0ef0698 Mon Sep 17 00:00:00 2001 From: eirikbacker Date: Tue, 22 Oct 2024 14:47:12 +0200 Subject: [PATCH 11/29] fix(Card): adjust gap and line-height width design --- packages/css/accordion.css | 1 - packages/css/base/base.css | 16 +++-- packages/css/card.css | 3 +- packages/css/chip.css | 2 +- packages/css/dropdown.css | 23 +----- packages/css/error-summary.css | 1 + packages/css/index.css | 90 +++--------------------- packages/css/pagination.css | 2 +- packages/css/paragraph.css | 54 +------------- packages/react/stories/sizes.stories.tsx | 2 +- 10 files changed, 29 insertions(+), 165 deletions(-) diff --git a/packages/css/accordion.css b/packages/css/accordion.css index 060a2626c4..f274749d24 100644 --- a/packages/css/accordion.css +++ b/packages/css/accordion.css @@ -78,7 +78,6 @@ padding: var(--dsc-accordion-padding); @composes ds-focus from './base/base.css'; - /* @composes ds-body-text--sm from './base/base.css'; /* TODO fix using font sm */ &:focus-visible { position: relative; /* Ensure foucs outline renders on top */ diff --git a/packages/css/base/base.css b/packages/css/base/base.css index 37a1e31633..ac8dc008ca 100644 --- a/packages/css/base/base.css +++ b/packages/css/base/base.css @@ -44,36 +44,36 @@ outline-offset: var(--dsc-focus-border-width); } -/** Body typography */ -.ds-body-text--xs { +[data-size='xs'] { font-weight: var(--ds-body-xs-font-weight); line-height: var(--ds-body-xs-line-height); font-size: var(--ds-body-xs-font-size); letter-spacing: var(--ds-body-xs-letter-spacing); } -.ds-body-text--sm { +[data-size='sm'] { font-weight: var(--ds-body-sm-font-weight); line-height: var(--ds-body-sm-line-height); font-size: var(--ds-body-sm-font-size); letter-spacing: var(--ds-body-sm-letter-spacing); } -.ds-body-text--md { +body, +[data-size='md'] { font-weight: var(--ds-body-md-font-weight); line-height: var(--ds-body-md-line-height); font-size: var(--ds-body-md-font-size); letter-spacing: var(--ds-body-md-letter-spacing); } -.ds-body-text--lg { +[data-size='lg'] { font-weight: var(--ds-body-lg-font-weight); line-height: var(--ds-body-lg-line-height); font-size: var(--ds-body-lg-font-size); letter-spacing: var(--ds-body-lg-letter-spacing); } -.ds-body-text--xl { +[data-size='xl'] { font-weight: var(--ds-body-xl-font-weight); line-height: var(--ds-body-xl-line-height); font-size: var(--ds-body-xl-font-size); @@ -81,7 +81,7 @@ } /** Heading */ - +/* TODO: Heading sizes */ .ds-heading-text--2xs { font-weight: var(--ds-heading-2xs-font-weight); line-height: var(--ds-heading-2xs-line-height); @@ -131,6 +131,7 @@ letter-spacing: var(--ds-heading-2xl-letter-spacing); } +/* TODO: Label sizes */ .ds-label--md { font-size: var(--ds-label-md-font-size); font-weight: var(--ds-label-md-font-weight); @@ -159,6 +160,7 @@ letter-spacing: var(--ds-label-lg-letter-spacing); } +/* TODO: Validation sizes */ .ds-validation-message--xs { font-weight: var(--ds-error_message-xs-font-weight); line-height: var(--ds-error_message-xs-line-height); diff --git a/packages/css/card.css b/packages/css/card.css index 587bf9276f..05fa06b47e 100644 --- a/packages/css/card.css +++ b/packages/css/card.css @@ -5,7 +5,7 @@ --dsc-card-border-color: var(--ds-color-neutral-border-subtle); --dsc-card-border: 1px solid var(--dsc-card-border-color); --dsc-card-color: var(--ds-color-neutral-text-default); - --dsc-card-gap: 1rem; + --dsc-card-gap: var(--ds-spacing-3); --dsc-card-padding: var(--ds-spacing-6); background: var(--dsc-card-background); @@ -15,7 +15,6 @@ color: var(--dsc-card-color); display: block; font-family: inherit; - line-height: var(--ds-line-height-sm); margin: 0; overflow: clip; /* Needed to clip media elements and and Card.Block */ padding: var(--dsc-card-padding); diff --git a/packages/css/chip.css b/packages/css/chip.css index 93e3dbd633..2b61dcb013 100644 --- a/packages/css/chip.css +++ b/packages/css/chip.css @@ -25,7 +25,7 @@ text-decoration: none; &:not([data-size]) { - font-size: inherit; /* Ensure inheriting font-size when @@ -102,15 +102,15 @@ AccentPressed.parameters = { export const Neutral: StoryFn = () => ( <> @@ -131,15 +131,15 @@ NeutralPressed.parameters = { export const Danger: StoryFn = () => ( <> @@ -175,7 +175,7 @@ export const AsLink: StoryFn = () => ( ); @@ -184,10 +184,10 @@ export const TextAndIcon: StoryFn = () => ( <> @@ -210,24 +210,24 @@ export const Loading: StoryFn = () => ( export const Icons: StoryFn = () => ( <> @@ -237,12 +237,12 @@ export const IconOnly: StoryFn = () => ( <> @@ -252,7 +252,7 @@ export const IconOnly: StoryFn = () => ( variant='tertiary' aria-label='Innstillinger' > - + @@ -267,13 +267,13 @@ IconOnly.parameters = { export const IconsOnlyPrimary: StoryFn = () => ( <> ); diff --git a/packages/react/src/components/Label/Label.tsx b/packages/react/src/components/Label/Label.tsx index 6e8627257c..a95dd0361a 100644 --- a/packages/react/src/components/Label/Label.tsx +++ b/packages/react/src/components/Label/Label.tsx @@ -2,13 +2,13 @@ import { Slot } from '@radix-ui/react-slot'; import cl from 'clsx/lite'; import type { LabelHTMLAttributes } from 'react'; import { forwardRef } from 'react'; +import type { Size } from '../../types'; -/* TODO: Remove size? */ export type LabelProps = { /** * Changes text sizing */ - size?: 'xs' | 'sm' | 'md' | 'lg'; + size?: Size; /** * Adjusts font weight. Use this when you have a label hierarchy, such as checkboxes/radios in a fieldset * @default 'medium' From 2a35762ea3db692e4d8ca974069a82f3b476e930 Mon Sep 17 00:00:00 2001 From: eirikbacker Date: Tue, 22 Oct 2024 15:54:04 +0200 Subject: [PATCH 17/29] fix(Dropdown): heading styling --- packages/css/base/base.css | 1 - packages/css/dropdown.css | 16 +- packages/css/index.css | 2 +- .../ErrorSummary/ErrorSummaryHeading.tsx | 2 +- .../react/src/components/Tabs/TabsPanel.tsx | 2 +- .../ValidationMessage/ValidationMessage.tsx | 1 - packages/react/stories/sizes.stories.tsx | 932 ------------------ packages/react/stories/testing.stories.tsx | 919 ++++++++++++++++- 8 files changed, 932 insertions(+), 943 deletions(-) delete mode 100644 packages/react/stories/sizes.stories.tsx diff --git a/packages/css/base/base.css b/packages/css/base/base.css index 4e9d1d22d8..a51ae2fda0 100644 --- a/packages/css/base/base.css +++ b/packages/css/base/base.css @@ -83,7 +83,6 @@ body, } /** Heading */ -/* TODO: Heading sizes */ .ds-heading-text--2xs { font-weight: var(--ds-heading-2xs-font-weight); line-height: var(--ds-heading-2xs-line-height); diff --git a/packages/css/dropdown.css b/packages/css/dropdown.css index ccd7adb003..2d874a0258 100644 --- a/packages/css/dropdown.css +++ b/packages/css/dropdown.css @@ -1,7 +1,7 @@ .ds-dropdown { --dsc-dropdown-padding: var(--ds-spacing-3) var(--ds-spacing-2); - --dsc-dropdown-item-padding: 0 var(--ds-spacing-4); - --dsc-dropdown-header-padding: var(--ds-spacing-2) var(--ds-spacing-4); + --dsc-dropdown-item-padding: var(--ds-spacing-2) var(--ds-spacing-4); + --dsc-dropdown-item-size: var(--ds-spacing-12); background-color: var(--ds-color-neutral-background-default); border-radius: var(--ds-border-radius-md); @@ -18,15 +18,21 @@ } .ds-dropdown__heading { - padding: var(--dsc-dropdown-header-padding); - margin-block: 0; + align-items: center; + box-sizing: border-box; + color: var(--ds-color-neutral-text-subtle); + display: flex; font-size: inherit; + font-weight: inherit; + margin: 0; + min-height: var(--dsc-dropdown-item-size); + padding: var(--dsc-dropdown-item-padding); } & :is(a, button, [role='button']) { - box-sizing: border-box; justify-content: start; padding: var(--dsc-dropdown-item-padding); + min-height: var(--dsc-dropdown-item-size); width: 100%; font-weight: var(--ds-font-weight-regular); } diff --git a/packages/css/index.css b/packages/css/index.css index 474c89c93b..c2b4ecf75e 100644 --- a/packages/css/index.css +++ b/packages/css/index.css @@ -44,7 +44,7 @@ @import url('./badge.css') layer(ds.components); @import url('./avatar.css') layer(ds.components); -/* TODO: Move */ +/* TODO: Will move to tokens as part of #2508 */ :root { --ds-sizing-base: 18; /* Unitless base font-size 18px */ --ds-sizing-step: 4; /* Unitless step size 4px */ diff --git a/packages/react/src/components/ErrorSummary/ErrorSummaryHeading.tsx b/packages/react/src/components/ErrorSummary/ErrorSummaryHeading.tsx index 8e5b145c9c..82639cba78 100644 --- a/packages/react/src/components/ErrorSummary/ErrorSummaryHeading.tsx +++ b/packages/react/src/components/ErrorSummary/ErrorSummaryHeading.tsx @@ -4,7 +4,7 @@ import { ErrorSummaryContext, type ErrorSummaryProps } from './ErrorSummary'; export type ErrorSummaryHeadingProps = HeadingProps; -// TODO +// TODO: Move to CSS // const HEADING_SIZE_MAP: { // [key in NonNullable]: HeadingProps['size']; // } = { diff --git a/packages/react/src/components/Tabs/TabsPanel.tsx b/packages/react/src/components/Tabs/TabsPanel.tsx index 3ff2493ee9..692b340d5c 100644 --- a/packages/react/src/components/Tabs/TabsPanel.tsx +++ b/packages/react/src/components/Tabs/TabsPanel.tsx @@ -18,7 +18,7 @@ export type TabsPanelProps = { */ export const TabsPanel = forwardRef( function TabsPanel({ children, value, className, ...rest }, ref) { - const { value: tabsValue, size } = useContext(Context); + const { value: tabsValue } = useContext(Context); const active = value === tabsValue; return ( diff --git a/packages/react/src/components/ValidationMessage/ValidationMessage.tsx b/packages/react/src/components/ValidationMessage/ValidationMessage.tsx index 99ac42117c..43b4f6eab3 100644 --- a/packages/react/src/components/ValidationMessage/ValidationMessage.tsx +++ b/packages/react/src/components/ValidationMessage/ValidationMessage.tsx @@ -4,7 +4,6 @@ import type { HTMLAttributes } from 'react'; import { forwardRef } from 'react'; import type { Size } from '../../types'; -/* TODO: Remove size? */ export type ValidationMessageProps = { /** * Changes text sizing diff --git a/packages/react/stories/sizes.stories.tsx b/packages/react/stories/sizes.stories.tsx deleted file mode 100644 index 8f8803cc08..0000000000 --- a/packages/react/stories/sizes.stories.tsx +++ /dev/null @@ -1,932 +0,0 @@ -import { PrinterSmallIcon } from '@navikt/aksel-icons'; -import type { Meta, StoryFn } from '@storybook/react'; - -// 14, 16, 18, 30 -import { useState } from 'react'; -import { - Accordion, - Alert, - Avatar, - Badge, - Breadcrumbs, - Button, - Card, - Chip, - Dropdown, - ErrorSummary, - Field, - Heading, - HelpText, - Input, - Label, - Link, - List, - Modal, - Pagination, - Paragraph, - Popover, - Spinner, - Table, - Tabs, - Tag, - ToggleGroup, - Tooltip, - ValidationMessage, - usePagination, -} from '../src'; - -export default { - title: 'Sizes', - parameters: { - layout: 'padded', - }, -} as Meta; - -export const Sizes: StoryFn = () => { - const [currentPage, setCurrentPage] = useState(4); - const { pages, nextButtonProps, prevButtonProps } = usePagination({ - currentPage, - onChange: console.log, // Open console to see this event - totalPages: 10, - showPages: 7, - setCurrentPage, - }); - - return ( -
-
14px
-
16px
-
18px
-
24px
- - - - Hvem kan registrere seg i Frivillighetsregisteret? - - - For å kunne bli registrert i Frivillighetsregisteret, må - organisasjonen drive frivillig virksomhet. Det er bare foreninger, - stiftelser og aksjeselskap som kan registreres. Virksomheten kan - ikke dele ut midler til fysiske personer. Virksomheten må ha et - styre. - - - - - - - Hvem kan registrere seg i Frivillighetsregisteret? - - - For å kunne bli registrert i Frivillighetsregisteret, må - organisasjonen drive frivillig virksomhet. Det er bare foreninger, - stiftelser og aksjeselskap som kan registreres. Virksomheten kan - ikke dele ut midler til fysiske personer. Virksomheten må ha et - styre. - - - - - - - Hvem kan registrere seg i Frivillighetsregisteret? - - - For å kunne bli registrert i Frivillighetsregisteret, må - organisasjonen drive frivillig virksomhet. Det er bare foreninger, - stiftelser og aksjeselskap som kan registreres. Virksomheten kan - ikke dele ut midler til fysiske personer. Virksomheten må ha et - styre. - - - - - - - Hvem kan registrere seg i Frivillighetsregisteret? - - - For å kunne bli registrert i Frivillighetsregisteret, må - organisasjonen drive frivillig virksomhet. Det er bare foreninger, - stiftelser og aksjeselskap som kan registreres. Virksomheten kan - ikke dele ut midler til fysiske personer. Virksomheten må ha et - styre. - - - - Dette er en alert - Dette er en alert - Dette er en alert - Dette er en alert -
- - JD - -
-
- - JD - -
-
- - JD - -
-
- - JD - -
- - - - - - - - Nivå 1 - - - Nivå 2 - - - Nivå 3 - - - - - - - Nivå 1 - - - Nivå 2 - - - Nivå 3 - - - - - - - Nivå 1 - - - Nivå 2 - - - Nivå 3 - - - - - - - Nivå 1 - - - Nivå 2 - - - Nivå 3 - - - -
- -
-
- -
-
- -
-
- -
- - - Card Neutral - - - Most provide as with carried business are much better more the - perfected designer. Writing slightly explain desk unable at supposedly - about this - - - - - Card Neutral - - - Most provide as with carried business are much better more the - perfected designer. Writing slightly explain desk unable at supposedly - about this - - - - - Card Neutral - - - Most provide as with carried business are much better more the - perfected designer. Writing slightly explain desk unable at supposedly - about this - - - - - Card Neutral - - - Most provide as with carried business are much better more the - perfected designer. Writing slightly explain desk unable at supposedly - about this - - -
- Radio - Check - Knapp -
-
- Radio - Check - Knapp -
-
- Radio - Check - Knapp -
-
- Radio - Check - Knapp -
-
- - Dropdown - - Heading 1 - - Button 1.1 - Button 1.2 - - - -
-
- - Dropdown - - Heading 1 - - Button 1.1 - Button 1.2 - - - -
-
- - Dropdown - - Heading 1 - - Button 1.1 - Button 1.2 - - - -
-
- - Dropdown - - Heading 1 - - Button 1.1 - Button 1.2 - - - -
- - - For å gå videre må du rette opp følgende feil: - - - - Fødselsdato kan ikke være etter år 2005 - - E-post må være gyldig - - - - - For å gå videre må du rette opp følgende feil: - - - - Fødselsdato kan ikke være etter år 2005 - - E-post må være gyldig - - - - - For å gå videre må du rette opp følgende feil: - - - - Fødselsdato kan ikke være etter år 2005 - - E-post må være gyldig - - - - - For å gå videre må du rette opp følgende feil: - - - - Fødselsdato kan ikke være etter år 2005 - - E-post må være gyldig - - - - - - - En feil - - - - - En feil - - - - - En feil - - - - - En feil - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - Mer tekst - - - Mer tekst - - - Mer tekst - - - Mer tekst - -
- Lenke -
-
- Lenke -
-
- Lenke -
-
- Lenke -
- - List Item 1 - List Item 2 - List Item 3 - - - List Item 1 - List Item 2 - List Item 3 - - - List Item 1 - List Item 2 - List Item 3 - - - List Item 1 - List Item 2 - List Item 3 - - - - - -
- - Open Modal - - - Modal header - - - Lorem ipsum dolor sit, amet consectetur adipisicing elit. - Blanditiis doloremque obcaecati assumenda odio ducimus sunt et. - - - -
-
- - Open Modal - - - Modal header - - - Lorem ipsum dolor sit, amet consectetur adipisicing elit. - Blanditiis doloremque obcaecati assumenda odio ducimus sunt et. - - - -
-
- - Open Modal - - - Modal header - - - Lorem ipsum dolor sit, amet consectetur adipisicing elit. - Blanditiis doloremque obcaecati assumenda odio ducimus sunt et. - - - -
-
- - Open Modal - - - Modal header - - - Lorem ipsum dolor sit, amet consectetur adipisicing elit. - Blanditiis doloremque obcaecati assumenda odio ducimus sunt et. - - - -
- - - - - Forrige - - - {pages.map(({ page, itemKey, buttonProps }) => ( - - - {page} - - - ))} - - - Neste - - - - - - - - - Forrige - - - {pages.map(({ page, itemKey, buttonProps }) => ( - - - {page} - - - ))} - - - Neste - - - - - - - - - Forrige - - - {pages.map(({ page, itemKey, buttonProps }) => ( - - - {page} - - - ))} - - - Neste - - - - - - - - - Forrige - - - {pages.map(({ page, itemKey, buttonProps }) => ( - - - {page} - - - ))} - - - Neste - - - - -
- - My popup - popover content - -
-
- - My popup - popover content - -
-
- - My popup - popover content - -
-
- - My popup - popover content - -
- - - - Header 1 - Header 2 - Header 3 - - - - - Cell 1 - Cell 2 - Cell 3 - - - Cell 4 - Cell 5 - Cell 6 - - -
- - - - Header 1 - Header 2 - Header 3 - - - - - Cell 1 - Cell 2 - Cell 3 - - - Cell 4 - Cell 5 - Cell 6 - - -
- - - - Header 1 - Header 2 - Header 3 - - - - - Cell 1 - Cell 2 - Cell 3 - - - Cell 4 - Cell 5 - Cell 6 - - -
- - - - Header 1 - Header 2 - Header 3 - - - - - Cell 1 - Cell 2 - Cell 3 - - - Cell 4 - Cell 5 - Cell 6 - - -
- - - Tab 1 - Tab 2 - Tab 3 - - content 1 - content 2 - content 3 - - - - Tab 1 - Tab 2 - Tab 3 - - content 1 - content 2 - content 3 - - - - Tab 1 - Tab 2 - Tab 3 - - content 1 - content 2 - content 3 - - - - Tab 1 - Tab 2 - Tab 3 - - content 1 - content 2 - content 3 - - Tag - Tag - Tag - Tag - - Innboks - Utkast - Arkiv - - - Innboks - Utkast - Arkiv - - - Innboks - Utkast - Arkiv - - - Innboks - Utkast - Arkiv - -
- - - -
-
- - - -
-
- - - -
-
- - - -
-
- ); -}; diff --git a/packages/react/stories/testing.stories.tsx b/packages/react/stories/testing.stories.tsx index 4c96b74d79..562594fe49 100644 --- a/packages/react/stories/testing.stories.tsx +++ b/packages/react/stories/testing.stories.tsx @@ -1,16 +1,44 @@ +import { PrinterSmallIcon } from '@navikt/aksel-icons'; import type { Meta, StoryFn } from '@storybook/react'; +import { useState } from 'react'; import { + Accordion, + Alert, + Avatar, + Badge, + Breadcrumbs, Button, + Card, Checkbox, Chip, Combobox, + Dropdown, + ErrorSummary, + Field, + Heading, + HelpText, + Input, + Label, + Link, + List, + Modal, + Pagination, + Paragraph, + Popover, Radio, Select, + Spinner, Switch, + Table, + Tabs, Tag, Textfield, -} from '../src/components'; + ToggleGroup, + Tooltip, + ValidationMessage, + usePagination, +} from '../src'; export default { title: 'Testing', @@ -127,3 +155,892 @@ LargeCol.args = { size: 'lg', direction: 'column', }; + +export const Sizes: StoryFn = () => { + const [currentPage, setCurrentPage] = useState(4); + const { pages, nextButtonProps, prevButtonProps } = usePagination({ + currentPage, + onChange: console.log, // Open console to see this event + totalPages: 10, + showPages: 7, + setCurrentPage, + }); + + return ( +
+
14px
+
16px
+
18px
+
24px
+ + + + Hvem kan registrere seg i Frivillighetsregisteret? + + + For å kunne bli registrert i Frivillighetsregisteret, må + organisasjonen drive frivillig virksomhet. Det er bare foreninger, + stiftelser og aksjeselskap som kan registreres. Virksomheten kan + ikke dele ut midler til fysiske personer. Virksomheten må ha et + styre. + + + + + + + Hvem kan registrere seg i Frivillighetsregisteret? + + + For å kunne bli registrert i Frivillighetsregisteret, må + organisasjonen drive frivillig virksomhet. Det er bare foreninger, + stiftelser og aksjeselskap som kan registreres. Virksomheten kan + ikke dele ut midler til fysiske personer. Virksomheten må ha et + styre. + + + + + + + Hvem kan registrere seg i Frivillighetsregisteret? + + + For å kunne bli registrert i Frivillighetsregisteret, må + organisasjonen drive frivillig virksomhet. Det er bare foreninger, + stiftelser og aksjeselskap som kan registreres. Virksomheten kan + ikke dele ut midler til fysiske personer. Virksomheten må ha et + styre. + + + + + + + Hvem kan registrere seg i Frivillighetsregisteret? + + + For å kunne bli registrert i Frivillighetsregisteret, må + organisasjonen drive frivillig virksomhet. Det er bare foreninger, + stiftelser og aksjeselskap som kan registreres. Virksomheten kan + ikke dele ut midler til fysiske personer. Virksomheten må ha et + styre. + + + + Dette er en alert + Dette er en alert + Dette er en alert + Dette er en alert +
+ + JD + +
+
+ + JD + +
+
+ + JD + +
+
+ + JD + +
+ + + + + + + + Nivå 1 + + + Nivå 2 + + + Nivå 3 + + + + + + + Nivå 1 + + + Nivå 2 + + + Nivå 3 + + + + + + + Nivå 1 + + + Nivå 2 + + + Nivå 3 + + + + + + + Nivå 1 + + + Nivå 2 + + + Nivå 3 + + + +
+ +
+
+ +
+
+ +
+
+ +
+ + + Card Neutral + + + Most provide as with carried business are much better more the + perfected designer. Writing slightly explain desk unable at supposedly + about this + + + + + Card Neutral + + + Most provide as with carried business are much better more the + perfected designer. Writing slightly explain desk unable at supposedly + about this + + + + + Card Neutral + + + Most provide as with carried business are much better more the + perfected designer. Writing slightly explain desk unable at supposedly + about this + + + + + Card Neutral + + + Most provide as with carried business are much better more the + perfected designer. Writing slightly explain desk unable at supposedly + about this + + +
+ Radio + Check + Knapp +
+
+ Radio + Check + Knapp +
+
+ Radio + Check + Knapp +
+
+ Radio + Check + Knapp +
+
+ + Dropdown + + Heading 1 + + Button 1.1 + Button 1.2 + + + +
+
+ + Dropdown + + Heading 1 + + Button 1.1 + Button 1.2 + + + +
+
+ + Dropdown + + Heading 1 + + Button 1.1 + Button 1.2 + + + +
+
+ + Dropdown + + Heading 1 + + Button 1.1 + Button 1.2 + + + +
+ + + For å gå videre må du rette opp følgende feil: + + + + Fødselsdato kan ikke være etter år 2005 + + E-post må være gyldig + + + + + For å gå videre må du rette opp følgende feil: + + + + Fødselsdato kan ikke være etter år 2005 + + E-post må være gyldig + + + + + For å gå videre må du rette opp følgende feil: + + + + Fødselsdato kan ikke være etter år 2005 + + E-post må være gyldig + + + + + For å gå videre må du rette opp følgende feil: + + + + Fødselsdato kan ikke være etter år 2005 + + E-post må være gyldig + + + + + + + En feil + + + + + En feil + + + + + En feil + + + + + En feil + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + Mer tekst + + + Mer tekst + + + Mer tekst + + + Mer tekst + +
+ Lenke +
+
+ Lenke +
+
+ Lenke +
+
+ Lenke +
+ + List Item 1 + List Item 2 + List Item 3 + + + List Item 1 + List Item 2 + List Item 3 + + + List Item 1 + List Item 2 + List Item 3 + + + List Item 1 + List Item 2 + List Item 3 + + + + + +
+ + Open Modal + + + Modal header + + + Lorem ipsum dolor sit, amet consectetur adipisicing elit. + Blanditiis doloremque obcaecati assumenda odio ducimus sunt et. + + + +
+
+ + Open Modal + + + Modal header + + + Lorem ipsum dolor sit, amet consectetur adipisicing elit. + Blanditiis doloremque obcaecati assumenda odio ducimus sunt et. + + + +
+
+ + Open Modal + + + Modal header + + + Lorem ipsum dolor sit, amet consectetur adipisicing elit. + Blanditiis doloremque obcaecati assumenda odio ducimus sunt et. + + + +
+
+ + Open Modal + + + Modal header + + + Lorem ipsum dolor sit, amet consectetur adipisicing elit. + Blanditiis doloremque obcaecati assumenda odio ducimus sunt et. + + + +
+ + + + + Forrige + + + {pages.map(({ page, itemKey, buttonProps }) => ( + + + {page} + + + ))} + + + Neste + + + + + + + + + Forrige + + + {pages.map(({ page, itemKey, buttonProps }) => ( + + + {page} + + + ))} + + + Neste + + + + + + + + + Forrige + + + {pages.map(({ page, itemKey, buttonProps }) => ( + + + {page} + + + ))} + + + Neste + + + + + + + + + Forrige + + + {pages.map(({ page, itemKey, buttonProps }) => ( + + + {page} + + + ))} + + + Neste + + + + +
+ + My popup + popover content + +
+
+ + My popup + popover content + +
+
+ + My popup + popover content + +
+
+ + My popup + popover content + +
+ + + + Header 1 + Header 2 + Header 3 + + + + + Cell 1 + Cell 2 + Cell 3 + + + Cell 4 + Cell 5 + Cell 6 + + +
+ + + + Header 1 + Header 2 + Header 3 + + + + + Cell 1 + Cell 2 + Cell 3 + + + Cell 4 + Cell 5 + Cell 6 + + +
+ + + + Header 1 + Header 2 + Header 3 + + + + + Cell 1 + Cell 2 + Cell 3 + + + Cell 4 + Cell 5 + Cell 6 + + +
+ + + + Header 1 + Header 2 + Header 3 + + + + + Cell 1 + Cell 2 + Cell 3 + + + Cell 4 + Cell 5 + Cell 6 + + +
+ + + Tab 1 + Tab 2 + Tab 3 + + content 1 + content 2 + content 3 + + + + Tab 1 + Tab 2 + Tab 3 + + content 1 + content 2 + content 3 + + + + Tab 1 + Tab 2 + Tab 3 + + content 1 + content 2 + content 3 + + + + Tab 1 + Tab 2 + Tab 3 + + content 1 + content 2 + content 3 + + Tag + Tag + Tag + Tag + + Innboks + Utkast + Arkiv + + + Innboks + Utkast + Arkiv + + + Innboks + Utkast + Arkiv + + + Innboks + Utkast + Arkiv + +
+ + + +
+
+ + + +
+
+ + + +
+
+ + + +
+
+ ); +}; From 69d32c9e8f7715ac7e07a06e8dcad5ff6a25d4b3 Mon Sep 17 00:00:00 2001 From: eirikbacker Date: Wed, 23 Oct 2024 10:30:23 +0200 Subject: [PATCH 18/29] fix: heading and spinner sizing --- packages/css/badge.css | 2 +- packages/css/base/base.css | 12 +-- packages/css/chip.css | 2 +- packages/css/error-summary.css | 2 +- packages/css/heading.css | 11 +- packages/css/spinner.css | 22 ++-- .../src/components/Avatar/Avatar.test.tsx | 1 - .../src/components/Card/Card.stories.tsx | 101 +++++++----------- .../ErrorSummary/ErrorSummaryHeading.tsx | 11 +- .../react/src/components/Heading/Heading.tsx | 7 +- .../src/components/Modal/Modal.stories.tsx | 16 ++- .../loaders/Spinner/Spinner.test.tsx | 8 -- packages/react/stories/testing.stories.tsx | 24 ++--- 13 files changed, 86 insertions(+), 133 deletions(-) diff --git a/packages/css/badge.css b/packages/css/badge.css index b082f4f7d3..704c304062 100644 --- a/packages/css/badge.css +++ b/packages/css/badge.css @@ -23,7 +23,7 @@ } &:not([data-size]) { - font-size: var(--ds-font-size-smaller); /* Default to small when size is not defined */ + font-size: var(--ds-font-size-minus-1); /* Default to small when size is not defined */ } &[data-color='info'] { diff --git a/packages/css/base/base.css b/packages/css/base/base.css index a51ae2fda0..f1487f93f9 100644 --- a/packages/css/base/base.css +++ b/packages/css/base/base.css @@ -17,10 +17,10 @@ --dsc-focus-border-width: 3px; /* Default focus border width */ --dsc-focus-boxShadow: 0 0 0 var(--dsc-focus-border-width) var(--ds-color-focus-inner); --dsc-focus-outline: var(--ds-color-focus-outer) solid var(--dsc-focus-border-width); - --ds-font-size-smaller: max(.9em, .875rem); /* Fallback if not supporting round() */ - --ds-font-size-smaller: round(down, max(.9em, .875rem), 1px); /* Default to 90% of font-size, but minimum 14px */ - --ds-font-size-larger: 1.1em; /* Fallback if not supporting round() */ - --ds-font-size-larger: round(down, 1.1em, 1px); /* Default to 90% */ + --ds-font-size-minus-1: max(.9em, .875rem); /* Fallback if not supporting round() */ + --ds-font-size-minus-1: round(down, max(.9em, .875rem), 0.0625rem); /* Default to 90% of font-size, but minimum 14px */ + --ds-font-size-plus-1: 1.1em; /* Fallback if not supporting round() */ + --ds-font-size-plus-1: round(down, 1.1em, 0.0625rem); /* Default to 110% */ color: var(--ds-color-neutral-text-default); background-color: var(--ds-color-neutral-background-default); @@ -132,7 +132,7 @@ body, letter-spacing: var(--ds-heading-2xl-letter-spacing); } -/* TODO: Label sizes */ +/* TODO: Maybe remove label sizes after sync with design */ .ds-label--md { font-size: var(--ds-label-md-font-size); font-weight: var(--ds-label-md-font-weight); @@ -161,7 +161,7 @@ body, letter-spacing: var(--ds-label-lg-letter-spacing); } -/* TODO: Validation sizes */ +/* TODO: Maybe remove validation sizes after sync with design */ .ds-validation-message--xs { font-weight: var(--ds-error_message-xs-font-weight); line-height: var(--ds-error_message-xs-line-height); diff --git a/packages/css/chip.css b/packages/css/chip.css index 98183ac5de..5d9506eea9 100644 --- a/packages/css/chip.css +++ b/packages/css/chip.css @@ -25,7 +25,7 @@ text-decoration: none; &:not([data-size]) { - font-size: var(--ds-font-size-smaller); + font-size: var(--ds-font-size-minus-1); } /* Make focus ring also when input inside is focused */ diff --git a/packages/css/error-summary.css b/packages/css/error-summary.css index 84fbf75e2e..9aa4ebde8c 100644 --- a/packages/css/error-summary.css +++ b/packages/css/error-summary.css @@ -12,7 +12,7 @@ & :is(h1, h2, h3, h4, h5, h6) { color: var(--dsc-errorsummary-heading-color); - font-size: var(--ds-font-size-larger); + font-size: var(--ds-font-size-plus-1); margin-bottom: var(--ds-spacing-2); } diff --git a/packages/css/heading.css b/packages/css/heading.css index 264ee46297..d86475f08f 100644 --- a/packages/css/heading.css +++ b/packages/css/heading.css @@ -1,8 +1,11 @@ .ds-heading { - margin: 0; - @composes ds-heading-text--md from './base/base.css'; + margin: 0; + font-size: 1.3em; /* Fallback if not supporting round() */ + font-size: round(down, 1.3em, 0.0625rem); /* Default to 130% */ + + /* Using font-size to ensure consistent size when explicitly setting data-size */ &[data-size='2xs'] { @composes ds-heading-text--2xs from './base/base.css'; } @@ -15,6 +18,10 @@ @composes ds-heading-text--sm from './base/base.css'; } + &[data-size='md'] { + @composes ds-heading-text--md from './base/base.css'; + } + &[data-size='lg'] { @composes ds-heading-text--lg from './base/base.css'; } diff --git a/packages/css/spinner.css b/packages/css/spinner.css index 9e5912899a..279cbe34ac 100644 --- a/packages/css/spinner.css +++ b/packages/css/spinner.css @@ -1,37 +1,41 @@ .ds-spinner { --dsc-spinner-background: var(--ds-color-neutral-surface-default); --dsc-spinner-stroke: var(--ds-color-neutral-border-default); - --dsc-spinner-size: var(--ds-sizing-11); --dsc-spinner-animation-duration: 2s; animation: ds-spinner-rotate-animation linear infinite var(--dsc-spinner-animation-duration); box-sizing: border-box; - height: var(--dsc-spinner-size); - width: var(--dsc-spinner-size); + font-size: var(--ds-sizing-11); + height: 1em; + width: 1em; &[data-color='accent'] { --dsc-spinner-stroke: var(--ds-color-accent-base-default); } - /* TODO: Fix */ + /* Using font-size to ensure consistent size when explicitly setting data-size */ &[data-size='2xs'] { - --dsc-spinner-size: var(--ds-sizing-3); + font-size: 0.75rem; } &[data-size='xs'] { - --dsc-spinner-size: var(--ds-sizing-5); + font-size: 1.25rem; } &[data-size='sm'] { - --dsc-spinner-size: var(--ds-sizing-8); + font-size: 2rem; + } + + &[data-size='md'] { + font-size: 2.75rem; } &[data-size='lg'] { - --dsc-spinner-size: var(--ds-sizing-15); + font-size: 3.75rem; } &[data-size='xl'] { - --dsc-spinner-size: var(--ds-sizing-22); + font-size: 5.5rem; } } diff --git a/packages/react/src/components/Avatar/Avatar.test.tsx b/packages/react/src/components/Avatar/Avatar.test.tsx index ba265017f4..a3817ac01d 100644 --- a/packages/react/src/components/Avatar/Avatar.test.tsx +++ b/packages/react/src/components/Avatar/Avatar.test.tsx @@ -5,7 +5,6 @@ describe('Avatar', () => { it('should render correctly with default props', () => { render(); expect(screen.getByRole('img')).toBeInTheDocument(); - expect(screen.getByRole('img')).toHaveAttribute('data-size', 'md'); expect(screen.getByRole('img')).toHaveAttribute('data-variant', 'circle'); expect(screen.getByRole('img')).toHaveAttribute('data-color', 'accent'); }); diff --git a/packages/react/src/components/Card/Card.stories.tsx b/packages/react/src/components/Card/Card.stories.tsx index 0eed2ccaff..7fad0635ef 100644 --- a/packages/react/src/components/Card/Card.stories.tsx +++ b/packages/react/src/components/Card/Card.stories.tsx @@ -6,13 +6,16 @@ import cat5 from '@assets/img/cats/Cat 5.jpg'; import { PlusIcon, TrashFillIcon } from '@navikt/aksel-icons'; import type { Meta, StoryFn } from '@storybook/react'; -import { Card } from '.'; -import { Button } from '../Button'; -import { Heading } from '../Heading'; -import { Label } from '../Label'; -import { Paragraph } from '../Paragraph'; -import { Select } from '../form/Select'; -import { Textfield } from '../form/Textfield'; +import { + Button, + Card, + Field, + Heading, + Label, + Paragraph, + Select, + Textfield, +} from '../../'; type Story = StoryFn; @@ -34,9 +37,7 @@ export default { export const Preview: Story = (args) => ( - - Card Neutral - + Card Neutral Most provide as with carried business are much better more the perfected designer. Writing slightly explain desk unable at supposedly about this @@ -56,9 +57,7 @@ export const Variants: StoryFn = () => ( katt - - Card Neutral - + Card Neutral Most provide as with carried business are much better more the perfected designer. Writing slightly explain desk unable at supposedly @@ -71,9 +70,7 @@ export const Variants: StoryFn = () => ( katt - - Card Subtle - + Card Subtle Most provide as with carried business are much better more the perfected designer. Writing slightly explain desk unable at supposedly @@ -86,9 +83,7 @@ export const Variants: StoryFn = () => ( katter - - Card First - + Card First Most provide as with carried business are much better more the perfected designer. Writing slightly explain desk unable at supposedly @@ -101,9 +96,7 @@ export const Variants: StoryFn = () => ( katt - - Card Second - + Card Second Most provide as with carried business are much better more the perfected designer. Writing slightly explain desk unable at supposedly @@ -116,9 +109,7 @@ export const Variants: StoryFn = () => ( katt - - Card Third - + Card Third Most provide as with carried business are much better more the perfected designer. Writing slightly explain desk unable at supposedly @@ -136,9 +127,7 @@ export const Media: Story = () => ( katt - - Card Neutral - + Card Neutral Most provide as with carried business are much better more the perfected designer. Writing slightly explain desk unable at supposedly @@ -148,9 +137,7 @@ export const Media: Story = () => ( - - Card Neutral - + Card Neutral Most provide as with carried business are much better more the perfected designer. Writing slightly explain desk unable at supposedly @@ -177,7 +164,7 @@ export const Video: Story = () => ( > - +
( alignItems: 'center', }} > - - Rolle 1 - + Rolle 1
- - + + + + @@ -252,9 +239,7 @@ export const Composed: Story = () => ( katt - - Card Neutral - + Card Neutral Most provide as with carried business are much better more the perfected designer. Writing slightly explain desk unable at supposedly @@ -272,7 +257,7 @@ export const WithLink: Story = (args) => ( - + ( - + ( rel='noopener noreferrer' > - - Link Card with blocks - + Link Card with blocks @@ -341,9 +324,7 @@ export const AsLink: Story = (args) => ( target='_blank' rel='noopener noreferrer' > - - Link Card - + Link Card Most provide as with carried business are much better more the perfected designer. @@ -358,9 +339,7 @@ export const AsButton: Story = (args) => ( Modal subtittel - + Modal header @@ -94,9 +94,7 @@ export const BackdropClose: StoryFn = () => { Open Modal - - Modal med backdropClose og en veldig lang tittel - + Modal med backdropClose og en veldig lang tittel Lorem ipsum dolor sit, amet consectetur adipisicing elit. Blanditiis doloremque obcaecati assumenda odio ducimus sunt et. @@ -113,7 +111,7 @@ export const WithHeaderAndFooter: StoryFn = () => ( Her er det også divider - Vi kan legge divider under header + Vi kan legge divider under header @@ -152,7 +150,7 @@ export const ModalWithForm: StoryFn = () => { Open Modal setInput('')} backdropClose> - + Modal med skjema = () => ( Open Modal - + Modal med en veldig lang bredde @@ -210,7 +208,7 @@ export const ModalWithCombobox: StoryFn = () => { Open Modal - Modal med combobox + Modal med combobox diff --git a/packages/react/src/components/loaders/Spinner/Spinner.test.tsx b/packages/react/src/components/loaders/Spinner/Spinner.test.tsx index ac7c6cc49e..2c21afe4d3 100644 --- a/packages/react/src/components/loaders/Spinner/Spinner.test.tsx +++ b/packages/react/src/components/loaders/Spinner/Spinner.test.tsx @@ -7,14 +7,6 @@ beforeAll(() => { }); describe('spinner', (): void => { - it('should render with default medium size', (): void => { - render(); - expect(screen.getByTitle('Loading').parentElement).toHaveAttribute( - 'data-size', - 'md', - ); - }); - it('should render with title "loading', (): void => { render(); expect(screen.getByTitle('Loading')).toBeInTheDocument(); diff --git a/packages/react/stories/testing.stories.tsx b/packages/react/stories/testing.stories.tsx index 562594fe49..373546a5da 100644 --- a/packages/react/stories/testing.stories.tsx +++ b/packages/react/stories/testing.stories.tsx @@ -339,9 +339,7 @@ export const Sizes: StoryFn = () => {
- - Card Neutral - + Card Neutral Most provide as with carried business are much better more the perfected designer. Writing slightly explain desk unable at supposedly @@ -349,9 +347,7 @@ export const Sizes: StoryFn = () => { - - Card Neutral - + Card Neutral Most provide as with carried business are much better more the perfected designer. Writing slightly explain desk unable at supposedly @@ -359,9 +355,7 @@ export const Sizes: StoryFn = () => { - - Card Neutral - + Card Neutral Most provide as with carried business are much better more the perfected designer. Writing slightly explain desk unable at supposedly @@ -369,9 +363,7 @@ export const Sizes: StoryFn = () => { - - Card Neutral - + Card Neutral Most provide as with carried business are much better more the perfected designer. Writing slightly explain desk unable at supposedly @@ -713,7 +705,7 @@ export const Sizes: StoryFn = () => { Open Modal - + Modal header @@ -727,7 +719,7 @@ export const Sizes: StoryFn = () => { Open Modal - + Modal header @@ -741,7 +733,7 @@ export const Sizes: StoryFn = () => { Open Modal - + Modal header @@ -755,7 +747,7 @@ export const Sizes: StoryFn = () => { Open Modal - + Modal header From bde35ca45901d748311df70dfb63b3446e777dca Mon Sep 17 00:00:00 2001 From: eirikbacker Date: Wed, 23 Oct 2024 10:37:29 +0200 Subject: [PATCH 19/29] chore: lint --- packages/react/src/types.ts | 1 - 1 file changed, 1 deletion(-) diff --git a/packages/react/src/types.ts b/packages/react/src/types.ts index 1f6799bbb6..5de25c74b6 100644 --- a/packages/react/src/types.ts +++ b/packages/react/src/types.ts @@ -8,4 +8,3 @@ export type PortalProps = { */ portal?: boolean; }; - From 94def5ff4b8aa8fe69d5d94dcfbf22251d0d7412 Mon Sep 17 00:00:00 2001 From: eirikbacker Date: Wed, 23 Oct 2024 11:03:51 +0200 Subject: [PATCH 20/29] fix: avatar --- packages/css/avatar.css | 20 +++++++++++++++++++- 1 file changed, 19 insertions(+), 1 deletion(-) diff --git a/packages/css/avatar.css b/packages/css/avatar.css index 9b5cb75a25..d9f7439bac 100644 --- a/packages/css/avatar.css +++ b/packages/css/avatar.css @@ -1,7 +1,7 @@ .ds-avatar { --dsc-avatar-background: var(--ds-color-accent-base-default); --dsc-avatar-color: var(--ds-color-accent-contrast-default); - --dsc-avatar-size: var(--ds-sizing-8); + --dsc-avatar-size: var(--ds-sizing-12); --dsc-avatar-padding: var(--ds-spacing-2); --dsc-avatar-border-radius: var(--ds-border-radius-full); @@ -12,6 +12,7 @@ box-sizing: border-box; color: var(--dsc-avatar-color); display: inline-flex; + font-weight: var(--ds-font-weight-medium); height: var(--dsc-avatar-size); justify-content: center; overflow: hidden; @@ -76,4 +77,21 @@ --dsc-avatar-background: var(--ds-color-brand3-base-default); --dsc-avatar-color: var(--ds-color-brand3-contrast-default); } + + /* TODO: Sizes */ + &[data-size='xs'] { + @composes ds-body-text--xs from './base/base.css'; + } + + &[data-size='sm'] { + @composes ds-heading-text--2xs from './base/base.css'; + } + + &[data-size='md'] { + @composes ds-heading-text--sm from './base/base.css'; + } + + &[data-size='lg'] { + @composes ds-heading-text--md from './base/base.css'; + } } From c1e790ea7693318f5c851872b3de7b360f07407e Mon Sep 17 00:00:00 2001 From: eirikbacker Date: Wed, 23 Oct 2024 11:12:33 +0200 Subject: [PATCH 21/29] fix: avatar --- packages/css/avatar.css | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/packages/css/avatar.css b/packages/css/avatar.css index d9f7439bac..3e37c02b1a 100644 --- a/packages/css/avatar.css +++ b/packages/css/avatar.css @@ -80,7 +80,7 @@ /* TODO: Sizes */ &[data-size='xs'] { - @composes ds-body-text--xs from './base/base.css'; + font-size: var(--ds-body-xs-font-size); } &[data-size='sm'] { From 0985a582cf7247e00a0fb493aa6c61ae77afdfb7 Mon Sep 17 00:00:00 2001 From: eirikbacker Date: Wed, 23 Oct 2024 12:29:58 +0200 Subject: [PATCH 22/29] fix: round fallback support --- packages/css/index.css | 34 +++++++++++++++++++++++++++++++++- 1 file changed, 33 insertions(+), 1 deletion(-) diff --git a/packages/css/index.css b/packages/css/index.css index c2b4ecf75e..1f7d0acb56 100644 --- a/packages/css/index.css +++ b/packages/css/index.css @@ -50,7 +50,39 @@ --ds-sizing-step: 4; /* Unitless step size 4px */ --ds-sizing-scale: var(--ds-sizing-step) / var(--ds-sizing-base); - /* Sizing */ + /* Sizing when not supporting round() */ + --ds-sizing-1: calc(var(--ds-sizing-scale) * 1em); + --ds-sizing-2: calc(var(--ds-sizing-scale) * 2em); + --ds-sizing-3: calc(var(--ds-sizing-scale) * 3em); + --ds-sizing-4: calc(var(--ds-sizing-scale) * 4em); + --ds-sizing-5: calc(var(--ds-sizing-scale) * 5em); + --ds-sizing-6: calc(var(--ds-sizing-scale) * 6em); + --ds-sizing-7: calc(var(--ds-sizing-scale) * 7em); + --ds-sizing-8: calc(var(--ds-sizing-scale) * 8em); + --ds-sizing-9: calc(var(--ds-sizing-scale) * 9em); + --ds-sizing-10: calc(var(--ds-sizing-scale) * 10em); + --ds-sizing-11: calc(var(--ds-sizing-scale) * 11em); + --ds-sizing-12: calc(var(--ds-sizing-scale) * 12em); + --ds-sizing-13: calc(var(--ds-sizing-scale) * 13em); + --ds-sizing-14: calc(var(--ds-sizing-scale) * 14em); + --ds-sizing-15: calc(var(--ds-sizing-scale) * 15em); + --ds-sizing-16: calc(var(--ds-sizing-scale) * 16em); + --ds-sizing-17: calc(var(--ds-sizing-scale) * 17em); + --ds-sizing-18: calc(var(--ds-sizing-scale) * 18em); + --ds-sizing-19: calc(var(--ds-sizing-scale) * 19em); + --ds-sizing-20: calc(var(--ds-sizing-scale) * 20em); + --ds-sizing-21: calc(var(--ds-sizing-scale) * 21em); + --ds-sizing-22: calc(var(--ds-sizing-scale) * 22em); + --ds-sizing-23: calc(var(--ds-sizing-scale) * 23em); + --ds-sizing-24: calc(var(--ds-sizing-scale) * 24em); + --ds-sizing-25: calc(var(--ds-sizing-scale) * 25em); + --ds-sizing-26: calc(var(--ds-sizing-scale) * 26em); + --ds-sizing-27: calc(var(--ds-sizing-scale) * 27em); + --ds-sizing-28: calc(var(--ds-sizing-scale) * 28em); + --ds-sizing-29: calc(var(--ds-sizing-scale) * 29em); + --ds-sizing-30: calc(var(--ds-sizing-scale) * 30em); + + /* Sizing when supporting round() */ --ds-sizing-1: round(down, calc(var(--ds-sizing-scale) * 1em), 0.0625rem); --ds-sizing-2: round(down, calc(var(--ds-sizing-scale) * 2em), 0.0625rem); --ds-sizing-3: round(down, calc(var(--ds-sizing-scale) * 3em), 0.0625rem); From 8c4a8a84428e5b9eb337db5d051fba88b2efdd28 Mon Sep 17 00:00:00 2001 From: eirikbacker Date: Wed, 23 Oct 2024 12:40:22 +0200 Subject: [PATCH 23/29] fix: use @supports --- packages/css/base/base.css | 12 +++++--- packages/css/index.css | 62 ++++++++++++++++++++------------------ 2 files changed, 40 insertions(+), 34 deletions(-) diff --git a/packages/css/base/base.css b/packages/css/base/base.css index f1487f93f9..14355a0dd9 100644 --- a/packages/css/base/base.css +++ b/packages/css/base/base.css @@ -17,10 +17,14 @@ --dsc-focus-border-width: 3px; /* Default focus border width */ --dsc-focus-boxShadow: 0 0 0 var(--dsc-focus-border-width) var(--ds-color-focus-inner); --dsc-focus-outline: var(--ds-color-focus-outer) solid var(--dsc-focus-border-width); - --ds-font-size-minus-1: max(.9em, .875rem); /* Fallback if not supporting round() */ - --ds-font-size-minus-1: round(down, max(.9em, .875rem), 0.0625rem); /* Default to 90% of font-size, but minimum 14px */ - --ds-font-size-plus-1: 1.1em; /* Fallback if not supporting round() */ - --ds-font-size-plus-1: round(down, 1.1em, 0.0625rem); /* Default to 110% */ + --ds-font-size-minus-1: max(.9em, .875rem); /* Default to 90% of font-size, but minimum 14px */ + --ds-font-size-plus-1: 1.1em; /* Default to 110% */ + + /* font-size adjustments if supporting round() */ + @supports (width: round(down, .1em, 1px)) { + --ds-font-size-minus-1: round(down, max(.9em, .875rem), 0.0625rem); /* Default to 90% of font-size, but minimum 14px */ + --ds-font-size-plus-1: round(down, 1.1em, 0.0625rem); /* Default to 110% */ + } color: var(--ds-color-neutral-text-default); background-color: var(--ds-color-neutral-background-default); diff --git a/packages/css/index.css b/packages/css/index.css index 1f7d0acb56..77adbf78c7 100644 --- a/packages/css/index.css +++ b/packages/css/index.css @@ -83,36 +83,38 @@ --ds-sizing-30: calc(var(--ds-sizing-scale) * 30em); /* Sizing when supporting round() */ - --ds-sizing-1: round(down, calc(var(--ds-sizing-scale) * 1em), 0.0625rem); - --ds-sizing-2: round(down, calc(var(--ds-sizing-scale) * 2em), 0.0625rem); - --ds-sizing-3: round(down, calc(var(--ds-sizing-scale) * 3em), 0.0625rem); - --ds-sizing-4: round(down, calc(var(--ds-sizing-scale) * 4em), 0.0625rem); - --ds-sizing-5: round(down, calc(var(--ds-sizing-scale) * 5em), 0.0625rem); - --ds-sizing-6: round(down, calc(var(--ds-sizing-scale) * 6em), 0.0625rem); - --ds-sizing-7: round(down, calc(var(--ds-sizing-scale) * 7em), 0.0625rem); - --ds-sizing-8: round(down, calc(var(--ds-sizing-scale) * 8em), 0.0625rem); - --ds-sizing-9: round(down, calc(var(--ds-sizing-scale) * 9em), 0.0625rem); - --ds-sizing-10: round(down, calc(var(--ds-sizing-scale) * 10em), 0.0625rem); - --ds-sizing-11: round(down, calc(var(--ds-sizing-scale) * 11em), 0.0625rem); - --ds-sizing-12: round(down, calc(var(--ds-sizing-scale) * 12em), 0.0625rem); - --ds-sizing-13: round(down, calc(var(--ds-sizing-scale) * 13em), 0.0625rem); - --ds-sizing-14: round(down, calc(var(--ds-sizing-scale) * 14em), 0.0625rem); - --ds-sizing-15: round(down, calc(var(--ds-sizing-scale) * 15em), 0.0625rem); - --ds-sizing-16: round(down, calc(var(--ds-sizing-scale) * 16em), 0.0625rem); - --ds-sizing-17: round(down, calc(var(--ds-sizing-scale) * 17em), 0.0625rem); - --ds-sizing-18: round(down, calc(var(--ds-sizing-scale) * 18em), 0.0625rem); - --ds-sizing-19: round(down, calc(var(--ds-sizing-scale) * 19em), 0.0625rem); - --ds-sizing-20: round(down, calc(var(--ds-sizing-scale) * 20em), 0.0625rem); - --ds-sizing-21: round(down, calc(var(--ds-sizing-scale) * 21em), 0.0625rem); - --ds-sizing-22: round(down, calc(var(--ds-sizing-scale) * 22em), 0.0625rem); - --ds-sizing-23: round(down, calc(var(--ds-sizing-scale) * 23em), 0.0625rem); - --ds-sizing-24: round(down, calc(var(--ds-sizing-scale) * 24em), 0.0625rem); - --ds-sizing-25: round(down, calc(var(--ds-sizing-scale) * 25em), 0.0625rem); - --ds-sizing-26: round(down, calc(var(--ds-sizing-scale) * 26em), 0.0625rem); - --ds-sizing-27: round(down, calc(var(--ds-sizing-scale) * 27em), 0.0625rem); - --ds-sizing-28: round(down, calc(var(--ds-sizing-scale) * 28em), 0.0625rem); - --ds-sizing-29: round(down, calc(var(--ds-sizing-scale) * 29em), 0.0625rem); - --ds-sizing-30: round(down, calc(var(--ds-sizing-scale) * 30em), 0.0625rem); + @supports (width: round(down, .1em, 1px)) { + --ds-sizing-1: round(down, calc(var(--ds-sizing-scale) * 1em), 0.0625rem); + --ds-sizing-2: round(down, calc(var(--ds-sizing-scale) * 2em), 0.0625rem); + --ds-sizing-3: round(down, calc(var(--ds-sizing-scale) * 3em), 0.0625rem); + --ds-sizing-4: round(down, calc(var(--ds-sizing-scale) * 4em), 0.0625rem); + --ds-sizing-5: round(down, calc(var(--ds-sizing-scale) * 5em), 0.0625rem); + --ds-sizing-6: round(down, calc(var(--ds-sizing-scale) * 6em), 0.0625rem); + --ds-sizing-7: round(down, calc(var(--ds-sizing-scale) * 7em), 0.0625rem); + --ds-sizing-8: round(down, calc(var(--ds-sizing-scale) * 8em), 0.0625rem); + --ds-sizing-9: round(down, calc(var(--ds-sizing-scale) * 9em), 0.0625rem); + --ds-sizing-10: round(down, calc(var(--ds-sizing-scale) * 10em), 0.0625rem); + --ds-sizing-11: round(down, calc(var(--ds-sizing-scale) * 11em), 0.0625rem); + --ds-sizing-12: round(down, calc(var(--ds-sizing-scale) * 12em), 0.0625rem); + --ds-sizing-13: round(down, calc(var(--ds-sizing-scale) * 13em), 0.0625rem); + --ds-sizing-14: round(down, calc(var(--ds-sizing-scale) * 14em), 0.0625rem); + --ds-sizing-15: round(down, calc(var(--ds-sizing-scale) * 15em), 0.0625rem); + --ds-sizing-16: round(down, calc(var(--ds-sizing-scale) * 16em), 0.0625rem); + --ds-sizing-17: round(down, calc(var(--ds-sizing-scale) * 17em), 0.0625rem); + --ds-sizing-18: round(down, calc(var(--ds-sizing-scale) * 18em), 0.0625rem); + --ds-sizing-19: round(down, calc(var(--ds-sizing-scale) * 19em), 0.0625rem); + --ds-sizing-20: round(down, calc(var(--ds-sizing-scale) * 20em), 0.0625rem); + --ds-sizing-21: round(down, calc(var(--ds-sizing-scale) * 21em), 0.0625rem); + --ds-sizing-22: round(down, calc(var(--ds-sizing-scale) * 22em), 0.0625rem); + --ds-sizing-23: round(down, calc(var(--ds-sizing-scale) * 23em), 0.0625rem); + --ds-sizing-24: round(down, calc(var(--ds-sizing-scale) * 24em), 0.0625rem); + --ds-sizing-25: round(down, calc(var(--ds-sizing-scale) * 25em), 0.0625rem); + --ds-sizing-26: round(down, calc(var(--ds-sizing-scale) * 26em), 0.0625rem); + --ds-sizing-27: round(down, calc(var(--ds-sizing-scale) * 27em), 0.0625rem); + --ds-sizing-28: round(down, calc(var(--ds-sizing-scale) * 28em), 0.0625rem); + --ds-sizing-29: round(down, calc(var(--ds-sizing-scale) * 29em), 0.0625rem); + --ds-sizing-30: round(down, calc(var(--ds-sizing-scale) * 30em), 0.0625rem); + } /* Spacing */ --ds-spacing-1: var(--ds-sizing-1); From 1438a1917ead4481eb0b5e6d387f50ace723aa50 Mon Sep 17 00:00:00 2001 From: eirikbacker Date: Wed, 23 Oct 2024 15:18:54 +0200 Subject: [PATCH 24/29] fix: update size type to only include sm, md, lg --- packages/react/src/components/Avatar/Avatar.tsx | 2 +- packages/react/src/components/Label/Label.tsx | 2 +- .../src/components/Pagination/Pagination.stories.tsx | 8 ++++++-- .../components/ValidationMessage/ValidationMessage.tsx | 2 +- packages/react/src/types.ts | 2 +- 5 files changed, 10 insertions(+), 6 deletions(-) diff --git a/packages/react/src/components/Avatar/Avatar.tsx b/packages/react/src/components/Avatar/Avatar.tsx index de1d7ae648..f883f30f5f 100644 --- a/packages/react/src/components/Avatar/Avatar.tsx +++ b/packages/react/src/components/Avatar/Avatar.tsx @@ -18,7 +18,7 @@ export type AvatarProps = { /** * The size of the avatar. */ - size?: Size; + size?: 'xs' | 'sm' | 'md' | 'lg'; /** * The shape of the avatar. * diff --git a/packages/react/src/components/Label/Label.tsx b/packages/react/src/components/Label/Label.tsx index a95dd0361a..ef7562f81c 100644 --- a/packages/react/src/components/Label/Label.tsx +++ b/packages/react/src/components/Label/Label.tsx @@ -8,7 +8,7 @@ export type LabelProps = { /** * Changes text sizing */ - size?: Size; + size?: 'xs' | 'sm' | 'md' | 'lg'; /** * Adjusts font weight. Use this when you have a label hierarchy, such as checkboxes/radios in a fieldset * @default 'medium' diff --git a/packages/react/src/components/Pagination/Pagination.stories.tsx b/packages/react/src/components/Pagination/Pagination.stories.tsx index f77596f8a8..399d3997f6 100644 --- a/packages/react/src/components/Pagination/Pagination.stories.tsx +++ b/packages/react/src/components/Pagination/Pagination.stories.tsx @@ -2,13 +2,16 @@ import { useArgs } from '@storybook/preview-api'; import type { Meta, StoryFn } from '@storybook/react'; import { Pagination, type UsePaginationProps, usePagination } from '.'; +import type { Size } from '../../types'; export default { title: 'Komponenter/Pagination', component: Pagination, } as Meta; -export const Preview: StoryFn = (args) => { +export const Preview: StoryFn = ( + args, +) => { const [, updateArgs] = useArgs(); const { pages, nextButtonProps, prevButtonProps } = usePagination({ ...args, @@ -16,7 +19,7 @@ export const Preview: StoryFn = (args) => { }); return ( - + @@ -41,6 +44,7 @@ export const Preview: StoryFn = (args) => { }; Preview.args = { + size: 'md', currentPage: 4, setCurrentPage: console.log, // Added to include in storybook args onChange: console.log, // Open console to see this event diff --git a/packages/react/src/components/ValidationMessage/ValidationMessage.tsx b/packages/react/src/components/ValidationMessage/ValidationMessage.tsx index 43b4f6eab3..2b72268979 100644 --- a/packages/react/src/components/ValidationMessage/ValidationMessage.tsx +++ b/packages/react/src/components/ValidationMessage/ValidationMessage.tsx @@ -8,7 +8,7 @@ export type ValidationMessageProps = { /** * Changes text sizing */ - size?: Size; + size?: 'xs' | 'sm' | 'md' | 'lg'; /** Toggle error color */ error?: boolean; /** diff --git a/packages/react/src/types.ts b/packages/react/src/types.ts index 5de25c74b6..a70d2ef8e1 100644 --- a/packages/react/src/types.ts +++ b/packages/react/src/types.ts @@ -1,4 +1,4 @@ -export type Size = 'xs' | 'sm' | 'md' | 'lg'; +export type Size = 'sm' | 'md' | 'lg'; export type PortalProps = { /** From 94d54f66d6a390682171c18c0248bf69bf6e364a Mon Sep 17 00:00:00 2001 From: eirikbacker Date: Wed, 23 Oct 2024 15:22:55 +0200 Subject: [PATCH 25/29] fix(Theme): search input height --- packages/css/search.css | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/packages/css/search.css b/packages/css/search.css index 9de0667e77..132a0c758f 100644 --- a/packages/css/search.css +++ b/packages/css/search.css @@ -61,7 +61,7 @@ position: relative; box-sizing: border-box; flex: 0 1 auto; - height: var(--ds-sizing-10); + height: 100%; width: 100%; appearance: none; padding: 0 var(--ds-spacing-3); From 0e96b562abe19fb98c90763d6740ff3a1b75212c Mon Sep 17 00:00:00 2001 From: eirikbacker Date: Wed, 23 Oct 2024 15:24:23 +0200 Subject: [PATCH 26/29] chore: add comment --- packages/css/base/base.css | 1 + 1 file changed, 1 insertion(+) diff --git a/packages/css/base/base.css b/packages/css/base/base.css index 14355a0dd9..519a95954d 100644 --- a/packages/css/base/base.css +++ b/packages/css/base/base.css @@ -64,6 +64,7 @@ letter-spacing: var(--ds-body-sm-letter-spacing); } +/* Setting default font on not :root/ to ensure 1rem is still 16px */ body, [data-size='md'] { font-weight: var(--ds-body-md-font-weight); From 6fa73c615f96af616ab7703b1fe4f1bc332f84b0 Mon Sep 17 00:00:00 2001 From: Eirik Backer Date: Thu, 24 Oct 2024 09:08:25 +0200 Subject: [PATCH 27/29] Create fair-beds-destroy.md --- .changeset/fair-beds-destroy.md | 6 ++++++ 1 file changed, 6 insertions(+) create mode 100644 .changeset/fair-beds-destroy.md diff --git a/.changeset/fair-beds-destroy.md b/.changeset/fair-beds-destroy.md new file mode 100644 index 0000000000..68c96596f7 --- /dev/null +++ b/.changeset/fair-beds-destroy.md @@ -0,0 +1,6 @@ +--- +"@digdir/designsystemet-css": patch +"@digdir/designsystemet-react": patch +--- + +CSS: base sizing on font-size so all components can have all sizes, and naturally inherits size from context From 4d79828336762302fa9a03333f11378f83132d1f Mon Sep 17 00:00:00 2001 From: eirikbacker Date: Thu, 24 Oct 2024 09:20:44 +0200 Subject: [PATCH 28/29] fix: remove unused imports --- .../react/src/components/ErrorSummary/ErrorSummaryList.tsx | 4 +--- packages/react/src/components/Pagination/PaginationButton.tsx | 2 +- packages/react/src/components/Pagination/PaginationList.tsx | 2 +- 3 files changed, 3 insertions(+), 5 deletions(-) diff --git a/packages/react/src/components/ErrorSummary/ErrorSummaryList.tsx b/packages/react/src/components/ErrorSummary/ErrorSummaryList.tsx index 98740c5628..15835682c0 100644 --- a/packages/react/src/components/ErrorSummary/ErrorSummaryList.tsx +++ b/packages/react/src/components/ErrorSummary/ErrorSummaryList.tsx @@ -1,8 +1,6 @@ -import { forwardRef, useContext } from 'react'; +import { forwardRef } from 'react'; import { List, type ListUnorderedProps } from '../List'; -import { ErrorSummaryContext } from './ErrorSummary'; - export type ErrorSummaryListProps = ListUnorderedProps; export const ErrorSummaryList = forwardRef< diff --git a/packages/react/src/components/Pagination/PaginationButton.tsx b/packages/react/src/components/Pagination/PaginationButton.tsx index d62a6151ac..871adc9188 100644 --- a/packages/react/src/components/Pagination/PaginationButton.tsx +++ b/packages/react/src/components/Pagination/PaginationButton.tsx @@ -1,4 +1,4 @@ -import { type AriaAttributes, forwardRef, useContext } from 'react'; +import { type AriaAttributes, forwardRef } from 'react'; import { Button, type ButtonProps } from '../Button/Button'; diff --git a/packages/react/src/components/Pagination/PaginationList.tsx b/packages/react/src/components/Pagination/PaginationList.tsx index 46ccf3a010..4cb627d9e9 100644 --- a/packages/react/src/components/Pagination/PaginationList.tsx +++ b/packages/react/src/components/Pagination/PaginationList.tsx @@ -1,5 +1,5 @@ import { Slot } from '@radix-ui/react-slot'; -import { forwardRef, useContext, useEffect, useRef } from 'react'; +import { forwardRef } from 'react'; import type { HTMLAttributes } from 'react'; export type PaginationListProps = { From 3a4d58768c98f12aafe13c4e5f8f5146a0ff40a0 Mon Sep 17 00:00:00 2001 From: eirikbacker Date: Thu, 24 Oct 2024 09:54:22 +0200 Subject: [PATCH 29/29] fix(HelpText): forward data-size --- packages/react/src/components/HelpText/HelpText.tsx | 11 +++++++++-- 1 file changed, 9 insertions(+), 2 deletions(-) diff --git a/packages/react/src/components/HelpText/HelpText.tsx b/packages/react/src/components/HelpText/HelpText.tsx index 9cd53180e5..2dc6a2e273 100644 --- a/packages/react/src/components/HelpText/HelpText.tsx +++ b/packages/react/src/components/HelpText/HelpText.tsx @@ -20,7 +20,10 @@ export type HelpTextProps = { * @default 'right' */ placement?: Placement; -} & Omit, 'color'>; +} & { 'data-size'?: string } & Omit< + ButtonHTMLAttributes, + 'color' + >; export const HelpText = forwardRef( function HelpText( @@ -36,7 +39,11 @@ export const HelpText = forwardRef( variant='tertiary' {...rest} /> - + {children}