@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,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
- };