@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
|
@@ -1,4 +1,17 @@
|
|
|
1
|
-
import { DisclosureContextName, type DisclosureContext } from "./DisclosureTypes";
|
|
1
|
+
import { DisclosureContextName, type DisclosureContext, type DisclosureState } from "./DisclosureTypes";
|
|
2
|
+
|
|
3
|
+
interface DisclosureProps {
|
|
4
|
+
/** An ID for the root element */
|
|
5
|
+
id?: string;
|
|
6
|
+
/** Class name(s) for the root element */
|
|
7
|
+
class?: string,
|
|
8
|
+
/** Whether the disclosure is expanded and its content visible */
|
|
9
|
+
expanded?: boolean,
|
|
10
|
+
/** If set to true, the user cannot interact with this disclosure */
|
|
11
|
+
disabled?: boolean,
|
|
12
|
+
/** Raised when the disclosure is opened or closed */
|
|
13
|
+
ontoggle?: (open: boolean) => void,
|
|
14
|
+
}
|
|
2
15
|
|
|
3
16
|
/**
|
|
4
17
|
* An interactive header that enables users to reveal or hide an associated section of content.
|
|
@@ -9,33 +22,29 @@ import { DisclosureContextName, type DisclosureContext } from "./DisclosureTypes
|
|
|
9
22
|
*
|
|
10
23
|
* ```
|
|
11
24
|
* <Disclosure>
|
|
12
|
-
*
|
|
13
|
-
*
|
|
14
|
-
*
|
|
15
|
-
*
|
|
25
|
+
* <DisclosureHeader>
|
|
26
|
+
* <DisclosureTrigger />
|
|
27
|
+
* </DisclosureHeader>
|
|
28
|
+
* <DisclosureContent />
|
|
16
29
|
* </Disclosure>
|
|
17
30
|
* ```
|
|
18
|
-
*
|
|
19
|
-
* @prop {boolean} [expanded] -- Whether the Disclosure is expanded and its content visible
|
|
20
|
-
* @prop {boolean} [disabled] -- If set to true, the user cannot interact with this Disclosure
|
|
21
|
-
* @prop {(boolean) => void} [ontoggle] -- Raised when this item is opened or closed
|
|
22
31
|
*/
|
|
23
|
-
export default function Disclosure($props:
|
|
24
|
-
$props.expanded ??= false;
|
|
25
|
-
$props.disabled ??= false;
|
|
26
|
-
|
|
32
|
+
export default function Disclosure($props: DisclosureProps | undefined) {
|
|
27
33
|
let $state: DisclosureState = $watch({
|
|
28
|
-
expanded:
|
|
29
|
-
disabled:
|
|
30
|
-
|
|
31
|
-
|
|
32
|
-
},
|
|
34
|
+
expanded: false,
|
|
35
|
+
disabled: false,
|
|
36
|
+
headerId: "",
|
|
37
|
+
contentId: "",
|
|
33
38
|
});
|
|
34
39
|
|
|
35
40
|
// Update $state with $props
|
|
36
41
|
$run(() => {
|
|
37
|
-
$state.expanded = $props
|
|
38
|
-
|
|
42
|
+
$state.expanded = $props?.expanded === true ||
|
|
43
|
+
// @ts-ignore
|
|
44
|
+
$props?.expanded === "true";
|
|
45
|
+
$state.disabled = $props?.disabled === true ||
|
|
46
|
+
// @ts-ignore
|
|
47
|
+
$props?.disabled === "true";
|
|
39
48
|
});
|
|
40
49
|
|
|
41
50
|
// Put stuff into a DisclosureContext
|
|
@@ -47,7 +56,7 @@ export default function Disclosure($props: any) {
|
|
|
47
56
|
// Dispatch the toggle event when the value of expanded changes
|
|
48
57
|
let firstToggle = true;
|
|
49
58
|
$run(() => {
|
|
50
|
-
const ev = $props
|
|
59
|
+
const ev = $props?.ontoggle;
|
|
51
60
|
const expanded = $state.expanded;
|
|
52
61
|
if (firstToggle) {
|
|
53
62
|
firstToggle = false;
|
|
@@ -58,10 +67,10 @@ export default function Disclosure($props: any) {
|
|
|
58
67
|
|
|
59
68
|
@render {
|
|
60
69
|
<div
|
|
61
|
-
{$props
|
|
62
|
-
class={`torp-disclosure-item ${$props
|
|
63
|
-
data-state={$state.
|
|
64
|
-
data-disabled={$state.
|
|
70
|
+
{$props?.id}
|
|
71
|
+
class={`torp-disclosure-item ${$props?.class ?? ""}`.trim()}
|
|
72
|
+
data-state={$state.expanded ? "open" : "closed"}
|
|
73
|
+
data-disabled={$state.disabled ? "true" : undefined}
|
|
65
74
|
>
|
|
66
75
|
<slot />
|
|
67
76
|
</div>
|
|
@@ -1,32 +1,38 @@
|
|
|
1
1
|
import getId from "../utils/getId";
|
|
2
2
|
import { DisclosureContextName, type DisclosureContext } from "./DisclosureTypes";
|
|
3
3
|
|
|
4
|
+
interface DisclosureContentProps {
|
|
5
|
+
/** An ID for the root element */
|
|
6
|
+
id?: string;
|
|
7
|
+
/** Class name(s) for the root element */
|
|
8
|
+
class?: string,
|
|
9
|
+
/** Whether this content should act as a region. Set this when the content contains heading elements or a nested Disclosure */
|
|
10
|
+
ariaRegion?: boolean,
|
|
11
|
+
}
|
|
12
|
+
|
|
4
13
|
/**
|
|
5
14
|
* Content for a Disclosure, which can be revealed or hidden by an associated DisclosureTrigger.
|
|
6
|
-
*
|
|
7
|
-
* @prop {string} [id] -- An ID for the DisclosureContent's div container
|
|
8
|
-
* @prop {boolean} [ariaRegion] -- Whether this content should act as a region. Set this when the content contains heading elements or a nested Disclosure
|
|
9
15
|
*/
|
|
10
|
-
export default function DisclosureContent($props:
|
|
11
|
-
|
|
16
|
+
export default function DisclosureContent($props: DisclosureContentProps | undefined) {
|
|
17
|
+
let defaultId = getId();
|
|
12
18
|
|
|
13
19
|
const context = $context[DisclosureContextName] as DisclosureContext;
|
|
14
20
|
if (!context) {
|
|
15
21
|
throw new Error("DisclosureContent must be contained within a Disclosure");
|
|
16
22
|
}
|
|
17
|
-
let $state =
|
|
23
|
+
let $state = context.state
|
|
18
24
|
|
|
19
25
|
// Set the content ID so that it can be used with aria-controls in DisclosureTrigger
|
|
20
|
-
$state.contentId = $props
|
|
26
|
+
$state.contentId = $props?.id ?? defaultId;
|
|
21
27
|
|
|
22
28
|
@render {
|
|
23
29
|
<div
|
|
24
|
-
{$props
|
|
25
|
-
class={`torp-disclosure-content ${$props
|
|
26
|
-
role={$props
|
|
30
|
+
id={$props?.id ?? defaultId}
|
|
31
|
+
class={`torp-disclosure-content ${$props?.class ?? ""}`.trim()}
|
|
32
|
+
role={$props?.ariaRegion ? "region" : undefined}
|
|
27
33
|
aria-labelledby={$state.headerId}
|
|
28
|
-
data-state={$state.
|
|
29
|
-
data-disabled={$state.
|
|
34
|
+
data-state={$state.expanded ? "open" : "closed"}
|
|
35
|
+
data-disabled={$state.disabled ? "true" : undefined}
|
|
30
36
|
>
|
|
31
37
|
@if ($state.expanded) {
|
|
32
38
|
<slot />
|
|
@@ -1,5 +1,14 @@
|
|
|
1
1
|
import { DisclosureContextName, type DisclosureContext } from "./DisclosureTypes";
|
|
2
2
|
|
|
3
|
+
interface DisclosureHeaderProps {
|
|
4
|
+
/** An ID for the root element */
|
|
5
|
+
id?: string;
|
|
6
|
+
/** Class name(s) for the root element */
|
|
7
|
+
class?: string,
|
|
8
|
+
/** The type of HTML header to use */
|
|
9
|
+
as?: "h1" | "h2" | "h3" | "h4" | "h5" | "h6",
|
|
10
|
+
}
|
|
11
|
+
|
|
3
12
|
/**
|
|
4
13
|
* The header for a Disclosure, which contains the DisclosureTrigger.
|
|
5
14
|
*
|
|
@@ -7,26 +16,24 @@ import { DisclosureContextName, type DisclosureContext } from "./DisclosureTypes
|
|
|
7
16
|
*
|
|
8
17
|
* ```
|
|
9
18
|
* <DisclosureHeader>
|
|
10
|
-
*
|
|
19
|
+
* <DisclosureTrigger />
|
|
11
20
|
* </DisclosureHeader>
|
|
12
21
|
* ```
|
|
13
|
-
*
|
|
14
|
-
* @prop {"h1" | "h2" | "h3" | "h4" | "h5" | "h6"} as -- The type of HTML header to use
|
|
15
22
|
*/
|
|
16
|
-
export default function DisclosureHeader($props:
|
|
23
|
+
export default function DisclosureHeader($props: DisclosureHeaderProps | undefined) {
|
|
17
24
|
const context = $context[DisclosureContextName] as DisclosureContext;
|
|
18
25
|
if (!context) {
|
|
19
26
|
throw new Error("DisclosureHeader must be contained within a Disclosure");
|
|
20
27
|
}
|
|
21
|
-
let $state =
|
|
28
|
+
let $state = context.state
|
|
22
29
|
|
|
23
30
|
@render {
|
|
24
31
|
@// TODO: $props.as
|
|
25
32
|
<h4
|
|
26
|
-
{$props
|
|
27
|
-
class={`torp-disclosure-header ${$props
|
|
28
|
-
data-state={$state.
|
|
29
|
-
data-disabled={$state.
|
|
33
|
+
{$props?.id}
|
|
34
|
+
class={`torp-disclosure-header ${$props?.class ?? ""}`.trim()}
|
|
35
|
+
data-state={$state.expanded ? "open" : "closed"}
|
|
36
|
+
data-disabled={$state.disabled ? "true" : undefined}
|
|
30
37
|
>
|
|
31
38
|
<slot />
|
|
32
39
|
</h4>
|
|
@@ -1,32 +1,39 @@
|
|
|
1
1
|
import getId from "../utils/getId";
|
|
2
2
|
import { DisclosureContextName, type DisclosureContext } from "./DisclosureTypes";
|
|
3
3
|
|
|
4
|
+
interface DisclosureTriggerProps {
|
|
5
|
+
/** An ID for the root element */
|
|
6
|
+
id?: string;
|
|
7
|
+
/** Class name(s) for the root element */
|
|
8
|
+
class?: string,
|
|
9
|
+
}
|
|
10
|
+
|
|
4
11
|
/**
|
|
5
12
|
* A header button for a Disclosure, which can be used to reveal or hide an associated DisclosureContent.
|
|
6
13
|
*/
|
|
7
|
-
export default function DisclosureTrigger() {
|
|
8
|
-
|
|
14
|
+
export default function DisclosureTrigger($props: DisclosureTriggerProps | undefined) {
|
|
15
|
+
let defaultId = getId();
|
|
9
16
|
|
|
10
17
|
// Get stuff out of the DisclosureContext
|
|
11
18
|
const context = $context[DisclosureContextName] as DisclosureContext;
|
|
12
19
|
if (!context) {
|
|
13
20
|
throw new Error("DisclosureTrigger must be contained within a Disclosure");
|
|
14
21
|
}
|
|
15
|
-
let $state =
|
|
22
|
+
let $state = context.state;
|
|
16
23
|
|
|
17
24
|
// Set the header ID so that it can be used with aria-labelledby in DisclosureContent
|
|
18
|
-
$state.headerId = $props
|
|
25
|
+
$state.headerId = $props?.id ?? defaultId;
|
|
19
26
|
|
|
20
27
|
@render {
|
|
21
28
|
<button
|
|
22
29
|
type="button"
|
|
23
|
-
{$props
|
|
24
|
-
class={`torp-disclosure-trigger ${$props
|
|
25
|
-
disabled={$state.disabled
|
|
30
|
+
id={$props?.id ?? defaultId}
|
|
31
|
+
class={`torp-disclosure-trigger ${$props?.class ?? ""}`.trim()}
|
|
32
|
+
disabled={$state.disabled}
|
|
26
33
|
aria-expanded={$state.expanded.toString()}
|
|
27
34
|
aria-disabled={$state.disabled}
|
|
28
35
|
aria-controls={$state.contentId}
|
|
29
|
-
data-state={$state.
|
|
36
|
+
data-state={$state.expanded ? "open" : "closed"}
|
|
30
37
|
data-disabled={$state.disabled}
|
|
31
38
|
onclick={() => $state.expanded = !$state.expanded}
|
|
32
39
|
>
|
|
@@ -1,72 +1,111 @@
|
|
|
1
1
|
import { type SlotRender } from "@torpor/view";
|
|
2
2
|
|
|
3
3
|
|
|
4
|
+
interface DisclosureProps {
|
|
5
|
+
/** An ID for the root element */
|
|
6
|
+
id?: string;
|
|
7
|
+
/** Class name(s) for the root element */
|
|
8
|
+
class?: string,
|
|
9
|
+
/** Whether the disclosure is expanded and its content visible */
|
|
10
|
+
expanded?: boolean,
|
|
11
|
+
/** If set to true, the user cannot interact with this disclosure */
|
|
12
|
+
disabled?: boolean,
|
|
13
|
+
/** Raised when the disclosure is opened or closed */
|
|
14
|
+
ontoggle?: (open: boolean) => void,
|
|
15
|
+
}
|
|
16
|
+
|
|
4
17
|
/**
|
|
5
|
-
*
|
|
6
|
-
*
|
|
7
|
-
*
|
|
8
|
-
*
|
|
9
|
-
*
|
|
10
|
-
*
|
|
18
|
+
* An interactive header that enables users to reveal or hide an associated section of content.
|
|
19
|
+
*
|
|
20
|
+
* See [the WAI ARIA guidelines for Disclosures](https://www.w3.org/WAI/ARIA/apg/patterns/disclosure/).
|
|
21
|
+
*
|
|
22
|
+
* The structure of a Disclosure is:
|
|
23
|
+
*
|
|
24
|
+
* ```
|
|
25
|
+
* <Disclosure>
|
|
26
|
+
* <DisclosureHeader>
|
|
27
|
+
* <DisclosureTrigger />
|
|
28
|
+
* </DisclosureHeader>
|
|
29
|
+
* <DisclosureContent />
|
|
30
|
+
* </Disclosure>
|
|
31
|
+
* ```
|
|
11
32
|
*/
|
|
12
33
|
declare function Disclosure(
|
|
13
34
|
$parent: ParentNode,
|
|
14
35
|
$anchor: Node | null,
|
|
15
|
-
$props:
|
|
36
|
+
$props: DisclosureProps | undefined,
|
|
16
37
|
$context?: Record<PropertyKey, any>,
|
|
17
38
|
$slots?: Record<string, SlotRender>,
|
|
18
39
|
): void;
|
|
19
40
|
|
|
20
41
|
|
|
21
42
|
|
|
43
|
+
interface DisclosureContentProps {
|
|
44
|
+
/** An ID for the root element */
|
|
45
|
+
id?: string;
|
|
46
|
+
/** Class name(s) for the root element */
|
|
47
|
+
class?: string,
|
|
48
|
+
/** Whether this content should act as a region. Set this when the content contains heading elements or a nested Disclosure */
|
|
49
|
+
ariaRegion?: boolean,
|
|
50
|
+
}
|
|
51
|
+
|
|
22
52
|
/**
|
|
23
|
-
*
|
|
24
|
-
* @param $parent -- The parent node.
|
|
25
|
-
* @param $anchor -- The node to mount the component before.
|
|
26
|
-
* @param $props -- The values that have been passed into the component as properties.
|
|
27
|
-
* @param $context -- Values that have been passed into the component from its ancestors.
|
|
28
|
-
* @param $slots -- Functions for rendering children into slot nodes within the component.
|
|
53
|
+
* Content for a Disclosure, which can be revealed or hidden by an associated DisclosureTrigger.
|
|
29
54
|
*/
|
|
30
55
|
declare function DisclosureContent(
|
|
31
56
|
$parent: ParentNode,
|
|
32
57
|
$anchor: Node | null,
|
|
33
|
-
$props:
|
|
58
|
+
$props: DisclosureContentProps | undefined,
|
|
34
59
|
$context?: Record<PropertyKey, any>,
|
|
35
60
|
$slots?: Record<string, SlotRender>,
|
|
36
61
|
): void;
|
|
37
62
|
|
|
38
63
|
|
|
39
64
|
|
|
65
|
+
interface DisclosureHeaderProps {
|
|
66
|
+
/** An ID for the root element */
|
|
67
|
+
id?: string;
|
|
68
|
+
/** Class name(s) for the root element */
|
|
69
|
+
class?: string,
|
|
70
|
+
/** The type of HTML header to use */
|
|
71
|
+
as?: "h1" | "h2" | "h3" | "h4" | "h5" | "h6",
|
|
72
|
+
}
|
|
73
|
+
|
|
40
74
|
/**
|
|
41
|
-
*
|
|
42
|
-
*
|
|
43
|
-
*
|
|
44
|
-
*
|
|
45
|
-
*
|
|
46
|
-
*
|
|
75
|
+
* The header for a Disclosure, which contains the DisclosureTrigger.
|
|
76
|
+
*
|
|
77
|
+
* The structure of a DisclosureHeader is:
|
|
78
|
+
*
|
|
79
|
+
* ```
|
|
80
|
+
* <DisclosureHeader>
|
|
81
|
+
* <DisclosureTrigger />
|
|
82
|
+
* </DisclosureHeader>
|
|
83
|
+
* ```
|
|
47
84
|
*/
|
|
48
85
|
declare function DisclosureHeader(
|
|
49
86
|
$parent: ParentNode,
|
|
50
87
|
$anchor: Node | null,
|
|
51
|
-
$props:
|
|
88
|
+
$props: DisclosureHeaderProps | undefined,
|
|
52
89
|
$context?: Record<PropertyKey, any>,
|
|
53
90
|
$slots?: Record<string, SlotRender>,
|
|
54
91
|
): void;
|
|
55
92
|
|
|
56
93
|
|
|
57
94
|
|
|
95
|
+
interface DisclosureTriggerProps {
|
|
96
|
+
/** An ID for the root element */
|
|
97
|
+
id?: string;
|
|
98
|
+
/** Class name(s) for the root element */
|
|
99
|
+
class?: string,
|
|
100
|
+
}
|
|
101
|
+
|
|
58
102
|
/**
|
|
59
|
-
*
|
|
60
|
-
* @param $parent -- The parent node.
|
|
61
|
-
* @param $anchor -- The node to mount the component before.
|
|
62
|
-
* @param $props -- The values that have been passed into the component as properties.
|
|
63
|
-
* @param $context -- Values that have been passed into the component from its ancestors.
|
|
64
|
-
* @param $slots -- Functions for rendering children into slot nodes within the component.
|
|
103
|
+
* A header button for a Disclosure, which can be used to reveal or hide an associated DisclosureContent.
|
|
65
104
|
*/
|
|
66
105
|
declare function DisclosureTrigger(
|
|
67
106
|
$parent: ParentNode,
|
|
68
107
|
$anchor: Node | null,
|
|
69
|
-
$props
|
|
108
|
+
$props: DisclosureTriggerProps | undefined,
|
|
70
109
|
$context?: Record<PropertyKey, any>,
|
|
71
110
|
$slots?: Record<string, SlotRender>,
|
|
72
111
|
): void;
|
package/dist/Drawer/Drawer.torp
CHANGED
|
@@ -1,82 +1,123 @@
|
|
|
1
|
+
import { DrawerContextName, type DrawerContext, type DrawerState } from "./DrawerTypes";
|
|
1
2
|
|
|
2
|
-
|
|
3
|
-
|
|
4
|
-
|
|
3
|
+
interface DrawerProps {
|
|
4
|
+
/** An ID for the root element */
|
|
5
|
+
id?: string;
|
|
6
|
+
/** Class name(s) for the root element */
|
|
7
|
+
class?: string,
|
|
8
|
+
/** Whether the drawer is modal. If true, an overlay should be supplied to obscure outside content, and only the drawer content will be visible to screen readers */
|
|
9
|
+
modal?: boolean,
|
|
10
|
+
/** Whether the drawer is visible */
|
|
11
|
+
visible?: boolean,
|
|
12
|
+
/** Which side of the window to show the drawer from */
|
|
13
|
+
position?: "left" | "right" | "top" | "bottom",
|
|
14
|
+
/** A function to be called when the user selects a response */
|
|
15
|
+
callback?: ((value: any) => void),
|
|
16
|
+
/** Raised when the drawer is opened or closed */
|
|
17
|
+
ontoggle?: (open: boolean) => void,
|
|
18
|
+
/** Raised when the drawer has opened */
|
|
19
|
+
onopen?: () => void,
|
|
20
|
+
/** Raised when the drawer has closed */
|
|
21
|
+
onclose?: (result: any) => void,
|
|
22
|
+
}
|
|
5
23
|
|
|
6
|
-
|
|
24
|
+
/**
|
|
25
|
+
* A drawer that can be used to show rich content or obtain information from a user.
|
|
26
|
+
*
|
|
27
|
+
* See [the WAI ARIA guidelines for Dialogs](https://www.w3.org/WAI/ARIA/apg/patterns/dialogmodal/).
|
|
28
|
+
*
|
|
29
|
+
* The structure of a Drawer is:
|
|
30
|
+
*
|
|
31
|
+
* ```
|
|
32
|
+
* <Drawer>
|
|
33
|
+
* <DrawerTrigger /> (optional)
|
|
34
|
+
* <DrawerContent />
|
|
35
|
+
* </Drawer>
|
|
36
|
+
* ```
|
|
37
|
+
*/
|
|
38
|
+
export default function Drawer($props: DrawerProps | undefined) {
|
|
39
|
+
let $state: DrawerState = $watch({
|
|
40
|
+
visible: false,
|
|
41
|
+
modal: $props?.modal ?? false,
|
|
42
|
+
position: $props?.position ?? "left",
|
|
43
|
+
});
|
|
7
44
|
|
|
8
|
-
//
|
|
9
|
-
|
|
10
|
-
|
|
11
|
-
|
|
45
|
+
// Sync props and state
|
|
46
|
+
$run(() => {
|
|
47
|
+
$state.visible = $props?.visible ?? false;
|
|
48
|
+
});
|
|
49
|
+
$run(() => {
|
|
50
|
+
if ($props !== undefined) {
|
|
51
|
+
$props.visible = $state.visible;
|
|
52
|
+
}
|
|
53
|
+
});
|
|
12
54
|
|
|
13
|
-
|
|
14
|
-
let oldBefore = el.nextNode;
|
|
55
|
+
let result: any;
|
|
15
56
|
|
|
16
|
-
|
|
17
|
-
|
|
57
|
+
// Set the context to pass down to items
|
|
58
|
+
let context: DrawerContext = {
|
|
59
|
+
handleButton,
|
|
60
|
+
handleClickOutside,
|
|
61
|
+
state: $state,
|
|
62
|
+
};
|
|
63
|
+
$context[DrawerContextName] = context;
|
|
18
64
|
|
|
19
|
-
|
|
20
|
-
|
|
21
|
-
|
|
65
|
+
// Dispatch the toggle event when the drawer is opened or closed
|
|
66
|
+
let firstToggle = true;
|
|
67
|
+
$run(() => {
|
|
68
|
+
const ontoggle = $props?.ontoggle;
|
|
69
|
+
const onopen = $props?.onopen;
|
|
70
|
+
const onclose = $props?.onclose;
|
|
71
|
+
const visible = $state.visible;
|
|
72
|
+
if (firstToggle) {
|
|
73
|
+
firstToggle = false;
|
|
74
|
+
} else {
|
|
75
|
+
if (ontoggle) ontoggle(visible);
|
|
76
|
+
if (visible) {
|
|
77
|
+
if (onopen) onopen()
|
|
78
|
+
} else {
|
|
79
|
+
if (onclose) onclose(result);
|
|
80
|
+
}
|
|
81
|
+
}
|
|
82
|
+
});
|
|
83
|
+
|
|
84
|
+
function handleButton(type: "confirm" | "cancel" | undefined, value?: any) {
|
|
85
|
+
// Get the button's result
|
|
86
|
+
switch (type) {
|
|
87
|
+
case "confirm": {
|
|
88
|
+
result = value || true;
|
|
89
|
+
break;
|
|
90
|
+
}
|
|
91
|
+
case "cancel": {
|
|
92
|
+
result = value || false;
|
|
93
|
+
break;
|
|
94
|
+
}
|
|
95
|
+
default: {
|
|
96
|
+
result = value;
|
|
97
|
+
break;
|
|
98
|
+
}
|
|
99
|
+
}
|
|
22
100
|
|
|
23
|
-
|
|
24
|
-
|
|
25
|
-
el.style.position = oldPosition;
|
|
101
|
+
// Hide the drawer
|
|
102
|
+
$state.visible = false;
|
|
26
103
|
|
|
27
|
-
|
|
104
|
+
// Call the callback
|
|
105
|
+
if ($props?.callback) {
|
|
106
|
+
$props?.callback(result);
|
|
107
|
+
}
|
|
28
108
|
}
|
|
29
109
|
|
|
30
|
-
function
|
|
31
|
-
|
|
32
|
-
|
|
33
|
-
case "left": {
|
|
34
|
-
offscreen.style.left = 0;
|
|
35
|
-
const width = measure(offscreen, (el) => el.offsetWidth);
|
|
36
|
-
return [
|
|
37
|
-
{ transform: `translateX(-${width}px)` },
|
|
38
|
-
{ transform: "translateX(0px)" }
|
|
39
|
-
];
|
|
40
|
-
}
|
|
41
|
-
case "top": {
|
|
42
|
-
offscreen.style.top = 0;
|
|
43
|
-
const height = measure(offscreen, (el) => el.offsetHeight);
|
|
44
|
-
return [
|
|
45
|
-
{ transform: `translateY(-${height}px)` },
|
|
46
|
-
{ transform: "translateY(0px)" }
|
|
47
|
-
];
|
|
48
|
-
}
|
|
49
|
-
case "right": {
|
|
50
|
-
offscreen.style.right = 0;
|
|
51
|
-
const width = measure(offscreen, (el) => el.offsetWidth);
|
|
52
|
-
return [
|
|
53
|
-
{ transform: `translateX(${width}px)` },
|
|
54
|
-
{ transform: "translateX(0px)" }
|
|
55
|
-
];
|
|
56
|
-
}
|
|
57
|
-
case "bottom": {
|
|
58
|
-
offscreen.style.bottom = 0;
|
|
59
|
-
const height = measure(offscreen, (el) => el.offsetHeight);
|
|
60
|
-
return [
|
|
61
|
-
{ transform: `translateY(${height}px)` },
|
|
62
|
-
{ transform: "translateY(0px)" }
|
|
63
|
-
];
|
|
64
|
-
}
|
|
65
|
-
}
|
|
66
|
-
}
|
|
110
|
+
function handleClickOutside(e: MouseEvent) {
|
|
111
|
+
e.preventDefault();
|
|
112
|
+
$state.visible = false;
|
|
67
113
|
}
|
|
68
114
|
|
|
69
115
|
@render {
|
|
70
|
-
|
|
71
|
-
|
|
72
|
-
|
|
73
|
-
|
|
74
|
-
|
|
75
|
-
|
|
76
|
-
&ref={offscreen}
|
|
77
|
-
>
|
|
78
|
-
<slot />
|
|
79
|
-
</div>
|
|
80
|
-
}
|
|
116
|
+
<div
|
|
117
|
+
{$props?.id}
|
|
118
|
+
class={`torp-drawer ${$props?.class ?? ""}`.trim()}
|
|
119
|
+
>
|
|
120
|
+
<slot />
|
|
121
|
+
</div>
|
|
81
122
|
}
|
|
82
|
-
}
|
|
123
|
+
}
|
|
@@ -0,0 +1,80 @@
|
|
|
1
|
+
import { type Animation } from "@torpor/view";
|
|
2
|
+
import { slide } from "../motion";
|
|
3
|
+
import { addDocumentEvent, removeDocumentEvent } from "../utils/documentEvents";
|
|
4
|
+
import { DrawerContextName, type DrawerContext } from "./DrawerTypes";
|
|
5
|
+
|
|
6
|
+
interface DrawerContentProps {
|
|
7
|
+
/** An ID for the root element */
|
|
8
|
+
id?: string;
|
|
9
|
+
/** Class name(s) for the root element */
|
|
10
|
+
class?: string,
|
|
11
|
+
}
|
|
12
|
+
|
|
13
|
+
/**
|
|
14
|
+
* The content that is displayed for a Drawer when it is open.
|
|
15
|
+
*/
|
|
16
|
+
export default function DrawerContent($props: DrawerContentProps | undefined) {
|
|
17
|
+
let drawer: HTMLElement;
|
|
18
|
+
let shown = false;
|
|
19
|
+
let closeOnClick = false;
|
|
20
|
+
|
|
21
|
+
// Get stuff out of the DrawerContext
|
|
22
|
+
const context = $context[DrawerContextName] as DrawerContext;
|
|
23
|
+
if (!context) {
|
|
24
|
+
throw new Error("DrawerContent must be contained within a Drawer");
|
|
25
|
+
}
|
|
26
|
+
let $state = context.state;
|
|
27
|
+
|
|
28
|
+
$run(() => {
|
|
29
|
+
if (!$state.visible) {
|
|
30
|
+
hide();
|
|
31
|
+
}
|
|
32
|
+
});
|
|
33
|
+
|
|
34
|
+
function show() {
|
|
35
|
+
shown = true;
|
|
36
|
+
|
|
37
|
+
// HACK: Because this Drawer could be shown with a click, we need to wait for another mousedown
|
|
38
|
+
// before we close on click. Otherwise the click immediately bubbles to the document
|
|
39
|
+
closeOnClick = false;
|
|
40
|
+
addDocumentEvent("mousedown", handleDocumentMouseDown);
|
|
41
|
+
addDocumentEvent("click", handleDocumentClick);
|
|
42
|
+
}
|
|
43
|
+
|
|
44
|
+
function hide() {
|
|
45
|
+
if (!shown) return;
|
|
46
|
+
|
|
47
|
+
removeDocumentEvent("mousedown", handleDocumentMouseDown);
|
|
48
|
+
removeDocumentEvent("click", handleDocumentClick);
|
|
49
|
+
}
|
|
50
|
+
|
|
51
|
+
function handleDocumentMouseDown() {
|
|
52
|
+
closeOnClick = true;
|
|
53
|
+
}
|
|
54
|
+
|
|
55
|
+
function handleDocumentClick(e: MouseEvent) {
|
|
56
|
+
if (
|
|
57
|
+
closeOnClick &&
|
|
58
|
+
drawer &&
|
|
59
|
+
!drawer.contains(e.target as HTMLElement)
|
|
60
|
+
) {
|
|
61
|
+
e.preventDefault();
|
|
62
|
+
context.handleClickOutside!(e);
|
|
63
|
+
}
|
|
64
|
+
}
|
|
65
|
+
|
|
66
|
+
@render {
|
|
67
|
+
@if ($state.visible) {
|
|
68
|
+
<div
|
|
69
|
+
{$props?.id}
|
|
70
|
+
class={`torp-drawer-content ${$props?.class ?? ""}`.trim()}
|
|
71
|
+
style="position: fixed;"
|
|
72
|
+
transition={(e) => slide(e, { side: $state.position })}
|
|
73
|
+
&ref={drawer}
|
|
74
|
+
onmount={show}
|
|
75
|
+
>
|
|
76
|
+
<slot />
|
|
77
|
+
</div>
|
|
78
|
+
}
|
|
79
|
+
}
|
|
80
|
+
}
|