@harvest-profit/npk
Version:
NPK UI Design System
46 lines • 2.53 kB
JavaScript
;
var __importDefault = (this && this.__importDefault) || function (mod) {
return (mod && mod.__esModule) ? mod : { "default": mod };
};
Object.defineProperty(exports, "__esModule", { value: true });
const jsx_runtime_1 = require("react/jsx-runtime");
const react_1 = require("react");
const Button_module_css_1 = __importDefault(require("./Button.module.css"));
const BaseButton_1 = __importDefault(require("../BaseButton"));
const regular_1 = require("@harvest-profit/npk/icons/regular");
const Menu_1 = require("../Menu");
const MenuContext_1 = require("../Menu/MenuContext");
function isNotSet(value) {
return value === undefined || value === null;
}
// assign button default values if it is part of a menu
const useButtonDefaults = (props) => {
const filteredProps = Object.keys(props).reduce((agg, key) => (!isNotSet(props[key])) ? { ...agg, [key]: props[key] } : agg, {});
const otherProps = {};
if (filteredProps.selected)
otherProps.leadingVisual = (filteredProps.selectedIcon || regular_1.CheckedIcon);
const menuContext = (0, Menu_1.useMenuContext)();
const menuContentsContext = (0, react_1.useContext)(MenuContext_1.MenuContentsContext);
if (menuContext && (menuContext.submenu || menuContentsContext.inMenu)) {
const menuVariant = menuContentsContext.inMenu ? menuContentsContext.variant : menuContext.variant;
otherProps.invisible = true;
otherProps.align = 'start';
otherProps.tabIndex = 1;
if (menuVariant === 'select' || menuVariant === 'menu')
otherProps.plain = true;
if (menuVariant === 'select')
otherProps.leadingVisual = (filteredProps.selectedIcon || regular_1.CheckedIcon);
if (menuVariant === 'select')
otherProps.active = filteredProps.selected;
}
return {
...otherProps,
...filteredProps
};
};
const Button = ({ variant = 'default', elevated, invisible: invisibleProp, active: activeProp, plain: plainProp, className, ...props }) => {
const { invisible, plain, active, ...defaultProps } = useButtonDefaults({ ...props, invisible: invisibleProp, plain: plainProp, active: activeProp });
return ((0, jsx_runtime_1.jsx)(BaseButton_1.default, { ...defaultProps, "data-elevated": elevated, "data-invisible": invisible, "data-variant": variant, "data-active": active, "data-plain": plain, className: `${Button_module_css_1.default.Button} ${className || ''}` }));
};
exports.default = Button;
//# sourceMappingURL=Button.js.map