"use strict";
Object.defineProperty(exports, "__esModule", { value: true });
var tslib_1 = require("tslib");
var React = require("react");
var Icon_styles_1 = require("./Icon.styles");
var Utilities_1 = require("../../Utilities");
var Styling_1 = require("../../Styling");
exports.getIconContent = Utilities_1.memoizeFunction(function (iconName) {
    var _a = Styling_1.getIcon(iconName) || {
        subset: {},
        code: undefined
    }, code = _a.code, subset = _a.subset;
    return {
        children: code,
        iconClassName: subset.className,
        fontFamily: subset.fontFace && subset.fontFace.fontFamily
    };
});
/**
 * Fast icon component which only supports font glyphs (not images) and can't be targeted by customizations.
 * To style the icon, use `className` or reference `ms-Icon` in CSS.
 * {@docCategory Icon}
 */
exports.FontIcon = function (props) {
    var iconName = props.iconName, className = props.className, _a = props.style, style = _a === void 0 ? {} : _a;
    var _b = exports.getIconContent(iconName), iconClassName = _b.iconClassName, children = _b.children, fontFamily = _b.fontFamily;
    var nativeProps = Utilities_1.getNativeProps(props, Utilities_1.htmlElementProperties);
    var containerProps = props['aria-label']
        ? {}
        : {
            role: 'presentation',
            'aria-hidden': true
        };
    return (React.createElement("i", tslib_1.__assign({ "data-icon-name": iconName }, containerProps, nativeProps, { className: Utilities_1.css(Icon_styles_1.MS_ICON, Icon_styles_1.classNames.root, iconClassName, !iconName && Icon_styles_1.classNames.placeholder, className), 
        // Apply the font family this way to ensure it doesn't get overridden by Fabric Core ms-Icon styles
        // https://github.com/OfficeDev/office-ui-fabric-react/issues/10449
        style: tslib_1.__assign({ fontFamily: fontFamily }, style) }), children));
};
/**
 * Memoized helper for rendering a FontIcon.
 * @param iconName - The name of the icon to use from the icon font.
 * @param className - Class name for styling the icon.
 * @param ariaLabel - Label for the icon for the benefit of screen readers.
 * {@docCategory Icon}
 */
exports.getFontIcon = Utilities_1.memoizeFunction(function (iconName, className, ariaLabel) {
    return exports.FontIcon({ iconName: iconName, className: className, 'aria-label': ariaLabel });
});
//# sourceMappingURL=FontIcon.js.map