@navikt/ds-react 6.5.0 → 6.6.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/cjs/form/combobox/FilteredOptions/filteredOptionsContext.js +2 -4
- package/cjs/form/combobox/FilteredOptions/filteredOptionsContext.js.map +1 -1
- package/cjs/form/combobox/Input/Input.js +6 -1
- package/cjs/form/combobox/Input/Input.js.map +1 -1
- package/cjs/form/form-summary/FormSummary.d.ts +82 -0
- package/cjs/form/form-summary/FormSummary.js +81 -0
- package/cjs/form/form-summary/FormSummary.js.map +1 -0
- package/cjs/form/form-summary/FormSummaryAnswer.d.ts +11 -0
- package/cjs/form/form-summary/FormSummaryAnswer.js +25 -0
- package/cjs/form/form-summary/FormSummaryAnswer.js.map +1 -0
- package/cjs/form/form-summary/FormSummaryAnswers.d.ts +9 -0
- package/cjs/form/form-summary/FormSummaryAnswers.js +48 -0
- package/cjs/form/form-summary/FormSummaryAnswers.js.map +1 -0
- package/cjs/form/form-summary/FormSummaryEditLink.d.ts +17 -0
- package/cjs/form/form-summary/FormSummaryEditLink.js +49 -0
- package/cjs/form/form-summary/FormSummaryEditLink.js.map +1 -0
- package/cjs/form/form-summary/FormSummaryHeader.d.ts +9 -0
- package/cjs/form/form-summary/FormSummaryHeader.js +48 -0
- package/cjs/form/form-summary/FormSummaryHeader.js.map +1 -0
- package/cjs/form/form-summary/FormSummaryHeading.d.ts +14 -0
- package/cjs/form/form-summary/FormSummaryHeading.js +31 -0
- package/cjs/form/form-summary/FormSummaryHeading.js.map +1 -0
- package/cjs/form/form-summary/FormSummaryLabel.d.ts +6 -0
- package/cjs/form/form-summary/FormSummaryLabel.js +45 -0
- package/cjs/form/form-summary/FormSummaryLabel.js.map +1 -0
- package/cjs/form/form-summary/FormSummaryValue.d.ts +6 -0
- package/cjs/form/form-summary/FormSummaryValue.js +49 -0
- package/cjs/form/form-summary/FormSummaryValue.js.map +1 -0
- package/cjs/form/form-summary/index.d.ts +8 -0
- package/cjs/form/form-summary/index.js +24 -0
- package/cjs/form/form-summary/index.js.map +1 -0
- package/cjs/index.d.ts +3 -2
- package/cjs/index.js +5 -3
- package/cjs/index.js.map +1 -1
- package/cjs/util/hooks/descendants/descendant.js +10 -1
- package/cjs/util/hooks/descendants/descendant.js.map +1 -1
- package/cjs/util/hooks/descendants/useDescendant.js +0 -5
- package/cjs/util/hooks/descendants/useDescendant.js.map +1 -1
- package/esm/form/combobox/FilteredOptions/filteredOptionsContext.js +2 -4
- package/esm/form/combobox/FilteredOptions/filteredOptionsContext.js.map +1 -1
- package/esm/form/combobox/Input/Input.js +6 -1
- package/esm/form/combobox/Input/Input.js.map +1 -1
- package/esm/form/form-summary/FormSummary.d.ts +82 -0
- package/esm/form/form-summary/FormSummary.js +52 -0
- package/esm/form/form-summary/FormSummary.js.map +1 -0
- package/esm/form/form-summary/FormSummaryAnswer.d.ts +11 -0
- package/esm/form/form-summary/FormSummaryAnswer.js +19 -0
- package/esm/form/form-summary/FormSummaryAnswer.js.map +1 -0
- package/esm/form/form-summary/FormSummaryAnswers.d.ts +9 -0
- package/esm/form/form-summary/FormSummaryAnswers.js +19 -0
- package/esm/form/form-summary/FormSummaryAnswers.js.map +1 -0
- package/esm/form/form-summary/FormSummaryEditLink.d.ts +17 -0
- package/esm/form/form-summary/FormSummaryEditLink.js +20 -0
- package/esm/form/form-summary/FormSummaryEditLink.js.map +1 -0
- package/esm/form/form-summary/FormSummaryHeader.d.ts +9 -0
- package/esm/form/form-summary/FormSummaryHeader.js +19 -0
- package/esm/form/form-summary/FormSummaryHeader.js.map +1 -0
- package/esm/form/form-summary/FormSummaryHeading.d.ts +14 -0
- package/esm/form/form-summary/FormSummaryHeading.js +5 -0
- package/esm/form/form-summary/FormSummaryHeading.js.map +1 -0
- package/esm/form/form-summary/FormSummaryLabel.d.ts +6 -0
- package/esm/form/form-summary/FormSummaryLabel.js +19 -0
- package/esm/form/form-summary/FormSummaryLabel.js.map +1 -0
- package/esm/form/form-summary/FormSummaryValue.d.ts +6 -0
- package/esm/form/form-summary/FormSummaryValue.js +20 -0
- package/esm/form/form-summary/FormSummaryValue.js.map +1 -0
- package/esm/form/form-summary/index.d.ts +8 -0
- package/esm/form/form-summary/index.js +10 -0
- package/esm/form/form-summary/index.js.map +1 -0
- package/esm/index.d.ts +3 -2
- package/esm/index.js +2 -1
- package/esm/index.js.map +1 -1
- package/esm/util/hooks/descendants/descendant.js +10 -1
- package/esm/util/hooks/descendants/descendant.js.map +1 -1
- package/esm/util/hooks/descendants/useDescendant.js +0 -5
- package/esm/util/hooks/descendants/useDescendant.js.map +1 -1
- package/package.json +15 -4
- package/src/form/combobox/FilteredOptions/filteredOptionsContext.tsx +9 -1
- package/src/form/combobox/Input/Input.tsx +5 -0
- package/src/form/form-summary/FormSummary.tsx +106 -0
- package/src/form/form-summary/FormSummaryAnswer.tsx +27 -0
- package/src/form/form-summary/FormSummaryAnswers.tsx +25 -0
- package/src/form/form-summary/FormSummaryEditLink.tsx +35 -0
- package/src/form/form-summary/FormSummaryHeader.tsx +25 -0
- package/src/form/form-summary/FormSummaryHeading.tsx +23 -0
- package/src/form/form-summary/FormSummaryLabel.tsx +17 -0
- package/src/form/form-summary/FormSummaryValue.tsx +24 -0
- package/src/form/form-summary/index.ts +30 -0
- package/src/index.ts +16 -15
- package/src/util/hooks/descendants/descendant.ts +15 -1
- package/src/util/hooks/descendants/useDescendant.tsx +0 -5
- package/src/accordion/accordion.stories.tsx +0 -286
- package/src/alert/alert.stories.tsx +0 -306
- package/src/button/button.stories.tsx +0 -185
- package/src/chat/chat.stories.tsx +0 -341
- package/src/chips/chips.stories.tsx +0 -260
- package/src/copybutton/copy-button.stories.tsx +0 -261
- package/src/date/datepicker/datepicker.stories.tsx +0 -614
- package/src/date/monthpicker/monthpicker.stories.tsx +0 -221
- package/src/dropdown/dropdown.stories.tsx +0 -124
- package/src/expansion-card/expansion-card.stories.tsx +0 -282
- package/src/form/checkbox/checkbox.stories.tsx +0 -281
- package/src/form/combobox/combobox.stories.tsx +0 -626
- package/src/form/confirmation-panel/confirmation-panel.stories.tsx +0 -128
- package/src/form/error-summary/error-summary.stories.tsx +0 -81
- package/src/form/fieldset/fieldset.stories.tsx +0 -157
- package/src/form/file-upload/file-upload-dropzone.stories.tsx +0 -123
- package/src/form/file-upload/file-upload-item.stories.tsx +0 -148
- package/src/form/file-upload/file-upload.stories.tsx +0 -248
- package/src/form/radio/radio.stories.tsx +0 -230
- package/src/form/search/search.stories.tsx +0 -238
- package/src/form/select/select.stories.tsx +0 -172
- package/src/form/switch/switch.stories.tsx +0 -171
- package/src/form/textarea/textarea.stories.tsx +0 -254
- package/src/form/textfield/text-field.stories.tsx +0 -143
- package/src/guide-panel/guidepanel.stories.tsx +0 -90
- package/src/help-text/help-text.stories.tsx +0 -91
- package/src/internal-header/header.stories.tsx +0 -229
- package/src/layout/bleed/Bleed.stories.tsx +0 -395
- package/src/layout/box/Box.stories.tsx +0 -380
- package/src/layout/grid/h-grid.stories.tsx +0 -122
- package/src/layout/page/Page.stories.tsx +0 -271
- package/src/layout/responsive/hide.stories.tsx +0 -80
- package/src/layout/responsive/show.stories.tsx +0 -80
- package/src/layout/sidemal-test/navno-sidemal.stories.tsx +0 -69
- package/src/layout/stack/stack.stories.tsx +0 -183
- package/src/link/stories/link.stories.tsx +0 -304
- package/src/link-panel/link-panel.stories.tsx +0 -59
- package/src/list/list.stories.tsx +0 -280
- package/src/loader/loader.stories.tsx +0 -82
- package/src/modal/modal.stories.tsx +0 -391
- package/src/pagination/pagination.stories.tsx +0 -110
- package/src/popover/popover.stories.tsx +0 -113
- package/src/portal/Portal.stories.tsx +0 -102
- package/src/read-more/readmore.stories.tsx +0 -91
- package/src/skeleton/skeleton.stories.tsx +0 -130
- package/src/stepper/stepper.stories.tsx +0 -200
- package/src/table/stories/table-1.stories.tsx +0 -292
- package/src/table/stories/table-2-expandable.stories.tsx +0 -298
- package/src/table/stories/table-3-async.stories.tsx +0 -179
- package/src/table/stories/tests/table.stories.tsx +0 -102
- package/src/tabs/Tabs.stories.tsx +0 -311
- package/src/tag/tag.stories.tsx +0 -126
- package/src/timeline/timeline.stories.tsx +0 -445
- package/src/toggle-group/ToggleGroup.stories.tsx +0 -198
- package/src/tooltip/tooltip.stories.tsx +0 -101
- package/src/typography/stories/bodylong.stories.tsx +0 -209
- package/src/typography/stories/bodyshort.stories.tsx +0 -208
- package/src/typography/stories/detail.stories.tsx +0 -115
- package/src/typography/stories/error-message.stories.tsx +0 -122
- package/src/typography/stories/heading.stories.tsx +0 -169
- package/src/typography/stories/label.stories.tsx +0 -131
- package/src/util/hooks/descendants/descendant.stories.tsx +0 -147
|
@@ -1,221 +0,0 @@
|
|
|
1
|
-
import { Meta, StoryFn, StoryObj } from "@storybook/react";
|
|
2
|
-
import { expect, userEvent, within } from "@storybook/test";
|
|
3
|
-
import { setYear } 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 { useMonthpicker } from "../hooks";
|
|
8
|
-
import { DateInputProps } from "../parts/DateInput";
|
|
9
|
-
import MonthPicker from "./MonthPicker";
|
|
10
|
-
import { MonthPickerProps } from "./types";
|
|
11
|
-
|
|
12
|
-
export default {
|
|
13
|
-
title: "ds-react/Monthpicker",
|
|
14
|
-
component: MonthPicker,
|
|
15
|
-
parameters: {
|
|
16
|
-
chromatic: { disable: true },
|
|
17
|
-
},
|
|
18
|
-
} satisfies Meta<typeof MonthPicker>;
|
|
19
|
-
|
|
20
|
-
type Story = StoryObj<typeof MonthPicker>;
|
|
21
|
-
|
|
22
|
-
export const Default: StoryFn<{
|
|
23
|
-
size: DateInputProps["size"];
|
|
24
|
-
locale: MonthPickerProps["locale"];
|
|
25
|
-
}> = (props) => {
|
|
26
|
-
const { inputProps, monthpickerProps } = useMonthpicker({
|
|
27
|
-
disabled: [new Date("Apr 1 2022")],
|
|
28
|
-
locale: props.locale,
|
|
29
|
-
});
|
|
30
|
-
|
|
31
|
-
return (
|
|
32
|
-
<div style={{ height: "20rem" }}>
|
|
33
|
-
<MonthPicker {...monthpickerProps} onMonthSelect={console.log}>
|
|
34
|
-
<MonthPicker.Input
|
|
35
|
-
label="Velg måned"
|
|
36
|
-
variant="monthpicker"
|
|
37
|
-
size={props.size}
|
|
38
|
-
{...inputProps}
|
|
39
|
-
/>
|
|
40
|
-
</MonthPicker>
|
|
41
|
-
</div>
|
|
42
|
-
);
|
|
43
|
-
};
|
|
44
|
-
Default.argTypes = {
|
|
45
|
-
size: {
|
|
46
|
-
options: ["medium", "small"],
|
|
47
|
-
control: { type: "radio" },
|
|
48
|
-
},
|
|
49
|
-
locale: {
|
|
50
|
-
options: ["nb", "nn", "en"],
|
|
51
|
-
control: { type: "radio" },
|
|
52
|
-
},
|
|
53
|
-
};
|
|
54
|
-
|
|
55
|
-
export const DropdownCaption = () => {
|
|
56
|
-
return (
|
|
57
|
-
<MonthPicker.Standalone
|
|
58
|
-
onMonthSelect={console.log}
|
|
59
|
-
dropdownCaption
|
|
60
|
-
fromDate={new Date("Feb 10 2019")}
|
|
61
|
-
toDate={new Date("Sep 27 2032")}
|
|
62
|
-
/>
|
|
63
|
-
);
|
|
64
|
-
};
|
|
65
|
-
|
|
66
|
-
export const NB = () => <MonthPicker.Standalone locale="nb" />;
|
|
67
|
-
export const NN = () => <MonthPicker.Standalone locale="nn" />;
|
|
68
|
-
export const EN = () => <MonthPicker.Standalone locale="en" />;
|
|
69
|
-
|
|
70
|
-
export const DisabledMonths = () => (
|
|
71
|
-
<MonthPicker.Standalone
|
|
72
|
-
disabled={[
|
|
73
|
-
{ from: new Date("Jan 1 2022"), to: new Date("Jul 6 2022") },
|
|
74
|
-
{ from: new Date("Apr 2 2023"), to: new Date("Dec 4 2023") },
|
|
75
|
-
new Date("Sep 5 2022"),
|
|
76
|
-
new Date("Jan 5 2023"),
|
|
77
|
-
]}
|
|
78
|
-
/>
|
|
79
|
-
);
|
|
80
|
-
|
|
81
|
-
export const Standalone = () => {
|
|
82
|
-
return <MonthPicker.Standalone />;
|
|
83
|
-
};
|
|
84
|
-
|
|
85
|
-
export const UseMonthpicker = () => {
|
|
86
|
-
const { inputProps, monthpickerProps } = useMonthpicker({
|
|
87
|
-
disabled: [new Date("Apr 1 2022")],
|
|
88
|
-
onMonthChange: console.log,
|
|
89
|
-
fromDate: new Date("Jan 1 2022"),
|
|
90
|
-
toDate: new Date("Sep 27 2025"),
|
|
91
|
-
});
|
|
92
|
-
|
|
93
|
-
return (
|
|
94
|
-
<div style={{ height: "20rem" }}>
|
|
95
|
-
<MonthPicker {...monthpickerProps} dropdownCaption>
|
|
96
|
-
<MonthPicker.Input
|
|
97
|
-
{...inputProps}
|
|
98
|
-
label="Velg måned"
|
|
99
|
-
variant="monthpicker"
|
|
100
|
-
/>
|
|
101
|
-
</MonthPicker>
|
|
102
|
-
</div>
|
|
103
|
-
);
|
|
104
|
-
};
|
|
105
|
-
|
|
106
|
-
export const UseMonthpickerFormat = () => {
|
|
107
|
-
const { inputProps, monthpickerProps } = useMonthpicker({
|
|
108
|
-
disabled: [new Date("Apr 1 2022")],
|
|
109
|
-
onMonthChange: console.log,
|
|
110
|
-
inputFormat: "MM.yyyy",
|
|
111
|
-
});
|
|
112
|
-
|
|
113
|
-
return (
|
|
114
|
-
<div style={{ height: "20rem" }}>
|
|
115
|
-
<MonthPicker {...monthpickerProps}>
|
|
116
|
-
<MonthPicker.Input
|
|
117
|
-
{...inputProps}
|
|
118
|
-
label="Velg måned"
|
|
119
|
-
variant="monthpicker"
|
|
120
|
-
/>
|
|
121
|
-
</MonthPicker>
|
|
122
|
-
</div>
|
|
123
|
-
);
|
|
124
|
-
};
|
|
125
|
-
|
|
126
|
-
export const Required = {
|
|
127
|
-
render: () => {
|
|
128
|
-
const { monthpickerProps } = useMonthpicker({
|
|
129
|
-
defaultSelected: new Date("Apr 10 2024"),
|
|
130
|
-
required: true,
|
|
131
|
-
});
|
|
132
|
-
|
|
133
|
-
return (
|
|
134
|
-
<div style={{ height: "20rem" }}>
|
|
135
|
-
<MonthPicker.Standalone {...monthpickerProps} />
|
|
136
|
-
</div>
|
|
137
|
-
);
|
|
138
|
-
},
|
|
139
|
-
play: async ({ canvasElement }) => {
|
|
140
|
-
const canvas = within(canvasElement);
|
|
141
|
-
|
|
142
|
-
const buttonApr = canvas.getByRole("button", { pressed: true });
|
|
143
|
-
|
|
144
|
-
await act(async () => {
|
|
145
|
-
await userEvent.click(buttonApr);
|
|
146
|
-
});
|
|
147
|
-
|
|
148
|
-
expect(buttonApr.ariaPressed).toBe("true");
|
|
149
|
-
|
|
150
|
-
const buttonSep = canvas.getByText("september").closest("button");
|
|
151
|
-
|
|
152
|
-
expect(buttonSep?.ariaPressed).toBe("false");
|
|
153
|
-
|
|
154
|
-
await act(async () => {
|
|
155
|
-
buttonSep && (await userEvent.click(buttonSep));
|
|
156
|
-
});
|
|
157
|
-
|
|
158
|
-
expect(buttonSep?.ariaPressed).toBe("true");
|
|
159
|
-
expect(buttonApr.ariaPressed).toBe("false");
|
|
160
|
-
},
|
|
161
|
-
};
|
|
162
|
-
|
|
163
|
-
export const UserControlled = () => {
|
|
164
|
-
const [open, setOpen] = useState(false);
|
|
165
|
-
const id = useId();
|
|
166
|
-
|
|
167
|
-
return (
|
|
168
|
-
<div>
|
|
169
|
-
<MonthPicker open={open} onClose={() => setOpen(false)} id={id}>
|
|
170
|
-
<Button aria-controls={id} onClick={() => setOpen((x) => !x)}>
|
|
171
|
-
Velg måned
|
|
172
|
-
</Button>
|
|
173
|
-
</MonthPicker>
|
|
174
|
-
</div>
|
|
175
|
-
);
|
|
176
|
-
};
|
|
177
|
-
|
|
178
|
-
export const FollowYear = () => {
|
|
179
|
-
const { monthpickerProps, inputProps, selectedMonth, setSelected } =
|
|
180
|
-
useMonthpicker({
|
|
181
|
-
fromDate: new Date("Aug 23 2019"),
|
|
182
|
-
toDate: new Date("Aug 23 2025"),
|
|
183
|
-
onMonthChange: console.log,
|
|
184
|
-
});
|
|
185
|
-
|
|
186
|
-
const customYearChange = (yearDate?: Date) => {
|
|
187
|
-
monthpickerProps.onYearChange?.(yearDate);
|
|
188
|
-
if (selectedMonth && yearDate) {
|
|
189
|
-
setSelected(setYear(selectedMonth, yearDate.getFullYear()));
|
|
190
|
-
}
|
|
191
|
-
};
|
|
192
|
-
|
|
193
|
-
return (
|
|
194
|
-
<div className="min-h-96">
|
|
195
|
-
<MonthPicker {...monthpickerProps} onYearChange={customYearChange}>
|
|
196
|
-
<MonthPicker.Input {...inputProps} label="Velg måned" />
|
|
197
|
-
</MonthPicker>
|
|
198
|
-
{selectedMonth && <div className="pt-4">{selectedMonth.getMonth()}</div>}
|
|
199
|
-
</div>
|
|
200
|
-
);
|
|
201
|
-
};
|
|
202
|
-
|
|
203
|
-
export const Chromatic: Story = {
|
|
204
|
-
render: () => (
|
|
205
|
-
<div className="colgap">
|
|
206
|
-
<MonthPicker.Standalone />
|
|
207
|
-
<DropdownCaption />
|
|
208
|
-
<NB />
|
|
209
|
-
<NN />
|
|
210
|
-
<EN />
|
|
211
|
-
<DisabledMonths />
|
|
212
|
-
<UseMonthpicker />
|
|
213
|
-
<UseMonthpickerFormat />
|
|
214
|
-
<UserControlled />
|
|
215
|
-
<FollowYear />
|
|
216
|
-
</div>
|
|
217
|
-
),
|
|
218
|
-
parameters: {
|
|
219
|
-
chromatic: { disable: false },
|
|
220
|
-
},
|
|
221
|
-
};
|
|
@@ -1,124 +0,0 @@
|
|
|
1
|
-
import { Meta, StoryObj } from "@storybook/react";
|
|
2
|
-
import React, { useState } from "react";
|
|
3
|
-
import { Button } from "../button";
|
|
4
|
-
import Dropdown from "./Dropdown";
|
|
5
|
-
|
|
6
|
-
export default {
|
|
7
|
-
title: "ds-react/Dropdown",
|
|
8
|
-
component: Dropdown,
|
|
9
|
-
parameters: {
|
|
10
|
-
chromatic: { disable: true },
|
|
11
|
-
},
|
|
12
|
-
} satisfies Meta<typeof Dropdown>;
|
|
13
|
-
|
|
14
|
-
type Story = StoryObj<typeof Dropdown>;
|
|
15
|
-
|
|
16
|
-
export const Default: Story = {
|
|
17
|
-
render: () => (
|
|
18
|
-
<Dropdown onSelect={(event) => console.log(event)}>
|
|
19
|
-
<Dropdown.Toggle>Toggle</Dropdown.Toggle>
|
|
20
|
-
<Dropdown.Menu strategy="fixed">
|
|
21
|
-
<Dropdown.Menu.GroupedList>
|
|
22
|
-
<Dropdown.Menu.GroupedList.Heading>
|
|
23
|
-
Systemer og oppslagsverk
|
|
24
|
-
</Dropdown.Menu.GroupedList.Heading>
|
|
25
|
-
<Dropdown.Menu.GroupedList.Item
|
|
26
|
-
onClick={() => console.log("GroupedList.Item-click")}
|
|
27
|
-
>
|
|
28
|
-
Gosys
|
|
29
|
-
</Dropdown.Menu.GroupedList.Item>
|
|
30
|
-
</Dropdown.Menu.GroupedList>
|
|
31
|
-
<Dropdown.Menu.Divider />
|
|
32
|
-
<Dropdown.Menu.List>
|
|
33
|
-
<Dropdown.Menu.List.Item onClick={() => console.log("Item-click")}>
|
|
34
|
-
Gosys
|
|
35
|
-
</Dropdown.Menu.List.Item>
|
|
36
|
-
<Dropdown.Menu.List.Item>Psys</Dropdown.Menu.List.Item>
|
|
37
|
-
<Dropdown.Menu.List.Item disabled>Infotrygd</Dropdown.Menu.List.Item>
|
|
38
|
-
</Dropdown.Menu.List>
|
|
39
|
-
</Dropdown.Menu>
|
|
40
|
-
</Dropdown>
|
|
41
|
-
),
|
|
42
|
-
};
|
|
43
|
-
|
|
44
|
-
export const DefaultOpen: Story = {
|
|
45
|
-
render: () => (
|
|
46
|
-
<Dropdown onSelect={(event) => console.log(event)} defaultOpen>
|
|
47
|
-
<Button as={Dropdown.Toggle}>Toggle</Button>
|
|
48
|
-
<Dropdown.Menu
|
|
49
|
-
strategy="fixed"
|
|
50
|
-
onClose={() => console.log("ONCLOSE default")}
|
|
51
|
-
>
|
|
52
|
-
<Dropdown.Menu.GroupedList>
|
|
53
|
-
<Dropdown.Menu.GroupedList.Heading>
|
|
54
|
-
Systemer og oppslagsverk
|
|
55
|
-
</Dropdown.Menu.GroupedList.Heading>
|
|
56
|
-
<Dropdown.Menu.GroupedList.Item
|
|
57
|
-
onClick={() => console.log("GroupedList.Item-click")}
|
|
58
|
-
>
|
|
59
|
-
Gosys
|
|
60
|
-
</Dropdown.Menu.GroupedList.Item>
|
|
61
|
-
</Dropdown.Menu.GroupedList>
|
|
62
|
-
</Dropdown.Menu>
|
|
63
|
-
</Dropdown>
|
|
64
|
-
),
|
|
65
|
-
};
|
|
66
|
-
|
|
67
|
-
export const ControlledOpen: Story = {
|
|
68
|
-
render: () => {
|
|
69
|
-
const [openState, setOpenState] = useState(true);
|
|
70
|
-
return (
|
|
71
|
-
<Dropdown onSelect={(event) => console.log(event)} open={openState}>
|
|
72
|
-
<Button as={Dropdown.Toggle} onClick={() => setOpenState(!openState)}>
|
|
73
|
-
Toggle
|
|
74
|
-
</Button>
|
|
75
|
-
<Dropdown.Menu
|
|
76
|
-
strategy="fixed"
|
|
77
|
-
onClose={() => console.log("ONCLOSE CONTROLLED")}
|
|
78
|
-
>
|
|
79
|
-
<Dropdown.Menu.GroupedList>
|
|
80
|
-
<Dropdown.Menu.GroupedList.Heading>
|
|
81
|
-
Systemer og oppslagsverk
|
|
82
|
-
</Dropdown.Menu.GroupedList.Heading>
|
|
83
|
-
<Dropdown.Menu.GroupedList.Item
|
|
84
|
-
onClick={() => console.log("GroupedList.Item-click")}
|
|
85
|
-
>
|
|
86
|
-
Gosys
|
|
87
|
-
</Dropdown.Menu.GroupedList.Item>
|
|
88
|
-
</Dropdown.Menu.GroupedList>
|
|
89
|
-
</Dropdown.Menu>
|
|
90
|
-
</Dropdown>
|
|
91
|
-
);
|
|
92
|
-
},
|
|
93
|
-
};
|
|
94
|
-
|
|
95
|
-
export const Chromatic: Story = {
|
|
96
|
-
render: () => (
|
|
97
|
-
<Dropdown onSelect={(event) => console.log(event)} open>
|
|
98
|
-
<Dropdown.Toggle>Toggle</Dropdown.Toggle>
|
|
99
|
-
<Dropdown.Menu strategy="fixed">
|
|
100
|
-
<Dropdown.Menu.GroupedList>
|
|
101
|
-
<Dropdown.Menu.GroupedList.Heading>
|
|
102
|
-
Systemer og oppslagsverk
|
|
103
|
-
</Dropdown.Menu.GroupedList.Heading>
|
|
104
|
-
<Dropdown.Menu.GroupedList.Item
|
|
105
|
-
onClick={() => console.log("GroupedList.Item-click")}
|
|
106
|
-
>
|
|
107
|
-
Gosys
|
|
108
|
-
</Dropdown.Menu.GroupedList.Item>
|
|
109
|
-
</Dropdown.Menu.GroupedList>
|
|
110
|
-
<Dropdown.Menu.Divider />
|
|
111
|
-
<Dropdown.Menu.List>
|
|
112
|
-
<Dropdown.Menu.List.Item onClick={() => console.log("Item-click")}>
|
|
113
|
-
Gosys
|
|
114
|
-
</Dropdown.Menu.List.Item>
|
|
115
|
-
<Dropdown.Menu.List.Item>Psys</Dropdown.Menu.List.Item>
|
|
116
|
-
<Dropdown.Menu.List.Item disabled>Infotrygd</Dropdown.Menu.List.Item>
|
|
117
|
-
</Dropdown.Menu.List>
|
|
118
|
-
</Dropdown.Menu>
|
|
119
|
-
</Dropdown>
|
|
120
|
-
),
|
|
121
|
-
parameters: {
|
|
122
|
-
chromatic: { disable: false, delay: 300 },
|
|
123
|
-
},
|
|
124
|
-
};
|
|
@@ -1,282 +0,0 @@
|
|
|
1
|
-
import { Meta, StoryFn, StoryObj } from "@storybook/react";
|
|
2
|
-
import React, { useState } from "react";
|
|
3
|
-
import { PlantIcon } from "@navikt/aksel-icons";
|
|
4
|
-
import { ExpansionCard, ExpansionCardProps } from ".";
|
|
5
|
-
import { BodyLong } from "../typography";
|
|
6
|
-
|
|
7
|
-
const meta: Meta<typeof ExpansionCard> = {
|
|
8
|
-
title: "ds-react/ExpansionCard",
|
|
9
|
-
component: ExpansionCard,
|
|
10
|
-
decorators: [
|
|
11
|
-
(Story) => (
|
|
12
|
-
<div
|
|
13
|
-
style={{
|
|
14
|
-
width: "600px",
|
|
15
|
-
minHeight: "100vh",
|
|
16
|
-
padding: "10rem 0",
|
|
17
|
-
display: "flex",
|
|
18
|
-
flexDirection: "column",
|
|
19
|
-
gap: "1rem",
|
|
20
|
-
}}
|
|
21
|
-
>
|
|
22
|
-
<Story />
|
|
23
|
-
</div>
|
|
24
|
-
),
|
|
25
|
-
],
|
|
26
|
-
parameters: {
|
|
27
|
-
chromatic: { disable: true },
|
|
28
|
-
},
|
|
29
|
-
};
|
|
30
|
-
export default meta;
|
|
31
|
-
|
|
32
|
-
type Story = StoryObj<typeof ExpansionCard>;
|
|
33
|
-
|
|
34
|
-
const Content = () => (
|
|
35
|
-
<ExpansionCard.Content>
|
|
36
|
-
<BodyLong spacing>
|
|
37
|
-
På ditt faste arbeidssted vil du ha yrkesskadedekning også i hvilepauser,
|
|
38
|
-
lunsjpauser, trimaktiviteter og lignende i arbeidstiden.
|
|
39
|
-
</BodyLong>
|
|
40
|
-
<BodyLong spacing>
|
|
41
|
-
Som hovedregel er du som arbeidstaker ikke yrkesskadedekket på veien til
|
|
42
|
-
og fra arbeid eller første og siste oppdragssted. Du er heller ikke
|
|
43
|
-
yrkesskadedekket på fritiden eller under private gjøremål i arbeidstiden.
|
|
44
|
-
</BodyLong>
|
|
45
|
-
<BodyLong spacing>
|
|
46
|
-
Lorem ipsum, dolor sit amet consectetur adipisicing elit. Fuga suscipit
|
|
47
|
-
voluptatum expedita earum id, aperiam deleniti molestiae eveniet
|
|
48
|
-
doloremque explicabo perspiciatis quasi repellendus! Est dolore a nemo
|
|
49
|
-
aspernatur obcaecati dicta.
|
|
50
|
-
</BodyLong>
|
|
51
|
-
<BodyLong spacing>
|
|
52
|
-
Lorem ipsum, dolor sit amet consectetur adipisicing elit. Fuga suscipit
|
|
53
|
-
voluptatum expedita earum id, aperiam deleniti molestiae eveniet
|
|
54
|
-
doloremque explicabo perspiciatis quasi repellendus! Est dolore a nemo
|
|
55
|
-
aspernatur obcaecati dicta.
|
|
56
|
-
</BodyLong>
|
|
57
|
-
<BodyLong>
|
|
58
|
-
Lorem ipsum, dolor sit amet consectetur adipisicing elit. Fuga suscipit
|
|
59
|
-
voluptatum expedita earum id, aperiam deleniti molestiae eveniet
|
|
60
|
-
doloremque explicabo perspiciatis quasi repellendus! Est dolore a nemo
|
|
61
|
-
aspernatur obcaecati dicta.
|
|
62
|
-
</BodyLong>
|
|
63
|
-
</ExpansionCard.Content>
|
|
64
|
-
);
|
|
65
|
-
|
|
66
|
-
type DefaultStoryProps = ExpansionCardProps & { description: boolean };
|
|
67
|
-
type DefaultStory = StoryFn<DefaultStoryProps>;
|
|
68
|
-
export const Default: DefaultStory = (props: DefaultStoryProps) => {
|
|
69
|
-
return (
|
|
70
|
-
<ExpansionCard
|
|
71
|
-
{...props}
|
|
72
|
-
open={props.open || undefined}
|
|
73
|
-
aria-label="default-demo"
|
|
74
|
-
>
|
|
75
|
-
<ExpansionCard.Header>
|
|
76
|
-
<ExpansionCard.Title>Arbeidstakere</ExpansionCard.Title>
|
|
77
|
-
{props.description && (
|
|
78
|
-
<ExpansionCard.Description>
|
|
79
|
-
For at yrkesskadedekningen skal gjelde, er det som hovedregel krav
|
|
80
|
-
til tid, sted og arbeidsoppgaver
|
|
81
|
-
</ExpansionCard.Description>
|
|
82
|
-
)}
|
|
83
|
-
</ExpansionCard.Header>
|
|
84
|
-
<Content />
|
|
85
|
-
</ExpansionCard>
|
|
86
|
-
);
|
|
87
|
-
};
|
|
88
|
-
Default.args = {
|
|
89
|
-
open: false,
|
|
90
|
-
size: "medium",
|
|
91
|
-
description: false,
|
|
92
|
-
};
|
|
93
|
-
Default.argTypes = {
|
|
94
|
-
size: { control: "radio", options: ["medium", "small"] },
|
|
95
|
-
};
|
|
96
|
-
|
|
97
|
-
export const Description = () => (
|
|
98
|
-
<ExpansionCard aria-label="bare description">
|
|
99
|
-
<ExpansionCard.Header>
|
|
100
|
-
<ExpansionCard.Title>Arbeidstakere</ExpansionCard.Title>
|
|
101
|
-
<ExpansionCard.Description>
|
|
102
|
-
For at yrkesskadedekningen skal gjelde, er det som hovedregel krav til
|
|
103
|
-
tid, sted og arbeidsoppgaver
|
|
104
|
-
</ExpansionCard.Description>
|
|
105
|
-
</ExpansionCard.Header>
|
|
106
|
-
<Content />
|
|
107
|
-
</ExpansionCard>
|
|
108
|
-
);
|
|
109
|
-
|
|
110
|
-
export const Sizes = () => (
|
|
111
|
-
<>
|
|
112
|
-
<h2>Medium</h2>
|
|
113
|
-
<ExpansionCard aria-label="Demo med description">
|
|
114
|
-
<ExpansionCard.Header>
|
|
115
|
-
<ExpansionCard.Title>Arbeidstakere</ExpansionCard.Title>
|
|
116
|
-
<ExpansionCard.Description>
|
|
117
|
-
For at yrkesskadedekningen skal gjelde, er det som hovedregel krav til
|
|
118
|
-
tid, sted og arbeidsoppgaver
|
|
119
|
-
</ExpansionCard.Description>
|
|
120
|
-
</ExpansionCard.Header>
|
|
121
|
-
<Content />
|
|
122
|
-
</ExpansionCard>
|
|
123
|
-
<ExpansionCard aria-label="Demo">
|
|
124
|
-
<ExpansionCard.Header>
|
|
125
|
-
<ExpansionCard.Title>Arbeidstakere</ExpansionCard.Title>
|
|
126
|
-
</ExpansionCard.Header>
|
|
127
|
-
<Content />
|
|
128
|
-
</ExpansionCard>
|
|
129
|
-
<h2>Small</h2>
|
|
130
|
-
<ExpansionCard size="small" aria-label="small-demo">
|
|
131
|
-
<ExpansionCard.Header>
|
|
132
|
-
<ExpansionCard.Title>Arbeidstakere</ExpansionCard.Title>
|
|
133
|
-
<ExpansionCard.Description>
|
|
134
|
-
For at yrkesskadedekningen skal gjelde, er det som hovedregel krav til
|
|
135
|
-
tid, sted og arbeidsoppgaver
|
|
136
|
-
</ExpansionCard.Description>
|
|
137
|
-
</ExpansionCard.Header>
|
|
138
|
-
<Content />
|
|
139
|
-
</ExpansionCard>
|
|
140
|
-
<ExpansionCard
|
|
141
|
-
size="small"
|
|
142
|
-
aria-label="small-demo med avatar uten description"
|
|
143
|
-
>
|
|
144
|
-
<ExpansionCard.Header>
|
|
145
|
-
<ExpansionCard.Title>Arbeidstakere</ExpansionCard.Title>
|
|
146
|
-
</ExpansionCard.Header>
|
|
147
|
-
<Content />
|
|
148
|
-
</ExpansionCard>
|
|
149
|
-
</>
|
|
150
|
-
);
|
|
151
|
-
|
|
152
|
-
export const HeadingSizing = () => (
|
|
153
|
-
<>
|
|
154
|
-
{(["large", "medium", "small"] as const).map((size) => (
|
|
155
|
-
<ExpansionCard key={size} aria-label={`demo-${size}`}>
|
|
156
|
-
<ExpansionCard.Header>
|
|
157
|
-
<ExpansionCard.Title size={size}>{size}</ExpansionCard.Title>
|
|
158
|
-
<ExpansionCard.Description>
|
|
159
|
-
For at yrkesskadedekningen skal gjelde, er det som hovedregel krav
|
|
160
|
-
til tid, sted og arbeidsoppgaver
|
|
161
|
-
</ExpansionCard.Description>
|
|
162
|
-
</ExpansionCard.Header>
|
|
163
|
-
<Content />
|
|
164
|
-
</ExpansionCard>
|
|
165
|
-
))}
|
|
166
|
-
</>
|
|
167
|
-
);
|
|
168
|
-
|
|
169
|
-
export const DefaultOpen = () => (
|
|
170
|
-
<ExpansionCard defaultOpen aria-label="defaultOpen demo">
|
|
171
|
-
<ExpansionCard.Header>
|
|
172
|
-
<ExpansionCard.Title>Arbeidstakere</ExpansionCard.Title>
|
|
173
|
-
<ExpansionCard.Description>
|
|
174
|
-
For at yrkesskadedekningen skal gjelde, er det som hovedregel krav til
|
|
175
|
-
tid, sted og arbeidsoppgaver
|
|
176
|
-
</ExpansionCard.Description>
|
|
177
|
-
</ExpansionCard.Header>
|
|
178
|
-
<Content />
|
|
179
|
-
</ExpansionCard>
|
|
180
|
-
);
|
|
181
|
-
|
|
182
|
-
export const ControlledState = () => {
|
|
183
|
-
const [open, setOpen] = useState(false);
|
|
184
|
-
return (
|
|
185
|
-
<ExpansionCard
|
|
186
|
-
open={open}
|
|
187
|
-
onToggle={setOpen}
|
|
188
|
-
aria-label="Controlled-state demo"
|
|
189
|
-
>
|
|
190
|
-
<ExpansionCard.Header>
|
|
191
|
-
<ExpansionCard.Title>Arbeidstakere</ExpansionCard.Title>
|
|
192
|
-
<ExpansionCard.Description>
|
|
193
|
-
For at yrkesskadedekningen skal gjelde, er det som hovedregel krav til
|
|
194
|
-
tid, sted og arbeidsoppgaver
|
|
195
|
-
</ExpansionCard.Description>
|
|
196
|
-
</ExpansionCard.Header>
|
|
197
|
-
<Content />
|
|
198
|
-
</ExpansionCard>
|
|
199
|
-
);
|
|
200
|
-
};
|
|
201
|
-
|
|
202
|
-
export const Customization = () => (
|
|
203
|
-
<div className="subtle-card">
|
|
204
|
-
<ExpansionCard aria-label="custom-styling demo">
|
|
205
|
-
<ExpansionCard.Header>
|
|
206
|
-
<ExpansionCard.Title>Arbeidstakere</ExpansionCard.Title>
|
|
207
|
-
<ExpansionCard.Description>
|
|
208
|
-
For at yrkesskadedekningen skal gjelde, er det som hovedregel krav til
|
|
209
|
-
tid, sted og arbeidsoppgaver
|
|
210
|
-
</ExpansionCard.Description>
|
|
211
|
-
</ExpansionCard.Header>
|
|
212
|
-
<Content />
|
|
213
|
-
</ExpansionCard>
|
|
214
|
-
|
|
215
|
-
<style>{`
|
|
216
|
-
.subtle-card {
|
|
217
|
-
--ac-expansioncard-bg: var(--a-surface-subtle);
|
|
218
|
-
--ac-expansioncard-border-open-color: var(--a-border-alt-3);
|
|
219
|
-
}`}</style>
|
|
220
|
-
</div>
|
|
221
|
-
);
|
|
222
|
-
|
|
223
|
-
export const Icon = () => (
|
|
224
|
-
<div>
|
|
225
|
-
<ExpansionCard aria-label="custom-styling demo">
|
|
226
|
-
<ExpansionCard.Header>
|
|
227
|
-
<div className="with-icon">
|
|
228
|
-
<div className="icon">
|
|
229
|
-
<PlantIcon aria-hidden />
|
|
230
|
-
</div>
|
|
231
|
-
<div>
|
|
232
|
-
<ExpansionCard.Title>Arbeidstakere</ExpansionCard.Title>
|
|
233
|
-
<ExpansionCard.Description>
|
|
234
|
-
For at yrkesskadedekningen skal gjelde, er det som hovedregel krav
|
|
235
|
-
til tid, sted og arbeidsoppgaver
|
|
236
|
-
</ExpansionCard.Description>
|
|
237
|
-
</div>
|
|
238
|
-
</div>
|
|
239
|
-
</ExpansionCard.Header>
|
|
240
|
-
<Content />
|
|
241
|
-
</ExpansionCard>
|
|
242
|
-
|
|
243
|
-
<style>{`
|
|
244
|
-
.with-icon {
|
|
245
|
-
display: flex;
|
|
246
|
-
align-items: center;
|
|
247
|
-
gap: 1rem;
|
|
248
|
-
}
|
|
249
|
-
.icon {
|
|
250
|
-
font-size: 3rem;
|
|
251
|
-
flex-shrink: 0;
|
|
252
|
-
display: grid;
|
|
253
|
-
place-content: center;
|
|
254
|
-
}`}</style>
|
|
255
|
-
</div>
|
|
256
|
-
);
|
|
257
|
-
|
|
258
|
-
export const Chromatic: Story = {
|
|
259
|
-
render: () => {
|
|
260
|
-
return (
|
|
261
|
-
<div>
|
|
262
|
-
<h2>Description</h2>
|
|
263
|
-
<Description />
|
|
264
|
-
<h2>Sizes</h2>
|
|
265
|
-
<Sizes />
|
|
266
|
-
<h2>Heading sizing</h2>
|
|
267
|
-
<HeadingSizing />
|
|
268
|
-
<h2>Default open</h2>
|
|
269
|
-
<DefaultOpen />
|
|
270
|
-
<h2>Controlled state</h2>
|
|
271
|
-
<ControlledState />
|
|
272
|
-
<h2>Customization</h2>
|
|
273
|
-
<Customization />
|
|
274
|
-
<h2>Icon</h2>
|
|
275
|
-
<Icon />
|
|
276
|
-
</div>
|
|
277
|
-
);
|
|
278
|
-
},
|
|
279
|
-
parameters: {
|
|
280
|
-
chromatic: { disable: false },
|
|
281
|
-
},
|
|
282
|
-
};
|