@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
package/dist/NavMenu/index.js
CHANGED
|
@@ -1,42 +1,11 @@
|
|
|
1
|
-
|
|
2
|
-
import
|
|
3
|
-
|
|
4
|
-
|
|
5
|
-
import
|
|
6
|
-
|
|
7
|
-
|
|
8
|
-
import
|
|
9
|
-
|
|
10
|
-
|
|
11
|
-
|
|
12
|
-
|
|
13
|
-
// src/NavMenu/NavMenuGroupHeader.torp
|
|
14
|
-
import NavMenuGroupHeader_default from "./NavMenuGroupHeader.torp";
|
|
15
|
-
|
|
16
|
-
// src/NavMenu/NavMenuLink.torp
|
|
17
|
-
import NavMenuLink_default from "./NavMenuLink.torp";
|
|
18
|
-
|
|
19
|
-
// src/NavMenu/NavMenuPopout.torp
|
|
20
|
-
import NavMenuPopout_default from "./NavMenuPopout.torp";
|
|
21
|
-
|
|
22
|
-
// src/NavMenu/NavMenuPopoutButton.torp
|
|
23
|
-
import NavMenuPopoutButton_default from "./NavMenuPopoutButton.torp";
|
|
24
|
-
|
|
25
|
-
// src/NavMenu/NavMenuPopoutContent.torp
|
|
26
|
-
import NavMenuPopoutContent_default from "./NavMenuPopoutContent.torp";
|
|
27
|
-
|
|
28
|
-
// src/NavMenu/NavMenuSeparator.torp
|
|
29
|
-
import NavMenuSeparator_default from "./NavMenuSeparator.torp";
|
|
30
|
-
export {
|
|
31
|
-
NavMenu_default as NavMenu,
|
|
32
|
-
NavMenuButton_default as NavMenuButton,
|
|
33
|
-
NavMenuElement_default as NavMenuElement,
|
|
34
|
-
NavMenuGroup_default as NavMenuGroup,
|
|
35
|
-
NavMenuGroupHeader_default as NavMenuGroupHeader,
|
|
36
|
-
NavMenuLink_default as NavMenuLink,
|
|
37
|
-
NavMenuPopout_default as NavMenuPopout,
|
|
38
|
-
NavMenuPopoutButton_default as NavMenuPopoutButton,
|
|
39
|
-
NavMenuPopoutContent_default as NavMenuPopoutContent,
|
|
40
|
-
NavMenuSeparator_default as NavMenuSeparator
|
|
41
|
-
};
|
|
42
|
-
//# sourceMappingURL=index.js.map
|
|
1
|
+
import NavMenu from "./NavMenu.torp";
|
|
2
|
+
import NavMenuButton from "./NavMenuButton.torp";
|
|
3
|
+
import NavMenuElement from "./NavMenuElement.torp";
|
|
4
|
+
import NavMenuGroup from "./NavMenuGroup.torp";
|
|
5
|
+
import NavMenuGroupHeader from "./NavMenuGroupHeader.torp";
|
|
6
|
+
import NavMenuLink from "./NavMenuLink.torp";
|
|
7
|
+
import NavMenuPopout from "./NavMenuPopout.torp";
|
|
8
|
+
import NavMenuPopoutContent from "./NavMenuPopoutContent.torp";
|
|
9
|
+
import NavMenuPopoutTrigger from "./NavMenuPopoutTrigger.torp";
|
|
10
|
+
import NavMenuSeparator from "./NavMenuSeparator.torp";
|
|
11
|
+
export { NavMenu, NavMenuButton, NavMenuElement, NavMenuGroup, NavMenuGroupHeader, NavMenuLink, NavMenuPopout, NavMenuPopoutContent, NavMenuPopoutTrigger, NavMenuSeparator };
|
|
@@ -1,19 +1,19 @@
|
|
|
1
|
-
import type { ClassValue, StyleValue } from "@torpor/view";
|
|
2
|
-
import {
|
|
1
|
+
import type { Bindable, ClassValue, StyleValue } from "@torpor/view";
|
|
2
|
+
import { type NotificationContext, NotificationContextName } from "./NotificationTypes";
|
|
3
3
|
|
|
4
4
|
interface NotificationProps {
|
|
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 notification is visible */
|
|
12
|
-
visible
|
|
12
|
+
visible: Bindable<boolean | undefined>;
|
|
13
13
|
/** The duration, in milliseconds, to keep the notification visible */
|
|
14
|
-
duration?: number
|
|
14
|
+
duration?: number;
|
|
15
15
|
/** Raised when the notification has closed, either after the duration has elapsed, or when the user has pressed the close button */
|
|
16
|
-
onclose?: () => void
|
|
16
|
+
onclose?: () => void;
|
|
17
17
|
}
|
|
18
18
|
|
|
19
19
|
/**
|
|
@@ -26,25 +26,18 @@ export default function Notification($props: NotificationProps | undefined) {
|
|
|
26
26
|
let defaultDuration = 5000;
|
|
27
27
|
|
|
28
28
|
let $state = $watch({
|
|
29
|
-
visible:
|
|
29
|
+
visible: $props?.visible ?? true,
|
|
30
30
|
});
|
|
31
31
|
|
|
32
|
-
$
|
|
33
|
-
$state.visible = $props?.visible ?? true;
|
|
34
|
-
});
|
|
35
|
-
$run(() => {
|
|
36
|
-
if ($props !== undefined) {
|
|
37
|
-
$props.visible = $state.visible;
|
|
38
|
-
}
|
|
39
|
-
});
|
|
32
|
+
$bind($state, $props, "visible");
|
|
40
33
|
|
|
41
34
|
// Set the context to pass down to items
|
|
42
35
|
let context: NotificationContext = {
|
|
43
|
-
closeNotification
|
|
36
|
+
closeNotification,
|
|
44
37
|
};
|
|
45
38
|
$context[NotificationContextName] = context;
|
|
46
39
|
|
|
47
|
-
$
|
|
40
|
+
$onmount(() => {
|
|
48
41
|
setTimeout(closeNotification, $props?.duration ?? defaultDuration);
|
|
49
42
|
});
|
|
50
43
|
|
|
@@ -58,12 +51,7 @@ export default function Notification($props: NotificationProps | undefined) {
|
|
|
58
51
|
|
|
59
52
|
@render {
|
|
60
53
|
@if ($state.visible) {
|
|
61
|
-
<div
|
|
62
|
-
{$props?.id}
|
|
63
|
-
class={["torp-notification", $props?.class]}
|
|
64
|
-
{$props?.style}
|
|
65
|
-
role="alert"
|
|
66
|
-
>
|
|
54
|
+
<div {$props?.id} class={["torp-notification", $props?.class]} {$props?.style} role="alert">
|
|
67
55
|
<slot />
|
|
68
56
|
</div>
|
|
69
57
|
}
|
|
@@ -1,13 +1,15 @@
|
|
|
1
1
|
import type { ClassValue, StyleValue } from "@torpor/view";
|
|
2
|
-
import {
|
|
2
|
+
import { type NotificationContext, NotificationContextName } from "./NotificationTypes";
|
|
3
3
|
|
|
4
4
|
interface NotificationCloseProps {
|
|
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
|
+
/** An ARIA label for the close button, for screen readers when the button contains no text */
|
|
12
|
+
ariaLabel?: string;
|
|
11
13
|
}
|
|
12
14
|
|
|
13
15
|
/**
|
|
@@ -31,6 +33,7 @@ export default function NotificationClose($props: NotificationCloseProps | undef
|
|
|
31
33
|
class={["torp-notification-close", $props?.class]}
|
|
32
34
|
{$props?.style}
|
|
33
35
|
type="button"
|
|
36
|
+
aria-label={$props?.ariaLabel ?? "Dismiss"}
|
|
34
37
|
onclick={handleClick}
|
|
35
38
|
>
|
|
36
39
|
<slot />
|
|
@@ -4,9 +4,9 @@ interface NotificationContainerProps {
|
|
|
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
|
/**
|
|
@@ -15,11 +15,7 @@ interface NotificationContainerProps {
|
|
|
15
15
|
*/
|
|
16
16
|
export default function NotificationContainer($props: NotificationContainerProps | undefined) {
|
|
17
17
|
@render {
|
|
18
|
-
<div
|
|
19
|
-
{$props?.id}
|
|
20
|
-
class={["torp-notification-container", $props?.class]}
|
|
21
|
-
{$props?.style}
|
|
22
|
-
>
|
|
18
|
+
<div {$props?.id} class={["torp-notification-container", $props?.class]} {$props?.style}>
|
|
23
19
|
<slot />
|
|
24
20
|
</div>
|
|
25
21
|
}
|
|
@@ -4,9 +4,9 @@ interface NotificationContentProps {
|
|
|
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 NotificationContentProps {
|
|
|
14
14
|
*/
|
|
15
15
|
export default function NotificationContent($props: NotificationContentProps | undefined) {
|
|
16
16
|
@render {
|
|
17
|
-
<div
|
|
18
|
-
{$props?.id}
|
|
19
|
-
class={["torp-notification-content", $props?.class]}
|
|
20
|
-
{$props?.style}
|
|
21
|
-
>
|
|
17
|
+
<div {$props?.id} class={["torp-notification-content", $props?.class]} {$props?.style}>
|
|
22
18
|
<slot />
|
|
23
19
|
</div>
|
|
24
20
|
}
|
|
@@ -5,15 +5,15 @@ interface NotificationProps {
|
|
|
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 notification is visible */
|
|
12
|
-
visible
|
|
12
|
+
visible: Bindable<boolean | undefined>;
|
|
13
13
|
/** The duration, in milliseconds, to keep the notification visible */
|
|
14
|
-
duration?: number
|
|
14
|
+
duration?: number;
|
|
15
15
|
/** Raised when the notification has closed, either after the duration has elapsed, or when the user has pressed the close button */
|
|
16
|
-
onclose?: () => void
|
|
16
|
+
onclose?: () => void;
|
|
17
17
|
}
|
|
18
18
|
|
|
19
19
|
/**
|
|
@@ -36,9 +36,11 @@ interface NotificationCloseProps {
|
|
|
36
36
|
/** An ID for the root element */
|
|
37
37
|
id?: string;
|
|
38
38
|
/** Classes for the root element */
|
|
39
|
-
class?: ClassValue
|
|
39
|
+
class?: ClassValue;
|
|
40
40
|
/** Styles for the root element */
|
|
41
|
-
style?: StyleValue
|
|
41
|
+
style?: StyleValue;
|
|
42
|
+
/** An ARIA label for the close button, for screen readers when the button contains no text */
|
|
43
|
+
ariaLabel?: string;
|
|
42
44
|
}
|
|
43
45
|
|
|
44
46
|
/**
|
|
@@ -58,9 +60,9 @@ interface NotificationContainerProps {
|
|
|
58
60
|
/** An ID for the root element */
|
|
59
61
|
id?: string;
|
|
60
62
|
/** Classes for the root element */
|
|
61
|
-
class?: ClassValue
|
|
63
|
+
class?: ClassValue;
|
|
62
64
|
/** Styles for the root element */
|
|
63
|
-
style?: StyleValue
|
|
65
|
+
style?: StyleValue;
|
|
64
66
|
}
|
|
65
67
|
|
|
66
68
|
/**
|
|
@@ -81,9 +83,9 @@ interface NotificationContentProps {
|
|
|
81
83
|
/** An ID for the root element */
|
|
82
84
|
id?: string;
|
|
83
85
|
/** Classes for the root element */
|
|
84
|
-
class?: ClassValue
|
|
86
|
+
class?: ClassValue;
|
|
85
87
|
/** Styles for the root element */
|
|
86
|
-
style?: StyleValue
|
|
88
|
+
style?: StyleValue;
|
|
87
89
|
}
|
|
88
90
|
|
|
89
91
|
/**
|
|
@@ -97,4 +99,5 @@ declare function NotificationContent(
|
|
|
97
99
|
$slots?: Record<string, SlotRender>,
|
|
98
100
|
): void;
|
|
99
101
|
|
|
100
|
-
export { Notification, NotificationClose, NotificationContainer, NotificationContent };
|
|
102
|
+
export { Notification, NotificationClose, NotificationContainer, NotificationContent };
|
|
103
|
+
export { default as showNotification } from "./showNotification";
|
|
@@ -1,36 +1,26 @@
|
|
|
1
|
-
// src/Notification/Notification.torp
|
|
2
|
-
import Notification_default from "./Notification.torp";
|
|
3
|
-
|
|
4
|
-
// src/Notification/NotificationClose.torp
|
|
5
|
-
import NotificationClose_default from "./NotificationClose.torp";
|
|
6
|
-
|
|
7
|
-
// src/Notification/NotificationContainer.torp
|
|
8
|
-
import NotificationContainer_default from "./NotificationContainer.torp";
|
|
9
|
-
|
|
10
|
-
// src/Notification/NotificationContent.torp
|
|
11
|
-
import NotificationContent_default from "./NotificationContent.torp";
|
|
12
|
-
|
|
13
|
-
// src/Notification/showNotification.ts
|
|
14
1
|
import { mount } from "@torpor/view";
|
|
2
|
+
import Notification from "./Notification.torp";
|
|
3
|
+
import NotificationClose from "./NotificationClose.torp";
|
|
4
|
+
import NotificationContainer from "./NotificationContainer.torp";
|
|
5
|
+
import NotificationContent from "./NotificationContent.torp";
|
|
6
|
+
//#region src/Notification/showNotification.ts
|
|
7
|
+
/**
|
|
8
|
+
* Shows a notification component in code.
|
|
9
|
+
* @param notification The notification component
|
|
10
|
+
* @param props The properties for the notification component
|
|
11
|
+
* @param target The target element to show the notification in
|
|
12
|
+
*/
|
|
15
13
|
function showNotification(notification, props, target) {
|
|
16
|
-
|
|
17
|
-
|
|
18
|
-
|
|
19
|
-
|
|
20
|
-
|
|
21
|
-
|
|
22
|
-
|
|
23
|
-
|
|
24
|
-
fragment.append(target.firstChild);
|
|
25
|
-
}
|
|
26
|
-
mount(target, notification, props);
|
|
27
|
-
target.prepend(fragment);
|
|
14
|
+
if (!target) {
|
|
15
|
+
target = document.getElementsByClassName("torp-notification-container")[0];
|
|
16
|
+
if (!target) throw new Error("No notification container found");
|
|
17
|
+
}
|
|
18
|
+
var fragment = document.createDocumentFragment();
|
|
19
|
+
while (target.firstChild) fragment.append(target.firstChild);
|
|
20
|
+
mount(target, notification, props);
|
|
21
|
+
target.prepend(fragment);
|
|
28
22
|
}
|
|
29
|
-
|
|
30
|
-
|
|
31
|
-
|
|
32
|
-
NotificationContainer_default as NotificationContainer,
|
|
33
|
-
NotificationContent_default as NotificationContent,
|
|
34
|
-
showNotification
|
|
35
|
-
};
|
|
23
|
+
//#endregion
|
|
24
|
+
export { Notification, NotificationClose, NotificationContainer, NotificationContent, showNotification };
|
|
25
|
+
|
|
36
26
|
//# sourceMappingURL=index.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../../src/Notification/showNotification.ts"],"sourcesContent":["import { mount } from \"@torpor/view\";\n\n/**\n * Shows a notification component in code.\n * @param notification The notification component\n * @param props The properties for the notification component\n * @param target The target element to show the notification in\n */\nexport default function showNotification(notification: any, props: any, target?: Element): void {\n\tif (!target) {\n\t\t// Put the notification in the first NotificationContainer, or the\n\t\t// document body if there are no NotificationContainers\n\t\ttarget = document.getElementsByClassName(\"torp-notification-container\")[0];\n\t\tif (!target) {\n\t\t\tthrow new Error(\"No notification container found\");\n\t\t}\n\t}\n\n\t// HACK: Should allow mounting in a non-empty container\n\t// Move existing nodes into a fragment, and add them back after mounting\n\tvar fragment = document.createDocumentFragment();\n\twhile (target.firstChild) {\n\t\tfragment.append(target.firstChild);\n\t}\n\n\t// Create the notification\n\tmount(target, notification, props);\n\n\ttarget.prepend(fragment);\n}\n"],"mappings":"
|
|
1
|
+
{"version":3,"file":"index.js","names":[],"sources":["../../src/Notification/showNotification.ts"],"sourcesContent":["import { mount } from \"@torpor/view\";\n\n/**\n * Shows a notification component in code.\n * @param notification The notification component\n * @param props The properties for the notification component\n * @param target The target element to show the notification in\n */\nexport default function showNotification(notification: any, props: any, target?: Element): void {\n\tif (!target) {\n\t\t// Put the notification in the first NotificationContainer, or the\n\t\t// document body if there are no NotificationContainers\n\t\ttarget = document.getElementsByClassName(\"torp-notification-container\")[0];\n\t\tif (!target) {\n\t\t\tthrow new Error(\"No notification container found\");\n\t\t}\n\t}\n\n\t// HACK: Should allow mounting in a non-empty container\n\t// Move existing nodes into a fragment, and add them back after mounting\n\tvar fragment = document.createDocumentFragment();\n\twhile (target.firstChild) {\n\t\tfragment.append(target.firstChild);\n\t}\n\n\t// Create the notification\n\tmount(target, notification, props);\n\n\ttarget.prepend(fragment);\n}\n"],"mappings":";;;;;;;;;;;;AAQA,SAAwB,iBAAiB,cAAmB,OAAY,QAAwB;CAC/F,IAAI,CAAC,QAAQ;EAGZ,SAAS,SAAS,uBAAuB,6BAA6B,CAAC,CAAC;EACxE,IAAI,CAAC,QACJ,MAAM,IAAI,MAAM,iCAAiC;CAEnD;CAIA,IAAI,WAAW,SAAS,uBAAuB;CAC/C,OAAO,OAAO,YACb,SAAS,OAAO,OAAO,UAAU;CAIlC,MAAM,QAAQ,cAAc,KAAK;CAEjC,OAAO,QAAQ,QAAQ;AACxB"}
|
|
@@ -0,0 +1,255 @@
|
|
|
1
|
+
import type { Bindable, ClassValue, StyleValue } from "@torpor/view";
|
|
2
|
+
import $handle from "../utils/$handle";
|
|
3
|
+
import {
|
|
4
|
+
type FieldContext,
|
|
5
|
+
FieldContextName,
|
|
6
|
+
type FormContext,
|
|
7
|
+
FormContextName,
|
|
8
|
+
} from "../Form/FormTypes";
|
|
9
|
+
import FormValues from "../Form/FormValues.torp";
|
|
10
|
+
import createFormField from "../utils/formField";
|
|
11
|
+
|
|
12
|
+
interface NumberInputProps {
|
|
13
|
+
/** An ID for the root element */
|
|
14
|
+
id?: string;
|
|
15
|
+
/** Classes for the root element */
|
|
16
|
+
class?: ClassValue;
|
|
17
|
+
/** Styles for the root element */
|
|
18
|
+
style?: StyleValue;
|
|
19
|
+
/** The current value of the input; null if the field is empty */
|
|
20
|
+
value?: Bindable<number | null>;
|
|
21
|
+
/** The minimum allowed value */
|
|
22
|
+
min?: number;
|
|
23
|
+
/** The maximum allowed value */
|
|
24
|
+
max?: number;
|
|
25
|
+
/** The amount by which the value is increased or decreased (default 1) */
|
|
26
|
+
step?: number;
|
|
27
|
+
/** If set to true, the user cannot interact with this input */
|
|
28
|
+
disabled?: boolean;
|
|
29
|
+
/** An accessible name for the input */
|
|
30
|
+
ariaLabel?: string;
|
|
31
|
+
/** The name of the component's form data field */
|
|
32
|
+
name?: string;
|
|
33
|
+
/** Raised when the value has changed */
|
|
34
|
+
onchange?: (value: number | null) => void;
|
|
35
|
+
}
|
|
36
|
+
|
|
37
|
+
/**
|
|
38
|
+
* An input where the user enters or steps a number between minimum and
|
|
39
|
+
* maximum values, by typing, by pressing the arrow keys, or by pressing the
|
|
40
|
+
* Home, End, PageUp or PageDown keys.
|
|
41
|
+
*
|
|
42
|
+
* See [the WAI ARIA guidelines for Spin Buttons](https://www.w3.org/WAI/ARIA/apg/patterns/spinbutton/).
|
|
43
|
+
*/
|
|
44
|
+
export default function NumberInput($props: NumberInputProps | undefined) {
|
|
45
|
+
let input: HTMLInputElement;
|
|
46
|
+
|
|
47
|
+
// Wire up the enclosing Form and Field, if any
|
|
48
|
+
const form = createFormField(
|
|
49
|
+
$props?.name,
|
|
50
|
+
$context[FormContextName] as FormContext | undefined,
|
|
51
|
+
$context[FieldContextName] as FieldContext | undefined,
|
|
52
|
+
);
|
|
53
|
+
|
|
54
|
+
function getMin(): number | undefined {
|
|
55
|
+
return $props?.min;
|
|
56
|
+
}
|
|
57
|
+
function getMax(): number | undefined {
|
|
58
|
+
return $props?.max;
|
|
59
|
+
}
|
|
60
|
+
function getStep(): number {
|
|
61
|
+
const step = $props?.step ?? 1;
|
|
62
|
+
return step > 0 ? step : 1;
|
|
63
|
+
}
|
|
64
|
+
function getDisabled(): boolean {
|
|
65
|
+
return $props?.disabled === true;
|
|
66
|
+
}
|
|
67
|
+
|
|
68
|
+
// The number of decimal places implied by the step, e.g. 0.25 -> 2
|
|
69
|
+
function getPrecision(): number {
|
|
70
|
+
const text = String(getStep());
|
|
71
|
+
const dot = text.indexOf(".");
|
|
72
|
+
return dot === -1 ? 0 : text.length - dot - 1;
|
|
73
|
+
}
|
|
74
|
+
|
|
75
|
+
let $state = $watch({
|
|
76
|
+
value: null as number | null,
|
|
77
|
+
text: "",
|
|
78
|
+
editing: false,
|
|
79
|
+
});
|
|
80
|
+
|
|
81
|
+
$bind($state, $props, "value");
|
|
82
|
+
|
|
83
|
+
// Keep the stored value clamped, so that out-of-range initial values
|
|
84
|
+
// don't later surface as user changes
|
|
85
|
+
$run(() => {
|
|
86
|
+
const clamped = clamp($state.value);
|
|
87
|
+
if (clamped !== $state.value) {
|
|
88
|
+
$state.value = clamped;
|
|
89
|
+
}
|
|
90
|
+
});
|
|
91
|
+
|
|
92
|
+
// The text tracks the value, unless the user is typing
|
|
93
|
+
$run(() => {
|
|
94
|
+
if (!$state.editing) {
|
|
95
|
+
$state.text = $state.value == null ? "" : String($state.value);
|
|
96
|
+
}
|
|
97
|
+
});
|
|
98
|
+
|
|
99
|
+
// Keep the input's value in sync with the text; typing sets the property
|
|
100
|
+
// directly, so an attribute alone would not update it
|
|
101
|
+
function syncInput() {
|
|
102
|
+
if (input && !$state.editing && input.value !== $state.text) {
|
|
103
|
+
input.value = $state.text;
|
|
104
|
+
}
|
|
105
|
+
}
|
|
106
|
+
$run(() => {
|
|
107
|
+
const text = $state.text;
|
|
108
|
+
const editing = $state.editing;
|
|
109
|
+
if (input && !editing && input.value !== text) {
|
|
110
|
+
input.value = text;
|
|
111
|
+
}
|
|
112
|
+
});
|
|
113
|
+
$onmount(() => syncInput());
|
|
114
|
+
|
|
115
|
+
// Dispatch the change event when a committed value changes
|
|
116
|
+
$handle((first) => {
|
|
117
|
+
const value = $state.value;
|
|
118
|
+
if (!first && !$state.editing) $props?.onchange?.(value);
|
|
119
|
+
});
|
|
120
|
+
|
|
121
|
+
function clamp(value: number | null): number | null {
|
|
122
|
+
if (value == null) return null;
|
|
123
|
+
let result = value;
|
|
124
|
+
if (getMin() != null) result = Math.max(getMin()!, result);
|
|
125
|
+
if (getMax() != null) result = Math.min(getMax()!, result);
|
|
126
|
+
return round(result);
|
|
127
|
+
}
|
|
128
|
+
|
|
129
|
+
function round(value: number): number {
|
|
130
|
+
const precision = getPrecision();
|
|
131
|
+
return precision ? Number(value.toFixed(precision)) : value;
|
|
132
|
+
}
|
|
133
|
+
|
|
134
|
+
function parse(text: string): number | null {
|
|
135
|
+
const trimmed = text.trim();
|
|
136
|
+
if (trimmed === "") return null;
|
|
137
|
+
const parsed = Number(trimmed);
|
|
138
|
+
return Number.isFinite(parsed) ? parsed : null;
|
|
139
|
+
}
|
|
140
|
+
|
|
141
|
+
function setValue(value: number | null) {
|
|
142
|
+
const next = clamp(value);
|
|
143
|
+
$state.editing = false;
|
|
144
|
+
if (next !== $state.value) {
|
|
145
|
+
$state.value = next;
|
|
146
|
+
form.handleInput();
|
|
147
|
+
}
|
|
148
|
+
// The text always matches what was committed
|
|
149
|
+
$state.text = next == null ? "" : String(next);
|
|
150
|
+
}
|
|
151
|
+
|
|
152
|
+
function stepValue(delta: number) {
|
|
153
|
+
if (getDisabled()) return;
|
|
154
|
+
const base = $state.value ?? 0;
|
|
155
|
+
setValue(base + delta);
|
|
156
|
+
}
|
|
157
|
+
|
|
158
|
+
function handleInput(e: Event) {
|
|
159
|
+
const el = e.currentTarget as HTMLInputElement;
|
|
160
|
+
$state.editing = true;
|
|
161
|
+
$state.text = el.value;
|
|
162
|
+
}
|
|
163
|
+
|
|
164
|
+
// Typing commits on blur or Enter; invalid text reverts
|
|
165
|
+
function commit() {
|
|
166
|
+
const text = $state.text;
|
|
167
|
+
$state.editing = false;
|
|
168
|
+
const parsed = parse(text);
|
|
169
|
+
if (parsed == null && text.trim() !== "") {
|
|
170
|
+
// Not a number: revert to the last committed value
|
|
171
|
+
$state.text = $state.value == null ? "" : String($state.value);
|
|
172
|
+
return;
|
|
173
|
+
}
|
|
174
|
+
setValue(parsed);
|
|
175
|
+
}
|
|
176
|
+
|
|
177
|
+
function handleBlur() {
|
|
178
|
+
commit();
|
|
179
|
+
form.handleBlur();
|
|
180
|
+
}
|
|
181
|
+
|
|
182
|
+
function handleKey(e: KeyboardEvent) {
|
|
183
|
+
if (getDisabled()) return;
|
|
184
|
+
|
|
185
|
+
switch (e.key) {
|
|
186
|
+
case "ArrowUp": {
|
|
187
|
+
e.preventDefault();
|
|
188
|
+
stepValue(getStep());
|
|
189
|
+
break;
|
|
190
|
+
}
|
|
191
|
+
case "ArrowDown": {
|
|
192
|
+
e.preventDefault();
|
|
193
|
+
stepValue(-getStep());
|
|
194
|
+
break;
|
|
195
|
+
}
|
|
196
|
+
case "PageUp": {
|
|
197
|
+
e.preventDefault();
|
|
198
|
+
stepValue(getStep() * 10);
|
|
199
|
+
break;
|
|
200
|
+
}
|
|
201
|
+
case "PageDown": {
|
|
202
|
+
e.preventDefault();
|
|
203
|
+
stepValue(-getStep() * 10);
|
|
204
|
+
break;
|
|
205
|
+
}
|
|
206
|
+
case "Home": {
|
|
207
|
+
if (getMin() != null) {
|
|
208
|
+
e.preventDefault();
|
|
209
|
+
setValue(getMin()!);
|
|
210
|
+
}
|
|
211
|
+
break;
|
|
212
|
+
}
|
|
213
|
+
case "End": {
|
|
214
|
+
if (getMax() != null) {
|
|
215
|
+
e.preventDefault();
|
|
216
|
+
setValue(getMax()!);
|
|
217
|
+
}
|
|
218
|
+
break;
|
|
219
|
+
}
|
|
220
|
+
case "Enter": {
|
|
221
|
+
e.preventDefault();
|
|
222
|
+
commit();
|
|
223
|
+
break;
|
|
224
|
+
}
|
|
225
|
+
}
|
|
226
|
+
}
|
|
227
|
+
|
|
228
|
+
@render {
|
|
229
|
+
<input
|
|
230
|
+
id={$props?.id}
|
|
231
|
+
class={["torp-number-input", $props?.class]}
|
|
232
|
+
{$props?.style}
|
|
233
|
+
type="text"
|
|
234
|
+
inputmode="decimal"
|
|
235
|
+
role="spinbutton"
|
|
236
|
+
value={$state.text}
|
|
237
|
+
&ref={input}
|
|
238
|
+
tabindex={getDisabled() ? -1 : 0}
|
|
239
|
+
aria-label={$props?.ariaLabel}
|
|
240
|
+
aria-valuemin={getMin()}
|
|
241
|
+
aria-valuemax={getMax()}
|
|
242
|
+
aria-valuenow={$state.value == null ? undefined : $state.value}
|
|
243
|
+
aria-disabled={getDisabled() ? "true" : undefined}
|
|
244
|
+
data-valid={form.valid ? "valid" : "invalid"}
|
|
245
|
+
aria-describedby={form.messageId}
|
|
246
|
+
aria-invalid={form.inField && !form.valid ? "true" : undefined}
|
|
247
|
+
disabled={getDisabled()}
|
|
248
|
+
oninput={handleInput}
|
|
249
|
+
onblur={handleBlur}
|
|
250
|
+
onkeydown={handleKey}
|
|
251
|
+
/>
|
|
252
|
+
|
|
253
|
+
<FormValues name={form.name} value={$state.value} />
|
|
254
|
+
}
|
|
255
|
+
}
|
|
@@ -0,0 +1,44 @@
|
|
|
1
|
+
import { type SlotRender } from "@torpor/view";
|
|
2
|
+
|
|
3
|
+
|
|
4
|
+
interface NumberInputProps {
|
|
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 current value of the input; null if the field is empty */
|
|
12
|
+
value?: Bindable<number | null>;
|
|
13
|
+
/** The minimum allowed value */
|
|
14
|
+
min?: number;
|
|
15
|
+
/** The maximum allowed value */
|
|
16
|
+
max?: number;
|
|
17
|
+
/** The amount by which the value is increased or decreased (default 1) */
|
|
18
|
+
step?: number;
|
|
19
|
+
/** If set to true, the user cannot interact with this input */
|
|
20
|
+
disabled?: boolean;
|
|
21
|
+
/** An accessible name for the input */
|
|
22
|
+
ariaLabel?: string;
|
|
23
|
+
/** The name of the component's form data field */
|
|
24
|
+
name?: string;
|
|
25
|
+
/** Raised when the value has changed */
|
|
26
|
+
onchange?: (value: number | null) => void;
|
|
27
|
+
}
|
|
28
|
+
|
|
29
|
+
/**
|
|
30
|
+
* An input where the user enters or steps a number between minimum and
|
|
31
|
+
* maximum values, by typing, by pressing the arrow keys, or by pressing the
|
|
32
|
+
* Home, End, PageUp or PageDown keys.
|
|
33
|
+
*
|
|
34
|
+
* See [the WAI ARIA guidelines for Spin Buttons](https://www.w3.org/WAI/ARIA/apg/patterns/spinbutton/).
|
|
35
|
+
*/
|
|
36
|
+
declare function NumberInput(
|
|
37
|
+
$parent: ParentNode,
|
|
38
|
+
$anchor: Node | null,
|
|
39
|
+
$props: NumberInputProps | undefined,
|
|
40
|
+
$context?: Record<PropertyKey, any>,
|
|
41
|
+
$slots?: Record<string, SlotRender>,
|
|
42
|
+
): void;
|
|
43
|
+
|
|
44
|
+
export { NumberInput };
|