@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,100 +1,57 @@
|
|
|
1
|
-
import type { ClassValue, StyleValue } from "@torpor/view";
|
|
1
|
+
import type { Bindable, ClassValue, StyleValue } from "@torpor/view";
|
|
2
|
+
import $handle from "../utils/$handle";
|
|
3
|
+
import { createItemGroup } from "../utils/createItemGroup";
|
|
2
4
|
import {
|
|
3
5
|
type MenuRadioGroupContext,
|
|
4
6
|
MenuRadioGroupContextName,
|
|
5
|
-
type RadioGroupItemState
|
|
7
|
+
type RadioGroupItemState,
|
|
6
8
|
} from "./MenuTypes";
|
|
7
9
|
|
|
8
10
|
interface MenuRadioGroupProps {
|
|
9
11
|
/** An ID for the root element */
|
|
10
12
|
id?: string;
|
|
11
13
|
/** Classes for the root element */
|
|
12
|
-
class?: ClassValue
|
|
14
|
+
class?: ClassValue;
|
|
13
15
|
/** Styles for the root element */
|
|
14
|
-
style?: StyleValue
|
|
16
|
+
style?: StyleValue;
|
|
15
17
|
/** An ARIA label for describing the menu to screen readers */
|
|
16
|
-
ariaLabel?: string
|
|
18
|
+
ariaLabel?: string;
|
|
17
19
|
/** The value of the checked MenuRadio */
|
|
18
|
-
value
|
|
20
|
+
value: Bindable<string | undefined>;
|
|
19
21
|
/** Raised when the checked item has changed */
|
|
20
|
-
onchange?: (value: any) => void
|
|
22
|
+
onchange?: (value: any) => void;
|
|
21
23
|
}
|
|
22
24
|
|
|
23
25
|
/**
|
|
24
26
|
* A container for a logical group of menu RadioGroup items.
|
|
25
27
|
*/
|
|
26
28
|
export default function MenuRadioGroup($props: MenuRadioGroupProps | undefined) {
|
|
27
|
-
// A collection containing the state and some functions for each item
|
|
28
|
-
let itemStates: RadioGroupItemState[] = [];
|
|
29
|
-
|
|
30
29
|
let $state = $watch({
|
|
31
|
-
value: $props?.value
|
|
30
|
+
value: $props?.value,
|
|
31
|
+
});
|
|
32
|
+
|
|
33
|
+
$bind($state, $props, "value");
|
|
34
|
+
|
|
35
|
+
const group = createItemGroup<RadioGroupItemState>({
|
|
36
|
+
state: $state,
|
|
37
|
+
type: "single",
|
|
38
|
+
selectedProperty: "checked",
|
|
39
|
+
allowDeselect: false,
|
|
32
40
|
});
|
|
33
41
|
|
|
34
|
-
|
|
35
|
-
|
|
36
|
-
|
|
37
|
-
|
|
42
|
+
// Dispatch the change event when the value changes
|
|
43
|
+
$handle((first) => {
|
|
44
|
+
const value = $state.value;
|
|
45
|
+
if (!first) $props?.onchange?.(value);
|
|
38
46
|
});
|
|
39
47
|
|
|
40
48
|
// Set the context to pass down to items
|
|
41
49
|
let context: MenuRadioGroupContext = {
|
|
42
|
-
registerItemInGroup,
|
|
43
|
-
toggleItem
|
|
50
|
+
registerItemInGroup: group.registerItem,
|
|
51
|
+
toggleItem: group.toggleItem,
|
|
44
52
|
};
|
|
45
53
|
$context[MenuRadioGroupContextName] = context;
|
|
46
54
|
|
|
47
|
-
$mount(() => {
|
|
48
|
-
// Set the initial checked item
|
|
49
|
-
setValue($props?.value);
|
|
50
|
-
});
|
|
51
|
-
|
|
52
|
-
function registerItemInGroup(itemValue: string, setChecked: (value: boolean) => void) {
|
|
53
|
-
// Add the item's state to the array
|
|
54
|
-
const newItemState: RadioGroupItemState = {
|
|
55
|
-
value: itemValue,
|
|
56
|
-
checked: false,
|
|
57
|
-
setChecked
|
|
58
|
-
};
|
|
59
|
-
itemStates.push(newItemState);
|
|
60
|
-
itemStates = itemStates;
|
|
61
|
-
}
|
|
62
|
-
|
|
63
|
-
function setValue(newValue?: string) {
|
|
64
|
-
// No point doing this if there aren't any items yet (e.g. from the initial setValue() call)
|
|
65
|
-
if (!itemStates.length) {
|
|
66
|
-
return;
|
|
67
|
-
}
|
|
68
|
-
|
|
69
|
-
// Ensure the value passed in was a string (in case e.g. the user has set values to ints)
|
|
70
|
-
newValue = newValue?.toString();
|
|
71
|
-
for (let item of itemStates) {
|
|
72
|
-
item.checked = item.value === newValue;
|
|
73
|
-
item.setChecked(item.checked);
|
|
74
|
-
}
|
|
75
|
-
|
|
76
|
-
// Set the value
|
|
77
|
-
if ($state.value !== newValue) {
|
|
78
|
-
$state.value = newValue;
|
|
79
|
-
|
|
80
|
-
if ($props?.onchange) {
|
|
81
|
-
$props?.onchange($props?.value);
|
|
82
|
-
}
|
|
83
|
-
}
|
|
84
|
-
}
|
|
85
|
-
|
|
86
|
-
function toggleItem(toggleValue: string) {
|
|
87
|
-
let newValue = "";
|
|
88
|
-
for (let item of itemStates) {
|
|
89
|
-
const checked = item.value === toggleValue;
|
|
90
|
-
item.setChecked(checked);
|
|
91
|
-
if (checked) {
|
|
92
|
-
newValue = item.value;
|
|
93
|
-
}
|
|
94
|
-
}
|
|
95
|
-
$state.value = newValue;
|
|
96
|
-
}
|
|
97
|
-
|
|
98
55
|
@render {
|
|
99
56
|
<div
|
|
100
57
|
{$props?.id}
|
|
@@ -4,9 +4,9 @@ interface MenuSeparatorProps {
|
|
|
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
|
/**
|
|
@@ -19,6 +19,7 @@ export default function MenuSeparator($props: MenuSeparatorProps | undefined) {
|
|
|
19
19
|
class={["torp-menu-separator", $props?.class]}
|
|
20
20
|
{$props?.style}
|
|
21
21
|
role="separator"
|
|
22
|
+
aria-orientation="vertical"
|
|
22
23
|
>
|
|
23
24
|
<slot />
|
|
24
25
|
</div>
|
package/dist/Menu/MenuTypes.ts
CHANGED
|
@@ -1,11 +1,10 @@
|
|
|
1
|
+
import type { SubmenuItemState } from "../utils/PopoutTypes";
|
|
2
|
+
|
|
1
3
|
export const MenuContextName: unique symbol = Symbol.for("torp.Menu");
|
|
2
4
|
export const MenuButtonContextName: unique symbol = Symbol.for("torp.MenuButton");
|
|
3
5
|
export const MenuRadioGroupContextName: unique symbol = Symbol.for("torp.MenuRadioGroup");
|
|
4
|
-
export const MenuPopoutContextName: unique symbol = Symbol.for("torp.MenuPopout");
|
|
5
6
|
|
|
6
7
|
export interface MenuContext {
|
|
7
|
-
setVisible: (value: boolean, result?: any) => void;
|
|
8
|
-
|
|
9
8
|
/** Called from a MenuButton to close the Menu and return a result */
|
|
10
9
|
handleButton: (type: "confirm" | "cancel" | undefined, value?: any) => void;
|
|
11
10
|
|
|
@@ -15,13 +14,16 @@ export interface MenuContext {
|
|
|
15
14
|
/** Called from a MenuButton when a key is pressed */
|
|
16
15
|
handleItemKey: (e: KeyboardEvent) => void;
|
|
17
16
|
|
|
17
|
+
/** Called from a MenuButton when a submenu is shown */
|
|
18
|
+
handlePopout: (index: number) => void;
|
|
19
|
+
|
|
18
20
|
state: MenuState;
|
|
19
21
|
|
|
20
22
|
/** The element that caused this Menu to be shown */
|
|
21
23
|
anchorElement?: HTMLElement;
|
|
22
24
|
|
|
23
25
|
/** Called from each MenuButton/Check/Radio to register itself with this Menu */
|
|
24
|
-
registerItem: (
|
|
26
|
+
registerItem: (item: ItemState) => { index: number };
|
|
25
27
|
}
|
|
26
28
|
|
|
27
29
|
export interface MenuState {
|
|
@@ -36,26 +38,14 @@ export interface MenuButtonContext {
|
|
|
36
38
|
}
|
|
37
39
|
|
|
38
40
|
export interface MenuRadioGroupContext {
|
|
39
|
-
registerItemInGroup: (
|
|
41
|
+
registerItemInGroup: (itemState: RadioGroupItemState) => void;
|
|
40
42
|
toggleItem: (value: string) => void;
|
|
41
43
|
}
|
|
42
44
|
|
|
43
|
-
export
|
|
44
|
-
setVisible: (value: boolean) => void;
|
|
45
|
-
state: {
|
|
46
|
-
visible: boolean;
|
|
47
|
-
};
|
|
48
|
-
anchorElement?: HTMLElement;
|
|
49
|
-
focusFirstElement?: () => void;
|
|
50
|
-
focusLastElement?: () => void;
|
|
51
|
-
}
|
|
52
|
-
|
|
53
|
-
export interface ItemState {
|
|
54
|
-
setFocused: () => void;
|
|
55
|
-
}
|
|
45
|
+
export type ItemState = SubmenuItemState;
|
|
56
46
|
|
|
57
47
|
export interface RadioGroupItemState {
|
|
48
|
+
index: number;
|
|
58
49
|
value: string;
|
|
59
50
|
checked: boolean;
|
|
60
|
-
setChecked: (value: boolean) => void;
|
|
61
51
|
}
|
package/dist/Menu/index.d.ts
CHANGED
|
@@ -5,11 +5,11 @@ interface MenuProps {
|
|
|
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 menu to screen readers */
|
|
12
|
-
ariaLabel?: string
|
|
12
|
+
ariaLabel?: string;
|
|
13
13
|
}
|
|
14
14
|
|
|
15
15
|
/**
|
|
@@ -44,17 +44,17 @@ interface MenuButtonProps {
|
|
|
44
44
|
/** An ID for the root element */
|
|
45
45
|
id?: string;
|
|
46
46
|
/** Classes for the root element */
|
|
47
|
-
class?: ClassValue
|
|
47
|
+
class?: ClassValue;
|
|
48
48
|
/** Styles for the root element */
|
|
49
|
-
style?: StyleValue
|
|
49
|
+
style?: StyleValue;
|
|
50
50
|
/** The value that should be returned when this button is pressed and the Dialog was invoked by calling showContextual, showPrompt or showPopover */
|
|
51
|
-
value?: any
|
|
51
|
+
value?: any;
|
|
52
52
|
/** Whether this button is disabled */
|
|
53
|
-
disabled?: boolean
|
|
53
|
+
disabled?: boolean;
|
|
54
54
|
/** Raised when the button is clicked */
|
|
55
|
-
onclick?: (e: MouseEvent) => void
|
|
55
|
+
onclick?: (e: MouseEvent) => void;
|
|
56
56
|
/** Raised when a key is pressed down */
|
|
57
|
-
onkeydown?: (e: KeyboardEvent) => void
|
|
57
|
+
onkeydown?: (e: KeyboardEvent) => void;
|
|
58
58
|
}
|
|
59
59
|
|
|
60
60
|
/**
|
|
@@ -75,15 +75,15 @@ interface MenuCheckProps {
|
|
|
75
75
|
/** An ID for the root element */
|
|
76
76
|
id?: string;
|
|
77
77
|
/** Classes for the root element */
|
|
78
|
-
class?: ClassValue
|
|
78
|
+
class?: ClassValue;
|
|
79
79
|
/** Styles for the root element */
|
|
80
|
-
style?: StyleValue
|
|
80
|
+
style?: StyleValue;
|
|
81
81
|
/** Whether this item is checked */
|
|
82
|
-
checked
|
|
82
|
+
checked: Bindable<boolean | undefined>;
|
|
83
83
|
/** Whether this item is disabled */
|
|
84
|
-
disabled?: boolean
|
|
84
|
+
disabled?: boolean;
|
|
85
85
|
/** Raised when the checkbox is clicked */
|
|
86
|
-
onclick?: (e: MouseEvent) => void
|
|
86
|
+
onclick?: (e: MouseEvent) => void;
|
|
87
87
|
}
|
|
88
88
|
|
|
89
89
|
/**
|
|
@@ -105,11 +105,11 @@ interface MenuGroupProps {
|
|
|
105
105
|
/** An ID for the root element */
|
|
106
106
|
id?: string;
|
|
107
107
|
/** Classes for the root element */
|
|
108
|
-
class?: ClassValue
|
|
108
|
+
class?: ClassValue;
|
|
109
109
|
/** Styles for the root element */
|
|
110
|
-
style?: StyleValue
|
|
110
|
+
style?: StyleValue;
|
|
111
111
|
/** An ARIA label for describing the group to screen readers */
|
|
112
|
-
ariaLabel?: string
|
|
112
|
+
ariaLabel?: string;
|
|
113
113
|
}
|
|
114
114
|
|
|
115
115
|
/**
|
|
@@ -129,11 +129,9 @@ interface MenuIndicatorProps {
|
|
|
129
129
|
/** An ID for the root element */
|
|
130
130
|
id?: string;
|
|
131
131
|
/** Classes for the root element */
|
|
132
|
-
class?: ClassValue
|
|
132
|
+
class?: ClassValue;
|
|
133
133
|
/** Styles for the root element */
|
|
134
|
-
style?: StyleValue
|
|
135
|
-
/** Whether this item is disabled */
|
|
136
|
-
disabled?: boolean,
|
|
134
|
+
style?: StyleValue;
|
|
137
135
|
}
|
|
138
136
|
|
|
139
137
|
/**
|
|
@@ -154,17 +152,15 @@ interface MenuPopoutProps {
|
|
|
154
152
|
/** An ID for the root element */
|
|
155
153
|
id?: string;
|
|
156
154
|
/** Classes for the root element */
|
|
157
|
-
class?: ClassValue
|
|
155
|
+
class?: ClassValue;
|
|
158
156
|
/** Styles for the root element */
|
|
159
|
-
style?: StyleValue
|
|
157
|
+
style?: StyleValue;
|
|
160
158
|
/** Whether the popout is visible */
|
|
161
|
-
visible?: boolean
|
|
162
|
-
/** Raised when the popout is opened or closed */
|
|
163
|
-
ontoggle?: (open: boolean) => void,
|
|
159
|
+
visible?: boolean;
|
|
164
160
|
/** Raised when the popout has opened */
|
|
165
|
-
onopen?: () => void
|
|
161
|
+
onopen?: () => void;
|
|
166
162
|
/** Raised when the popout has closed */
|
|
167
|
-
onclose?: (result: any) => void
|
|
163
|
+
onclose?: (result: any) => void;
|
|
168
164
|
}
|
|
169
165
|
|
|
170
166
|
/**
|
|
@@ -193,13 +189,13 @@ interface MenuPopoutContentProps {
|
|
|
193
189
|
/** An ID for the root element */
|
|
194
190
|
id?: string;
|
|
195
191
|
/** Classes for the root element */
|
|
196
|
-
class?: ClassValue
|
|
192
|
+
class?: ClassValue;
|
|
197
193
|
/** Styles for the root element */
|
|
198
|
-
style?: StyleValue
|
|
194
|
+
style?: StyleValue;
|
|
199
195
|
/** Where the popout will be shown, relative to the popout button */
|
|
200
|
-
side?: "top" | "right" | "bottom" | "left"
|
|
196
|
+
side?: "top" | "right" | "bottom" | "left";
|
|
201
197
|
/** How the popout will be aligned, relative to the popout button */
|
|
202
|
-
alignment?: "start" | "center" | "end"
|
|
198
|
+
alignment?: "start" | "center" | "end";
|
|
203
199
|
}
|
|
204
200
|
|
|
205
201
|
/**
|
|
@@ -219,13 +215,13 @@ interface MenuPopoutTriggerProps {
|
|
|
219
215
|
/** An ID for the root element */
|
|
220
216
|
id?: string;
|
|
221
217
|
/** Classes for the root element */
|
|
222
|
-
class?: ClassValue
|
|
218
|
+
class?: ClassValue;
|
|
223
219
|
/** Styles for the root element */
|
|
224
|
-
style?: StyleValue
|
|
220
|
+
style?: StyleValue;
|
|
225
221
|
/** The delay before showing the popout, in milliseconds */
|
|
226
|
-
hoverDelay?: number
|
|
222
|
+
hoverDelay?: number;
|
|
227
223
|
/** Whether this button is disabled */
|
|
228
|
-
disabled?: boolean
|
|
224
|
+
disabled?: boolean;
|
|
229
225
|
}
|
|
230
226
|
|
|
231
227
|
/**
|
|
@@ -245,15 +241,13 @@ interface MenuRadioProps {
|
|
|
245
241
|
/** An ID for the root element */
|
|
246
242
|
id?: string;
|
|
247
243
|
/** Classes for the root element */
|
|
248
|
-
class?: ClassValue
|
|
244
|
+
class?: ClassValue;
|
|
249
245
|
/** Styles for the root element */
|
|
250
|
-
style?: StyleValue
|
|
246
|
+
style?: StyleValue;
|
|
251
247
|
/** The value of the item */
|
|
252
|
-
value
|
|
253
|
-
/** Whether this item is checked */
|
|
254
|
-
checked?: boolean,
|
|
248
|
+
value: string;
|
|
255
249
|
/** Whether this item is disabled */
|
|
256
|
-
disabled?: boolean
|
|
250
|
+
disabled?: boolean;
|
|
257
251
|
}
|
|
258
252
|
|
|
259
253
|
/**
|
|
@@ -263,7 +257,7 @@ interface MenuRadioProps {
|
|
|
263
257
|
declare function MenuRadio(
|
|
264
258
|
$parent: ParentNode,
|
|
265
259
|
$anchor: Node | null,
|
|
266
|
-
$props: MenuRadioProps
|
|
260
|
+
$props: MenuRadioProps,
|
|
267
261
|
$context?: Record<PropertyKey, any>,
|
|
268
262
|
$slots?: Record<string, SlotRender>,
|
|
269
263
|
): void;
|
|
@@ -274,15 +268,15 @@ interface MenuRadioGroupProps {
|
|
|
274
268
|
/** An ID for the root element */
|
|
275
269
|
id?: string;
|
|
276
270
|
/** Classes for the root element */
|
|
277
|
-
class?: ClassValue
|
|
271
|
+
class?: ClassValue;
|
|
278
272
|
/** Styles for the root element */
|
|
279
|
-
style?: StyleValue
|
|
273
|
+
style?: StyleValue;
|
|
280
274
|
/** An ARIA label for describing the menu to screen readers */
|
|
281
|
-
ariaLabel?: string
|
|
275
|
+
ariaLabel?: string;
|
|
282
276
|
/** The value of the checked MenuRadio */
|
|
283
|
-
value
|
|
277
|
+
value: Bindable<string | undefined>;
|
|
284
278
|
/** Raised when the checked item has changed */
|
|
285
|
-
onchange?: (value: any) => void
|
|
279
|
+
onchange?: (value: any) => void;
|
|
286
280
|
}
|
|
287
281
|
|
|
288
282
|
/**
|
|
@@ -302,9 +296,9 @@ interface MenuSeparatorProps {
|
|
|
302
296
|
/** An ID for the root element */
|
|
303
297
|
id?: string;
|
|
304
298
|
/** Classes for the root element */
|
|
305
|
-
class?: ClassValue
|
|
299
|
+
class?: ClassValue;
|
|
306
300
|
/** Styles for the root element */
|
|
307
|
-
style?: StyleValue
|
|
301
|
+
style?: StyleValue;
|
|
308
302
|
}
|
|
309
303
|
|
|
310
304
|
/**
|
|
@@ -318,4 +312,4 @@ declare function MenuSeparator(
|
|
|
318
312
|
$slots?: Record<string, SlotRender>,
|
|
319
313
|
): void;
|
|
320
314
|
|
|
321
|
-
export { Menu, MenuButton, MenuCheck, MenuGroup, MenuIndicator, MenuPopout, MenuPopoutContent, MenuPopoutTrigger, MenuRadio, MenuRadioGroup, MenuSeparator };
|
|
315
|
+
export { Menu, MenuButton, MenuCheck, MenuGroup, MenuIndicator, MenuPopout, MenuPopoutContent, MenuPopoutTrigger, MenuRadio, MenuRadioGroup, MenuSeparator };
|
package/dist/Menu/index.js
CHANGED
|
@@ -1,46 +1,12 @@
|
|
|
1
|
-
|
|
2
|
-
import
|
|
3
|
-
|
|
4
|
-
|
|
5
|
-
import
|
|
6
|
-
|
|
7
|
-
|
|
8
|
-
import
|
|
9
|
-
|
|
10
|
-
|
|
11
|
-
import
|
|
12
|
-
|
|
13
|
-
// src/Menu/MenuIndicator.torp
|
|
14
|
-
import MenuIndicator_default from "./MenuIndicator.torp";
|
|
15
|
-
|
|
16
|
-
// src/Menu/MenuPopout.torp
|
|
17
|
-
import MenuPopout_default from "./MenuPopout.torp";
|
|
18
|
-
|
|
19
|
-
// src/Menu/MenuPopoutContent.torp
|
|
20
|
-
import MenuPopoutContent_default from "./MenuPopoutContent.torp";
|
|
21
|
-
|
|
22
|
-
// src/Menu/MenuPopoutTrigger.torp
|
|
23
|
-
import MenuPopoutTrigger_default from "./MenuPopoutTrigger.torp";
|
|
24
|
-
|
|
25
|
-
// src/Menu/MenuRadio.torp
|
|
26
|
-
import MenuRadio_default from "./MenuRadio.torp";
|
|
27
|
-
|
|
28
|
-
// src/Menu/MenuRadioGroup.torp
|
|
29
|
-
import MenuRadioGroup_default from "./MenuRadioGroup.torp";
|
|
30
|
-
|
|
31
|
-
// src/Menu/MenuSeparator.torp
|
|
32
|
-
import MenuSeparator_default from "./MenuSeparator.torp";
|
|
33
|
-
export {
|
|
34
|
-
Menu_default as Menu,
|
|
35
|
-
MenuButton_default as MenuButton,
|
|
36
|
-
MenuCheck_default as MenuCheck,
|
|
37
|
-
MenuGroup_default as MenuGroup,
|
|
38
|
-
MenuIndicator_default as MenuIndicator,
|
|
39
|
-
MenuPopout_default as MenuPopout,
|
|
40
|
-
MenuPopoutContent_default as MenuPopoutContent,
|
|
41
|
-
MenuPopoutTrigger_default as MenuPopoutTrigger,
|
|
42
|
-
MenuRadio_default as MenuRadio,
|
|
43
|
-
MenuRadioGroup_default as MenuRadioGroup,
|
|
44
|
-
MenuSeparator_default as MenuSeparator
|
|
45
|
-
};
|
|
46
|
-
//# sourceMappingURL=index.js.map
|
|
1
|
+
import Menu from "./Menu.torp";
|
|
2
|
+
import MenuButton from "./MenuButton.torp";
|
|
3
|
+
import MenuCheck from "./MenuCheck.torp";
|
|
4
|
+
import MenuGroup from "./MenuGroup.torp";
|
|
5
|
+
import MenuIndicator from "./MenuIndicator.torp";
|
|
6
|
+
import MenuPopout from "./MenuPopout.torp";
|
|
7
|
+
import MenuPopoutContent from "./MenuPopoutContent.torp";
|
|
8
|
+
import MenuPopoutTrigger from "./MenuPopoutTrigger.torp";
|
|
9
|
+
import MenuRadio from "./MenuRadio.torp";
|
|
10
|
+
import MenuRadioGroup from "./MenuRadioGroup.torp";
|
|
11
|
+
import MenuSeparator from "./MenuSeparator.torp";
|
|
12
|
+
export { Menu, MenuButton, MenuCheck, MenuGroup, MenuIndicator, MenuPopout, MenuPopoutContent, MenuPopoutTrigger, MenuRadio, MenuRadioGroup, MenuSeparator };
|
|
@@ -1,17 +1,18 @@
|
|
|
1
1
|
import type { ClassValue, StyleValue } from "@torpor/view";
|
|
2
|
-
import {
|
|
2
|
+
import { createFocusGroup } from "../utils/focusGroup";
|
|
3
|
+
import { type ItemState, type MenuBarContext, MenuBarContextName } from "./MenuBarTypes";
|
|
3
4
|
|
|
4
5
|
interface MenuBarProps {
|
|
5
6
|
/** An ID for the root element */
|
|
6
7
|
id?: string;
|
|
7
8
|
/** Classes for the root element */
|
|
8
|
-
class?: ClassValue
|
|
9
|
+
class?: ClassValue;
|
|
9
10
|
/** Styles for the root element */
|
|
10
|
-
style?: StyleValue
|
|
11
|
+
style?: StyleValue;
|
|
11
12
|
/** An ARIA label for describing the menu to screen readers */
|
|
12
|
-
ariaLabel?: string
|
|
13
|
+
ariaLabel?: string;
|
|
13
14
|
/** The orientation of the menu, which affects keyboard navigation */
|
|
14
|
-
orientation?: "horizontal" | "vertical"
|
|
15
|
+
orientation?: "horizontal" | "vertical";
|
|
15
16
|
}
|
|
16
17
|
|
|
17
18
|
/**
|
|
@@ -39,111 +40,58 @@ export default function MenuBar($props: MenuBarProps | undefined) {
|
|
|
39
40
|
active: false,
|
|
40
41
|
});
|
|
41
42
|
|
|
42
|
-
//
|
|
43
|
-
|
|
44
|
-
|
|
43
|
+
// The focus group owns the item ledger and roving-tabindex bookkeeping
|
|
44
|
+
const group = createFocusGroup<ItemState>();
|
|
45
|
+
const { itemStates } = group;
|
|
45
46
|
|
|
46
47
|
// Set the context to pass down to items
|
|
47
48
|
let context: MenuBarContext = {
|
|
48
49
|
handleItemShow,
|
|
49
50
|
handleButtonFocus,
|
|
50
51
|
handleButtonKey,
|
|
52
|
+
handleAdjacentItem,
|
|
51
53
|
registerItem,
|
|
52
|
-
state: $state
|
|
54
|
+
state: $state,
|
|
53
55
|
};
|
|
54
56
|
$context[MenuBarContextName] = context;
|
|
55
57
|
|
|
56
|
-
function registerItem(
|
|
57
|
-
|
|
58
|
-
const newItemState: ItemState = {
|
|
59
|
-
setVisible,
|
|
60
|
-
setFocused
|
|
61
|
-
};
|
|
62
|
-
itemStates.push(newItemState);
|
|
63
|
-
itemStates = itemStates;
|
|
64
|
-
return { index: itemStates.length - 1 };
|
|
58
|
+
function registerItem(item: ItemState) {
|
|
59
|
+
return group.registerItem(item);
|
|
65
60
|
}
|
|
66
61
|
|
|
67
62
|
function handleItemShow(index: number) {
|
|
68
63
|
// Make sure other items are hidden
|
|
69
64
|
itemStates.forEach((item, i) => {
|
|
70
65
|
if (i !== index) {
|
|
71
|
-
item.setVisible(false);
|
|
66
|
+
item.setVisible?.(false);
|
|
72
67
|
}
|
|
73
68
|
});
|
|
74
69
|
}
|
|
75
70
|
|
|
76
71
|
function handleButtonFocus(index: number) {
|
|
77
|
-
|
|
72
|
+
group.handleItemFocus(index);
|
|
78
73
|
}
|
|
79
74
|
|
|
80
|
-
function
|
|
81
|
-
|
|
82
|
-
|
|
83
|
-
|
|
84
|
-
|
|
85
|
-
|
|
86
|
-
|
|
87
|
-
|
|
88
|
-
|
|
89
|
-
}
|
|
90
|
-
case "Left":
|
|
91
|
-
case "ArrowLeft": {
|
|
92
|
-
if (orientation === "horizontal") {
|
|
93
|
-
e.preventDefault();
|
|
94
|
-
focusItem("previous");
|
|
95
|
-
}
|
|
96
|
-
break;
|
|
97
|
-
}
|
|
98
|
-
case "Down":
|
|
99
|
-
case "ArrowDown": {
|
|
100
|
-
if (orientation === "vertical") {
|
|
101
|
-
e.preventDefault();
|
|
102
|
-
focusItem("next");
|
|
103
|
-
}
|
|
104
|
-
break;
|
|
105
|
-
}
|
|
106
|
-
case "Up":
|
|
107
|
-
case "ArrowUp": {
|
|
108
|
-
if (orientation === "vertical") {
|
|
109
|
-
e.preventDefault();
|
|
110
|
-
focusItem("previous");
|
|
111
|
-
}
|
|
112
|
-
break;
|
|
113
|
-
}
|
|
114
|
-
case "Home": {
|
|
115
|
-
e.preventDefault();
|
|
116
|
-
focusItem("start");
|
|
117
|
-
break;
|
|
118
|
-
}
|
|
119
|
-
case "End": {
|
|
120
|
-
e.preventDefault();
|
|
121
|
-
focusItem("end");
|
|
122
|
-
break;
|
|
123
|
-
}
|
|
75
|
+
function handleAdjacentItem(index: number, target: "previous" | "next") {
|
|
76
|
+
// Move focus to the adjacent item and open its menu; opening it also
|
|
77
|
+
// hides the current item's menu via handleItemShow
|
|
78
|
+
group.handleItemFocus(index);
|
|
79
|
+
focusItem(target);
|
|
80
|
+
const next = group.getFocusIndex();
|
|
81
|
+
if (next !== index) {
|
|
82
|
+
$state.active = true;
|
|
83
|
+
itemStates[next].setVisible?.(true);
|
|
124
84
|
}
|
|
125
85
|
}
|
|
126
86
|
|
|
87
|
+
function handleButtonKey(e: KeyboardEvent) {
|
|
88
|
+
group.handleGroupKey(group.getFocusIndex(), e, {
|
|
89
|
+
vertical: orientation === "vertical",
|
|
90
|
+
});
|
|
91
|
+
}
|
|
92
|
+
|
|
127
93
|
function focusItem(target: "start" | "previous" | "next" | "end") {
|
|
128
|
-
|
|
129
|
-
case "start": {
|
|
130
|
-
focusIndex = 0;
|
|
131
|
-
break;
|
|
132
|
-
}
|
|
133
|
-
case "previous": {
|
|
134
|
-
focusIndex = Math.max(0, focusIndex - 1);
|
|
135
|
-
break;
|
|
136
|
-
}
|
|
137
|
-
case "next": {
|
|
138
|
-
focusIndex = Math.min(itemStates.length - 1, focusIndex + 1);
|
|
139
|
-
break;
|
|
140
|
-
}
|
|
141
|
-
case "end": {
|
|
142
|
-
focusIndex = itemStates.length - 1;
|
|
143
|
-
break;
|
|
144
|
-
}
|
|
145
|
-
}
|
|
146
|
-
itemStates[focusIndex]?.setFocused();
|
|
94
|
+
group.moveFocus(group.getFocusIndex(), target);
|
|
147
95
|
}
|
|
148
96
|
|
|
149
97
|
@render {
|