@soroush.tech/design-system 2.0.0-rc.1 → 2.0.0-rc.3
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 +30 -10
- package/dist/AppBar.d.cts +1 -3
- package/dist/AppBar.d.mts +1 -3
- package/dist/Avatar.cjs +1 -1
- package/dist/Avatar.d.cts +1 -3
- package/dist/Avatar.d.mts +1 -3
- package/dist/Avatar.mjs +1 -1
- package/dist/Backdrop.d.cts +1 -1
- package/dist/Backdrop.d.mts +1 -1
- package/dist/Breadcrumbs.cjs +132 -0
- package/dist/Breadcrumbs.d.cts +40 -0
- package/dist/Breadcrumbs.d.mts +40 -0
- package/dist/Breadcrumbs.mjs +131 -0
- package/dist/Button.cjs +1 -1
- package/dist/Button.d.cts +1 -1
- package/dist/Button.d.mts +1 -1
- package/dist/Button.mjs +1 -1
- package/dist/ButtonGroup.d.cts +1 -1
- package/dist/ButtonGroup.d.mts +1 -1
- package/dist/Card.cjs +3 -3
- package/dist/Card.d.cts +4 -3
- package/dist/Card.d.mts +4 -3
- package/dist/Card.mjs +3 -3
- package/dist/Checkbox.d.cts +1 -2
- package/dist/Checkbox.d.mts +1 -2
- package/dist/CircularProgress.d.cts +2 -3
- package/dist/CircularProgress.d.mts +2 -3
- package/dist/Drawer.d.cts +3 -2
- package/dist/Drawer.d.mts +3 -2
- 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 +10 -2
- package/dist/FormControl.d.cts +9 -2
- package/dist/FormControl.d.mts +9 -2
- package/dist/FormControl.mjs +10 -2
- package/dist/FormHelperText.d.cts +1 -1
- package/dist/FormHelperText.d.mts +1 -1
- package/dist/FormLabel.cjs +9 -1
- package/dist/FormLabel.d.cts +2 -2
- package/dist/FormLabel.d.mts +2 -2
- package/dist/FormLabel.mjs +10 -2
- package/dist/Grid.d.cts +1 -3
- package/dist/Grid.d.mts +1 -3
- package/dist/{Icon-CH3asUJu.mjs → Icon-BihOAP4u.mjs} +52 -2
- package/dist/{Icon-CI6q2Eyi.cjs → Icon-D-EWsBVg.cjs} +52 -2
- 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 -2
- package/dist/Image.d.mts +1 -2
- package/dist/InputRange.cjs +675 -0
- package/dist/InputRange.d.cts +79 -0
- package/dist/InputRange.d.mts +79 -0
- package/dist/InputRange.mjs +673 -0
- package/dist/LinearProgress.d.cts +2 -3
- package/dist/LinearProgress.d.mts +2 -3
- package/dist/Link.cjs +1 -1
- package/dist/Link.d.cts +1 -1
- package/dist/Link.d.mts +1 -1
- package/dist/Link.mjs +1 -1
- package/dist/Menu/ContextMenu.cjs +146 -0
- package/dist/Menu/ContextMenu.d.cts +52 -0
- package/dist/Menu/ContextMenu.d.mts +52 -0
- package/dist/Menu/ContextMenu.mjs +145 -0
- package/dist/Menu/Menu.cjs +3 -0
- package/dist/Menu/Menu.d.cts +2 -0
- package/dist/Menu/Menu.d.mts +2 -0
- package/dist/Menu/Menu.mjs +2 -0
- package/dist/Menu/MenuDivider.cjs +29 -0
- package/dist/Menu/MenuDivider.d.cts +12 -0
- package/dist/Menu/MenuDivider.d.mts +12 -0
- package/dist/Menu/MenuDivider.mjs +28 -0
- package/dist/Menu/MenuItems.cjs +29 -0
- package/dist/Menu/MenuItems.d.cts +2 -0
- package/dist/Menu/MenuItems.d.mts +2 -0
- package/dist/Menu/MenuItems.mjs +28 -0
- package/dist/Menu/MenuList.cjs +3 -0
- package/dist/Menu/MenuList.d.cts +38 -0
- package/dist/Menu/MenuList.d.mts +38 -0
- package/dist/Menu/MenuList.mjs +2 -0
- package/dist/Menu-Cgg-sX4W.cjs +173 -0
- package/dist/Menu-CrzHc_cn.mjs +168 -0
- package/dist/Menu.cjs +13 -0
- package/dist/Menu.d.cts +7 -0
- package/dist/Menu.d.mts +7 -0
- package/dist/Menu.mjs +6 -0
- package/dist/MenuItem-BTP7Ijwi.cjs +673 -0
- package/dist/MenuItem-DUn4IZKK.mjs +649 -0
- package/dist/MenuItem.cjs +2 -148
- package/dist/MenuItem.d.cts +2 -52
- package/dist/MenuItem.d.mts +2 -52
- package/dist/MenuItem.mjs +1 -147
- package/dist/MenuList-B7msJ1IG.mjs +187 -0
- package/dist/MenuList-D4imLXAa.cjs +223 -0
- package/dist/MenuListContext-DKUOhNyw.d.cts +21 -0
- package/dist/MenuListContext-x-7lH4CH.d.mts +21 -0
- package/dist/Modal.d.cts +1 -1
- package/dist/Modal.d.mts +1 -1
- package/dist/NativeSelect.cjs +9 -8
- package/dist/NativeSelect.d.cts +3 -4
- package/dist/NativeSelect.d.mts +3 -4
- package/dist/NativeSelect.mjs +9 -8
- package/dist/NumberField.cjs +476 -0
- package/dist/NumberField.d.cts +74 -0
- package/dist/NumberField.d.mts +74 -0
- package/dist/NumberField.mjs +474 -0
- package/dist/Pagination/PaginationItem.cjs +1 -1
- package/dist/Pagination/PaginationItem.d.cts +1 -1
- package/dist/Pagination/PaginationItem.d.mts +1 -1
- package/dist/Pagination/PaginationItem.mjs +1 -1
- package/dist/Pagination.d.cts +2 -2
- package/dist/Pagination.d.mts +2 -2
- package/dist/Paper.cjs +1 -1
- package/dist/Paper.d.cts +2 -1
- package/dist/Paper.d.mts +2 -1
- package/dist/Paper.mjs +1 -1
- package/dist/{Popover-TpwRSORC.cjs → Popover-CiZfgiKE.cjs} +5 -125
- package/dist/Popover-QjM5Z1CR.mjs +133 -0
- package/dist/Popover.cjs +1 -1
- package/dist/Popover.d.cts +6 -7
- package/dist/Popover.d.mts +6 -7
- package/dist/Popover.mjs +1 -1
- package/dist/Pressable.cjs +1 -1
- package/dist/Pressable.d.cts +1 -1
- package/dist/Pressable.d.mts +1 -1
- package/dist/Pressable.mjs +1 -1
- package/dist/Quote.d.cts +2 -3
- package/dist/Quote.d.mts +2 -3
- package/dist/Radio.d.cts +1 -2
- package/dist/Radio.d.mts +1 -2
- package/dist/Rating.cjs +373 -0
- package/dist/Rating.d.cts +57 -0
- package/dist/Rating.d.mts +57 -0
- package/dist/Rating.mjs +371 -0
- package/dist/Select.cjs +5 -4
- package/dist/Select.d.cts +3 -4
- package/dist/Select.d.mts +3 -4
- package/dist/Select.mjs +7 -6
- package/dist/Sidebar/Sidebar.d.cts +1 -1
- package/dist/Sidebar/Sidebar.d.mts +1 -1
- package/dist/Sidebar/SidebarItem.cjs +1 -1
- package/dist/Sidebar/SidebarItem.d.cts +3 -4
- package/dist/Sidebar/SidebarItem.d.mts +3 -4
- package/dist/Sidebar/SidebarItem.mjs +3 -3
- package/dist/Skeleton.d.cts +1 -2
- package/dist/Skeleton.d.mts +1 -2
- package/dist/Switch.cjs +23 -16
- package/dist/Switch.d.cts +2 -3
- package/dist/Switch.d.mts +2 -3
- package/dist/Switch.mjs +25 -18
- package/dist/Table/Table.d.cts +2 -3
- package/dist/Table/Table.d.mts +2 -3
- package/dist/Table/TableBody.d.cts +1 -2
- package/dist/Table/TableBody.d.mts +1 -2
- package/dist/Table/TableCell.d.cts +1 -1
- package/dist/Table/TableCell.d.mts +1 -1
- package/dist/Table/TableContainer.d.cts +1 -3
- package/dist/Table/TableContainer.d.mts +1 -3
- package/dist/Table/TableControl.d.cts +1 -1
- package/dist/Table/TableControl.d.mts +1 -1
- package/dist/Table/TableControl.mjs +2 -2
- package/dist/Table/TableFooter.d.cts +1 -2
- package/dist/Table/TableFooter.d.mts +1 -2
- package/dist/Table/TableHead.d.cts +1 -2
- package/dist/Table/TableHead.d.mts +1 -2
- package/dist/Table/TablePagination.d.cts +2 -2
- package/dist/Table/TablePagination.d.mts +2 -2
- 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 -2
- package/dist/Table/TableRow.d.mts +1 -2
- 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-BeCxbtHH.d.cts → TableContext-DhuRf6Wy.d.mts} +1 -1
- package/dist/{TableContext-BiRiYkVZ.d.mts → TableContext-Duj1nVG7.d.cts} +1 -1
- package/dist/Tabs/Tab.cjs +306 -0
- package/dist/Tabs/Tab.d.cts +62 -0
- package/dist/Tabs/Tab.d.mts +62 -0
- package/dist/Tabs/Tab.mjs +305 -0
- package/dist/Tabs/TabContext.cjs +34 -0
- package/dist/Tabs/TabContext.d.cts +20 -0
- package/dist/Tabs/TabContext.d.mts +20 -0
- package/dist/Tabs/TabContext.mjs +33 -0
- package/dist/Tabs/TabList.cjs +31 -0
- package/dist/Tabs/TabList.d.cts +11 -0
- package/dist/Tabs/TabList.d.mts +11 -0
- package/dist/Tabs/TabList.mjs +30 -0
- package/dist/Tabs/TabPanel.cjs +40 -0
- package/dist/Tabs/TabPanel.d.cts +27 -0
- package/dist/Tabs/TabPanel.d.mts +27 -0
- package/dist/Tabs/TabPanel.mjs +38 -0
- package/dist/Tabs/TabScrollButton.cjs +93 -0
- package/dist/Tabs/TabScrollButton.d.cts +2 -0
- package/dist/Tabs/TabScrollButton.d.mts +2 -0
- package/dist/Tabs/TabScrollButton.mjs +91 -0
- package/dist/Tabs/Tabs.cjs +3 -0
- package/dist/Tabs/Tabs.d.cts +3 -0
- package/dist/Tabs/Tabs.d.mts +3 -0
- package/dist/Tabs/Tabs.mjs +2 -0
- package/dist/Tabs-BTNOJx5v.mjs +634 -0
- package/dist/Tabs-D4tWCq78.cjs +646 -0
- package/dist/Tabs.cjs +13 -0
- package/dist/Tabs.d.cts +8 -0
- package/dist/Tabs.d.mts +8 -0
- package/dist/Tabs.mjs +7 -0
- package/dist/TabsContext-B_XHbjcS.d.cts +6 -0
- package/dist/TabsContext-Dn2kqUwr.d.mts +6 -0
- package/dist/TabsValueContext-D40zGCpE.cjs +19 -0
- package/dist/TabsValueContext-DvL3inf7.mjs +8 -0
- package/dist/TextInput.cjs +4 -4
- package/dist/TextInput.d.cts +2 -3
- package/dist/TextInput.d.mts +2 -3
- package/dist/TextInput.mjs +4 -4
- package/dist/ToggleButton/ToggleButton.cjs +1 -1
- package/dist/ToggleButton/ToggleButton.d.cts +1 -1
- package/dist/ToggleButton/ToggleButton.d.mts +1 -1
- package/dist/ToggleButton/ToggleButton.mjs +1 -1
- 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/TransferList.cjs +356 -0
- package/dist/TransferList.d.cts +67 -0
- package/dist/TransferList.d.mts +67 -0
- package/dist/TransferList.mjs +354 -0
- 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/catalog.cjs +4568 -0
- package/dist/catalog.d.cts +90 -0
- package/dist/catalog.d.mts +90 -0
- package/dist/catalog.mjs +4567 -0
- package/dist/computePopoverPosition-BIprs_xo.mjs +123 -0
- package/dist/computePopoverPosition-DiyEOHnU.cjs +128 -0
- package/dist/dividerLine-BNljcGlv.cjs +66 -0
- package/dist/dividerLine-FahY-M6_.mjs +31 -0
- package/dist/engine.d.cts +1 -1
- package/dist/engine.d.mts +1 -1
- package/dist/index-B1RFybA_.d.mts +72 -0
- package/dist/index-B4TeaB7b.d.cts +72 -0
- package/dist/{index-BUoVTCqX.d.mts → index-BGbTuHP9.d.mts} +1 -2
- package/dist/{index-Celm-8iN.d.cts → index-BHKgEOZJ.d.cts} +2 -3
- package/dist/{index-Chg6pSrr.d.mts → index-BQWjh4rK.d.mts} +2 -3
- package/dist/{index-B78VkB0-.d.cts → index-BelFIizY.d.cts} +2 -3
- package/dist/index-BkzZxHVj.d.mts +35 -0
- package/dist/{index-DbEnSf2m.d.cts → index-BrgwkY6z.d.mts} +3 -4
- package/dist/{index-Wnv6jCR3.d.mts → index-Bx0-6yeX.d.mts} +1 -2
- package/dist/index-BxVTIMnB.d.cts +1 -0
- package/dist/{index-BfZuh9c2.d.mts → index-ByYxVl9O.d.mts} +2 -3
- package/dist/index-CE5JG1us.d.mts +34 -0
- package/dist/{index-BhibLnZ0.d.cts → index-CG_1uPrD.d.mts} +2 -3
- package/dist/{themes-RX2UX5gD.d.mts → index-CJhK7JND.d.mts} +265 -8
- package/dist/{index-BB-dLv5V.d.mts → index-CQfJZADG.d.cts} +3 -4
- package/dist/{index-CxUsrlg1.d.cts → index-CUz2h5xY.d.mts} +2 -3
- package/dist/{index-Bid71KeF.d.cts → index-CbFaWtjK.d.mts} +2 -2
- package/dist/{index-DdqdSOct.d.cts → index-ChXeKJCk.d.cts} +1 -2
- package/dist/index-CknoXDLQ.d.cts +35 -0
- package/dist/{index-BSqet8aO.d.cts → index-ClZyaZrR.d.mts} +2 -3
- package/dist/{index-DXvQ-JVZ.d.mts → index-DAwcmIjN.d.cts} +2 -3
- package/dist/index-DGnXJwLj.d.mts +72 -0
- package/dist/{themes-Kbk9h5cN.d.cts → index-DJ0f69wh.d.cts} +262 -5
- package/dist/index-DWjz5ZzG.d.cts +72 -0
- package/dist/{index-DNwF3DUX.d.cts → index-DYF8sRE-.d.cts} +2 -3
- package/dist/index-DaIIo5QU.d.mts +1 -0
- package/dist/{index-CrN4MSUF.d.cts → index-DchHf5cF.d.cts} +1 -1
- package/dist/{index-S-ClM6WM.d.mts → index-DtYjdBvO.d.cts} +2 -2
- package/dist/{index-Ctqajtac.d.cts → index-Dv_fk1_F.d.cts} +27 -3
- package/dist/{index-smqjMLAZ.d.mts → index-K5exjvnX.d.cts} +2 -3
- package/dist/index-KnXhlKMr.d.cts +34 -0
- package/dist/index-WHFhjfgy.d.cts +98 -0
- package/dist/{index-GpnmW6vu.d.mts → index-YKrfFC_I.d.cts} +2 -3
- package/dist/index-bpnLB_4K.d.mts +98 -0
- package/dist/{index-VOsBSWEu.d.mts → index-h4dYtVrp.d.mts} +1 -1
- package/dist/{index-DO9J-Fla.d.mts → index-ha1WjSZ5.d.mts} +27 -3
- package/dist/{index-Belxmt1X.d.cts → index-nqUA_6J_.d.cts} +1 -2
- package/dist/{index-nc4Sxiy9.d.mts → index-pTNq3iQn.d.mts} +2 -3
- package/dist/index.d.cts +1 -2
- package/dist/index.d.mts +1 -2
- package/dist/isRtl-BJDtm86G.mjs +7 -0
- package/dist/isRtl-DTkYHRPo.cjs +12 -0
- package/dist/precision-B1lhxnnO.mjs +25 -0
- package/dist/precision-B58cTPB2.cjs +48 -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/surfaceSystem-BGQBoXv_.cjs +38 -0
- package/dist/surfaceSystem-D8TbmKy3.mjs +21 -0
- package/dist/theme-BxXuXRgQ.cjs +137 -0
- package/dist/theme-Z9_QludW.mjs +102 -0
- package/dist/theme.cjs +25 -24
- package/dist/theme.d.cts +3 -3
- package/dist/theme.d.mts +3 -3
- package/dist/theme.mjs +2 -1
- package/dist/{theme-CDVxig_g.mjs → themes-L-dE7_ck.mjs} +10 -110
- package/dist/{theme-BXlAP3xf.cjs → themes-gd6tcmqS.cjs} +0 -136
- package/dist/useControlled-C666KpQ0.cjs +18 -0
- package/dist/useControlled-CBRLsO-H.mjs +13 -0
- package/dist/{useTablePagination-COTiNH_8.d.mts → useTablePagination-C-u3ru4N.d.cts} +1 -1
- package/dist/{useTablePagination-WFkaUZu8.d.cts → useTablePagination-D-39ZmQh.d.mts} +1 -1
- package/package.json +83 -2
- package/dist/Popover-DwnSLpp1.mjs +0 -253
- package/dist/index-B_dKjEDR.d.mts +0 -23
- package/dist/index-C1WqEDtQ.d.mts +0 -69
- package/dist/index-CA7HnbtH.d.cts +0 -21
- package/dist/index-CKZaErxJ.d.mts +0 -21
- package/dist/index-DBUwu65Z.d.cts +0 -69
- package/dist/index-DzQJSYIh.d.cts +0 -23
- package/dist/index-cuv3o-L7.d.mts +0 -34
- package/dist/index-nB94D7UM.d.cts +0 -34
package/dist/Link.d.cts
CHANGED
package/dist/Link.d.mts
CHANGED
package/dist/Link.mjs
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
import { o as styled } from "./src-DLGYOJMh.mjs";
|
|
2
2
|
import { t as themeDefault } from "./themeDefault-Z3KmyIbm.mjs";
|
|
3
|
-
import { r as useTheme } from "./theme-
|
|
3
|
+
import { r as useTheme } from "./theme-Z9_QludW.mjs";
|
|
4
4
|
import { Typography } from "./Typography.mjs";
|
|
5
5
|
import "react";
|
|
6
6
|
import { jsx } from "react/jsx-runtime";
|
|
@@ -0,0 +1,146 @@
|
|
|
1
|
+
Object.defineProperty(exports, Symbol.toStringTag, { value: "Module" });
|
|
2
|
+
const require_src = require("../src-DU81aGy9.cjs");
|
|
3
|
+
const require_theme = require("../theme-BxXuXRgQ.cjs");
|
|
4
|
+
const require_MenuList = require("../MenuList-D4imLXAa.cjs");
|
|
5
|
+
const require_MenuItem = require("../MenuItem-BTP7Ijwi.cjs");
|
|
6
|
+
const require_Menu_MenuItems = require("./MenuItems.cjs");
|
|
7
|
+
let react = require("react");
|
|
8
|
+
let react_jsx_runtime = require("react/jsx-runtime");
|
|
9
|
+
//#region src/Menu/ContextMenu/ContextMenu.tsx
|
|
10
|
+
const ContextMenuPaper = require_src.styled(require_MenuItem.MenuPaper, {
|
|
11
|
+
name: "ContextMenu",
|
|
12
|
+
slot: "paper",
|
|
13
|
+
label: "ContextMenuPaper"
|
|
14
|
+
})();
|
|
15
|
+
const ContextMenuRoot = require_src.styled("div", {
|
|
16
|
+
name: "ContextMenu",
|
|
17
|
+
label: "ContextMenu"
|
|
18
|
+
})({ display: "contents" });
|
|
19
|
+
const isMenuKey = (event) => event.key === "ContextMenu" || event.key === "F10" && event.shiftKey;
|
|
20
|
+
/** The element given, listening for a right-click and the context-menu keys. */
|
|
21
|
+
function ContextMenuTarget({ element, onContextMenu, onKeyDown }) {
|
|
22
|
+
return (0, react.cloneElement)(element, {
|
|
23
|
+
onContextMenu,
|
|
24
|
+
onKeyDown
|
|
25
|
+
});
|
|
26
|
+
}
|
|
27
|
+
/**
|
|
28
|
+
* @description A `MenuList` opened at the pointer by a right-click over its target, or at
|
|
29
|
+
* the focused element by the context-menu key or Shift+F10. It is placed and closes as
|
|
30
|
+
* `Menu` does - Escape, a chosen row or focus leaving - and gives focus back to where it
|
|
31
|
+
* was. The browser's own menu is held back only when this one opens.
|
|
32
|
+
*/
|
|
33
|
+
function ContextMenu({ target, children, items, onClose, onSelect, marginThreshold: marginThresholdProp, elevation: elevationProp, layer: layerProp, emptyLabel, color: colorProp, textColor: textColorProp, size: sizeProp, dense: denseProp, "aria-label": ariaLabel, className, "data-testid": dataTestid }) {
|
|
34
|
+
const dp = require_theme.useDefaultProps("ContextMenu");
|
|
35
|
+
const marginThreshold = marginThresholdProp ?? dp.marginThreshold ?? 2;
|
|
36
|
+
const elevation = elevationProp ?? dp.elevation ?? 8;
|
|
37
|
+
const layer = layerProp ?? dp.layer ?? "modal";
|
|
38
|
+
const color = colorProp ?? dp.color;
|
|
39
|
+
const textColor = textColorProp ?? dp.textColor;
|
|
40
|
+
const size = sizeProp ?? dp.size;
|
|
41
|
+
const dense = denseProp ?? dp.dense;
|
|
42
|
+
const theme = require_theme.useTheme();
|
|
43
|
+
const [point, setPoint] = (0, react.useState)(null);
|
|
44
|
+
const isOpen = point !== null;
|
|
45
|
+
const rootRef = (0, react.useRef)(null);
|
|
46
|
+
const surfaceRef = (0, react.useRef)(null);
|
|
47
|
+
const returnFocusRef = (0, react.useRef)(null);
|
|
48
|
+
const listId = (0, react.useId)();
|
|
49
|
+
const margin = Number.parseFloat(String(theme.space[marginThreshold]));
|
|
50
|
+
const menuContext = (0, react.useMemo)(() => ({
|
|
51
|
+
align: "start",
|
|
52
|
+
margin,
|
|
53
|
+
elevation,
|
|
54
|
+
layer
|
|
55
|
+
}), [
|
|
56
|
+
margin,
|
|
57
|
+
elevation,
|
|
58
|
+
layer
|
|
59
|
+
]);
|
|
60
|
+
require_MenuItem.useMenuPlacement({
|
|
61
|
+
isOpen,
|
|
62
|
+
anchorRef: rootRef,
|
|
63
|
+
anchorPosition: point,
|
|
64
|
+
surfaceRef,
|
|
65
|
+
placement: "below",
|
|
66
|
+
align: "start",
|
|
67
|
+
margin
|
|
68
|
+
});
|
|
69
|
+
const openAt = (top, left) => {
|
|
70
|
+
returnFocusRef.current = document.activeElement;
|
|
71
|
+
setPoint({
|
|
72
|
+
top,
|
|
73
|
+
left
|
|
74
|
+
});
|
|
75
|
+
};
|
|
76
|
+
const close = (0, react.useCallback)((event, reason) => {
|
|
77
|
+
setPoint(null);
|
|
78
|
+
onClose?.(event, reason);
|
|
79
|
+
if (reason !== "blur") returnFocusRef.current.focus();
|
|
80
|
+
}, [onClose]);
|
|
81
|
+
const handleActivate = (0, react.useCallback)((_value, event) => close(event, "select"), [close]);
|
|
82
|
+
const handleContextMenu = (event) => {
|
|
83
|
+
target.props.onContextMenu?.(event);
|
|
84
|
+
event.preventDefault();
|
|
85
|
+
openAt(event.clientY, event.clientX);
|
|
86
|
+
};
|
|
87
|
+
const handleKeyDown = (event) => {
|
|
88
|
+
target.props.onKeyDown?.(event);
|
|
89
|
+
if (!isMenuKey(event)) return;
|
|
90
|
+
event.preventDefault();
|
|
91
|
+
const { bottom, left } = event.target.getBoundingClientRect();
|
|
92
|
+
openAt(bottom, left);
|
|
93
|
+
};
|
|
94
|
+
const handleSurfaceKeyDown = (event) => {
|
|
95
|
+
if (event.key === "Escape") {
|
|
96
|
+
event.preventDefault();
|
|
97
|
+
close(event, "escapeKey");
|
|
98
|
+
}
|
|
99
|
+
};
|
|
100
|
+
const handleBlur = (event) => {
|
|
101
|
+
const next = event.relatedTarget;
|
|
102
|
+
if (isOpen && !event.currentTarget.contains(next)) close(event, "blur");
|
|
103
|
+
};
|
|
104
|
+
const hasRows = items ? items.length > 0 : react.Children.toArray(children).length > 0;
|
|
105
|
+
const rows = items ? /* @__PURE__ */ (0, react_jsx_runtime.jsx)(require_Menu_MenuItems.MenuItems, { items }) : children;
|
|
106
|
+
return /* @__PURE__ */ (0, react_jsx_runtime.jsxs)(ContextMenuRoot, {
|
|
107
|
+
ref: rootRef,
|
|
108
|
+
className,
|
|
109
|
+
"data-testid": dataTestid,
|
|
110
|
+
onBlur: handleBlur,
|
|
111
|
+
children: [/* @__PURE__ */ (0, react_jsx_runtime.jsx)(ContextMenuTarget, {
|
|
112
|
+
element: target,
|
|
113
|
+
onContextMenu: handleContextMenu,
|
|
114
|
+
onKeyDown: handleKeyDown
|
|
115
|
+
}), isOpen && /* @__PURE__ */ (0, react_jsx_runtime.jsx)(ContextMenuPaper, {
|
|
116
|
+
ref: surfaceRef,
|
|
117
|
+
elevation,
|
|
118
|
+
layer,
|
|
119
|
+
margin,
|
|
120
|
+
onKeyDown: handleSurfaceKeyDown,
|
|
121
|
+
children: /* @__PURE__ */ (0, react_jsx_runtime.jsx)(require_MenuItem.MenuContext.Provider, {
|
|
122
|
+
value: menuContext,
|
|
123
|
+
children: /* @__PURE__ */ (0, react_jsx_runtime.jsx)(require_MenuList.MenuActivationContext.Provider, {
|
|
124
|
+
value: handleActivate,
|
|
125
|
+
children: /* @__PURE__ */ (0, react_jsx_runtime.jsx)(require_MenuList.MenuList, {
|
|
126
|
+
id: listId,
|
|
127
|
+
"aria-label": ariaLabel,
|
|
128
|
+
shouldAutoFocus: true,
|
|
129
|
+
onSelect,
|
|
130
|
+
color,
|
|
131
|
+
textColor,
|
|
132
|
+
size,
|
|
133
|
+
dense,
|
|
134
|
+
width: "100%",
|
|
135
|
+
children: hasRows ? rows : emptyLabel != null && /* @__PURE__ */ (0, react_jsx_runtime.jsx)(require_MenuItem.MenuItem, {
|
|
136
|
+
disabled: true,
|
|
137
|
+
children: emptyLabel
|
|
138
|
+
})
|
|
139
|
+
})
|
|
140
|
+
})
|
|
141
|
+
})
|
|
142
|
+
})]
|
|
143
|
+
});
|
|
144
|
+
}
|
|
145
|
+
//#endregion
|
|
146
|
+
exports.ContextMenu = ContextMenu;
|
|
@@ -0,0 +1,52 @@
|
|
|
1
|
+
import { Gt as PaperElevation, W as Theme } from "../index-DJ0f69wh.cjs";
|
|
2
|
+
import "../index-BxVTIMnB.cjs";
|
|
3
|
+
import { t as MenuItemValue } from "../MenuListContext-DKUOhNyw.cjs";
|
|
4
|
+
import { n as MenuItemData } from "../index-CknoXDLQ.cjs";
|
|
5
|
+
import { n as MenuCloseReason } from "../index-DWjz5ZzG.cjs";
|
|
6
|
+
import { KeyboardEvent, MouseEvent, ReactElement, ReactNode, SyntheticEvent } from "react";
|
|
7
|
+
//#region src/Menu/ContextMenu/ContextMenu.d.ts
|
|
8
|
+
interface TargetProps {
|
|
9
|
+
onContextMenu?: (event: MouseEvent<HTMLElement>) => void;
|
|
10
|
+
onKeyDown?: (event: KeyboardEvent<HTMLElement>) => void;
|
|
11
|
+
}
|
|
12
|
+
interface ContextMenuProps {
|
|
13
|
+
/** The element whose right-click opens the menu - the canvas, a row, a card. Its own `onContextMenu` / `onKeyDown` still run. */
|
|
14
|
+
target: ReactElement<TargetProps>;
|
|
15
|
+
/** `MenuItem` rows and `MenuDivider`s. */
|
|
16
|
+
children?: ReactNode;
|
|
17
|
+
/** The rows as data, in place of `children`. */
|
|
18
|
+
items?: readonly MenuItemData[];
|
|
19
|
+
/** Fired when the menu asks to close, with why. */
|
|
20
|
+
onClose?: (event: SyntheticEvent, reason: MenuCloseReason) => void;
|
|
21
|
+
/** Fired with a row's `value` when a row that has one is chosen. */
|
|
22
|
+
onSelect?: (value: MenuItemValue) => void;
|
|
23
|
+
/** The least room between the list and the window's edge - a `theme.space` key. Default: `2`. */
|
|
24
|
+
marginThreshold?: keyof Theme['space'];
|
|
25
|
+
/** Shadow depth of the surface. Default: `8`. */
|
|
26
|
+
elevation?: PaperElevation;
|
|
27
|
+
/** Stacking layer from `theme.zOrder`. Default: `'modal'`. */
|
|
28
|
+
layer?: keyof Theme['zOrder'];
|
|
29
|
+
/** Shown as one disabled row when the menu has no rows. Without it, the list stays empty. */
|
|
30
|
+
emptyLabel?: ReactNode;
|
|
31
|
+
/** Accent color for every row - resolves to `theme.palette[color]`. */
|
|
32
|
+
color?: keyof Theme['palette'];
|
|
33
|
+
/** Base text color for every row - resolves against `theme.text`. */
|
|
34
|
+
textColor?: keyof Theme['text'];
|
|
35
|
+
/** Density token for every row - resolves against `theme.sizes`. */
|
|
36
|
+
size?: keyof Theme['sizes'];
|
|
37
|
+
/** Compact vertical padding for every row. */
|
|
38
|
+
dense?: boolean;
|
|
39
|
+
/** Names the list. */
|
|
40
|
+
'aria-label'?: string;
|
|
41
|
+
className?: string;
|
|
42
|
+
'data-testid'?: string;
|
|
43
|
+
}
|
|
44
|
+
/**
|
|
45
|
+
* @description A `MenuList` opened at the pointer by a right-click over its target, or at
|
|
46
|
+
* the focused element by the context-menu key or Shift+F10. It is placed and closes as
|
|
47
|
+
* `Menu` does - Escape, a chosen row or focus leaving - and gives focus back to where it
|
|
48
|
+
* was. The browser's own menu is held back only when this one opens.
|
|
49
|
+
*/
|
|
50
|
+
declare function ContextMenu({ target, children, items, onClose, onSelect, marginThreshold: marginThresholdProp, elevation: elevationProp, layer: layerProp, emptyLabel, color: colorProp, textColor: textColorProp, size: sizeProp, dense: denseProp, 'aria-label': ariaLabel, className, 'data-testid': dataTestid }: Readonly<ContextMenuProps>): import("react").JSX.Element;
|
|
51
|
+
//#endregion
|
|
52
|
+
export { ContextMenu, ContextMenuProps };
|
|
@@ -0,0 +1,52 @@
|
|
|
1
|
+
import { Gt as PaperElevation, W as Theme } from "../index-CJhK7JND.mjs";
|
|
2
|
+
import "../index-DaIIo5QU.mjs";
|
|
3
|
+
import { t as MenuItemValue } from "../MenuListContext-x-7lH4CH.mjs";
|
|
4
|
+
import { n as MenuItemData } from "../index-BkzZxHVj.mjs";
|
|
5
|
+
import { n as MenuCloseReason } from "../index-DGnXJwLj.mjs";
|
|
6
|
+
import { KeyboardEvent, MouseEvent, ReactElement, ReactNode, SyntheticEvent } from "react";
|
|
7
|
+
//#region src/Menu/ContextMenu/ContextMenu.d.ts
|
|
8
|
+
interface TargetProps {
|
|
9
|
+
onContextMenu?: (event: MouseEvent<HTMLElement>) => void;
|
|
10
|
+
onKeyDown?: (event: KeyboardEvent<HTMLElement>) => void;
|
|
11
|
+
}
|
|
12
|
+
interface ContextMenuProps {
|
|
13
|
+
/** The element whose right-click opens the menu - the canvas, a row, a card. Its own `onContextMenu` / `onKeyDown` still run. */
|
|
14
|
+
target: ReactElement<TargetProps>;
|
|
15
|
+
/** `MenuItem` rows and `MenuDivider`s. */
|
|
16
|
+
children?: ReactNode;
|
|
17
|
+
/** The rows as data, in place of `children`. */
|
|
18
|
+
items?: readonly MenuItemData[];
|
|
19
|
+
/** Fired when the menu asks to close, with why. */
|
|
20
|
+
onClose?: (event: SyntheticEvent, reason: MenuCloseReason) => void;
|
|
21
|
+
/** Fired with a row's `value` when a row that has one is chosen. */
|
|
22
|
+
onSelect?: (value: MenuItemValue) => void;
|
|
23
|
+
/** The least room between the list and the window's edge - a `theme.space` key. Default: `2`. */
|
|
24
|
+
marginThreshold?: keyof Theme['space'];
|
|
25
|
+
/** Shadow depth of the surface. Default: `8`. */
|
|
26
|
+
elevation?: PaperElevation;
|
|
27
|
+
/** Stacking layer from `theme.zOrder`. Default: `'modal'`. */
|
|
28
|
+
layer?: keyof Theme['zOrder'];
|
|
29
|
+
/** Shown as one disabled row when the menu has no rows. Without it, the list stays empty. */
|
|
30
|
+
emptyLabel?: ReactNode;
|
|
31
|
+
/** Accent color for every row - resolves to `theme.palette[color]`. */
|
|
32
|
+
color?: keyof Theme['palette'];
|
|
33
|
+
/** Base text color for every row - resolves against `theme.text`. */
|
|
34
|
+
textColor?: keyof Theme['text'];
|
|
35
|
+
/** Density token for every row - resolves against `theme.sizes`. */
|
|
36
|
+
size?: keyof Theme['sizes'];
|
|
37
|
+
/** Compact vertical padding for every row. */
|
|
38
|
+
dense?: boolean;
|
|
39
|
+
/** Names the list. */
|
|
40
|
+
'aria-label'?: string;
|
|
41
|
+
className?: string;
|
|
42
|
+
'data-testid'?: string;
|
|
43
|
+
}
|
|
44
|
+
/**
|
|
45
|
+
* @description A `MenuList` opened at the pointer by a right-click over its target, or at
|
|
46
|
+
* the focused element by the context-menu key or Shift+F10. It is placed and closes as
|
|
47
|
+
* `Menu` does - Escape, a chosen row or focus leaving - and gives focus back to where it
|
|
48
|
+
* was. The browser's own menu is held back only when this one opens.
|
|
49
|
+
*/
|
|
50
|
+
declare function ContextMenu({ target, children, items, onClose, onSelect, marginThreshold: marginThresholdProp, elevation: elevationProp, layer: layerProp, emptyLabel, color: colorProp, textColor: textColorProp, size: sizeProp, dense: denseProp, 'aria-label': ariaLabel, className, 'data-testid': dataTestid }: Readonly<ContextMenuProps>): import("react").JSX.Element;
|
|
51
|
+
//#endregion
|
|
52
|
+
export { ContextMenu, ContextMenuProps };
|
|
@@ -0,0 +1,145 @@
|
|
|
1
|
+
import { o as styled } from "../src-DLGYOJMh.mjs";
|
|
2
|
+
import { n as useDefaultProps, r as useTheme } from "../theme-Z9_QludW.mjs";
|
|
3
|
+
import { o as MenuActivationContext, t as MenuList } from "../MenuList-B7msJ1IG.mjs";
|
|
4
|
+
import { i as MenuPaper, n as useMenuPlacement, r as MenuContext, t as MenuItem } from "../MenuItem-DUn4IZKK.mjs";
|
|
5
|
+
import { MenuItems } from "./MenuItems.mjs";
|
|
6
|
+
import { Children, cloneElement, useCallback, useId, useMemo, useRef, useState } from "react";
|
|
7
|
+
import { jsx, jsxs } from "react/jsx-runtime";
|
|
8
|
+
//#region src/Menu/ContextMenu/ContextMenu.tsx
|
|
9
|
+
const ContextMenuPaper = styled(MenuPaper, {
|
|
10
|
+
name: "ContextMenu",
|
|
11
|
+
slot: "paper",
|
|
12
|
+
label: "ContextMenuPaper"
|
|
13
|
+
})();
|
|
14
|
+
const ContextMenuRoot = styled("div", {
|
|
15
|
+
name: "ContextMenu",
|
|
16
|
+
label: "ContextMenu"
|
|
17
|
+
})({ display: "contents" });
|
|
18
|
+
const isMenuKey = (event) => event.key === "ContextMenu" || event.key === "F10" && event.shiftKey;
|
|
19
|
+
/** The element given, listening for a right-click and the context-menu keys. */
|
|
20
|
+
function ContextMenuTarget({ element, onContextMenu, onKeyDown }) {
|
|
21
|
+
return cloneElement(element, {
|
|
22
|
+
onContextMenu,
|
|
23
|
+
onKeyDown
|
|
24
|
+
});
|
|
25
|
+
}
|
|
26
|
+
/**
|
|
27
|
+
* @description A `MenuList` opened at the pointer by a right-click over its target, or at
|
|
28
|
+
* the focused element by the context-menu key or Shift+F10. It is placed and closes as
|
|
29
|
+
* `Menu` does - Escape, a chosen row or focus leaving - and gives focus back to where it
|
|
30
|
+
* was. The browser's own menu is held back only when this one opens.
|
|
31
|
+
*/
|
|
32
|
+
function ContextMenu({ target, children, items, onClose, onSelect, marginThreshold: marginThresholdProp, elevation: elevationProp, layer: layerProp, emptyLabel, color: colorProp, textColor: textColorProp, size: sizeProp, dense: denseProp, "aria-label": ariaLabel, className, "data-testid": dataTestid }) {
|
|
33
|
+
const dp = useDefaultProps("ContextMenu");
|
|
34
|
+
const marginThreshold = marginThresholdProp ?? dp.marginThreshold ?? 2;
|
|
35
|
+
const elevation = elevationProp ?? dp.elevation ?? 8;
|
|
36
|
+
const layer = layerProp ?? dp.layer ?? "modal";
|
|
37
|
+
const color = colorProp ?? dp.color;
|
|
38
|
+
const textColor = textColorProp ?? dp.textColor;
|
|
39
|
+
const size = sizeProp ?? dp.size;
|
|
40
|
+
const dense = denseProp ?? dp.dense;
|
|
41
|
+
const theme = useTheme();
|
|
42
|
+
const [point, setPoint] = useState(null);
|
|
43
|
+
const isOpen = point !== null;
|
|
44
|
+
const rootRef = useRef(null);
|
|
45
|
+
const surfaceRef = useRef(null);
|
|
46
|
+
const returnFocusRef = useRef(null);
|
|
47
|
+
const listId = useId();
|
|
48
|
+
const margin = Number.parseFloat(String(theme.space[marginThreshold]));
|
|
49
|
+
const menuContext = useMemo(() => ({
|
|
50
|
+
align: "start",
|
|
51
|
+
margin,
|
|
52
|
+
elevation,
|
|
53
|
+
layer
|
|
54
|
+
}), [
|
|
55
|
+
margin,
|
|
56
|
+
elevation,
|
|
57
|
+
layer
|
|
58
|
+
]);
|
|
59
|
+
useMenuPlacement({
|
|
60
|
+
isOpen,
|
|
61
|
+
anchorRef: rootRef,
|
|
62
|
+
anchorPosition: point,
|
|
63
|
+
surfaceRef,
|
|
64
|
+
placement: "below",
|
|
65
|
+
align: "start",
|
|
66
|
+
margin
|
|
67
|
+
});
|
|
68
|
+
const openAt = (top, left) => {
|
|
69
|
+
returnFocusRef.current = document.activeElement;
|
|
70
|
+
setPoint({
|
|
71
|
+
top,
|
|
72
|
+
left
|
|
73
|
+
});
|
|
74
|
+
};
|
|
75
|
+
const close = useCallback((event, reason) => {
|
|
76
|
+
setPoint(null);
|
|
77
|
+
onClose?.(event, reason);
|
|
78
|
+
if (reason !== "blur") returnFocusRef.current.focus();
|
|
79
|
+
}, [onClose]);
|
|
80
|
+
const handleActivate = useCallback((_value, event) => close(event, "select"), [close]);
|
|
81
|
+
const handleContextMenu = (event) => {
|
|
82
|
+
target.props.onContextMenu?.(event);
|
|
83
|
+
event.preventDefault();
|
|
84
|
+
openAt(event.clientY, event.clientX);
|
|
85
|
+
};
|
|
86
|
+
const handleKeyDown = (event) => {
|
|
87
|
+
target.props.onKeyDown?.(event);
|
|
88
|
+
if (!isMenuKey(event)) return;
|
|
89
|
+
event.preventDefault();
|
|
90
|
+
const { bottom, left } = event.target.getBoundingClientRect();
|
|
91
|
+
openAt(bottom, left);
|
|
92
|
+
};
|
|
93
|
+
const handleSurfaceKeyDown = (event) => {
|
|
94
|
+
if (event.key === "Escape") {
|
|
95
|
+
event.preventDefault();
|
|
96
|
+
close(event, "escapeKey");
|
|
97
|
+
}
|
|
98
|
+
};
|
|
99
|
+
const handleBlur = (event) => {
|
|
100
|
+
const next = event.relatedTarget;
|
|
101
|
+
if (isOpen && !event.currentTarget.contains(next)) close(event, "blur");
|
|
102
|
+
};
|
|
103
|
+
const hasRows = items ? items.length > 0 : Children.toArray(children).length > 0;
|
|
104
|
+
const rows = items ? /* @__PURE__ */ jsx(MenuItems, { items }) : children;
|
|
105
|
+
return /* @__PURE__ */ jsxs(ContextMenuRoot, {
|
|
106
|
+
ref: rootRef,
|
|
107
|
+
className,
|
|
108
|
+
"data-testid": dataTestid,
|
|
109
|
+
onBlur: handleBlur,
|
|
110
|
+
children: [/* @__PURE__ */ jsx(ContextMenuTarget, {
|
|
111
|
+
element: target,
|
|
112
|
+
onContextMenu: handleContextMenu,
|
|
113
|
+
onKeyDown: handleKeyDown
|
|
114
|
+
}), isOpen && /* @__PURE__ */ jsx(ContextMenuPaper, {
|
|
115
|
+
ref: surfaceRef,
|
|
116
|
+
elevation,
|
|
117
|
+
layer,
|
|
118
|
+
margin,
|
|
119
|
+
onKeyDown: handleSurfaceKeyDown,
|
|
120
|
+
children: /* @__PURE__ */ jsx(MenuContext.Provider, {
|
|
121
|
+
value: menuContext,
|
|
122
|
+
children: /* @__PURE__ */ jsx(MenuActivationContext.Provider, {
|
|
123
|
+
value: handleActivate,
|
|
124
|
+
children: /* @__PURE__ */ jsx(MenuList, {
|
|
125
|
+
id: listId,
|
|
126
|
+
"aria-label": ariaLabel,
|
|
127
|
+
shouldAutoFocus: true,
|
|
128
|
+
onSelect,
|
|
129
|
+
color,
|
|
130
|
+
textColor,
|
|
131
|
+
size,
|
|
132
|
+
dense,
|
|
133
|
+
width: "100%",
|
|
134
|
+
children: hasRows ? rows : emptyLabel != null && /* @__PURE__ */ jsx(MenuItem, {
|
|
135
|
+
disabled: true,
|
|
136
|
+
children: emptyLabel
|
|
137
|
+
})
|
|
138
|
+
})
|
|
139
|
+
})
|
|
140
|
+
})
|
|
141
|
+
})]
|
|
142
|
+
});
|
|
143
|
+
}
|
|
144
|
+
//#endregion
|
|
145
|
+
export { ContextMenu };
|
|
@@ -0,0 +1,29 @@
|
|
|
1
|
+
Object.defineProperty(exports, Symbol.toStringTag, { value: "Module" });
|
|
2
|
+
const require_src = require("../src-DU81aGy9.cjs");
|
|
3
|
+
let react_jsx_runtime = require("react/jsx-runtime");
|
|
4
|
+
//#region src/Menu/MenuDivider/MenuDivider.tsx
|
|
5
|
+
const MenuDividerRoot = require_src.styled("li", {
|
|
6
|
+
name: "MenuDivider",
|
|
7
|
+
label: "MenuDivider"
|
|
8
|
+
})(({ theme }) => ({
|
|
9
|
+
listStyle: "none",
|
|
10
|
+
height: 0,
|
|
11
|
+
marginTop: theme.space[.5],
|
|
12
|
+
marginBottom: theme.space[.5],
|
|
13
|
+
borderTopWidth: theme.borderWidths.thin,
|
|
14
|
+
borderTopStyle: "solid",
|
|
15
|
+
borderTopColor: (0, require_src.src_exports.get)(theme, "border.light")
|
|
16
|
+
}));
|
|
17
|
+
/**
|
|
18
|
+
* @description A `role="separator"` line between groups of rows in a `MenuList`. The
|
|
19
|
+
* arrow keys pass over it.
|
|
20
|
+
*/
|
|
21
|
+
function MenuDivider({ className, "data-testid": dataTestid }) {
|
|
22
|
+
return /* @__PURE__ */ (0, react_jsx_runtime.jsx)(MenuDividerRoot, {
|
|
23
|
+
role: "separator",
|
|
24
|
+
className,
|
|
25
|
+
"data-testid": dataTestid
|
|
26
|
+
});
|
|
27
|
+
}
|
|
28
|
+
//#endregion
|
|
29
|
+
exports.MenuDivider = MenuDivider;
|
|
@@ -0,0 +1,12 @@
|
|
|
1
|
+
//#region src/Menu/MenuDivider/MenuDivider.d.ts
|
|
2
|
+
interface MenuDividerProps {
|
|
3
|
+
className?: string;
|
|
4
|
+
'data-testid'?: string;
|
|
5
|
+
}
|
|
6
|
+
/**
|
|
7
|
+
* @description A `role="separator"` line between groups of rows in a `MenuList`. The
|
|
8
|
+
* arrow keys pass over it.
|
|
9
|
+
*/
|
|
10
|
+
declare function MenuDivider({ className, 'data-testid': dataTestid }: Readonly<MenuDividerProps>): import("react").JSX.Element;
|
|
11
|
+
//#endregion
|
|
12
|
+
export { MenuDivider, MenuDividerProps };
|
|
@@ -0,0 +1,12 @@
|
|
|
1
|
+
//#region src/Menu/MenuDivider/MenuDivider.d.ts
|
|
2
|
+
interface MenuDividerProps {
|
|
3
|
+
className?: string;
|
|
4
|
+
'data-testid'?: string;
|
|
5
|
+
}
|
|
6
|
+
/**
|
|
7
|
+
* @description A `role="separator"` line between groups of rows in a `MenuList`. The
|
|
8
|
+
* arrow keys pass over it.
|
|
9
|
+
*/
|
|
10
|
+
declare function MenuDivider({ className, 'data-testid': dataTestid }: Readonly<MenuDividerProps>): import("react").JSX.Element;
|
|
11
|
+
//#endregion
|
|
12
|
+
export { MenuDivider, MenuDividerProps };
|
|
@@ -0,0 +1,28 @@
|
|
|
1
|
+
import { a as src_exports, o as styled } from "../src-DLGYOJMh.mjs";
|
|
2
|
+
import { jsx } from "react/jsx-runtime";
|
|
3
|
+
//#region src/Menu/MenuDivider/MenuDivider.tsx
|
|
4
|
+
const MenuDividerRoot = styled("li", {
|
|
5
|
+
name: "MenuDivider",
|
|
6
|
+
label: "MenuDivider"
|
|
7
|
+
})(({ theme }) => ({
|
|
8
|
+
listStyle: "none",
|
|
9
|
+
height: 0,
|
|
10
|
+
marginTop: theme.space[.5],
|
|
11
|
+
marginBottom: theme.space[.5],
|
|
12
|
+
borderTopWidth: theme.borderWidths.thin,
|
|
13
|
+
borderTopStyle: "solid",
|
|
14
|
+
borderTopColor: (0, src_exports.get)(theme, "border.light")
|
|
15
|
+
}));
|
|
16
|
+
/**
|
|
17
|
+
* @description A `role="separator"` line between groups of rows in a `MenuList`. The
|
|
18
|
+
* arrow keys pass over it.
|
|
19
|
+
*/
|
|
20
|
+
function MenuDivider({ className, "data-testid": dataTestid }) {
|
|
21
|
+
return /* @__PURE__ */ jsx(MenuDividerRoot, {
|
|
22
|
+
role: "separator",
|
|
23
|
+
className,
|
|
24
|
+
"data-testid": dataTestid
|
|
25
|
+
});
|
|
26
|
+
}
|
|
27
|
+
//#endregion
|
|
28
|
+
export { MenuDivider };
|
|
@@ -0,0 +1,29 @@
|
|
|
1
|
+
Object.defineProperty(exports, Symbol.toStringTag, { value: "Module" });
|
|
2
|
+
const require_MenuItem = require("../MenuItem-BTP7Ijwi.cjs");
|
|
3
|
+
const require_Menu_MenuDivider = require("./MenuDivider.cjs");
|
|
4
|
+
let react_jsx_runtime = require("react/jsx-runtime");
|
|
5
|
+
//#region src/Menu/MenuItems/MenuItems.tsx
|
|
6
|
+
const isDivider = (item) => "type" in item && item.type === "divider";
|
|
7
|
+
/**
|
|
8
|
+
* @description Menu rows from data: each entry a `MenuItem` (its label as `label`, its
|
|
9
|
+
* submenu as more entries) or `{ type: 'divider' }`. It renders the same rows JSX children
|
|
10
|
+
* would, so the two behave alike - inside a `MenuList`, a `Menu` or a `ContextMenu`.
|
|
11
|
+
*/
|
|
12
|
+
function MenuItems({ items }) {
|
|
13
|
+
let dividers = 0;
|
|
14
|
+
return items.map((item, index) => {
|
|
15
|
+
if (isDivider(item)) {
|
|
16
|
+
dividers += 1;
|
|
17
|
+
return /* @__PURE__ */ (0, react_jsx_runtime.jsx)(require_Menu_MenuDivider.MenuDivider, {}, `divider-${dividers}`);
|
|
18
|
+
}
|
|
19
|
+
const { label, submenu, ...row } = item;
|
|
20
|
+
const submenuRows = submenu?.length ? /* @__PURE__ */ (0, react_jsx_runtime.jsx)(MenuItems, { items: submenu }) : null;
|
|
21
|
+
return /* @__PURE__ */ (0, react_jsx_runtime.jsx)(require_MenuItem.MenuItem, {
|
|
22
|
+
...row,
|
|
23
|
+
submenu: submenu === void 0 ? void 0 : submenuRows,
|
|
24
|
+
children: label
|
|
25
|
+
}, item.value ?? `row-${index}`);
|
|
26
|
+
});
|
|
27
|
+
}
|
|
28
|
+
//#endregion
|
|
29
|
+
exports.MenuItems = MenuItems;
|
|
@@ -0,0 +1,28 @@
|
|
|
1
|
+
import { t as MenuItem } from "../MenuItem-DUn4IZKK.mjs";
|
|
2
|
+
import { MenuDivider } from "./MenuDivider.mjs";
|
|
3
|
+
import { jsx } from "react/jsx-runtime";
|
|
4
|
+
//#region src/Menu/MenuItems/MenuItems.tsx
|
|
5
|
+
const isDivider = (item) => "type" in item && item.type === "divider";
|
|
6
|
+
/**
|
|
7
|
+
* @description Menu rows from data: each entry a `MenuItem` (its label as `label`, its
|
|
8
|
+
* submenu as more entries) or `{ type: 'divider' }`. It renders the same rows JSX children
|
|
9
|
+
* would, so the two behave alike - inside a `MenuList`, a `Menu` or a `ContextMenu`.
|
|
10
|
+
*/
|
|
11
|
+
function MenuItems({ items }) {
|
|
12
|
+
let dividers = 0;
|
|
13
|
+
return items.map((item, index) => {
|
|
14
|
+
if (isDivider(item)) {
|
|
15
|
+
dividers += 1;
|
|
16
|
+
return /* @__PURE__ */ jsx(MenuDivider, {}, `divider-${dividers}`);
|
|
17
|
+
}
|
|
18
|
+
const { label, submenu, ...row } = item;
|
|
19
|
+
const submenuRows = submenu?.length ? /* @__PURE__ */ jsx(MenuItems, { items: submenu }) : null;
|
|
20
|
+
return /* @__PURE__ */ jsx(MenuItem, {
|
|
21
|
+
...row,
|
|
22
|
+
submenu: submenu === void 0 ? void 0 : submenuRows,
|
|
23
|
+
children: label
|
|
24
|
+
}, item.value ?? `row-${index}`);
|
|
25
|
+
});
|
|
26
|
+
}
|
|
27
|
+
//#endregion
|
|
28
|
+
export { MenuItems };
|
|
@@ -0,0 +1,38 @@
|
|
|
1
|
+
import { W as Theme } from "../index-DJ0f69wh.cjs";
|
|
2
|
+
import { t as MenuItemValue } from "../MenuListContext-DKUOhNyw.cjs";
|
|
3
|
+
import { KeyboardEvent, ReactNode } from "react";
|
|
4
|
+
import { LayoutProps, SpaceProps } from "@soroush.tech/styled-system";
|
|
5
|
+
//#region src/Menu/MenuList/MenuList.d.ts
|
|
6
|
+
interface MenuListProps extends SpaceProps<Theme>, LayoutProps<Theme> {
|
|
7
|
+
/** `MenuItem` rows and `MenuDivider`s. */
|
|
8
|
+
children?: ReactNode;
|
|
9
|
+
/** Fired with a row's `value` when a row that has one is chosen. */
|
|
10
|
+
onSelect?: (value: MenuItemValue) => void;
|
|
11
|
+
/** Carry the arrow keys past the last row to the first, and back. Default: `true`. */
|
|
12
|
+
shouldWrap?: boolean;
|
|
13
|
+
/** Focus the selected row, or the first enabled one, on mount. Default: `false`. */
|
|
14
|
+
shouldAutoFocus?: boolean;
|
|
15
|
+
/** Accent color for every row - resolves to `theme.palette[color]`. A row's own value wins. */
|
|
16
|
+
color?: keyof Theme['palette'];
|
|
17
|
+
/** Base text color for every row - resolves against `theme.text`. A row's own value wins. */
|
|
18
|
+
textColor?: keyof Theme['text'];
|
|
19
|
+
/** Density token for every row - resolves against `theme.sizes`. A row's own value wins. */
|
|
20
|
+
size?: keyof Theme['sizes'];
|
|
21
|
+
/** Compact vertical padding for every row. */
|
|
22
|
+
dense?: boolean;
|
|
23
|
+
onKeyDown?: (event: KeyboardEvent<HTMLElement>) => void;
|
|
24
|
+
id?: string;
|
|
25
|
+
className?: string;
|
|
26
|
+
'aria-label'?: string;
|
|
27
|
+
'aria-labelledby'?: string;
|
|
28
|
+
'data-testid'?: string;
|
|
29
|
+
}
|
|
30
|
+
/**
|
|
31
|
+
* @description A `role="menu"` list that owns the keyboard: the arrow keys, Home and End
|
|
32
|
+
* move focus between its own rows, skipping disabled ones; typing jumps to a row by its
|
|
33
|
+
* label. Rows are found in the DOM by their nearest `role="menu"`, so a nested submenu's
|
|
34
|
+
* rows are never this list's. Renders in place - `Menu` floats one next to a trigger.
|
|
35
|
+
*/
|
|
36
|
+
declare function MenuList({ children, onSelect, shouldWrap: shouldWrapProp, shouldAutoFocus, color, textColor, size, dense, onKeyDown, ...rest }: Readonly<MenuListProps>): import("react").JSX.Element;
|
|
37
|
+
//#endregion
|
|
38
|
+
export { type MenuItemValue, MenuList, MenuListProps };
|