@nationaldesignstudio/react 0.5.2 → 0.5.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 (160) hide show
  1. package/package.json +10 -2
  2. package/src/App.css +0 -0
  3. package/src/App.tsx +0 -7
  4. package/src/assets/fonts/PPNeueMontreal-Variable.woff2 +0 -0
  5. package/src/assets/react.svg +0 -1
  6. package/src/components/atoms/accordion/accordion.stories.tsx +0 -228
  7. package/src/components/atoms/accordion/accordion.test.tsx +0 -231
  8. package/src/components/atoms/accordion/index.ts +0 -6
  9. package/src/components/atoms/background/background.test.tsx +0 -213
  10. package/src/components/atoms/background/index.ts +0 -22
  11. package/src/components/atoms/button/__screenshots__/button.visual.test.tsx/button-charcoal-chromium-darwin.png +0 -0
  12. package/src/components/atoms/button/__screenshots__/button.visual.test.tsx/button-charcoal-chromium-linux.png +0 -0
  13. package/src/components/atoms/button/__screenshots__/button.visual.test.tsx/button-charcoal-outline-chromium-darwin.png +0 -0
  14. package/src/components/atoms/button/__screenshots__/button.visual.test.tsx/button-charcoal-outline-chromium-linux.png +0 -0
  15. package/src/components/atoms/button/__screenshots__/button.visual.test.tsx/button-charcoal-outline-quiet-chromium-darwin.png +0 -0
  16. package/src/components/atoms/button/__screenshots__/button.visual.test.tsx/button-charcoal-outline-quiet-chromium-linux.png +0 -0
  17. package/src/components/atoms/button/__screenshots__/button.visual.test.tsx/button-disabled-chromium-darwin.png +0 -0
  18. package/src/components/atoms/button/__screenshots__/button.visual.test.tsx/button-disabled-chromium-linux.png +0 -0
  19. package/src/components/atoms/button/__screenshots__/button.visual.test.tsx/button-ivory-chromium-darwin.png +0 -0
  20. package/src/components/atoms/button/__screenshots__/button.visual.test.tsx/button-ivory-chromium-linux.png +0 -0
  21. package/src/components/atoms/button/__screenshots__/button.visual.test.tsx/button-ivory-outline-chromium-darwin.png +0 -0
  22. package/src/components/atoms/button/__screenshots__/button.visual.test.tsx/button-ivory-outline-chromium-linux.png +0 -0
  23. package/src/components/atoms/button/__screenshots__/button.visual.test.tsx/button-ivory-outline-quiet-chromium-darwin.png +0 -0
  24. package/src/components/atoms/button/__screenshots__/button.visual.test.tsx/button-ivory-outline-quiet-chromium-linux.png +0 -0
  25. package/src/components/atoms/button/__screenshots__/button.visual.test.tsx/button-size-large-chromium-darwin.png +0 -0
  26. package/src/components/atoms/button/__screenshots__/button.visual.test.tsx/button-size-large-chromium-linux.png +0 -0
  27. package/src/components/atoms/button/__screenshots__/button.visual.test.tsx/button-size-medium-chromium-darwin.png +0 -0
  28. package/src/components/atoms/button/__screenshots__/button.visual.test.tsx/button-size-medium-chromium-linux.png +0 -0
  29. package/src/components/atoms/button/__screenshots__/button.visual.test.tsx/button-size-small-chromium-darwin.png +0 -0
  30. package/src/components/atoms/button/__screenshots__/button.visual.test.tsx/button-size-small-chromium-linux.png +0 -0
  31. package/src/components/atoms/button/button.stories.tsx +0 -289
  32. package/src/components/atoms/button/button.test.tsx +0 -419
  33. package/src/components/atoms/button/button.visual.test.tsx +0 -98
  34. package/src/components/atoms/button/icon-button.stories.tsx +0 -260
  35. package/src/components/atoms/button/icon-button.test.tsx +0 -186
  36. package/src/components/atoms/button/index.ts +0 -6
  37. package/src/components/atoms/input/index.ts +0 -17
  38. package/src/components/atoms/input/input-group.stories.tsx +0 -646
  39. package/src/components/atoms/input/input-group.test.tsx +0 -362
  40. package/src/components/atoms/input/input.stories.tsx +0 -228
  41. package/src/components/atoms/input/input.test.tsx +0 -167
  42. package/src/components/atoms/ndstudio-footer/index.ts +0 -1
  43. package/src/components/atoms/pager-control/index.ts +0 -5
  44. package/src/components/atoms/pager-control/pager-control.stories.tsx +0 -207
  45. package/src/components/atoms/pager-control/pager-control.test.tsx +0 -130
  46. package/src/components/atoms/popover/index.ts +0 -30
  47. package/src/components/atoms/popover/popover.stories.tsx +0 -531
  48. package/src/components/atoms/popover/popover.test.tsx +0 -486
  49. package/src/components/atoms/select/index.ts +0 -18
  50. package/src/components/atoms/select/select.stories.tsx +0 -455
  51. package/src/components/atoms/tooltip/index.ts +0 -24
  52. package/src/components/atoms/tooltip/tooltip.stories.tsx +0 -348
  53. package/src/components/atoms/tooltip/tooltip.test.tsx +0 -363
  54. package/src/components/dev-tools/dev-toolbar/dev-toolbar.stories.tsx +0 -73
  55. package/src/components/dev-tools/dev-toolbar/index.ts +0 -1
  56. package/src/components/dev-tools/grid-overlay/index.ts +0 -1
  57. package/src/components/dev-tools/index.ts +0 -2
  58. package/src/components/foundation/typography/typography.stories.tsx +0 -401
  59. package/src/components/organisms/card/__screenshots__/card.visual.test.tsx/card-default-vertical-chromium-darwin.png +0 -0
  60. package/src/components/organisms/card/__screenshots__/card.visual.test.tsx/card-default-vertical-chromium-linux.png +0 -0
  61. package/src/components/organisms/card/__screenshots__/card.visual.test.tsx/card-horizontal-chromium-darwin.png +0 -0
  62. package/src/components/organisms/card/__screenshots__/card.visual.test.tsx/card-horizontal-chromium-linux.png +0 -0
  63. package/src/components/organisms/card/__screenshots__/card.visual.test.tsx/card-minimal-chromium-darwin.png +0 -0
  64. package/src/components/organisms/card/__screenshots__/card.visual.test.tsx/card-minimal-chromium-linux.png +0 -0
  65. package/src/components/organisms/card/__screenshots__/card.visual.test.tsx/card-without-actions-chromium-darwin.png +0 -0
  66. package/src/components/organisms/card/__screenshots__/card.visual.test.tsx/card-without-actions-chromium-linux.png +0 -0
  67. package/src/components/organisms/card/__screenshots__/card.visual.test.tsx/card-without-eyebrow-chromium-darwin.png +0 -0
  68. package/src/components/organisms/card/__screenshots__/card.visual.test.tsx/card-without-eyebrow-chromium-linux.png +0 -0
  69. package/src/components/organisms/card/__screenshots__/card.visual.test.tsx/card-without-image-chromium-darwin.png +0 -0
  70. package/src/components/organisms/card/__screenshots__/card.visual.test.tsx/card-without-image-chromium-linux.png +0 -0
  71. package/src/components/organisms/card/card.stories.tsx +0 -293
  72. package/src/components/organisms/card/card.test.tsx +0 -247
  73. package/src/components/organisms/card/card.visual.test.tsx +0 -197
  74. package/src/components/organisms/card/index.ts +0 -26
  75. package/src/components/organisms/navbar/__screenshots__/navbar.visual.test.tsx/navbar-active-link-chromium-darwin.png +0 -0
  76. package/src/components/organisms/navbar/__screenshots__/navbar.visual.test.tsx/navbar-active-link-chromium-linux.png +0 -0
  77. package/src/components/organisms/navbar/__screenshots__/navbar.visual.test.tsx/navbar-brand-only-chromium-darwin.png +0 -0
  78. package/src/components/organisms/navbar/__screenshots__/navbar.visual.test.tsx/navbar-brand-only-chromium-linux.png +0 -0
  79. package/src/components/organisms/navbar/__screenshots__/navbar.visual.test.tsx/navbar-default-chromium-darwin.png +0 -0
  80. package/src/components/organisms/navbar/__screenshots__/navbar.visual.test.tsx/navbar-default-chromium-linux.png +0 -0
  81. package/src/components/organisms/navbar/index.ts +0 -18
  82. package/src/components/organisms/navbar/navbar.stories.tsx +0 -313
  83. package/src/components/organisms/navbar/navbar.test.tsx +0 -190
  84. package/src/components/organisms/navbar/navbar.visual.test.tsx +0 -85
  85. package/src/components/organisms/us-gov-banner/__screenshots__/us-gov-banner.visual.test.tsx/us-gov-banner-custom-icon-chromium-darwin.png +0 -0
  86. package/src/components/organisms/us-gov-banner/__screenshots__/us-gov-banner.visual.test.tsx/us-gov-banner-custom-icon-chromium-linux.png +0 -0
  87. package/src/components/organisms/us-gov-banner/__screenshots__/us-gov-banner.visual.test.tsx/us-gov-banner-custom-text-chromium-darwin.png +0 -0
  88. package/src/components/organisms/us-gov-banner/__screenshots__/us-gov-banner.visual.test.tsx/us-gov-banner-custom-text-chromium-linux.png +0 -0
  89. package/src/components/organisms/us-gov-banner/__screenshots__/us-gov-banner.visual.test.tsx/us-gov-banner-default-chromium-darwin.png +0 -0
  90. package/src/components/organisms/us-gov-banner/__screenshots__/us-gov-banner.visual.test.tsx/us-gov-banner-default-chromium-linux.png +0 -0
  91. package/src/components/organisms/us-gov-banner/index.ts +0 -5
  92. package/src/components/organisms/us-gov-banner/us-gov-banner.stories.tsx +0 -35
  93. package/src/components/organisms/us-gov-banner/us-gov-banner.test.tsx +0 -107
  94. package/src/components/organisms/us-gov-banner/us-gov-banner.visual.test.tsx +0 -46
  95. package/src/components/sections/banner/banner.stories.tsx +0 -150
  96. package/src/components/sections/banner/banner.test.tsx +0 -185
  97. package/src/components/sections/banner/index.ts +0 -2
  98. package/src/components/sections/card-grid/card-grid.stories.tsx +0 -351
  99. package/src/components/sections/card-grid/index.ts +0 -1
  100. package/src/components/sections/faq-section/faq-section.stories.tsx +0 -453
  101. package/src/components/sections/faq-section/index.ts +0 -2
  102. package/src/components/sections/hero/__screenshots__/hero.visual.test.tsx/hero-a1-desktop-chromium-darwin.png +0 -0
  103. package/src/components/sections/hero/__screenshots__/hero.visual.test.tsx/hero-a1-desktop-chromium-linux.png +0 -0
  104. package/src/components/sections/hero/__screenshots__/hero.visual.test.tsx/hero-a1-mobile-chromium-darwin.png +0 -0
  105. package/src/components/sections/hero/__screenshots__/hero.visual.test.tsx/hero-a1-mobile-chromium-linux.png +0 -0
  106. package/src/components/sections/hero/__screenshots__/hero.visual.test.tsx/hero-a1-tablet-chromium-darwin.png +0 -0
  107. package/src/components/sections/hero/__screenshots__/hero.visual.test.tsx/hero-a1-tablet-chromium-linux.png +0 -0
  108. package/src/components/sections/hero/__screenshots__/hero.visual.test.tsx/hero-a2-desktop-chromium-darwin.png +0 -0
  109. package/src/components/sections/hero/__screenshots__/hero.visual.test.tsx/hero-a2-desktop-chromium-linux.png +0 -0
  110. package/src/components/sections/hero/__screenshots__/hero.visual.test.tsx/hero-a2-mobile-chromium-darwin.png +0 -0
  111. package/src/components/sections/hero/__screenshots__/hero.visual.test.tsx/hero-a2-mobile-chromium-linux.png +0 -0
  112. package/src/components/sections/hero/__screenshots__/hero.visual.test.tsx/hero-a2-tablet-chromium-darwin.png +0 -0
  113. package/src/components/sections/hero/__screenshots__/hero.visual.test.tsx/hero-a2-tablet-chromium-linux.png +0 -0
  114. package/src/components/sections/hero/__screenshots__/hero.visual.test.tsx/hero-a3-desktop-chromium-darwin.png +0 -0
  115. package/src/components/sections/hero/__screenshots__/hero.visual.test.tsx/hero-a3-desktop-chromium-linux.png +0 -0
  116. package/src/components/sections/hero/__screenshots__/hero.visual.test.tsx/hero-a3-mobile-chromium-darwin.png +0 -0
  117. package/src/components/sections/hero/__screenshots__/hero.visual.test.tsx/hero-a3-mobile-chromium-linux.png +0 -0
  118. package/src/components/sections/hero/__screenshots__/hero.visual.test.tsx/hero-a3-tablet-chromium-darwin.png +0 -0
  119. package/src/components/sections/hero/__screenshots__/hero.visual.test.tsx/hero-a3-tablet-chromium-linux.png +0 -0
  120. package/src/components/sections/hero/__screenshots__/hero.visual.test.tsx/hero-custom-class-chromium-darwin.png +0 -0
  121. package/src/components/sections/hero/__screenshots__/hero.visual.test.tsx/hero-custom-class-chromium-linux.png +0 -0
  122. package/src/components/sections/hero/__screenshots__/hero.visual.test.tsx/hero-default-chromium-linux.png +0 -0
  123. package/src/components/sections/hero/__screenshots__/hero.visual.test.tsx/hero-long-title-chromium-darwin.png +0 -0
  124. package/src/components/sections/hero/__screenshots__/hero.visual.test.tsx/hero-long-title-chromium-linux.png +0 -0
  125. package/src/components/sections/hero/hero.stories.tsx +0 -397
  126. package/src/components/sections/hero/hero.test.tsx +0 -138
  127. package/src/components/sections/hero/hero.visual.test.tsx +0 -140
  128. package/src/components/sections/hero/index.ts +0 -23
  129. package/src/components/sections/prose/__screenshots__/prose.visual.test.tsx/prose-h3-heading-chromium-darwin.png +0 -0
  130. package/src/components/sections/prose/__screenshots__/prose.visual.test.tsx/prose-h3-heading-chromium-linux.png +0 -0
  131. package/src/components/sections/prose/__screenshots__/prose.visual.test.tsx/prose-multiple-paragraphs-chromium-darwin.png +0 -0
  132. package/src/components/sections/prose/__screenshots__/prose.visual.test.tsx/prose-multiple-paragraphs-chromium-linux.png +0 -0
  133. package/src/components/sections/prose/__screenshots__/prose.visual.test.tsx/prose-multiple-sections-chromium-darwin.png +0 -0
  134. package/src/components/sections/prose/__screenshots__/prose.visual.test.tsx/prose-multiple-sections-chromium-linux.png +0 -0
  135. package/src/components/sections/prose/__screenshots__/prose.visual.test.tsx/prose-single-section-chromium-darwin.png +0 -0
  136. package/src/components/sections/prose/__screenshots__/prose.visual.test.tsx/prose-single-section-chromium-linux.png +0 -0
  137. package/src/components/sections/prose/index.ts +0 -6
  138. package/src/components/sections/prose/prose.stories.tsx +0 -144
  139. package/src/components/sections/prose/prose.test.tsx +0 -178
  140. package/src/components/sections/prose/prose.visual.test.tsx +0 -105
  141. package/src/components/sections/quote-block/index.ts +0 -5
  142. package/src/components/sections/river/index.ts +0 -1
  143. package/src/components/sections/river/river.stories.tsx +0 -237
  144. package/src/components/sections/river/river.test.tsx +0 -268
  145. package/src/components/sections/tout/index.ts +0 -1
  146. package/src/components/sections/tout/tout.stories.tsx +0 -171
  147. package/src/components/sections/tout/tout.test.tsx +0 -242
  148. package/src/components/sections/two-column-section/index.ts +0 -5
  149. package/src/components/sections/two-column-section/two-column-section.stories.tsx +0 -285
  150. package/src/components/shared/index.ts +0 -5
  151. package/src/index.ts +0 -293
  152. package/src/main.tsx +0 -13
  153. package/src/stories/grid-system.stories.tsx +0 -309
  154. package/src/stories/introduction.mdx +0 -128
  155. package/src/stories/theme-provider.stories.tsx +0 -349
  156. package/src/stories/token-showcase.stories.tsx +0 -73
  157. package/src/stories/token-showcase.tsx +0 -777
  158. package/src/styles.css +0 -14
  159. package/src/tests/token-resolution.test.tsx +0 -298
  160. package/src/theme/theme-provider.test.tsx +0 -270
@@ -1,486 +0,0 @@
1
- import { describe, expect, test, vi } from "vitest";
2
- import { page, userEvent } from "vitest/browser";
3
- import { render } from "vitest-browser-react";
4
- import { Button } from "../button";
5
- import {
6
- Popover,
7
- PopoverArrow,
8
- PopoverBackdrop,
9
- PopoverClose,
10
- PopoverDescription,
11
- PopoverParts,
12
- PopoverPopup,
13
- PopoverPortal,
14
- PopoverPositioner,
15
- PopoverTitle,
16
- PopoverTrigger,
17
- } from "./popover";
18
-
19
- describe("Popover", () => {
20
- describe("Accessibility", () => {
21
- test("trigger element is accessible", async () => {
22
- render(
23
- <Popover trigger={<Button>Open Popover</Button>} title="Title">
24
- Content
25
- </Popover>,
26
- );
27
- await expect
28
- .element(page.getByRole("button", { name: "Open Popover" }))
29
- .toBeInTheDocument();
30
- });
31
-
32
- test("popover has correct role when visible", async () => {
33
- render(
34
- <Popover
35
- trigger={<Button>Open Popover</Button>}
36
- title="Popover Title"
37
- defaultOpen
38
- >
39
- Popover content
40
- </Popover>,
41
- );
42
- // Popover uses dialog role
43
- await expect.element(page.getByRole("dialog")).toBeInTheDocument();
44
- });
45
-
46
- test("trigger element is focusable", async () => {
47
- render(
48
- <Popover trigger={<Button>Focus me</Button>} title="Title">
49
- Content
50
- </Popover>,
51
- );
52
- await userEvent.keyboard("{Tab}");
53
- await expect
54
- .element(page.getByRole("button", { name: "Focus me" }))
55
- .toHaveFocus();
56
- });
57
- });
58
-
59
- describe("Interactions", () => {
60
- test("shows popover on click", async () => {
61
- render(
62
- <Popover trigger={<Button>Click me</Button>} title="Click Popover">
63
- Click content
64
- </Popover>,
65
- );
66
-
67
- // Popover should not be visible initially
68
- await expect.element(page.getByRole("dialog")).not.toBeInTheDocument();
69
-
70
- // Click the trigger
71
- await page.getByRole("button", { name: "Click me" }).click();
72
-
73
- // Popover should now be visible
74
- await expect.element(page.getByRole("dialog")).toBeInTheDocument();
75
- });
76
-
77
- test("closes popover when clicking outside", async () => {
78
- render(
79
- <div>
80
- <Popover trigger={<Button>Click me</Button>} title="Test">
81
- Content
82
- </Popover>
83
- <Button>Outside</Button>
84
- </div>,
85
- );
86
-
87
- // Open popover
88
- await page.getByRole("button", { name: "Click me" }).click();
89
- await expect.element(page.getByRole("dialog")).toBeInTheDocument();
90
-
91
- // Click outside
92
- await page.getByRole("button", { name: "Outside" }).click();
93
-
94
- // Popover should be closed
95
- await expect.element(page.getByRole("dialog")).not.toBeInTheDocument();
96
- });
97
-
98
- test("closes popover on escape key", async () => {
99
- render(
100
- <Popover trigger={<Button>Click me</Button>} title="Test" defaultOpen>
101
- Content
102
- </Popover>,
103
- );
104
-
105
- await expect.element(page.getByRole("dialog")).toBeInTheDocument();
106
-
107
- // Press escape
108
- await userEvent.keyboard("{Escape}");
109
-
110
- // Popover should be closed
111
- await expect.element(page.getByRole("dialog")).not.toBeInTheDocument();
112
- });
113
- });
114
-
115
- describe("Controlled State", () => {
116
- test("respects controlled open state", async () => {
117
- render(
118
- <Popover
119
- trigger={<Button>Trigger</Button>}
120
- title="Controlled"
121
- open={true}
122
- >
123
- Controlled content
124
- </Popover>,
125
- );
126
-
127
- // Popover should be visible when open=true
128
- await expect.element(page.getByRole("dialog")).toBeInTheDocument();
129
- });
130
-
131
- test("respects controlled closed state", async () => {
132
- render(
133
- <Popover
134
- trigger={<Button>Trigger</Button>}
135
- title="Controlled"
136
- open={false}
137
- >
138
- Controlled content
139
- </Popover>,
140
- );
141
-
142
- // Popover should not be visible when open=false
143
- await expect.element(page.getByRole("dialog")).not.toBeInTheDocument();
144
-
145
- // Should not show on click when controlled
146
- await page.getByRole("button", { name: "Trigger" }).click();
147
- await expect.element(page.getByRole("dialog")).not.toBeInTheDocument();
148
- });
149
-
150
- test("calls onOpenChange callback", async () => {
151
- const handleOpenChange = vi.fn();
152
- render(
153
- <Popover
154
- trigger={<Button>Trigger</Button>}
155
- title="Callback"
156
- onOpenChange={handleOpenChange}
157
- >
158
- Content
159
- </Popover>,
160
- );
161
-
162
- // Click to trigger open
163
- await page.getByRole("button", { name: "Trigger" }).click();
164
-
165
- // Callback should have been called with true as first argument
166
- // (Base UI passes additional context as second argument)
167
- expect(handleOpenChange).toHaveBeenCalled();
168
- expect(handleOpenChange.mock.calls[0][0]).toBe(true);
169
- });
170
-
171
- test("defaultOpen shows popover initially", async () => {
172
- render(
173
- <Popover
174
- trigger={<Button>Trigger</Button>}
175
- title="Default Open"
176
- defaultOpen
177
- >
178
- Content
179
- </Popover>,
180
- );
181
-
182
- // Popover should be visible initially
183
- await expect.element(page.getByRole("dialog")).toBeInTheDocument();
184
- });
185
- });
186
-
187
- describe("Content", () => {
188
- test("displays title", async () => {
189
- render(
190
- <Popover
191
- trigger={<Button>Trigger</Button>}
192
- title="My Title"
193
- defaultOpen
194
- >
195
- Content
196
- </Popover>,
197
- );
198
-
199
- await expect.element(page.getByText("My Title")).toBeInTheDocument();
200
- });
201
-
202
- test("displays description content", async () => {
203
- render(
204
- <Popover trigger={<Button>Trigger</Button>} title="Title" defaultOpen>
205
- Description content here
206
- </Popover>,
207
- );
208
-
209
- await expect
210
- .element(page.getByText("Description content here"))
211
- .toBeInTheDocument();
212
- });
213
-
214
- test("displays content without title", async () => {
215
- render(
216
- <Popover trigger={<Button>Trigger</Button>} defaultOpen>
217
- <p data-testid="custom-content">Custom content</p>
218
- </Popover>,
219
- );
220
-
221
- await expect
222
- .element(page.getByTestId("custom-content"))
223
- .toBeInTheDocument();
224
- });
225
- });
226
-
227
- describe("Close Button", () => {
228
- test("shows close button when showClose is true", async () => {
229
- render(
230
- <Popover
231
- trigger={<Button>Trigger</Button>}
232
- title="With Close"
233
- showClose={true}
234
- defaultOpen
235
- >
236
- Content
237
- </Popover>,
238
- );
239
-
240
- await expect
241
- .element(page.getByRole("button", { name: "Close" }))
242
- .toBeInTheDocument();
243
- });
244
-
245
- test("hides close button by default", async () => {
246
- render(
247
- <Popover
248
- trigger={<Button>Trigger</Button>}
249
- title="No Close"
250
- defaultOpen
251
- >
252
- Content
253
- </Popover>,
254
- );
255
-
256
- await expect
257
- .element(page.getByRole("button", { name: "Close" }))
258
- .not.toBeInTheDocument();
259
- });
260
-
261
- test("closes popover when clicking close button", async () => {
262
- render(
263
- <Popover
264
- trigger={<Button>Trigger</Button>}
265
- title="Closeable"
266
- showClose={true}
267
- defaultOpen
268
- >
269
- Content
270
- </Popover>,
271
- );
272
-
273
- await expect.element(page.getByRole("dialog")).toBeInTheDocument();
274
-
275
- // Click the close button
276
- await page.getByRole("button", { name: "Close" }).click();
277
-
278
- // Popover should be closed
279
- await expect.element(page.getByRole("dialog")).not.toBeInTheDocument();
280
- });
281
- });
282
-
283
- describe("Arrow", () => {
284
- test("shows arrow by default", async () => {
285
- render(
286
- <Popover
287
- trigger={<Button>Trigger</Button>}
288
- title="With Arrow"
289
- defaultOpen
290
- >
291
- Content
292
- </Popover>,
293
- );
294
-
295
- const dialog = page.getByRole("dialog");
296
- await expect.element(dialog).toBeInTheDocument();
297
- });
298
-
299
- test("hides arrow when showArrow is false", async () => {
300
- render(
301
- <Popover
302
- trigger={<Button>Trigger</Button>}
303
- title="Without Arrow"
304
- showArrow={false}
305
- defaultOpen
306
- >
307
- Content
308
- </Popover>,
309
- );
310
-
311
- const dialog = page.getByRole("dialog");
312
- await expect.element(dialog).toBeInTheDocument();
313
- });
314
- });
315
-
316
- describe("Compound Components", () => {
317
- test("renders with compound component API", async () => {
318
- render(
319
- <PopoverParts defaultOpen>
320
- <PopoverTrigger>
321
- <Button>Compound trigger</Button>
322
- </PopoverTrigger>
323
- <PopoverPortal>
324
- <PopoverPositioner>
325
- <PopoverPopup>
326
- <PopoverArrow />
327
- <PopoverTitle>Compound Title</PopoverTitle>
328
- <PopoverDescription>Compound content</PopoverDescription>
329
- </PopoverPopup>
330
- </PopoverPositioner>
331
- </PopoverPortal>
332
- </PopoverParts>,
333
- );
334
-
335
- await expect
336
- .element(page.getByRole("button", { name: "Compound trigger" }))
337
- .toBeInTheDocument();
338
- await expect
339
- .element(page.getByText("Compound Title"))
340
- .toBeInTheDocument();
341
- await expect
342
- .element(page.getByText("Compound content"))
343
- .toBeInTheDocument();
344
- });
345
-
346
- test("backdrop renders correctly", async () => {
347
- render(
348
- <PopoverParts defaultOpen>
349
- <PopoverTrigger>
350
- <Button>With Backdrop</Button>
351
- </PopoverTrigger>
352
- <PopoverPortal>
353
- <PopoverBackdrop data-testid="backdrop" />
354
- <PopoverPositioner>
355
- <PopoverPopup>Content with backdrop</PopoverPopup>
356
- </PopoverPositioner>
357
- </PopoverPortal>
358
- </PopoverParts>,
359
- );
360
-
361
- await expect.element(page.getByTestId("backdrop")).toBeInTheDocument();
362
- await expect
363
- .element(page.getByText("Content with backdrop"))
364
- .toBeInTheDocument();
365
- });
366
-
367
- test("close button works with compound API", async () => {
368
- render(
369
- <PopoverParts defaultOpen>
370
- <PopoverTrigger>
371
- <Button>Trigger</Button>
372
- </PopoverTrigger>
373
- <PopoverPortal>
374
- <PopoverPositioner>
375
- <PopoverPopup>
376
- <PopoverClose>
377
- <span>X</span>
378
- </PopoverClose>
379
- Content
380
- </PopoverPopup>
381
- </PopoverPositioner>
382
- </PopoverPortal>
383
- </PopoverParts>,
384
- );
385
-
386
- await expect.element(page.getByRole("dialog")).toBeInTheDocument();
387
-
388
- // Click the close button
389
- await page.getByText("X").click();
390
-
391
- // Popover should be closed
392
- await expect.element(page.getByRole("dialog")).not.toBeInTheDocument();
393
- });
394
- });
395
-
396
- describe("Styles", () => {
397
- test("popover popup has light background", async () => {
398
- render(
399
- <Popover trigger={<Button>Trigger</Button>} title="Styled" defaultOpen>
400
- Content
401
- </Popover>,
402
- );
403
-
404
- const dialog = page.getByRole("dialog");
405
- await expect.element(dialog).toBeInTheDocument();
406
-
407
- const element = dialog.element();
408
- const styles = window.getComputedStyle(element);
409
-
410
- // Popover should have a non-transparent background
411
- expect(styles.backgroundColor).not.toBe("rgba(0, 0, 0, 0)");
412
- expect(styles.backgroundColor).not.toBe("transparent");
413
- });
414
-
415
- test("popover has border radius", async () => {
416
- render(
417
- <Popover trigger={<Button>Trigger</Button>} title="Styled" defaultOpen>
418
- Content
419
- </Popover>,
420
- );
421
-
422
- const dialog = page.getByRole("dialog");
423
- await expect.element(dialog).toBeInTheDocument();
424
-
425
- const element = dialog.element();
426
- const styles = window.getComputedStyle(element);
427
-
428
- // Should have border radius
429
- const borderRadius = parseFloat(styles.borderRadius);
430
- expect(borderRadius).toBeGreaterThan(0);
431
- });
432
-
433
- test("popover has shadow", async () => {
434
- render(
435
- <Popover trigger={<Button>Trigger</Button>} title="Styled" defaultOpen>
436
- Content
437
- </Popover>,
438
- );
439
-
440
- const dialog = page.getByRole("dialog");
441
- await expect.element(dialog).toBeInTheDocument();
442
-
443
- const element = dialog.element();
444
- const styles = window.getComputedStyle(element);
445
-
446
- // Should have a box shadow
447
- expect(styles.boxShadow).not.toBe("none");
448
- });
449
-
450
- test("popover has high z-index", async () => {
451
- render(
452
- <Popover trigger={<Button>Trigger</Button>} title="Styled" defaultOpen>
453
- Content
454
- </Popover>,
455
- );
456
-
457
- const dialog = page.getByRole("dialog");
458
- await expect.element(dialog).toBeInTheDocument();
459
-
460
- const element = dialog.element();
461
- const styles = window.getComputedStyle(element);
462
-
463
- // Should have z-index of 50 or higher
464
- const zIndex = parseInt(styles.zIndex, 10);
465
- expect(zIndex).toBeGreaterThanOrEqual(50);
466
- });
467
-
468
- test("popover has border", async () => {
469
- render(
470
- <Popover trigger={<Button>Trigger</Button>} title="Styled" defaultOpen>
471
- Content
472
- </Popover>,
473
- );
474
-
475
- const dialog = page.getByRole("dialog");
476
- await expect.element(dialog).toBeInTheDocument();
477
-
478
- const element = dialog.element();
479
- const styles = window.getComputedStyle(element);
480
-
481
- // Should have a border
482
- const borderWidth = parseFloat(styles.borderWidth);
483
- expect(borderWidth).toBeGreaterThan(0);
484
- });
485
- });
486
- });
@@ -1,18 +0,0 @@
1
- export {
2
- Select,
3
- SelectGroup,
4
- SelectGroupLabel,
5
- type SelectGroupLabelProps,
6
- type SelectGroupProps,
7
- SelectOption,
8
- type SelectOptionProps,
9
- SelectPopup,
10
- type SelectPopupProps,
11
- type SelectProps,
12
- SelectRoot,
13
- SelectTrigger,
14
- type SelectTriggerProps,
15
- selectOptionVariants,
16
- selectPopupVariants,
17
- selectTriggerVariants,
18
- } from "./select";