@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.
Files changed (98) hide show
  1. package/_docs.json +325 -0
  2. package/cjs/alert/Alert.js +9 -3
  3. package/cjs/date/DateInput.js +9 -4
  4. package/cjs/date/hooks/useDatepicker.js +3 -0
  5. package/cjs/date/hooks/useMonthPicker.js +3 -0
  6. package/cjs/date/hooks/useRangeDatepicker.js +3 -0
  7. package/cjs/form/Fieldset/Fieldset.js +11 -4
  8. package/cjs/form/ReadOnlyIcon.js +15 -0
  9. package/cjs/form/Select.js +23 -3
  10. package/cjs/form/Switch.js +21 -8
  11. package/cjs/form/TextField.js +7 -3
  12. package/cjs/form/Textarea.js +7 -3
  13. package/cjs/form/checkbox/Checkbox.js +7 -2
  14. package/cjs/form/checkbox/CheckboxGroup.js +1 -1
  15. package/cjs/form/checkbox/useCheckbox.js +12 -2
  16. package/cjs/form/radio/Radio.js +3 -2
  17. package/cjs/form/radio/RadioGroup.js +2 -2
  18. package/cjs/form/radio/useRadio.js +12 -2
  19. package/cjs/form/search/Search.js +1 -1
  20. package/cjs/form/useFormField.js +11 -9
  21. package/esm/alert/Alert.d.ts +11 -0
  22. package/esm/alert/Alert.js +10 -4
  23. package/esm/alert/Alert.js.map +1 -1
  24. package/esm/date/DateInput.js +9 -4
  25. package/esm/date/DateInput.js.map +1 -1
  26. package/esm/date/hooks/useDatepicker.js +3 -0
  27. package/esm/date/hooks/useDatepicker.js.map +1 -1
  28. package/esm/date/hooks/useMonthPicker.js +3 -0
  29. package/esm/date/hooks/useMonthPicker.js.map +1 -1
  30. package/esm/date/hooks/useRangeDatepicker.js +3 -0
  31. package/esm/date/hooks/useRangeDatepicker.js.map +1 -1
  32. package/esm/form/ConfirmationPanel.d.ts +1 -1
  33. package/esm/form/Fieldset/Fieldset.d.ts +5 -0
  34. package/esm/form/Fieldset/Fieldset.js +11 -4
  35. package/esm/form/Fieldset/Fieldset.js.map +1 -1
  36. package/esm/form/Fieldset/useFieldset.d.ts +2 -1
  37. package/esm/form/ReadOnlyIcon.d.ts +5 -0
  38. package/esm/form/ReadOnlyIcon.js +9 -0
  39. package/esm/form/ReadOnlyIcon.js.map +1 -0
  40. package/esm/form/Select.js +23 -3
  41. package/esm/form/Select.js.map +1 -1
  42. package/esm/form/Switch.d.ts +1 -1
  43. package/esm/form/Switch.js +21 -8
  44. package/esm/form/Switch.js.map +1 -1
  45. package/esm/form/TextField.js +7 -3
  46. package/esm/form/TextField.js.map +1 -1
  47. package/esm/form/Textarea.js +7 -3
  48. package/esm/form/Textarea.js.map +1 -1
  49. package/esm/form/checkbox/Checkbox.js +7 -2
  50. package/esm/form/checkbox/Checkbox.js.map +1 -1
  51. package/esm/form/checkbox/CheckboxGroup.js +1 -1
  52. package/esm/form/checkbox/CheckboxGroup.js.map +1 -1
  53. package/esm/form/checkbox/useCheckbox.d.ts +5 -2
  54. package/esm/form/checkbox/useCheckbox.js +12 -2
  55. package/esm/form/checkbox/useCheckbox.js.map +1 -1
  56. package/esm/form/radio/Radio.d.ts +1 -1
  57. package/esm/form/radio/Radio.js +3 -2
  58. package/esm/form/radio/Radio.js.map +1 -1
  59. package/esm/form/radio/RadioGroup.js +2 -2
  60. package/esm/form/radio/RadioGroup.js.map +1 -1
  61. package/esm/form/radio/useRadio.d.ts +4 -2
  62. package/esm/form/radio/useRadio.js +12 -2
  63. package/esm/form/radio/useRadio.js.map +1 -1
  64. package/esm/form/search/Search.d.ts +1 -1
  65. package/esm/form/search/Search.js +1 -1
  66. package/esm/form/search/Search.js.map +1 -1
  67. package/esm/form/useFormField.d.ts +7 -2
  68. package/esm/form/useFormField.js +11 -9
  69. package/esm/form/useFormField.js.map +1 -1
  70. package/package.json +2 -2
  71. package/src/alert/Alert.tsx +49 -18
  72. package/src/alert/alert.stories.tsx +75 -22
  73. package/src/date/DateInput.tsx +8 -2
  74. package/src/date/datepicker/datepicker.stories.tsx +22 -0
  75. package/src/date/hooks/useDatepicker.tsx +3 -0
  76. package/src/date/hooks/useMonthPicker.tsx +3 -0
  77. package/src/date/hooks/useRangeDatepicker.tsx +3 -0
  78. package/src/form/ConfirmationPanel.tsx +1 -1
  79. package/src/form/Fieldset/Fieldset.tsx +15 -2
  80. package/src/form/ReadOnlyIcon.tsx +20 -0
  81. package/src/form/Select.tsx +28 -2
  82. package/src/form/Switch.tsx +20 -9
  83. package/src/form/TextField.tsx +5 -0
  84. package/src/form/Textarea.tsx +5 -0
  85. package/src/form/checkbox/Checkbox.tsx +7 -1
  86. package/src/form/checkbox/CheckboxGroup.tsx +1 -0
  87. package/src/form/checkbox/checkbox.stories.tsx +35 -1
  88. package/src/form/checkbox/useCheckbox.ts +13 -1
  89. package/src/form/radio/Radio.tsx +4 -3
  90. package/src/form/radio/RadioGroup.tsx +3 -0
  91. package/src/form/radio/radio.stories.tsx +27 -0
  92. package/src/form/radio/useRadio.ts +12 -1
  93. package/src/form/search/Search.tsx +2 -2
  94. package/src/form/stories/select.stories.tsx +17 -0
  95. package/src/form/stories/switch.stories.tsx +14 -0
  96. package/src/form/stories/text-field.stories.tsx +14 -0
  97. package/src/form/stories/textarea.stories.tsx +19 -0
  98. package/src/form/useFormField.ts +25 -3
@@ -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;IAEvD,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;SAC7C,CAAC;QAEF,+CACM,IAAI,CAAC,KAAK,EAAE,CAAC,UAAU,EAAE,MAAM,EAAE,aAAa,CAAC,CAAC,EAChD,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"}
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,EASC,EACD,GAAG,EACH,EAAE;;QAXF,EACE,QAAQ,EACR,SAAS,EACT,IAAI,EACJ,YAAY,EACZ,KAAK,EACL,QAAQ,GAAG,GAAG,EAAE,GAAE,CAAC,EACnB,QAAQ,OAET,EADI,IAAI,cART,kFASC,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,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;QAED,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"}
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,KAA0B,YAAY,CAC1C,IAAI,CAAC,KAAK,EAAE,CAAC,aAAa,CAAC,CAAC,EAC5B,OAAO,CACR,EAHK,EAAE,UAAU,OAGjB,EAHsB,IAAI,cAArB,cAAuB,CAG5B,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,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,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,QAAQ,EAAE,UAAU,aAAV,UAAU,uBAAV,UAAU,CAAE,QAAQ,EAC9B,IAAI,EAAE,OAAO,OAEf;AACJ,CAAC,CAAC"}
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
  };
@@ -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 hasError = !disabled && !!(error || (fieldset === null || fieldset === void 0 ? void 0 : fieldset.error));
18
- const showErrorMsg = !disabled && !!error && typeof error !== "boolean";
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
- inputProps: {
26
- id,
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;AA8BjC;;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,GAAY,CAAC,QAAQ,IAAI,CAAC,CAAC,CAAC,KAAK,KAAI,QAAQ,aAAR,QAAQ,uBAAR,QAAQ,CAAE,KAAK,CAAA,CAAC,CAAC;IACpE,MAAM,YAAY,GAAG,CAAC,QAAQ,IAAI,CAAC,CAAC,KAAK,IAAI,OAAO,KAAK,KAAK,SAAS,CAAC;IAExE,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,UAAU,EAAE;YACV,EAAE;YACF,cAAc,EAAE,QAAQ;YACxB,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;YACjB,QAAQ;SACT;KACF,CAAC;AACJ,CAAC,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.4.2",
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.4.2",
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",
@@ -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
- <div
79
- {...rest}
80
- ref={ref}
81
- className={cl(
82
- className,
83
- "navds-alert",
84
- `navds-alert--${variant}`,
85
- `navds-alert--${size}`,
86
- { "navds-alert--full-width": fullWidth, "navds-alert--inline": inline }
87
- )}
88
- >
89
- <Icon variant={variant} className="navds-alert__icon" />
90
- <BodyLong as="div" size={size} className="navds-alert__wrapper">
91
- {children}
92
- </BodyLong>
93
- </div>
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
- return (
58
- <div className="colgap">
59
- {variants.map((variant, i) => (
60
- <Alert key={variant} variant={variant} size="small">
61
- {new Array(i + 1).fill(
62
- "Id elit esse enim reprehenderit enim nisi veniam nostrud."
63
- )}
64
- </Alert>
65
- ))}
66
- </div>
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
+ };
@@ -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,
@@ -321,6 +321,9 @@ export const useRangeDatepicker = (
321
321
  };
322
322
 
323
323
  const handleFocus = (e, src: RangeT) => {
324
+ if (e.target.readOnly) {
325
+ return;
326
+ }
324
327
  !open && openOnFocus && setOpen(true);
325
328
  let day = parseDate(
326
329
  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