@torpor/ui 0.4.0 → 1.0.1
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/README.md +83 -7
- package/dist/Accordion/Accordion.torp +42 -165
- package/dist/Accordion/AccordionContent.torp +6 -6
- package/dist/Accordion/AccordionHeader.torp +7 -11
- package/dist/Accordion/AccordionItem.torp +24 -24
- package/dist/Accordion/AccordionTrigger.torp +17 -8
- package/dist/Accordion/AccordionTypes.ts +1 -1
- package/dist/Accordion/index.d.ts +23 -25
- package/dist/Accordion/index.js +6 -22
- package/dist/Breadcrumb/Breadcrumb.torp +12 -10
- package/dist/Breadcrumb/BreadcrumbItem.torp +6 -6
- package/dist/Breadcrumb/BreadcrumbList.torp +21 -0
- package/dist/Breadcrumb/BreadcrumbSeparator.torp +4 -4
- package/dist/Breadcrumb/index.d.ts +39 -15
- package/dist/Breadcrumb/index.js +5 -14
- package/dist/Calendar/Calendar.torp +163 -156
- package/dist/Calendar/CalendarDay.torp +91 -45
- package/dist/Calendar/CalendarDayHeader.torp +36 -0
- package/dist/Calendar/CalendarGrid.torp +104 -0
- package/dist/Calendar/CalendarGridHeader.torp +43 -0
- package/dist/Calendar/CalendarHeader.torp +48 -0
- package/dist/Calendar/CalendarHeaderTrigger.torp +54 -0
- package/dist/Calendar/CalendarTypes.ts +24 -3
- package/dist/Calendar/buildDays.ts +54 -0
- package/dist/Calendar/index.d.ts +191 -5
- package/dist/Calendar/index.js +8 -10
- package/dist/Carousel/Carousel.torp +180 -0
- package/dist/Carousel/CarouselIndicators.torp +65 -0
- package/dist/Carousel/CarouselNext.torp +43 -0
- package/dist/Carousel/CarouselPrevious.torp +44 -0
- package/dist/Carousel/CarouselSlide.torp +57 -0
- package/dist/Carousel/CarouselTypes.ts +28 -0
- package/dist/Carousel/index.d.ts +147 -0
- package/dist/Carousel/index.js +6 -0
- package/dist/Charts/BarChart.torp +55 -144
- package/dist/Charts/Chart.torp +120 -0
- package/dist/Charts/ChartBars.torp +78 -0
- package/dist/Charts/ChartColumns.torp +66 -0
- package/dist/Charts/ChartGrid.torp +54 -0
- package/dist/Charts/ChartLines.torp +60 -0
- package/dist/Charts/ChartTypes.ts +25 -0
- package/dist/Charts/ChartXAxis.torp +85 -0
- package/dist/Charts/ChartYAxis.torp +107 -0
- package/dist/Charts/ColumnChart.torp +70 -0
- package/dist/Charts/GridLines.torp +4 -4
- package/dist/Charts/LineChart.torp +55 -178
- package/dist/Charts/PieChart.torp +14 -20
- package/dist/Charts/ScatterChart.torp +45 -38
- package/dist/Charts/SparkLine.torp +16 -19
- package/dist/Charts/XAxis.torp +14 -11
- package/dist/Charts/YAxis.torp +10 -8
- package/dist/Charts/index.d.ts +328 -79
- package/dist/Charts/index.js +17 -34
- package/dist/ColorPicker/ColorPalette.torp +154 -0
- package/dist/ColorPicker/ColorPicker.torp +157 -0
- package/dist/ColorPicker/index.d.ts +85 -0
- package/dist/ColorPicker/index.js +3 -0
- package/dist/ComboBox/ComboBox.torp +205 -0
- package/dist/ComboBox/ComboBoxContent.torp +120 -0
- package/dist/ComboBox/ComboBoxInput.torp +161 -0
- package/dist/ComboBox/ComboBoxTrigger.torp +49 -0
- package/dist/ComboBox/ComboBoxTypes.ts +39 -0
- package/dist/ComboBox/index.d.ts +154 -0
- package/dist/ComboBox/index.js +6 -0
- package/dist/CommandPalette/CommandPalette.torp +223 -0
- package/dist/CommandPalette/CommandTypes.ts +14 -0
- package/dist/CommandPalette/index.d.ts +45 -0
- package/dist/CommandPalette/index.js +2 -0
- package/dist/Contextual/Contextual.torp +32 -50
- package/dist/Contextual/ContextualContent.torp +29 -73
- package/dist/Contextual/ContextualHover.torp +112 -0
- package/dist/Contextual/ContextualTrigger.torp +31 -42
- package/dist/Contextual/ContextualTypes.ts +4 -17
- package/dist/Contextual/index.d.ts +44 -27
- package/dist/Contextual/index.js +5 -14
- package/dist/DataGrid/DataGrid.torp +496 -0
- package/dist/DataGrid/DataGridTypes.ts +25 -0
- package/dist/DataGrid/index.d.ts +90 -0
- package/dist/DataGrid/index.js +3 -0
- package/dist/DataGrid/sortRows.ts +32 -0
- package/dist/DatePicker/DatePicker.torp +222 -0
- package/dist/DatePicker/DatePickerHeader.torp +20 -0
- package/dist/DatePicker/index.d.ts +55 -0
- package/dist/DatePicker/index.js +2 -0
- package/dist/DateRangePicker/DateRangePicker.torp +315 -0
- package/dist/DateRangePicker/DateRangePickerDay.torp +137 -0
- package/dist/DateRangePicker/DateRangePickerTypes.ts +21 -0
- package/dist/DateRangePicker/index.d.ts +76 -0
- package/dist/DateRangePicker/index.js +3 -0
- package/dist/Dialog/Dialog.torp +24 -17
- package/dist/Dialog/DialogBody.torp +5 -9
- package/dist/Dialog/DialogButton.torp +12 -12
- package/dist/Dialog/DialogFooter.torp +3 -7
- package/dist/Dialog/DialogHeader.torp +6 -10
- package/dist/Dialog/index.d.ts +27 -27
- package/dist/Dialog/index.js +6 -22
- package/dist/Disclosure/Disclosure.torp +18 -18
- package/dist/Disclosure/DisclosureContent.torp +5 -6
- package/dist/Disclosure/DisclosureHeader.torp +7 -11
- package/dist/Disclosure/DisclosureTrigger.torp +4 -5
- package/dist/Disclosure/index.d.ts +14 -16
- package/dist/Disclosure/index.js +5 -18
- package/dist/Drawer/Drawer.torp +19 -49
- package/dist/Drawer/DrawerContent.torp +70 -13
- package/dist/Drawer/DrawerOverlay.torp +4 -4
- package/dist/Drawer/DrawerTrigger.torp +16 -4
- package/dist/Drawer/DrawerTypes.ts +3 -0
- package/dist/Drawer/index.d.ts +16 -20
- package/dist/Drawer/index.js +5 -18
- package/dist/FocusGroup/FocusGroup.torp +70 -0
- package/dist/FocusGroup/FocusGroupButton.torp +59 -0
- package/dist/FocusGroup/FocusGroupTypes.ts +14 -0
- package/dist/FocusGroup/index.d.ts +44 -0
- package/dist/FocusGroup/index.js +3 -0
- package/dist/Form/CheckBox.torp +27 -18
- package/dist/Form/Field.torp +17 -17
- package/dist/Form/File.torp +31 -22
- package/dist/Form/FileDrop.torp +187 -0
- package/dist/Form/Form.torp +24 -22
- package/dist/Form/FormTypes.ts +2 -0
- package/dist/Form/FormValues.torp +37 -0
- package/dist/Form/Hidden.torp +4 -12
- package/dist/Form/Input.torp +38 -32
- package/dist/Form/Label.torp +3 -3
- package/dist/Form/Message.torp +13 -5
- package/dist/Form/MessageSummary.torp +5 -4
- package/dist/Form/Option.torp +11 -7
- package/dist/Form/Select.torp +32 -28
- package/dist/Form/TextArea.torp +35 -31
- package/dist/Form/Toggle.torp +109 -0
- package/dist/Form/index.d.ts +178 -79
- package/dist/Form/index.js +16 -50
- package/dist/ListBox/ListBox.torp +253 -150
- package/dist/ListBox/ListBoxItem.torp +54 -30
- package/dist/ListBox/ListBoxSeparator.torp +5 -2
- package/dist/ListBox/ListBoxTypes.ts +23 -5
- package/dist/ListBox/LoadedListBoxItems.torp +41 -0
- package/dist/ListBox/index.d.ts +56 -17
- package/dist/ListBox/index.js +4 -14
- package/dist/MaskedInput/MaskedInput.torp +143 -0
- package/dist/MaskedInput/index.d.ts +52 -0
- package/dist/MaskedInput/index.js +2 -0
- package/dist/Menu/Menu.torp +86 -71
- package/dist/Menu/MenuButton.torp +17 -10
- package/dist/Menu/MenuCheck.torp +22 -18
- package/dist/Menu/MenuGroup.torp +4 -4
- package/dist/Menu/MenuIndicator.torp +5 -13
- package/dist/Menu/MenuPopout.torp +20 -50
- package/dist/Menu/MenuPopoutContent.torp +15 -66
- package/dist/Menu/MenuPopoutTrigger.torp +19 -100
- package/dist/Menu/MenuRadio.torp +25 -26
- package/dist/Menu/MenuRadioGroup.torp +25 -68
- package/dist/Menu/MenuSeparator.torp +3 -2
- package/dist/Menu/MenuTypes.ts +9 -19
- package/dist/Menu/index.d.ts +45 -51
- package/dist/Menu/index.js +12 -46
- package/dist/MenuBar/MenuBar.torp +31 -83
- package/dist/MenuBar/MenuBarItem.torp +33 -51
- package/dist/MenuBar/MenuBarItemContent.torp +15 -101
- package/dist/MenuBar/MenuBarItemTrigger.torp +20 -55
- package/dist/MenuBar/MenuBarTypes.ts +11 -10
- package/dist/MenuBar/index.d.ts +17 -19
- package/dist/MenuBar/index.js +5 -18
- package/dist/Modal/Modal.torp +22 -47
- package/dist/Modal/ModalContent.torp +21 -44
- package/dist/Modal/ModalOverlay.torp +4 -4
- package/dist/Modal/ModalTrigger.torp +16 -32
- package/dist/Modal/ModalTypes.ts +5 -16
- package/dist/Modal/index.d.ts +17 -29
- package/dist/Modal/index.js +29 -28
- package/dist/Modal/index.js.map +1 -1
- package/dist/Modal/showPrompt.ts +2 -2
- package/dist/NavMenu/NavMenu.torp +22 -111
- package/dist/NavMenu/NavMenuButton.torp +7 -8
- package/dist/NavMenu/NavMenuElement.torp +6 -7
- package/dist/NavMenu/NavMenuGroup.torp +5 -5
- package/dist/NavMenu/NavMenuGroupHeader.torp +5 -8
- package/dist/NavMenu/NavMenuLink.torp +7 -10
- package/dist/NavMenu/NavMenuPopout.torp +15 -60
- package/dist/NavMenu/NavMenuPopoutContent.torp +14 -73
- package/dist/NavMenu/NavMenuPopoutTrigger.torp +17 -99
- package/dist/NavMenu/NavMenuSeparator.torp +3 -7
- package/dist/NavMenu/NavMenuTypes.ts +4 -14
- package/dist/NavMenu/index.d.ts +40 -44
- package/dist/NavMenu/index.js +11 -42
- package/dist/Notification/Notification.torp +12 -24
- package/dist/Notification/NotificationClose.torp +6 -3
- package/dist/Notification/NotificationContainer.torp +3 -7
- package/dist/Notification/NotificationContent.torp +3 -7
- package/dist/Notification/NotificationTypes.ts +1 -1
- package/dist/Notification/index.d.ts +15 -12
- package/dist/Notification/index.js +22 -32
- package/dist/Notification/index.js.map +1 -1
- package/dist/NumberInput/NumberInput.torp +255 -0
- package/dist/NumberInput/index.d.ts +44 -0
- package/dist/NumberInput/index.js +2 -0
- package/dist/Pagination/Pagination.torp +41 -34
- package/dist/Pagination/PaginationItem.torp +50 -13
- package/dist/Pagination/PaginationTypes.ts +3 -6
- package/dist/Pagination/buildPages.ts +9 -5
- package/dist/Pagination/index.d.ts +19 -9
- package/dist/Pagination/index.js +3 -40
- package/dist/Popover/Popover.torp +32 -50
- package/dist/Popover/PopoverContent.torp +27 -76
- package/dist/Popover/PopoverHover.torp +90 -0
- package/dist/Popover/PopoverTrigger.torp +17 -40
- package/dist/Popover/PopoverTypes.ts +4 -17
- package/dist/Popover/index.d.ts +40 -25
- package/dist/Popover/index.js +18 -18
- package/dist/Popover/index.js.map +1 -1
- package/dist/Progress/Progress.torp +88 -0
- package/dist/Progress/index.d.ts +37 -0
- package/dist/Progress/index.js +2 -0
- package/dist/Rating/Rating.torp +225 -0
- package/dist/Rating/index.d.ts +44 -0
- package/dist/Rating/index.js +2 -0
- package/dist/SegmentedControl/SegmentedControl.torp +233 -0
- package/dist/SegmentedControl/SegmentedControlTypes.ts +26 -0
- package/dist/SegmentedControl/SegmentedItem.torp +78 -0
- package/dist/SegmentedControl/index.d.ts +74 -0
- package/dist/SegmentedControl/index.js +3 -0
- package/dist/SelectBox/SelectBox.torp +107 -53
- package/dist/SelectBox/SelectBoxContent.torp +49 -19
- package/dist/SelectBox/SelectBoxTrigger.torp +108 -8
- package/dist/SelectBox/SelectBoxTypes.ts +26 -11
- package/dist/SelectBox/index.d.ts +39 -54
- package/dist/SelectBox/index.js +5 -18
- package/dist/Slider/Slider.torp +245 -0
- package/dist/Slider/index.d.ts +45 -0
- package/dist/Slider/index.js +2 -0
- package/dist/Splitter/Splitter.torp +156 -0
- package/dist/Splitter/SplitterHandle.torp +161 -0
- package/dist/Splitter/SplitterPane.torp +63 -0
- package/dist/Splitter/SplitterTypes.ts +31 -0
- package/dist/Splitter/index.d.ts +103 -0
- package/dist/Splitter/index.js +4 -0
- package/dist/Stepper/Stepper.torp +146 -0
- package/dist/Stepper/StepperMarker.torp +24 -0
- package/dist/Stepper/StepperNext.torp +44 -0
- package/dist/Stepper/StepperPrevious.torp +44 -0
- package/dist/Stepper/StepperStep.torp +90 -0
- package/dist/Stepper/StepperTypes.ts +30 -0
- package/dist/Stepper/index.d.ts +149 -0
- package/dist/Stepper/index.js +6 -0
- package/dist/TabGroup/TabContent.torp +6 -6
- package/dist/TabGroup/TabGroup.torp +97 -113
- package/dist/TabGroup/TabGroupTypes.ts +1 -1
- package/dist/TabGroup/TabHeader.torp +23 -19
- package/dist/TabGroup/TabList.torp +8 -21
- package/dist/TabGroup/TabTrigger.torp +6 -7
- package/dist/TabGroup/index.d.ts +26 -26
- package/dist/TabGroup/index.js +6 -22
- package/dist/TagInput/TagInput.torp +378 -0
- package/dist/TagInput/index.d.ts +48 -0
- package/dist/TagInput/index.js +2 -0
- package/dist/TimePicker/TimePicker.torp +462 -0
- package/dist/TimePicker/index.d.ts +53 -0
- package/dist/TimePicker/index.js +2 -0
- package/dist/ToolBar/ToolBar.torp +29 -110
- package/dist/ToolBar/ToolBarButton.torp +7 -8
- package/dist/ToolBar/ToolBarElement.torp +7 -11
- package/dist/ToolBar/ToolBarPopout.torp +16 -68
- package/dist/ToolBar/ToolBarPopoutContent.torp +15 -73
- package/dist/ToolBar/ToolBarPopoutTrigger.torp +19 -110
- package/dist/ToolBar/ToolBarSeparator.torp +3 -7
- package/dist/ToolBar/ToolBarTypes.ts +7 -14
- package/dist/ToolBar/index.d.ts +30 -32
- package/dist/ToolBar/index.js +8 -30
- package/dist/Tree/Tree.torp +395 -0
- package/dist/Tree/TreeItem.torp +176 -0
- package/dist/Tree/TreeItemChildren.torp +60 -0
- package/dist/Tree/TreeItemContent.torp +46 -0
- package/dist/Tree/TreeItemLabel.torp +94 -0
- package/dist/Tree/TreeItemTrigger.torp +78 -0
- package/dist/Tree/TreeLoadedChildren.torp +122 -0
- package/dist/Tree/TreeTypes.ts +63 -0
- package/dist/Tree/index.d.ts +262 -0
- package/dist/Tree/index.js +7 -0
- package/dist/icons/ChevronDoubleLeft.torp +19 -0
- package/dist/icons/ChevronDoubleRight.torp +19 -0
- package/dist/icons/index.d.ts +61 -1
- package/dist/icons/index.js +17 -58
- package/dist/loader-DEeG5vFY.js +44 -0
- package/dist/loader-DEeG5vFY.js.map +1 -0
- package/dist/motion/index.d.ts +12 -8
- package/dist/motion/index.d.ts.map +1 -0
- package/dist/motion/index.js +70 -88
- package/dist/motion/index.js.map +1 -1
- package/dist/mount/draggable.ts +63 -0
- package/dist/mount/dropTarget.ts +108 -0
- package/dist/mount/hoverTrigger.ts +1 -1
- package/dist/utils/$handle.ts +23 -0
- package/dist/utils/LoadedItems.torp +47 -0
- package/dist/utils/PopoutClickTrigger.torp +99 -0
- package/dist/utils/PopoutTypes.ts +59 -12
- package/dist/utils/SubmenuPopout.torp +89 -0
- package/dist/utils/SubmenuPopoutContent.torp +87 -0
- package/dist/utils/SubmenuPopoutTrigger.torp +160 -0
- package/dist/utils/chartColors.ts +13 -13
- package/dist/utils/chartLayout.ts +143 -0
- package/dist/utils/colorUtils.ts +103 -0
- package/dist/utils/createItemGroup.ts +152 -0
- package/dist/utils/dateUtils.ts +8 -7
- package/dist/utils/documentEvents.ts +4 -4
- package/dist/utils/dragState.ts +86 -0
- package/dist/utils/focusGroup.ts +204 -0
- package/dist/utils/focusItem.ts +44 -0
- package/dist/utils/formField.ts +70 -0
- package/dist/utils/hoverOpen.ts +50 -0
- package/dist/utils/hoverReveal.ts +194 -0
- package/dist/utils/loader.ts +113 -0
- package/dist/utils/maskUtils.ts +98 -0
- package/dist/utils/popoutContent.ts +137 -0
- package/dist/utils/reorderList.ts +52 -0
- package/package.json +97 -22
- package/dist/Accordion/index.js.map +0 -1
- package/dist/Breadcrumb/index.js.map +0 -1
- package/dist/Calendar/index.js.map +0 -1
- package/dist/Charts/index.js.map +0 -1
- package/dist/Contextual/index.js.map +0 -1
- package/dist/Dialog/index.js.map +0 -1
- package/dist/Disclosure/index.js.map +0 -1
- package/dist/Drawer/index.js.map +0 -1
- package/dist/Form/index.js.map +0 -1
- package/dist/ListBox/index.js.map +0 -1
- package/dist/Menu/index.js.map +0 -1
- package/dist/MenuBar/index.js.map +0 -1
- package/dist/NavMenu/index.js.map +0 -1
- package/dist/Pagination/index.js.map +0 -1
- package/dist/SelectBox/SelectBoxInput.torp +0 -95
- package/dist/SelectBox/index.js.map +0 -1
- package/dist/TabGroup/index.js.map +0 -1
- package/dist/ToolBar/index.js.map +0 -1
- package/dist/icons/index.js.map +0 -1
- package/dist/index.d.ts +0 -19
- package/dist/metafile-esm.json +0 -1
- package/dist/motion/fade.ts +0 -16
- package/dist/motion/grow.ts +0 -23
- package/dist/motion/measure.ts +0 -28
- package/dist/motion/slide.ts +0 -45
- package/dist/mount/index.d.ts +0 -2
- package/dist/utils/index.d.ts +0 -2
|
@@ -1,17 +1,17 @@
|
|
|
1
1
|
import type { ClassValue, StyleValue } from "@torpor/view";
|
|
2
|
-
import {
|
|
2
|
+
import { type NavMenuContext, NavMenuContextName } from "./NavMenuTypes";
|
|
3
3
|
|
|
4
4
|
interface NavMenuElementProps {
|
|
5
5
|
/** An ID for the root element */
|
|
6
6
|
id?: string;
|
|
7
7
|
/** Classes for the root element */
|
|
8
|
-
class?: ClassValue
|
|
8
|
+
class?: ClassValue;
|
|
9
9
|
/** Styles for the root element */
|
|
10
|
-
style?: StyleValue
|
|
10
|
+
style?: StyleValue;
|
|
11
11
|
/** Whether this button is disabled */
|
|
12
|
-
disabled?: boolean
|
|
12
|
+
disabled?: boolean;
|
|
13
13
|
/** An element that can be focused via keyboard navigation */
|
|
14
|
-
element?: HTMLElement
|
|
14
|
+
element?: HTMLElement;
|
|
15
15
|
}
|
|
16
16
|
|
|
17
17
|
/**
|
|
@@ -27,7 +27,7 @@ export default function NavMenuElement($props: NavMenuElementProps | undefined)
|
|
|
27
27
|
const { registerItem, handleItemKey, handleItemFocus } = menuContext;
|
|
28
28
|
|
|
29
29
|
// Register this item with the parent NavMenu and store the index
|
|
30
|
-
const { index } = registerItem(setFocused);
|
|
30
|
+
const { index } = registerItem({ setFocused, disabled: $props?.disabled });
|
|
31
31
|
|
|
32
32
|
function setFocused() {
|
|
33
33
|
if ($props?.element) {
|
|
@@ -43,7 +43,6 @@ export default function NavMenuElement($props: NavMenuElementProps | undefined)
|
|
|
43
43
|
type="div"
|
|
44
44
|
role="menuitem"
|
|
45
45
|
aria-disabled={$props?.disabled ? "true" : undefined}
|
|
46
|
-
data-disabled={$props?.disabled ? "true" : undefined}
|
|
47
46
|
onkeydown
|
|
48
47
|
onkeydown={handleItemKey}
|
|
49
48
|
onclick
|
|
@@ -1,15 +1,15 @@
|
|
|
1
1
|
import type { ClassValue, StyleValue } from "@torpor/view";
|
|
2
|
-
import {
|
|
2
|
+
import { type NavMenuGroupContext, NavMenuGroupContextName } from "./NavMenuTypes";
|
|
3
3
|
|
|
4
4
|
interface NavMenuGroupProps {
|
|
5
5
|
/** An ID for the root element */
|
|
6
6
|
id?: string;
|
|
7
7
|
/** Classes for the root element */
|
|
8
|
-
class?: ClassValue
|
|
8
|
+
class?: ClassValue;
|
|
9
9
|
/** Styles for the root element */
|
|
10
|
-
style?: StyleValue
|
|
10
|
+
style?: StyleValue;
|
|
11
11
|
/** An ARIA label for describing the group to screen readers */
|
|
12
|
-
ariaLabel?: string
|
|
12
|
+
ariaLabel?: string;
|
|
13
13
|
}
|
|
14
14
|
|
|
15
15
|
/**
|
|
@@ -17,7 +17,7 @@ interface NavMenuGroupProps {
|
|
|
17
17
|
*/
|
|
18
18
|
export default function NavMenuGroup($props: NavMenuGroupProps | undefined) {
|
|
19
19
|
let $state = $watch({
|
|
20
|
-
headerId: ""
|
|
20
|
+
headerId: "",
|
|
21
21
|
});
|
|
22
22
|
|
|
23
23
|
// Set the context to pass down to items
|
|
@@ -1,16 +1,14 @@
|
|
|
1
1
|
import type { ClassValue, StyleValue } from "@torpor/view";
|
|
2
2
|
import getId from "../utils/getId";
|
|
3
|
-
import {
|
|
3
|
+
import { type NavMenuGroupContext, NavMenuGroupContextName } from "./NavMenuTypes";
|
|
4
4
|
|
|
5
5
|
interface NavMenuGroupHeaderProps {
|
|
6
6
|
/** An ID for the root element */
|
|
7
7
|
id?: string;
|
|
8
8
|
/** Classes for the root element */
|
|
9
|
-
class?: ClassValue
|
|
9
|
+
class?: ClassValue;
|
|
10
10
|
/** Styles for the root element */
|
|
11
|
-
style?: StyleValue
|
|
12
|
-
/** The type of HTML header to use */
|
|
13
|
-
as?: "h1" | "h2" | "h3" | "h4" | "h5" | "h6",
|
|
11
|
+
style?: StyleValue;
|
|
14
12
|
}
|
|
15
13
|
|
|
16
14
|
/**
|
|
@@ -29,13 +27,12 @@ export default function NavMenuGroupHeader($props: NavMenuGroupHeaderProps | und
|
|
|
29
27
|
$state.headerId = $props?.id ?? defaultId;
|
|
30
28
|
|
|
31
29
|
@render {
|
|
32
|
-
|
|
33
|
-
<h4
|
|
30
|
+
<div
|
|
34
31
|
id={$props?.id ?? defaultId}
|
|
35
32
|
class={["torp-nav-menu-group-header", $props?.class]}
|
|
36
33
|
{$props?.style}
|
|
37
34
|
>
|
|
38
35
|
<slot />
|
|
39
|
-
</
|
|
36
|
+
</div>
|
|
40
37
|
}
|
|
41
38
|
}
|
|
@@ -1,19 +1,19 @@
|
|
|
1
1
|
import type { ClassValue, StyleValue } from "@torpor/view";
|
|
2
|
-
import {
|
|
2
|
+
import { type NavMenuContext, NavMenuContextName } from "./NavMenuTypes";
|
|
3
3
|
|
|
4
4
|
interface NavMenuLinkProps {
|
|
5
5
|
/** An ID for the root element */
|
|
6
6
|
id?: string;
|
|
7
7
|
/** Classes for the root element */
|
|
8
|
-
class?: ClassValue
|
|
8
|
+
class?: ClassValue;
|
|
9
9
|
/** Styles for the root element */
|
|
10
|
-
style?: StyleValue
|
|
10
|
+
style?: StyleValue;
|
|
11
11
|
/** The URL for the menu link */
|
|
12
|
-
href: string
|
|
12
|
+
href: string;
|
|
13
13
|
/** Whether the menu link should open in a new tab/window */
|
|
14
|
-
newWindow?: boolean
|
|
14
|
+
newWindow?: boolean;
|
|
15
15
|
/** Whether this link is disabled */
|
|
16
|
-
disabled?: boolean
|
|
16
|
+
disabled?: boolean;
|
|
17
17
|
}
|
|
18
18
|
|
|
19
19
|
/**
|
|
@@ -31,7 +31,7 @@ export default function NavMenuLink($props: NavMenuLinkProps | undefined) {
|
|
|
31
31
|
const { registerItem, handleItemKey, handleItemFocus } = menuContext;
|
|
32
32
|
|
|
33
33
|
// Register this item with the parent NavMenu and store the index
|
|
34
|
-
const { index } = registerItem(setFocused);
|
|
34
|
+
const { index } = registerItem({ setFocused, disabled: $props?.disabled });
|
|
35
35
|
|
|
36
36
|
function setFocused() {
|
|
37
37
|
link.focus();
|
|
@@ -47,10 +47,7 @@ export default function NavMenuLink($props: NavMenuLinkProps | undefined) {
|
|
|
47
47
|
target={$props?.newWindow ? "_blank" : undefined}
|
|
48
48
|
role="menuitem"
|
|
49
49
|
aria-disabled={$props?.disabled ? "true" : undefined}
|
|
50
|
-
data-disabled={$props?.disabled ? "true" : undefined}
|
|
51
|
-
onkeydown
|
|
52
50
|
onkeydown={handleItemKey}
|
|
53
|
-
onclick
|
|
54
51
|
onfocus={() => handleItemFocus(index)}
|
|
55
52
|
&ref={link}
|
|
56
53
|
>
|
|
@@ -1,25 +1,23 @@
|
|
|
1
|
-
import type { ClassValue, StyleValue } from "@torpor/view";
|
|
2
|
-
import
|
|
1
|
+
import type { Bindable, ClassValue, StyleValue } from "@torpor/view";
|
|
2
|
+
import SubmenuPopout from "../utils/SubmenuPopout.torp";
|
|
3
3
|
|
|
4
4
|
interface NavMenuPopoutProps {
|
|
5
5
|
/** An ID for the root element */
|
|
6
6
|
id?: string;
|
|
7
7
|
/** Classes for the root element */
|
|
8
|
-
class?: ClassValue
|
|
8
|
+
class?: ClassValue;
|
|
9
9
|
/** Styles for the root element */
|
|
10
|
-
style?: StyleValue
|
|
10
|
+
style?: StyleValue;
|
|
11
11
|
/** Whether the popout is visible */
|
|
12
|
-
visible
|
|
13
|
-
/** Raised when the popout is opened or closed */
|
|
14
|
-
ontoggle?: (open: boolean) => void,
|
|
12
|
+
visible: Bindable<boolean | undefined>;
|
|
15
13
|
/** Raised when the popout has opened */
|
|
16
|
-
onopen?: () => void
|
|
14
|
+
onopen?: () => void;
|
|
17
15
|
/** Raised when the popout has closed */
|
|
18
|
-
onclose?: (result: any) => void
|
|
16
|
+
onclose?: (result: any) => void;
|
|
19
17
|
}
|
|
20
18
|
|
|
21
19
|
/**
|
|
22
|
-
* A popout that is attached to a menu button and can be used to show a submenu.
|
|
20
|
+
* A popout that is attached to a nav menu button and can be used to show a submenu.
|
|
23
21
|
*
|
|
24
22
|
* The structure of a NavMenuPopout is:
|
|
25
23
|
*
|
|
@@ -31,59 +29,16 @@ interface NavMenuPopoutProps {
|
|
|
31
29
|
* ```
|
|
32
30
|
*/
|
|
33
31
|
export default function NavMenuPopout($props: NavMenuPopoutProps | undefined) {
|
|
34
|
-
let $state = $watch({
|
|
35
|
-
visible: false
|
|
36
|
-
});
|
|
37
|
-
|
|
38
|
-
// Sync props and state
|
|
39
|
-
$run(() => {
|
|
40
|
-
$state.visible = $props?.visible ?? false;
|
|
41
|
-
});
|
|
42
|
-
$run(() => {
|
|
43
|
-
if ($props !== undefined) {
|
|
44
|
-
$props.visible = $state.visible;
|
|
45
|
-
}
|
|
46
|
-
});
|
|
47
|
-
|
|
48
|
-
let result: any;
|
|
49
|
-
|
|
50
|
-
// Set the context to pass down to items
|
|
51
|
-
let context: NavMenuPopoutContext = {
|
|
52
|
-
state: $state,
|
|
53
|
-
};
|
|
54
|
-
$context[NavMenuPopoutContextName] = context;
|
|
55
|
-
|
|
56
|
-
// Dispatch the toggle event when the popout is opened or closed
|
|
57
|
-
let firstToggle = true;
|
|
58
|
-
$run(() => {
|
|
59
|
-
const ontoggle = $props?.ontoggle;
|
|
60
|
-
const onopen = $props?.onopen;
|
|
61
|
-
const onclose = $props?.onclose;
|
|
62
|
-
const visible = $state.visible;
|
|
63
|
-
if (firstToggle) {
|
|
64
|
-
firstToggle = false;
|
|
65
|
-
} else {
|
|
66
|
-
if (ontoggle) ontoggle(visible);
|
|
67
|
-
if (visible) {
|
|
68
|
-
if (onopen) onopen()
|
|
69
|
-
} else {
|
|
70
|
-
if (onclose) onclose(result);
|
|
71
|
-
}
|
|
72
|
-
}
|
|
73
|
-
});
|
|
74
|
-
|
|
75
|
-
function handleMouseLeave() {
|
|
76
|
-
$state.visible = false;
|
|
77
|
-
}
|
|
78
|
-
|
|
79
32
|
@render {
|
|
80
|
-
<
|
|
81
|
-
{$props?.id}
|
|
33
|
+
<SubmenuPopout
|
|
34
|
+
id={$props?.id}
|
|
82
35
|
class={["torp-nav-menu-popout", $props?.class]}
|
|
83
|
-
{$props?.style}
|
|
84
|
-
|
|
36
|
+
style={$props?.style}
|
|
37
|
+
visible={$props?.visible}
|
|
38
|
+
onopen={$props?.onopen}
|
|
39
|
+
onclose={$props?.onclose}
|
|
85
40
|
>
|
|
86
41
|
<slot />
|
|
87
|
-
</
|
|
42
|
+
</SubmenuPopout>
|
|
88
43
|
}
|
|
89
44
|
}
|
|
@@ -1,19 +1,17 @@
|
|
|
1
1
|
import type { ClassValue, StyleValue } from "@torpor/view";
|
|
2
|
-
import
|
|
3
|
-
import setPopoverPosition from "../utils/setPopoverPosition";
|
|
4
|
-
import { NavMenuPopoutContextName, type NavMenuPopoutContext } from "./NavMenuTypes";
|
|
2
|
+
import SubmenuPopoutContent from "../utils/SubmenuPopoutContent.torp";
|
|
5
3
|
|
|
6
4
|
interface NavMenuPopoutContentProps {
|
|
7
5
|
/** An ID for the root element */
|
|
8
6
|
id?: string;
|
|
9
7
|
/** Classes for the root element */
|
|
10
|
-
class?: ClassValue
|
|
8
|
+
class?: ClassValue;
|
|
11
9
|
/** Styles for the root element */
|
|
12
|
-
style?: StyleValue
|
|
10
|
+
style?: StyleValue;
|
|
13
11
|
/** Where the popout will be shown, relative to the popout button */
|
|
14
|
-
side?: "top" | "right" | "bottom" | "left"
|
|
12
|
+
side?: "top" | "right" | "bottom" | "left";
|
|
15
13
|
/** How the popout will be aligned, relative to the popout button */
|
|
16
|
-
alignment?: "start" | "center" | "end"
|
|
14
|
+
alignment?: "start" | "center" | "end";
|
|
17
15
|
}
|
|
18
16
|
|
|
19
17
|
/**
|
|
@@ -21,72 +19,15 @@ interface NavMenuPopoutContentProps {
|
|
|
21
19
|
*
|
|
22
20
|
*/
|
|
23
21
|
export default function NavMenuPopoutContent($props: NavMenuPopoutContentProps | undefined) {
|
|
24
|
-
let div: HTMLDivElement;
|
|
25
|
-
let shown = false;
|
|
26
|
-
|
|
27
|
-
// Get stuff out of the NavMenuPopoutContext
|
|
28
|
-
const context = $context[NavMenuPopoutContextName] as NavMenuPopoutContext;
|
|
29
|
-
if (!context) {
|
|
30
|
-
throw new Error("NavMenuPopoutContent must be contained within a NavMenuPopout");
|
|
31
|
-
}
|
|
32
|
-
let $state = context.state;
|
|
33
|
-
|
|
34
|
-
$run(() => {
|
|
35
|
-
if (!$state.visible) {
|
|
36
|
-
hide();
|
|
37
|
-
}
|
|
38
|
-
});
|
|
39
|
-
|
|
40
|
-
function show() {
|
|
41
|
-
shown = true;
|
|
42
|
-
|
|
43
|
-
// Set the position and listen for window resize and scroll to reset the position
|
|
44
|
-
setPosition();
|
|
45
|
-
const anchorElement = context.anchorElement!
|
|
46
|
-
const scrollParent = getScrollParent(anchorElement)
|
|
47
|
-
scrollParent.addEventListener("resize", setPosition);
|
|
48
|
-
scrollParent.addEventListener("scroll", setPosition);
|
|
49
|
-
if (context.focusFirstElement) {
|
|
50
|
-
context.focusFirstElement();
|
|
51
|
-
}
|
|
52
|
-
}
|
|
53
|
-
|
|
54
|
-
function hide() {
|
|
55
|
-
if (!shown) return;
|
|
56
|
-
|
|
57
|
-
// Stop listening for window resize and focus the anchor element per WAI guidelines
|
|
58
|
-
const anchorElement = context.anchorElement!
|
|
59
|
-
const scrollParent = getScrollParent(anchorElement)
|
|
60
|
-
scrollParent.removeEventListener("resize", setPosition);
|
|
61
|
-
scrollParent.removeEventListener("scroll", setPosition);
|
|
62
|
-
if (anchorElement.focus) {
|
|
63
|
-
anchorElement.focus();
|
|
64
|
-
}
|
|
65
|
-
}
|
|
66
|
-
|
|
67
|
-
function setPosition() {
|
|
68
|
-
if (!context.anchorElement) {
|
|
69
|
-
throw new Error("NavMenuPopoutContent must have an anchor element");
|
|
70
|
-
}
|
|
71
|
-
|
|
72
|
-
if (div) {
|
|
73
|
-
let side = $props?.side ?? "bottom";
|
|
74
|
-
let alignment = $props?.alignment ?? "start";
|
|
75
|
-
setPopoverPosition(context.anchorElement, div, side, alignment);
|
|
76
|
-
}
|
|
77
|
-
}
|
|
78
|
-
|
|
79
22
|
@render {
|
|
80
|
-
|
|
81
|
-
|
|
82
|
-
|
|
83
|
-
|
|
84
|
-
|
|
85
|
-
|
|
86
|
-
|
|
87
|
-
|
|
88
|
-
|
|
89
|
-
</div>
|
|
90
|
-
}
|
|
23
|
+
<SubmenuPopoutContent
|
|
24
|
+
id={$props?.id}
|
|
25
|
+
class={["torp-nav-menu-popout-content", $props?.class]}
|
|
26
|
+
style={$props?.style}
|
|
27
|
+
side={$props?.side}
|
|
28
|
+
alignment={$props?.alignment}
|
|
29
|
+
>
|
|
30
|
+
<slot />
|
|
31
|
+
</SubmenuPopoutContent>
|
|
91
32
|
}
|
|
92
33
|
}
|
|
@@ -1,22 +1,18 @@
|
|
|
1
1
|
import type { ClassValue, StyleValue } from "@torpor/view";
|
|
2
|
-
import
|
|
3
|
-
|
|
4
|
-
NavMenuPopoutContextName,
|
|
5
|
-
type NavMenuContext,
|
|
6
|
-
type NavMenuPopoutContext,
|
|
7
|
-
} from "./NavMenuTypes";
|
|
2
|
+
import SubmenuPopoutTrigger from "../utils/SubmenuPopoutTrigger.torp";
|
|
3
|
+
import { type NavMenuContext, NavMenuContextName } from "./NavMenuTypes";
|
|
8
4
|
|
|
9
5
|
interface NavMenuPopoutTriggerProps {
|
|
10
6
|
/** An ID for the root element */
|
|
11
7
|
id?: string;
|
|
12
8
|
/** Classes for the root element */
|
|
13
|
-
class?: ClassValue
|
|
9
|
+
class?: ClassValue;
|
|
14
10
|
/** Styles for the root element */
|
|
15
|
-
style?: StyleValue
|
|
11
|
+
style?: StyleValue;
|
|
16
12
|
/** The delay before showing the popout, in milliseconds */
|
|
17
|
-
hoverDelay?: number
|
|
13
|
+
hoverDelay?: number;
|
|
18
14
|
/** Whether this button is disabled */
|
|
19
|
-
disabled?: boolean
|
|
15
|
+
disabled?: boolean;
|
|
20
16
|
}
|
|
21
17
|
|
|
22
18
|
/**
|
|
@@ -24,11 +20,6 @@ interface NavMenuPopoutTriggerProps {
|
|
|
24
20
|
*
|
|
25
21
|
*/
|
|
26
22
|
export default function NavMenuPopoutTrigger($props: NavMenuPopoutTriggerProps | undefined) {
|
|
27
|
-
let defaultHoverDelay = 500;
|
|
28
|
-
|
|
29
|
-
let button: HTMLButtonElement;
|
|
30
|
-
let interval: NodeJS.Timeout | undefined;
|
|
31
|
-
|
|
32
23
|
// Get stuff out of the NavMenuContext
|
|
33
24
|
const menuContext = $context[NavMenuContextName] as NavMenuContext;
|
|
34
25
|
if (!menuContext) {
|
|
@@ -36,94 +27,21 @@ export default function NavMenuPopoutTrigger($props: NavMenuPopoutTriggerProps |
|
|
|
36
27
|
}
|
|
37
28
|
const { registerItem, handleItemKey, handleItemFocus } = menuContext;
|
|
38
29
|
|
|
39
|
-
// Get stuff out of the NavMenuPopoutContext
|
|
40
|
-
const popoutContext = $context[NavMenuPopoutContextName] as NavMenuPopoutContext;
|
|
41
|
-
if (!popoutContext) {
|
|
42
|
-
throw new Error("NavMenuPopoutTrigger must be contained within a NavMenuPopout");
|
|
43
|
-
}
|
|
44
|
-
let $state = popoutContext.state;
|
|
45
|
-
|
|
46
|
-
// Register this item with the parent NavMenu and store the index
|
|
47
|
-
const { index } = registerItem(setFocused);
|
|
48
|
-
|
|
49
|
-
// TODO: $mount should be run AFTER the button has been set
|
|
50
|
-
//$mount(() => {
|
|
51
|
-
// // Set the anchor element to the button when it exists
|
|
52
|
-
// popoutContext.anchorElement = button;
|
|
53
|
-
//});
|
|
54
|
-
|
|
55
|
-
function setFocused() {
|
|
56
|
-
button.focus();
|
|
57
|
-
}
|
|
58
|
-
|
|
59
|
-
function handleClick() {
|
|
60
|
-
$state.visible = true;
|
|
61
|
-
}
|
|
62
|
-
|
|
63
|
-
function handlePopoutKey(e: KeyboardEvent) {
|
|
64
|
-
switch (e.key) {
|
|
65
|
-
case "Right":
|
|
66
|
-
case "ArrowRight":
|
|
67
|
-
// TODO: This should be based on what side the menu shows on
|
|
68
|
-
e.preventDefault();
|
|
69
|
-
$state.visible = true;
|
|
70
|
-
break;
|
|
71
|
-
default:
|
|
72
|
-
handleItemKey(e);
|
|
73
|
-
}
|
|
74
|
-
}
|
|
75
|
-
|
|
76
|
-
function handleMouseEnter() {
|
|
77
|
-
if ($props?.disabled) return;
|
|
78
|
-
|
|
79
|
-
// Handle the hover after a delay
|
|
80
|
-
if (!interval) {
|
|
81
|
-
interval = setTimeout(() => $state.visible = true, $props?.hoverDelay ?? defaultHoverDelay);
|
|
82
|
-
}
|
|
83
|
-
}
|
|
84
|
-
|
|
85
|
-
function handleMouseLeave() {
|
|
86
|
-
if ($props?.disabled) return;
|
|
87
|
-
|
|
88
|
-
// Prevent short hovers or touches from firing the event
|
|
89
|
-
if (interval) {
|
|
90
|
-
clearTimeout(interval);
|
|
91
|
-
interval = undefined;
|
|
92
|
-
}
|
|
93
|
-
}
|
|
94
|
-
|
|
95
|
-
function handleMouseMove() {
|
|
96
|
-
if ($props?.disabled) return;
|
|
97
|
-
|
|
98
|
-
// Reset the interval on mouse move
|
|
99
|
-
if (interval) {
|
|
100
|
-
clearTimeout(interval);
|
|
101
|
-
interval = setTimeout(() => $state.visible = true, $props?.hoverDelay ?? defaultHoverDelay);
|
|
102
|
-
}
|
|
103
|
-
}
|
|
104
|
-
|
|
105
30
|
@render {
|
|
106
|
-
<
|
|
107
|
-
{$props?.id}
|
|
31
|
+
<SubmenuPopoutTrigger
|
|
32
|
+
id={$props?.id}
|
|
108
33
|
class={["torp-nav-menu-popout-button", $props?.class]}
|
|
109
|
-
{$props?.style}
|
|
110
|
-
|
|
111
|
-
{$props?.disabled}
|
|
34
|
+
style={$props?.style}
|
|
35
|
+
hoverDelay={$props?.hoverDelay}
|
|
36
|
+
disabled={$props?.disabled}
|
|
112
37
|
role="menuitem"
|
|
113
|
-
|
|
114
|
-
|
|
115
|
-
|
|
116
|
-
|
|
117
|
-
|
|
118
|
-
onclick={handleClick}
|
|
119
|
-
onfocus={() => handleItemFocus(index)}
|
|
120
|
-
onmouseenter={handleMouseEnter}
|
|
121
|
-
onmouseleave={handleMouseLeave}
|
|
122
|
-
onmousemove={handleMouseMove}
|
|
123
|
-
&ref={button}
|
|
124
|
-
onmount={(el) => popoutContext.anchorElement = el }
|
|
38
|
+
tabindex="-1"
|
|
39
|
+
openKey="ArrowRight"
|
|
40
|
+
registerItem={registerItem}
|
|
41
|
+
handleItemKey={handleItemKey}
|
|
42
|
+
handleItemFocus={handleItemFocus}
|
|
125
43
|
>
|
|
126
44
|
<slot />
|
|
127
|
-
</
|
|
45
|
+
</SubmenuPopoutTrigger>
|
|
128
46
|
}
|
|
129
47
|
}
|
|
@@ -4,9 +4,9 @@ interface NavMenuSeparatorProps {
|
|
|
4
4
|
/** An ID for the root element */
|
|
5
5
|
id?: string;
|
|
6
6
|
/** Classes for the root element */
|
|
7
|
-
class?: ClassValue
|
|
7
|
+
class?: ClassValue;
|
|
8
8
|
/** Styles for the root element */
|
|
9
|
-
style?: StyleValue
|
|
9
|
+
style?: StyleValue;
|
|
10
10
|
}
|
|
11
11
|
|
|
12
12
|
/**
|
|
@@ -14,11 +14,7 @@ interface NavMenuSeparatorProps {
|
|
|
14
14
|
*/
|
|
15
15
|
export default function NavMenuSeparator($props: NavMenuSeparatorProps | undefined) {
|
|
16
16
|
@render {
|
|
17
|
-
<div
|
|
18
|
-
{$props?.id}
|
|
19
|
-
class={["torp-nav-menu-separator", $props?.class]}
|
|
20
|
-
role="separator"
|
|
21
|
-
>
|
|
17
|
+
<div {$props?.id} class={["torp-nav-menu-separator", $props?.class]} role="separator">
|
|
22
18
|
<slot />
|
|
23
19
|
</div>
|
|
24
20
|
}
|
|
@@ -1,5 +1,6 @@
|
|
|
1
|
+
import type { SubmenuItemState } from "../utils/PopoutTypes";
|
|
2
|
+
|
|
1
3
|
export const NavMenuContextName: unique symbol = Symbol.for("torp.NavMenu");
|
|
2
|
-
export const NavMenuPopoutContextName: unique symbol = Symbol.for("torp.NavMenuPopout");
|
|
3
4
|
export const NavMenuGroupContextName: unique symbol = Symbol.for("torp.NavMenuGroup");
|
|
4
5
|
|
|
5
6
|
export interface NavMenuContext {
|
|
@@ -10,16 +11,7 @@ export interface NavMenuContext {
|
|
|
10
11
|
handleItemKey: (e: KeyboardEvent) => void;
|
|
11
12
|
|
|
12
13
|
/** Called from each NavMenuLink or NavMenuButton to register itself with this NavMenu */
|
|
13
|
-
registerItem: (
|
|
14
|
-
}
|
|
15
|
-
|
|
16
|
-
export interface NavMenuPopoutContext {
|
|
17
|
-
state: {
|
|
18
|
-
visible: boolean;
|
|
19
|
-
};
|
|
20
|
-
anchorElement?: HTMLElement;
|
|
21
|
-
focusFirstElement?: () => void;
|
|
22
|
-
focusLastElement?: () => void;
|
|
14
|
+
registerItem: (item: ItemState) => { index: number };
|
|
23
15
|
}
|
|
24
16
|
|
|
25
17
|
export interface NavMenuGroupContext {
|
|
@@ -28,6 +20,4 @@ export interface NavMenuGroupContext {
|
|
|
28
20
|
};
|
|
29
21
|
}
|
|
30
22
|
|
|
31
|
-
export
|
|
32
|
-
setFocused: () => void;
|
|
33
|
-
}
|
|
23
|
+
export type ItemState = SubmenuItemState;
|