@navikt/ds-react 7.22.0 → 7.23.1

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 (178) hide show
  1. package/cjs/alert/Alert.d.ts +4 -0
  2. package/cjs/alert/Alert.js +15 -1
  3. package/cjs/alert/Alert.js.map +1 -1
  4. package/cjs/button/Button.js +30 -2
  5. package/cjs/button/Button.js.map +1 -1
  6. package/cjs/chat/Chat.js +14 -2
  7. package/cjs/chat/Chat.js.map +1 -1
  8. package/cjs/chips/Removable.js +22 -2
  9. package/cjs/chips/Removable.js.map +1 -1
  10. package/cjs/chips/Toggle.js +24 -5
  11. package/cjs/chips/Toggle.js.map +1 -1
  12. package/cjs/expansion-card/ExpansionCard.js +2 -2
  13. package/cjs/expansion-card/ExpansionCard.js.map +1 -1
  14. package/cjs/form/checkbox/Checkbox.js +1 -1
  15. package/cjs/form/checkbox/Checkbox.js.map +1 -1
  16. package/cjs/form/combobox/SelectedOptions/SelectedOptions.js +1 -1
  17. package/cjs/form/combobox/SelectedOptions/SelectedOptions.js.map +1 -1
  18. package/cjs/form/confirmation-panel/ConfirmationPanel.js +2 -2
  19. package/cjs/form/confirmation-panel/ConfirmationPanel.js.map +1 -1
  20. package/cjs/form/error-summary/ErrorSummary.js +1 -1
  21. package/cjs/form/error-summary/ErrorSummary.js.map +1 -1
  22. package/cjs/form/form-summary/FormSummaryAnswers.js +2 -2
  23. package/cjs/form/form-summary/FormSummaryAnswers.js.map +1 -1
  24. package/cjs/form/radio/Radio.js +1 -1
  25. package/cjs/form/radio/Radio.js.map +1 -1
  26. package/cjs/form/search/Search.d.ts +1 -1
  27. package/cjs/form/search/Search.js +10 -7
  28. package/cjs/form/search/Search.js.map +1 -1
  29. package/cjs/guide-panel/GuidePanel.js +3 -3
  30. package/cjs/guide-panel/GuidePanel.js.map +1 -1
  31. package/cjs/guide-panel/Illustration.darkside.js +1 -1
  32. package/cjs/guide-panel/Illustration.darkside.js.map +1 -1
  33. package/cjs/help-text/HelpText.js +2 -2
  34. package/cjs/help-text/HelpText.js.map +1 -1
  35. package/cjs/layout/box/Box.darkside.d.ts +4 -4
  36. package/cjs/layout/box/Box.darkside.js.map +1 -1
  37. package/cjs/layout/utilities/types.d.ts +8 -8
  38. package/cjs/link/Link.js +26 -2
  39. package/cjs/link/Link.js.map +1 -1
  40. package/cjs/loader/Loader.d.ts +5 -0
  41. package/cjs/loader/Loader.js +15 -2
  42. package/cjs/loader/Loader.js.map +1 -1
  43. package/cjs/overlays/action-menu/ActionMenu.js +5 -5
  44. package/cjs/overlays/action-menu/ActionMenu.js.map +1 -1
  45. package/cjs/pagination/Pagination.js +5 -7
  46. package/cjs/pagination/Pagination.js.map +1 -1
  47. package/cjs/pagination/PaginationItem.js +2 -2
  48. package/cjs/pagination/PaginationItem.js.map +1 -1
  49. package/cjs/portal/Portal.js +1 -1
  50. package/cjs/portal/Portal.js.map +1 -1
  51. package/cjs/stepper/Stepper.js +3 -2
  52. package/cjs/stepper/Stepper.js.map +1 -1
  53. package/cjs/tag/Tag.js +39 -3
  54. package/cjs/tag/Tag.js.map +1 -1
  55. package/cjs/theme/Theme.d.ts +10 -1
  56. package/cjs/theme/Theme.js +3 -3
  57. package/cjs/theme/Theme.js.map +1 -1
  58. package/cjs/timeline/Pin.js +1 -3
  59. package/cjs/timeline/Pin.js.map +1 -1
  60. package/cjs/timeline/period/ClickablePeriod.js +3 -5
  61. package/cjs/timeline/period/ClickablePeriod.js.map +1 -1
  62. package/cjs/timeline/period/NonClickablePeriod.js +2 -1
  63. package/cjs/timeline/period/NonClickablePeriod.js.map +1 -1
  64. package/cjs/timeline/utils/period.d.ts +1 -1
  65. package/cjs/timeline/utils/period.js.map +1 -1
  66. package/cjs/toggle-group/ToggleGroup.js +21 -3
  67. package/cjs/toggle-group/ToggleGroup.js.map +1 -1
  68. package/cjs/types/index.d.ts +1 -0
  69. package/cjs/types/index.js +18 -0
  70. package/cjs/types/index.js.map +1 -0
  71. package/esm/alert/Alert.d.ts +4 -0
  72. package/esm/alert/Alert.js +15 -1
  73. package/esm/alert/Alert.js.map +1 -1
  74. package/esm/button/Button.js +30 -2
  75. package/esm/button/Button.js.map +1 -1
  76. package/esm/chat/Chat.js +14 -2
  77. package/esm/chat/Chat.js.map +1 -1
  78. package/esm/chips/Removable.js +23 -3
  79. package/esm/chips/Removable.js.map +1 -1
  80. package/esm/chips/Toggle.js +25 -6
  81. package/esm/chips/Toggle.js.map +1 -1
  82. package/esm/expansion-card/ExpansionCard.js +2 -2
  83. package/esm/expansion-card/ExpansionCard.js.map +1 -1
  84. package/esm/form/checkbox/Checkbox.js +1 -1
  85. package/esm/form/checkbox/Checkbox.js.map +1 -1
  86. package/esm/form/combobox/SelectedOptions/SelectedOptions.js +1 -1
  87. package/esm/form/combobox/SelectedOptions/SelectedOptions.js.map +1 -1
  88. package/esm/form/confirmation-panel/ConfirmationPanel.js +2 -2
  89. package/esm/form/confirmation-panel/ConfirmationPanel.js.map +1 -1
  90. package/esm/form/error-summary/ErrorSummary.js +1 -1
  91. package/esm/form/error-summary/ErrorSummary.js.map +1 -1
  92. package/esm/form/form-summary/FormSummaryAnswers.js +2 -2
  93. package/esm/form/form-summary/FormSummaryAnswers.js.map +1 -1
  94. package/esm/form/radio/Radio.js +1 -1
  95. package/esm/form/radio/Radio.js.map +1 -1
  96. package/esm/form/search/Search.d.ts +1 -1
  97. package/esm/form/search/Search.js +10 -7
  98. package/esm/form/search/Search.js.map +1 -1
  99. package/esm/guide-panel/GuidePanel.js +3 -3
  100. package/esm/guide-panel/GuidePanel.js.map +1 -1
  101. package/esm/guide-panel/Illustration.darkside.js +1 -1
  102. package/esm/guide-panel/Illustration.darkside.js.map +1 -1
  103. package/esm/help-text/HelpText.js +2 -2
  104. package/esm/help-text/HelpText.js.map +1 -1
  105. package/esm/layout/box/Box.darkside.d.ts +4 -4
  106. package/esm/layout/box/Box.darkside.js.map +1 -1
  107. package/esm/layout/utilities/types.d.ts +8 -8
  108. package/esm/link/Link.js +27 -3
  109. package/esm/link/Link.js.map +1 -1
  110. package/esm/loader/Loader.d.ts +5 -0
  111. package/esm/loader/Loader.js +15 -2
  112. package/esm/loader/Loader.js.map +1 -1
  113. package/esm/overlays/action-menu/ActionMenu.js +5 -5
  114. package/esm/overlays/action-menu/ActionMenu.js.map +1 -1
  115. package/esm/pagination/Pagination.js +5 -7
  116. package/esm/pagination/Pagination.js.map +1 -1
  117. package/esm/pagination/PaginationItem.js +2 -2
  118. package/esm/pagination/PaginationItem.js.map +1 -1
  119. package/esm/portal/Portal.js +1 -1
  120. package/esm/portal/Portal.js.map +1 -1
  121. package/esm/stepper/Stepper.js +3 -2
  122. package/esm/stepper/Stepper.js.map +1 -1
  123. package/esm/tag/Tag.js +39 -3
  124. package/esm/tag/Tag.js.map +1 -1
  125. package/esm/theme/Theme.d.ts +10 -1
  126. package/esm/theme/Theme.js +3 -3
  127. package/esm/theme/Theme.js.map +1 -1
  128. package/esm/timeline/Pin.js +2 -4
  129. package/esm/timeline/Pin.js.map +1 -1
  130. package/esm/timeline/period/ClickablePeriod.js +4 -6
  131. package/esm/timeline/period/ClickablePeriod.js.map +1 -1
  132. package/esm/timeline/period/NonClickablePeriod.js +2 -1
  133. package/esm/timeline/period/NonClickablePeriod.js.map +1 -1
  134. package/esm/timeline/utils/period.d.ts +1 -1
  135. package/esm/timeline/utils/period.js.map +1 -1
  136. package/esm/toggle-group/ToggleGroup.js +22 -4
  137. package/esm/toggle-group/ToggleGroup.js.map +1 -1
  138. package/esm/types/index.d.ts +1 -0
  139. package/esm/types/index.js +2 -0
  140. package/esm/types/index.js.map +1 -0
  141. package/esm/types/theme.d.ts +15 -0
  142. package/package.json +13 -8
  143. package/src/alert/Alert.tsx +22 -0
  144. package/src/button/Button.tsx +38 -0
  145. package/src/chat/Chat.tsx +17 -0
  146. package/src/chips/Removable.tsx +30 -3
  147. package/src/chips/Toggle.tsx +31 -13
  148. package/src/expansion-card/ExpansionCard.tsx +2 -0
  149. package/src/form/checkbox/Checkbox.tsx +1 -0
  150. package/src/form/combobox/SelectedOptions/SelectedOptions.tsx +6 -1
  151. package/src/form/confirmation-panel/ConfirmationPanel.tsx +2 -2
  152. package/src/form/error-summary/ErrorSummary.tsx +1 -1
  153. package/src/form/form-summary/FormSummaryAnswers.tsx +23 -12
  154. package/src/form/radio/Radio.tsx +1 -0
  155. package/src/form/search/Search.tsx +48 -31
  156. package/src/guide-panel/GuidePanel.tsx +13 -2
  157. package/src/guide-panel/Illustration.darkside.tsx +1 -6
  158. package/src/help-text/HelpText.tsx +5 -1
  159. package/src/layout/box/Box.darkside.tsx +10 -8
  160. package/src/layout/utilities/css.ts +8 -8
  161. package/src/layout/utilities/types.ts +18 -16
  162. package/src/link/Link.tsx +36 -3
  163. package/src/loader/Loader.tsx +24 -0
  164. package/src/overlays/action-menu/ActionMenu.tsx +5 -5
  165. package/src/pagination/Pagination.tsx +5 -0
  166. package/src/pagination/PaginationItem.tsx +3 -1
  167. package/src/portal/Portal.tsx +6 -1
  168. package/src/react-css.d.ts +0 -4
  169. package/src/stepper/Stepper.tsx +4 -3
  170. package/src/tag/Tag.tsx +53 -4
  171. package/src/theme/Theme.tsx +13 -2
  172. package/src/timeline/Pin.tsx +1 -3
  173. package/src/timeline/period/ClickablePeriod.tsx +2 -3
  174. package/src/timeline/period/NonClickablePeriod.tsx +1 -0
  175. package/src/timeline/utils/period.ts +1 -1
  176. package/src/toggle-group/ToggleGroup.tsx +28 -3
  177. package/src/types/index.ts +1 -0
  178. package/src/types/theme.d.ts +15 -0
@@ -8,6 +8,7 @@ import {
8
8
  } from "@navikt/aksel-icons";
9
9
  import { Button } from "../button";
10
10
  import { useRenameCSS } from "../theme/Theme";
11
+ import { AkselColor } from "../types";
11
12
  import { BodyLong } from "../typography";
12
13
  import { useI18n } from "../util/i18n/i18n.hooks";
13
14
 
@@ -53,6 +54,10 @@ export interface AlertProps extends React.HTMLAttributes<HTMLDivElement> {
53
54
  * **Requires closeButton to be true**.
54
55
  */
55
56
  onClose?: () => void;
57
+ /**
58
+ * Overriding Alert color is not supported.
59
+ */
60
+ "data-color"?: never;
56
61
  }
57
62
 
58
63
  const IconMap = {
@@ -93,6 +98,8 @@ export const Alert = forwardRef<HTMLDivElement, AlertProps>(
93
98
  return (
94
99
  <div
95
100
  {...rest}
101
+ data-color={variantToRole(variant)}
102
+ data-variant={variant}
96
103
  ref={ref}
97
104
  className={cn(
98
105
  className,
@@ -142,4 +149,19 @@ export const Alert = forwardRef<HTMLDivElement, AlertProps>(
142
149
  },
143
150
  );
144
151
 
152
+ function variantToRole(variant: AlertProps["variant"]): AkselColor {
153
+ switch (variant) {
154
+ case "warning":
155
+ return "warning";
156
+ case "error":
157
+ return "danger";
158
+ case "info":
159
+ return "info";
160
+ case "success":
161
+ return "success";
162
+ default:
163
+ return "info";
164
+ }
165
+ }
166
+
145
167
  export default Alert;
@@ -1,6 +1,7 @@
1
1
  import React, { forwardRef } from "react";
2
2
  import { Loader } from "../loader";
3
3
  import { useRenameCSS } from "../theme/Theme";
4
+ import { AkselColor } from "../types";
4
5
  import { Label } from "../typography";
5
6
  import { omit } from "../util";
6
7
  import { composeEventHandlers } from "../util/composeEventHandlers";
@@ -75,6 +76,7 @@ export const Button: OverridableComponent<ButtonProps, HTMLButtonElement> =
75
76
  icon,
76
77
  iconPosition = "left",
77
78
  onKeyUp,
79
+ "data-color": color,
78
80
  ...rest
79
81
  },
80
82
  ref,
@@ -93,6 +95,8 @@ export const Button: OverridableComponent<ButtonProps, HTMLButtonElement> =
93
95
  return (
94
96
  <Component
95
97
  {...(Component !== "button" ? { role: "button" } : {})}
98
+ data-color={color ?? variantToColor(variant)}
99
+ data-variant={variantToSimplifiedVariant(variant)}
96
100
  {...filterProps}
97
101
  ref={ref}
98
102
  onKeyUp={composeEventHandlers(onKeyUp, handleKeyUp)}
@@ -126,4 +130,38 @@ export const Button: OverridableComponent<ButtonProps, HTMLButtonElement> =
126
130
  },
127
131
  );
128
132
 
133
+ function variantToColor(
134
+ variant: ButtonProps["variant"],
135
+ ): AkselColor | undefined {
136
+ switch (variant) {
137
+ case "primary-neutral":
138
+ case "secondary-neutral":
139
+ case "tertiary-neutral":
140
+ return "neutral";
141
+ case "danger":
142
+ return "danger";
143
+ default:
144
+ return undefined;
145
+ }
146
+ }
147
+
148
+ function variantToSimplifiedVariant(
149
+ variant: ButtonProps["variant"],
150
+ ): "primary" | "secondary" | "tertiary" {
151
+ switch (variant) {
152
+ case "primary":
153
+ case "primary-neutral":
154
+ case "danger":
155
+ return "primary";
156
+ case "secondary":
157
+ case "secondary-neutral":
158
+ return "secondary";
159
+ case "tertiary":
160
+ case "tertiary-neutral":
161
+ return "tertiary";
162
+ default:
163
+ return "primary";
164
+ }
165
+ }
166
+
129
167
  export default Button;
package/src/chat/Chat.tsx CHANGED
@@ -1,5 +1,6 @@
1
1
  import React, { HTMLAttributes, forwardRef } from "react";
2
2
  import { useRenameCSS } from "../theme/Theme";
3
+ import { AkselColor } from "../types";
3
4
  import { BodyLong, HeadingProps } from "../typography";
4
5
  import Bubble from "./Bubble";
5
6
 
@@ -94,6 +95,7 @@ export const Chat = forwardRef<HTMLDivElement, ChatProps>(
94
95
  toptextPosition,
95
96
  size = "medium",
96
97
  toptextHeadingLevel = "3",
98
+ "data-color": color,
97
99
  ...rest
98
100
  }: ChatProps,
99
101
  ref,
@@ -111,7 +113,9 @@ export const Chat = forwardRef<HTMLDivElement, ChatProps>(
111
113
  `navds-chat--${size}`,
112
114
  `navds-chat--${variant}`,
113
115
  )}
116
+ data-color={color ?? variantToColor(variant)}
114
117
  {...rest}
118
+ data-variant={variant}
115
119
  >
116
120
  {avatar && (
117
121
  <div className={cn("navds-chat__avatar")} aria-hidden>
@@ -139,6 +143,19 @@ export const Chat = forwardRef<HTMLDivElement, ChatProps>(
139
143
  },
140
144
  ) as ChatComponent;
141
145
 
146
+ function variantToColor(variant: ChatProps["variant"]): AkselColor {
147
+ switch (variant) {
148
+ case "neutral":
149
+ return "neutral";
150
+ case "subtle":
151
+ return "neutral";
152
+ case "info":
153
+ return "info";
154
+ default:
155
+ return "neutral";
156
+ }
157
+ }
158
+
142
159
  Chat.Bubble = Bubble;
143
160
 
144
161
  export default Chat;
@@ -1,6 +1,7 @@
1
1
  import React, { forwardRef } from "react";
2
2
  import { XMarkIcon } from "@navikt/aksel-icons";
3
- import { useRenameCSS } from "../theme/Theme";
3
+ import { useRenameCSS, useThemeInternal } from "../theme/Theme";
4
+ import { AkselColor } from "../types";
4
5
  import { composeEventHandlers } from "../util/composeEventHandlers";
5
6
  import { useI18n } from "../util/i18n/i18n.hooks";
6
7
 
@@ -25,27 +26,40 @@ export const RemovableChips = forwardRef<
25
26
  (
26
27
  {
27
28
  children,
28
- variant = "action",
29
+ variant,
29
30
  onDelete,
30
31
  className,
31
32
  onClick,
32
33
  type = "button",
34
+ "data-color": color,
33
35
  ...rest
34
36
  },
35
37
  ref,
36
38
  ) => {
37
39
  const translate = useI18n("Chips");
40
+ const themeContext = useThemeInternal(false);
38
41
  const { cn } = useRenameCSS();
39
42
 
43
+ let localVariant: ChipsRemovableProps["variant"] | undefined;
44
+
45
+ if (themeContext) {
46
+ localVariant = variant;
47
+ } else {
48
+ localVariant = variant ?? "action";
49
+ }
50
+
40
51
  return (
41
52
  <button
53
+ data-color={color ?? variantToColor(localVariant)}
42
54
  {...rest}
43
55
  ref={ref}
44
56
  type={type}
45
57
  className={cn(
46
58
  "navds-chips__chip navds-chips__removable navds-chips--icon-right",
47
59
  className,
48
- `navds-chips__removable--${variant}`,
60
+ {
61
+ [`navds-chips__removable--${localVariant}`]: localVariant,
62
+ },
49
63
  )}
50
64
  aria-label={`${children} ${translate("Removable.labelSuffix")}`}
51
65
  onClick={composeEventHandlers(onClick, onDelete)}
@@ -59,4 +73,17 @@ export const RemovableChips = forwardRef<
59
73
  },
60
74
  );
61
75
 
76
+ function variantToColor(
77
+ variant?: ChipsRemovableProps["variant"],
78
+ ): AkselColor | undefined {
79
+ switch (variant) {
80
+ case "action":
81
+ return "accent";
82
+ case "neutral":
83
+ return "neutral";
84
+ default:
85
+ return undefined;
86
+ }
87
+ }
88
+
62
89
  export default RemovableChips;
@@ -1,5 +1,6 @@
1
1
  import React, { forwardRef } from "react";
2
- import { useRenameCSS } from "../theme/Theme";
2
+ import { useRenameCSS, useThemeInternal } from "../theme/Theme";
3
+ import { AkselColor } from "../types";
3
4
  import { OverridableComponent } from "../util/types";
4
5
 
5
6
  export interface ChipsToggleProps
@@ -30,25 +31,33 @@ export const ToggleChips: OverridableComponent<
30
31
  className,
31
32
  children,
32
33
  selected,
33
- variant = "action",
34
+ variant,
34
35
  checkmark = true,
35
36
  as: Component = "button",
37
+ "data-color": color,
36
38
  ...rest
37
39
  },
38
40
  ref,
39
41
  ) => {
40
42
  const { cn } = useRenameCSS();
43
+ const themeContext = useThemeInternal(false);
44
+ let localVariant: ChipsToggleProps["variant"] | undefined;
45
+
46
+ if (themeContext) {
47
+ localVariant = variant;
48
+ } else {
49
+ localVariant = variant ?? "action";
50
+ }
41
51
 
42
52
  return (
43
53
  <Component
54
+ data-color={color ?? variantToColor(localVariant)}
44
55
  {...rest}
45
56
  ref={ref}
46
- className={cn(
47
- "navds-chips__chip navds-chips__toggle",
48
- className,
49
- `navds-chips__toggle--${variant}`,
50
- { "navds-chips__toggle--with-checkmark": checkmark },
51
- )}
57
+ className={cn("navds-chips__chip navds-chips__toggle", className, {
58
+ "navds-chips__toggle--with-checkmark": checkmark,
59
+ [`navds-chips__toggle--${localVariant}`]: localVariant,
60
+ })}
52
61
  aria-pressed={selected}
53
62
  data-pressed={selected}
54
63
  >
@@ -77,11 +86,7 @@ export const ToggleChips: OverridableComponent<
77
86
  clipRule="evenodd"
78
87
  d="M10 3.125C6.20304 3.125 3.125 6.20304 3.125 10C3.125 13.797 6.20304 16.875 10 16.875C13.797 16.875 16.875 13.797 16.875 10C16.875 6.20304 13.797 3.125 10 3.125ZM1.875 10C1.875 5.51269 5.51269 1.875 10 1.875C14.4873 1.875 18.125 5.51269 18.125 10C18.125 14.4873 14.4873 18.125 10 18.125C5.51269 18.125 1.875 14.4873 1.875 10Z"
79
88
  /* After removing old fallbacks, change to currentColor */
80
- fill={`var(${
81
- variant === "action"
82
- ? "--ax-text-accent"
83
- : "--ax-text-neutral"
84
- }, var(--ac-chip-toggle-circle-border, var(--a-border-default)))`}
89
+ fill="var(--ax-text-default, var(--ac-chip-toggle-circle-border, var(--a-border-default)))"
85
90
  />
86
91
  )}
87
92
  </svg>
@@ -92,4 +97,17 @@ export const ToggleChips: OverridableComponent<
92
97
  },
93
98
  );
94
99
 
100
+ function variantToColor(
101
+ variant?: ChipsToggleProps["variant"],
102
+ ): AkselColor | undefined {
103
+ switch (variant) {
104
+ case "action":
105
+ return "accent";
106
+ case "neutral":
107
+ return "neutral";
108
+ default:
109
+ return undefined;
110
+ }
111
+ }
112
+
95
113
  export default ToggleChips;
@@ -113,6 +113,7 @@ export const ExpansionCard = forwardRef<HTMLDivElement, ExpansionCardProps>(
113
113
  open,
114
114
  defaultOpen = false,
115
115
  size = "medium",
116
+ "data-color": color = "neutral",
116
117
  ...rest
117
118
  },
118
119
  ref,
@@ -138,6 +139,7 @@ export const ExpansionCard = forwardRef<HTMLDivElement, ExpansionCardProps>(
138
139
  }}
139
140
  >
140
141
  <section
142
+ data-color={color}
141
143
  {...rest}
142
144
  className={cn(
143
145
  "navds-expansioncard",
@@ -27,6 +27,7 @@ export const Checkbox = forwardRef<HTMLInputElement, CheckboxProps>(
27
27
  "navds-checkbox--readonly": readOnly,
28
28
  },
29
29
  )}
30
+ data-color={hasError ? "danger" : props["data-color"]}
30
31
  >
31
32
  <input
32
33
  {...omit(props, [
@@ -27,7 +27,12 @@ const Option = ({ option }: { option: ComboboxOption }) => {
27
27
 
28
28
  if (readOnly || inputProps.disabled) {
29
29
  return (
30
- <Chips.Toggle variant="neutral" checkmark={false} as="div">
30
+ <Chips.Toggle
31
+ data-color="neutral"
32
+ variant="neutral"
33
+ checkmark={false}
34
+ as="div"
35
+ >
31
36
  {option.label}
32
37
  </Chips.Toggle>
33
38
  );
@@ -60,7 +60,7 @@ export const ConfirmationPanel = forwardRef<
60
60
 
61
61
  const id = useId();
62
62
 
63
- const currentRole = hasError
63
+ const currentColor = hasError
64
64
  ? "danger"
65
65
  : props.checked
66
66
  ? "success"
@@ -73,7 +73,7 @@ export const ConfirmationPanel = forwardRef<
73
73
  "navds-confirmation-panel--error": hasError,
74
74
  "navds-confirmation-panel--checked": !!props.checked,
75
75
  })}
76
- data-color-role={currentRole}
76
+ data-color={currentColor}
77
77
  >
78
78
  <div className={cn("navds-confirmation-panel__inner")}>
79
79
  {children && (
@@ -105,7 +105,7 @@ export const ErrorSummary = forwardRef<HTMLDivElement, ErrorSummaryProps>(
105
105
  <Heading
106
106
  className={cn("navds-error-summary__heading")}
107
107
  as={headingTag}
108
- size="small"
108
+ size={size === "medium" ? "small" : "xsmall"}
109
109
  ref={headingRef}
110
110
  tabIndex={-1}
111
111
  >
@@ -12,18 +12,29 @@ export interface FormSummaryAnswersProps
12
12
  export const FormSummaryAnswers = forwardRef<
13
13
  HTMLDListElement,
14
14
  FormSummaryAnswersProps
15
- >(({ children, className, ...rest }: FormSummaryAnswersProps, ref) => {
16
- const { cn } = useRenameCSS();
15
+ >(
16
+ (
17
+ {
18
+ children,
19
+ className,
20
+ "data-color": color = "info",
21
+ ...rest
22
+ }: FormSummaryAnswersProps,
23
+ ref,
24
+ ) => {
25
+ const { cn } = useRenameCSS();
17
26
 
18
- return (
19
- <dl
20
- ref={ref}
21
- {...rest}
22
- className={cn("navds-form-summary__answers", className)}
23
- >
24
- {children}
25
- </dl>
26
- );
27
- });
27
+ return (
28
+ <dl
29
+ ref={ref}
30
+ data-color={color}
31
+ {...rest}
32
+ className={cn("navds-form-summary__answers", className)}
33
+ >
34
+ {children}
35
+ </dl>
36
+ );
37
+ },
38
+ );
28
39
 
29
40
  export default FormSummaryAnswers;
@@ -21,6 +21,7 @@ export const Radio = forwardRef<HTMLInputElement, RadioProps>((props, ref) => {
21
21
  "navds-radio--disabled": inputProps.disabled,
22
22
  "navds-radio--readonly": readOnly,
23
23
  })}
24
+ data-color={hasError ? "danger" : props["data-color"]}
24
25
  >
25
26
  <input
26
27
  {...omit(props, ["children", "size", "description", "readOnly"])}
@@ -91,7 +91,7 @@ interface SearchComponent
91
91
  * @example
92
92
  * ```jsx
93
93
  * <form role="search">
94
- * <Search label="Søk alle Nav sine sider" variant="primary" />
94
+ * <Search label="Søk i alle Nav sine sider" variant="primary" />
95
95
  * </form>
96
96
  * ```
97
97
  */
@@ -126,11 +126,9 @@ export const Search = forwardRef<HTMLInputElement, SearchProps>(
126
126
 
127
127
  const { cn } = useRenameCSS();
128
128
 
129
- const themeContext = useThemeInternal(false);
130
-
131
129
  const searchRef = useRef<HTMLInputElement | null>(null);
132
130
  const mergedRef = useMergeRefs(searchRef, ref);
133
- const translate = useI18n("Search");
131
+
134
132
  const [internalValue, setInternalValue] = useState(defaultValue ?? "");
135
133
 
136
134
  const handleChange = (newValue: string) => {
@@ -151,32 +149,6 @@ export const Search = forwardRef<HTMLInputElement, SearchProps>(
151
149
  const showClearButton =
152
150
  clearButton && !inputProps.disabled && (value ?? internalValue);
153
151
 
154
- const ClearButton = () =>
155
- themeContext ? (
156
- <Button
157
- className={cn("navds-search__button-clear")}
158
- variant="tertiary-neutral"
159
- size={size === "medium" ? "small" : "xsmall"}
160
- icon={<XMarkIcon aria-hidden />}
161
- title={clearButtonLabel || translate("clear")}
162
- hidden={!showClearButton}
163
- onClick={(event) => handleClear({ trigger: "Click", event })}
164
- type="button"
165
- />
166
- ) : (
167
- <button
168
- type="button"
169
- onClick={(event) => handleClear({ trigger: "Click", event })}
170
- className={cn("navds-search__button-clear")}
171
- hidden={!showClearButton}
172
- >
173
- <span className={cn("navds-sr-only")}>
174
- {clearButtonLabel || translate("clear")}
175
- </span>
176
- <XMarkIcon aria-hidden />
177
- </button>
178
- );
179
-
180
152
  return (
181
153
  // eslint-disable-next-line jsx-a11y/no-static-element-interactions
182
154
  <div
@@ -245,7 +217,13 @@ export const Search = forwardRef<HTMLInputElement, SearchProps>(
245
217
  )}
246
218
  {...(htmlSize ? { size: Number(htmlSize) } : {})}
247
219
  />
248
- <ClearButton />
220
+ {showClearButton && (
221
+ <ClearButton
222
+ handleClear={handleClear}
223
+ size={size}
224
+ clearButtonLabel={clearButtonLabel}
225
+ />
226
+ )}
249
227
  </div>
250
228
  <SearchContext.Provider
251
229
  value={{
@@ -275,6 +253,45 @@ export const Search = forwardRef<HTMLInputElement, SearchProps>(
275
253
  },
276
254
  ) as SearchComponent;
277
255
 
256
+ type SearchClearButtonProps = Pick<SearchProps, "size" | "clearButtonLabel"> & {
257
+ handleClear: (clearEvent: SearchClearEvent) => void;
258
+ };
259
+
260
+ function ClearButton({
261
+ size,
262
+ clearButtonLabel,
263
+ handleClear,
264
+ }: SearchClearButtonProps) {
265
+ const { cn } = useRenameCSS();
266
+
267
+ const themeContext = useThemeInternal(false);
268
+ const translate = useI18n("Search");
269
+
270
+ return themeContext ? (
271
+ <Button
272
+ className={cn("navds-search__button-clear")}
273
+ variant="tertiary"
274
+ data-color="neutral"
275
+ size={size === "medium" ? "small" : "xsmall"}
276
+ icon={<XMarkIcon aria-hidden />}
277
+ title={clearButtonLabel || translate("clear")}
278
+ onClick={(event) => handleClear({ trigger: "Click", event })}
279
+ type="button"
280
+ />
281
+ ) : (
282
+ <button
283
+ type="button"
284
+ onClick={(event) => handleClear({ trigger: "Click", event })}
285
+ className={cn("navds-search__button-clear")}
286
+ >
287
+ <span className={cn("navds-sr-only")}>
288
+ {clearButtonLabel || translate("clear")}
289
+ </span>
290
+ <XMarkIcon aria-hidden />
291
+ </button>
292
+ );
293
+ }
294
+
278
295
  Search.Button = SearchButton;
279
296
 
280
297
  export default Search;
@@ -35,12 +35,23 @@ export interface GuidePanelProps extends HTMLAttributes<HTMLDivElement> {
35
35
  * ```
36
36
  */
37
37
  export const GuidePanel = forwardRef<HTMLDivElement, GuidePanelProps>(
38
- ({ children, className, illustration, poster, ...rest }, ref) => {
38
+ (
39
+ {
40
+ children,
41
+ className,
42
+ illustration,
43
+ poster,
44
+ "data-color": color = "info",
45
+ ...rest
46
+ },
47
+ ref,
48
+ ) => {
39
49
  const { cn } = useRenameCSS();
40
50
  const themeContext = useThemeInternal(false);
41
51
 
42
52
  return (
43
53
  <div
54
+ data-color={color}
44
55
  {...rest}
45
56
  ref={ref}
46
57
  className={cn("navds-guide-panel", className, {
@@ -81,7 +92,7 @@ export const GuidePanel = forwardRef<HTMLDivElement, GuidePanelProps>(
81
92
  fillRule="evenodd"
82
93
  clipRule="evenodd"
83
94
  d="M0 20C-2.87106e-10 19.9934 3.21047e-05 19.987 9.68646e-05 19.9804C0.0494722 14.9659 0.299239 11.5341 0.964025 8.68212C1.64231 5.77217 2.72947 3.56367 4.28501 0.971094C4.71185 0.259692 5.53358 -0.114327 6.35038 0.0310157C7.16718 0.176359 7.80944 0.810884 7.96467 1.62586C8.84145 6.22896 11.9453 10.3172 16.2599 13.2908C20.5715 16.2623 25.9294 18.0001 31 18.0001C32.1046 18.0001 33 18.8954 33 20L0 20ZM6.755 4.70521C8.97688 10.7068 14.4934 15.469 20.8803 18.0001C24.1345 19.2897 27.6146 20.0001 31 20.0001L2 20.0001C2.00689 19.3003 2.01774 18.6346 2.033 18.0001C2.19625 11.2107 2.86405 7.98363 4.58479 4.54371C4.9944 3.72487 5.46367 2.89399 6 2.00011C6.17639 2.92619 6.43058 3.82889 6.755 4.70521Z"
84
- fill="var(--ax-border-info)"
95
+ fill="var(--ax-border-default)"
85
96
  />
86
97
  </svg>
87
98
  )}
@@ -16,12 +16,7 @@ export const DarksideGudiepanelIllustration = () => {
16
16
  role="img"
17
17
  >
18
18
  <g clipPath="url(#clip0_1387_21067)">
19
- <rect
20
- width="80"
21
- height="80"
22
- rx="40"
23
- fill="var(--ax-bg-info-moderate)"
24
- />
19
+ <rect width="80" height="80" rx="40" fill="var(--ax-bg-moderate)" />
25
20
 
26
21
  <path
27
22
  fillRule="evenodd"
@@ -44,6 +44,7 @@ export const HelpText = forwardRef<HTMLButtonElement, HelpTextProps>(
44
44
  title,
45
45
  onClick,
46
46
  wrapperClassName,
47
+ "data-color": color = "info",
47
48
  ...rest
48
49
  },
49
50
  ref,
@@ -58,7 +59,10 @@ export const HelpText = forwardRef<HTMLButtonElement, HelpTextProps>(
58
59
  const titleWithFallback = title || translate("title");
59
60
 
60
61
  return (
61
- <div className={cn("navds-help-text", wrapperClassName)}>
62
+ <div
63
+ className={cn("navds-help-text", wrapperClassName)}
64
+ data-color={color}
65
+ >
62
66
  <button
63
67
  {...rest}
64
68
  ref={mergedRef}
@@ -1,10 +1,10 @@
1
1
  import React, { forwardRef } from "react";
2
2
  import type {
3
- BorderColorKeys,
4
- BorderColorWithRoleKeys,
5
- ShadowKeys,
6
- StaticBgKeys,
7
- StaticDefaultBgKeys,
3
+ AkselColoredBorderToken,
4
+ AkselColoredStatelessBackgroundToken,
5
+ AkselRootBackgroundToken,
6
+ AkselRootBorderToken,
7
+ AkselShadowToken,
8
8
  } from "@navikt/ds-tokens/types";
9
9
  import { Slot } from "../../slot/Slot";
10
10
  import { useRenameCSS } from "../../theme/Theme";
@@ -28,13 +28,15 @@ export type BoxNewProps = React.HTMLAttributes<HTMLDivElement> & {
28
28
  * Accepts a [background/surface color token](https://aksel.nav.no/grunnleggende/styling/design-tokens#afff774dad80).
29
29
  * @see {@link StaticDefaultBgKeys} and {@link StaticBgKeys}
30
30
  */
31
- background?: StaticDefaultBgKeys | StaticBgKeys;
31
+ background?: AkselRootBackgroundToken | AkselColoredStatelessBackgroundToken;
32
32
  /**
33
33
  * CSS `border-color` property.
34
34
  * Accepts a [border color token](https://aksel.nav.no/grunnleggende/styling/design-tokens#adb1767e2f87).
35
35
  * @see {@link BorderColorKeys} and {@link BorderColorWithRoleKeys}
36
36
  */
37
- borderColor?: Exclude<BorderColorKeys, "focus"> | BorderColorWithRoleKeys;
37
+ borderColor?:
38
+ | Exclude<AkselRootBorderToken, "focus">
39
+ | AkselColoredBorderToken;
38
40
  /**
39
41
  * CSS `border-radius` property.
40
42
  * Accepts a [radius token](https://aksel.nav.no/grunnleggende/styling/design-tokens#6d79c5605d31)
@@ -60,7 +62,7 @@ export type BoxNewProps = React.HTMLAttributes<HTMLDivElement> & {
60
62
  * shadow='small'
61
63
  * @see {@link ShadowKeys}
62
64
  */
63
- shadow?: ShadowKeys;
65
+ shadow?: AkselShadowToken;
64
66
  } & PrimitiveProps &
65
67
  PrimitiveAsChildProps;
66
68