@soroush.tech/design-system 2.0.0-rc.3 → 2.0.0-rc.4
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 +54 -32
- package/dist/Accordion/Accordion.cjs +100 -0
- package/dist/Accordion/Accordion.d.cts +41 -0
- package/dist/Accordion/Accordion.d.mts +41 -0
- package/dist/Accordion/Accordion.mjs +98 -0
- package/dist/Accordion/AccordionActions.cjs +29 -0
- package/dist/Accordion/AccordionActions.d.cts +12 -0
- package/dist/Accordion/AccordionActions.d.mts +12 -0
- package/dist/Accordion/AccordionActions.mjs +27 -0
- package/dist/Accordion/AccordionDetails.cjs +23 -0
- package/dist/Accordion/AccordionDetails.d.cts +12 -0
- package/dist/Accordion/AccordionDetails.d.mts +12 -0
- package/dist/Accordion/AccordionDetails.mjs +21 -0
- package/dist/Accordion/AccordionGroup.cjs +79 -0
- package/dist/Accordion/AccordionGroup.d.cts +24 -0
- package/dist/Accordion/AccordionGroup.d.mts +24 -0
- package/dist/Accordion/AccordionGroup.mjs +77 -0
- package/dist/Accordion/AccordionSummary.cjs +99 -0
- package/dist/Accordion/AccordionSummary.d.cts +21 -0
- package/dist/Accordion/AccordionSummary.d.mts +21 -0
- package/dist/Accordion/AccordionSummary.mjs +97 -0
- package/dist/Accordion.cjs +11 -0
- package/dist/Accordion.d.cts +6 -0
- package/dist/Accordion.d.mts +6 -0
- package/dist/Accordion.mjs +6 -0
- package/dist/AccordionContext-B2TCl9Os.cjs +44 -0
- package/dist/AccordionContext-DDk_i9Dx.mjs +15 -0
- package/dist/Alert/Alert.cjs +154 -0
- package/dist/Alert/Alert.d.cts +37 -0
- package/dist/Alert/Alert.d.mts +37 -0
- package/dist/Alert/Alert.mjs +152 -0
- package/dist/Alert/AlertTitle.cjs +21 -0
- package/dist/Alert/AlertTitle.d.cts +12 -0
- package/dist/Alert/AlertTitle.d.mts +12 -0
- package/dist/Alert/AlertTitle.mjs +20 -0
- package/dist/Alert.cjs +5 -0
- package/dist/Alert.d.cts +3 -0
- package/dist/Alert.d.mts +3 -0
- package/dist/Alert.mjs +3 -0
- package/dist/AppBar.cjs +1 -1
- package/dist/AppBar.d.cts +1 -1
- package/dist/AppBar.d.mts +1 -1
- package/dist/AppBar.mjs +1 -1
- package/dist/Autocomplete.cjs +666 -0
- package/dist/Autocomplete.d.cts +97 -0
- package/dist/Autocomplete.d.mts +97 -0
- package/dist/Autocomplete.mjs +664 -0
- package/dist/Avatar.cjs +2 -2
- package/dist/Avatar.d.cts +1 -1
- package/dist/Avatar.d.mts +1 -1
- package/dist/Avatar.mjs +2 -2
- package/dist/Backdrop.d.cts +1 -1
- package/dist/Backdrop.d.mts +1 -1
- package/dist/Badge.cjs +130 -0
- package/dist/Badge.d.cts +45 -0
- package/dist/Badge.d.mts +45 -0
- package/dist/Badge.mjs +128 -0
- package/dist/Breadcrumbs.cjs +2 -2
- package/dist/Breadcrumbs.d.cts +3 -3
- package/dist/Breadcrumbs.d.mts +3 -3
- package/dist/Breadcrumbs.mjs +2 -2
- package/dist/Button.cjs +6 -3
- package/dist/Button.d.cts +1 -1
- package/dist/Button.d.mts +1 -1
- package/dist/Button.mjs +6 -3
- package/dist/ButtonGroup.cjs +1 -1
- package/dist/ButtonGroup.d.cts +1 -1
- package/dist/ButtonGroup.d.mts +1 -1
- package/dist/ButtonGroup.mjs +1 -1
- package/dist/Card.cjs +2 -2
- package/dist/Card.d.cts +4 -4
- package/dist/Card.d.mts +4 -4
- package/dist/Card.mjs +2 -2
- package/dist/Checkbox.cjs +13 -3
- package/dist/Checkbox.d.cts +4 -2
- package/dist/Checkbox.d.mts +4 -2
- package/dist/Checkbox.mjs +13 -3
- package/dist/Chip.cjs +194 -0
- package/dist/Chip.d.cts +49 -0
- package/dist/Chip.d.mts +49 -0
- package/dist/Chip.mjs +192 -0
- package/dist/CircularProgress.cjs +1 -1
- package/dist/CircularProgress.d.cts +2 -2
- package/dist/CircularProgress.d.mts +2 -2
- package/dist/CircularProgress.mjs +1 -1
- package/dist/Collapse.cjs +126 -0
- package/dist/Collapse.d.cts +2 -0
- package/dist/Collapse.d.mts +2 -0
- package/dist/Collapse.mjs +124 -0
- package/dist/Drawer.d.cts +3 -3
- package/dist/Drawer.d.mts +3 -3
- package/dist/Fab.cjs +114 -0
- package/dist/Fab.d.cts +2 -0
- package/dist/Fab.d.mts +2 -0
- package/dist/Fab.mjs +113 -0
- package/dist/FabMenu/FabMenu.cjs +3 -0
- package/dist/FabMenu/FabMenu.d.cts +53 -0
- package/dist/FabMenu/FabMenu.d.mts +53 -0
- package/dist/FabMenu/FabMenu.mjs +2 -0
- package/dist/FabMenu/FabMenuItem.cjs +28 -0
- package/dist/FabMenu/FabMenuItem.d.cts +19 -0
- package/dist/FabMenu/FabMenuItem.d.mts +19 -0
- package/dist/FabMenu/FabMenuItem.mjs +27 -0
- package/dist/FabMenu-BDfkT_zt.mjs +273 -0
- package/dist/FabMenu-RiVtzrKe.cjs +279 -0
- package/dist/FabMenu.cjs +5 -0
- package/dist/FabMenu.d.cts +3 -0
- package/dist/FabMenu.d.mts +3 -0
- package/dist/FabMenu.mjs +3 -0
- package/dist/FabMenuContext-BZslb0lL.cjs +22 -0
- package/dist/FabMenuContext-D-XlDbLl.mjs +11 -0
- package/dist/Fade.cjs +17 -0
- package/dist/Fade.d.cts +11 -0
- package/dist/Fade.d.mts +11 -0
- package/dist/Fade.mjs +16 -0
- package/dist/Flex.d.cts +1 -1
- package/dist/Flex.d.mts +1 -1
- package/dist/Form.d.cts +1 -1
- package/dist/Form.d.mts +1 -1
- package/dist/FormControl.cjs +5 -3
- package/dist/FormControl.d.cts +1 -1
- package/dist/FormControl.d.mts +1 -1
- package/dist/FormControl.mjs +5 -3
- package/dist/FormHelperText.cjs +1 -1
- package/dist/FormHelperText.d.cts +1 -1
- package/dist/FormHelperText.d.mts +1 -1
- package/dist/FormHelperText.mjs +1 -1
- package/dist/FormLabel.cjs +4 -1
- package/dist/FormLabel.d.cts +1 -1
- package/dist/FormLabel.d.mts +1 -1
- package/dist/FormLabel.mjs +4 -1
- package/dist/Grid.d.cts +1 -1
- package/dist/Grid.d.mts +1 -1
- package/dist/Grow.cjs +21 -0
- package/dist/Grow.d.cts +11 -0
- package/dist/Grow.d.mts +11 -0
- package/dist/Grow.mjs +20 -0
- package/dist/{Icon-BihOAP4u.mjs → Icon-0hPpk-WZ.mjs} +31 -1
- package/dist/{Icon-D-EWsBVg.cjs → Icon-BE7bRsqR.cjs} +31 -1
- package/dist/Icon.cjs +1 -1
- package/dist/Icon.d.cts +1 -1
- package/dist/Icon.d.mts +1 -1
- package/dist/Icon.mjs +1 -1
- package/dist/Image.d.cts +1 -1
- package/dist/Image.d.mts +1 -1
- package/dist/LinearProgress.cjs +1 -1
- package/dist/LinearProgress.d.cts +2 -2
- package/dist/LinearProgress.d.mts +2 -2
- package/dist/LinearProgress.mjs +1 -1
- package/dist/Link.cjs +3 -3
- package/dist/Link.d.cts +1 -1
- package/dist/Link.d.mts +1 -1
- package/dist/Link.mjs +3 -3
- package/dist/Menu/ContextMenu.cjs +6 -4
- package/dist/Menu/ContextMenu.d.cts +8 -6
- package/dist/Menu/ContextMenu.d.mts +8 -6
- package/dist/Menu/ContextMenu.mjs +6 -4
- package/dist/Menu/Menu.cjs +1 -1
- package/dist/Menu/Menu.d.cts +1 -1
- package/dist/Menu/Menu.d.mts +1 -1
- package/dist/Menu/Menu.mjs +1 -1
- package/dist/Menu/MenuItems.cjs +1 -1
- package/dist/Menu/MenuItems.d.cts +1 -1
- package/dist/Menu/MenuItems.d.mts +1 -1
- package/dist/Menu/MenuItems.mjs +1 -1
- package/dist/Menu/MenuList.cjs +1 -1
- package/dist/Menu/MenuList.d.cts +2 -2
- package/dist/Menu/MenuList.d.mts +2 -2
- package/dist/Menu/MenuList.mjs +1 -1
- package/dist/{Menu-CrzHc_cn.mjs → Menu-CnG4ikZd.mjs} +6 -4
- package/dist/{Menu-Cgg-sX4W.cjs → Menu-DXLjR9ga.cjs} +6 -4
- package/dist/Menu.cjs +2 -2
- package/dist/Menu.d.cts +3 -3
- package/dist/Menu.d.mts +3 -3
- package/dist/Menu.mjs +2 -2
- package/dist/{MenuItem-DUn4IZKK.mjs → MenuItem-C21eR7d6.mjs} +40 -79
- package/dist/{MenuItem-BTP7Ijwi.cjs → MenuItem-EJ4u73f0.cjs} +39 -78
- package/dist/MenuItem.cjs +1 -1
- package/dist/MenuItem.d.cts +1 -1
- package/dist/MenuItem.d.mts +1 -1
- package/dist/MenuItem.mjs +1 -1
- package/dist/{MenuList-D4imLXAa.cjs → MenuList-BBAYeUvD.cjs} +1 -1
- package/dist/{MenuList-B7msJ1IG.mjs → MenuList-Cz3cupC3.mjs} +1 -1
- package/dist/{MenuListContext-DKUOhNyw.d.cts → MenuListContext-BWL5fM_L.d.mts} +2 -2
- package/dist/{MenuListContext-x-7lH4CH.d.mts → MenuListContext-BrCKLgKZ.d.cts} +2 -2
- package/dist/{Modal-BcsyrrpH.mjs → Modal-CEHDej-v.mjs} +3 -22
- package/dist/{Modal-CM3osOqj.cjs → Modal-DBw4j0YA.cjs} +3 -22
- package/dist/Modal.cjs +1 -1
- package/dist/Modal.d.cts +1 -1
- package/dist/Modal.d.mts +1 -1
- package/dist/Modal.mjs +1 -1
- package/dist/NativeSelect.cjs +8 -12
- package/dist/NativeSelect.d.cts +2 -2
- package/dist/NativeSelect.d.mts +2 -2
- package/dist/NativeSelect.mjs +8 -12
- package/dist/{NumberField.cjs → NumberInput.cjs} +69 -43
- package/dist/{NumberField.d.cts → NumberInput.d.cts} +14 -9
- package/dist/{NumberField.d.mts → NumberInput.d.mts} +14 -9
- package/dist/{NumberField.mjs → NumberInput.mjs} +69 -43
- package/dist/Pagination/PaginationItem.cjs +2 -2
- package/dist/Pagination/PaginationItem.d.cts +1 -1
- package/dist/Pagination/PaginationItem.d.mts +1 -1
- package/dist/Pagination/PaginationItem.mjs +2 -2
- package/dist/Pagination.d.cts +2 -2
- package/dist/Pagination.d.mts +2 -2
- package/dist/Paper.cjs +2 -2
- package/dist/Paper.d.cts +2 -2
- package/dist/Paper.d.mts +2 -2
- package/dist/Paper.mjs +2 -2
- package/dist/{Popover-QjM5Z1CR.mjs → Popover-Neeqs_7l.mjs} +3 -3
- package/dist/{Popover-CiZfgiKE.cjs → Popover-xyJTSjZy.cjs} +3 -3
- package/dist/Popover.cjs +1 -1
- package/dist/Popover.d.cts +3 -3
- package/dist/Popover.d.mts +3 -3
- package/dist/Popover.mjs +1 -1
- package/dist/Portal.d.cts +1 -17
- package/dist/Portal.d.mts +1 -17
- package/dist/Pressable.cjs +17 -13
- package/dist/Pressable.d.cts +1 -1
- package/dist/Pressable.d.mts +1 -1
- package/dist/Pressable.mjs +17 -13
- package/dist/Quote.d.cts +2 -2
- package/dist/Quote.d.mts +2 -2
- package/dist/Radio.cjs +13 -3
- package/dist/Radio.d.cts +4 -2
- package/dist/Radio.d.mts +4 -2
- package/dist/Radio.mjs +13 -3
- package/dist/{InputRange.cjs → RangeInput.cjs} +45 -43
- package/dist/{InputRange.d.mts → RangeInput.d.cts} +15 -15
- package/dist/{InputRange.d.cts → RangeInput.d.mts} +15 -15
- package/dist/{InputRange.mjs → RangeInput.mjs} +45 -43
- package/dist/Rating.cjs +3 -3
- package/dist/Rating.d.cts +1 -1
- package/dist/Rating.d.mts +1 -1
- package/dist/Rating.mjs +3 -3
- package/dist/ScrollArea.cjs +268 -0
- package/dist/ScrollArea.d.cts +40 -0
- package/dist/ScrollArea.d.mts +40 -0
- package/dist/ScrollArea.mjs +266 -0
- package/dist/Select.cjs +9 -12
- package/dist/Select.d.cts +2 -2
- package/dist/Select.d.mts +2 -2
- package/dist/Select.mjs +9 -12
- package/dist/Sidebar/Sidebar.d.cts +1 -1
- package/dist/Sidebar/Sidebar.d.mts +1 -1
- package/dist/Sidebar/SidebarItem.cjs +2 -2
- package/dist/Sidebar/SidebarItem.d.cts +3 -3
- package/dist/Sidebar/SidebarItem.d.mts +3 -3
- package/dist/Sidebar/SidebarItem.mjs +2 -2
- package/dist/Skeleton.d.cts +1 -1
- package/dist/Skeleton.d.mts +1 -1
- package/dist/Slide.cjs +51 -0
- package/dist/Slide.d.cts +17 -0
- package/dist/Slide.d.mts +17 -0
- package/dist/Slide.mjs +50 -0
- package/dist/Snackbar.cjs +205 -0
- package/dist/Snackbar.d.cts +62 -0
- package/dist/Snackbar.d.mts +62 -0
- package/dist/Snackbar.mjs +203 -0
- package/dist/Switch.cjs +15 -5
- package/dist/Switch.d.cts +4 -2
- package/dist/Switch.d.mts +4 -2
- package/dist/Switch.mjs +15 -5
- package/dist/Table/Table.d.cts +2 -2
- package/dist/Table/Table.d.mts +2 -2
- package/dist/Table/TableBody.d.cts +1 -1
- package/dist/Table/TableBody.d.mts +1 -1
- package/dist/Table/TableCell.d.cts +1 -1
- package/dist/Table/TableCell.d.mts +1 -1
- package/dist/Table/TableContainer.d.cts +1 -1
- package/dist/Table/TableContainer.d.mts +1 -1
- package/dist/Table/TableControl.d.cts +1 -1
- package/dist/Table/TableControl.d.mts +1 -1
- package/dist/Table/TableFooter.d.cts +1 -1
- package/dist/Table/TableFooter.d.mts +1 -1
- package/dist/Table/TableHead.d.cts +1 -1
- package/dist/Table/TableHead.d.mts +1 -1
- package/dist/Table/TablePagination.cjs +1 -0
- package/dist/Table/TablePagination.d.cts +2 -2
- package/dist/Table/TablePagination.d.mts +2 -2
- package/dist/Table/TablePagination.mjs +1 -0
- package/dist/Table/TablePaginationActions.cjs +1 -1
- package/dist/Table/TablePaginationActions.d.cts +1 -1
- package/dist/Table/TablePaginationActions.d.mts +1 -1
- package/dist/Table/TablePaginationActions.mjs +1 -1
- package/dist/Table/TableRow.d.cts +1 -1
- package/dist/Table/TableRow.d.mts +1 -1
- package/dist/Table/TableSortLabel.cjs +1 -1
- package/dist/Table/TableSortLabel.d.cts +1 -1
- package/dist/Table/TableSortLabel.d.mts +1 -1
- package/dist/Table/TableSortLabel.mjs +1 -1
- package/dist/Table/hooks.d.cts +1 -1
- package/dist/Table/hooks.d.mts +1 -1
- package/dist/Table.d.cts +5 -5
- package/dist/Table.d.mts +5 -5
- package/dist/{TableContext-DhuRf6Wy.d.mts → TableContext-Be8tluYZ.d.cts} +1 -1
- package/dist/{TableContext-Duj1nVG7.d.cts → TableContext-DUPqls5k.d.mts} +1 -1
- package/dist/Tabs/Tab.cjs +16 -7
- package/dist/Tabs/Tab.d.cts +2 -2
- package/dist/Tabs/Tab.d.mts +2 -2
- package/dist/Tabs/Tab.mjs +16 -7
- package/dist/Tabs/TabContext.d.cts +1 -1
- package/dist/Tabs/TabContext.d.mts +1 -1
- package/dist/Tabs/TabList.cjs +1 -1
- package/dist/Tabs/TabList.d.cts +1 -1
- package/dist/Tabs/TabList.d.mts +1 -1
- package/dist/Tabs/TabList.mjs +1 -1
- package/dist/Tabs/TabPanel.cjs +1 -1
- package/dist/Tabs/TabPanel.d.cts +2 -2
- package/dist/Tabs/TabPanel.d.mts +2 -2
- package/dist/Tabs/TabPanel.mjs +1 -1
- package/dist/Tabs/TabScrollButton.cjs +2 -2
- package/dist/Tabs/TabScrollButton.d.cts +1 -1
- package/dist/Tabs/TabScrollButton.d.mts +1 -1
- package/dist/Tabs/TabScrollButton.mjs +2 -2
- package/dist/Tabs/Tabs.cjs +1 -1
- package/dist/Tabs/Tabs.d.cts +2 -2
- package/dist/Tabs/Tabs.d.mts +2 -2
- package/dist/Tabs/Tabs.mjs +1 -1
- package/dist/{Tabs-D4tWCq78.cjs → Tabs-Croeq9s2.cjs} +11 -7
- package/dist/{Tabs-BTNOJx5v.mjs → Tabs-DMMP5aDj.mjs} +11 -7
- package/dist/Tabs.cjs +1 -1
- package/dist/Tabs.d.cts +3 -3
- package/dist/Tabs.d.mts +3 -3
- package/dist/Tabs.mjs +1 -1
- package/dist/{TabsContext-B_XHbjcS.d.cts → TabsContext-BYeGjSZK.d.cts} +1 -1
- package/dist/{TabsContext-Dn2kqUwr.d.mts → TabsContext-D4YumTfD.d.mts} +1 -1
- package/dist/TextInput.cjs +11 -11
- package/dist/TextInput.d.cts +1 -1
- package/dist/TextInput.d.mts +1 -1
- package/dist/TextInput.mjs +11 -11
- package/dist/ToggleButton/ToggleButton.cjs +2 -2
- package/dist/ToggleButton/ToggleButton.d.cts +1 -1
- package/dist/ToggleButton/ToggleButton.d.mts +1 -1
- package/dist/ToggleButton/ToggleButton.mjs +2 -2
- package/dist/ToggleButton/ToggleButtonGroup.cjs +1 -1
- package/dist/ToggleButton/ToggleButtonGroup.d.cts +1 -1
- package/dist/ToggleButton/ToggleButtonGroup.d.mts +1 -1
- package/dist/ToggleButton/ToggleButtonGroup.mjs +1 -1
- package/dist/Tooltip.cjs +270 -0
- package/dist/Tooltip.d.cts +78 -0
- package/dist/Tooltip.d.mts +78 -0
- package/dist/Tooltip.mjs +268 -0
- package/dist/TransferList.cjs +14 -7
- package/dist/TransferList.d.cts +4 -2
- package/dist/TransferList.d.mts +4 -2
- package/dist/TransferList.mjs +14 -7
- package/dist/Typography.cjs +1 -1
- package/dist/Typography.d.cts +2 -2
- package/dist/Typography.d.mts +2 -2
- package/dist/Typography.mjs +1 -1
- package/dist/View.d.cts +1 -1
- package/dist/View.d.mts +1 -1
- package/dist/Zoom.cjs +16 -0
- package/dist/Zoom.d.cts +10 -0
- package/dist/Zoom.d.mts +10 -0
- package/dist/Zoom.mjs +15 -0
- package/dist/catalog.cjs +932 -30
- package/dist/catalog.d.cts +1 -1
- package/dist/catalog.d.mts +1 -1
- package/dist/catalog.mjs +932 -30
- package/dist/engine.d.cts +2 -2
- package/dist/engine.d.mts +1 -1
- package/dist/getAnchorRel-CySI28HJ.mjs +8 -0
- package/dist/getAnchorRel-_vtAXC-4.cjs +13 -0
- package/dist/getShapeRadius-B9ytqDSk.d.cts +5 -0
- package/dist/getShapeRadius-B9ytqDSk.d.mts +5 -0
- package/dist/getShapeRadius-sY6-AGP4.mjs +12 -0
- package/dist/getShapeRadius-vXmXGV3f.cjs +17 -0
- package/dist/getSurfaceRadius-BTUV1E8H.cjs +11 -0
- package/dist/getSurfaceRadius-DTgqIzll.mjs +6 -0
- package/dist/getTooltipOrigins-B_7XXtQq.cjs +104 -0
- package/dist/getTooltipOrigins-CyyIMCF1.mjs +87 -0
- package/dist/{index-Dv_fk1_F.d.cts → index-05VGk0y_.d.cts} +14 -2
- package/dist/{index-DtYjdBvO.d.cts → index-2x01drCL.d.mts} +2 -2
- package/dist/{index-B1RFybA_.d.mts → index-46mhlgP6.d.mts} +7 -3
- package/dist/{index-BQWjh4rK.d.mts → index-BCzI2Iqo.d.cts} +3 -3
- package/dist/{index-ClZyaZrR.d.mts → index-BDqIc6Gx.d.cts} +2 -2
- package/dist/{index-K5exjvnX.d.cts → index-BPh60KDs.d.mts} +2 -2
- package/dist/{index-DAwcmIjN.d.cts → index-BQge4W7L.d.cts} +2 -2
- package/dist/{index-B4TeaB7b.d.cts → index-BSGu9rPv.d.cts} +7 -3
- package/dist/{index-BelFIizY.d.cts → index-BThHG5QU.d.mts} +3 -3
- package/dist/{index-YKrfFC_I.d.cts → index-BUeqNHjb.d.cts} +2 -2
- package/dist/{index-BGbTuHP9.d.mts → index-BeqpkGV-.d.mts} +1 -1
- package/dist/{index-Bx0-6yeX.d.mts → index-Bfyz3MDc.d.mts} +1 -1
- package/dist/{index-CbFaWtjK.d.mts → index-BgLqA52S.d.cts} +2 -2
- package/dist/{index-DchHf5cF.d.cts → index-BhnLFsBv.d.cts} +1 -1
- package/dist/{index-KnXhlKMr.d.cts → index-BitQk7Hx.d.cts} +1 -1
- package/dist/index-BvgX5eyV.d.mts +36 -0
- package/dist/index-CERyXFjz.d.cts +32 -0
- package/dist/index-CLvlNnjM.d.mts +32 -0
- package/dist/{index-BkzZxHVj.d.mts → index-CO-XxjiZ.d.cts} +2 -2
- package/dist/{index-DYF8sRE-.d.cts → index-CR0akDlJ.d.cts} +2 -2
- package/dist/{index-CJhK7JND.d.mts → index-CRQ7XLri.d.mts} +193 -13
- package/dist/{index-CknoXDLQ.d.cts → index-CRn4fWwA.d.mts} +2 -2
- package/dist/{index-CUz2h5xY.d.mts → index-CWPvdEjP.d.mts} +2 -2
- package/dist/{index-nqUA_6J_.d.cts → index-CrQDxJ1D.d.cts} +1 -1
- package/dist/index-Ctx-DKV3.d.cts +18 -0
- package/dist/index-Ctx-DKV3.d.mts +18 -0
- package/dist/{index-CE5JG1us.d.mts → index-CyLhEXYB.d.mts} +1 -1
- package/dist/{index-pTNq3iQn.d.mts → index-D05fSuF1.d.mts} +2 -2
- package/dist/{index-CG_1uPrD.d.mts → index-DK3zgGPe.d.mts} +2 -2
- package/dist/{index-ha1WjSZ5.d.mts → index-DNj5P2NH.d.mts} +14 -2
- package/dist/{index-ChXeKJCk.d.cts → index-DOH1xY0L.d.cts} +1 -1
- package/dist/{index-WHFhjfgy.d.cts → index-D_-DAAE7.d.mts} +14 -6
- package/dist/{index-BHKgEOZJ.d.cts → index-D_LT3QiH.d.mts} +3 -3
- package/dist/index-Db4L2hwa.d.cts +36 -0
- package/dist/{index-BrgwkY6z.d.mts → index-Dk4KuTPB.d.cts} +3 -3
- package/dist/{index-bpnLB_4K.d.mts → index-Ebjbrbsk.d.cts} +14 -6
- package/dist/{index-CQfJZADG.d.cts → index-MWUGpG-Y.d.mts} +3 -3
- package/dist/{index-DJ0f69wh.d.cts → index-XN4-ZqTB.d.cts} +195 -15
- package/dist/index-fPRELf0V.d.mts +1 -0
- package/dist/{index-DGnXJwLj.d.mts → index-fi-W3MOz.d.cts} +7 -5
- package/dist/{index-ByYxVl9O.d.mts → index-iTquH69S.d.cts} +3 -3
- package/dist/{index-DWjz5ZzG.d.cts → index-lGpLM144.d.mts} +7 -5
- package/dist/{index-h4dYtVrp.d.mts → index-vBCN6iAz.d.mts} +1 -1
- package/dist/index-x3WC9ViD.d.cts +1 -0
- package/dist/index.d.cts +1 -1
- package/dist/index.d.mts +1 -1
- package/dist/inputVariantStyles-BUK_62Ra.cjs +61 -0
- package/dist/inputVariantStyles-q_cZsCJg.mjs +44 -0
- package/dist/style.cjs +1 -1
- package/dist/style.d.cts +2 -2
- package/dist/style.d.mts +2 -2
- package/dist/style.mjs +1 -1
- package/dist/{theme-BxXuXRgQ.cjs → theme-DzfwuzMZ.cjs} +1 -1
- package/dist/{theme-Z9_QludW.mjs → theme-oBfFhJm9.mjs} +1 -1
- package/dist/theme.cjs +3 -2
- package/dist/theme.d.cts +3 -3
- package/dist/theme.d.mts +3 -3
- package/dist/theme.mjs +3 -3
- package/dist/{themes-gd6tcmqS.cjs → themes--4eci3M1.cjs} +25 -2
- package/dist/{themes-L-dE7_ck.mjs → themes-BwEsdVox.mjs} +20 -3
- package/dist/useAnchoredPlacement-B1FyGoZV.cjs +111 -0
- package/dist/useAnchoredPlacement-Pe7sY41E.mjs +106 -0
- package/dist/useMergedRefs-2zTDXgPO.cjs +27 -0
- package/dist/useMergedRefs-BfBckwRY.mjs +22 -0
- package/dist/{useTablePagination-C-u3ru4N.d.cts → useTablePagination-CFb_FYA9.d.cts} +1 -1
- package/dist/{useTablePagination-D-39ZmQh.d.mts → useTablePagination-_-bzuXJO.d.mts} +1 -1
- package/dist/useTransition-C1F7MuHO.d.mts +42 -0
- package/dist/useTransition-DAQd1PX3.cjs +83 -0
- package/dist/useTransition-DP1k0irI.mjs +78 -0
- package/dist/useTransition-l9dv83-Y.d.cts +42 -0
- package/dist/useTransitionChild-CikpU0Yh.cjs +54 -0
- package/dist/useTransitionChild-Dvg9hO-F.mjs +49 -0
- package/package.json +164 -14
- package/dist/index-BxVTIMnB.d.cts +0 -1
- package/dist/index-DaIIo5QU.d.mts +0 -1
- package/dist/inputVariantStyles-BBkkYQtE.cjs +0 -32
- package/dist/inputVariantStyles-CcqpGfuP.mjs +0 -28
|
@@ -0,0 +1,19 @@
|
|
|
1
|
+
import { n as FabProps } from "../index-CERyXFjz.cjs";
|
|
2
|
+
import { MouseEvent, ReactNode } from "react";
|
|
3
|
+
//#region src/FabMenu/FabMenuItem/FabMenuItem.d.ts
|
|
4
|
+
interface FabMenuItemProps extends Omit<FabProps, 'variant' | 'size' | 'isCollapsed' | 'startIcon' | 'children'> {
|
|
5
|
+
/** An icon before the label. */
|
|
6
|
+
icon?: ReactNode;
|
|
7
|
+
/** What the item says, and does: its name. */
|
|
8
|
+
children: ReactNode;
|
|
9
|
+
/** Fired when it is pressed - the menu closes after it. */
|
|
10
|
+
onClick?: (event: MouseEvent<HTMLButtonElement>) => void;
|
|
11
|
+
}
|
|
12
|
+
/**
|
|
13
|
+
* @description One action of a `FabMenu`: an extended `Fab` of the menu's size - a pill with an
|
|
14
|
+
* icon and a label. Pressing it runs `onClick` and closes the menu, and focus goes back to the
|
|
15
|
+
* trigger. It takes any `Fab` prop but its shape.
|
|
16
|
+
*/
|
|
17
|
+
declare function FabMenuItem({ icon, children, color, onClick, ...rest }: Readonly<FabMenuItemProps>): import("react").JSX.Element;
|
|
18
|
+
//#endregion
|
|
19
|
+
export { FabMenuItem, FabMenuItemProps };
|
|
@@ -0,0 +1,19 @@
|
|
|
1
|
+
import { n as FabProps } from "../index-CLvlNnjM.mjs";
|
|
2
|
+
import { MouseEvent, ReactNode } from "react";
|
|
3
|
+
//#region src/FabMenu/FabMenuItem/FabMenuItem.d.ts
|
|
4
|
+
interface FabMenuItemProps extends Omit<FabProps, 'variant' | 'size' | 'isCollapsed' | 'startIcon' | 'children'> {
|
|
5
|
+
/** An icon before the label. */
|
|
6
|
+
icon?: ReactNode;
|
|
7
|
+
/** What the item says, and does: its name. */
|
|
8
|
+
children: ReactNode;
|
|
9
|
+
/** Fired when it is pressed - the menu closes after it. */
|
|
10
|
+
onClick?: (event: MouseEvent<HTMLButtonElement>) => void;
|
|
11
|
+
}
|
|
12
|
+
/**
|
|
13
|
+
* @description One action of a `FabMenu`: an extended `Fab` of the menu's size - a pill with an
|
|
14
|
+
* icon and a label. Pressing it runs `onClick` and closes the menu, and focus goes back to the
|
|
15
|
+
* trigger. It takes any `Fab` prop but its shape.
|
|
16
|
+
*/
|
|
17
|
+
declare function FabMenuItem({ icon, children, color, onClick, ...rest }: Readonly<FabMenuItemProps>): import("react").JSX.Element;
|
|
18
|
+
//#endregion
|
|
19
|
+
export { FabMenuItem, FabMenuItemProps };
|
|
@@ -0,0 +1,27 @@
|
|
|
1
|
+
import { Fab } from "../Fab.mjs";
|
|
2
|
+
import { n as useFabMenu } from "../FabMenuContext-D-XlDbLl.mjs";
|
|
3
|
+
import { jsx } from "react/jsx-runtime";
|
|
4
|
+
//#region src/FabMenu/FabMenuItem/FabMenuItem.tsx
|
|
5
|
+
/**
|
|
6
|
+
* @description One action of a `FabMenu`: an extended `Fab` of the menu's size - a pill with an
|
|
7
|
+
* icon and a label. Pressing it runs `onClick` and closes the menu, and focus goes back to the
|
|
8
|
+
* trigger. It takes any `Fab` prop but its shape.
|
|
9
|
+
*/
|
|
10
|
+
function FabMenuItem({ icon, children, color, onClick, ...rest }) {
|
|
11
|
+
const menu = useFabMenu("FabMenuItem");
|
|
12
|
+
return /* @__PURE__ */ jsx(Fab, {
|
|
13
|
+
...rest,
|
|
14
|
+
"data-fab-menu-item": "",
|
|
15
|
+
variant: "extended",
|
|
16
|
+
size: menu.size,
|
|
17
|
+
color: color ?? "secondary",
|
|
18
|
+
startIcon: icon,
|
|
19
|
+
onClick: (event) => {
|
|
20
|
+
onClick?.(event);
|
|
21
|
+
menu.close(event);
|
|
22
|
+
},
|
|
23
|
+
children
|
|
24
|
+
});
|
|
25
|
+
}
|
|
26
|
+
//#endregion
|
|
27
|
+
export { FabMenuItem };
|
|
@@ -0,0 +1,273 @@
|
|
|
1
|
+
import { a as src_exports, i as props, o as styled, t as createShouldForwardProp } from "./src-DLGYOJMh.mjs";
|
|
2
|
+
import { n as useDefaultProps, r as useTheme } from "./theme-oBfFhJm9.mjs";
|
|
3
|
+
import { t as useControlled } from "./useControlled-CBRLsO-H.mjs";
|
|
4
|
+
import { t as Icon } from "./Icon-0hPpk-WZ.mjs";
|
|
5
|
+
import { t as isRtl } from "./isRtl-BJDtm86G.mjs";
|
|
6
|
+
import { Fab } from "./Fab.mjs";
|
|
7
|
+
import { Zoom } from "./Zoom.mjs";
|
|
8
|
+
import { t as FabMenuContext } from "./FabMenuContext-D-XlDbLl.mjs";
|
|
9
|
+
import { Children, Fragment, cloneElement, isValidElement, useCallback, useEffect, useId, useLayoutEffect, useMemo, useRef, useState } from "react";
|
|
10
|
+
import { jsx, jsxs } from "react/jsx-runtime";
|
|
11
|
+
//#region src/FabMenu/hooks/useFabMenuLayout.ts
|
|
12
|
+
const px = (length) => Number.parseFloat(String(length));
|
|
13
|
+
const isSame = (first, second) => first.direction === second.direction && first.maxWidth === second.maxWidth && first.maxHeight === second.maxHeight;
|
|
14
|
+
/**
|
|
15
|
+
* Measures the actions against the window as the menu opens, and as the window or the page
|
|
16
|
+
* moves under it: a row that is wider than the room beside the trigger becomes a column - above it
|
|
17
|
+
* where there is more room above, else below - and a column is no wider or taller than the room it
|
|
18
|
+
* has, so a long label is cut with an ellipsis and a long column scrolls. Nothing is measured while
|
|
19
|
+
* the menu is closed, and the layout is the one asked for until it opens. The room kept from the
|
|
20
|
+
* window's edge is `theme.space[2]`, the step between the actions `theme.space[1]`.
|
|
21
|
+
*/
|
|
22
|
+
function useFabMenuLayout({ isOpen, direction, align, listRef, triggerRef, itemCount }) {
|
|
23
|
+
const theme = useTheme();
|
|
24
|
+
const margin = px(theme.space[2]);
|
|
25
|
+
const gap = px(theme.space[1]);
|
|
26
|
+
const [layout, setLayout] = useState({ direction });
|
|
27
|
+
useLayoutEffect(() => {
|
|
28
|
+
if (!isOpen) return void 0;
|
|
29
|
+
const asked = { direction };
|
|
30
|
+
const settle = (next) => setLayout((current) => isSame(current, next) ? current : next);
|
|
31
|
+
const measure = () => {
|
|
32
|
+
const list = listRef.current;
|
|
33
|
+
const trigger = triggerRef.current;
|
|
34
|
+
const rect = trigger.getBoundingClientRect();
|
|
35
|
+
const rtl = isRtl(trigger);
|
|
36
|
+
const room = {
|
|
37
|
+
top: rect.top - margin,
|
|
38
|
+
bottom: window.innerHeight - rect.bottom - margin,
|
|
39
|
+
left: rect.left - margin,
|
|
40
|
+
right: window.innerWidth - rect.right - margin
|
|
41
|
+
};
|
|
42
|
+
let column = direction;
|
|
43
|
+
if (direction === "left" || direction === "right") {
|
|
44
|
+
const items = [...list.querySelectorAll("[data-fab-menu-item]")];
|
|
45
|
+
if (items.reduce((sum, item) => {
|
|
46
|
+
const text = item.querySelector("[data-fab-label]");
|
|
47
|
+
return sum + item.offsetWidth + (text.scrollWidth - text.clientWidth);
|
|
48
|
+
}, 0) + gap * items.length <= (direction === "left" !== rtl ? room.left : room.right)) return settle(asked);
|
|
49
|
+
column = room.top >= room.bottom ? "up" : "down";
|
|
50
|
+
}
|
|
51
|
+
const height = (column === "up" ? room.top : room.bottom) - gap;
|
|
52
|
+
const width = align === "end" !== rtl ? rect.right - margin : window.innerWidth - rect.left - margin;
|
|
53
|
+
return settle({
|
|
54
|
+
direction: column,
|
|
55
|
+
maxWidth: Math.max(0, width),
|
|
56
|
+
maxHeight: list.scrollHeight > height ? Math.max(0, height) : void 0
|
|
57
|
+
});
|
|
58
|
+
};
|
|
59
|
+
measure();
|
|
60
|
+
window.addEventListener("resize", measure);
|
|
61
|
+
window.addEventListener("scroll", measure, { passive: true });
|
|
62
|
+
return () => {
|
|
63
|
+
window.removeEventListener("resize", measure);
|
|
64
|
+
window.removeEventListener("scroll", measure);
|
|
65
|
+
};
|
|
66
|
+
}, [
|
|
67
|
+
isOpen,
|
|
68
|
+
direction,
|
|
69
|
+
align,
|
|
70
|
+
itemCount,
|
|
71
|
+
margin,
|
|
72
|
+
gap,
|
|
73
|
+
listRef,
|
|
74
|
+
triggerRef
|
|
75
|
+
]);
|
|
76
|
+
return isOpen ? layout : { direction };
|
|
77
|
+
}
|
|
78
|
+
//#endregion
|
|
79
|
+
//#region src/FabMenu/FabMenu/FabMenu.tsx
|
|
80
|
+
const FabMenuRoot = styled("div", {
|
|
81
|
+
name: "FabMenu",
|
|
82
|
+
label: "FabMenu",
|
|
83
|
+
shouldForwardProp: createShouldForwardProp([...props]),
|
|
84
|
+
systemProps: [src_exports.space]
|
|
85
|
+
})({
|
|
86
|
+
position: "relative",
|
|
87
|
+
display: "inline-flex"
|
|
88
|
+
});
|
|
89
|
+
const FabMenuList = styled("div", {
|
|
90
|
+
name: "FabMenu",
|
|
91
|
+
slot: "list",
|
|
92
|
+
label: "FabMenuList",
|
|
93
|
+
shouldForwardProp: createShouldForwardProp([
|
|
94
|
+
"direction",
|
|
95
|
+
"align",
|
|
96
|
+
"maxWidth",
|
|
97
|
+
"maxHeight"
|
|
98
|
+
])
|
|
99
|
+
})(({ theme, direction, align, maxWidth, maxHeight }) => {
|
|
100
|
+
const clear = `calc(100% + ${theme.space[1]})`;
|
|
101
|
+
const base = {
|
|
102
|
+
position: "absolute",
|
|
103
|
+
display: "flex",
|
|
104
|
+
gap: theme.space[1],
|
|
105
|
+
width: "max-content"
|
|
106
|
+
};
|
|
107
|
+
if (direction === "left" || direction === "right") return {
|
|
108
|
+
...base,
|
|
109
|
+
flexDirection: "row",
|
|
110
|
+
top: 0,
|
|
111
|
+
bottom: 0,
|
|
112
|
+
alignItems: "center",
|
|
113
|
+
[direction === "left" ? "insetInlineEnd" : "insetInlineStart"]: clear
|
|
114
|
+
};
|
|
115
|
+
return {
|
|
116
|
+
...base,
|
|
117
|
+
flexDirection: "column",
|
|
118
|
+
...maxWidth !== void 0 && { maxWidth },
|
|
119
|
+
...maxHeight !== void 0 && {
|
|
120
|
+
maxHeight,
|
|
121
|
+
overflowY: "auto",
|
|
122
|
+
overscrollBehavior: "contain",
|
|
123
|
+
scrollbarWidth: "thin",
|
|
124
|
+
padding: theme.space[.5]
|
|
125
|
+
},
|
|
126
|
+
[direction === "up" ? "bottom" : "top"]: clear,
|
|
127
|
+
[align === "end" ? "insetInlineEnd" : "insetInlineStart"]: 0,
|
|
128
|
+
alignItems: align === "end" ? "flex-end" : "flex-start"
|
|
129
|
+
};
|
|
130
|
+
});
|
|
131
|
+
const getItems = (children) => Children.toArray(children).flatMap((child) => {
|
|
132
|
+
if (!isValidElement(child)) return [];
|
|
133
|
+
if (child.type !== Fragment) return [child];
|
|
134
|
+
return getItems(child.props.children).map((inner) => cloneElement(inner, { key: `${child.key}/${inner.key}` }));
|
|
135
|
+
});
|
|
136
|
+
const ITEMS = "[data-fab-menu-item]:not(:disabled)";
|
|
137
|
+
/**
|
|
138
|
+
* @description A `Fab` that opens a stack of actions - extended pills, each a `FabMenuItem` - from
|
|
139
|
+
* one corner of a page. The trigger is a disclosure button: `aria-expanded` and `aria-controls`,
|
|
140
|
+
* its icon turning to a close one while open. The actions zoom in over `theme.transitions` and are
|
|
141
|
+
* out of the tree while closed. Escape, a press away, or choosing an action closes it and, for
|
|
142
|
+
* Escape and an action, returns the focus to the trigger; the arrow keys, Home and End walk the
|
|
143
|
+
* actions and the trigger in the order they are drawn. Where it floats is the page's.
|
|
144
|
+
*/
|
|
145
|
+
function FabMenu({ children, icon, closeIcon, label, "aria-label": ariaLabel, isOpen: isOpenProp, defaultOpen = false, onOpen, onClose, direction: directionProp, align: alignProp, color, size: sizeProp, className, "data-testid": dataTestid, ...spaceProps }) {
|
|
146
|
+
const dp = useDefaultProps("FabMenu");
|
|
147
|
+
const asked = directionProp ?? dp.direction ?? "up";
|
|
148
|
+
const align = alignProp ?? dp.align ?? "end";
|
|
149
|
+
const size = sizeProp ?? dp.size ?? "md";
|
|
150
|
+
const [isOpen, setIsOpen] = useControlled({
|
|
151
|
+
controlled: isOpenProp,
|
|
152
|
+
default: defaultOpen
|
|
153
|
+
});
|
|
154
|
+
const listId = useId();
|
|
155
|
+
const rootRef = useRef(null);
|
|
156
|
+
const listRef = useRef(null);
|
|
157
|
+
const triggerRef = useRef(null);
|
|
158
|
+
const open = (event) => {
|
|
159
|
+
setIsOpen(true);
|
|
160
|
+
onOpen?.(event);
|
|
161
|
+
};
|
|
162
|
+
const close = useCallback((event) => {
|
|
163
|
+
setIsOpen(false);
|
|
164
|
+
onClose?.(event);
|
|
165
|
+
if (event.type === "click" || event.type === "keydown") triggerRef.current.focus();
|
|
166
|
+
}, [setIsOpen, onClose]);
|
|
167
|
+
useEffect(() => {
|
|
168
|
+
if (!isOpen) return void 0;
|
|
169
|
+
const handlePointerDown = (event) => {
|
|
170
|
+
if (!rootRef.current?.contains(event.target)) close(event);
|
|
171
|
+
};
|
|
172
|
+
document.addEventListener("pointerdown", handlePointerDown);
|
|
173
|
+
return () => document.removeEventListener("pointerdown", handlePointerDown);
|
|
174
|
+
}, [isOpen, close]);
|
|
175
|
+
const items = getItems(children);
|
|
176
|
+
const layout = useFabMenuLayout({
|
|
177
|
+
isOpen,
|
|
178
|
+
direction: asked,
|
|
179
|
+
align,
|
|
180
|
+
listRef,
|
|
181
|
+
triggerRef,
|
|
182
|
+
itemCount: items.length
|
|
183
|
+
});
|
|
184
|
+
const direction = layout.direction;
|
|
185
|
+
const isRow = direction === "left" || direction === "right";
|
|
186
|
+
const isBefore = direction === "up" || direction === "left";
|
|
187
|
+
const handleKeyDown = (event) => {
|
|
188
|
+
if (event.key === "Escape" && isOpen) {
|
|
189
|
+
event.preventDefault();
|
|
190
|
+
close(event);
|
|
191
|
+
return;
|
|
192
|
+
}
|
|
193
|
+
const [back, forward] = isRow ? ["ArrowLeft", "ArrowRight"] : ["ArrowUp", "ArrowDown"];
|
|
194
|
+
if (![
|
|
195
|
+
back,
|
|
196
|
+
forward,
|
|
197
|
+
"Home",
|
|
198
|
+
"End"
|
|
199
|
+
].includes(event.key)) return;
|
|
200
|
+
if (!isOpen) {
|
|
201
|
+
if (event.key === back || event.key === forward) {
|
|
202
|
+
event.preventDefault();
|
|
203
|
+
open(event);
|
|
204
|
+
}
|
|
205
|
+
return;
|
|
206
|
+
}
|
|
207
|
+
const found = [...rootRef.current.querySelectorAll(ITEMS)];
|
|
208
|
+
const drawn = isBefore ? [...found, triggerRef.current] : [triggerRef.current, ...found];
|
|
209
|
+
const at = drawn.indexOf(document.activeElement);
|
|
210
|
+
if (at === -1) return;
|
|
211
|
+
event.preventDefault();
|
|
212
|
+
const last = drawn.length - 1;
|
|
213
|
+
const toward = isRow && isRtl(rootRef.current) ? back : forward;
|
|
214
|
+
const step = event.key === toward ? 1 : -1;
|
|
215
|
+
drawn[{
|
|
216
|
+
Home: 0,
|
|
217
|
+
End: last
|
|
218
|
+
}[event.key] ?? Math.min(last, Math.max(0, at + step))].focus();
|
|
219
|
+
};
|
|
220
|
+
const triggerIcon = isOpen ? closeIcon ?? /* @__PURE__ */ jsx(Icon, {
|
|
221
|
+
name: "close",
|
|
222
|
+
color: "inherit"
|
|
223
|
+
}) : icon ?? /* @__PURE__ */ jsx(Icon, {
|
|
224
|
+
name: "add",
|
|
225
|
+
color: "inherit"
|
|
226
|
+
});
|
|
227
|
+
const isExtended = label !== void 0;
|
|
228
|
+
const context = useMemo(() => ({
|
|
229
|
+
close,
|
|
230
|
+
size
|
|
231
|
+
}), [close, size]);
|
|
232
|
+
const unfolding = isBefore ? [...items].reverse() : items;
|
|
233
|
+
return /* @__PURE__ */ jsx(FabMenuContext.Provider, {
|
|
234
|
+
value: context,
|
|
235
|
+
children: /* @__PURE__ */ jsxs(FabMenuRoot, {
|
|
236
|
+
ref: rootRef,
|
|
237
|
+
className,
|
|
238
|
+
"data-testid": dataTestid,
|
|
239
|
+
onKeyDown: handleKeyDown,
|
|
240
|
+
...spaceProps,
|
|
241
|
+
children: [/* @__PURE__ */ jsx(FabMenuList, {
|
|
242
|
+
ref: listRef,
|
|
243
|
+
id: listId,
|
|
244
|
+
direction,
|
|
245
|
+
align,
|
|
246
|
+
maxWidth: layout.maxWidth,
|
|
247
|
+
maxHeight: layout.maxHeight,
|
|
248
|
+
children: items.map((item) => /* @__PURE__ */ jsx(Zoom, {
|
|
249
|
+
isShown: isOpen,
|
|
250
|
+
shouldAppear: false,
|
|
251
|
+
timeout: {
|
|
252
|
+
enter: 225 + 40 * unfolding.indexOf(item),
|
|
253
|
+
exit: 150
|
|
254
|
+
},
|
|
255
|
+
children: item
|
|
256
|
+
}, item.key))
|
|
257
|
+
}), /* @__PURE__ */ jsx(Fab, {
|
|
258
|
+
ref: triggerRef,
|
|
259
|
+
variant: isExtended ? "extended" : "circular",
|
|
260
|
+
color: color ?? dp.color ?? "primary",
|
|
261
|
+
size,
|
|
262
|
+
startIcon: isExtended ? triggerIcon : void 0,
|
|
263
|
+
"aria-label": isExtended ? void 0 : ariaLabel,
|
|
264
|
+
"aria-expanded": isOpen,
|
|
265
|
+
"aria-controls": isOpen ? listId : void 0,
|
|
266
|
+
onClick: (event) => isOpen ? close(event) : open(event),
|
|
267
|
+
children: isExtended ? label : triggerIcon
|
|
268
|
+
})]
|
|
269
|
+
})
|
|
270
|
+
});
|
|
271
|
+
}
|
|
272
|
+
//#endregion
|
|
273
|
+
export { FabMenu as t };
|
|
@@ -0,0 +1,279 @@
|
|
|
1
|
+
const require_src = require("./src-DU81aGy9.cjs");
|
|
2
|
+
const require_theme = require("./theme-DzfwuzMZ.cjs");
|
|
3
|
+
const require_useControlled = require("./useControlled-C666KpQ0.cjs");
|
|
4
|
+
const require_Icon = require("./Icon-BE7bRsqR.cjs");
|
|
5
|
+
const require_isRtl = require("./isRtl-DTkYHRPo.cjs");
|
|
6
|
+
const require_Fab = require("./Fab.cjs");
|
|
7
|
+
const require_Zoom = require("./Zoom.cjs");
|
|
8
|
+
const require_FabMenuContext = require("./FabMenuContext-BZslb0lL.cjs");
|
|
9
|
+
let react = require("react");
|
|
10
|
+
let react_jsx_runtime = require("react/jsx-runtime");
|
|
11
|
+
let _soroush_tech_styled_system_should_forward_prop = require("@soroush.tech/styled-system/should-forward-prop");
|
|
12
|
+
//#region src/FabMenu/hooks/useFabMenuLayout.ts
|
|
13
|
+
const px = (length) => Number.parseFloat(String(length));
|
|
14
|
+
const isSame = (first, second) => first.direction === second.direction && first.maxWidth === second.maxWidth && first.maxHeight === second.maxHeight;
|
|
15
|
+
/**
|
|
16
|
+
* Measures the actions against the window as the menu opens, and as the window or the page
|
|
17
|
+
* moves under it: a row that is wider than the room beside the trigger becomes a column - above it
|
|
18
|
+
* where there is more room above, else below - and a column is no wider or taller than the room it
|
|
19
|
+
* has, so a long label is cut with an ellipsis and a long column scrolls. Nothing is measured while
|
|
20
|
+
* the menu is closed, and the layout is the one asked for until it opens. The room kept from the
|
|
21
|
+
* window's edge is `theme.space[2]`, the step between the actions `theme.space[1]`.
|
|
22
|
+
*/
|
|
23
|
+
function useFabMenuLayout({ isOpen, direction, align, listRef, triggerRef, itemCount }) {
|
|
24
|
+
const theme = require_theme.useTheme();
|
|
25
|
+
const margin = px(theme.space[2]);
|
|
26
|
+
const gap = px(theme.space[1]);
|
|
27
|
+
const [layout, setLayout] = (0, react.useState)({ direction });
|
|
28
|
+
(0, react.useLayoutEffect)(() => {
|
|
29
|
+
if (!isOpen) return void 0;
|
|
30
|
+
const asked = { direction };
|
|
31
|
+
const settle = (next) => setLayout((current) => isSame(current, next) ? current : next);
|
|
32
|
+
const measure = () => {
|
|
33
|
+
const list = listRef.current;
|
|
34
|
+
const trigger = triggerRef.current;
|
|
35
|
+
const rect = trigger.getBoundingClientRect();
|
|
36
|
+
const rtl = require_isRtl.isRtl(trigger);
|
|
37
|
+
const room = {
|
|
38
|
+
top: rect.top - margin,
|
|
39
|
+
bottom: window.innerHeight - rect.bottom - margin,
|
|
40
|
+
left: rect.left - margin,
|
|
41
|
+
right: window.innerWidth - rect.right - margin
|
|
42
|
+
};
|
|
43
|
+
let column = direction;
|
|
44
|
+
if (direction === "left" || direction === "right") {
|
|
45
|
+
const items = [...list.querySelectorAll("[data-fab-menu-item]")];
|
|
46
|
+
if (items.reduce((sum, item) => {
|
|
47
|
+
const text = item.querySelector("[data-fab-label]");
|
|
48
|
+
return sum + item.offsetWidth + (text.scrollWidth - text.clientWidth);
|
|
49
|
+
}, 0) + gap * items.length <= (direction === "left" !== rtl ? room.left : room.right)) return settle(asked);
|
|
50
|
+
column = room.top >= room.bottom ? "up" : "down";
|
|
51
|
+
}
|
|
52
|
+
const height = (column === "up" ? room.top : room.bottom) - gap;
|
|
53
|
+
const width = align === "end" !== rtl ? rect.right - margin : window.innerWidth - rect.left - margin;
|
|
54
|
+
return settle({
|
|
55
|
+
direction: column,
|
|
56
|
+
maxWidth: Math.max(0, width),
|
|
57
|
+
maxHeight: list.scrollHeight > height ? Math.max(0, height) : void 0
|
|
58
|
+
});
|
|
59
|
+
};
|
|
60
|
+
measure();
|
|
61
|
+
window.addEventListener("resize", measure);
|
|
62
|
+
window.addEventListener("scroll", measure, { passive: true });
|
|
63
|
+
return () => {
|
|
64
|
+
window.removeEventListener("resize", measure);
|
|
65
|
+
window.removeEventListener("scroll", measure);
|
|
66
|
+
};
|
|
67
|
+
}, [
|
|
68
|
+
isOpen,
|
|
69
|
+
direction,
|
|
70
|
+
align,
|
|
71
|
+
itemCount,
|
|
72
|
+
margin,
|
|
73
|
+
gap,
|
|
74
|
+
listRef,
|
|
75
|
+
triggerRef
|
|
76
|
+
]);
|
|
77
|
+
return isOpen ? layout : { direction };
|
|
78
|
+
}
|
|
79
|
+
//#endregion
|
|
80
|
+
//#region src/FabMenu/FabMenu/FabMenu.tsx
|
|
81
|
+
const FabMenuRoot = require_src.styled("div", {
|
|
82
|
+
name: "FabMenu",
|
|
83
|
+
label: "FabMenu",
|
|
84
|
+
shouldForwardProp: (0, _soroush_tech_styled_system_should_forward_prop.createShouldForwardProp)([..._soroush_tech_styled_system_should_forward_prop.props]),
|
|
85
|
+
systemProps: [require_src.src_exports.space]
|
|
86
|
+
})({
|
|
87
|
+
position: "relative",
|
|
88
|
+
display: "inline-flex"
|
|
89
|
+
});
|
|
90
|
+
const FabMenuList = require_src.styled("div", {
|
|
91
|
+
name: "FabMenu",
|
|
92
|
+
slot: "list",
|
|
93
|
+
label: "FabMenuList",
|
|
94
|
+
shouldForwardProp: (0, _soroush_tech_styled_system_should_forward_prop.createShouldForwardProp)([
|
|
95
|
+
"direction",
|
|
96
|
+
"align",
|
|
97
|
+
"maxWidth",
|
|
98
|
+
"maxHeight"
|
|
99
|
+
])
|
|
100
|
+
})(({ theme, direction, align, maxWidth, maxHeight }) => {
|
|
101
|
+
const clear = `calc(100% + ${theme.space[1]})`;
|
|
102
|
+
const base = {
|
|
103
|
+
position: "absolute",
|
|
104
|
+
display: "flex",
|
|
105
|
+
gap: theme.space[1],
|
|
106
|
+
width: "max-content"
|
|
107
|
+
};
|
|
108
|
+
if (direction === "left" || direction === "right") return {
|
|
109
|
+
...base,
|
|
110
|
+
flexDirection: "row",
|
|
111
|
+
top: 0,
|
|
112
|
+
bottom: 0,
|
|
113
|
+
alignItems: "center",
|
|
114
|
+
[direction === "left" ? "insetInlineEnd" : "insetInlineStart"]: clear
|
|
115
|
+
};
|
|
116
|
+
return {
|
|
117
|
+
...base,
|
|
118
|
+
flexDirection: "column",
|
|
119
|
+
...maxWidth !== void 0 && { maxWidth },
|
|
120
|
+
...maxHeight !== void 0 && {
|
|
121
|
+
maxHeight,
|
|
122
|
+
overflowY: "auto",
|
|
123
|
+
overscrollBehavior: "contain",
|
|
124
|
+
scrollbarWidth: "thin",
|
|
125
|
+
padding: theme.space[.5]
|
|
126
|
+
},
|
|
127
|
+
[direction === "up" ? "bottom" : "top"]: clear,
|
|
128
|
+
[align === "end" ? "insetInlineEnd" : "insetInlineStart"]: 0,
|
|
129
|
+
alignItems: align === "end" ? "flex-end" : "flex-start"
|
|
130
|
+
};
|
|
131
|
+
});
|
|
132
|
+
const getItems = (children) => react.Children.toArray(children).flatMap((child) => {
|
|
133
|
+
if (!(0, react.isValidElement)(child)) return [];
|
|
134
|
+
if (child.type !== react.Fragment) return [child];
|
|
135
|
+
return getItems(child.props.children).map((inner) => (0, react.cloneElement)(inner, { key: `${child.key}/${inner.key}` }));
|
|
136
|
+
});
|
|
137
|
+
const ITEMS = "[data-fab-menu-item]:not(:disabled)";
|
|
138
|
+
/**
|
|
139
|
+
* @description A `Fab` that opens a stack of actions - extended pills, each a `FabMenuItem` - from
|
|
140
|
+
* one corner of a page. The trigger is a disclosure button: `aria-expanded` and `aria-controls`,
|
|
141
|
+
* its icon turning to a close one while open. The actions zoom in over `theme.transitions` and are
|
|
142
|
+
* out of the tree while closed. Escape, a press away, or choosing an action closes it and, for
|
|
143
|
+
* Escape and an action, returns the focus to the trigger; the arrow keys, Home and End walk the
|
|
144
|
+
* actions and the trigger in the order they are drawn. Where it floats is the page's.
|
|
145
|
+
*/
|
|
146
|
+
function FabMenu({ children, icon, closeIcon, label, "aria-label": ariaLabel, isOpen: isOpenProp, defaultOpen = false, onOpen, onClose, direction: directionProp, align: alignProp, color, size: sizeProp, className, "data-testid": dataTestid, ...spaceProps }) {
|
|
147
|
+
const dp = require_theme.useDefaultProps("FabMenu");
|
|
148
|
+
const asked = directionProp ?? dp.direction ?? "up";
|
|
149
|
+
const align = alignProp ?? dp.align ?? "end";
|
|
150
|
+
const size = sizeProp ?? dp.size ?? "md";
|
|
151
|
+
const [isOpen, setIsOpen] = require_useControlled.useControlled({
|
|
152
|
+
controlled: isOpenProp,
|
|
153
|
+
default: defaultOpen
|
|
154
|
+
});
|
|
155
|
+
const listId = (0, react.useId)();
|
|
156
|
+
const rootRef = (0, react.useRef)(null);
|
|
157
|
+
const listRef = (0, react.useRef)(null);
|
|
158
|
+
const triggerRef = (0, react.useRef)(null);
|
|
159
|
+
const open = (event) => {
|
|
160
|
+
setIsOpen(true);
|
|
161
|
+
onOpen?.(event);
|
|
162
|
+
};
|
|
163
|
+
const close = (0, react.useCallback)((event) => {
|
|
164
|
+
setIsOpen(false);
|
|
165
|
+
onClose?.(event);
|
|
166
|
+
if (event.type === "click" || event.type === "keydown") triggerRef.current.focus();
|
|
167
|
+
}, [setIsOpen, onClose]);
|
|
168
|
+
(0, react.useEffect)(() => {
|
|
169
|
+
if (!isOpen) return void 0;
|
|
170
|
+
const handlePointerDown = (event) => {
|
|
171
|
+
if (!rootRef.current?.contains(event.target)) close(event);
|
|
172
|
+
};
|
|
173
|
+
document.addEventListener("pointerdown", handlePointerDown);
|
|
174
|
+
return () => document.removeEventListener("pointerdown", handlePointerDown);
|
|
175
|
+
}, [isOpen, close]);
|
|
176
|
+
const items = getItems(children);
|
|
177
|
+
const layout = useFabMenuLayout({
|
|
178
|
+
isOpen,
|
|
179
|
+
direction: asked,
|
|
180
|
+
align,
|
|
181
|
+
listRef,
|
|
182
|
+
triggerRef,
|
|
183
|
+
itemCount: items.length
|
|
184
|
+
});
|
|
185
|
+
const direction = layout.direction;
|
|
186
|
+
const isRow = direction === "left" || direction === "right";
|
|
187
|
+
const isBefore = direction === "up" || direction === "left";
|
|
188
|
+
const handleKeyDown = (event) => {
|
|
189
|
+
if (event.key === "Escape" && isOpen) {
|
|
190
|
+
event.preventDefault();
|
|
191
|
+
close(event);
|
|
192
|
+
return;
|
|
193
|
+
}
|
|
194
|
+
const [back, forward] = isRow ? ["ArrowLeft", "ArrowRight"] : ["ArrowUp", "ArrowDown"];
|
|
195
|
+
if (![
|
|
196
|
+
back,
|
|
197
|
+
forward,
|
|
198
|
+
"Home",
|
|
199
|
+
"End"
|
|
200
|
+
].includes(event.key)) return;
|
|
201
|
+
if (!isOpen) {
|
|
202
|
+
if (event.key === back || event.key === forward) {
|
|
203
|
+
event.preventDefault();
|
|
204
|
+
open(event);
|
|
205
|
+
}
|
|
206
|
+
return;
|
|
207
|
+
}
|
|
208
|
+
const found = [...rootRef.current.querySelectorAll(ITEMS)];
|
|
209
|
+
const drawn = isBefore ? [...found, triggerRef.current] : [triggerRef.current, ...found];
|
|
210
|
+
const at = drawn.indexOf(document.activeElement);
|
|
211
|
+
if (at === -1) return;
|
|
212
|
+
event.preventDefault();
|
|
213
|
+
const last = drawn.length - 1;
|
|
214
|
+
const toward = isRow && require_isRtl.isRtl(rootRef.current) ? back : forward;
|
|
215
|
+
const step = event.key === toward ? 1 : -1;
|
|
216
|
+
drawn[{
|
|
217
|
+
Home: 0,
|
|
218
|
+
End: last
|
|
219
|
+
}[event.key] ?? Math.min(last, Math.max(0, at + step))].focus();
|
|
220
|
+
};
|
|
221
|
+
const triggerIcon = isOpen ? closeIcon ?? /* @__PURE__ */ (0, react_jsx_runtime.jsx)(require_Icon.Icon, {
|
|
222
|
+
name: "close",
|
|
223
|
+
color: "inherit"
|
|
224
|
+
}) : icon ?? /* @__PURE__ */ (0, react_jsx_runtime.jsx)(require_Icon.Icon, {
|
|
225
|
+
name: "add",
|
|
226
|
+
color: "inherit"
|
|
227
|
+
});
|
|
228
|
+
const isExtended = label !== void 0;
|
|
229
|
+
const context = (0, react.useMemo)(() => ({
|
|
230
|
+
close,
|
|
231
|
+
size
|
|
232
|
+
}), [close, size]);
|
|
233
|
+
const unfolding = isBefore ? [...items].reverse() : items;
|
|
234
|
+
return /* @__PURE__ */ (0, react_jsx_runtime.jsx)(require_FabMenuContext.FabMenuContext.Provider, {
|
|
235
|
+
value: context,
|
|
236
|
+
children: /* @__PURE__ */ (0, react_jsx_runtime.jsxs)(FabMenuRoot, {
|
|
237
|
+
ref: rootRef,
|
|
238
|
+
className,
|
|
239
|
+
"data-testid": dataTestid,
|
|
240
|
+
onKeyDown: handleKeyDown,
|
|
241
|
+
...spaceProps,
|
|
242
|
+
children: [/* @__PURE__ */ (0, react_jsx_runtime.jsx)(FabMenuList, {
|
|
243
|
+
ref: listRef,
|
|
244
|
+
id: listId,
|
|
245
|
+
direction,
|
|
246
|
+
align,
|
|
247
|
+
maxWidth: layout.maxWidth,
|
|
248
|
+
maxHeight: layout.maxHeight,
|
|
249
|
+
children: items.map((item) => /* @__PURE__ */ (0, react_jsx_runtime.jsx)(require_Zoom.Zoom, {
|
|
250
|
+
isShown: isOpen,
|
|
251
|
+
shouldAppear: false,
|
|
252
|
+
timeout: {
|
|
253
|
+
enter: 225 + 40 * unfolding.indexOf(item),
|
|
254
|
+
exit: 150
|
|
255
|
+
},
|
|
256
|
+
children: item
|
|
257
|
+
}, item.key))
|
|
258
|
+
}), /* @__PURE__ */ (0, react_jsx_runtime.jsx)(require_Fab.Fab, {
|
|
259
|
+
ref: triggerRef,
|
|
260
|
+
variant: isExtended ? "extended" : "circular",
|
|
261
|
+
color: color ?? dp.color ?? "primary",
|
|
262
|
+
size,
|
|
263
|
+
startIcon: isExtended ? triggerIcon : void 0,
|
|
264
|
+
"aria-label": isExtended ? void 0 : ariaLabel,
|
|
265
|
+
"aria-expanded": isOpen,
|
|
266
|
+
"aria-controls": isOpen ? listId : void 0,
|
|
267
|
+
onClick: (event) => isOpen ? close(event) : open(event),
|
|
268
|
+
children: isExtended ? label : triggerIcon
|
|
269
|
+
})]
|
|
270
|
+
})
|
|
271
|
+
});
|
|
272
|
+
}
|
|
273
|
+
//#endregion
|
|
274
|
+
Object.defineProperty(exports, "FabMenu", {
|
|
275
|
+
enumerable: true,
|
|
276
|
+
get: function() {
|
|
277
|
+
return FabMenu;
|
|
278
|
+
}
|
|
279
|
+
});
|
package/dist/FabMenu.cjs
ADDED
|
@@ -0,0 +1,5 @@
|
|
|
1
|
+
Object.defineProperty(exports, Symbol.toStringTag, { value: "Module" });
|
|
2
|
+
const require_FabMenu = require("./FabMenu-RiVtzrKe.cjs");
|
|
3
|
+
const require_FabMenu_FabMenuItem = require("./FabMenu/FabMenuItem.cjs");
|
|
4
|
+
exports.FabMenu = require_FabMenu.FabMenu;
|
|
5
|
+
exports.FabMenuItem = require_FabMenu_FabMenuItem.FabMenuItem;
|
package/dist/FabMenu.mjs
ADDED
|
@@ -0,0 +1,22 @@
|
|
|
1
|
+
let react = require("react");
|
|
2
|
+
//#region src/FabMenu/FabMenuContext.ts
|
|
3
|
+
const FabMenuContext = (0, react.createContext)(null);
|
|
4
|
+
/** The menu a part sits in - a part with none is a mistake, so it says so. */
|
|
5
|
+
function useFabMenu(part) {
|
|
6
|
+
const menu = (0, react.useContext)(FabMenuContext);
|
|
7
|
+
if (!menu) throw new Error(`A ${part} must be inside a FabMenu.`);
|
|
8
|
+
return menu;
|
|
9
|
+
}
|
|
10
|
+
//#endregion
|
|
11
|
+
Object.defineProperty(exports, "FabMenuContext", {
|
|
12
|
+
enumerable: true,
|
|
13
|
+
get: function() {
|
|
14
|
+
return FabMenuContext;
|
|
15
|
+
}
|
|
16
|
+
});
|
|
17
|
+
Object.defineProperty(exports, "useFabMenu", {
|
|
18
|
+
enumerable: true,
|
|
19
|
+
get: function() {
|
|
20
|
+
return useFabMenu;
|
|
21
|
+
}
|
|
22
|
+
});
|
|
@@ -0,0 +1,11 @@
|
|
|
1
|
+
import { createContext, useContext } from "react";
|
|
2
|
+
//#region src/FabMenu/FabMenuContext.ts
|
|
3
|
+
const FabMenuContext = createContext(null);
|
|
4
|
+
/** The menu a part sits in - a part with none is a mistake, so it says so. */
|
|
5
|
+
function useFabMenu(part) {
|
|
6
|
+
const menu = useContext(FabMenuContext);
|
|
7
|
+
if (!menu) throw new Error(`A ${part} must be inside a FabMenu.`);
|
|
8
|
+
return menu;
|
|
9
|
+
}
|
|
10
|
+
//#endregion
|
|
11
|
+
export { useFabMenu as n, FabMenuContext as t };
|