@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,115 +0,0 @@
1
- import type { Meta, StoryObj } from "@storybook/react";
2
- import { expect, within } from "@storybook/test";
3
- import React from "react";
4
- import { VStack } from "../../layout/stack";
5
- import Detail from "../Detail";
6
-
7
- const meta: Meta<typeof Detail> = {
8
- title: "ds-react/Typography/Detail",
9
- component: Detail,
10
- decorators: [(story) => <div style={{ maxWidth: "200px" }}>{story()}</div>],
11
- parameters: {
12
- chromatic: { disable: true },
13
- },
14
- };
15
- export default meta;
16
-
17
- type Story = StoryObj<typeof Detail>;
18
-
19
- const lorem = "Du må gjøre en filtrering for å se brukere i listen.";
20
-
21
- export const Controls: Story = {
22
- args: {
23
- spacing: false,
24
- children: lorem,
25
-
26
- truncate: false,
27
- visuallyHidden: false,
28
- },
29
- argTypes: {
30
- weight: {
31
- control: "radio",
32
- options: ["regular", "semibold"],
33
- },
34
- align: {
35
- control: "radio",
36
- options: ["start", "center", "end"],
37
- },
38
- textColor: {
39
- control: "radio",
40
- options: ["default", "subtle"],
41
- },
42
- },
43
- };
44
-
45
- export const Spacing: Story = {
46
- render: () => (
47
- <div>
48
- <Detail spacing>{lorem}</Detail>
49
- <Detail spacing>{lorem}</Detail>
50
- </div>
51
- ),
52
- };
53
-
54
- export const Colors: Story = {
55
- render: () => (
56
- <VStack gap="2">
57
- <Detail textColor="default">{lorem}</Detail>
58
- <Detail textColor="subtle">{lorem}</Detail>
59
- </VStack>
60
- ),
61
- };
62
-
63
- export const Align: Story = {
64
- render: () => (
65
- <VStack gap="2">
66
- <Detail align="start">{lorem}</Detail>
67
- <Detail align="center">{lorem}</Detail>
68
- <Detail align="end">{lorem}</Detail>
69
- </VStack>
70
- ),
71
- };
72
-
73
- export const OverrideTag: Story = {
74
- render: () => (
75
- <div>
76
- <Detail spacing>default detail</Detail>
77
- <Detail as="legend">legend detail</Detail>
78
- </div>
79
- ),
80
- play: async ({ canvasElement }) => {
81
- const canvas = within(canvasElement);
82
-
83
- const defaultDetail = canvas.getByText("default detail");
84
- const legendDetail = canvas.getByText("legend detail");
85
-
86
- expect(defaultDetail.tagName).toEqual("P");
87
- expect(legendDetail.tagName).toEqual("LEGEND");
88
- },
89
- };
90
-
91
- export const Chromatic: Story = {
92
- render: (...props) => (
93
- <div>
94
- <div>
95
- <h2>Spacing</h2>
96
- {Spacing.render?.(...props)}
97
- </div>
98
- <div>
99
- <h2>Colors</h2>
100
- {Colors.render?.(...props)}
101
- </div>
102
- <div>
103
- <h2>Align</h2>
104
- {Align.render?.(...props)}
105
- </div>
106
- <div>
107
- <h2>Override Tag</h2>
108
- {OverrideTag.render?.(...props)}
109
- </div>
110
- </div>
111
- ),
112
- parameters: {
113
- chromatic: { disable: false },
114
- },
115
- };
@@ -1,122 +0,0 @@
1
- import type { Meta, StoryObj } from "@storybook/react";
2
- import { expect, within } from "@storybook/test";
3
- import React from "react";
4
- import { VStack } from "../../layout/stack";
5
- import ErrorMessage from "../ErrorMessage";
6
-
7
- const meta: Meta<typeof ErrorMessage> = {
8
- title: "ds-react/Typography/ErrorMessage",
9
- component: ErrorMessage,
10
- parameters: {
11
- chromatic: { disable: true },
12
- },
13
- };
14
- export default meta;
15
-
16
- type Story = StoryObj<typeof ErrorMessage>;
17
-
18
- const lorem =
19
- "Du må fylle ut: Oppgi årsaken til at du har ventet mer enn 6 måneder med å søke om refusjon";
20
-
21
- export const Controls: Story = {
22
- args: {
23
- spacing: false,
24
- children: lorem,
25
- },
26
- argTypes: {
27
- size: {
28
- control: "radio",
29
- options: ["medium", "small"],
30
- },
31
- },
32
- };
33
-
34
- export const SizeMedium: Story = {
35
- render: () => (
36
- <VStack gap="2">
37
- <ErrorMessage size="medium">{lorem}</ErrorMessage>
38
- <ErrorMessage size="medium">{lorem}</ErrorMessage>
39
- </VStack>
40
- ),
41
- };
42
-
43
- export const SizeSmall: Story = {
44
- render: () => (
45
- <VStack gap="2">
46
- <ErrorMessage size="small">{lorem}</ErrorMessage>
47
- <ErrorMessage size="small">{lorem}</ErrorMessage>
48
- </VStack>
49
- ),
50
- };
51
-
52
- export const SpacingMedium: Story = {
53
- render: () => (
54
- <div>
55
- <ErrorMessage size="medium" spacing>
56
- {lorem}
57
- </ErrorMessage>
58
- <ErrorMessage size="medium" spacing>
59
- {lorem}
60
- </ErrorMessage>
61
- </div>
62
- ),
63
- };
64
-
65
- export const SpacingSmall: Story = {
66
- render: () => (
67
- <div>
68
- <ErrorMessage size="small" spacing>
69
- {lorem}
70
- </ErrorMessage>
71
- <ErrorMessage size="small" spacing>
72
- {lorem}
73
- </ErrorMessage>
74
- </div>
75
- ),
76
- };
77
-
78
- export const OverrideTag: Story = {
79
- render: () => (
80
- <div>
81
- <ErrorMessage spacing>default errormessage</ErrorMessage>
82
- <ErrorMessage as="legend">legend errormessage</ErrorMessage>
83
- </div>
84
- ),
85
- play: async ({ canvasElement }) => {
86
- const canvas = within(canvasElement);
87
-
88
- const defaultErrorMessage = canvas.getByText("default errormessage");
89
- const legendErrorMessage = canvas.getByText("legend errormessage");
90
-
91
- expect(defaultErrorMessage.tagName).toEqual("P");
92
- expect(legendErrorMessage.tagName).toEqual("LEGEND");
93
- },
94
- };
95
-
96
- export const Chromatic: Story = {
97
- render: (...props) => (
98
- <div>
99
- <div>
100
- <h2>Medium</h2>
101
- <h3>Size</h3>
102
- {SizeMedium.render?.(...props)}
103
- <h3>Spacing</h3>
104
- {SpacingMedium.render?.(...props)}
105
- </div>
106
- <div>
107
- <h2>Small</h2>
108
- <h3>Size</h3>
109
- {SizeSmall.render?.(...props)}
110
- <h3>Spacing</h3>
111
- {SpacingSmall.render?.(...props)}
112
- </div>
113
- <div>
114
- <h2>Override Tag</h2>
115
- {OverrideTag.render?.(...props)}
116
- </div>
117
- </div>
118
- ),
119
- parameters: {
120
- chromatic: { disable: false },
121
- },
122
- };
@@ -1,169 +0,0 @@
1
- import type { Meta, StoryObj } from "@storybook/react";
2
- import { expect, within } from "@storybook/test";
3
- import { default as React } from "react";
4
- import { VStack } from "../../layout/stack";
5
- import Heading from "../Heading";
6
-
7
- const meta: Meta<typeof Heading> = {
8
- title: "ds-react/Typography/Heading",
9
- component: Heading,
10
- decorators: [(story) => <div style={{ maxWidth: "300px" }}>{story()}</div>],
11
- parameters: {
12
- chromatic: { disable: true },
13
- },
14
- };
15
- export default meta;
16
-
17
- type Story = StoryObj<typeof Heading>;
18
-
19
- const lorem = "Hva kan vi hjelpe deg med?";
20
-
21
- export const Controls: Story = {
22
- args: {
23
- spacing: false,
24
- children: lorem,
25
- visuallyHidden: false,
26
- },
27
- argTypes: {
28
- size: {
29
- control: "radio",
30
- options: ["xlarge", "large", "medium", "small", "xsmall"],
31
- },
32
- level: {
33
- control: "radio",
34
- options: ["1", "2", "3", "4", "5", "6"],
35
- },
36
- align: {
37
- control: "radio",
38
- options: ["start", "center", "end"],
39
- },
40
- textColor: {
41
- control: "radio",
42
- options: ["default", "subtle"],
43
- },
44
- },
45
- };
46
-
47
- export const Sizes: Story = {
48
- render: () => (
49
- <VStack gap="4">
50
- <Heading level="1" size="xlarge">
51
- {lorem}
52
- </Heading>
53
- <Heading level="2" size="large">
54
- {lorem}
55
- </Heading>
56
- <Heading level="3" size="medium">
57
- {lorem}
58
- </Heading>
59
- <Heading level="4" size="small">
60
- {lorem}
61
- </Heading>
62
- <Heading level="5" size="xsmall">
63
- {lorem}
64
- </Heading>
65
- </VStack>
66
- ),
67
- };
68
-
69
- export const Spacing: Story = {
70
- render: () => (
71
- <div>
72
- <Heading level="1" size="xlarge" spacing>
73
- {lorem}
74
- </Heading>
75
- <Heading level="2" size="large" spacing>
76
- {lorem}
77
- </Heading>
78
- <Heading level="3" size="medium" spacing>
79
- {lorem}
80
- </Heading>
81
- <Heading level="4" size="small" spacing>
82
- {lorem}
83
- </Heading>
84
- <Heading level="5" size="xsmall" spacing>
85
- {lorem}
86
- </Heading>
87
- <Heading level="5" size="xsmall">
88
- {lorem}
89
- </Heading>
90
- </div>
91
- ),
92
- };
93
-
94
- export const Colors: Story = {
95
- render: () => (
96
- <VStack gap="2">
97
- <Heading level="1" size="large" textColor="default">
98
- {lorem}
99
- </Heading>
100
- <Heading level="2" size="large" textColor="subtle">
101
- {lorem}
102
- </Heading>
103
- </VStack>
104
- ),
105
- };
106
-
107
- export const Align: Story = {
108
- render: () => (
109
- <VStack gap="2">
110
- <Heading level="1" size="large" align="start">
111
- {lorem}
112
- </Heading>
113
- <Heading level="2" size="large" align="center">
114
- {lorem}
115
- </Heading>
116
- <Heading level="3" size="large" align="end">
117
- {lorem}
118
- </Heading>
119
- </VStack>
120
- ),
121
- };
122
-
123
- export const OverrideTag: Story = {
124
- render: () => (
125
- <div>
126
- <Heading spacing level="1" size="large">
127
- default heading
128
- </Heading>
129
- <Heading as="legend" size="large">
130
- legend heading
131
- </Heading>
132
- </div>
133
- ),
134
- play: async ({ canvasElement }) => {
135
- const canvas = within(canvasElement);
136
-
137
- const defaultHeading = canvas.getByText("default heading");
138
- const legendHeading = canvas.getByText("legend heading");
139
-
140
- expect(defaultHeading.tagName).toEqual("H1");
141
- expect(legendHeading.tagName).toEqual("LEGEND");
142
- },
143
- };
144
-
145
- export const Chromatic: Story = {
146
- render: (...props) => (
147
- <div>
148
- <div>
149
- <h2>Sizes</h2>
150
- {Sizes.render?.(...props)}
151
- </div>
152
- <div>
153
- <h2>Colors</h2>
154
- {Colors.render?.(...props)}
155
- </div>
156
- <div>
157
- <h2>Align</h2>
158
- {Align.render?.(...props)}
159
- </div>
160
- <div>
161
- <h2>Override Tag</h2>
162
- {OverrideTag.render?.(...props)}
163
- </div>
164
- </div>
165
- ),
166
- parameters: {
167
- chromatic: { disable: false },
168
- },
169
- };
@@ -1,131 +0,0 @@
1
- import type { Meta, StoryObj } from "@storybook/react";
2
- import { expect, within } from "@storybook/test";
3
- import React from "react";
4
- import { VStack } from "../../layout/stack";
5
- import Label from "../Label";
6
-
7
- const meta: Meta<typeof Label> = {
8
- title: "ds-react/Typography/Label",
9
- component: Label,
10
- decorators: [(story) => <div style={{ maxWidth: "400px" }}>{story()}</div>],
11
- parameters: {
12
- chromatic: { disable: true },
13
- },
14
- };
15
- export default meta;
16
-
17
- type Story = StoryObj<typeof Label>;
18
-
19
- const lorem =
20
- "Oppgi årsaken til at du har ventet mer enn 6 måneder med å søke om refusjon";
21
-
22
- export const Controls: Story = {
23
- args: {
24
- spacing: false,
25
- children: lorem,
26
- visuallyHidden: false,
27
- },
28
- argTypes: {
29
- size: {
30
- control: "radio",
31
- options: ["large", "medium", "small"],
32
- },
33
- textColor: {
34
- control: "radio",
35
- options: ["default", "subtle"],
36
- },
37
- },
38
- };
39
-
40
- export const SizeMedium: Story = {
41
- render: () => <Label size="medium">{lorem}</Label>,
42
- };
43
-
44
- export const SizeSmall: Story = {
45
- render: () => <Label size="small">{lorem}</Label>,
46
- };
47
-
48
- export const SpacingMedium: Story = {
49
- render: () => (
50
- <div>
51
- <Label size="medium" spacing as="p">
52
- {lorem}
53
- </Label>
54
- <Label size="medium" spacing as="p">
55
- {lorem}
56
- </Label>
57
- </div>
58
- ),
59
- };
60
-
61
- export const SpacingSmall: Story = {
62
- render: () => (
63
- <div>
64
- <Label size="small" spacing as="p">
65
- {lorem}
66
- </Label>
67
- <Label size="small" spacing as="p">
68
- {lorem}
69
- </Label>
70
- </div>
71
- ),
72
- };
73
-
74
- export const Colors: Story = {
75
- render: () => (
76
- <VStack gap="2">
77
- <Label textColor="default">{lorem}</Label>
78
- <Label textColor="subtle">{lorem}</Label>
79
- </VStack>
80
- ),
81
- };
82
-
83
- export const OverrideTag: Story = {
84
- render: () => (
85
- <div>
86
- <Label spacing>default label</Label>
87
- <Label as="legend">legend label</Label>
88
- </div>
89
- ),
90
- play: async ({ canvasElement }) => {
91
- const canvas = within(canvasElement);
92
-
93
- const defaultLabel = canvas.getByText("default label");
94
- const legendLabel = canvas.getByText("legend label");
95
-
96
- expect(defaultLabel.tagName).toEqual("LABEL");
97
- expect(legendLabel.tagName).toEqual("LEGEND");
98
- },
99
- };
100
-
101
- export const Chromatic: Story = {
102
- render: (...props) => (
103
- <div>
104
- <div>
105
- <h2>Medium</h2>
106
- <h3>Size</h3>
107
- {SizeMedium.render?.(...props)}
108
- <h3>Spacing</h3>
109
- {SpacingMedium.render?.(...props)}
110
- </div>
111
- <div>
112
- <h2>Small</h2>
113
- <h3>Size</h3>
114
- {SizeSmall.render?.(...props)}
115
- <h3>Spacing</h3>
116
- {SpacingSmall.render?.(...props)}
117
- </div>
118
- <div>
119
- <h2>Colors</h2>
120
- {Colors.render?.(...props)}
121
- </div>
122
- <div>
123
- <h2>Override Tag</h2>
124
- {OverrideTag.render?.(...props)}
125
- </div>
126
- </div>
127
- ),
128
- parameters: {
129
- chromatic: { disable: false },
130
- },
131
- };
@@ -1,147 +0,0 @@
1
- import * as React from "react";
2
- import { Box } from "../../../layout/box";
3
- import { HStack } from "../../../layout/stack";
4
- import { createDescendantContext } from "./useDescendant";
5
-
6
- export default {
7
- title: "Utilities/Descendants",
8
- parameters: {
9
- chromatic: { disable: true },
10
- },
11
- };
12
-
13
- const [
14
- DescendantsProvider,
15
- /* eslint-disable @typescript-eslint/no-unused-vars */
16
- _useDescendantsContext,
17
- useDescendants,
18
- useDescendant,
19
- ] = createDescendantContext<HTMLDivElement, { value?: string }>();
20
-
21
- function Select({ children }: { children?: React.ReactNode }) {
22
- const descendants = useDescendants();
23
- const count = descendants.count();
24
-
25
- React.useEffect(() => {
26
- descendants.last()?.node.focus();
27
- }, [descendants, count]);
28
-
29
- return (
30
- <DescendantsProvider value={descendants}>{children}</DescendantsProvider>
31
- );
32
- }
33
-
34
- function Option({ value, disabled }: { value?: string; disabled?: boolean }) {
35
- const { register, index, descendants } = useDescendant({
36
- disabled,
37
- });
38
-
39
- return (
40
- <Box
41
- ref={register}
42
- role="button"
43
- tabIndex={0}
44
- data-value={value}
45
- onKeyDown={(event) => {
46
- if (event.key === "ArrowDown") {
47
- descendants.next(index)?.node.focus();
48
- } else if (event.key === "ArrowUp") {
49
- descendants.prev(index)?.node.focus();
50
- }
51
- }}
52
- >
53
- Option {index + 1}
54
- </Box>
55
- );
56
- }
57
-
58
- export const DynamicUpdates = () => {
59
- const [done, setDone] = React.useState(false);
60
-
61
- React.useEffect(() => {
62
- const interval = setInterval(() => setDone((x) => !x), 3000);
63
-
64
- return () => window.clearInterval(interval);
65
- }, []);
66
-
67
- return (
68
- <Select>
69
- <Option value="option 1" />
70
- <div>
71
- <div>
72
- <Option value="option 2" />
73
- {done && (
74
- <div>
75
- <Option value="option 3" />
76
- <Option value="option 4" />
77
- </div>
78
- )}
79
- </div>
80
- <Option value="option 5" disabled />
81
- </div>
82
- {done && (
83
- <div>
84
- <Option value="option 6" />
85
- <Option value="option 7" />
86
- </div>
87
- )}
88
- </Select>
89
- );
90
- };
91
-
92
- function NumberInputWrapper({ children }: { children?: React.ReactNode }) {
93
- const descendants = useDescendants();
94
-
95
- React.useEffect(() => {
96
- descendants.first()?.node.focus();
97
- }, [descendants]);
98
-
99
- return (
100
- <DescendantsProvider value={descendants}>
101
- <HStack gap="1">{children}</HStack>
102
- </DescendantsProvider>
103
- );
104
- }
105
-
106
- function Input() {
107
- const [focused, setFocused] = React.useState(false);
108
- const { register, index, descendants } = useDescendant();
109
-
110
- return (
111
- <input
112
- style={{
113
- width: "3rem",
114
- height: "3rem",
115
- borderRadius: "4px",
116
- textAlign: "center",
117
- border: "1px solid var(--a-border-default)",
118
- }}
119
- placeholder={focused ? "" : "0"}
120
- onFocus={() => setFocused(true)}
121
- onBlur={() => setFocused(false)}
122
- ref={register}
123
- type="tel"
124
- autoCapitalize="none"
125
- autoComplete="false"
126
- inputMode="numeric"
127
- onKeyDown={(event) => {
128
- if (event.key === "ArrowRight") {
129
- descendants.next(index, false)?.node.focus();
130
- }
131
- if (event.key === "ArrowLeft") {
132
- descendants.prev(index, false)?.node.focus();
133
- }
134
- }}
135
- />
136
- );
137
- }
138
-
139
- export const NumberInput = () => {
140
- return (
141
- <NumberInputWrapper>
142
- <Input />
143
- <Input />
144
- <Input />
145
- </NumberInputWrapper>
146
- );
147
- };