@devexpress/dx-react-chart-bootstrap4
Version:
Bootstrap 4 templates for DevExtreme React Chart component
428 lines (370 loc) • 12.6 kB
JavaScript
/**
* Bundle of @devexpress/dx-react-chart-bootstrap4
* Generated: 2025-05-05
* Version: 4.0.11
* License: https://js.devexpress.com/Licensing
*/
(function (global, factory) {
typeof exports === 'object' && typeof module !== 'undefined' ? factory(exports, require('react'), require('prop-types'), require('@devexpress/dx-react-core'), require('@devexpress/dx-react-chart'), require('clsx'), require('@devexpress/dx-chart-core'), require('react-dom'), require('react-popper')) :
typeof define === 'function' && define.amd ? define(['exports', 'react', 'prop-types', '@devexpress/dx-react-core', '@devexpress/dx-react-chart', 'clsx', '@devexpress/dx-chart-core', 'react-dom', 'react-popper'], factory) :
(global = global || self, factory((global.DevExpress = global.DevExpress || {}, global.DevExpress.DXReactChartBootstrap4 = {}), global.React, global.PropTypes, global.dxReactCore, global.dxReactChart, global.classNames, global.dxChartCore, global.ReactDOM, global.reactPopper));
}(this, (function (exports, React, PropTypes, dxReactCore, dxReactChart, classNames, dxChartCore, ReactDOM, reactPopper) { 'use strict';
if (typeof process === "undefined") { var process = { env: {} }; }
PropTypes = PropTypes && Object.prototype.hasOwnProperty.call(PropTypes, 'default') ? PropTypes['default'] : PropTypes;
classNames = classNames && Object.prototype.hasOwnProperty.call(classNames, 'default') ? classNames['default'] : classNames;
const withClassName = (...args) => {
const setClassName = ({
className,
...restProps
}) => ({
className: classNames(...args, className),
...restProps
});
return dxReactChart.withPatchedProps(setClassName);
};
const Root = withClassName('dx-c-bs4-container')(dxReactChart.Chart.Root);
const Label = withClassName('dx-c-bs4-fill-current-color', 'dx-c-bs4-label', 'text-muted')(dxReactChart.Chart.Label);
const palette = ['#0070ff', '#d72e3d', '#249d3d', '#ffb90c', '#1698af', '#616a72'];
const ChartWithPalette = ({
children,
...props
}) => /*#__PURE__*/React.createElement(dxReactChart.Chart, props, /*#__PURE__*/React.createElement(dxReactChart.Palette, {
scheme: palette
}), children);
ChartWithPalette.components = dxReactChart.Chart.components;
process.env.NODE_ENV !== "production" ? ChartWithPalette.propTypes = {
children: PropTypes.node.isRequired
} : void 0;
const Chart = dxReactCore.withComponents({
Root
})(ChartWithPalette);
Chart.Label = Label;
const Root$1 = withClassName('list-group', 'py-3')(props => /*#__PURE__*/React.createElement("ul", props));
const Label$1 = withClassName('text-body', 'pl-2', 'pr-2')(({
text,
...restProps
}) => /*#__PURE__*/React.createElement("span", restProps, text));
const Item = withClassName('d-flex', 'list-group-item', 'border-0', 'py-1', 'px-4', 'align-items-center')(props => /*#__PURE__*/React.createElement("li", props));
const Legend = dxReactCore.withComponents({
Root: Root$1,
Item,
Label: Label$1
})(dxReactChart.Legend);
const Text = withClassName('w-100', 'text-center', 'mb-3')(({
text,
...restProps
}) => /*#__PURE__*/React.createElement("h3", restProps, text));
const Title = dxReactCore.withComponents({
Text
})(dxReactChart.Title);
const setClassName = ({
classes,
...restProps
}) => {
if (restProps.state) {
const {
className,
...rest
} = restProps;
return {
className: classNames('dx-c-bs4-fill-background-color', className),
...rest
};
}
return restProps;
};
const Point = dxReactChart.withPatchedProps(setClassName)(dxReactChart.ScatterSeries.Point);
const ScatterSeries = dxReactCore.withComponents({
Point
})(dxReactChart.ScatterSeries);
const Root$2 = withClassName('dx-c-bs4-crisp-edges')(dxReactChart.Axis.Root);
const Tick = withClassName('dx-c-bs4-stroke-current-color', 'dx-c-bs4-crisp-edges', 'dx-c-bs4-axis-opacity')(dxReactChart.Axis.Tick);
const Label$2 = withClassName('dx-c-bs4-fill-current-color', 'dx-c-bs4-label', 'text-muted')(dxReactChart.Axis.Label);
const Line = withClassName('dx-c-bs4-stroke-current-color', 'dx-c-bs4-axis-opacity')(dxReactChart.Axis.Line);
const Grid = withClassName('dx-c-bs4-stroke-current-color', 'dx-c-bs4-crisp-edges', 'dx-c-bs4-axis-opacity')(dxReactChart.Axis.Grid);
const ValueAxis = dxReactCore.withComponents({
Root: Root$2,
Tick,
Label: Label$2,
Line,
Grid
})(dxReactChart.ValueAxis);
const ArgumentAxis = dxReactCore.withComponents({
Root: Root$2,
Tick,
Label: Label$2,
Line,
Grid
})(dxReactChart.ArgumentAxis);
function _extends() {
_extends = Object.assign || function (target) {
for (var i = 1; i < arguments.length; i++) {
var source = arguments[i];
for (var key in source) {
if (Object.prototype.hasOwnProperty.call(source, key)) {
target[key] = source[key];
}
}
}
return target;
};
return _extends.apply(this, arguments);
}
const DefaultArrowComponent = /*#__PURE__*/React.forwardRef(({
placement,
...restProps
}, ref) => /*#__PURE__*/React.createElement("div", _extends({
className: "arrow",
ref: ref
}, restProps)));
DefaultArrowComponent.propTypes = {
placement: PropTypes.string.isRequired
};
class Popover extends React.PureComponent {
constructor(props) {
super(props); // These two fields should be created only if `isOpen && toggle` condition is true
// and destroyed when condition turns false.
// But it would require usage of `this.state` and other code complications.
// So let's not change it for now. Maybe a better solution would be found.
this.contentRef = /*#__PURE__*/React.createRef();
this.handleClick = this.handleClick.bind(this);
}
componentDidMount() {
const {
isOpen,
toggle
} = this.props;
if (isOpen && toggle) {
this.attachDocumentEvents();
}
}
componentDidUpdate() {
const {
isOpen,
toggle
} = this.props;
if (isOpen && toggle) {
this.attachDocumentEvents();
} else {
this.detachDocumentEvents();
}
}
componentWillUnmount() {
this.detachDocumentEvents();
}
handleClick(e) {
const {
target: eventTarget
} = e;
const {
current: contentNode
} = this.contentRef;
const {
toggle,
target
} = this.props;
if (contentNode && !contentNode.contains(eventTarget) && !target.contains(eventTarget)) {
toggle();
}
}
attachDocumentEvents() {
if (!this.listenersAttached) {
this.toggleDocumentEvents('addEventListener');
this.listenersAttached = true;
}
}
detachDocumentEvents() {
if (this.listenersAttached) {
this.toggleDocumentEvents('removeEventListener');
this.listenersAttached = false;
}
}
toggleDocumentEvents(method) {
['click', 'touchstart'].forEach(eventType => {
document[method](eventType, this.handleClick, true);
});
}
renderPopper() {
const {
children,
target,
renderInBody,
arrowComponent: ArrowComponent,
modifiers = [],
...restProps
} = this.props;
const popperModifiers = [{
name: 'offset',
options: {
offset: [0, 8]
}
}, ...modifiers];
return /*#__PURE__*/React.createElement(reactPopper.Popper, _extends({
referenceElement: target,
modifiers: popperModifiers
}, restProps), ({
ref,
style,
arrowProps,
placement
}) => /*#__PURE__*/React.createElement("div", {
className: `popover show bs-popover-${placement}`,
ref: ref,
style: style
}, /*#__PURE__*/React.createElement("div", {
className: "popover-inner",
ref: this.contentRef
}, children), /*#__PURE__*/React.createElement(ArrowComponent, _extends({}, arrowProps, {
placement: restProps.placement
}))));
}
render() {
const {
isOpen,
renderInBody
} = this.props;
if (!isOpen) return null;
return renderInBody ? /*#__PURE__*/ReactDOM.createPortal(this.renderPopper(), document.body) : this.renderPopper();
}
}
process.env.NODE_ENV !== "production" ? Popover.propTypes = {
renderInBody: PropTypes.bool,
placement: PropTypes.string,
isOpen: PropTypes.bool,
children: PropTypes.node.isRequired,
target: PropTypes.oneOfType([PropTypes.instanceOf(typeof Element !== 'undefined' ? Element : Object), PropTypes.object]),
toggle: PropTypes.func,
arrowComponent: PropTypes.oneOfType([PropTypes.func, PropTypes.object])
} : void 0;
Popover.defaultProps = {
target: null,
renderInBody: true,
isOpen: false,
placement: 'auto',
toggle: undefined,
arrowComponent: DefaultArrowComponent
};
const popperModifiers = [{
name: 'flip',
enabled: false
}, {
name: 'preventOverflow',
options: {
altAxis: true
}
}];
class Overlay extends React.PureComponent {
render() {
const {
children,
target,
rotated,
...restProps
} = this.props;
return /*#__PURE__*/React.createElement(Popover, _extends({
placement: rotated ? dxChartCore.RIGHT : dxChartCore.TOP,
isOpen: true,
target: target,
modifiers: popperModifiers
}, restProps), children);
}
}
process.env.NODE_ENV !== "production" ? Overlay.propTypes = {
children: PropTypes.node.isRequired,
target: PropTypes.any.isRequired,
rotated: PropTypes.bool.isRequired,
arrowComponent: PropTypes.oneOfType([PropTypes.func, PropTypes.object]).isRequired
} : void 0;
const Content = ({
text,
targetItem,
...restProps
}) => /*#__PURE__*/React.createElement("span", restProps, text);
process.env.NODE_ENV !== "production" ? Content.propTypes = {
text: PropTypes.string.isRequired,
targetItem: PropTypes.shape({
series: PropTypes.string.isRequired,
point: PropTypes.number.isRequired
})
} : void 0;
Content.defaultProps = {
targetItem: undefined
};
const Arrow = /*#__PURE__*/React.forwardRef(({
className,
placement,
...restProps
}, ref) => /*#__PURE__*/React.createElement("div", _extends({
className: classNames('arrow', className),
ref: ref
}, restProps)));
Arrow.propTypes = {
placement: PropTypes.string.isRequired,
className: PropTypes.string
};
Arrow.defaultProps = {
className: undefined
};
const Sheet = ({
className,
...restProps
}) => /*#__PURE__*/React.createElement("div", _extends({
className: classNames('popover-body', className)
}, restProps));
process.env.NODE_ENV !== "production" ? Sheet.propTypes = {
className: PropTypes.string
} : void 0;
Sheet.defaultProps = {
className: undefined
};
const Tooltip = dxReactCore.withComponents({
Overlay,
Content,
Arrow,
Sheet
})(dxReactChart.Tooltip);
const DragBox = withClassName('bg-secondary', 'dx-c-bs4-rect-opacity')(dxReactChart.ZoomAndPan.DragBox);
const ZoomAndPan = dxReactCore.withComponents({
DragBox
})(dxReactChart.ZoomAndPan);
Object.defineProperty(exports, 'AreaSeries', {
enumerable: true,
get: function () {
return dxReactChart.AreaSeries;
}
});
Object.defineProperty(exports, 'BarSeries', {
enumerable: true,
get: function () {
return dxReactChart.BarSeries;
}
});
Object.defineProperty(exports, 'LineSeries', {
enumerable: true,
get: function () {
return dxReactChart.LineSeries;
}
});
Object.defineProperty(exports, 'PieSeries', {
enumerable: true,
get: function () {
return dxReactChart.PieSeries;
}
});
Object.defineProperty(exports, 'SplineSeries', {
enumerable: true,
get: function () {
return dxReactChart.SplineSeries;
}
});
exports.ArgumentAxis = ArgumentAxis;
exports.Chart = Chart;
exports.Legend = Legend;
exports.ScatterSeries = ScatterSeries;
exports.Title = Title;
exports.Tooltip = Tooltip;
exports.ValueAxis = ValueAxis;
exports.ZoomAndPan = ZoomAndPan;
Object.defineProperty(exports, '__esModule', { value: true });
})));
//# sourceMappingURL=dx-react-chart-bootstrap4.umd.cjs.map