@navikt/ds-react 5.7.6 → 5.8.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/_docs.json +30 -9
- package/cjs/accordion/AccordionHeader.js +2 -2
- package/cjs/form/combobox/FilteredOptions/filteredOptionsContext.js +1 -2
- package/cjs/form/combobox/Input/Input.js +13 -5
- package/cjs/layout/sidemal-test/Sidebar.js +1 -1
- package/cjs/loader/Loader.js +1 -1
- package/cjs/modal/Modal.js +35 -14
- package/cjs/tooltip/Tooltip.js +14 -3
- package/esm/accordion/AccordionHeader.js +2 -2
- package/esm/accordion/AccordionHeader.js.map +1 -1
- package/esm/form/combobox/FilteredOptions/filteredOptionsContext.js +1 -2
- package/esm/form/combobox/FilteredOptions/filteredOptionsContext.js.map +1 -1
- package/esm/form/combobox/Input/Input.js +13 -5
- package/esm/form/combobox/Input/Input.js.map +1 -1
- package/esm/layout/bleed/Bleed.d.ts +1 -1
- package/esm/layout/bleed/Bleed.js +1 -1
- package/esm/layout/bleed/Bleed.js.map +1 -1
- package/esm/layout/box/Box.d.ts +1 -2
- package/esm/layout/box/Box.js +1 -1
- package/esm/layout/box/Box.js.map +1 -1
- package/esm/layout/grid/HGrid.d.ts +1 -1
- package/esm/layout/grid/HGrid.js +1 -1
- package/esm/layout/grid/HGrid.js.map +1 -1
- package/esm/layout/responsive/Responsive.d.ts +1 -1
- package/esm/layout/sidemal-test/Sidebar.js +1 -1
- package/esm/layout/sidemal-test/Sidebar.js.map +1 -1
- package/esm/layout/stack/Stack.d.ts +1 -1
- package/esm/layout/stack/Stack.js +1 -1
- package/esm/layout/stack/Stack.js.map +1 -1
- package/esm/layout/utilities/css.d.ts +1 -8
- package/esm/layout/utilities/css.js.map +1 -1
- package/esm/layout/utilities/types.d.ts +9 -0
- package/esm/loader/Loader.d.ts +1 -1
- package/esm/loader/Loader.js +1 -1
- package/esm/modal/Modal.js +35 -14
- package/esm/modal/Modal.js.map +1 -1
- package/esm/modal/ModalContext.d.ts +1 -0
- package/esm/modal/ModalContext.js.map +1 -1
- package/esm/modal/types.d.ts +7 -0
- package/esm/tooltip/Tooltip.js +16 -5
- package/esm/tooltip/Tooltip.js.map +1 -1
- package/package.json +3 -3
- package/src/accordion/AccordionHeader.tsx +3 -3
- package/src/form/combobox/FilteredOptions/filteredOptionsContext.tsx +1 -2
- package/src/form/combobox/Input/Input.tsx +19 -4
- package/src/form/combobox/combobox.stories.tsx +44 -0
- package/src/layout/bleed/Bleed.tsx +2 -5
- package/src/layout/box/Box.tsx +1 -3
- package/src/layout/grid/HGrid.tsx +2 -6
- package/src/layout/responsive/Responsive.tsx +1 -1
- package/src/layout/sidemal-test/Sidebar.tsx +1 -1
- package/src/layout/stack/Stack.tsx +2 -6
- package/src/layout/utilities/css.ts +1 -36
- package/src/layout/utilities/types.ts +16 -0
- package/src/loader/Loader.tsx +1 -1
- package/src/modal/Modal.tsx +50 -20
- package/src/modal/ModalContext.ts +1 -0
- package/src/modal/modal.stories.tsx +30 -2
- package/src/modal/types.ts +7 -0
- package/src/tooltip/Tooltip.tsx +18 -6
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
import React, { HTMLAttributes } from "react";
|
|
2
2
|
import { OverridableComponent } from "../../util/OverridableComponent";
|
|
3
|
-
import { ResponsiveProp, SpacingScale } from "../utilities/
|
|
3
|
+
import { ResponsiveProp, SpacingScale } from "../utilities/types";
|
|
4
4
|
export interface StackProps extends HTMLAttributes<HTMLDivElement> {
|
|
5
5
|
children: React.ReactNode;
|
|
6
6
|
/**
|
|
@@ -11,7 +11,7 @@ var __rest = (this && this.__rest) || function (s, e) {
|
|
|
11
11
|
};
|
|
12
12
|
import cl from "clsx";
|
|
13
13
|
import React, { forwardRef } from "react";
|
|
14
|
-
import { getResponsiveProps, getResponsiveValue
|
|
14
|
+
import { getResponsiveProps, getResponsiveValue } from "../utilities/css";
|
|
15
15
|
export const Stack = forwardRef((_a, ref) => {
|
|
16
16
|
var { as: Component = "div", className, align, justify, wrap = true, gap, style: _style, direction = "row" } = _a, rest = __rest(_a, ["as", "className", "align", "justify", "wrap", "gap", "style", "direction"]);
|
|
17
17
|
const style = Object.assign(Object.assign(Object.assign(Object.assign(Object.assign(Object.assign({}, _style), { "--__ac-stack-wrap": wrap ? "wrap" : "nowrap" }), getResponsiveProps(`stack`, "gap", "spacing", gap)), getResponsiveValue(`stack`, "direction", direction)), getResponsiveValue(`stack`, "align", align)), getResponsiveValue(`stack`, "justify", justify));
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"Stack.js","sourceRoot":"","sources":["../../../src/layout/stack/Stack.tsx"],"names":[],"mappings":";;;;;;;;;;;AAAA,OAAO,EAAE,MAAM,MAAM,CAAC;AACtB,OAAO,KAAK,EAAE,EAAE,UAAU,EAAkB,MAAM,OAAO,CAAC;AAE1D,OAAO,
|
|
1
|
+
{"version":3,"file":"Stack.js","sourceRoot":"","sources":["../../../src/layout/stack/Stack.tsx"],"names":[],"mappings":";;;;;;;;;;;AAAA,OAAO,EAAE,MAAM,MAAM,CAAC;AACtB,OAAO,KAAK,EAAE,EAAE,UAAU,EAAkB,MAAM,OAAO,CAAC;AAE1D,OAAO,EAAE,kBAAkB,EAAE,kBAAkB,EAAE,MAAM,kBAAkB,CAAC;AAqC1E,MAAM,CAAC,MAAM,KAAK,GAChB,UAAU,CACR,CACE,EAUC,EACD,GAAG,EACH,EAAE;QAZF,EACE,EAAE,EAAE,SAAS,GAAG,KAAK,EACrB,SAAS,EACT,KAAK,EACL,OAAO,EACP,IAAI,GAAG,IAAI,EACX,GAAG,EACH,KAAK,EAAE,MAAM,EACb,SAAS,GAAG,KAAK,OAElB,EADI,IAAI,cATT,4EAUC,CADQ;IAIT,MAAM,KAAK,2FACN,MAAM,KACT,mBAAmB,EAAE,IAAI,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,QAAQ,KAC1C,kBAAkB,CAAC,OAAO,EAAE,KAAK,EAAE,SAAS,EAAE,GAAG,CAAC,GAClD,kBAAkB,CAAC,OAAO,EAAE,WAAW,EAAE,SAAS,CAAC,GACnD,kBAAkB,CAAC,OAAO,EAAE,OAAO,EAAE,KAAK,CAAC,GAC3C,kBAAkB,CAAC,OAAO,EAAE,SAAS,EAAE,OAAO,CAAC,CACnD,CAAC;IAEF,OAAO,CACL,oBAAC,SAAS,oBACJ,IAAI,IACR,GAAG,EAAE,GAAG,EACR,KAAK,EAAE,KAAK,EACZ,SAAS,EAAE,EAAE,CAAC,aAAa,EAAE,SAAS,EAAE;YACtC,cAAc,EAAE,SAAS,KAAK,QAAQ;YACtC,cAAc,EAAE,SAAS,KAAK,KAAK;SACpC,CAAC,IACF,CACH,CAAC;AACJ,CAAC,CACF,CAAC"}
|
|
@@ -1,14 +1,7 @@
|
|
|
1
|
-
|
|
2
|
-
export type SpacingScale = "0" | "05" | "1" | "1-alt" | "2" | "3" | "4" | "5" | "6" | "7" | "8" | "9" | "10" | "11" | "12" | "14" | "16" | "18" | "20" | "24" | "32";
|
|
3
|
-
export type SpaceDelimitedAttribute<T extends string> = T | `${T} ${T}` | `${T} ${T} ${T}` | `${T} ${T} ${T} ${T}`;
|
|
4
|
-
type FixedResponsiveT<T> = {
|
|
5
|
-
[Breakpoint in BreakpointsAlias]?: T;
|
|
6
|
-
};
|
|
7
|
-
export type ResponsiveProp<T> = T | FixedResponsiveT<T>;
|
|
1
|
+
import { ResponsiveProp } from "./types";
|
|
8
2
|
export declare function getResponsiveValue<T = string>(componentName: string, componentProp: string, responsiveProp?: ResponsiveProp<T>): {
|
|
9
3
|
[k: string]: T;
|
|
10
4
|
};
|
|
11
5
|
export declare function getResponsiveProps<T extends string>(componentName: string, componentProp: string, tokenSubgroup: string, responsiveProp?: ResponsiveProp<T>, invert?: boolean, tokenExceptions?: string[]): {
|
|
12
6
|
[x: string]: string;
|
|
13
7
|
};
|
|
14
|
-
export {};
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"css.js","sourceRoot":"","sources":["../../../src/layout/utilities/css.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"css.js","sourceRoot":"","sources":["../../../src/layout/utilities/css.ts"],"names":[],"mappings":"AAEA,MAAM,UAAU,kBAAkB,CAChC,aAAqB,EACrB,aAAqB,EACrB,cAAkC;IAElC,IAAI,CAAC,cAAc,EAAE;QACnB,OAAO,EAAE,CAAC;KACX;IAED,IAAI,OAAO,cAAc,KAAK,QAAQ,EAAE;QACtC,OAAO;YACL,CAAC,UAAU,aAAa,IAAI,aAAa,KAAK,CAAC,EAAE,cAAc;SAChE,CAAC;KACH;IAED,OAAO,MAAM,CAAC,WAAW,CACvB,MAAM,CAAC,OAAO,CAAC,cAAc,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,eAAe,EAAE,eAAe,CAAC,EAAE,EAAE,CAAC;QACzE,UAAU,aAAa,IAAI,aAAa,IAAI,eAAe,EAAE;QAC7D,eAAe;KAChB,CAAC,CACH,CAAC;AACJ,CAAC;AAED,MAAM,uBAAuB,GAAG,CAAC,SAAiB,EAAE,EAAE;IACpD,QAAQ,SAAS,EAAE;QACjB,KAAK,IAAI;YACP,OAAO,KAAK,CAAC;KAChB;IACD,OAAO,SAAS,CAAC;AACnB,CAAC,CAAC;AAEF,MAAM,yBAAyB,GAAG,CAChC,aAAqB,EACrB,WAAmB,EACnB,aAAqB,EACrB,eAAyB,EACzB,MAAe,EACf,EAAE;IACF,OAAO,WAAW;SACf,KAAK,CAAC,GAAG,CAAC;SACV,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,GAAG,EAAE,EAAE;QACjB,IAAI,aAAa,KAAK,eAAe,IAAI,CAAC,KAAK,MAAM,EAAE;YACrD,MAAM,KAAK,GAAG,GAAG,GAAG,GAAG,CAAC,MAAM,CAAC;YAC/B,OAAO,iBAAiB,KAAK,QAAQ,CAAC;SACvC;QAED,IAAI,MAAM,GAAG,WAAW,aAAa,IAAI,CAAC,GAAG,CAAC;QAC9C,IAAI,eAAe,CAAC,QAAQ,CAAC,CAAC,CAAC,EAAE;YAC/B,MAAM,GAAG,uBAAuB,CAAC,CAAC,CAAC,CAAC;SACrC;QACD,IAAI,MAAM,EAAE;YACV,IAAI,CAAC,KAAK,GAAG,EAAE;gBACb,OAAO,GAAG,CAAC;aACZ;YACD,OAAO,aAAa,MAAM,GAAG,CAAC;SAC/B;QACD,OAAO,MAAM,CAAC;IAChB,CAAC,CAAC;SACD,IAAI,CAAC,GAAG,CAAC,CAAC;AACf,CAAC,CAAC;AAEF,MAAM,UAAU,kBAAkB,CAChC,aAAqB,EACrB,aAAqB,EACrB,aAAqB,EACrB,cAAkC,EAClC,MAAM,GAAG,KAAK,EACd,kBAA4B,EAAE;IAE9B,IAAI,CAAC,cAAc,EAAE;QACnB,OAAO,EAAE,CAAC;KACX;IAED,IAAI,OAAO,cAAc,KAAK,QAAQ,EAAE;QACtC,OAAO;YACL,CAAC,UAAU,aAAa,IAAI,aAAa,KAAK,CAAC,EAC7C,yBAAyB,CACvB,aAAa,EACb,cAAc,EACd,aAAa,EACb,eAAe,EACf,MAAM,CACP;SACJ,CAAC;KACH;IAED,MAAM,UAAU,GAAG,EAAE,CAAC;IACtB,MAAM,CAAC,OAAO,CAAC,cAAc,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,eAAe,EAAE,YAAY,CAAC,EAAE,EAAE;QACzE,UAAU,CAAC,UAAU,aAAa,IAAI,aAAa,IAAI,eAAe,EAAE,CAAC;YACvE,yBAAyB,CACvB,aAAa,EACb,YAAY,EACZ,aAAa,EACb,eAAe,EACf,MAAM,CACP,CAAC;IACN,CAAC,CAAC,CAAC;IACH,OAAO,UAAU,CAAC;AACpB,CAAC"}
|
|
@@ -3,7 +3,16 @@ import surfaceColors from "@navikt/ds-tokens/src/colors-surface.json";
|
|
|
3
3
|
import borderColors from "@navikt/ds-tokens/src/colors-border.json";
|
|
4
4
|
import borderRadii from "@navikt/ds-tokens/src/border.json";
|
|
5
5
|
import shadows from "@navikt/ds-tokens/src/shadow.json";
|
|
6
|
+
import Spacing from "@navikt/ds-tokens/src/spacing.json";
|
|
6
7
|
export type BackgroundToken = keyof typeof bgColors.a | keyof typeof surfaceColors.a;
|
|
7
8
|
export type BorderColorToken = keyof typeof borderColors.a;
|
|
8
9
|
export type BorderRadiiToken = keyof (typeof borderRadii.a)["border-radius"] | "0";
|
|
9
10
|
export type ShadowToken = keyof typeof shadows.a.shadow;
|
|
11
|
+
export type BreakpointsAlias = "xs" | "sm" | "md" | "lg" | "xl";
|
|
12
|
+
export type SpacingScale = keyof (typeof Spacing)["a"]["spacing"];
|
|
13
|
+
export type SpaceDelimitedAttribute<T extends string> = T | `${T} ${T}` | `${T} ${T} ${T}` | `${T} ${T} ${T} ${T}`;
|
|
14
|
+
type FixedResponsiveT<T> = {
|
|
15
|
+
[Breakpoint in BreakpointsAlias]?: T;
|
|
16
|
+
};
|
|
17
|
+
export type ResponsiveProp<T> = T | FixedResponsiveT<T>;
|
|
18
|
+
export {};
|
package/esm/loader/Loader.d.ts
CHANGED
|
@@ -37,7 +37,7 @@ export type LoaderType = React.ForwardRefExoticComponent<LoaderProps & React.Ref
|
|
|
37
37
|
*
|
|
38
38
|
* @example
|
|
39
39
|
* ```jsx
|
|
40
|
-
* <Loader size="3xlarge" title="
|
|
40
|
+
* <Loader size="3xlarge" title="Venter..." />
|
|
41
41
|
* ```
|
|
42
42
|
*/
|
|
43
43
|
export declare const Loader: LoaderType;
|
package/esm/loader/Loader.js
CHANGED
package/esm/modal/Modal.js
CHANGED
|
@@ -70,7 +70,7 @@ import dialogPolyfill, { needPolyfill } from "./dialog-polyfill";
|
|
|
70
70
|
*/
|
|
71
71
|
export const Modal = forwardRef((_a, ref) => {
|
|
72
72
|
var _b, _c;
|
|
73
|
-
var { header, children, open, onBeforeClose, onCancel, width, portal, className, "aria-labelledby": ariaLabelledby, style } = _a, rest = __rest(_a, ["header", "children", "open", "onBeforeClose", "onCancel", "width", "portal", "className", "aria-labelledby", "style"]);
|
|
73
|
+
var { header, children, open, onBeforeClose, onCancel, closeOnBackdropClick, width, portal, className, "aria-labelledby": ariaLabelledby, style, onClick } = _a, rest = __rest(_a, ["header", "children", "open", "onBeforeClose", "onCancel", "closeOnBackdropClick", "width", "portal", "className", "aria-labelledby", "style", "onClick"]);
|
|
74
74
|
const modalRef = useRef(null);
|
|
75
75
|
const mergedRef = useMemo(() => mergeRefs([modalRef, ref]), [ref]);
|
|
76
76
|
const ariaLabelId = useId();
|
|
@@ -86,6 +86,12 @@ export const Modal = forwardRef((_a, ref) => {
|
|
|
86
86
|
if (needPolyfill && modalRef.current && portalNode) {
|
|
87
87
|
dialogPolyfill.registerDialog(modalRef.current);
|
|
88
88
|
}
|
|
89
|
+
// We set autofocus on the dialog element to prevent the default behavior where first focusable element gets focus when modal is opened.
|
|
90
|
+
// This is mainly to fix an edge case where having a Tooltip as the first focusable element would make it activate when you open the modal.
|
|
91
|
+
// We have to use JS because it doesn't work to set it with a prop (React bug?)
|
|
92
|
+
// Currently doesn't seem to work in Chrome. See also Tooltip.tsx
|
|
93
|
+
if (modalRef.current && portalNode)
|
|
94
|
+
modalRef.current.autofocus = true;
|
|
89
95
|
}, [modalRef, portalNode]);
|
|
90
96
|
useEffect(() => {
|
|
91
97
|
// We need to have this in a useEffect so that the content renders before the modal is displayed,
|
|
@@ -102,22 +108,37 @@ export const Modal = forwardRef((_a, ref) => {
|
|
|
102
108
|
}, [modalRef, portalNode, open]);
|
|
103
109
|
useBodyScrollLock(modalRef, portalNode);
|
|
104
110
|
const isWidthPreset = typeof width === "string" && ["small", "medium"].includes(width);
|
|
105
|
-
const
|
|
106
|
-
|
|
107
|
-
|
|
108
|
-
|
|
109
|
-
|
|
110
|
-
|
|
111
|
-
|
|
112
|
-
|
|
111
|
+
const mergedClassName = cl("navds-modal", className, {
|
|
112
|
+
"navds-modal--polyfilled": needPolyfill,
|
|
113
|
+
"navds-modal--autowidth": !width,
|
|
114
|
+
[`navds-modal--${width}`]: isWidthPreset,
|
|
115
|
+
});
|
|
116
|
+
const mergedStyle = Object.assign(Object.assign({}, style), (!isWidthPreset ? { width } : {}));
|
|
117
|
+
const mergedOnCancel = (event) => {
|
|
118
|
+
if (onBeforeClose && onBeforeClose() === false) {
|
|
119
|
+
event.preventDefault();
|
|
120
|
+
}
|
|
121
|
+
else if (onCancel)
|
|
122
|
+
onCancel(event);
|
|
123
|
+
};
|
|
124
|
+
const mergedOnClick = closeOnBackdropClick && !needPolyfill // closeOnBackdropClick has issues on polyfill when nesting modals (DatePicker)
|
|
125
|
+
? (event) => {
|
|
126
|
+
onClick && onClick(event);
|
|
127
|
+
if (event.target === modalRef.current &&
|
|
128
|
+
(!onBeforeClose || onBeforeClose() !== false)) {
|
|
129
|
+
modalRef.current.close();
|
|
113
130
|
}
|
|
114
|
-
|
|
115
|
-
|
|
116
|
-
|
|
117
|
-
|
|
118
|
-
|
|
131
|
+
}
|
|
132
|
+
: onClick;
|
|
133
|
+
const mergedAriaLabelledBy = !ariaLabelledby && !rest["aria-label"] && header
|
|
134
|
+
? ariaLabelId
|
|
135
|
+
: ariaLabelledby;
|
|
136
|
+
const component = (
|
|
137
|
+
// eslint-disable-next-line jsx-a11y/click-events-have-key-events, jsx-a11y/no-noninteractive-element-interactions
|
|
138
|
+
React.createElement("dialog", Object.assign({}, rest, { ref: mergedRef, className: mergedClassName, style: mergedStyle, onCancel: mergedOnCancel, onClick: mergedOnClick, "aria-labelledby": mergedAriaLabelledBy }),
|
|
119
139
|
React.createElement(ModalContext.Provider, { value: {
|
|
120
140
|
closeHandler: getCloseHandler(modalRef, header, onBeforeClose),
|
|
141
|
+
ref: modalRef,
|
|
121
142
|
} },
|
|
122
143
|
header && (React.createElement(ModalHeader, null,
|
|
123
144
|
header.label && (React.createElement(Detail, { className: "navds-modal__label" }, header.label)),
|
package/esm/modal/Modal.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"Modal.js","sourceRoot":"","sources":["../../src/modal/Modal.tsx"],"names":[],"mappings":";;;;;;;;;;;AAAA,OAAO,EAAE,qBAAqB,EAAE,MAAM,oBAAoB,CAAC;AAC3D,OAAO,EAAE,MAAM,MAAM,CAAC;AACtB,OAAO,KAAK,EAAE,EACZ,UAAU,EACV,UAAU,EACV,SAAS,EACT,OAAO,EACP,MAAM,GACP,MAAM,OAAO,CAAC;AACf,OAAO,EAAE,YAAY,EAAE,MAAM,WAAW,CAAC;AACzC,OAAO,EAAE,WAAW,EAAE,MAAM,aAAa,CAAC;AAC1C,OAAO,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM,eAAe,CAAC;AAChD,OAAO,EAAE,SAAS,EAAE,KAAK,EAAE,MAAM,SAAS,CAAC;AAC3C,OAAO,SAAS,MAAM,aAAa,CAAC;AACpC,OAAO,EAAE,YAAY,EAAE,MAAM,gBAAgB,CAAC;AAC9C,OAAO,WAAW,MAAM,eAAe,CAAC;AACxC,OAAO,WAAW,MAAM,eAAe,CAAC;AACxC,OAAO,EAAE,eAAe,EAAE,iBAAiB,EAAE,MAAM,cAAc,CAAC;AAClE,OAAO,cAAc,EAAE,EAAE,YAAY,EAAE,MAAM,mBAAmB,CAAC;AAYjE;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GA6CG;AACH,MAAM,CAAC,MAAM,KAAK,GAAG,UAAU,CAC7B,CACE,
|
|
1
|
+
{"version":3,"file":"Modal.js","sourceRoot":"","sources":["../../src/modal/Modal.tsx"],"names":[],"mappings":"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"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"ModalContext.js","sourceRoot":"","sources":["../../src/modal/ModalContext.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,MAAM,OAAO,CAAC;
|
|
1
|
+
{"version":3,"file":"ModalContext.js","sourceRoot":"","sources":["../../src/modal/ModalContext.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,MAAM,OAAO,CAAC;AAM1B,MAAM,CAAC,MAAM,YAAY,GAAG,KAAK,CAAC,aAAa,CAA2B,IAAI,CAAC,CAAC"}
|
package/esm/modal/types.d.ts
CHANGED
|
@@ -42,6 +42,13 @@ export interface ModalProps extends React.DialogHTMLAttributes<HTMLDialogElement
|
|
|
42
42
|
* Called when the user presses the Esc key, unless `onBeforeClose()` returns `false`.
|
|
43
43
|
*/
|
|
44
44
|
onCancel?: React.ReactEventHandler<HTMLDialogElement>;
|
|
45
|
+
/**
|
|
46
|
+
* Whether to close when clicking on the backdrop.
|
|
47
|
+
*
|
|
48
|
+
* **WARNING:** Users may click outside by accident. Don't use if closing can cause data loss, or the modal contains important info.
|
|
49
|
+
* @default false
|
|
50
|
+
*/
|
|
51
|
+
closeOnBackdropClick?: boolean;
|
|
45
52
|
/**
|
|
46
53
|
* @default fit-content (up to 700px)
|
|
47
54
|
* */
|
package/esm/tooltip/Tooltip.js
CHANGED
|
@@ -9,12 +9,13 @@ var __rest = (this && this.__rest) || function (s, e) {
|
|
|
9
9
|
}
|
|
10
10
|
return t;
|
|
11
11
|
};
|
|
12
|
-
import { arrow as flArrow,
|
|
12
|
+
import { FloatingPortal, autoUpdate, arrow as flArrow, flip, offset, safePolygon, shift, useDismiss, useFloating, useFocus, useHover, useInteractions, } from "@floating-ui/react";
|
|
13
13
|
import cl from "clsx";
|
|
14
|
-
import React, { cloneElement, forwardRef, useMemo, useRef, useState, } from "react";
|
|
14
|
+
import React, { cloneElement, forwardRef, useContext, useMemo, useRef, useState, } from "react";
|
|
15
|
+
import { ModalContext } from "../modal/ModalContext";
|
|
16
|
+
import { useProvider } from "../provider";
|
|
15
17
|
import { Detail } from "../typography";
|
|
16
18
|
import { mergeRefs, useId } from "../util";
|
|
17
|
-
import { useProvider } from "../provider";
|
|
18
19
|
/**
|
|
19
20
|
* A component that displays a tooltip when the user hovers over its child element.
|
|
20
21
|
*
|
|
@@ -33,7 +34,11 @@ export const Tooltip = forwardRef((_a, ref) => {
|
|
|
33
34
|
var { children, className, arrow: _arrow = true, placement: _placement = "top", open: userOpen, defaultOpen = false, offset: _offset, content, delay = 150, id, keys, maxChar = 80 } = _a, rest = __rest(_a, ["children", "className", "arrow", "placement", "open", "defaultOpen", "offset", "content", "delay", "id", "keys", "maxChar"]);
|
|
34
35
|
const [open, setOpen] = useState(defaultOpen);
|
|
35
36
|
const arrowRef = useRef(null);
|
|
36
|
-
const
|
|
37
|
+
const modalContext = useContext(ModalContext);
|
|
38
|
+
const providerRootElement = (_b = useProvider()) === null || _b === void 0 ? void 0 : _b.rootElement;
|
|
39
|
+
const rootElement = modalContext
|
|
40
|
+
? modalContext.ref.current
|
|
41
|
+
: providerRootElement;
|
|
37
42
|
const { x, y, strategy, context, placement, middlewareData: { arrow: { x: arrowX, y: arrowY } = {}, hide: { referenceHidden } = {}, }, refs, } = useFloating({
|
|
38
43
|
placement: _placement,
|
|
39
44
|
open: userOpen !== null && userOpen !== void 0 ? userOpen : open,
|
|
@@ -44,7 +49,13 @@ export const Tooltip = forwardRef((_a, ref) => {
|
|
|
44
49
|
flip({ padding: 5, fallbackPlacements: ["bottom", "top"] }),
|
|
45
50
|
flArrow({ element: arrowRef, padding: 5 }),
|
|
46
51
|
],
|
|
47
|
-
whileElementsMounted:
|
|
52
|
+
whileElementsMounted: modalContext
|
|
53
|
+
? (reference, floating, update) =>
|
|
54
|
+
// Reduces jumping in Chrome when used in a Modal and it's the first focusable element.
|
|
55
|
+
// Can be removed when autofocus starts working on <dialog> in Chrome. See also Modal.tsx
|
|
56
|
+
autoUpdate(reference, floating, update, { animationFrame: true })
|
|
57
|
+
: autoUpdate,
|
|
58
|
+
strategy: modalContext ? "fixed" : undefined,
|
|
48
59
|
});
|
|
49
60
|
const { getReferenceProps, getFloatingProps } = useInteractions([
|
|
50
61
|
useHover(context, { handleClose: safePolygon(), restMs: delay }),
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"Tooltip.js","sourceRoot":"","sources":["../../src/tooltip/Tooltip.tsx"],"names":[],"mappings":";;;;;;;;;;;AAAA,OAAO,EACL,KAAK,IAAI,OAAO,EAChB,
|
|
1
|
+
{"version":3,"file":"Tooltip.js","sourceRoot":"","sources":["../../src/tooltip/Tooltip.tsx"],"names":[],"mappings":"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"}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@navikt/ds-react",
|
|
3
|
-
"version": "5.
|
|
3
|
+
"version": "5.8.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.25.4",
|
|
41
|
-
"@navikt/aksel-icons": "^5.
|
|
42
|
-
"@navikt/ds-tokens": "^5.
|
|
41
|
+
"@navikt/aksel-icons": "^5.8.0",
|
|
42
|
+
"@navikt/ds-tokens": "^5.8.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",
|
|
@@ -1,9 +1,9 @@
|
|
|
1
|
+
import { ChevronDownIcon } from "@navikt/aksel-icons";
|
|
1
2
|
import cl from "clsx";
|
|
2
3
|
import React, { forwardRef, useContext } from "react";
|
|
3
4
|
import { Heading } from "../typography";
|
|
4
5
|
import { AccordionContext } from "./AccordionContext";
|
|
5
6
|
import { AccordionItemContext } from "./AccordionItem";
|
|
6
|
-
import { ChevronDownIcon } from "@navikt/aksel-icons";
|
|
7
7
|
|
|
8
8
|
export interface AccordionHeaderProps
|
|
9
9
|
extends React.ButtonHTMLAttributes<HTMLButtonElement> {
|
|
@@ -37,13 +37,13 @@ const AccordionHeader = forwardRef<HTMLButtonElement, AccordionHeaderProps>(
|
|
|
37
37
|
aria-expanded={itemContext.open}
|
|
38
38
|
type="button"
|
|
39
39
|
>
|
|
40
|
-
<
|
|
40
|
+
<span className="navds-accordion__icon-wrapper">
|
|
41
41
|
<ChevronDownIcon
|
|
42
42
|
className="navds-accordion__header-chevron"
|
|
43
43
|
title="Vis mer"
|
|
44
44
|
aria-hidden
|
|
45
45
|
/>
|
|
46
|
-
</
|
|
46
|
+
</span>
|
|
47
47
|
<Heading
|
|
48
48
|
size={accordionContext?.headingSize ?? "small"}
|
|
49
49
|
as="span"
|
|
@@ -95,8 +95,7 @@ export const FilteredOptionsProvider = ({ children, value: props }) => {
|
|
|
95
95
|
shouldAutocomplete &&
|
|
96
96
|
normalizeText(searchTerm) !== "" &&
|
|
97
97
|
(previousSearchTerm?.length || 0) < searchTerm.length &&
|
|
98
|
-
filteredOptions.length > 0
|
|
99
|
-
!isValueInList(searchTerm, filteredOptions)
|
|
98
|
+
filteredOptions.length > 0
|
|
100
99
|
) {
|
|
101
100
|
setValue(
|
|
102
101
|
`${searchTerm}${filteredOptions[0].substring(searchTerm.length)}`
|
|
@@ -31,6 +31,7 @@ const Input = forwardRef<HTMLInputElement, InputProps>(
|
|
|
31
31
|
allowNewValues,
|
|
32
32
|
currentOption,
|
|
33
33
|
filteredOptions,
|
|
34
|
+
isValueNew,
|
|
34
35
|
toggleIsListOpen,
|
|
35
36
|
isListOpen,
|
|
36
37
|
filteredOptionsIndex,
|
|
@@ -46,29 +47,43 @@ const Input = forwardRef<HTMLInputElement, InputProps>(
|
|
|
46
47
|
|
|
47
48
|
const onEnter = useCallback(
|
|
48
49
|
(event: React.KeyboardEvent) => {
|
|
50
|
+
const isTextInSelectedOptions = (text: string) => {
|
|
51
|
+
return selectedOptions.find(
|
|
52
|
+
(item) => item.toLocaleLowerCase() === text.toLocaleLowerCase()
|
|
53
|
+
);
|
|
54
|
+
};
|
|
55
|
+
|
|
49
56
|
if (currentOption) {
|
|
50
57
|
event.preventDefault();
|
|
51
58
|
// Selecting a value from the dropdown / FilteredOptions
|
|
52
59
|
toggleOption(currentOption, event);
|
|
53
|
-
if (!isMultiSelect && !
|
|
60
|
+
if (!isMultiSelect && !isTextInSelectedOptions(currentOption))
|
|
54
61
|
toggleIsListOpen(false);
|
|
55
|
-
} else if (shouldAutocomplete &&
|
|
62
|
+
} else if (shouldAutocomplete && isTextInSelectedOptions(value)) {
|
|
56
63
|
event.preventDefault();
|
|
57
64
|
// Trying to set the same value that is already set, so just clearing the input
|
|
58
65
|
clearInput(event);
|
|
59
66
|
} else if ((allowNewValues || shouldAutocomplete) && value !== "") {
|
|
60
67
|
event.preventDefault();
|
|
61
68
|
// Autocompleting or adding a new value
|
|
62
|
-
|
|
63
|
-
|
|
69
|
+
const selectedValue =
|
|
70
|
+
allowNewValues && isValueNew ? value : filteredOptions[0];
|
|
71
|
+
toggleOption(selectedValue, event);
|
|
72
|
+
if (
|
|
73
|
+
!isMultiSelect &&
|
|
74
|
+
!isTextInSelectedOptions(filteredOptions[0] || selectedValue)
|
|
75
|
+
) {
|
|
64
76
|
toggleIsListOpen(false);
|
|
77
|
+
}
|
|
65
78
|
}
|
|
66
79
|
},
|
|
67
80
|
[
|
|
68
81
|
allowNewValues,
|
|
69
82
|
clearInput,
|
|
70
83
|
currentOption,
|
|
84
|
+
filteredOptions,
|
|
71
85
|
isMultiSelect,
|
|
86
|
+
isValueNew,
|
|
72
87
|
selectedOptions,
|
|
73
88
|
shouldAutocomplete,
|
|
74
89
|
toggleIsListOpen,
|
|
@@ -467,6 +467,50 @@ export const TestThatCallbacksOnlyFireWhenExpected: StoryObj<{
|
|
|
467
467
|
},
|
|
468
468
|
};
|
|
469
469
|
|
|
470
|
+
export const TestCasingWhenAutoCompleting = {
|
|
471
|
+
args: {
|
|
472
|
+
onChange: jest.fn(),
|
|
473
|
+
onClear: jest.fn(),
|
|
474
|
+
onToggleSelected: jest.fn(),
|
|
475
|
+
},
|
|
476
|
+
render: (props) => {
|
|
477
|
+
return (
|
|
478
|
+
<UNSAFE_Combobox
|
|
479
|
+
options={["Camel Case", "lowercase", "UPPERCASE"]}
|
|
480
|
+
label="Liker du best store eller små bokstaver?"
|
|
481
|
+
shouldAutocomplete
|
|
482
|
+
allowNewValues
|
|
483
|
+
{...props}
|
|
484
|
+
/>
|
|
485
|
+
);
|
|
486
|
+
},
|
|
487
|
+
play: async ({ canvasElement }) => {
|
|
488
|
+
const canvas = within(canvasElement);
|
|
489
|
+
const input = canvas.getByRole<HTMLInputElement>("combobox");
|
|
490
|
+
|
|
491
|
+
// With exisiting option
|
|
492
|
+
userEvent.click(input);
|
|
493
|
+
await userEvent.type(input, "cAmEl CaSe", { delay: 250 });
|
|
494
|
+
await sleep(250);
|
|
495
|
+
expect(input.value).toBe("cAmEl CaSe");
|
|
496
|
+
await userEvent.type(input, "{Enter}");
|
|
497
|
+
await sleep(250);
|
|
498
|
+
const chips = canvas.getAllByRole("list")[0];
|
|
499
|
+
const selectedUpperCaseChip = within(chips).getAllByRole("listitem")[0];
|
|
500
|
+
expect(selectedUpperCaseChip).toHaveTextContent("Camel Case"); // A weird issue is preventing the accessible name from being used in the test, even if it works in VoiceOver
|
|
501
|
+
|
|
502
|
+
// With custom option
|
|
503
|
+
userEvent.click(input);
|
|
504
|
+
await userEvent.type(input, "cAmEl{Backspace}", { delay: 250 });
|
|
505
|
+
await sleep(250);
|
|
506
|
+
expect(input.value).toBe("cAmEl");
|
|
507
|
+
await userEvent.type(input, "{Enter}");
|
|
508
|
+
await sleep(250);
|
|
509
|
+
const selectedNewValueChip = within(chips).getAllByRole("listitem")[0];
|
|
510
|
+
expect(selectedNewValueChip).toHaveTextContent("cAmEl"); // A weird issue is preventing the accessible name from being used in the test, even if it works in VoiceOver
|
|
511
|
+
},
|
|
512
|
+
};
|
|
513
|
+
|
|
470
514
|
export const TestHoverAndFocusSwitching: StoryObject = {
|
|
471
515
|
render: () => {
|
|
472
516
|
return (
|
|
@@ -1,10 +1,7 @@
|
|
|
1
1
|
import cl from "clsx";
|
|
2
2
|
import React, { forwardRef } from "react";
|
|
3
|
-
import {
|
|
4
|
-
|
|
5
|
-
SpacingScale,
|
|
6
|
-
getResponsiveProps,
|
|
7
|
-
} from "../utilities/css";
|
|
3
|
+
import { getResponsiveProps } from "../utilities/css";
|
|
4
|
+
import { ResponsiveProp, SpacingScale } from "../utilities/types";
|
|
8
5
|
import { Slot } from "../../util/Slot";
|
|
9
6
|
|
|
10
7
|
export type BleedSpacingInline = "0" | "full" | "px" | SpacingScale;
|
package/src/layout/box/Box.tsx
CHANGED
|
@@ -1,13 +1,11 @@
|
|
|
1
1
|
import cl from "clsx";
|
|
2
2
|
import React, { forwardRef } from "react";
|
|
3
3
|
import { OverridableComponent } from "../../util/OverridableComponent";
|
|
4
|
+
import { getResponsiveProps } from "../utilities/css";
|
|
4
5
|
import {
|
|
5
6
|
SpaceDelimitedAttribute,
|
|
6
7
|
ResponsiveProp,
|
|
7
8
|
SpacingScale,
|
|
8
|
-
getResponsiveProps,
|
|
9
|
-
} from "../utilities/css";
|
|
10
|
-
import {
|
|
11
9
|
BackgroundToken,
|
|
12
10
|
BorderColorToken,
|
|
13
11
|
ShadowToken,
|
|
@@ -1,11 +1,7 @@
|
|
|
1
1
|
import React, { forwardRef, HTMLAttributes } from "react";
|
|
2
2
|
import cl from "clsx";
|
|
3
|
-
import {
|
|
4
|
-
|
|
5
|
-
getResponsiveValue,
|
|
6
|
-
ResponsiveProp,
|
|
7
|
-
SpacingScale,
|
|
8
|
-
} from "../utilities/css";
|
|
3
|
+
import { getResponsiveProps, getResponsiveValue } from "../utilities/css";
|
|
4
|
+
import { ResponsiveProp, SpacingScale } from "../utilities/types";
|
|
9
5
|
|
|
10
6
|
export interface HGridProps extends HTMLAttributes<HTMLDivElement> {
|
|
11
7
|
children: React.ReactNode;
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
import cl from "clsx";
|
|
2
2
|
import React, { forwardRef, HTMLAttributes } from "react";
|
|
3
|
-
import { BreakpointsAlias } from "../utilities/
|
|
3
|
+
import { BreakpointsAlias } from "../utilities/types";
|
|
4
4
|
import { Slot } from "../../util/Slot";
|
|
5
5
|
|
|
6
6
|
export interface ResponsiveProps extends HTMLAttributes<HTMLDivElement> {
|
|
@@ -1,8 +1,8 @@
|
|
|
1
1
|
import React from "react";
|
|
2
|
+
import { Link } from "../../link";
|
|
2
3
|
import { Heading, Label } from "../../typography";
|
|
3
4
|
import { Box } from "../box";
|
|
4
5
|
import { VStack } from "../stack";
|
|
5
|
-
import { Link } from "../../link";
|
|
6
6
|
|
|
7
7
|
const LinkElement = ({ children }) => {
|
|
8
8
|
return (
|
|
@@ -1,12 +1,8 @@
|
|
|
1
1
|
import cl from "clsx";
|
|
2
2
|
import React, { forwardRef, HTMLAttributes } from "react";
|
|
3
3
|
import { OverridableComponent } from "../../util/OverridableComponent";
|
|
4
|
-
import {
|
|
5
|
-
|
|
6
|
-
getResponsiveValue,
|
|
7
|
-
ResponsiveProp,
|
|
8
|
-
SpacingScale,
|
|
9
|
-
} from "../utilities/css";
|
|
4
|
+
import { getResponsiveProps, getResponsiveValue } from "../utilities/css";
|
|
5
|
+
import { ResponsiveProp, SpacingScale } from "../utilities/types";
|
|
10
6
|
|
|
11
7
|
export interface StackProps extends HTMLAttributes<HTMLDivElement> {
|
|
12
8
|
children: React.ReactNode;
|
|
@@ -1,39 +1,4 @@
|
|
|
1
|
-
|
|
2
|
-
|
|
3
|
-
export type SpacingScale =
|
|
4
|
-
| "0"
|
|
5
|
-
| "05"
|
|
6
|
-
| "1"
|
|
7
|
-
| "1-alt"
|
|
8
|
-
| "2"
|
|
9
|
-
| "3"
|
|
10
|
-
| "4"
|
|
11
|
-
| "5"
|
|
12
|
-
| "6"
|
|
13
|
-
| "7"
|
|
14
|
-
| "8"
|
|
15
|
-
| "9"
|
|
16
|
-
| "10"
|
|
17
|
-
| "11"
|
|
18
|
-
| "12"
|
|
19
|
-
| "14"
|
|
20
|
-
| "16"
|
|
21
|
-
| "18"
|
|
22
|
-
| "20"
|
|
23
|
-
| "24"
|
|
24
|
-
| "32";
|
|
25
|
-
|
|
26
|
-
export type SpaceDelimitedAttribute<T extends string> =
|
|
27
|
-
| T
|
|
28
|
-
| `${T} ${T}`
|
|
29
|
-
| `${T} ${T} ${T}`
|
|
30
|
-
| `${T} ${T} ${T} ${T}`;
|
|
31
|
-
|
|
32
|
-
type FixedResponsiveT<T> = {
|
|
33
|
-
[Breakpoint in BreakpointsAlias]?: T;
|
|
34
|
-
};
|
|
35
|
-
|
|
36
|
-
export type ResponsiveProp<T> = T | FixedResponsiveT<T>;
|
|
1
|
+
import { ResponsiveProp } from "./types";
|
|
37
2
|
|
|
38
3
|
export function getResponsiveValue<T = string>(
|
|
39
4
|
componentName: string,
|
|
@@ -3,6 +3,7 @@ import surfaceColors from "@navikt/ds-tokens/src/colors-surface.json";
|
|
|
3
3
|
import borderColors from "@navikt/ds-tokens/src/colors-border.json";
|
|
4
4
|
import borderRadii from "@navikt/ds-tokens/src/border.json";
|
|
5
5
|
import shadows from "@navikt/ds-tokens/src/shadow.json";
|
|
6
|
+
import Spacing from "@navikt/ds-tokens/src/spacing.json";
|
|
6
7
|
|
|
7
8
|
export type BackgroundToken =
|
|
8
9
|
| keyof typeof bgColors.a
|
|
@@ -12,3 +13,18 @@ export type BorderRadiiToken =
|
|
|
12
13
|
| keyof (typeof borderRadii.a)["border-radius"]
|
|
13
14
|
| "0";
|
|
14
15
|
export type ShadowToken = keyof typeof shadows.a.shadow;
|
|
16
|
+
|
|
17
|
+
export type BreakpointsAlias = "xs" | "sm" | "md" | "lg" | "xl";
|
|
18
|
+
|
|
19
|
+
export type SpacingScale = keyof (typeof Spacing)["a"]["spacing"];
|
|
20
|
+
|
|
21
|
+
export type SpaceDelimitedAttribute<T extends string> =
|
|
22
|
+
| T
|
|
23
|
+
| `${T} ${T}`
|
|
24
|
+
| `${T} ${T} ${T}`
|
|
25
|
+
| `${T} ${T} ${T} ${T}`;
|
|
26
|
+
type FixedResponsiveT<T> = {
|
|
27
|
+
[Breakpoint in BreakpointsAlias]?: T;
|
|
28
|
+
};
|
|
29
|
+
|
|
30
|
+
export type ResponsiveProp<T> = T | FixedResponsiveT<T>;
|
package/src/loader/Loader.tsx
CHANGED
|
@@ -52,7 +52,7 @@ export type LoaderType = React.ForwardRefExoticComponent<
|
|
|
52
52
|
*
|
|
53
53
|
* @example
|
|
54
54
|
* ```jsx
|
|
55
|
-
* <Loader size="3xlarge" title="
|
|
55
|
+
* <Loader size="3xlarge" title="Venter..." />
|
|
56
56
|
* ```
|
|
57
57
|
*/
|
|
58
58
|
export const Loader: LoaderType = forwardRef<SVGSVGElement, LoaderProps>(
|