@navikt/ds-react 4.11.2 → 4.12.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 (60) hide show
  1. package/_docs.json +47 -5
  2. package/cjs/alert/Alert.js +1 -0
  3. package/cjs/copybutton/CopyButton.js +7 -3
  4. package/cjs/form/checkbox/Checkbox.js +3 -0
  5. package/cjs/form/combobox/Combobox.js +3 -2
  6. package/cjs/form/combobox/FilteredOptions/FilteredOptions.js +4 -5
  7. package/cjs/form/combobox/FilteredOptions/filteredOptionsContext.js +17 -9
  8. package/cjs/form/combobox/Input/Input.js +8 -4
  9. package/cjs/form/combobox/Input/inputContext.js +3 -1
  10. package/cjs/form/combobox/SelectedOptions/selectedOptionsContext.js +18 -12
  11. package/cjs/form/combobox/customOptionsContext.js +10 -2
  12. package/cjs/list/List.js +9 -5
  13. package/cjs/list/ListItem.js +4 -6
  14. package/esm/alert/Alert.js +1 -0
  15. package/esm/alert/Alert.js.map +1 -1
  16. package/esm/copybutton/CopyButton.d.ts +5 -0
  17. package/esm/copybutton/CopyButton.js +7 -3
  18. package/esm/copybutton/CopyButton.js.map +1 -1
  19. package/esm/form/checkbox/Checkbox.js +3 -0
  20. package/esm/form/checkbox/Checkbox.js.map +1 -1
  21. package/esm/form/combobox/Combobox.js +4 -3
  22. package/esm/form/combobox/Combobox.js.map +1 -1
  23. package/esm/form/combobox/FilteredOptions/FilteredOptions.js +4 -5
  24. package/esm/form/combobox/FilteredOptions/FilteredOptions.js.map +1 -1
  25. package/esm/form/combobox/FilteredOptions/filteredOptionsContext.js +17 -9
  26. package/esm/form/combobox/FilteredOptions/filteredOptionsContext.js.map +1 -1
  27. package/esm/form/combobox/Input/Input.js +8 -4
  28. package/esm/form/combobox/Input/Input.js.map +1 -1
  29. package/esm/form/combobox/Input/inputContext.d.ts +1 -0
  30. package/esm/form/combobox/Input/inputContext.js +3 -1
  31. package/esm/form/combobox/Input/inputContext.js.map +1 -1
  32. package/esm/form/combobox/SelectedOptions/selectedOptionsContext.js +18 -12
  33. package/esm/form/combobox/SelectedOptions/selectedOptionsContext.js.map +1 -1
  34. package/esm/form/combobox/customOptionsContext.d.ts +1 -0
  35. package/esm/form/combobox/customOptionsContext.js +10 -2
  36. package/esm/form/combobox/customOptionsContext.js.map +1 -1
  37. package/esm/form/combobox/types.d.ts +3 -3
  38. package/esm/list/List.d.ts +7 -1
  39. package/esm/list/List.js +9 -5
  40. package/esm/list/List.js.map +1 -1
  41. package/esm/list/ListItem.js +4 -6
  42. package/esm/list/ListItem.js.map +1 -1
  43. package/package.json +2 -2
  44. package/src/alert/Alert.tsx +1 -0
  45. package/src/alert/alert.stories.tsx +11 -1
  46. package/src/copybutton/CopyButton.tsx +27 -19
  47. package/src/copybutton/copy-button.stories.tsx +10 -0
  48. package/src/form/checkbox/Checkbox.tsx +17 -0
  49. package/src/form/combobox/Combobox.tsx +12 -1
  50. package/src/form/combobox/FilteredOptions/FilteredOptions.tsx +3 -5
  51. package/src/form/combobox/FilteredOptions/filteredOptionsContext.tsx +17 -8
  52. package/src/form/combobox/Input/Input.tsx +13 -4
  53. package/src/form/combobox/Input/inputContext.tsx +4 -1
  54. package/src/form/combobox/SelectedOptions/selectedOptionsContext.tsx +23 -13
  55. package/src/form/combobox/combobox.stories.tsx +90 -2
  56. package/src/form/combobox/customOptionsContext.tsx +10 -2
  57. package/src/form/combobox/types.ts +6 -3
  58. package/src/list/List.tsx +21 -5
  59. package/src/list/ListItem.tsx +4 -10
  60. package/src/list/list.stories.tsx +132 -1
package/src/list/List.tsx CHANGED
@@ -24,6 +24,11 @@ export interface ListProps extends React.HTMLAttributes<HTMLDivElement> {
24
24
  * @default "h3"
25
25
  */
26
26
  headingTag?: React.ElementType<any>;
27
+ /**
28
+ * Changes padding, height and font-size
29
+ * @default medium
30
+ */
31
+ size?: "medium" | "small";
27
32
  }
28
33
 
29
34
  export interface ListComponent
@@ -37,13 +42,15 @@ export interface ListComponent
37
42
  }
38
43
 
39
44
  interface ListContextProps {
40
- listType: "ul" | "ol";
45
+ listType: ListProps["as"];
41
46
  isNested: boolean | null;
47
+ size: ListProps["size"];
42
48
  }
43
49
 
44
50
  export const ListContext = createContext<ListContextProps>({
45
51
  listType: "ul",
46
52
  isNested: null,
53
+ size: "medium",
47
54
  });
48
55
 
49
56
  export const List = forwardRef<HTMLDivElement, ListProps>(
@@ -55,35 +62,44 @@ export const List = forwardRef<HTMLDivElement, ListProps>(
55
62
  title,
56
63
  description,
57
64
  headingTag = "h3",
65
+ size,
58
66
  ...rest
59
67
  },
60
68
  ref
61
69
  ) => {
62
70
  const ariaId = useId();
63
71
 
64
- const { isNested } = useContext(ListContext);
72
+ const { isNested, size: _size } = useContext(ListContext);
65
73
 
74
+ const listSize = size ?? _size ?? "medium";
66
75
  return (
67
76
  <ListContext.Provider
68
77
  value={{
69
78
  listType: ListTag,
70
79
  isNested: isNested === null ? false : true,
80
+ size: listSize,
71
81
  }}
72
82
  >
73
83
  <div
74
84
  {...rest}
75
85
  ref={ref}
76
- className={cl("navds-list", className, {
86
+ className={cl("navds-list", `navds-list--${listSize}`, className, {
77
87
  "navds-list--nested": isNested === null ? false : true,
78
88
  })}
79
89
  >
80
90
  {title && (
81
- <Heading id={`tittel-${ariaId}`} size="small" as={headingTag}>
91
+ <Heading
92
+ id={`tittel-${ariaId}`}
93
+ size={listSize === "medium" ? "small" : "xsmall"}
94
+ as={headingTag}
95
+ >
82
96
  {title}
83
97
  </Heading>
84
98
  )}
85
99
  {description && (
86
- <BodyShort id={`description-${ariaId}`}>{description}</BodyShort>
100
+ <BodyShort size={listSize} id={`description-${ariaId}`}>
101
+ {description}
102
+ </BodyShort>
87
103
  )}
88
104
  <ListTag
89
105
  aria-labelledby={title && `tittel-${ariaId}`}
@@ -20,7 +20,7 @@ export interface ListItemProps extends React.HTMLAttributes<HTMLLIElement> {
20
20
 
21
21
  export const ListItem = forwardRef<HTMLLIElement, ListItemProps>(
22
22
  ({ className, children, title, icon, ...rest }, ref) => {
23
- const { listType, isNested } = useContext(ListContext);
23
+ const { listType, size } = useContext(ListContext);
24
24
 
25
25
  if (listType === "ol" && icon) {
26
26
  console.warn(
@@ -29,13 +29,7 @@ export const ListItem = forwardRef<HTMLLIElement, ListItemProps>(
29
29
  }
30
30
 
31
31
  return (
32
- <li
33
- {...rest}
34
- ref={ref}
35
- className={cl("navds-list__item", className, {
36
- "navds-list__item--noMargin": isNested,
37
- })}
38
- >
32
+ <li {...rest} ref={ref} className={cl("navds-list__item", className)}>
39
33
  {listType === "ul" && (
40
34
  <div
41
35
  className={cl({
@@ -62,9 +56,9 @@ export const ListItem = forwardRef<HTMLLIElement, ListItemProps>(
62
56
  </div>
63
57
  )}
64
58
 
65
- <BodyShort as="div" size="small" className="navds-list__item-content">
59
+ <BodyShort as="div" size={size} className="navds-list__item-content">
66
60
  {title && (
67
- <Label as="p" size="small">
61
+ <Label as="p" size={size}>
68
62
  {title}
69
63
  </Label>
70
64
  )}
@@ -6,7 +6,7 @@ import {
6
6
  } from "@navikt/aksel-icons";
7
7
  import { Meta } from "@storybook/react";
8
8
  import React from "react";
9
- import { List } from "..";
9
+ import { List, VStack } from "..";
10
10
 
11
11
  export default {
12
12
  title: "ds-react/List",
@@ -91,6 +91,137 @@ export const WithHeading = {
91
91
  },
92
92
  };
93
93
 
94
+ export const SizesUl = {
95
+ render: () => {
96
+ return (
97
+ <VStack gap="8">
98
+ <List
99
+ title="Medium list"
100
+ description="Lorem ipsum dolor sit amet, consectetur adipiscing elit. Aliquam vel risus volutpat."
101
+ size="medium"
102
+ >
103
+ <List.Item title="Lorem Ipsum Dolor Sit Amet">
104
+ Beskrivelsen på punkter er nærmere forklart <a href="/">her</a>
105
+ </List.Item>
106
+ <List.Item title="Consectetur Adipiscing Elit">
107
+ Beskrivelsen på punkter er nærmere forklart <a href="/">her</a>
108
+ </List.Item>
109
+ <List.Item>
110
+ Beskrivelsen på punkter er nærmere forklart <a href="/">her</a>
111
+ </List.Item>
112
+ </List>
113
+ <List
114
+ title="Small list"
115
+ description="Lorem ipsum dolor sit amet, consectetur adipiscing elit. Aliquam vel risus volutpat."
116
+ size="small"
117
+ >
118
+ <List.Item title="Lorem Ipsum Dolor Sit Amet">
119
+ Beskrivelsen på punkter er nærmere forklart <a href="/">her</a>
120
+ </List.Item>
121
+ <List.Item title="Consectetur Adipiscing Elit">
122
+ Beskrivelsen på punkter er nærmere forklart <a href="/">her</a>
123
+ </List.Item>
124
+ <List.Item>
125
+ Beskrivelsen på punkter er nærmere forklart <a href="/">her</a>
126
+ </List.Item>
127
+ </List>
128
+ </VStack>
129
+ );
130
+ },
131
+ };
132
+
133
+ export const SizesOl = {
134
+ render: () => {
135
+ return (
136
+ <VStack gap="8">
137
+ <List
138
+ title="Medium list"
139
+ description="Lorem ipsum dolor sit amet, consectetur adipiscing elit. Aliquam vel risus volutpat."
140
+ size="medium"
141
+ as="ol"
142
+ >
143
+ <List.Item title="Lorem Ipsum Dolor Sit Amet">
144
+ Beskrivelsen på punkter er nærmere forklart <a href="/">her</a>
145
+ </List.Item>
146
+ <List.Item title="Consectetur Adipiscing Elit">
147
+ Beskrivelsen på punkter er nærmere forklart <a href="/">her</a>
148
+ </List.Item>
149
+ <List.Item>
150
+ Beskrivelsen på punkter er nærmere forklart <a href="/">her</a>
151
+ </List.Item>
152
+ </List>
153
+ <List
154
+ title="Small list"
155
+ description="Lorem ipsum dolor sit amet, consectetur adipiscing elit. Aliquam vel risus volutpat."
156
+ size="small"
157
+ as="ol"
158
+ >
159
+ <List.Item title="Lorem Ipsum Dolor Sit Amet">
160
+ Beskrivelsen på punkter er nærmere forklart <a href="/">her</a>
161
+ </List.Item>
162
+ <List.Item title="Consectetur Adipiscing Elit">
163
+ Beskrivelsen på punkter er nærmere forklart <a href="/">her</a>
164
+ </List.Item>
165
+ <List.Item>
166
+ Beskrivelsen på punkter er nærmere forklart <a href="/">her</a>
167
+ </List.Item>
168
+ </List>
169
+ </VStack>
170
+ );
171
+ },
172
+ };
173
+
174
+ export const SizesIcons = {
175
+ render: () => {
176
+ return (
177
+ <VStack gap="8">
178
+ <List
179
+ title="Medium list"
180
+ description="Lorem ipsum dolor sit amet, consectetur adipiscing elit. Aliquam vel risus volutpat."
181
+ size="medium"
182
+ >
183
+ <List.Item
184
+ icon={<HeadHeartIcon aria-hidden />}
185
+ title="Lorem Ipsum Dolor Sit Amet"
186
+ >
187
+ Beskrivelsen på punkter er nærmere forklart <a href="/">her</a>
188
+ </List.Item>
189
+ <List.Item
190
+ icon={<HeadHeartIcon aria-hidden />}
191
+ title="Consectetur Adipiscing Elit"
192
+ >
193
+ Beskrivelsen på punkter er nærmere forklart <a href="/">her</a>
194
+ </List.Item>
195
+ <List.Item icon={<HeadHeartIcon aria-hidden />}>
196
+ Beskrivelsen på punkter er nærmere forklart <a href="/">her</a>
197
+ </List.Item>
198
+ </List>
199
+ <List
200
+ title="Small list"
201
+ description="Lorem ipsum dolor sit amet, consectetur adipiscing elit. Aliquam vel risus volutpat."
202
+ size="small"
203
+ >
204
+ <List.Item
205
+ icon={<HeadHeartIcon aria-hidden />}
206
+ title="Lorem Ipsum Dolor Sit Amet"
207
+ >
208
+ Beskrivelsen på punkter er nærmere forklart <a href="/">her</a>
209
+ </List.Item>
210
+ <List.Item
211
+ icon={<HeadHeartIcon aria-hidden />}
212
+ title="Consectetur Adipiscing Elit"
213
+ >
214
+ Beskrivelsen på punkter er nærmere forklart <a href="/">her</a>
215
+ </List.Item>
216
+ <List.Item icon={<HeadHeartIcon aria-hidden />}>
217
+ Beskrivelsen på punkter er nærmere forklart <a href="/">her</a>
218
+ </List.Item>
219
+ </List>
220
+ </VStack>
221
+ );
222
+ },
223
+ };
224
+
94
225
  export const Icons = {
95
226
  render: () => {
96
227
  return (