@appbuckets/react-ui
Version:
Just Another React UI Framework
130 lines (127 loc) • 3.42 kB
JavaScript
import { __rest, __assign } from 'tslib';
import * as React from 'react';
import clsx from 'clsx';
import {
createShorthandFactory,
useElementType,
childrenUtils,
} from '@appbuckets/react-ui-core';
import '../BucketTheme/BucketTheme.js';
import { useWithDefaultProps } from '../BucketTheme/BucketContext.js';
import useProgressProps from './lib/useProgressProps.js';
import useProgressIndicator from './lib/useProgressIndicator.js';
/* --------
* Component Render
* -------- */
var LinearProgress = function (receivedProps) {
var props = useWithDefaultProps('linearProgress', receivedProps);
var _a = useProgressProps(props),
className = _a.className,
progress = _a.progress,
_b = _a.rest;
_b.as;
var children = _b.children,
content = _b.content,
indicator = _b.indicator,
limits = _b.limits,
reverse = _b.reverse,
rest = __rest(_b, [
'as',
'children',
'content',
'indicator',
'limits',
'reverse',
]);
var ElementType = useElementType(LinearProgress, receivedProps, props);
// ----
// Build Indicator Element
// ----
var indicatorElement = useProgressIndicator(indicator, progress);
// ----
// Build Limits Element
// ----
var downLimit =
limits &&
(typeof limits === 'function' ? limits(progress.min) : progress.min);
var upLimit =
limits &&
(typeof limits === 'function'
? limits(progress.overvalued ? progress.value : progress.max)
: progress.overvalued
? progress.value
: progress.max);
var overValueLimit =
progress.overvalued &&
limits &&
(typeof limits === 'function' ? limits(progress.max) : progress.max);
var limitsElement = React.useMemo(
function () {
if (!limits) {
return null;
}
return React.createElement(
'div',
{ className: 'limits' },
React.createElement(
'div',
{
className: 'value',
style: {
width: ''.concat(progress.overvalued ? progress.width : 100, '%'),
},
},
React.createElement('div', { className: 'down' }, downLimit),
React.createElement('div', { className: 'up' }, upLimit)
),
overValueLimit &&
React.createElement('div', { className: 'overvalue' }, overValueLimit)
);
},
[
limits,
progress.overvalued,
progress.width,
downLimit,
upLimit,
overValueLimit,
]
);
var classes = clsx(
className,
{
reverse: reverse,
'with-limits': limitsElement,
'with-indicator': indicatorElement,
},
'linear'
);
var contentElement = childrenUtils.isNil(children) ? content : children;
return React.createElement(
ElementType,
__assign({}, rest, { className: classes }),
limitsElement,
React.createElement(
'div',
{ className: 'bar' },
React.createElement(
'div',
{
className: 'value',
style: { width: ''.concat(progress.width, '%') },
},
indicatorElement
)
),
contentElement &&
React.createElement('div', { className: 'content' }, contentElement)
);
};
LinearProgress.displayName = 'LinearProgress';
LinearProgress.create = createShorthandFactory(
LinearProgress,
function (value) {
return { value: value };
}
);
export { LinearProgress as default };