@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,152 @@
|
|
|
1
|
+
import type { ClassValue, StyleValue } from "@torpor/view";
|
|
2
|
+
import {
|
|
3
|
+
type ItemState,
|
|
4
|
+
type PageNumber,
|
|
5
|
+
type PaginationContext,
|
|
6
|
+
PaginationContextName,
|
|
7
|
+
} from "./PaginationTypes";
|
|
8
|
+
import buildPages from "./buildPages";
|
|
9
|
+
|
|
10
|
+
interface PaginationProps {
|
|
11
|
+
/** An ID for the root element */
|
|
12
|
+
id?: string;
|
|
13
|
+
/** Classes for the root element */
|
|
14
|
+
class?: ClassValue;
|
|
15
|
+
/** Styles for the root element */
|
|
16
|
+
style?: StyleValue;
|
|
17
|
+
/** The total number of pages (or items if the page size is greater than 1) */
|
|
18
|
+
count: number;
|
|
19
|
+
/** The active page */
|
|
20
|
+
page: number;
|
|
21
|
+
/** The number of items on each page **/
|
|
22
|
+
pageSize?: number;
|
|
23
|
+
/** The maximum number of pages to display (gaps will be indicated with ellipses) **/
|
|
24
|
+
maxPages?: number;
|
|
25
|
+
/** Accessible label for the pagination navigation */
|
|
26
|
+
"aria-label"?: string;
|
|
27
|
+
/** Called when a user wants to jump to a specific page (e.g., via ellipsis) */
|
|
28
|
+
onjump?: (targetPage: number, jumpTo: (page: number) => void) => void;
|
|
29
|
+
}
|
|
30
|
+
|
|
31
|
+
/**
|
|
32
|
+
* Buttons with page numbers that can be used to move between pages.
|
|
33
|
+
*/
|
|
34
|
+
export default function Pagination($props: PaginationProps) {
|
|
35
|
+
let $state = $watch({
|
|
36
|
+
get pages() {
|
|
37
|
+
return buildPages($props.count, $props.page, $props.pageSize, $props.maxPages);
|
|
38
|
+
},
|
|
39
|
+
});
|
|
40
|
+
|
|
41
|
+
let itemStates: ItemState[] = [];
|
|
42
|
+
|
|
43
|
+
// Put stuff into a PaginationContext
|
|
44
|
+
const context: PaginationContext = {
|
|
45
|
+
registerItem,
|
|
46
|
+
removeItem,
|
|
47
|
+
toggleItem,
|
|
48
|
+
handleItemKey,
|
|
49
|
+
jumpToPage: (page: number) => {
|
|
50
|
+
$props.page = Math.max(1, Math.min($props.count, page));
|
|
51
|
+
},
|
|
52
|
+
};
|
|
53
|
+
$context[PaginationContextName] = context;
|
|
54
|
+
|
|
55
|
+
function registerItem(item: ItemState) {
|
|
56
|
+
// Add the item's state to the array
|
|
57
|
+
itemStates.push(item);
|
|
58
|
+
}
|
|
59
|
+
|
|
60
|
+
function removeItem(target: PageNumber) {
|
|
61
|
+
// Remove the item
|
|
62
|
+
const index = itemStates.findIndex((i) => i.target === target);
|
|
63
|
+
if (index != -1) {
|
|
64
|
+
itemStates.splice(index, 1);
|
|
65
|
+
}
|
|
66
|
+
}
|
|
67
|
+
|
|
68
|
+
function toggleItem(target: PageNumber) {
|
|
69
|
+
switch (target) {
|
|
70
|
+
case "start": {
|
|
71
|
+
$props.page = 1;
|
|
72
|
+
break;
|
|
73
|
+
}
|
|
74
|
+
case "previous": {
|
|
75
|
+
$props.page = Math.max(1, $props.page - 1);
|
|
76
|
+
break;
|
|
77
|
+
}
|
|
78
|
+
case "next": {
|
|
79
|
+
$props.page = Math.min($props.count, $props.page + 1);
|
|
80
|
+
break;
|
|
81
|
+
}
|
|
82
|
+
case "end": {
|
|
83
|
+
$props.page = $props.count;
|
|
84
|
+
break;
|
|
85
|
+
}
|
|
86
|
+
case "startgap":
|
|
87
|
+
case "endgap": {
|
|
88
|
+
if ($props.onjump) {
|
|
89
|
+
$props.onjump($props.page, context.jumpToPage);
|
|
90
|
+
}
|
|
91
|
+
break;
|
|
92
|
+
}
|
|
93
|
+
default: {
|
|
94
|
+
$props.page = target;
|
|
95
|
+
}
|
|
96
|
+
}
|
|
97
|
+
|
|
98
|
+
const item = itemStates.find((i) => i.target === target);
|
|
99
|
+
if (item) {
|
|
100
|
+
item.setFocused();
|
|
101
|
+
}
|
|
102
|
+
}
|
|
103
|
+
|
|
104
|
+
function handleFocus(e: FocusEvent & { currentTarget: EventTarget & HTMLElement }) {
|
|
105
|
+
// Focus the first button so that its key events can be triggered by the user
|
|
106
|
+
const el = e.currentTarget.getElementsByTagName("button")[0];
|
|
107
|
+
if (el) {
|
|
108
|
+
el.focus();
|
|
109
|
+
}
|
|
110
|
+
}
|
|
111
|
+
|
|
112
|
+
function handleItemKey(e: KeyboardEvent) {
|
|
113
|
+
switch (e.key) {
|
|
114
|
+
case "ArrowLeft": {
|
|
115
|
+
toggleItem("previous");
|
|
116
|
+
e.preventDefault();
|
|
117
|
+
break;
|
|
118
|
+
}
|
|
119
|
+
case "ArrowRight": {
|
|
120
|
+
toggleItem("next");
|
|
121
|
+
e.preventDefault();
|
|
122
|
+
break;
|
|
123
|
+
}
|
|
124
|
+
case "Home": {
|
|
125
|
+
toggleItem("start");
|
|
126
|
+
e.preventDefault();
|
|
127
|
+
break;
|
|
128
|
+
}
|
|
129
|
+
case "End": {
|
|
130
|
+
toggleItem("end");
|
|
131
|
+
e.preventDefault();
|
|
132
|
+
break;
|
|
133
|
+
}
|
|
134
|
+
}
|
|
135
|
+
}
|
|
136
|
+
|
|
137
|
+
@render {
|
|
138
|
+
@if ($props.count > 0) {
|
|
139
|
+
<div
|
|
140
|
+
{$props?.id}
|
|
141
|
+
class={["torp-pagination", $props?.class]}
|
|
142
|
+
{$props?.style}
|
|
143
|
+
role="navigation"
|
|
144
|
+
aria-label={$props["aria-label"] ?? "Pagination"}
|
|
145
|
+
tabindex="0"
|
|
146
|
+
onfocus={handleFocus}
|
|
147
|
+
>
|
|
148
|
+
<slot {$state.pages} />
|
|
149
|
+
</div>
|
|
150
|
+
}
|
|
151
|
+
}
|
|
152
|
+
}
|
|
@@ -0,0 +1,137 @@
|
|
|
1
|
+
import type { ClassValue, StyleValue } from "@torpor/view";
|
|
2
|
+
import ChevronDoubleLeft from "../icons/ChevronDoubleLeft.torp";
|
|
3
|
+
import ChevronDoubleRight from "../icons/ChevronDoubleRight.torp";
|
|
4
|
+
import ChevronLeft from "../icons/ChevronLeft.torp";
|
|
5
|
+
import ChevronRight from "../icons/ChevronRight.torp";
|
|
6
|
+
import { type PageNumber, type PaginationContext, PaginationContextName } from "./PaginationTypes";
|
|
7
|
+
|
|
8
|
+
interface PaginationItemProps {
|
|
9
|
+
/** An ID for the root element */
|
|
10
|
+
id?: string;
|
|
11
|
+
/** Classes for the root element */
|
|
12
|
+
class?: ClassValue;
|
|
13
|
+
/** Styles for the root element */
|
|
14
|
+
style?: StyleValue;
|
|
15
|
+
/** The page for the button */
|
|
16
|
+
page: PageNumber;
|
|
17
|
+
/** Whether this is the active item */
|
|
18
|
+
active?: boolean;
|
|
19
|
+
/** Whether this item is disabled */
|
|
20
|
+
disabled?: boolean;
|
|
21
|
+
/** Raised when this item is made active */
|
|
22
|
+
onchange?: (active: boolean) => void;
|
|
23
|
+
}
|
|
24
|
+
|
|
25
|
+
export default function PaginationItem($props: PaginationItemProps) {
|
|
26
|
+
let button: HTMLButtonElement;
|
|
27
|
+
|
|
28
|
+
// Get stuff out of the Pagination context
|
|
29
|
+
const context = $context[PaginationContextName] as PaginationContext;
|
|
30
|
+
if (!context) {
|
|
31
|
+
throw new Error("PaginationItem must be contained within a Pagination");
|
|
32
|
+
}
|
|
33
|
+
const { registerItem, removeItem, toggleItem, handleItemKey } = context;
|
|
34
|
+
|
|
35
|
+
// Register this item with the parent Pagination, which will handle setting this item's focus on keyboard events
|
|
36
|
+
registerItem({ target: $props.page, active: false, setActive, setFocused });
|
|
37
|
+
|
|
38
|
+
$run(() => {
|
|
39
|
+
return () => {
|
|
40
|
+
removeItem($props.page);
|
|
41
|
+
};
|
|
42
|
+
});
|
|
43
|
+
|
|
44
|
+
// Call onchange when the active state changes
|
|
45
|
+
let prevActive = $props.active ?? false;
|
|
46
|
+
$run(() => {
|
|
47
|
+
const active = $props.active ?? false;
|
|
48
|
+
if (active !== prevActive) {
|
|
49
|
+
prevActive = active;
|
|
50
|
+
if ($props?.onchange) {
|
|
51
|
+
$props.onchange(active);
|
|
52
|
+
}
|
|
53
|
+
}
|
|
54
|
+
});
|
|
55
|
+
|
|
56
|
+
// This function is called by the parent Pagination to set this item's active value
|
|
57
|
+
function setActive(value: boolean) {
|
|
58
|
+
if ($props.active !== value) {
|
|
59
|
+
$props.active = value;
|
|
60
|
+
|
|
61
|
+
/** Raised when this item is made active */
|
|
62
|
+
//dispatch("toggle", value);
|
|
63
|
+
if ($props?.onchange) {
|
|
64
|
+
$props.onchange(value);
|
|
65
|
+
}
|
|
66
|
+
}
|
|
67
|
+
}
|
|
68
|
+
|
|
69
|
+
// This function is called by the parent Pagination to focus this item's button
|
|
70
|
+
function setFocused() {
|
|
71
|
+
button.focus();
|
|
72
|
+
}
|
|
73
|
+
|
|
74
|
+
function handleClick() {
|
|
75
|
+
// Pass the value to the toggleItem method in the parent Pagination which will handle toggling
|
|
76
|
+
// the value for all items
|
|
77
|
+
toggleItem($props.page);
|
|
78
|
+
}
|
|
79
|
+
|
|
80
|
+
function handleKey(e: KeyboardEvent) {
|
|
81
|
+
// Pass the key press up to the parent Pagination which will handle setting the focused button
|
|
82
|
+
handleItemKey(e);
|
|
83
|
+
}
|
|
84
|
+
|
|
85
|
+
@render {
|
|
86
|
+
@if ($props.active) {
|
|
87
|
+
<span
|
|
88
|
+
{$props?.id}
|
|
89
|
+
class={["torp-pagination-item", $props?.class]}
|
|
90
|
+
{$props?.style}
|
|
91
|
+
role="button"
|
|
92
|
+
aria-current="page"
|
|
93
|
+
aria-label={`Page ${$props.page}`}
|
|
94
|
+
data-state={$props.active ? "active" : "inactive"}
|
|
95
|
+
>
|
|
96
|
+
{$props.page}
|
|
97
|
+
</span>
|
|
98
|
+
} else {
|
|
99
|
+
<button
|
|
100
|
+
type="button"
|
|
101
|
+
{$props?.id}
|
|
102
|
+
class={["torp-pagination-item", $props?.class]}
|
|
103
|
+
{$props?.disabled}
|
|
104
|
+
aria-label={
|
|
105
|
+
$props.page === "start" ? "First page" :
|
|
106
|
+
$props.page === "previous" ? "Previous page" :
|
|
107
|
+
$props.page === "next" ? "Next page" :
|
|
108
|
+
$props.page === "end" ? "Last page" :
|
|
109
|
+
$props.page === "startgap" || $props.page === "endgap" ? "More pages" :
|
|
110
|
+
`Page ${$props.page}`
|
|
111
|
+
}
|
|
112
|
+
aria-disabled={$props.disabled ? "true" : undefined}
|
|
113
|
+
data-type={$props.page}
|
|
114
|
+
data-state={$props.active ? "active" : "inactive"}
|
|
115
|
+
&ref={button}
|
|
116
|
+
onclick={handleClick}
|
|
117
|
+
onkeydown={handleKey}
|
|
118
|
+
>
|
|
119
|
+
<slot>
|
|
120
|
+
@if ($props.page === "start") {
|
|
121
|
+
<ChevronDoubleLeft />
|
|
122
|
+
} else if ($props.page === "previous") {
|
|
123
|
+
<ChevronLeft />
|
|
124
|
+
} else if ($props.page === "next") {
|
|
125
|
+
<ChevronRight />
|
|
126
|
+
} else if ($props.page === "end") {
|
|
127
|
+
<ChevronDoubleRight />
|
|
128
|
+
} else if ($props.page === "startgap" || $props.page === "endgap") {
|
|
129
|
+
<span>…</span>
|
|
130
|
+
} else {
|
|
131
|
+
<span>{$props.page}</span>
|
|
132
|
+
}
|
|
133
|
+
</slot>
|
|
134
|
+
</button>
|
|
135
|
+
}
|
|
136
|
+
}
|
|
137
|
+
}
|
|
@@ -0,0 +1,22 @@
|
|
|
1
|
+
export const PaginationContextName: unique symbol = Symbol.for("torp.Pagination");
|
|
2
|
+
|
|
3
|
+
export interface PaginationContext {
|
|
4
|
+
// The registerItem function is called from each SeriesItem to register itself and its
|
|
5
|
+
// state with this component
|
|
6
|
+
registerItem: (item: ItemState) => void;
|
|
7
|
+
// The removeItem function is called from a SeriesItem when it has been unloaded so that we
|
|
8
|
+
// can remove it from the itemStates array
|
|
9
|
+
removeItem: (target: PageNumber) => void;
|
|
10
|
+
toggleItem: (target: PageNumber) => void;
|
|
11
|
+
handleItemKey: (e: KeyboardEvent) => void;
|
|
12
|
+
jumpToPage: (page: number) => void;
|
|
13
|
+
}
|
|
14
|
+
|
|
15
|
+
export interface ItemState {
|
|
16
|
+
target: PageNumber;
|
|
17
|
+
active: boolean;
|
|
18
|
+
setActive: (value: boolean) => void;
|
|
19
|
+
setFocused: () => void;
|
|
20
|
+
}
|
|
21
|
+
|
|
22
|
+
export type PageNumber = "start" | "startgap" | "previous" | "next" | "end" | "endgap" | number;
|
|
@@ -0,0 +1,61 @@
|
|
|
1
|
+
import { type PageNumber } from "./PaginationTypes";
|
|
2
|
+
|
|
3
|
+
/**
|
|
4
|
+
* Builds the pages that should be displayed for pagination.
|
|
5
|
+
*
|
|
6
|
+
* @param count The total number of pages (or items if the page size is greater than 1)
|
|
7
|
+
* @param page The active page
|
|
8
|
+
* @param pageSize The number of items on each page
|
|
9
|
+
* @param maxPages The maximum number of pages to display (gaps will be indicated with ellipses)
|
|
10
|
+
*/
|
|
11
|
+
export default function buildPages(
|
|
12
|
+
count: number,
|
|
13
|
+
page: number,
|
|
14
|
+
pageSize: number = 1,
|
|
15
|
+
maxPages: number = 9,
|
|
16
|
+
): PageNumber[] {
|
|
17
|
+
// Calculate the page count
|
|
18
|
+
const pageCount = Math.ceil(count / pageSize);
|
|
19
|
+
|
|
20
|
+
if (pageCount <= maxPages) {
|
|
21
|
+
// There's no need for ellipses, just return the numbers
|
|
22
|
+
return Array.from({ length: pageCount })
|
|
23
|
+
.fill(0)
|
|
24
|
+
.map((_, i) => i + 1);
|
|
25
|
+
} else {
|
|
26
|
+
// Get the start and end around the current page number
|
|
27
|
+
// Use floor and ceil in case there is an even number of pages (e.g. if
|
|
28
|
+
// maxPages is 8, there will be 3 numbers at the start and 4 at the end)
|
|
29
|
+
let start = page - Math.floor((maxPages - 1) / 2);
|
|
30
|
+
let end = page + Math.ceil((maxPages - 1) / 2);
|
|
31
|
+
if (start < 1) {
|
|
32
|
+
end += Math.abs(start) + 1;
|
|
33
|
+
start = 1;
|
|
34
|
+
} else if (end > pageCount) {
|
|
35
|
+
start -= end - pageCount;
|
|
36
|
+
end = pageCount;
|
|
37
|
+
}
|
|
38
|
+
|
|
39
|
+
// Build the numbers
|
|
40
|
+
const numbers: PageNumber[] = Array.from({ length: end - start + 1 })
|
|
41
|
+
.fill(0)
|
|
42
|
+
.map((_, i) => start + i);
|
|
43
|
+
|
|
44
|
+
// Replace numbers at the start and end with ellipses if necessary
|
|
45
|
+
if (numbers[0] !== 1) {
|
|
46
|
+
numbers[0] = 1;
|
|
47
|
+
//if (numbers.length > 1) {
|
|
48
|
+
numbers[1] = "startgap";
|
|
49
|
+
//}
|
|
50
|
+
}
|
|
51
|
+
const l = numbers.length;
|
|
52
|
+
if (numbers[l - 1] !== pageCount) {
|
|
53
|
+
numbers[l - 1] = pageCount;
|
|
54
|
+
//if (l > 2) {
|
|
55
|
+
numbers[l - 2] = "endgap";
|
|
56
|
+
//}
|
|
57
|
+
}
|
|
58
|
+
|
|
59
|
+
return numbers;
|
|
60
|
+
}
|
|
61
|
+
}
|
|
@@ -0,0 +1,63 @@
|
|
|
1
|
+
import { type SlotRender } from "@torpor/view";
|
|
2
|
+
|
|
3
|
+
|
|
4
|
+
interface PaginationProps {
|
|
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 total number of pages (or items if the page size is greater than 1) */
|
|
12
|
+
count: number;
|
|
13
|
+
/** The active page */
|
|
14
|
+
page: number;
|
|
15
|
+
/** The number of items on each page **/
|
|
16
|
+
pageSize?: number;
|
|
17
|
+
/** The maximum number of pages to display (gaps will be indicated with ellipses) **/
|
|
18
|
+
maxPages?: number;
|
|
19
|
+
/** Accessible label for the pagination navigation */
|
|
20
|
+
"aria-label"?: string;
|
|
21
|
+
/** Called when a user wants to jump to a specific page (e.g., via ellipsis) */
|
|
22
|
+
onjump?: (targetPage: number, jumpTo: (page: number) => void) => void;
|
|
23
|
+
}
|
|
24
|
+
|
|
25
|
+
/**
|
|
26
|
+
* Buttons with page numbers that can be used to move between pages.
|
|
27
|
+
*/
|
|
28
|
+
declare function Pagination(
|
|
29
|
+
$parent: ParentNode,
|
|
30
|
+
$anchor: Node | null,
|
|
31
|
+
$props: PaginationProps,
|
|
32
|
+
$context?: Record<PropertyKey, any>,
|
|
33
|
+
$slots?: Record<string, SlotRender>,
|
|
34
|
+
): void;
|
|
35
|
+
|
|
36
|
+
|
|
37
|
+
|
|
38
|
+
interface PaginationItemProps {
|
|
39
|
+
/** An ID for the root element */
|
|
40
|
+
id?: string;
|
|
41
|
+
/** Classes for the root element */
|
|
42
|
+
class?: ClassValue;
|
|
43
|
+
/** Styles for the root element */
|
|
44
|
+
style?: StyleValue;
|
|
45
|
+
/** The page for the button */
|
|
46
|
+
page: PageNumber;
|
|
47
|
+
/** Whether this is the active item */
|
|
48
|
+
active?: boolean;
|
|
49
|
+
/** Whether this item is disabled */
|
|
50
|
+
disabled?: boolean;
|
|
51
|
+
/** Raised when this item is made active */
|
|
52
|
+
onchange?: (active: boolean) => void;
|
|
53
|
+
}
|
|
54
|
+
|
|
55
|
+
declare function PaginationItem(
|
|
56
|
+
$parent: ParentNode,
|
|
57
|
+
$anchor: Node | null,
|
|
58
|
+
$props: PaginationItemProps,
|
|
59
|
+
$context?: Record<PropertyKey, any>,
|
|
60
|
+
$slots?: Record<string, SlotRender>,
|
|
61
|
+
): void;
|
|
62
|
+
|
|
63
|
+
export { Pagination, PaginationItem };
|
|
@@ -1,29 +1,32 @@
|
|
|
1
|
-
import type { ClassValue, StyleValue } from "@torpor/view";
|
|
2
|
-
import
|
|
1
|
+
import type { Bindable, ClassValue, StyleValue } from "@torpor/view";
|
|
2
|
+
import $handle from "../utils/$handle";
|
|
3
|
+
import { type PopoutContext, PopoutContextName } from "../utils/PopoutTypes";
|
|
4
|
+
import {
|
|
5
|
+
type Point,
|
|
6
|
+
type PopoverContext,
|
|
7
|
+
PopoverContextName,
|
|
8
|
+
type PopoverState,
|
|
9
|
+
} from "./PopoverTypes";
|
|
3
10
|
|
|
4
11
|
interface PopoverProps {
|
|
5
12
|
/** An ID for the root element */
|
|
6
13
|
id?: string;
|
|
7
14
|
/** Classes for the root element */
|
|
8
|
-
class?: ClassValue
|
|
15
|
+
class?: ClassValue;
|
|
9
16
|
/** Styles for the root element */
|
|
10
|
-
style?: StyleValue
|
|
17
|
+
style?: StyleValue;
|
|
11
18
|
/** Whether the popover is modal. If true, an overlay should be supplied to obscure outside content, and only the popover content will be visible to screen readers */
|
|
12
|
-
modal?: boolean
|
|
19
|
+
modal?: boolean;
|
|
13
20
|
/** Whether the popover is visible */
|
|
14
|
-
visible
|
|
21
|
+
visible: Bindable<boolean | undefined>;
|
|
15
22
|
/** The element to anchor this popover to, as an alternative to supplying a PopoverTrigger */
|
|
16
|
-
anchor?: HTMLElement
|
|
23
|
+
anchor?: HTMLElement;
|
|
17
24
|
/** The position to display this popover at if it's contextual, as an alternative to supplying a PopoverTriggerContextual */
|
|
18
|
-
position?: Point
|
|
19
|
-
/** A function to be called when the user selects a response */
|
|
20
|
-
callback?: ((value: any) => void),
|
|
21
|
-
/** Raised when the popover is opened or closed */
|
|
22
|
-
ontoggle?: (open: boolean) => void,
|
|
25
|
+
position?: Point;
|
|
23
26
|
/** Raised when the popover has opened */
|
|
24
|
-
onopen?: () => void
|
|
27
|
+
onopen?: () => void;
|
|
25
28
|
/** Raised when the popover has closed */
|
|
26
|
-
onclose?: (result: any) => void
|
|
29
|
+
onclose?: (result: any) => void;
|
|
27
30
|
}
|
|
28
31
|
|
|
29
32
|
/**
|
|
@@ -41,19 +44,16 @@ interface PopoverProps {
|
|
|
41
44
|
export default function Popover($props: PopoverProps | undefined) {
|
|
42
45
|
let $state: PopoverState = $watch({
|
|
43
46
|
visible: false,
|
|
44
|
-
position: { x: 0, y: 0 }
|
|
45
|
-
|
|
47
|
+
position: { x: 0, y: 0 },
|
|
48
|
+
contentId: undefined,
|
|
49
|
+
triggerId: undefined,
|
|
50
|
+
contentRole: undefined,
|
|
51
|
+
});
|
|
46
52
|
|
|
47
|
-
|
|
53
|
+
$bind($state, $props, "visible");
|
|
48
54
|
$run(() => {
|
|
49
|
-
$state.visible = $props?.visible ?? false;
|
|
50
55
|
$state.position = $props?.position ?? { x: 0, y: 0 };
|
|
51
56
|
});
|
|
52
|
-
$run(() => {
|
|
53
|
-
if ($props !== undefined) {
|
|
54
|
-
$props.visible = $state.visible;
|
|
55
|
-
}
|
|
56
|
-
});
|
|
57
57
|
|
|
58
58
|
let result: any;
|
|
59
59
|
|
|
@@ -62,27 +62,23 @@ export default function Popover($props: PopoverProps | undefined) {
|
|
|
62
62
|
handleButton,
|
|
63
63
|
handleClickOutside,
|
|
64
64
|
state: $state,
|
|
65
|
-
modal: $props?.modal,
|
|
65
|
+
//modal: $props?.modal,
|
|
66
66
|
anchorElement: $props?.anchor ? $unwrap($props.anchor) : undefined,
|
|
67
67
|
};
|
|
68
68
|
$context[PopoverContextName] = context;
|
|
69
69
|
|
|
70
|
-
//
|
|
71
|
-
let
|
|
72
|
-
$
|
|
73
|
-
|
|
74
|
-
|
|
75
|
-
|
|
70
|
+
// Set the context to pass down to items
|
|
71
|
+
let popoutContext: PopoutContext = context;
|
|
72
|
+
$context[PopoutContextName] = popoutContext;
|
|
73
|
+
|
|
74
|
+
// Dispatch the open/close events when the popover is opened or closed
|
|
75
|
+
$handle((first) => {
|
|
76
76
|
const visible = $state.visible;
|
|
77
|
-
if (
|
|
78
|
-
|
|
77
|
+
if (first) return;
|
|
78
|
+
if (visible) {
|
|
79
|
+
$props?.onopen?.();
|
|
79
80
|
} else {
|
|
80
|
-
|
|
81
|
-
if (visible) {
|
|
82
|
-
if (onopen) onopen()
|
|
83
|
-
} else {
|
|
84
|
-
if (onclose) onclose(result);
|
|
85
|
-
}
|
|
81
|
+
$props?.onclose?.(result);
|
|
86
82
|
}
|
|
87
83
|
});
|
|
88
84
|
|
|
@@ -90,11 +86,11 @@ export default function Popover($props: PopoverProps | undefined) {
|
|
|
90
86
|
// Get the button's result
|
|
91
87
|
switch (type) {
|
|
92
88
|
case "confirm": {
|
|
93
|
-
result = value
|
|
89
|
+
result = value ?? true;
|
|
94
90
|
break;
|
|
95
91
|
}
|
|
96
92
|
case "cancel": {
|
|
97
|
-
result = value
|
|
93
|
+
result = value ?? false;
|
|
98
94
|
break;
|
|
99
95
|
}
|
|
100
96
|
default: {
|
|
@@ -105,25 +101,16 @@ export default function Popover($props: PopoverProps | undefined) {
|
|
|
105
101
|
|
|
106
102
|
// Hide the popover
|
|
107
103
|
$state.visible = false;
|
|
108
|
-
|
|
109
|
-
// Call the callback
|
|
110
|
-
if ($props?.callback) {
|
|
111
|
-
$props?.callback(result);
|
|
112
|
-
}
|
|
113
104
|
}
|
|
114
105
|
|
|
115
|
-
function handleClickOutside(e: MouseEvent) {
|
|
106
|
+
function handleClickOutside(e: MouseEvent | KeyboardEvent) {
|
|
116
107
|
e.preventDefault();
|
|
117
108
|
$state.visible = false;
|
|
118
109
|
}
|
|
119
110
|
|
|
120
111
|
@render {
|
|
121
|
-
<div
|
|
122
|
-
{$props?.id}
|
|
123
|
-
class={["torp-popover", $props?.class]}
|
|
124
|
-
{$props?.style}
|
|
125
|
-
>
|
|
112
|
+
<div {$props?.id} class={["torp-popover", $props?.class]} {$props?.style}>
|
|
126
113
|
<slot />
|
|
127
114
|
</div>
|
|
128
115
|
}
|
|
129
|
-
}
|
|
116
|
+
}
|