"use strict";
var frame_1 = require('ui/frame');
var page_1 = require('ui/page');
var di_1 = require('@angular/core/src/di');
var platform_1 = require("platform");
exports.APP_ROOT_VIEW = new di_1.OpaqueToken('App Root View');
exports.DEVICE = new di_1.OpaqueToken('platfrom device');
exports.defaultPageProvider = di_1.provide(page_1.Page, { useFactory: getDefaultPage });
function getDefaultPage() {
    var frame = frame_1.topmost();
    if (frame) {
        return frame.currentPage;
    }
    else {
        return null;
    }
}
exports.getDefaultPage = getDefaultPage;
exports.defaultDeviceProvider = di_1.provide(exports.DEVICE, { useValue: platform_1.device });
//# sourceMappingURL=platform-providers.js.map
    function MainTemplateDirective(owner, template) {
        owner.mainTemplate = template;
    }
    MainTemplateDirective = __decorate([
        core_1.Directive({
            selector: "[drawerMain]"
        }),
        __param(0, core_1.Inject(RadSideDrawerComponent)),
        __param(1, core_1.Inject(core_1.TemplateRef))
    ], MainTemplateDirective);
    return MainTemplateDirective;
}());
exports.MainTemplateDirective = MainTemplateDirective;
var DrawerTemplateDirective = (function () {
    function DrawerTemplateDirective(owner, template) {
        owner.drawerTemplate = template;
    }
    DrawerTemplateDirective = __decorate([
        core_1.Directive({
            selector: "[drawerSide]"
        }),
        __param(0, core_1.Inject(RadSideDrawerComponent)),
        __param(1, core_1.Inject(core_1.TemplateRef))
    ], DrawerTemplateDirective);
    return DrawerTemplateDirective;
}());
exports.DrawerTemplateDirective = DrawerTemplateDirective;
exports.SIDEDRAWER_DIRECTIVES = [RadSideDrawerComponent, MainTemplateDirective, DrawerTemplateDirective];
exports.SIDEDRAWER_PROVIDERS = [di_1.provide(core_1.PLATFORM_DIRECTIVES, { useValue: exports.SIDEDRAWER_DIRECTIVES, multi: true })];
elementRegistry.registerElement("RadSideDrawer", function () { return sidedrawer_1.RadSideDrawer; });
    return ListViewLoadOnDemandDirective;
}());
exports.ListViewLoadOnDemandDirective = ListViewLoadOnDemandDirective;
function getSingleViewFromViewRef(viewRef) {
    var getSingleViewRecursive = function (nodes, nestLevel) {
        var actualNodes = nodes.filter(function (n) { return !!n && n.nodeName !== "#text"; });
        if (actualNodes.length === 0) {
            throw new Error("No suitable views found in list template! Nesting level: " + nestLevel);
        }
        else if (actualNodes.length > 1) {
            throw new Error("More than one view found in list template! Nesting level: " + nestLevel);
        }
        else {
            if (actualNodes[0]) {
                var parentLayout = actualNodes[0].parent;
                if (parentLayout instanceof layout_base_1.LayoutBase) {
                    parentLayout.removeChild(actualNodes[0]);
                }
                return actualNodes[0];
            }
            else {
                return getSingleViewRecursive(actualNodes[0].children, nestLevel + 1);
            }
        }
    };
    return getSingleViewRecursive(viewRef.rootNodes, 0);
}
exports.LISTVIEW_DIRECTIVES = [RadListViewComponent, ListViewItemDirective, ListViewItemSwipeDirective, ListViewHeaderDirective, ListViewFooterDirective, ListViewLoadOnDemandDirective];
exports.LISTVIEW_PROVIDERS = [di_1.provide(core_1.PLATFORM_DIRECTIVES, { useValue: exports.LISTVIEW_DIRECTIVES, multi: true })];
elementRegistry.registerElement("RadListView", function () { return _1.RadListView; });