Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

New/list #1823

Merged
merged 60 commits into from
Feb 28, 2023
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
60 commits
Select commit Hold shift + click to select a range
fa6c33e
:tada: setup
kschieren Feb 13, 2023
1a0da46
:lipstick: add stylesheet
kschieren Feb 13, 2023
e65ac94
:art: conditional type
kschieren Feb 13, 2023
726477b
:art: add listitem
kschieren Feb 14, 2023
837f32a
:art: add title + desc + refactor
kschieren Feb 14, 2023
409ac0a
:art: added title and description
kschieren Feb 14, 2023
600f7e9
:wheelchair: add aria labels
kschieren Feb 14, 2023
e7072b2
:art: add headingTag prop
kschieren Feb 14, 2023
c8f46f5
:art: add stories
kschieren Feb 14, 2023
15a1764
:art: update ListItem API
kschieren Feb 14, 2023
3573c43
:lipstick: ul markers
kschieren Feb 14, 2023
76e8a07
Merge branch 'main' into new/list
kschieren Feb 15, 2023
043881a
:art: update markers
kschieren Feb 15, 2023
9abadd3
:art: add icons story
kschieren Feb 15, 2023
99eb8f5
:art: ordered markers
kschieren Feb 15, 2023
11af1db
:art: update stories
kschieren Feb 15, 2023
347da76
Merge branch 'main' into new/list
kschieren Feb 15, 2023
c42f014
:art: tweak list props
kschieren Feb 17, 2023
a479bfc
:lipstick: update classes
kschieren Feb 17, 2023
93d1924
:lipstick: update classes again
kschieren Feb 17, 2023
84690df
Merge branch 'main' into new/list
kschieren Feb 17, 2023
58a5bd6
:art: remove icon if ol
kschieren Feb 20, 2023
8588a4d
Merge branch 'main' into new/list
kschieren Feb 20, 2023
f0c08ab
:art: update stories
kschieren Feb 20, 2023
00b1de7
:art: use default counter for ol
kschieren Feb 20, 2023
625778a
:art: h4 > span
kschieren Feb 21, 2023
ac92188
:art: use bodyshort default
kschieren Feb 21, 2023
591141b
:art: update stories
kschieren Feb 21, 2023
3a2d8a8
Merge branch 'main' into new/list
kschieren Feb 22, 2023
0cebdf4
:art: tweaks
kschieren Feb 22, 2023
56bed56
:art: Css-tokens
KenAJoh Feb 22, 2023
c64c912
:art: update aria
kschieren Feb 22, 2023
3402593
:art: refactor css and remove test story
kschieren Feb 22, 2023
cd2b14a
:art: add examples
kschieren Feb 22, 2023
433cfe0
:art: update examples
kschieren Feb 22, 2023
d262b33
Merge branch 'main' into new/list
kschieren Feb 22, 2023
664b5d0
Update @navikt/core/css/list.css
kschieren Feb 22, 2023
41ddec3
Update @navikt/core/css/list.css
kschieren Feb 22, 2023
08b3d58
Merge branch 'main' into new/list
kschieren Feb 22, 2023
43a87d9
Merge branch 'main' into new/list
kschieren Feb 22, 2023
efa05ea
:art: La til tokens-doc
KenAJoh Feb 23, 2023
24195c0
:bookmark: changeset
kschieren Feb 23, 2023
c3f49bc
:art: add console warn
kschieren Feb 24, 2023
b4682db
:lipstick: tweak margin to support nested list
kschieren Feb 24, 2023
c457ac9
Merge branch 'main' into new/list
kschieren Feb 24, 2023
a7fd9fe
:art: nested story
kschieren Feb 24, 2023
930359e
:art: add nested example
kschieren Feb 24, 2023
6e5d2db
Merge branch 'main' into new/list
kschieren Feb 24, 2023
77d67e8
:construction: detect nested lists
kschieren Feb 27, 2023
36e4468
:lipstick: change margins for nested lists
kschieren Feb 27, 2023
b114fd1
:lipstick: tweak margins
kschieren Feb 27, 2023
53f00ad
Update @navikt/core/react/src/list/List.tsx
KenAJoh Feb 28, 2023
6db6bde
:arrow_up: Storybook beta 45 -> 54
KenAJoh Feb 28, 2023
a2da2fd
:sparkles: add fixedWeeks option to standalone (#1827)
kschieren Feb 28, 2023
0ce842c
:wheelchair: Fikset siteimprove feilmeldinger for kode-eksempler
KenAJoh Feb 28, 2023
0e8a8d3
Version Packages (#1828)
github-actions[bot] Feb 28, 2023
fe81e2e
:fire: Fjernet redundant console.log
KenAJoh Feb 28, 2023
85484fb
[Snyk] Security upgrade node from 16.13.1-alpine3.14 to 18.1-alpine3.…
snyk-bot Feb 28, 2023
d332e50
Merge branch 'main' into new/list
kschieren Feb 28, 2023
be7668c
:bookmark: changeset
kschieren Feb 28, 2023
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
12 changes: 12 additions & 0 deletions .changeset/polite-fireants-reply.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,12 @@
---
"@navikt/ds-codemod": patch
"@navikt/ds-css": patch
"@navikt/ds-react": patch
"@navikt/ds-tailwind": patch
"@navikt/ds-tokens": patch
"@navikt/ds-icons": patch
"@navikt/ds-css-internal": patch
"@navikt/ds-react-internal": patch
---

added support for nested lists
13 changes: 11 additions & 2 deletions @navikt/core/css/list.css
Original file line number Diff line number Diff line change
Expand Up @@ -3,8 +3,17 @@
padding: 0;
}

.navds-list li:not(:first-child) {
margin-top: var(--a-spacing-5);
.navds-list--nested {
margin: var(--a-spacing-4) 0 var(--a-spacing-8) 0;
}

.navds-list li:not(.navds-list__item--noMargin) {
margin-bottom: var(--a-spacing-5);
}

.navds-list:last-child > ul > li:last-child,
.navds-list:last-child > ol > li:last-child {
margin-bottom: 0;
}

.navds-list ul .navds-list__item {
Expand Down
20 changes: 16 additions & 4 deletions @navikt/core/react/src/list/List.tsx
Original file line number Diff line number Diff line change
@@ -1,8 +1,8 @@
import cl from "clsx";
import React, { createContext, forwardRef } from "react";
import React, { createContext, forwardRef, useContext } from "react";
import { BodyShort, Heading } from "../typography";
import { useId } from "../util/useId";
import { ListItem, ListItemType } from "./ListItem";
import { ListItem, ListItemContext, ListItemType } from "./ListItem";

export interface ListProps extends React.HTMLAttributes<HTMLDivElement> {
children: React.ReactNode;
Expand All @@ -26,8 +26,10 @@ export interface ListProps extends React.HTMLAttributes<HTMLDivElement> {
headingTag?: React.ElementType<any>;
}

interface ListComponent extends React.ForwardRefExoticComponent<ListProps> {
export interface ListComponent
extends React.ForwardRefExoticComponent<ListProps> {
Item: ListItemType;
componentType: string;
}

interface ListContextProps {
Expand All @@ -53,13 +55,22 @@ export const List = forwardRef<HTMLDivElement, ListProps>(
) => {
const ariaId = useId();

const { isNested } = useContext(ListItemContext);


return (
<ListContext.Provider
value={{
listType: ListTag,
}}
>
<div {...rest} ref={ref} className={cl("navds-list", className)}>
<div
{...rest}
ref={ref}
className={cl("navds-list", className, {
"navds-list--nested": isNested,
})}
>
{title && (
<Heading id={`tittel-${ariaId}`} size="small" as={headingTag}>
{title}
Expand All @@ -81,5 +92,6 @@ export const List = forwardRef<HTMLDivElement, ListProps>(
) as ListComponent;

List.Item = ListItem;
List.componentType = "list";

export default List;
100 changes: 63 additions & 37 deletions @navikt/core/react/src/list/ListItem.tsx
Original file line number Diff line number Diff line change
@@ -1,5 +1,5 @@
import cl from "clsx";
import React, { forwardRef, useContext } from "react";
import React, { createContext, forwardRef, useContext } from "react";
import { BodyShort, Label } from "../typography";
import { ListContext } from "./List";

Expand All @@ -13,7 +13,7 @@ export interface ListItemProps extends React.HTMLAttributes<HTMLLIElement> {
*/
title?: string;
/*
* Icon to be used as list marker
* Icon to be used as list marker for unordered lists.
*/
icon?: React.ReactNode;
}
Expand All @@ -23,47 +23,73 @@ export interface ListItemType
ListItemProps & React.RefAttributes<HTMLLIElement>
> {}

interface ListItemContextProps {
isNested: boolean;
}

export const ListItemContext = createContext<ListItemContextProps>({
isNested: false,
});

export const ListItem: ListItemType = forwardRef(
({ className, children, title, icon, ...rest }, ref) => {
const { listType } = useContext(ListContext);

return (
<li {...rest} ref={ref} className={cl("navds-list__item", className)}>
{listType === "ul" && (
<div
className={cl({
"navds-list__item-marker--icon": icon,
"navds-list__item-marker--bullet": !icon,
})}
>
{icon ? (
icon
) : (
<svg
width="6"
height="6"
viewBox="0 0 6 6"
fill="none"
xmlns="http://www.w3.org/2000/svg"
aria-hidden
focusable={false}
role="img"
>
<rect width="6" height="6" rx="3" fill="currentColor" />
</svg>
)}
</div>
)}
if (listType === "ol" && icon) {
console.warn(
"<List />: Icon prop is not supported for ordered lists. Please remove the icon prop."
);
}

<BodyShort as="div" size="small" className="navds-list__item-content">
{title && (
<Label as="p" size="small">
{title}
</Label>
const hasNestedList = React.Children.toArray(children)?.some(
(child: any) => child?.type?.componentType === "list"
);

return (
<ListItemContext.Provider value={{ isNested: hasNestedList }}>
<li
{...rest}
ref={ref}
className={cl("navds-list__item", className, {
"navds-list__item--noMargin": hasNestedList,
})}
>
{listType === "ul" && (
<div
className={cl({
"navds-list__item-marker--icon": icon,
"navds-list__item-marker--bullet": !icon,
})}
>
{icon ? (
icon
) : (
<svg
width="6"
height="6"
viewBox="0 0 6 6"
fill="none"
xmlns="http://www.w3.org/2000/svg"
aria-hidden
focusable={false}
role="img"
>
<rect width="6" height="6" rx="3" fill="currentColor" />
</svg>
)}
</div>
)}
{children}
</BodyShort>
</li>

<BodyShort as="div" size="small" className="navds-list__item-content">
{title && (
<Label as="p" size="small">
{title}
</Label>
)}
{children}
</BodyShort>
</li>
</ListItemContext.Provider>
);
}
);
Expand Down
29 changes: 29 additions & 0 deletions @navikt/core/react/src/list/list.stories.tsx
Original file line number Diff line number Diff line change
Expand Up @@ -117,3 +117,32 @@ export const Icons = {
);
},
};

export const Nested = {
render: () => {
return (
<List>
<List.Item title="Sed Do Eiusmod Tempor Incididunt">
Beskrivelsen på punkter er nærmere forklart <a href="/">her</a>
<List>
<List.Item title="Lorem Ipsum Dolor Sit Amet">
Beskrivelsen på punkter er nærmere forklart <a href="/">her</a>
</List.Item>
<List.Item title="Consectetur Adipiscing Elit">
Beskrivelsen på punkter er nærmere forklart <a href="/">her</a>
</List.Item>
<List.Item>
Beskrivelsen på punkter er nærmere forklart <a href="/">her</a>
</List.Item>
<List.Item>
Beskrivelsen på punkter er nærmere forklart <a href="/">her</a>
</List.Item>
</List>
</List.Item>
<List.Item>
Beskrivelsen på punkter er nærmere forklart <a href="/">her</a>
</List.Item>
</List>
);
},
};
44 changes: 44 additions & 0 deletions aksel.nav.no/website/pages/eksempler/list/nested.tsx
Original file line number Diff line number Diff line change
@@ -0,0 +1,44 @@
import { List } from "@navikt/ds-react";
import { withDsExample } from "components/website-modules/examples/withDsExample";

const Example = () => {
return (
<List>
<List.Item title="Kritiske">
disse er problemer som må løses så fort som mulig—de hindrer folk i å
bruke siden i det hele tatt og kan være direkte farlig.
</List.Item>
<List.Item title="Høy">
brukere er forhindret i å forstå innholdet eller utføre kritiske
oppgaver, og det finnes ingen forsvarsstrategier eller alternative
løsninger.
<List>
<List.Item>
Rammeverket, inkludert navigasjon, påloggings- og søkefunksjoner
</List.Item>
<List.Item>Gjenbrukbare komponenter</List.Item>
<List.Item>Nøkkelstier gjennom nettstedet</List.Item>
</List>
</List.Item>
<List.Item title="Medium">
det er vanskelig, tidkrevende eller frustrerende for brukere å få
tilgang til innhold eller funksjonalitet.
</List.Item>
<List.Item title="Lav">
brukeren få tilgang til alt innhold og funksjonalitet, men
brukeropplevelsen er dårlig.
</List.Item>
</List>
);
};

export default withDsExample(Example);

/* Storybook story */
export const Demo = {
render: Example,
};

export const args = {
index: 4,
};