@navikt/ds-react 0.15.0-rc.30 → 0.15.2

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 (125) hide show
  1. package/cjs/accordion/AccordionHeader.js +3 -3
  2. package/cjs/button/Button.js +3 -3
  3. package/cjs/form/Fieldset/Fieldset.js +3 -3
  4. package/cjs/form/Select.js +2 -2
  5. package/cjs/form/Switch.js +6 -5
  6. package/cjs/form/TextField.js +5 -3
  7. package/cjs/form/Textarea.js +3 -3
  8. package/cjs/form/checkbox/Checkbox.js +13 -2
  9. package/cjs/form/checkbox/useCheckbox.js +1 -1
  10. package/cjs/form/search-field/SearchField.js +2 -2
  11. package/cjs/index.js +1 -2
  12. package/cjs/{accordion-menu/AccordionMenu.js → menu/Menu.js} +7 -7
  13. package/cjs/{accordion-menu/AccordionMenuCollapsable.js → menu/MenuCollapse.js} +18 -8
  14. package/cjs/{accordion-menu/AccordionMenuItem.js → menu/MenuItem.js} +2 -2
  15. package/cjs/menu/MenuItems.js +23 -0
  16. package/cjs/menu/index.js +8 -0
  17. package/cjs/menu/package.json +6 -0
  18. package/cjs/table/Table.js +2 -15
  19. package/esm/accordion/AccordionHeader.js +3 -3
  20. package/esm/accordion/AccordionHeader.js.map +1 -1
  21. package/esm/button/Button.d.ts +1 -1
  22. package/esm/button/Button.js +3 -3
  23. package/esm/button/Button.js.map +1 -1
  24. package/esm/form/Fieldset/Fieldset.js +3 -3
  25. package/esm/form/Fieldset/Fieldset.js.map +1 -1
  26. package/esm/form/Select.js +2 -2
  27. package/esm/form/Select.js.map +1 -1
  28. package/esm/form/Switch.js +6 -5
  29. package/esm/form/Switch.js.map +1 -1
  30. package/esm/form/TextField.js +5 -3
  31. package/esm/form/TextField.js.map +1 -1
  32. package/esm/form/Textarea.js +3 -3
  33. package/esm/form/Textarea.js.map +1 -1
  34. package/esm/form/checkbox/Checkbox.d.ts +5 -0
  35. package/esm/form/checkbox/Checkbox.js +13 -2
  36. package/esm/form/checkbox/Checkbox.js.map +1 -1
  37. package/esm/form/checkbox/useCheckbox.d.ts +0 -1
  38. package/esm/form/checkbox/useCheckbox.js +1 -1
  39. package/esm/form/checkbox/useCheckbox.js.map +1 -1
  40. package/esm/form/search-field/SearchField.js +2 -2
  41. package/esm/form/search-field/SearchField.js.map +1 -1
  42. package/esm/index.d.ts +1 -2
  43. package/esm/index.js +1 -2
  44. package/esm/index.js.map +1 -1
  45. package/esm/menu/Menu.d.ts +12 -0
  46. package/esm/{accordion-menu/AccordionMenu.js → menu/Menu.js} +8 -8
  47. package/esm/menu/Menu.js.map +1 -0
  48. package/esm/menu/MenuCollapse.d.ts +12 -0
  49. package/esm/menu/MenuCollapse.js +37 -0
  50. package/esm/menu/MenuCollapse.js.map +1 -0
  51. package/esm/menu/MenuItem.d.ts +13 -0
  52. package/esm/{accordion-menu/AccordionMenuItem.js → menu/MenuItem.js} +3 -3
  53. package/esm/menu/MenuItem.js.map +1 -0
  54. package/esm/{accordion-menu → menu}/MenuItems.d.ts +2 -1
  55. package/esm/menu/MenuItems.js +19 -0
  56. package/esm/menu/MenuItems.js.map +1 -0
  57. package/esm/menu/index.d.ts +3 -0
  58. package/esm/menu/index.js +2 -0
  59. package/esm/menu/index.js.map +1 -0
  60. package/esm/table/Table.d.ts +0 -16
  61. package/esm/table/Table.js +2 -15
  62. package/esm/table/Table.js.map +1 -1
  63. package/package.json +3 -4
  64. package/src/accordion/accordion.stories.tsx +90 -0
  65. package/src/alert/{stories/alert.stories.tsx → alert.stories.tsx} +2 -2
  66. package/src/button/Button.tsx +3 -7
  67. package/src/button/{stories/button.stories.tsx → button.stories.tsx} +1 -9
  68. package/src/form/checkbox/Checkbox.tsx +18 -1
  69. package/src/form/checkbox/stories/checkbox.stories.tsx +38 -1
  70. package/src/form/checkbox/useCheckbox.ts +0 -1
  71. package/src/index.ts +1 -2
  72. package/src/menu/Menu.tsx +36 -0
  73. package/src/menu/MenuCollapse.tsx +80 -0
  74. package/src/{accordion-menu/AccordionMenuItem.tsx → menu/MenuItem.tsx} +6 -6
  75. package/src/menu/MenuItems.tsx +21 -0
  76. package/src/menu/index.ts +3 -0
  77. package/src/menu/stories/menu.stories.mdx +93 -0
  78. package/src/menu/stories/menu.stories.tsx +139 -0
  79. package/src/table/Table.tsx +2 -47
  80. package/src/table/stories/table.stories.tsx +2 -35
  81. package/cjs/accordion-menu/MenuItems.js +0 -8
  82. package/cjs/accordion-menu/index.js +0 -8
  83. package/cjs/accordion-menu/package.json +0 -6
  84. package/cjs/pagination/Pagination.js +0 -44
  85. package/cjs/pagination/index.js +0 -19
  86. package/cjs/pagination/package.json +0 -6
  87. package/cjs/table/ColumnHeader.js +0 -58
  88. package/esm/accordion-menu/AccordionMenu.d.ts +0 -12
  89. package/esm/accordion-menu/AccordionMenu.js.map +0 -1
  90. package/esm/accordion-menu/AccordionMenuCollapsable.d.ts +0 -9
  91. package/esm/accordion-menu/AccordionMenuCollapsable.js +0 -28
  92. package/esm/accordion-menu/AccordionMenuCollapsable.js.map +0 -1
  93. package/esm/accordion-menu/AccordionMenuItem.d.ts +0 -13
  94. package/esm/accordion-menu/AccordionMenuItem.js.map +0 -1
  95. package/esm/accordion-menu/MenuItems.js +0 -4
  96. package/esm/accordion-menu/MenuItems.js.map +0 -1
  97. package/esm/accordion-menu/index.d.ts +0 -3
  98. package/esm/accordion-menu/index.js +0 -2
  99. package/esm/accordion-menu/index.js.map +0 -1
  100. package/esm/pagination/Pagination.d.ts +0 -21
  101. package/esm/pagination/Pagination.js +0 -38
  102. package/esm/pagination/Pagination.js.map +0 -1
  103. package/esm/pagination/index.d.ts +0 -2
  104. package/esm/pagination/index.js +0 -3
  105. package/esm/pagination/index.js.map +0 -1
  106. package/esm/table/ColumnHeader.d.ts +0 -16
  107. package/esm/table/ColumnHeader.js +0 -35
  108. package/esm/table/ColumnHeader.js.map +0 -1
  109. package/src/accordion/stories/accordion.stories.mdx +0 -72
  110. package/src/accordion/stories/accordion.stories.tsx +0 -92
  111. package/src/accordion-menu/AccordionMenu.tsx +0 -39
  112. package/src/accordion-menu/AccordionMenuCollapsable.tsx +0 -45
  113. package/src/accordion-menu/MenuItems.tsx +0 -13
  114. package/src/accordion-menu/index.ts +0 -3
  115. package/src/accordion-menu/stories/accordion-menu.stories.mdx +0 -66
  116. package/src/accordion-menu/stories/accordion-menu.stories.tsx +0 -141
  117. package/src/alert/stories/alert.stories.mdx +0 -96
  118. package/src/button/stories/button.stories.mdx +0 -76
  119. package/src/pagination/Pagination.tsx +0 -89
  120. package/src/pagination/index.ts +0 -2
  121. package/src/pagination/steps.test.ts +0 -12
  122. package/src/pagination/stories/pagination.stories.tsx +0 -15
  123. package/src/table/ColumnHeader.tsx +0 -66
  124. package/src/table/stories/people.json +0 -822
  125. package/src/table/stories/table-async.stories.tsx +0 -150
@@ -1,5 +1,5 @@
1
1
  import React, { useState } from "react";
2
- import { Button } from "../index";
2
+ import { Button } from "./index";
3
3
  import { Success } from "@navikt/ds-icons";
4
4
 
5
5
  export default {
@@ -78,14 +78,6 @@ export const All = () => {
78
78
  </Button>
79
79
  ))}
80
80
  </Section>
81
- <h2>Xsmall</h2>
82
- <Section>
83
- {variants.map((variant) => (
84
- <Button key={variant} variant={variant} size="xsmall">
85
- {varSwitch[variant]}
86
- </Button>
87
- ))}
88
- </Section>
89
81
  <h2>Button w/icon</h2>
90
82
  <Section>
91
83
  {variants.map((variant) => (
@@ -24,6 +24,11 @@ export interface CheckboxProps
24
24
  * The value of the HTML element.
25
25
  */
26
26
  value?: string;
27
+ /**
28
+ * Specify whether the Checkbox is in an indeterminate state
29
+ * @default false
30
+ */
31
+ indeterminate?: boolean;
27
32
  }
28
33
 
29
34
  const Checkbox = forwardRef<HTMLInputElement, CheckboxProps>((props, ref) => {
@@ -52,8 +57,20 @@ const Checkbox = forwardRef<HTMLInputElement, CheckboxProps>((props, ref) => {
52
57
  "hideLabel",
53
58
  ])}
54
59
  {...inputProps}
60
+ type="checkbox"
55
61
  className="navds-checkbox__input"
56
- ref={ref}
62
+ aria-checked={props.indeterminate ? "mixed" : inputProps.checked}
63
+ ref={(el) => {
64
+ if (el) {
65
+ el.indeterminate = props.indeterminate ?? false;
66
+ }
67
+
68
+ if (typeof ref === "function") {
69
+ ref(el);
70
+ } else if (ref != null) {
71
+ ref.current = el;
72
+ }
73
+ }}
57
74
  />
58
75
  <label htmlFor={inputProps.id} className="navds-checkbox__label">
59
76
  <div
@@ -1,4 +1,4 @@
1
- import React from "react";
1
+ import React, { useState } from "react";
2
2
  import { Checkbox, CheckboxGroup } from "../../index";
3
3
  import { Meta } from "@storybook/react/types-6-0";
4
4
  export default {
@@ -6,6 +6,36 @@ export default {
6
6
  component: Checkbox,
7
7
  } as Meta;
8
8
 
9
+ export const Indeterminate = () => {
10
+ const [checked, setChecked] = useState([true, false]);
11
+
12
+ return (
13
+ <>
14
+ <Checkbox
15
+ checked={checked[0] && checked[1]}
16
+ indeterminate={checked[0] !== checked[1]}
17
+ onChange={(e) => setChecked([e.target.checked, e.target.checked])}
18
+ >
19
+ Parent
20
+ </Checkbox>
21
+ <div style={{ paddingLeft: "2rem" }}>
22
+ <Checkbox
23
+ checked={checked[0]}
24
+ onChange={(e) => setChecked([e.target.checked, checked[1]])}
25
+ >
26
+ Child 1
27
+ </Checkbox>
28
+ <Checkbox
29
+ checked={checked[1]}
30
+ onChange={(e) => setChecked([checked[0], e.target.checked])}
31
+ >
32
+ Child 2
33
+ </Checkbox>
34
+ </div>
35
+ </>
36
+ );
37
+ };
38
+
9
39
  export const All = () => {
10
40
  const Checkboxes = (props) => (
11
41
  <CheckboxGroup
@@ -51,6 +81,13 @@ export const All = () => {
51
81
  <Checkbox value="Orange" description="Laborum ad" disabled defaultChecked>
52
82
  Orange
53
83
  </Checkbox>
84
+ <h3>Indeterminate</h3>
85
+ <Checkbox value="Apple" indeterminate>
86
+ Apple
87
+ </Checkbox>
88
+ <Checkbox value="Orange" indeterminate size="small">
89
+ Orange
90
+ </Checkbox>
54
91
 
55
92
  <h2>Checkbox group</h2>
56
93
  <Checkboxes />
@@ -32,7 +32,6 @@ const useCheckbox = ({ children, ...props }: CheckboxProps) => {
32
32
  ...rest,
33
33
  inputProps: {
34
34
  ...inputProps,
35
- type: "checkbox",
36
35
  checked: checkboxGroup?.value
37
36
  ? checkboxGroup.value.includes(props.value as string)
38
37
  : props.checked,
package/src/index.ts CHANGED
@@ -1,5 +1,4 @@
1
1
  export * from "./accordion";
2
- export * from "./accordion-menu";
3
2
  export * from "./alert";
4
3
  export * from "./button";
5
4
  export * from "./form";
@@ -9,8 +8,8 @@ export * from "./guide-panel";
9
8
  export * from "./link";
10
9
  export * from "./link-panel";
11
10
  export * from "./loader";
11
+ export * from "./menu";
12
12
  export * from "./modal";
13
- export * from "./pagination";
14
13
  export * from "./panel";
15
14
  export * from "./popover";
16
15
  export * from "./speech-bubble";
@@ -0,0 +1,36 @@
1
+ import React, { forwardRef } from "react";
2
+ import cl from "classnames";
3
+ import MenuItems from "./MenuItems";
4
+
5
+ import Item, { MenuItemType } from "./MenuItem";
6
+ import Collapse, { MenuCollapseType } from "./MenuCollapse";
7
+
8
+ export interface MenuProps extends React.HTMLAttributes<HTMLElement> {
9
+ children: React.ReactNode;
10
+ }
11
+
12
+ interface MenuComponent
13
+ extends React.ForwardRefExoticComponent<
14
+ MenuProps & React.RefAttributes<HTMLElement>
15
+ > {
16
+ Collapse: MenuCollapseType;
17
+ Item: MenuItemType;
18
+ }
19
+
20
+ const Menu = forwardRef<HTMLElement, MenuProps>(
21
+ ({ children, className, ...rest }, ref) => (
22
+ <nav
23
+ {...rest}
24
+ role="navigation"
25
+ ref={ref}
26
+ className={cl("navds-menu", className)}
27
+ >
28
+ <MenuItems>{children}</MenuItems>
29
+ </nav>
30
+ )
31
+ ) as MenuComponent;
32
+
33
+ Menu.Collapse = Collapse;
34
+ Menu.Item = Item;
35
+
36
+ export default Menu;
@@ -0,0 +1,80 @@
1
+ import React, {
2
+ createContext,
3
+ forwardRef,
4
+ HTMLAttributes,
5
+ useContext,
6
+ useState,
7
+ } from "react";
8
+ import cl from "classnames";
9
+ import { Expand, ExpandFilled } from "@navikt/ds-icons";
10
+ import MenuItems from "./MenuItems";
11
+
12
+ export const NestingContext = createContext<{ depth: number }>({ depth: 1 });
13
+
14
+ const NestingProvider = ({ children }) => {
15
+ const context = useContext(NestingContext);
16
+
17
+ return (
18
+ <NestingContext.Provider
19
+ value={{
20
+ depth: context.depth + 1,
21
+ }}
22
+ >
23
+ {children}
24
+ </NestingContext.Provider>
25
+ );
26
+ };
27
+
28
+ export interface MenuCollapseProps extends HTMLAttributes<HTMLDivElement> {
29
+ title: string;
30
+ defaultOpen?: boolean;
31
+ children: React.ReactNode;
32
+ }
33
+
34
+ export type MenuCollapseType = React.ForwardRefExoticComponent<
35
+ MenuCollapseProps & React.RefAttributes<HTMLDivElement>
36
+ >;
37
+
38
+ const Collapse: MenuCollapseType = forwardRef(
39
+ ({ children, defaultOpen = false, title, className, ...rest }, ref) => {
40
+ const [isOpen, setIsOpen] = useState(defaultOpen);
41
+ const context = useContext(NestingContext);
42
+
43
+ return (
44
+ <div
45
+ {...rest}
46
+ ref={ref}
47
+ className={cl("navds-menu-collapse", className, {
48
+ "navds-menu-collapse--open": isOpen,
49
+ })}
50
+ >
51
+ <button
52
+ onClick={() => setIsOpen(!isOpen)}
53
+ className="navds-menu-collapse__button"
54
+ >
55
+ {title}
56
+ <Expand
57
+ title={isOpen ? "lukk navigasjons-skuff" : "åpne navigason-skuff"}
58
+ className="navds-menu-collapse__expand-icon"
59
+ />
60
+ <ExpandFilled
61
+ title={isOpen ? "lukk navigasjons-skuff" : "åpne navigason-skuff"}
62
+ className="navds-menu-collapse__expand-icon navds-menu-collapse__expand-icon--filled"
63
+ />
64
+ </button>
65
+ <NestingProvider>
66
+ {isOpen && (
67
+ <MenuItems
68
+ data-depth={context.depth}
69
+ className="navds-menu__list--inner"
70
+ >
71
+ {children}
72
+ </MenuItems>
73
+ )}
74
+ </NestingProvider>
75
+ </div>
76
+ );
77
+ }
78
+ );
79
+
80
+ export default Collapse;
@@ -2,7 +2,7 @@ import React, { forwardRef } from "react";
2
2
  import { OverridableComponent } from "..";
3
3
  import cl from "classnames";
4
4
 
5
- export interface AccordionMenuItemProps
5
+ export interface MenuItemProps
6
6
  extends React.AnchorHTMLAttributes<HTMLAnchorElement> {
7
7
  children: React.ReactNode;
8
8
  /**
@@ -12,12 +12,12 @@ export interface AccordionMenuItemProps
12
12
  active?: boolean;
13
13
  }
14
14
 
15
- export type AccordionMenuItemType = OverridableComponent<
16
- AccordionMenuItemProps,
15
+ export type MenuItemType = OverridableComponent<
16
+ MenuItemProps,
17
17
  HTMLAnchorElement
18
18
  >;
19
19
 
20
- const Item: AccordionMenuItemType = forwardRef(
20
+ const Item: MenuItemType = forwardRef(
21
21
  (
22
22
  { children, as: Component = "a", active = false, className, ...rest },
23
23
  ref
@@ -25,8 +25,8 @@ const Item: AccordionMenuItemType = forwardRef(
25
25
  return (
26
26
  <Component
27
27
  ref={ref}
28
- className={cl("navds-accordion-menu-item", className, {
29
- "navds-accordion-menu-item--active": active,
28
+ className={cl("navds-menu-item", className, {
29
+ "navds-menu-item--active": active,
30
30
  })}
31
31
  {...rest}
32
32
  >
@@ -0,0 +1,21 @@
1
+ import cl from "classnames";
2
+ import React from "react";
3
+
4
+ const MenuItems = ({
5
+ children,
6
+ className,
7
+ ...rest
8
+ }: {
9
+ children: React.ReactNode;
10
+ className?: string;
11
+ }) => (
12
+ <ul {...rest} className={cl("navds-menu__list", className)}>
13
+ {React.Children.toArray(children).map((child, i) => (
14
+ <li key={i} className="navds-menu__list-item">
15
+ {child}
16
+ </li>
17
+ ))}
18
+ </ul>
19
+ );
20
+
21
+ export default MenuItems;
@@ -0,0 +1,3 @@
1
+ export { default as Menu, MenuProps } from "./Menu";
2
+ export { MenuCollapseProps } from "./MenuCollapse";
3
+ export { MenuItemProps } from "./MenuItem";
@@ -0,0 +1,93 @@
1
+ import { Meta, Canvas } from "@storybook/addon-docs";
2
+ import { Menu } from "../../index";
3
+
4
+ <Meta title="ds-react/menu/intro" />
5
+
6
+ # Hvordan ta i bruk Menu
7
+
8
+ ```jsx
9
+ <Menu>
10
+ <Menu.Item href="#leo">Leo</Menu.Item>
11
+ <Menu.Collapse title="Proin">
12
+ <Menu.Item href="#nulla" active>
13
+ Nulla
14
+ </Menu.Item>
15
+ <Menu.Item href="#luctus">Luctus</Menu.Item>
16
+ </Menu.Collapse>
17
+ <Menu.Collapse title="Accumsan">
18
+ <Menu.Item href="#justo" aria-current="page">
19
+ Justo
20
+ </Menu.Item>
21
+ <Menu.Collapse title="Proin">
22
+ <Menu.Item href="#nulla">Nulla</Menu.Item>
23
+ <Menu.Item href="#luctus">Luctus</Menu.Item>
24
+ </Menu.Collapse>
25
+ </Menu.Collapse>
26
+ </Menu>
27
+ ```
28
+
29
+ <Canvas>
30
+ <Menu>
31
+ <Menu.Item href="#leo">Leo</Menu.Item>
32
+ <Menu.Collapse title="Proin">
33
+ <Menu.Item href="#nulla" active>
34
+ Nulla
35
+ </Menu.Item>
36
+ <Menu.Item href="#luctus">Luctus</Menu.Item>
37
+ </Menu.Collapse>
38
+ <Menu.Collapse title="Accumsan">
39
+ <Menu.Item href="#justo">Justo</Menu.Item>
40
+ <Menu.Collapse title="Proin">
41
+ <Menu.Item href="#nulla">Nulla</Menu.Item>
42
+ <Menu.Item href="#luctus">Luctus</Menu.Item>
43
+ </Menu.Collapse>
44
+ </Menu.Collapse>
45
+ </Menu>
46
+ </Canvas>
47
+
48
+ ## Elementer i menyen
49
+
50
+ Menyen har to typer elementer man kan bruke: `Collapse` for nesting og `Item` for navigasjonslenker på siden.
51
+
52
+ <Canvas>
53
+ <div>
54
+ <h2>Item</h2>
55
+ <Menu>
56
+ <Menu.Item href="#leo">Lenke</Menu.Item>
57
+ <Menu.Item href="#leo">Lenke</Menu.Item>
58
+ <Menu.Item href="#leo">Lenke</Menu.Item>
59
+ <Menu.Item href="#leo">Lenke</Menu.Item>
60
+ <Menu.Item href="#leo">Lenke</Menu.Item>
61
+ </Menu>
62
+ <h2>Collapses + Item</h2>
63
+ <Menu>
64
+ <Menu.Collapse title="Proin">
65
+ <Menu.Item href="#nulla" active>
66
+ Nulla
67
+ </Menu.Item>
68
+ <Menu.Item href="#luctus">Luctus</Menu.Item>
69
+ </Menu.Collapse>
70
+ <Menu.Collapse title="Accumsan">
71
+ <Menu.Item href="#justo">Justo</Menu.Item>
72
+ <Menu.Collapse title="Proin">
73
+ <Menu.Item href="#nulla">Nulla</Menu.Item>
74
+ <Menu.Item href="#luctus">Luctus</Menu.Item>
75
+ </Menu.Collapse>
76
+ </Menu.Collapse>
77
+ <Menu.Item href="#leo">Lenke</Menu.Item>
78
+ <Menu.Item href="#leo">Lenke</Menu.Item>
79
+ </Menu>
80
+ </div>
81
+ </Canvas>
82
+
83
+ `Menu.Item` er implementert med `OverridableComponent`, noe som
84
+ gjør at man kan ta i bruk eks react-router slik:
85
+
86
+ ```jsx
87
+ <Menu.Item as={NavLink} activeClassName="navds-menu-item--active" to="/1">
88
+ Lenketekst
89
+ </Menu.Item>
90
+ ```
91
+
92
+ Her er `NavLink` fra `react-router-dom` brukt, og man får da
93
+ samtidig bruke alle propsene til denne komponenten som da er `activeClassName` her.
@@ -0,0 +1,139 @@
1
+ import * as React from "react";
2
+ import cl from "classnames";
3
+ import { Menu } from "../index";
4
+ import { NavLink, HashRouter as Router } from "react-router-dom";
5
+ import { MenuItemProps } from "../MenuItem";
6
+
7
+ export default {
8
+ title: "ds-react/menu",
9
+ component: { Menu },
10
+ };
11
+
12
+ export const All = () => (
13
+ <div
14
+ style={{
15
+ background: "white",
16
+ maxWidth: 288,
17
+ }}
18
+ >
19
+ <h2>Only Menu.Items</h2>
20
+ <Menu>
21
+ <Menu.Item href="#leo">Leo</Menu.Item>
22
+
23
+ <Menu.Item href="#justo">Justo</Menu.Item>
24
+ <Menu.Item href="#pariatur" active aria-current="page">
25
+ Pariatur
26
+ </Menu.Item>
27
+ <Menu.Item href="#nulla">Nulla</Menu.Item>
28
+ <Menu.Item href="#luctus">Luctus</Menu.Item>
29
+ <Menu.Item href="#justo">Justo</Menu.Item>
30
+ <Menu.Item href="#pariatur">Pariatur</Menu.Item>
31
+ </Menu>
32
+
33
+ <h2>With Collapse</h2>
34
+ <Menu>
35
+ <Menu.Item href="#leo">Leo</Menu.Item>
36
+ <Menu.Collapse title="Proin">
37
+ <Menu.Item href="#nulla" active>
38
+ Nulla
39
+ </Menu.Item>
40
+ <Menu.Item href="#luctus">Luctus</Menu.Item>
41
+ </Menu.Collapse>
42
+ <Menu.Collapse title="Accumsan">
43
+ <Menu.Item href="#justo" aria-current="page">
44
+ Justo
45
+ </Menu.Item>
46
+ <Menu.Item href="#pariatur" active aria-current="page">
47
+ Pariatur
48
+ </Menu.Item>
49
+ <Menu.Collapse title="Proin">
50
+ <Menu.Item href="#nulla" active>
51
+ Nulla
52
+ </Menu.Item>
53
+ <Menu.Collapse title="Proin">
54
+ <Menu.Item href="#nulla" active>
55
+ Nulla
56
+ </Menu.Item>
57
+ <Menu.Item href="#luctus">Luctus</Menu.Item>
58
+ </Menu.Collapse>
59
+ <Menu.Item href="#luctus">Luctus</Menu.Item>
60
+ </Menu.Collapse>
61
+ </Menu.Collapse>
62
+ <Menu.Item href="#justo" active>
63
+ Justo
64
+ </Menu.Item>
65
+ <Menu.Item href="#pariatur">Pariatur</Menu.Item>
66
+ </Menu>
67
+ </div>
68
+ );
69
+
70
+ export const ReactRouter = () => {
71
+ const MenuItemLink = (props: MenuItemProps & { to: string }) => {
72
+ const { to } = props;
73
+
74
+ const CustomLink = React.useMemo(
75
+ () => (props: MenuItemProps) => (
76
+ <NavLink
77
+ {...props}
78
+ to={to}
79
+ className={({ isActive }) =>
80
+ cl(props.className, {
81
+ "navds-menu-item--active": isActive,
82
+ })
83
+ }
84
+ />
85
+ ),
86
+ [to]
87
+ );
88
+
89
+ return (
90
+ <Menu.Item {...props} as={CustomLink}>
91
+ Nivå 2 innrykk 2 rems
92
+ </Menu.Item>
93
+ );
94
+ };
95
+
96
+ return (
97
+ <Menu>
98
+ <Menu.Collapse title="Nivå 1 - 3 rems høy">
99
+ <MenuItemLink to="/1">Nivå 2 innrykk 2 rems</MenuItemLink>
100
+ <MenuItemLink to="/2">Subtitle 3</MenuItemLink>
101
+ </Menu.Collapse>
102
+ <Menu.Collapse title="Skjema og søknad">
103
+ <Menu.Collapse title="Satser">
104
+ <MenuItemLink to="/3">
105
+ Nivå 3 - 3 rems innrykk Har du rett til dagpenger når du mottar
106
+ annen økonomisk støtte fra NAV?
107
+ </MenuItemLink>
108
+ </Menu.Collapse>
109
+ <MenuItemLink to="/4">Subtitle 2</MenuItemLink>
110
+ <MenuItemLink to="/5">Subtitle 3</MenuItemLink>
111
+ </Menu.Collapse>
112
+ <Menu.Collapse title="Sakbehandlingstider">
113
+ <Menu.Collapse title="Subtitle 4 Lang tittel på andre nivå lorem ipsum">
114
+ <MenuItemLink to="/6">Subtitle 5</MenuItemLink>
115
+ </Menu.Collapse>
116
+ </Menu.Collapse>
117
+ <MenuItemLink to="/7">Internasjonalt</MenuItemLink>
118
+ <Menu.Collapse title="Meld fra om endringer lang tittel på første nivå">
119
+ <MenuItemLink to="/8">Subtitle 6</MenuItemLink>
120
+ </Menu.Collapse>
121
+ <MenuItemLink to="/9">Nivå 1</MenuItemLink>
122
+ </Menu>
123
+ );
124
+ };
125
+
126
+ ReactRouter.decorators = [
127
+ (Story) => (
128
+ <Router>
129
+ <div
130
+ style={{
131
+ background: "white",
132
+ maxWidth: 288,
133
+ }}
134
+ >
135
+ <Story />
136
+ </div>
137
+ </Router>
138
+ ),
139
+ ];
@@ -3,15 +3,9 @@ import cl from "classnames";
3
3
  import Header, { HeaderType } from "./Header";
4
4
  import Body, { BodyType } from "./Body";
5
5
  import Row, { RowType } from "./Row";
6
- import ColumnHeader, { ColumnHeaderType } from "./ColumnHeader";
7
6
  import HeaderCell, { HeaderCellType } from "./HeaderCell";
8
7
  import DataCell, { DataCellType } from "./DataCell";
9
8
 
10
- export interface SortState {
11
- orderBy: string;
12
- direction: "ascending" | "descending";
13
- }
14
-
15
9
  export interface TableProps extends React.HTMLAttributes<HTMLTableElement> {
16
10
  /**
17
11
  * Changes padding
@@ -23,14 +17,6 @@ export interface TableProps extends React.HTMLAttributes<HTMLTableElement> {
23
17
  * @default false
24
18
  */
25
19
  zebraStripes?: boolean;
26
- /**
27
- * Sort state
28
- */
29
- sort?: SortState;
30
- /**
31
- * Callback whens ort state changes
32
- */
33
- onSortChange?: (state?: SortState) => void;
34
20
  }
35
21
 
36
22
  export interface TableType
@@ -42,47 +28,17 @@ export interface TableType
42
28
  Row: RowType;
43
29
  DataCell: DataCellType;
44
30
  HeaderCell: HeaderCellType;
45
- ColumnHeader: ColumnHeaderType;
46
31
  }
47
32
 
48
33
  export interface TableContextProps {
49
34
  size: "medium" | "small";
50
- toggleColumnSort?: (sortKey: string) => void;
51
- sort?: SortState;
52
35
  }
53
36
 
54
37
  export const TableContext = createContext<TableContextProps | null>(null);
55
38
 
56
39
  const Table = forwardRef(
57
- (
58
- {
59
- className,
60
- zebraStripes = false,
61
- size = "medium",
62
- onSortChange,
63
- sort,
64
- ...rest
65
- },
66
- ref
67
- ) => (
68
- <TableContext.Provider
69
- value={{
70
- size,
71
- toggleColumnSort: (sortKey) =>
72
- onSortChange?.(
73
- sort?.orderBy === sortKey && sort.direction === "descending"
74
- ? undefined
75
- : {
76
- orderBy: sortKey,
77
- direction:
78
- sort?.direction === "ascending"
79
- ? "descending"
80
- : "ascending",
81
- }
82
- ),
83
- sort,
84
- }}
85
- >
40
+ ({ className, zebraStripes = false, size = "medium", ...rest }, ref) => (
41
+ <TableContext.Provider value={{ size }}>
86
42
  <table
87
43
  {...rest}
88
44
  ref={ref}
@@ -97,7 +53,6 @@ const Table = forwardRef(
97
53
  Table.Header = Header;
98
54
  Table.Body = Body;
99
55
  Table.Row = Row;
100
- Table.ColumnHeader = ColumnHeader;
101
56
  Table.HeaderCell = HeaderCell;
102
57
  Table.DataCell = DataCell;
103
58