@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.
Files changed (153) hide show
  1. package/cjs/form/combobox/FilteredOptions/filteredOptionsContext.js +2 -4
  2. package/cjs/form/combobox/FilteredOptions/filteredOptionsContext.js.map +1 -1
  3. package/cjs/form/combobox/Input/Input.js +6 -1
  4. package/cjs/form/combobox/Input/Input.js.map +1 -1
  5. package/cjs/form/form-summary/FormSummary.d.ts +82 -0
  6. package/cjs/form/form-summary/FormSummary.js +81 -0
  7. package/cjs/form/form-summary/FormSummary.js.map +1 -0
  8. package/cjs/form/form-summary/FormSummaryAnswer.d.ts +11 -0
  9. package/cjs/form/form-summary/FormSummaryAnswer.js +25 -0
  10. package/cjs/form/form-summary/FormSummaryAnswer.js.map +1 -0
  11. package/cjs/form/form-summary/FormSummaryAnswers.d.ts +9 -0
  12. package/cjs/form/form-summary/FormSummaryAnswers.js +48 -0
  13. package/cjs/form/form-summary/FormSummaryAnswers.js.map +1 -0
  14. package/cjs/form/form-summary/FormSummaryEditLink.d.ts +17 -0
  15. package/cjs/form/form-summary/FormSummaryEditLink.js +49 -0
  16. package/cjs/form/form-summary/FormSummaryEditLink.js.map +1 -0
  17. package/cjs/form/form-summary/FormSummaryHeader.d.ts +9 -0
  18. package/cjs/form/form-summary/FormSummaryHeader.js +48 -0
  19. package/cjs/form/form-summary/FormSummaryHeader.js.map +1 -0
  20. package/cjs/form/form-summary/FormSummaryHeading.d.ts +14 -0
  21. package/cjs/form/form-summary/FormSummaryHeading.js +31 -0
  22. package/cjs/form/form-summary/FormSummaryHeading.js.map +1 -0
  23. package/cjs/form/form-summary/FormSummaryLabel.d.ts +6 -0
  24. package/cjs/form/form-summary/FormSummaryLabel.js +45 -0
  25. package/cjs/form/form-summary/FormSummaryLabel.js.map +1 -0
  26. package/cjs/form/form-summary/FormSummaryValue.d.ts +6 -0
  27. package/cjs/form/form-summary/FormSummaryValue.js +49 -0
  28. package/cjs/form/form-summary/FormSummaryValue.js.map +1 -0
  29. package/cjs/form/form-summary/index.d.ts +8 -0
  30. package/cjs/form/form-summary/index.js +24 -0
  31. package/cjs/form/form-summary/index.js.map +1 -0
  32. package/cjs/index.d.ts +3 -2
  33. package/cjs/index.js +5 -3
  34. package/cjs/index.js.map +1 -1
  35. package/cjs/util/hooks/descendants/descendant.js +10 -1
  36. package/cjs/util/hooks/descendants/descendant.js.map +1 -1
  37. package/cjs/util/hooks/descendants/useDescendant.js +0 -5
  38. package/cjs/util/hooks/descendants/useDescendant.js.map +1 -1
  39. package/esm/form/combobox/FilteredOptions/filteredOptionsContext.js +2 -4
  40. package/esm/form/combobox/FilteredOptions/filteredOptionsContext.js.map +1 -1
  41. package/esm/form/combobox/Input/Input.js +6 -1
  42. package/esm/form/combobox/Input/Input.js.map +1 -1
  43. package/esm/form/form-summary/FormSummary.d.ts +82 -0
  44. package/esm/form/form-summary/FormSummary.js +52 -0
  45. package/esm/form/form-summary/FormSummary.js.map +1 -0
  46. package/esm/form/form-summary/FormSummaryAnswer.d.ts +11 -0
  47. package/esm/form/form-summary/FormSummaryAnswer.js +19 -0
  48. package/esm/form/form-summary/FormSummaryAnswer.js.map +1 -0
  49. package/esm/form/form-summary/FormSummaryAnswers.d.ts +9 -0
  50. package/esm/form/form-summary/FormSummaryAnswers.js +19 -0
  51. package/esm/form/form-summary/FormSummaryAnswers.js.map +1 -0
  52. package/esm/form/form-summary/FormSummaryEditLink.d.ts +17 -0
  53. package/esm/form/form-summary/FormSummaryEditLink.js +20 -0
  54. package/esm/form/form-summary/FormSummaryEditLink.js.map +1 -0
  55. package/esm/form/form-summary/FormSummaryHeader.d.ts +9 -0
  56. package/esm/form/form-summary/FormSummaryHeader.js +19 -0
  57. package/esm/form/form-summary/FormSummaryHeader.js.map +1 -0
  58. package/esm/form/form-summary/FormSummaryHeading.d.ts +14 -0
  59. package/esm/form/form-summary/FormSummaryHeading.js +5 -0
  60. package/esm/form/form-summary/FormSummaryHeading.js.map +1 -0
  61. package/esm/form/form-summary/FormSummaryLabel.d.ts +6 -0
  62. package/esm/form/form-summary/FormSummaryLabel.js +19 -0
  63. package/esm/form/form-summary/FormSummaryLabel.js.map +1 -0
  64. package/esm/form/form-summary/FormSummaryValue.d.ts +6 -0
  65. package/esm/form/form-summary/FormSummaryValue.js +20 -0
  66. package/esm/form/form-summary/FormSummaryValue.js.map +1 -0
  67. package/esm/form/form-summary/index.d.ts +8 -0
  68. package/esm/form/form-summary/index.js +10 -0
  69. package/esm/form/form-summary/index.js.map +1 -0
  70. package/esm/index.d.ts +3 -2
  71. package/esm/index.js +2 -1
  72. package/esm/index.js.map +1 -1
  73. package/esm/util/hooks/descendants/descendant.js +10 -1
  74. package/esm/util/hooks/descendants/descendant.js.map +1 -1
  75. package/esm/util/hooks/descendants/useDescendant.js +0 -5
  76. package/esm/util/hooks/descendants/useDescendant.js.map +1 -1
  77. package/package.json +15 -4
  78. package/src/form/combobox/FilteredOptions/filteredOptionsContext.tsx +9 -1
  79. package/src/form/combobox/Input/Input.tsx +5 -0
  80. package/src/form/form-summary/FormSummary.tsx +106 -0
  81. package/src/form/form-summary/FormSummaryAnswer.tsx +27 -0
  82. package/src/form/form-summary/FormSummaryAnswers.tsx +25 -0
  83. package/src/form/form-summary/FormSummaryEditLink.tsx +35 -0
  84. package/src/form/form-summary/FormSummaryHeader.tsx +25 -0
  85. package/src/form/form-summary/FormSummaryHeading.tsx +23 -0
  86. package/src/form/form-summary/FormSummaryLabel.tsx +17 -0
  87. package/src/form/form-summary/FormSummaryValue.tsx +24 -0
  88. package/src/form/form-summary/index.ts +30 -0
  89. package/src/index.ts +16 -15
  90. package/src/util/hooks/descendants/descendant.ts +15 -1
  91. package/src/util/hooks/descendants/useDescendant.tsx +0 -5
  92. package/src/accordion/accordion.stories.tsx +0 -286
  93. package/src/alert/alert.stories.tsx +0 -306
  94. package/src/button/button.stories.tsx +0 -185
  95. package/src/chat/chat.stories.tsx +0 -341
  96. package/src/chips/chips.stories.tsx +0 -260
  97. package/src/copybutton/copy-button.stories.tsx +0 -261
  98. package/src/date/datepicker/datepicker.stories.tsx +0 -614
  99. package/src/date/monthpicker/monthpicker.stories.tsx +0 -221
  100. package/src/dropdown/dropdown.stories.tsx +0 -124
  101. package/src/expansion-card/expansion-card.stories.tsx +0 -282
  102. package/src/form/checkbox/checkbox.stories.tsx +0 -281
  103. package/src/form/combobox/combobox.stories.tsx +0 -626
  104. package/src/form/confirmation-panel/confirmation-panel.stories.tsx +0 -128
  105. package/src/form/error-summary/error-summary.stories.tsx +0 -81
  106. package/src/form/fieldset/fieldset.stories.tsx +0 -157
  107. package/src/form/file-upload/file-upload-dropzone.stories.tsx +0 -123
  108. package/src/form/file-upload/file-upload-item.stories.tsx +0 -148
  109. package/src/form/file-upload/file-upload.stories.tsx +0 -248
  110. package/src/form/radio/radio.stories.tsx +0 -230
  111. package/src/form/search/search.stories.tsx +0 -238
  112. package/src/form/select/select.stories.tsx +0 -172
  113. package/src/form/switch/switch.stories.tsx +0 -171
  114. package/src/form/textarea/textarea.stories.tsx +0 -254
  115. package/src/form/textfield/text-field.stories.tsx +0 -143
  116. package/src/guide-panel/guidepanel.stories.tsx +0 -90
  117. package/src/help-text/help-text.stories.tsx +0 -91
  118. package/src/internal-header/header.stories.tsx +0 -229
  119. package/src/layout/bleed/Bleed.stories.tsx +0 -395
  120. package/src/layout/box/Box.stories.tsx +0 -380
  121. package/src/layout/grid/h-grid.stories.tsx +0 -122
  122. package/src/layout/page/Page.stories.tsx +0 -271
  123. package/src/layout/responsive/hide.stories.tsx +0 -80
  124. package/src/layout/responsive/show.stories.tsx +0 -80
  125. package/src/layout/sidemal-test/navno-sidemal.stories.tsx +0 -69
  126. package/src/layout/stack/stack.stories.tsx +0 -183
  127. package/src/link/stories/link.stories.tsx +0 -304
  128. package/src/link-panel/link-panel.stories.tsx +0 -59
  129. package/src/list/list.stories.tsx +0 -280
  130. package/src/loader/loader.stories.tsx +0 -82
  131. package/src/modal/modal.stories.tsx +0 -391
  132. package/src/pagination/pagination.stories.tsx +0 -110
  133. package/src/popover/popover.stories.tsx +0 -113
  134. package/src/portal/Portal.stories.tsx +0 -102
  135. package/src/read-more/readmore.stories.tsx +0 -91
  136. package/src/skeleton/skeleton.stories.tsx +0 -130
  137. package/src/stepper/stepper.stories.tsx +0 -200
  138. package/src/table/stories/table-1.stories.tsx +0 -292
  139. package/src/table/stories/table-2-expandable.stories.tsx +0 -298
  140. package/src/table/stories/table-3-async.stories.tsx +0 -179
  141. package/src/table/stories/tests/table.stories.tsx +0 -102
  142. package/src/tabs/Tabs.stories.tsx +0 -311
  143. package/src/tag/tag.stories.tsx +0 -126
  144. package/src/timeline/timeline.stories.tsx +0 -445
  145. package/src/toggle-group/ToggleGroup.stories.tsx +0 -198
  146. package/src/tooltip/tooltip.stories.tsx +0 -101
  147. package/src/typography/stories/bodylong.stories.tsx +0 -209
  148. package/src/typography/stories/bodyshort.stories.tsx +0 -208
  149. package/src/typography/stories/detail.stories.tsx +0 -115
  150. package/src/typography/stories/error-message.stories.tsx +0 -122
  151. package/src/typography/stories/heading.stories.tsx +0 -169
  152. package/src/typography/stories/label.stories.tsx +0 -131
  153. 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
- };