pragmate-ui
Version:
An advanced, on-demand React UI library optimized for BeyondJS. Pragmate UI provides modular, responsive, and accessible components with a focus on efficient bundle sizes and a streamlined development process.
460 lines (434 loc) • 15.6 kB
JavaScript
define(["exports", "module", "@beyond-js/kernel/bundle", "react", "pragmate-ui/components", "pragmate-ui/icons", "pragmate-ui/base", "@beyond-js/kernel/styles"], function (_exports, _amd_module, dependency_0, dependency_1, dependency_2, dependency_3, dependency_4, dependency_5) {
"use strict";
Object.defineProperty(_exports, "__esModule", {
value: true
});
_exports.hmr = _exports.__beyond_pkg = _exports.Modal = _exports.IModalProps = _exports.ConfirmModal = _exports.AlertModal = void 0;
const {
Bundle: __Bundle
} = dependency_0;
const __pkg = new __Bundle({
"module": {
"vspecifier": "pragmate-ui@1.0.1/modal"
},
"type": "code"
}, _amd_module.uri).package();
;
__pkg.dependencies.update([['react', dependency_1], ['pragmate-ui/components', dependency_2], ['pragmate-ui/icons', dependency_3], ['pragmate-ui/base', dependency_4], ['@beyond-js/kernel/styles', dependency_5]]);
brequire('@beyond-js/kernel/styles').styles.register('pragmate-ui@1.0.1/modal');
const ims = new Map();
/***********************
INTERNAL MODULE: ./alert
***********************/
ims.set('./alert', {
hash: 853535473,
creator: function (require, exports) {
"use strict";
Object.defineProperty(exports, "__esModule", {
value: true
});
exports.AlertModal = AlertModal;
var React = require("react");
var _modal = require("./modal");
var _components = require("pragmate-ui/components");
/*bundle*/
function AlertModal(props) {
const [state, setState] = React.useState({
fetching: false
});
const {
text,
title,
centered,
button = {}
} = props;
const close = async () => {
setState({
fetching: true
});
if (props.onConfirm) await props.onConfirm();
setState({
fetching: false
});
if (props.onClose) props.onClose();
};
const btnAttrs = {
className: `btn btn-primary${props.className ? ` ${props.className}` : ''}`,
disabled: state.fetching,
label: props.buttonLabel || 'Confirm',
onClick: close,
...button
};
let cls = `pui-alert-dialog${centered ? ' pui-alert-dialog-centered' : ''}`;
if (props.className) cls += ` ${props.className}`;
return React.createElement(_modal.Modal, {
show: true,
className: cls,
onClose: props.onClose
}, React.createElement("div", {
className: 'alert-dialog-content'
}, title && React.createElement(_components.HtmlWrapper, null, title), text && React.createElement(_components.HtmlWrapper, null, text), props.children ? props.children : null), React.createElement("div", {
className: 'pui-modal-actions'
}, React.createElement(_components.Button, {
...btnAttrs
})));
}
}
});
/**************************
INTERNAL MODULE: ./children
**************************/
ims.set('./children', {
hash: 1764852864,
creator: function (require, exports) {
"use strict";
Object.defineProperty(exports, "__esModule", {
value: true
});
exports.useModalContext = exports.ModalContext = exports.Children = void 0;
var _react = require("react");
var React = _react;
var _icons = require("pragmate-ui/icons");
const ModalContext = exports.ModalContext = (0, _react.createContext)({});
const useModalContext = () => (0, _react.useContext)(ModalContext);
exports.useModalContext = useModalContext;
const Children = ({
children,
close,
dismiss
}) => {
const output = [];
if (dismiss !== false) {
output.push(React.createElement(_icons.IconButton, {
className: 'close-icon',
onClick: close,
"data-dismiss": 'modal',
"aria-label": 'Close',
key: 'dismiss-button',
icon: 'close'
}));
}
const childrenWithProps = React.Children.map(children, child => {
// checking isValidElement is the safe way and avoids a typescript error too
if ((0, _react.isValidElement)(child)) {
const specs = {};
//TODO: check a official way to check the children type
return (0, _react.cloneElement)(child, specs);
}
return child;
});
output.push(childrenWithProps);
return React.createElement(ModalContext.Provider, {
value: {
close,
dismiss
}
}, output);
};
exports.Children = Children;
}
});
/*******************************
INTERNAL MODULE: ./confirm/index
*******************************/
ims.set('./confirm/index', {
hash: 1766706381,
creator: function (require, exports) {
"use strict";
Object.defineProperty(exports, "__esModule", {
value: true
});
exports.ConfirmModal = void 0;
var React = require("react");
var _components = require("pragmate-ui/components");
var _modal = require("../modal");
var _useActionProperties = require("./use-action-properties");
/*bundle*/
const ConfirmModal = properties => {
const [state, setState] = React.useState({
fetching: false
});
const {
text,
title,
onCancel,
centered,
onClose,
show
} = properties;
let cls = `pui-confirm-dialog${centered ? ' pui-confirm-dialog-centered' : ''}`;
if (properties.className) cls += ` ${properties.className}`;
const props = Object.assign({}, properties);
['text', 'title', 'className', 'centering', 'btnCancel', 'btnConfirm', 'onCancel'].forEach(prop => delete props[prop]);
const [confirmProps, cancelProps] = (0, _useActionProperties.useActionProperties)(properties, setState);
const disabled = {};
if (state.fetching) disabled.disabled = true;
const handleClose = onClose ?? onCancel;
return React.createElement(_modal.Modal, {
show: show,
className: cls,
onClose: handleClose
}, React.createElement("div", {
className: 'pui-confirm-dialog-content'
}, title && React.createElement("h3", null, title), text && React.createElement("div", {
className: 'pui-confirm-dialog-content__text'
}, text), properties.children), React.createElement("div", {
className: 'pui-actions'
}, React.createElement(_components.Button, {
...cancelProps,
...disabled
}), React.createElement(_components.Button, {
...disabled,
...confirmProps
})));
};
exports.ConfirmModal = ConfirmModal;
}
});
/***********************************************
INTERNAL MODULE: ./confirm/use-action-properties
***********************************************/
ims.set('./confirm/use-action-properties', {
hash: 1933355049,
creator: function (require, exports) {
"use strict";
Object.defineProperty(exports, "__esModule", {
value: true
});
exports.useActionProperties = useActionProperties;
/**
* useActionProperties function
*
* This function is designed to process and return action properties for the Button component
* in the Pragmate UI library. It supports the current API structure of the Button component
* while maintaining backward compatibility with an older configuration format.
*
* The function takes a `properties` object as an argument. If this object contains an `actions` property,
* it directly returns the `confirm` and `cancel` actions defined within. This is aligned with the current API design.
*
* For backward compatibility, the function also handles the scenario where the `actions` property is not present.
* In this case, it extracts and processes individual properties like `onCancel`, `onConfirm`, `btnConfirm`, and `btnCancel`
* from the `properties` object. These are then used to construct and return `confirm` and `cancel` action objects
* with appropriate labels, class names, variants, and onClick handlers.
*
* @param {object} properties - The properties object containing either a direct `actions` property
* or individual properties for backward compatibility.
* @returns An array containing two action objects: confirm and cancel.
*/
function useActionProperties(properties, setState) {
const onProcessConfirm = callback => {
return async event => {
event.stopPropagation();
setState({
fetching: true
});
await callback(event);
setState({
fetching: false
});
};
};
if (properties.actions) {
const confirmProps = {
...properties.actions.confirm
};
const cancelProps = {
...properties.actions.cancel
};
if (!confirmProps.onClick && !properties.onConfirm) {
throw new Error('ConfirmModal: No confirm function defined');
}
if (!cancelProps.onClick && !properties.onCancel) {
throw new Error('ConfirmModal: No cancel function defined');
}
confirmProps.onClick = onProcessConfirm(confirmProps.onClick ?? properties.onConfirm);
cancelProps.onClick = cancelProps.onClick ?? properties.onCancel;
return [confirmProps, cancelProps];
}
const {
onCancel,
onConfirm,
btnConfirm,
btnCancel
} = properties;
const defaultConfirm = {
label: 'Confirm',
variant: 'primary',
onClick: onProcessConfirm(onConfirm)
};
const defaultCancel = {
label: 'Cancel',
variant: 'primary',
onClick: onCancel,
bordered: true
};
const actions = {
confirm: typeof btnConfirm === 'object' ? {
...defaultConfirm,
...btnConfirm
} : defaultConfirm,
cancel: typeof btnCancel === 'object' ? {
...defaultCancel,
...btnCancel
} : defaultCancel
};
return [actions.confirm, actions.cancel];
}
}
});
/***********************
INTERNAL MODULE: ./modal
***********************/
ims.set('./modal', {
hash: 346464964,
creator: function (require, exports) {
"use strict";
Object.defineProperty(exports, "__esModule", {
value: true
});
exports.Modal = Modal;
var _react = require("react");
var React = _react;
var _children = require("./children");
/*bundle*/
function Modal(props) {
const [state, setState] = (0, _react.useState)({
show: props?.show ?? false,
closeClicked: (props.closeClicked || props.closeBackdrop) ?? true,
container: null
});
const modal = (0, _react.useRef)(null);
React.useEffect(() => {
setState({
...state,
show: props.show
});
}, [props.show]);
const close = async event => {
if (event) event.stopPropagation();
const body = document.querySelector('body');
modal.current.classList.add('modal-hidden');
globalThis.setTimeout(async () => {
setState({
...state,
show: false,
closeClicked: true
});
body.setAttribute('style', '');
body.classList.remove('body-custom-modal-opened');
const {
onClose
} = props;
if (!onClose || typeof onClose !== 'function') return;
onClose(event);
}, 200);
};
const onClickBackdrop = event => {
event.stopPropagation();
if (!state.closeClicked) return;
close(event);
};
const show = state.show;
let cls = 'pui-modal ';
cls += props.className ? props.className : '';
if (show) cls += ' show-modal';
const output = [];
if (show) {
output.push(React.createElement("div", {
key: 'modal-content-wrapper',
className: 'modal-wrapper'
}, React.createElement("div", {
className: 'modal-content',
onClick: event => {
event.stopPropagation();
}
}, React.createElement(_children.Children, {
...props,
close: close,
key: 'children-content'
}, props.children))));
}
return React.createElement("div", {
ref: modal,
onClick: onClickBackdrop,
className: cls
}, output);
}
}
});
/*****************************
INTERNAL MODULE: ./types/alert
*****************************/
ims.set('./types/alert', {
hash: 3453279328,
creator: function (require, exports) {
"use strict";
Object.defineProperty(exports, "__esModule", {
value: true
});
}
});
/*******************************
INTERNAL MODULE: ./types/confirm
*******************************/
ims.set('./types/confirm', {
hash: 3090985645,
creator: function (require, exports) {
"use strict";
Object.defineProperty(exports, "__esModule", {
value: true
});
}
});
/***********************************
INTERNAL MODULE: ./types/modal-props
***********************************/
ims.set('./types/modal-props', {
hash: 1658030921,
creator: function (require, exports) {
"use strict";
Object.defineProperty(exports, "__esModule", {
value: true
});
}
});
__pkg.exports.descriptor = [{
"im": "./alert",
"from": "AlertModal",
"name": "AlertModal"
}, {
"im": "./confirm/index",
"from": "ConfirmModal",
"name": "ConfirmModal"
}, {
"im": "./modal",
"from": "Modal",
"name": "Modal"
}, {
"im": "./types/modal-props",
"from": "IModalProps",
"name": "IModalProps"
}];
let AlertModal = _exports.AlertModal = void 0,
ConfirmModal = _exports.ConfirmModal = void 0,
Modal = _exports.Modal = void 0,
IModalProps = _exports.IModalProps = void 0;
// Module exports
__pkg.exports.process = function ({
require,
prop,
value
}) {
(require || prop === 'AlertModal') && (_exports.AlertModal = AlertModal = require ? require('./alert').AlertModal : value);
(require || prop === 'ConfirmModal') && (_exports.ConfirmModal = ConfirmModal = require ? require('./confirm/index').ConfirmModal : value);
(require || prop === 'Modal') && (_exports.Modal = Modal = require ? require('./modal').Modal : value);
(require || prop === 'IModalProps') && (_exports.IModalProps = IModalProps = require ? require('./types/modal-props').IModalProps : value);
};
const __beyond_pkg = _exports.__beyond_pkg = __pkg;
const hmr = _exports.hmr = new function () {
this.on = (event, listener) => void 0;
this.off = (event, listener) => void 0;
}();
__pkg.initialise(ims);
});
//# sourceMappingURL=modal.amd.js.map