@navikt/ds-react 4.4.2 → 4.6.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/_docs.json +325 -0
- package/cjs/alert/Alert.js +9 -3
- package/cjs/date/DateInput.js +9 -4
- package/cjs/date/hooks/useDatepicker.js +3 -0
- package/cjs/date/hooks/useMonthPicker.js +3 -0
- package/cjs/date/hooks/useRangeDatepicker.js +3 -0
- package/cjs/form/Fieldset/Fieldset.js +11 -4
- package/cjs/form/ReadOnlyIcon.js +15 -0
- package/cjs/form/Select.js +23 -3
- package/cjs/form/Switch.js +21 -8
- package/cjs/form/TextField.js +7 -3
- package/cjs/form/Textarea.js +7 -3
- package/cjs/form/checkbox/Checkbox.js +7 -2
- package/cjs/form/checkbox/CheckboxGroup.js +1 -1
- package/cjs/form/checkbox/useCheckbox.js +12 -2
- package/cjs/form/radio/Radio.js +3 -2
- package/cjs/form/radio/RadioGroup.js +2 -2
- package/cjs/form/radio/useRadio.js +12 -2
- package/cjs/form/search/Search.js +1 -1
- package/cjs/form/useFormField.js +11 -9
- package/esm/alert/Alert.d.ts +11 -0
- package/esm/alert/Alert.js +10 -4
- package/esm/alert/Alert.js.map +1 -1
- package/esm/date/DateInput.js +9 -4
- package/esm/date/DateInput.js.map +1 -1
- package/esm/date/hooks/useDatepicker.js +3 -0
- package/esm/date/hooks/useDatepicker.js.map +1 -1
- package/esm/date/hooks/useMonthPicker.js +3 -0
- package/esm/date/hooks/useMonthPicker.js.map +1 -1
- package/esm/date/hooks/useRangeDatepicker.js +3 -0
- package/esm/date/hooks/useRangeDatepicker.js.map +1 -1
- package/esm/form/ConfirmationPanel.d.ts +1 -1
- package/esm/form/Fieldset/Fieldset.d.ts +5 -0
- package/esm/form/Fieldset/Fieldset.js +11 -4
- package/esm/form/Fieldset/Fieldset.js.map +1 -1
- package/esm/form/Fieldset/useFieldset.d.ts +2 -1
- package/esm/form/ReadOnlyIcon.d.ts +5 -0
- package/esm/form/ReadOnlyIcon.js +9 -0
- package/esm/form/ReadOnlyIcon.js.map +1 -0
- package/esm/form/Select.js +23 -3
- package/esm/form/Select.js.map +1 -1
- package/esm/form/Switch.d.ts +1 -1
- package/esm/form/Switch.js +21 -8
- package/esm/form/Switch.js.map +1 -1
- package/esm/form/TextField.js +7 -3
- package/esm/form/TextField.js.map +1 -1
- package/esm/form/Textarea.js +7 -3
- package/esm/form/Textarea.js.map +1 -1
- package/esm/form/checkbox/Checkbox.js +7 -2
- package/esm/form/checkbox/Checkbox.js.map +1 -1
- package/esm/form/checkbox/CheckboxGroup.js +1 -1
- package/esm/form/checkbox/CheckboxGroup.js.map +1 -1
- package/esm/form/checkbox/useCheckbox.d.ts +5 -2
- package/esm/form/checkbox/useCheckbox.js +12 -2
- package/esm/form/checkbox/useCheckbox.js.map +1 -1
- package/esm/form/radio/Radio.d.ts +1 -1
- package/esm/form/radio/Radio.js +3 -2
- package/esm/form/radio/Radio.js.map +1 -1
- package/esm/form/radio/RadioGroup.js +2 -2
- package/esm/form/radio/RadioGroup.js.map +1 -1
- package/esm/form/radio/useRadio.d.ts +4 -2
- package/esm/form/radio/useRadio.js +12 -2
- package/esm/form/radio/useRadio.js.map +1 -1
- package/esm/form/search/Search.d.ts +1 -1
- package/esm/form/search/Search.js +1 -1
- package/esm/form/search/Search.js.map +1 -1
- package/esm/form/useFormField.d.ts +7 -2
- package/esm/form/useFormField.js +11 -9
- package/esm/form/useFormField.js.map +1 -1
- package/package.json +2 -2
- package/src/alert/Alert.tsx +49 -18
- package/src/alert/alert.stories.tsx +75 -22
- package/src/date/DateInput.tsx +8 -2
- package/src/date/datepicker/datepicker.stories.tsx +22 -0
- package/src/date/hooks/useDatepicker.tsx +3 -0
- package/src/date/hooks/useMonthPicker.tsx +3 -0
- package/src/date/hooks/useRangeDatepicker.tsx +3 -0
- package/src/form/ConfirmationPanel.tsx +1 -1
- package/src/form/Fieldset/Fieldset.tsx +15 -2
- package/src/form/ReadOnlyIcon.tsx +20 -0
- package/src/form/Select.tsx +28 -2
- package/src/form/Switch.tsx +20 -9
- package/src/form/TextField.tsx +5 -0
- package/src/form/Textarea.tsx +5 -0
- package/src/form/checkbox/Checkbox.tsx +7 -1
- package/src/form/checkbox/CheckboxGroup.tsx +1 -0
- package/src/form/checkbox/checkbox.stories.tsx +35 -1
- package/src/form/checkbox/useCheckbox.ts +13 -1
- package/src/form/radio/Radio.tsx +4 -3
- package/src/form/radio/RadioGroup.tsx +3 -0
- package/src/form/radio/radio.stories.tsx +27 -0
- package/src/form/radio/useRadio.ts +12 -1
- package/src/form/search/Search.tsx +2 -2
- package/src/form/stories/select.stories.tsx +17 -0
- package/src/form/stories/switch.stories.tsx +14 -0
- package/src/form/stories/text-field.stories.tsx +14 -0
- package/src/form/stories/textarea.stories.tsx +19 -0
- package/src/form/useFormField.ts +25 -3
package/esm/form/radio/Radio.js
CHANGED
|
@@ -4,12 +4,13 @@ import { BodyShort } from "../../typography";
|
|
|
4
4
|
import { omit } from "../../util";
|
|
5
5
|
import { useRadio } from "./useRadio";
|
|
6
6
|
export const Radio = forwardRef((props, ref) => {
|
|
7
|
-
const { inputProps, size, hasError } = useRadio(props);
|
|
7
|
+
const { inputProps, size, hasError, readOnly } = useRadio(props);
|
|
8
8
|
return (React.createElement("div", { className: cl(props.className, "navds-radio", `navds-radio--${size}`, {
|
|
9
9
|
"navds-radio--error": hasError,
|
|
10
10
|
"navds-radio--disabled": inputProps.disabled,
|
|
11
|
+
"navds-radio--readonly": readOnly,
|
|
11
12
|
}) },
|
|
12
|
-
React.createElement("input", Object.assign({}, omit(props, ["children", "size", "description"]), inputProps, { className: "navds-radio__input", ref: ref })),
|
|
13
|
+
React.createElement("input", Object.assign({}, omit(props, ["children", "size", "description", "readOnly"]), inputProps, { className: "navds-radio__input", ref: ref })),
|
|
13
14
|
React.createElement("label", { htmlFor: inputProps.id, className: "navds-radio__label" },
|
|
14
15
|
React.createElement("span", { className: "navds-radio__content" },
|
|
15
16
|
React.createElement(BodyShort, { as: "span", size: size }, props.children),
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"Radio.js","sourceRoot":"","sources":["../../../src/form/radio/Radio.tsx"],"names":[],"mappings":"AAAA,OAAO,EAAE,MAAM,MAAM,CAAC;AACtB,OAAO,KAAK,EAAE,EAAE,UAAU,EAAuB,MAAM,OAAO,CAAC;AAC/D,OAAO,EAAE,SAAS,EAAE,MAAM,kBAAkB,CAAC;AAC7C,OAAO,EAAE,IAAI,EAAE,MAAM,YAAY,CAAC;AAElC,OAAO,EAAE,QAAQ,EAAE,MAAM,YAAY,CAAC;AAmBtC,MAAM,CAAC,MAAM,KAAK,GAAG,UAAU,CAA+B,CAAC,KAAK,EAAE,GAAG,EAAE,EAAE;IAC3E,MAAM,EAAE,UAAU,EAAE,IAAI,EAAE,QAAQ,EAAE,GAAG,QAAQ,CAAC,KAAK,CAAC,CAAC;
|
|
1
|
+
{"version":3,"file":"Radio.js","sourceRoot":"","sources":["../../../src/form/radio/Radio.tsx"],"names":[],"mappings":"AAAA,OAAO,EAAE,MAAM,MAAM,CAAC;AACtB,OAAO,KAAK,EAAE,EAAE,UAAU,EAAuB,MAAM,OAAO,CAAC;AAC/D,OAAO,EAAE,SAAS,EAAE,MAAM,kBAAkB,CAAC;AAC7C,OAAO,EAAE,IAAI,EAAE,MAAM,YAAY,CAAC;AAElC,OAAO,EAAE,QAAQ,EAAE,MAAM,YAAY,CAAC;AAmBtC,MAAM,CAAC,MAAM,KAAK,GAAG,UAAU,CAA+B,CAAC,KAAK,EAAE,GAAG,EAAE,EAAE;IAC3E,MAAM,EAAE,UAAU,EAAE,IAAI,EAAE,QAAQ,EAAE,QAAQ,EAAE,GAAG,QAAQ,CAAC,KAAK,CAAC,CAAC;IAEjE,OAAO,CACL,6BACE,SAAS,EAAE,EAAE,CAAC,KAAK,CAAC,SAAS,EAAE,aAAa,EAAE,gBAAgB,IAAI,EAAE,EAAE;YACpE,oBAAoB,EAAE,QAAQ;YAC9B,uBAAuB,EAAE,UAAU,CAAC,QAAQ;YAC5C,uBAAuB,EAAE,QAAQ;SAClC,CAAC;QAEF,+CACM,IAAI,CAAC,KAAK,EAAE,CAAC,UAAU,EAAE,MAAM,EAAE,aAAa,EAAE,UAAU,CAAC,CAAC,EAC5D,UAAU,IACd,SAAS,EAAC,oBAAoB,EAC9B,GAAG,EAAE,GAAG,IACR;QACF,+BAAO,OAAO,EAAE,UAAU,CAAC,EAAE,EAAE,SAAS,EAAC,oBAAoB;YAC3D,8BAAM,SAAS,EAAC,sBAAsB;gBACpC,oBAAC,SAAS,IAAC,EAAE,EAAC,MAAM,EAAC,IAAI,EAAE,IAAI,IAC5B,KAAK,CAAC,QAAQ,CACL;gBACX,KAAK,CAAC,WAAW,IAAI,CACpB,oBAAC,SAAS,IACR,EAAE,EAAC,MAAM,EACT,IAAI,EAAE,IAAI,EACV,SAAS,EAAC,2DAA2D,IAEpE,KAAK,CAAC,WAAW,CACR,CACb,CACI,CACD,CACJ,CACP,CAAC;AACJ,CAAC,CAAC,CAAC;AAEH,eAAe,KAAK,CAAC"}
|
|
@@ -26,10 +26,10 @@ export const RadioGroupContext = React.createContext(null);
|
|
|
26
26
|
*/
|
|
27
27
|
export const RadioGroup = forwardRef((_a, ref) => {
|
|
28
28
|
var _b, _c;
|
|
29
|
-
var { children, className, name, defaultValue, value, onChange = () => { }, required } = _a, rest = __rest(_a, ["children", "className", "name", "defaultValue", "value", "onChange", "required"]);
|
|
29
|
+
var { children, className, name, defaultValue, value, onChange = () => { }, required, readOnly } = _a, rest = __rest(_a, ["children", "className", "name", "defaultValue", "value", "onChange", "required", "readOnly"]);
|
|
30
30
|
const fieldset = useContext(FieldsetContext);
|
|
31
31
|
const nameId = useId();
|
|
32
|
-
return (React.createElement(Fieldset, Object.assign({}, rest, { ref: ref, className: cl(className, "navds-radio-group", `navds-radio-group--${(_c = (_b = rest.size) !== null && _b !== void 0 ? _b : fieldset === null || fieldset === void 0 ? void 0 : fieldset.size) !== null && _c !== void 0 ? _c : "medium"}`) }),
|
|
32
|
+
return (React.createElement(Fieldset, Object.assign({}, rest, { readOnly: readOnly, ref: ref, className: cl(className, "navds-radio-group", `navds-radio-group--${(_c = (_b = rest.size) !== null && _b !== void 0 ? _b : fieldset === null || fieldset === void 0 ? void 0 : fieldset.size) !== null && _c !== void 0 ? _c : "medium"}`), nativeReadOnly: false }),
|
|
33
33
|
React.createElement(RadioGroupContext.Provider, { value: {
|
|
34
34
|
name: name !== null && name !== void 0 ? name : `radioGroupName-${nameId}`,
|
|
35
35
|
defaultValue,
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"RadioGroup.js","sourceRoot":"","sources":["../../../src/form/radio/RadioGroup.tsx"],"names":[],"mappings":";;;;;;;;;;;AAAA,OAAO,KAAK,EAAE,EAAE,UAAU,EAAE,UAAU,EAAE,MAAM,OAAO,CAAC;AACtD,OAAO,EAAE,MAAM,MAAM,CAAC;AACtB,OAAO,EAAE,QAAQ,EAAE,eAAe,EAAiB,MAAM,IAAI,CAAC;AAC9D,OAAO,EAAE,KAAK,EAAE,MAAM,OAAO,CAAC;AAU9B,MAAM,CAAC,MAAM,iBAAiB,GAC5B,KAAK,CAAC,aAAa,CAAgC,IAAI,CAAC,CAAC;AAiC3D;;;;;;;;;GASG;AACH,MAAM,CAAC,MAAM,UAAU,GAAG,UAAU,CAClC,CACE,
|
|
1
|
+
{"version":3,"file":"RadioGroup.js","sourceRoot":"","sources":["../../../src/form/radio/RadioGroup.tsx"],"names":[],"mappings":";;;;;;;;;;;AAAA,OAAO,KAAK,EAAE,EAAE,UAAU,EAAE,UAAU,EAAE,MAAM,OAAO,CAAC;AACtD,OAAO,EAAE,MAAM,MAAM,CAAC;AACtB,OAAO,EAAE,QAAQ,EAAE,eAAe,EAAiB,MAAM,IAAI,CAAC;AAC9D,OAAO,EAAE,KAAK,EAAE,MAAM,OAAO,CAAC;AAU9B,MAAM,CAAC,MAAM,iBAAiB,GAC5B,KAAK,CAAC,aAAa,CAAgC,IAAI,CAAC,CAAC;AAiC3D;;;;;;;;;GASG;AACH,MAAM,CAAC,MAAM,UAAU,GAAG,UAAU,CAClC,CACE,EAUC,EACD,GAAG,EACH,EAAE;;QAZF,EACE,QAAQ,EACR,SAAS,EACT,IAAI,EACJ,YAAY,EACZ,KAAK,EACL,QAAQ,GAAG,GAAG,EAAE,GAAE,CAAC,EACnB,QAAQ,EACR,QAAQ,OAET,EADI,IAAI,cATT,8FAUC,CADQ;IAIT,MAAM,QAAQ,GAAG,UAAU,CAAC,eAAe,CAAC,CAAC;IAE7C,MAAM,MAAM,GAAG,KAAK,EAAE,CAAC;IAEvB,OAAO,CACL,oBAAC,QAAQ,oBACH,IAAI,IACR,QAAQ,EAAE,QAAQ,EAClB,GAAG,EAAE,GAAG,EACR,SAAS,EAAE,EAAE,CACX,SAAS,EACT,mBAAmB,EACnB,sBAAsB,MAAA,MAAA,IAAI,CAAC,IAAI,mCAAI,QAAQ,aAAR,QAAQ,uBAAR,QAAQ,CAAE,IAAI,mCAAI,QAAQ,EAAE,CAChE,EACD,cAAc,EAAE,KAAK;QAErB,oBAAC,iBAAiB,CAAC,QAAQ,IACzB,KAAK,EAAE;gBACL,IAAI,EAAE,IAAI,aAAJ,IAAI,cAAJ,IAAI,GAAI,kBAAkB,MAAM,EAAE;gBACxC,YAAY;gBACZ,KAAK;gBACL,QAAQ;gBACR,QAAQ;aACT;YAED,6BAAK,SAAS,EAAC,qBAAqB,IAAE,QAAQ,CAAO,CAC1B,CACpB,CACZ,CAAC;AACJ,CAAC,CACF,CAAC;AAEF,eAAe,UAAU,CAAC"}
|
|
@@ -3,17 +3,19 @@ import { RadioProps } from "./Radio";
|
|
|
3
3
|
* Handles props for Radios in context with Fieldset and RadioGroup
|
|
4
4
|
*/
|
|
5
5
|
export declare const useRadio: (props: RadioProps) => {
|
|
6
|
+
readOnly: true | undefined;
|
|
6
7
|
inputProps: {
|
|
7
8
|
name: string | undefined;
|
|
8
9
|
defaultChecked: boolean | undefined;
|
|
9
10
|
checked: boolean | undefined;
|
|
10
11
|
onChange: (e: any) => void;
|
|
12
|
+
onClick: (e: any) => void;
|
|
11
13
|
required: boolean | undefined;
|
|
12
14
|
type: string;
|
|
13
|
-
id: string;
|
|
14
|
-
"aria-invalid": boolean;
|
|
15
15
|
"aria-describedby": string | undefined;
|
|
16
16
|
disabled: boolean | undefined;
|
|
17
|
+
"aria-invalid"?: boolean | undefined;
|
|
18
|
+
id: string;
|
|
17
19
|
};
|
|
18
20
|
showErrorMsg: boolean;
|
|
19
21
|
hasError: boolean;
|
|
@@ -18,20 +18,30 @@ import { omit } from "../..";
|
|
|
18
18
|
*/
|
|
19
19
|
export const useRadio = (props) => {
|
|
20
20
|
const radioGroup = useContext(RadioGroupContext);
|
|
21
|
-
const _a = useFormField(omit(props, ["description"]), "radio"), { inputProps } = _a, rest = __rest(_a, ["inputProps"]);
|
|
21
|
+
const _a = useFormField(omit(props, ["description"]), "radio"), { inputProps, readOnly } = _a, rest = __rest(_a, ["inputProps", "readOnly"]);
|
|
22
22
|
if (!radioGroup) {
|
|
23
23
|
console.warn("<Radio> must be used inside <RadioGroup>.");
|
|
24
24
|
}
|
|
25
25
|
if ((props === null || props === void 0 ? void 0 : props.required) !== undefined) {
|
|
26
26
|
console.warn("required is only supported on <RadioGroup>.");
|
|
27
27
|
}
|
|
28
|
-
return Object.assign(Object.assign({}, rest), { inputProps: Object.assign(Object.assign({}, inputProps), { name: radioGroup === null || radioGroup === void 0 ? void 0 : radioGroup.name, defaultChecked: (radioGroup === null || radioGroup === void 0 ? void 0 : radioGroup.defaultValue) === undefined
|
|
28
|
+
return Object.assign(Object.assign({}, rest), { readOnly, inputProps: Object.assign(Object.assign({}, inputProps), { name: radioGroup === null || radioGroup === void 0 ? void 0 : radioGroup.name, defaultChecked: (radioGroup === null || radioGroup === void 0 ? void 0 : radioGroup.defaultValue) === undefined
|
|
29
29
|
? undefined
|
|
30
30
|
: (radioGroup === null || radioGroup === void 0 ? void 0 : radioGroup.defaultValue) === props.value, checked: (radioGroup === null || radioGroup === void 0 ? void 0 : radioGroup.value) === undefined
|
|
31
31
|
? undefined
|
|
32
32
|
: (radioGroup === null || radioGroup === void 0 ? void 0 : radioGroup.value) === props.value, onChange: (e) => {
|
|
33
|
+
if (readOnly) {
|
|
34
|
+
return;
|
|
35
|
+
}
|
|
33
36
|
props.onChange && props.onChange(e);
|
|
34
37
|
(radioGroup === null || radioGroup === void 0 ? void 0 : radioGroup.onChange) && radioGroup.onChange(props.value);
|
|
38
|
+
}, onClick: (e) => {
|
|
39
|
+
var _a;
|
|
40
|
+
if (readOnly) {
|
|
41
|
+
e.preventDefault();
|
|
42
|
+
return;
|
|
43
|
+
}
|
|
44
|
+
(_a = props === null || props === void 0 ? void 0 : props.onClick) === null || _a === void 0 ? void 0 : _a.call(props, e);
|
|
35
45
|
}, required: radioGroup === null || radioGroup === void 0 ? void 0 : radioGroup.required, type: "radio" }) });
|
|
36
46
|
};
|
|
37
47
|
//# sourceMappingURL=useRadio.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"useRadio.js","sourceRoot":"","sources":["../../../src/form/radio/useRadio.ts"],"names":[],"mappings":";;;;;;;;;;;AAAA,OAAO,EAAE,UAAU,EAAE,MAAM,OAAO,CAAC;AACnC,OAAO,EAAE,YAAY,EAAE,MAAM,iBAAiB,CAAC;AAE/C,OAAO,EAAE,iBAAiB,EAAE,MAAM,cAAc,CAAC;AACjD,OAAO,EAAE,IAAI,EAAE,MAAM,OAAO,CAAC;AAE7B;;GAEG;AACH,MAAM,CAAC,MAAM,QAAQ,GAAG,CAAC,KAAiB,EAAE,EAAE;IAC5C,MAAM,UAAU,GAAG,UAAU,CAAC,iBAAiB,CAAC,CAAC;IAEjD,MAAM,
|
|
1
|
+
{"version":3,"file":"useRadio.js","sourceRoot":"","sources":["../../../src/form/radio/useRadio.ts"],"names":[],"mappings":";;;;;;;;;;;AAAA,OAAO,EAAE,UAAU,EAAE,MAAM,OAAO,CAAC;AACnC,OAAO,EAAE,YAAY,EAAE,MAAM,iBAAiB,CAAC;AAE/C,OAAO,EAAE,iBAAiB,EAAE,MAAM,cAAc,CAAC;AACjD,OAAO,EAAE,IAAI,EAAE,MAAM,OAAO,CAAC;AAE7B;;GAEG;AACH,MAAM,CAAC,MAAM,QAAQ,GAAG,CAAC,KAAiB,EAAE,EAAE;IAC5C,MAAM,UAAU,GAAG,UAAU,CAAC,iBAAiB,CAAC,CAAC;IAEjD,MAAM,KAAoC,YAAY,CACpD,IAAI,CAAC,KAAK,EAAE,CAAC,aAAa,CAAC,CAAC,EAC5B,OAAO,CACR,EAHK,EAAE,UAAU,EAAE,QAAQ,OAG3B,EAHgC,IAAI,cAA/B,0BAAiC,CAGtC,CAAC;IAEF,IAAI,CAAC,UAAU,EAAE;QACf,OAAO,CAAC,IAAI,CAAC,2CAA2C,CAAC,CAAC;KAC3D;IAED,IAAI,CAAA,KAAK,aAAL,KAAK,uBAAL,KAAK,CAAE,QAAQ,MAAK,SAAS,EAAE;QACjC,OAAO,CAAC,IAAI,CAAC,6CAA6C,CAAC,CAAC;KAC7D;IAED,uCACK,IAAI,KACP,QAAQ,EACR,UAAU,kCACL,UAAU,KACb,IAAI,EAAE,UAAU,aAAV,UAAU,uBAAV,UAAU,CAAE,IAAI,EACtB,cAAc,EACZ,CAAA,UAAU,aAAV,UAAU,uBAAV,UAAU,CAAE,YAAY,MAAK,SAAS;gBACpC,CAAC,CAAC,SAAS;gBACX,CAAC,CAAC,CAAA,UAAU,aAAV,UAAU,uBAAV,UAAU,CAAE,YAAY,MAAK,KAAK,CAAC,KAAK,EAC9C,OAAO,EACL,CAAA,UAAU,aAAV,UAAU,uBAAV,UAAU,CAAE,KAAK,MAAK,SAAS;gBAC7B,CAAC,CAAC,SAAS;gBACX,CAAC,CAAC,CAAA,UAAU,aAAV,UAAU,uBAAV,UAAU,CAAE,KAAK,MAAK,KAAK,CAAC,KAAK,EACvC,QAAQ,EAAE,CAAC,CAAC,EAAE,EAAE;gBACd,IAAI,QAAQ,EAAE;oBACZ,OAAO;iBACR;gBACD,KAAK,CAAC,QAAQ,IAAI,KAAK,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC;gBACpC,CAAA,UAAU,aAAV,UAAU,uBAAV,UAAU,CAAE,QAAQ,KAAI,UAAU,CAAC,QAAQ,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC;YAC3D,CAAC,EACD,OAAO,EAAE,CAAC,CAAC,EAAE,EAAE;;gBACb,IAAI,QAAQ,EAAE;oBACZ,CAAC,CAAC,cAAc,EAAE,CAAC;oBACnB,OAAO;iBACR;gBACD,MAAA,KAAK,aAAL,KAAK,uBAAL,KAAK,CAAE,OAAO,sDAAG,CAAC,CAAC,CAAC;YACtB,CAAC,EACD,QAAQ,EAAE,UAAU,aAAV,UAAU,uBAAV,UAAU,CAAE,QAAQ,EAC9B,IAAI,EAAE,OAAO,OAEf;AACJ,CAAC,CAAC"}
|
|
@@ -8,7 +8,7 @@ export type SearchClearEvent = {
|
|
|
8
8
|
trigger: "Escape";
|
|
9
9
|
event: React.KeyboardEvent<HTMLDivElement>;
|
|
10
10
|
};
|
|
11
|
-
export interface SearchProps extends FormFieldProps, Omit<InputHTMLAttributes<HTMLInputElement>, "size" | "onChange"> {
|
|
11
|
+
export interface SearchProps extends Omit<FormFieldProps, "readOnly">, Omit<InputHTMLAttributes<HTMLInputElement>, "size" | "onChange"> {
|
|
12
12
|
children?: React.ReactNode;
|
|
13
13
|
/**
|
|
14
14
|
* Search label
|
|
@@ -69,7 +69,7 @@ export const Search = forwardRef((props, ref) => {
|
|
|
69
69
|
React.createElement("div", { className: "navds-search__wrapper" },
|
|
70
70
|
React.createElement("div", { className: "navds-search__wrapper-inner" },
|
|
71
71
|
variant === "simple" && (React.createElement(MagnifyingGlassIcon, { "aria-hidden": true, className: "navds-search__search-icon" })),
|
|
72
|
-
React.createElement("input", Object.assign({ ref: mergedRef }, omit(rest, ["error", "errorId", "size"]), inputProps, { value: value !== null && value !== void 0 ? value : internalValue, onChange: (e) => handleChange(e.target.value), type: "search", role: "searchbox", className: cl(className, "navds-search__input", `navds-search__input--${variant}`, "navds-text-field__input", "navds-body-short", `navds-body-${size}`) }, (htmlSize ? { size: Number(htmlSize) } : {}))),
|
|
72
|
+
React.createElement("input", Object.assign({ ref: mergedRef }, omit(rest, ["error", "errorId", "size", "readOnly"]), inputProps, { value: value !== null && value !== void 0 ? value : internalValue, onChange: (e) => handleChange(e.target.value), type: "search", role: "searchbox", className: cl(className, "navds-search__input", `navds-search__input--${variant}`, "navds-text-field__input", "navds-body-short", `navds-body-${size}`) }, (htmlSize ? { size: Number(htmlSize) } : {}))),
|
|
73
73
|
(value !== null && value !== void 0 ? value : internalValue) && clearButton && (React.createElement("button", { type: "button", onClick: (e) => handleClear({ trigger: "Click", event: e }), className: "navds-search__button-clear" },
|
|
74
74
|
React.createElement("span", { className: "navds-sr-only" }, clearButtonLabel ? clearButtonLabel : "Tøm"),
|
|
75
75
|
React.createElement(XMarkIcon, { "aria-hidden": true })))),
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"Search.js","sourceRoot":"","sources":["../../../src/form/search/Search.tsx"],"names":[],"mappings":"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
|
|
1
|
+
{"version":3,"file":"Search.js","sourceRoot":"","sources":["../../../src/form/search/Search.tsx"],"names":[],"mappings":"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"}
|
|
@@ -25,6 +25,10 @@ export interface FormFieldProps {
|
|
|
25
25
|
* Override internal id
|
|
26
26
|
*/
|
|
27
27
|
id?: string;
|
|
28
|
+
/**
|
|
29
|
+
* Read only-state
|
|
30
|
+
*/
|
|
31
|
+
readOnly?: boolean;
|
|
28
32
|
}
|
|
29
33
|
/**
|
|
30
34
|
* Handles props and their state for various form-fields in context with Fieldset
|
|
@@ -35,10 +39,11 @@ export declare const useFormField: (props: FormFieldProps, prefix: string) => {
|
|
|
35
39
|
errorId: string;
|
|
36
40
|
inputDescriptionId: string;
|
|
37
41
|
size: "medium" | "small";
|
|
42
|
+
readOnly: true | undefined;
|
|
38
43
|
inputProps: {
|
|
39
|
-
id: string;
|
|
40
|
-
"aria-invalid": boolean;
|
|
41
44
|
"aria-describedby": string | undefined;
|
|
42
45
|
disabled: boolean | undefined;
|
|
46
|
+
"aria-invalid"?: boolean | undefined;
|
|
47
|
+
id: string;
|
|
43
48
|
};
|
|
44
49
|
};
|
package/esm/form/useFormField.js
CHANGED
|
@@ -14,24 +14,26 @@ export const useFormField = (props, prefix) => {
|
|
|
14
14
|
const errorId = propErrorId !== null && propErrorId !== void 0 ? propErrorId : `${prefix}-error-${genId}`;
|
|
15
15
|
const inputDescriptionId = `${prefix}-description-${genId}`;
|
|
16
16
|
const disabled = (fieldset === null || fieldset === void 0 ? void 0 : fieldset.disabled) || props.disabled;
|
|
17
|
-
const
|
|
18
|
-
const
|
|
17
|
+
const readOnly = (((fieldset === null || fieldset === void 0 ? void 0 : fieldset.readOnly) || props.readOnly) && !disabled) || undefined;
|
|
18
|
+
const hasError = !disabled && !readOnly && !!(error || (fieldset === null || fieldset === void 0 ? void 0 : fieldset.error));
|
|
19
|
+
const showErrorMsg = !disabled && !readOnly && !!error && typeof error !== "boolean";
|
|
20
|
+
const ariaInvalid = Object.assign({}, (hasError ? { "aria-invalid": true } : {}));
|
|
21
|
+
if ((props === null || props === void 0 ? void 0 : props.required) && process.env.NODE_ENV !== "production") {
|
|
22
|
+
console.warn("Aksel: Use of 'required' in form-elements is heavily discuouraged. Docs about why here:");
|
|
23
|
+
console.warn("https://aksel.nav.no/god-praksis/artikler/obligatoriske-og-valgfrie-skjemafelter#h3bfe00453471");
|
|
24
|
+
}
|
|
19
25
|
return {
|
|
20
26
|
showErrorMsg,
|
|
21
27
|
hasError,
|
|
22
28
|
errorId,
|
|
23
29
|
inputDescriptionId,
|
|
24
30
|
size: (_b = size !== null && size !== void 0 ? size : fieldset === null || fieldset === void 0 ? void 0 : fieldset.size) !== null && _b !== void 0 ? _b : "medium",
|
|
25
|
-
|
|
26
|
-
|
|
27
|
-
"aria-invalid": hasError,
|
|
28
|
-
"aria-describedby": cl(props["aria-describedby"], {
|
|
31
|
+
readOnly,
|
|
32
|
+
inputProps: Object.assign(Object.assign({ id }, ariaInvalid), { "aria-describedby": cl(props["aria-describedby"], {
|
|
29
33
|
[inputDescriptionId]: !!(props === null || props === void 0 ? void 0 : props.description) && typeof (props === null || props === void 0 ? void 0 : props.description) === "string",
|
|
30
34
|
[errorId]: showErrorMsg,
|
|
31
35
|
[(_c = fieldset === null || fieldset === void 0 ? void 0 : fieldset.errorId) !== null && _c !== void 0 ? _c : ""]: hasError && !!(fieldset === null || fieldset === void 0 ? void 0 : fieldset.error),
|
|
32
|
-
}) || undefined,
|
|
33
|
-
disabled,
|
|
34
|
-
},
|
|
36
|
+
}) || undefined, disabled }),
|
|
35
37
|
};
|
|
36
38
|
};
|
|
37
39
|
//# sourceMappingURL=useFormField.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"useFormField.js","sourceRoot":"","sources":["../../src/form/useFormField.ts"],"names":[],"mappings":"AAAA,OAAc,EAAE,UAAU,EAAE,MAAM,OAAO,CAAC;AAC1C,OAAO,EAAE,MAAM,MAAM,CAAC;AACtB,OAAO,EAAE,eAAe,EAAE,MAAM,SAAS,CAAC;AAC1C,OAAO,EAAE,KAAK,EAAE,MAAM,UAAU,CAAC;
|
|
1
|
+
{"version":3,"file":"useFormField.js","sourceRoot":"","sources":["../../src/form/useFormField.ts"],"names":[],"mappings":"AAAA,OAAc,EAAE,UAAU,EAAE,MAAM,OAAO,CAAC;AAC1C,OAAO,EAAE,MAAM,MAAM,CAAC;AACtB,OAAO,EAAE,eAAe,EAAE,MAAM,SAAS,CAAC;AAC1C,OAAO,EAAE,KAAK,EAAE,MAAM,UAAU,CAAC;AAkCjC;;GAEG;AACH,MAAM,CAAC,MAAM,YAAY,GAAG,CAAC,KAAqB,EAAE,MAAc,EAAE,EAAE;;IACpE,MAAM,EAAE,IAAI,EAAE,KAAK,EAAE,OAAO,EAAE,WAAW,EAAE,GAAG,KAAK,CAAC;IAEpD,MAAM,QAAQ,GAAG,UAAU,CAAC,eAAe,CAAC,CAAC;IAE7C,MAAM,KAAK,GAAG,KAAK,EAAE,CAAC;IAEtB,MAAM,EAAE,GAAG,MAAA,KAAK,CAAC,EAAE,mCAAI,GAAG,MAAM,IAAI,KAAK,EAAE,CAAC;IAC5C,MAAM,OAAO,GAAG,WAAW,aAAX,WAAW,cAAX,WAAW,GAAI,GAAG,MAAM,UAAU,KAAK,EAAE,CAAC;IAC1D,MAAM,kBAAkB,GAAG,GAAG,MAAM,gBAAgB,KAAK,EAAE,CAAC;IAE5D,MAAM,QAAQ,GAAG,CAAA,QAAQ,aAAR,QAAQ,uBAAR,QAAQ,CAAE,QAAQ,KAAI,KAAK,CAAC,QAAQ,CAAC;IACtD,MAAM,QAAQ,GACZ,CAAC,CAAC,CAAA,QAAQ,aAAR,QAAQ,uBAAR,QAAQ,CAAE,QAAQ,KAAI,KAAK,CAAC,QAAQ,CAAC,IAAI,CAAC,QAAQ,CAAC,IAAI,SAAS,CAAC;IAErE,MAAM,QAAQ,GACZ,CAAC,QAAQ,IAAI,CAAC,QAAQ,IAAI,CAAC,CAAC,CAAC,KAAK,KAAI,QAAQ,aAAR,QAAQ,uBAAR,QAAQ,CAAE,KAAK,CAAA,CAAC,CAAC;IACzD,MAAM,YAAY,GAChB,CAAC,QAAQ,IAAI,CAAC,QAAQ,IAAI,CAAC,CAAC,KAAK,IAAI,OAAO,KAAK,KAAK,SAAS,CAAC;IAElE,MAAM,WAAW,qBAAQ,CAAC,QAAQ,CAAC,CAAC,CAAC,EAAE,cAAc,EAAE,IAAI,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC,CAAE,CAAC;IAEtE,IAAI,CAAC,KAAa,aAAb,KAAK,uBAAL,KAAK,CAAU,QAAQ,KAAI,OAAO,CAAC,GAAG,CAAC,QAAQ,KAAK,YAAY,EAAE;QACrE,OAAO,CAAC,IAAI,CACV,yFAAyF,CAC1F,CAAC;QACF,OAAO,CAAC,IAAI,CACV,gGAAgG,CACjG,CAAC;KACH;IAED,OAAO;QACL,YAAY;QACZ,QAAQ;QACR,OAAO;QACP,kBAAkB;QAClB,IAAI,EAAE,MAAA,IAAI,aAAJ,IAAI,cAAJ,IAAI,GAAI,QAAQ,aAAR,QAAQ,uBAAR,QAAQ,CAAE,IAAI,mCAAI,QAAQ;QACxC,QAAQ;QACR,UAAU,gCACR,EAAE,IACC,WAAW,KACd,kBAAkB,EAChB,EAAE,CAAC,KAAK,CAAC,kBAAkB,CAAC,EAAE;gBAC5B,CAAC,kBAAkB,CAAC,EAClB,CAAC,CAAC,CAAA,KAAK,aAAL,KAAK,uBAAL,KAAK,CAAE,WAAW,CAAA,IAAI,OAAO,CAAA,KAAK,aAAL,KAAK,uBAAL,KAAK,CAAE,WAAW,CAAA,KAAK,QAAQ;gBAChE,CAAC,OAAO,CAAC,EAAE,YAAY;gBACvB,CAAC,MAAA,QAAQ,aAAR,QAAQ,uBAAR,QAAQ,CAAE,OAAO,mCAAI,EAAE,CAAC,EAAE,QAAQ,IAAI,CAAC,CAAC,CAAA,QAAQ,aAAR,QAAQ,uBAAR,QAAQ,CAAE,KAAK,CAAA;aACzD,CAAC,IAAI,SAAS,EAEjB,QAAQ,GACT;KACF,CAAC;AACJ,CAAC,CAAC"}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@navikt/ds-react",
|
|
3
|
-
"version": "4.
|
|
3
|
+
"version": "4.6.0",
|
|
4
4
|
"description": "Aksel react-components for NAV designsystem",
|
|
5
5
|
"author": "Aksel | NAV designsystem team",
|
|
6
6
|
"license": "MIT",
|
|
@@ -38,7 +38,7 @@
|
|
|
38
38
|
},
|
|
39
39
|
"dependencies": {
|
|
40
40
|
"@floating-ui/react": "0.24.1",
|
|
41
|
-
"@navikt/aksel-icons": "^4.
|
|
41
|
+
"@navikt/aksel-icons": "^4.6.0",
|
|
42
42
|
"@radix-ui/react-tabs": "1.0.0",
|
|
43
43
|
"@radix-ui/react-toggle-group": "1.0.0",
|
|
44
44
|
"clsx": "^1.2.1",
|
package/src/alert/Alert.tsx
CHANGED
|
@@ -3,10 +3,12 @@ import {
|
|
|
3
3
|
CheckmarkCircleFillIcon,
|
|
4
4
|
ExclamationmarkTriangleFillIcon,
|
|
5
5
|
XMarkOctagonFillIcon,
|
|
6
|
+
XMarkIcon,
|
|
6
7
|
} from "@navikt/aksel-icons";
|
|
7
8
|
import cl from "clsx";
|
|
8
9
|
import React, { forwardRef } from "react";
|
|
9
10
|
import { BodyLong } from "../typography/BodyLong";
|
|
11
|
+
import { Button } from "../button";
|
|
10
12
|
|
|
11
13
|
export interface AlertProps extends React.HTMLAttributes<HTMLDivElement> {
|
|
12
14
|
/**
|
|
@@ -32,6 +34,17 @@ export interface AlertProps extends React.HTMLAttributes<HTMLDivElement> {
|
|
|
32
34
|
* @default false
|
|
33
35
|
*/
|
|
34
36
|
inline?: boolean;
|
|
37
|
+
/**
|
|
38
|
+
* Removes close-button(X) when false
|
|
39
|
+
* Requires onClose to be set
|
|
40
|
+
* @default true
|
|
41
|
+
*/
|
|
42
|
+
closeButton?: boolean;
|
|
43
|
+
/**
|
|
44
|
+
* Callback for alert wanting to close
|
|
45
|
+
* requires closeButton to be true
|
|
46
|
+
*/
|
|
47
|
+
onClose?: () => void;
|
|
35
48
|
}
|
|
36
49
|
|
|
37
50
|
const Icon = ({ variant, ...props }) => {
|
|
@@ -71,27 +84,45 @@ export const Alert = forwardRef<HTMLDivElement, AlertProps>(
|
|
|
71
84
|
size = "medium",
|
|
72
85
|
fullWidth = false,
|
|
73
86
|
inline = false,
|
|
87
|
+
closeButton = false,
|
|
88
|
+
onClose,
|
|
74
89
|
...rest
|
|
75
90
|
},
|
|
76
91
|
ref
|
|
77
|
-
) =>
|
|
78
|
-
|
|
79
|
-
|
|
80
|
-
|
|
81
|
-
|
|
82
|
-
className
|
|
83
|
-
|
|
84
|
-
|
|
85
|
-
|
|
86
|
-
|
|
87
|
-
|
|
88
|
-
|
|
89
|
-
|
|
90
|
-
|
|
91
|
-
|
|
92
|
-
|
|
93
|
-
|
|
94
|
-
|
|
92
|
+
) => {
|
|
93
|
+
return (
|
|
94
|
+
<div
|
|
95
|
+
{...rest}
|
|
96
|
+
ref={ref}
|
|
97
|
+
className={cl(
|
|
98
|
+
className,
|
|
99
|
+
"navds-alert",
|
|
100
|
+
`navds-alert--${variant}`,
|
|
101
|
+
`navds-alert--${size}`,
|
|
102
|
+
{
|
|
103
|
+
"navds-alert--full-width": fullWidth,
|
|
104
|
+
"navds-alert--inline": inline,
|
|
105
|
+
}
|
|
106
|
+
)}
|
|
107
|
+
>
|
|
108
|
+
<Icon variant={variant} className="navds-alert__icon" />
|
|
109
|
+
<BodyLong as="div" size={size} className="navds-alert__wrapper">
|
|
110
|
+
{children}
|
|
111
|
+
</BodyLong>
|
|
112
|
+
{closeButton && !inline && (
|
|
113
|
+
<div className="navds-alert__button-wrapper">
|
|
114
|
+
<Button
|
|
115
|
+
className="navds-alert__button"
|
|
116
|
+
size="small"
|
|
117
|
+
variant="tertiary-neutral"
|
|
118
|
+
onClick={onClose}
|
|
119
|
+
icon={<XMarkIcon title="Lukk Alert" />}
|
|
120
|
+
/>
|
|
121
|
+
</div>
|
|
122
|
+
)}
|
|
123
|
+
</div>
|
|
124
|
+
);
|
|
125
|
+
}
|
|
95
126
|
);
|
|
96
127
|
|
|
97
128
|
export default Alert;
|
|
@@ -2,6 +2,8 @@ import type { Meta, StoryObj } from "@storybook/react";
|
|
|
2
2
|
import React from "react";
|
|
3
3
|
import { Alert } from ".";
|
|
4
4
|
import { BodyLong, Heading as DsHeading, Link } from "..";
|
|
5
|
+
import { within, userEvent } from "@storybook/testing-library";
|
|
6
|
+
import { expect } from "@storybook/jest";
|
|
5
7
|
|
|
6
8
|
const meta: Meta<typeof Alert> = {
|
|
7
9
|
title: "ds-react/Alert",
|
|
@@ -20,22 +22,14 @@ const variants: Array<"error" | "warning" | "info" | "success"> = [
|
|
|
20
22
|
];
|
|
21
23
|
|
|
22
24
|
export const Default: Story = {
|
|
23
|
-
render: (props) =>
|
|
24
|
-
<Alert
|
|
25
|
-
variant={props.variant}
|
|
26
|
-
size={props.size}
|
|
27
|
-
fullWidth={props.fullWidth}
|
|
28
|
-
inline={props.inline}
|
|
29
|
-
>
|
|
30
|
-
{props.children}
|
|
31
|
-
</Alert>
|
|
32
|
-
),
|
|
25
|
+
render: (props) => <Alert {...props} />,
|
|
33
26
|
|
|
34
27
|
args: {
|
|
35
28
|
children: "Id elit esse enim reprehenderit enim nisi veniam nostrud.",
|
|
36
29
|
fullWidth: false,
|
|
37
30
|
variant: "info",
|
|
38
31
|
size: "medium",
|
|
32
|
+
closeButton: false,
|
|
39
33
|
},
|
|
40
34
|
argTypes: {
|
|
41
35
|
variant: {
|
|
@@ -50,21 +44,39 @@ export const Default: Story = {
|
|
|
50
44
|
},
|
|
51
45
|
options: ["medium", "small"],
|
|
52
46
|
},
|
|
47
|
+
closeButton: {
|
|
48
|
+
type: "boolean",
|
|
49
|
+
},
|
|
53
50
|
},
|
|
54
51
|
};
|
|
55
52
|
|
|
56
|
-
export const Small =
|
|
57
|
-
|
|
58
|
-
|
|
59
|
-
|
|
60
|
-
|
|
61
|
-
|
|
62
|
-
|
|
63
|
-
|
|
64
|
-
|
|
65
|
-
|
|
66
|
-
|
|
67
|
-
|
|
53
|
+
export const Small = {
|
|
54
|
+
render: (props) => {
|
|
55
|
+
return (
|
|
56
|
+
<div className="colgap">
|
|
57
|
+
{variants.map((variant, i) => (
|
|
58
|
+
<Alert
|
|
59
|
+
key={variant}
|
|
60
|
+
variant={variant}
|
|
61
|
+
size="small"
|
|
62
|
+
closeButton={props.closeButton}
|
|
63
|
+
>
|
|
64
|
+
{new Array(i + 1).fill(
|
|
65
|
+
"Id elit esse enim reprehenderit enim nisi veniam nostrud."
|
|
66
|
+
)}
|
|
67
|
+
</Alert>
|
|
68
|
+
))}
|
|
69
|
+
</div>
|
|
70
|
+
);
|
|
71
|
+
},
|
|
72
|
+
args: {
|
|
73
|
+
closeButton: false,
|
|
74
|
+
},
|
|
75
|
+
argtypes: {
|
|
76
|
+
closeButton: {
|
|
77
|
+
type: "boolean",
|
|
78
|
+
},
|
|
79
|
+
},
|
|
68
80
|
};
|
|
69
81
|
|
|
70
82
|
export const FullWidth = () => {
|
|
@@ -147,3 +159,44 @@ export const Links = () => {
|
|
|
147
159
|
</div>
|
|
148
160
|
);
|
|
149
161
|
};
|
|
162
|
+
|
|
163
|
+
const AlertWithCloseButton = ({ children }: { children?: React.ReactNode }) => {
|
|
164
|
+
let [show, setShow] = React.useState(true);
|
|
165
|
+
|
|
166
|
+
return (
|
|
167
|
+
show && (
|
|
168
|
+
<Alert variant="success" closeButton onClose={() => setShow(false)}>
|
|
169
|
+
{children || "Content"}
|
|
170
|
+
</Alert>
|
|
171
|
+
)
|
|
172
|
+
);
|
|
173
|
+
};
|
|
174
|
+
|
|
175
|
+
export const WithCloseButton: Story = {
|
|
176
|
+
render: () => {
|
|
177
|
+
return (
|
|
178
|
+
<div className="colgap">
|
|
179
|
+
<AlertWithCloseButton />
|
|
180
|
+
<AlertWithCloseButton>
|
|
181
|
+
<BodyLong>
|
|
182
|
+
Ullamco ullamco laborum et commodo sint culpa cupidatat culpa qui
|
|
183
|
+
laboris ex. Labore ex occaecat proident qui qui fugiat magna. Fugiat
|
|
184
|
+
sint commodo consequat eu aute.
|
|
185
|
+
</BodyLong>
|
|
186
|
+
<Link href="#">Id elit esse enim reprehenderit</Link>
|
|
187
|
+
</AlertWithCloseButton>
|
|
188
|
+
</div>
|
|
189
|
+
);
|
|
190
|
+
},
|
|
191
|
+
play: async ({ canvasElement, step }) => {
|
|
192
|
+
const canvas = within(canvasElement);
|
|
193
|
+
const buttons = canvas.getAllByTitle("Lukk Alert");
|
|
194
|
+
|
|
195
|
+
await step("click button", async () => {
|
|
196
|
+
await userEvent.click(buttons[0]);
|
|
197
|
+
});
|
|
198
|
+
|
|
199
|
+
const buttonsAfter = canvas.getAllByTitle("Lukk Alert");
|
|
200
|
+
expect(buttonsAfter.length).toBe(1);
|
|
201
|
+
},
|
|
202
|
+
};
|
package/src/date/DateInput.tsx
CHANGED
|
@@ -4,6 +4,7 @@ import React, { forwardRef, InputHTMLAttributes } from "react";
|
|
|
4
4
|
import { BodyShort, ErrorMessage, Label, omit } from "..";
|
|
5
5
|
import { FormFieldProps, useFormField } from "../form/useFormField";
|
|
6
6
|
import { useDateInputContext } from "./context";
|
|
7
|
+
import { ReadOnlyIcon } from "../form/ReadOnlyIcon";
|
|
7
8
|
|
|
8
9
|
export interface DateInputProps
|
|
9
10
|
extends FormFieldProps,
|
|
@@ -57,6 +58,7 @@ const DateInput = forwardRef<HTMLInputElement, DateInputProps>((props, ref) => {
|
|
|
57
58
|
errorId,
|
|
58
59
|
showErrorMsg,
|
|
59
60
|
hasError,
|
|
61
|
+
readOnly,
|
|
60
62
|
} = useFormField(props, conditionalVariables.prefix);
|
|
61
63
|
|
|
62
64
|
return (
|
|
@@ -71,6 +73,8 @@ const DateInput = forwardRef<HTMLInputElement, DateInputProps>((props, ref) => {
|
|
|
71
73
|
"navds-date__field--error": hasError,
|
|
72
74
|
"navds-form-field--disabled": !!inputProps.disabled,
|
|
73
75
|
"navds-text-field--disabled": !!inputProps.disabled,
|
|
76
|
+
"navds-text-field--readonly": readOnly,
|
|
77
|
+
"navds-date__field--readonly": readOnly,
|
|
74
78
|
}
|
|
75
79
|
)}
|
|
76
80
|
>
|
|
@@ -81,6 +85,7 @@ const DateInput = forwardRef<HTMLInputElement, DateInputProps>((props, ref) => {
|
|
|
81
85
|
"navds-sr-only": hideLabel,
|
|
82
86
|
})}
|
|
83
87
|
>
|
|
88
|
+
<ReadOnlyIcon readOnly={readOnly} />
|
|
84
89
|
{label}
|
|
85
90
|
</Label>
|
|
86
91
|
{!!description && (
|
|
@@ -102,6 +107,7 @@ const DateInput = forwardRef<HTMLInputElement, DateInputProps>((props, ref) => {
|
|
|
102
107
|
{...inputProps}
|
|
103
108
|
autoComplete="off"
|
|
104
109
|
aria-controls={ariaId}
|
|
110
|
+
readOnly={readOnly}
|
|
105
111
|
className={cl(
|
|
106
112
|
"navds-date__field-input",
|
|
107
113
|
"navds-text-field__input",
|
|
@@ -111,8 +117,8 @@ const DateInput = forwardRef<HTMLInputElement, DateInputProps>((props, ref) => {
|
|
|
111
117
|
size={14}
|
|
112
118
|
/>
|
|
113
119
|
<button
|
|
114
|
-
disabled={inputProps.disabled}
|
|
115
|
-
tabIndex={open ? -1 : 0}
|
|
120
|
+
disabled={inputProps.disabled || readOnly}
|
|
121
|
+
tabIndex={readOnly ? -1 : open ? -1 : 0}
|
|
116
122
|
onClick={() => onOpen()}
|
|
117
123
|
type="button"
|
|
118
124
|
className="navds-date__field-button"
|
|
@@ -341,3 +341,25 @@ export const Size = () => {
|
|
|
341
341
|
</div>
|
|
342
342
|
);
|
|
343
343
|
};
|
|
344
|
+
|
|
345
|
+
export const Readonly = () => {
|
|
346
|
+
const { datepickerProps, inputProps } = useDatepicker({
|
|
347
|
+
fromDate: new Date("Aug 23 2019"),
|
|
348
|
+
toDate: new Date("Feb 23 2024"),
|
|
349
|
+
onDateChange: console.log,
|
|
350
|
+
});
|
|
351
|
+
|
|
352
|
+
return (
|
|
353
|
+
<div style={{ display: "flex", gap: "1rem" }}>
|
|
354
|
+
<DatePicker {...datepickerProps} dropdownCaption>
|
|
355
|
+
<DatePicker.Input
|
|
356
|
+
size="medium"
|
|
357
|
+
{...inputProps}
|
|
358
|
+
value="01.02.2021"
|
|
359
|
+
label="Velg dato"
|
|
360
|
+
readOnly
|
|
361
|
+
/>
|
|
362
|
+
</DatePicker>
|
|
363
|
+
</div>
|
|
364
|
+
);
|
|
365
|
+
};
|
|
@@ -204,6 +204,9 @@ export const useDatepicker = (
|
|
|
204
204
|
};
|
|
205
205
|
|
|
206
206
|
const handleFocus: React.FocusEventHandler<HTMLInputElement> = (e) => {
|
|
207
|
+
if (e.target.readOnly) {
|
|
208
|
+
return;
|
|
209
|
+
}
|
|
207
210
|
!open && openOnFocus && handleOpen(true);
|
|
208
211
|
let day = parseDate(
|
|
209
212
|
e.target.value,
|
|
@@ -201,6 +201,9 @@ export const useMonthpicker = (
|
|
|
201
201
|
};
|
|
202
202
|
|
|
203
203
|
const handleFocus: React.FocusEventHandler<HTMLInputElement> = (e) => {
|
|
204
|
+
if (e.target.readOnly) {
|
|
205
|
+
return;
|
|
206
|
+
}
|
|
204
207
|
!open && openOnFocus && handleOpen(true);
|
|
205
208
|
let day = parseDate(
|
|
206
209
|
e.target.value,
|
|
@@ -6,7 +6,7 @@ import { useFormField } from "./useFormField";
|
|
|
6
6
|
export interface ConfirmationPanelProps
|
|
7
7
|
extends Omit<
|
|
8
8
|
CheckboxProps,
|
|
9
|
-
"children" | "indeterminate" | "hideLabel" | "error"
|
|
9
|
+
"children" | "indeterminate" | "hideLabel" | "error" | "readOnly"
|
|
10
10
|
> {
|
|
11
11
|
/**
|
|
12
12
|
* Additional information on panel
|