var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) {
    function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }
    return new (P || (P = Promise))(function (resolve, reject) {
        function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }
        function rejected(value) { try { step(generator["throw"](value)); } catch (e) { reject(e); } }
        function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }
        step((generator = generator.apply(thisArg, _arguments || [])).next());
    });
};
var __generator = (this && this.__generator) || function (thisArg, body) {
    var _ = { label: 0, sent: function() { if (t[0] & 1) throw t[1]; return t[1]; }, trys: [], ops: [] }, f, y, t, g;
    return g = { next: verb(0), "throw": verb(1), "return": verb(2) }, typeof Symbol === "function" && (g[Symbol.iterator] = function() { return this; }), g;
    function verb(n) { return function (v) { return step([n, v]); }; }
    function step(op) {
        if (f) throw new TypeError("Generator is already executing.");
        while (g && (g = 0, op[0] && (_ = 0)), _) try {
            if (f = 1, y && (t = op[0] & 2 ? y["return"] : op[0] ? y["throw"] || ((t = y["return"]) && t.call(y), 0) : y.next) && !(t = t.call(y, op[1])).done) return t;
            if (y = 0, t) op = [op[0] & 2, t.value];
            switch (op[0]) {
                case 0: case 1: t = op; break;
                case 4: _.label++; return { value: op[1], done: false };
                case 5: _.label++; y = op[1]; op = [0]; continue;
                case 7: op = _.ops.pop(); _.trys.pop(); continue;
                default:
                    if (!(t = _.trys, t = t.length > 0 && t[t.length - 1]) && (op[0] === 6 || op[0] === 2)) { _ = 0; continue; }
                    if (op[0] === 3 && (!t || (op[1] > t[0] && op[1] < t[3]))) { _.label = op[1]; break; }
                    if (op[0] === 6 && _.label < t[1]) { _.label = t[1]; t = op; break; }
                    if (t && _.label < t[2]) { _.label = t[2]; _.ops.push(op); break; }
                    if (t[2]) _.ops.pop();
                    _.trys.pop(); continue;
            }
            op = body.call(thisArg, _);
        } catch (e) { op = [6, e]; y = 0; } finally { f = t = 0; }
        if (op[0] & 5) throw op[1]; return { value: op[0] ? op[1] : void 0, done: true };
    }
};
import { EventAggregator } from "aurelia-event-aggregator";
import { BindingEngine, Container, DOM, TaskQueue, ViewCompiler, ViewResources } from "aurelia-framework";
export var UIInternal;
(function (UIInternal) {
    UIInternal.EVT_VIEWPORT_WHEEL = "EVT_VIEWPORT_WHEEL";
    UIInternal.EVT_VIEWPORT_CLICK = "EVT_VIEWPORT_CLICK";
    UIInternal.EVT_VIEWPORT_RESIZE = "EVT_VIEWPORT_RESIZE";
    UIInternal.EVT_AUTH_CHANGE = "EVT_AUTH_CHANGE";
    UIInternal.EVT_APP_READY = "EVT_APP_READY";
    UIInternal.EVT_PAGINATION_CHANGE = "EVT_PAGINATION_CHANGE";
    UIInternal.EVT_SCHEDULER_REFRESHED = "EVT_SCHEDULER_REFRESHED";
    UIInternal.EVT_VIEWPORT_CSS_BREAKPOINT_CHANGE = "EVT_VIEWPORT_CSS_BREAKPOINT_CHANGE";
    UIInternal.EVT_VIEWPORT_SMALL_DEVICE_ACTIVATED = "SMALL_DEVICE_ACTIVATED";
    UIInternal.EVT_UI_TABLE_BODY_CELL_CHANGED = "EVT_UI_TABLE_BODY_CELL_CHANGED";
    UIInternal.EVT_UI_TABLE_REFRESH = "EVT_UI_TABLE_REFRESH";
    UIInternal.EVT_CHANGE_LANGUAGE = "EVT_CHANGE_LANGUAGE";
    UIInternal.EVT_ROUTE_CHANGE = "EVT_ROUTE_CHANGE";
    UIInternal.EVT_GLOBAL_LOADER_SHOW = "EVT_GLOBAL_LOADER_SHOW";
    UIInternal.EVT_GLOBAL_LOADER_HIDE = "EVT_GLOBAL_LOADER_HIDE";
    UIInternal.EVT_UI_TABLE_PAGINATION_RELOAD = "EVT_UI_TABLE_PAGINATION_RELOAD";
    function queueTask(task) {
        Container.instance.get(TaskQueue).queueTask(task);
    }
    UIInternal.queueTask = queueTask;
    function queueMicroTask(task) {
        Container.instance.get(TaskQueue).queueMicroTask(task);
    }
    UIInternal.queueMicroTask = queueMicroTask;
    function broadcast(name, data) {
        Container.instance.get(EventAggregator).publish(name, data);
    }
    UIInternal.broadcast = broadcast;
    function subscribe(name, callback) {
        return Container.instance.get(EventAggregator).subscribe(name, callback);
    }
    UIInternal.subscribe = subscribe;
    function subscribeOnce(name, callback) {
        return Container.instance.get(EventAggregator).subscribeOnce(name, callback);
    }
    UIInternal.subscribeOnce = subscribeOnce;
    function observe(data, property, callback) {
        return Container.instance
            .get(BindingEngine)
            .propertyObserver(data, property)
            .subscribe(callback);
    }
    UIInternal.observe = observe;
    function createEvent(name, data) {
        return DOM.createCustomEvent(name, {
            bubbles: true,
            cancelable: true,
            detail: data
        });
    }
    UIInternal.createEvent = createEvent;
    function fireCallbackEvent(vm, event, data) {
        var ret = isFunction(vm[event])
            ? vm[event](data)
            : vm.element.dispatchEvent(UIInternal.createEvent(event, data));
        if (ret instanceof Promise) {
            return ret;
        }
        else {
            return Promise.resolve(ret !== false);
        }
    }
    UIInternal.fireCallbackEvent = fireCallbackEvent;
    function invokeLifecycle(instance, name, model) {
        if (instance && typeof instance[name] === "function") {
            var result = instance[name](model);
            if (result instanceof Promise) {
                return result;
            }
            if (result !== null && result !== undefined) {
                return Promise.resolve(result);
            }
            return Promise.resolve(true);
        }
        return Promise.resolve(true);
    }
    UIInternal.invokeLifecycle = invokeLifecycle;
    function compileTemplate(tpl, viewModel, bindingContext) {
        if (viewModel === void 0) { viewModel = {}; }
        if (bindingContext === void 0) { bindingContext = {}; }
        var viewFactory = Container.instance
            .get(ViewCompiler)
            .compile(tpl, Container.instance.get(ViewResources));
        var view = viewFactory.create(Container.instance);
        view.bind(viewModel, bindingContext);
        return view;
    }
    UIInternal.compileTemplate = compileTemplate;
    function getValue(item, propertyPath) {
        if (!item) {
            return null;
        }
        var sepIndex = propertyPath.indexOf('.');
        if (sepIndex > -1) {
            var leftPart = propertyPath.substring(0, sepIndex);
            var rightPart = propertyPath.substring(sepIndex + 1);
            return this.getValue(item[leftPart], rightPart);
        }
        else {
            return item[propertyPath];
        }
    }
    UIInternal.getValue = getValue;
    function nextTick(fn) {
        setTimeout(function () { return fn(); }, 150);
    }
    UIInternal.nextTick = nextTick;
    function debounce(func, wait) {
        var timeoutID;
        if (!Number.isInteger(wait)) {
            console.warn("Called debounce without a valid number");
            wait = 300;
        }
        return function () {
            var args = [];
            for (var _i = 0; _i < arguments.length; _i++) {
                args[_i] = arguments[_i];
            }
            clearTimeout(timeoutID);
            var context = this;
            timeoutID = window.setTimeout(function () {
                func.apply(context, args);
            }, wait);
        };
    }
    UIInternal.debounce = debounce;
    function autoDetectAndSetLocale(i18n) {
        return __awaiter(this, void 0, void 0, function () {
            var _a;
            return __generator(this, function (_b) {
                switch (_b.label) {
                    case 0:
                        _b.trys.push([0, 2, , 4]);
                        return [4, i18n.setLocale(navigator.language.replace(/-.*$/, ''))];
                    case 1: return [2, _b.sent()];
                    case 2:
                        _a = _b.sent();
                        return [4, i18n.setLocale(i18n.i18next.options.fallbackLng[0])];
                    case 3: return [2, _b.sent()];
                    case 4: return [2];
                }
            });
        });
    }
    UIInternal.autoDetectAndSetLocale = autoDetectAndSetLocale;
})(UIInternal || (UIInternal = {}));

//# sourceMappingURL=ui-internal.js.map
