@torpor/ui 0.3.7 → 1.0.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/README.md +83 -7
- package/dist/Accordion/Accordion.torp +43 -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 +6 -6
- 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 +25 -4
- 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 +70 -0
- 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 +83 -0
- package/dist/Charts/ChartYAxis.torp +105 -0
- package/dist/Charts/ColumnChart.torp +70 -0
- package/dist/{Chart → Charts}/GridLines.torp +7 -4
- package/dist/Charts/LineChart.torp +73 -0
- package/dist/{Chart → Charts}/PieChart.torp +14 -20
- package/dist/{Chart → Charts}/ScatterChart.torp +45 -38
- package/dist/{Chart → Charts}/SparkLine.torp +16 -19
- package/dist/{Chart → Charts}/XAxis.torp +18 -12
- package/dist/{Chart → Charts}/YAxis.torp +15 -9
- package/dist/Charts/index.d.ts +469 -0
- package/dist/Charts/index.js +17 -0
- 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 +112 -0
- package/dist/ComboBox/ComboBoxInput.torp +145 -0
- package/dist/ComboBox/ComboBoxTrigger.torp +49 -0
- package/dist/ComboBox/ComboBoxTypes.ts +39 -0
- package/dist/ComboBox/index.d.ts +152 -0
- package/dist/ComboBox/index.js +6 -0
- package/dist/CommandPalette/CommandPalette.torp +220 -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 +39 -52
- 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 +5 -18
- 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 +311 -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 +33 -30
- package/dist/Dialog/DialogBody.torp +5 -9
- package/dist/Dialog/DialogButton.torp +14 -11
- package/dist/Dialog/DialogFooter.torp +3 -7
- package/dist/Dialog/DialogHeader.torp +6 -10
- package/dist/Dialog/DialogTypes.ts +2 -2
- package/dist/Dialog/index.d.ts +28 -26
- 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/DisclosureTypes.ts +1 -1
- package/dist/Disclosure/index.d.ts +14 -16
- package/dist/Disclosure/index.js +5 -18
- package/dist/Drawer/Drawer.torp +21 -51
- package/dist/Drawer/DrawerContent.torp +67 -13
- package/dist/Drawer/DrawerOverlay.torp +4 -4
- package/dist/Drawer/DrawerTrigger.torp +16 -4
- package/dist/Drawer/DrawerTypes.ts +4 -1
- 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 +28 -20
- 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 +39 -0
- 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 +198 -77
- package/dist/Form/index.js +16 -46
- package/dist/ListBox/ListBox.torp +374 -0
- package/dist/ListBox/ListBoxItem.torp +131 -0
- package/dist/ListBox/ListBoxSeparator.torp +29 -0
- package/dist/ListBox/ListBoxTypes.ts +41 -0
- package/dist/ListBox/LoadedListBoxItems.torp +41 -0
- package/dist/ListBox/index.d.ts +136 -0
- package/dist/ListBox/index.js +4 -0
- 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 +90 -70
- 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 +12 -21
- 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 +34 -55
- package/dist/MenuBar/MenuBarItemContent.torp +15 -101
- package/dist/MenuBar/MenuBarItemTrigger.torp +20 -55
- package/dist/MenuBar/MenuBarTypes.ts +13 -12
- package/dist/MenuBar/index.d.ts +17 -19
- package/dist/MenuBar/index.js +5 -18
- package/dist/Modal/Modal.torp +28 -48
- 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 +6 -17
- 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 -104
- package/dist/NavMenu/NavMenuButton.torp +10 -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 +16 -61
- package/dist/NavMenu/NavMenuPopoutContent.torp +14 -73
- package/dist/NavMenu/NavMenuPopoutTrigger.torp +47 -0
- package/dist/NavMenu/NavMenuSeparator.torp +3 -6
- package/dist/NavMenu/NavMenuTypes.ts +6 -15
- package/dist/NavMenu/index.d.ts +55 -55
- 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 +152 -0
- package/dist/Pagination/PaginationItem.torp +137 -0
- package/dist/Pagination/PaginationTypes.ts +22 -0
- package/dist/Pagination/buildPages.ts +61 -0
- package/dist/Pagination/index.d.ts +63 -0
- package/dist/Pagination/index.js +3 -0
- package/dist/Popover/Popover.torp +39 -52
- 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 +5 -18
- 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 +190 -0
- package/dist/SelectBox/SelectBoxContent.torp +107 -0
- package/dist/SelectBox/SelectBoxTrigger.torp +141 -0
- package/dist/SelectBox/SelectBoxTypes.ts +33 -0
- package/dist/SelectBox/index.d.ts +112 -0
- package/dist/SelectBox/index.js +5 -0
- package/dist/Slider/Slider.torp +248 -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 +3 -3
- 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 +117 -0
- package/dist/ToolBar/ToolBarButton.torp +56 -0
- package/dist/ToolBar/ToolBarElement.torp +51 -0
- package/dist/ToolBar/ToolBarPopout.torp +45 -0
- package/dist/ToolBar/ToolBarPopoutContent.torp +34 -0
- package/dist/ToolBar/ToolBarPopoutTrigger.torp +47 -0
- package/dist/ToolBar/ToolBarSeparator.torp +21 -0
- package/dist/ToolBar/ToolBarTypes.ts +28 -0
- package/dist/ToolBar/index.d.ts +210 -0
- package/dist/ToolBar/index.js +8 -0
- 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 +72 -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 +82 -0
- 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/chartUtils.ts +1 -1
- 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 +116 -25
- 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/Chart/BarChart.torp +0 -159
- package/dist/Chart/LineChart.torp +0 -196
- package/dist/Chart/index.d.ts +0 -220
- package/dist/Chart/index.js +0 -34
- package/dist/Chart/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/Menu/index.js.map +0 -1
- package/dist/MenuBar/index.js.map +0 -1
- package/dist/NavMenu/NavMenuPopoutButton.torp +0 -129
- package/dist/NavMenu/index.js.map +0 -1
- package/dist/TabGroup/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
- /package/dist/{Chart → Charts}/DataSeries.ts +0 -0
|
@@ -0,0 +1,137 @@
|
|
|
1
|
+
import { type ClassValue, type StyleValue } from "@torpor/view";
|
|
2
|
+
import { areDatesEqual } from "../utils/dateUtils";
|
|
3
|
+
import { type CalendarContext, CalendarContextName } from "../Calendar/CalendarTypes";
|
|
4
|
+
import {
|
|
5
|
+
type DateRangePickerContext,
|
|
6
|
+
DateRangePickerContextName,
|
|
7
|
+
} from "./DateRangePickerTypes";
|
|
8
|
+
|
|
9
|
+
// TODO: Internationalization?? On the server and/or the client...
|
|
10
|
+
const formatDate = (date: Date): string => {
|
|
11
|
+
return new Intl.DateTimeFormat("en-US", {
|
|
12
|
+
year: "numeric",
|
|
13
|
+
month: "long",
|
|
14
|
+
day: "numeric",
|
|
15
|
+
}).format(date);
|
|
16
|
+
};
|
|
17
|
+
|
|
18
|
+
interface DateRangePickerDayProps {
|
|
19
|
+
/** An ID for the root element */
|
|
20
|
+
id?: string;
|
|
21
|
+
/** Classes for the root element */
|
|
22
|
+
class?: ClassValue;
|
|
23
|
+
/** Styles for the root element */
|
|
24
|
+
style?: StyleValue;
|
|
25
|
+
/** The date to display */
|
|
26
|
+
date: Date;
|
|
27
|
+
/** Whether the date is muted (i.e. not in the currently displayed month) */
|
|
28
|
+
muted?: boolean;
|
|
29
|
+
/** Whether the date is the active (keyboard cursor) date */
|
|
30
|
+
active?: boolean;
|
|
31
|
+
/** An ARIA label for describing the day to screen readers */
|
|
32
|
+
ariaLabel?: string | undefined;
|
|
33
|
+
}
|
|
34
|
+
|
|
35
|
+
/**
|
|
36
|
+
* A day in a DateRangePicker's calendar, which highlights the start and end
|
|
37
|
+
* of the range being selected, the dates in between, and a preview of the
|
|
38
|
+
* range while the user hovers.
|
|
39
|
+
*/
|
|
40
|
+
export default function DateRangePickerDay($props: DateRangePickerDayProps | undefined) {
|
|
41
|
+
// Ensure the value is a reactive date -- assigning a plain date to
|
|
42
|
+
// watched props/state wraps it automatically
|
|
43
|
+
$props!.date = new Date($unwrap($props?.date ?? new Date()));
|
|
44
|
+
let reactiveDate = $props!.date;
|
|
45
|
+
|
|
46
|
+
// Get stuff out of the Calendar context
|
|
47
|
+
const calendarContext = $context[CalendarContextName] as CalendarContext;
|
|
48
|
+
if (!calendarContext) {
|
|
49
|
+
throw new Error("DateRangePickerDay must be contained within a Calendar");
|
|
50
|
+
}
|
|
51
|
+
|
|
52
|
+
// Get stuff out of the DateRangePicker context
|
|
53
|
+
const rangeContext = $context[DateRangePickerContextName] as DateRangePickerContext;
|
|
54
|
+
if (!rangeContext) {
|
|
55
|
+
throw new Error("DateRangePickerDay must be contained within a DateRangePicker");
|
|
56
|
+
}
|
|
57
|
+
|
|
58
|
+
// Register this day with the parent Calendar, which will handle setting
|
|
59
|
+
// the active (keyboard cursor) date
|
|
60
|
+
calendarContext.registerDay(reactiveDate, setActive);
|
|
61
|
+
|
|
62
|
+
// This function is called by the parent Calendar to set this item's active value
|
|
63
|
+
function setActive(value: boolean) {
|
|
64
|
+
$props!.active = value;
|
|
65
|
+
}
|
|
66
|
+
|
|
67
|
+
function isToday() {
|
|
68
|
+
const today = new Date();
|
|
69
|
+
return areDatesEqual($props!.date, today);
|
|
70
|
+
}
|
|
71
|
+
|
|
72
|
+
function isStart(): boolean {
|
|
73
|
+
const start = rangeContext.getStart();
|
|
74
|
+
return !!start && areDatesEqual($props!.date, start);
|
|
75
|
+
}
|
|
76
|
+
|
|
77
|
+
function isEnd(): boolean {
|
|
78
|
+
const end = rangeContext.getEnd();
|
|
79
|
+
return !!end && areDatesEqual($props!.date, end);
|
|
80
|
+
}
|
|
81
|
+
|
|
82
|
+
// The end of the preview range is the hovered date while a range is being
|
|
83
|
+
// selected, or the real end once it's complete
|
|
84
|
+
function getRangeEnd(): Date | undefined {
|
|
85
|
+
return rangeContext.getEnd() ?? rangeContext.getPreview();
|
|
86
|
+
}
|
|
87
|
+
|
|
88
|
+
function isInRange(): boolean {
|
|
89
|
+
const start = rangeContext.getStart();
|
|
90
|
+
const end = getRangeEnd();
|
|
91
|
+
if (!start || !end) return false;
|
|
92
|
+
if (areDatesEqual($props!.date, start) || areDatesEqual($props!.date, end)) return false;
|
|
93
|
+
return $props!.date > start && $props!.date < end;
|
|
94
|
+
}
|
|
95
|
+
|
|
96
|
+
function handleClick() {
|
|
97
|
+
calendarContext.handleDay(reactiveDate);
|
|
98
|
+
}
|
|
99
|
+
|
|
100
|
+
function handleEnter() {
|
|
101
|
+
rangeContext.setPreview(new Date($props!.date));
|
|
102
|
+
}
|
|
103
|
+
|
|
104
|
+
@render {
|
|
105
|
+
<button
|
|
106
|
+
{$props?.id}
|
|
107
|
+
class={buildClass()}
|
|
108
|
+
{$props?.style}
|
|
109
|
+
type="button"
|
|
110
|
+
tabindex="-1"
|
|
111
|
+
onclick={handleClick}
|
|
112
|
+
onmouseenter={handleEnter}
|
|
113
|
+
aria-label={$props?.ariaLabel ?? formatDate($props!.date)}
|
|
114
|
+
aria-current={isToday() ? "date" : undefined}
|
|
115
|
+
aria-disabled={$props?.muted ? "true" : undefined}
|
|
116
|
+
data-range={isStart() ? "start" : isEnd() ? "end" : isInRange() ? "inside" : undefined}
|
|
117
|
+
>
|
|
118
|
+
<slot>
|
|
119
|
+
{$props!.date.getDate()}
|
|
120
|
+
</slot>
|
|
121
|
+
</button>
|
|
122
|
+
}
|
|
123
|
+
|
|
124
|
+
function buildClass() {
|
|
125
|
+
return [
|
|
126
|
+
"torp-date-range-day",
|
|
127
|
+
$props?.class,
|
|
128
|
+
{
|
|
129
|
+
muted: $props?.muted,
|
|
130
|
+
today: isToday(),
|
|
131
|
+
active: $props?.active,
|
|
132
|
+
selected: isStart() || isEnd(),
|
|
133
|
+
"in-range": isInRange(),
|
|
134
|
+
},
|
|
135
|
+
];
|
|
136
|
+
}
|
|
137
|
+
}
|
|
@@ -0,0 +1,21 @@
|
|
|
1
|
+
export const DateRangePickerContextName: unique symbol = Symbol.for("torp.DateRangePicker");
|
|
2
|
+
|
|
3
|
+
export interface DateRange {
|
|
4
|
+
/** The first date in the range */
|
|
5
|
+
start: Date;
|
|
6
|
+
/** The last date in the range */
|
|
7
|
+
end: Date;
|
|
8
|
+
}
|
|
9
|
+
|
|
10
|
+
export interface DateRangePickerContext {
|
|
11
|
+
/** The first date in the range being selected, as a plain (unwrapped) date */
|
|
12
|
+
getStart: () => Date | undefined;
|
|
13
|
+
/** The last date in the range, once the range is complete, as a plain date */
|
|
14
|
+
getEnd: () => Date | undefined;
|
|
15
|
+
/** The hovered date extending the preview range, as a plain date */
|
|
16
|
+
getPreview: () => Date | undefined;
|
|
17
|
+
/** Whether the user has picked a start date but not an end date yet */
|
|
18
|
+
isSelecting: () => boolean;
|
|
19
|
+
/** Sets the hovered date that extends the range preview */
|
|
20
|
+
setPreview: (date: Date | undefined) => void;
|
|
21
|
+
}
|
|
@@ -0,0 +1,76 @@
|
|
|
1
|
+
import { type SlotRender } from "@torpor/view";
|
|
2
|
+
|
|
3
|
+
|
|
4
|
+
interface DateRangePickerProps {
|
|
5
|
+
/** An ID for the root element */
|
|
6
|
+
id?: string;
|
|
7
|
+
/** Classes for the root element */
|
|
8
|
+
class?: ClassValue;
|
|
9
|
+
/** Styles for the root element */
|
|
10
|
+
style?: StyleValue;
|
|
11
|
+
/** The name of the date range picker's form data fields; "-start" and "-end" are appended */
|
|
12
|
+
name?: string;
|
|
13
|
+
/** The selected date range */
|
|
14
|
+
value?: Bindable<DateRange | undefined>;
|
|
15
|
+
/** Text to display when the value is empty */
|
|
16
|
+
placeholder?: string;
|
|
17
|
+
/** The format for the displayed dates (e.g. "d MMM yyyy") */
|
|
18
|
+
dateFormat?: string;
|
|
19
|
+
/** If set to true, the user cannot interact with this date range picker */
|
|
20
|
+
disabled?: boolean;
|
|
21
|
+
/** An accessible name for the trigger button */
|
|
22
|
+
ariaLabel?: string;
|
|
23
|
+
/** Raised when a complete range has been selected */
|
|
24
|
+
onchange?: (value: DateRange) => void;
|
|
25
|
+
}
|
|
26
|
+
|
|
27
|
+
/**
|
|
28
|
+
* An input for selecting a range of dates from a calendar popout. The first
|
|
29
|
+
* click sets the start of the range and the second sets its end; clicking a
|
|
30
|
+
* date before the start begins a new range there, and a third click starts
|
|
31
|
+
* over.
|
|
32
|
+
*
|
|
33
|
+
* The structure of a DateRangePicker is a trigger button that displays the
|
|
34
|
+
* selected range, with a selectable Calendar in a popout.
|
|
35
|
+
*/
|
|
36
|
+
declare function DateRangePicker(
|
|
37
|
+
$parent: ParentNode,
|
|
38
|
+
$anchor: Node | null,
|
|
39
|
+
$props: DateRangePickerProps | undefined,
|
|
40
|
+
$context?: Record<PropertyKey, any>,
|
|
41
|
+
$slots?: Record<string, SlotRender>,
|
|
42
|
+
): void;
|
|
43
|
+
|
|
44
|
+
|
|
45
|
+
|
|
46
|
+
interface DateRangePickerDayProps {
|
|
47
|
+
/** An ID for the root element */
|
|
48
|
+
id?: string;
|
|
49
|
+
/** Classes for the root element */
|
|
50
|
+
class?: ClassValue;
|
|
51
|
+
/** Styles for the root element */
|
|
52
|
+
style?: StyleValue;
|
|
53
|
+
/** The date to display */
|
|
54
|
+
date: Date;
|
|
55
|
+
/** Whether the date is muted (i.e. not in the currently displayed month) */
|
|
56
|
+
muted?: boolean;
|
|
57
|
+
/** Whether the date is the active (keyboard cursor) date */
|
|
58
|
+
active?: boolean;
|
|
59
|
+
/** An ARIA label for describing the day to screen readers */
|
|
60
|
+
ariaLabel?: string | undefined;
|
|
61
|
+
}
|
|
62
|
+
|
|
63
|
+
/**
|
|
64
|
+
* A day in a DateRangePicker's calendar, which highlights the start and end
|
|
65
|
+
* of the range being selected, the dates in between, and a preview of the
|
|
66
|
+
* range while the user hovers.
|
|
67
|
+
*/
|
|
68
|
+
declare function DateRangePickerDay(
|
|
69
|
+
$parent: ParentNode,
|
|
70
|
+
$anchor: Node | null,
|
|
71
|
+
$props: DateRangePickerDayProps | undefined,
|
|
72
|
+
$context?: Record<PropertyKey, any>,
|
|
73
|
+
$slots?: Record<string, SlotRender>,
|
|
74
|
+
): void;
|
|
75
|
+
|
|
76
|
+
export { DateRangePicker, DateRangePickerDay };
|
package/dist/Dialog/Dialog.torp
CHANGED
|
@@ -1,32 +1,35 @@
|
|
|
1
1
|
import type { ClassValue, StyleValue } from "@torpor/view";
|
|
2
|
+
import { type TrapFocusOptions, trapFocus } from "../mount/trapFocus";
|
|
3
|
+
import {
|
|
4
|
+
type HandleButtonPress,
|
|
5
|
+
type PopoutContext,
|
|
6
|
+
PopoutContextName,
|
|
7
|
+
} from "../utils/PopoutTypes";
|
|
2
8
|
import getId from "../utils/getId";
|
|
3
|
-
import {
|
|
4
|
-
import { ModalContextName, type ModalContext } from "../Modal/ModalTypes";
|
|
5
|
-
import { PopoverContextName } from "../Popover/PopoverTypes";
|
|
6
|
-
import { DialogContextName, type DialogContext, type DialogState, type HandleButtonPress } from "./DialogTypes";
|
|
9
|
+
import { type DialogContext, DialogContextName, type DialogState } from "./DialogTypes";
|
|
7
10
|
|
|
8
11
|
interface DialogProps {
|
|
9
12
|
/** An ID for the root element */
|
|
10
13
|
id?: string;
|
|
11
14
|
/** Classes for the root element */
|
|
12
|
-
class?: ClassValue
|
|
15
|
+
class?: ClassValue;
|
|
13
16
|
/** Styles for the root element */
|
|
14
|
-
style?: StyleValue
|
|
17
|
+
style?: StyleValue;
|
|
15
18
|
/** An ARIA label for describing the popover to screen readers */
|
|
16
|
-
ariaLabel?: string
|
|
19
|
+
ariaLabel?: string;
|
|
17
20
|
/** Whether the dialog should alert the user via the screen reader */
|
|
18
|
-
alert?: boolean
|
|
21
|
+
alert?: boolean;
|
|
19
22
|
}
|
|
20
23
|
|
|
21
24
|
/**
|
|
22
25
|
* A dialog that can be used to show a message to the user, or get information from the user.
|
|
23
|
-
*
|
|
26
|
+
*
|
|
24
27
|
* Dialogs are typically shown within a Modal or Popover.
|
|
25
|
-
*
|
|
28
|
+
*
|
|
26
29
|
* See [the WAI ARIA guidelines for Dialogs](https://www.w3.org/WAI/ARIA/apg/patterns/dialogmodal/).
|
|
27
|
-
*
|
|
30
|
+
*
|
|
28
31
|
* The structure of a Dialog is:
|
|
29
|
-
*
|
|
32
|
+
*
|
|
30
33
|
* ```
|
|
31
34
|
* <Dialog>
|
|
32
35
|
* <ModalOverlay /> (optional -- will set `modal` to true)
|
|
@@ -37,7 +40,7 @@ interface DialogProps {
|
|
|
37
40
|
* </DialogFooter>
|
|
38
41
|
* </Dialog>
|
|
39
42
|
* ```
|
|
40
|
-
*
|
|
43
|
+
*
|
|
41
44
|
*/
|
|
42
45
|
export default function Dialog($props: DialogProps | undefined) {
|
|
43
46
|
let defaultId = getId();
|
|
@@ -45,23 +48,26 @@ export default function Dialog($props: DialogProps | undefined) {
|
|
|
45
48
|
//let div: HTMLDivElement;
|
|
46
49
|
|
|
47
50
|
let trapFocusOptions: TrapFocusOptions = {
|
|
48
|
-
focusableElements: []
|
|
51
|
+
focusableElements: [],
|
|
49
52
|
};
|
|
50
53
|
|
|
51
|
-
// Maybe get stuff out of a
|
|
54
|
+
// Maybe get stuff out of a popout context
|
|
52
55
|
let modal = false;
|
|
53
|
-
let visible = true;
|
|
54
56
|
let handleButton: HandleButtonPress | undefined = undefined;
|
|
55
|
-
const
|
|
56
|
-
if (
|
|
57
|
+
const popoutContext = $context[PopoutContextName] as PopoutContext;
|
|
58
|
+
if (popoutContext) {
|
|
57
59
|
modal = true;
|
|
58
|
-
|
|
59
|
-
handleButton = modalContext.handleButton;
|
|
60
|
+
handleButton = popoutContext.handleButton;
|
|
60
61
|
|
|
61
|
-
|
|
62
|
-
// Set the focusFirstElement method in the
|
|
62
|
+
popoutContext.handleClickOutside = handleClickOutside;
|
|
63
|
+
// Set the focusFirstElement method in the PopoutContext so that it can be
|
|
63
64
|
// called after everything has been shown
|
|
64
|
-
|
|
65
|
+
popoutContext.focusFirstElement = focusFirstElement;
|
|
66
|
+
|
|
67
|
+
// Set the content ID and role so that triggers can use them with
|
|
68
|
+
// aria-controls / aria-haspopup
|
|
69
|
+
popoutContext.state.contentId = $props?.id ?? defaultId;
|
|
70
|
+
popoutContext.state.contentRole = "dialog";
|
|
65
71
|
}
|
|
66
72
|
|
|
67
73
|
// Set the IDs for using in the Dialog's ARIA attributes
|
|
@@ -69,14 +75,13 @@ export default function Dialog($props: DialogProps | undefined) {
|
|
|
69
75
|
dialogId: $props?.id ?? defaultId,
|
|
70
76
|
headerId: "",
|
|
71
77
|
bodyId: "",
|
|
72
|
-
|
|
73
|
-
})
|
|
78
|
+
});
|
|
74
79
|
|
|
75
80
|
// Set the context to pass down to items
|
|
76
81
|
let context: DialogContext = {
|
|
77
82
|
handleButton,
|
|
78
83
|
state: $state,
|
|
79
|
-
anchorElement:
|
|
84
|
+
anchorElement: popoutContext ? popoutContext.anchorElement : undefined,
|
|
80
85
|
};
|
|
81
86
|
$context[DialogContextName] = context;
|
|
82
87
|
|
|
@@ -86,18 +91,17 @@ export default function Dialog($props: DialogProps | undefined) {
|
|
|
86
91
|
}
|
|
87
92
|
}
|
|
88
93
|
|
|
89
|
-
function handleClickOutside(e: MouseEvent) {
|
|
94
|
+
function handleClickOutside(e: MouseEvent | KeyboardEvent) {
|
|
90
95
|
// Don't allow the user to click outside -- they must press a button or
|
|
91
96
|
// the Esc key
|
|
92
97
|
e.preventDefault();
|
|
93
98
|
if (!modal) {
|
|
94
|
-
|
|
99
|
+
popoutContext.state.visible = false;
|
|
95
100
|
}
|
|
96
101
|
}
|
|
97
102
|
|
|
98
103
|
function handleKey(e: KeyboardEvent) {
|
|
99
104
|
switch (e.key) {
|
|
100
|
-
case "Esc":
|
|
101
105
|
case "Escape": {
|
|
102
106
|
if (context.cancelButton) {
|
|
103
107
|
context.cancelButton.click();
|
|
@@ -128,7 +132,6 @@ export default function Dialog($props: DialogProps | undefined) {
|
|
|
128
132
|
aria-describedby={$state.bodyId ? $state.bodyId : undefined}
|
|
129
133
|
onkeydown={handleKey}
|
|
130
134
|
onmount={(el) => trapFocus(el, trapFocusOptions)}
|
|
131
|
-
@//&ref={div}
|
|
132
135
|
>
|
|
133
136
|
<slot />
|
|
134
137
|
</div>
|
|
@@ -1,16 +1,16 @@
|
|
|
1
1
|
import type { ClassValue, StyleValue } from "@torpor/view";
|
|
2
2
|
import getId from "../utils/getId";
|
|
3
|
-
import {
|
|
3
|
+
import { type DialogContext, DialogContextName } from "./DialogTypes";
|
|
4
4
|
|
|
5
5
|
interface DialogBodyProps {
|
|
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
|
|
11
|
+
style?: StyleValue;
|
|
12
12
|
/** Whether the body content will be announced by screen readers when the Dialog is opened */
|
|
13
|
-
ariaAnnounce?: boolean
|
|
13
|
+
ariaAnnounce?: boolean;
|
|
14
14
|
}
|
|
15
15
|
|
|
16
16
|
/**
|
|
@@ -33,11 +33,7 @@ export default function DialogBody($props: DialogBodyProps | undefined) {
|
|
|
33
33
|
}
|
|
34
34
|
|
|
35
35
|
@render {
|
|
36
|
-
<div
|
|
37
|
-
id={$props?.id ?? defaultId}
|
|
38
|
-
class={["torp-dialog-body", $props?.class]}
|
|
39
|
-
{$props?.style}
|
|
40
|
-
>
|
|
36
|
+
<div id={$props?.id ?? defaultId} class={["torp-dialog-body", $props?.class]} {$props?.style}>
|
|
41
37
|
<slot />
|
|
42
38
|
</div>
|
|
43
39
|
}
|
|
@@ -1,26 +1,28 @@
|
|
|
1
1
|
import type { ClassValue, StyleValue } from "@torpor/view";
|
|
2
|
-
import {
|
|
2
|
+
import { type DialogContext, DialogContextName } from "./DialogTypes";
|
|
3
3
|
|
|
4
4
|
interface DialogButtonProps {
|
|
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 value that should be returned when this button is pressed and the Dialog was invoked by calling showContextual, showPrompt or showPopover */
|
|
12
|
-
value?: any
|
|
12
|
+
value?: any;
|
|
13
13
|
/** "confirm" if the button should respond to the Enter key or "cancel" if the button should respond to the Escape key */
|
|
14
|
-
type?: "confirm" | "cancel"
|
|
14
|
+
type?: "confirm" | "cancel";
|
|
15
15
|
/** Whether this button is disabled */
|
|
16
|
-
disabled?: boolean
|
|
16
|
+
disabled?: boolean;
|
|
17
17
|
/** Raised when the button is clicked */
|
|
18
|
-
onclick?: (e: MouseEvent) => void
|
|
18
|
+
onclick?: (e: MouseEvent) => void;
|
|
19
|
+
/** Raised when a key is pressed down */
|
|
20
|
+
onkeydown?: (e: KeyboardEvent) => void;
|
|
19
21
|
}
|
|
20
22
|
|
|
21
23
|
/**
|
|
22
24
|
* A button that is placed in a DialogFooter and signals a response by a user.
|
|
23
|
-
*
|
|
25
|
+
*
|
|
24
26
|
*/
|
|
25
27
|
export default function DialogButton($props: DialogButtonProps | undefined) {
|
|
26
28
|
let button: HTMLButtonElement;
|
|
@@ -32,7 +34,7 @@ export default function DialogButton($props: DialogButtonProps | undefined) {
|
|
|
32
34
|
}
|
|
33
35
|
const handleButton = context.handleButton;
|
|
34
36
|
|
|
35
|
-
$
|
|
37
|
+
$onmount(() => {
|
|
36
38
|
// Store the confirm or cancel button in the DialogContext
|
|
37
39
|
if ($props?.type === "confirm") {
|
|
38
40
|
context.confirmButton = button;
|
|
@@ -43,7 +45,7 @@ export default function DialogButton($props: DialogButtonProps | undefined) {
|
|
|
43
45
|
|
|
44
46
|
function handleClick(e: MouseEvent) {
|
|
45
47
|
if ($props?.onclick) {
|
|
46
|
-
$props?.onclick(e)
|
|
48
|
+
$props?.onclick(e);
|
|
47
49
|
}
|
|
48
50
|
if (handleButton) {
|
|
49
51
|
handleButton($props?.type, $props?.value);
|
|
@@ -56,8 +58,9 @@ export default function DialogButton($props: DialogButtonProps | undefined) {
|
|
|
56
58
|
{$props?.id}
|
|
57
59
|
class={["torp-dialog-button", $props?.class]}
|
|
58
60
|
{$props?.style}
|
|
59
|
-
|
|
61
|
+
{$props?.disabled}
|
|
60
62
|
onclick={handleClick}
|
|
63
|
+
{$props?.onkeydown}
|
|
61
64
|
&ref={button}
|
|
62
65
|
>
|
|
63
66
|
<slot />
|
|
@@ -4,9 +4,9 @@ interface DialogFooterProps {
|
|
|
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 DialogFooterProps {
|
|
|
14
14
|
*/
|
|
15
15
|
export default function DialogFooter($props: DialogFooterProps | undefined) {
|
|
16
16
|
@render {
|
|
17
|
-
<div
|
|
18
|
-
{$props?.id}
|
|
19
|
-
class={["torp-dialog-footer", $props?.class]}
|
|
20
|
-
{$props?.style}
|
|
21
|
-
>
|
|
17
|
+
<div {$props?.id} class={["torp-dialog-footer", $props?.class]} {$props?.style}>
|
|
22
18
|
<slot />
|
|
23
19
|
</div>
|
|
24
20
|
}
|
|
@@ -1,22 +1,22 @@
|
|
|
1
1
|
import type { ClassValue, StyleValue } from "@torpor/view";
|
|
2
2
|
import getId from "../utils/getId";
|
|
3
|
-
import {
|
|
3
|
+
import { type DialogContext, DialogContextName } from "./DialogTypes";
|
|
4
4
|
|
|
5
5
|
interface DialogHeaderProps {
|
|
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
|
|
11
|
+
style?: StyleValue;
|
|
12
12
|
/** Whether the header will be announced by screen readers when the Dialog is opened */
|
|
13
|
-
ariaAnnounce?: boolean
|
|
13
|
+
ariaAnnounce?: boolean;
|
|
14
14
|
}
|
|
15
15
|
|
|
16
16
|
/**
|
|
17
17
|
* The header for a Dialog. Content in the header will be announced by screen
|
|
18
18
|
* readers when the Dialog is opened, unless ariaAnnounce is false.
|
|
19
|
-
*
|
|
19
|
+
*
|
|
20
20
|
*/
|
|
21
21
|
export default function DialogHeader($props: DialogHeaderProps | undefined) {
|
|
22
22
|
let defaultId = getId();
|
|
@@ -34,11 +34,7 @@ export default function DialogHeader($props: DialogHeaderProps | undefined) {
|
|
|
34
34
|
}
|
|
35
35
|
|
|
36
36
|
@render {
|
|
37
|
-
<div
|
|
38
|
-
id={$props?.id ?? defaultId}
|
|
39
|
-
class={["torp-dialog-footer", $props?.class]}
|
|
40
|
-
{$props?.style}
|
|
41
|
-
>
|
|
37
|
+
<div id={$props?.id ?? defaultId} class={["torp-dialog-footer", $props?.class]} {$props?.style}>
|
|
42
38
|
<slot />
|
|
43
39
|
</div>
|
|
44
40
|
}
|
|
@@ -1,6 +1,6 @@
|
|
|
1
|
-
|
|
1
|
+
import { type HandleButtonPress } from "../utils/PopoutTypes";
|
|
2
2
|
|
|
3
|
-
export
|
|
3
|
+
export const DialogContextName: unique symbol = Symbol.for("torp.Dialog");
|
|
4
4
|
|
|
5
5
|
export interface DialogContext {
|
|
6
6
|
handleButton?: HandleButtonPress;
|
package/dist/Dialog/index.d.ts
CHANGED
|
@@ -5,24 +5,24 @@ interface DialogProps {
|
|
|
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 popover to screen readers */
|
|
12
|
-
ariaLabel?: string
|
|
12
|
+
ariaLabel?: string;
|
|
13
13
|
/** Whether the dialog should alert the user via the screen reader */
|
|
14
|
-
alert?: boolean
|
|
14
|
+
alert?: boolean;
|
|
15
15
|
}
|
|
16
16
|
|
|
17
17
|
/**
|
|
18
18
|
* A dialog that can be used to show a message to the user, or get information from the user.
|
|
19
|
-
*
|
|
19
|
+
*
|
|
20
20
|
* Dialogs are typically shown within a Modal or Popover.
|
|
21
|
-
*
|
|
21
|
+
*
|
|
22
22
|
* See [the WAI ARIA guidelines for Dialogs](https://www.w3.org/WAI/ARIA/apg/patterns/dialogmodal/).
|
|
23
|
-
*
|
|
23
|
+
*
|
|
24
24
|
* The structure of a Dialog is:
|
|
25
|
-
*
|
|
25
|
+
*
|
|
26
26
|
* ```
|
|
27
27
|
* <Dialog>
|
|
28
28
|
* <ModalOverlay /> (optional -- will set `modal` to true)
|
|
@@ -33,7 +33,7 @@ interface DialogProps {
|
|
|
33
33
|
* </DialogFooter>
|
|
34
34
|
* </Dialog>
|
|
35
35
|
* ```
|
|
36
|
-
*
|
|
36
|
+
*
|
|
37
37
|
*/
|
|
38
38
|
declare function Dialog(
|
|
39
39
|
$parent: ParentNode,
|
|
@@ -49,11 +49,11 @@ interface DialogBodyProps {
|
|
|
49
49
|
/** An ID for the root element */
|
|
50
50
|
id?: string;
|
|
51
51
|
/** Classes for the root element */
|
|
52
|
-
class?: ClassValue
|
|
52
|
+
class?: ClassValue;
|
|
53
53
|
/** Styles for the root element */
|
|
54
|
-
style?: StyleValue
|
|
54
|
+
style?: StyleValue;
|
|
55
55
|
/** Whether the body content will be announced by screen readers when the Dialog is opened */
|
|
56
|
-
ariaAnnounce?: boolean
|
|
56
|
+
ariaAnnounce?: boolean;
|
|
57
57
|
}
|
|
58
58
|
|
|
59
59
|
/**
|
|
@@ -74,22 +74,24 @@ interface DialogButtonProps {
|
|
|
74
74
|
/** An ID for the root element */
|
|
75
75
|
id?: string;
|
|
76
76
|
/** Classes for the root element */
|
|
77
|
-
class?: ClassValue
|
|
77
|
+
class?: ClassValue;
|
|
78
78
|
/** Styles for the root element */
|
|
79
|
-
style?: StyleValue
|
|
79
|
+
style?: StyleValue;
|
|
80
80
|
/** The value that should be returned when this button is pressed and the Dialog was invoked by calling showContextual, showPrompt or showPopover */
|
|
81
|
-
value?: any
|
|
81
|
+
value?: any;
|
|
82
82
|
/** "confirm" if the button should respond to the Enter key or "cancel" if the button should respond to the Escape key */
|
|
83
|
-
type?: "confirm" | "cancel"
|
|
83
|
+
type?: "confirm" | "cancel";
|
|
84
84
|
/** Whether this button is disabled */
|
|
85
|
-
disabled?: boolean
|
|
85
|
+
disabled?: boolean;
|
|
86
86
|
/** Raised when the button is clicked */
|
|
87
|
-
onclick?: (e: MouseEvent) => void
|
|
87
|
+
onclick?: (e: MouseEvent) => void;
|
|
88
|
+
/** Raised when a key is pressed down */
|
|
89
|
+
onkeydown?: (e: KeyboardEvent) => void;
|
|
88
90
|
}
|
|
89
91
|
|
|
90
92
|
/**
|
|
91
93
|
* A button that is placed in a DialogFooter and signals a response by a user.
|
|
92
|
-
*
|
|
94
|
+
*
|
|
93
95
|
*/
|
|
94
96
|
declare function DialogButton(
|
|
95
97
|
$parent: ParentNode,
|
|
@@ -105,9 +107,9 @@ interface DialogFooterProps {
|
|
|
105
107
|
/** An ID for the root element */
|
|
106
108
|
id?: string;
|
|
107
109
|
/** Classes for the root element */
|
|
108
|
-
class?: ClassValue
|
|
110
|
+
class?: ClassValue;
|
|
109
111
|
/** Styles for the root element */
|
|
110
|
-
style?: StyleValue
|
|
112
|
+
style?: StyleValue;
|
|
111
113
|
}
|
|
112
114
|
|
|
113
115
|
/**
|
|
@@ -127,17 +129,17 @@ interface DialogHeaderProps {
|
|
|
127
129
|
/** An ID for the root element */
|
|
128
130
|
id?: string;
|
|
129
131
|
/** Classes for the root element */
|
|
130
|
-
class?: ClassValue
|
|
132
|
+
class?: ClassValue;
|
|
131
133
|
/** Styles for the root element */
|
|
132
|
-
style?: StyleValue
|
|
134
|
+
style?: StyleValue;
|
|
133
135
|
/** Whether the header will be announced by screen readers when the Dialog is opened */
|
|
134
|
-
ariaAnnounce?: boolean
|
|
136
|
+
ariaAnnounce?: boolean;
|
|
135
137
|
}
|
|
136
138
|
|
|
137
139
|
/**
|
|
138
140
|
* The header for a Dialog. Content in the header will be announced by screen
|
|
139
141
|
* readers when the Dialog is opened, unless ariaAnnounce is false.
|
|
140
|
-
*
|
|
142
|
+
*
|
|
141
143
|
*/
|
|
142
144
|
declare function DialogHeader(
|
|
143
145
|
$parent: ParentNode,
|
|
@@ -147,4 +149,4 @@ declare function DialogHeader(
|
|
|
147
149
|
$slots?: Record<string, SlotRender>,
|
|
148
150
|
): void;
|
|
149
151
|
|
|
150
|
-
export { Dialog, DialogBody, DialogButton, DialogFooter, DialogHeader };
|
|
152
|
+
export { Dialog, DialogBody, DialogButton, DialogFooter, DialogHeader };
|