@ltht-react/menu 1.0.2
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 +15 -0
- package/lib/index.d.ts +3 -0
- package/lib/index.js +8 -0
- package/lib/index.js.map +1 -0
- package/lib/molecules/action-menu.d.ts +25 -0
- package/lib/molecules/action-menu.js +84 -0
- package/lib/molecules/action-menu.js.map +1 -0
- package/package.json +38 -0
package/README.md
ADDED
package/lib/index.d.ts
ADDED
package/lib/index.js
ADDED
|
@@ -0,0 +1,8 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
var __importDefault = (this && this.__importDefault) || function (mod) {
|
|
3
|
+
return (mod && mod.__esModule) ? mod : { "default": mod };
|
|
4
|
+
};
|
|
5
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
6
|
+
var action_menu_1 = __importDefault(require("./molecules/action-menu"));
|
|
7
|
+
exports.default = action_menu_1.default;
|
|
8
|
+
//# sourceMappingURL=index.js.map
|
package/lib/index.js.map
ADDED
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.tsx"],"names":[],"mappings":";;;;;AAAA,wEAAsE;AAEtE,kBAAe,qBAAU,CAAA"}
|
|
@@ -0,0 +1,25 @@
|
|
|
1
|
+
import { ButtonProps } from '@ltht-react/button/lib/atoms/button';
|
|
2
|
+
import { IconProps } from '@ltht-react/icon';
|
|
3
|
+
import { FC, HTMLAttributes } from 'react';
|
|
4
|
+
declare const ActionMenu: FC<IProps>;
|
|
5
|
+
interface IProps extends HTMLAttributes<HTMLButtonElement> {
|
|
6
|
+
actions: ActionMenuOption[];
|
|
7
|
+
menuButtonOptions?: IconButtonMenuProps | ButtonMenuProps;
|
|
8
|
+
}
|
|
9
|
+
interface IconButtonMenuProps {
|
|
10
|
+
type: 'icon';
|
|
11
|
+
iconProps: IconProps;
|
|
12
|
+
text?: string;
|
|
13
|
+
}
|
|
14
|
+
interface ButtonMenuProps {
|
|
15
|
+
type: 'button';
|
|
16
|
+
buttonProps: ButtonProps;
|
|
17
|
+
text: string;
|
|
18
|
+
}
|
|
19
|
+
export interface ActionMenuOption {
|
|
20
|
+
text: string;
|
|
21
|
+
clickHandler: () => void;
|
|
22
|
+
leftIcon?: IconProps;
|
|
23
|
+
rightIcon?: IconProps;
|
|
24
|
+
}
|
|
25
|
+
export default ActionMenu;
|
|
@@ -0,0 +1,84 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
var __makeTemplateObject = (this && this.__makeTemplateObject) || function (cooked, raw) {
|
|
3
|
+
if (Object.defineProperty) { Object.defineProperty(cooked, "raw", { value: raw }); } else { cooked.raw = raw; }
|
|
4
|
+
return cooked;
|
|
5
|
+
};
|
|
6
|
+
var __assign = (this && this.__assign) || function () {
|
|
7
|
+
__assign = Object.assign || function(t) {
|
|
8
|
+
for (var s, i = 1, n = arguments.length; i < n; i++) {
|
|
9
|
+
s = arguments[i];
|
|
10
|
+
for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p))
|
|
11
|
+
t[p] = s[p];
|
|
12
|
+
}
|
|
13
|
+
return t;
|
|
14
|
+
};
|
|
15
|
+
return __assign.apply(this, arguments);
|
|
16
|
+
};
|
|
17
|
+
var __rest = (this && this.__rest) || function (s, e) {
|
|
18
|
+
var t = {};
|
|
19
|
+
for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p) && e.indexOf(p) < 0)
|
|
20
|
+
t[p] = s[p];
|
|
21
|
+
if (s != null && typeof Object.getOwnPropertySymbols === "function")
|
|
22
|
+
for (var i = 0, p = Object.getOwnPropertySymbols(s); i < p.length; i++) {
|
|
23
|
+
if (e.indexOf(p[i]) < 0 && Object.prototype.propertyIsEnumerable.call(s, p[i]))
|
|
24
|
+
t[p[i]] = s[p[i]];
|
|
25
|
+
}
|
|
26
|
+
return t;
|
|
27
|
+
};
|
|
28
|
+
var __importDefault = (this && this.__importDefault) || function (mod) {
|
|
29
|
+
return (mod && mod.__esModule) ? mod : { "default": mod };
|
|
30
|
+
};
|
|
31
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
32
|
+
var jsx_runtime_1 = require("react/jsx-runtime");
|
|
33
|
+
var styled_1 = __importDefault(require("@emotion/styled"));
|
|
34
|
+
var button_1 = __importDefault(require("@ltht-react/button/lib/atoms/button"));
|
|
35
|
+
var icon_1 = require("@ltht-react/icon");
|
|
36
|
+
var styles_1 = require("@ltht-react/styles");
|
|
37
|
+
var focus_trap_react_1 = __importDefault(require("focus-trap-react"));
|
|
38
|
+
var react_1 = require("react");
|
|
39
|
+
var react_popper_1 = require("react-popper");
|
|
40
|
+
var defaultMenuButtonProps = {
|
|
41
|
+
type: 'icon',
|
|
42
|
+
iconProps: {
|
|
43
|
+
type: 'ellipsis-vertical',
|
|
44
|
+
size: 'large',
|
|
45
|
+
},
|
|
46
|
+
};
|
|
47
|
+
var StyledUnorderedList = styled_1.default.ul(templateObject_1 || (templateObject_1 = __makeTemplateObject(["\n ", "\n list-style-type: none;\n padding: 0;\n margin: 0;\n"], ["\n ", "\n list-style-type: none;\n padding: 0;\n margin: 0;\n"])), styles_1.CSS_RESET);
|
|
48
|
+
var StyledListItem = styled_1.default.li(templateObject_2 || (templateObject_2 = __makeTemplateObject(["\n ", "\n background-color: 'white';\n padding: 0.5rem;\n display: flex;\n border-radius: 4px;\n\n &:hover {\n background: ", ";\n cursor: pointer;\n color: white;\n }\n"], ["\n ", "\n background-color: 'white';\n padding: 0.5rem;\n display: flex;\n border-radius: 4px;\n\n &:hover {\n background: ", ";\n cursor: pointer;\n color: white;\n }\n"])), styles_1.CSS_RESET, styles_1.BTN_COLOURS.PRIMARY.VALUE);
|
|
49
|
+
var StyledCard = styled_1.default.div(templateObject_3 || (templateObject_3 = __makeTemplateObject(["\n ", "\n display: inline-block;\n min-width: 10rem;\n z-index: 1;\n background: white;\n border-radius: 4px;\n box-shadow: 0px 1px 10px rgba(0, 0, 0, 0.04), 0px 4px 5px rgba(0, 0, 0, 0.06), 0px 2px 4px -1px rgba(0, 0, 0, 0.09);\n"], ["\n ", "\n display: inline-block;\n min-width: 10rem;\n z-index: 1;\n background: white;\n border-radius: 4px;\n box-shadow: 0px 1px 10px rgba(0, 0, 0, 0.04), 0px 4px 5px rgba(0, 0, 0, 0.06), 0px 2px 4px -1px rgba(0, 0, 0, 0.09);\n"])), styles_1.CSS_RESET);
|
|
50
|
+
var StyledRightIcon = styled_1.default(icon_1.Icon)(templateObject_4 || (templateObject_4 = __makeTemplateObject(["\n margin-right: 0.5rem;\n margin-left: auto;\n color: ", ";\n"], ["\n margin-right: 0.5rem;\n margin-left: auto;\n color: ", ";\n"])), styles_1.BTN_COLOURS.STANDARD.VALUE);
|
|
51
|
+
var StyledLeftIcon = styled_1.default(icon_1.Icon)(templateObject_5 || (templateObject_5 = __makeTemplateObject(["\n margin-right: 0.5rem;\n margin-left: 0.5rem;\n color: ", ";\n"], ["\n margin-right: 0.5rem;\n margin-left: 0.5rem;\n color: ", ";\n"])), styles_1.BTN_COLOURS.STANDARD.VALUE);
|
|
52
|
+
var StyledMenuButtonWrapper = styled_1.default.div(templateObject_6 || (templateObject_6 = __makeTemplateObject(["\n display: inline-block;\n"], ["\n display: inline-block;\n"])));
|
|
53
|
+
var ActionMenu = function (_a) {
|
|
54
|
+
var actions = _a.actions, _b = _a.menuButtonOptions, menuButtonOptions = _b === void 0 ? defaultMenuButtonProps : _b, _c = _a.id, id = _c === void 0 ? 'action-menu-button' : _c, rest = __rest(_a, ["actions", "menuButtonOptions", "id"]);
|
|
55
|
+
var popperRef = react_1.useRef(null);
|
|
56
|
+
var _d = react_1.useState(null), popperElement = _d[0], setPopperElement = _d[1];
|
|
57
|
+
var popper = react_popper_1.usePopper(popperRef.current, popperElement, {
|
|
58
|
+
placement: 'bottom-start',
|
|
59
|
+
});
|
|
60
|
+
var closePopper = function () {
|
|
61
|
+
setShowMenu(false);
|
|
62
|
+
};
|
|
63
|
+
var _e = react_1.useState(false), showMenu = _e[0], setShowMenu = _e[1];
|
|
64
|
+
var menuButtonClickHandler = function () {
|
|
65
|
+
setShowMenu(!showMenu);
|
|
66
|
+
};
|
|
67
|
+
return (jsx_runtime_1.jsx(jsx_runtime_1.Fragment, { children: jsx_runtime_1.jsx(focus_trap_react_1.default, __assign({ active: showMenu, focusTrapOptions: {
|
|
68
|
+
tabbableOptions: {
|
|
69
|
+
displayCheck: 'none',
|
|
70
|
+
},
|
|
71
|
+
initialFocus: false,
|
|
72
|
+
allowOutsideClick: false,
|
|
73
|
+
clickOutsideDeactivates: true,
|
|
74
|
+
onDeactivate: closePopper,
|
|
75
|
+
} }, { children: jsx_runtime_1.jsxs(StyledMenuButtonWrapper, __assign({ ref: popperRef }, { children: [menuButtonOptions.type === 'icon' && (jsx_runtime_1.jsx(icon_1.IconButton, __assign({ iconProps: menuButtonOptions.iconProps, text: menuButtonOptions.text }, rest, { onClick: menuButtonClickHandler, id: id }), void 0)),
|
|
76
|
+
menuButtonOptions.type === 'button' && (jsx_runtime_1.jsx(button_1.default, __assign({}, menuButtonOptions.buttonProps, rest, { value: menuButtonOptions.text, onClick: menuButtonClickHandler, id: id }, { children: menuButtonOptions.text }), void 0)),
|
|
77
|
+
showMenu && (jsx_runtime_1.jsx(StyledCard, __assign({ tabIndex: -1, ref: setPopperElement, style: popper.styles.popper }, popper.attributes.popper, { children: jsx_runtime_1.jsx(StyledUnorderedList, __assign({ role: "menu", "aria-labelledby": id }, { children: actions.map(function (action, idx) { return (jsx_runtime_1.jsxs(StyledListItem, __assign({ role: "menuitem", onClick: function () {
|
|
78
|
+
menuButtonClickHandler();
|
|
79
|
+
action.clickHandler();
|
|
80
|
+
} }, { children: [action.leftIcon && jsx_runtime_1.jsx(StyledLeftIcon, __assign({}, action.leftIcon), void 0), action.text, action.rightIcon && jsx_runtime_1.jsx(StyledRightIcon, __assign({}, action.rightIcon), void 0)] }), "menu-action-" + idx)); }) }), void 0) }), void 0))] }), void 0) }), void 0) }, void 0));
|
|
81
|
+
};
|
|
82
|
+
exports.default = ActionMenu;
|
|
83
|
+
var templateObject_1, templateObject_2, templateObject_3, templateObject_4, templateObject_5, templateObject_6;
|
|
84
|
+
//# sourceMappingURL=action-menu.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"action-menu.js","sourceRoot":"","sources":["../../src/molecules/action-menu.tsx"],"names":[],"mappings":"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"}
|
package/package.json
ADDED
|
@@ -0,0 +1,38 @@
|
|
|
1
|
+
{
|
|
2
|
+
"name": "@ltht-react/menu",
|
|
3
|
+
"version": "1.0.2",
|
|
4
|
+
"description": "ltht-react styled Menu component.",
|
|
5
|
+
"author": "LTHT",
|
|
6
|
+
"homepage": "",
|
|
7
|
+
"license": "MIT",
|
|
8
|
+
"main": "lib/index.js",
|
|
9
|
+
"typings": "lib/index.d.ts",
|
|
10
|
+
"files": [
|
|
11
|
+
"lib"
|
|
12
|
+
],
|
|
13
|
+
"directories": {
|
|
14
|
+
"lib": "lib"
|
|
15
|
+
},
|
|
16
|
+
"publishConfig": {
|
|
17
|
+
"access": "public"
|
|
18
|
+
},
|
|
19
|
+
"scripts": {
|
|
20
|
+
"clean": "rimraf lib",
|
|
21
|
+
"build": "yarn build:lib",
|
|
22
|
+
"watch": "tsc -w",
|
|
23
|
+
"build:lib": "tsc",
|
|
24
|
+
"type:check": "tsc --noEmit",
|
|
25
|
+
"lint": "prettylint 'src/*.{ts,tsx}'"
|
|
26
|
+
},
|
|
27
|
+
"dependencies": {
|
|
28
|
+
"@emotion/react": "^11.0.0",
|
|
29
|
+
"@emotion/styled": "^11.0.0",
|
|
30
|
+
"@ltht-react/button": "^1.3.160",
|
|
31
|
+
"@ltht-react/icon": "^1.3.160",
|
|
32
|
+
"@ltht-react/styles": "^1.3.152",
|
|
33
|
+
"focus-trap-react": "^10.0.0",
|
|
34
|
+
"react": "^17.0.0",
|
|
35
|
+
"react-popper": "^2.3.0"
|
|
36
|
+
},
|
|
37
|
+
"gitHead": "8184be6f00020c5a7f306e4f846c3e32c3009b65"
|
|
38
|
+
}
|