@torpor/ui 0.2.0 → 0.3.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 +35 -0
- package/dist/Accordion/Accordion.torp +44 -25
- package/dist/Accordion/AccordionContent.torp +18 -12
- package/dist/Accordion/AccordionHeader.torp +15 -8
- package/dist/Accordion/AccordionItem.torp +34 -17
- package/dist/Accordion/AccordionTrigger.torp +17 -10
- package/dist/Accordion/AccordionTypes.ts +6 -3
- package/dist/Accordion/index.d.ts +100 -35
- package/dist/Breadcrumb/Breadcrumb.torp +18 -10
- package/dist/Breadcrumb/BreadcrumbItem.torp +14 -7
- package/dist/Breadcrumb/BreadcrumbSeparator.torp +10 -3
- package/dist/Breadcrumb/index.d.ts +50 -21
- package/dist/Calendar/Calendar.torp +21 -14
- package/dist/Calendar/CalendarDay.torp +12 -4
- package/dist/Calendar/index.d.ts +16 -18
- package/dist/Contextual/Contextual.torp +125 -0
- package/dist/{Popover/PopoverContentContextual.torp → Contextual/ContextualContent.torp} +21 -12
- package/dist/Contextual/ContextualTrigger.torp +66 -0
- package/dist/Contextual/ContextualTypes.ts +30 -0
- package/dist/Contextual/index.d.ts +90 -0
- package/dist/Contextual/index.js +14 -0
- package/dist/Contextual/index.js.map +1 -0
- package/dist/Dialog/Dialog.torp +49 -73
- package/dist/Dialog/DialogBody.torp +15 -9
- package/dist/Dialog/DialogButton.torp +27 -13
- package/dist/Dialog/DialogFooter.torp +11 -3
- package/dist/Dialog/DialogHeader.torp +15 -8
- package/dist/Dialog/DialogTypes.ts +3 -2
- package/dist/Dialog/index.d.ts +83 -35
- package/dist/Disclosure/Disclosure.torp +34 -25
- package/dist/Disclosure/DisclosureContent.torp +18 -12
- package/dist/Disclosure/DisclosureHeader.torp +16 -9
- package/dist/Disclosure/DisclosureTrigger.torp +15 -8
- package/dist/Disclosure/DisclosureTypes.ts +0 -1
- package/dist/Disclosure/index.d.ts +67 -28
- package/dist/Drawer/Drawer.torp +109 -68
- package/dist/Drawer/DrawerContent.torp +80 -0
- package/dist/Drawer/DrawerOverlay.torp +38 -0
- package/dist/Drawer/DrawerTrigger.torp +35 -0
- package/dist/Drawer/DrawerTypes.ts +24 -0
- package/dist/Drawer/index.d.ts +96 -8
- package/dist/Drawer/index.js +13 -1
- package/dist/Form/Field.torp +91 -0
- package/dist/Form/Form.torp +129 -0
- package/dist/Form/FormTypes.ts +30 -0
- package/dist/Form/Input.torp +97 -0
- package/dist/Form/Label.torp +31 -0
- package/dist/Form/Message.torp +35 -0
- package/dist/Form/StandardSchemaV1.ts +70 -0
- package/dist/Form/index.d.ts +131 -0
- package/dist/Form/index.js +22 -0
- package/dist/Form/index.js.map +1 -0
- package/dist/Menu/Menu.torp +25 -15
- package/dist/Menu/MenuButton.torp +30 -13
- package/dist/Menu/MenuCheck.torp +29 -14
- package/dist/Menu/MenuGroup.torp +14 -6
- package/dist/Menu/MenuIndicator.torp +14 -7
- package/dist/Menu/MenuPopout.torp +23 -15
- package/dist/Menu/MenuPopoutContent.torp +17 -10
- package/dist/Menu/MenuPopoutTrigger.torp +23 -16
- package/dist/Menu/MenuRadio.torp +27 -16
- package/dist/Menu/MenuRadioGroup.torp +34 -15
- package/dist/Menu/MenuSeparator.torp +11 -3
- package/dist/Menu/MenuTypes.ts +7 -5
- package/dist/Menu/index.d.ts +176 -77
- package/dist/MenuBar/MenuBar.torp +24 -16
- package/dist/MenuBar/MenuBarItem.torp +24 -16
- package/dist/MenuBar/MenuBarItemContent.torp +18 -11
- package/dist/MenuBar/MenuBarItemTrigger.torp +15 -9
- package/dist/MenuBar/index.d.ts +79 -28
- package/dist/Modal/Modal.torp +118 -0
- package/dist/Modal/ModalContent.torp +77 -0
- package/dist/Modal/ModalOverlay.torp +38 -0
- package/dist/Modal/ModalTrigger.torp +50 -0
- package/dist/Modal/ModalTypes.ts +22 -0
- package/dist/Modal/index.d.ts +108 -0
- package/dist/Modal/index.js +33 -0
- package/dist/Modal/index.js.map +1 -0
- package/dist/Modal/showModal.ts +19 -0
- package/dist/Modal/showPrompt.ts +23 -0
- package/dist/NavMenu/NavMenu.torp +18 -10
- package/dist/NavMenu/NavMenuButton.torp +15 -10
- package/dist/NavMenu/NavMenuElement.torp +19 -11
- package/dist/NavMenu/NavMenuGroup.torp +13 -6
- package/dist/NavMenu/NavMenuGroupHeader.torp +15 -8
- package/dist/NavMenu/NavMenuLink.torp +21 -16
- package/dist/NavMenu/NavMenuPopout.torp +34 -18
- package/dist/NavMenu/NavMenuPopoutButton.torp +23 -18
- package/dist/NavMenu/NavMenuPopoutContent.torp +23 -13
- package/dist/NavMenu/NavMenuSeparator.torp +10 -3
- package/dist/NavMenu/index.d.ts +153 -70
- package/dist/Notification/Notification.torp +35 -16
- package/dist/Notification/NotificationClose.torp +10 -3
- package/dist/Notification/NotificationContainer.torp +11 -3
- package/dist/Notification/NotificationContent.torp +11 -3
- package/dist/Notification/index.d.ts +46 -28
- package/dist/Popover/Popover.torp +48 -28
- package/dist/Popover/PopoverContent.torp +42 -8
- package/dist/Popover/PopoverTrigger.torp +32 -3
- package/dist/Popover/PopoverTypes.ts +1 -1
- package/dist/Popover/index.d.ts +48 -111
- package/dist/Popover/index.js +1 -163
- package/dist/Popover/index.js.map +1 -1
- package/dist/TabGroup/TabContent.torp +20 -11
- package/dist/TabGroup/TabGroup.torp +58 -40
- package/dist/TabGroup/TabGroupTypes.ts +10 -5
- package/dist/TabGroup/TabHeader.torp +26 -10
- package/dist/TabGroup/TabList.torp +14 -7
- package/dist/TabGroup/TabTrigger.torp +17 -10
- package/dist/TabGroup/index.d.ts +101 -35
- package/dist/icons/ArrowDown.torp +5 -3
- package/dist/icons/ArrowLeft.torp +5 -3
- package/dist/icons/ArrowRight.torp +5 -3
- package/dist/icons/ArrowUp.torp +5 -3
- package/dist/icons/Bars.torp +5 -3
- package/dist/icons/Check.torp +5 -3
- package/dist/icons/ChevronDown.torp +5 -3
- package/dist/icons/ChevronLeft.torp +5 -3
- package/dist/icons/ChevronRight.torp +5 -3
- package/dist/icons/ChevronUp.torp +5 -3
- package/dist/icons/Cross.torp +5 -3
- package/dist/icons/IconTypes.ts +6 -0
- package/dist/icons/Loading.torp +5 -3
- package/dist/icons/Minus.torp +5 -3
- package/dist/icons/Plus.torp +5 -3
- package/dist/icons/index.d.ts +271 -126
- package/dist/index.d.ts +17 -4
- package/dist/metafile-esm.json +1 -1
- package/dist/motion/fade.ts +15 -6
- package/dist/motion/grow.ts +23 -0
- package/dist/motion/index.d.ts +19 -2
- package/dist/motion/index.js +93 -3
- package/dist/motion/index.js.map +1 -1
- package/dist/motion/measure.ts +28 -0
- package/dist/motion/slide.ts +45 -0
- package/dist/mount/clickPopover.ts +51 -0
- package/dist/mount/contextPopover.ts +51 -0
- package/dist/mount/hoverPopover.ts +58 -0
- package/package.json +28 -12
- package/scripts/postbuild.ts +11 -1
- package/src/Accordion/Accordion.torp +44 -25
- package/src/Accordion/AccordionContent.torp +18 -12
- package/src/Accordion/AccordionHeader.torp +15 -8
- package/src/Accordion/AccordionItem.torp +34 -17
- package/src/Accordion/AccordionTrigger.torp +17 -10
- package/src/Accordion/AccordionTypes.ts +6 -3
- package/src/Breadcrumb/Breadcrumb.torp +18 -10
- package/src/Breadcrumb/BreadcrumbItem.torp +14 -7
- package/src/Breadcrumb/BreadcrumbSeparator.torp +10 -3
- package/src/Calendar/Calendar.torp +21 -14
- package/src/Calendar/CalendarDay.torp +12 -4
- package/src/Contextual/Contextual.torp +125 -0
- package/src/{Popover/PopoverContentContextual.torp → Contextual/ContextualContent.torp} +21 -12
- package/src/Contextual/ContextualTrigger.torp +66 -0
- package/src/Contextual/ContextualTypes.ts +30 -0
- package/src/Contextual/index.ts +5 -0
- package/src/Dialog/Dialog.torp +49 -73
- package/src/Dialog/DialogBody.torp +15 -9
- package/src/Dialog/DialogButton.torp +27 -13
- package/src/Dialog/DialogFooter.torp +11 -3
- package/src/Dialog/DialogHeader.torp +15 -8
- package/src/Dialog/DialogTypes.ts +3 -2
- package/src/Disclosure/Disclosure.torp +34 -25
- package/src/Disclosure/DisclosureContent.torp +18 -12
- package/src/Disclosure/DisclosureHeader.torp +16 -9
- package/src/Disclosure/DisclosureTrigger.torp +15 -8
- package/src/Disclosure/DisclosureTypes.ts +0 -1
- package/src/Drawer/Drawer.torp +109 -68
- package/src/Drawer/DrawerContent.torp +80 -0
- package/src/Drawer/DrawerOverlay.torp +38 -0
- package/src/Drawer/DrawerTrigger.torp +35 -0
- package/src/Drawer/DrawerTypes.ts +24 -0
- package/src/Drawer/index.ts +4 -1
- package/src/Form/Field.torp +91 -0
- package/src/Form/Form.torp +129 -0
- package/src/Form/FormTypes.ts +30 -0
- package/src/Form/Input.torp +97 -0
- package/src/Form/Label.torp +31 -0
- package/src/Form/Message.torp +35 -0
- package/src/Form/StandardSchemaV1.ts +70 -0
- package/src/Form/index.ts +7 -0
- package/src/Menu/Menu.torp +25 -15
- package/src/Menu/MenuButton.torp +30 -13
- package/src/Menu/MenuCheck.torp +29 -14
- package/src/Menu/MenuGroup.torp +14 -6
- package/src/Menu/MenuIndicator.torp +14 -7
- package/src/Menu/MenuPopout.torp +23 -15
- package/src/Menu/MenuPopoutContent.torp +17 -10
- package/src/Menu/MenuPopoutTrigger.torp +23 -16
- package/src/Menu/MenuRadio.torp +27 -16
- package/src/Menu/MenuRadioGroup.torp +34 -15
- package/src/Menu/MenuSeparator.torp +11 -3
- package/src/Menu/MenuTypes.ts +7 -5
- package/src/MenuBar/MenuBar.torp +24 -16
- package/src/MenuBar/MenuBarItem.torp +24 -16
- package/src/MenuBar/MenuBarItemContent.torp +18 -11
- package/src/MenuBar/MenuBarItemTrigger.torp +15 -9
- package/src/Modal/Modal.torp +118 -0
- package/src/Modal/ModalContent.torp +77 -0
- package/src/Modal/ModalOverlay.torp +38 -0
- package/src/Modal/ModalTrigger.torp +50 -0
- package/src/Modal/ModalTypes.ts +22 -0
- package/src/Modal/index.ts +10 -0
- package/src/Modal/showModal.ts +19 -0
- package/src/Modal/showPrompt.ts +23 -0
- package/src/NavMenu/NavMenu.torp +18 -10
- package/src/NavMenu/NavMenuButton.torp +15 -10
- package/src/NavMenu/NavMenuElement.torp +19 -11
- package/src/NavMenu/NavMenuGroup.torp +13 -6
- package/src/NavMenu/NavMenuGroupHeader.torp +15 -8
- package/src/NavMenu/NavMenuLink.torp +21 -16
- package/src/NavMenu/NavMenuPopout.torp +34 -18
- package/src/NavMenu/NavMenuPopoutButton.torp +23 -18
- package/src/NavMenu/NavMenuPopoutContent.torp +23 -13
- package/src/NavMenu/NavMenuSeparator.torp +10 -3
- package/src/Notification/Notification.torp +35 -16
- package/src/Notification/NotificationClose.torp +10 -3
- package/src/Notification/NotificationContainer.torp +11 -3
- package/src/Notification/NotificationContent.torp +11 -3
- package/src/Popover/Popover.torp +48 -28
- package/src/Popover/PopoverContent.torp +42 -8
- package/src/Popover/PopoverTrigger.torp +32 -3
- package/src/Popover/PopoverTypes.ts +1 -1
- package/src/Popover/index.ts +1 -24
- package/src/Slider/Slider.torp +3 -3
- package/src/TabGroup/TabContent.torp +20 -11
- package/src/TabGroup/TabGroup.torp +58 -40
- package/src/TabGroup/TabGroupTypes.ts +10 -5
- package/src/TabGroup/TabHeader.torp +26 -10
- package/src/TabGroup/TabList.torp +14 -7
- package/src/TabGroup/TabTrigger.torp +17 -10
- package/src/icons/ArrowDown.torp +5 -3
- package/src/icons/ArrowLeft.torp +5 -3
- package/src/icons/ArrowRight.torp +5 -3
- package/src/icons/ArrowUp.torp +5 -3
- package/src/icons/Bars.torp +5 -3
- package/src/icons/Check.torp +5 -3
- package/src/icons/ChevronDown.torp +5 -3
- package/src/icons/ChevronLeft.torp +5 -3
- package/src/icons/ChevronRight.torp +5 -3
- package/src/icons/ChevronUp.torp +5 -3
- package/src/icons/Cross.torp +5 -3
- package/src/icons/IconTypes.ts +6 -0
- package/src/icons/Loading.torp +5 -3
- package/src/icons/Minus.torp +5 -3
- package/src/icons/Plus.torp +5 -3
- package/src/motion/fade.ts +15 -6
- package/src/motion/grow.ts +23 -0
- package/src/motion/index.ts +4 -1
- package/src/motion/measure.ts +28 -0
- package/src/motion/slide.ts +45 -0
- package/src/mount/clickPopover.ts +51 -0
- package/src/mount/contextPopover.ts +51 -0
- package/src/mount/hoverPopover.ts +58 -0
- package/test/Accordion/components/AccordionAccessibility.torp +1 -1
- package/test/Accordion/components/AccordionKeyboard.torp +1 -1
- package/test/Accordion/components/AccordionList.torp +1 -1
- package/test/Accordion/components/AccordionMultiple.torp +2 -2
- package/test/Accordion/components/AccordionSingle.torp +2 -2
- package/test/Dialog/accessibility-modal.test.ts +2 -2
- package/test/Dialog/components/DialogAccessibility.torp +8 -14
- package/test/Dialog/components/DialogFunction.torp +20 -4
- package/test/Dialog/components/DialogModal.torp +30 -0
- package/test/Dialog/components/DialogVariable.torp +7 -7
- package/test/Disclosure/accessibility.test.ts +3 -2
- package/test/Disclosure/components/DisclosureTest.torp +1 -1
- package/test/Disclosure/toggle.test.ts +3 -2
- package/test/Form/components/FieldTest.torp +25 -0
- package/test/Form/components/FormTest.torp +31 -0
- package/test/Form/components/InputTest.torp +9 -0
- package/test/Form/field.test.ts +34 -0
- package/test/Form/form.test.ts +34 -0
- package/test/Form/input.test.ts +19 -0
- package/test/Menu/accessibility.test.ts +3 -2
- package/test/Menu/basic.test.ts +11 -10
- package/test/Menu/components/MenuAccessibility.torp +5 -5
- package/test/Menu/components/MenuBasic.torp +5 -5
- package/test/MenuBar/accessibility.test.ts +3 -2
- package/test/MenuBar/basic.test.ts +3 -2
- package/test/NavMenu/basic.test.ts +1 -1
- package/test/NavMenu/components/{NavMenu.torp → NavMenuBasic.torp} +1 -1
- package/test/Notification/components/NotificationFunction.torp +0 -3
- package/test/Notification/components/NotificationVariable.torp +1 -1
- package/test/Popover/components/PopoverFunction.torp +37 -0
- package/test/Popover/components/PopoverTrigger.torp +36 -0
- package/test/Popover/components/{PromptVariable.torp → PopoverVariable.torp} +5 -3
- package/test/Popover/function.test.ts +2 -7
- package/test/Popover/trigger.test.ts +27 -0
- package/test/Popover/variable.test.ts +2 -2
- package/test/TabGroup/components/TabGroupAccessibility.torp +1 -1
- package/test/TabGroup/components/TabGroupKeyboard.torp +1 -1
- package/test/TabGroup/components/TabGroupList.torp +1 -1
- package/test/TabGroup/components/TabGroupTrigger.torp +1 -1
- package/tsup.config.ts +3 -1
- package/dist/Popover/PopoverContentAnchored.torp +0 -106
- package/dist/Popover/PopoverOverlay.torp +0 -30
- package/dist/Popover/PopoverTriggerContextual.torp +0 -37
- package/dist/Popover/PopoverTriggerHover.torp +0 -38
- package/dist/Popover/mountClickPopover.ts +0 -50
- package/dist/Popover/mountContextPopover.ts +0 -50
- package/dist/Popover/mountHoverPopover.ts +0 -57
- package/dist/Popover/showPopoverPrompt.ts +0 -23
- package/src/Popover/PopoverContentAnchored.torp +0 -106
- package/src/Popover/PopoverOverlay.torp +0 -30
- package/src/Popover/PopoverTriggerContextual.torp +0 -37
- package/src/Popover/PopoverTriggerHover.torp +0 -38
- package/src/Popover/mountClickPopover.ts +0 -50
- package/src/Popover/mountContextPopover.ts +0 -50
- package/src/Popover/mountHoverPopover.ts +0 -57
- package/src/Popover/showPopoverPrompt.ts +0 -23
- package/test/Dialog/components/CustomDialog.torp +0 -20
- package/test/Popover/components/PromptFunction.torp +0 -19
|
@@ -0,0 +1,34 @@
|
|
|
1
|
+
import {
|
|
2
|
+
fireEvent,
|
|
3
|
+
getByPlaceholderText,
|
|
4
|
+
queryByPlaceholderText,
|
|
5
|
+
queryByText,
|
|
6
|
+
} from "@testing-library/dom";
|
|
7
|
+
import "@testing-library/jest-dom/vitest";
|
|
8
|
+
import userEvent from "@testing-library/user-event";
|
|
9
|
+
import { mount } from "@torpor/view";
|
|
10
|
+
import { expect, test } from "vitest";
|
|
11
|
+
import Field from "./components/FieldTest.torp";
|
|
12
|
+
|
|
13
|
+
test("Field", async () => {
|
|
14
|
+
const container = document.createElement("div");
|
|
15
|
+
document.body.appendChild(container);
|
|
16
|
+
mount(container, Field);
|
|
17
|
+
|
|
18
|
+
// Label, input, message
|
|
19
|
+
expect(queryByText(container, "Name:")).not.toBeNull();
|
|
20
|
+
expect(queryByPlaceholderText(container, "Name...")).not.toBeNull();
|
|
21
|
+
expect(queryByText(container, "Name is required!")).toBeNull();
|
|
22
|
+
|
|
23
|
+
// Label `for` should be automatically hooked up
|
|
24
|
+
expect(queryByPlaceholderText(container, "Name...")).toHaveAttribute("id", "name-id");
|
|
25
|
+
expect(queryByText(container, "Name:")).toHaveAttribute("for", "name-id");
|
|
26
|
+
|
|
27
|
+
// Validation should be fired on blur
|
|
28
|
+
fireEvent.blur(queryByPlaceholderText(container, "Name...")!);
|
|
29
|
+
expect(queryByText(container, "Name is required!")).not.toBeNull();
|
|
30
|
+
|
|
31
|
+
// After blur, validation should fire on input
|
|
32
|
+
await userEvent.type(getByPlaceholderText(container, "Name..."), "G");
|
|
33
|
+
expect(queryByText(container, "Name is required!")).toBeNull();
|
|
34
|
+
});
|
|
@@ -0,0 +1,34 @@
|
|
|
1
|
+
import {
|
|
2
|
+
getByPlaceholderText,
|
|
3
|
+
getByText,
|
|
4
|
+
queryByPlaceholderText,
|
|
5
|
+
queryByText,
|
|
6
|
+
} from "@testing-library/dom";
|
|
7
|
+
import "@testing-library/jest-dom/vitest";
|
|
8
|
+
import userEvent from "@testing-library/user-event";
|
|
9
|
+
import { mount } from "@torpor/view";
|
|
10
|
+
import { expect, test } from "vitest";
|
|
11
|
+
import Form from "./components/FormTest.torp";
|
|
12
|
+
|
|
13
|
+
test("Form", async () => {
|
|
14
|
+
const container = document.createElement("div");
|
|
15
|
+
document.body.appendChild(container);
|
|
16
|
+
mount(container, Form);
|
|
17
|
+
|
|
18
|
+
// Label, input, message
|
|
19
|
+
expect(queryByText(container, "Name:")).not.toBeNull();
|
|
20
|
+
expect(queryByPlaceholderText(container, "Name...")).not.toBeNull();
|
|
21
|
+
expect(queryByText(container, "Name is required!")).toBeNull();
|
|
22
|
+
|
|
23
|
+
// Label `for` should be automatically hooked up
|
|
24
|
+
expect(queryByPlaceholderText(container, "Name...")).toHaveAttribute("id", "name-id");
|
|
25
|
+
expect(queryByText(container, "Name:")).toHaveAttribute("for", "name-id");
|
|
26
|
+
|
|
27
|
+
// Validation should be fired on submit
|
|
28
|
+
await userEvent.click(getByText(container, "Submit"));
|
|
29
|
+
expect(queryByText(container, "Name is required!")).not.toBeNull();
|
|
30
|
+
|
|
31
|
+
// After submitting, validation should fire on input
|
|
32
|
+
await userEvent.type(getByPlaceholderText(container, "Name..."), "G");
|
|
33
|
+
expect(queryByText(container, "Name is required!")).toBeNull();
|
|
34
|
+
});
|
|
@@ -0,0 +1,19 @@
|
|
|
1
|
+
import { getByPlaceholderText, queryByPlaceholderText } 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 { expect, test } from "vitest";
|
|
6
|
+
import Input from "./components/InputTest.torp";
|
|
7
|
+
|
|
8
|
+
test("Input", async () => {
|
|
9
|
+
let props = { value: "" };
|
|
10
|
+
|
|
11
|
+
const container = document.createElement("div");
|
|
12
|
+
document.body.appendChild(container);
|
|
13
|
+
mount(container, Input, props);
|
|
14
|
+
|
|
15
|
+
expect(queryByPlaceholderText(container, "Name...")).not.toBeNull();
|
|
16
|
+
|
|
17
|
+
await userEvent.type(getByPlaceholderText(container, "Name..."), "Greg");
|
|
18
|
+
expect(props.value).toBe("Greg");
|
|
19
|
+
});
|
|
@@ -1,5 +1,6 @@
|
|
|
1
|
-
import {
|
|
1
|
+
import { getByText, queryByText } from "@testing-library/dom";
|
|
2
2
|
import "@testing-library/jest-dom/vitest";
|
|
3
|
+
import userEvent from "@testing-library/user-event";
|
|
3
4
|
import { mount } from "@torpor/view";
|
|
4
5
|
import { describe, expect, it } from "vitest";
|
|
5
6
|
import MenuAccessibility from "./components/MenuAccessibility.torp";
|
|
@@ -35,7 +36,7 @@ describe("Menu", () => {
|
|
|
35
36
|
// A parent menuitem has aria-expanded set to false when its child menu is not visible and set
|
|
36
37
|
// to true when the child menu is visible
|
|
37
38
|
expect(queryByText(container, "Check popout button")).toHaveAttribute("aria-expanded", "false");
|
|
38
|
-
|
|
39
|
+
await userEvent.click(getByText(container, "Check popout button"));
|
|
39
40
|
expect(queryByText(container, "Check popout button")).toHaveAttribute("aria-expanded", "true");
|
|
40
41
|
|
|
41
42
|
// One of the following approaches is used to enable scripts to move focus among items in a
|
package/test/Menu/basic.test.ts
CHANGED
|
@@ -1,5 +1,6 @@
|
|
|
1
|
-
import {
|
|
1
|
+
import { getByText, queryByText } from "@testing-library/dom";
|
|
2
2
|
import "@testing-library/jest-dom/vitest";
|
|
3
|
+
import userEvent from "@testing-library/user-event";
|
|
3
4
|
import { mount } from "@torpor/view";
|
|
4
5
|
import { describe, expect, it } from "vitest";
|
|
5
6
|
import MenuBasic from "./components/MenuBasic.torp";
|
|
@@ -20,37 +21,37 @@ describe("Menu", () => {
|
|
|
20
21
|
expect(queryByText(container, "Radio 1")).not.toBeInTheDocument();
|
|
21
22
|
|
|
22
23
|
// Clicking a popout button should show the appropriate menu
|
|
23
|
-
|
|
24
|
+
await userEvent.click(getByText(container, "Check popout button"));
|
|
24
25
|
expect(queryByText(container, "Checked 1")).toBeInTheDocument();
|
|
25
26
|
expect(queryByText(container, "Radio 1")).not.toBeInTheDocument();
|
|
26
27
|
|
|
27
28
|
// Clicking another popout button should show that menu instead
|
|
28
|
-
|
|
29
|
+
await userEvent.click(getByText(container, "Radio popout button"));
|
|
29
30
|
//expect(queryByText(container, 'Checked 1')).not.toBeInTheDocument();
|
|
30
31
|
expect(queryByText(container, "Radio 1")).toBeInTheDocument();
|
|
31
32
|
|
|
32
33
|
// Checking a box should show or hide the indicator
|
|
33
|
-
|
|
34
|
+
await userEvent.click(getByText(container, "Check popout button"));
|
|
34
35
|
expect(queryByText(container, "Tick 1")).not.toBeInTheDocument();
|
|
35
36
|
expect(queryByText(container, "Tick 2")).not.toBeInTheDocument();
|
|
36
|
-
|
|
37
|
+
await userEvent.click(getByText(container, "Checked 1"));
|
|
37
38
|
expect(queryByText(container, "Tick 1")).toBeInTheDocument();
|
|
38
39
|
expect(queryByText(container, "Tick 2")).not.toBeInTheDocument();
|
|
39
|
-
|
|
40
|
+
await userEvent.click(getByText(container, "Checked 2"));
|
|
40
41
|
expect(queryByText(container, "Tick 1")).toBeInTheDocument();
|
|
41
42
|
expect(queryByText(container, "Tick 2")).toBeInTheDocument();
|
|
42
|
-
|
|
43
|
+
await userEvent.click(getByText(container, "Checked 1"));
|
|
43
44
|
expect(queryByText(container, "Tick 1")).not.toBeInTheDocument();
|
|
44
45
|
expect(queryByText(container, "Tick 2")).toBeInTheDocument();
|
|
45
46
|
|
|
46
47
|
// Checking a radio should show the indicator, and hide another indicator if already selected
|
|
47
|
-
|
|
48
|
+
await userEvent.click(getByText(container, "Radio popout button"));
|
|
48
49
|
expect(queryByText(container, "Circle 1")).not.toBeInTheDocument();
|
|
49
50
|
expect(queryByText(container, "Circle 2")).not.toBeInTheDocument();
|
|
50
|
-
|
|
51
|
+
await userEvent.click(getByText(container, "Radio 1"));
|
|
51
52
|
expect(queryByText(container, "Circle 1")).toBeInTheDocument();
|
|
52
53
|
expect(queryByText(container, "Circle 2")).not.toBeInTheDocument();
|
|
53
|
-
|
|
54
|
+
await userEvent.click(getByText(container, "Radio 2"));
|
|
54
55
|
expect(queryByText(container, "Circle 1")).not.toBeInTheDocument();
|
|
55
56
|
expect(queryByText(container, "Circle 2")).toBeInTheDocument();
|
|
56
57
|
});
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import {
|
|
1
|
+
import { Modal, ModalContent } from "../../../src/Modal";
|
|
2
2
|
import {
|
|
3
3
|
Menu,
|
|
4
4
|
MenuButton,
|
|
@@ -14,8 +14,8 @@ import {
|
|
|
14
14
|
|
|
15
15
|
export default function MenuAccessibility() {
|
|
16
16
|
@render {
|
|
17
|
-
<
|
|
18
|
-
<
|
|
17
|
+
<Modal visible>
|
|
18
|
+
<ModalContent>
|
|
19
19
|
<Menu ariaLabel="A menu">
|
|
20
20
|
<MenuButton>Menu button</MenuButton>
|
|
21
21
|
<MenuButton disabled>Disabled button</MenuButton>
|
|
@@ -53,7 +53,7 @@ export default function MenuAccessibility() {
|
|
|
53
53
|
</MenuPopoutContent>
|
|
54
54
|
</MenuPopout>
|
|
55
55
|
</Menu>
|
|
56
|
-
</
|
|
57
|
-
</
|
|
56
|
+
</ModalContent>
|
|
57
|
+
</Modal>
|
|
58
58
|
}
|
|
59
59
|
}
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import {
|
|
1
|
+
import { Modal, ModalContent } from "../../../src/Modal";
|
|
2
2
|
import {
|
|
3
3
|
Menu,
|
|
4
4
|
MenuButton,
|
|
@@ -14,8 +14,8 @@ import {
|
|
|
14
14
|
|
|
15
15
|
export default function MenuBasic() {
|
|
16
16
|
@render {
|
|
17
|
-
<
|
|
18
|
-
<
|
|
17
|
+
<Modal visible>
|
|
18
|
+
<ModalContent>
|
|
19
19
|
<Menu ariaLabel="A menu">
|
|
20
20
|
<MenuButton>Menu button</MenuButton>
|
|
21
21
|
<MenuSeparator>---</MenuSeparator>
|
|
@@ -52,7 +52,7 @@ export default function MenuBasic() {
|
|
|
52
52
|
</MenuPopoutContent>
|
|
53
53
|
</MenuPopout>
|
|
54
54
|
</Menu>
|
|
55
|
-
</
|
|
56
|
-
</
|
|
55
|
+
</ModalContent>
|
|
56
|
+
</Modal>
|
|
57
57
|
}
|
|
58
58
|
}
|
|
@@ -1,5 +1,6 @@
|
|
|
1
|
-
import {
|
|
1
|
+
import { getByText, queryByText } from "@testing-library/dom";
|
|
2
2
|
import "@testing-library/jest-dom/vitest";
|
|
3
|
+
import userEvent from "@testing-library/user-event";
|
|
3
4
|
import { mount } from "@torpor/view";
|
|
4
5
|
import { describe, expect, it } from "vitest";
|
|
5
6
|
import MenuBarAccessibility from "./components/MenuBarAccessibility.torp";
|
|
@@ -38,7 +39,7 @@ describe("MenuBar", () => {
|
|
|
38
39
|
// A parent menuitem has aria-expanded set to false when its child menu is not visible and set
|
|
39
40
|
// to true when the child menu is visible
|
|
40
41
|
expect(queryByText(container, "Top level")).toHaveAttribute("aria-expanded", "false");
|
|
41
|
-
|
|
42
|
+
await userEvent.click(getByText(container, "Top level"));
|
|
42
43
|
expect(queryByText(container, "Top level")).toHaveAttribute("aria-expanded", "true");
|
|
43
44
|
|
|
44
45
|
// One of the following approaches is used to enable scripts to move focus among items in a
|
|
@@ -1,5 +1,6 @@
|
|
|
1
|
-
import {
|
|
1
|
+
import { getByText, queryByText } from "@testing-library/dom";
|
|
2
2
|
import "@testing-library/jest-dom/vitest";
|
|
3
|
+
import userEvent from "@testing-library/user-event";
|
|
3
4
|
import { mount } from "@torpor/view";
|
|
4
5
|
import { describe, expect, it } from "vitest";
|
|
5
6
|
import MenuBarBasic from "./components/MenuBarBasic.torp";
|
|
@@ -15,7 +16,7 @@ describe("MenuBar", () => {
|
|
|
15
16
|
expect(queryByText(container, "Sub item 1")).not.toBeInTheDocument();
|
|
16
17
|
|
|
17
18
|
// Clicking the top level item should show the sub item
|
|
18
|
-
|
|
19
|
+
await userEvent.click(getByText(container, "Top level"));
|
|
19
20
|
expect(queryByText(container, "Sub item 1")).toBeInTheDocument();
|
|
20
21
|
});
|
|
21
22
|
});
|
|
@@ -3,7 +3,7 @@ import "@testing-library/jest-dom/vitest";
|
|
|
3
3
|
import userEvent from "@testing-library/user-event";
|
|
4
4
|
import { mount } from "@torpor/view";
|
|
5
5
|
import { describe, expect, it } from "vitest";
|
|
6
|
-
import NavMenu from "./components/
|
|
6
|
+
import NavMenu from "./components/NavMenuBasic.torp";
|
|
7
7
|
|
|
8
8
|
describe("NavMenu", () => {
|
|
9
9
|
it("Basic operation", async () => {
|
|
@@ -7,7 +7,7 @@ import {
|
|
|
7
7
|
NavMenuSeparator
|
|
8
8
|
} from "../../../src/NavMenu";
|
|
9
9
|
|
|
10
|
-
export default function
|
|
10
|
+
export default function NavMenuBasic($props: any) {
|
|
11
11
|
@render {
|
|
12
12
|
<NavMenu ariaLabel="Site navigation">
|
|
13
13
|
<NavMenuLink href="/">Home</NavMenuLink>
|
|
@@ -10,7 +10,7 @@ export default function NotificationVariable() {
|
|
|
10
10
|
});
|
|
11
11
|
|
|
12
12
|
@render {
|
|
13
|
-
<button type="button" onclick={(
|
|
13
|
+
<button type="button" onclick={() => ($state.showNotification = !$state.showNotification)}>
|
|
14
14
|
Show a notification
|
|
15
15
|
</button>
|
|
16
16
|
|
|
@@ -0,0 +1,37 @@
|
|
|
1
|
+
import { Popover, PopoverContent, showPopover } from "../../../src/Popover/index";
|
|
2
|
+
import {
|
|
3
|
+
Dialog,
|
|
4
|
+
DialogBody,
|
|
5
|
+
DialogFooter,
|
|
6
|
+
DialogButton
|
|
7
|
+
} from "../../../src/Dialog/index";
|
|
8
|
+
|
|
9
|
+
export default function PopoverFunction() {
|
|
10
|
+
let anchor;
|
|
11
|
+
|
|
12
|
+
async function show() {
|
|
13
|
+
showPopover(CustomDialog, anchor);
|
|
14
|
+
}
|
|
15
|
+
|
|
16
|
+
@render {
|
|
17
|
+
<button type="button" &ref={anchor} onclick={show}>Show the prompt</button>
|
|
18
|
+
}
|
|
19
|
+
}
|
|
20
|
+
|
|
21
|
+
function CustomDialog($props) {
|
|
22
|
+
@render {
|
|
23
|
+
<Popover visible {$props.anchor}>
|
|
24
|
+
<PopoverContent>
|
|
25
|
+
<Dialog>
|
|
26
|
+
<DialogBody>
|
|
27
|
+
<p>Which color do you prefer?</p>
|
|
28
|
+
</DialogBody>
|
|
29
|
+
<DialogFooter>
|
|
30
|
+
<DialogButton value="blue">Blue</DialogButton>
|
|
31
|
+
<DialogButton value="red">Red</DialogButton>
|
|
32
|
+
</DialogFooter>
|
|
33
|
+
</Dialog>
|
|
34
|
+
</PopoverContent>
|
|
35
|
+
</Popover>
|
|
36
|
+
}
|
|
37
|
+
}
|
|
@@ -0,0 +1,36 @@
|
|
|
1
|
+
import { Popover, PopoverContent, PopoverTrigger } from "../../../src/Popover/index";
|
|
2
|
+
import {
|
|
3
|
+
Dialog,
|
|
4
|
+
DialogBody,
|
|
5
|
+
DialogFooter,
|
|
6
|
+
DialogButton
|
|
7
|
+
} from "../../../src/Dialog/index";
|
|
8
|
+
|
|
9
|
+
export default function PopoverTriggerTest() {
|
|
10
|
+
let $state = $watch({
|
|
11
|
+
color: "",
|
|
12
|
+
});
|
|
13
|
+
|
|
14
|
+
@render {
|
|
15
|
+
@if ($state.color) {
|
|
16
|
+
<p>Your favorite color is {$state.color}?!</p>
|
|
17
|
+
}
|
|
18
|
+
|
|
19
|
+
<Popover &visible={$state.showPopover}>
|
|
20
|
+
<PopoverTrigger>
|
|
21
|
+
Show the prompt
|
|
22
|
+
</PopoverTrigger>
|
|
23
|
+
<PopoverContent>
|
|
24
|
+
<Dialog>
|
|
25
|
+
<DialogBody>
|
|
26
|
+
<p>Which color do you prefer?</p>
|
|
27
|
+
</DialogBody>
|
|
28
|
+
<DialogFooter>
|
|
29
|
+
<DialogButton value="blue" onclick={() => ($state.color = "blue")}>Blue</DialogButton>
|
|
30
|
+
<DialogButton value="red" onclick={() => ($state.color = "red")}>Red</DialogButton>
|
|
31
|
+
</DialogFooter>
|
|
32
|
+
</Dialog>
|
|
33
|
+
</PopoverContent>
|
|
34
|
+
</Popover>
|
|
35
|
+
}
|
|
36
|
+
}
|
|
@@ -6,14 +6,16 @@ import {
|
|
|
6
6
|
DialogButton
|
|
7
7
|
} from "../../../src/Dialog/index";
|
|
8
8
|
|
|
9
|
-
export default function
|
|
9
|
+
export default function PopoverVariable() {
|
|
10
10
|
let $state = $watch({
|
|
11
11
|
color: "",
|
|
12
12
|
showPopover: false
|
|
13
13
|
});
|
|
14
14
|
|
|
15
|
+
let button: HTMLButtonElement;
|
|
16
|
+
|
|
15
17
|
@render {
|
|
16
|
-
<button type="button" onclick={(
|
|
18
|
+
<button type="button" onclick={() => ($state.showPopover = !$state.showPopover)} &ref={button}>
|
|
17
19
|
Show the prompt
|
|
18
20
|
</button>
|
|
19
21
|
|
|
@@ -21,7 +23,7 @@ export default function PromptVariable() {
|
|
|
21
23
|
<p>Your favorite color is {$state.color}?!</p>
|
|
22
24
|
}
|
|
23
25
|
|
|
24
|
-
<Popover &visible={$state.showPopover}>
|
|
26
|
+
<Popover &visible={$state.showPopover} anchor={button}>
|
|
25
27
|
<PopoverContent>
|
|
26
28
|
<Dialog>
|
|
27
29
|
<DialogBody>
|
|
@@ -3,13 +3,13 @@ import "@testing-library/jest-dom/vitest";
|
|
|
3
3
|
import userEvent from "@testing-library/user-event";
|
|
4
4
|
import { mount } from "@torpor/view";
|
|
5
5
|
import { describe, expect, it } from "vitest";
|
|
6
|
-
import
|
|
6
|
+
import PopoverFunction from "./components/PopoverFunction.torp";
|
|
7
7
|
|
|
8
8
|
describe("Prompt", () => {
|
|
9
9
|
it("Showing with a function", async () => {
|
|
10
10
|
const container = document.createElement("div");
|
|
11
11
|
document.body.appendChild(container);
|
|
12
|
-
mount(container,
|
|
12
|
+
mount(container, PopoverFunction);
|
|
13
13
|
|
|
14
14
|
// By default, the prompt shouldn't be shown
|
|
15
15
|
expect(queryByText(container, "Which color do you prefer?")).not.toBeInTheDocument();
|
|
@@ -17,10 +17,5 @@ describe("Prompt", () => {
|
|
|
17
17
|
// Clicking the button should show the prompt
|
|
18
18
|
await userEvent.click(getByText(container, "Show the prompt"));
|
|
19
19
|
expect(queryByText(container, "Which color do you prefer?")).toBeInTheDocument();
|
|
20
|
-
|
|
21
|
-
// Clicking the blue button should hide the prompt 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
20
|
});
|
|
26
21
|
});
|
|
@@ -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 PopoverTrigger from "./components/PopoverTrigger.torp";
|
|
7
|
+
|
|
8
|
+
describe("Prompt", () => {
|
|
9
|
+
it("Showing with a trigger", async () => {
|
|
10
|
+
const container = document.createElement("div");
|
|
11
|
+
document.body.appendChild(container);
|
|
12
|
+
mount(container, PopoverTrigger);
|
|
13
|
+
|
|
14
|
+
// By default, the prompt 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 prompt
|
|
19
|
+
await userEvent.click(getByText(container, "Show the prompt"));
|
|
20
|
+
expect(queryByText(container, "Which color do you prefer?")).toBeInTheDocument();
|
|
21
|
+
|
|
22
|
+
// Clicking the blue button should hide the prompt 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
|
+
});
|
|
@@ -3,13 +3,13 @@ import "@testing-library/jest-dom/vitest";
|
|
|
3
3
|
import userEvent from "@testing-library/user-event";
|
|
4
4
|
import { mount } from "@torpor/view";
|
|
5
5
|
import { describe, expect, it } from "vitest";
|
|
6
|
-
import
|
|
6
|
+
import PopoverVariable from "./components/PopoverVariable.torp";
|
|
7
7
|
|
|
8
8
|
describe("Prompt", () => {
|
|
9
9
|
it("Showing with a variable", async () => {
|
|
10
10
|
const container = document.createElement("div");
|
|
11
11
|
document.body.appendChild(container);
|
|
12
|
-
mount(container,
|
|
12
|
+
mount(container, PopoverVariable);
|
|
13
13
|
|
|
14
14
|
// By default, the prompt shouldn't be shown
|
|
15
15
|
expect(queryByText(container, "Which color do you prefer?")).not.toBeInTheDocument();
|
package/tsup.config.ts
CHANGED
|
@@ -10,16 +10,18 @@ export default defineConfig({
|
|
|
10
10
|
"src/Accordion/index.ts",
|
|
11
11
|
"src/Breadcrumb/index.ts",
|
|
12
12
|
"src/Calendar/index.ts",
|
|
13
|
+
"src/Contextual/index.ts",
|
|
13
14
|
"src/Dialog/index.ts",
|
|
14
15
|
"src/Disclosure/index.ts",
|
|
15
16
|
"src/Drawer/index.ts",
|
|
17
|
+
"src/Form/index.ts",
|
|
16
18
|
"src/Menu/index.ts",
|
|
17
19
|
"src/MenuBar/index.ts",
|
|
20
|
+
"src/Modal/index.ts",
|
|
18
21
|
"src/NavMenu/index.ts",
|
|
19
22
|
"src/Notification/index.ts",
|
|
20
23
|
"src/Popover/index.ts",
|
|
21
24
|
"src/TabGroup/index.ts",
|
|
22
|
-
"src/form/index.ts",
|
|
23
25
|
"src/icons/index.ts",
|
|
24
26
|
"src/motion/index.ts",
|
|
25
27
|
],
|
|
@@ -1,106 +0,0 @@
|
|
|
1
|
-
import { addDocumentEvent, removeDocumentEvent } from "../utils/documentEvents";
|
|
2
|
-
import getScrollParent from "../utils/getScrollParent";
|
|
3
|
-
import setPopoverPosition from "../utils/setPopoverPosition";
|
|
4
|
-
import { PopoverContextName, type PopoverContext } from "./PopoverTypes";
|
|
5
|
-
|
|
6
|
-
/**
|
|
7
|
-
* The content that is displayed for a Popover when it is open, displayed
|
|
8
|
-
* alongside an element.
|
|
9
|
-
*
|
|
10
|
-
* @prop {"top" | "right" | "bottom" | "left"} site -- Where the popover will be
|
|
11
|
-
* shown, relative to the popover button
|
|
12
|
-
* @prop {"start" | "center" | "end"} alignment -- How the popover will be
|
|
13
|
-
* aligned, relative to the popover button
|
|
14
|
-
*/
|
|
15
|
-
export default function PopoverContentAnchored($props: any) {
|
|
16
|
-
$props.side ??= "bottom";
|
|
17
|
-
$props.alignment ??= "center";
|
|
18
|
-
|
|
19
|
-
let div: HTMLDivElement;
|
|
20
|
-
let shown = false;
|
|
21
|
-
let closeOnClick = false;
|
|
22
|
-
|
|
23
|
-
// Get stuff out of the PopoverContext
|
|
24
|
-
const context = $context[PopoverContextName] as PopoverContext;
|
|
25
|
-
if (!context) {
|
|
26
|
-
throw new Error("PopoverContentAnchored must be contained within a Popover");
|
|
27
|
-
}
|
|
28
|
-
let $state = context.state;
|
|
29
|
-
|
|
30
|
-
$run(() => {
|
|
31
|
-
if (!$state.visible) {
|
|
32
|
-
hide();
|
|
33
|
-
}
|
|
34
|
-
});
|
|
35
|
-
|
|
36
|
-
function show() {
|
|
37
|
-
shown = true;
|
|
38
|
-
|
|
39
|
-
// HACK: Because this Popover could be shown with a click, we need to wait for another mousedown
|
|
40
|
-
// before we close on click. Otherwise the click immediately bubbles to the document
|
|
41
|
-
closeOnClick = false;
|
|
42
|
-
addDocumentEvent("mousedown", handleDocumentMouseDown);
|
|
43
|
-
addDocumentEvent("click", handleDocumentClick);
|
|
44
|
-
|
|
45
|
-
// Set the position and listen for window resize and scroll to reset the position
|
|
46
|
-
setPosition();
|
|
47
|
-
const scrollParent = getScrollParent(context.anchorElement)
|
|
48
|
-
scrollParent.addEventListener("resize", setPosition);
|
|
49
|
-
scrollParent.addEventListener("scroll", setPosition);
|
|
50
|
-
if (context.focusFirstElement) {
|
|
51
|
-
context.focusFirstElement();
|
|
52
|
-
}
|
|
53
|
-
}
|
|
54
|
-
|
|
55
|
-
function hide() {
|
|
56
|
-
if (!shown) return;
|
|
57
|
-
|
|
58
|
-
removeDocumentEvent("mousedown", handleDocumentMouseDown);
|
|
59
|
-
removeDocumentEvent("click", handleDocumentClick);
|
|
60
|
-
|
|
61
|
-
// Stop listening for window resize and focus the anchor element per WAI guidelines
|
|
62
|
-
const scrollParent = getScrollParent(context.anchorElement)
|
|
63
|
-
scrollParent.removeEventListener("resize", setPosition);
|
|
64
|
-
scrollParent.removeEventListener("scroll", setPosition);
|
|
65
|
-
if (context.anchorElement?.focus) {
|
|
66
|
-
context.anchorElement.focus();
|
|
67
|
-
}
|
|
68
|
-
}
|
|
69
|
-
|
|
70
|
-
function handleDocumentMouseDown() {
|
|
71
|
-
closeOnClick = true;
|
|
72
|
-
}
|
|
73
|
-
|
|
74
|
-
function handleDocumentClick(e: MouseEvent) {
|
|
75
|
-
if (
|
|
76
|
-
closeOnClick &&
|
|
77
|
-
div &&
|
|
78
|
-
!div.contains(e.target as HTMLElement) &&
|
|
79
|
-
(!context.anchorElement || !context.anchorElement.contains(e.target as HTMLElement))
|
|
80
|
-
) {
|
|
81
|
-
e.preventDefault();
|
|
82
|
-
context.handleClickOutside!(e);
|
|
83
|
-
}
|
|
84
|
-
}
|
|
85
|
-
|
|
86
|
-
function setPosition() {
|
|
87
|
-
if (!context.anchorElement) {
|
|
88
|
-
throw new Error("PopoverContentAnchored must have an anchor element");
|
|
89
|
-
}
|
|
90
|
-
|
|
91
|
-
setPopoverPosition(context.anchorElement, div, $props.side, $props.alignment);
|
|
92
|
-
}
|
|
93
|
-
|
|
94
|
-
@render {
|
|
95
|
-
@if ($state.visible) {
|
|
96
|
-
<div
|
|
97
|
-
{$props.id}
|
|
98
|
-
class={`torp-popover-content-anchored ${$props.class ?? ""}`.trim()}
|
|
99
|
-
&ref={div}
|
|
100
|
-
onmount={show}
|
|
101
|
-
>
|
|
102
|
-
<slot />
|
|
103
|
-
</div>
|
|
104
|
-
}
|
|
105
|
-
}
|
|
106
|
-
}
|