@navikt/ds-react 3.4.2 → 4.0.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/_docs.json +5615 -3780
- package/cjs/date/hooks/index.js +4 -4
- package/cjs/date/index.js +6 -6
- package/cjs/dropdown/Dropdown.js +57 -0
- package/cjs/dropdown/Menu/Divider.js +47 -0
- package/cjs/dropdown/Menu/GroupedList/Heading.js +47 -0
- package/cjs/dropdown/Menu/GroupedList/Item.js +54 -0
- package/cjs/dropdown/Menu/GroupedList/index.js +51 -0
- package/cjs/dropdown/Menu/GroupedList/package.json +6 -0
- package/cjs/dropdown/Menu/List/Item.js +54 -0
- package/cjs/dropdown/Menu/List/index.js +49 -0
- package/cjs/dropdown/Menu/List/package.json +6 -0
- package/cjs/dropdown/Menu/index.js +64 -0
- package/cjs/dropdown/Menu/package.json +6 -0
- package/cjs/dropdown/Toggle.js +66 -0
- package/cjs/dropdown/index.js +23 -0
- package/cjs/dropdown/package.json +6 -0
- package/cjs/form/radio/RadioGroup.js +10 -0
- package/cjs/index.js +3 -0
- package/cjs/internal-header/InternalHeader.js +55 -0
- package/cjs/internal-header/InternalHeaderButton.js +47 -0
- package/cjs/internal-header/InternalHeaderTitle.js +48 -0
- package/cjs/internal-header/InternalHeaderUser.js +51 -0
- package/cjs/internal-header/InternalHeaderUserButton.js +54 -0
- package/cjs/internal-header/index.js +8 -0
- package/cjs/internal-header/package.json +6 -0
- package/cjs/read-more/ReadMore.js +17 -0
- package/cjs/timeline/AxisLabels.js +90 -0
- package/cjs/timeline/Pin.js +106 -0
- package/cjs/timeline/Timeline.js +162 -0
- package/cjs/timeline/TimelineRow.js +86 -0
- package/cjs/timeline/hooks/usePeriodContext.js +16 -0
- package/cjs/timeline/hooks/useRowContext.js +18 -0
- package/cjs/timeline/hooks/useTimelineContext.js +23 -0
- package/cjs/timeline/hooks/useTimelineRows.js +79 -0
- package/cjs/timeline/index.js +8 -0
- package/cjs/timeline/package.json +6 -0
- package/cjs/timeline/period/ClickablePeriod.js +120 -0
- package/cjs/timeline/period/NonClickablePeriod.js +18 -0
- package/cjs/timeline/period/index.js +46 -0
- package/cjs/timeline/period/package.json +6 -0
- package/cjs/timeline/utils/calc.js +19 -0
- package/cjs/timeline/utils/filter.js +18 -0
- package/cjs/timeline/utils/index.js +7 -0
- package/cjs/timeline/utils/package.json +6 -0
- package/cjs/timeline/utils/period.js +40 -0
- package/cjs/timeline/utils/sort.js +10 -0
- package/cjs/timeline/utils/timeline.js +79 -0
- package/cjs/timeline/utils/types.external.js +2 -0
- package/cjs/timeline/utils/types.internal.js +2 -0
- package/cjs/timeline/zoom/ZoomButton.js +68 -0
- package/cjs/timeline/zoom/index.js +50 -0
- package/cjs/timeline/zoom/package.json +6 -0
- package/esm/date/hooks/index.d.ts +3 -3
- package/esm/date/hooks/index.js +3 -3
- package/esm/date/hooks/index.js.map +1 -1
- package/esm/date/index.d.ts +3 -3
- package/esm/date/index.js +3 -3
- package/esm/date/index.js.map +1 -1
- package/esm/dropdown/Dropdown.d.ts +37 -0
- package/esm/dropdown/Dropdown.js +29 -0
- package/esm/dropdown/Dropdown.js.map +1 -0
- package/esm/dropdown/Menu/Divider.d.ts +4 -0
- package/esm/dropdown/Menu/Divider.js +19 -0
- package/esm/dropdown/Menu/Divider.js.map +1 -0
- package/esm/dropdown/Menu/GroupedList/Heading.d.ts +10 -0
- package/esm/dropdown/Menu/GroupedList/Heading.js +19 -0
- package/esm/dropdown/Menu/GroupedList/Heading.js.map +1 -0
- package/esm/dropdown/Menu/GroupedList/Item.d.ts +11 -0
- package/esm/dropdown/Menu/GroupedList/Item.js +26 -0
- package/esm/dropdown/Menu/GroupedList/Item.js.map +1 -0
- package/esm/dropdown/Menu/GroupedList/index.d.ts +15 -0
- package/esm/dropdown/Menu/GroupedList/index.js +23 -0
- package/esm/dropdown/Menu/GroupedList/index.js.map +1 -0
- package/esm/dropdown/Menu/List/Item.d.ts +11 -0
- package/esm/dropdown/Menu/List/Item.js +26 -0
- package/esm/dropdown/Menu/List/Item.js.map +1 -0
- package/esm/dropdown/Menu/List/index.d.ts +13 -0
- package/esm/dropdown/Menu/List/index.js +21 -0
- package/esm/dropdown/Menu/List/index.js.map +1 -0
- package/esm/dropdown/Menu/index.d.ts +27 -0
- package/esm/dropdown/Menu/index.js +36 -0
- package/esm/dropdown/Menu/index.js.map +1 -0
- package/esm/dropdown/Toggle.d.ts +10 -0
- package/esm/dropdown/Toggle.js +38 -0
- package/esm/dropdown/Toggle.js.map +1 -0
- package/esm/dropdown/index.d.ts +2 -0
- package/esm/dropdown/index.js +3 -0
- package/esm/dropdown/index.js.map +1 -0
- package/esm/form/radio/RadioGroup.d.ts +10 -0
- package/esm/form/radio/RadioGroup.js +10 -0
- package/esm/form/radio/RadioGroup.js.map +1 -1
- package/esm/index.d.ts +3 -0
- package/esm/index.js +3 -0
- package/esm/index.js.map +1 -1
- package/esm/internal-header/InternalHeader.d.ts +16 -0
- package/esm/internal-header/InternalHeader.js +27 -0
- package/esm/internal-header/InternalHeader.js.map +1 -0
- package/esm/internal-header/InternalHeaderButton.d.ts +11 -0
- package/esm/internal-header/InternalHeaderButton.js +19 -0
- package/esm/internal-header/InternalHeaderButton.js.map +1 -0
- package/esm/internal-header/InternalHeaderTitle.d.ts +11 -0
- package/esm/internal-header/InternalHeaderTitle.js +20 -0
- package/esm/internal-header/InternalHeaderTitle.js.map +1 -0
- package/esm/internal-header/InternalHeaderUser.d.ts +14 -0
- package/esm/internal-header/InternalHeaderUser.js +23 -0
- package/esm/internal-header/InternalHeaderUser.js.map +1 -0
- package/esm/internal-header/InternalHeaderUserButton.d.ts +15 -0
- package/esm/internal-header/InternalHeaderUserButton.js +26 -0
- package/esm/internal-header/InternalHeaderUserButton.js.map +1 -0
- package/esm/internal-header/index.d.ts +5 -0
- package/esm/internal-header/index.js +2 -0
- package/esm/internal-header/index.js.map +1 -0
- package/esm/read-more/ReadMore.d.ts +17 -0
- package/esm/read-more/ReadMore.js +17 -0
- package/esm/read-more/ReadMore.js.map +1 -1
- package/esm/timeline/AxisLabels.d.ts +6 -0
- package/esm/timeline/AxisLabels.js +81 -0
- package/esm/timeline/AxisLabels.js.map +1 -0
- package/esm/timeline/Pin.d.ts +17 -0
- package/esm/timeline/Pin.js +81 -0
- package/esm/timeline/Pin.js.map +1 -0
- package/esm/timeline/Timeline.d.ts +45 -0
- package/esm/timeline/Timeline.js +134 -0
- package/esm/timeline/Timeline.js.map +1 -0
- package/esm/timeline/TimelineRow.d.ts +22 -0
- package/esm/timeline/TimelineRow.js +58 -0
- package/esm/timeline/TimelineRow.js.map +1 -0
- package/esm/timeline/hooks/usePeriodContext.d.ts +9 -0
- package/esm/timeline/hooks/usePeriodContext.js +13 -0
- package/esm/timeline/hooks/usePeriodContext.js.map +1 -0
- package/esm/timeline/hooks/useRowContext.d.ts +11 -0
- package/esm/timeline/hooks/useRowContext.js +15 -0
- package/esm/timeline/hooks/useRowContext.js.map +1 -0
- package/esm/timeline/hooks/useTimelineContext.d.ts +15 -0
- package/esm/timeline/hooks/useTimelineContext.js +20 -0
- package/esm/timeline/hooks/useTimelineContext.js.map +1 -0
- package/esm/timeline/hooks/useTimelineRows.d.ts +4 -0
- package/esm/timeline/hooks/useTimelineRows.js +74 -0
- package/esm/timeline/hooks/useTimelineRows.js.map +1 -0
- package/esm/timeline/index.d.ts +6 -0
- package/esm/timeline/index.js +2 -0
- package/esm/timeline/index.js.map +1 -0
- package/esm/timeline/period/ClickablePeriod.d.ts +9 -0
- package/esm/timeline/period/ClickablePeriod.js +93 -0
- package/esm/timeline/period/ClickablePeriod.js.map +1 -0
- package/esm/timeline/period/NonClickablePeriod.d.ts +7 -0
- package/esm/timeline/period/NonClickablePeriod.js +14 -0
- package/esm/timeline/period/NonClickablePeriod.js.map +1 -0
- package/esm/timeline/period/index.d.ts +57 -0
- package/esm/timeline/period/index.js +18 -0
- package/esm/timeline/period/index.js.map +1 -0
- package/esm/timeline/utils/calc.d.ts +5 -0
- package/esm/timeline/utils/calc.js +15 -0
- package/esm/timeline/utils/calc.js.map +1 -0
- package/esm/timeline/utils/filter.d.ts +10 -0
- package/esm/timeline/utils/filter.js +11 -0
- package/esm/timeline/utils/filter.js.map +1 -0
- package/esm/timeline/utils/index.d.ts +1 -0
- package/esm/timeline/utils/index.js +2 -0
- package/esm/timeline/utils/index.js.map +1 -0
- package/esm/timeline/utils/period.d.ts +2 -0
- package/esm/timeline/utils/period.js +33 -0
- package/esm/timeline/utils/period.js.map +1 -0
- package/esm/timeline/utils/sort.d.ts +4 -0
- package/esm/timeline/utils/sort.js +5 -0
- package/esm/timeline/utils/sort.js.map +1 -0
- package/esm/timeline/utils/timeline.d.ts +12 -0
- package/esm/timeline/utils/timeline.js +73 -0
- package/esm/timeline/utils/timeline.js.map +1 -0
- package/esm/timeline/utils/types.external.d.ts +53 -0
- package/esm/timeline/utils/types.external.js +2 -0
- package/esm/timeline/utils/types.external.js.map +1 -0
- package/esm/timeline/utils/types.internal.d.ts +61 -0
- package/esm/timeline/utils/types.internal.js +2 -0
- package/esm/timeline/utils/types.internal.js.map +1 -0
- package/esm/timeline/zoom/ZoomButton.d.ts +19 -0
- package/esm/timeline/zoom/ZoomButton.js +43 -0
- package/esm/timeline/zoom/ZoomButton.js.map +1 -0
- package/esm/timeline/zoom/index.d.ts +11 -0
- package/esm/timeline/zoom/index.js +22 -0
- package/esm/timeline/zoom/index.js.map +1 -0
- package/package.json +2 -2
- package/src/date/datepicker/datepicker.stories.tsx +19 -21
- package/src/date/datepicker/datepicker.test.tsx +5 -5
- package/src/date/hooks/index.ts +3 -3
- package/src/date/hooks/useRangeDatepicker.test.tsx +6 -6
- package/src/date/index.ts +5 -5
- package/src/date/monthpicker/monthpicker.stories.tsx +5 -5
- package/src/date/utils/__tests__/get-dates.test.ts +0 -1
- package/src/dropdown/Dropdown.tsx +80 -0
- package/src/dropdown/Menu/Divider.tsx +18 -0
- package/src/dropdown/Menu/GroupedList/Heading.tsx +31 -0
- package/src/dropdown/Menu/GroupedList/Item.tsx +45 -0
- package/src/dropdown/Menu/GroupedList/index.tsx +33 -0
- package/src/dropdown/Menu/List/Item.tsx +44 -0
- package/src/dropdown/Menu/List/index.tsx +27 -0
- package/src/dropdown/Menu/index.tsx +85 -0
- package/src/dropdown/Toggle.tsx +52 -0
- package/src/dropdown/dropdown.stories.tsx +91 -0
- package/src/dropdown/index.ts +2 -0
- package/src/form/radio/RadioGroup.tsx +10 -0
- package/src/index.ts +3 -0
- package/src/internal-header/InternalHeader.tsx +44 -0
- package/src/internal-header/InternalHeaderButton.tsx +28 -0
- package/src/internal-header/InternalHeaderTitle.tsx +35 -0
- package/src/internal-header/InternalHeaderUser.tsx +39 -0
- package/src/internal-header/InternalHeaderUserButton.tsx +43 -0
- package/src/internal-header/header.stories.tsx +225 -0
- package/src/internal-header/index.ts +8 -0
- package/src/read-more/ReadMore.tsx +17 -0
- package/src/timeline/AxisLabels.tsx +143 -0
- package/src/timeline/Pin.tsx +169 -0
- package/src/timeline/Timeline.tsx +219 -0
- package/src/timeline/TimelineRow.tsx +122 -0
- package/src/timeline/hooks/usePeriodContext.tsx +22 -0
- package/src/timeline/hooks/useRowContext.tsx +26 -0
- package/src/timeline/hooks/useTimelineContext.tsx +37 -0
- package/src/timeline/hooks/useTimelineRows.ts +161 -0
- package/src/timeline/index.ts +6 -0
- package/src/timeline/period/ClickablePeriod.tsx +193 -0
- package/src/timeline/period/NonClickablePeriod.tsx +46 -0
- package/src/timeline/period/index.tsx +130 -0
- package/src/timeline/timeline.stories.tsx +444 -0
- package/src/timeline/utils/calc.ts +26 -0
- package/src/timeline/utils/filter.ts +32 -0
- package/src/timeline/utils/index.ts +6 -0
- package/src/timeline/utils/period.ts +48 -0
- package/src/timeline/utils/sort.ts +11 -0
- package/src/timeline/utils/timeline.ts +83 -0
- package/src/timeline/utils/types.external.ts +67 -0
- package/src/timeline/utils/types.internal.ts +76 -0
- package/src/timeline/zoom/ZoomButton.tsx +83 -0
- package/src/timeline/zoom/index.tsx +30 -0
|
@@ -0,0 +1,91 @@
|
|
|
1
|
+
import React, { useState } from "react";
|
|
2
|
+
import { Dropdown } from "..";
|
|
3
|
+
import { Meta } from "@storybook/react";
|
|
4
|
+
import { Button } from "../button";
|
|
5
|
+
|
|
6
|
+
export default {
|
|
7
|
+
title: "ds-react/Dropdown",
|
|
8
|
+
component: Dropdown,
|
|
9
|
+
} as Meta;
|
|
10
|
+
|
|
11
|
+
export const Default = () => {
|
|
12
|
+
return (
|
|
13
|
+
<Dropdown onSelect={(event) => console.log(event)}>
|
|
14
|
+
<Dropdown.Toggle>Toggle</Dropdown.Toggle>
|
|
15
|
+
<Dropdown.Menu strategy="fixed">
|
|
16
|
+
<Dropdown.Menu.GroupedList>
|
|
17
|
+
<Dropdown.Menu.GroupedList.Heading>
|
|
18
|
+
Systemer og oppslagsverk
|
|
19
|
+
</Dropdown.Menu.GroupedList.Heading>
|
|
20
|
+
<Dropdown.Menu.GroupedList.Item
|
|
21
|
+
onClick={() => console.log("GroupedList.Item-click")}
|
|
22
|
+
>
|
|
23
|
+
Gosys
|
|
24
|
+
</Dropdown.Menu.GroupedList.Item>
|
|
25
|
+
</Dropdown.Menu.GroupedList>
|
|
26
|
+
<Dropdown.Menu.Divider />
|
|
27
|
+
<Dropdown.Menu.List>
|
|
28
|
+
<Dropdown.Menu.List.Item onClick={() => console.log("Item-click")}>
|
|
29
|
+
Gosys
|
|
30
|
+
</Dropdown.Menu.List.Item>
|
|
31
|
+
<Dropdown.Menu.List.Item>Psys</Dropdown.Menu.List.Item>
|
|
32
|
+
<Dropdown.Menu.List.Item disabled>Infotrygd</Dropdown.Menu.List.Item>
|
|
33
|
+
</Dropdown.Menu.List>
|
|
34
|
+
</Dropdown.Menu>
|
|
35
|
+
</Dropdown>
|
|
36
|
+
);
|
|
37
|
+
};
|
|
38
|
+
|
|
39
|
+
export const DefaultOpen = {
|
|
40
|
+
render: () => (
|
|
41
|
+
<Dropdown onSelect={(event) => console.log(event)} defaultOpen>
|
|
42
|
+
<Button as={Dropdown.Toggle}>Toggle</Button>
|
|
43
|
+
<Dropdown.Menu
|
|
44
|
+
strategy="fixed"
|
|
45
|
+
onClose={() => console.log("ONCLOSE default")}
|
|
46
|
+
>
|
|
47
|
+
<Dropdown.Menu.GroupedList>
|
|
48
|
+
<Dropdown.Menu.GroupedList.Heading>
|
|
49
|
+
Systemer og oppslagsverk
|
|
50
|
+
</Dropdown.Menu.GroupedList.Heading>
|
|
51
|
+
<Dropdown.Menu.GroupedList.Item
|
|
52
|
+
onClick={() => console.log("GroupedList.Item-click")}
|
|
53
|
+
>
|
|
54
|
+
Gosys
|
|
55
|
+
</Dropdown.Menu.GroupedList.Item>
|
|
56
|
+
</Dropdown.Menu.GroupedList>
|
|
57
|
+
</Dropdown.Menu>
|
|
58
|
+
</Dropdown>
|
|
59
|
+
),
|
|
60
|
+
args: { chromatic: { delay: 300 } },
|
|
61
|
+
};
|
|
62
|
+
|
|
63
|
+
export const ControlledOpen = {
|
|
64
|
+
render: () => {
|
|
65
|
+
// eslint-disable-next-line react-hooks/rules-of-hooks
|
|
66
|
+
const [openState, setOpenState] = useState(true);
|
|
67
|
+
return (
|
|
68
|
+
<Dropdown onSelect={(event) => console.log(event)} open={openState}>
|
|
69
|
+
<Button as={Dropdown.Toggle} onClick={() => setOpenState(!openState)}>
|
|
70
|
+
Toggle
|
|
71
|
+
</Button>
|
|
72
|
+
<Dropdown.Menu
|
|
73
|
+
strategy="fixed"
|
|
74
|
+
onClose={() => console.log("ONCLOSE CONTROLLED")}
|
|
75
|
+
>
|
|
76
|
+
<Dropdown.Menu.GroupedList>
|
|
77
|
+
<Dropdown.Menu.GroupedList.Heading>
|
|
78
|
+
Systemer og oppslagsverk
|
|
79
|
+
</Dropdown.Menu.GroupedList.Heading>
|
|
80
|
+
<Dropdown.Menu.GroupedList.Item
|
|
81
|
+
onClick={() => console.log("GroupedList.Item-click")}
|
|
82
|
+
>
|
|
83
|
+
Gosys
|
|
84
|
+
</Dropdown.Menu.GroupedList.Item>
|
|
85
|
+
</Dropdown.Menu.GroupedList>
|
|
86
|
+
</Dropdown.Menu>
|
|
87
|
+
</Dropdown>
|
|
88
|
+
);
|
|
89
|
+
},
|
|
90
|
+
args: { chromatic: { delay: 300 } },
|
|
91
|
+
};
|
|
@@ -45,6 +45,16 @@ export interface RadioGroupProps
|
|
|
45
45
|
required?: boolean;
|
|
46
46
|
}
|
|
47
47
|
|
|
48
|
+
/**
|
|
49
|
+
* Form radio group
|
|
50
|
+
* @see https://aksel.nav.no/komponenter/core/radio
|
|
51
|
+
* @see {@link RadioGroupProps}
|
|
52
|
+
* @example
|
|
53
|
+
* <RadioGroup legend="Får du AAP nå?">
|
|
54
|
+
* <Radio value="ja">Ja</Radio>
|
|
55
|
+
* <Radio value="Nei">Nei</Radio>
|
|
56
|
+
* </RadioGroup>
|
|
57
|
+
*/
|
|
48
58
|
export const RadioGroup = forwardRef<HTMLFieldSetElement, RadioGroupProps>(
|
|
49
59
|
(
|
|
50
60
|
{
|
package/src/index.ts
CHANGED
|
@@ -5,11 +5,13 @@ export * from "./chat";
|
|
|
5
5
|
export * from "./chips";
|
|
6
6
|
export * from "./copybutton";
|
|
7
7
|
export * from "./date";
|
|
8
|
+
export * from "./dropdown";
|
|
8
9
|
export * from "./expansion-card";
|
|
9
10
|
export * from "./form";
|
|
10
11
|
export * from "./grid";
|
|
11
12
|
export * from "./guide-panel";
|
|
12
13
|
export * from "./help-text";
|
|
14
|
+
export * from "./internal-header";
|
|
13
15
|
export * from "./link";
|
|
14
16
|
export * from "./link-panel";
|
|
15
17
|
export * from "./list";
|
|
@@ -24,6 +26,7 @@ export * from "./stepper";
|
|
|
24
26
|
export * from "./table";
|
|
25
27
|
export * from "./tabs";
|
|
26
28
|
export * from "./tag";
|
|
29
|
+
export * from "./timeline";
|
|
27
30
|
export * from "./toggle-group";
|
|
28
31
|
export * from "./tooltip";
|
|
29
32
|
export * from "./typography";
|
|
@@ -0,0 +1,44 @@
|
|
|
1
|
+
import React, { forwardRef, HTMLAttributes } from "react";
|
|
2
|
+
import InternalHeaderTitle, {
|
|
3
|
+
InternalHeaderTitleType,
|
|
4
|
+
} from "./InternalHeaderTitle";
|
|
5
|
+
import InternalHeaderUser, {
|
|
6
|
+
InternalHeaderUserType,
|
|
7
|
+
} from "./InternalHeaderUser";
|
|
8
|
+
import InternalHeaderButton, {
|
|
9
|
+
InternalHeaderButtonType,
|
|
10
|
+
} from "./InternalHeaderButton";
|
|
11
|
+
import InternalHeaderUserButton, {
|
|
12
|
+
InternalHeaderUserButtonType,
|
|
13
|
+
} from "./InternalHeaderUserButton";
|
|
14
|
+
import cl from "clsx";
|
|
15
|
+
|
|
16
|
+
export interface InternalHeaderProps extends HTMLAttributes<HTMLElement> {
|
|
17
|
+
children: React.ReactNode;
|
|
18
|
+
}
|
|
19
|
+
|
|
20
|
+
interface InternalHeaderComponent
|
|
21
|
+
extends React.ForwardRefExoticComponent<
|
|
22
|
+
InternalHeaderProps & React.RefAttributes<HTMLElement>
|
|
23
|
+
> {
|
|
24
|
+
Title: InternalHeaderTitleType;
|
|
25
|
+
User: InternalHeaderUserType;
|
|
26
|
+
Button: InternalHeaderButtonType;
|
|
27
|
+
UserButton: InternalHeaderUserButtonType;
|
|
28
|
+
}
|
|
29
|
+
|
|
30
|
+
export const InternalHeader = forwardRef(({ className, ...rest }, ref) => (
|
|
31
|
+
<header
|
|
32
|
+
data-theme="dark"
|
|
33
|
+
{...rest}
|
|
34
|
+
ref={ref}
|
|
35
|
+
className={cl("navds-internalheader", className)}
|
|
36
|
+
/>
|
|
37
|
+
)) as InternalHeaderComponent;
|
|
38
|
+
|
|
39
|
+
InternalHeader.Title = InternalHeaderTitle;
|
|
40
|
+
InternalHeader.User = InternalHeaderUser;
|
|
41
|
+
InternalHeader.Button = InternalHeaderButton;
|
|
42
|
+
InternalHeader.UserButton = InternalHeaderUserButton;
|
|
43
|
+
|
|
44
|
+
export default InternalHeader;
|
|
@@ -0,0 +1,28 @@
|
|
|
1
|
+
import React, { forwardRef } from "react";
|
|
2
|
+
import cl from "clsx";
|
|
3
|
+
import { OverridableComponent } from "../util/OverridableComponent";
|
|
4
|
+
|
|
5
|
+
export interface InternalHeaderButtonProps
|
|
6
|
+
extends React.AnchorHTMLAttributes<HTMLButtonElement> {
|
|
7
|
+
/**
|
|
8
|
+
* Application Button
|
|
9
|
+
*/
|
|
10
|
+
children: React.ReactNode;
|
|
11
|
+
}
|
|
12
|
+
|
|
13
|
+
export type InternalHeaderButtonType = OverridableComponent<
|
|
14
|
+
InternalHeaderButtonProps,
|
|
15
|
+
HTMLButtonElement
|
|
16
|
+
>;
|
|
17
|
+
|
|
18
|
+
export const InternalHeaderButton: InternalHeaderButtonType = forwardRef(
|
|
19
|
+
({ as: Component = "button", className, ...rest }, ref) => (
|
|
20
|
+
<Component
|
|
21
|
+
{...rest}
|
|
22
|
+
ref={ref}
|
|
23
|
+
className={cl("navds-internalheader__button", className)}
|
|
24
|
+
/>
|
|
25
|
+
)
|
|
26
|
+
);
|
|
27
|
+
|
|
28
|
+
export default InternalHeaderButton;
|
|
@@ -0,0 +1,35 @@
|
|
|
1
|
+
import React, { forwardRef } from "react";
|
|
2
|
+
import cl from "clsx";
|
|
3
|
+
import { OverridableComponent } from "../util/OverridableComponent";
|
|
4
|
+
|
|
5
|
+
export interface InternalHeaderTitleProps
|
|
6
|
+
extends React.AnchorHTMLAttributes<HTMLAnchorElement> {
|
|
7
|
+
/**
|
|
8
|
+
* Application title
|
|
9
|
+
*/
|
|
10
|
+
children: React.ReactNode;
|
|
11
|
+
}
|
|
12
|
+
|
|
13
|
+
export type InternalHeaderTitleType = OverridableComponent<
|
|
14
|
+
InternalHeaderTitleProps,
|
|
15
|
+
HTMLAnchorElement
|
|
16
|
+
>;
|
|
17
|
+
|
|
18
|
+
export const InternalHeaderTitle: InternalHeaderTitleType = forwardRef(
|
|
19
|
+
({ as: Component = "a", children, className, ...rest }, ref) => (
|
|
20
|
+
<Component
|
|
21
|
+
{...rest}
|
|
22
|
+
ref={ref}
|
|
23
|
+
size="xsmall"
|
|
24
|
+
className={cl(
|
|
25
|
+
"navds-internalheader__title",
|
|
26
|
+
"navds-body-short",
|
|
27
|
+
className
|
|
28
|
+
)}
|
|
29
|
+
>
|
|
30
|
+
<span>{children}</span>
|
|
31
|
+
</Component>
|
|
32
|
+
)
|
|
33
|
+
);
|
|
34
|
+
|
|
35
|
+
export default InternalHeaderTitle;
|
|
@@ -0,0 +1,39 @@
|
|
|
1
|
+
import React, { forwardRef, HTMLAttributes } from "react";
|
|
2
|
+
import cl from "clsx";
|
|
3
|
+
import { BodyShort, Detail } from "../typography";
|
|
4
|
+
|
|
5
|
+
export interface InternalHeaderUserProps
|
|
6
|
+
extends HTMLAttributes<HTMLDivElement> {
|
|
7
|
+
/**
|
|
8
|
+
* User name
|
|
9
|
+
*/
|
|
10
|
+
name: string;
|
|
11
|
+
/**
|
|
12
|
+
* User description
|
|
13
|
+
*/
|
|
14
|
+
description?: string;
|
|
15
|
+
}
|
|
16
|
+
|
|
17
|
+
export type InternalHeaderUserType = React.ForwardRefExoticComponent<
|
|
18
|
+
InternalHeaderUserProps & React.RefAttributes<HTMLDivElement>
|
|
19
|
+
>;
|
|
20
|
+
|
|
21
|
+
export const InternalHeaderUser = forwardRef<
|
|
22
|
+
HTMLDivElement,
|
|
23
|
+
InternalHeaderUserProps
|
|
24
|
+
>(({ className, name, description, ...rest }, ref) => (
|
|
25
|
+
<div
|
|
26
|
+
{...rest}
|
|
27
|
+
ref={ref}
|
|
28
|
+
className={cl("navds-internalheader__user", className)}
|
|
29
|
+
>
|
|
30
|
+
<span>
|
|
31
|
+
<BodyShort size="small" as="div">
|
|
32
|
+
{name}
|
|
33
|
+
</BodyShort>
|
|
34
|
+
{description && <Detail as="div">{description}</Detail>}
|
|
35
|
+
</span>
|
|
36
|
+
</div>
|
|
37
|
+
));
|
|
38
|
+
|
|
39
|
+
export default InternalHeaderUser;
|
|
@@ -0,0 +1,43 @@
|
|
|
1
|
+
import { ChevronDownIcon } from "@navikt/aksel-icons";
|
|
2
|
+
import cl from "clsx";
|
|
3
|
+
import React, { forwardRef } from "react";
|
|
4
|
+
import { BodyShort, Detail } from "../typography";
|
|
5
|
+
import { OverridableComponent } from "../util/OverridableComponent";
|
|
6
|
+
import InternalHeaderButton from "./InternalHeaderButton";
|
|
7
|
+
|
|
8
|
+
export interface InternalHeaderUserButtonProps
|
|
9
|
+
extends React.AnchorHTMLAttributes<HTMLButtonElement> {
|
|
10
|
+
/**
|
|
11
|
+
* User name
|
|
12
|
+
*/
|
|
13
|
+
name: string;
|
|
14
|
+
/**
|
|
15
|
+
* User description
|
|
16
|
+
*/
|
|
17
|
+
description?: string;
|
|
18
|
+
}
|
|
19
|
+
|
|
20
|
+
export type InternalHeaderUserButtonType = OverridableComponent<
|
|
21
|
+
InternalHeaderUserButtonProps,
|
|
22
|
+
HTMLButtonElement
|
|
23
|
+
>;
|
|
24
|
+
|
|
25
|
+
export const InternalHeaderUserButton: InternalHeaderUserButtonType =
|
|
26
|
+
forwardRef(({ as, name, description, className, ...rest }, ref) => (
|
|
27
|
+
<InternalHeaderButton
|
|
28
|
+
{...rest}
|
|
29
|
+
as={as}
|
|
30
|
+
ref={ref}
|
|
31
|
+
className={cl("navds-internalheader__user-button", className)}
|
|
32
|
+
>
|
|
33
|
+
<div>
|
|
34
|
+
<BodyShort size="small" as="div">
|
|
35
|
+
{name}
|
|
36
|
+
</BodyShort>
|
|
37
|
+
{description && <Detail as="div">{description}</Detail>}
|
|
38
|
+
</div>
|
|
39
|
+
<ChevronDownIcon title="vis meny" />
|
|
40
|
+
</InternalHeaderButton>
|
|
41
|
+
));
|
|
42
|
+
|
|
43
|
+
export default InternalHeaderUserButton;
|
|
@@ -0,0 +1,225 @@
|
|
|
1
|
+
import {
|
|
2
|
+
ChevronDownIcon,
|
|
3
|
+
ExternalLinkIcon,
|
|
4
|
+
MenuGridIcon,
|
|
5
|
+
} from "@navikt/aksel-icons";
|
|
6
|
+
import { BodyLong, BodyShort, Detail } from "@navikt/ds-react";
|
|
7
|
+
import { Meta } from "@storybook/react";
|
|
8
|
+
import React from "react";
|
|
9
|
+
import { InternalHeader, Dropdown } from "..";
|
|
10
|
+
|
|
11
|
+
export default {
|
|
12
|
+
title: "ds-react/InternalHeader",
|
|
13
|
+
component: InternalHeader,
|
|
14
|
+
argTypes: {
|
|
15
|
+
user: {
|
|
16
|
+
control: {
|
|
17
|
+
type: "radio",
|
|
18
|
+
options: ["simple", "with description", "with dropdown"],
|
|
19
|
+
},
|
|
20
|
+
},
|
|
21
|
+
},
|
|
22
|
+
} as Meta;
|
|
23
|
+
|
|
24
|
+
export const Default = {
|
|
25
|
+
render: (props) => {
|
|
26
|
+
return (
|
|
27
|
+
<InternalHeader style={{ width: 600 }}>
|
|
28
|
+
{props?.titleAsHeading ? (
|
|
29
|
+
<InternalHeader.Title as="h1">Tittel</InternalHeader.Title>
|
|
30
|
+
) : (
|
|
31
|
+
<InternalHeader.Title href="/#home">
|
|
32
|
+
Tittel med lenke
|
|
33
|
+
</InternalHeader.Title>
|
|
34
|
+
)}
|
|
35
|
+
{props.systemMenu && (
|
|
36
|
+
<Dropdown>
|
|
37
|
+
<InternalHeader.Button
|
|
38
|
+
as={Dropdown.Toggle}
|
|
39
|
+
style={{ marginLeft: "auto" }}
|
|
40
|
+
>
|
|
41
|
+
<MenuGridIcon
|
|
42
|
+
style={{ fontSize: "1.5rem" }}
|
|
43
|
+
title="MenuGridIconer og oppslagsverk"
|
|
44
|
+
/>
|
|
45
|
+
</InternalHeader.Button>
|
|
46
|
+
<Dropdown.Menu strategy="fixed">
|
|
47
|
+
<Dropdown.Menu.List>
|
|
48
|
+
<Dropdown.Menu.List.Item>
|
|
49
|
+
<span>A.Inntekt</span>
|
|
50
|
+
<ExternalLinkIcon style={{ fontSize: "0.875rem" }} />
|
|
51
|
+
</Dropdown.Menu.List.Item>
|
|
52
|
+
<Dropdown.Menu.List.Item>
|
|
53
|
+
<span>Aa-registeret</span>
|
|
54
|
+
<ExternalLinkIcon style={{ fontSize: "0.875rem" }} />
|
|
55
|
+
</Dropdown.Menu.List.Item>
|
|
56
|
+
<Dropdown.Menu.List.Item>
|
|
57
|
+
<span>Gosys</span>
|
|
58
|
+
<ExternalLinkIcon style={{ fontSize: "0.875rem" }} />
|
|
59
|
+
</Dropdown.Menu.List.Item>
|
|
60
|
+
</Dropdown.Menu.List>
|
|
61
|
+
</Dropdown.Menu>
|
|
62
|
+
</Dropdown>
|
|
63
|
+
)}
|
|
64
|
+
{(!props.user || props.user === "simple") && (
|
|
65
|
+
<InternalHeader.User
|
|
66
|
+
name="Ola Normann"
|
|
67
|
+
style={{ marginLeft: props.systemMenu ? "none" : "auto" }}
|
|
68
|
+
/>
|
|
69
|
+
)}
|
|
70
|
+
{props.user === "with description" && (
|
|
71
|
+
<InternalHeader.User
|
|
72
|
+
name="Ola Normann"
|
|
73
|
+
description="0123456"
|
|
74
|
+
style={{ marginLeft: props.systemMenu ? "none" : "auto" }}
|
|
75
|
+
/>
|
|
76
|
+
)}
|
|
77
|
+
{props.user === "with dropdown" && (
|
|
78
|
+
<Dropdown>
|
|
79
|
+
<InternalHeader.Button
|
|
80
|
+
as={Dropdown.Toggle}
|
|
81
|
+
style={{
|
|
82
|
+
marginLeft: props.systemMenu ? "none" : "auto",
|
|
83
|
+
paddingRight: "1.5rem",
|
|
84
|
+
paddingLeft: "1.5rem",
|
|
85
|
+
gap: "1rem",
|
|
86
|
+
}}
|
|
87
|
+
>
|
|
88
|
+
<BodyShort title="Ola Normann">KH</BodyShort>
|
|
89
|
+
<ChevronDownIcon />
|
|
90
|
+
</InternalHeader.Button>
|
|
91
|
+
<Dropdown.Menu strategy="fixed">
|
|
92
|
+
<div>
|
|
93
|
+
<BodyLong size="small" as="div">
|
|
94
|
+
Ola Normann 16px
|
|
95
|
+
</BodyLong>
|
|
96
|
+
<Detail size="small" as="div">
|
|
97
|
+
<div>Ident nr 14px</div>
|
|
98
|
+
<div>Enhet: Skien</div>
|
|
99
|
+
</Detail>
|
|
100
|
+
</div>
|
|
101
|
+
<Dropdown.Menu.Divider />
|
|
102
|
+
<Dropdown.Menu.List>
|
|
103
|
+
<Dropdown.Menu.List.Item as="a" href="/#settings">
|
|
104
|
+
Innstillinger
|
|
105
|
+
</Dropdown.Menu.List.Item>
|
|
106
|
+
<Dropdown.Menu.List.Item onClick={() => console.log("logg ut")}>
|
|
107
|
+
Logg ut
|
|
108
|
+
</Dropdown.Menu.List.Item>
|
|
109
|
+
</Dropdown.Menu.List>
|
|
110
|
+
</Dropdown.Menu>
|
|
111
|
+
</Dropdown>
|
|
112
|
+
)}
|
|
113
|
+
</InternalHeader>
|
|
114
|
+
);
|
|
115
|
+
},
|
|
116
|
+
|
|
117
|
+
args: {
|
|
118
|
+
titleAsHeading: false,
|
|
119
|
+
systemMenu: false,
|
|
120
|
+
},
|
|
121
|
+
};
|
|
122
|
+
|
|
123
|
+
export const TitleAsHeading = () => (
|
|
124
|
+
<InternalHeader style={{ width: 600 }}>
|
|
125
|
+
<InternalHeader.Title as="h1">Tittel</InternalHeader.Title>
|
|
126
|
+
</InternalHeader>
|
|
127
|
+
);
|
|
128
|
+
|
|
129
|
+
export const TitleAsLink = () => (
|
|
130
|
+
<InternalHeader style={{ width: 600 }}>
|
|
131
|
+
<InternalHeader.Title href="/#home">Tittel med lenke</InternalHeader.Title>
|
|
132
|
+
</InternalHeader>
|
|
133
|
+
);
|
|
134
|
+
|
|
135
|
+
export const User = () => (
|
|
136
|
+
<InternalHeader style={{ width: 600 }}>
|
|
137
|
+
<InternalHeader.Title href="/#home">Tittel med lenke</InternalHeader.Title>
|
|
138
|
+
<InternalHeader.User name="Ola Normann" style={{ marginLeft: "auto" }} />
|
|
139
|
+
</InternalHeader>
|
|
140
|
+
);
|
|
141
|
+
|
|
142
|
+
export const UserWithDescription = () => (
|
|
143
|
+
<InternalHeader style={{ width: 600 }}>
|
|
144
|
+
<InternalHeader.Title href="/#home">Tittel med lenke</InternalHeader.Title>
|
|
145
|
+
<InternalHeader.User
|
|
146
|
+
name="Ola Normann"
|
|
147
|
+
description="id: 123456"
|
|
148
|
+
style={{ marginLeft: "auto" }}
|
|
149
|
+
/>
|
|
150
|
+
</InternalHeader>
|
|
151
|
+
);
|
|
152
|
+
|
|
153
|
+
export const UserWithMenu = () => (
|
|
154
|
+
<InternalHeader style={{ width: 600 }}>
|
|
155
|
+
<InternalHeader.Title href="/#home">Tittel med lenke</InternalHeader.Title>
|
|
156
|
+
<Dropdown>
|
|
157
|
+
<InternalHeader.Button
|
|
158
|
+
as={Dropdown.Toggle}
|
|
159
|
+
style={{
|
|
160
|
+
marginLeft: "auto",
|
|
161
|
+
paddingRight: "1.5rem",
|
|
162
|
+
paddingLeft: "1.5rem",
|
|
163
|
+
gap: "1rem",
|
|
164
|
+
}}
|
|
165
|
+
>
|
|
166
|
+
<BodyShort title="Ola Normann">KH</BodyShort>
|
|
167
|
+
<ChevronDownIcon />
|
|
168
|
+
</InternalHeader.Button>
|
|
169
|
+
<Dropdown.Menu strategy="fixed">
|
|
170
|
+
<div>
|
|
171
|
+
<BodyLong size="small" as="div">
|
|
172
|
+
Ola Normann 16px
|
|
173
|
+
</BodyLong>
|
|
174
|
+
<Detail size="small" as="div">
|
|
175
|
+
<div>Ident nr 14px</div>
|
|
176
|
+
<div>Enhet: Skien</div>
|
|
177
|
+
</Detail>
|
|
178
|
+
</div>
|
|
179
|
+
<Dropdown.Menu.Divider />
|
|
180
|
+
<Dropdown.Menu.List>
|
|
181
|
+
<Dropdown.Menu.List.Item as="a" href="/#settings">
|
|
182
|
+
Innstillinger
|
|
183
|
+
</Dropdown.Menu.List.Item>
|
|
184
|
+
<Dropdown.Menu.List.Item onClick={() => console.log("logg ut")}>
|
|
185
|
+
Logg ut
|
|
186
|
+
</Dropdown.Menu.List.Item>
|
|
187
|
+
</Dropdown.Menu.List>
|
|
188
|
+
</Dropdown.Menu>
|
|
189
|
+
</Dropdown>
|
|
190
|
+
</InternalHeader>
|
|
191
|
+
);
|
|
192
|
+
|
|
193
|
+
export const UserWithMenuGridIconMenu = () => (
|
|
194
|
+
<InternalHeader style={{ width: 600 }}>
|
|
195
|
+
<InternalHeader.Title href="/#home">Tittel med lenke</InternalHeader.Title>
|
|
196
|
+
<Dropdown>
|
|
197
|
+
<InternalHeader.Button
|
|
198
|
+
as={Dropdown.Toggle}
|
|
199
|
+
style={{ marginLeft: "auto" }}
|
|
200
|
+
>
|
|
201
|
+
<MenuGridIcon
|
|
202
|
+
style={{ fontSize: "1.5rem" }}
|
|
203
|
+
title="MenuGridIconer og oppslagsverk"
|
|
204
|
+
/>
|
|
205
|
+
</InternalHeader.Button>
|
|
206
|
+
<Dropdown.Menu strategy="fixed">
|
|
207
|
+
<Dropdown.Menu.List>
|
|
208
|
+
<Dropdown.Menu.List.Item>
|
|
209
|
+
<span>A.Inntekt</span>
|
|
210
|
+
<ExternalLinkIcon style={{ fontSize: "0.875rem" }} />
|
|
211
|
+
</Dropdown.Menu.List.Item>
|
|
212
|
+
<Dropdown.Menu.List.Item>
|
|
213
|
+
<span>Aa-registeret</span>
|
|
214
|
+
<ExternalLinkIcon style={{ fontSize: "0.875rem" }} />
|
|
215
|
+
</Dropdown.Menu.List.Item>
|
|
216
|
+
<Dropdown.Menu.List.Item>
|
|
217
|
+
<span>Gosys</span>
|
|
218
|
+
<ExternalLinkIcon style={{ fontSize: "0.875rem" }} />
|
|
219
|
+
</Dropdown.Menu.List.Item>
|
|
220
|
+
</Dropdown.Menu.List>
|
|
221
|
+
</Dropdown.Menu>
|
|
222
|
+
</Dropdown>
|
|
223
|
+
<InternalHeader.User name="Ola Normann" description="id: 123456" />
|
|
224
|
+
</InternalHeader>
|
|
225
|
+
);
|
|
@@ -0,0 +1,8 @@
|
|
|
1
|
+
export {
|
|
2
|
+
default as InternalHeader,
|
|
3
|
+
type InternalHeaderProps,
|
|
4
|
+
} from "./InternalHeader";
|
|
5
|
+
export { type InternalHeaderButtonProps } from "./InternalHeaderButton";
|
|
6
|
+
export { type InternalHeaderTitleProps } from "./InternalHeaderTitle";
|
|
7
|
+
export { type InternalHeaderUserProps } from "./InternalHeaderUser";
|
|
8
|
+
export { type InternalHeaderUserButtonProps } from "./InternalHeaderUserButton";
|
|
@@ -30,6 +30,23 @@ export interface ReadMoreProps
|
|
|
30
30
|
size?: "medium" | "small";
|
|
31
31
|
}
|
|
32
32
|
|
|
33
|
+
/**
|
|
34
|
+
* ReadMore
|
|
35
|
+
* @see https://aksel.nav.no/komponenter/core/read-more
|
|
36
|
+
* @see {@link ReadMoreProps}
|
|
37
|
+
*
|
|
38
|
+
* @example
|
|
39
|
+
* // Default
|
|
40
|
+
* <ReadMore header="Dette regnes som helsemessige begrensninger">
|
|
41
|
+
* Med helsemessige begrensninger mener vi funksjonshemming, sykdom...
|
|
42
|
+
* </ReadMore>
|
|
43
|
+
*
|
|
44
|
+
* @example
|
|
45
|
+
* // Litt mindre versjon
|
|
46
|
+
* <ReadMore size="small" header="Dette regnes som helsemessige begrensninger">
|
|
47
|
+
* Med helsemessige begrensninger mener vi funksjonshemming, sykdom...
|
|
48
|
+
* </ReadMore>
|
|
49
|
+
*/
|
|
33
50
|
export const ReadMore = forwardRef<HTMLButtonElement, ReadMoreProps>(
|
|
34
51
|
(
|
|
35
52
|
{
|