@torpor/ui 0.2.1 → 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 +23 -0
- package/dist/Accordion/Accordion.torp +29 -22
- package/dist/Accordion/AccordionContent.torp +7 -8
- package/dist/Accordion/AccordionHeader.torp +4 -6
- package/dist/Accordion/AccordionItem.torp +15 -12
- package/dist/Accordion/AccordionTrigger.torp +6 -7
- package/dist/Accordion/AccordionTypes.ts +4 -3
- package/dist/Accordion/index.d.ts +5 -5
- package/dist/Breadcrumb/Breadcrumb.torp +9 -10
- package/dist/Breadcrumb/BreadcrumbItem.torp +5 -7
- package/dist/Breadcrumb/BreadcrumbSeparator.torp +3 -5
- package/dist/Breadcrumb/index.d.ts +8 -7
- package/dist/Calendar/Calendar.torp +12 -13
- package/dist/Calendar/CalendarDay.torp +3 -3
- package/dist/Contextual/Contextual.torp +125 -0
- package/dist/{Popover/PopoverContentContextual.torp → Contextual/ContextualContent.torp} +15 -15
- 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 +38 -72
- package/dist/Dialog/DialogBody.torp +6 -8
- package/dist/Dialog/DialogButton.torp +14 -12
- package/dist/Dialog/DialogFooter.torp +3 -5
- package/dist/Dialog/DialogHeader.torp +6 -8
- package/dist/Dialog/DialogTypes.ts +3 -2
- package/dist/Dialog/index.d.ts +16 -11
- package/dist/Disclosure/Disclosure.torp +22 -23
- package/dist/Disclosure/DisclosureContent.torp +7 -8
- package/dist/Disclosure/DisclosureHeader.torp +5 -7
- package/dist/Disclosure/DisclosureTrigger.torp +7 -8
- package/dist/Disclosure/DisclosureTypes.ts +0 -1
- package/dist/Disclosure/index.d.ts +12 -12
- package/dist/Drawer/Drawer.torp +101 -70
- 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 +90 -3
- package/dist/Drawer/index.js +13 -1
- package/dist/Form/Field.torp +2 -4
- package/dist/Form/Form.torp +7 -9
- package/dist/Form/Input.torp +20 -17
- package/dist/Form/Label.torp +1 -1
- package/dist/Form/Message.torp +1 -1
- package/dist/Form/index.d.ts +18 -4
- package/dist/Menu/Menu.torp +16 -15
- package/dist/Menu/MenuButton.torp +19 -13
- package/dist/Menu/MenuCheck.torp +18 -14
- package/dist/Menu/MenuGroup.torp +4 -6
- package/dist/Menu/MenuIndicator.torp +5 -7
- package/dist/Menu/MenuPopout.torp +12 -15
- package/dist/Menu/MenuPopoutContent.torp +6 -8
- package/dist/Menu/MenuPopoutTrigger.torp +12 -14
- package/dist/Menu/MenuRadio.torp +14 -14
- package/dist/Menu/MenuRadioGroup.torp +22 -14
- package/dist/Menu/MenuSeparator.torp +3 -5
- package/dist/Menu/MenuTypes.ts +7 -5
- package/dist/Menu/index.d.ts +28 -22
- package/dist/MenuBar/MenuBar.torp +13 -14
- package/dist/MenuBar/MenuBarItem.torp +13 -16
- package/dist/MenuBar/MenuBarItemContent.torp +7 -9
- package/dist/MenuBar/MenuBarItemTrigger.torp +6 -9
- package/dist/MenuBar/index.d.ts +16 -16
- 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 +7 -8
- package/dist/NavMenu/NavMenuButton.torp +6 -8
- package/dist/NavMenu/NavMenuElement.torp +8 -8
- package/dist/NavMenu/NavMenuGroup.torp +4 -6
- package/dist/NavMenu/NavMenuGroupHeader.torp +5 -6
- package/dist/NavMenu/NavMenuLink.torp +8 -11
- package/dist/NavMenu/NavMenuPopout.torp +25 -17
- package/dist/NavMenu/NavMenuPopoutButton.torp +12 -13
- package/dist/NavMenu/NavMenuPopoutContent.torp +12 -12
- package/dist/NavMenu/NavMenuSeparator.torp +3 -5
- package/dist/NavMenu/index.d.ts +17 -11
- package/dist/Notification/Notification.torp +22 -13
- package/dist/Notification/NotificationClose.torp +3 -5
- package/dist/Notification/NotificationContainer.torp +3 -5
- package/dist/Notification/NotificationContent.torp +3 -5
- package/dist/Notification/index.d.ts +4 -4
- package/dist/Popover/Popover.torp +31 -25
- package/dist/Popover/PopoverContent.torp +35 -10
- package/dist/Popover/PopoverTrigger.torp +24 -4
- package/dist/Popover/PopoverTypes.ts +1 -1
- package/dist/Popover/index.d.ts +16 -124
- package/dist/Popover/index.js +1 -163
- package/dist/Popover/index.js.map +1 -1
- package/dist/TabGroup/TabContent.torp +12 -9
- package/dist/TabGroup/TabGroup.torp +41 -35
- package/dist/TabGroup/TabGroupTypes.ts +10 -5
- package/dist/TabGroup/TabHeader.torp +15 -8
- package/dist/TabGroup/TabList.torp +4 -6
- package/dist/TabGroup/TabTrigger.torp +8 -9
- package/dist/TabGroup/index.d.ts +14 -6
- package/dist/icons/ArrowDown.torp +3 -1
- package/dist/icons/ArrowLeft.torp +3 -1
- package/dist/icons/ArrowRight.torp +3 -1
- package/dist/icons/ArrowUp.torp +3 -1
- package/dist/icons/Bars.torp +3 -1
- package/dist/icons/Check.torp +3 -1
- package/dist/icons/ChevronDown.torp +3 -1
- package/dist/icons/ChevronLeft.torp +3 -1
- package/dist/icons/ChevronRight.torp +3 -1
- package/dist/icons/ChevronUp.torp +3 -1
- package/dist/icons/Cross.torp +3 -1
- package/dist/icons/IconTypes.ts +6 -0
- package/dist/icons/Loading.torp +3 -1
- package/dist/icons/Minus.torp +3 -1
- package/dist/icons/Plus.torp +3 -1
- package/dist/icons/index.d.ts +271 -14
- 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 +21 -14
- package/scripts/postbuild.ts +11 -1
- package/src/Accordion/Accordion.torp +29 -22
- package/src/Accordion/AccordionContent.torp +7 -8
- package/src/Accordion/AccordionHeader.torp +4 -6
- package/src/Accordion/AccordionItem.torp +15 -12
- package/src/Accordion/AccordionTrigger.torp +6 -7
- package/src/Accordion/AccordionTypes.ts +4 -3
- package/src/Breadcrumb/Breadcrumb.torp +9 -10
- package/src/Breadcrumb/BreadcrumbItem.torp +5 -7
- package/src/Breadcrumb/BreadcrumbSeparator.torp +3 -5
- package/src/Calendar/Calendar.torp +12 -13
- package/src/Calendar/CalendarDay.torp +3 -3
- package/src/Contextual/Contextual.torp +125 -0
- package/src/{Popover/PopoverContentContextual.torp → Contextual/ContextualContent.torp} +15 -15
- 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 +38 -72
- package/src/Dialog/DialogBody.torp +6 -8
- package/src/Dialog/DialogButton.torp +14 -12
- package/src/Dialog/DialogFooter.torp +3 -5
- package/src/Dialog/DialogHeader.torp +6 -8
- package/src/Dialog/DialogTypes.ts +3 -2
- package/src/Disclosure/Disclosure.torp +22 -23
- package/src/Disclosure/DisclosureContent.torp +7 -8
- package/src/Disclosure/DisclosureHeader.torp +5 -7
- package/src/Disclosure/DisclosureTrigger.torp +7 -8
- package/src/Disclosure/DisclosureTypes.ts +0 -1
- package/src/Drawer/Drawer.torp +101 -70
- 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 +2 -4
- package/src/Form/Form.torp +7 -9
- package/src/Form/Input.torp +20 -17
- package/src/Form/Label.torp +1 -1
- package/src/Form/Message.torp +1 -1
- package/src/Menu/Menu.torp +16 -15
- package/src/Menu/MenuButton.torp +19 -13
- package/src/Menu/MenuCheck.torp +18 -14
- package/src/Menu/MenuGroup.torp +4 -6
- package/src/Menu/MenuIndicator.torp +5 -7
- package/src/Menu/MenuPopout.torp +12 -15
- package/src/Menu/MenuPopoutContent.torp +6 -8
- package/src/Menu/MenuPopoutTrigger.torp +12 -14
- package/src/Menu/MenuRadio.torp +14 -14
- package/src/Menu/MenuRadioGroup.torp +22 -14
- package/src/Menu/MenuSeparator.torp +3 -5
- package/src/Menu/MenuTypes.ts +7 -5
- package/src/MenuBar/MenuBar.torp +13 -14
- package/src/MenuBar/MenuBarItem.torp +13 -16
- package/src/MenuBar/MenuBarItemContent.torp +7 -9
- package/src/MenuBar/MenuBarItemTrigger.torp +6 -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 +7 -8
- package/src/NavMenu/NavMenuButton.torp +6 -8
- package/src/NavMenu/NavMenuElement.torp +8 -8
- package/src/NavMenu/NavMenuGroup.torp +4 -6
- package/src/NavMenu/NavMenuGroupHeader.torp +5 -6
- package/src/NavMenu/NavMenuLink.torp +8 -11
- package/src/NavMenu/NavMenuPopout.torp +25 -17
- package/src/NavMenu/NavMenuPopoutButton.torp +12 -13
- package/src/NavMenu/NavMenuPopoutContent.torp +12 -12
- package/src/NavMenu/NavMenuSeparator.torp +3 -5
- package/src/Notification/Notification.torp +22 -13
- package/src/Notification/NotificationClose.torp +3 -5
- package/src/Notification/NotificationContainer.torp +3 -5
- package/src/Notification/NotificationContent.torp +3 -5
- package/src/Popover/Popover.torp +31 -25
- package/src/Popover/PopoverContent.torp +35 -10
- package/src/Popover/PopoverTrigger.torp +24 -4
- 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 +12 -9
- package/src/TabGroup/TabGroup.torp +41 -35
- package/src/TabGroup/TabGroupTypes.ts +10 -5
- package/src/TabGroup/TabHeader.torp +15 -8
- package/src/TabGroup/TabList.torp +4 -6
- package/src/TabGroup/TabTrigger.torp +8 -9
- package/src/icons/ArrowDown.torp +3 -1
- package/src/icons/ArrowLeft.torp +3 -1
- package/src/icons/ArrowRight.torp +3 -1
- package/src/icons/ArrowUp.torp +3 -1
- package/src/icons/Bars.torp +3 -1
- package/src/icons/Check.torp +3 -1
- package/src/icons/ChevronDown.torp +3 -1
- package/src/icons/ChevronLeft.torp +3 -1
- package/src/icons/ChevronRight.torp +3 -1
- package/src/icons/ChevronUp.torp +3 -1
- package/src/icons/Cross.torp +3 -1
- package/src/icons/IconTypes.ts +6 -0
- package/src/icons/Loading.torp +3 -1
- package/src/icons/Minus.torp +3 -1
- package/src/icons/Plus.torp +3 -1
- 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 -3
- package/test/Accordion/components/AccordionKeyboard.torp +1 -3
- package/test/Accordion/components/AccordionList.torp +1 -3
- package/test/Accordion/components/AccordionMultiple.torp +2 -4
- package/test/Accordion/components/AccordionSingle.torp +2 -4
- 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/components/DisclosureTest.torp +1 -3
- package/test/Menu/components/MenuAccessibility.torp +5 -5
- package/test/Menu/components/MenuBasic.torp +5 -5
- 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 -3
- package/test/TabGroup/components/TabGroupKeyboard.torp +1 -3
- package/test/TabGroup/components/TabGroupList.torp +1 -3
- package/test/TabGroup/components/TabGroupTrigger.torp +1 -3
- package/tsup.config.ts +2 -0
- package/dist/Popover/PopoverContentAnchored.torp +0 -113
- package/dist/Popover/PopoverOverlay.torp +0 -39
- package/dist/Popover/PopoverTriggerContextual.torp +0 -46
- package/dist/Popover/PopoverTriggerHover.torp +0 -47
- 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 -113
- package/src/Popover/PopoverOverlay.torp +0 -39
- package/src/Popover/PopoverTriggerContextual.torp +0 -46
- package/src/Popover/PopoverTriggerHover.torp +0 -47
- 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,51 @@
|
|
|
1
|
+
//import type { Component } from "@torpor/view";
|
|
2
|
+
//import showPopover from "../Modal/showModal";
|
|
3
|
+
//
|
|
4
|
+
//interface ClickPopoverOptions {
|
|
5
|
+
// popover: Component;
|
|
6
|
+
// props?: Record<PropertyKey, any>;
|
|
7
|
+
//}
|
|
8
|
+
//
|
|
9
|
+
///**
|
|
10
|
+
// * A mount directive for showing a popover when an element is clicked.
|
|
11
|
+
// * @param node The element to show the popover for
|
|
12
|
+
// * @param options Options for showing the popover, consisting of the popover component and any props
|
|
13
|
+
// */
|
|
14
|
+
//export default function clickPopover(node: HTMLElement, options: ClickPopoverOptions) {
|
|
15
|
+
// const { popover, props } = options;
|
|
16
|
+
//
|
|
17
|
+
// // Add a click event handler to the node
|
|
18
|
+
// node.addEventListener("click", handleClick);
|
|
19
|
+
//
|
|
20
|
+
// function handleClick(e: MouseEvent) {
|
|
21
|
+
// e.preventDefault();
|
|
22
|
+
// show();
|
|
23
|
+
// }
|
|
24
|
+
//
|
|
25
|
+
// let div: HTMLDivElement;
|
|
26
|
+
//
|
|
27
|
+
// function show() {
|
|
28
|
+
// // Show the popover in a div
|
|
29
|
+
// if (div) {
|
|
30
|
+
// document.body.removeChild(div);
|
|
31
|
+
// }
|
|
32
|
+
// div = document.createElement("div");
|
|
33
|
+
// document.body.appendChild(div);
|
|
34
|
+
//
|
|
35
|
+
// showPopover(popover, node, props, div);
|
|
36
|
+
// }
|
|
37
|
+
//
|
|
38
|
+
// return {
|
|
39
|
+
// destroy(): void {
|
|
40
|
+
// // Remove the event listener from the node on destroy
|
|
41
|
+
// node.removeEventListener("click", handleClick);
|
|
42
|
+
//
|
|
43
|
+
// // Remove the div we added
|
|
44
|
+
// // TODO: Should we do this in more places?
|
|
45
|
+
// if (div) {
|
|
46
|
+
// document.body.removeChild(div);
|
|
47
|
+
// }
|
|
48
|
+
// },
|
|
49
|
+
// };
|
|
50
|
+
//}
|
|
51
|
+
//
|
|
@@ -0,0 +1,51 @@
|
|
|
1
|
+
//import type { Component } from "@torpor/view";
|
|
2
|
+
//import showPopover from "../Modal/showModal";
|
|
3
|
+
//
|
|
4
|
+
//interface ContextPopoverOptions {
|
|
5
|
+
// popover: Component;
|
|
6
|
+
// props?: Record<PropertyKey, any>;
|
|
7
|
+
//}
|
|
8
|
+
//
|
|
9
|
+
///**
|
|
10
|
+
// * A mount directive for showing a popover when the user opens an element's context menu.
|
|
11
|
+
// * @param node The element to show the popover for
|
|
12
|
+
// * @param options Options for showing the popover, consisting of the popover component and any props
|
|
13
|
+
// */
|
|
14
|
+
//export default function contextPopover(node: HTMLElement, options: ContextPopoverOptions) {
|
|
15
|
+
// const { popover, props } = options;
|
|
16
|
+
//
|
|
17
|
+
// // Add a contextmenu event handler to the node
|
|
18
|
+
// node.addEventListener("contextmenu", handleClick);
|
|
19
|
+
//
|
|
20
|
+
// function handleClick(e: MouseEvent) {
|
|
21
|
+
// e.preventDefault();
|
|
22
|
+
// show();
|
|
23
|
+
// }
|
|
24
|
+
//
|
|
25
|
+
// let div: HTMLDivElement;
|
|
26
|
+
//
|
|
27
|
+
// function show() {
|
|
28
|
+
// // Show the popover in a div
|
|
29
|
+
// if (div) {
|
|
30
|
+
// document.body.removeChild(div);
|
|
31
|
+
// }
|
|
32
|
+
// div = document.createElement("div");
|
|
33
|
+
// document.body.appendChild(div);
|
|
34
|
+
//
|
|
35
|
+
// showPopover(popover, node, props, div);
|
|
36
|
+
// }
|
|
37
|
+
//
|
|
38
|
+
// return {
|
|
39
|
+
// destroy(): void {
|
|
40
|
+
// // Remove the event listener from the node on destroy
|
|
41
|
+
// node.removeEventListener("contextmenu", handleClick);
|
|
42
|
+
//
|
|
43
|
+
// // Remove the div we added
|
|
44
|
+
// // TODO: Should we do this in more places?
|
|
45
|
+
// if (div) {
|
|
46
|
+
// document.body.removeChild(div);
|
|
47
|
+
// }
|
|
48
|
+
// },
|
|
49
|
+
// };
|
|
50
|
+
//}
|
|
51
|
+
//
|
|
@@ -0,0 +1,58 @@
|
|
|
1
|
+
//import type { Component } from "@torpor/view";
|
|
2
|
+
//import showPopover from "../Modal/showModal";
|
|
3
|
+
//import hoverTrigger from "./hoverTrigger";
|
|
4
|
+
//
|
|
5
|
+
//interface HoverPopoverOptions {
|
|
6
|
+
// popover: Component;
|
|
7
|
+
// props?: Record<PropertyKey, any>;
|
|
8
|
+
// hoverDelay?: number;
|
|
9
|
+
// touchDelay?: number;
|
|
10
|
+
//}
|
|
11
|
+
//
|
|
12
|
+
///**
|
|
13
|
+
// * A mount directive for showing a popover when an element is hovered.
|
|
14
|
+
// * @param node The element to show the popover for
|
|
15
|
+
// * @param options Options for showing the popover, consisting of the popover component, any props and delays for hover and touch
|
|
16
|
+
// */
|
|
17
|
+
//export default function hoverPopover(node: HTMLElement, options: HoverPopoverOptions): () => void {
|
|
18
|
+
// const { popover, props, hoverDelay, touchDelay } = options;
|
|
19
|
+
//
|
|
20
|
+
// let div: HTMLDivElement | undefined;
|
|
21
|
+
//
|
|
22
|
+
// function onHover(node: HTMLElement, e: MouseEvent | TouchEvent) {
|
|
23
|
+
// // Show the popover in a div
|
|
24
|
+
// if (div) {
|
|
25
|
+
// document.body.removeChild(div);
|
|
26
|
+
// }
|
|
27
|
+
// div = document.createElement("div");
|
|
28
|
+
// document.body.appendChild(div);
|
|
29
|
+
//
|
|
30
|
+
// // Get the position relative to the element, so we can reposition on scroll
|
|
31
|
+
// const rect = node.getBoundingClientRect();
|
|
32
|
+
// let position: { x: number; y: number };
|
|
33
|
+
// if (e.type.startsWith("mouse")) {
|
|
34
|
+
// const me = e as MouseEvent;
|
|
35
|
+
// position = { x: me.clientX - rect.left, y: me.clientY - rect.top };
|
|
36
|
+
// } else {
|
|
37
|
+
// const te = e as TouchEvent;
|
|
38
|
+
// position = {
|
|
39
|
+
// x: te.touches[0].clientX - rect.left,
|
|
40
|
+
// y: te.touches[0].clientY - rect.top,
|
|
41
|
+
// };
|
|
42
|
+
// }
|
|
43
|
+
// const allProps = Object.assign({}, props, { anchor: node, position });
|
|
44
|
+
//
|
|
45
|
+
// showPopover(popover, node, allProps, div);
|
|
46
|
+
// }
|
|
47
|
+
//
|
|
48
|
+
// function onExit() {
|
|
49
|
+
// // Remove the div
|
|
50
|
+
// if (div) {
|
|
51
|
+
// document.body.removeChild(div);
|
|
52
|
+
// div = undefined;
|
|
53
|
+
// }
|
|
54
|
+
// }
|
|
55
|
+
//
|
|
56
|
+
// return hoverTrigger(node, { onHover, onExit, hoverDelay, touchDelay });
|
|
57
|
+
//}
|
|
58
|
+
//
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@torpor/ui",
|
|
3
|
-
"version": "0.
|
|
3
|
+
"version": "0.3.0",
|
|
4
4
|
"description": "Accessible, unstyled components for use in your Torpor front-end",
|
|
5
5
|
"type": "module",
|
|
6
6
|
"exports": {
|
|
@@ -14,8 +14,11 @@
|
|
|
14
14
|
},
|
|
15
15
|
"./Calendar": {
|
|
16
16
|
"types": "./dist/Calendar/index.d.ts",
|
|
17
|
-
"import": "./dist/Calendar/index.js"
|
|
18
|
-
|
|
17
|
+
"import": "./dist/Calendar/index.js"
|
|
18
|
+
},
|
|
19
|
+
"./Contextual": {
|
|
20
|
+
"types": "./dist/Contextual/index.d.ts",
|
|
21
|
+
"import": "./dist/Contextual/index.js"
|
|
19
22
|
},
|
|
20
23
|
"./Dialog": {
|
|
21
24
|
"types": "./dist/Dialog/index.d.ts",
|
|
@@ -41,6 +44,10 @@
|
|
|
41
44
|
"types": "./dist/MenuBar/index.d.ts",
|
|
42
45
|
"import": "./dist/MenuBar/index.js"
|
|
43
46
|
},
|
|
47
|
+
"./Modal": {
|
|
48
|
+
"types": "./dist/Modal/index.d.ts",
|
|
49
|
+
"import": "./dist/Modal/index.js"
|
|
50
|
+
},
|
|
44
51
|
"./NavMenu": {
|
|
45
52
|
"types": "./dist/NavMenu/index.d.ts",
|
|
46
53
|
"import": "./dist/NavMenu/index.js"
|
|
@@ -58,12 +65,12 @@
|
|
|
58
65
|
"import": "./dist/TabGroup/index.js"
|
|
59
66
|
},
|
|
60
67
|
"./icons": {
|
|
61
|
-
"types": "./dist/icons.d.ts",
|
|
62
|
-
"import": "./dist/icons.js"
|
|
68
|
+
"types": "./dist/icons/index.d.ts",
|
|
69
|
+
"import": "./dist/icons/index.js"
|
|
63
70
|
},
|
|
64
71
|
"./motion": {
|
|
65
|
-
"types": "./dist/motion.d.ts",
|
|
66
|
-
"import": "./dist/motion.js"
|
|
72
|
+
"types": "./dist/motion/index.d.ts",
|
|
73
|
+
"import": "./dist/motion/index.js"
|
|
67
74
|
}
|
|
68
75
|
},
|
|
69
76
|
"publishConfig": {
|
|
@@ -73,8 +80,8 @@
|
|
|
73
80
|
"author": "",
|
|
74
81
|
"license": "ISC",
|
|
75
82
|
"dependencies": {
|
|
76
|
-
"@torpor/view": "^0.
|
|
77
|
-
"@torpor/unplugin": "^0.2.
|
|
83
|
+
"@torpor/view": "^0.4.0",
|
|
84
|
+
"@torpor/unplugin": "^0.2.1"
|
|
78
85
|
},
|
|
79
86
|
"devDependencies": {
|
|
80
87
|
"@testing-library/dom": "^10.4.1",
|
|
@@ -82,16 +89,16 @@
|
|
|
82
89
|
"@testing-library/user-event": "^14.6.1",
|
|
83
90
|
"@trivago/prettier-plugin-sort-imports": "^5.2.2",
|
|
84
91
|
"@types/jsdom": "^27.0.0",
|
|
85
|
-
"@types/node": "^24.
|
|
86
|
-
"@typescript/native-preview": "7.0.0-dev.
|
|
92
|
+
"@types/node": "^24.9.2",
|
|
93
|
+
"@typescript/native-preview": "7.0.0-dev.20251027.1",
|
|
87
94
|
"chalk": "^5.6.2",
|
|
88
95
|
"esno": "^4.8.0",
|
|
89
96
|
"fast-glob": "^3.3.3",
|
|
90
|
-
"jsdom": "^27.0.
|
|
91
|
-
"oxlint-tsgolint": "^0.
|
|
97
|
+
"jsdom": "^27.0.1",
|
|
98
|
+
"oxlint-tsgolint": "^0.3.0",
|
|
92
99
|
"tsup": "^8.5.0",
|
|
93
100
|
"typescript": "^5.9.3",
|
|
94
|
-
"vitest": "^
|
|
101
|
+
"vitest": "^4.0.4",
|
|
95
102
|
"zod": "^4.1.12"
|
|
96
103
|
},
|
|
97
104
|
"scripts": {
|
package/scripts/postbuild.ts
CHANGED
|
@@ -25,6 +25,12 @@ async function run() {
|
|
|
25
25
|
lstatSync(join(distFolder, f)).isDirectory(),
|
|
26
26
|
);
|
|
27
27
|
for (const component of componentFolders) {
|
|
28
|
+
// If it's an old folder, delete it
|
|
29
|
+
if (!existsSync(join(sourceFolder, component))) {
|
|
30
|
+
await fs.rmdir(join(distFolder, component));
|
|
31
|
+
continue;
|
|
32
|
+
}
|
|
33
|
+
|
|
28
34
|
console.log(chalk.cyan.inverse(" POST "), `Tidy ${component}`);
|
|
29
35
|
|
|
30
36
|
// Loop through files and change declarations to imports so they get
|
|
@@ -85,9 +91,13 @@ async function run() {
|
|
|
85
91
|
await fs.writeFile(join(distFolder, component, "index.d.ts"), dts);
|
|
86
92
|
}
|
|
87
93
|
|
|
88
|
-
// Move all utils
|
|
94
|
+
// Move all `utils` and `mount` TS files into the dest folder
|
|
89
95
|
await moveUtils(distFolder, "utils");
|
|
90
96
|
await moveUtils(distFolder, "mount");
|
|
97
|
+
|
|
98
|
+
// HACK: Move index.d.ts into the motion folder. This works because it's the
|
|
99
|
+
// only d.ts file we create (for now...?)
|
|
100
|
+
await fs.copyFile(join(distFolder, "index.d.ts"), join(distFolder, "motion", "index.d.ts"));
|
|
91
101
|
}
|
|
92
102
|
|
|
93
103
|
async function moveUtils(distFolder: string, folderName: string) {
|
|
@@ -34,11 +34,18 @@ interface AccordionProps {
|
|
|
34
34
|
* </Accordion>
|
|
35
35
|
* ```
|
|
36
36
|
*/
|
|
37
|
-
export default function Accordion($props: AccordionProps) {
|
|
38
|
-
|
|
37
|
+
export default function Accordion($props: AccordionProps | undefined) {
|
|
38
|
+
let type = $props?.type ?? "single";
|
|
39
39
|
|
|
40
|
-
$
|
|
41
|
-
|
|
40
|
+
let $state = $watch({
|
|
41
|
+
value: $props?.value ?? (type === "single" ? "" : [] as string[])
|
|
42
|
+
});
|
|
43
|
+
|
|
44
|
+
$run(() => {
|
|
45
|
+
if ($props !== undefined) {
|
|
46
|
+
$props.value = $state.value;
|
|
47
|
+
}
|
|
48
|
+
});
|
|
42
49
|
|
|
43
50
|
let itemStates: ItemState[] = [];
|
|
44
51
|
|
|
@@ -56,13 +63,13 @@ export default function Accordion($props: AccordionProps) {
|
|
|
56
63
|
|
|
57
64
|
$run(() => {
|
|
58
65
|
// HACK: This should probably be done with setters?
|
|
59
|
-
let newValue = $
|
|
66
|
+
let newValue = $state.value;
|
|
60
67
|
|
|
61
68
|
// Get the value
|
|
62
|
-
switch (
|
|
69
|
+
switch (type) {
|
|
63
70
|
case "single": {
|
|
64
71
|
// Ensure the value passed in was a string (in case e.g. the user has set values to ints)
|
|
65
|
-
newValue = newValue
|
|
72
|
+
newValue = newValue.toString();
|
|
66
73
|
for (let item of itemStates) {
|
|
67
74
|
item.expanded = item.value === newValue;
|
|
68
75
|
}
|
|
@@ -81,22 +88,22 @@ export default function Accordion($props: AccordionProps) {
|
|
|
81
88
|
}
|
|
82
89
|
|
|
83
90
|
// Set the value
|
|
84
|
-
$
|
|
91
|
+
$state.value = newValue;
|
|
85
92
|
})
|
|
86
93
|
|
|
87
94
|
$run(() => {
|
|
88
|
-
itemStates.forEach((s) => s.parentDisabled = $props
|
|
95
|
+
itemStates.forEach((s) => s.parentDisabled = $props?.disabled === true);
|
|
89
96
|
});
|
|
90
97
|
|
|
91
98
|
// Dispatch the change event when the value changes
|
|
92
99
|
let firstChange = true;
|
|
93
100
|
$run(() => {
|
|
94
|
-
const ev = $props
|
|
95
|
-
const value = $
|
|
101
|
+
const ev = $props?.onchange;
|
|
102
|
+
const value = $state.value;
|
|
96
103
|
if (firstChange) {
|
|
97
104
|
firstChange = false;
|
|
98
105
|
} else if (ev) {
|
|
99
|
-
ev(value
|
|
106
|
+
ev(value);
|
|
100
107
|
}
|
|
101
108
|
});
|
|
102
109
|
|
|
@@ -112,21 +119,21 @@ export default function Accordion($props: AccordionProps) {
|
|
|
112
119
|
}
|
|
113
120
|
|
|
114
121
|
// If we have a value, set whether the item should be expanded
|
|
115
|
-
if ($
|
|
116
|
-
switch (
|
|
122
|
+
if ($state.value) {
|
|
123
|
+
switch (type) {
|
|
117
124
|
case "single": {
|
|
118
|
-
itemState.expanded = $
|
|
125
|
+
itemState.expanded = $state.value === itemState.value;
|
|
119
126
|
break;
|
|
120
127
|
}
|
|
121
128
|
case "multiple": {
|
|
122
|
-
itemState.expanded = $
|
|
129
|
+
itemState.expanded = $state.value.includes(itemState.value);
|
|
123
130
|
break;
|
|
124
131
|
}
|
|
125
132
|
}
|
|
126
133
|
}
|
|
127
134
|
|
|
128
135
|
// Set whether the Accordion itself is disabled
|
|
129
|
-
itemState.parentDisabled = $props
|
|
136
|
+
itemState.parentDisabled = $props?.disabled === true
|
|
130
137
|
|
|
131
138
|
// Add the item's state to the array
|
|
132
139
|
itemStates.splice(itemState.index, 0, itemState);
|
|
@@ -143,13 +150,13 @@ export default function Accordion($props: AccordionProps) {
|
|
|
143
150
|
}
|
|
144
151
|
|
|
145
152
|
function toggleItem(toggleValue: string) {
|
|
146
|
-
switch (
|
|
153
|
+
switch (type) {
|
|
147
154
|
case "single": {
|
|
148
155
|
for (let item of itemStates) {
|
|
149
156
|
// The item is expanded if it has the supplied value (i.e. if it was clicked) and if it
|
|
150
157
|
// wasn't already expanded (i.e. we collapse it if it was expanded and clicked)
|
|
151
158
|
if (item.value === toggleValue) {
|
|
152
|
-
$
|
|
159
|
+
$state.value = item.expanded ? "" : item.value;
|
|
153
160
|
break;
|
|
154
161
|
}
|
|
155
162
|
}
|
|
@@ -167,7 +174,7 @@ export default function Accordion($props: AccordionProps) {
|
|
|
167
174
|
newValue.push(item.value);
|
|
168
175
|
}
|
|
169
176
|
}
|
|
170
|
-
$
|
|
177
|
+
$state.value = newValue.sort();
|
|
171
178
|
break;
|
|
172
179
|
}
|
|
173
180
|
}
|
|
@@ -210,8 +217,8 @@ export default function Accordion($props: AccordionProps) {
|
|
|
210
217
|
|
|
211
218
|
@render {
|
|
212
219
|
<div
|
|
213
|
-
{$props
|
|
214
|
-
class={`torp-accordion ${$props
|
|
220
|
+
{$props?.id}
|
|
221
|
+
class={`torp-accordion ${$props?.class ?? ""}`.trim()}
|
|
215
222
|
>
|
|
216
223
|
<slot />
|
|
217
224
|
</div>
|
|
@@ -13,9 +13,8 @@ interface AccordionContentProps {
|
|
|
13
13
|
/**
|
|
14
14
|
* Content for an AccordionItem, which can be revealed or hidden by an associated AccordionTrigger.
|
|
15
15
|
*/
|
|
16
|
-
export default function AccordionContent($props: AccordionContentProps) {
|
|
17
|
-
|
|
18
|
-
$props.id ||= getId();
|
|
16
|
+
export default function AccordionContent($props: AccordionContentProps | undefined) {
|
|
17
|
+
let defaultId = getId();
|
|
19
18
|
|
|
20
19
|
const context = $context[AccordionItemContextName] as AccordionItemContext;
|
|
21
20
|
if (!context) {
|
|
@@ -24,15 +23,15 @@ export default function AccordionContent($props: AccordionContentProps) {
|
|
|
24
23
|
let $state = context.state
|
|
25
24
|
|
|
26
25
|
// Set the content ID so that it can be used with aria-controls in AccordionTrigger
|
|
27
|
-
$state.contentId = $props
|
|
26
|
+
$state.contentId = $props?.id ?? defaultId;
|
|
28
27
|
|
|
29
28
|
@render {
|
|
30
29
|
<div
|
|
31
|
-
{$props
|
|
32
|
-
class={`torp-accordion-content ${$props
|
|
33
|
-
role={$props
|
|
30
|
+
id={$props?.id ?? defaultId}
|
|
31
|
+
class={`torp-accordion-content ${$props?.class ?? ""}`.trim()}
|
|
32
|
+
role={$props?.ariaRegion ? "region" : undefined}
|
|
34
33
|
aria-labelledby={$state.headerId}
|
|
35
|
-
data-state={$state.
|
|
34
|
+
data-state={$state.expanded ? "open" : "closed"}
|
|
36
35
|
data-disabled={$state.disabled ? "true" : undefined}
|
|
37
36
|
>
|
|
38
37
|
@if ($state.expanded) {
|
|
@@ -20,9 +20,7 @@ interface AccordionHeaderProps {
|
|
|
20
20
|
* </AccordionHeader>
|
|
21
21
|
* ```
|
|
22
22
|
*/
|
|
23
|
-
export default function AccordionHeader($props: AccordionHeaderProps) {
|
|
24
|
-
$props ??= $watch({});
|
|
25
|
-
|
|
23
|
+
export default function AccordionHeader($props: AccordionHeaderProps | undefined) {
|
|
26
24
|
const context = $context[AccordionItemContextName] as AccordionItemContext;
|
|
27
25
|
if (!context) {
|
|
28
26
|
throw new Error("AccordionHeader must be contained within an AccordionItem");
|
|
@@ -32,9 +30,9 @@ export default function AccordionHeader($props: AccordionHeaderProps) {
|
|
|
32
30
|
@render {
|
|
33
31
|
@// TODO: $props.as
|
|
34
32
|
<h4
|
|
35
|
-
{$props
|
|
36
|
-
class={`torp-accordion-header ${$props
|
|
37
|
-
data-state={$state.
|
|
33
|
+
{$props?.id}
|
|
34
|
+
class={`torp-accordion-header ${$props?.class ?? ""}`.trim()}
|
|
35
|
+
data-state={$state.expanded ? "open" : "closed"}
|
|
38
36
|
data-disabled={$state.disabled ? "true" : undefined}
|
|
39
37
|
>
|
|
40
38
|
<slot />
|
|
@@ -29,20 +29,16 @@ interface AccordionItemProps {
|
|
|
29
29
|
* </AccordionItem>
|
|
30
30
|
* ```
|
|
31
31
|
*/
|
|
32
|
-
export default function AccordionItem($props: AccordionItemProps) {
|
|
33
|
-
$props ??= $watch({});
|
|
34
|
-
|
|
32
|
+
export default function AccordionItem($props: AccordionItemProps | undefined) {
|
|
35
33
|
let $state: ItemState = $watch({
|
|
36
34
|
index: -1,
|
|
37
35
|
value: "",
|
|
38
36
|
expanded: false,
|
|
39
37
|
headerId: "",
|
|
40
38
|
contentId: "",
|
|
41
|
-
disabled: $props
|
|
39
|
+
disabled: $props?.disabled ?? false,
|
|
42
40
|
parentDisabled: false,
|
|
43
|
-
|
|
44
|
-
return this.expanded ? "open" : "closed";
|
|
45
|
-
},
|
|
41
|
+
setFocused
|
|
46
42
|
})
|
|
47
43
|
|
|
48
44
|
// Get stuff out of the AccordionContext
|
|
@@ -60,7 +56,7 @@ export default function AccordionItem($props: AccordionItemProps) {
|
|
|
60
56
|
$context[AccordionItemContextName] = itemContext;
|
|
61
57
|
|
|
62
58
|
// Register this item with the parent Accordion, which will handle toggling expanded for all items
|
|
63
|
-
context.registerItem($state);
|
|
59
|
+
context.registerItem($state, setFocused);
|
|
64
60
|
|
|
65
61
|
// Remove the item from the parent Accordion when this item is destroyed
|
|
66
62
|
$run(() => {
|
|
@@ -72,7 +68,7 @@ export default function AccordionItem($props: AccordionItemProps) {
|
|
|
72
68
|
// Dispatch the toggle event when the value of expanded changes
|
|
73
69
|
let firstToggle = true;
|
|
74
70
|
$run(() => {
|
|
75
|
-
const ev = $props
|
|
71
|
+
const ev = $props?.ontoggle;
|
|
76
72
|
const expanded = $state.expanded;
|
|
77
73
|
if (firstToggle) {
|
|
78
74
|
firstToggle = false;
|
|
@@ -81,11 +77,18 @@ export default function AccordionItem($props: AccordionItemProps) {
|
|
|
81
77
|
}
|
|
82
78
|
});
|
|
83
79
|
|
|
80
|
+
// Called from the parent Accordion; pass the focus command along to the AccordionButton
|
|
81
|
+
function setFocused() {
|
|
82
|
+
if (itemContext.setHeaderFocused) {
|
|
83
|
+
itemContext.setHeaderFocused();
|
|
84
|
+
}
|
|
85
|
+
}
|
|
86
|
+
|
|
84
87
|
@render {
|
|
85
88
|
<div
|
|
86
|
-
{$props
|
|
87
|
-
class={`torp-accordion-item ${$props
|
|
88
|
-
data-state={$state.
|
|
89
|
+
{$props?.id}
|
|
90
|
+
class={`torp-accordion-item ${$props?.class ?? ""}`.trim()}
|
|
91
|
+
data-state={$state.expanded ? "open" : "closed"}
|
|
89
92
|
data-disabled={$state.disabled ? "true" : undefined}
|
|
90
93
|
>
|
|
91
94
|
<slot />
|
|
@@ -11,9 +11,8 @@ interface AccordionTriggerProps {
|
|
|
11
11
|
/**
|
|
12
12
|
* A header button for an AccordionItem, which can be used to reveal or hide an associated AccordionContent.
|
|
13
13
|
*/
|
|
14
|
-
export default function AccordionTrigger($props: AccordionTriggerProps) {
|
|
15
|
-
|
|
16
|
-
$props.id ||= getId();
|
|
14
|
+
export default function AccordionTrigger($props: AccordionTriggerProps | undefined) {
|
|
15
|
+
let defaultId = getId();
|
|
17
16
|
|
|
18
17
|
let button: HTMLButtonElement;
|
|
19
18
|
|
|
@@ -25,7 +24,7 @@ export default function AccordionTrigger($props: AccordionTriggerProps) {
|
|
|
25
24
|
let $state = context.state;
|
|
26
25
|
|
|
27
26
|
// Set the header ID so that it can be used with aria-labelledby in AccordionContent
|
|
28
|
-
$state.headerId = $props
|
|
27
|
+
$state.headerId = $props?.id ?? defaultId;
|
|
29
28
|
|
|
30
29
|
// Let the item know how to set the button's focus
|
|
31
30
|
$state.setFocused = setFocused;
|
|
@@ -49,13 +48,13 @@ export default function AccordionTrigger($props: AccordionTriggerProps) {
|
|
|
49
48
|
@render {
|
|
50
49
|
<button
|
|
51
50
|
type="button"
|
|
52
|
-
{$props
|
|
53
|
-
class={`torp-accordion-trigger ${$props
|
|
51
|
+
id={$props?.id ?? defaultId}
|
|
52
|
+
class={`torp-accordion-trigger ${$props?.class ?? ""}`.trim()}
|
|
54
53
|
disabled={$state.disabled || $state.parentDisabled}
|
|
55
54
|
aria-expanded={$state.expanded.toString()}
|
|
56
55
|
aria-disabled={$state.disabled ? "true" : undefined}
|
|
57
56
|
aria-controls={$state.contentId}
|
|
58
|
-
data-state={$state.
|
|
57
|
+
data-state={$state.expanded ? "open" : "closed"}
|
|
59
58
|
data-disabled={$state.disabled ? "true" : undefined}
|
|
60
59
|
&ref={button}
|
|
61
60
|
onclick={handleClick}
|
|
@@ -13,12 +13,14 @@ export interface AccordionContext {
|
|
|
13
13
|
}
|
|
14
14
|
|
|
15
15
|
export interface AccordionItemContext {
|
|
16
|
-
/**
|
|
16
|
+
/** Raised when an AccordionItem is toggled */
|
|
17
17
|
toggleItem: (value: string) => void;
|
|
18
|
-
/**
|
|
18
|
+
/** Raised when an AccordionHeader receives a keyboard event */
|
|
19
19
|
handleHeaderKey: (index: number, e: KeyboardEvent) => void;
|
|
20
20
|
/** The reactive state for an AccordionItem */
|
|
21
21
|
state: ItemState;
|
|
22
|
+
/** Called in an AccordionItem when its header needs to be focused */
|
|
23
|
+
setHeaderFocused?: () => void;
|
|
22
24
|
}
|
|
23
25
|
|
|
24
26
|
export interface ItemState {
|
|
@@ -29,7 +31,6 @@ export interface ItemState {
|
|
|
29
31
|
contentId: string;
|
|
30
32
|
disabled: boolean;
|
|
31
33
|
parentDisabled: boolean;
|
|
32
|
-
dataState: "open" | "closed";
|
|
33
34
|
/** Called in the Accordion when a header needs to be focused */
|
|
34
35
|
setFocused: () => void;
|
|
35
36
|
}
|
|
@@ -18,23 +18,22 @@ interface BreadcrumbProps {
|
|
|
18
18
|
*
|
|
19
19
|
* ```
|
|
20
20
|
* <Breadcrumb>
|
|
21
|
-
*
|
|
22
|
-
*
|
|
23
|
-
*
|
|
24
|
-
*
|
|
21
|
+
* <BreadcrumbItem />
|
|
22
|
+
* <BreadcrumbSeparator /> (optional)
|
|
23
|
+
* <BreadcrumbItem>
|
|
24
|
+
* ...
|
|
25
|
+
* </BreadcrumbItem>
|
|
25
26
|
* </Breadcrumb>
|
|
26
27
|
* ```
|
|
27
28
|
*
|
|
28
29
|
* You can separate BreadcrumbItems using BreadcrumbSeparators or by using CSS.
|
|
29
30
|
*/
|
|
30
|
-
export default function Breadcrumb($props: BreadcrumbProps) {
|
|
31
|
-
$props ??= $watch({});
|
|
32
|
-
|
|
31
|
+
export default function Breadcrumb($props: BreadcrumbProps | undefined) {
|
|
33
32
|
@render {
|
|
34
33
|
<nav
|
|
35
|
-
{$props
|
|
36
|
-
class={`torp-breadcrumb ${$props
|
|
37
|
-
aria-label={$props
|
|
34
|
+
{$props?.id}
|
|
35
|
+
class={`torp-breadcrumb ${$props?.class ?? ""}`.trim()}
|
|
36
|
+
aria-label={$props?.ariaLabel}
|
|
38
37
|
>
|
|
39
38
|
<slot />
|
|
40
39
|
</nav>
|
|
@@ -12,15 +12,13 @@ interface BreadcrumbItemProps {
|
|
|
12
12
|
* An item in a breadcrumb, containing a link to one of the parent pages of the
|
|
13
13
|
* current page (or the current page).
|
|
14
14
|
*/
|
|
15
|
-
export default function BreadcrumbItem($props: BreadcrumbItemProps) {
|
|
16
|
-
$props ??= $watch({});
|
|
17
|
-
|
|
15
|
+
export default function BreadcrumbItem($props: BreadcrumbItemProps | undefined) {
|
|
18
16
|
@render {
|
|
19
17
|
<div
|
|
20
|
-
{$props
|
|
21
|
-
class={`torp-breadcrumb ${$props
|
|
22
|
-
aria-current={$props
|
|
23
|
-
data-current={$props
|
|
18
|
+
{$props?.id}
|
|
19
|
+
class={`torp-breadcrumb ${$props?.class ?? ""}`.trim()}
|
|
20
|
+
aria-current={$props?.current ? "page" : undefined}
|
|
21
|
+
data-current={$props?.current ? "current" : undefined}
|
|
24
22
|
>
|
|
25
23
|
<slot />
|
|
26
24
|
</div>
|
|
@@ -10,13 +10,11 @@ interface BreadcrumbSeparatorProps {
|
|
|
10
10
|
* A separator between links in a Breadcrumb component. It is hidden from
|
|
11
11
|
* screen readers.
|
|
12
12
|
*/
|
|
13
|
-
export default function BreadcrumbSeparator($props: BreadcrumbSeparatorProps) {
|
|
14
|
-
$props ??= $watch({});
|
|
15
|
-
|
|
13
|
+
export default function BreadcrumbSeparator($props: BreadcrumbSeparatorProps | undefined) {
|
|
16
14
|
@render {
|
|
17
15
|
<div
|
|
18
|
-
{$props
|
|
19
|
-
class={`torp-breadcrumb-separator ${$props
|
|
16
|
+
{$props?.id}
|
|
17
|
+
class={`torp-breadcrumb-separator ${$props?.class ?? ""}`.trim()}
|
|
20
18
|
aria-hidden="true"
|
|
21
19
|
>
|
|
22
20
|
<slot />
|