@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.
- package/cjs/form/combobox/Input/Input.js +10 -1
- package/cjs/form/combobox/Input/Input.js.map +1 -1
- package/cjs/form/error-summary/ErrorSummary.js +4 -2
- package/cjs/form/error-summary/ErrorSummary.js.map +1 -1
- package/cjs/form/form-progress/FormProgress.js +1 -3
- package/cjs/form/form-progress/FormProgress.js.map +1 -1
- package/cjs/form/textarea/Textarea.js +1 -3
- package/cjs/form/textarea/Textarea.js.map +1 -1
- package/cjs/form/textarea/TextareaCounter.d.ts +2 -1
- package/cjs/form/textarea/TextareaCounter.js +14 -9
- package/cjs/form/textarea/TextareaCounter.js.map +1 -1
- package/cjs/progress-bar/ProgressBar.js +3 -5
- package/cjs/progress-bar/ProgressBar.js.map +1 -1
- package/cjs/util/i18n/i18n.context.d.ts +1 -3
- package/cjs/util/i18n/i18n.context.js +5 -5
- package/cjs/util/i18n/i18n.context.js.map +1 -1
- package/cjs/util/i18n/locales/en.d.ts +8 -0
- package/cjs/util/i18n/locales/en.js +8 -0
- package/cjs/util/i18n/locales/en.js.map +1 -1
- package/cjs/util/i18n/locales/nb.d.ts +9 -0
- package/cjs/util/i18n/locales/nb.js +9 -0
- package/cjs/util/i18n/locales/nb.js.map +1 -1
- package/cjs/util/i18n/locales/nn.d.ts +8 -0
- package/cjs/util/i18n/locales/nn.js +8 -0
- package/cjs/util/i18n/locales/nn.js.map +1 -1
- package/esm/form/combobox/Input/Input.js +10 -1
- package/esm/form/combobox/Input/Input.js.map +1 -1
- package/esm/form/error-summary/ErrorSummary.js +4 -2
- package/esm/form/error-summary/ErrorSummary.js.map +1 -1
- package/esm/form/form-progress/FormProgress.js +1 -3
- package/esm/form/form-progress/FormProgress.js.map +1 -1
- package/esm/form/textarea/Textarea.js +1 -3
- package/esm/form/textarea/Textarea.js.map +1 -1
- package/esm/form/textarea/TextareaCounter.d.ts +2 -1
- package/esm/form/textarea/TextareaCounter.js +14 -9
- package/esm/form/textarea/TextareaCounter.js.map +1 -1
- package/esm/progress-bar/ProgressBar.js +3 -5
- package/esm/progress-bar/ProgressBar.js.map +1 -1
- package/esm/util/i18n/i18n.context.d.ts +1 -3
- package/esm/util/i18n/i18n.context.js +5 -5
- package/esm/util/i18n/i18n.context.js.map +1 -1
- package/esm/util/i18n/locales/en.d.ts +8 -0
- package/esm/util/i18n/locales/en.js +8 -0
- package/esm/util/i18n/locales/en.js.map +1 -1
- package/esm/util/i18n/locales/nb.d.ts +9 -0
- package/esm/util/i18n/locales/nb.js +9 -0
- package/esm/util/i18n/locales/nb.js.map +1 -1
- package/esm/util/i18n/locales/nn.d.ts +8 -0
- package/esm/util/i18n/locales/nn.js +8 -0
- package/esm/util/i18n/locales/nn.js.map +1 -1
- package/package.json +3 -3
- package/src/form/combobox/Input/Input.tsx +14 -1
- package/src/form/error-summary/ErrorSummary.tsx +4 -2
- package/src/form/form-progress/FormProgress.tsx +1 -3
- package/src/form/textarea/Textarea.tsx +7 -11
- package/src/form/textarea/TextareaCounter.tsx +31 -7
- package/src/progress-bar/ProgressBar.tsx +3 -5
- package/src/util/i18n/i18n.context.test.tsx +4 -6
- package/src/util/i18n/i18n.context.ts +5 -5
- package/src/util/i18n/locales/en.ts +8 -0
- package/src/util/i18n/locales/nb.ts +9 -0
- 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
|
-
|
|
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
|
-
|
|
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,
|
|
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;
|
|
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
|
-
|
|
50
|
+
seconds: Math.round(simulated === null || simulated === void 0 ? void 0 : simulated.seconds),
|
|
51
51
|
})
|
|
52
52
|
: translate("progress", {
|
|
53
|
-
|
|
54
|
-
|
|
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":";;;;;;;;;;;AAAA,OAAO,EAAE,MAAM,MAAM,CAAC;AACtB,OAAO,KAAK,EAAE,EAAkB,UAAU,EAAE,SAAS,EAAE,MAAM,EAAE,MAAM,OAAO,CAAC;AAC7E,OAAO,EAAE,OAAO,EAAE,MAAM,2BAA2B,CAAC;AA4DpD;;;;;;;;;;;;;;;;;;GAkBG;AACH,MAAM,CAAC,MAAM,WAAW,GAAG,UAAU,CACnC,CACE,EASC,EACD,GAAG,EACH,EAAE;QAXF,EACE,IAAI,GAAG,QAAQ,EACf,KAAK,GAAG,CAAC,EACT,QAAQ,GAAG,GAAG,EACd,iBAAiB,EAAE,cAAc,EACjC,YAAY,EAAE,SAAS,EACvB,SAAS,EACT,SAAS,OAEV,EADI,IAAI,cART,wFASC,CADQ;IAIT,MAAM,UAAU,GAAG,GAAG,GAAG,CAAC,IAAI,CAAC,KAAK,CAAC,KAAK,CAAC,GAAG,QAAQ,CAAC,GAAG,GAAG,CAAC;IAC9D,MAAM,YAAY,GAAG,MAAM,EAAc,CAAC;IAC1C,YAAY,CAAC,OAAO,GAAG,SAAS,aAAT,SAAS,uBAAT,SAAS,CAAE,SAAS,CAAC;IAC5C,MAAM,SAAS,GAAG,OAAO,CAAC,aAAa,CAAC,CAAC;IAEzC,SAAS,CAAC,GAAG,EAAE;QACb,IAAI,CAAA,SAAS,aAAT,SAAS,uBAAT,SAAS,CAAE,OAAO,KAAI,YAAY,CAAC,OAAO,EAAE,CAAC;YAC/C,MAAM,OAAO,GAAG,UAAU,CACxB,YAAY,CAAC,OAAO,EACpB,SAAS,CAAC,OAAO,GAAG,IAAI,CACzB,CAAC;YACF,OAAO,GAAG,EAAE,CAAC,YAAY,CAAC,OAAO,CAAC,CAAC;QACrC,CAAC;IACH,CAAC,EAAE,CAAC,SAAS,aAAT,SAAS,uBAAT,SAAS,CAAE,OAAO,CAAC,CAAC,CAAC;IAEzB,OAAO;IACL,qFAAqF;IACrF,2CACE,GAAG,EAAE,GAAG,EACR,SAAS,EAAE,EAAE,CACX,oBAAoB,EACpB,uBAAuB,IAAI,EAAE,EAC7B,SAAS,CACV,mBACc,CAAA,SAAS,aAAT,SAAS,uBAAT,SAAS,CAAE,OAAO,EAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,KAAK,CAAC,QAAQ,CAAC,mBAC7C,CAAA,SAAS,aAAT,SAAS,uBAAT,SAAS,CAAE,OAAO,EAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,KAAK,CAAC,KAAK,CAAC,oBAEvD,CAAA,SAAS,aAAT,SAAS,uBAAT,SAAS,CAAE,OAAO;YAChB,CAAC,CAAC,SAAS,CAAC,iBAAiB,EAAE;gBAC3B,
|
|
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]>,
|
|
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,
|
|
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 (
|
|
18
|
+
if (replacements) {
|
|
19
19
|
return text.replace(REPLACE_REGEX, (match) => {
|
|
20
20
|
const replacement = match.substring(1, match.length - 1);
|
|
21
|
-
if (
|
|
22
|
-
const replacementData = JSON.stringify(
|
|
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
|
|
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,
|
|
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.
|
|
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.
|
|
608
|
-
"@navikt/ds-tokens": "^7.4.
|
|
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 (
|
|
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
|
|
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
|
-
|
|
185
|
-
|
|
186
|
-
|
|
187
|
-
|
|
188
|
-
|
|
189
|
-
|
|
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 = ({
|
|
15
|
-
|
|
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,
|
|
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,
|
|
65
|
+
{getCounterText(difference, translate)}
|
|
48
66
|
</BodyShort>
|
|
49
67
|
</>
|
|
50
68
|
);
|
|
51
69
|
};
|
|
52
70
|
|
|
53
|
-
const getCounterText = (
|
|
71
|
+
const getCounterText = (
|
|
72
|
+
difference: number,
|
|
73
|
+
translate: (
|
|
74
|
+
key: "charsTooMany" | "charsLeft",
|
|
75
|
+
replacements?: { chars: number },
|
|
76
|
+
) => string,
|
|
77
|
+
) =>
|
|
54
78
|
difference < 0
|
|
55
|
-
?
|
|
56
|
-
:
|
|
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
|
-
|
|
125
|
+
seconds: Math.round(simulated?.seconds),
|
|
126
126
|
})
|
|
127
127
|
: translate("progress", {
|
|
128
|
-
|
|
129
|
-
|
|
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
|
-
|
|
84
|
-
)
|
|
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
|
-
|
|
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 (
|
|
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 (
|
|
45
|
-
const replacementData = JSON.stringify(
|
|
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
|
|
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;
|