@navikt/ds-react 2.1.5 → 2.1.7

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 (177) hide show
  1. package/README.md +4 -5
  2. package/_docs.json +356 -293
  3. package/cjs/accordion/AccordionContent.js +2 -2
  4. package/cjs/accordion/AccordionHeader.js +2 -2
  5. package/cjs/alert/Alert.js +2 -2
  6. package/cjs/chat/Chat.js +3 -3
  7. package/cjs/date/hooks/useDatepicker.js +2 -2
  8. package/cjs/date/hooks/useMonthPicker.js +2 -2
  9. package/cjs/date/hooks/useRangeDatepicker.js +3 -3
  10. package/esm/accordion/AccordionContent.js +1 -1
  11. package/esm/accordion/AccordionContent.js.map +1 -1
  12. package/esm/accordion/AccordionHeader.js +1 -1
  13. package/esm/accordion/AccordionHeader.js.map +1 -1
  14. package/esm/accordion/index.d.ts +1 -1
  15. package/esm/accordion/index.js.map +1 -1
  16. package/esm/alert/Alert.js +1 -1
  17. package/esm/alert/Alert.js.map +1 -1
  18. package/esm/alert/index.d.ts +1 -1
  19. package/esm/button/index.d.ts +1 -1
  20. package/esm/chat/Chat.js +1 -1
  21. package/esm/chat/Chat.js.map +1 -1
  22. package/esm/chat/index.d.ts +1 -1
  23. package/esm/chat/index.js.map +1 -1
  24. package/esm/chips/Removable.d.ts +1 -1
  25. package/esm/chips/Toggle.d.ts +1 -1
  26. package/esm/chips/index.d.ts +1 -1
  27. package/esm/chips/index.js.map +1 -1
  28. package/esm/date/hooks/useDatepicker.d.ts +5 -0
  29. package/esm/date/hooks/useDatepicker.js +2 -2
  30. package/esm/date/hooks/useDatepicker.js.map +1 -1
  31. package/esm/date/hooks/useMonthPicker.d.ts +5 -0
  32. package/esm/date/hooks/useMonthPicker.js +2 -2
  33. package/esm/date/hooks/useMonthPicker.js.map +1 -1
  34. package/esm/date/hooks/useRangeDatepicker.js +3 -3
  35. package/esm/date/hooks/useRangeDatepicker.js.map +1 -1
  36. package/esm/date/index.d.ts +6 -6
  37. package/esm/date/utils/index.d.ts +1 -1
  38. package/esm/date/utils/index.js.map +1 -1
  39. package/esm/form/Fieldset/index.d.ts +1 -1
  40. package/esm/form/checkbox/index.d.ts +2 -2
  41. package/esm/form/checkbox/index.js +1 -1
  42. package/esm/form/checkbox/index.js.map +1 -1
  43. package/esm/form/error-summary/index.d.ts +1 -1
  44. package/esm/form/index.d.ts +10 -10
  45. package/esm/form/index.js +1 -1
  46. package/esm/form/index.js.map +1 -1
  47. package/esm/form/radio/index.d.ts +2 -2
  48. package/esm/form/radio/index.js.map +1 -1
  49. package/esm/form/search/index.d.ts +1 -1
  50. package/esm/form/search/index.js +1 -1
  51. package/esm/form/search/index.js.map +1 -1
  52. package/esm/grid/index.d.ts +3 -3
  53. package/esm/grid/index.js.map +1 -1
  54. package/esm/guide-panel/index.d.ts +2 -2
  55. package/esm/guide-panel/index.js.map +1 -1
  56. package/esm/help-text/index.d.ts +1 -1
  57. package/esm/link/Link.d.ts +1 -1
  58. package/esm/link/index.d.ts +1 -1
  59. package/esm/link-panel/LinkPanelTitle.d.ts +1 -1
  60. package/esm/link-panel/index.d.ts +1 -1
  61. package/esm/loader/index.d.ts +1 -1
  62. package/esm/modal/index.d.ts +2 -2
  63. package/esm/modal/index.js.map +1 -1
  64. package/esm/pagination/index.d.ts +1 -1
  65. package/esm/pagination/index.js.map +1 -1
  66. package/esm/panel/Panel.d.ts +1 -1
  67. package/esm/panel/index.d.ts +1 -1
  68. package/esm/popover/index.d.ts +2 -2
  69. package/esm/popover/index.js.map +1 -1
  70. package/esm/read-more/index.d.ts +1 -1
  71. package/esm/stepper/index.d.ts +1 -1
  72. package/esm/stepper/index.js.map +1 -1
  73. package/esm/table/index.d.ts +8 -8
  74. package/esm/table/index.js.map +1 -1
  75. package/esm/tabs/index.d.ts +4 -4
  76. package/esm/tabs/index.js.map +1 -1
  77. package/esm/tag/index.d.ts +1 -1
  78. package/esm/tag/index.js.map +1 -1
  79. package/esm/toggle-group/index.d.ts +2 -2
  80. package/esm/toggle-group/index.js.map +1 -1
  81. package/esm/tooltip/index.d.ts +1 -1
  82. package/esm/tooltip/index.js.map +1 -1
  83. package/esm/typography/BodyLong.d.ts +1 -1
  84. package/esm/typography/BodyShort.d.ts +1 -1
  85. package/esm/typography/Detail.d.ts +1 -1
  86. package/esm/typography/ErrorMessage.d.ts +1 -1
  87. package/esm/typography/Heading.d.ts +1 -1
  88. package/esm/typography/Ingress.d.ts +1 -1
  89. package/esm/typography/Label.d.ts +1 -1
  90. package/esm/typography/index.d.ts +7 -7
  91. package/esm/typography/index.js +1 -1
  92. package/esm/typography/index.js.map +1 -1
  93. package/package.json +3 -3
  94. package/src/accordion/AccordionContent.tsx +1 -1
  95. package/src/accordion/AccordionHeader.tsx +1 -1
  96. package/src/accordion/accordion.stories.tsx +16 -14
  97. package/src/accordion/index.ts +1 -1
  98. package/src/alert/Alert.tsx +1 -1
  99. package/src/alert/alert.stories.tsx +35 -27
  100. package/src/alert/index.ts +1 -1
  101. package/src/button/button.stories.tsx +95 -83
  102. package/src/button/index.ts +1 -1
  103. package/src/chat/Chat.tsx +1 -1
  104. package/src/chat/chat.stories.tsx +27 -25
  105. package/src/chat/index.ts +1 -1
  106. package/src/chips/Removable.tsx +1 -1
  107. package/src/chips/Toggle.tsx +1 -1
  108. package/src/chips/chips.stories.tsx +32 -29
  109. package/src/chips/index.ts +1 -1
  110. package/src/date/datepicker/datepicker.stories.tsx +103 -81
  111. package/src/date/hooks/useDatepicker.tsx +7 -1
  112. package/src/date/hooks/useMonthPicker.tsx +7 -1
  113. package/src/date/hooks/useRangeDatepicker.tsx +3 -2
  114. package/src/date/index.ts +8 -8
  115. package/src/date/monthpicker/monthpicker.stories.tsx +13 -11
  116. package/src/date/utils/index.ts +1 -1
  117. package/src/form/Fieldset/index.ts +1 -1
  118. package/src/form/checkbox/checkbox.stories.tsx +66 -61
  119. package/src/form/checkbox/index.ts +5 -2
  120. package/src/form/error-summary/error-summary.stories.tsx +16 -14
  121. package/src/form/error-summary/index.ts +1 -1
  122. package/src/form/index.ts +16 -11
  123. package/src/form/radio/index.ts +2 -2
  124. package/src/form/radio/radio.stories.tsx +39 -34
  125. package/src/form/search/index.ts +5 -1
  126. package/src/form/search/search.stories.tsx +26 -23
  127. package/src/form/stories/confirmation-panel.stories.tsx +19 -17
  128. package/src/form/stories/fieldset.stories.tsx +13 -11
  129. package/src/form/stories/select.stories.tsx +12 -10
  130. package/src/form/stories/switch.stories.tsx +9 -7
  131. package/src/form/stories/text-field.stories.tsx +8 -6
  132. package/src/form/stories/textarea.stories.tsx +16 -14
  133. package/src/grid/index.ts +3 -3
  134. package/src/guide-panel/guidepanel.stories.tsx +21 -19
  135. package/src/guide-panel/index.ts +2 -2
  136. package/src/help-text/help-text.stories.tsx +11 -9
  137. package/src/help-text/index.ts +1 -1
  138. package/src/link/Link.tsx +1 -1
  139. package/src/link/index.ts +1 -1
  140. package/src/link/link.stories.tsx +24 -22
  141. package/src/link-panel/LinkPanelTitle.tsx +1 -1
  142. package/src/link-panel/index.ts +1 -1
  143. package/src/link-panel/link-panel.stories.tsx +19 -17
  144. package/src/loader/index.ts +1 -1
  145. package/src/loader/loader.stories.tsx +8 -6
  146. package/src/modal/index.ts +2 -2
  147. package/src/modal/modal.stories.tsx +35 -30
  148. package/src/pagination/index.ts +1 -1
  149. package/src/pagination/pagination.stories.tsx +41 -36
  150. package/src/panel/Panel.tsx +1 -1
  151. package/src/panel/index.ts +1 -1
  152. package/src/panel/panel.stories.tsx +17 -15
  153. package/src/popover/index.ts +2 -2
  154. package/src/popover/popover.stories.tsx +25 -19
  155. package/src/read-more/index.ts +1 -1
  156. package/src/read-more/readmore.stories.tsx +20 -17
  157. package/src/stepper/index.ts +1 -1
  158. package/src/stepper/stepper.stories.tsx +44 -41
  159. package/src/table/index.ts +8 -8
  160. package/src/tabs/Tabs.stories.tsx +24 -22
  161. package/src/tabs/index.ts +4 -4
  162. package/src/tag/index.ts +1 -1
  163. package/src/tag/tag.stories.tsx +9 -7
  164. package/src/toggle-group/ToggleGroup.stories.tsx +21 -18
  165. package/src/toggle-group/index.ts +2 -2
  166. package/src/tooltip/index.ts +1 -1
  167. package/src/tooltip/tooltip.stories.tsx +22 -20
  168. package/src/typography/BodyLong.tsx +1 -1
  169. package/src/typography/BodyShort.tsx +1 -1
  170. package/src/typography/Detail.tsx +1 -1
  171. package/src/typography/ErrorMessage.tsx +1 -1
  172. package/src/typography/Heading.tsx +1 -1
  173. package/src/typography/Ingress.tsx +1 -1
  174. package/src/typography/Label.tsx +1 -1
  175. package/src/typography/heading.stories.tsx +5 -3
  176. package/src/typography/index.ts +10 -7
  177. package/src/typography/typography.stories.tsx +0 -44
@@ -8,6 +8,45 @@ export default {
8
8
  parameters: {
9
9
  chromatic: { delay: 600 },
10
10
  },
11
+ };
12
+
13
+ const variants: Array<"primary" | "secondary" | "tertiary" | "danger"> = [
14
+ "primary",
15
+ "secondary",
16
+ "tertiary",
17
+ "danger",
18
+ ];
19
+
20
+ const varSwitch = {
21
+ primary: "Primary",
22
+ secondary: "Secondary",
23
+ tertiary: "Tertiary",
24
+ danger: "Danger",
25
+ };
26
+
27
+ export const Default = {
28
+ render: (props) => {
29
+ return (
30
+ <Button
31
+ variant={props.variant}
32
+ size={props.size}
33
+ loading={props.loading}
34
+ icon={props.icon ? <Star /> : undefined}
35
+ iconPosition={props.iconPosition}
36
+ >
37
+ {props.children}
38
+ </Button>
39
+ );
40
+ },
41
+
42
+ args: {
43
+ icon: false,
44
+ loading: false,
45
+ iconPosition: "left",
46
+ children: "Knapp",
47
+ variant: "primary",
48
+ size: "medium",
49
+ },
11
50
  argTypes: {
12
51
  variant: {
13
52
  control: {
@@ -30,41 +69,6 @@ export default {
30
69
  },
31
70
  };
32
71
 
33
- const variants: Array<"primary" | "secondary" | "tertiary" | "danger"> = [
34
- "primary",
35
- "secondary",
36
- "tertiary",
37
- "danger",
38
- ];
39
-
40
- const varSwitch = {
41
- primary: "Primary",
42
- secondary: "Secondary",
43
- tertiary: "Tertiary",
44
- danger: "Danger",
45
- };
46
-
47
- export const Default = (props) => {
48
- return (
49
- <Button
50
- variant={props.variant}
51
- size={props.size}
52
- loading={props.loading}
53
- icon={props.icon ? <Star /> : undefined}
54
- iconPosition={props.iconPosition}
55
- >
56
- {props.children}
57
- </Button>
58
- );
59
- };
60
-
61
- Default.args = {
62
- icon: false,
63
- loading: false,
64
- iconPosition: "left",
65
- children: "Knapp",
66
- };
67
-
68
72
  export const Small = () => (
69
73
  <div className="rowgap">
70
74
  {variants.map((variant) => (
@@ -95,31 +99,35 @@ export const Link = () => (
95
99
  </div>
96
100
  );
97
101
 
98
- export const Loading = () => (
99
- <div className="colgap">
100
- <div className="rowgap">
101
- {variants.map((variant) => (
102
- <Button key={variant} variant={variant} loading>
103
- {varSwitch[variant]}
104
- </Button>
105
- ))}
106
- </div>
107
- <div className="rowgap">
108
- {variants.map((variant) => (
109
- <Button key={variant} variant={variant} loading size="small">
110
- {varSwitch[variant]}
111
- </Button>
112
- ))}
113
- </div>
114
- <div className="rowgap">
115
- {variants.map((variant) => (
116
- <Button key={variant} variant={variant} loading size="xsmall">
117
- {varSwitch[variant]}
118
- </Button>
119
- ))}
102
+ export const Loading = {
103
+ render: () => (
104
+ <div className="colgap">
105
+ <div className="rowgap">
106
+ {variants.map((variant) => (
107
+ <Button key={variant} variant={variant} loading>
108
+ {varSwitch[variant]}
109
+ </Button>
110
+ ))}
111
+ </div>
112
+ <div className="rowgap">
113
+ {variants.map((variant) => (
114
+ <Button key={variant} variant={variant} loading size="small">
115
+ {varSwitch[variant]}
116
+ </Button>
117
+ ))}
118
+ </div>
119
+ <div className="rowgap">
120
+ {variants.map((variant) => (
121
+ <Button key={variant} variant={variant} loading size="xsmall">
122
+ {varSwitch[variant]}
123
+ </Button>
124
+ ))}
125
+ </div>
120
126
  </div>
121
- </div>
122
- );
127
+ ),
128
+
129
+ args: { chromatic: { delay: 300 } },
130
+ };
123
131
 
124
132
  export const Icon = () => (
125
133
  <div className="colgap">
@@ -217,28 +225,32 @@ export const Disabled = () => (
217
225
  </div>
218
226
  );
219
227
 
220
- export const LoadingWithAs = () => (
221
- <div className="colgap">
222
- <div className="rowgap">
223
- {variants.map((variant) => (
224
- <Button key={variant} variant={variant} loading size="small">
225
- {varSwitch[variant]}
226
- </Button>
227
- ))}
228
- </div>
229
- <div className="rowgap">
230
- {variants.map((variant) => (
231
- <Button
232
- key={variant}
233
- variant={variant}
234
- loading
235
- size="small"
236
- as="a"
237
- href="#"
238
- >
239
- {varSwitch[variant]}
240
- </Button>
241
- ))}
228
+ export const LoadingWithAs = {
229
+ render: () => (
230
+ <div className="colgap">
231
+ <div className="rowgap">
232
+ {variants.map((variant) => (
233
+ <Button key={variant} variant={variant} loading size="small">
234
+ {varSwitch[variant]}
235
+ </Button>
236
+ ))}
237
+ </div>
238
+ <div className="rowgap">
239
+ {variants.map((variant) => (
240
+ <Button
241
+ key={variant}
242
+ variant={variant}
243
+ loading
244
+ size="small"
245
+ as="a"
246
+ href="#"
247
+ >
248
+ {varSwitch[variant]}
249
+ </Button>
250
+ ))}
251
+ </div>
242
252
  </div>
243
- </div>
244
- );
253
+ ),
254
+
255
+ args: { chromatic: { delay: 300 } },
256
+ };
@@ -1,2 +1,2 @@
1
1
  export { default as Button } from "./Button";
2
- export { ButtonProps } from "./Button";
2
+ export { type ButtonProps } from "./Button";
package/src/chat/Chat.tsx CHANGED
@@ -1,7 +1,7 @@
1
1
  import React, { forwardRef, HTMLAttributes } from "react";
2
2
  import cl from "clsx";
3
3
  import Bubble, { BubbleType } from "./Bubble";
4
- import { BodyLong, BodyShort } from "..";
4
+ import { BodyLong, BodyShort } from "../typography";
5
5
 
6
6
  export interface ChatProps extends HTMLAttributes<HTMLDivElement> {
7
7
  /**
@@ -1,6 +1,6 @@
1
1
  import React from "react";
2
2
  import { Chat } from "../index";
3
- import { Meta } from "@storybook/react/types-6-0";
3
+ import { Meta } from "@storybook/react";
4
4
 
5
5
  export default {
6
6
  title: "ds-react/Chat",
@@ -19,31 +19,33 @@ export default {
19
19
  },
20
20
  } as Meta;
21
21
 
22
- export const Default = (props) => {
23
- return (
24
- <Chat
25
- avatar={props?.avatar ?? "ON"}
26
- name={props?.name ?? "Ola Normann"}
27
- timestamp={props?.timestamp ?? "01.01.21 14:00"}
28
- avatarBgColor={props?.avatarBgColor}
29
- backgroundColor={props?.backgroundColor}
30
- >
31
- <Chat.Bubble>
32
- Aute minim nisi sunt mollit duis sunt nulla minim non proident.
33
- </Chat.Bubble>
34
- <Chat.Bubble>Tempor fugiat amet eu sint in in ullamco.</Chat.Bubble>
35
- <Chat.Bubble>
36
- Adipisicing laborum est eu laborum est sit in commodo enim sint laboris
37
- labore nisi ut.
38
- </Chat.Bubble>
39
- </Chat>
40
- );
41
- };
22
+ export const Default = {
23
+ render: (props) => {
24
+ return (
25
+ <Chat
26
+ avatar={props?.avatar ?? "ON"}
27
+ name={props?.name ?? "Ola Normann"}
28
+ timestamp={props?.timestamp ?? "01.01.21 14:00"}
29
+ avatarBgColor={props?.avatarBgColor}
30
+ backgroundColor={props?.backgroundColor}
31
+ >
32
+ <Chat.Bubble>
33
+ Aute minim nisi sunt mollit duis sunt nulla minim non proident.
34
+ </Chat.Bubble>
35
+ <Chat.Bubble>Tempor fugiat amet eu sint in in ullamco.</Chat.Bubble>
36
+ <Chat.Bubble>
37
+ Adipisicing laborum est eu laborum est sit in commodo enim sint
38
+ laboris labore nisi ut.
39
+ </Chat.Bubble>
40
+ </Chat>
41
+ );
42
+ },
42
43
 
43
- Default.args = {
44
- name: "Ola Normann",
45
- timestamp: "01.01.21 14:00",
46
- avatar: "ON",
44
+ args: {
45
+ name: "Ola Normann",
46
+ timestamp: "01.01.21 14:00",
47
+ avatar: "ON",
48
+ },
47
49
  };
48
50
 
49
51
  export const Farger = () => {
package/src/chat/index.ts CHANGED
@@ -1 +1 @@
1
- export { default as Chat, ChatProps } from "./Chat";
1
+ export { default as Chat, type ChatProps } from "./Chat";
@@ -1,7 +1,7 @@
1
1
  import { Close } from "@navikt/ds-icons";
2
2
  import cl from "clsx";
3
3
  import React, { forwardRef } from "react";
4
- import { OverridableComponent } from "..";
4
+ import { OverridableComponent } from "../util/OverridableComponent";
5
5
 
6
6
  export interface RemovableChipsProps
7
7
  extends React.ButtonHTMLAttributes<HTMLButtonElement> {
@@ -1,7 +1,7 @@
1
1
  import { SuccessStroke } from "@navikt/ds-icons";
2
2
  import cl from "clsx";
3
3
  import React, { forwardRef } from "react";
4
- import { OverridableComponent } from "..";
4
+ import { OverridableComponent } from "../util/OverridableComponent";
5
5
 
6
6
  export interface ToggleChipsProps
7
7
  extends React.ButtonHTMLAttributes<HTMLButtonElement> {
@@ -1,3 +1,4 @@
1
+ /* eslint-disable react-hooks/rules-of-hooks */
1
2
  import React, { useState } from "react";
2
3
  import { Chips } from ".";
3
4
 
@@ -22,44 +23,46 @@ export default {
22
23
 
23
24
  const options = ["Norsk", "Dansk", "Svensk", "Tysk", "Spansk"];
24
25
 
25
- export const Default = (props) => {
26
- const [selected, setSelected] = useState(["Dansk", "Svensk"]);
27
- const [filter, setFilter] = useState(options);
26
+ export const Default = {
27
+ render: (props) => {
28
+ const [selected, setSelected] = useState(["Dansk", "Svensk"]);
29
+ const [filter, setFilter] = useState(options);
30
+
31
+ if (props.type === "toggle") {
32
+ return (
33
+ <Chips size={props.size ?? "medium"}>
34
+ {options.map((c) => (
35
+ <Chips.Toggle
36
+ selected={selected.includes(c)}
37
+ key={c}
38
+ onClick={() =>
39
+ setSelected(
40
+ selected.includes(c)
41
+ ? selected.filter((x) => x !== c)
42
+ : [...selected, c]
43
+ )
44
+ }
45
+ >
46
+ {c}
47
+ </Chips.Toggle>
48
+ ))}
49
+ </Chips>
50
+ );
51
+ }
28
52
 
29
- if (props.type === "toggle") {
30
53
  return (
31
54
  <Chips size={props.size ?? "medium"}>
32
- {options.map((c) => (
33
- <Chips.Toggle
34
- selected={selected.includes(c)}
55
+ {filter.map((c) => (
56
+ <Chips.Removable
35
57
  key={c}
36
- onClick={() =>
37
- setSelected(
38
- selected.includes(c)
39
- ? selected.filter((x) => x !== c)
40
- : [...selected, c]
41
- )
42
- }
58
+ onClick={() => setFilter((x) => x.filter((y) => y !== c))}
43
59
  >
44
60
  {c}
45
- </Chips.Toggle>
61
+ </Chips.Removable>
46
62
  ))}
47
63
  </Chips>
48
64
  );
49
- }
50
-
51
- return (
52
- <Chips size={props.size ?? "medium"}>
53
- {filter.map((c) => (
54
- <Chips.Removable
55
- key={c}
56
- onClick={() => setFilter((x) => x.filter((y) => y !== c))}
57
- >
58
- {c}
59
- </Chips.Removable>
60
- ))}
61
- </Chips>
62
- );
65
+ },
63
66
  };
64
67
 
65
68
  export const Toggle = () => {
@@ -1 +1 @@
1
- export { default as Chips, ChipsProps } from "./Chips";
1
+ export { default as Chips, type ChipsProps } from "./Chips";
@@ -1,3 +1,4 @@
1
+ /* eslint-disable react-hooks/rules-of-hooks */
1
2
  import React, { useId, useState } from "react";
2
3
  import { UNSAFE_useDatepicker, UNSAFE_useRangeDatepicker } from "..";
3
4
  import { Button } from "../..";
@@ -34,93 +35,95 @@ export default {
34
35
  },
35
36
  };
36
37
 
37
- export const Default = (props) => {
38
- const [open, setOpen] = useState(false);
38
+ export const Default = {
39
+ render: (props) => {
40
+ const [open, setOpen] = useState(false);
39
41
 
40
- const rangeCtx = UNSAFE_useRangeDatepicker({
41
- fromDate: new Date("Aug 23 2020"),
42
- toDate: new Date("Aug 23 2023"),
43
- });
42
+ const rangeCtx = UNSAFE_useRangeDatepicker({
43
+ fromDate: new Date("Aug 23 2020"),
44
+ toDate: new Date("Aug 23 2023"),
45
+ });
44
46
 
45
- const singleCtx = UNSAFE_useDatepicker({
46
- fromDate: new Date("Aug 23 2020"),
47
- toDate: new Date("Aug 23 2023"),
48
- });
47
+ const singleCtx = UNSAFE_useDatepicker({
48
+ fromDate: new Date("Aug 23 2020"),
49
+ toDate: new Date("Aug 23 2023"),
50
+ });
49
51
 
50
- const newProps = {
51
- ...(!props.inputfield || props.mode === "multiple"
52
- ? {
53
- open,
54
- onClose: () => setOpen(false),
55
- fromDate: new Date("Aug 23 2020"),
56
- toDate: new Date("Aug 23 2023"),
57
- }
58
- : {}),
59
- };
52
+ const newProps = {
53
+ ...(!props.inputfield || props.mode === "multiple"
54
+ ? {
55
+ open,
56
+ onClose: () => setOpen(false),
57
+ fromDate: new Date("Aug 23 2020"),
58
+ toDate: new Date("Aug 23 2023"),
59
+ }
60
+ : {}),
61
+ };
60
62
 
61
- const Comp = !props.standalone ? DatePicker : DatePicker.Standalone;
63
+ const Comp = !props.standalone ? DatePicker : DatePicker.Standalone;
62
64
 
63
- return (
64
- <div>
65
- <Comp
66
- locale={props?.locale}
67
- dropdownCaption={props?.dropdownCaption}
68
- disableWeekends={props?.disableWeekends}
69
- showWeekNumber={props.showWeekNumber}
70
- mode={props.mode}
71
- {...(props.mode === "single"
72
- ? singleCtx.datepickerProps
73
- : props.mode === "range"
74
- ? rangeCtx.datepickerProps
75
- : {})}
76
- {...newProps}
77
- >
78
- {!props.standalone && (
79
- <>
80
- {props.inputfield && props.mode !== "multiple" ? (
81
- <>
82
- {props.mode === "range" ? (
83
- <div style={{ display: "flex", gap: "1rem" }}>
84
- <DatePicker.Input
85
- label="Fra"
86
- size={props?.size}
87
- {...rangeCtx.fromInputProps}
88
- />
89
- <DatePicker.Input
90
- label="Til"
91
- size={props?.size}
92
- {...rangeCtx.toInputProps}
93
- />
94
- </div>
95
- ) : (
96
- <>
97
- <DatePicker.Input
98
- label="Velg dato"
99
- size={props?.size}
100
- {...singleCtx.inputProps}
101
- />
102
- </>
103
- )}
104
- </>
105
- ) : (
106
- <Button onClick={() => setOpen((x) => !x)}>
107
- Åpne datovelger
108
- </Button>
109
- )}
110
- </>
111
- )}
112
- </Comp>
113
- </div>
114
- );
115
- };
65
+ return (
66
+ <div>
67
+ <Comp
68
+ locale={props?.locale}
69
+ dropdownCaption={props?.dropdownCaption}
70
+ disableWeekends={props?.disableWeekends}
71
+ showWeekNumber={props.showWeekNumber}
72
+ mode={props.mode}
73
+ {...(props.mode === "single"
74
+ ? singleCtx.datepickerProps
75
+ : props.mode === "range"
76
+ ? rangeCtx.datepickerProps
77
+ : {})}
78
+ {...newProps}
79
+ >
80
+ {!props.standalone && (
81
+ <>
82
+ {props.inputfield && props.mode !== "multiple" ? (
83
+ <>
84
+ {props.mode === "range" ? (
85
+ <div style={{ display: "flex", gap: "1rem" }}>
86
+ <DatePicker.Input
87
+ label="Fra"
88
+ size={props?.size}
89
+ {...rangeCtx.fromInputProps}
90
+ />
91
+ <DatePicker.Input
92
+ label="Til"
93
+ size={props?.size}
94
+ {...rangeCtx.toInputProps}
95
+ />
96
+ </div>
97
+ ) : (
98
+ <>
99
+ <DatePicker.Input
100
+ label="Velg dato"
101
+ size={props?.size}
102
+ {...singleCtx.inputProps}
103
+ />
104
+ </>
105
+ )}
106
+ </>
107
+ ) : (
108
+ <Button onClick={() => setOpen((x) => !x)}>
109
+ Åpne datovelger
110
+ </Button>
111
+ )}
112
+ </>
113
+ )}
114
+ </Comp>
115
+ </div>
116
+ );
117
+ },
116
118
 
117
- Default.args = {
118
- dropdownCaption: false,
119
- disableWeekends: false,
120
- showWeekNumber: false,
121
- inputfield: true,
122
- standalone: false,
123
- openOnFocus: true,
119
+ args: {
120
+ dropdownCaption: false,
121
+ disableWeekends: false,
122
+ showWeekNumber: false,
123
+ inputfield: true,
124
+ standalone: false,
125
+ openOnFocus: true,
126
+ },
124
127
  };
125
128
 
126
129
  export const DropdownCaption = () => (
@@ -148,6 +151,7 @@ export const UseDatepicker = () => {
148
151
  fromDate: new Date("Aug 23 2019"),
149
152
  onDateChange: console.log,
150
153
  locale: "en",
154
+ openOnFocus: false,
151
155
  });
152
156
 
153
157
  return (
@@ -179,12 +183,29 @@ export const UseRangedDatepicker = () => {
179
183
  );
180
184
  };
181
185
 
186
+ export const OpenOnFocus = () => {
187
+ const { datepickerProps, inputProps } = UNSAFE_useDatepicker({
188
+ onDateChange: console.log,
189
+ openOnFocus: false,
190
+ });
191
+
192
+ return (
193
+ <div style={{ display: "flex", gap: "1rem" }}>
194
+ <DatePicker {...datepickerProps}>
195
+ <DatePicker.Input {...inputProps} label="Velg dato" />
196
+ </DatePicker>
197
+ </div>
198
+ );
199
+ };
200
+
182
201
  export const NB = () => (
183
202
  <DatePicker.Standalone locale="nb" today={new Date("2006-07-01")} />
184
203
  );
204
+
185
205
  export const NN = () => (
186
206
  <DatePicker.Standalone locale="nn" today={new Date("2006-07-01")} />
187
207
  );
208
+
188
209
  export const EN = () => (
189
210
  <DatePicker.Standalone locale="en" today={new Date("2006-07-01")} />
190
211
  );
@@ -196,6 +217,7 @@ export const Standalone = () => (
196
217
  export const StandaloneRange = () => (
197
218
  <DatePicker.Standalone mode="range" today={new Date("2006-07-01")} />
198
219
  );
220
+
199
221
  export const StandaloneMultiple = () => (
200
222
  <DatePicker.Standalone mode="multiple" today={new Date("2006-07-01")} />
201
223
  );
@@ -56,6 +56,11 @@ export interface UseDatepickerOptions
56
56
  * In 2023 this equals to 1943 - 2042
57
57
  */
58
58
  allowTwoDigitYear?: boolean;
59
+ /**
60
+ * Opens datepicker on input-focus
61
+ * @default true
62
+ */
63
+ openOnFocus?: boolean;
59
64
  }
60
65
 
61
66
  interface UseDatepickerValue {
@@ -123,6 +128,7 @@ export const useDatepicker = (
123
128
  onValidate,
124
129
  defaultMonth,
125
130
  allowTwoDigitYear = true,
131
+ openOnFocus = true,
126
132
  } = opt;
127
133
 
128
134
  const locale = getLocaleFromString(_locale);
@@ -198,7 +204,7 @@ export const useDatepicker = (
198
204
  };
199
205
 
200
206
  const handleFocus: React.FocusEventHandler<HTMLInputElement> = (e) => {
201
- !open && setOpen(true);
207
+ !open && openOnFocus && setOpen(true);
202
208
  let day = parseDate(
203
209
  e.target.value,
204
210
  today,