@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.
Files changed (60) hide show
  1. package/_docs.json +30 -9
  2. package/cjs/accordion/AccordionHeader.js +2 -2
  3. package/cjs/form/combobox/FilteredOptions/filteredOptionsContext.js +1 -2
  4. package/cjs/form/combobox/Input/Input.js +13 -5
  5. package/cjs/layout/sidemal-test/Sidebar.js +1 -1
  6. package/cjs/loader/Loader.js +1 -1
  7. package/cjs/modal/Modal.js +35 -14
  8. package/cjs/tooltip/Tooltip.js +14 -3
  9. package/esm/accordion/AccordionHeader.js +2 -2
  10. package/esm/accordion/AccordionHeader.js.map +1 -1
  11. package/esm/form/combobox/FilteredOptions/filteredOptionsContext.js +1 -2
  12. package/esm/form/combobox/FilteredOptions/filteredOptionsContext.js.map +1 -1
  13. package/esm/form/combobox/Input/Input.js +13 -5
  14. package/esm/form/combobox/Input/Input.js.map +1 -1
  15. package/esm/layout/bleed/Bleed.d.ts +1 -1
  16. package/esm/layout/bleed/Bleed.js +1 -1
  17. package/esm/layout/bleed/Bleed.js.map +1 -1
  18. package/esm/layout/box/Box.d.ts +1 -2
  19. package/esm/layout/box/Box.js +1 -1
  20. package/esm/layout/box/Box.js.map +1 -1
  21. package/esm/layout/grid/HGrid.d.ts +1 -1
  22. package/esm/layout/grid/HGrid.js +1 -1
  23. package/esm/layout/grid/HGrid.js.map +1 -1
  24. package/esm/layout/responsive/Responsive.d.ts +1 -1
  25. package/esm/layout/sidemal-test/Sidebar.js +1 -1
  26. package/esm/layout/sidemal-test/Sidebar.js.map +1 -1
  27. package/esm/layout/stack/Stack.d.ts +1 -1
  28. package/esm/layout/stack/Stack.js +1 -1
  29. package/esm/layout/stack/Stack.js.map +1 -1
  30. package/esm/layout/utilities/css.d.ts +1 -8
  31. package/esm/layout/utilities/css.js.map +1 -1
  32. package/esm/layout/utilities/types.d.ts +9 -0
  33. package/esm/loader/Loader.d.ts +1 -1
  34. package/esm/loader/Loader.js +1 -1
  35. package/esm/modal/Modal.js +35 -14
  36. package/esm/modal/Modal.js.map +1 -1
  37. package/esm/modal/ModalContext.d.ts +1 -0
  38. package/esm/modal/ModalContext.js.map +1 -1
  39. package/esm/modal/types.d.ts +7 -0
  40. package/esm/tooltip/Tooltip.js +16 -5
  41. package/esm/tooltip/Tooltip.js.map +1 -1
  42. package/package.json +3 -3
  43. package/src/accordion/AccordionHeader.tsx +3 -3
  44. package/src/form/combobox/FilteredOptions/filteredOptionsContext.tsx +1 -2
  45. package/src/form/combobox/Input/Input.tsx +19 -4
  46. package/src/form/combobox/combobox.stories.tsx +44 -0
  47. package/src/layout/bleed/Bleed.tsx +2 -5
  48. package/src/layout/box/Box.tsx +1 -3
  49. package/src/layout/grid/HGrid.tsx +2 -6
  50. package/src/layout/responsive/Responsive.tsx +1 -1
  51. package/src/layout/sidemal-test/Sidebar.tsx +1 -1
  52. package/src/layout/stack/Stack.tsx +2 -6
  53. package/src/layout/utilities/css.ts +1 -36
  54. package/src/layout/utilities/types.ts +16 -0
  55. package/src/loader/Loader.tsx +1 -1
  56. package/src/modal/Modal.tsx +50 -20
  57. package/src/modal/ModalContext.ts +1 -0
  58. package/src/modal/modal.stories.tsx +30 -2
  59. package/src/modal/types.ts +7 -0
  60. 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/css";
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, } from "../utilities/css";
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,EACL,kBAAkB,EAClB,kBAAkB,GAGnB,MAAM,kBAAkB,CAAC;AAoC1B,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
+ {"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
- export type BreakpointsAlias = "xs" | "sm" | "md" | "lg" | "xl";
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":"AAqCA,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"}
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 {};
@@ -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="venter..." />
40
+ * <Loader size="3xlarge" title="Venter..." />
41
41
  * ```
42
42
  */
43
43
  export declare const Loader: LoaderType;
@@ -20,7 +20,7 @@ import { omit, useId } from "../util";
20
20
  *
21
21
  * @example
22
22
  * ```jsx
23
- * <Loader size="3xlarge" title="venter..." />
23
+ * <Loader size="3xlarge" title="Venter..." />
24
24
  * ```
25
25
  */
26
26
  export const Loader = forwardRef((_a, ref) => {
@@ -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 component = (React.createElement("dialog", Object.assign({}, rest, { ref: mergedRef, className: cl("navds-modal", className, {
106
- "navds-modal--polyfilled": needPolyfill,
107
- "navds-modal--autowidth": !width,
108
- [`navds-modal--${width}`]: isWidthPreset,
109
- }), style: Object.assign(Object.assign({}, style), (!isWidthPreset ? { width } : {})), onCancel: (event) => {
110
- // FYI: onCancel fires when you press Esc
111
- if (onBeforeClose && onBeforeClose() === false) {
112
- event.preventDefault();
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
- else if (onCancel)
115
- onCancel(event);
116
- }, "aria-labelledby": !ariaLabelledby && !rest["aria-label"] && header
117
- ? ariaLabelId
118
- : ariaLabelledby }),
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)),
@@ -1 +1 @@
1
- {"version":3,"file":"Modal.js","sourceRoot":"","sources":["../../src/modal/Modal.tsx"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"Modal.js","sourceRoot":"","sources":["../../src/modal/Modal.tsx"],"names":[],"mappings":"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"}
@@ -1,6 +1,7 @@
1
1
  import React from "react";
2
2
  interface ModalContextProps {
3
3
  closeHandler?: React.MouseEventHandler<HTMLButtonElement>;
4
+ ref: React.RefObject<HTMLDialogElement>;
4
5
  }
5
6
  export declare const ModalContext: React.Context<ModalContextProps | null>;
6
7
  export {};
@@ -1 +1 @@
1
- {"version":3,"file":"ModalContext.js","sourceRoot":"","sources":["../../src/modal/ModalContext.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,MAAM,OAAO,CAAC;AAK1B,MAAM,CAAC,MAAM,YAAY,GAAG,KAAK,CAAC,aAAa,CAA2B,IAAI,CAAC,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"}
@@ -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
  * */
@@ -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, autoUpdate, flip, FloatingPortal, offset, safePolygon, shift, useDismiss, useFloating, useFocus, useHover, useInteractions, } from "@floating-ui/react";
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 rootElement = (_b = useProvider()) === null || _b === void 0 ? void 0 : _b.rootElement;
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: autoUpdate,
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":"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"}
1
+ {"version":3,"file":"Tooltip.js","sourceRoot":"","sources":["../../src/tooltip/Tooltip.tsx"],"names":[],"mappings":";;;;;;;;;;;AAAA,OAAO,EACL,cAAc,EACd,UAAU,EACV,KAAK,IAAI,OAAO,EAChB,IAAI,EACJ,MAAM,EACN,WAAW,EACX,KAAK,EACL,UAAU,EACV,WAAW,EACX,QAAQ,EACR,QAAQ,EACR,eAAe,GAChB,MAAM,oBAAoB,CAAC;AAC5B,OAAO,EAAE,MAAM,MAAM,CAAC;AACtB,OAAO,KAAK,EAAE,EAEZ,YAAY,EACZ,UAAU,EACV,UAAU,EACV,OAAO,EACP,MAAM,EACN,QAAQ,GACT,MAAM,OAAO,CAAC;AACf,OAAO,EAAE,YAAY,EAAE,MAAM,uBAAuB,CAAC;AACrD,OAAO,EAAE,WAAW,EAAE,MAAM,aAAa,CAAC;AAC1C,OAAO,EAAE,MAAM,EAAE,MAAM,eAAe,CAAC;AACvC,OAAO,EAAE,SAAS,EAAE,KAAK,EAAE,MAAM,SAAS,CAAC;AAqD3C;;;;;;;;;;;;GAYG;AACH,MAAM,CAAC,MAAM,OAAO,GAAG,UAAU,CAC/B,CACE,EAcC,EACD,GAAG,EACH,EAAE;;QAhBF,EACE,QAAQ,EACR,SAAS,EACT,KAAK,EAAE,MAAM,GAAG,IAAI,EACpB,SAAS,EAAE,UAAU,GAAG,KAAK,EAC7B,IAAI,EAAE,QAAQ,EACd,WAAW,GAAG,KAAK,EACnB,MAAM,EAAE,OAAO,EACf,OAAO,EACP,KAAK,GAAG,GAAG,EACX,EAAE,EACF,IAAI,EACJ,OAAO,GAAG,EAAE,OAEb,EADI,IAAI,cAbT,6HAcC,CADQ;IAIT,MAAM,CAAC,IAAI,EAAE,OAAO,CAAC,GAAG,QAAQ,CAAC,WAAW,CAAC,CAAC;IAC9C,MAAM,QAAQ,GAAG,MAAM,CAAwB,IAAI,CAAC,CAAC;IACrD,MAAM,YAAY,GAAG,UAAU,CAAC,YAAY,CAAC,CAAC;IAC9C,MAAM,mBAAmB,GAAG,MAAA,WAAW,EAAE,0CAAE,WAAW,CAAC;IACvD,MAAM,WAAW,GAAG,YAAY;QAC9B,CAAC,CAAC,YAAY,CAAC,GAAG,CAAC,OAAO;QAC1B,CAAC,CAAC,mBAAmB,CAAC;IAExB,MAAM,EACJ,CAAC,EACD,CAAC,EACD,QAAQ,EACR,OAAO,EACP,SAAS,EACT,cAAc,EAAE,EACd,KAAK,EAAE,EAAE,CAAC,EAAE,MAAM,EAAE,CAAC,EAAE,MAAM,EAAE,GAAG,EAAE,EACpC,IAAI,EAAE,EAAE,eAAe,EAAE,GAAG,EAAE,GAC/B,EACD,IAAI,GACL,GAAG,WAAW,CAAC;QACd,SAAS,EAAE,UAAU;QACrB,IAAI,EAAE,QAAQ,aAAR,QAAQ,cAAR,QAAQ,GAAI,IAAI;QACtB,YAAY,EAAE,CAAC,KAAK,EAAE,EAAE,CAAC,OAAO,CAAC,KAAK,CAAC;QACvC,UAAU,EAAE;YACV,MAAM,CAAC,OAAO,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC;YAC3C,KAAK,EAAE;YACP,IAAI,CAAC,EAAE,OAAO,EAAE,CAAC,EAAE,kBAAkB,EAAE,CAAC,QAAQ,EAAE,KAAK,CAAC,EAAE,CAAC;YAC3D,OAAO,CAAC,EAAE,OAAO,EAAE,QAAQ,EAAE,OAAO,EAAE,CAAC,EAAE,CAAC;SAC3C;QACD,oBAAoB,EAAE,YAAY;YAChC,CAAC,CAAC,CAAC,SAAS,EAAE,QAAQ,EAAE,MAAM,EAAE,EAAE;YAC9B,uFAAuF;YACvF,yFAAyF;YACzF,UAAU,CAAC,SAAS,EAAE,QAAQ,EAAE,MAAM,EAAE,EAAE,cAAc,EAAE,IAAI,EAAE,CAAC;YACrE,CAAC,CAAC,UAAU;QACd,QAAQ,EAAE,YAAY,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,SAAS;KAC7C,CAAC,CAAC;IAEH,MAAM,EAAE,iBAAiB,EAAE,gBAAgB,EAAE,GAAG,eAAe,CAAC;QAC9D,QAAQ,CAAC,OAAO,EAAE,EAAE,WAAW,EAAE,WAAW,EAAE,EAAE,MAAM,EAAE,KAAK,EAAE,CAAC;QAChE,QAAQ,CAAC,OAAO,CAAC;QACjB,UAAU,CAAC,OAAO,CAAC;KACpB,CAAC,CAAC;IAEH,MAAM,MAAM,GAAG,KAAK,CAAC,EAAE,CAAC,CAAC;IAEzB,MAAM,SAAS,GAAG,OAAO,CACvB,GAAG,EAAE,CAAC,SAAS,CAAC,CAAC,GAAG,EAAE,IAAI,CAAC,WAAW,CAAC,CAAC,EACxC,CAAC,IAAI,CAAC,WAAW,EAAE,GAAG,CAAC,CACxB,CAAC;IACF,MAAM,cAAc,GAAG,OAAO,CAC5B,GAAG,EAAE,CAAC,SAAS,CAAC,CAAE,QAAgB,CAAC,GAAG,EAAE,IAAI,CAAC,YAAY,CAAC,CAAC,EAC3D,CAAC,QAAQ,EAAE,IAAI,CAAC,YAAY,CAAC,CAC9B,CAAC;IAEF,IACE,CAAC,QAAQ;QACT,CAAA,QAAQ,aAAR,QAAQ,uBAAR,QAAQ,CAAE,IAAI,MAAK,KAAK,CAAC,QAAQ;QAChC,QAAgB,KAAK,KAAK,CAAC,QAAQ,EACpC;QACA,OAAO,CAAC,KAAK,CACX,yFAAyF,CAC1F,CAAC;QACF,OAAO,IAAI,CAAC;KACb;IAED,IAAI,CAAA,OAAO,aAAP,OAAO,uBAAP,OAAO,CAAE,MAAM,IAAG,OAAO,EAAE;QAC7B,CAAC,QAAQ,aAAR,QAAQ,cAAR,QAAQ,GAAI,IAAI,CAAC;YAChB,OAAO,CAAC,IAAI,CACV,yJAAyJ,OAAO,CAAC,MAAM,sBAAsB,OAAO,EAAE,CACvM,CAAC;KACL;IAED,OAAO,CACL;QACG,YAAY,CACX,QAAQ,EACR,iBAAiB,iCACZ,QAAQ,CAAC,KAAK,KACjB,GAAG,EAAE,cAAc,EACnB,kBAAkB,EAChB,CAAA,QAAQ,aAAR,QAAQ,cAAR,QAAQ,GAAI,IAAI;gBACd,CAAC,CAAC,EAAE,CAAC,MAAM,EAAE,QAAQ,aAAR,QAAQ,uBAAR,QAAQ,CAAE,KAAK,CAAC,kBAAkB,CAAC,CAAC;gBACjD,CAAC,CAAC,QAAQ,aAAR,QAAQ,uBAAR,QAAQ,CAAE,KAAK,CAAC,kBAAkB,CAAC,IACzC,CACH;QACD,oBAAC,cAAc,IAAC,IAAI,EAAE,WAAW,IAC9B,CAAC,QAAQ,aAAR,QAAQ,cAAR,QAAQ,GAAI,IAAI,CAAC,IAAI,CACrB,6CACM,gBAAgB,iCACf,IAAI,KACP,GAAG,EAAE,SAAS,EACd,KAAK,EAAE;gBACL,QAAQ,EAAE,QAAQ;gBAClB,GAAG,EAAE,CAAC,aAAD,CAAC,cAAD,CAAC,GAAI,CAAC;gBACX,IAAI,EAAE,CAAC,aAAD,CAAC,cAAD,CAAC,GAAI,CAAC;gBACZ,UAAU,EAAE,eAAe,CAAC,CAAC,CAAC,QAAQ,CAAC,CAAC,CAAC,SAAS;aACnD,EACD,IAAI,EAAE,SAAS,EACf,EAAE,EAAE,MAAM,EACV,SAAS,EAAE,EAAE,CACX,eAAe,EACf,kCAAkC,EAClC,SAAS,CACV,IACD,iBACS,SAAS;YAEnB,OAAO;YACP,IAAI,IAAI,CACP,8BAAM,SAAS,EAAC,qBAAqB,IAClC,IAAI,CAAC,GAAG,CAAC,CAAC,GAAG,EAAE,EAAE,CAAC,CACjB,oBAAC,MAAM,IACL,IAAI,EAAC,OAAO,EACZ,EAAE,EAAC,KAAK,EACR,GAAG,EAAE,GAAG,EACR,SAAS,EAAC,oBAAoB,IAE7B,GAAG,CACG,CACV,CAAC,CACG,CACR;YACA,MAAM,IAAI,CACT,6BACE,GAAG,EAAE,CAAC,IAAI,EAAE,EAAE;oBACZ,QAAQ,CAAC,OAAO,GAAG,IAAI,CAAC;gBAC1B,CAAC,EACD,SAAS,EAAC,sBAAsB,EAChC,KAAK,EAAE;oBACL,IAAI,EAAE,MAAM,IAAI,IAAI,CAAC,CAAC,CAAC,GAAG,MAAM,IAAI,CAAC,CAAC,CAAC,EAAE;oBACzC,GAAG,EAAE,MAAM,IAAI,IAAI,CAAC,CAAC,CAAC,GAAG,MAAM,IAAI,CAAC,CAAC,CAAC,EAAE;oBACxC,KAAK,EAAE,EAAE;oBACT,MAAM,EAAE,EAAE;oBACV,CAAC;wBACC,GAAG,EAAE,QAAQ;wBACb,KAAK,EAAE,MAAM;wBACb,MAAM,EAAE,KAAK;wBACb,IAAI,EAAE,OAAO;qBACd,CAAC,SAAS,CAAC,CAAC,EAAE,QAAQ;iBACxB,GACD,CACH,CACG,CACP,CACc,CAChB,CACJ,CAAC;AACJ,CAAC,CACF,CAAC;AAEF,eAAe,OAAO,CAAC"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@navikt/ds-react",
3
- "version": "5.7.6",
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.7.6",
42
- "@navikt/ds-tokens": "^5.7.6",
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
- <div className="navds-accordion__icon-wrapper">
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
- </div>
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 && !selectedOptions.includes(currentOption))
60
+ if (!isMultiSelect && !isTextInSelectedOptions(currentOption))
54
61
  toggleIsListOpen(false);
55
- } else if (shouldAutocomplete && selectedOptions.includes(value)) {
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
- toggleOption(value, event);
63
- if (!isMultiSelect && !selectedOptions.includes(value))
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
- ResponsiveProp,
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;
@@ -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
- getResponsiveProps,
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/css";
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
- getResponsiveProps,
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
- export type BreakpointsAlias = "xs" | "sm" | "md" | "lg" | "xl";
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>;
@@ -52,7 +52,7 @@ export type LoaderType = React.ForwardRefExoticComponent<
52
52
  *
53
53
  * @example
54
54
  * ```jsx
55
- * <Loader size="3xlarge" title="venter..." />
55
+ * <Loader size="3xlarge" title="Venter..." />
56
56
  * ```
57
57
  */
58
58
  export const Loader: LoaderType = forwardRef<SVGSVGElement, LoaderProps>(