@navikt/ds-react 2.9.8 → 3.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 (130) hide show
  1. package/_docs.json +101 -0
  2. package/cjs/accordion/Accordion.js +8 -2
  3. package/cjs/accordion/AccordionContent.js +3 -3
  4. package/cjs/accordion/AccordionContext.js +10 -0
  5. package/cjs/accordion/AccordionHeader.js +14 -12
  6. package/cjs/accordion/AccordionItem.js +18 -5
  7. package/cjs/alert/Alert.js +5 -5
  8. package/cjs/chips/Removable.js +2 -2
  9. package/cjs/chips/Toggle.js +2 -2
  10. package/cjs/date/DateInput.js +2 -2
  11. package/cjs/date/datepicker/caption/Caption.js +3 -3
  12. package/cjs/date/datepicker/caption/DropdownCaption.js +3 -3
  13. package/cjs/date/monthpicker/MonthCaption.js +3 -3
  14. package/cjs/expansion-card/ExpansionCard.js +1 -1
  15. package/cjs/expansion-card/ExpansionCardDescription.js +1 -1
  16. package/cjs/form/Select.js +2 -2
  17. package/cjs/form/Switch.js +2 -2
  18. package/cjs/form/search/Search.js +3 -3
  19. package/cjs/form/search/SearchButton.js +2 -2
  20. package/cjs/help-text/HelpText.js +3 -3
  21. package/cjs/help-text/HelpTextIcon.js +20 -0
  22. package/cjs/link-panel/LinkPanel.js +2 -2
  23. package/cjs/modal/Modal.js +2 -2
  24. package/cjs/pagination/Pagination.js +4 -4
  25. package/cjs/read-more/ReadMore.js +5 -7
  26. package/cjs/stepper/Step.js +4 -2
  27. package/cjs/table/ColumnHeader.js +2 -2
  28. package/cjs/table/ExpandableRow.js +2 -3
  29. package/cjs/tabs/TabList.js +2 -2
  30. package/esm/accordion/Accordion.d.ts +12 -0
  31. package/esm/accordion/Accordion.js +8 -2
  32. package/esm/accordion/Accordion.js.map +1 -1
  33. package/esm/accordion/AccordionContent.js +3 -3
  34. package/esm/accordion/AccordionContent.js.map +1 -1
  35. package/esm/accordion/AccordionContext.d.ts +8 -0
  36. package/esm/accordion/AccordionContext.js +8 -0
  37. package/esm/accordion/AccordionContext.js.map +1 -0
  38. package/esm/accordion/AccordionHeader.js +14 -12
  39. package/esm/accordion/AccordionHeader.js.map +1 -1
  40. package/esm/accordion/AccordionItem.js +19 -6
  41. package/esm/accordion/AccordionItem.js.map +1 -1
  42. package/esm/alert/Alert.js +5 -5
  43. package/esm/alert/Alert.js.map +1 -1
  44. package/esm/chips/Removable.js +2 -2
  45. package/esm/chips/Removable.js.map +1 -1
  46. package/esm/chips/Toggle.js +2 -2
  47. package/esm/chips/Toggle.js.map +1 -1
  48. package/esm/date/DateInput.js +2 -2
  49. package/esm/date/DateInput.js.map +1 -1
  50. package/esm/date/datepicker/caption/Caption.js +3 -3
  51. package/esm/date/datepicker/caption/Caption.js.map +1 -1
  52. package/esm/date/datepicker/caption/DropdownCaption.js +3 -3
  53. package/esm/date/datepicker/caption/DropdownCaption.js.map +1 -1
  54. package/esm/date/monthpicker/MonthCaption.js +3 -3
  55. package/esm/date/monthpicker/MonthCaption.js.map +1 -1
  56. package/esm/expansion-card/ExpansionCard.js +1 -1
  57. package/esm/expansion-card/ExpansionCard.js.map +1 -1
  58. package/esm/expansion-card/ExpansionCardDescription.js +1 -1
  59. package/esm/expansion-card/ExpansionCardDescription.js.map +1 -1
  60. package/esm/form/Fieldset/useFieldset.d.ts +1 -1
  61. package/esm/form/Select.js +2 -2
  62. package/esm/form/Select.js.map +1 -1
  63. package/esm/form/Switch.js +2 -2
  64. package/esm/form/Switch.js.map +1 -1
  65. package/esm/form/checkbox/useCheckbox.d.ts +1 -1
  66. package/esm/form/radio/useRadio.d.ts +1 -1
  67. package/esm/form/search/Search.js +3 -3
  68. package/esm/form/search/Search.js.map +1 -1
  69. package/esm/form/search/SearchButton.js +2 -2
  70. package/esm/form/search/SearchButton.js.map +1 -1
  71. package/esm/form/useFormField.d.ts +1 -1
  72. package/esm/help-text/HelpText.js +3 -3
  73. package/esm/help-text/HelpText.js.map +1 -1
  74. package/esm/help-text/HelpTextIcon.d.ts +5 -0
  75. package/esm/help-text/HelpTextIcon.js +14 -0
  76. package/esm/help-text/HelpTextIcon.js.map +1 -0
  77. package/esm/link-panel/LinkPanel.js +2 -2
  78. package/esm/link-panel/LinkPanel.js.map +1 -1
  79. package/esm/modal/Modal.js +2 -2
  80. package/esm/modal/Modal.js.map +1 -1
  81. package/esm/pagination/Pagination.js +4 -4
  82. package/esm/pagination/Pagination.js.map +1 -1
  83. package/esm/read-more/ReadMore.js +5 -7
  84. package/esm/read-more/ReadMore.js.map +1 -1
  85. package/esm/stepper/Step.js +4 -2
  86. package/esm/stepper/Step.js.map +1 -1
  87. package/esm/table/ColumnHeader.js +2 -2
  88. package/esm/table/ColumnHeader.js.map +1 -1
  89. package/esm/table/ExpandableRow.js +2 -3
  90. package/esm/table/ExpandableRow.js.map +1 -1
  91. package/esm/tabs/TabList.js +3 -3
  92. package/esm/tabs/TabList.js.map +1 -1
  93. package/esm/util/index.d.ts +1 -1
  94. package/package.json +3 -3
  95. package/src/accordion/Accordion.tsx +43 -3
  96. package/src/accordion/AccordionContent.tsx +14 -11
  97. package/src/accordion/AccordionContext.tsx +15 -0
  98. package/src/accordion/AccordionHeader.tsx +20 -20
  99. package/src/accordion/AccordionItem.tsx +25 -6
  100. package/src/accordion/accordion.stories.tsx +217 -16
  101. package/src/alert/Alert.tsx +9 -9
  102. package/src/button/button.stories.tsx +8 -8
  103. package/src/chips/Removable.tsx +2 -2
  104. package/src/chips/Toggle.tsx +2 -2
  105. package/src/date/DateInput.tsx +2 -2
  106. package/src/date/datepicker/caption/Caption.tsx +3 -3
  107. package/src/date/datepicker/caption/DropdownCaption.tsx +3 -3
  108. package/src/date/monthpicker/MonthCaption.tsx +3 -3
  109. package/src/expansion-card/ExpansionCard.tsx +1 -1
  110. package/src/expansion-card/ExpansionCardDescription.tsx +1 -1
  111. package/src/form/Select.tsx +3 -2
  112. package/src/form/Switch.tsx +4 -5
  113. package/src/form/search/Search.tsx +6 -3
  114. package/src/form/search/SearchButton.tsx +2 -2
  115. package/src/help-text/HelpText.tsx +3 -6
  116. package/src/help-text/HelpTextIcon.tsx +45 -0
  117. package/src/link/link.stories.tsx +7 -5
  118. package/src/link-panel/LinkPanel.tsx +3 -2
  119. package/src/list/list.stories.tsx +9 -9
  120. package/src/modal/Modal.tsx +4 -3
  121. package/src/pagination/Pagination.tsx +5 -4
  122. package/src/read-more/ReadMore.tsx +14 -11
  123. package/src/read-more/readmore.stories.tsx +5 -2
  124. package/src/stepper/Step.tsx +22 -5
  125. package/src/stepper/stepper.stories.tsx +1 -3
  126. package/src/table/ColumnHeader.tsx +8 -4
  127. package/src/table/ExpandableRow.tsx +2 -6
  128. package/src/tabs/TabList.tsx +4 -4
  129. package/src/tabs/Tabs.stories.tsx +49 -25
  130. package/src/toggle-group/ToggleGroup.stories.tsx +12 -7
@@ -9,11 +9,11 @@ var __rest = (this && this.__rest) || function (s, e) {
9
9
  }
10
10
  return t;
11
11
  };
12
- import { Back, Next } from "@navikt/ds-icons";
12
+ import { ChevronLeftIcon, ChevronRightIcon } from "@navikt/aksel-icons";
13
13
  import { TabsList } from "@radix-ui/react-tabs";
14
14
  import cl from "clsx";
15
15
  import React, { forwardRef, useContext, useEffect, useMemo, useRef, useState, } from "react";
16
- import { mergeRefs, debounce } from "..";
16
+ import { debounce, mergeRefs } from "..";
17
17
  import { TabsContext } from "./Tabs";
18
18
  export const TabList = forwardRef((_a, ref) => {
19
19
  var { className } = _a, rest = __rest(_a, ["className"]);
@@ -71,7 +71,7 @@ export const TabList = forwardRef((_a, ref) => {
71
71
  if (!listRef.current)
72
72
  return;
73
73
  listRef.current.scrollLeft += dir * 100;
74
- } }, dir === -1 ? (React.createElement(Back, { title: "scroll tilbake" })) : (React.createElement(Next, { title: "scroll neste" }))));
74
+ } }, dir === -1 ? (React.createElement(ChevronLeftIcon, { title: "scroll tilbake" })) : (React.createElement(ChevronRightIcon, { title: "scroll neste" }))));
75
75
  const showSteppers = displayScroll.end || displayScroll.start;
76
76
  return (React.createElement("div", { className: "navds-tabs__tablist-wrapper" },
77
77
  showSteppers && (React.createElement(ScrollButton, { dir: -1, hidden: !displayScroll.start })),
@@ -1 +1 @@
1
- {"version":3,"file":"TabList.js","sourceRoot":"","sources":["../../src/tabs/TabList.tsx"],"names":[],"mappings":";;;;;;;;;;;AAAA,OAAO,EAAE,IAAI,EAAE,IAAI,EAAE,MAAM,kBAAkB,CAAC;AAC9C,OAAO,EAAE,QAAQ,EAAE,MAAM,sBAAsB,CAAC;AAChD,OAAO,EAAE,MAAM,MAAM,CAAC;AACtB,OAAO,KAAK,EAAE,EACZ,UAAU,EACV,UAAU,EACV,SAAS,EACT,OAAO,EACP,MAAM,EACN,QAAQ,GACT,MAAM,OAAO,CAAC;AACf,OAAO,EAAE,SAAS,EAAE,QAAQ,EAAE,MAAM,IAAI,CAAC;AACzC,OAAO,EAAE,WAAW,EAAE,MAAM,QAAQ,CAAC;AAarC,MAAM,CAAC,MAAM,OAAO,GAAG,UAAU,CAC/B,CAAC,EAAsB,EAAE,GAAG,EAAE,EAAE;QAA/B,EAAE,SAAS,OAAW,EAAN,IAAI,cAApB,aAAsB,CAAF;IACnB,MAAM,OAAO,GAAG,UAAU,CAAC,WAAW,CAAC,CAAC;IACxC,MAAM,OAAO,GAAG,MAAM,CAAwB,IAAI,CAAC,CAAC;IACpD,MAAM,SAAS,GAAG,OAAO,CAAC,GAAG,EAAE,CAAC,SAAS,CAAC,CAAC,OAAO,EAAE,GAAG,CAAC,CAAC,EAAE,CAAC,GAAG,CAAC,CAAC,CAAC;IAClE,MAAM,CAAC,aAAa,EAAE,gBAAgB,CAAC,GAAG,QAAQ,CAAC;QACjD,KAAK,EAAE,KAAK;QACZ,GAAG,EAAE,KAAK;KACX,CAAC,CAAC;IAEH,MAAM,uBAAuB,GAAG,OAAO,CACrC,GAAG,EAAE,CACH,QAAQ,CAAC,GAAG,EAAE;;QACZ,IAAI,CAAC,CAAA,OAAO,aAAP,OAAO,uBAAP,OAAO,CAAE,OAAO,CAAA;YAAE,OAAO;QAC9B,MAAM,EAAE,WAAW,EAAE,WAAW,EAAE,GAAG,OAAO,CAAC,OAAO,CAAC;QACrD,IAAI,eAAe,CAAC;QACpB,IAAI,aAAa,CAAC;QAElB,MAAM,UAAU,GAAG,MAAA,OAAO,aAAP,OAAO,uBAAP,OAAO,CAAE,OAAO,0CAAE,UAAU,CAAC;QAChD,6DAA6D;QAC7D,eAAe,GAAG,UAAU,GAAG,CAAC,CAAC;QACjC,aAAa,GAAG,UAAU,GAAG,WAAW,GAAG,WAAW,GAAG,CAAC,CAAC;QAE3D,gBAAgB,CAAC,CAAC,aAAa,EAAE,EAAE,CACjC,eAAe,KAAK,aAAa,CAAC,KAAK;YACvC,aAAa,KAAK,aAAa,CAAC,GAAG;YACjC,CAAC,CAAC,aAAa;YACf,CAAC,CAAC,EAAE,KAAK,EAAE,eAAe,EAAE,GAAG,EAAE,aAAa,EAAE,CACnD,CAAC;IACJ,CAAC,CAAC,EACJ,EAAE,CACH,CAAC;IAEF,SAAS,CAAC,GAAG,EAAE;;QACb,MAAM,YAAY,GAAG,GAAG,EAAE,CAAC,uBAAuB,EAAE,CAAC;QACrD,MAAM,GAAG,GAAG,MAAA,MAAA,MAAA,OAAO,CAAC,OAAO,0CAAE,aAAa,mCAAI,QAAQ,mCAAI,MAAM,CAAC;QACjE,GAAG,CAAC,gBAAgB,CAAC,QAAQ,EAAE,YAAY,CAAC,CAAC;QAE7C,IAAI,cAAc,CAAC;QAEnB,IAAI,OAAO,cAAc,KAAK,WAAW,EAAE;YACzC,cAAc,GAAG,IAAI,cAAc,CAAC,YAAY,CAAC,CAAC;YAClD,cAAc,CAAC,OAAO,CAAC,OAAO,CAAC,OAAO,CAAC,CAAC;SACzC;QAED,OAAO,GAAG,EAAE;YACV,GAAG,CAAC,mBAAmB,CAAC,QAAQ,EAAE,YAAY,CAAC,CAAC;YAChD,IAAI,cAAc,EAAE;gBAClB,cAAc,CAAC,UAAU,EAAE,CAAC;aAC7B;QACH,CAAC,CAAC;IACJ,CAAC,EAAE,CAAC,uBAAuB,CAAC,CAAC,CAAC;IAE9B,SAAS,CAAC,GAAG,EAAE;QACb,uBAAuB,EAAE,CAAC;IAC5B,CAAC,CAAC,CAAC;IAEH,SAAS,CAAC,GAAG,EAAE;QACb,OAAO,GAAG,EAAE;YACV,uBAAuB,CAAC,KAAK,EAAE,CAAC;QAClC,CAAC,CAAC;IACJ,CAAC,EAAE,CAAC,uBAAuB,CAAC,CAAC,CAAC;IAE9B,MAAM,YAAY,GAAG,CAAC,EACpB,GAAG,EACH,MAAM,GAIP,EAAE,EAAE,CAAC,CACJ,6BACE,SAAS,EAAE,EAAE,CAAC,2BAA2B,EAAE;YACzC,mCAAmC,EAAE,MAAM;SAC5C,CAAC,EACF,OAAO,EAAE,GAAG,EAAE;YACZ,IAAI,CAAC,OAAO,CAAC,OAAO;gBAAE,OAAO;YAC7B,OAAO,CAAC,OAAO,CAAC,UAAU,IAAI,GAAG,GAAG,GAAG,CAAC;QAC1C,CAAC,IAEA,GAAG,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC,CACZ,oBAAC,IAAI,IAAC,KAAK,EAAC,gBAAgB,GAAG,CAChC,CAAC,CAAC,CAAC,CACF,oBAAC,IAAI,IAAC,KAAK,EAAC,cAAc,GAAG,CAC9B,CACG,CACP,CAAC;IAEF,MAAM,YAAY,GAAG,aAAa,CAAC,GAAG,IAAI,aAAa,CAAC,KAAK,CAAC;IAC9D,OAAO,CACL,6BAAK,SAAS,EAAC,6BAA6B;QACzC,YAAY,IAAI,CACf,oBAAC,YAAY,IAAC,GAAG,EAAE,CAAC,CAAC,EAAE,MAAM,EAAE,CAAC,aAAa,CAAC,KAAK,GAAI,CACxD;QACD,oBAAC,QAAQ,oBACH,IAAI,IACR,GAAG,EAAE,SAAS,EACd,QAAQ,EAAE,uBAAuB,EACjC,IAAI,EAAE,OAAO,aAAP,OAAO,uBAAP,OAAO,CAAE,IAAI,EACnB,SAAS,EAAE,EAAE,CAAC,qBAAqB,EAAE,SAAS,CAAC,IAC/C;QACD,YAAY,IAAI,oBAAC,YAAY,IAAC,GAAG,EAAE,CAAC,EAAE,MAAM,EAAE,CAAC,aAAa,CAAC,GAAG,GAAI,CACjE,CACP,CAAC;AACJ,CAAC,CACa,CAAC;AAEjB,eAAe,OAAO,CAAC"}
1
+ {"version":3,"file":"TabList.js","sourceRoot":"","sources":["../../src/tabs/TabList.tsx"],"names":[],"mappings":"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"}
@@ -9,5 +9,5 @@ export interface ListenerT {
9
9
  addEventListener(name: string, handler: (event?: any) => void, ...args: any[]): any;
10
10
  removeEventListener(name: string, handler: (event?: any) => void, ...args: any[]): any;
11
11
  }
12
- export declare const useEventListener: <T extends ListenerT>(name: Parameters<ListenerT["addEventListener"]>[0], handler: Parameters<ListenerT["addEventListener"]>[1], target?: Window | T | null) => void;
12
+ export declare const useEventListener: <T extends ListenerT>(name: Parameters<ListenerT["addEventListener"]>[0], handler: Parameters<ListenerT["addEventListener"]>[1], target?: T | Window | null) => void;
13
13
  export declare const composeEventHandlers: <E>(originalEventHandler?: ((event: E) => void) | undefined, ourEventHandler?: ((event: E) => void) | undefined) => (event: E) => void;
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@navikt/ds-react",
3
- "version": "2.9.8",
3
+ "version": "3.0.0",
4
4
  "description": "Aksel react-components for NAV designsystem",
5
5
  "author": "Aksel | NAV designsystem team",
6
6
  "license": "MIT",
@@ -38,8 +38,8 @@
38
38
  },
39
39
  "dependencies": {
40
40
  "@floating-ui/react": "0.17.0",
41
- "@navikt/aksel-icons": "^2.9.8",
42
- "@navikt/ds-icons": "^2.9.8",
41
+ "@navikt/aksel-icons": "^3.0.0",
42
+ "@navikt/ds-icons": "^3.0.0",
43
43
  "@radix-ui/react-tabs": "1.0.0",
44
44
  "@radix-ui/react-toggle-group": "1.0.0",
45
45
  "clsx": "^1.2.1",
@@ -3,6 +3,7 @@ import React, { forwardRef } from "react";
3
3
  import AccordionItem, { AccordionItemType } from "./AccordionItem";
4
4
  import AccordionContent, { AccordionContentType } from "./AccordionContent";
5
5
  import AccordionHeader, { AccordionHeaderType } from "./AccordionHeader";
6
+ import { AccordionContext } from "./AccordionContext";
6
7
 
7
8
  interface AccordionComponent
8
9
  extends React.ForwardRefExoticComponent<
@@ -14,6 +15,18 @@ interface AccordionComponent
14
15
  }
15
16
 
16
17
  export interface AccordionProps extends React.HTMLAttributes<HTMLDivElement> {
18
+ /**
19
+ * @default 'default'
20
+ */
21
+ variant?: "default" | "neutral";
22
+ /**
23
+ * @default 'large'
24
+ */
25
+ headingSize?: "large" | "medium" | "small" | "xsmall";
26
+ /**
27
+ * @default "medium"
28
+ */
29
+ size?: "large" | "medium" | "small";
17
30
  /**
18
31
  * Instances of Accordion.Item
19
32
  */
@@ -21,9 +34,36 @@ export interface AccordionProps extends React.HTMLAttributes<HTMLDivElement> {
21
34
  }
22
35
 
23
36
  export const Accordion = forwardRef<HTMLDivElement, AccordionProps>(
24
- ({ className, ...rest }, ref) => (
25
- <div {...rest} className={cl("navds-accordion", className)} ref={ref} />
26
- )
37
+ (
38
+ {
39
+ className,
40
+ variant = "default",
41
+ headingSize = "medium",
42
+ size = "medium",
43
+ ...rest
44
+ },
45
+ ref
46
+ ) => {
47
+ return (
48
+ <AccordionContext.Provider
49
+ value={{
50
+ variant,
51
+ headingSize,
52
+ size,
53
+ }}
54
+ >
55
+ <div
56
+ {...rest}
57
+ className={cl(
58
+ "navds-accordion",
59
+ className,
60
+ `navds-accordion--${size}`
61
+ )}
62
+ ref={ref}
63
+ />
64
+ </AccordionContext.Provider>
65
+ );
66
+ }
27
67
  ) as AccordionComponent;
28
68
 
29
69
  Accordion.Header = AccordionHeader;
@@ -1,6 +1,5 @@
1
1
  import cl from "clsx";
2
2
  import React, { forwardRef, useContext } from "react";
3
- import AnimateHeight from "../util/AnimateHeight";
4
3
  import { BodyLong } from "../typography/BodyLong";
5
4
  import { AccordionItemContext } from "./AccordionItem";
6
5
 
@@ -28,16 +27,20 @@ const AccordionContent: AccordionContentType = forwardRef(
28
27
  }
29
28
 
30
29
  return (
31
- <AnimateHeight height={context.open ? "auto" : 0} duration={250}>
32
- <BodyLong
33
- {...rest}
34
- as="div"
35
- ref={ref}
36
- className={cl("navds-accordion__content", className)}
37
- >
38
- {children}
39
- </BodyLong>
40
- </AnimateHeight>
30
+ <BodyLong
31
+ {...rest}
32
+ as="div"
33
+ ref={ref}
34
+ className={cl(
35
+ "navds-accordion__content",
36
+ {
37
+ "navds-accordion__content--closed": !context.open,
38
+ },
39
+ className
40
+ )}
41
+ >
42
+ {children}
43
+ </BodyLong>
41
44
  );
42
45
  }
43
46
  );
@@ -0,0 +1,15 @@
1
+ import { createContext } from "react";
2
+
3
+ export type AccordionContextProps = {
4
+ variant?: "default" | "neutral";
5
+ headingSize?: "large" | "medium" | "small" | "xsmall";
6
+ size?: "large" | "medium" | "small";
7
+ openItems?: number[];
8
+ };
9
+
10
+ export const AccordionContext = createContext<AccordionContextProps | null>({
11
+ variant: "default",
12
+ headingSize: "small",
13
+ size: "medium",
14
+ openItems: [],
15
+ });
@@ -1,8 +1,9 @@
1
- import { Expand, ExpandFilled } from "@navikt/ds-icons";
2
1
  import cl from "clsx";
3
2
  import React, { forwardRef, useContext } from "react";
4
3
  import { Heading } from "../typography/Heading";
4
+ import { AccordionContext } from "./AccordionContext";
5
5
  import { AccordionItemContext } from "./AccordionItem";
6
+ import { ChevronDownIcon } from "@navikt/aksel-icons";
6
7
 
7
8
  export interface AccordionHeaderProps
8
9
  extends React.ButtonHTMLAttributes<HTMLButtonElement> {
@@ -18,43 +19,42 @@ export type AccordionHeaderType = React.ForwardRefExoticComponent<
18
19
 
19
20
  const AccordionHeader: AccordionHeaderType = forwardRef(
20
21
  ({ children, className, onClick, ...rest }, ref) => {
21
- const context = useContext(AccordionItemContext);
22
+ const itemContext = useContext(AccordionItemContext);
23
+ const accordionContext = useContext(AccordionContext);
22
24
 
23
- if (context === null) {
25
+ if (accordionContext === null || itemContext === null) {
24
26
  console.error(
25
- "<Accordion.Header> has to be used within an <Accordion.Item>"
27
+ "<Accordion.Header> has to be used within an <Accordion.Item>, which in turn must be within an <Accordion>"
26
28
  );
27
29
  return null;
28
30
  }
29
31
 
30
- const handleClick = (
31
- e: React.MouseEvent<HTMLButtonElement, MouseEvent>
32
- ) => {
33
- context.toggleOpen();
34
- onClick && onClick(e);
35
- };
36
-
37
32
  return (
38
33
  <button
39
- {...rest}
40
34
  ref={ref}
35
+ {...rest}
41
36
  className={cl("navds-accordion__header", className)}
37
+ onClick={(e: React.MouseEvent<HTMLButtonElement, MouseEvent>) => {
38
+ itemContext.toggleOpen();
39
+ onClick && onClick(e);
40
+ }}
41
+ aria-expanded={itemContext.open}
42
42
  type="button"
43
- onClick={handleClick}
44
- aria-expanded={context.open}
45
43
  >
44
+ <div className="navds-accordion__icon-wrapper">
45
+ <ChevronDownIcon
46
+ className="navds-accordion__header-chevron"
47
+ title="Vis mer"
48
+ aria-hidden
49
+ />
50
+ </div>
46
51
  <Heading
47
- size="small"
52
+ size={accordionContext.headingSize ?? "small"}
48
53
  as="span"
49
54
  className="navds-accordion__header-content"
50
55
  >
51
56
  {children}
52
57
  </Heading>
53
- <Expand aria-hidden className="navds-accordion__expand-icon" />
54
- <ExpandFilled
55
- aria-hidden
56
- className="navds-accordion__expand-icon navds-accordion__expand-icon--filled"
57
- />
58
58
  </button>
59
59
  );
60
60
  }
@@ -1,5 +1,12 @@
1
1
  import cl from "clsx";
2
- import React, { createContext, forwardRef, useState } from "react";
2
+ import React, {
3
+ createContext,
4
+ forwardRef,
5
+ useContext,
6
+ useRef,
7
+ useState,
8
+ } from "react";
9
+ import { AccordionContext } from "./AccordionContext";
3
10
 
4
11
  export interface AccordionItemProps
5
12
  extends React.HTMLAttributes<HTMLDivElement> {
@@ -38,11 +45,27 @@ const AccordionItem: AccordionItemType = forwardRef(
38
45
  ref
39
46
  ) => {
40
47
  const [internalOpen, setInternalOpen] = useState<boolean>(defaultOpen);
48
+ const context = useContext(AccordionContext);
49
+
50
+ const [_open, _setOpen] = useState(defaultOpen);
51
+ const shouldAnimate = useRef<boolean>(!(Boolean(open) || defaultOpen));
52
+ const handleOpen = () => {
53
+ if (open === undefined) {
54
+ const newOpen = !_open;
55
+ _setOpen(newOpen);
56
+ setInternalOpen(newOpen);
57
+ } else {
58
+ setInternalOpen(!open);
59
+ }
60
+ shouldAnimate.current = true;
61
+ };
41
62
 
42
63
  return (
43
64
  <div
44
65
  className={cl("navds-accordion__item", className, {
45
66
  "navds-accordion__item--open": open ?? internalOpen,
67
+ "navds-accordion__item--neutral": context?.variant === "neutral",
68
+ "navds-accordion__item--no-animation": !shouldAnimate.current,
46
69
  })}
47
70
  ref={ref}
48
71
  {...rest}
@@ -50,11 +73,7 @@ const AccordionItem: AccordionItemType = forwardRef(
50
73
  <AccordionItemContext.Provider
51
74
  value={{
52
75
  open: open ?? internalOpen,
53
- toggleOpen: () => {
54
- if (open === undefined) {
55
- setInternalOpen((iOpen) => !iOpen);
56
- }
57
- },
76
+ toggleOpen: handleOpen,
58
77
  }}
59
78
  >
60
79
  {children}
@@ -2,7 +2,8 @@ import React, { useState } from "react";
2
2
  import AccordionContent from "./AccordionContent";
3
3
  import AccordionHeader from "./AccordionHeader";
4
4
  import AccordionItem from "./AccordionItem";
5
- import { Accordion } from ".";
5
+ import { Accordion, AccordionProps } from ".";
6
+ import { Table } from "..";
6
7
 
7
8
  export default {
8
9
  title: "ds-react/Accordion",
@@ -12,6 +13,39 @@ export default {
12
13
  AccordionContent,
13
14
  AccordionHeader,
14
15
  },
16
+ decorators: [
17
+ (Story) => (
18
+ <div
19
+ style={{
20
+ width: "600px",
21
+ minHeight: "100vh",
22
+ padding: "10rem 0",
23
+ display: "flex",
24
+ flexDirection: "column",
25
+ gap: "1rem",
26
+ }}
27
+ >
28
+ <Story />
29
+ </div>
30
+ ),
31
+ ],
32
+ argTypes: {
33
+ variant: {
34
+ options: ["default", "neutral"],
35
+ control: { type: "select" },
36
+ },
37
+ headingSize: {
38
+ options: ["large", "medium", "small", "xsmall"],
39
+ control: { type: "select" },
40
+ },
41
+ size: {
42
+ options: ["large", "medium", "small"],
43
+ control: { type: "select" },
44
+ },
45
+ nItems: {
46
+ control: { type: "number" },
47
+ },
48
+ },
15
49
  };
16
50
 
17
51
  const Content = () => (
@@ -32,9 +66,25 @@ const Content = () => (
32
66
  </Accordion.Content>
33
67
  );
34
68
 
69
+ const SmallContent = () => (
70
+ <Accordion.Content>
71
+ Magna aliquip aliquip fugiat nostrud <a href="#Lorem">Lorem est</a> pariatur
72
+ veniam officia laboris voluptate officia pariatur.ex anim
73
+ </Accordion.Content>
74
+ );
75
+
35
76
  const Item = (props) => {
36
77
  const [open, setOpen] = useState(false);
37
78
 
79
+ if (props.defaultOpen) {
80
+ return (
81
+ <Accordion.Item defaultOpen={props.defaultOpen}>
82
+ <Accordion.Header>Accordion header text</Accordion.Header>
83
+ <SmallContent />
84
+ </Accordion.Item>
85
+ );
86
+ }
87
+
38
88
  return props.controlled ? (
39
89
  <Accordion.Item open={open}>
40
90
  <Accordion.Header onClick={() => setOpen(!open)}>
@@ -51,11 +101,11 @@ const Item = (props) => {
51
101
  };
52
102
 
53
103
  export const Default = {
54
- render: (props) => {
104
+ render: ({ nItems, ...props }) => {
55
105
  return (
56
106
  <div style={{ width: 500 }}>
57
- <Accordion>
58
- {[...Array(props.nItems ? props.nItems : 2)].map((_, y) => (
107
+ <Accordion {...props}>
108
+ {[...Array(nItems ? nItems : 2)].map((_, y) => (
59
109
  <Item key={y} {...props} />
60
110
  ))}
61
111
  </Accordion>
@@ -64,18 +114,62 @@ export const Default = {
64
114
  },
65
115
 
66
116
  args: {
67
- controlled: false,
117
+ controlled: "false",
68
118
  nItems: 2,
119
+ variant: "default",
120
+ headingSize: "medium",
121
+ size: "medium",
122
+ },
123
+ };
124
+
125
+ export const DefaultOpen = {
126
+ render: ({ nItems, openItems, ...props }) => {
127
+ return (
128
+ <div style={{ width: 500 }}>
129
+ <Accordion {...props}>
130
+ {[...Array(nItems ? nItems : 2)].map((_, y) => (
131
+ <Item key={y} defaultOpen={openItems.includes(y)} {...props} />
132
+ ))}
133
+ </Accordion>
134
+ </div>
135
+ );
136
+ },
137
+
138
+ args: {
139
+ openItems: [1, 2],
140
+ controlled: "false",
141
+ nItems: 5,
142
+ variant: "neutral",
143
+ headingSize: "large",
69
144
  },
70
145
  };
71
146
 
72
- export const Controlled = () => {
147
+ export const Variants = {
148
+ render: () => {
149
+ return (
150
+ <div style={{ width: 500 }} className="colgap">
151
+ <Accordion>
152
+ {[...Array(2)].map((_, y) => (
153
+ <Item key={y} defaultOpen />
154
+ ))}
155
+ </Accordion>
156
+ <Accordion variant="neutral">
157
+ {[...Array(2)].map((_, y) => (
158
+ <Item key={y} defaultOpen />
159
+ ))}
160
+ </Accordion>
161
+ </div>
162
+ );
163
+ },
164
+ };
165
+
166
+ export const Controlled = (props) => {
73
167
  const [open, setOpen] = useState(false);
74
168
  const [open2, setOpen2] = useState(false);
75
169
 
76
170
  return (
77
171
  <div style={{ width: 500 }}>
78
- <Accordion>
172
+ <Accordion {...props}>
79
173
  <Accordion.Item open={open}>
80
174
  <Accordion.Header onClick={() => setOpen(!open)}>
81
175
  Accordion header text
@@ -93,17 +187,124 @@ export const Controlled = () => {
93
187
  );
94
188
  };
95
189
 
96
- export const Uncontrolled = () => (
97
- <div style={{ width: 500 }}>
98
- <Accordion>
190
+ export const WithTable = {
191
+ render: (props) => {
192
+ const ExampleTable = () => {
193
+ return (
194
+ <Table>
195
+ <Table.Header>
196
+ <Table.Row>
197
+ <Table.HeaderCell>ID</Table.HeaderCell>
198
+ <Table.HeaderCell>Fornavn</Table.HeaderCell>
199
+ <Table.HeaderCell>Etternavn</Table.HeaderCell>
200
+ <Table.HeaderCell>Rolle</Table.HeaderCell>
201
+ </Table.Row>
202
+ </Table.Header>
203
+ <Table.Body>
204
+ <Table.Row>
205
+ <Table.HeaderCell>1</Table.HeaderCell>
206
+ <Table.DataCell>Jean-Luc</Table.DataCell>
207
+ <Table.DataCell>Picard</Table.DataCell>
208
+ <Table.DataCell>Kaptein</Table.DataCell>
209
+ </Table.Row>
210
+ <Table.Row>
211
+ <Table.HeaderCell>2</Table.HeaderCell>
212
+ <Table.DataCell>William</Table.DataCell>
213
+ <Table.DataCell>Riker</Table.DataCell>
214
+ <Table.DataCell>Kommandør</Table.DataCell>
215
+ </Table.Row>
216
+ <Table.Row>
217
+ <Table.HeaderCell>3</Table.HeaderCell>
218
+ <Table.DataCell>Geordi</Table.DataCell>
219
+ <Table.DataCell>La Forge</Table.DataCell>
220
+ <Table.DataCell>Sjefsingeniør</Table.DataCell>
221
+ </Table.Row>
222
+ </Table.Body>
223
+ </Table>
224
+ );
225
+ };
226
+
227
+ const ContentWithTable = () => {
228
+ return (
229
+ <Accordion.Content>
230
+ <ExampleTable />
231
+ </Accordion.Content>
232
+ );
233
+ };
234
+
235
+ return (
236
+ <div style={{ width: 500 }}>
237
+ <Accordion {...props}>
238
+ <Accordion.Item>
239
+ <Accordion.Header>Table of people</Accordion.Header>
240
+ <ContentWithTable />
241
+ </Accordion.Item>
242
+ <Accordion.Item>
243
+ <Accordion.Header>Table of people</Accordion.Header>
244
+ <ContentWithTable />
245
+ </Accordion.Item>
246
+ </Accordion>
247
+ </div>
248
+ );
249
+ },
250
+
251
+ args: {
252
+ variant: "default",
253
+ headingSize: "large",
254
+ },
255
+ };
256
+
257
+ const SingleHeaderAccordion = ({
258
+ size = "medium",
259
+ headingSize = "medium",
260
+ }: Partial<AccordionProps>) => {
261
+ return (
262
+ <Accordion size={size} headingSize={headingSize}>
99
263
  <Accordion.Item>
100
- <Accordion.Header>Accordion header text</Accordion.Header>
101
- <Content />
264
+ <Accordion.Header>{`${size} size + ${headingSize} heading`}</Accordion.Header>
265
+ <Accordion.Content>a</Accordion.Content>
102
266
  </Accordion.Item>
103
267
  <Accordion.Item>
104
- <Accordion.Header>Accordion header text</Accordion.Header>
105
- <Content />
268
+ <Accordion.Header>{`${size} size + ${headingSize} heading`}</Accordion.Header>
269
+ <Accordion.Content>a</Accordion.Content>
106
270
  </Accordion.Item>
107
271
  </Accordion>
108
- </div>
109
- );
272
+ );
273
+ };
274
+
275
+ type sizesType = "large" | "medium" | "small";
276
+ type headingSizesType = "large" | "medium" | "small" | "xsmall";
277
+ const sizes: sizesType[] = ["large", "medium", "small"];
278
+ const headingSizes: headingSizesType[] = ["large", "medium", "small", "xsmall"]; // enum this?!
279
+
280
+ export const Size = {
281
+ render: ({ ...props }) => {
282
+ return (
283
+ <div style={{ width: 500 }} className="colgap">
284
+ {sizes.map((element) => (
285
+ <SingleHeaderAccordion size={element} {...props} />
286
+ ))}
287
+ </div>
288
+ );
289
+ },
290
+
291
+ args: {
292
+ variant: "neutral",
293
+ },
294
+ };
295
+
296
+ export const HeadingSize = {
297
+ render: ({ ...props }) => {
298
+ return (
299
+ <div style={{ width: 500 }} className="colgap">
300
+ {headingSizes.map((element) => (
301
+ <SingleHeaderAccordion headingSize={element} {...props} />
302
+ ))}
303
+ </div>
304
+ );
305
+ },
306
+
307
+ args: {
308
+ variant: "neutral",
309
+ },
310
+ };
@@ -1,9 +1,9 @@
1
1
  import {
2
- ErrorFilled,
3
- InformationFilled,
4
- SuccessFilled,
5
- WarningFilled,
6
- } from "@navikt/ds-icons";
2
+ InformationSquareFillIcon,
3
+ CheckmarkCircleFillIcon,
4
+ ExclamationmarkTriangleFillIcon,
5
+ XMarkOctagonFillIcon,
6
+ } from "@navikt/aksel-icons";
7
7
  import cl from "clsx";
8
8
  import React, { forwardRef } from "react";
9
9
  import { BodyLong } from "../typography/BodyLong";
@@ -37,13 +37,13 @@ export interface AlertProps extends React.HTMLAttributes<HTMLDivElement> {
37
37
  const Icon = ({ variant, ...props }) => {
38
38
  switch (variant) {
39
39
  case "error":
40
- return <ErrorFilled title="Feil" {...props} />;
40
+ return <XMarkOctagonFillIcon title="Feil" {...props} />;
41
41
  case "warning":
42
- return <WarningFilled title="Advarsel" {...props} />;
42
+ return <ExclamationmarkTriangleFillIcon title="Advarsel" {...props} />;
43
43
  case "info":
44
- return <InformationFilled title="Informasjon" {...props} />;
44
+ return <InformationSquareFillIcon title="Informasjon" {...props} />;
45
45
  case "success":
46
- return <SuccessFilled title="Suksess" {...props} />;
46
+ return <CheckmarkCircleFillIcon title="Suksess" {...props} />;
47
47
  default:
48
48
  return null;
49
49
  }