@navikt/ds-react 7.4.1 → 7.4.2

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 (62) hide show
  1. package/cjs/form/combobox/Input/Input.js +10 -1
  2. package/cjs/form/combobox/Input/Input.js.map +1 -1
  3. package/cjs/form/error-summary/ErrorSummary.js +4 -2
  4. package/cjs/form/error-summary/ErrorSummary.js.map +1 -1
  5. package/cjs/form/form-progress/FormProgress.js +1 -3
  6. package/cjs/form/form-progress/FormProgress.js.map +1 -1
  7. package/cjs/form/textarea/Textarea.js +1 -3
  8. package/cjs/form/textarea/Textarea.js.map +1 -1
  9. package/cjs/form/textarea/TextareaCounter.d.ts +2 -1
  10. package/cjs/form/textarea/TextareaCounter.js +14 -9
  11. package/cjs/form/textarea/TextareaCounter.js.map +1 -1
  12. package/cjs/progress-bar/ProgressBar.js +3 -5
  13. package/cjs/progress-bar/ProgressBar.js.map +1 -1
  14. package/cjs/util/i18n/i18n.context.d.ts +1 -3
  15. package/cjs/util/i18n/i18n.context.js +5 -5
  16. package/cjs/util/i18n/i18n.context.js.map +1 -1
  17. package/cjs/util/i18n/locales/en.d.ts +8 -0
  18. package/cjs/util/i18n/locales/en.js +8 -0
  19. package/cjs/util/i18n/locales/en.js.map +1 -1
  20. package/cjs/util/i18n/locales/nb.d.ts +9 -0
  21. package/cjs/util/i18n/locales/nb.js +9 -0
  22. package/cjs/util/i18n/locales/nb.js.map +1 -1
  23. package/cjs/util/i18n/locales/nn.d.ts +8 -0
  24. package/cjs/util/i18n/locales/nn.js +8 -0
  25. package/cjs/util/i18n/locales/nn.js.map +1 -1
  26. package/esm/form/combobox/Input/Input.js +10 -1
  27. package/esm/form/combobox/Input/Input.js.map +1 -1
  28. package/esm/form/error-summary/ErrorSummary.js +4 -2
  29. package/esm/form/error-summary/ErrorSummary.js.map +1 -1
  30. package/esm/form/form-progress/FormProgress.js +1 -3
  31. package/esm/form/form-progress/FormProgress.js.map +1 -1
  32. package/esm/form/textarea/Textarea.js +1 -3
  33. package/esm/form/textarea/Textarea.js.map +1 -1
  34. package/esm/form/textarea/TextareaCounter.d.ts +2 -1
  35. package/esm/form/textarea/TextareaCounter.js +14 -9
  36. package/esm/form/textarea/TextareaCounter.js.map +1 -1
  37. package/esm/progress-bar/ProgressBar.js +3 -5
  38. package/esm/progress-bar/ProgressBar.js.map +1 -1
  39. package/esm/util/i18n/i18n.context.d.ts +1 -3
  40. package/esm/util/i18n/i18n.context.js +5 -5
  41. package/esm/util/i18n/i18n.context.js.map +1 -1
  42. package/esm/util/i18n/locales/en.d.ts +8 -0
  43. package/esm/util/i18n/locales/en.js +8 -0
  44. package/esm/util/i18n/locales/en.js.map +1 -1
  45. package/esm/util/i18n/locales/nb.d.ts +9 -0
  46. package/esm/util/i18n/locales/nb.js +9 -0
  47. package/esm/util/i18n/locales/nb.js.map +1 -1
  48. package/esm/util/i18n/locales/nn.d.ts +8 -0
  49. package/esm/util/i18n/locales/nn.js +8 -0
  50. package/esm/util/i18n/locales/nn.js.map +1 -1
  51. package/package.json +3 -3
  52. package/src/form/combobox/Input/Input.tsx +14 -1
  53. package/src/form/error-summary/ErrorSummary.tsx +4 -2
  54. package/src/form/form-progress/FormProgress.tsx +1 -3
  55. package/src/form/textarea/Textarea.tsx +7 -11
  56. package/src/form/textarea/TextareaCounter.tsx +31 -7
  57. package/src/progress-bar/ProgressBar.tsx +3 -5
  58. package/src/util/i18n/i18n.context.test.tsx +4 -6
  59. package/src/util/i18n/i18n.context.ts +5 -5
  60. package/src/util/i18n/locales/en.ts +8 -0
  61. package/src/util/i18n/locales/nb.ts +9 -0
  62. package/src/util/i18n/locales/nn.ts +8 -0
@@ -1 +1 @@
1
- {"version":3,"file":"Textarea.js","sourceRoot":"","sources":["../../../src/form/textarea/Textarea.tsx"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"Textarea.js","sourceRoot":"","sources":["../../../src/form/textarea/Textarea.tsx"],"names":[],"mappings":"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"}
@@ -1,10 +1,11 @@
1
1
  import React from "react";
2
2
  import type { TextareaProps } from "./Textarea.js";
3
3
  interface Props {
4
+ maxLengthId: string;
4
5
  maxLength: number;
5
6
  currentLength: number;
6
7
  size: TextareaProps["size"];
7
8
  i18n: TextareaProps["i18n"];
8
9
  }
9
- declare const TextareaCounter: ({ maxLength, currentLength, size, i18n }: Props) => React.JSX.Element;
10
+ declare const TextareaCounter: ({ maxLengthId, maxLength, currentLength, size, i18n, }: Props) => React.JSX.Element;
10
11
  export default TextareaCounter;
@@ -2,7 +2,14 @@ import cl from "clsx";
2
2
  import React, { useEffect, useState } from "react";
3
3
  import { BodyShort } from "../../typography/index.js";
4
4
  import debounce from "../../util/debounce.js";
5
- const TextareaCounter = ({ maxLength, currentLength, size, i18n }) => {
5
+ import { useI18n } from "../../util/i18n/i18n.context.js";
6
+ const TextareaCounter = ({ maxLengthId, maxLength, currentLength, size, i18n, }) => {
7
+ const translate = useI18n("Textarea", {
8
+ charsLeft: (i18n === null || i18n === void 0 ? void 0 : i18n.counterLeft) ? `{chars} ${i18n.counterLeft}` : undefined,
9
+ charsTooMany: (i18n === null || i18n === void 0 ? void 0 : i18n.counterTooMuch)
10
+ ? `{chars} ${i18n.counterTooMuch}`
11
+ : undefined,
12
+ });
6
13
  const difference = maxLength - currentLength;
7
14
  const [debouncedDiff, setDebouncedDiff] = useState(difference);
8
15
  useEffect(() => {
@@ -15,16 +22,14 @@ const TextareaCounter = ({ maxLength, currentLength, size, i18n }) => {
15
22
  };
16
23
  }, [difference]);
17
24
  return (React.createElement(React.Fragment, null,
18
- difference < 20 && (React.createElement("span", { role: "status", className: "navds-textarea__sr-counter navds-sr-only" }, getCounterText(debouncedDiff, i18n))),
25
+ React.createElement("span", { id: maxLengthId, className: "navds-sr-only" }, translate("maxLength", { maxLength })),
26
+ difference < 20 && (React.createElement("span", { role: "status", className: "navds-textarea__sr-counter navds-sr-only" }, getCounterText(debouncedDiff, translate))),
19
27
  React.createElement(BodyShort, { className: cl("navds-textarea__counter", {
20
28
  "navds-textarea__counter--error": difference < 0,
21
- }), size: size }, getCounterText(difference, i18n))));
22
- };
23
- const getCounterText = (difference, i18n) => {
24
- var _a, _b;
25
- return difference < 0
26
- ? `${Math.abs(difference)} ${(_a = i18n === null || i18n === void 0 ? void 0 : i18n.counterTooMuch) !== null && _a !== void 0 ? _a : "tegn for mye"}`
27
- : `${difference} ${(_b = i18n === null || i18n === void 0 ? void 0 : i18n.counterLeft) !== null && _b !== void 0 ? _b : "tegn igjen"}`;
29
+ }), size: size }, getCounterText(difference, translate))));
28
30
  };
31
+ const getCounterText = (difference, translate) => difference < 0
32
+ ? translate("charsTooMany", { chars: Math.abs(difference) })
33
+ : translate("charsLeft", { chars: difference });
29
34
  export default TextareaCounter;
30
35
  //# sourceMappingURL=TextareaCounter.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"TextareaCounter.js","sourceRoot":"","sources":["../../../src/form/textarea/TextareaCounter.tsx"],"names":[],"mappings":"AAAA,OAAO,EAAE,MAAM,MAAM,CAAC;AACtB,OAAO,KAAK,EAAE,EAAE,SAAS,EAAE,QAAQ,EAAE,MAAM,OAAO,CAAC;AACnD,OAAO,EAAE,SAAS,EAAE,MAAM,kBAAkB,CAAC;AAC7C,OAAO,QAAQ,MAAM,qBAAqB,CAAC;AAU3C,MAAM,eAAe,GAAG,CAAC,EAAE,SAAS,EAAE,aAAa,EAAE,IAAI,EAAE,IAAI,EAAS,EAAE,EAAE;IAC1E,MAAM,UAAU,GAAG,SAAS,GAAG,aAAa,CAAC;IAE7C,MAAM,CAAC,aAAa,EAAE,gBAAgB,CAAC,GAAG,QAAQ,CAAC,UAAU,CAAC,CAAC;IAE/D,SAAS,CAAC,GAAG,EAAE;QACb,MAAM,YAAY,GAAG,QAAQ,CAAC,GAAG,EAAE;YACjC,gBAAgB,CAAC,UAAU,CAAC,CAAC;QAC/B,CAAC,EAAE,IAAI,CAAC,CAAC;QACT,YAAY,EAAE,CAAC;QAEf,OAAO,GAAG,EAAE;YACV,YAAY,CAAC,KAAK,EAAE,CAAC;QACvB,CAAC,CAAC;IACJ,CAAC,EAAE,CAAC,UAAU,CAAC,CAAC,CAAC;IAEjB,OAAO,CACL;QACG,UAAU,GAAG,EAAE,IAAI,CAClB,8BACE,IAAI,EAAC,QAAQ,EACb,SAAS,EAAC,0CAA0C,IAEnD,cAAc,CAAC,aAAa,EAAE,IAAI,CAAC,CAC/B,CACR;QAED,oBAAC,SAAS,IACR,SAAS,EAAE,EAAE,CAAC,yBAAyB,EAAE;gBACvC,gCAAgC,EAAE,UAAU,GAAG,CAAC;aACjD,CAAC,EACF,IAAI,EAAE,IAAI,IAET,cAAc,CAAC,UAAU,EAAE,IAAI,CAAC,CACvB,CACX,CACJ,CAAC;AACJ,CAAC,CAAC;AAEF,MAAM,cAAc,GAAG,CAAC,UAAkB,EAAE,IAA2B,EAAE,EAAE;;IACzE,OAAA,UAAU,GAAG,CAAC;QACZ,CAAC,CAAC,GAAG,IAAI,CAAC,GAAG,CAAC,UAAU,CAAC,IAAI,MAAA,IAAI,aAAJ,IAAI,uBAAJ,IAAI,CAAE,cAAc,mCAAI,cAAc,EAAE;QACrE,CAAC,CAAC,GAAG,UAAU,IAAI,MAAA,IAAI,aAAJ,IAAI,uBAAJ,IAAI,CAAE,WAAW,mCAAI,YAAY,EAAE,CAAA;CAAA,CAAC;AAE3D,eAAe,eAAe,CAAC"}
1
+ {"version":3,"file":"TextareaCounter.js","sourceRoot":"","sources":["../../../src/form/textarea/TextareaCounter.tsx"],"names":[],"mappings":"AAAA,OAAO,EAAE,MAAM,MAAM,CAAC;AACtB,OAAO,KAAK,EAAE,EAAE,SAAS,EAAE,QAAQ,EAAE,MAAM,OAAO,CAAC;AACnD,OAAO,EAAE,SAAS,EAAE,MAAM,kBAAkB,CAAC;AAC7C,OAAO,QAAQ,MAAM,qBAAqB,CAAC;AAC3C,OAAO,EAAE,OAAO,EAAE,MAAM,8BAA8B,CAAC;AAWvD,MAAM,eAAe,GAAG,CAAC,EACvB,WAAW,EACX,SAAS,EACT,aAAa,EACb,IAAI,EACJ,IAAI,GACE,EAAE,EAAE;IACV,MAAM,SAAS,GAAG,OAAO,CAAC,UAAU,EAAE;QACpC,SAAS,EAAE,CAAA,IAAI,aAAJ,IAAI,uBAAJ,IAAI,CAAE,WAAW,EAAC,CAAC,CAAC,WAAW,IAAI,CAAC,WAAW,EAAE,CAAC,CAAC,CAAC,SAAS;QACxE,YAAY,EAAE,CAAA,IAAI,aAAJ,IAAI,uBAAJ,IAAI,CAAE,cAAc;YAChC,CAAC,CAAC,WAAW,IAAI,CAAC,cAAc,EAAE;YAClC,CAAC,CAAC,SAAS;KACd,CAAC,CAAC;IAEH,MAAM,UAAU,GAAG,SAAS,GAAG,aAAa,CAAC;IAC7C,MAAM,CAAC,aAAa,EAAE,gBAAgB,CAAC,GAAG,QAAQ,CAAC,UAAU,CAAC,CAAC;IAE/D,SAAS,CAAC,GAAG,EAAE;QACb,MAAM,YAAY,GAAG,QAAQ,CAAC,GAAG,EAAE;YACjC,gBAAgB,CAAC,UAAU,CAAC,CAAC;QAC/B,CAAC,EAAE,IAAI,CAAC,CAAC;QACT,YAAY,EAAE,CAAC;QAEf,OAAO,GAAG,EAAE;YACV,YAAY,CAAC,KAAK,EAAE,CAAC;QACvB,CAAC,CAAC;IACJ,CAAC,EAAE,CAAC,UAAU,CAAC,CAAC,CAAC;IAEjB,OAAO,CACL;QACE,8BAAM,EAAE,EAAE,WAAW,EAAE,SAAS,EAAC,eAAe,IAC7C,SAAS,CAAC,WAAW,EAAE,EAAE,SAAS,EAAE,CAAC,CACjC;QAEN,UAAU,GAAG,EAAE,IAAI,CAClB,8BACE,IAAI,EAAC,QAAQ,EACb,SAAS,EAAC,0CAA0C,IAEnD,cAAc,CAAC,aAAa,EAAE,SAAS,CAAC,CACpC,CACR;QAED,oBAAC,SAAS,IACR,SAAS,EAAE,EAAE,CAAC,yBAAyB,EAAE;gBACvC,gCAAgC,EAAE,UAAU,GAAG,CAAC;aACjD,CAAC,EACF,IAAI,EAAE,IAAI,IAET,cAAc,CAAC,UAAU,EAAE,SAAS,CAAC,CAC5B,CACX,CACJ,CAAC;AACJ,CAAC,CAAC;AAEF,MAAM,cAAc,GAAG,CACrB,UAAkB,EAClB,SAGW,EACX,EAAE,CACF,UAAU,GAAG,CAAC;IACZ,CAAC,CAAC,SAAS,CAAC,cAAc,EAAE,EAAE,KAAK,EAAE,IAAI,CAAC,GAAG,CAAC,UAAU,CAAC,EAAE,CAAC;IAC5D,CAAC,CAAC,SAAS,CAAC,WAAW,EAAE,EAAE,KAAK,EAAE,UAAU,EAAE,CAAC,CAAC;AAEpD,eAAe,eAAe,CAAC"}
@@ -47,13 +47,11 @@ export const ProgressBar = forwardRef((_a, ref) => {
47
47
  /* biome-ignore lint/a11y/useFocusableInteractive: Progressbar is not interactive. */
48
48
  React.createElement("div", Object.assign({ ref: ref, className: cl("navds-progress-bar", `navds-progress-bar--${size}`, className), "aria-valuemax": (simulated === null || simulated === void 0 ? void 0 : simulated.seconds) ? 0 : Math.round(valueMax), "aria-valuenow": (simulated === null || simulated === void 0 ? void 0 : simulated.seconds) ? 0 : Math.round(value), "aria-valuetext": (simulated === null || simulated === void 0 ? void 0 : simulated.seconds)
49
49
  ? translate("progressUnknown", {
50
- replacements: { seconds: Math.round(simulated === null || simulated === void 0 ? void 0 : simulated.seconds) },
50
+ seconds: Math.round(simulated === null || simulated === void 0 ? void 0 : simulated.seconds),
51
51
  })
52
52
  : translate("progress", {
53
- replacements: {
54
- current: Math.round(value),
55
- max: Math.round(valueMax),
56
- },
53
+ current: Math.round(value),
54
+ max: Math.round(valueMax),
57
55
  }),
58
56
  // biome-ignore lint/a11y/useAriaPropsForRole: We found that adding valueMin was not needed
59
57
  role: "progressbar", "aria-labelledby": ariaLabelledBy, "aria-label": ariaLabel }, rest),
@@ -1 +1 @@
1
- {"version":3,"file":"ProgressBar.js","sourceRoot":"","sources":["../../src/progress-bar/ProgressBar.tsx"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"ProgressBar.js","sourceRoot":"","sources":["../../src/progress-bar/ProgressBar.tsx"],"names":[],"mappings":"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"}
@@ -2,7 +2,5 @@ import { Component, ComponentTranslation, Translations } from "./i18n.types.js";
2
2
  type NestedKeyOf<ObjectType extends object> = {
3
3
  [Key in keyof ObjectType & (string | number)]: ObjectType[Key] extends object ? `${Key}.${NestedKeyOf<ObjectType[Key]>}` : `${Key}`;
4
4
  }[keyof ObjectType & (string | number)];
5
- export declare function useI18n<T extends Component>(componentName: T, ...local: (ComponentTranslation<T> | undefined)[]): (keypath: NestedKeyOf<Translations[T]>, options?: {
6
- replacements: Record<string, string | number>;
7
- }) => string;
5
+ export declare function useI18n<T extends Component>(componentName: T, ...local: (ComponentTranslation<T> | undefined)[]): (keypath: NestedKeyOf<Translations[T]>, replacements?: Record<string, string | number>) => string;
8
6
  export {};
@@ -11,18 +11,18 @@ export function useI18n(componentName, ...local) {
11
11
  /**
12
12
  * https://github.com/Shopify/polaris/blob/2115f9ba2f5bcbf2ad15745233501bff2db81ecf/polaris-react/src/utilities/i18n/I18n.ts#L24
13
13
  */
14
- const translate = (keypath, options) => {
14
+ const translate = (keypath, replacements) => {
15
15
  const text = get(keypath, ...local, ...(Array.isArray(i18n)
16
16
  ? i18n.map((t) => t[componentName])
17
17
  : [i18n[componentName]]));
18
- if (options === null || options === void 0 ? void 0 : options.replacements) {
18
+ if (replacements) {
19
19
  return text.replace(REPLACE_REGEX, (match) => {
20
20
  const replacement = match.substring(1, match.length - 1);
21
- if (options.replacements[replacement] === undefined) {
22
- const replacementData = JSON.stringify(options.replacements);
21
+ if (replacements[replacement] === undefined) {
22
+ const replacementData = JSON.stringify(replacements);
23
23
  throw new Error(`Error translating key '${keypath}'. No replacement syntax ({}) found for key '${replacement}'. The following replacements were passed: '${replacementData}'`);
24
24
  }
25
- return options.replacements[replacement]; // can also be a number, but JS doesn't mind...
25
+ return replacements[replacement]; // can also be a number, but JS doesn't mind...
26
26
  });
27
27
  }
28
28
  return text;
@@ -1 +1 @@
1
- {"version":3,"file":"i18n.context.js","sourceRoot":"","sources":["../../../src/util/i18n/i18n.context.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,UAAU,EAAE,MAAM,OAAO,CAAC;AACnC,OAAO,EAAE,uBAAuB,EAAE,MAAM,sCAAsC,CAAC;AAC/E,OAAO,EAAE,GAAG,EAAE,MAAM,OAAO,CAAC;AAG5B;;GAEG;AACH,MAAM,aAAa,GAAG,UAAU,CAAC;AASjC,MAAM,UAAU,OAAO,CACrB,aAAgB,EAChB,GAAG,KAA8C;IAEjD,MAAM,uBAAuB,GAAG,UAAU,CAAC,uBAAuB,CAAC,CAAC;IACpE,MAAM,IAAI,GAAG,uBAAuB,CAAC,YAAY,CAAC;IAElD;;OAEG;IACH,MAAM,SAAS,GAAG,CAChB,OAAqC,EACrC,OAA2D,EAC3D,EAAE;QACF,MAAM,IAAI,GAAG,GAAG,CACd,OAAO,EACP,GAAG,KAAK,EACR,GAAG,CAAC,KAAK,CAAC,OAAO,CAAC,IAAI,CAAC;YACrB,CAAC,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,aAAa,CAAC,CAAC;YACnC,CAAC,CAAC,CAAC,IAAI,CAAC,aAAa,CAAC,CAAC,CAAC,CAC3B,CAAC;QAEF,IAAI,OAAO,aAAP,OAAO,uBAAP,OAAO,CAAE,YAAY,EAAE,CAAC;YAC1B,OAAO,IAAI,CAAC,OAAO,CAAC,aAAa,EAAE,CAAC,KAAK,EAAE,EAAE;gBAC3C,MAAM,WAAW,GAAG,KAAK,CAAC,SAAS,CAAC,CAAC,EAAE,KAAK,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC;gBAEzD,IAAI,OAAO,CAAC,YAAY,CAAC,WAAW,CAAC,KAAK,SAAS,EAAE,CAAC;oBACpD,MAAM,eAAe,GAAG,IAAI,CAAC,SAAS,CAAC,OAAO,CAAC,YAAY,CAAC,CAAC;oBAE7D,MAAM,IAAI,KAAK,CACb,0BAA0B,OAAO,gDAAgD,WAAW,+CAA+C,eAAe,GAAG,CAC9J,CAAC;gBACJ,CAAC;gBAED,OAAO,OAAO,CAAC,YAAY,CAAC,WAAW,CAAW,CAAC,CAAC,+CAA+C;YACrG,CAAC,CAAC,CAAC;QACL,CAAC;QAED,OAAO,IAAI,CAAC;IACd,CAAC,CAAC;IAEF,OAAO,SAAS,CAAC;AACnB,CAAC"}
1
+ {"version":3,"file":"i18n.context.js","sourceRoot":"","sources":["../../../src/util/i18n/i18n.context.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,UAAU,EAAE,MAAM,OAAO,CAAC;AACnC,OAAO,EAAE,uBAAuB,EAAE,MAAM,sCAAsC,CAAC;AAC/E,OAAO,EAAE,GAAG,EAAE,MAAM,OAAO,CAAC;AAG5B;;GAEG;AACH,MAAM,aAAa,GAAG,UAAU,CAAC;AASjC,MAAM,UAAU,OAAO,CACrB,aAAgB,EAChB,GAAG,KAA8C;IAEjD,MAAM,uBAAuB,GAAG,UAAU,CAAC,uBAAuB,CAAC,CAAC;IACpE,MAAM,IAAI,GAAG,uBAAuB,CAAC,YAAY,CAAC;IAElD;;OAEG;IACH,MAAM,SAAS,GAAG,CAChB,OAAqC,EACrC,YAA8C,EAC9C,EAAE;QACF,MAAM,IAAI,GAAG,GAAG,CACd,OAAO,EACP,GAAG,KAAK,EACR,GAAG,CAAC,KAAK,CAAC,OAAO,CAAC,IAAI,CAAC;YACrB,CAAC,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,aAAa,CAAC,CAAC;YACnC,CAAC,CAAC,CAAC,IAAI,CAAC,aAAa,CAAC,CAAC,CAAC,CAC3B,CAAC;QAEF,IAAI,YAAY,EAAE,CAAC;YACjB,OAAO,IAAI,CAAC,OAAO,CAAC,aAAa,EAAE,CAAC,KAAK,EAAE,EAAE;gBAC3C,MAAM,WAAW,GAAG,KAAK,CAAC,SAAS,CAAC,CAAC,EAAE,KAAK,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC;gBAEzD,IAAI,YAAY,CAAC,WAAW,CAAC,KAAK,SAAS,EAAE,CAAC;oBAC5C,MAAM,eAAe,GAAG,IAAI,CAAC,SAAS,CAAC,YAAY,CAAC,CAAC;oBAErD,MAAM,IAAI,KAAK,CACb,0BAA0B,OAAO,gDAAgD,WAAW,+CAA+C,eAAe,GAAG,CAC9J,CAAC;gBACJ,CAAC;gBAED,OAAO,YAAY,CAAC,WAAW,CAAW,CAAC,CAAC,+CAA+C;YAC7F,CAAC,CAAC,CAAC;QACL,CAAC;QAED,OAAO,IAAI,CAAC;IACd,CAAC,CAAC;IAEF,OAAO,SAAS,CAAC;AACnB,CAAC"}
@@ -39,6 +39,9 @@ declare const _default: {
39
39
  labelSuffix: string;
40
40
  };
41
41
  };
42
+ ErrorSummary: {
43
+ heading: string;
44
+ };
42
45
  Loader: {
43
46
  title: string;
44
47
  };
@@ -57,5 +60,10 @@ declare const _default: {
57
60
  clear: string;
58
61
  search: string;
59
62
  };
63
+ Textarea: {
64
+ maxLength: string;
65
+ charsTooMany: string;
66
+ charsLeft: string;
67
+ };
60
68
  };
61
69
  export default _default;
@@ -39,6 +39,9 @@ export default {
39
39
  labelSuffix: "delete",
40
40
  },
41
41
  },
42
+ ErrorSummary: {
43
+ heading: "You must correct the following errors before you can continue:",
44
+ },
42
45
  Loader: {
43
46
  title: "Waiting…",
44
47
  },
@@ -57,5 +60,10 @@ export default {
57
60
  clear: "Clear",
58
61
  search: "Search",
59
62
  },
63
+ Textarea: {
64
+ maxLength: "Text area with a {maxLength} character limit.",
65
+ charsTooMany: "{chars} characters too many",
66
+ charsLeft: "{chars} characters left",
67
+ },
60
68
  };
61
69
  //# sourceMappingURL=en.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"en.js","sourceRoot":"","sources":["../../../../src/util/i18n/locales/en.ts"],"names":[],"mappings":"AAEA,eAAe;IACb,MAAM,EAAE;QACN,QAAQ,EAAE,WAAW;QACrB,QAAQ,EAAE,WAAW;KACtB;IAED,UAAU,EAAE;QACV,QAAQ,EAAE;YACR,MAAM,EAAE,aAAa;YACrB,cAAc,EAAE,cAAc;YAC9B,WAAW,EAAE,yBAAyB;YACtC,mBAAmB,EAAE,0BAA0B;YAC/C,IAAI,EAAE,MAAM;YACZ,EAAE,EAAE,IAAI;YACR,QAAQ,EAAE,sBAAsB;YAChC,iBAAiB,EAAE,8BAA8B;SAClD;QACD,IAAI,EAAE;YACJ,gBAAgB,EAAE,8BAA8B;YAChD,iBAAiB,EAAE,aAAa;YAChC,SAAS,EAAE,YAAY;YACvB,WAAW,EAAE,cAAc;SAC5B;KACF;IACD,YAAY,EAAE;QACZ,IAAI,EAAE,mCAAmC;QACzC,YAAY,EAAE,gBAAgB;QAC9B,YAAY,EAAE,gBAAgB;KAC/B;IACD,KAAK,EAAE;QACL,UAAU,EAAE,aAAa;QACzB,YAAY,EAAE,eAAe;QAC7B,KAAK,EAAE,OAAO;QACd,IAAI,EAAE,aAAa;QACnB,OAAO,EAAE,SAAS;QAClB,OAAO,EAAE,SAAS;KACnB;IACD,KAAK,EAAE;QACL,SAAS,EAAE;YACT,WAAW,EAAE,QAAQ;SACtB;KACF;IACD,MAAM,EAAE;QACN,KAAK,EAAE,UAAU;KAClB;IACD,KAAK,EAAE;QACL,KAAK,EAAE,OAAO;KACf;IACD,UAAU,EAAE;QACV,QAAQ,EAAE,UAAU;QACpB,IAAI,EAAE,MAAM;KACb;IACD,WAAW,EAAE;QACX,QAAQ,EAAE,oBAAoB;QAC9B,eAAe,EACb,2DAA2D;KAC9D;IACD,MAAM,EAAE;QACN,KAAK,EAAE,OAAO;QACd,MAAM,EAAE,QAAQ;KACjB;CACqB,CAAC"}
1
+ {"version":3,"file":"en.js","sourceRoot":"","sources":["../../../../src/util/i18n/locales/en.ts"],"names":[],"mappings":"AAEA,eAAe;IACb,MAAM,EAAE;QACN,QAAQ,EAAE,WAAW;QACrB,QAAQ,EAAE,WAAW;KACtB;IAED,UAAU,EAAE;QACV,QAAQ,EAAE;YACR,MAAM,EAAE,aAAa;YACrB,cAAc,EAAE,cAAc;YAC9B,WAAW,EAAE,yBAAyB;YACtC,mBAAmB,EAAE,0BAA0B;YAC/C,IAAI,EAAE,MAAM;YACZ,EAAE,EAAE,IAAI;YACR,QAAQ,EAAE,sBAAsB;YAChC,iBAAiB,EAAE,8BAA8B;SAClD;QACD,IAAI,EAAE;YACJ,gBAAgB,EAAE,8BAA8B;YAChD,iBAAiB,EAAE,aAAa;YAChC,SAAS,EAAE,YAAY;YACvB,WAAW,EAAE,cAAc;SAC5B;KACF;IACD,YAAY,EAAE;QACZ,IAAI,EAAE,mCAAmC;QACzC,YAAY,EAAE,gBAAgB;QAC9B,YAAY,EAAE,gBAAgB;KAC/B;IACD,KAAK,EAAE;QACL,UAAU,EAAE,aAAa;QACzB,YAAY,EAAE,eAAe;QAC7B,KAAK,EAAE,OAAO;QACd,IAAI,EAAE,aAAa;QACnB,OAAO,EAAE,SAAS;QAClB,OAAO,EAAE,SAAS;KACnB;IACD,KAAK,EAAE;QACL,SAAS,EAAE;YACT,WAAW,EAAE,QAAQ;SACtB;KACF;IACD,YAAY,EAAE;QACZ,OAAO,EAAE,gEAAgE;KAC1E;IACD,MAAM,EAAE;QACN,KAAK,EAAE,UAAU;KAClB;IACD,KAAK,EAAE;QACL,KAAK,EAAE,OAAO;KACf;IACD,UAAU,EAAE;QACV,QAAQ,EAAE,UAAU;QACpB,IAAI,EAAE,MAAM;KACb;IACD,WAAW,EAAE;QACX,QAAQ,EAAE,oBAAoB;QAC9B,eAAe,EACb,2DAA2D;KAC9D;IACD,MAAM,EAAE;QACN,KAAK,EAAE,OAAO;QACd,MAAM,EAAE,QAAQ;KACjB;IACD,QAAQ,EAAE;QACR,SAAS,EAAE,+CAA+C;QAC1D,YAAY,EAAE,6BAA6B;QAC3C,SAAS,EAAE,yBAAyB;KACrC;CACqB,CAAC"}
@@ -40,6 +40,9 @@ declare const _default: {
40
40
  labelSuffix: string;
41
41
  };
42
42
  };
43
+ ErrorSummary: {
44
+ heading: string;
45
+ };
43
46
  Loader: {
44
47
  title: string;
45
48
  };
@@ -58,5 +61,11 @@ declare const _default: {
58
61
  clear: string;
59
62
  search: string;
60
63
  };
64
+ Textarea: {
65
+ /** Screen readers only */
66
+ maxLength: string;
67
+ charsTooMany: string;
68
+ charsLeft: string;
69
+ };
61
70
  };
62
71
  export default _default;
@@ -40,6 +40,9 @@ export default {
40
40
  labelSuffix: "slett",
41
41
  },
42
42
  },
43
+ ErrorSummary: {
44
+ heading: "Du må rette disse feilene før du kan fortsette:",
45
+ },
43
46
  Loader: {
44
47
  title: "Venter…",
45
48
  },
@@ -58,5 +61,11 @@ export default {
58
61
  clear: "Tøm",
59
62
  search: "Søk",
60
63
  },
64
+ Textarea: {
65
+ /** Screen readers only */
66
+ maxLength: "Tekstområde med plass til {maxLength} tegn.",
67
+ charsTooMany: "{chars} tegn for mye",
68
+ charsLeft: "{chars} tegn igjen",
69
+ },
61
70
  };
62
71
  //# sourceMappingURL=nb.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"nb.js","sourceRoot":"","sources":["../../../../src/util/i18n/locales/nb.ts"],"names":[],"mappings":"AAQA,eAAe;IACb,MAAM,EAAE;QACN,QAAQ,EAAE,SAAS;QACnB,QAAQ,EAAE,YAAY;KACvB;IAED,UAAU,EAAE;QACV,QAAQ,EAAE;YACR,MAAM,EAAE,UAAU;YAClB,cAAc,EAAE,YAAY;YAC5B,WAAW,EAAE,wBAAwB;YACrC,mBAAmB,EAAE,wBAAwB;YAC7C,IAAI,EAAE,OAAO;YACb,EAAE,EAAE,OAAO;YACX,QAAQ,EAAE,6BAA6B;YACvC,iBAAiB,EAAE,mCAAmC;SACvD;QACD,IAAI,EAAE;YACJ,gBAAgB,EAAE,gCAAgC;YAClD,iBAAiB,EAAE,aAAa;YAChC,SAAS,EAAE,aAAa;YACxB,WAAW,EAAE,aAAa;SAC3B;KACF;IACD,YAAY,EAAE;QACZ,IAAI,EAAE,mCAAmC;QACzC,YAAY,EAAE,eAAe;QAC7B,YAAY,EAAE,iBAAiB;KAChC;IACD,KAAK,EAAE;QACL,UAAU,EAAE,aAAa;QACzB,YAAY,EAAE,cAAc;QAC5B,KAAK,EAAE,MAAM;QACb,IAAI,EAAE,aAAa;QACnB,OAAO,EAAE,SAAS;QAClB,OAAO,EAAE,UAAU;KACpB;IACD,KAAK,EAAE;QACL,SAAS,EAAE;YACT,8DAA8D;YAC9D,WAAW,EAAE,OAAO;SACrB;KACF;IACD,MAAM,EAAE;QACN,KAAK,EAAE,SAAS;KACjB;IACD,KAAK,EAAE;QACL,KAAK,EAAE,MAAM;KACd;IACD,UAAU,EAAE;QACV,QAAQ,EAAE,SAAS;QACnB,IAAI,EAAE,OAAO;KACd;IACD,WAAW,EAAE;QACX,QAAQ,EAAE,oBAAoB;QAC9B,eAAe,EACb,gEAAgE;KACnE;IACD,MAAM,EAAE;QACN,KAAK,EAAE,KAAK;QACZ,MAAM,EAAE,KAAK;KACd;CACuB,CAAC"}
1
+ {"version":3,"file":"nb.js","sourceRoot":"","sources":["../../../../src/util/i18n/locales/nb.ts"],"names":[],"mappings":"AAQA,eAAe;IACb,MAAM,EAAE;QACN,QAAQ,EAAE,SAAS;QACnB,QAAQ,EAAE,YAAY;KACvB;IAED,UAAU,EAAE;QACV,QAAQ,EAAE;YACR,MAAM,EAAE,UAAU;YAClB,cAAc,EAAE,YAAY;YAC5B,WAAW,EAAE,wBAAwB;YACrC,mBAAmB,EAAE,wBAAwB;YAC7C,IAAI,EAAE,OAAO;YACb,EAAE,EAAE,OAAO;YACX,QAAQ,EAAE,6BAA6B;YACvC,iBAAiB,EAAE,mCAAmC;SACvD;QACD,IAAI,EAAE;YACJ,gBAAgB,EAAE,gCAAgC;YAClD,iBAAiB,EAAE,aAAa;YAChC,SAAS,EAAE,aAAa;YACxB,WAAW,EAAE,aAAa;SAC3B;KACF;IACD,YAAY,EAAE;QACZ,IAAI,EAAE,mCAAmC;QACzC,YAAY,EAAE,eAAe;QAC7B,YAAY,EAAE,iBAAiB;KAChC;IACD,KAAK,EAAE;QACL,UAAU,EAAE,aAAa;QACzB,YAAY,EAAE,cAAc;QAC5B,KAAK,EAAE,MAAM;QACb,IAAI,EAAE,aAAa;QACnB,OAAO,EAAE,SAAS;QAClB,OAAO,EAAE,UAAU;KACpB;IACD,KAAK,EAAE;QACL,SAAS,EAAE;YACT,8DAA8D;YAC9D,WAAW,EAAE,OAAO;SACrB;KACF;IACD,YAAY,EAAE;QACZ,OAAO,EAAE,iDAAiD;KAC3D;IACD,MAAM,EAAE;QACN,KAAK,EAAE,SAAS;KACjB;IACD,KAAK,EAAE;QACL,KAAK,EAAE,MAAM;KACd;IACD,UAAU,EAAE;QACV,QAAQ,EAAE,SAAS;QACnB,IAAI,EAAE,OAAO;KACd;IACD,WAAW,EAAE;QACX,QAAQ,EAAE,oBAAoB;QAC9B,eAAe,EACb,gEAAgE;KACnE;IACD,MAAM,EAAE;QACN,KAAK,EAAE,KAAK;QACZ,MAAM,EAAE,KAAK;KACd;IACD,QAAQ,EAAE;QACR,0BAA0B;QAC1B,SAAS,EAAE,6CAA6C;QACxD,YAAY,EAAE,sBAAsB;QACpC,SAAS,EAAE,oBAAoB;KAChC;CACuB,CAAC"}
@@ -39,6 +39,9 @@ declare const _default: {
39
39
  labelSuffix: string;
40
40
  };
41
41
  };
42
+ ErrorSummary: {
43
+ heading: string;
44
+ };
42
45
  Loader: {
43
46
  title: string;
44
47
  };
@@ -57,5 +60,10 @@ declare const _default: {
57
60
  clear: string;
58
61
  search: string;
59
62
  };
63
+ Textarea: {
64
+ maxLength: string;
65
+ charsTooMany: string;
66
+ charsLeft: string;
67
+ };
60
68
  };
61
69
  export default _default;
@@ -39,6 +39,9 @@ export default {
39
39
  labelSuffix: "slett",
40
40
  },
41
41
  },
42
+ ErrorSummary: {
43
+ heading: "Du må rette desse feila før du kan halde fram:",
44
+ },
42
45
  Loader: {
43
46
  title: "Ventar…",
44
47
  },
@@ -57,5 +60,10 @@ export default {
57
60
  clear: "Tøm",
58
61
  search: "Søk",
59
62
  },
63
+ Textarea: {
64
+ maxLength: "Tekstområde med plass til {maxLength} teikn.",
65
+ charsTooMany: "{chars} teikn for mykje",
66
+ charsLeft: "{chars} teikn igjen",
67
+ },
60
68
  };
61
69
  //# sourceMappingURL=nn.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"nn.js","sourceRoot":"","sources":["../../../../src/util/i18n/locales/nn.ts"],"names":[],"mappings":"AAEA,eAAe;IACb,MAAM,EAAE;QACN,QAAQ,EAAE,UAAU;QACpB,QAAQ,EAAE,YAAY;KACvB;IAED,UAAU,EAAE;QACV,QAAQ,EAAE;YACR,MAAM,EAAE,SAAS;YACjB,cAAc,EAAE,WAAW;YAC3B,WAAW,EAAE,uBAAuB;YACpC,mBAAmB,EAAE,wBAAwB;YAC7C,IAAI,EAAE,OAAO;YACb,EAAE,EAAE,OAAO;YACX,QAAQ,EAAE,6BAA6B;YACvC,iBAAiB,EAAE,qCAAqC;SACzD;QACD,IAAI,EAAE;YACJ,gBAAgB,EAAE,+BAA+B;YACjD,iBAAiB,EAAE,YAAY;YAC/B,SAAS,EAAE,aAAa;YACxB,WAAW,EAAE,aAAa;SAC3B;KACF;IACD,YAAY,EAAE;QACZ,IAAI,EAAE,mCAAmC;QACzC,YAAY,EAAE,eAAe;QAC7B,YAAY,EAAE,iBAAiB;KAChC;IACD,KAAK,EAAE;QACL,UAAU,EAAE,aAAa;QACzB,YAAY,EAAE,cAAc;QAC5B,KAAK,EAAE,MAAM;QACb,IAAI,EAAE,aAAa;QACnB,OAAO,EAAE,SAAS;QAClB,OAAO,EAAE,UAAU;KACpB;IACD,KAAK,EAAE;QACL,SAAS,EAAE;YACT,WAAW,EAAE,OAAO;SACrB;KACF;IACD,MAAM,EAAE;QACN,KAAK,EAAE,SAAS;KACjB;IACD,KAAK,EAAE;QACL,KAAK,EAAE,MAAM;KACd;IACD,UAAU,EAAE;QACV,QAAQ,EAAE,OAAO;QACjB,IAAI,EAAE,OAAO;KACd;IACD,WAAW,EAAE;QACX,QAAQ,EAAE,oBAAoB;QAC9B,eAAe,EACb,gEAAgE;KACnE;IACD,MAAM,EAAE;QACN,KAAK,EAAE,KAAK;QACZ,MAAM,EAAE,KAAK;KACd;CACqB,CAAC"}
1
+ {"version":3,"file":"nn.js","sourceRoot":"","sources":["../../../../src/util/i18n/locales/nn.ts"],"names":[],"mappings":"AAEA,eAAe;IACb,MAAM,EAAE;QACN,QAAQ,EAAE,UAAU;QACpB,QAAQ,EAAE,YAAY;KACvB;IAED,UAAU,EAAE;QACV,QAAQ,EAAE;YACR,MAAM,EAAE,SAAS;YACjB,cAAc,EAAE,WAAW;YAC3B,WAAW,EAAE,uBAAuB;YACpC,mBAAmB,EAAE,wBAAwB;YAC7C,IAAI,EAAE,OAAO;YACb,EAAE,EAAE,OAAO;YACX,QAAQ,EAAE,6BAA6B;YACvC,iBAAiB,EAAE,qCAAqC;SACzD;QACD,IAAI,EAAE;YACJ,gBAAgB,EAAE,+BAA+B;YACjD,iBAAiB,EAAE,YAAY;YAC/B,SAAS,EAAE,aAAa;YACxB,WAAW,EAAE,aAAa;SAC3B;KACF;IACD,YAAY,EAAE;QACZ,IAAI,EAAE,mCAAmC;QACzC,YAAY,EAAE,eAAe;QAC7B,YAAY,EAAE,iBAAiB;KAChC;IACD,KAAK,EAAE;QACL,UAAU,EAAE,aAAa;QACzB,YAAY,EAAE,cAAc;QAC5B,KAAK,EAAE,MAAM;QACb,IAAI,EAAE,aAAa;QACnB,OAAO,EAAE,SAAS;QAClB,OAAO,EAAE,UAAU;KACpB;IACD,KAAK,EAAE;QACL,SAAS,EAAE;YACT,WAAW,EAAE,OAAO;SACrB;KACF;IACD,YAAY,EAAE;QACZ,OAAO,EAAE,gDAAgD;KAC1D;IACD,MAAM,EAAE;QACN,KAAK,EAAE,SAAS;KACjB;IACD,KAAK,EAAE;QACL,KAAK,EAAE,MAAM;KACd;IACD,UAAU,EAAE;QACV,QAAQ,EAAE,OAAO;QACjB,IAAI,EAAE,OAAO;KACd;IACD,WAAW,EAAE;QACX,QAAQ,EAAE,oBAAoB;QAC9B,eAAe,EACb,gEAAgE;KACnE;IACD,MAAM,EAAE;QACN,KAAK,EAAE,KAAK;QACZ,MAAM,EAAE,KAAK;KACd;IACD,QAAQ,EAAE;QACR,SAAS,EAAE,8CAA8C;QACzD,YAAY,EAAE,yBAAyB;QACvC,SAAS,EAAE,qBAAqB;KACjC;CACqB,CAAC"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@navikt/ds-react",
3
- "version": "7.4.1",
3
+ "version": "7.4.2",
4
4
  "description": "React components from the Norwegian Labour and Welfare Administration.",
5
5
  "author": "Aksel, a team part of the Norwegian Labour and Welfare Administration.",
6
6
  "license": "MIT",
@@ -604,8 +604,8 @@
604
604
  "dependencies": {
605
605
  "@floating-ui/react": "0.25.4",
606
606
  "@floating-ui/react-dom": "^2.0.9",
607
- "@navikt/aksel-icons": "^7.4.1",
608
- "@navikt/ds-tokens": "^7.4.1",
607
+ "@navikt/aksel-icons": "^7.4.2",
608
+ "@navikt/ds-tokens": "^7.4.2",
609
609
  "clsx": "^2.1.0",
610
610
  "date-fns": "^3.0.0",
611
611
  "react-day-picker": "8.10.1"
@@ -100,9 +100,22 @@ const Input = forwardRef<HTMLInputElement, InputProps>(
100
100
  value,
101
101
  filteredOptions,
102
102
  );
103
+
104
+ /*
105
+ * User can have matching results, while not using the autocomplete result
106
+ * E.g. User types "Oslo", list has is "Oslo kommune", but user hits backspace, canceling autocomplete.
107
+ */
108
+ const autoCompleteMatchesValue =
109
+ filteredOptionsUtil.normalizeText(value) ===
110
+ filteredOptionsUtil.normalizeText(autoCompletedOption?.label ?? "");
111
+
103
112
  let selectedValue: ComboboxOption | undefined;
104
113
 
105
- if (shouldAutocomplete && autoCompletedOption) {
114
+ if (
115
+ shouldAutocomplete &&
116
+ autoCompletedOption &&
117
+ autoCompleteMatchesValue
118
+ ) {
106
119
  selectedValue = autoCompletedOption;
107
120
  } else if (allowNewValues && isValueNew) {
108
121
  selectedValue = { label: value, value };
@@ -3,6 +3,7 @@ import React, { HTMLAttributes, forwardRef, useRef } from "react";
3
3
  import { BodyShort, Heading } from "../../typography";
4
4
  import { composeEventHandlers } from "../../util/composeEventHandlers";
5
5
  import { useMergeRefs } from "../../util/hooks";
6
+ import { useI18n } from "../../util/i18n/i18n.context";
6
7
  import ErrorSummaryItem from "./ErrorSummaryItem";
7
8
 
8
9
  export interface ErrorSummaryProps
@@ -72,11 +73,12 @@ export const ErrorSummary = forwardRef<HTMLDivElement, ErrorSummaryProps>(
72
73
  className,
73
74
  size = "medium",
74
75
  headingTag = "h2",
75
- heading = "Du må rette disse feilene før du kan fortsette:",
76
+ heading,
76
77
  ...rest
77
78
  },
78
79
  ref,
79
80
  ) => {
81
+ const translate = useI18n("ErrorSummary");
80
82
  const wrapperRef = useRef<HTMLDivElement>(null);
81
83
  const headingRef = useRef<HTMLHeadingElement>(null);
82
84
 
@@ -105,7 +107,7 @@ export const ErrorSummary = forwardRef<HTMLDivElement, ErrorSummaryProps>(
105
107
  ref={headingRef}
106
108
  tabIndex={-1}
107
109
  >
108
- {heading}
110
+ {heading ?? translate("heading")}
109
111
  </Heading>
110
112
  <BodyShort as="ul" size={size} className="navds-error-summary__list">
111
113
  {children}
@@ -105,9 +105,7 @@ export const FormProgress = forwardRef<HTMLDivElement, FormProgressProps>(
105
105
  <Collapsible lazy open={open} onOpenChange={onOpenChange}>
106
106
  <HStack justify="space-between" align="center">
107
107
  <BodyShort as="span">
108
- {translate("step", {
109
- replacements: { activeStep, totalSteps },
110
- })}
108
+ {translate("step", { activeStep, totalSteps })}
111
109
  </BodyShort>
112
110
  <Collapsible.Trigger asChild aria-expanded={undefined}>
113
111
  <Button
@@ -180,17 +180,13 @@ export const Textarea = forwardRef<HTMLTextAreaElement, TextareaProps>(
180
180
  {...(describedBy ? { "aria-describedby": describedBy } : {})}
181
181
  />
182
182
  {hasMaxLength && !readOnly && !inputProps.disabled && (
183
- <>
184
- <span id={maxLengthId} className="navds-sr-only">
185
- {`Tekstområde med plass til ${maxLength} tegn.`}
186
- </span>
187
- <Counter
188
- maxLength={maxLength}
189
- currentLength={props.value?.length ?? uncontrolledValue.length}
190
- size={size}
191
- i18n={i18n}
192
- />
193
- </>
183
+ <Counter
184
+ maxLengthId={maxLengthId}
185
+ maxLength={maxLength}
186
+ currentLength={props.value?.length ?? uncontrolledValue.length}
187
+ size={size}
188
+ i18n={i18n}
189
+ />
194
190
  )}
195
191
  <div
196
192
  className="navds-form-field__error"
@@ -2,18 +2,32 @@ import cl from "clsx";
2
2
  import React, { useEffect, useState } from "react";
3
3
  import { BodyShort } from "../../typography";
4
4
  import debounce from "../../util/debounce";
5
+ import { useI18n } from "../../util/i18n/i18n.context";
5
6
  import type { TextareaProps } from "./Textarea";
6
7
 
7
8
  interface Props {
9
+ maxLengthId: string;
8
10
  maxLength: number;
9
11
  currentLength: number;
10
12
  size: TextareaProps["size"];
11
13
  i18n: TextareaProps["i18n"];
12
14
  }
13
15
 
14
- const TextareaCounter = ({ maxLength, currentLength, size, i18n }: Props) => {
15
- const difference = maxLength - currentLength;
16
+ const TextareaCounter = ({
17
+ maxLengthId,
18
+ maxLength,
19
+ currentLength,
20
+ size,
21
+ i18n,
22
+ }: Props) => {
23
+ const translate = useI18n("Textarea", {
24
+ charsLeft: i18n?.counterLeft ? `{chars} ${i18n.counterLeft}` : undefined,
25
+ charsTooMany: i18n?.counterTooMuch
26
+ ? `{chars} ${i18n.counterTooMuch}`
27
+ : undefined,
28
+ });
16
29
 
30
+ const difference = maxLength - currentLength;
17
31
  const [debouncedDiff, setDebouncedDiff] = useState(difference);
18
32
 
19
33
  useEffect(() => {
@@ -29,12 +43,16 @@ const TextareaCounter = ({ maxLength, currentLength, size, i18n }: Props) => {
29
43
 
30
44
  return (
31
45
  <>
46
+ <span id={maxLengthId} className="navds-sr-only">
47
+ {translate("maxLength", { maxLength })}
48
+ </span>
49
+
32
50
  {difference < 20 && (
33
51
  <span
34
52
  role="status"
35
53
  className="navds-textarea__sr-counter navds-sr-only"
36
54
  >
37
- {getCounterText(debouncedDiff, i18n)}
55
+ {getCounterText(debouncedDiff, translate)}
38
56
  </span>
39
57
  )}
40
58
 
@@ -44,15 +62,21 @@ const TextareaCounter = ({ maxLength, currentLength, size, i18n }: Props) => {
44
62
  })}
45
63
  size={size}
46
64
  >
47
- {getCounterText(difference, i18n)}
65
+ {getCounterText(difference, translate)}
48
66
  </BodyShort>
49
67
  </>
50
68
  );
51
69
  };
52
70
 
53
- const getCounterText = (difference: number, i18n: TextareaProps["i18n"]) =>
71
+ const getCounterText = (
72
+ difference: number,
73
+ translate: (
74
+ key: "charsTooMany" | "charsLeft",
75
+ replacements?: { chars: number },
76
+ ) => string,
77
+ ) =>
54
78
  difference < 0
55
- ? `${Math.abs(difference)} ${i18n?.counterTooMuch ?? "tegn for mye"}`
56
- : `${difference} ${i18n?.counterLeft ?? "tegn igjen"}`;
79
+ ? translate("charsTooMany", { chars: Math.abs(difference) })
80
+ : translate("charsLeft", { chars: difference });
57
81
 
58
82
  export default TextareaCounter;
@@ -122,13 +122,11 @@ export const ProgressBar = forwardRef<HTMLDivElement, ProgressBarProps>(
122
122
  aria-valuetext={
123
123
  simulated?.seconds
124
124
  ? translate("progressUnknown", {
125
- replacements: { seconds: Math.round(simulated?.seconds) },
125
+ seconds: Math.round(simulated?.seconds),
126
126
  })
127
127
  : translate("progress", {
128
- replacements: {
129
- current: Math.round(value),
130
- max: Math.round(valueMax),
131
- },
128
+ current: Math.round(value),
129
+ max: Math.round(valueMax),
132
130
  })
133
131
  }
134
132
  // biome-ignore lint/a11y/useAriaPropsForRole: We found that adding valueMin was not needed
@@ -79,17 +79,15 @@ describe("useI18n", () => {
79
79
  };
80
80
  const { result } = renderHook(() => useI18n("FileUpload", i18n));
81
81
  const translate = result.current;
82
- expect(
83
- translate("item.uploading", { replacements: { name: "John", cnt: 3 } }),
84
- ).toBe("Hello, John. You have 3 messages.");
82
+ expect(translate("item.uploading", { name: "John", cnt: 3 })).toBe(
83
+ "Hello, John. You have 3 messages.",
84
+ );
85
85
  });
86
86
 
87
87
  test("should throw an error if replacement key is not found", () => {
88
88
  const i18n = { item: { uploading: "Hello, {name}" } };
89
89
  const { result } = renderHook(() => useI18n("FileUpload", i18n));
90
90
  const translate = result.current;
91
- expect(() =>
92
- translate("item.uploading", { replacements: { other: "John" } }),
93
- ).toThrowError();
91
+ expect(() => translate("item.uploading", { other: "John" })).toThrowError();
94
92
  });
95
93
  });
@@ -27,7 +27,7 @@ export function useI18n<T extends Component>(
27
27
  */
28
28
  const translate = (
29
29
  keypath: NestedKeyOf<Translations[T]>,
30
- options?: { replacements: Record<string, string | number> },
30
+ replacements?: Record<string, string | number>,
31
31
  ) => {
32
32
  const text = get(
33
33
  keypath,
@@ -37,19 +37,19 @@ export function useI18n<T extends Component>(
37
37
  : [i18n[componentName]]),
38
38
  );
39
39
 
40
- if (options?.replacements) {
40
+ if (replacements) {
41
41
  return text.replace(REPLACE_REGEX, (match) => {
42
42
  const replacement = match.substring(1, match.length - 1);
43
43
 
44
- if (options.replacements[replacement] === undefined) {
45
- const replacementData = JSON.stringify(options.replacements);
44
+ if (replacements[replacement] === undefined) {
45
+ const replacementData = JSON.stringify(replacements);
46
46
 
47
47
  throw new Error(
48
48
  `Error translating key '${keypath}'. No replacement syntax ({}) found for key '${replacement}'. The following replacements were passed: '${replacementData}'`,
49
49
  );
50
50
  }
51
51
 
52
- return options.replacements[replacement] as string; // can also be a number, but JS doesn't mind...
52
+ return replacements[replacement] as string; // can also be a number, but JS doesn't mind...
53
53
  });
54
54
  }
55
55
 
@@ -42,6 +42,9 @@ export default {
42
42
  labelSuffix: "delete",
43
43
  },
44
44
  },
45
+ ErrorSummary: {
46
+ heading: "You must correct the following errors before you can continue:",
47
+ },
45
48
  Loader: {
46
49
  title: "Waiting…",
47
50
  },
@@ -61,4 +64,9 @@ export default {
61
64
  clear: "Clear",
62
65
  search: "Search",
63
66
  },
67
+ Textarea: {
68
+ maxLength: "Text area with a {maxLength} character limit.",
69
+ charsTooMany: "{chars} characters too many",
70
+ charsLeft: "{chars} characters left",
71
+ },
64
72
  } satisfies Translations;
@@ -49,6 +49,9 @@ export default {
49
49
  labelSuffix: "slett",
50
50
  },
51
51
  },
52
+ ErrorSummary: {
53
+ heading: "Du må rette disse feilene før du kan fortsette:",
54
+ },
52
55
  Loader: {
53
56
  title: "Venter…",
54
57
  },
@@ -68,4 +71,10 @@ export default {
68
71
  clear: "Tøm",
69
72
  search: "Søk",
70
73
  },
74
+ Textarea: {
75
+ /** Screen readers only */
76
+ maxLength: "Tekstområde med plass til {maxLength} tegn.",
77
+ charsTooMany: "{chars} tegn for mye",
78
+ charsLeft: "{chars} tegn igjen",
79
+ },
71
80
  } satisfies TranslationMap;