@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.
Files changed (234) hide show
  1. package/_docs.json +5615 -3780
  2. package/cjs/date/hooks/index.js +4 -4
  3. package/cjs/date/index.js +6 -6
  4. package/cjs/dropdown/Dropdown.js +57 -0
  5. package/cjs/dropdown/Menu/Divider.js +47 -0
  6. package/cjs/dropdown/Menu/GroupedList/Heading.js +47 -0
  7. package/cjs/dropdown/Menu/GroupedList/Item.js +54 -0
  8. package/cjs/dropdown/Menu/GroupedList/index.js +51 -0
  9. package/cjs/dropdown/Menu/GroupedList/package.json +6 -0
  10. package/cjs/dropdown/Menu/List/Item.js +54 -0
  11. package/cjs/dropdown/Menu/List/index.js +49 -0
  12. package/cjs/dropdown/Menu/List/package.json +6 -0
  13. package/cjs/dropdown/Menu/index.js +64 -0
  14. package/cjs/dropdown/Menu/package.json +6 -0
  15. package/cjs/dropdown/Toggle.js +66 -0
  16. package/cjs/dropdown/index.js +23 -0
  17. package/cjs/dropdown/package.json +6 -0
  18. package/cjs/form/radio/RadioGroup.js +10 -0
  19. package/cjs/index.js +3 -0
  20. package/cjs/internal-header/InternalHeader.js +55 -0
  21. package/cjs/internal-header/InternalHeaderButton.js +47 -0
  22. package/cjs/internal-header/InternalHeaderTitle.js +48 -0
  23. package/cjs/internal-header/InternalHeaderUser.js +51 -0
  24. package/cjs/internal-header/InternalHeaderUserButton.js +54 -0
  25. package/cjs/internal-header/index.js +8 -0
  26. package/cjs/internal-header/package.json +6 -0
  27. package/cjs/read-more/ReadMore.js +17 -0
  28. package/cjs/timeline/AxisLabels.js +90 -0
  29. package/cjs/timeline/Pin.js +106 -0
  30. package/cjs/timeline/Timeline.js +162 -0
  31. package/cjs/timeline/TimelineRow.js +86 -0
  32. package/cjs/timeline/hooks/usePeriodContext.js +16 -0
  33. package/cjs/timeline/hooks/useRowContext.js +18 -0
  34. package/cjs/timeline/hooks/useTimelineContext.js +23 -0
  35. package/cjs/timeline/hooks/useTimelineRows.js +79 -0
  36. package/cjs/timeline/index.js +8 -0
  37. package/cjs/timeline/package.json +6 -0
  38. package/cjs/timeline/period/ClickablePeriod.js +120 -0
  39. package/cjs/timeline/period/NonClickablePeriod.js +18 -0
  40. package/cjs/timeline/period/index.js +46 -0
  41. package/cjs/timeline/period/package.json +6 -0
  42. package/cjs/timeline/utils/calc.js +19 -0
  43. package/cjs/timeline/utils/filter.js +18 -0
  44. package/cjs/timeline/utils/index.js +7 -0
  45. package/cjs/timeline/utils/package.json +6 -0
  46. package/cjs/timeline/utils/period.js +40 -0
  47. package/cjs/timeline/utils/sort.js +10 -0
  48. package/cjs/timeline/utils/timeline.js +79 -0
  49. package/cjs/timeline/utils/types.external.js +2 -0
  50. package/cjs/timeline/utils/types.internal.js +2 -0
  51. package/cjs/timeline/zoom/ZoomButton.js +68 -0
  52. package/cjs/timeline/zoom/index.js +50 -0
  53. package/cjs/timeline/zoom/package.json +6 -0
  54. package/esm/date/hooks/index.d.ts +3 -3
  55. package/esm/date/hooks/index.js +3 -3
  56. package/esm/date/hooks/index.js.map +1 -1
  57. package/esm/date/index.d.ts +3 -3
  58. package/esm/date/index.js +3 -3
  59. package/esm/date/index.js.map +1 -1
  60. package/esm/dropdown/Dropdown.d.ts +37 -0
  61. package/esm/dropdown/Dropdown.js +29 -0
  62. package/esm/dropdown/Dropdown.js.map +1 -0
  63. package/esm/dropdown/Menu/Divider.d.ts +4 -0
  64. package/esm/dropdown/Menu/Divider.js +19 -0
  65. package/esm/dropdown/Menu/Divider.js.map +1 -0
  66. package/esm/dropdown/Menu/GroupedList/Heading.d.ts +10 -0
  67. package/esm/dropdown/Menu/GroupedList/Heading.js +19 -0
  68. package/esm/dropdown/Menu/GroupedList/Heading.js.map +1 -0
  69. package/esm/dropdown/Menu/GroupedList/Item.d.ts +11 -0
  70. package/esm/dropdown/Menu/GroupedList/Item.js +26 -0
  71. package/esm/dropdown/Menu/GroupedList/Item.js.map +1 -0
  72. package/esm/dropdown/Menu/GroupedList/index.d.ts +15 -0
  73. package/esm/dropdown/Menu/GroupedList/index.js +23 -0
  74. package/esm/dropdown/Menu/GroupedList/index.js.map +1 -0
  75. package/esm/dropdown/Menu/List/Item.d.ts +11 -0
  76. package/esm/dropdown/Menu/List/Item.js +26 -0
  77. package/esm/dropdown/Menu/List/Item.js.map +1 -0
  78. package/esm/dropdown/Menu/List/index.d.ts +13 -0
  79. package/esm/dropdown/Menu/List/index.js +21 -0
  80. package/esm/dropdown/Menu/List/index.js.map +1 -0
  81. package/esm/dropdown/Menu/index.d.ts +27 -0
  82. package/esm/dropdown/Menu/index.js +36 -0
  83. package/esm/dropdown/Menu/index.js.map +1 -0
  84. package/esm/dropdown/Toggle.d.ts +10 -0
  85. package/esm/dropdown/Toggle.js +38 -0
  86. package/esm/dropdown/Toggle.js.map +1 -0
  87. package/esm/dropdown/index.d.ts +2 -0
  88. package/esm/dropdown/index.js +3 -0
  89. package/esm/dropdown/index.js.map +1 -0
  90. package/esm/form/radio/RadioGroup.d.ts +10 -0
  91. package/esm/form/radio/RadioGroup.js +10 -0
  92. package/esm/form/radio/RadioGroup.js.map +1 -1
  93. package/esm/index.d.ts +3 -0
  94. package/esm/index.js +3 -0
  95. package/esm/index.js.map +1 -1
  96. package/esm/internal-header/InternalHeader.d.ts +16 -0
  97. package/esm/internal-header/InternalHeader.js +27 -0
  98. package/esm/internal-header/InternalHeader.js.map +1 -0
  99. package/esm/internal-header/InternalHeaderButton.d.ts +11 -0
  100. package/esm/internal-header/InternalHeaderButton.js +19 -0
  101. package/esm/internal-header/InternalHeaderButton.js.map +1 -0
  102. package/esm/internal-header/InternalHeaderTitle.d.ts +11 -0
  103. package/esm/internal-header/InternalHeaderTitle.js +20 -0
  104. package/esm/internal-header/InternalHeaderTitle.js.map +1 -0
  105. package/esm/internal-header/InternalHeaderUser.d.ts +14 -0
  106. package/esm/internal-header/InternalHeaderUser.js +23 -0
  107. package/esm/internal-header/InternalHeaderUser.js.map +1 -0
  108. package/esm/internal-header/InternalHeaderUserButton.d.ts +15 -0
  109. package/esm/internal-header/InternalHeaderUserButton.js +26 -0
  110. package/esm/internal-header/InternalHeaderUserButton.js.map +1 -0
  111. package/esm/internal-header/index.d.ts +5 -0
  112. package/esm/internal-header/index.js +2 -0
  113. package/esm/internal-header/index.js.map +1 -0
  114. package/esm/read-more/ReadMore.d.ts +17 -0
  115. package/esm/read-more/ReadMore.js +17 -0
  116. package/esm/read-more/ReadMore.js.map +1 -1
  117. package/esm/timeline/AxisLabels.d.ts +6 -0
  118. package/esm/timeline/AxisLabels.js +81 -0
  119. package/esm/timeline/AxisLabels.js.map +1 -0
  120. package/esm/timeline/Pin.d.ts +17 -0
  121. package/esm/timeline/Pin.js +81 -0
  122. package/esm/timeline/Pin.js.map +1 -0
  123. package/esm/timeline/Timeline.d.ts +45 -0
  124. package/esm/timeline/Timeline.js +134 -0
  125. package/esm/timeline/Timeline.js.map +1 -0
  126. package/esm/timeline/TimelineRow.d.ts +22 -0
  127. package/esm/timeline/TimelineRow.js +58 -0
  128. package/esm/timeline/TimelineRow.js.map +1 -0
  129. package/esm/timeline/hooks/usePeriodContext.d.ts +9 -0
  130. package/esm/timeline/hooks/usePeriodContext.js +13 -0
  131. package/esm/timeline/hooks/usePeriodContext.js.map +1 -0
  132. package/esm/timeline/hooks/useRowContext.d.ts +11 -0
  133. package/esm/timeline/hooks/useRowContext.js +15 -0
  134. package/esm/timeline/hooks/useRowContext.js.map +1 -0
  135. package/esm/timeline/hooks/useTimelineContext.d.ts +15 -0
  136. package/esm/timeline/hooks/useTimelineContext.js +20 -0
  137. package/esm/timeline/hooks/useTimelineContext.js.map +1 -0
  138. package/esm/timeline/hooks/useTimelineRows.d.ts +4 -0
  139. package/esm/timeline/hooks/useTimelineRows.js +74 -0
  140. package/esm/timeline/hooks/useTimelineRows.js.map +1 -0
  141. package/esm/timeline/index.d.ts +6 -0
  142. package/esm/timeline/index.js +2 -0
  143. package/esm/timeline/index.js.map +1 -0
  144. package/esm/timeline/period/ClickablePeriod.d.ts +9 -0
  145. package/esm/timeline/period/ClickablePeriod.js +93 -0
  146. package/esm/timeline/period/ClickablePeriod.js.map +1 -0
  147. package/esm/timeline/period/NonClickablePeriod.d.ts +7 -0
  148. package/esm/timeline/period/NonClickablePeriod.js +14 -0
  149. package/esm/timeline/period/NonClickablePeriod.js.map +1 -0
  150. package/esm/timeline/period/index.d.ts +57 -0
  151. package/esm/timeline/period/index.js +18 -0
  152. package/esm/timeline/period/index.js.map +1 -0
  153. package/esm/timeline/utils/calc.d.ts +5 -0
  154. package/esm/timeline/utils/calc.js +15 -0
  155. package/esm/timeline/utils/calc.js.map +1 -0
  156. package/esm/timeline/utils/filter.d.ts +10 -0
  157. package/esm/timeline/utils/filter.js +11 -0
  158. package/esm/timeline/utils/filter.js.map +1 -0
  159. package/esm/timeline/utils/index.d.ts +1 -0
  160. package/esm/timeline/utils/index.js +2 -0
  161. package/esm/timeline/utils/index.js.map +1 -0
  162. package/esm/timeline/utils/period.d.ts +2 -0
  163. package/esm/timeline/utils/period.js +33 -0
  164. package/esm/timeline/utils/period.js.map +1 -0
  165. package/esm/timeline/utils/sort.d.ts +4 -0
  166. package/esm/timeline/utils/sort.js +5 -0
  167. package/esm/timeline/utils/sort.js.map +1 -0
  168. package/esm/timeline/utils/timeline.d.ts +12 -0
  169. package/esm/timeline/utils/timeline.js +73 -0
  170. package/esm/timeline/utils/timeline.js.map +1 -0
  171. package/esm/timeline/utils/types.external.d.ts +53 -0
  172. package/esm/timeline/utils/types.external.js +2 -0
  173. package/esm/timeline/utils/types.external.js.map +1 -0
  174. package/esm/timeline/utils/types.internal.d.ts +61 -0
  175. package/esm/timeline/utils/types.internal.js +2 -0
  176. package/esm/timeline/utils/types.internal.js.map +1 -0
  177. package/esm/timeline/zoom/ZoomButton.d.ts +19 -0
  178. package/esm/timeline/zoom/ZoomButton.js +43 -0
  179. package/esm/timeline/zoom/ZoomButton.js.map +1 -0
  180. package/esm/timeline/zoom/index.d.ts +11 -0
  181. package/esm/timeline/zoom/index.js +22 -0
  182. package/esm/timeline/zoom/index.js.map +1 -0
  183. package/package.json +2 -2
  184. package/src/date/datepicker/datepicker.stories.tsx +19 -21
  185. package/src/date/datepicker/datepicker.test.tsx +5 -5
  186. package/src/date/hooks/index.ts +3 -3
  187. package/src/date/hooks/useRangeDatepicker.test.tsx +6 -6
  188. package/src/date/index.ts +5 -5
  189. package/src/date/monthpicker/monthpicker.stories.tsx +5 -5
  190. package/src/date/utils/__tests__/get-dates.test.ts +0 -1
  191. package/src/dropdown/Dropdown.tsx +80 -0
  192. package/src/dropdown/Menu/Divider.tsx +18 -0
  193. package/src/dropdown/Menu/GroupedList/Heading.tsx +31 -0
  194. package/src/dropdown/Menu/GroupedList/Item.tsx +45 -0
  195. package/src/dropdown/Menu/GroupedList/index.tsx +33 -0
  196. package/src/dropdown/Menu/List/Item.tsx +44 -0
  197. package/src/dropdown/Menu/List/index.tsx +27 -0
  198. package/src/dropdown/Menu/index.tsx +85 -0
  199. package/src/dropdown/Toggle.tsx +52 -0
  200. package/src/dropdown/dropdown.stories.tsx +91 -0
  201. package/src/dropdown/index.ts +2 -0
  202. package/src/form/radio/RadioGroup.tsx +10 -0
  203. package/src/index.ts +3 -0
  204. package/src/internal-header/InternalHeader.tsx +44 -0
  205. package/src/internal-header/InternalHeaderButton.tsx +28 -0
  206. package/src/internal-header/InternalHeaderTitle.tsx +35 -0
  207. package/src/internal-header/InternalHeaderUser.tsx +39 -0
  208. package/src/internal-header/InternalHeaderUserButton.tsx +43 -0
  209. package/src/internal-header/header.stories.tsx +225 -0
  210. package/src/internal-header/index.ts +8 -0
  211. package/src/read-more/ReadMore.tsx +17 -0
  212. package/src/timeline/AxisLabels.tsx +143 -0
  213. package/src/timeline/Pin.tsx +169 -0
  214. package/src/timeline/Timeline.tsx +219 -0
  215. package/src/timeline/TimelineRow.tsx +122 -0
  216. package/src/timeline/hooks/usePeriodContext.tsx +22 -0
  217. package/src/timeline/hooks/useRowContext.tsx +26 -0
  218. package/src/timeline/hooks/useTimelineContext.tsx +37 -0
  219. package/src/timeline/hooks/useTimelineRows.ts +161 -0
  220. package/src/timeline/index.ts +6 -0
  221. package/src/timeline/period/ClickablePeriod.tsx +193 -0
  222. package/src/timeline/period/NonClickablePeriod.tsx +46 -0
  223. package/src/timeline/period/index.tsx +130 -0
  224. package/src/timeline/timeline.stories.tsx +444 -0
  225. package/src/timeline/utils/calc.ts +26 -0
  226. package/src/timeline/utils/filter.ts +32 -0
  227. package/src/timeline/utils/index.ts +6 -0
  228. package/src/timeline/utils/period.ts +48 -0
  229. package/src/timeline/utils/sort.ts +11 -0
  230. package/src/timeline/utils/timeline.ts +83 -0
  231. package/src/timeline/utils/types.external.ts +67 -0
  232. package/src/timeline/utils/types.internal.ts +76 -0
  233. package/src/timeline/zoom/ZoomButton.tsx +83 -0
  234. 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
+ };
@@ -0,0 +1,2 @@
1
+ export { default as Dropdown } from "./Dropdown";
2
+ export * from "./Dropdown";
@@ -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
  {