@torpor/ui 0.0.17 → 0.1.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.
- package/CHANGELOG.md +28 -0
- package/dist/Accordion/Accordion.torp +53 -54
- package/dist/Accordion/AccordionContent.torp +5 -5
- package/dist/Accordion/AccordionHeader.torp +5 -4
- package/dist/Accordion/AccordionItem.torp +13 -8
- package/dist/Accordion/AccordionTrigger.torp +5 -5
- package/dist/Accordion/AccordionTypes.ts +1 -0
- package/dist/Dialog/Dialog.torp +156 -0
- package/dist/Dialog/DialogBody.torp +34 -0
- package/dist/Dialog/DialogButton.torp +48 -0
- package/dist/Dialog/DialogFooter.torp +13 -0
- package/dist/Dialog/DialogHeader.torp +34 -0
- package/dist/Dialog/DialogTypes.ts +16 -0
- package/dist/Dialog/index.cjs +53 -0
- package/dist/Dialog/index.cjs.map +1 -0
- package/dist/Dialog/index.js +22 -0
- package/dist/Dialog/index.js.map +1 -0
- package/dist/NavMenu/NavMenu.torp +178 -0
- package/dist/NavMenu/NavMenuButton.torp +46 -0
- package/dist/NavMenu/NavMenuElement.torp +43 -0
- package/dist/NavMenu/NavMenuGroup.torp +30 -0
- package/dist/NavMenu/NavMenuGroupHeader.torp +30 -0
- package/dist/NavMenu/NavMenuLink.torp +52 -0
- package/dist/NavMenu/NavMenuPopout.torp +69 -0
- package/dist/NavMenu/NavMenuPopoutButton.torp +120 -0
- package/dist/NavMenu/NavMenuPopoutContent.torp +79 -0
- package/dist/NavMenu/NavMenuSeparator.torp +14 -0
- package/dist/NavMenu/NavMenuTypes.ts +32 -0
- package/dist/NavMenu/index.cjs +78 -0
- package/dist/NavMenu/index.cjs.map +1 -0
- package/dist/NavMenu/index.js +42 -0
- package/dist/NavMenu/index.js.map +1 -0
- package/dist/Popover/Popover.torp +105 -0
- package/dist/Popover/PopoverContentAnchored.torp +107 -0
- package/dist/Popover/PopoverContentContextual.torp +99 -0
- package/dist/Popover/PopoverContentStatic.torp +78 -0
- package/dist/Popover/PopoverOverlay.torp +32 -0
- package/dist/Popover/PopoverTrigger.torp +29 -0
- package/dist/Popover/PopoverTriggerContextual.torp +37 -0
- package/dist/Popover/PopoverTriggerHover.torp +30 -0
- package/dist/Popover/PopoverTypes.ts +30 -0
- package/dist/Popover/index.cjs +222 -0
- package/dist/Popover/index.cjs.map +1 -0
- package/dist/Popover/index.js +183 -0
- package/dist/Popover/index.js.map +1 -0
- package/dist/Popover/mountClickPopover.ts +50 -0
- package/dist/Popover/mountContextPopover.ts +50 -0
- package/dist/Popover/mountHoverPopover.ts +57 -0
- package/dist/Popover/showPopover.ts +24 -0
- package/dist/Popover/showPopoverPrompt.ts +23 -0
- package/dist/TabGroup/TabContent.torp +4 -4
- package/dist/TabGroup/TabGroup.torp +58 -59
- package/dist/TabGroup/TabGroupTypes.ts +1 -0
- package/dist/TabGroup/TabHeader.torp +10 -8
- package/dist/TabGroup/TabList.torp +4 -3
- package/dist/TabGroup/TabTrigger.torp +6 -6
- package/dist/metafile-cjs.json +1 -1
- package/dist/metafile-esm.json +1 -1
- package/dist/mount/disableScroll.ts +28 -0
- package/dist/mount/hoverTrigger.ts +59 -0
- package/dist/mount/trapFocus.ts +58 -0
- package/dist/utils/documentEvents.ts +17 -0
- package/dist/utils/getScrollParent.ts +22 -0
- package/dist/utils/setContextPosition.ts +31 -0
- package/dist/utils/setPopoverPosition.ts +138 -0
- package/package.json +21 -6
- package/scripts/postbuild.ts +17 -5
- package/src/Accordion/Accordion.torp +53 -54
- package/src/Accordion/AccordionContent.torp +5 -5
- package/src/Accordion/AccordionHeader.torp +5 -4
- package/src/Accordion/AccordionItem.torp +13 -8
- package/src/Accordion/AccordionTrigger.torp +5 -5
- package/src/Accordion/AccordionTypes.ts +1 -0
- package/src/Dialog/Dialog.torp +156 -0
- package/src/Dialog/DialogBody.torp +34 -0
- package/src/Dialog/DialogButton.torp +48 -0
- package/src/Dialog/DialogFooter.torp +13 -0
- package/src/Dialog/DialogHeader.torp +34 -0
- package/src/Dialog/DialogTypes.ts +16 -0
- package/src/Dialog/index.ts +7 -0
- package/src/Dialog.ts +7 -0
- package/src/NavMenu/NavMenu.torp +178 -0
- package/src/NavMenu/NavMenuButton.torp +46 -0
- package/src/NavMenu/NavMenuElement.torp +43 -0
- package/src/NavMenu/NavMenuGroup.torp +30 -0
- package/src/NavMenu/NavMenuGroupHeader.torp +30 -0
- package/src/NavMenu/NavMenuLink.torp +52 -0
- package/src/NavMenu/NavMenuPopout.torp +69 -0
- package/src/NavMenu/NavMenuPopoutButton.torp +120 -0
- package/src/NavMenu/NavMenuPopoutContent.torp +79 -0
- package/src/NavMenu/NavMenuSeparator.torp +14 -0
- package/src/NavMenu/NavMenuTypes.ts +32 -0
- package/src/NavMenu/index.ts +23 -0
- package/src/NavMenu.ts +23 -0
- package/src/Popover/Popover.torp +105 -0
- package/src/Popover/PopoverContentAnchored.torp +107 -0
- package/src/Popover/PopoverContentContextual.torp +99 -0
- package/src/Popover/PopoverContentStatic.torp +78 -0
- package/src/Popover/PopoverOverlay.torp +32 -0
- package/src/Popover/PopoverTrigger.torp +29 -0
- package/src/Popover/PopoverTriggerContextual.torp +37 -0
- package/src/Popover/PopoverTriggerHover.torp +30 -0
- package/src/Popover/PopoverTypes.ts +30 -0
- package/src/Popover/index.ts +29 -0
- package/src/Popover/mountClickPopover.ts +50 -0
- package/src/Popover/mountContextPopover.ts +50 -0
- package/src/Popover/mountHoverPopover.ts +57 -0
- package/src/Popover/showPopover.ts +24 -0
- package/src/Popover/showPopoverPrompt.ts +23 -0
- package/src/Popover.ts +29 -0
- package/src/TabGroup/TabContent.torp +4 -4
- package/src/TabGroup/TabGroup.torp +58 -59
- package/src/TabGroup/TabGroupTypes.ts +1 -0
- package/src/TabGroup/TabHeader.torp +10 -8
- package/src/TabGroup/TabList.torp +4 -3
- package/src/TabGroup/TabTrigger.torp +6 -6
- package/src/mount/disableScroll.ts +28 -0
- package/src/mount/hoverTrigger.ts +59 -0
- package/src/mount/trapFocus.ts +58 -0
- package/src/utils/documentEvents.ts +17 -0
- package/src/utils/getScrollParent.ts +22 -0
- package/src/utils/setContextPosition.ts +31 -0
- package/src/utils/setPopoverPosition.ts +138 -0
- package/test/Accordion/accessibility.test.ts +0 -3
- package/test/Accordion/for-items.test.ts +2 -4
- package/test/Accordion/keyboard.test.ts +0 -3
- package/test/Accordion/multiple-item-toggle.test.ts +3 -5
- package/test/Accordion/single-item-toggle.test.ts +3 -5
- package/test/Dialog/accessibility-alert.test.ts +40 -0
- package/test/Dialog/accessibility-modal.test.ts +52 -0
- package/test/Dialog/components/CustomDialog.torp +20 -0
- package/test/Dialog/components/DialogAccessibility.torp +31 -0
- package/test/Dialog/components/DialogFunction.torp +22 -0
- package/test/Dialog/components/DialogVariable.torp +35 -0
- package/test/Dialog/function.test.ts +26 -0
- package/test/Dialog/variable.test.ts +27 -0
- package/test/NavMenu/accessibility.test.ts +97 -0
- package/test/NavMenu/basic.test.ts +22 -0
- package/test/NavMenu/components/NavMenu.torp +28 -0
- package/test/NavMenu/components/NavMenuAccessibility.torp +35 -0
- package/test/TabGroup/for-items.test.ts +2 -4
- package/test/TabGroup/item-trigger.test.ts +3 -5
- package/tsup.config.ts +8 -1
|
@@ -0,0 +1,26 @@
|
|
|
1
|
+
import { getByText, queryByText } from "@testing-library/dom";
|
|
2
|
+
import "@testing-library/jest-dom/vitest";
|
|
3
|
+
import userEvent from "@testing-library/user-event";
|
|
4
|
+
import { mount } from "@torpor/view";
|
|
5
|
+
import { describe, expect, it } from "vitest";
|
|
6
|
+
import DialogFunction from "./components/DialogFunction.torp";
|
|
7
|
+
|
|
8
|
+
describe("Dialog", () => {
|
|
9
|
+
it("Showing with a function", async () => {
|
|
10
|
+
const container = document.createElement("div");
|
|
11
|
+
document.body.appendChild(container);
|
|
12
|
+
mount(container, DialogFunction);
|
|
13
|
+
|
|
14
|
+
// By default, the modal shouldn't be shown
|
|
15
|
+
expect(queryByText(container, "Which color do you prefer?")).not.toBeInTheDocument();
|
|
16
|
+
|
|
17
|
+
// Clicking the button should show the modal
|
|
18
|
+
await userEvent.click(getByText(container, "Show the modal"));
|
|
19
|
+
expect(queryByText(container, "Which color do you prefer?")).toBeInTheDocument();
|
|
20
|
+
|
|
21
|
+
// Clicking the blue button should hide the modal and set the value
|
|
22
|
+
await userEvent.click(getByText(container, "Blue"));
|
|
23
|
+
expect(queryByText(container, "Which color do you prefer?")).not.toBeInTheDocument();
|
|
24
|
+
expect(queryByText(container, "Your favorite color is blue?!")).toBeInTheDocument();
|
|
25
|
+
});
|
|
26
|
+
});
|
|
@@ -0,0 +1,27 @@
|
|
|
1
|
+
import { getByText, queryByText } from "@testing-library/dom";
|
|
2
|
+
import "@testing-library/jest-dom/vitest";
|
|
3
|
+
import userEvent from "@testing-library/user-event";
|
|
4
|
+
import { mount } from "@torpor/view";
|
|
5
|
+
import { describe, expect, it } from "vitest";
|
|
6
|
+
import DialogVariable from "./components/DialogVariable.torp";
|
|
7
|
+
|
|
8
|
+
describe("Dialog", () => {
|
|
9
|
+
it("Showing with a variable", async () => {
|
|
10
|
+
const container = document.createElement("div");
|
|
11
|
+
document.body.appendChild(container);
|
|
12
|
+
mount(container, DialogVariable);
|
|
13
|
+
|
|
14
|
+
// By default, the modal shouldn't be shown
|
|
15
|
+
expect(queryByText(container, "Which color do you prefer?")).not.toBeInTheDocument();
|
|
16
|
+
expect(queryByText(container, "Your favorite color is blue?!")).not.toBeInTheDocument();
|
|
17
|
+
|
|
18
|
+
// Clicking the button should show the modal
|
|
19
|
+
await userEvent.click(getByText(container, "Show the modal"));
|
|
20
|
+
expect(queryByText(container, "Which color do you prefer?")).toBeInTheDocument();
|
|
21
|
+
|
|
22
|
+
// Clicking the blue button should hide the modal and set the value
|
|
23
|
+
await userEvent.click(getByText(container, "Blue"));
|
|
24
|
+
expect(queryByText(container, "Which color do you prefer?")).not.toBeInTheDocument();
|
|
25
|
+
expect(queryByText(container, "Your favorite color is blue?!")).toBeInTheDocument();
|
|
26
|
+
});
|
|
27
|
+
});
|
|
@@ -0,0 +1,97 @@
|
|
|
1
|
+
import { getByText, queryByText } from "@testing-library/dom";
|
|
2
|
+
import "@testing-library/jest-dom/vitest";
|
|
3
|
+
import userEvent from "@testing-library/user-event";
|
|
4
|
+
import { mount } from "@torpor/view";
|
|
5
|
+
import { describe, expect, it } from "vitest";
|
|
6
|
+
import NavMenuAccessibility from "./components/NavMenuAccessibility.torp";
|
|
7
|
+
|
|
8
|
+
describe("NavMenu", () => {
|
|
9
|
+
it("Accessibility", async () => {
|
|
10
|
+
const container = document.createElement("div");
|
|
11
|
+
document.body.appendChild(container);
|
|
12
|
+
mount(container, NavMenuAccessibility);
|
|
13
|
+
|
|
14
|
+
// Tests from https://www.w3.org/WAI/ARIA/apg/patterns/menu/
|
|
15
|
+
// NOTE: NavMenu is a menubar
|
|
16
|
+
|
|
17
|
+
// A menu is a container of items that represent choices. The element serving as the menu has
|
|
18
|
+
// a role of either menu or menubar
|
|
19
|
+
expect(queryByText(container, "Home")?.parentElement).toHaveAttribute("role", "menubar");
|
|
20
|
+
|
|
21
|
+
// The items contained in a menu are child elements of the containing menu or menubar and have
|
|
22
|
+
// any of the following roles:
|
|
23
|
+
// * menuitem
|
|
24
|
+
// * menuitemcheckbox
|
|
25
|
+
// * menuitemradio
|
|
26
|
+
expect(queryByText(container, "Home")).toHaveAttribute("role", "menuitem");
|
|
27
|
+
expect(queryByText(container, "Page")).toHaveAttribute("role", "menuitem");
|
|
28
|
+
expect(queryByText(container, "Disabled")).toHaveAttribute("role", "menuitem");
|
|
29
|
+
expect(queryByText(container, "Subpages")).toHaveAttribute("role", "menuitem");
|
|
30
|
+
|
|
31
|
+
// If activating a menuitem opens a submenu, the menuitem is known as a parent menuitem. A submenu's
|
|
32
|
+
// menu element is:
|
|
33
|
+
// * Contained inside the same menu element as its parent menuitem
|
|
34
|
+
// * Is the sibling element immediately following its parent menuitem
|
|
35
|
+
|
|
36
|
+
// A parent menuitem has aria-haspopup set to either menu or true
|
|
37
|
+
expect(queryByText(container, "Subpages")).toHaveAttribute("aria-haspopup", "true");
|
|
38
|
+
|
|
39
|
+
// A parent menuitem has aria-expanded set to false when its child menu is not visible and set
|
|
40
|
+
// to true when the child menu is visible
|
|
41
|
+
expect(queryByText(container, "Subpages")).toHaveAttribute("aria-expanded", "false");
|
|
42
|
+
await userEvent.click(getByText(container, "Subpages"));
|
|
43
|
+
expect(queryByText(container, "Subpages")).toHaveAttribute("aria-expanded", "true");
|
|
44
|
+
|
|
45
|
+
// One of the following approaches is used to enable scripts to move focus among items in a
|
|
46
|
+
// menu as described in Keyboard Navigation Inside Components:
|
|
47
|
+
// * The menu container has tabindex set to -1 or 0 and aria-activedescendant set to the ID
|
|
48
|
+
// of the focused item
|
|
49
|
+
// * Each item in the menu has tabindex set to -1, except in a menubar, where the first item
|
|
50
|
+
// has tabindex set to 0
|
|
51
|
+
|
|
52
|
+
// When a menuitemcheckbox or menuitemradio is checked, aria-checked is set to true
|
|
53
|
+
// NOTE: We don't (currently?) have checkboxes or radios in NavMenus
|
|
54
|
+
|
|
55
|
+
// When a menu item is disabled, aria-disabled is set to true
|
|
56
|
+
expect(queryByText(container, "Page")).not.toHaveAttribute("aria-disabled");
|
|
57
|
+
expect(queryByText(container, "Disabled")).toHaveAttribute("aria-disabled", "true");
|
|
58
|
+
|
|
59
|
+
// Items in a menu may be divided into groups by placing an element with a role of separator
|
|
60
|
+
// between groups. For example, this technique should be used when a menu contains a set of
|
|
61
|
+
// menuitemradio items
|
|
62
|
+
expect(queryByText(container, "/")).toHaveAttribute("role", "separator");
|
|
63
|
+
|
|
64
|
+
// All separators should have aria-orientation consistent with the separator's orientation
|
|
65
|
+
// NOTE: What does this mean? None of the example separators have aria-orientation set
|
|
66
|
+
|
|
67
|
+
// If a menubar has a visible label, the element with role menubar has aria-labelledby set to
|
|
68
|
+
// a value that refers to the labelling element. Otherwise, the menubar element has a label
|
|
69
|
+
// provided by aria-label
|
|
70
|
+
// NOTE: We only support aria-label and it's required
|
|
71
|
+
expect(queryByText(container, "Home")?.parentElement).toHaveAttribute(
|
|
72
|
+
"aria-label",
|
|
73
|
+
"Site navigation",
|
|
74
|
+
);
|
|
75
|
+
|
|
76
|
+
// If a menubar is vertically oriented, it has aria-orientation set to vertical. The default
|
|
77
|
+
// value of aria-orientation for a menubar is horizontal
|
|
78
|
+
expect(queryByText(container, "Home")?.parentElement).toHaveAttribute(
|
|
79
|
+
"aria-orientation",
|
|
80
|
+
"horizontal",
|
|
81
|
+
);
|
|
82
|
+
expect(queryByText(container, "Subpage 1")?.parentElement).toHaveAttribute(
|
|
83
|
+
"aria-orientation",
|
|
84
|
+
"vertical",
|
|
85
|
+
);
|
|
86
|
+
|
|
87
|
+
// Our own tests
|
|
88
|
+
|
|
89
|
+
// The group should be labeled
|
|
90
|
+
expect(queryByText(container, "Group header")).toBeInTheDocument();
|
|
91
|
+
const headerId = queryByText(container, "Group header")?.id;
|
|
92
|
+
expect(queryByText(container, "Group header")?.parentElement).toHaveAttribute(
|
|
93
|
+
"aria-labelledby",
|
|
94
|
+
headerId,
|
|
95
|
+
);
|
|
96
|
+
});
|
|
97
|
+
});
|
|
@@ -0,0 +1,22 @@
|
|
|
1
|
+
import { getByText, queryByText } from "@testing-library/dom";
|
|
2
|
+
import "@testing-library/jest-dom/vitest";
|
|
3
|
+
import userEvent from "@testing-library/user-event";
|
|
4
|
+
import { mount } from "@torpor/view";
|
|
5
|
+
import { describe, expect, it } from "vitest";
|
|
6
|
+
import NavMenu from "./components/NavMenu.torp";
|
|
7
|
+
|
|
8
|
+
describe("NavMenu", () => {
|
|
9
|
+
it("Basic operation", async () => {
|
|
10
|
+
const container = document.createElement("div");
|
|
11
|
+
document.body.appendChild(container);
|
|
12
|
+
mount(container, NavMenu);
|
|
13
|
+
|
|
14
|
+
// By default, body 1 should be displayed
|
|
15
|
+
expect(queryByText(container, "Home")).toBeInTheDocument();
|
|
16
|
+
expect(queryByText(container, "Subpage 1")).not.toBeInTheDocument();
|
|
17
|
+
|
|
18
|
+
// Clicking header 2 should hide body 1 and reveal body 2
|
|
19
|
+
await userEvent.click(getByText(container, "Subpages"));
|
|
20
|
+
expect(queryByText(container, "Subpage 1")).toBeInTheDocument();
|
|
21
|
+
});
|
|
22
|
+
});
|
|
@@ -0,0 +1,28 @@
|
|
|
1
|
+
import {
|
|
2
|
+
NavMenu,
|
|
3
|
+
NavMenuLink,
|
|
4
|
+
NavMenuPopout,
|
|
5
|
+
NavMenuPopoutButton,
|
|
6
|
+
NavMenuPopoutContent,
|
|
7
|
+
NavMenuSeparator
|
|
8
|
+
} from "../../../src/NavMenu";
|
|
9
|
+
|
|
10
|
+
export default function NavMenu($props: any) {
|
|
11
|
+
@render {
|
|
12
|
+
<NavMenu ariaLabel="Site navigation">
|
|
13
|
+
<NavMenuLink href="/">Home</NavMenuLink>
|
|
14
|
+
<NavMenuLink href="/page1">Page 1</NavMenuLink>
|
|
15
|
+
<NavMenuSeparator />
|
|
16
|
+
<NavMenuPopout>
|
|
17
|
+
<NavMenuPopoutButton>Subpages</NavMenuPopoutButton>
|
|
18
|
+
<NavMenuPopoutContent>
|
|
19
|
+
<NavMenu ariaLabel="Sub site navigation" orientation="vertical">
|
|
20
|
+
<NavMenuLink href="/sub/page1">Subpage 1</NavMenuLink>
|
|
21
|
+
<NavMenuLink href="/sub/page2">Subpage 2</NavMenuLink>
|
|
22
|
+
<NavMenuLink href="/sub/page3">Subpage 3</NavMenuLink>
|
|
23
|
+
</NavMenu>
|
|
24
|
+
</NavMenuPopoutContent>
|
|
25
|
+
</NavMenuPopout>
|
|
26
|
+
</NavMenu>
|
|
27
|
+
}
|
|
28
|
+
}
|
|
@@ -0,0 +1,35 @@
|
|
|
1
|
+
import {
|
|
2
|
+
NavMenu,
|
|
3
|
+
NavMenuLink,
|
|
4
|
+
NavMenuPopout,
|
|
5
|
+
NavMenuPopoutButton,
|
|
6
|
+
NavMenuPopoutContent,
|
|
7
|
+
NavMenuGroup,
|
|
8
|
+
NavMenuGroupHeader,
|
|
9
|
+
NavMenuSeparator
|
|
10
|
+
} from "../../../src/NavMenu";
|
|
11
|
+
|
|
12
|
+
export default function NavMenuAccessibility($props: any) {
|
|
13
|
+
@render {
|
|
14
|
+
<NavMenu ariaLabel="Site navigation">
|
|
15
|
+
<NavMenuLink href="/">Home</NavMenuLink>
|
|
16
|
+
<NavMenuLink href="/page1">Page</NavMenuLink>
|
|
17
|
+
<NavMenuLink href="/disabled" disabled>Disabled</NavMenuLink>
|
|
18
|
+
<NavMenuSeparator>/</NavMenuSeparator>
|
|
19
|
+
<NavMenuPopout>
|
|
20
|
+
<NavMenuPopoutButton>Subpages</NavMenuPopoutButton>
|
|
21
|
+
<NavMenuPopoutContent>
|
|
22
|
+
<NavMenu ariaLabel="Sub site navigation" orientation="vertical">
|
|
23
|
+
<NavMenuLink href="/sub/page1">Subpage 1</NavMenuLink>
|
|
24
|
+
<NavMenuLink href="/sub/page2">Subpage 2</NavMenuLink>
|
|
25
|
+
<NavMenuLink href="/sub/page3">Subpage 3</NavMenuLink>
|
|
26
|
+
</NavMenu>
|
|
27
|
+
</NavMenuPopoutContent>
|
|
28
|
+
</NavMenuPopout>
|
|
29
|
+
<NavMenuGroup>
|
|
30
|
+
<NavMenuGroupHeader as="h4">Group header</NavMenuGroupHeader>
|
|
31
|
+
<NavMenuLink href="/grouped-page">Grouped page</NavMenuLink>
|
|
32
|
+
</NavMenuGroup>
|
|
33
|
+
</NavMenu>
|
|
34
|
+
}
|
|
35
|
+
}
|
|
@@ -7,8 +7,6 @@ import TabGroupList from "./components/TabGroupList.torp";
|
|
|
7
7
|
|
|
8
8
|
describe("TabGroup", () => {
|
|
9
9
|
it("Items in a for loop", async () => {
|
|
10
|
-
const user = userEvent.setup();
|
|
11
|
-
|
|
12
10
|
let $state = $watch({
|
|
13
11
|
value: "1",
|
|
14
12
|
items: [
|
|
@@ -35,7 +33,7 @@ describe("TabGroup", () => {
|
|
|
35
33
|
expect(queryByText(container, "Content 3")).not.toBeInTheDocument();
|
|
36
34
|
|
|
37
35
|
// Clicking header 1 should reveal body 1
|
|
38
|
-
await
|
|
36
|
+
await userEvent.click(getByText(container, "Item 1"));
|
|
39
37
|
expect(queryByText(container, "Content 1")).toBeInTheDocument();
|
|
40
38
|
|
|
41
39
|
$state.items.push({ id: 3, header: "Item 4", text: "Content 4" });
|
|
@@ -47,7 +45,7 @@ describe("TabGroup", () => {
|
|
|
47
45
|
expect(queryByText(container, "Content 4")).not.toBeInTheDocument();
|
|
48
46
|
|
|
49
47
|
// Clicking header 4 should reveal body 4
|
|
50
|
-
await
|
|
48
|
+
await userEvent.click(getByText(container, "Item 4"));
|
|
51
49
|
expect(queryByText(container, "Content 1")).not.toBeInTheDocument();
|
|
52
50
|
expect(queryByText(container, "Content 4")).toBeInTheDocument();
|
|
53
51
|
});
|
|
@@ -7,8 +7,6 @@ import TabGroupTrigger from "./components/TabGroupTrigger.torp";
|
|
|
7
7
|
|
|
8
8
|
describe("TabGroup", () => {
|
|
9
9
|
it("Item trigger", async () => {
|
|
10
|
-
const user = userEvent.setup();
|
|
11
|
-
|
|
12
10
|
const container = document.createElement("div");
|
|
13
11
|
document.body.appendChild(container);
|
|
14
12
|
mount(container, TabGroupTrigger);
|
|
@@ -18,16 +16,16 @@ describe("TabGroup", () => {
|
|
|
18
16
|
expect(queryByText(container, "Content 3")).not.toBeInTheDocument();
|
|
19
17
|
|
|
20
18
|
// Clicking header 1 should reveal body 1
|
|
21
|
-
await
|
|
19
|
+
await userEvent.click(getByText(container, "Header 1"));
|
|
22
20
|
expect(queryByText(container, "Content 1")).toBeInTheDocument();
|
|
23
21
|
|
|
24
22
|
// Clicking header 2 should hide body 1 and reveal body 2
|
|
25
|
-
await
|
|
23
|
+
await userEvent.click(getByText(container, "Header 2"));
|
|
26
24
|
expect(queryByText(container, "Content 1")).not.toBeInTheDocument();
|
|
27
25
|
expect(queryByText(container, "Content 2")).toBeInTheDocument();
|
|
28
26
|
|
|
29
27
|
// Clicking header 2 again should keep body 2
|
|
30
|
-
await
|
|
28
|
+
await userEvent.click(getByText(container, "Header 2"));
|
|
31
29
|
expect(queryByText(container, "Content 1")).not.toBeInTheDocument();
|
|
32
30
|
expect(queryByText(container, "Content 2")).toBeInTheDocument();
|
|
33
31
|
});
|
package/tsup.config.ts
CHANGED
|
@@ -6,7 +6,14 @@ type Config =
|
|
|
6
6
|
| ((overrideOptions: Options) => Options | Options[] | Promise<Options | Options[]>);
|
|
7
7
|
|
|
8
8
|
export default defineConfig({
|
|
9
|
-
entry: [
|
|
9
|
+
entry: [
|
|
10
|
+
"src/Accordion/index.ts",
|
|
11
|
+
"src/Dialog/index.ts",
|
|
12
|
+
"src/NavMenu/index.ts",
|
|
13
|
+
"src/Popover/index.ts",
|
|
14
|
+
"src/TabGroup/index.ts",
|
|
15
|
+
"src/motion.ts",
|
|
16
|
+
],
|
|
10
17
|
format: ["esm", "cjs"],
|
|
11
18
|
dts: { entry: ["src/motion.ts"] },
|
|
12
19
|
clean: true,
|