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.
484 lines (436 loc) • 15.5 kB
JavaScript
import * as dependency_0 from '@beyond-js/kernel/bundle';
import * as dependency_1 from '@beyond-js/kernel/styles';
import * as dependency_2 from 'react';
import * as dependency_3 from 'pragmate-ui/base';
import * as dependency_4 from 'pragmate-ui/icons';
import * as dependency_5 from 'pragmate-ui/spinner';
import * as dependency_6 from '@beyond-js/kernel/routing';
import * as dependency_7 from 'pragmate-ui/ripple';
import * as dependency_8 from 'tippy.js';
const {Bundle: __Bundle} = dependency_0;
const __pkg = new __Bundle({"module":{"vspecifier":"pragmate-ui@1.0.1/components"},"type":"code"}, import.meta.url).package();;
__pkg.dependencies.update([['@beyond-js/kernel/styles', dependency_1],['react', dependency_2],['pragmate-ui/base', dependency_3],['pragmate-ui/icons', dependency_4],['pragmate-ui/spinner', dependency_5],['@beyond-js/kernel/routing', dependency_6],['pragmate-ui/ripple', dependency_7],['tippy.js', dependency_8]]);
brequire('@beyond-js/kernel/styles').styles.register('pragmate-ui@1.0.1/components')
const ims = new Map();
/*******************************************
INTERNAL MODULE: ./button-group/button-group
*******************************************/
ims.set('./button-group/button-group', {hash: 686490675, creator: function (require, exports) {
;
Object.defineProperty(exports, "__esModule", {
value: true
});
exports.ButtonGroup = ButtonGroup;
var _react = require("react");
var _context = require("./context");
/*bundle*/function ButtonGroup({
orientation = 'row',
children,
onChange,
...props
}) {
const [selected, setSelected] = _react.default.useState(props.selected);
let cls = `pui-button-group`;
cls += orientation ? ` pui-button-group ${orientation}` : '';
let disabled = !!props.disabled;
_react.default.useEffect(() => {
setSelected(props.selected);
}, [props.selected]);
const childrenWithProps = _react.default.Children.map(children, (child, index) => {
if (_react.default.isValidElement(child)) {
return _react.default.cloneElement(child, {
index,
disabled,
onClick: onChange
}); // Passing the index as a prop
}
});
return _react.default.createElement(_context.ButtonGroupContext.Provider, {
value: {
selected,
setSelected
}
}, _react.default.createElement("div", {
className: cls
}, childrenWithProps));
}
}});
/**************************************
INTERNAL MODULE: ./button-group/context
**************************************/
ims.set('./button-group/context', {hash: 2338960457, creator: function (require, exports) {
;
Object.defineProperty(exports, "__esModule", {
value: true
});
exports.useButtonGroupContext = exports.ButtonGroupContext = void 0;
var _react = require("react");
const ButtonGroupContext = exports.ButtonGroupContext = _react.default.createContext({});
const useButtonGroupContext = () => _react.default.useContext(ButtonGroupContext);
exports.useButtonGroupContext = useButtonGroupContext;
}});
/***********************************
INTERNAL MODULE: ./button-group/type
***********************************/
ims.set('./button-group/type', {hash: 3900894228, creator: function (require, exports) {
;
Object.defineProperty(exports, "__esModule", {
value: true
});
}});
/*******************************
INTERNAL MODULE: ./button/button
*******************************/
ims.set('./button/button', {hash: 28591129, creator: function (require, exports) {
;
Object.defineProperty(exports, "__esModule", {
value: true
});
exports.Button = void 0;
var _react = require("react");
var _icons = require("pragmate-ui/icons");
var _spinner = require("pragmate-ui/spinner");
var _context = require("../button-group/context");
var _useRipple = require("../use-ripple");
const {
forwardRef
} = _react.default;
/*bundle*/const Button = exports.Button = forwardRef((props, reference) => {
const {
className,
onClick,
data,
label,
title,
children,
icon,
loading,
block,
index,
fetching = false,
variant = 'default',
bordered = false,
sizing = 'md',
disabled = false,
...otherProps
} = props;
const context = _react.default.useContext(_context.ButtonGroupContext);
const [, setProcessing] = _react.default.useState(fetching || loading);
const ref = (0, _useRipple.useRipple)(title, reference);
const usingContext = typeof context?.setSelected === 'function';
const onClickButton = async event => {
try {
if (usingContext) {
context.setSelected(index);
}
if (onClick && typeof onClick === 'function') {
setProcessing(true);
//@ts-ignore
await onClick(event);
setProcessing(false);
return;
}
} finally {
setProcessing(false);
}
};
const properties = {
...otherProps,
type: props.type ? props.type : 'button'
};
if (title) properties['data-tippy-content'] = title;
if (data) {
Object.keys(data).forEach(entry => {
properties[`data-${entry}`] = data[entry];
});
}
let cls = `pui-button btn-${variant}`;
cls += className ? ` ${className}` : '';
cls += bordered ? ' outline' : '';
cls += icon ? ' has-icon' : '';
cls += block ? ' btn--block' : '';
cls += sizing ? ` btn--${sizing}` : '';
cls += loading || fetching ? ' btn--loading' : '';
const clsLoading = `button-label ${loading || fetching ? 'button-label--loading' : ''}`;
if (usingContext && context.selected === index) cls += ' pui-btn--active';
if (usingContext) properties['data-index'] = index;
return _react.default.createElement("button", {
ref: ref,
className: cls,
onClick: onClickButton,
disabled: loading || fetching || disabled,
...properties
}, icon && _react.default.createElement(_icons.Icon, {
icon: icon
}), label || children && _react.default.createElement("div", {
className: clsLoading
}, label || children), (loading || fetching) && _react.default.createElement(_spinner.Spinner, {
type: `on-${variant}`,
active: true
}));
});
}});
/**********************************
INTERNAL MODULE: ./button/interface
**********************************/
ims.set('./button/interface', {hash: 694968353, creator: function (require, exports) {
;
Object.defineProperty(exports, "__esModule", {
value: true
});
}});
/***************************************
INTERNAL MODULE: ./conditional-container
***************************************/
ims.set('./conditional-container', {hash: 1749837270, creator: function (require, exports) {
;
Object.defineProperty(exports, "__esModule", {
value: true
});
exports.ConditionalContainer = ConditionalContainer;
/*bundle*/function ConditionalContainer({
condition,
options,
placeholder,
ternary
}) {
const evaluatedValue = typeof condition === 'function' ? condition() : condition;
let Component;
if (ternary && typeof evaluatedValue === 'boolean') {
Component = evaluatedValue ? options.true : options.false;
} else {
Component = options[evaluatedValue] || placeholder;
}
return Component ? Component : null;
}
}});
/***************************************
INTERNAL MODULE: ./hooks/use-media-query
***************************************/
ims.set('./hooks/use-media-query', {hash: 2034606327, creator: function (require, exports) {
;
Object.defineProperty(exports, "__esModule", {
value: true
});
exports.useMediaQuery = useMediaQuery;
var _react = require("react");
/*bundle*/function useMediaQuery() {
const [size, setSize] = (0, _react.useState)('lg');
const calculateSize = () => {
const width = window.innerWidth;
if (width < 576) {
return 'xs';
} else if (width >= 576 && width < 768) {
return 'sm';
} else if (width >= 768 && width < 992) {
return 'md';
} else {
return 'lg';
}
};
(0, _react.useEffect)(() => {
const handleResize = () => {
const newSize = calculateSize();
setSize(newSize);
};
// Set initial size
handleResize();
// Set up event listener for resizing
window.addEventListener('resize', handleResize);
// Clean up function
return () => {
window.removeEventListener('resize', handleResize);
};
}, []);
return size;
}
}});
/******************************
INTERNAL MODULE: ./html-wrapper
******************************/
ims.set('./html-wrapper', {hash: 4059971987, creator: function (require, exports) {
;
Object.defineProperty(exports, "__esModule", {
value: true
});
exports.HtmlWrapper = HtmlWrapper;
var _react = require("react");
/*bundle*/function HtmlWrapper({
className,
children,
params = {},
tag = 'span',
as = 'span'
}) {
const Control = as || tag;
const keys = Object.keys(params);
keys.forEach(key => {
const value = params[key];
children = children.replace(new RegExp(`\\{${key}\\}`, 'g'), value);
});
return _react.default.createElement(Control, {
className: className,
dangerouslySetInnerHTML: {
__html: children
}
});
}
}});
/**********************
INTERNAL MODULE: ./link
**********************/
ims.set('./link', {hash: 1413814841, creator: function (require, exports) {
;
Object.defineProperty(exports, "__esModule", {
value: true
});
exports.Link = Link;
var _react = require("react");
var _routing = require("@beyond-js/kernel/routing");
/*bundle*/function Link({
href,
...props
}) {
const isExternal = props.target === '_blank';
const onClick = event => {
if (!isExternal) event.preventDefault();
event.stopPropagation();
if (props.onClick && typeof props.onClick === 'function') {
const result = props.onClick(event);
if (result === false) return;
}
!isExternal && _routing.routing.pushState(href);
};
const properties = {
...props
};
['href', 'onClick'].forEach(prop => delete properties[prop]);
return _react.default.createElement("a", {
...properties,
href: href,
onClick: onClick,
target: props.target
}, props.children);
}
}});
/**************************************
INTERNAL MODULE: ./responsive-container
**************************************/
ims.set('./responsive-container', {hash: 285431686, creator: function (require, exports) {
;
Object.defineProperty(exports, "__esModule", {
value: true
});
exports.ResponsiveContainer = ResponsiveContainer;
var _react = require("react");
var _useMediaQuery = require("./hooks/use-media-query");
/*bundle*/function ResponsiveContainer(props) {
const size = (0, _useMediaQuery.useMediaQuery)();
// Ordered sizes, from smallest to largest.
const sizes = ['xs', 'sm', 'md', 'lg'];
// Function to find the first available component for the current or larger screen size.
const getComponent = currentSize => {
const currentIndex = sizes.indexOf(currentSize);
for (let i = currentIndex; i < sizes.length; i++) {
const component = props[sizes[i]];
if (component !== undefined && component !== null) {
return component;
}
}
return null;
};
const Component = getComponent(size);
// Return null if no matching component is found.
if (!Component) {
return null;
}
// Render the component matching the current or closest screen size.
return _react.default.createElement(Component, null);
}
}});
/*************************
INTERNAL MODULE: ./spinner
*************************/
ims.set('./spinner', {hash: 3026278285, creator: function (require, exports) {
;
Object.defineProperty(exports, "__esModule", {
value: true
});
exports.Spinner = void 0;
var _react = require("react");
;
const Component = (props, ref) => {
let {
color,
className,
size,
type,
active
} = props;
size = size ? size : 'xs';
const types = ['on-primary', 'on-secondary', 'on-surface', 'on-error', 'primary', 'secondary', 'tertiary'];
const clsType = types.includes(type) ? type : 'primary';
const style = {};
if (color) style.stroke = color;
className = `${clsType}${className ? ` ${className}` : ''}`;
let cls = `${className ? `${className} ` : ''}pragmate-element-spinner spinner--${size}`;
if (active) cls += ' is-active';
return _react.default.createElement("div", {
className: cls,
ref: ref
}, _react.default.createElement("svg", {
viewBox: '0 0 100 100'
}, _react.default.createElement("circle", {
cx: '50',
cy: '50',
r: '30',
style: style
})));
};
/*bundle*/const Spinner = exports.Spinner = (0, _react.forwardRef)(Component);
}});
/****************************
INTERNAL MODULE: ./use-ripple
****************************/
ims.set('./use-ripple', {hash: 3800109915, creator: function (require, exports) {
;
Object.defineProperty(exports, "__esModule", {
value: true
});
exports.useRipple = useRipple;
var _react = require("react");
var _ripple = require("pragmate-ui/ripple");
var _tippy = require("tippy.js");
function useRipple(title, ref) {
ref = ref ?? _react.default.useRef(null);
_react.default.useEffect(() => {
const ripple = new _ripple.RippleEffect();
ripple.addRippleEffect(ref.current);
if (title) {
(0, _tippy.default)(ref.current);
}
}, [title]);
return ref;
}
}});
__pkg.exports.descriptor = [{"im":"./button-group/button-group","from":"ButtonGroup","name":"ButtonGroup"},{"im":"./button/button","from":"Button","name":"Button"},{"im":"./button/interface","from":"IButtonProps","name":"IButtonProps"},{"im":"./conditional-container","from":"ConditionalContainer","name":"ConditionalContainer"},{"im":"./hooks/use-media-query","from":"useMediaQuery","name":"useMediaQuery"},{"im":"./html-wrapper","from":"HtmlWrapper","name":"HtmlWrapper"},{"im":"./link","from":"Link","name":"Link"},{"im":"./responsive-container","from":"ResponsiveContainer","name":"ResponsiveContainer"},{"im":"./spinner","from":"Spinner","name":"Spinner"}];
export let ButtonGroup, Button, IButtonProps, ConditionalContainer, useMediaQuery, HtmlWrapper, Link, ResponsiveContainer, Spinner;
// Module exports
__pkg.exports.process = function({require, prop, value}) {
(require || prop === 'ButtonGroup') && (ButtonGroup = require ? require('./button-group/button-group').ButtonGroup : value);
(require || prop === 'Button') && (Button = require ? require('./button/button').Button : value);
(require || prop === 'IButtonProps') && (IButtonProps = require ? require('./button/interface').IButtonProps : value);
(require || prop === 'ConditionalContainer') && (ConditionalContainer = require ? require('./conditional-container').ConditionalContainer : value);
(require || prop === 'useMediaQuery') && (useMediaQuery = require ? require('./hooks/use-media-query').useMediaQuery : value);
(require || prop === 'HtmlWrapper') && (HtmlWrapper = require ? require('./html-wrapper').HtmlWrapper : value);
(require || prop === 'Link') && (Link = require ? require('./link').Link : value);
(require || prop === 'ResponsiveContainer') && (ResponsiveContainer = require ? require('./responsive-container').ResponsiveContainer : value);
(require || prop === 'Spinner') && (Spinner = require ? require('./spinner').Spinner : value);
};
export const __beyond_pkg = __pkg;
export const hmr = new (function () {
this.on = (event, listener) => void 0;
this.off = (event, listener) => void 0;
});
__pkg.initialise(ims);
//# sourceMappingURL=components.browser.mjs.map