@bernierllc/generic-workflow-ui
Version:
Generic, reusable workflow UI components with linear and graph visualization
47 lines (46 loc) • 2.13 kB
JavaScript
;
/*
Copyright (c) 2025 Bernier LLC
*/
var __importDefault = (this && this.__importDefault) || function (mod) {
return (mod && mod.__esModule) ? mod : { "default": mod };
};
Object.defineProperty(exports, "__esModule", { value: true });
exports.GenericActionButtons = GenericActionButtons;
const react_1 = __importDefault(require("react"));
const tamagui_1 = require("tamagui");
const defaultConfig = {
enabled: true,
size: 'medium',
variant: 'primary',
showIcons: true,
showLabels: true,
showTooltips: true,
buttonColors: {}
};
function GenericActionButtons({ config: userConfig = {}, actions, disabled = false }) {
const config = { ...defaultConfig, ...userConfig };
if (!config.enabled) {
return react_1.default.createElement(react_1.default.Fragment, null);
}
const visibleActions = actions.filter((action) => action.visible);
if (visibleActions.length === 0) {
return react_1.default.createElement(react_1.default.Fragment, null);
}
const getButtonSize = () => {
switch (config.size) {
case 'small':
return '$3';
case 'large':
return '$5';
default:
return '$4';
}
};
const getButtonVariant = (action) => {
return action.variant || config.variant;
};
return (react_1.default.createElement(tamagui_1.XStack, { gap: "$2", padding: "$2", flexWrap: "wrap" }, visibleActions.map((action) => (react_1.default.createElement(tamagui_1.Button, { key: action.id, size: getButtonSize(), variant: getButtonVariant(action), disabled: disabled || action.disabled, onPress: action.onClick, backgroundColor: config.buttonColors?.[action.id] || action.color, cursor: disabled || action.disabled ? 'not-allowed' : 'pointer', opacity: disabled || action.disabled ? 0.5 : 1 },
config.showIcons && action.icon && (react_1.default.createElement(tamagui_1.Text, { marginRight: config.showLabels ? '$2' : 0 }, action.icon)),
config.showLabels && react_1.default.createElement(tamagui_1.Text, null, action.label))))));
}