@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.
- package/package.json +10 -2
- package/src/App.css +0 -0
- package/src/App.tsx +0 -7
- package/src/assets/fonts/PPNeueMontreal-Variable.woff2 +0 -0
- package/src/assets/react.svg +0 -1
- package/src/components/atoms/accordion/accordion.stories.tsx +0 -228
- package/src/components/atoms/accordion/accordion.test.tsx +0 -231
- package/src/components/atoms/accordion/index.ts +0 -6
- package/src/components/atoms/background/background.test.tsx +0 -213
- package/src/components/atoms/background/index.ts +0 -22
- package/src/components/atoms/button/__screenshots__/button.visual.test.tsx/button-charcoal-chromium-darwin.png +0 -0
- package/src/components/atoms/button/__screenshots__/button.visual.test.tsx/button-charcoal-chromium-linux.png +0 -0
- package/src/components/atoms/button/__screenshots__/button.visual.test.tsx/button-charcoal-outline-chromium-darwin.png +0 -0
- package/src/components/atoms/button/__screenshots__/button.visual.test.tsx/button-charcoal-outline-chromium-linux.png +0 -0
- package/src/components/atoms/button/__screenshots__/button.visual.test.tsx/button-charcoal-outline-quiet-chromium-darwin.png +0 -0
- package/src/components/atoms/button/__screenshots__/button.visual.test.tsx/button-charcoal-outline-quiet-chromium-linux.png +0 -0
- package/src/components/atoms/button/__screenshots__/button.visual.test.tsx/button-disabled-chromium-darwin.png +0 -0
- package/src/components/atoms/button/__screenshots__/button.visual.test.tsx/button-disabled-chromium-linux.png +0 -0
- package/src/components/atoms/button/__screenshots__/button.visual.test.tsx/button-ivory-chromium-darwin.png +0 -0
- package/src/components/atoms/button/__screenshots__/button.visual.test.tsx/button-ivory-chromium-linux.png +0 -0
- package/src/components/atoms/button/__screenshots__/button.visual.test.tsx/button-ivory-outline-chromium-darwin.png +0 -0
- package/src/components/atoms/button/__screenshots__/button.visual.test.tsx/button-ivory-outline-chromium-linux.png +0 -0
- package/src/components/atoms/button/__screenshots__/button.visual.test.tsx/button-ivory-outline-quiet-chromium-darwin.png +0 -0
- package/src/components/atoms/button/__screenshots__/button.visual.test.tsx/button-ivory-outline-quiet-chromium-linux.png +0 -0
- package/src/components/atoms/button/__screenshots__/button.visual.test.tsx/button-size-large-chromium-darwin.png +0 -0
- package/src/components/atoms/button/__screenshots__/button.visual.test.tsx/button-size-large-chromium-linux.png +0 -0
- package/src/components/atoms/button/__screenshots__/button.visual.test.tsx/button-size-medium-chromium-darwin.png +0 -0
- package/src/components/atoms/button/__screenshots__/button.visual.test.tsx/button-size-medium-chromium-linux.png +0 -0
- package/src/components/atoms/button/__screenshots__/button.visual.test.tsx/button-size-small-chromium-darwin.png +0 -0
- package/src/components/atoms/button/__screenshots__/button.visual.test.tsx/button-size-small-chromium-linux.png +0 -0
- package/src/components/atoms/button/button.stories.tsx +0 -289
- package/src/components/atoms/button/button.test.tsx +0 -419
- package/src/components/atoms/button/button.visual.test.tsx +0 -98
- package/src/components/atoms/button/icon-button.stories.tsx +0 -260
- package/src/components/atoms/button/icon-button.test.tsx +0 -186
- package/src/components/atoms/button/index.ts +0 -6
- package/src/components/atoms/input/index.ts +0 -17
- package/src/components/atoms/input/input-group.stories.tsx +0 -646
- package/src/components/atoms/input/input-group.test.tsx +0 -362
- package/src/components/atoms/input/input.stories.tsx +0 -228
- package/src/components/atoms/input/input.test.tsx +0 -167
- package/src/components/atoms/ndstudio-footer/index.ts +0 -1
- package/src/components/atoms/pager-control/index.ts +0 -5
- package/src/components/atoms/pager-control/pager-control.stories.tsx +0 -207
- package/src/components/atoms/pager-control/pager-control.test.tsx +0 -130
- package/src/components/atoms/popover/index.ts +0 -30
- package/src/components/atoms/popover/popover.stories.tsx +0 -531
- package/src/components/atoms/popover/popover.test.tsx +0 -486
- package/src/components/atoms/select/index.ts +0 -18
- package/src/components/atoms/select/select.stories.tsx +0 -455
- package/src/components/atoms/tooltip/index.ts +0 -24
- package/src/components/atoms/tooltip/tooltip.stories.tsx +0 -348
- package/src/components/atoms/tooltip/tooltip.test.tsx +0 -363
- package/src/components/dev-tools/dev-toolbar/dev-toolbar.stories.tsx +0 -73
- package/src/components/dev-tools/dev-toolbar/index.ts +0 -1
- package/src/components/dev-tools/grid-overlay/index.ts +0 -1
- package/src/components/dev-tools/index.ts +0 -2
- package/src/components/foundation/typography/typography.stories.tsx +0 -401
- package/src/components/organisms/card/__screenshots__/card.visual.test.tsx/card-default-vertical-chromium-darwin.png +0 -0
- package/src/components/organisms/card/__screenshots__/card.visual.test.tsx/card-default-vertical-chromium-linux.png +0 -0
- package/src/components/organisms/card/__screenshots__/card.visual.test.tsx/card-horizontal-chromium-darwin.png +0 -0
- package/src/components/organisms/card/__screenshots__/card.visual.test.tsx/card-horizontal-chromium-linux.png +0 -0
- package/src/components/organisms/card/__screenshots__/card.visual.test.tsx/card-minimal-chromium-darwin.png +0 -0
- package/src/components/organisms/card/__screenshots__/card.visual.test.tsx/card-minimal-chromium-linux.png +0 -0
- package/src/components/organisms/card/__screenshots__/card.visual.test.tsx/card-without-actions-chromium-darwin.png +0 -0
- package/src/components/organisms/card/__screenshots__/card.visual.test.tsx/card-without-actions-chromium-linux.png +0 -0
- package/src/components/organisms/card/__screenshots__/card.visual.test.tsx/card-without-eyebrow-chromium-darwin.png +0 -0
- package/src/components/organisms/card/__screenshots__/card.visual.test.tsx/card-without-eyebrow-chromium-linux.png +0 -0
- package/src/components/organisms/card/__screenshots__/card.visual.test.tsx/card-without-image-chromium-darwin.png +0 -0
- package/src/components/organisms/card/__screenshots__/card.visual.test.tsx/card-without-image-chromium-linux.png +0 -0
- package/src/components/organisms/card/card.stories.tsx +0 -293
- package/src/components/organisms/card/card.test.tsx +0 -247
- package/src/components/organisms/card/card.visual.test.tsx +0 -197
- package/src/components/organisms/card/index.ts +0 -26
- package/src/components/organisms/navbar/__screenshots__/navbar.visual.test.tsx/navbar-active-link-chromium-darwin.png +0 -0
- package/src/components/organisms/navbar/__screenshots__/navbar.visual.test.tsx/navbar-active-link-chromium-linux.png +0 -0
- package/src/components/organisms/navbar/__screenshots__/navbar.visual.test.tsx/navbar-brand-only-chromium-darwin.png +0 -0
- package/src/components/organisms/navbar/__screenshots__/navbar.visual.test.tsx/navbar-brand-only-chromium-linux.png +0 -0
- package/src/components/organisms/navbar/__screenshots__/navbar.visual.test.tsx/navbar-default-chromium-darwin.png +0 -0
- package/src/components/organisms/navbar/__screenshots__/navbar.visual.test.tsx/navbar-default-chromium-linux.png +0 -0
- package/src/components/organisms/navbar/index.ts +0 -18
- package/src/components/organisms/navbar/navbar.stories.tsx +0 -313
- package/src/components/organisms/navbar/navbar.test.tsx +0 -190
- package/src/components/organisms/navbar/navbar.visual.test.tsx +0 -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
- package/src/components/organisms/us-gov-banner/__screenshots__/us-gov-banner.visual.test.tsx/us-gov-banner-custom-icon-chromium-linux.png +0 -0
- package/src/components/organisms/us-gov-banner/__screenshots__/us-gov-banner.visual.test.tsx/us-gov-banner-custom-text-chromium-darwin.png +0 -0
- package/src/components/organisms/us-gov-banner/__screenshots__/us-gov-banner.visual.test.tsx/us-gov-banner-custom-text-chromium-linux.png +0 -0
- package/src/components/organisms/us-gov-banner/__screenshots__/us-gov-banner.visual.test.tsx/us-gov-banner-default-chromium-darwin.png +0 -0
- package/src/components/organisms/us-gov-banner/__screenshots__/us-gov-banner.visual.test.tsx/us-gov-banner-default-chromium-linux.png +0 -0
- package/src/components/organisms/us-gov-banner/index.ts +0 -5
- package/src/components/organisms/us-gov-banner/us-gov-banner.stories.tsx +0 -35
- package/src/components/organisms/us-gov-banner/us-gov-banner.test.tsx +0 -107
- package/src/components/organisms/us-gov-banner/us-gov-banner.visual.test.tsx +0 -46
- package/src/components/sections/banner/banner.stories.tsx +0 -150
- package/src/components/sections/banner/banner.test.tsx +0 -185
- package/src/components/sections/banner/index.ts +0 -2
- package/src/components/sections/card-grid/card-grid.stories.tsx +0 -351
- package/src/components/sections/card-grid/index.ts +0 -1
- package/src/components/sections/faq-section/faq-section.stories.tsx +0 -453
- package/src/components/sections/faq-section/index.ts +0 -2
- package/src/components/sections/hero/__screenshots__/hero.visual.test.tsx/hero-a1-desktop-chromium-darwin.png +0 -0
- package/src/components/sections/hero/__screenshots__/hero.visual.test.tsx/hero-a1-desktop-chromium-linux.png +0 -0
- package/src/components/sections/hero/__screenshots__/hero.visual.test.tsx/hero-a1-mobile-chromium-darwin.png +0 -0
- package/src/components/sections/hero/__screenshots__/hero.visual.test.tsx/hero-a1-mobile-chromium-linux.png +0 -0
- package/src/components/sections/hero/__screenshots__/hero.visual.test.tsx/hero-a1-tablet-chromium-darwin.png +0 -0
- package/src/components/sections/hero/__screenshots__/hero.visual.test.tsx/hero-a1-tablet-chromium-linux.png +0 -0
- package/src/components/sections/hero/__screenshots__/hero.visual.test.tsx/hero-a2-desktop-chromium-darwin.png +0 -0
- package/src/components/sections/hero/__screenshots__/hero.visual.test.tsx/hero-a2-desktop-chromium-linux.png +0 -0
- package/src/components/sections/hero/__screenshots__/hero.visual.test.tsx/hero-a2-mobile-chromium-darwin.png +0 -0
- package/src/components/sections/hero/__screenshots__/hero.visual.test.tsx/hero-a2-mobile-chromium-linux.png +0 -0
- package/src/components/sections/hero/__screenshots__/hero.visual.test.tsx/hero-a2-tablet-chromium-darwin.png +0 -0
- package/src/components/sections/hero/__screenshots__/hero.visual.test.tsx/hero-a2-tablet-chromium-linux.png +0 -0
- package/src/components/sections/hero/__screenshots__/hero.visual.test.tsx/hero-a3-desktop-chromium-darwin.png +0 -0
- package/src/components/sections/hero/__screenshots__/hero.visual.test.tsx/hero-a3-desktop-chromium-linux.png +0 -0
- package/src/components/sections/hero/__screenshots__/hero.visual.test.tsx/hero-a3-mobile-chromium-darwin.png +0 -0
- package/src/components/sections/hero/__screenshots__/hero.visual.test.tsx/hero-a3-mobile-chromium-linux.png +0 -0
- package/src/components/sections/hero/__screenshots__/hero.visual.test.tsx/hero-a3-tablet-chromium-darwin.png +0 -0
- package/src/components/sections/hero/__screenshots__/hero.visual.test.tsx/hero-a3-tablet-chromium-linux.png +0 -0
- package/src/components/sections/hero/__screenshots__/hero.visual.test.tsx/hero-custom-class-chromium-darwin.png +0 -0
- package/src/components/sections/hero/__screenshots__/hero.visual.test.tsx/hero-custom-class-chromium-linux.png +0 -0
- package/src/components/sections/hero/__screenshots__/hero.visual.test.tsx/hero-default-chromium-linux.png +0 -0
- package/src/components/sections/hero/__screenshots__/hero.visual.test.tsx/hero-long-title-chromium-darwin.png +0 -0
- package/src/components/sections/hero/__screenshots__/hero.visual.test.tsx/hero-long-title-chromium-linux.png +0 -0
- package/src/components/sections/hero/hero.stories.tsx +0 -397
- package/src/components/sections/hero/hero.test.tsx +0 -138
- package/src/components/sections/hero/hero.visual.test.tsx +0 -140
- package/src/components/sections/hero/index.ts +0 -23
- package/src/components/sections/prose/__screenshots__/prose.visual.test.tsx/prose-h3-heading-chromium-darwin.png +0 -0
- package/src/components/sections/prose/__screenshots__/prose.visual.test.tsx/prose-h3-heading-chromium-linux.png +0 -0
- package/src/components/sections/prose/__screenshots__/prose.visual.test.tsx/prose-multiple-paragraphs-chromium-darwin.png +0 -0
- package/src/components/sections/prose/__screenshots__/prose.visual.test.tsx/prose-multiple-paragraphs-chromium-linux.png +0 -0
- package/src/components/sections/prose/__screenshots__/prose.visual.test.tsx/prose-multiple-sections-chromium-darwin.png +0 -0
- package/src/components/sections/prose/__screenshots__/prose.visual.test.tsx/prose-multiple-sections-chromium-linux.png +0 -0
- package/src/components/sections/prose/__screenshots__/prose.visual.test.tsx/prose-single-section-chromium-darwin.png +0 -0
- package/src/components/sections/prose/__screenshots__/prose.visual.test.tsx/prose-single-section-chromium-linux.png +0 -0
- package/src/components/sections/prose/index.ts +0 -6
- package/src/components/sections/prose/prose.stories.tsx +0 -144
- package/src/components/sections/prose/prose.test.tsx +0 -178
- package/src/components/sections/prose/prose.visual.test.tsx +0 -105
- package/src/components/sections/quote-block/index.ts +0 -5
- package/src/components/sections/river/index.ts +0 -1
- package/src/components/sections/river/river.stories.tsx +0 -237
- package/src/components/sections/river/river.test.tsx +0 -268
- package/src/components/sections/tout/index.ts +0 -1
- package/src/components/sections/tout/tout.stories.tsx +0 -171
- package/src/components/sections/tout/tout.test.tsx +0 -242
- package/src/components/sections/two-column-section/index.ts +0 -5
- package/src/components/sections/two-column-section/two-column-section.stories.tsx +0 -285
- package/src/components/shared/index.ts +0 -5
- package/src/index.ts +0 -293
- package/src/main.tsx +0 -13
- package/src/stories/grid-system.stories.tsx +0 -309
- package/src/stories/introduction.mdx +0 -128
- package/src/stories/theme-provider.stories.tsx +0 -349
- package/src/stories/token-showcase.stories.tsx +0 -73
- package/src/stories/token-showcase.tsx +0 -777
- package/src/styles.css +0 -14
- package/src/tests/token-resolution.test.tsx +0 -298
- 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";
|