define(["require", "exports", "tslib", "react", "../../Foundation", "../../Utilities", "./Stack.styles", "./StackItem/StackItem"], function (require, exports, tslib_1, React, Foundation_1, Utilities_1, Stack_styles_1, StackItem_1) {
    "use strict";
    Object.defineProperty(exports, "__esModule", { value: true });
    var StackView = function (props) {
        var _a = props.as, RootType = _a === void 0 ? 'div' : _a, disableShrink = props.disableShrink, wrap = props.wrap, rest = tslib_1.__rest(props, ["as", "disableShrink", "wrap"]);
        Utilities_1.warnDeprecations('Stack', props, {
            gap: 'tokens.childrenGap',
            maxHeight: 'tokens.maxHeight',
            maxWidth: 'tokens.maxWidth',
            padding: 'tokens.padding'
        });
        var stackChildren = React.Children.map(props.children, function (child, index) {
            if (!child) {
                return null;
            }
            if (_isStackItem(child)) {
                var defaultItemProps = {
                    shrink: !disableShrink
                };
                return React.cloneElement(child, tslib_1.__assign({}, defaultItemProps, child.props));
            }
            return child;
        });
        var nativeProps = Utilities_1.getNativeProps(rest, Utilities_1.htmlElementProperties);
        var Slots = Foundation_1.getSlots(props, {
            root: RootType,
            inner: 'div'
        });
        if (wrap) {
            return (Foundation_1.withSlots(Slots.root, tslib_1.__assign({}, nativeProps),
                Foundation_1.withSlots(Slots.inner, null, stackChildren)));
        }
        return Foundation_1.withSlots(Slots.root, tslib_1.__assign({}, nativeProps), stackChildren);
    };
    function _isStackItem(item) {
        // In theory, we should be able to just check item.type === StackItem.
        // However, under certain unclear circumstances (see https://github.com/OfficeDev/office-ui-fabric-react/issues/10785),
        // the object identity is different despite the function implementation being the same.
        return (!!item &&
            typeof item === 'object' &&
            !!item.type &&
            // StackItem is generated by createComponent, so we need to check its displayName instead of name
            item.type.displayName === StackItem_1.StackItem.displayName);
    }
    var StackStatics = {
        Item: StackItem_1.StackItem
    };
    exports.Stack = Foundation_1.createComponent(StackView, {
        displayName: 'Stack',
        styles: Stack_styles_1.styles,
        statics: StackStatics
    });
    exports.default = exports.Stack;
});
//# sourceMappingURL=Stack.js.map