devextreme
Version:
HTML5 JavaScript Component Suite for Responsive Web Development
98 lines (96 loc) • 3.48 kB
JavaScript
/**
* DevExtreme (cjs/__internal/ui/button/icon.js)
* Version: 24.2.6
* Build date: Mon Mar 17 2025
*
* Copyright (c) 2012 - 2025 Developer Express Inc. ALL RIGHTS RESERVED
* Read about DevExtreme licensing here: https://js.devexpress.com/Licensing/
*/
;
Object.defineProperty(exports, "__esModule", {
value: true
});
exports.defaultIconProps = exports.Icon = void 0;
var _inferno = require("inferno");
var _inferno2 = require("@devextreme/runtime/inferno");
var _icon = require("../../../core/utils/icon");
var _index = require("../../core/r1/utils/index");
var _combine_classes = require("../../core/utils/combine_classes");
function _extends() {
return _extends = Object.assign ? Object.assign.bind() : function(n) {
for (var e = 1; e < arguments.length; e++) {
var t = arguments[e];
for (var r in t) {
({}).hasOwnProperty.call(t, r) && (n[r] = t[r])
}
}
return n
}, _extends.apply(null, arguments)
}
const defaultIconProps = exports.defaultIconProps = {
position: "left",
source: ""
};
class Icon extends _inferno2.BaseInfernoComponent {
constructor(props) {
super(props);
this.state = {}
}
get sourceType() {
return (0, _icon.getImageSourceType)(this.props.source)
}
get cssClass() {
return "left" !== this.props.position ? "dx-icon-right" : ""
}
get iconClassName() {
const generalClasses = {
"dx-icon": true,
[this.cssClass]: !!this.cssClass
};
const {
source: source
} = this.props;
if ("dxIcon" === this.sourceType) {
return (0, _combine_classes.combineClasses)(_extends({}, generalClasses, {
[`dx-icon-${source}`]: true
}))
}
if ("fontIcon" === this.sourceType) {
return (0, _combine_classes.combineClasses)(_extends({}, generalClasses, {
[String(source)]: !!source
}))
}
if ("image" === this.sourceType) {
return (0, _combine_classes.combineClasses)(generalClasses)
}
if ("svg" === this.sourceType) {
return (0, _combine_classes.combineClasses)(_extends({}, generalClasses, {
"dx-svg-icon": true
}))
}
return ""
}
get restAttributes() {
const restProps = _extends({}, this.props);
["iconTemplate", "position", "source"].forEach((excluded => {
delete restProps[excluded]
}));
return restProps
}
render() {
const {
iconClassName: iconClassName,
props: {
source: source
},
sourceType: sourceType
} = this;
const IconTemplate = (0, _index.getTemplate)(this.props.iconTemplate);
return (0, _inferno.createFragment)(["dxIcon" === sourceType && (0, _inferno.createVNode)(1, "i", iconClassName), "fontIcon" === sourceType && (0, _inferno.createVNode)(1, "i", iconClassName), "image" === sourceType && (0, _inferno.createVNode)(1, "img", iconClassName, null, 1, {
alt: "",
src: source
}), IconTemplate && (0, _inferno.createVNode)(1, "i", iconClassName, IconTemplate({}), 0)], 0)
}
}
exports.Icon = Icon;
Icon.defaultProps = defaultIconProps;