@navikt/ds-react 7.22.0 → 7.23.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.
- package/cjs/alert/Alert.d.ts +4 -0
- package/cjs/alert/Alert.js +15 -1
- package/cjs/alert/Alert.js.map +1 -1
- package/cjs/button/Button.js +30 -2
- package/cjs/button/Button.js.map +1 -1
- package/cjs/chat/Chat.js +14 -2
- package/cjs/chat/Chat.js.map +1 -1
- package/cjs/chips/Removable.js +22 -2
- package/cjs/chips/Removable.js.map +1 -1
- package/cjs/chips/Toggle.js +24 -5
- package/cjs/chips/Toggle.js.map +1 -1
- package/cjs/expansion-card/ExpansionCard.js +2 -2
- package/cjs/expansion-card/ExpansionCard.js.map +1 -1
- package/cjs/form/checkbox/Checkbox.js +1 -1
- package/cjs/form/checkbox/Checkbox.js.map +1 -1
- package/cjs/form/combobox/SelectedOptions/SelectedOptions.js +1 -1
- package/cjs/form/combobox/SelectedOptions/SelectedOptions.js.map +1 -1
- package/cjs/form/confirmation-panel/ConfirmationPanel.js +2 -2
- package/cjs/form/confirmation-panel/ConfirmationPanel.js.map +1 -1
- package/cjs/form/error-summary/ErrorSummary.js +1 -1
- package/cjs/form/error-summary/ErrorSummary.js.map +1 -1
- package/cjs/form/form-summary/FormSummaryAnswers.js +2 -2
- package/cjs/form/form-summary/FormSummaryAnswers.js.map +1 -1
- package/cjs/form/radio/Radio.js +1 -1
- package/cjs/form/radio/Radio.js.map +1 -1
- package/cjs/form/search/Search.d.ts +1 -1
- package/cjs/form/search/Search.js +2 -2
- package/cjs/form/search/Search.js.map +1 -1
- package/cjs/guide-panel/GuidePanel.js +3 -3
- package/cjs/guide-panel/GuidePanel.js.map +1 -1
- package/cjs/guide-panel/Illustration.darkside.js +1 -1
- package/cjs/guide-panel/Illustration.darkside.js.map +1 -1
- package/cjs/help-text/HelpText.js +2 -2
- package/cjs/help-text/HelpText.js.map +1 -1
- package/cjs/layout/box/Box.darkside.d.ts +4 -4
- package/cjs/layout/box/Box.darkside.js.map +1 -1
- package/cjs/layout/utilities/types.d.ts +8 -8
- package/cjs/link/Link.js +26 -2
- package/cjs/link/Link.js.map +1 -1
- package/cjs/loader/Loader.d.ts +5 -0
- package/cjs/loader/Loader.js +15 -2
- package/cjs/loader/Loader.js.map +1 -1
- package/cjs/overlays/action-menu/ActionMenu.js +5 -5
- package/cjs/overlays/action-menu/ActionMenu.js.map +1 -1
- package/cjs/pagination/Pagination.js +5 -7
- package/cjs/pagination/Pagination.js.map +1 -1
- package/cjs/pagination/PaginationItem.js +2 -2
- package/cjs/pagination/PaginationItem.js.map +1 -1
- package/cjs/portal/Portal.js +1 -1
- package/cjs/portal/Portal.js.map +1 -1
- package/cjs/stepper/Stepper.js +3 -2
- package/cjs/stepper/Stepper.js.map +1 -1
- package/cjs/tag/Tag.js +39 -3
- package/cjs/tag/Tag.js.map +1 -1
- package/cjs/theme/Theme.d.ts +10 -1
- package/cjs/theme/Theme.js +3 -3
- package/cjs/theme/Theme.js.map +1 -1
- package/cjs/timeline/Pin.js +1 -3
- package/cjs/timeline/Pin.js.map +1 -1
- package/cjs/timeline/period/ClickablePeriod.js +3 -5
- package/cjs/timeline/period/ClickablePeriod.js.map +1 -1
- package/cjs/timeline/period/NonClickablePeriod.js +2 -1
- package/cjs/timeline/period/NonClickablePeriod.js.map +1 -1
- package/cjs/timeline/utils/period.d.ts +1 -1
- package/cjs/timeline/utils/period.js.map +1 -1
- package/cjs/toggle-group/ToggleGroup.js +21 -3
- package/cjs/toggle-group/ToggleGroup.js.map +1 -1
- package/cjs/types/index.d.ts +1 -0
- package/cjs/types/index.js +18 -0
- package/cjs/types/index.js.map +1 -0
- package/esm/alert/Alert.d.ts +4 -0
- package/esm/alert/Alert.js +15 -1
- package/esm/alert/Alert.js.map +1 -1
- package/esm/button/Button.js +30 -2
- package/esm/button/Button.js.map +1 -1
- package/esm/chat/Chat.js +14 -2
- package/esm/chat/Chat.js.map +1 -1
- package/esm/chips/Removable.js +23 -3
- package/esm/chips/Removable.js.map +1 -1
- package/esm/chips/Toggle.js +25 -6
- package/esm/chips/Toggle.js.map +1 -1
- package/esm/expansion-card/ExpansionCard.js +2 -2
- package/esm/expansion-card/ExpansionCard.js.map +1 -1
- package/esm/form/checkbox/Checkbox.js +1 -1
- package/esm/form/checkbox/Checkbox.js.map +1 -1
- package/esm/form/combobox/SelectedOptions/SelectedOptions.js +1 -1
- package/esm/form/combobox/SelectedOptions/SelectedOptions.js.map +1 -1
- package/esm/form/confirmation-panel/ConfirmationPanel.js +2 -2
- package/esm/form/confirmation-panel/ConfirmationPanel.js.map +1 -1
- package/esm/form/error-summary/ErrorSummary.js +1 -1
- package/esm/form/error-summary/ErrorSummary.js.map +1 -1
- package/esm/form/form-summary/FormSummaryAnswers.js +2 -2
- package/esm/form/form-summary/FormSummaryAnswers.js.map +1 -1
- package/esm/form/radio/Radio.js +1 -1
- package/esm/form/radio/Radio.js.map +1 -1
- package/esm/form/search/Search.d.ts +1 -1
- package/esm/form/search/Search.js +2 -2
- package/esm/form/search/Search.js.map +1 -1
- package/esm/guide-panel/GuidePanel.js +3 -3
- package/esm/guide-panel/GuidePanel.js.map +1 -1
- package/esm/guide-panel/Illustration.darkside.js +1 -1
- package/esm/guide-panel/Illustration.darkside.js.map +1 -1
- package/esm/help-text/HelpText.js +2 -2
- package/esm/help-text/HelpText.js.map +1 -1
- package/esm/layout/box/Box.darkside.d.ts +4 -4
- package/esm/layout/box/Box.darkside.js.map +1 -1
- package/esm/layout/utilities/types.d.ts +8 -8
- package/esm/link/Link.js +27 -3
- package/esm/link/Link.js.map +1 -1
- package/esm/loader/Loader.d.ts +5 -0
- package/esm/loader/Loader.js +15 -2
- package/esm/loader/Loader.js.map +1 -1
- package/esm/overlays/action-menu/ActionMenu.js +5 -5
- package/esm/overlays/action-menu/ActionMenu.js.map +1 -1
- package/esm/pagination/Pagination.js +5 -7
- package/esm/pagination/Pagination.js.map +1 -1
- package/esm/pagination/PaginationItem.js +2 -2
- package/esm/pagination/PaginationItem.js.map +1 -1
- package/esm/portal/Portal.js +1 -1
- package/esm/portal/Portal.js.map +1 -1
- package/esm/stepper/Stepper.js +3 -2
- package/esm/stepper/Stepper.js.map +1 -1
- package/esm/tag/Tag.js +39 -3
- package/esm/tag/Tag.js.map +1 -1
- package/esm/theme/Theme.d.ts +10 -1
- package/esm/theme/Theme.js +3 -3
- package/esm/theme/Theme.js.map +1 -1
- package/esm/timeline/Pin.js +2 -4
- package/esm/timeline/Pin.js.map +1 -1
- package/esm/timeline/period/ClickablePeriod.js +4 -6
- package/esm/timeline/period/ClickablePeriod.js.map +1 -1
- package/esm/timeline/period/NonClickablePeriod.js +2 -1
- package/esm/timeline/period/NonClickablePeriod.js.map +1 -1
- package/esm/timeline/utils/period.d.ts +1 -1
- package/esm/timeline/utils/period.js.map +1 -1
- package/esm/toggle-group/ToggleGroup.js +22 -4
- package/esm/toggle-group/ToggleGroup.js.map +1 -1
- package/esm/types/index.d.ts +1 -0
- package/esm/types/index.js +2 -0
- package/esm/types/index.js.map +1 -0
- package/esm/types/theme.d.ts +15 -0
- package/package.json +12 -7
- package/src/alert/Alert.tsx +22 -0
- package/src/button/Button.tsx +38 -0
- package/src/chat/Chat.tsx +17 -0
- package/src/chips/Removable.tsx +30 -3
- package/src/chips/Toggle.tsx +31 -13
- package/src/expansion-card/ExpansionCard.tsx +2 -0
- package/src/form/checkbox/Checkbox.tsx +1 -0
- package/src/form/combobox/SelectedOptions/SelectedOptions.tsx +6 -1
- package/src/form/confirmation-panel/ConfirmationPanel.tsx +2 -2
- package/src/form/error-summary/ErrorSummary.tsx +1 -1
- package/src/form/form-summary/FormSummaryAnswers.tsx +23 -12
- package/src/form/radio/Radio.tsx +1 -0
- package/src/form/search/Search.tsx +3 -2
- package/src/guide-panel/GuidePanel.tsx +13 -2
- package/src/guide-panel/Illustration.darkside.tsx +1 -6
- package/src/help-text/HelpText.tsx +5 -1
- package/src/layout/box/Box.darkside.tsx +10 -8
- package/src/layout/utilities/css.ts +8 -8
- package/src/layout/utilities/types.ts +18 -16
- package/src/link/Link.tsx +36 -3
- package/src/loader/Loader.tsx +24 -0
- package/src/overlays/action-menu/ActionMenu.tsx +5 -5
- package/src/pagination/Pagination.tsx +5 -0
- package/src/pagination/PaginationItem.tsx +3 -1
- package/src/portal/Portal.tsx +6 -1
- package/src/react-css.d.ts +0 -4
- package/src/stepper/Stepper.tsx +4 -3
- package/src/tag/Tag.tsx +53 -4
- package/src/theme/Theme.tsx +13 -2
- package/src/timeline/Pin.tsx +1 -3
- package/src/timeline/period/ClickablePeriod.tsx +2 -3
- package/src/timeline/period/NonClickablePeriod.tsx +1 -0
- package/src/timeline/utils/period.ts +1 -1
- package/src/toggle-group/ToggleGroup.tsx +28 -3
- package/src/types/index.ts +1 -0
- package/src/types/theme.d.ts +15 -0
|
@@ -669,7 +669,7 @@ export const ActionMenuCheckboxItem = forwardRef<
|
|
|
669
669
|
width="24"
|
|
670
670
|
height="24"
|
|
671
671
|
rx="4"
|
|
672
|
-
fill="var(--ax-bg-
|
|
672
|
+
fill="var(--ax-bg-strong-pressed, var(--a-surface-action-selected))"
|
|
673
673
|
/>
|
|
674
674
|
<rect
|
|
675
675
|
x="6"
|
|
@@ -685,7 +685,7 @@ export const ActionMenuCheckboxItem = forwardRef<
|
|
|
685
685
|
width="24"
|
|
686
686
|
height="24"
|
|
687
687
|
rx="4"
|
|
688
|
-
fill="var(--ax-bg-
|
|
688
|
+
fill="var(--ax-bg-strong-pressed, var(--a-surface-action-selected))"
|
|
689
689
|
/>
|
|
690
690
|
<path
|
|
691
691
|
d="M10.0352 13.4148L16.4752 7.40467C17.0792 6.83965 18.029 6.86933 18.5955 7.47478C19.162 8.08027 19.1296 9.03007 18.5245 9.59621L11.0211 16.5993C10.741 16.859 10.3756 17 10.0002 17C9.60651 17 9.22717 16.8462 8.93914 16.5611L6.43914 14.0611C5.85362 13.4756 5.85362 12.5254 6.43914 11.9399C7.02467 11.3544 7.97483 11.3544 8.56036 11.9399L10.0352 13.4148Z"
|
|
@@ -808,7 +808,7 @@ export const ActionMenuRadioItem = forwardRef<
|
|
|
808
808
|
width="24"
|
|
809
809
|
height="24"
|
|
810
810
|
rx="12"
|
|
811
|
-
fill="var(--ax-bg-
|
|
811
|
+
fill="var(--ax-bg-strong-pressed)"
|
|
812
812
|
/>
|
|
813
813
|
<rect
|
|
814
814
|
x="8"
|
|
@@ -835,12 +835,12 @@ export const ActionMenuRadioItem = forwardRef<
|
|
|
835
835
|
width="22"
|
|
836
836
|
height="22"
|
|
837
837
|
rx="11"
|
|
838
|
-
stroke="var(--ax-bg-
|
|
838
|
+
stroke="var(--ax-bg-strong-pressed, var(--a-surface-action-selected))"
|
|
839
839
|
strokeWidth="2"
|
|
840
840
|
/>
|
|
841
841
|
<path
|
|
842
842
|
d="M20 12C20 16.4178 16.4178 20 12 20C7.58222 20 4 16.4178 4 12C4 7.58222 7.58222 4 12 4C16.4178 4 20 7.58222 20 12Z"
|
|
843
|
-
fill="var(--ax-bg-
|
|
843
|
+
fill="var(--ax-bg-strong-pressed, var(--a-surface-action-selected))"
|
|
844
844
|
/>
|
|
845
845
|
</g>
|
|
846
846
|
)}
|
|
@@ -150,6 +150,7 @@ export const Pagination = forwardRef<HTMLElement, PaginationProps>(
|
|
|
150
150
|
srHeading,
|
|
151
151
|
"aria-labelledby": ariaLabelledBy,
|
|
152
152
|
renderItem: Item = PaginationItem,
|
|
153
|
+
"data-color": color,
|
|
153
154
|
...rest
|
|
154
155
|
},
|
|
155
156
|
ref,
|
|
@@ -179,6 +180,7 @@ export const Pagination = forwardRef<HTMLElement, PaginationProps>(
|
|
|
179
180
|
<nav
|
|
180
181
|
ref={ref}
|
|
181
182
|
{...rest}
|
|
183
|
+
data-color={color}
|
|
182
184
|
aria-labelledby={
|
|
183
185
|
srHeading ? cl(headingId, ariaLabelledBy) : ariaLabelledBy
|
|
184
186
|
}
|
|
@@ -201,6 +203,7 @@ export const Pagination = forwardRef<HTMLElement, PaginationProps>(
|
|
|
201
203
|
<ul className={cn("navds-pagination__list")}>
|
|
202
204
|
<li>
|
|
203
205
|
<Item
|
|
206
|
+
data-color={color}
|
|
204
207
|
className={cn("navds-pagination__prev-next", {
|
|
205
208
|
"navds-pagination--invisible": page === 1,
|
|
206
209
|
"navds-pagination--prev-next--with-text": prevNextTexts,
|
|
@@ -238,6 +241,7 @@ export const Pagination = forwardRef<HTMLElement, PaginationProps>(
|
|
|
238
241
|
) : (
|
|
239
242
|
<li key={step}>
|
|
240
243
|
<Item
|
|
244
|
+
data-color={color}
|
|
241
245
|
/* Remember to update RenderItemProps if you make changes to props sent into Item */
|
|
242
246
|
onClick={() => onPageChange?.(n)}
|
|
243
247
|
selected={page === n}
|
|
@@ -252,6 +256,7 @@ export const Pagination = forwardRef<HTMLElement, PaginationProps>(
|
|
|
252
256
|
)}
|
|
253
257
|
<li>
|
|
254
258
|
<Item
|
|
259
|
+
data-color={color}
|
|
255
260
|
className={cn("navds-pagination__prev-next", {
|
|
256
261
|
"navds-pagination--invisible": page === count,
|
|
257
262
|
"navds-pagination--prev-next--with-text": prevNextTexts,
|
|
@@ -35,6 +35,7 @@ export const Item: PaginationItemType = forwardRef(
|
|
|
35
35
|
selected = false,
|
|
36
36
|
className,
|
|
37
37
|
page,
|
|
38
|
+
"data-color": color,
|
|
38
39
|
...rest
|
|
39
40
|
},
|
|
40
41
|
ref,
|
|
@@ -46,8 +47,9 @@ export const Item: PaginationItemType = forwardRef(
|
|
|
46
47
|
<Button
|
|
47
48
|
as={Component}
|
|
48
49
|
variant={themeContext ? "tertiary-neutral" : "tertiary"}
|
|
50
|
+
data-color={color}
|
|
49
51
|
aria-current={selected}
|
|
50
|
-
data-
|
|
52
|
+
data-pressed={selected}
|
|
51
53
|
ref={ref}
|
|
52
54
|
className={cn("navds-pagination__item", className, {
|
|
53
55
|
"navds-pagination__item--selected": selected,
|
package/src/portal/Portal.tsx
CHANGED
|
@@ -29,7 +29,12 @@ export const Portal = forwardRef<HTMLDivElement, PortalProps>(
|
|
|
29
29
|
if (themeContext) {
|
|
30
30
|
return root
|
|
31
31
|
? ReactDOM.createPortal(
|
|
32
|
-
<Theme
|
|
32
|
+
<Theme
|
|
33
|
+
theme={themeContext.theme}
|
|
34
|
+
asChild
|
|
35
|
+
hasBackground={false}
|
|
36
|
+
data-color={themeContext.color}
|
|
37
|
+
>
|
|
33
38
|
<Component ref={ref} data-aksel-portal="" {...rest} />
|
|
34
39
|
</Theme>,
|
|
35
40
|
root,
|
package/src/react-css.d.ts
CHANGED
|
@@ -1,5 +1,4 @@
|
|
|
1
1
|
import "react";
|
|
2
|
-
import type { GlobalColorRoles } from "@navikt/ds-tokens/types";
|
|
3
2
|
|
|
4
3
|
declare module "react" {
|
|
5
4
|
interface CSSProperties {
|
|
@@ -8,7 +7,4 @@ declare module "react" {
|
|
|
8
7
|
[key: `--axc-${string}`]: string | number | undefined;
|
|
9
8
|
[key: `--__axc-${string}`]: string | number | undefined;
|
|
10
9
|
}
|
|
11
|
-
interface HTMLAttributes {
|
|
12
|
-
"data-color-role"?: GlobalColorRoles;
|
|
13
|
-
}
|
|
14
10
|
}
|
package/src/stepper/Stepper.tsx
CHANGED
|
@@ -100,16 +100,17 @@ export const Stepper: StepperComponent = forwardRef<
|
|
|
100
100
|
const stepProps: Partial<StepperStepProps> =
|
|
101
101
|
React.isValidElement<StepperStepProps>(step) ? step.props : {};
|
|
102
102
|
|
|
103
|
+
const isInteractive = stepProps.interactive ?? interactive;
|
|
104
|
+
|
|
103
105
|
return (
|
|
104
106
|
<li
|
|
105
107
|
className={cn("navds-stepper__item", {
|
|
106
108
|
/* TODO: Remove these 3 classNames in darkmode update */
|
|
107
109
|
"navds-stepper__item--behind": activeStep > index,
|
|
108
110
|
"navds-stepper__item--completed": stepProps.completed,
|
|
109
|
-
"navds-stepper__item--non-interactive": !
|
|
110
|
-
stepProps.interactive ?? interactive
|
|
111
|
-
),
|
|
111
|
+
"navds-stepper__item--non-interactive": !isInteractive,
|
|
112
112
|
})}
|
|
113
|
+
data-color={isInteractive ? undefined : "neutral"}
|
|
113
114
|
key={index + (children?.toString?.() ?? "")}
|
|
114
115
|
>
|
|
115
116
|
<span
|
package/src/tag/Tag.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 { BodyShort } from "../typography";
|
|
4
5
|
|
|
5
6
|
export interface TagProps extends HTMLAttributes<HTMLSpanElement> {
|
|
@@ -62,14 +63,26 @@ export interface TagProps extends HTMLAttributes<HTMLSpanElement> {
|
|
|
62
63
|
* ```
|
|
63
64
|
*/
|
|
64
65
|
export const Tag = forwardRef<HTMLSpanElement, TagProps>(
|
|
65
|
-
(
|
|
66
|
+
(
|
|
67
|
+
{
|
|
68
|
+
children,
|
|
69
|
+
className,
|
|
70
|
+
variant,
|
|
71
|
+
size = "medium",
|
|
72
|
+
icon,
|
|
73
|
+
"data-color": color,
|
|
74
|
+
...rest
|
|
75
|
+
},
|
|
76
|
+
ref,
|
|
77
|
+
) => {
|
|
66
78
|
const { cn } = useRenameCSS();
|
|
67
79
|
const filledVariant = variant?.endsWith("-filled") && "strong";
|
|
68
80
|
const moderateVariant = variant?.endsWith("-moderate") && "moderate";
|
|
69
|
-
const color = variant?.replace("-filled", "").replace("-moderate", "");
|
|
70
81
|
|
|
71
82
|
return (
|
|
72
83
|
<BodyShort
|
|
84
|
+
data-color={color ?? variantToColor(variant)}
|
|
85
|
+
data-variant={filledVariant || moderateVariant || "outline"}
|
|
73
86
|
{...rest}
|
|
74
87
|
ref={ref}
|
|
75
88
|
as="span"
|
|
@@ -79,8 +92,6 @@ export const Tag = forwardRef<HTMLSpanElement, TagProps>(
|
|
|
79
92
|
className,
|
|
80
93
|
`navds-tag--${variant}`,
|
|
81
94
|
`navds-tag--${size}`,
|
|
82
|
-
`navds-tag--${filledVariant || moderateVariant || "outline"}`,
|
|
83
|
-
`navds-tag--${color}`,
|
|
84
95
|
)}
|
|
85
96
|
>
|
|
86
97
|
{icon && <span className={cn("navds-tag__icon--left")}>{icon}</span>}
|
|
@@ -90,4 +101,42 @@ export const Tag = forwardRef<HTMLSpanElement, TagProps>(
|
|
|
90
101
|
},
|
|
91
102
|
);
|
|
92
103
|
|
|
104
|
+
function variantToColor(variant: TagProps["variant"]): AkselColor {
|
|
105
|
+
switch (variant) {
|
|
106
|
+
case "warning":
|
|
107
|
+
case "warning-filled":
|
|
108
|
+
case "warning-moderate":
|
|
109
|
+
return "warning";
|
|
110
|
+
case "error":
|
|
111
|
+
case "error-filled":
|
|
112
|
+
case "error-moderate":
|
|
113
|
+
return "danger";
|
|
114
|
+
case "info":
|
|
115
|
+
case "info-filled":
|
|
116
|
+
case "info-moderate":
|
|
117
|
+
case "alt3":
|
|
118
|
+
case "alt3-filled":
|
|
119
|
+
case "alt3-moderate":
|
|
120
|
+
return "info";
|
|
121
|
+
case "success":
|
|
122
|
+
case "success-filled":
|
|
123
|
+
case "success-moderate":
|
|
124
|
+
return "success";
|
|
125
|
+
case "neutral":
|
|
126
|
+
case "neutral-filled":
|
|
127
|
+
case "neutral-moderate":
|
|
128
|
+
return "neutral";
|
|
129
|
+
case "alt1":
|
|
130
|
+
case "alt1-filled":
|
|
131
|
+
case "alt1-moderate":
|
|
132
|
+
return "meta-purple";
|
|
133
|
+
case "alt2":
|
|
134
|
+
case "alt2-filled":
|
|
135
|
+
case "alt2-moderate":
|
|
136
|
+
return "meta-lime";
|
|
137
|
+
default:
|
|
138
|
+
return "neutral";
|
|
139
|
+
}
|
|
140
|
+
}
|
|
141
|
+
|
|
93
142
|
export default Tag;
|
package/src/theme/Theme.tsx
CHANGED
|
@@ -1,6 +1,7 @@
|
|
|
1
1
|
import cl from "clsx";
|
|
2
2
|
import React, { forwardRef } from "react";
|
|
3
3
|
import { Slot } from "../slot/Slot";
|
|
4
|
+
import { AkselColor } from "../types";
|
|
4
5
|
import { createContext } from "../util/create-context";
|
|
5
6
|
import { AsChildProps } from "../util/types";
|
|
6
7
|
|
|
@@ -50,6 +51,7 @@ type ThemeContext = {
|
|
|
50
51
|
* @default Inherits parent theme, or "light" if root
|
|
51
52
|
*/
|
|
52
53
|
theme?: "light" | "dark";
|
|
54
|
+
color?: AkselColor;
|
|
53
55
|
};
|
|
54
56
|
|
|
55
57
|
const [ThemeProvider, useThemeInternal] = createContext<ThemeContext>({
|
|
@@ -60,8 +62,15 @@ const [ThemeProvider, useThemeInternal] = createContext<ThemeContext>({
|
|
|
60
62
|
|
|
61
63
|
export type ThemeProps = {
|
|
62
64
|
className?: string;
|
|
65
|
+
/**
|
|
66
|
+
* Sets default background when enabled
|
|
67
|
+
*/
|
|
63
68
|
hasBackground?: boolean;
|
|
64
|
-
|
|
69
|
+
/**
|
|
70
|
+
* Sets default 'base'-color for application
|
|
71
|
+
*/
|
|
72
|
+
"data-color"?: AkselColor;
|
|
73
|
+
} & Omit<ThemeContext, "color"> &
|
|
65
74
|
AsChildProps;
|
|
66
75
|
|
|
67
76
|
const Theme = forwardRef<HTMLDivElement, ThemeProps>(
|
|
@@ -74,6 +83,7 @@ const Theme = forwardRef<HTMLDivElement, ThemeProps>(
|
|
|
74
83
|
asChild = false,
|
|
75
84
|
theme = context?.theme,
|
|
76
85
|
hasBackground: hasBackgroundProp = true,
|
|
86
|
+
"data-color": color = context?.color,
|
|
77
87
|
} = props;
|
|
78
88
|
|
|
79
89
|
const isRoot = context === undefined;
|
|
@@ -84,12 +94,13 @@ const Theme = forwardRef<HTMLDivElement, ThemeProps>(
|
|
|
84
94
|
const SlotElement = asChild ? Slot : "div";
|
|
85
95
|
|
|
86
96
|
return (
|
|
87
|
-
<ThemeProvider theme={theme}>
|
|
97
|
+
<ThemeProvider theme={theme} color={color}>
|
|
88
98
|
<RenameCSS>
|
|
89
99
|
<SlotElement
|
|
90
100
|
ref={ref}
|
|
91
101
|
className={cl("aksel-theme", className, theme)}
|
|
92
102
|
data-background={hasBackground}
|
|
103
|
+
data-color={color}
|
|
93
104
|
>
|
|
94
105
|
{children}
|
|
95
106
|
</SlotElement>
|
package/src/timeline/Pin.tsx
CHANGED
|
@@ -11,7 +11,6 @@ import {
|
|
|
11
11
|
useFocus,
|
|
12
12
|
useHover,
|
|
13
13
|
useInteractions,
|
|
14
|
-
useRole,
|
|
15
14
|
} from "@floating-ui/react";
|
|
16
15
|
import { format } from "date-fns";
|
|
17
16
|
import React, { forwardRef, useRef, useState } from "react";
|
|
@@ -79,13 +78,11 @@ export const Pin = forwardRef<HTMLButtonElement, TimelinePinProps>(
|
|
|
79
78
|
});
|
|
80
79
|
const focus = useFocus(context);
|
|
81
80
|
const dismiss = useDismiss(context);
|
|
82
|
-
const role = useRole(context, { role: "dialog" });
|
|
83
81
|
|
|
84
82
|
const { getFloatingProps, getReferenceProps } = useInteractions([
|
|
85
83
|
hover,
|
|
86
84
|
focus,
|
|
87
85
|
dismiss,
|
|
88
|
-
role,
|
|
89
86
|
]);
|
|
90
87
|
|
|
91
88
|
const mergedRef = useMergeRefs(refs.setReference, ref);
|
|
@@ -135,6 +132,7 @@ export const Pin = forwardRef<HTMLButtonElement, TimelinePinProps>(
|
|
|
135
132
|
className={cn("navds-timeline__popover")}
|
|
136
133
|
data-placement={placement}
|
|
137
134
|
ref={refs.setFloating}
|
|
135
|
+
role="dialog"
|
|
138
136
|
{...getFloatingProps()}
|
|
139
137
|
style={floatingStyles}
|
|
140
138
|
>
|
|
@@ -11,7 +11,6 @@ import {
|
|
|
11
11
|
useFocus,
|
|
12
12
|
useHover,
|
|
13
13
|
useInteractions,
|
|
14
|
-
useRole,
|
|
15
14
|
} from "@floating-ui/react";
|
|
16
15
|
import React, { useRef, useState } from "react";
|
|
17
16
|
import { useRenameCSS, useThemeInternal } from "../../theme/Theme";
|
|
@@ -91,13 +90,11 @@ const ClickablePeriod = React.memo(
|
|
|
91
90
|
});
|
|
92
91
|
const focus = useFocus(context);
|
|
93
92
|
const dismiss = useDismiss(context);
|
|
94
|
-
const role = useRole(context, { role: "dialog" });
|
|
95
93
|
|
|
96
94
|
const { getFloatingProps, getReferenceProps } = useInteractions([
|
|
97
95
|
hover,
|
|
98
96
|
focus,
|
|
99
97
|
dismiss,
|
|
100
|
-
role,
|
|
101
98
|
]);
|
|
102
99
|
|
|
103
100
|
const mergedRef = useMergeRefs(refs.setReference, periodRef);
|
|
@@ -113,6 +110,7 @@ const ClickablePeriod = React.memo(
|
|
|
113
110
|
<>
|
|
114
111
|
<button
|
|
115
112
|
{...restProps}
|
|
113
|
+
data-color={restProps?.["data-color"] ?? status}
|
|
116
114
|
type="button"
|
|
117
115
|
ref={(r) => {
|
|
118
116
|
firstFocus && addFocusable(r, index);
|
|
@@ -169,6 +167,7 @@ const ClickablePeriod = React.memo(
|
|
|
169
167
|
className={cn("navds-timeline__popover")}
|
|
170
168
|
data-placement={placement}
|
|
171
169
|
ref={refs.setFloating}
|
|
170
|
+
role="dialog"
|
|
172
171
|
{...getFloatingProps()}
|
|
173
172
|
style={floatingStyles}
|
|
174
173
|
>
|
|
@@ -6,7 +6,7 @@ import type { PeriodProps } from "../period/types";
|
|
|
6
6
|
export const getConditionalClasses = (
|
|
7
7
|
cropped: string,
|
|
8
8
|
direction: string,
|
|
9
|
-
status:
|
|
9
|
+
status: PeriodProps["status"],
|
|
10
10
|
) => {
|
|
11
11
|
/* Renaming to aksel-* happends where these are used, so no need to rename here */
|
|
12
12
|
return cl(`navds-timeline__period navds-timeline__period--${status}`, {
|
|
@@ -1,6 +1,7 @@
|
|
|
1
1
|
import cl from "clsx";
|
|
2
2
|
import React, { forwardRef } from "react";
|
|
3
|
-
import { useRenameCSS } from "../theme/Theme";
|
|
3
|
+
import { useRenameCSS, useThemeInternal } from "../theme/Theme";
|
|
4
|
+
import { AkselColor } from "../types";
|
|
4
5
|
import { Label } from "../typography";
|
|
5
6
|
import { useId } from "../util";
|
|
6
7
|
import {
|
|
@@ -48,13 +49,15 @@ export const ToggleGroup = forwardRef<HTMLDivElement, ToggleGroupProps>(
|
|
|
48
49
|
value,
|
|
49
50
|
defaultValue,
|
|
50
51
|
"aria-describedby": userDescribedby,
|
|
51
|
-
variant
|
|
52
|
+
variant,
|
|
52
53
|
fill = false,
|
|
54
|
+
"data-color": color,
|
|
53
55
|
...rest
|
|
54
56
|
},
|
|
55
57
|
ref,
|
|
56
58
|
) => {
|
|
57
59
|
const { cn } = useRenameCSS();
|
|
60
|
+
const themeContext = useThemeInternal(false);
|
|
58
61
|
const descendants = useToggleGroupDescendants();
|
|
59
62
|
|
|
60
63
|
const toggleGroupContext = useToggleGroup({
|
|
@@ -81,6 +84,14 @@ export const ToggleGroup = forwardRef<HTMLDivElement, ToggleGroupProps>(
|
|
|
81
84
|
console.error("ToggleGroup needs either a value or defaultValue");
|
|
82
85
|
}
|
|
83
86
|
|
|
87
|
+
let localVariant: ToggleGroupProps["variant"] | undefined;
|
|
88
|
+
|
|
89
|
+
if (themeContext) {
|
|
90
|
+
localVariant = variant;
|
|
91
|
+
} else {
|
|
92
|
+
localVariant = variant ?? "action";
|
|
93
|
+
}
|
|
94
|
+
|
|
84
95
|
return (
|
|
85
96
|
<ToggleGroupDescendantsProvider value={descendants}>
|
|
86
97
|
<ToggleGroupProvider {...context}>
|
|
@@ -88,6 +99,7 @@ export const ToggleGroup = forwardRef<HTMLDivElement, ToggleGroupProps>(
|
|
|
88
99
|
className={cn("navds-toggle-group__wrapper", className, {
|
|
89
100
|
"navds-toggle-group__wrapper--fill": fill,
|
|
90
101
|
})}
|
|
102
|
+
data-color={color ?? variantToColor(localVariant)}
|
|
91
103
|
>
|
|
92
104
|
{label && (
|
|
93
105
|
<Label
|
|
@@ -104,7 +116,7 @@ export const ToggleGroup = forwardRef<HTMLDivElement, ToggleGroupProps>(
|
|
|
104
116
|
className={cn(
|
|
105
117
|
"navds-toggle-group",
|
|
106
118
|
`navds-toggle-group--${size}`,
|
|
107
|
-
`navds-toggle-group--${
|
|
119
|
+
{ [`navds-toggle-group--${localVariant}`]: localVariant },
|
|
108
120
|
)}
|
|
109
121
|
aria-describedby={
|
|
110
122
|
cl(userDescribedby, !!label && labelId) || undefined
|
|
@@ -120,6 +132,19 @@ export const ToggleGroup = forwardRef<HTMLDivElement, ToggleGroupProps>(
|
|
|
120
132
|
},
|
|
121
133
|
) as ToggleGroupComponent;
|
|
122
134
|
|
|
135
|
+
function variantToColor(
|
|
136
|
+
variant?: ToggleGroupProps["variant"],
|
|
137
|
+
): AkselColor | undefined {
|
|
138
|
+
switch (variant) {
|
|
139
|
+
case "action":
|
|
140
|
+
return "accent";
|
|
141
|
+
case "neutral":
|
|
142
|
+
return "neutral";
|
|
143
|
+
default:
|
|
144
|
+
return undefined;
|
|
145
|
+
}
|
|
146
|
+
}
|
|
147
|
+
|
|
123
148
|
ToggleGroup.Item = ToggleItem;
|
|
124
149
|
|
|
125
150
|
export default ToggleGroup;
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
export * from "./theme";
|
|
@@ -0,0 +1,15 @@
|
|
|
1
|
+
/* eslint-disable @typescript-eslint/no-empty-object-type */
|
|
2
|
+
import type { AkselColorRole } from "@navikt/ds-tokens/types";
|
|
3
|
+
|
|
4
|
+
// biome-ignore lint/suspicious/noEmptyInterface: Users can/will augment this interface
|
|
5
|
+
export interface CustomAkselColor {}
|
|
6
|
+
|
|
7
|
+
export type AkselColor = AkselColorRole | keyof CustomAkselColor;
|
|
8
|
+
|
|
9
|
+
declare global {
|
|
10
|
+
namespace React {
|
|
11
|
+
interface HTMLAttributes {
|
|
12
|
+
"data-color"?: AkselColor | (string & {});
|
|
13
|
+
}
|
|
14
|
+
}
|
|
15
|
+
}
|