@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,82 +0,0 @@
1
- import { Meta } from "@storybook/react";
2
- import React from "react";
3
- import Loader, { LoaderProps } from "./Loader";
4
-
5
- export default {
6
- title: "ds-react/Loader",
7
- component: Loader,
8
- argTypes: {
9
- size: {
10
- control: {
11
- type: "radio",
12
- options: [
13
- "3xlarge",
14
- "2xlarge",
15
- "xlarge",
16
- "large",
17
- "medium",
18
- "small",
19
- "xsmall",
20
- ],
21
- },
22
- },
23
- variant: {
24
- control: {
25
- type: "radio",
26
- options: ["neutral", "interaction", "inverted"],
27
- },
28
- },
29
- },
30
- } as Meta;
31
-
32
- export const Default = {
33
- render: (props: LoaderProps) => {
34
- return <Loader {...props} />;
35
- },
36
-
37
- args: {
38
- transparent: false,
39
- },
40
- };
41
-
42
- export const Size = () => (
43
- <div>
44
- <Loader size="3xlarge" />
45
- <Loader size="2xlarge" />
46
- <Loader size="xlarge" />
47
- <Loader size="large" />
48
- <Loader size="medium" />
49
- <Loader size="small" />
50
- <Loader size="xsmall" />
51
- </div>
52
- );
53
-
54
- export const Variant = () => (
55
- <div className="colgap">
56
- <div>
57
- <Loader size="3xlarge" variant="neutral" />
58
- <Loader size="3xlarge" variant="inverted" />
59
- <Loader size="3xlarge" variant="interaction" />
60
- </div>
61
- <div style={{ backgroundColor: "#23262a" }}>
62
- <Loader size="3xlarge" variant="neutral" />
63
- <Loader size="3xlarge" variant="inverted" />
64
- <Loader size="3xlarge" variant="interaction" />
65
- </div>
66
- </div>
67
- );
68
-
69
- export const Transparent = () => (
70
- <div className="colgap">
71
- <div>
72
- <Loader size="3xlarge" transparent variant="neutral" />
73
- <Loader size="3xlarge" transparent variant="inverted" />
74
- <Loader size="3xlarge" transparent variant="interaction" />
75
- </div>
76
- <div style={{ backgroundColor: "#23262a" }}>
77
- <Loader size="3xlarge" transparent variant="neutral" />
78
- <Loader size="3xlarge" transparent variant="inverted" />
79
- <Loader size="3xlarge" transparent variant="interaction" />
80
- </div>
81
- </div>
82
- );
@@ -1,391 +0,0 @@
1
- import { Meta, StoryFn } from "@storybook/react";
2
- import React, { useRef, useState } from "react";
3
- import { FileIcon } from "@navikt/aksel-icons";
4
- import { Button } from "../button";
5
- import { Checkbox, CheckboxGroup } from "../form/checkbox";
6
- import { VStack } from "../layout/stack";
7
- import { Tooltip } from "../tooltip";
8
- import { BodyLong, Heading } from "../typography";
9
- import Modal from "./Modal";
10
-
11
- const meta: Meta<typeof Modal> = {
12
- title: "ds-react/Modal",
13
- component: Modal,
14
- parameters: {
15
- chromatic: { pauseAnimationAtEnd: true },
16
- },
17
- };
18
- export default meta;
19
-
20
- export const WithUseRef: StoryFn = () => {
21
- const ref = useRef<HTMLDialogElement>(null);
22
- const ref2 = useRef<HTMLDialogElement>(null);
23
-
24
- return (
25
- <div>
26
- <Button onClick={() => ref.current?.showModal()}>Open Modal</Button>
27
- <Modal
28
- open={ref.current ? undefined : true /* initially open */}
29
- onClose={() => null}
30
- ref={ref}
31
- header={{
32
- label: "Optional label",
33
- icon: <FileIcon aria-hidden />,
34
- heading: "Title",
35
- size: "small",
36
- }}
37
- closeOnBackdropClick
38
- >
39
- <Modal.Body>
40
- <BodyLong spacing>
41
- Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do
42
- eiusmod tempor incididunt ut labore et dolore magna aliqua. Ut enim
43
- ad minim veniam, quis nostrud exercitation ullamco laboris nisi ut
44
- aliquip ex ea commodo consequat. Duis aute irure dolor in
45
- reprehenderit in voluptate velit esse cillum dolore eu fugiat nulla
46
- pariatur. Excepteur sint occaecat cupidatat non proident, sunt in
47
- culpa qui officia deserunt mollit anim id est laborum.
48
- </BodyLong>
49
-
50
- {/* Nested modal */}
51
- <Modal
52
- ref={ref2}
53
- onBeforeClose={() =>
54
- window.confirm("Are you sure you want to close the modal?")
55
- }
56
- closeOnBackdropClick
57
- aria-labelledby="heading123"
58
- >
59
- <Modal.Header>
60
- <Heading size="medium" level="2" id="heading123">
61
- Custom header
62
- </Heading>
63
- </Modal.Header>
64
- <Modal.Body>
65
- Nesting modals is not recommended, but works in most cases.
66
- </Modal.Body>
67
- <Modal.Footer>
68
- <Button onClick={() => ref2.current?.close()}>
69
- Close w/o confirm
70
- </Button>
71
- </Modal.Footer>
72
- </Modal>
73
-
74
- <BodyLong>
75
- Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do
76
- eiusmod tempor incididunt ut labore et dolore magna aliqua. Ut enim
77
- ad minim veniam, quis nostrud exercitation ullamco laboris nisi ut
78
- aliquip ex ea commodo consequat. Duis aute irure dolor in
79
- reprehenderit in voluptate velit esse cillum dolore eu fugiat nulla
80
- pariatur. Excepteur sint occaecat cupidatat non proident, sunt in
81
- culpa qui officia deserunt mollit anim id est laborum.
82
- </BodyLong>
83
- </Modal.Body>
84
- <Modal.Footer>
85
- <Button>Primary</Button>
86
- <Button variant="secondary" onClick={() => ref2.current?.showModal()}>
87
- Secondary
88
- </Button>
89
- <Button variant="tertiary">Tertiary</Button>
90
- </Modal.Footer>
91
- </Modal>
92
- </div>
93
- );
94
- };
95
- WithUseRef.storyName = "With useRef";
96
-
97
- export const WithUseState: StoryFn = () => {
98
- const [open, setOpen] = useState(true);
99
- const [open2, setOpen2] = useState(false);
100
-
101
- return (
102
- <div style={{ minHeight: "1000px", display: "flex", alignItems: "center" }}>
103
- <div style={{ display: "flex", gap: "1em" }}>
104
- <Button variant="secondary">Button</Button>
105
- <Button onClick={() => setOpen(true)}>Open Modal</Button>
106
- <Button variant="secondary">Button</Button>
107
- </div>
108
- <Modal
109
- header={{ heading: "Simple header" }}
110
- open={open}
111
- onClose={() => setOpen(false)}
112
- width={400}
113
- >
114
- <Modal.Body>
115
- This modal has width set to 400.
116
- {/* Nested modal */}
117
- <Modal
118
- open={open2}
119
- onClose={(e) => {
120
- e.stopPropagation(); // onClose wil propagate to parent modal if not stopped
121
- setOpen2(false);
122
- }}
123
- closeOnBackdropClick
124
- aria-label="Nested modal"
125
- width={800}
126
- >
127
- <Modal.Body>
128
- <BodyLong spacing>
129
- Nesting modals is not recommended, but works in most cases. This
130
- one does not have header or footer, but is bigger than the
131
- parent modal.
132
- </BodyLong>
133
- <BodyLong spacing>Width is set to 800.</BodyLong>
134
- <Button onClick={() => setOpen2(false)}>Close</Button>
135
- </Modal.Body>
136
- </Modal>
137
- </Modal.Body>
138
- <Modal.Footer>
139
- <Button onClick={() => setOpen2(true)}>Primary</Button>
140
- <Button variant="secondary" onClick={() => setOpen(false)}>
141
- Cancel
142
- </Button>
143
- </Modal.Footer>
144
- </Modal>
145
- </div>
146
- );
147
- };
148
- WithUseState.storyName = "With useState";
149
- WithUseState.parameters = { chromatic: { disable: true } };
150
-
151
- export const EmptyHeader: StoryFn = () => (
152
- <Modal open onClose={() => null} aria-label="Modal with empty header">
153
- <Modal.Header />
154
- <Modal.Body>
155
- Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do eiusmod
156
- tempor incididunt ut labore et dolore magna aliqua. Ut enim ad minim
157
- veniam, quis nostrud exercitation ullamco laboris nisi ut aliquip ex ea
158
- commodo consequat. Duis aute irure dolor in reprehenderit in voluptate
159
- velit esse cillum dolore eu fugiat nulla pariatur. Excepteur sint occaecat
160
- cupidatat non proident, sunt in culpa qui officia deserunt mollit anim id
161
- est laborum.
162
- </Modal.Body>
163
- </Modal>
164
- );
165
-
166
- export const Small: StoryFn = () => (
167
- <Modal
168
- open
169
- onClose={() => null}
170
- width="small"
171
- header={{ heading: "Simple header" }}
172
- >
173
- <Modal.Body>Lorem ipsum dolor sit amet.</Modal.Body>
174
- </Modal>
175
- );
176
- Small.storyName = "Size = Small";
177
-
178
- export const MediumWithPortal: StoryFn = () => (
179
- <Modal
180
- open
181
- onClose={() => null}
182
- portal
183
- width="medium"
184
- header={{ heading: "Simple header" }}
185
- >
186
- <Modal.Body>Lorem ipsum dolor sit amet.</Modal.Body>
187
- </Modal>
188
- );
189
- MediumWithPortal.storyName = "Size = Medium (with portal)";
190
-
191
- export const Large800: StoryFn = () => (
192
- <Modal
193
- open
194
- onClose={() => null}
195
- width={800}
196
- header={{ heading: "Simple header" }}
197
- >
198
- <Modal.Body>Lorem ipsum dolor sit amet.</Modal.Body>
199
- </Modal>
200
- );
201
- Large800.storyName = "Size = 800px";
202
-
203
- export const WithTooltip: StoryFn = () => {
204
- const ref = useRef<HTMLDialogElement>(null);
205
-
206
- return (
207
- <div>
208
- <Button onClick={() => ref.current?.showModal()}>Open Modal</Button>
209
- <Modal
210
- open={ref.current ? undefined : true /* initially open */}
211
- onClose={() => null}
212
- ref={ref}
213
- aria-label="Tooltip test"
214
- >
215
- <Modal.Body>
216
- <div style={{ marginBottom: "1rem" }}>
217
- <Tooltip content="This_is_the_first_tooltip">
218
- <Button>Test 1</Button>
219
- </Tooltip>
220
- </div>
221
- <Tooltip content="This is the second tooltip">
222
- <Button>Test 2</Button>
223
- </Tooltip>
224
- </Modal.Body>
225
- </Modal>
226
- </div>
227
- );
228
- };
229
- WithTooltip.parameters = { chromatic: { disable: true } }; // The tooltip behaves unpredictably in Chromatic
230
-
231
- export const WithSrOnlyElement: StoryFn = () => (
232
- <Modal
233
- open
234
- onClose={() => null}
235
- width={300}
236
- header={{ heading: "Simple header" }}
237
- >
238
- <Modal.Body>
239
- <VStack gap="16">
240
- <BodyLong>
241
- The modal body needs to have position:relative to make sr-only
242
- elements position themselves correctly when the modal body is
243
- overflowing (i.e. has a scrollbar).
244
- </BodyLong>
245
- <BodyLong>
246
- If the modal body (and other parents of the sr-only element inside the
247
- modal body) does not have position:relative (or equivalent), the
248
- sr-only element is pushed downwards relative to the height of the
249
- overflowing content.
250
- </BodyLong>
251
- <BodyLong>
252
- In the most extreme cases, an additional scrollbar appears bc. the
253
- dialog element (parent of modal body) starts overflowing. (We have
254
- overflow:auto on the dialog element in case you are on a small screen
255
- and header/footer has a lot of content.)
256
- </BodyLong>
257
- <BodyLong>Example: CheckboxGroup with a hidden legend:</BodyLong>
258
- <CheckboxGroup legend="What fruits do you like?" hideLegend>
259
- <Checkbox>Banana</Checkbox>
260
- <Checkbox>Apple</Checkbox>
261
- <Checkbox>Orange</Checkbox>
262
- <Checkbox>Pear</Checkbox>
263
- </CheckboxGroup>
264
- <BodyLong>
265
- Try to remove position:relative from the modal body and see what
266
- happens. (Use DevTools to find the legend element.) You might need to
267
- make the viewport shorter to get the full effect (double scrollbar).
268
- </BodyLong>
269
- <BodyLong>
270
- Note: The large amount of gap has been added on purpose to force
271
- overflow.
272
- </BodyLong>
273
- </VStack>
274
- </Modal.Body>
275
- <Modal.Footer>
276
- <Button variant="secondary">Dummy button</Button>
277
- </Modal.Footer>
278
- </Modal>
279
- );
280
-
281
- export const ChromaticViewportTesting: StoryFn = () => (
282
- <div id="modal-story-wrapper" style={{ width: "100vw", height: "100vh" }}>
283
- <style>{`#storybook-root { padding: 0 !important }`}</style>
284
- <Modal
285
- open
286
- onClose={() => null}
287
- header={{ heading: "Chromatic Viewports Testing", label: "Test" }}
288
- >
289
- <Modal.Body>
290
- <BodyLong spacing>
291
- This story is tailored for testing the breakpoints with Chromatic.
292
- </BodyLong>
293
- <BodyLong spacing>
294
- Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do
295
- eiusmod tempor incididunt ut labore et dolore magna aliqua. Ut enim ad
296
- minim veniam, quis nostrud exercitation ullamco laboris nisi ut
297
- aliquip ex ea commodo consequat.
298
- </BodyLong>
299
- <BodyLong spacing>
300
- Duis aute irure dolor in reprehenderit in voluptate velit esse cillum
301
- dolore eu fugiat nulla pariatur. Excepteur sint occaecat cupidatat non
302
- proident, sunt in culpa qui officia deserunt mollit anim id est
303
- laborum.
304
- </BodyLong>
305
- <BodyLong>
306
- Sed ut perspiciatis unde omnis iste natus error sit voluptatem
307
- accusantium doloremque laudantium, totam rem aperiam, eaque ipsa quae
308
- ab illo inventore veritatis et quasi architecto beatae vitae dicta
309
- sunt explicabo.
310
- </BodyLong>
311
- </Modal.Body>
312
- <Modal.Footer>
313
- <Button>Primary</Button>
314
- <Button variant="secondary">Secondary</Button>
315
- <Button variant="tertiary">Tertiary</Button>
316
- </Modal.Footer>
317
- </Modal>
318
- </div>
319
- );
320
- ChromaticViewportTesting.parameters = {
321
- chromatic: {
322
- modes: {
323
- mobile_portrait: {
324
- viewport: {
325
- width: 400,
326
- height: 850,
327
- },
328
- },
329
- mobile_landscape: {
330
- viewport: {
331
- width: 850,
332
- height: 400,
333
- },
334
- },
335
- },
336
- },
337
- };
338
-
339
- // For testing TS error messages:
340
-
341
- /* const PropTypeTest = () => {
342
- return (
343
- <>
344
- <Modal header={{ heading: "Label" }}>OK</Modal>
345
-
346
- <Modal header={{ heading: "Label" }} aria-label="Label">
347
- OK
348
- </Modal>
349
-
350
- <Modal header={{ heading: "Label" }} aria-labelledby="Label">
351
- OK
352
- </Modal>
353
-
354
- <Modal aria-label="Label">OK</Modal>
355
-
356
- <Modal aria-labelledby="Label">OK</Modal>
357
-
358
- <Modal aria-label="Label" open onClose={() => null}>
359
- OK
360
- </Modal>
361
-
362
- <Modal>Mangler label</Modal>
363
-
364
- <Modal open>Mangler onClose eller label</Modal>
365
-
366
- <Modal open aria-label="Label">
367
- Mangler onClose
368
- </Modal>
369
-
370
- <Modal open onClose={() => null}>
371
- Mangler label
372
- </Modal>
373
-
374
- <Modal header={{ heading: "Label" }} open>
375
- Mangler onClose
376
- </Modal>
377
-
378
- <Modal
379
- header={{ heading: "Label" }}
380
- aria-label="Label"
381
- aria-labelledby="Label"
382
- >
383
- For mange labels
384
- </Modal>
385
-
386
- <Modal aria-label="Label" aria-labelledby="Label">
387
- For mange labels
388
- </Modal>
389
- </>
390
- );
391
- }; */
@@ -1,110 +0,0 @@
1
- import React, { useState } from "react";
2
- import { Link, HashRouter as Router } from "react-router-dom";
3
- import Pagination from "./Pagination";
4
-
5
- export default {
6
- title: "ds-react/Pagination",
7
- component: Pagination,
8
- argTypes: {
9
- size: {
10
- control: {
11
- type: "radio",
12
- options: ["medium", "small", "xsmall"],
13
- },
14
- },
15
- },
16
- };
17
-
18
- export const Default = (props: any) => {
19
- const [page, setPage] = useState(props.page);
20
- return <Pagination {...props} page={page} onPageChange={setPage} />;
21
- };
22
- Default.args = {
23
- page: 2,
24
- count: 8,
25
- siblingCount: 1,
26
- boundaryCount: 1,
27
- prevNextTexts: false,
28
- };
29
-
30
- export const PrevNextText = () => {
31
- const [page, setPage] = useState(1);
32
- const props = {
33
- page: 1,
34
- count: 8,
35
- siblingCount: 1,
36
- boundaryCount: 1,
37
- };
38
- return (
39
- <div className="colgap" style={{ alignItems: "center" }}>
40
- <Pagination {...props} page={page} onPageChange={setPage} prevNextTexts />
41
- <Pagination
42
- {...props}
43
- page={page}
44
- onPageChange={setPage}
45
- prevNextTexts
46
- size="small"
47
- />
48
- <Pagination
49
- {...props}
50
- page={page}
51
- onPageChange={setPage}
52
- prevNextTexts
53
- size="xsmall"
54
- />
55
- </div>
56
- );
57
- };
58
-
59
- export const Small = () => {
60
- const [page, setPage] = useState(1);
61
- const props = {
62
- page: 1,
63
- count: 8,
64
- siblingCount: 1,
65
- boundaryCount: 1,
66
- };
67
- return (
68
- <Pagination {...props} page={page} onPageChange={setPage} size="small" />
69
- );
70
- };
71
-
72
- export const XSmall = () => {
73
- const [page, setPage] = useState(1);
74
- const props = {
75
- page: 1,
76
- count: 8,
77
- siblingCount: 1,
78
- boundaryCount: 1,
79
- };
80
- return (
81
- <Pagination {...props} page={page} onPageChange={setPage} size="xsmall" />
82
- );
83
- };
84
-
85
- export const AsLink = () => {
86
- const [page, setPage] = useState(1);
87
- const props = {
88
- page: 1,
89
- count: 8,
90
- siblingCount: 1,
91
- boundaryCount: 1,
92
- };
93
- return (
94
- <Pagination
95
- {...props}
96
- page={page}
97
- onPageChange={setPage}
98
- renderItem={(item) => (
99
- <Pagination.Item {...item} as={Link} to={`?page=${item.page}`} />
100
- )}
101
- />
102
- );
103
- };
104
- AsLink.decorators = [
105
- (Story) => (
106
- <Router>
107
- <Story />
108
- </Router>
109
- ),
110
- ];
@@ -1,113 +0,0 @@
1
- import React, { useState } from "react";
2
- import { Button } from "../button";
3
- import Popover from "./Popover";
4
-
5
- const placements = [
6
- "top",
7
- "bottom",
8
- "right",
9
- "left",
10
- "top-start",
11
- "top-end",
12
- "bottom-start",
13
- "bottom-end",
14
- "right-start",
15
- "right-end",
16
- "left-start",
17
- "left-end",
18
- ];
19
- export default {
20
- title: "ds-react/Popover",
21
- component: Popover,
22
- parameters: {
23
- chromatic: { disable: true },
24
- },
25
- argTypes: {
26
- open: {
27
- control: { type: "boolean" },
28
- },
29
- arrow: {
30
- control: { type: "boolean" },
31
- },
32
- offset: {
33
- control: { type: "number" },
34
- },
35
- strategy: {
36
- defaultValue: "absolute",
37
- options: ["fixed", "absolute"],
38
- control: { type: "radio" },
39
- },
40
- placement: {
41
- defaultValue: "right",
42
- options: placements,
43
- control: { type: "radio" },
44
- },
45
- },
46
- };
47
-
48
- export const Default = (props: any) => {
49
- const [anchorEl, setAnchorEl] = useState<HTMLButtonElement | null>();
50
- const [open, setOpen] = useState(false);
51
- return (
52
- <div tabIndex={-1}>
53
- <Button ref={(el) => setAnchorEl(el)} onClick={() => setOpen((x) => !x)}>
54
- Open
55
- </Button>
56
- <Popover
57
- {...props}
58
- open={props.open ?? open}
59
- anchorEl={anchorEl}
60
- onClose={() => setOpen(false)}
61
- >
62
- <Popover.Content>Velit in consequat</Popover.Content>
63
- </Popover>
64
- &nbsp;
65
- <Button variant="secondary">Another button</Button>
66
- </div>
67
- );
68
- };
69
-
70
- const Template = (props) => {
71
- const [anchorEl, setAnchorEl] = useState<HTMLButtonElement | null>(null);
72
-
73
- return (
74
- <>
75
- <Button ref={(el) => setAnchorEl(el)}>X</Button>
76
- <Popover {...props} open anchorEl={anchorEl}>
77
- <Popover.Content>
78
- Velit in consequat Lorem
79
- <br />
80
- {props.placement}
81
- </Popover.Content>
82
- </Popover>
83
- </>
84
- );
85
- };
86
-
87
- export const Placement = () => {
88
- return (
89
- <div className="colgap" style={{ gap: "12rem" }}>
90
- {placements.map((placement) => (
91
- <Template key={placement} placement={placement} />
92
- ))}
93
- </div>
94
- );
95
- };
96
-
97
- export const Arrow = () => {
98
- return (
99
- <div className="colgap" style={{ gap: "12rem" }}>
100
- <Template arrow />
101
- <Template arrow={false} />
102
- </div>
103
- );
104
- };
105
-
106
- export const Offset = () => {
107
- return (
108
- <div className="colgap" style={{ gap: "12rem" }}>
109
- <Template arrow offset={30} />
110
- <Template arrow={false} offset={30} />
111
- </div>
112
- );
113
- };