@navikt/ds-react 6.5.0 → 6.6.1

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 (200) hide show
  1. package/cjs/collapsible/Collapsible.context.d.ts +48 -0
  2. package/cjs/collapsible/Collapsible.context.js +10 -0
  3. package/cjs/collapsible/Collapsible.context.js.map +1 -0
  4. package/cjs/collapsible/Collapsible.d.ts +48 -0
  5. package/cjs/collapsible/Collapsible.js +91 -0
  6. package/cjs/collapsible/Collapsible.js.map +1 -0
  7. package/cjs/collapsible/Collapsible.types.d.ts +19 -0
  8. package/cjs/collapsible/Collapsible.types.js +3 -0
  9. package/cjs/collapsible/Collapsible.types.js.map +1 -0
  10. package/cjs/collapsible/index.d.ts +3 -0
  11. package/cjs/collapsible/index.js +14 -0
  12. package/cjs/collapsible/index.js.map +1 -0
  13. package/cjs/collapsible/parts/Collapsible.Content.d.ts +10 -0
  14. package/cjs/collapsible/parts/Collapsible.Content.js +48 -0
  15. package/cjs/collapsible/parts/Collapsible.Content.js.map +1 -0
  16. package/cjs/collapsible/parts/Collapsible.Trigger.d.ts +10 -0
  17. package/cjs/collapsible/parts/Collapsible.Trigger.js +49 -0
  18. package/cjs/collapsible/parts/Collapsible.Trigger.js.map +1 -0
  19. package/cjs/form/combobox/FilteredOptions/filteredOptionsContext.js +2 -4
  20. package/cjs/form/combobox/FilteredOptions/filteredOptionsContext.js.map +1 -1
  21. package/cjs/form/combobox/Input/Input.js +6 -1
  22. package/cjs/form/combobox/Input/Input.js.map +1 -1
  23. package/cjs/form/form-summary/FormSummary.d.ts +82 -0
  24. package/cjs/form/form-summary/FormSummary.js +81 -0
  25. package/cjs/form/form-summary/FormSummary.js.map +1 -0
  26. package/cjs/form/form-summary/FormSummaryAnswer.d.ts +11 -0
  27. package/cjs/form/form-summary/FormSummaryAnswer.js +25 -0
  28. package/cjs/form/form-summary/FormSummaryAnswer.js.map +1 -0
  29. package/cjs/form/form-summary/FormSummaryAnswers.d.ts +9 -0
  30. package/cjs/form/form-summary/FormSummaryAnswers.js +48 -0
  31. package/cjs/form/form-summary/FormSummaryAnswers.js.map +1 -0
  32. package/cjs/form/form-summary/FormSummaryEditLink.d.ts +17 -0
  33. package/cjs/form/form-summary/FormSummaryEditLink.js +49 -0
  34. package/cjs/form/form-summary/FormSummaryEditLink.js.map +1 -0
  35. package/cjs/form/form-summary/FormSummaryHeader.d.ts +9 -0
  36. package/cjs/form/form-summary/FormSummaryHeader.js +48 -0
  37. package/cjs/form/form-summary/FormSummaryHeader.js.map +1 -0
  38. package/cjs/form/form-summary/FormSummaryHeading.d.ts +14 -0
  39. package/cjs/form/form-summary/FormSummaryHeading.js +31 -0
  40. package/cjs/form/form-summary/FormSummaryHeading.js.map +1 -0
  41. package/cjs/form/form-summary/FormSummaryLabel.d.ts +6 -0
  42. package/cjs/form/form-summary/FormSummaryLabel.js +45 -0
  43. package/cjs/form/form-summary/FormSummaryLabel.js.map +1 -0
  44. package/cjs/form/form-summary/FormSummaryValue.d.ts +6 -0
  45. package/cjs/form/form-summary/FormSummaryValue.js +49 -0
  46. package/cjs/form/form-summary/FormSummaryValue.js.map +1 -0
  47. package/cjs/form/form-summary/index.d.ts +8 -0
  48. package/cjs/form/form-summary/index.js +24 -0
  49. package/cjs/form/form-summary/index.js.map +1 -0
  50. package/cjs/index.d.ts +3 -2
  51. package/cjs/index.js +5 -3
  52. package/cjs/index.js.map +1 -1
  53. package/cjs/layout/stack/Spacer.js +1 -1
  54. package/cjs/layout/stack/Spacer.js.map +1 -1
  55. package/cjs/util/hooks/descendants/descendant.js +10 -1
  56. package/cjs/util/hooks/descendants/descendant.js.map +1 -1
  57. package/cjs/util/hooks/descendants/useDescendant.js +0 -5
  58. package/cjs/util/hooks/descendants/useDescendant.js.map +1 -1
  59. package/esm/collapsible/Collapsible.context.d.ts +48 -0
  60. package/esm/collapsible/Collapsible.context.js +6 -0
  61. package/esm/collapsible/Collapsible.context.js.map +1 -0
  62. package/esm/collapsible/Collapsible.d.ts +48 -0
  63. package/esm/collapsible/Collapsible.js +62 -0
  64. package/esm/collapsible/Collapsible.js.map +1 -0
  65. package/esm/collapsible/Collapsible.types.d.ts +19 -0
  66. package/esm/collapsible/Collapsible.types.js +2 -0
  67. package/esm/collapsible/Collapsible.types.js.map +1 -0
  68. package/esm/collapsible/index.d.ts +3 -0
  69. package/esm/collapsible/index.js +5 -0
  70. package/esm/collapsible/index.js.map +1 -0
  71. package/esm/collapsible/parts/Collapsible.Content.d.ts +10 -0
  72. package/esm/collapsible/parts/Collapsible.Content.js +22 -0
  73. package/esm/collapsible/parts/Collapsible.Content.js.map +1 -0
  74. package/esm/collapsible/parts/Collapsible.Trigger.d.ts +10 -0
  75. package/esm/collapsible/parts/Collapsible.Trigger.js +23 -0
  76. package/esm/collapsible/parts/Collapsible.Trigger.js.map +1 -0
  77. package/esm/form/combobox/FilteredOptions/filteredOptionsContext.js +2 -4
  78. package/esm/form/combobox/FilteredOptions/filteredOptionsContext.js.map +1 -1
  79. package/esm/form/combobox/Input/Input.js +6 -1
  80. package/esm/form/combobox/Input/Input.js.map +1 -1
  81. package/esm/form/form-summary/FormSummary.d.ts +82 -0
  82. package/esm/form/form-summary/FormSummary.js +52 -0
  83. package/esm/form/form-summary/FormSummary.js.map +1 -0
  84. package/esm/form/form-summary/FormSummaryAnswer.d.ts +11 -0
  85. package/esm/form/form-summary/FormSummaryAnswer.js +19 -0
  86. package/esm/form/form-summary/FormSummaryAnswer.js.map +1 -0
  87. package/esm/form/form-summary/FormSummaryAnswers.d.ts +9 -0
  88. package/esm/form/form-summary/FormSummaryAnswers.js +19 -0
  89. package/esm/form/form-summary/FormSummaryAnswers.js.map +1 -0
  90. package/esm/form/form-summary/FormSummaryEditLink.d.ts +17 -0
  91. package/esm/form/form-summary/FormSummaryEditLink.js +20 -0
  92. package/esm/form/form-summary/FormSummaryEditLink.js.map +1 -0
  93. package/esm/form/form-summary/FormSummaryHeader.d.ts +9 -0
  94. package/esm/form/form-summary/FormSummaryHeader.js +19 -0
  95. package/esm/form/form-summary/FormSummaryHeader.js.map +1 -0
  96. package/esm/form/form-summary/FormSummaryHeading.d.ts +14 -0
  97. package/esm/form/form-summary/FormSummaryHeading.js +5 -0
  98. package/esm/form/form-summary/FormSummaryHeading.js.map +1 -0
  99. package/esm/form/form-summary/FormSummaryLabel.d.ts +6 -0
  100. package/esm/form/form-summary/FormSummaryLabel.js +19 -0
  101. package/esm/form/form-summary/FormSummaryLabel.js.map +1 -0
  102. package/esm/form/form-summary/FormSummaryValue.d.ts +6 -0
  103. package/esm/form/form-summary/FormSummaryValue.js +20 -0
  104. package/esm/form/form-summary/FormSummaryValue.js.map +1 -0
  105. package/esm/form/form-summary/index.d.ts +8 -0
  106. package/esm/form/form-summary/index.js +10 -0
  107. package/esm/form/form-summary/index.js.map +1 -0
  108. package/esm/index.d.ts +3 -2
  109. package/esm/index.js +2 -1
  110. package/esm/index.js.map +1 -1
  111. package/esm/layout/stack/Spacer.js +1 -1
  112. package/esm/layout/stack/Spacer.js.map +1 -1
  113. package/esm/util/hooks/descendants/descendant.js +10 -1
  114. package/esm/util/hooks/descendants/descendant.js.map +1 -1
  115. package/esm/util/hooks/descendants/useDescendant.js +0 -5
  116. package/esm/util/hooks/descendants/useDescendant.js.map +1 -1
  117. package/package.json +15 -4
  118. package/src/collapsible/Collapsible.context.tsx +32 -0
  119. package/src/collapsible/Collapsible.tsx +100 -0
  120. package/src/collapsible/Collapsible.types.ts +19 -0
  121. package/src/collapsible/index.ts +10 -0
  122. package/src/collapsible/parts/Collapsible.Content.tsx +39 -0
  123. package/src/collapsible/parts/Collapsible.Trigger.tsx +42 -0
  124. package/src/form/combobox/FilteredOptions/filteredOptionsContext.tsx +9 -1
  125. package/src/form/combobox/Input/Input.tsx +5 -0
  126. package/src/form/form-summary/FormSummary.tsx +106 -0
  127. package/src/form/form-summary/FormSummaryAnswer.tsx +27 -0
  128. package/src/form/form-summary/FormSummaryAnswers.tsx +25 -0
  129. package/src/form/form-summary/FormSummaryEditLink.tsx +35 -0
  130. package/src/form/form-summary/FormSummaryHeader.tsx +25 -0
  131. package/src/form/form-summary/FormSummaryHeading.tsx +23 -0
  132. package/src/form/form-summary/FormSummaryLabel.tsx +17 -0
  133. package/src/form/form-summary/FormSummaryValue.tsx +24 -0
  134. package/src/form/form-summary/index.ts +30 -0
  135. package/src/index.ts +16 -15
  136. package/src/layout/stack/Spacer.tsx +1 -1
  137. package/src/util/hooks/descendants/descendant.ts +15 -1
  138. package/src/util/hooks/descendants/useDescendant.tsx +0 -5
  139. package/src/accordion/accordion.stories.tsx +0 -286
  140. package/src/alert/alert.stories.tsx +0 -306
  141. package/src/button/button.stories.tsx +0 -185
  142. package/src/chat/chat.stories.tsx +0 -341
  143. package/src/chips/chips.stories.tsx +0 -260
  144. package/src/copybutton/copy-button.stories.tsx +0 -261
  145. package/src/date/datepicker/datepicker.stories.tsx +0 -614
  146. package/src/date/monthpicker/monthpicker.stories.tsx +0 -221
  147. package/src/dropdown/dropdown.stories.tsx +0 -124
  148. package/src/expansion-card/expansion-card.stories.tsx +0 -282
  149. package/src/form/checkbox/checkbox.stories.tsx +0 -281
  150. package/src/form/combobox/combobox.stories.tsx +0 -626
  151. package/src/form/confirmation-panel/confirmation-panel.stories.tsx +0 -128
  152. package/src/form/error-summary/error-summary.stories.tsx +0 -81
  153. package/src/form/fieldset/fieldset.stories.tsx +0 -157
  154. package/src/form/file-upload/file-upload-dropzone.stories.tsx +0 -123
  155. package/src/form/file-upload/file-upload-item.stories.tsx +0 -148
  156. package/src/form/file-upload/file-upload.stories.tsx +0 -248
  157. package/src/form/radio/radio.stories.tsx +0 -230
  158. package/src/form/search/search.stories.tsx +0 -238
  159. package/src/form/select/select.stories.tsx +0 -172
  160. package/src/form/switch/switch.stories.tsx +0 -171
  161. package/src/form/textarea/textarea.stories.tsx +0 -254
  162. package/src/form/textfield/text-field.stories.tsx +0 -143
  163. package/src/guide-panel/guidepanel.stories.tsx +0 -90
  164. package/src/help-text/help-text.stories.tsx +0 -91
  165. package/src/internal-header/header.stories.tsx +0 -229
  166. package/src/layout/bleed/Bleed.stories.tsx +0 -395
  167. package/src/layout/box/Box.stories.tsx +0 -380
  168. package/src/layout/grid/h-grid.stories.tsx +0 -122
  169. package/src/layout/page/Page.stories.tsx +0 -271
  170. package/src/layout/responsive/hide.stories.tsx +0 -80
  171. package/src/layout/responsive/show.stories.tsx +0 -80
  172. package/src/layout/sidemal-test/navno-sidemal.stories.tsx +0 -69
  173. package/src/layout/stack/stack.stories.tsx +0 -183
  174. package/src/link/stories/link.stories.tsx +0 -304
  175. package/src/link-panel/link-panel.stories.tsx +0 -59
  176. package/src/list/list.stories.tsx +0 -280
  177. package/src/loader/loader.stories.tsx +0 -82
  178. package/src/modal/modal.stories.tsx +0 -391
  179. package/src/pagination/pagination.stories.tsx +0 -110
  180. package/src/popover/popover.stories.tsx +0 -113
  181. package/src/portal/Portal.stories.tsx +0 -102
  182. package/src/read-more/readmore.stories.tsx +0 -91
  183. package/src/skeleton/skeleton.stories.tsx +0 -130
  184. package/src/stepper/stepper.stories.tsx +0 -200
  185. package/src/table/stories/table-1.stories.tsx +0 -292
  186. package/src/table/stories/table-2-expandable.stories.tsx +0 -298
  187. package/src/table/stories/table-3-async.stories.tsx +0 -179
  188. package/src/table/stories/tests/table.stories.tsx +0 -102
  189. package/src/tabs/Tabs.stories.tsx +0 -311
  190. package/src/tag/tag.stories.tsx +0 -126
  191. package/src/timeline/timeline.stories.tsx +0 -445
  192. package/src/toggle-group/ToggleGroup.stories.tsx +0 -198
  193. package/src/tooltip/tooltip.stories.tsx +0 -101
  194. package/src/typography/stories/bodylong.stories.tsx +0 -209
  195. package/src/typography/stories/bodyshort.stories.tsx +0 -208
  196. package/src/typography/stories/detail.stories.tsx +0 -115
  197. package/src/typography/stories/error-message.stories.tsx +0 -122
  198. package/src/typography/stories/heading.stories.tsx +0 -169
  199. package/src/typography/stories/label.stories.tsx +0 -131
  200. package/src/util/hooks/descendants/descendant.stories.tsx +0 -147
@@ -1,614 +0,0 @@
1
- import { Meta, StoryObj } from "@storybook/react";
2
- import { expect, userEvent, within } from "@storybook/test";
3
- import { isSameDay } from "date-fns";
4
- import React, { useId, useState } from "react";
5
- import { act } from "react-dom/test-utils";
6
- import { Button } from "../../button";
7
- import { HGrid } from "../../layout/grid";
8
- import { VStack } from "../../layout/stack";
9
- import Modal from "../../modal/Modal";
10
- import { BodyLong } from "../../typography";
11
- import { useDatepicker, useRangeDatepicker } from "../hooks";
12
- import DatePicker, { DatePickerProps } from "./DatePicker";
13
-
14
- const disabledDays = [
15
- new Date("Oct 10 2022"),
16
- { from: new Date("Aug 31 2022"), to: new Date("Sep 8 2022") },
17
- ];
18
-
19
- export default {
20
- title: "ds-react/Datepicker",
21
- component: DatePicker,
22
- parameters: {
23
- chromatic: { disable: true },
24
- },
25
- } satisfies Meta<typeof DatePicker>;
26
-
27
- type Story = StoryObj<typeof DatePicker>;
28
-
29
- type DefaultStoryProps = DatePickerProps & {
30
- size: "medium" | "small";
31
- inputfield: boolean;
32
- standalone: boolean;
33
- };
34
-
35
- export const Default: StoryObj<DefaultStoryProps> = {
36
- render: (props) => {
37
- const [open, setOpen] = useState(false);
38
-
39
- const rangeCtx = useRangeDatepicker({
40
- fromDate: new Date("Aug 23 2023"),
41
- toDate: new Date("Aug 23 2029"),
42
- });
43
-
44
- const singleCtx = useDatepicker({
45
- fromDate: new Date("Aug 23 2020"),
46
- toDate: new Date("Aug 23 2029"),
47
- });
48
-
49
- const newProps = {
50
- ...(!props.inputfield || props.mode === "multiple"
51
- ? {
52
- open,
53
- onClose: () => setOpen(false),
54
- fromDate: new Date("Aug 23 2020"),
55
- toDate: new Date("Aug 23 2029"),
56
- }
57
- : {}),
58
- };
59
-
60
- const Comp = !props.standalone ? DatePicker : DatePicker.Standalone;
61
-
62
- return (
63
- <div>
64
- <Comp
65
- dropdownCaption={props.dropdownCaption}
66
- showWeekNumber={props.showWeekNumber}
67
- mode={props.mode}
68
- {...(props.mode === "single"
69
- ? singleCtx.datepickerProps
70
- : props.mode === "range"
71
- ? rangeCtx.datepickerProps
72
- : {})}
73
- {...newProps}
74
- locale={props.locale}
75
- disableWeekends={props.disableWeekends}
76
- >
77
- {!props.standalone && (
78
- <>
79
- {props.inputfield && props.mode !== "multiple" ? (
80
- <>
81
- {props.mode === "range" ? (
82
- <div style={{ display: "flex", gap: "1rem" }}>
83
- <DatePicker.Input
84
- label="Fra"
85
- size={props?.size}
86
- {...rangeCtx.fromInputProps}
87
- />
88
- <DatePicker.Input
89
- label="Til"
90
- size={props?.size}
91
- {...rangeCtx.toInputProps}
92
- />
93
- </div>
94
- ) : (
95
- <>
96
- <DatePicker.Input
97
- label="Velg dato"
98
- size={props?.size}
99
- {...singleCtx.inputProps}
100
- />
101
- </>
102
- )}
103
- </>
104
- ) : (
105
- <Button onClick={() => setOpen((x) => !x)}>
106
- Åpne datovelger
107
- </Button>
108
- )}
109
- </>
110
- )}
111
- </Comp>
112
- </div>
113
- );
114
- },
115
-
116
- args: {
117
- dropdownCaption: false,
118
- disableWeekends: false,
119
- showWeekNumber: false,
120
- mode: "single",
121
- inputfield: true,
122
- standalone: false,
123
- },
124
- argTypes: {
125
- size: {
126
- options: ["medium", "small"],
127
- control: { type: "radio" },
128
- },
129
- locale: {
130
- options: ["nb", "nn", "en"],
131
- control: { type: "radio" },
132
- },
133
- mode: {
134
- options: ["single", "multiple", "range"],
135
- control: { type: "radio" },
136
- },
137
- },
138
- };
139
-
140
- export const DropdownCaption = () => (
141
- <DatePicker.Standalone
142
- dropdownCaption
143
- fromDate={new Date("Aug 23 2018")}
144
- toDate={new Date("Aug 23 2022")}
145
- />
146
- );
147
-
148
- export const DisabledDays = () => (
149
- <DatePicker.Standalone
150
- disabled={disabledDays}
151
- disableWeekends
152
- today={new Date("2006-07-01")}
153
- />
154
- );
155
-
156
- export const ShowWeekNumber = () => (
157
- <DatePicker.Standalone showWeekNumber today={new Date("2006-07-01")} />
158
- );
159
-
160
- export const UseDatepicker = () => {
161
- const { datepickerProps, inputProps } = useDatepicker({
162
- fromDate: new Date("Aug 23 2019"),
163
- toDate: new Date("Feb 23 2024"),
164
- onDateChange: console.log,
165
- onValidate: console.log,
166
- });
167
-
168
- return (
169
- <div style={{ display: "flex", gap: "1rem" }}>
170
- <DatePicker {...datepickerProps} dropdownCaption>
171
- <DatePicker.Input {...inputProps} label="Velg dato" />
172
- </DatePicker>
173
- </div>
174
- );
175
- };
176
-
177
- export const UseRangedDatepicker = () => {
178
- const { datepickerProps, fromInputProps, toInputProps } = useRangeDatepicker({
179
- fromDate: new Date("Aug 23 2019"),
180
- onRangeChange: console.log,
181
- onValidate: console.log,
182
- });
183
-
184
- return (
185
- <div style={{ display: "flex", gap: "1rem" }}>
186
- <DatePicker {...datepickerProps}>
187
- <div style={{ display: "flex", gap: "1rem" }}>
188
- <DatePicker.Input {...fromInputProps} label="Fra" />
189
- <DatePicker.Input {...toInputProps} label="Til" />
190
- </div>
191
- </DatePicker>
192
- </div>
193
- );
194
- };
195
-
196
- export const NB = () => (
197
- <DatePicker.Standalone locale="nb" today={new Date("2006-07-01")} />
198
- );
199
-
200
- export const NN = () => (
201
- <DatePicker.Standalone locale="nn" today={new Date("2006-07-01")} />
202
- );
203
-
204
- export const EN = () => (
205
- <DatePicker.Standalone locale="en" today={new Date("2006-07-01")} />
206
- );
207
-
208
- export const Standalone = () => (
209
- <DatePicker.Standalone today={new Date("2006-07-01")} />
210
- );
211
-
212
- export const StandaloneRange = () => (
213
- <DatePicker.Standalone mode="range" today={new Date("2006-07-01")} />
214
- );
215
-
216
- export const StandaloneMultiple = () => (
217
- <DatePicker.Standalone mode="multiple" today={new Date("2006-07-01")} />
218
- );
219
-
220
- export const UserControlled = () => {
221
- const [open, setOpen] = useState(false);
222
- const id = useId();
223
-
224
- return (
225
- <div>
226
- <DatePicker
227
- mode="multiple"
228
- open={open}
229
- onClose={() => setOpen(false)}
230
- id={id}
231
- >
232
- <Button aria-controls={id} onClick={() => setOpen((x) => !x)}>
233
- Legg til dager
234
- </Button>
235
- </DatePicker>
236
- </div>
237
- );
238
- };
239
-
240
- export const Validering = () => {
241
- const [error, setError] = useState(false);
242
- const { datepickerProps, inputProps } = useDatepicker({
243
- fromDate: new Date("Aug 2 2019"),
244
- onValidate: (val) => setError(val.isWeekend),
245
- defaultSelected: new Date("Nov 26 2022"),
246
- disableWeekends: true,
247
- onDateChange: console.log,
248
- });
249
-
250
- return (
251
- <div style={{ display: "flex", gap: "1rem" }}>
252
- <DatePicker {...datepickerProps}>
253
- <DatePicker.Input
254
- error={
255
- error
256
- ? "NAV-kontoret er ikke åpent i helger. Velg en annen dag."
257
- : undefined
258
- }
259
- {...inputProps}
260
- label="Velg dato"
261
- />
262
- </DatePicker>
263
- </div>
264
- );
265
- };
266
-
267
- export const DisabledInput = () => {
268
- return (
269
- <div style={{ display: "flex", gap: "1rem" }}>
270
- <DatePicker>
271
- <DatePicker.Input disabled label="Velg dato" />
272
- </DatePicker>
273
- </div>
274
- );
275
- };
276
-
277
- export const ErrorInput = () => {
278
- return (
279
- <div style={{ display: "flex", gap: "1rem" }}>
280
- <DatePicker>
281
- <DatePicker.Input error="feilmelding" label="Velg dato" />
282
- </DatePicker>
283
- </div>
284
- );
285
- };
286
-
287
- export const UseRangedDatepickerValidation = () => {
288
- const { datepickerProps, fromInputProps, toInputProps } = useRangeDatepicker({
289
- fromDate: new Date("Aug 23 2019"),
290
- disableWeekends: true,
291
- disabled: [new Date("Oct 10 2022")],
292
- onValidate: console.table,
293
- });
294
-
295
- return (
296
- <div style={{ display: "flex", gap: "1rem" }}>
297
- <DatePicker {...datepickerProps}>
298
- <div style={{ display: "flex", gap: "1rem" }}>
299
- <DatePicker.Input {...fromInputProps} label="Fra" />
300
- <DatePicker.Input {...toInputProps} label="Til" />
301
- </div>
302
- </DatePicker>
303
- </div>
304
- );
305
- };
306
-
307
- export const DefaultShownMonth = () => {
308
- const { datepickerProps, inputProps } = useDatepicker({
309
- fromDate: new Date("Aug 23 2019"),
310
- onDateChange: console.log,
311
- defaultMonth: new Date("Oct 23 2022"),
312
- });
313
-
314
- return (
315
- <div style={{ display: "flex", gap: "1rem" }}>
316
- <DatePicker {...datepickerProps}>
317
- <DatePicker.Input {...inputProps} label="Velg dato" />
318
- </DatePicker>
319
- </div>
320
- );
321
- };
322
-
323
- export const Size = () => {
324
- const { datepickerProps, inputProps } = useDatepicker({
325
- fromDate: new Date("Aug 23 2019"),
326
- toDate: new Date("Feb 23 2024"),
327
- onDateChange: console.log,
328
- defaultSelected: new Date("Feb 23 2023"),
329
- });
330
- const { datepickerProps: d2, inputProps: i2 } = useDatepicker({
331
- fromDate: new Date("Aug 23 2019"),
332
- toDate: new Date("Feb 23 2024"),
333
- onDateChange: console.log,
334
- defaultSelected: new Date("Feb 23 2023"),
335
- });
336
-
337
- return (
338
- <div style={{ display: "flex", gap: "1rem" }}>
339
- <DatePicker {...datepickerProps} dropdownCaption>
340
- <DatePicker.Input
341
- placeholder="10/10/2023"
342
- size="medium"
343
- {...inputProps}
344
- label="Velg dato"
345
- />
346
- </DatePicker>
347
- <DatePicker {...d2} dropdownCaption>
348
- <DatePicker.Input
349
- placeholder="10/10/2023"
350
- size="small"
351
- {...i2}
352
- label="Velg dato"
353
- />
354
- </DatePicker>
355
- </div>
356
- );
357
- };
358
-
359
- export const Readonly = () => {
360
- const { datepickerProps, inputProps } = useDatepicker({
361
- fromDate: new Date("Aug 23 2019"),
362
- toDate: new Date("Feb 23 2024"),
363
- onDateChange: console.log,
364
- });
365
-
366
- return (
367
- <div style={{ display: "flex", gap: "1rem" }}>
368
- <DatePicker {...datepickerProps} dropdownCaption>
369
- <DatePicker.Input
370
- size="medium"
371
- {...inputProps}
372
- value="01.02.2021"
373
- label="Velg dato"
374
- readOnly
375
- />
376
- </DatePicker>
377
- </div>
378
- );
379
- };
380
-
381
- export const StandaloneOptions = () => {
382
- return (
383
- <HGrid columns={{ xs: 1, md: 2 }} gap="8">
384
- <DatePicker.Standalone today={new Date("Nov 23 2022")} />
385
- <DatePicker.Standalone
386
- dropdownCaption
387
- fromDate={new Date("Aug 23 2019")}
388
- toDate={new Date("Feb 23 2024")}
389
- today={new Date("Nov 23 2022")}
390
- />
391
- <DatePicker.Standalone showWeekNumber today={new Date("Nov 23 2022")} />
392
- <DatePicker.Standalone
393
- showWeekNumber
394
- mode="multiple"
395
- onWeekNumberClick={console.log}
396
- today={new Date("Nov 23 2022")}
397
- disableWeekends
398
- />
399
- <DatePicker.Standalone
400
- mode="range"
401
- today={new Date("Nov 23 2022")}
402
- disableWeekends
403
- />
404
- </HGrid>
405
- );
406
- };
407
-
408
- export const WeekDayClick = () => {
409
- const [days, setDays] = useState<Date[]>([]);
410
-
411
- const handleWeekClick = (dates: Date[]) => {
412
- const hasDayInWeek = !!days.find((x) => dates.find((y) => isSameDay(x, y)));
413
-
414
- const cleanup = days.filter((y) => !dates.find((z) => isSameDay(y, z)));
415
- if (hasDayInWeek) {
416
- setDays(cleanup);
417
- } else {
418
- setDays([...dates, ...cleanup]);
419
- }
420
- };
421
-
422
- return (
423
- <VStack gap="8">
424
- <DatePicker.Standalone
425
- showWeekNumber
426
- mode="multiple"
427
- onWeekNumberClick={(_, dates) => handleWeekClick(dates)}
428
- onSelect={(dates) => dates && setDays(dates)}
429
- selected={days}
430
- today={new Date("Nov 23 2022")}
431
- />
432
- <DatePicker.Standalone
433
- showWeekNumber
434
- mode="multiple"
435
- onWeekNumberClick={(_, dates) => handleWeekClick(dates)}
436
- onSelect={(dates) => dates && setDays(dates)}
437
- selected={days}
438
- today={new Date("Nov 23 2022")}
439
- disableWeekends
440
- />
441
- </VStack>
442
- );
443
- };
444
-
445
- export const Required = {
446
- render: () => {
447
- const { datepickerProps } = useDatepicker({
448
- defaultSelected: new Date("Apr 10 2024"),
449
- required: true,
450
- });
451
-
452
- return (
453
- <div style={{ height: "20rem" }}>
454
- <DatePicker.Standalone {...datepickerProps} />
455
- </div>
456
- );
457
- },
458
- play: async ({ canvasElement }) => {
459
- const canvas = within(canvasElement);
460
-
461
- const button10 = canvas.getByRole("button", { pressed: true });
462
-
463
- await act(async () => {
464
- await userEvent.click(button10);
465
- });
466
-
467
- expect(button10.ariaPressed).toBe("true");
468
-
469
- const button17 = canvas.getByText("17").closest("button");
470
-
471
- expect(button17?.ariaPressed).toBe("false");
472
-
473
- await act(async () => {
474
- button17 && (await userEvent.click(button17));
475
- });
476
-
477
- expect(button17?.ariaPressed).toBe("true");
478
- expect(button10.ariaPressed).toBe("false");
479
- },
480
- };
481
-
482
- export const ModalDemo = () => {
483
- const { datepickerProps, inputProps } = useDatepicker({
484
- fromDate: new Date("Aug 23 2019"),
485
- toDate: new Date("Feb 23 2024"),
486
- onDateChange: console.log,
487
- });
488
- const [open, setOpen] = useState(true);
489
-
490
- return (
491
- <>
492
- <Button onClick={() => setOpen(!open)}>Open modal</Button>
493
- <Modal
494
- open={open}
495
- onClose={() => setOpen(false)}
496
- header={{ heading: "Modal-demo" }}
497
- >
498
- <Modal.Body style={{ position: "relative" }}>
499
- <BodyLong spacing>
500
- Lorem ipsum dolor sit, amet consectetur adipisicing elit.
501
- </BodyLong>
502
-
503
- <DatePicker {...datepickerProps} dropdownCaption>
504
- <DatePicker.Input
505
- {...inputProps}
506
- label="Velg dato"
507
- description="Format: dd.mm.yyyy"
508
- />
509
- </DatePicker>
510
- </Modal.Body>
511
- <Modal.Footer>
512
- <Button>Neste</Button>
513
- <Button variant="secondary">Tilbake</Button>
514
- <Button variant="tertiary">Avbryt</Button>
515
- </Modal.Footer>
516
- </Modal>
517
- </>
518
- );
519
- };
520
- ModalDemo.parameters = { chromatic: { pauseAnimationAtEnd: true } };
521
-
522
- export const Chromatic: Story = {
523
- render: () => (
524
- <div>
525
- <div>
526
- <h2>DropdownCaption</h2>
527
- <DropdownCaption />
528
- </div>
529
- <div>
530
- <h2>DisabledDays</h2>
531
- <DisabledDays />
532
- </div>
533
- <div>
534
- <h2>ShowWeekNumber</h2>
535
- <ShowWeekNumber />
536
- </div>
537
- <div>
538
- <h2>UseDatepicker</h2>
539
- <UseDatepicker />
540
- </div>
541
- <div>
542
- <h2>UseRangedDatepicker</h2>
543
- <UseRangedDatepicker />
544
- </div>
545
- <div>
546
- <h2>NB</h2>
547
- <NB />
548
- </div>
549
- <div>
550
- <h2>NN</h2>
551
- <NN />
552
- </div>
553
- <div>
554
- <h2>EN</h2>
555
- <EN />
556
- </div>
557
- <div>
558
- <h2>Standalone</h2>
559
- <Standalone />
560
- </div>
561
- <div>
562
- <h2>StandaloneRange</h2>
563
- <StandaloneRange />
564
- </div>
565
- <div>
566
- <h2>StandaloneMultiple</h2>
567
- <StandaloneMultiple />
568
- </div>
569
- <div>
570
- <h2>UserControlled</h2>
571
- <UserControlled />
572
- </div>
573
- <div>
574
- <h2>Validering</h2>
575
- <Validering />
576
- </div>
577
- <div>
578
- <h2>DisabledInput</h2>
579
- <DisabledInput />
580
- </div>
581
- <div>
582
- <h2>ErrorInput</h2>
583
- <ErrorInput />
584
- </div>
585
- <div>
586
- <h2>UseRangedDatepickerValidation</h2>
587
- <UseRangedDatepickerValidation />
588
- </div>
589
- <div>
590
- <h2>DefaultShownMonth</h2>
591
- <DefaultShownMonth />
592
- </div>
593
- <div>
594
- <h2>Size</h2>
595
- <Size />
596
- </div>
597
- <div>
598
- <h2>Readonly</h2>
599
- <Readonly />
600
- </div>
601
- <div>
602
- <h2>StandaloneOptions</h2>
603
- <StandaloneOptions />
604
- </div>
605
- <div>
606
- <h2>WeekDayClick</h2>
607
- <WeekDayClick />
608
- </div>
609
- </div>
610
- ),
611
- parameters: {
612
- chromatic: { disable: false },
613
- },
614
- };