@navikt/ds-react 5.18.1 → 5.18.3

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 (53) hide show
  1. package/cjs/date/parts/DateWrapper.js +2 -2
  2. package/cjs/form/search/Search.js +1 -1
  3. package/cjs/modal/Modal.context.js +9 -0
  4. package/cjs/modal/Modal.js +3 -6
  5. package/cjs/modal/ModalHeader.js +2 -6
  6. package/cjs/popover/Popover.js +2 -2
  7. package/cjs/tooltip/Tooltip.js +3 -3
  8. package/cjs/util/create-context.js +9 -5
  9. package/esm/date/parts/DateWrapper.js +3 -3
  10. package/esm/date/parts/DateWrapper.js.map +1 -1
  11. package/esm/form/search/Search.js +1 -1
  12. package/esm/modal/Modal.context.d.ts +9 -0
  13. package/esm/modal/Modal.context.js +6 -0
  14. package/esm/modal/Modal.context.js.map +1 -0
  15. package/esm/modal/Modal.js +3 -6
  16. package/esm/modal/Modal.js.map +1 -1
  17. package/esm/modal/ModalHeader.js +3 -7
  18. package/esm/modal/ModalHeader.js.map +1 -1
  19. package/esm/popover/Popover.js +2 -2
  20. package/esm/popover/Popover.js.map +1 -1
  21. package/esm/tooltip/Tooltip.js +4 -4
  22. package/esm/tooltip/Tooltip.js.map +1 -1
  23. package/esm/util/create-context.d.ts +2 -5
  24. package/esm/util/create-context.js +10 -6
  25. package/esm/util/create-context.js.map +1 -1
  26. package/package.json +3 -3
  27. package/src/accordion/accordion.stories.tsx +121 -135
  28. package/src/chat/chat.stories.tsx +284 -206
  29. package/src/date/parts/DateWrapper.tsx +3 -3
  30. package/src/form/search/Search.tsx +3 -3
  31. package/src/modal/Modal.context.ts +13 -0
  32. package/src/modal/Modal.tsx +6 -8
  33. package/src/modal/ModalHeader.tsx +3 -7
  34. package/src/popover/Popover.tsx +2 -2
  35. package/src/table/stories/{table.stories.tsx → table-1.stories.tsx} +117 -94
  36. package/src/table/stories/{table-expandable.stories.tsx → table-2-expandable.stories.tsx} +6 -32
  37. package/src/table/stories/{table-async.stories.tsx → table-3-async.stories.tsx} +1 -1
  38. package/src/table/stories/tests/table.stories.tsx +3 -0
  39. package/src/tabs/Tabs.test.tsx +109 -0
  40. package/src/toggle-group/ToggleGroup.test.tsx +54 -0
  41. package/src/tooltip/Tooltip.tsx +4 -10
  42. package/src/typography/stories/bodylong.stories.tsx +47 -1
  43. package/src/typography/stories/bodyshort.stories.tsx +48 -2
  44. package/src/typography/stories/detail.stories.tsx +30 -1
  45. package/src/typography/stories/error-message.stories.tsx +32 -1
  46. package/src/typography/stories/heading.stories.tsx +30 -1
  47. package/src/typography/stories/label.stories.tsx +36 -1
  48. package/src/util/create-context.tsx +26 -15
  49. package/cjs/modal/ModalContext.js +0 -8
  50. package/esm/modal/ModalContext.d.ts +0 -7
  51. package/esm/modal/ModalContext.js +0 -3
  52. package/esm/modal/ModalContext.js.map +0 -1
  53. package/src/modal/ModalContext.ts +0 -7
@@ -1,6 +1,6 @@
1
+ import { StoryObj } from "@storybook/react";
1
2
  import React, { useState } from "react";
2
3
  import { Accordion, AccordionProps } from ".";
3
- import { Table } from "../table";
4
4
  import AccordionContent from "./AccordionContent";
5
5
  import AccordionHeader from "./AccordionHeader";
6
6
  import AccordionItem from "./AccordionItem";
@@ -13,13 +13,15 @@ export default {
13
13
  AccordionContent,
14
14
  AccordionHeader,
15
15
  },
16
+ parameters: {
17
+ chromatic: { disable: true },
18
+ },
16
19
  decorators: [
17
20
  (Story) => (
18
21
  <div
19
22
  style={{
20
23
  width: "600px",
21
24
  minHeight: "100vh",
22
- padding: "10rem 0",
23
25
  display: "flex",
24
26
  flexDirection: "column",
25
27
  gap: "1rem",
@@ -29,25 +31,10 @@ export default {
29
31
  </div>
30
32
  ),
31
33
  ],
32
- argTypes: {
33
- variant: {
34
- options: ["default", "neutral"],
35
- control: { type: "select" },
36
- },
37
- headingSize: {
38
- options: ["large", "medium", "small", "xsmall"],
39
- control: { type: "select" },
40
- },
41
- size: {
42
- options: ["large", "medium", "small"],
43
- control: { type: "select" },
44
- },
45
- nItems: {
46
- control: { type: "number" },
47
- },
48
- },
49
34
  };
50
35
 
36
+ type Story = StoryObj<typeof Accordion>;
37
+
51
38
  const Content = () => (
52
39
  <Accordion.Content>
53
40
  Magna aliquip aliquip fugiat nostrud nostrud velit pariatur veniam officia
@@ -103,22 +90,34 @@ const Item = (props) => {
103
90
  );
104
91
  };
105
92
 
106
- export const Default = {
107
- render: ({ nItems, ...props }) => {
93
+ export const Controls: Story = {
94
+ render: ({ ...props }) => {
108
95
  return (
109
96
  <div style={{ width: 500 }}>
110
97
  <Accordion {...props}>
111
- {[...Array(nItems ? nItems : 2)].map((_, y) => (
98
+ {[...Array(4)].map((_, y) => (
112
99
  <Item key={y} {...props} />
113
100
  ))}
114
101
  </Accordion>
115
102
  </div>
116
103
  );
117
104
  },
105
+ argTypes: {
106
+ variant: {
107
+ options: ["default", "neutral"],
108
+ control: { type: "select" },
109
+ },
110
+ headingSize: {
111
+ options: ["large", "medium", "small", "xsmall"],
112
+ control: { type: "select" },
113
+ },
114
+ size: {
115
+ options: ["large", "medium", "small"],
116
+ control: { type: "select" },
117
+ },
118
+ },
118
119
 
119
120
  args: {
120
- controlled: false,
121
- nItems: 2,
122
121
  variant: "default",
123
122
  headingSize: "medium",
124
123
  size: "medium",
@@ -126,37 +125,31 @@ export const Default = {
126
125
  },
127
126
  };
128
127
 
129
- export const DefaultOpen = {
130
- render: ({ nItems, openItems, ...props }) => {
128
+ export const DefaultOpen: Story = {
129
+ render: () => {
131
130
  return (
132
131
  <div style={{ width: 500 }}>
133
- <Accordion {...props}>
134
- {[...Array(nItems ? nItems : 2)].map((_, y) => (
135
- <Item key={y} defaultOpen={openItems.includes(y)} {...props} />
132
+ <Accordion>
133
+ {[...Array(4)].map((_, y) => (
134
+ <Item key={y} defaultOpen={y === 2} />
136
135
  ))}
137
136
  </Accordion>
138
137
  </div>
139
138
  );
140
139
  },
141
-
142
- args: {
143
- openItems: [1, 2],
144
- controlled: false,
145
- nItems: 5,
146
- variant: "neutral",
147
- headingSize: "large",
148
- },
149
140
  };
150
141
 
151
- export const Variants = {
142
+ export const Variants: Story = {
152
143
  render: () => {
153
144
  return (
154
145
  <div style={{ width: 500 }} className="colgap">
146
+ <h3>Default</h3>
155
147
  <Accordion>
156
148
  {[...Array(2)].map((_, y) => (
157
149
  <Item key={y} defaultOpen />
158
150
  ))}
159
151
  </Accordion>
152
+ <h3>Neutral</h3>
160
153
  <Accordion variant="neutral">
161
154
  {[...Array(2)].map((_, y) => (
162
155
  <Item key={y} defaultOpen />
@@ -167,96 +160,32 @@ export const Variants = {
167
160
  },
168
161
  };
169
162
 
170
- export const Controlled = (props) => {
171
- const [open, setOpen] = useState(false);
172
- const [open2, setOpen2] = useState(false);
173
-
174
- return (
175
- <div style={{ width: 500 }}>
176
- <Accordion {...props}>
177
- <Accordion.Item open={open}>
178
- <Accordion.Header onClick={() => setOpen(!open)}>
179
- Accordion header text
180
- </Accordion.Header>
181
- <Content />
182
- </Accordion.Item>
183
- <Accordion.Item open={open2}>
184
- <Accordion.Header onClick={() => setOpen2(!open2)}>
185
- Accordion header text
186
- </Accordion.Header>
187
- <Content />
188
- </Accordion.Item>
189
- </Accordion>
190
- </div>
191
- );
192
- };
193
-
194
- export const WithTable = {
195
- render: (props) => {
196
- const ExampleTable = () => {
197
- return (
198
- <Table>
199
- <Table.Header>
200
- <Table.Row>
201
- <Table.HeaderCell>ID</Table.HeaderCell>
202
- <Table.HeaderCell>Fornavn</Table.HeaderCell>
203
- <Table.HeaderCell>Etternavn</Table.HeaderCell>
204
- <Table.HeaderCell>Rolle</Table.HeaderCell>
205
- </Table.Row>
206
- </Table.Header>
207
- <Table.Body>
208
- <Table.Row>
209
- <Table.HeaderCell>1</Table.HeaderCell>
210
- <Table.DataCell>Jean-Luc</Table.DataCell>
211
- <Table.DataCell>Picard</Table.DataCell>
212
- <Table.DataCell>Kaptein</Table.DataCell>
213
- </Table.Row>
214
- <Table.Row>
215
- <Table.HeaderCell>2</Table.HeaderCell>
216
- <Table.DataCell>William</Table.DataCell>
217
- <Table.DataCell>Riker</Table.DataCell>
218
- <Table.DataCell>Kommandør</Table.DataCell>
219
- </Table.Row>
220
- <Table.Row>
221
- <Table.HeaderCell>3</Table.HeaderCell>
222
- <Table.DataCell>Geordi</Table.DataCell>
223
- <Table.DataCell>La Forge</Table.DataCell>
224
- <Table.DataCell>Sjefsingeniør</Table.DataCell>
225
- </Table.Row>
226
- </Table.Body>
227
- </Table>
228
- );
229
- };
230
-
231
- const ContentWithTable = () => {
232
- return (
233
- <Accordion.Content>
234
- <ExampleTable />
235
- </Accordion.Content>
236
- );
237
- };
163
+ export const ControlledState: Story = {
164
+ render: () => {
165
+ // eslint-disable-next-line react-hooks/rules-of-hooks
166
+ const [open, setOpen] = useState(false);
167
+ // eslint-disable-next-line react-hooks/rules-of-hooks
168
+ const [open2, setOpen2] = useState(false);
238
169
 
239
170
  return (
240
171
  <div style={{ width: 500 }}>
241
- <Accordion {...props}>
242
- <Accordion.Item>
243
- <Accordion.Header>Table of people</Accordion.Header>
244
- <ContentWithTable />
172
+ <Accordion>
173
+ <Accordion.Item open={open}>
174
+ <Accordion.Header onClick={() => setOpen(!open)}>
175
+ Accordion header text
176
+ </Accordion.Header>
177
+ <Content />
245
178
  </Accordion.Item>
246
- <Accordion.Item>
247
- <Accordion.Header>Table of people</Accordion.Header>
248
- <ContentWithTable />
179
+ <Accordion.Item open={open2}>
180
+ <Accordion.Header onClick={() => setOpen2(!open2)}>
181
+ Accordion header text
182
+ </Accordion.Header>
183
+ <Content />
249
184
  </Accordion.Item>
250
185
  </Accordion>
251
186
  </div>
252
187
  );
253
188
  },
254
-
255
- args: {
256
- variant: "default",
257
- headingSize: "large",
258
- indent: false,
259
- },
260
189
  };
261
190
 
262
191
  const SingleHeaderAccordion = ({
@@ -269,9 +198,11 @@ const SingleHeaderAccordion = ({
269
198
  <Accordion.Header>{`${size} size + ${headingSize} heading`}</Accordion.Header>
270
199
  <Accordion.Content>a</Accordion.Content>
271
200
  </Accordion.Item>
272
- <Accordion.Item>
201
+ <Accordion.Item open>
273
202
  <Accordion.Header>{`${size} size + ${headingSize} heading`}</Accordion.Header>
274
- <Accordion.Content>a</Accordion.Content>
203
+ <Accordion.Content>
204
+ lorem ipsum dolor sit amet, consectetur adipiscing elit.
205
+ </Accordion.Content>
275
206
  </Accordion.Item>
276
207
  </Accordion>
277
208
  );
@@ -285,18 +216,73 @@ const headingSizes: AccordionProps["headingSize"][] = [
285
216
  "xsmall",
286
217
  ];
287
218
 
288
- export const Size = (props) => (
289
- <div style={{ width: 500 }} className="colgap">
290
- {sizes.map((size) => (
291
- <SingleHeaderAccordion key={size} size={size} {...props} />
292
- ))}
293
- </div>
294
- );
219
+ export const Size: Story = {
220
+ render: () => (
221
+ <div style={{ width: 500 }} className="colgap">
222
+ {sizes.map((size) => (
223
+ <SingleHeaderAccordion key={size} size={size} />
224
+ ))}
225
+ </div>
226
+ ),
227
+ };
295
228
 
296
- export const HeadingSize = (props) => (
297
- <div style={{ width: 500 }} className="colgap">
298
- {headingSizes.map((size) => (
299
- <SingleHeaderAccordion key={size} headingSize={size} {...props} />
300
- ))}
301
- </div>
302
- );
229
+ export const HeadingSize: Story = {
230
+ render: () => (
231
+ <div style={{ width: 500 }} className="colgap">
232
+ {headingSizes.map((size) => (
233
+ <SingleHeaderAccordion key={size} headingSize={size} />
234
+ ))}
235
+ </div>
236
+ ),
237
+ };
238
+
239
+ export const Indent: Story = {
240
+ render: () => {
241
+ return (
242
+ <div style={{ width: 500 }} className="colgap">
243
+ <h3>No indent</h3>
244
+ <Accordion indent>
245
+ {[...Array(2)].map((_, y) => (
246
+ <Item key={y} defaultOpen />
247
+ ))}
248
+ </Accordion>
249
+ <h3>Indent</h3>
250
+ <Accordion indent={false}>
251
+ {[...Array(2)].map((_, y) => (
252
+ <Item key={y} defaultOpen />
253
+ ))}
254
+ </Accordion>
255
+ </div>
256
+ );
257
+ },
258
+ };
259
+
260
+ export const Chromatic: Story = {
261
+ render: (...props) => (
262
+ <div>
263
+ <div>
264
+ <h2>Variants</h2>
265
+ {Variants.render?.(...props)}
266
+ </div>
267
+ <div>
268
+ <h2>Size</h2>
269
+ {Size.render?.(...props)}
270
+ </div>
271
+ <div>
272
+ <h2>HeadingSize</h2>
273
+ {HeadingSize.render?.(...props)}
274
+ </div>
275
+ <div>
276
+ <h2>DefaultOpen</h2>
277
+ {DefaultOpen.render?.(...props)}
278
+ </div>
279
+ <div>
280
+ <h2>Indent</h2>
281
+ {Indent.render?.(...props)}
282
+ </div>
283
+ </div>
284
+ ),
285
+ parameters: {
286
+ chromatic: { disable: false },
287
+ },
288
+ };