@navikt/ds-react 6.6.0 → 6.7.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 (102) hide show
  1. package/cjs/collapsible/Collapsible.context.d.ts +48 -0
  2. package/cjs/collapsible/Collapsible.context.js +10 -0
  3. package/cjs/collapsible/Collapsible.context.js.map +1 -0
  4. package/cjs/collapsible/Collapsible.d.ts +48 -0
  5. package/cjs/collapsible/Collapsible.js +91 -0
  6. package/cjs/collapsible/Collapsible.js.map +1 -0
  7. package/cjs/collapsible/Collapsible.types.d.ts +19 -0
  8. package/cjs/collapsible/Collapsible.types.js +3 -0
  9. package/cjs/collapsible/Collapsible.types.js.map +1 -0
  10. package/cjs/collapsible/index.d.ts +3 -0
  11. package/cjs/collapsible/index.js +14 -0
  12. package/cjs/collapsible/index.js.map +1 -0
  13. package/cjs/collapsible/parts/Collapsible.Content.d.ts +10 -0
  14. package/cjs/collapsible/parts/Collapsible.Content.js +48 -0
  15. package/cjs/collapsible/parts/Collapsible.Content.js.map +1 -0
  16. package/cjs/collapsible/parts/Collapsible.Trigger.d.ts +10 -0
  17. package/cjs/collapsible/parts/Collapsible.Trigger.js +49 -0
  18. package/cjs/collapsible/parts/Collapsible.Trigger.js.map +1 -0
  19. package/cjs/index.d.ts +1 -0
  20. package/cjs/index.js +4 -2
  21. package/cjs/index.js.map +1 -1
  22. package/cjs/layout/stack/Spacer.js +1 -1
  23. package/cjs/layout/stack/Spacer.js.map +1 -1
  24. package/cjs/progress-bar/ProgressBar.d.ts +60 -0
  25. package/cjs/progress-bar/ProgressBar.js +76 -0
  26. package/cjs/progress-bar/ProgressBar.js.map +1 -0
  27. package/cjs/progress-bar/index.d.ts +1 -0
  28. package/cjs/progress-bar/index.js +10 -0
  29. package/cjs/progress-bar/index.js.map +1 -0
  30. package/cjs/typography/BodyLong.d.ts +7 -7
  31. package/cjs/typography/BodyLong.js +5 -5
  32. package/cjs/typography/BodyShort.d.ts +5 -5
  33. package/cjs/typography/BodyShort.js +3 -3
  34. package/cjs/typography/Detail.d.ts +5 -5
  35. package/cjs/typography/Detail.js +3 -3
  36. package/cjs/typography/ErrorMessage.d.ts +5 -5
  37. package/cjs/typography/ErrorMessage.js +3 -3
  38. package/cjs/typography/Heading.d.ts +6 -6
  39. package/cjs/typography/Heading.js +3 -3
  40. package/cjs/typography/Label.d.ts +5 -5
  41. package/cjs/typography/Label.js +3 -3
  42. package/cjs/typography/types.d.ts +3 -3
  43. package/esm/collapsible/Collapsible.context.d.ts +48 -0
  44. package/esm/collapsible/Collapsible.context.js +6 -0
  45. package/esm/collapsible/Collapsible.context.js.map +1 -0
  46. package/esm/collapsible/Collapsible.d.ts +48 -0
  47. package/esm/collapsible/Collapsible.js +62 -0
  48. package/esm/collapsible/Collapsible.js.map +1 -0
  49. package/esm/collapsible/Collapsible.types.d.ts +19 -0
  50. package/esm/collapsible/Collapsible.types.js +2 -0
  51. package/esm/collapsible/Collapsible.types.js.map +1 -0
  52. package/esm/collapsible/index.d.ts +3 -0
  53. package/esm/collapsible/index.js +5 -0
  54. package/esm/collapsible/index.js.map +1 -0
  55. package/esm/collapsible/parts/Collapsible.Content.d.ts +10 -0
  56. package/esm/collapsible/parts/Collapsible.Content.js +22 -0
  57. package/esm/collapsible/parts/Collapsible.Content.js.map +1 -0
  58. package/esm/collapsible/parts/Collapsible.Trigger.d.ts +10 -0
  59. package/esm/collapsible/parts/Collapsible.Trigger.js +23 -0
  60. package/esm/collapsible/parts/Collapsible.Trigger.js.map +1 -0
  61. package/esm/index.d.ts +1 -0
  62. package/esm/index.js +1 -0
  63. package/esm/index.js.map +1 -1
  64. package/esm/layout/stack/Spacer.js +1 -1
  65. package/esm/layout/stack/Spacer.js.map +1 -1
  66. package/esm/progress-bar/ProgressBar.d.ts +60 -0
  67. package/esm/progress-bar/ProgressBar.js +47 -0
  68. package/esm/progress-bar/ProgressBar.js.map +1 -0
  69. package/esm/progress-bar/index.d.ts +1 -0
  70. package/esm/progress-bar/index.js +3 -0
  71. package/esm/progress-bar/index.js.map +1 -0
  72. package/esm/typography/BodyLong.d.ts +7 -7
  73. package/esm/typography/BodyLong.js +5 -5
  74. package/esm/typography/BodyShort.d.ts +5 -5
  75. package/esm/typography/BodyShort.js +3 -3
  76. package/esm/typography/Detail.d.ts +5 -5
  77. package/esm/typography/Detail.js +3 -3
  78. package/esm/typography/ErrorMessage.d.ts +5 -5
  79. package/esm/typography/ErrorMessage.js +3 -3
  80. package/esm/typography/Heading.d.ts +6 -6
  81. package/esm/typography/Heading.js +3 -3
  82. package/esm/typography/Label.d.ts +5 -5
  83. package/esm/typography/Label.js +3 -3
  84. package/esm/typography/types.d.ts +3 -3
  85. package/package.json +13 -3
  86. package/src/collapsible/Collapsible.context.tsx +32 -0
  87. package/src/collapsible/Collapsible.tsx +100 -0
  88. package/src/collapsible/Collapsible.types.ts +19 -0
  89. package/src/collapsible/index.ts +10 -0
  90. package/src/collapsible/parts/Collapsible.Content.tsx +39 -0
  91. package/src/collapsible/parts/Collapsible.Trigger.tsx +42 -0
  92. package/src/index.ts +1 -0
  93. package/src/layout/stack/Spacer.tsx +1 -1
  94. package/src/progress-bar/ProgressBar.tsx +124 -0
  95. package/src/progress-bar/index.ts +2 -0
  96. package/src/typography/BodyLong.tsx +7 -7
  97. package/src/typography/BodyShort.tsx +5 -5
  98. package/src/typography/Detail.tsx +5 -5
  99. package/src/typography/ErrorMessage.tsx +5 -5
  100. package/src/typography/Heading.tsx +6 -6
  101. package/src/typography/Label.tsx +5 -5
  102. package/src/typography/types.ts +3 -3
@@ -0,0 +1,42 @@
1
+ import React, { forwardRef } from "react";
2
+ import { Slot } from "../../util/Slot";
3
+ import { composeEventHandlers } from "../../util/composeEventHandlers";
4
+ import { useCollapsibleContext } from "../Collapsible.context";
5
+
6
+ export interface CollapsibleTriggerProps
7
+ extends Omit<
8
+ React.ButtonHTMLAttributes<HTMLButtonElement>,
9
+ "id" | "aria-controls" | "aria-expanded"
10
+ > {
11
+ /**
12
+ * When true, will render element as its child. This merges classes, styles and event handlers.
13
+ * @default false
14
+ */
15
+ asChild?: boolean;
16
+ }
17
+
18
+ export const CollapsibleTrigger = forwardRef<
19
+ HTMLButtonElement,
20
+ CollapsibleTriggerProps
21
+ >(({ children, asChild, onClick, ...rest }, ref) => {
22
+ const ctx = useCollapsibleContext();
23
+
24
+ const Comp = asChild ? Slot : "button";
25
+
26
+ return (
27
+ <Comp
28
+ ref={ref}
29
+ type="button"
30
+ data-state={ctx.state}
31
+ onClick={composeEventHandlers(onClick, ctx.onOpenToggle)}
32
+ {...rest}
33
+ id={ctx.triggerId}
34
+ aria-controls={ctx.open ? ctx.contentId : undefined}
35
+ aria-expanded={ctx.open}
36
+ >
37
+ {children}
38
+ </Comp>
39
+ );
40
+ });
41
+
42
+ export default CollapsibleTrigger;
package/src/index.ts CHANGED
@@ -59,6 +59,7 @@ export { Modal, type ModalProps } from "./modal";
59
59
  export { Pagination, type PaginationProps } from "./pagination";
60
60
  export { Popover, type PopoverProps } from "./popover";
61
61
  export { Portal, type PortalProps } from "./portal";
62
+ export { ProgressBar, type ProgressBarProps } from "./progress-bar";
62
63
  export { Provider, type ProviderProps } from "./provider";
63
64
  export { ReadMore, type ReadMoreProps } from "./read-more";
64
65
  export { Skeleton, type SkeletonProps } from "./skeleton";
@@ -12,6 +12,6 @@ import React from "react";
12
12
  * <MyComponent />
13
13
  * </HStack>
14
14
  */
15
- export const Spacer = () => <div className="navds-stack__spacer" />;
15
+ export const Spacer = () => <span className="navds-stack__spacer" />;
16
16
 
17
17
  export default Spacer;
@@ -0,0 +1,124 @@
1
+ import cl from "clsx";
2
+ import React, { HTMLAttributes, forwardRef } from "react";
3
+
4
+ interface ProgressBarPropsBase
5
+ extends Omit<HTMLAttributes<HTMLDivElement>, "role"> {
6
+ /**
7
+ * Changes height.
8
+ * @default "medium"
9
+ */
10
+ size?: "large" | "medium" | "small";
11
+ /**
12
+ * Current progress. When duration is set, value is ignored.
13
+ */
14
+ value?: number;
15
+ /**
16
+ * Maximum progress.
17
+ * @default 100
18
+ */
19
+ valueMax?: number;
20
+ /**
21
+ * Expected task duration in seconds.
22
+ * ProgressBar grows with a preset animation for {duration} seconds.
23
+ * After a 4 sec delay, it then shows an indeterminate animation.
24
+ * A duration of 0 will show an indeterminate animation immediately.
25
+ * Temporary removed to avoid conflicts when updating API
26
+ */
27
+ //duration?: number;
28
+ /**
29
+ * String ID of the element that labels the progress bar.
30
+ * Not needed if `aria-label` is used.
31
+ */
32
+ "aria-labelledby"?: string;
33
+ /**
34
+ * String value that labels the progress bar.
35
+ * Not needed if `aria-labelledby` is used.
36
+ */
37
+ "aria-label"?: string;
38
+ }
39
+
40
+ export type ProgressBarProps = ProgressBarPropsBase &
41
+ (
42
+ | {
43
+ "aria-hidden": string;
44
+ }
45
+ | {
46
+ "aria-labelledby": string;
47
+ "aria-label"?: never;
48
+ }
49
+ | {
50
+ "aria-label": string;
51
+ "aria-labelledby"?: never;
52
+ }
53
+ );
54
+
55
+ /**
56
+ * ProgressBar
57
+ * A component for visualizing progression in a process.
58
+ *
59
+ * @see [📝 Documentation](https://aksel.nav.no/komponenter/core/progress-bar)
60
+ * @see 🏷️ {@link ProgressBarProps}
61
+ *
62
+ * @example
63
+ * // For loading content with an approximate duration in sec.
64
+ * <ProgressBar duration={30} />
65
+ *
66
+ * @example
67
+ * // As a step indicator for forms, questionnaires, etc.
68
+ * <ProgressBar value={2} valueMax={7} />
69
+ */
70
+ export const ProgressBar = forwardRef<HTMLDivElement, ProgressBarProps>(
71
+ (
72
+ {
73
+ size = "medium",
74
+ value = 0,
75
+ valueMax = 100,
76
+ "aria-labelledby": ariaLabelledBy,
77
+ "aria-label": ariaLabel,
78
+ className,
79
+ ...rest
80
+ },
81
+ ref,
82
+ ) => {
83
+ const translate = 100 - (Math.round(value) / valueMax) * 100;
84
+ const duration = undefined;
85
+
86
+ return (
87
+ <div
88
+ ref={ref}
89
+ className={cl(
90
+ "navds-progress-bar",
91
+ `navds-progress-bar--${size}`,
92
+ className,
93
+ )}
94
+ aria-valuemax={duration ? 0 : Math.round(valueMax)}
95
+ aria-valuenow={duration ? 0 : Math.round(value)}
96
+ aria-valuetext={
97
+ duration
98
+ ? "Fremdrift kan ikke beregnes"
99
+ : `${Math.round(value)} av ${Math.round(valueMax)}`
100
+ }
101
+ role="progressbar"
102
+ aria-labelledby={ariaLabelledBy}
103
+ aria-label={ariaLabel}
104
+ {...rest}
105
+ >
106
+ <div
107
+ className={cl("navds-progress-bar__foreground", {
108
+ "navds-progress-bar__foreground--indeterminate":
109
+ Number.isInteger(duration),
110
+ })}
111
+ style={{
112
+ "--__ac-progress-bar-duration": Number.isInteger(duration)
113
+ ? `${duration}s`
114
+ : undefined,
115
+ "--__ac-progress-bar-delay": `${duration === 0 ? 0 : 4}s`,
116
+ "--__ac-progress-bar-translate": `-${translate}%`,
117
+ }}
118
+ />
119
+ </div>
120
+ );
121
+ },
122
+ );
123
+
124
+ export default ProgressBar;
@@ -0,0 +1,2 @@
1
+ "use client";
2
+ export { default as ProgressBar, type ProgressBarProps } from "./ProgressBar";
@@ -8,12 +8,12 @@ export interface BodyLongProps
8
8
  extends TypoProps,
9
9
  React.HTMLAttributes<HTMLParagraphElement> {
10
10
  /**
11
- * large: 20px, medium: 18px, small: 16px
11
+ * large: 20px, medium: 18px, small: 16px.
12
12
  * @default "medium"
13
13
  */
14
14
  size?: "large" | "medium" | "small";
15
15
  /**
16
- * Text
16
+ * Text.
17
17
  */
18
18
  children: React.ReactNode;
19
19
  }
@@ -27,11 +27,11 @@ export interface BodyLongProps
27
27
  *
28
28
  * @example
29
29
  * ```jsx
30
- * <BodyLong>
31
- * Hvis du ikke bor sammen med begge foreldrene dine,
32
- * kan du ha rett til barnebidrag fra en eller begge foreldre mens du
33
- * fullfører videregående skole eller tilsvarende.
34
- * </BodyLong>
30
+ * <BodyLong>
31
+ * Hvis du ikke bor sammen med begge foreldrene dine,
32
+ * kan du ha rett til barnebidrag fra en eller begge foreldre mens du
33
+ * fullfører videregående skole eller tilsvarende.
34
+ * </BodyLong>
35
35
  * ```
36
36
  */
37
37
  export const BodyLong: OverridableComponent<
@@ -8,12 +8,12 @@ export interface BodyShortProps
8
8
  extends TypoProps,
9
9
  React.HTMLAttributes<HTMLParagraphElement> {
10
10
  /**
11
- * large: 20px, medium: 18px, small: 16px
11
+ * large: 20px, medium: 18px, small: 16px.
12
12
  * @default "medium"
13
13
  */
14
14
  size?: "large" | "medium" | "small";
15
15
  /**
16
- * Paragraph text
16
+ * Paragraph text.
17
17
  */
18
18
  children: React.ReactNode;
19
19
  }
@@ -27,9 +27,9 @@ export interface BodyShortProps
27
27
  *
28
28
  * @example
29
29
  * ```jsx
30
- * <BodyShort>
31
- * Du må gjøre en filtrering for å se brukere i listen.
32
- * </BodyShort>
30
+ * <BodyShort>
31
+ * Du må gjøre en filtrering for å se brukere i listen.
32
+ * </BodyShort>
33
33
  * ```
34
34
  */
35
35
  export const BodyShort: OverridableComponent<
@@ -12,11 +12,11 @@ export interface DetailProps
12
12
  */
13
13
  size?: "medium" | "small";
14
14
  /**
15
- * Paragraph text
15
+ * Text.
16
16
  */
17
17
  children: React.ReactNode;
18
18
  /**
19
- * All caps
19
+ * ALL CAPS.
20
20
  */
21
21
  uppercase?: boolean;
22
22
  }
@@ -30,9 +30,9 @@ export interface DetailProps
30
30
  *
31
31
  * @example
32
32
  * ```jsx
33
- * <Detail>
34
- * Du må gjøre en filtrering for å se brukere i listen.
35
- * </Detail>
33
+ * <Detail>
34
+ * Du må gjøre en filtrering for å se brukere i listen.
35
+ * </Detail>
36
36
  * ```
37
37
  */
38
38
  export const Detail: OverridableComponent<DetailProps, HTMLParagraphElement> =
@@ -8,12 +8,12 @@ export interface ErrorMessageProps
8
8
  extends Pick<TypoProps, "spacing">,
9
9
  React.HTMLAttributes<HTMLParagraphElement> {
10
10
  /**
11
- * medium: 18px, small: 16px
11
+ * medium: 18px, small: 16px.
12
12
  * @default "medium"
13
13
  */
14
14
  size?: "medium" | "small";
15
15
  /**
16
- * Error text
16
+ * Error text.
17
17
  */
18
18
  children: React.ReactNode;
19
19
  }
@@ -27,9 +27,9 @@ export interface ErrorMessageProps
27
27
  *
28
28
  * @example
29
29
  * ```jsx
30
- * <ErrorMessage>
31
- * Du må fylle ut: Oppgi årsaken til at du har ventet mer enn 6 måneder med å søke om refusjon
32
- * </ErrorMessage>
30
+ * <ErrorMessage>
31
+ * Du må fylle ut: Oppgi årsaken til at du har ventet mer enn 6 måneder med å søke om refusjon
32
+ * </ErrorMessage>
33
33
  * ```
34
34
  */
35
35
  export const ErrorMessage: OverridableComponent<
@@ -8,16 +8,16 @@ export interface HeadingProps
8
8
  extends Pick<TypoProps, "spacing" | "visuallyHidden" | "align" | "textColor">,
9
9
  React.HTMLAttributes<HTMLHeadingElement> {
10
10
  /**
11
- * Heading level
11
+ * Heading level.
12
12
  * @default "1"
13
13
  */
14
14
  level?: "1" | "2" | "3" | "4" | "5" | "6";
15
15
  /**
16
- * Changes text-sizing
16
+ * xlarge: 40px, large: 32px, medium: 24px, small: 20px, xsmall: 18px.
17
17
  */
18
18
  size: "xlarge" | "large" | "medium" | "small" | "xsmall";
19
19
  /**
20
- * Heading text
20
+ * Heading text.
21
21
  */
22
22
  children: React.ReactNode;
23
23
  }
@@ -31,9 +31,9 @@ export interface HeadingProps
31
31
  *
32
32
  * @example
33
33
  * ```jsx
34
- * <Heading level="1" size="xlarge">
35
- * Hva kan vi hjelpe deg med?
36
- * </Heading>
34
+ * <Heading level="1" size="xlarge">
35
+ * Hva kan vi hjelpe deg med?
36
+ * </Heading>
37
37
  * ```
38
38
  */
39
39
  export const Heading: OverridableComponent<HeadingProps, HTMLHeadingElement> =
@@ -8,12 +8,12 @@ export interface LabelProps
8
8
  extends Omit<TypoProps, "weight" | "align" | "truncate">,
9
9
  React.LabelHTMLAttributes<HTMLLabelElement> {
10
10
  /**
11
- * medium: 18px, small: 16px
11
+ * medium: 18px, small: 16px.
12
12
  * @default "medium"
13
13
  */
14
14
  size?: "medium" | "small";
15
15
  /**
16
- * Paragraph text
16
+ * Label text.
17
17
  */
18
18
  children: React.ReactNode;
19
19
  }
@@ -27,9 +27,9 @@ export interface LabelProps
27
27
  *
28
28
  * @example
29
29
  * ```jsx
30
- * <Label>
31
- * Oppgi årsaken til at du har ventet mer enn 6 måneder med å søke om refusjon
32
- * </Label>
30
+ * <Label>
31
+ * Oppgi årsaken til at du har ventet mer enn 6 måneder med å søke om refusjon
32
+ * </Label>
33
33
  * ```
34
34
  */
35
35
  export const Label: OverridableComponent<LabelProps, HTMLLabelElement> =
@@ -12,15 +12,15 @@ export type TypoProps = {
12
12
  */
13
13
  align?: "start" | "center" | "end";
14
14
  /**
15
- * Visually hide text. Text will still be accessible for screenreaders
15
+ * Visually hide text. Text will still be accessible for screenreaders.
16
16
  */
17
17
  visuallyHidden?: boolean;
18
18
  /**
19
- * Adds spacing below text
19
+ * Adds spacing below text.
20
20
  */
21
21
  spacing?: boolean;
22
22
  /**
23
- * Adjusts color
23
+ * Adjusts color.
24
24
  */
25
25
  textColor?: "default" | "subtle";
26
26
  };