{"version":3,"sources":["jsdelivr-header.js","/npm/leaf-ts@2.20.24/dist/leaf.js"],"names":[],"mappings":"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","file":"/npm/leaf-ts@2.20.24/dist/leaf.js","sourceRoot":"","sourcesContent":["/**\n * Minified by jsDelivr using Terser v5.39.0.\n * Original file: /npm/leaf-ts@2.20.24/dist/leaf.js\n *\n * Do NOT use SRI with dynamically generated files! More information: https://www.jsdelivr.com/using-sri-with-dynamic-files\n */\n","var __decorate = (this && this.__decorate) || function (decorators, target, key, desc) {\n    var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;\n    if (typeof Reflect === \"object\" && typeof Reflect.decorate === \"function\") r = Reflect.decorate(decorators, target, key, desc);\n    else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;\n    return c > 3 && r && Object.defineProperty(target, key, r), r;\n};\nvar __metadata = (this && this.__metadata) || function (k, v) {\n    if (typeof Reflect === \"object\" && typeof Reflect.metadata === \"function\") return Reflect.metadata(k, v);\n};\nvar __extends = (this && this.__extends) || (function () {\n    var extendStatics = function (d, b) {\n        extendStatics = Object.setPrototypeOf ||\n            ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||\n            function (d, b) { for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p]; };\n        return extendStatics(d, b);\n    };\n    return function (d, b) {\n        extendStatics(d, b);\n        function __() { this.constructor = d; }\n        d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\n    };\n})();\nvar __assign = (this && this.__assign) || function () {\n    __assign = Object.assign || function(t) {\n        for (var s, i = 1, n = arguments.length; i < n; i++) {\n            s = arguments[i];\n            for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p))\n                t[p] = s[p];\n        }\n        return t;\n    };\n    return __assign.apply(this, arguments);\n};\nvar Leaf;\n(function (Leaf) {\n    var Logger = /** @class */ (function () {\n        function Logger() {\n        }\n        Logger.debug = function () {\n            var args = [];\n            for (var _i = 0; _i < arguments.length; _i++) {\n                args[_i] = arguments[_i];\n            }\n            console.debug.apply(console, args);\n        };\n        Logger.error = function () {\n            var args = [];\n            for (var _i = 0; _i < arguments.length; _i++) {\n                args[_i] = arguments[_i];\n            }\n            console.error.apply(console, args);\n        };\n        Logger.log = function () {\n            var args = [];\n            for (var _i = 0; _i < arguments.length; _i++) {\n                args[_i] = arguments[_i];\n            }\n            console.log.apply(console, args);\n        };\n        Logger.line = function (str) {\n            var stdout = process.stdout;\n            stdout.clearLine();\n            stdout.cursorTo(0);\n            stdout.write(str);\n        };\n        Logger.lineEnd = function () {\n            var stdout = process.stdout;\n            stdout.write(\"\\n\");\n        };\n        Logger.trace = function () {\n            console.trace();\n        };\n        return Logger;\n    }());\n    Leaf.Logger = Logger;\n})(Leaf || (Leaf = {}));\nvar Leaf;\n(function (Leaf) {\n    var Property = /** @class */ (function () {\n        function Property() {\n        }\n        Property.define = function (who, name, def) {\n            var cache = {};\n            if (who[name])\n                cache.value = who[name];\n            if (def.value)\n                cache.value = def.value;\n            var getFn = function (cache) {\n                return cache.value;\n            };\n            var setFn = function (value, cache) {\n                cache.value = value;\n                return cache.value;\n            };\n            var getIt = def.get || getFn;\n            var setIt = def.set || setFn;\n            Object.defineProperty(who, name, {\n                get: function () {\n                    return getIt(cache);\n                },\n                set: function (v) {\n                    return setIt(v, cache);\n                }\n            });\n            return def.value || null;\n        };\n        // For IE using with will cause problem\n        Property.withProps = function (who) {\n            return new WithProperty(who);\n        };\n        return Property;\n    }());\n    Leaf.Property = Property;\n    var WithProperty = /** @class */ (function () {\n        function WithProperty(who) {\n            this.who = who;\n        }\n        WithProperty.prototype.define = function (name, def) {\n            Property.define(this.who, name, def);\n            return this;\n        };\n        return WithProperty;\n    }());\n    Leaf.WithProperty = WithProperty;\n})(Leaf || (Leaf = {}));\nvar Leaf;\n(function (Leaf) {\n    var Serializer = /** @class */ (function () {\n        function Serializer() {\n            this.typeKey = \"_$t\";\n            this.dataKey = \"_$d\";\n            this.typeMap = {\n                \"date\": {\n                    Cons: Date,\n                    fromType: function (date) {\n                        return date.toString();\n                    },\n                    toType: function (str) {\n                        return new Date(str);\n                    }\n                },\n                \"reg\": {\n                    Cons: RegExp,\n                    fromType: function (reg) {\n                        return {\n                            s: reg.source,\n                            g: reg.global,\n                            i: reg.ignoreCase,\n                            m: reg.multiline\n                        };\n                    },\n                    toType: function (data) {\n                        var mod = \"\" + (data.g && \"g\") + (data.m && \"m\") + (data.i && \"i\");\n                        return new RegExp(data.s, mod);\n                    }\n                },\n                \"error\": {\n                    Cons: Error,\n                    fromType: function (error) {\n                        var result = {};\n                        for (var key in error) {\n                            if (typeof error[key] !== \"function\") {\n                                if (error.hasOwnProperty(key)) {\n                                    result[key] = error[key];\n                                }\n                            }\n                        }\n                        result[\"name\"] = error.name;\n                        result[\"message\"] = error.message;\n                        result[\"stack\"] = error.stack;\n                        return result;\n                    },\n                    toType: function (data) {\n                        if (!data) {\n                            return data;\n                        }\n                        var error = new Error(data.message);\n                        for (var prop in data) {\n                            error[prop] = data[prop];\n                        }\n                        return error;\n                    }\n                }\n            };\n        }\n        Serializer.prototype.tokenize = function (data) {\n            var _a;\n            var _this = this;\n            if (!data)\n                return data;\n            if (Array.isArray(data)) {\n                return data.map(function (item) { return _this.tokenize(item); });\n            }\n            if (typeof data !== \"object\")\n                return data;\n            for (var type in this.typeMap) {\n                var info = this.typeMap[type];\n                if (data instanceof info.Cons) {\n                    return _a = {},\n                        _a[this.typeKey] = type,\n                        _a[this.dataKey] = info.fromType(data),\n                        _a;\n                }\n            }\n            var result = {};\n            for (var k in data) {\n                result[k] = this.tokenize(data[k]);\n            }\n            return result;\n        };\n        Serializer.prototype.detokenize = function (v) {\n            var _this = this;\n            if (!v)\n                return v;\n            if (Array.isArray(v)) {\n                return v.map(function (item) { return _this.detokenize(item); });\n            }\n            if (typeof v !== \"object\")\n                return v;\n            if (!v[this.typeKey]) {\n                var result = {};\n                for (var k in v) {\n                    result[k] = this.detokenize(v[k]);\n                }\n                return result;\n            }\n            var info = this.typeMap[v[this.typeKey]];\n            if (!info)\n                return v;\n            return info.toType(v[this.dataKey]);\n        };\n        Serializer.prototype.serialize = function (data) {\n            return JSON.stringify(this.tokenize(data));\n        };\n        Serializer.prototype.deserialize = function (data) {\n            return this.detokenize(JSON.parse(data));\n        };\n        Serializer.prototype.register = function (type, config) {\n            this.typeMap[type] = config;\n        };\n        Serializer.getDefault = function () {\n            if (!this.defaultSerializer)\n                this.defaultSerializer = new Serializer();\n            return this.defaultSerializer;\n        };\n        return Serializer;\n    }());\n    Leaf.Serializer = Serializer;\n})(Leaf || (Leaf = {}));\n/// <reference path=\"leaf.ts\" />\nvar Leaf;\n(function (Leaf) {\n    var Util = /** @class */ (function () {\n        function Util() {\n        }\n        Util.clone = function (obj) {\n            if (!obj)\n                return obj;\n            if (Array.isArray(obj)) {\n                return obj.map(function (item) {\n                    return Util.clone(item);\n                });\n            }\n            if (obj instanceof Date) {\n                return obj;\n            }\n            if (obj instanceof RegExp) {\n                var i = obj.ignoreCase && \"i\" || \"\";\n                var g = obj.global && \"g\" || \"\";\n                var m = obj.multiline && \"m\" || \"\";\n                return new RegExp(obj.source, i + g + m);\n            }\n            if (obj\n                instanceof String) {\n                return new String(obj);\n            }\n            if (typeof obj === \"function\") {\n                return obj;\n            }\n            if (typeof obj === \"object\") {\n                var result = {};\n                for (var prop in obj) {\n                    result[prop] = this.clone(obj[prop]);\n                }\n                return result;\n            }\n            // for RegExp/Function we left it as is.\n            return obj;\n        };\n        Util.capitalize = function (str) {\n            if (!str)\n                return str;\n            return str.charAt(0).toUpperCase() + str.slice(1);\n        };\n        Util.uncapitalize = function (str) {\n            if (!str)\n                return str;\n            return str.charAt(0).toLowerCase() + str.slice(1);\n        };\n        Util.camelToSlug = function (str) {\n            if (!str)\n                return str;\n            return str.replace(/[a-z][A-Z]/g, function (match) {\n                return match[0] + \"-\" + match[1].toLowerCase();\n            }).toLowerCase();\n        };\n        Util.slugToCamel = function (str) {\n            if (!str)\n                return str;\n            return str.replace(/-[a-z]/ig, function (match) {\n                return match.slice(1).toUpperCase();\n            });\n        };\n        Util.deepEqual = function (a, b) {\n            if (a === b)\n                return true;\n            if (typeof a !== typeof b)\n                return false;\n            if (typeof a !== \"object\")\n                return false;\n            if (Array.isArray(a)) {\n                if (a.length != b.length)\n                    return false;\n                for (var i = 0; i < a.length; i++) {\n                    if (!this.deepEqual(a[i], b[i]))\n                        return false;\n                }\n                return true;\n            }\n            else {\n                if (!a || !b) {\n                    return false;\n                }\n                var pas = Object.getOwnPropertyNames(a);\n                var pbs = Object.getOwnPropertyNames(b);\n                if (pas.length != pbs.length) {\n                    return false;\n                }\n                var diff = this.arrayDiff(pas, pbs);\n                if (diff.left.length !== 0 || diff.right.length !== 0)\n                    return false;\n                for (var _i = 0, _a = diff.intersect; _i < _a.length; _i++) {\n                    var key = _a[_i];\n                    if (!this.deepEqual(a[key], b[key])) {\n                        return false;\n                    }\n                }\n                return true;\n            }\n        };\n        Util.dictDiff = function (d1, d2, identical) {\n            var left = Object.keys(d1).map(function (name) { return { name: name, value: d1[name] }; });\n            var right = Object.keys(d2).map(function (name) { return { name: name, value: d2[name] }; });\n            if (!identical) {\n                identical = function (a, b) {\n                    return a === b;\n                };\n            }\n            var result = this.arrayDiff(left, right, function (a, b) {\n                return identical(a.value, b.value);\n            });\n            return {\n                left: result.left.map(function (item) { return item.name; }),\n                right: result.right.map(function (item) { return item.name; }),\n                interact: result.interact.map(function (item) { return item.name; }),\n                intersect: result.intersect.map(function (item) { return item.name; })\n            };\n        };\n        Util.arrayDiffTyped = function (arr1, arr2, identical) {\n            if (!identical) {\n                identical = function (a, b) {\n                    return a === b;\n                };\n            }\n            arr1 = arr1.slice();\n            arr2 = arr2.slice();\n            var leftShare = [];\n            var rightShare = [];\n            for (var i = 0; i < arr1.length; i++) {\n                if (!arr1[i])\n                    break;\n                for (var j = 0; j < arr2.length; j++) {\n                    if (identical(arr1[i], arr2[j])) {\n                        leftShare.push(arr1[i]);\n                        rightShare.push(arr2[j]);\n                        arr1.splice(i, 1);\n                        arr2.splice(j, 1);\n                        i--;\n                        break;\n                    }\n                }\n            }\n            return {\n                left: arr1,\n                right: arr2,\n                leftShare: leftShare,\n                rightShare: rightShare\n            };\n        };\n        Util.arrayDiff = function (arr1, arr2, identical) {\n            if (arr1 === void 0) { arr1 = []; }\n            if (arr2 === void 0) { arr2 = []; }\n            if (!identical) {\n                identical = function (a, b) {\n                    return a === b;\n                };\n            }\n            arr1 = arr1.slice();\n            arr2 = arr2.slice();\n            var intersect = [];\n            for (var i = 0; i < arr1.length; i++) {\n                if (!arr1[i])\n                    break;\n                for (var j = 0; j < arr2.length; j++) {\n                    if (identical(arr2[j], arr1[i])) {\n                        intersect.push(arr1[i]);\n                        arr1.splice(i, 1);\n                        arr2.splice(j, 1);\n                        i--;\n                        break;\n                    }\n                }\n            }\n            return {\n                left: arr1,\n                right: arr2,\n                interact: intersect,\n                intersect: intersect,\n            };\n        };\n        Util.buildOption = function (defaultOption, option) {\n            if (option === void 0) { option = {}; }\n            if (defaultOption == null || typeof defaultOption == \"undefined\") {\n                return option;\n            }\n            if (typeof defaultOption !== \"undefined\" && defaultOption !== null && (typeof option === \"undefined\" || option === null)) {\n                return defaultOption;\n            }\n            var result = {};\n            if (Array.isArray(option)) {\n                return option;\n            }\n            if (Array.isArray(defaultOption)) {\n                if (!option) {\n                    return defaultOption.slice();\n                }\n                else {\n                    return option;\n                }\n            }\n            if (typeof option === \"object\") {\n                for (var name_1 in defaultOption) {\n                    if (typeof option[name_1] !== \"undefined\") {\n                        result[name_1] = this.buildOption(defaultOption[name_1], option[name_1]);\n                    }\n                    else {\n                        result[name_1] = defaultOption[name_1];\n                    }\n                }\n                return result;\n            }\n            return option;\n        };\n        Util.getBrowserInfo = function () {\n            var unknown = {\n                name: \"None\",\n                version: \"None\",\n                mobile: false\n            };\n            if (typeof navigator === \"undefined\") {\n                return unknown;\n            }\n            var N = navigator.appName;\n            var ua = navigator.userAgent;\n            if (!ua)\n                return unknown;\n            var M = ua.match(/(opera|chrome|safari|firefox|msie)\\/?\\s*(\\.?\\d+(\\.\\d+)*)/i);\n            var tem = ua.match(/version\\/([\\.\\d]+)/i);\n            if (M && tem != null) {\n                M[2] = tem[1];\n            }\n            M = M ? [M[1], M[2]] : [N, navigator.appVersion, '-?'];\n            return { name: M[0], version: M[1], mobile: Util.isMobile() };\n        };\n        Util.isMobile = function () {\n            if (navigator && navigator.userAgent) {\n                return (navigator.userAgent.match(/Android/i) || navigator.userAgent.match(/webOS/i) || navigator.userAgent.match(/iPhone/i) || navigator.userAgent.match(/iPad/i) || navigator.userAgent.match(/iPod/i) || navigator.userAgent.match(/BlackBerry/i) || navigator.userAgent.match(/Windows Phone/i)) && true || false;\n            }\n            else {\n                return false;\n            }\n        };\n        Util.isEmptyValue = function (v) {\n            if (typeof v === \"undefined\" || v === null) {\n                return true;\n            }\n            return false;\n        };\n        Util.getObjectValue = function (obj, path) {\n            var parent = obj;\n            var parts = path.split(\".\");\n            while (!Util.isEmptyValue(parent) && parts.length > 0) {\n                var part = parts.shift();\n                parent = parent[part];\n            }\n            return parent;\n        };\n        Util.reconstructObjectMap = function (map) {\n            var result = {};\n            Object.keys(map).forEach(function (key) {\n                var value = map[key];\n                var routes = key.split(\".\");\n                var node = result;\n                var ck = null;\n                while (ck = routes.shift()) {\n                    if (routes.length == 0) {\n                        node[ck] = value;\n                        break;\n                    }\n                    if (typeof node[ck] == \"undefined\" || node[ck] === null) {\n                        node[ck] = {};\n                    }\n                    node = node[ck];\n                }\n            });\n            return result;\n        };\n        return Util;\n    }());\n    Leaf.Util = Util;\n    Leaf.Property.define(Util, \"browser\", {\n        get: function (cache) {\n            if (!cache.value) {\n                cache.value = Util.getBrowserInfo();\n            }\n            return cache.value;\n        }\n    });\n    Leaf.SharedCallbacks = {\n        create: function () {\n            var fn = function () {\n                var args = [];\n                for (var _i = 0; _i < arguments.length; _i++) {\n                    args[_i] = arguments[_i];\n                }\n                var cbs = fn.callbacks.slice(0);\n                fn.clear();\n                cbs.forEach(function (callback) {\n                    callback.apply(void 0, args);\n                });\n            };\n            fn.callbacks = [];\n            fn.push = function (callback) {\n                fn.callbacks.push(callback);\n                fn.count = fn.callbacks.length;\n            };\n            fn.clear = function () {\n                fn.callbacks.length = 0;\n                fn.count = 0;\n            };\n            return fn;\n        },\n    };\n})(Leaf || (Leaf = {}));\nvar Leaf;\n(function (Leaf) {\n    var Condition;\n    (function (Condition) {\n        function empty() {\n            return {\n                ors: [{\n                        ands: [],\n                        tag: \"matches\"\n                    }],\n                tag: \"criteria\",\n            };\n        }\n        Condition.empty = empty;\n        function never() {\n            return {\n                ors: [{\n                        ands: [],\n                        tag: \"matches\"\n                    }],\n                tag: \"criteriaTemplate\",\n            };\n        }\n        Condition.never = never;\n        function realize(template, data) {\n            if (!template)\n                return null;\n            return Condition.build(template, data);\n        }\n        Condition.realize = realize;\n        function and() {\n            var criterias = [];\n            for (var _i = 0; _i < arguments.length; _i++) {\n                criterias[_i] = arguments[_i];\n            }\n            var tag = \"criteria\";\n            // All null\n            var allNone = true;\n            for (var _a = 0, criterias_1 = criterias; _a < criterias_1.length; _a++) {\n                var item = criterias_1[_a];\n                if (item) {\n                    allNone = false;\n                }\n            }\n            if (allNone)\n                return null;\n            criterias = criterias.filter(function (item) { return !!item; });\n            if (criterias.length == 0)\n                return Condition.empty();\n            for (var _b = 0, criterias_2 = criterias; _b < criterias_2.length; _b++) {\n                var cri = criterias_2[_b];\n                if (cri.tag == \"criteriaTemplate\") {\n                    tag = \"criteriaTemplate\";\n                    break;\n                }\n            }\n            if (criterias.length == 1)\n                return criterias[0];\n            var result = {\n                ors: [],\n                tag: tag,\n            };\n            var first = criterias.shift();\n            var second = criterias.shift();\n            for (var _c = 0, _d = first.ors; _c < _d.length; _c++) {\n                var firstOr = _d[_c];\n                for (var _e = 0, _f = second.ors; _e < _f.length; _e++) {\n                    var secondOr = _f[_e];\n                    result.ors.push({\n                        ands: firstOr.ands.concat(secondOr.ands)\n                    });\n                }\n            }\n            return and.apply(void 0, [result].concat(criterias));\n        }\n        Condition.and = and;\n        function criteriaToTemplateByPath(cri) {\n            var template = Leaf.Util.clone(cri);\n            template.tag = \"criteriaTemplate\";\n            for (var _i = 0, _a = template.ors; _i < _a.length; _i++) {\n                var ands = _a[_i];\n                for (var _b = 0, _c = ands.ands; _b < _c.length; _b++) {\n                    var match = _c[_b];\n                    if (!match.path) {\n                        throw new Error(\"Fail to convert criteria to template with match.path of null\");\n                    }\n                    delete match.value;\n                    match.reference = match.path;\n                }\n            }\n            return template;\n        }\n        Condition.criteriaToTemplateByPath = criteriaToTemplateByPath;\n        function criteriaToValue(cri) {\n            var obj = {};\n            for (var _i = 0, _a = cri.ors; _i < _a.length; _i++) {\n                var ands = _a[_i];\n                for (var _b = 0, _c = ands.ands; _b < _c.length; _b++) {\n                    var match = _c[_b];\n                    if (!match.path) {\n                        return match.value;\n                    }\n                    obj[match.path] = match.value;\n                }\n            }\n            return Leaf.Util.reconstructObjectMap(obj);\n        }\n        Condition.criteriaToValue = criteriaToValue;\n        function or(criterias) {\n            var _a;\n            var result = {\n                ors: [],\n                tag: \"criteria\"\n            };\n            if (criterias.length == 0) {\n                return result;\n            }\n            criterias = criterias.filter(function (item) { return !!item; });\n            if (criterias.length == 0)\n                return null;\n            for (var _i = 0, criterias_3 = criterias; _i < criterias_3.length; _i++) {\n                var item = criterias_3[_i];\n                (_a = result.ors).push.apply(_a, item.ors);\n            }\n            return result;\n        }\n        Condition.or = or;\n        var numericType = [\"lt\", \"gt\", \"lte\", \"gte\"];\n        function build(cri, obj) {\n            if (obj === void 0) { obj = {}; }\n            var criteria = Leaf.Util.clone(cri);\n            criteria.ors = criteria.ors.filter(function (conds) {\n                conds.ands.map(function (cond) {\n                    if (cond.reference) {\n                        var value = Leaf.Util.getObjectValue(obj, cond.reference);\n                        if (!Leaf.Util.isEmptyValue(value)) {\n                            if (numericType.indexOf(cond.type) >= 0 && typeof value !== \"number\") {\n                                throw new Error(\"Invalid condition: \" + cond.reference + \" must be a number\");\n                            }\n                            else if (cond.type == \"reg\" && !(value instanceof RegExp)) {\n                                throw new Error(\"Invalid condition: \" + cond.reference + \" must be a RegExp\");\n                            }\n                            else if (cond.type == \"in\" && !(Array.isArray(value))) {\n                                value = [value];\n                            }\n                        }\n                        if (!Leaf.Util.isEmptyValue(value)) {\n                            cond.value = value;\n                        }\n                        if (cond.type == \"eq\" && Array.isArray(cond.value)) {\n                            return {\n                                type: \"in\",\n                                value: cond.value,\n                                optional: cond.optional\n                            };\n                        }\n                    }\n                    if (Leaf.Util.isEmptyValue(cond.value)) {\n                        if (cond.optional) {\n                            return null;\n                        }\n                        console.error(\"Invalid condition\", cond);\n                        throw new Error(\"Critical condition \" + cond.reference + \" of type $\" + cond.type + \" missing value\");\n                    }\n                    return cond;\n                }).filter(function (item) { return !!item; });\n                if (conds.ands.length == 0)\n                    return false;\n                return true;\n            });\n            criteria.tag = \"criteria\";\n            return criteria;\n        }\n        Condition.build = build;\n        function test(condition, data) {\n            if (!condition)\n                return true;\n            if (condition.tag == \"criteria\")\n                return testCriteria(condition, data);\n            if (condition.tag == \"matches\")\n                return testMatches(condition, data);\n            if (condition.tag == \"match\")\n                return testMatch(condition, data);\n            if (condition[\"tag\"] == \"criteriaTemplate\") {\n                throw new Error(\"Can't test criteria template\");\n            }\n            return false;\n        }\n        Condition.test = test;\n        function testCriteria(cri, data) {\n            if (!cri)\n                return true;\n            for (var _i = 0, _a = cri.ors; _i < _a.length; _i++) {\n                var item = _a[_i];\n                if (testMatches(item, data))\n                    return true;\n            }\n            return false;\n        }\n        Condition.testCriteria = testCriteria;\n        function testMatches(matches, data) {\n            for (var _i = 0, _a = matches.ands; _i < _a.length; _i++) {\n                var item = _a[_i];\n                if (!testMatch(item, data)) {\n                    return false;\n                }\n            }\n            return true;\n        }\n        Condition.testMatches = testMatches;\n        function testMatch(match, data) {\n            var value;\n            if (match.path) {\n                value = Leaf.Util.getObjectValue(data, match.path || null);\n            }\n            else {\n                value = data;\n            }\n            if (match.type == \"eq\") {\n                return value === match.value;\n            }\n            else if (match.type == \"lte\") {\n                return value <= match.value;\n            }\n            else if (match.type == \"gte\") {\n                return value >= match.value;\n            }\n            else if (match.type == \"lt\") {\n                return value < match.value;\n            }\n            else if (match.type == \"gt\") {\n                return value > match.value;\n            }\n            else if (match.type == \"in\") {\n                return match.value.indexOf(value) >= 0;\n            }\n            else if (match.type == \"reg\") {\n                return match.value.test(value);\n            }\n            else if (match.type == \"wildcard\") {\n                throw new Error(\"Wildcard not supported\");\n            }\n            return false;\n        }\n        Condition.testMatch = testMatch;\n        function subInplace(criteria, path) {\n            for (var _i = 0, _a = criteria.ors; _i < _a.length; _i++) {\n                var ors = _a[_i];\n                for (var _b = 0, _c = ors.ands; _b < _c.length; _b++) {\n                    var match = _c[_b];\n                    if (!match.path)\n                        match.path = path;\n                    else\n                        match.path = path + \".\" + match.path;\n                }\n            }\n        }\n        Condition.subInplace = subInplace;\n    })(Condition = Leaf.Condition || (Leaf.Condition = {}));\n    function prepare(target, key, descriptor) {\n        var fn = descriptor.value;\n        descriptor.value = function () {\n            var obj = this;\n            if (obj.isSealed)\n                throw new Error(\"Can't modify criteria after sealed\");\n            obj.ensureCurrentConditions();\n            var result = fn.apply(this, arguments);\n            obj.currentOptional = false;\n            return result;\n        };\n    }\n    var CriteriaBuilder = /** @class */ (function () {\n        function CriteriaBuilder() {\n            this.tb = new CriteriaTemplateBuilder;\n        }\n        CriteriaBuilder.prototype.sub = function (path) {\n            this.tb.seal();\n            Condition.subInplace(this.tb.criteria, path);\n        };\n        CriteriaBuilder.prototype.path = function (path) {\n            this.tb.path(path);\n            return this;\n        };\n        CriteriaBuilder.prototype.lt = function (value) {\n            this.tb.lt(null, value);\n            return this;\n        };\n        CriteriaBuilder.prototype.gt = function (value) {\n            this.tb.gt(null, value);\n            return this;\n        };\n        CriteriaBuilder.prototype.lte = function (value) {\n            this.tb.lte(null, value);\n            return this;\n        };\n        CriteriaBuilder.prototype.gte = function (value) {\n            this.tb.gte(null, value);\n            return this;\n        };\n        CriteriaBuilder.prototype.eq = function (value) {\n            this.tb.eq(null, value);\n            return this;\n        };\n        CriteriaBuilder.prototype.in = function (value) {\n            this.tb.in(null, value);\n            return this;\n        };\n        CriteriaBuilder.prototype.reg = function (value) {\n            this.tb.reg(null, value);\n            return this;\n        };\n        CriteriaBuilder.prototype.build = function () {\n            this.tb.seal();\n            var criteria = Leaf.Util.clone(this.tb.criteria);\n            criteria.tag = \"criteria\";\n            return criteria;\n        };\n        return CriteriaBuilder;\n    }());\n    Leaf.CriteriaBuilder = CriteriaBuilder;\n    var CriteriaTemplateBuilder = /** @class */ (function () {\n        function CriteriaTemplateBuilder() {\n            this.currentPath = null;\n            this.currentConditions = null;\n            this.criteria = {\n                ors: [],\n                tag: \"criteriaTemplate\"\n            };\n            this.currentOptional = false;\n            this.isSealed = false;\n            this.numericType = [\"lt\", \"gt\", \"lte\", \"gte\"];\n        }\n        CriteriaTemplateBuilder.prototype.optional = function () {\n            this.currentOptional = true;\n            return this;\n        };\n        CriteriaTemplateBuilder.prototype.getTemplate = function () {\n            this.seal();\n            return this.criteria;\n        };\n        CriteriaTemplateBuilder.prototype.ensureCurrentConditions = function () {\n            if (!this.currentConditions) {\n                this.currentConditions = this.createEmptyConditions();\n            }\n        };\n        CriteriaTemplateBuilder.prototype.createEmptyConditions = function () {\n            return {\n                ands: []\n            };\n        };\n        CriteriaTemplateBuilder.prototype.isEmptyMatches = function (conditions) {\n            return !conditions || !conditions.ands || conditions.ands.length == 0;\n        };\n        CriteriaTemplateBuilder.prototype.path = function (path) {\n            this.currentPath = path;\n            return this;\n        };\n        CriteriaTemplateBuilder.prototype.gt = function (reference, value) {\n            this.currentConditions.ands.push({\n                path: this.currentPath,\n                type: \"gt\",\n                reference: reference,\n                value: value,\n                optional: this.currentOptional\n            });\n            return this;\n        };\n        CriteriaTemplateBuilder.prototype.lt = function (reference, value) {\n            this.currentConditions.ands.push({\n                path: this.currentPath,\n                type: \"lt\",\n                reference: reference,\n                value: value,\n                optional: this.currentOptional\n            });\n            return this;\n        };\n        CriteriaTemplateBuilder.prototype.lte = function (reference, value) {\n            this.currentConditions.ands.push({\n                path: this.currentPath,\n                type: \"lte\",\n                reference: reference,\n                value: value,\n                optional: this.currentOptional\n            });\n            return this;\n        };\n        CriteriaTemplateBuilder.prototype.gte = function (reference, value) {\n            this.currentConditions.ands.push({\n                path: this.currentPath,\n                type: \"gte\",\n                reference: reference,\n                value: value,\n                optional: this.currentOptional\n            });\n            return this;\n        };\n        CriteriaTemplateBuilder.prototype.eq = function (reference, value) {\n            this.currentConditions.ands.push({\n                path: this.currentPath,\n                type: \"eq\",\n                reference: reference,\n                value: value,\n                optional: this.currentOptional\n            });\n            return this;\n        };\n        CriteriaTemplateBuilder.prototype.in = function (reference, value) {\n            this.currentConditions.ands.push({\n                path: this.currentPath,\n                type: \"in\",\n                reference: reference,\n                value: value,\n                optional: this.currentOptional\n            });\n            return this;\n        };\n        CriteriaTemplateBuilder.prototype.or = function () {\n            if (this.currentConditions)\n                this.criteria.ors.push(this.currentConditions);\n            this.currentConditions = null;\n        };\n        CriteriaTemplateBuilder.prototype.reg = function (reference, value) {\n            this.currentConditions.ands.push({\n                path: this.currentPath,\n                type: \"reg\",\n                reference: reference,\n                value: value,\n                optional: this.currentOptional\n            });\n            return this;\n        };\n        CriteriaTemplateBuilder.prototype.wildcard = function () {\n            throw new Error(\"Not implemented\");\n        };\n        CriteriaTemplateBuilder.prototype.seal = function () {\n            if (this.currentConditions)\n                this.criteria.ors.push(this.currentConditions);\n            this.currentConditions = null;\n            this.isSealed = true;\n            return this;\n        };\n        CriteriaTemplateBuilder.prototype.build = function (obj) {\n            var _this = this;\n            if (!this.isSealed) {\n                this.seal();\n            }\n            var criteria = Leaf.Util.clone(this.criteria);\n            if (!obj) {\n                return criteria;\n            }\n            for (var _i = 0, _a = criteria.ors; _i < _a.length; _i++) {\n                var conds = _a[_i];\n                conds.ands.filter(function (cond) {\n                    if (cond.reference) {\n                        var value = Leaf.Util.getObjectValue(obj, cond.reference);\n                        if (_this.numericType.indexOf(cond.type) >= 0 && typeof value !== \"number\") {\n                            throw new Error(\"Invalid condition: \" + cond.reference + \" must be a number\");\n                        }\n                        else if (cond.type == \"reg\" && !(value instanceof RegExp)) {\n                            throw new Error(\"Invalid condition: \" + cond.reference + \" must be a RegExp\");\n                        }\n                        cond.value = value || cond.value;\n                    }\n                    if (Leaf.Util.isEmptyValue(cond.value)) {\n                        if (cond.optional) {\n                            return false;\n                        }\n                        throw new Error(\"Critical condition \" + cond.reference + \" of type $\" + cond.type + \" missing value\");\n                    }\n                    return true;\n                });\n                for (var _b = 0, _c = conds.ands; _b < _c.length; _b++) {\n                    var cond = _c[_b];\n                }\n            }\n            criteria.tag = \"criteria\";\n            return criteria;\n        };\n        __decorate([\n            prepare,\n            __metadata(\"design:type\", Function),\n            __metadata(\"design:paramtypes\", [String, Number]),\n            __metadata(\"design:returntype\", void 0)\n        ], CriteriaTemplateBuilder.prototype, \"gt\", null);\n        __decorate([\n            prepare,\n            __metadata(\"design:type\", Function),\n            __metadata(\"design:paramtypes\", [String, Number]),\n            __metadata(\"design:returntype\", void 0)\n        ], CriteriaTemplateBuilder.prototype, \"lt\", null);\n        __decorate([\n            prepare,\n            __metadata(\"design:type\", Function),\n            __metadata(\"design:paramtypes\", [String, Number]),\n            __metadata(\"design:returntype\", void 0)\n        ], CriteriaTemplateBuilder.prototype, \"lte\", null);\n        __decorate([\n            prepare,\n            __metadata(\"design:type\", Function),\n            __metadata(\"design:paramtypes\", [String, Number]),\n            __metadata(\"design:returntype\", void 0)\n        ], CriteriaTemplateBuilder.prototype, \"gte\", null);\n        __decorate([\n            prepare,\n            __metadata(\"design:type\", Function),\n            __metadata(\"design:paramtypes\", [String, Object]),\n            __metadata(\"design:returntype\", void 0)\n        ], CriteriaTemplateBuilder.prototype, \"eq\", null);\n        __decorate([\n            prepare,\n            __metadata(\"design:type\", Function),\n            __metadata(\"design:paramtypes\", [Object, Array]),\n            __metadata(\"design:returntype\", void 0)\n        ], CriteriaTemplateBuilder.prototype, \"in\", null);\n        __decorate([\n            prepare,\n            __metadata(\"design:type\", Function),\n            __metadata(\"design:paramtypes\", [String, RegExp]),\n            __metadata(\"design:returntype\", void 0)\n        ], CriteriaTemplateBuilder.prototype, \"reg\", null);\n        __decorate([\n            prepare,\n            __metadata(\"design:type\", Function),\n            __metadata(\"design:paramtypes\", []),\n            __metadata(\"design:returntype\", void 0)\n        ], CriteriaTemplateBuilder.prototype, \"wildcard\", null);\n        return CriteriaTemplateBuilder;\n    }());\n    Leaf.CriteriaTemplateBuilder = CriteriaTemplateBuilder;\n})(Leaf || (Leaf = {}));\n/// <reference path=\"leaf.ts\"/>\nvar Leaf;\n(function (Leaf) {\n    var reg = /{{([a-zA-Z0-9]+)(:[^}]*)?}}/g;\n    function renderString(str, actions) {\n        reg.lastIndex = 0;\n        return str.replace(reg, function (match, name, content) {\n            if (content) {\n                content = content.slice(1) || null;\n            }\n            if (typeof actions[name] === \"function\") {\n                var fn = actions[name];\n                return fn[name](content);\n            }\n            else if (typeof actions[name] === \"string\" || typeof actions[name] === \"number\") {\n                return actions[name].toString();\n            }\n            else {\n                return match;\n            }\n        });\n    }\n    Leaf.renderString = renderString;\n    function render(obj, actions) {\n        if (typeof obj === \"string\") {\n            return renderString(obj, actions);\n        }\n        else if (obj instanceof String) {\n            return renderString(obj.toString(), actions);\n        }\n        else if (!obj) {\n            return obj;\n        }\n        else if (Array.isArray(obj)) {\n            return obj.map(function (item) {\n                return render(item, actions);\n            });\n        }\n        else if (obj instanceof Date) {\n            return obj;\n        }\n        else if (typeof obj === \"object\") {\n            var result = {};\n            for (var key in obj) {\n                var value = render(obj[key], actions);\n                result[key] = value;\n            }\n            return result;\n        }\n        return obj;\n    }\n    Leaf.render = render;\n})(Leaf || (Leaf = {}));\n/// <reference path=\"leaf.ts\" />\nvar Leaf;\n(function (Leaf) {\n    var EventEmitter = /** @class */ (function () {\n        function EventEmitter() {\n            this.addListener = this.addEventListener;\n            this.off = this.removeEventListener;\n            this.events = {};\n        }\n        EventEmitter.prototype.addEventListener = function (event, handler) {\n            this.on(event, handler);\n            return this;\n        };\n        EventEmitter.prototype.removeAllListeners = function () {\n            this.removeEventListener();\n        };\n        EventEmitter.prototype.on = function (event, handler) {\n            var ehs = this.getOrCreateEventHandlers(event);\n            ehs.push({\n                once: false,\n                handler: handler\n            });\n            return this;\n        };\n        EventEmitter.prototype.once = function (event, handler) {\n            var ehs = this.getOrCreateEventHandlers(event);\n            ehs.push({\n                once: true,\n                handler: handler\n            });\n            return this;\n        };\n        EventEmitter.prototype.listenByOnce = function (who, event, handler) {\n            var ehs = this.getOrCreateEventHandlers(event);\n            ehs.push({\n                owner: who,\n                once: true,\n                handler: handler\n            });\n            return this;\n        };\n        EventEmitter.prototype.listenBy = function (who, event, handler) {\n            if (Array.isArray(event)) {\n                for (var _i = 0, event_1 = event; _i < event_1.length; _i++) {\n                    var e = event_1[_i];\n                    this.listenBy(who, e, handler);\n                }\n                return this;\n            }\n            var ehs = this.getOrCreateEventHandlers(event);\n            ehs.push({\n                owner: who,\n                once: false,\n                handler: handler\n            });\n            return this;\n        };\n        EventEmitter.prototype.stopListenBy = function (who, event, handler) {\n            if (event) {\n                var ehs = this.getOrCreateEventHandlers(event);\n                ehs = ehs.filter(function (eh) {\n                    if (eh.owner === who && (!handler || handler === eh.handler))\n                        return false;\n                    return true;\n                });\n                this.events[event] = ehs;\n            }\n            else {\n                if (!who) {\n                    return;\n                }\n                var _loop_1 = function (name_2) {\n                    var ehs = this_1.events[name_2];\n                    var change = false;\n                    ehs = ehs.filter(function (eh) {\n                        if (eh.owner === who && (!handler || handler === eh.handler)) {\n                            change = true;\n                            return false;\n                        }\n                        return true;\n                    });\n                    if (change) {\n                        this_1.events[name_2] = ehs;\n                    }\n                };\n                var this_1 = this;\n                for (var name_2 in this.events) {\n                    _loop_1(name_2);\n                }\n            }\n            return this;\n        };\n        EventEmitter.prototype.removeEventListener = function (event, handler) {\n            if (!event) {\n                this.events = {};\n            }\n            if (!handler) {\n                this.events[event] = [];\n                return this;\n            }\n            var ehs = this.getOrCreateEventHandlers(event);\n            var change = false;\n            ehs = ehs.filter(function (eh) {\n                if (!eh.owner && (!handler || handler === eh.handler)) {\n                    change = true;\n                    return false;\n                }\n                return true;\n            });\n            if (change) {\n                this.events[event] = ehs;\n            }\n            return this;\n        };\n        EventEmitter.prototype.emit = function (event) {\n            var values = [];\n            for (var _i = 1; _i < arguments.length; _i++) {\n                values[_i - 1] = arguments[_i];\n            }\n            var todo = [];\n            var ehs = this.getOrCreateEventHandlers(event);\n            var change = false;\n            ehs = ehs.filter(function (eh) {\n                if (eh.owner)\n                    todo.push(eh.handler.bind(eh.owner));\n                else\n                    todo.push(eh.handler);\n                if (eh.once) {\n                    change = true;\n                    return false;\n                }\n                return true;\n            });\n            if (change) {\n                this.events[event] = ehs;\n            }\n            todo.forEach(function (handler) {\n                handler.apply(void 0, values);\n            });\n            return this;\n        };\n        EventEmitter.prototype.getOrCreateEventHandlers = function (event) {\n            var ehs = this.events[event];\n            if (!ehs) {\n                ehs = this.events[event] = [];\n            }\n            return ehs;\n        };\n        return EventEmitter;\n    }());\n    Leaf.EventEmitter = EventEmitter;\n})(Leaf || (Leaf = {}));\n/// <reference path=\"leaf.ts\" />\nvar Leaf;\n(function (Leaf) {\n    var States = /** @class */ (function () {\n        function States() {\n            this.events = new Leaf.EventEmitter();\n            this.state = \"void\";\n            this.sole = 1;\n            this.soleEmitted = 1;\n            this.lastException = null;\n            this.rescues = [];\n            this.data = {};\n            this.feeds = {};\n            this.isDebugging = false;\n            this.clearHandler = null;\n            this.name = this.constructor && this.constructor[\"name\"] || null;\n            this.panicErrorRecursive = null;\n            this.panicError = null;\n            this.panicState = null;\n            this._logger = function () {\n                var infos = [];\n                for (var _i = 0; _i < arguments.length; _i++) {\n                    infos[_i] = arguments[_i];\n                }\n                var log = console.log;\n                log.apply(console, infos);\n            };\n            this._assertingStateSequence = null;\n            this._assertingStateCallback = null;\n            this._assertingStateIndex = 0;\n            this.reset();\n        }\n        States.prototype.reset = function () {\n            this.data = {};\n            this.feeds = {};\n            this.respawn();\n            this.events.emit(\"reset\");\n        };\n        States.prototype.errorOrGoto = function (err, state) {\n            var args = [];\n            for (var _i = 2; _i < arguments.length; _i++) {\n                args[_i - 2] = arguments[_i];\n            }\n            if (err) {\n                this.error(err);\n                return;\n            }\n            this.setState.apply(this, [state].concat(args));\n        };\n        States.prototype.setState = function (state) {\n            var args = [];\n            for (var _i = 1; _i < arguments.length; _i++) {\n                args[_i - 1] = arguments[_i];\n            }\n            try {\n                this._setState.apply(this, [state].concat(args));\n            }\n            catch (e) {\n                console.error(e);\n                if (state == \"panic\") {\n                    this.setState(\"recursivePanic\");\n                }\n                else {\n                    this.error(e);\n                }\n            }\n        };\n        States.prototype._stateFinish = function () {\n            try {\n                this.events.emit(\"state\", this.state);\n                this.events.emit(\"state/\" + this.state);\n            }\n            catch (e) {\n                console.error(e);\n            }\n            this.soleEmitted = this.sole;\n            this._updateStateAssertion(this.state);\n        };\n        States.prototype.clearConsumers = function () {\n            if (this.feeds) {\n                for (var prop in this.feeds) {\n                    var feed = this.feeds[prop];\n                    feed.feedListener = null;\n                }\n            }\n        };\n        States.prototype._setState = function (state) {\n            var args = [];\n            for (var _i = 1; _i < arguments.length; _i++) {\n                args[_i - 1] = arguments[_i];\n            }\n            if (this.state === \"panic\" && state !== \"void\") {\n                return;\n            }\n            // set state syncly from previous state\n            // so we emit the previous state here\n            // That is, all state/${state} is guaranteed to be emitted\n            // after the state finish and before the next state start.\n            this.clear();\n            if (this.soleEmitted < this.sole) {\n                this._stateFinish();\n            }\n            // clear all consumers\n            this.clearConsumers();\n            // new sole\n            this.sole += 1;\n            this.previousState = this.state;\n            this.state = state;\n            if (this.isDebugging) {\n                this.debugStateHandler();\n            }\n            var stateHandler = \"at\" + state[0].toUpperCase() + state.substring(1);\n            if (this[stateHandler]) {\n                var sole_1 = this.sole;\n                try {\n                    this[stateHandler].apply(this, [function () {\n                            return sole_1 !== this.sole;\n                        }.bind(this)].concat(args));\n                }\n                catch (e) {\n                    if (this.state == \"panic\") {\n                        console.error(e);\n                        console.error(\"Recursive panic\");\n                        this.panicErrorRecursive = e;\n                        this.setState(\"recursivePanic\");\n                        return;\n                    }\n                    this.error(e);\n                    return;\n                }\n                // didn't set state during the process, we can safely emit state here\n                if (sole_1 === this.sole) {\n                    this._stateFinish();\n                }\n            }\n            else if (state !== \"void\") {\n                this.error(new Error(\"InvalidState \" + state));\n            }\n        };\n        States.prototype.error = function (err) {\n            this.panicError = err;\n            this.panicState = this.state;\n            this._logger(\"Panic at \" + this.state, this.panicError);\n            if (this.panicError) {\n                this.setState(\"panic\");\n            }\n        };\n        States.prototype.atPanic = function () {\n            console.error(\"Panic at\", this.panicState, this.panicError);\n            this.events.emit(\"panic\", this.panicError, this.panicState);\n        };\n        States.prototype.recover = function (recoverState) {\n            var error = this.panicError;\n            var state = this.panicState;\n            this.respawn();\n            if (!recoverState) {\n                recoverState = (\"void\");\n            }\n            this.setState(recoverState);\n            return { error: error, state: state };\n        };\n        States.prototype.respawn = function () {\n            this.sole = this.sole || 1;\n            this.sole += 1;\n            this.soleEmitted = this.sole;\n            this.panicError = null;\n            this.panicState = null;\n            this.setState(\"void\");\n            this.clear();\n        };\n        States.prototype.clear = function (handler) {\n            if (handler) {\n                if (this.clearHandler) {\n                    throw new Error(\"Already clearing with a handler\");\n                }\n                this.clearHandler = handler;\n            }\n            else {\n                handler = this.clearHandler;\n                this.clearHandler = null;\n                if (handler) {\n                    handler();\n                }\n            }\n        };\n        States.prototype.ensureFeed = function (name) {\n            if (this.feeds[name])\n                return this.feeds[name];\n            var feed = this.feeds[name] = {\n                feedListener: null,\n                signals: [],\n                name: name\n            };\n            return feed;\n        };\n        States.prototype.feed = function (name, signal) {\n            if (!this.feeds[name]) {\n                this.feeds[name] = {\n                    feedListener: null,\n                    signals: [],\n                    name: name\n                };\n            }\n            var feed = this.feeds[name];\n            feed.signals.push(signal);\n            var listener = feed.feedListener;\n            if (listener) {\n                feed.feedListener = null;\n                try {\n                    listener();\n                }\n                catch (e) {\n                    this.error(e);\n                }\n            }\n        };\n        States.prototype.consumeAll = function (name) {\n            var feed = this.feeds[name];\n            if (feed) {\n                var length_1 = feed.signals.length;\n                feed.signals.length = 0;\n                return length_1;\n            }\n            return 0;\n        };\n        States.prototype.hasFeed = function (name) {\n            return this.feeds[name] && this.feeds[name].signals.length > 0;\n        };\n        States.prototype.consume = function (name) {\n            if (!this.hasFeed(name))\n                return null;\n            var feed = this.feeds[name];\n            if (feed) {\n                return feed.signals.shift() || true;\n            }\n            return null;\n        };\n        States.prototype.consumeWhenAvailableMergeToLast = function (name, callback) {\n            var _this = this;\n            this.consumeWhenAvailable(name, function (detail) {\n                var last = null;\n                while (true) {\n                    last = _this.consume(name);\n                    if (!last)\n                        break;\n                }\n                try {\n                    if (last) {\n                        callback(last);\n                    }\n                    else {\n                        callback(detail);\n                    }\n                }\n                catch (e) {\n                    _this.error(e);\n                }\n            });\n        };\n        States.prototype.isConsuming = function (name) {\n            return this.feeds[name] && this.feeds[name].feedListener && true || false;\n        };\n        States.prototype.consumeWhenAvailable = function (name, callback) {\n            var _this = this;\n            var feed = this.feeds[name];\n            if (!feed) {\n                feed = this.ensureFeed(name);\n            }\n            var called = false;\n            feed.feedListener = function () {\n                if (called)\n                    return;\n                called = true;\n                callback(_this.consume(name));\n            };\n            this.setImmediate(function () {\n                var feed = _this.feeds[name];\n                // cleared by others\n                if (!feed || !feed.feedListener)\n                    return;\n                // have signals\n                if (feed && feed.signals && feed.signals.length > 0) {\n                    try {\n                        var listener = feed.feedListener;\n                        listener();\n                    }\n                    catch (e) {\n                        _this.error(e);\n                    }\n                }\n                _this.events.emit(\"starve\", name);\n                _this.events.emit(\"starve/\" + name);\n            });\n        };\n        States.prototype.debug = function (option) {\n            this.isDebugging = true;\n        };\n        States.prototype.debugStateHandler = function (option, message) {\n            option = option || {};\n            var name = option.name || this.name || \"Anonymous\";\n            var text = name + \": state - \" + this.state;\n            this._logger(text);\n        };\n        States.prototype.setLogger = function (logger) {\n            this._logger = logger;\n        };\n        States.prototype.assertStateSequence = function (states, callback) {\n            if (this._assertingStateSequence) {\n                callback(new Error(\"Already asserting\"));\n                return;\n            }\n            this._assertingStateSequence = states;\n            this._assertingStateCallback = callback;\n            this._assertingStateIndex = 0;\n        };\n        States.prototype._endStateAssertion = function (err) {\n            var cb = this._assertingStateCallback;\n            if (!cb)\n                return;\n            this._assertingStateSequence = null;\n            this._assertingStateIndex = 0;\n            this._assertingStateCallback = null;\n            cb(err);\n        };\n        States.prototype._updateStateAssertion = function (state) {\n            var _this = this;\n            if (!this._assertingStateSequence)\n                return;\n            var should = this._assertingStateSequence[this._assertingStateIndex];\n            if (should !== state) {\n                this._endStateAssertion(new Error(\"State at index \" + this._assertingStateIndex + \" should be \" + should + \" but is \" + state + \" during sequence \" + this._assertingStateSequence.map(function (s, index) { if (index === _this._assertingStateIndex)\n                    return \"->\" + s; return s; }).join(\"\\n\")));\n            }\n        };\n        States.prototype.atRecursivePanic = function () {\n            this._logger(\"RecursivePanics\", this.panicError);\n        };\n        States.prototype.setImmediate = function (fn) {\n            if (typeof setImmediate !== \"undefined\") {\n                setImmediate(fn);\n            }\n            else {\n                setTimeout(fn, 0);\n            }\n        };\n        return States;\n    }());\n    Leaf.States = States;\n})(Leaf || (Leaf = {}));\n/// <reference path=\"leaf.ts\" />\nvar Leaf;\n(function (Leaf) {\n    var ErrorDoc = /** @class */ (function () {\n        function ErrorDoc() {\n            this.errors = {};\n        }\n        ErrorDoc.create = function () {\n            return new ErrorDoc();\n        };\n        ErrorDoc.build = function (info) {\n            var result = {};\n            for (var name_3 in info) {\n                result[name_3] = createError(name_3, Error, info[name_3] || {});\n            }\n            return result;\n        };\n        ErrorDoc.prototype.define = function (name, base, defaultProperty) {\n            var Base = Error;\n            if (typeof base === \"string\") {\n                var _ = this[base];\n                if (typeof _ === \"function\") {\n                    Base = _;\n                }\n            }\n            else if (typeof base === \"function\") {\n                Base = base;\n            }\n            else if (base) {\n                console.warn(\"Unknown base error\", base);\n            }\n            var E = createError(name, Base, defaultProperty);\n            this.errors[name] = E;\n            return this;\n        };\n        ErrorDoc.prototype.generate = function () {\n            return this.errors;\n        };\n        return ErrorDoc;\n    }());\n    Leaf.ErrorDoc = ErrorDoc;\n    function createError(name, Base, defaultProperty) {\n        return /** @class */ (function (_super) {\n            __extends(E, _super);\n            function E(message, detail) {\n                var _this = _super.call(this, message, detail) || this;\n                _this.detail = null;\n                _this.via = null;\n                _this.toJSON = null;\n                if (typeof message === \"object\") {\n                    if (!detail) {\n                        detail = message;\n                        message = name;\n                    }\n                    else {\n                        try {\n                            message = JSON.stringify(message, null, 4);\n                        }\n                        catch (e) {\n                            message = name + \"Warning: recursive error property\" + e.toString();\n                        }\n                    }\n                }\n                _this.name = name;\n                _this.message = message || name;\n                if (typeof defaultProperty === \"function\") {\n                    var _ = Base;\n                    Base = defaultProperty;\n                    defaultProperty = _;\n                }\n                if (!detail)\n                    detail = {};\n                if (!defaultProperty)\n                    defaultProperty = {};\n                for (var prop in defaultProperty) {\n                    _this[prop] = defaultProperty[prop];\n                }\n                if (!_this.detail) {\n                    _this.detail = {};\n                }\n                for (var prop in detail) {\n                    _this.detail[prop] = detail[prop];\n                }\n                for (var prop in detail) {\n                    _this[prop] = detail[prop];\n                }\n                if (detail.via) {\n                    _this.via = detail.via;\n                }\n                _this.toJSON = function () {\n                    var result = {};\n                    for (var prop in _this) {\n                        if (_this.hasOwnProperty(prop) && typeof _this[prop] !== \"function\") {\n                            result[prop] = _this[prop];\n                        }\n                    }\n                    if (_this.message) {\n                        result[\"message\"] = _this.message;\n                    }\n                    result[\"name\"] = _this.name;\n                    return result;\n                };\n                return _this;\n            }\n            return E;\n        }(Base));\n        //let E = function (message: string, detail: any) {\n        //    if (typeof message === \"object\") {\n        //        if (!detail) {\n        //            detail = message\n        //            message = name\n        //        } else {\n        //            try {\n        //                message = JSON.stringify(message, null, 4)\n        //            } catch (e) {\n        //                message = name + \"Warning: recursive error property\" + e.toString()\n        //            }\n        //        }\n        //    }\n        //    this.name = name\n        //    this.message = message || name\n        //    if (typeof defaultProperty === \"function\") {\n        //        let _ = base\n        //        base = defaultProperty\n        //        defaultProperty = _\n        //    }\n        //    if (!detail) detail = {}\n        //    if (!defaultProperty) defaultProperty = {}\n        //    for (let prop in defaultProperty) {\n        //        this[prop] = defaultProperty[prop]\n        //    }\n        //    if (!this.detail) {\n        //        this.detail = {}\n        //    }\n        //    for (let prop in detail) {\n        //        this.detail[prop] = detail[prop]\n        //    }\n        //    if (detail.via) {\n        //        this.via = detail.via\n        //    }\n        //}\n    }\n    Leaf.createError = createError;\n    Leaf.Errors = ErrorDoc.create()\n        .define(\"Timeout\")\n        .define(\"Abort\")\n        .define(\"IOError\")\n        .define(\"NetworkError\")\n        .generate();\n})(Leaf || (Leaf = {}));\n/// <reference path=\"leaf.ts\" />\nvar Leaf;\n(function (Leaf) {\n    if (typeof XMLHttpRequest == \"undefined\") {\n        // pollyfill for node\n        if (Leaf[\"XMLHttpRequest\"]) {\n            XMLHttpRequest = Leaf[\"XMLHttpRequest\"];\n        }\n        else {\n            var Q_1 = require;\n            try {\n                XMLHttpRequest = Q_1(\"xmlhttprequest\").XMLHttpRequest;\n            }\n            catch (e) {\n                XMLHttpRequest = /** @class */ (function () {\n                    function class_1() {\n                        console.log(\"XMLHttpRequest not available in environment\");\n                    }\n                    return class_1;\n                }());\n            }\n        }\n    }\n    var APIFactory = /** @class */ (function () {\n        function APIFactory(option) {\n            this.option = option;\n            this.responseHandler = null;\n            this.errorMapper = function (err) {\n                var _err = new Error(err.message);\n                _err.message = err.message;\n                _err.name = err.name;\n                // @ts-ignore\n                _err.raw = err;\n                // @ts-ignore\n                _err.state = err.state;\n                return _err;\n            };\n            if (!(typeof this.option.defaultTimeout === \"number\")) {\n                this.option.defaultTimeout = 0;\n            }\n            if (!(typeof this.option.prefix === \"string\")) {\n                this.option.prefix = \"\";\n            }\n            if (!(typeof this.option.suffix === \"string\")) {\n                this.option.suffix = \"\";\n            }\n            if (!this.option.root) {\n                this.option.root = \"\";\n            }\n            if (option.errorMapper) {\n                this.errorMapper = option.errorMapper;\n            }\n        }\n        APIFactory.prototype._handleResponse = function (response, callback) {\n            var data;\n            if (response) {\n                try {\n                    if (this.option.serializer) {\n                        data = this.option.serializer.deserialize(response);\n                    }\n                    else {\n                        data = JSON.parse(response);\n                    }\n                }\n                catch (e) {\n                    callback(new Leaf.Errors.NetworkError(\"Broken Response\", { raw: response }), null);\n                    return;\n                }\n                if (!data.state) {\n                    if (data.error) {\n                        callback(this.errorMapper(data.error), null);\n                    }\n                    else {\n                        callback(new Error(\"APIError\"), null);\n                    }\n                    return;\n                }\n                else {\n                    callback(null, data.data);\n                }\n            }\n            else {\n                callback(new Leaf.Errors.NetworkError(\"Empty response\"), null);\n            }\n        };\n        APIFactory.prototype.createAPI = function (option) {\n            if (typeof option.mock == \"undefined\") {\n                option.mock = this.option.mock;\n            }\n            var api = new APIDeclare(this, option);\n            return api;\n        };\n        APIFactory.prototype.createAPIFunction = function (option) {\n            var api = this.createAPI(option);\n            return api.getFunction();\n        };\n        APIFactory.prototype.solveResponse = function (err, response, callback) {\n            callback(err, response);\n        };\n        APIFactory.prototype.request = function (option, callback) {\n            var _this = this;\n            var method = option.method || \"GET\";\n            var url = option.url;\n            var sendData = null;\n            var headers = option.headers || {};\n            var bodyType = option.bodyType || this.option.bodyType || \"query\";\n            // Don't send null, send {}. Some framework not recognize null as a valid json\n            if (!option.query)\n                option.query = {};\n            var queryString = this.buildQueryString(option.query);\n            if (method.toUpperCase() === \"GET\") {\n                if (url.indexOf(\"? <= 0\")) {\n                    url += \"?\";\n                }\n                else {\n                    url += \"&\";\n                }\n                url += queryString;\n                sendData = null;\n            }\n            else {\n                if (bodyType === \"query\") {\n                    sendData = queryString;\n                }\n                else {\n                    if (this.option.serializer) {\n                        sendData = this.option.serializer.serialize(option.query);\n                    }\n                    else {\n                        sendData = JSON.stringify(option.query);\n                    }\n                }\n            }\n            var xhr = new XMLHttpRequest();\n            xhr.open(method, url, true);\n            if (option.withCredentials) {\n                xhr.withCredentials = true;\n            }\n            xhr.setRequestHeader(\"Accept\", \"application/json\");\n            if (bodyType === \"json\") {\n                xhr.setRequestHeader(\"Content-Type\", \"application/json\");\n            }\n            else {\n                xhr.setRequestHeader(\"Content-Type\", \"application/x-www-form-urlencoded\");\n            }\n            for (var name_4 in this.option.headers) {\n                if (!headers[name_4])\n                    headers[name_4] = this.option.headers[name_4];\n            }\n            for (var name_5 in headers) {\n                xhr.setRequestHeader(name_5, headers[name_5]);\n            }\n            var done = false;\n            var _callback = callback;\n            var timer = null;\n            callback = function (err, response) {\n                clearTimeout(timer);\n                // disable multiple callback\n                callback = function () { };\n                _this.solveResponse(err, response, _callback);\n                return;\n            };\n            if (option.timeout) {\n                timer = setTimeout(function () {\n                    callback = function () { };\n                    _callback(new Leaf.Errors.Timeout(\"Request timeout after \" + option.timeout), null);\n                    xhr.abort();\n                }, option.timeout * 1000);\n            }\n            xhr.onreadystatechange = function () {\n                if (xhr.readyState === 0 && !done) {\n                    callback(new Leaf.Errors.NetworkError(), null);\n                    return;\n                }\n                if (xhr.readyState === 4) {\n                    done = true;\n                    _this.lastResponse = xhr.responseText;\n                    if (_this.responseHandler) {\n                        _this.responseHandler(xhr.responseText, callback);\n                    }\n                    else {\n                        _this._handleResponse(xhr.responseText, callback);\n                    }\n                }\n            };\n            if (method.toLowerCase() != \"get\") {\n                xhr.send(sendData);\n            }\n            else {\n                xhr.send();\n            }\n            return xhr;\n        };\n        APIFactory.prototype.buildQueryString = function (query) {\n            if (!query) {\n                return \"\";\n            }\n            var kvs = [];\n            for (var prop in query) {\n                var value = query[prop] || \"\";\n                kvs.push([encodeURIComponent(prop), encodeURIComponent(value)].join(\"=\"));\n            }\n            return kvs.join(\"&\");\n        };\n        return APIFactory;\n    }());\n    Leaf.APIFactory = APIFactory;\n    var APIDeclare = /** @class */ (function () {\n        function APIDeclare(factory, option) {\n            this.factory = factory;\n            this.option = option;\n            this.mocks = [];\n        }\n        APIDeclare.prototype.mock = function (option, error, result) {\n            this.mocks.push({\n                option: option, error: error, result: result\n            });\n            return this;\n        };\n        APIDeclare.prototype._mock = function (option, callback) {\n            for (var _i = 0, _a = this.mocks; _i < _a.length; _i++) {\n                var mock = _a[_i];\n                if (Leaf.Util.deepEqual(option, mock.option)) {\n                    callback(mock.error, mock.result);\n                    return true;\n                }\n            }\n            return false;\n        };\n        APIDeclare.prototype.decorateAPIOption = function (option, fn) {\n            return function () {\n                var args = [];\n                for (var _i = 0; _i < arguments.length; _i++) {\n                    args[_i] = arguments[_i];\n                }\n                var op = args[0] || {};\n                for (var key in option) {\n                    if (typeof op[key] == \"undefined\") {\n                        op[key] = option[key];\n                    }\n                }\n                args[0] = op;\n                fn.apply(void 0, args);\n            };\n        };\n        APIDeclare.prototype.getFunction = function () {\n            var _this = this;\n            var fn = this.invoke.bind(this);\n            fn.API = this;\n            fn.mock = function (option, error, result) {\n                _this.mock(option, error, result);\n                return fn;\n            };\n            fn.with = function (data) {\n                var apiOption = Leaf.Util.clone(_this.option);\n                if (!apiOption.data)\n                    apiOption.data = {};\n                for (var key in data) {\n                    apiOption.data[key] = data[key];\n                }\n                var declare = new APIDeclare(_this.factory, apiOption);\n                declare.mocks = _this.mocks;\n                return declare.getFunction();\n            };\n            fn.transform = function (ts) {\n                return function (op, callback) {\n                    fn(op, function (err, data) {\n                        if (err) {\n                            callback();\n                            return;\n                        }\n                        callback(null, ts(data));\n                    });\n                };\n            };\n            return fn;\n        };\n        APIDeclare.prototype.invoke = function (data, callback) {\n            if (data === void 0) { data = {}; }\n            data = __assign({}, data);\n            if (this.option.data) {\n                // default params\n                for (var prop in this.option.data) {\n                    if (typeof data[prop] == \"undefined\") {\n                        data[prop] = this.option.data[prop];\n                    }\n                }\n            }\n            if (this.option.mock || this.factory.option.mock) {\n                var mocked = this._mock(data, callback);\n                if (!mocked) {\n                    callback(new Error(\"Mock miss for \" + this.option.method + \" \" + this.option.path + \". Data: \" + JSON.stringify(data)));\n                }\n                return;\n            }\n            var method = this.option.method;\n            var url = this.factory.option.root + this.factory.option.prefix + this.option.path + this.factory.option.suffix;\n            var routeParams = (url.match(/:[a-z_][a-z0-9_]*/ig) || []).map(function (item) { return item.substring(1); });\n            for (var prop in data) {\n                if (routeParams.indexOf(prop) >= 0) {\n                    url = url.replace(new RegExp(\":\" + prop, \"g\"), encodeURIComponent(data[prop]));\n                    delete data[prop];\n                }\n            }\n            var reqOption = {\n                url: url, method: method,\n                query: data,\n                timeout: this.option.timeout,\n                headers: this.option.headers,\n                withCredentials: this.option.withCredentials,\n                bodyType: this.option.bodyType\n            };\n            this.factory.request(reqOption, callback);\n        };\n        return APIDeclare;\n    }());\n    Leaf.APIDeclare = APIDeclare;\n})(Leaf || (Leaf = {}));\n/// <reference path=\"leaf.ts\"/>\nvar Leaf;\n(function (Leaf) {\n    var History = /** @class */ (function () {\n        function History() {\n            this.stack = [];\n            this.handlePopState = this.handlePopState.bind(this);\n        }\n        History.prototype.handlePopState = function () { };\n        History.prototype.push = function (id, callback) {\n            this.stack.push({ id: id, callback: callback });\n        };\n        History.prototype.remove = function (id) {\n            this.stack = this.stack.filter(function (item) { return item.id != id; });\n        };\n        History.prototype.activate = function () {\n            window.addEventListener(\"popstate\", this.handlePopState);\n        };\n        History.prototype.deactivate = function () {\n            window.removeEventListener(\"popstate\", this.handlePopState);\n        };\n        return History;\n    }());\n    Leaf.History = History;\n})(Leaf || (Leaf = {}));\n/// <reference path=\"leaf.ts\" />\nvar Leaf;\n(function (Leaf) {\n    var DataSource = /** @class */ (function () {\n        function DataSource(_name, _fields) {\n            var _this = this;\n            if (_fields === void 0) { _fields = []; }\n            this._name = _name;\n            this._fields = _fields;\n            this.events = new Leaf.EventEmitter();\n            // instance id\n            this.id = Date.now().toString() + Math.random().toString();\n            this._data = {};\n            for (var _i = 0, _a = this._fields; _i < _a.length; _i++) {\n                var field = _a[_i];\n                this.define(field);\n            }\n            Object.defineProperty(this, \"fields\", {\n                get: function () {\n                    return _this._fields.slice(0);\n                }\n            });\n            Object.defineProperty(this, \"data\", {\n                get: function () {\n                    return _this;\n                },\n                set: function (values) {\n                    _this.sets(values);\n                }\n            });\n        }\n        DataSource.prototype.define = function (name, defaultValue) {\n            var _this = this;\n            if (defaultValue === void 0) { defaultValue = null; }\n            Object.defineProperty(this, name, {\n                get: function () {\n                    return _this.get(name);\n                },\n                set: function (value) {\n                    return _this.set(name, value);\n                }\n            });\n        };\n        DataSource.prototype.hasKey = function (key) {\n            return this._fields.indexOf(key) >= 0;\n        };\n        DataSource.prototype.sets = function (obj) {\n            if (!obj) {\n                return;\n            }\n            if (obj instanceof DataSource) {\n                obj = obj.toJSON();\n            }\n            var changed = false;\n            var diff = {};\n            for (var key in obj) {\n                if (!this.hasKey(key)) {\n                    continue;\n                }\n                var old = this._data[key];\n                var value = obj[key];\n                if (this.set(key, value, true)) {\n                    changed = true;\n                    this.events.emit(\"change/\" + key, value, old);\n                    diff[key] = old;\n                }\n            }\n            if (changed) {\n                this.events.emit(\"change\", diff);\n            }\n        };\n        DataSource.prototype.set = function (key, value, silent) {\n            var old = this._data[key];\n            if (!this.hasKey(key))\n                return false;\n            if (Leaf.Util.deepEqual(old, value)) {\n                return false;\n            }\n            this._data[key] = value;\n            if (silent)\n                return true;\n            this.events.emit(\"change/\" + key, value, old);\n            var diff = {};\n            diff[key] = old;\n            this.events.emit(\"change\", diff);\n            return true;\n        };\n        DataSource.prototype.get = function (key) {\n            return this._data[key] || null;\n        };\n        DataSource.prototype.toJSON = function () {\n            return JSON.parse(JSON.stringify(this._data));\n        };\n        return DataSource;\n    }());\n    Leaf.DataSource = DataSource;\n    var Model = /** @class */ (function (_super) {\n        __extends(Model, _super);\n        function Model() {\n            return _super !== null && _super.apply(this, arguments) || this;\n        }\n        return Model;\n    }(DataSource));\n    Leaf.Model = Model;\n    var DataTree = /** @class */ (function () {\n        function DataTree(source) {\n            this.source = source;\n        }\n        DataTree.prototype.getNode = function (path) {\n            if (!path)\n                return new DataNode(this);\n            path = path.trim();\n            var routes = path.split(\".\");\n            var parent = this.source.data;\n            var valid = false;\n            for (var _i = 0, routes_1 = routes; _i < routes_1.length; _i++) {\n                var route = routes_1[_i];\n                if (!this.valueCanBeObject(parent[route])) {\n                    return null;\n                }\n                if (parent[route]) {\n                    parent = parent[route];\n                }\n                else if (this.valueCanBeObject(parent[route])) {\n                    parent = {};\n                    continue;\n                }\n                else {\n                    return null;\n                }\n            }\n            // Point at something can possibly be a data node\n            return new DataNode(this, path);\n        };\n        DataTree.prototype.valueCanBeObject = function (v) {\n            if (typeof v === \"string\")\n                return false;\n            if (typeof v === \"boolean\")\n                return false;\n            if (typeof v === \"number\")\n                return false;\n            if (typeof v === \"undefined\")\n                return false;\n            if (typeof v === \"object\")\n                return true;\n            return false;\n        };\n        DataTree.prototype.getValueByPath = function (path) {\n            if (!path)\n                return this.source[\"_data\"];\n            path = path.trim();\n            var routes = path.split(\".\");\n            var parent = this.source[\"_data\"];\n            var valid = false;\n            var last = routes.pop();\n            for (var _i = 0, routes_2 = routes; _i < routes_2.length; _i++) {\n                var route = routes_2[_i];\n                if (!this.valueCanBeObject(parent[route])) {\n                    return undefined;\n                }\n                if (parent[route]) {\n                    parent = parent[route];\n                }\n                else {\n                    return undefined;\n                }\n            }\n            // Point at something can possibly be a data node\n            var v = parent[last];\n            return v;\n        };\n        DataTree.prototype.setValueByPath = function (path, v) {\n            var _a;\n            if (!path) {\n                this.source.sets(v);\n                return true;\n            }\n            path = path.trim();\n            var routes = path.split(\".\");\n            var root = routes[0];\n            var last = routes.pop();\n            var parent = this.source[\"_data\"];\n            var valid = false;\n            var passed = [];\n            for (var _i = 0, routes_3 = routes; _i < routes_3.length; _i++) {\n                var route = routes_3[_i];\n                passed.push(route);\n                if (!this.valueCanBeObject(parent[route])) {\n                    throw new Error(\"Typeof \" + typeof parent + \" at \" + passed.join(\".\") + \" in path \" + path + \" is not a nestable\");\n                }\n                if (parent[route]) {\n                    parent = parent[route];\n                }\n                else if (this.valueCanBeObject(parent[route])) {\n                    parent[route] = {};\n                    parent = parent[route];\n                }\n            }\n            // Point at something can possibly be a data node\n            var old = parent[last];\n            parent[last] = v;\n            this.source.events.emit(\"change/\" + root, v, old);\n            routes.push(last);\n            this.source.events.emit(\"change\", (_a = {},\n                _a[routes.join(\".\")] = old,\n                _a));\n            return true;\n        };\n        return DataTree;\n    }());\n    Leaf.DataTree = DataTree;\n    var DataNode = /** @class */ (function () {\n        function DataNode(tree, path) {\n            var _this = this;\n            if (path === void 0) { path = \"\"; }\n            this.tree = tree;\n            this.path = path;\n            Object.defineProperty(this, \"v\", {\n                get: function () { return _this.get(); },\n                set: function (v) { return _this.set(v); }\n            });\n        }\n        DataNode.prototype.getProxyOrValue = function () {\n            var _this = this;\n            var v = this.get();\n            if (this.tree.valueCanBeObject(v)) {\n                return new Proxy((v), {\n                    get: function (obj, k) {\n                        if (typeof k !== \"string\")\n                            return;\n                        var node = _this.tree.getNode(_this.path + (\"\" + (_this.path && \".\") + k));\n                        if (node)\n                            return node.getProxyOrValue();\n                        return obj[k];\n                    },\n                    set: function (obj, k, v) {\n                        if (typeof k !== \"string\")\n                            return;\n                        _this.tree.setValueByPath(_this.path + (\"\" + (_this.path && \".\") + k), v);\n                        return true;\n                    }\n                });\n            }\n            return v;\n        };\n        DataNode.prototype.set = function (v) {\n            return this.tree.setValueByPath(this.path, v);\n        };\n        DataNode.prototype.get = function () {\n            return this.tree.getValueByPath(this.path);\n        };\n        DataNode.prototype.toString = function () {\n            return \"<DataNode: \" + this.get().toString() + \">\";\n        };\n        return DataNode;\n    }());\n    Leaf.DataNode = DataNode;\n})(Leaf || (Leaf = {}));\n/// <reference path=\"leaf.ts\" />\nvar Leaf;\n(function (Leaf) {\n    var Namespace = /** @class */ (function () {\n        function Namespace() {\n            this.Widgets = {};\n        }\n        Namespace.prototype.include = function (W, name) {\n            if (name === void 0) { name = W.prototype.widgetName; }\n            if (W.prototype instanceof Leaf.Widget) {\n                if (this.Widgets[name]) {\n                    throw new Error(\"Widget namespace conflicting: \" + name);\n                }\n                this.Widgets[name] = W;\n            }\n            else {\n                console.warn(W, \"not inherit WidgetBase\");\n            }\n        };\n        Namespace.prototype.getWidgetByName = function (name) {\n            name = Leaf.Util.slugToCamel(name);\n            name = Leaf.Util.capitalize(name);\n            for (var widgetName in this.Widgets) {\n                var W = this.Widgets[widgetName];\n                if (widgetName == name || W[\"widgetName\"] === name || W.prototype.widgetName === name || W.constructor[\"widgetName\"] == name) {\n                    return W;\n                }\n            }\n            return null;\n        };\n        Namespace.prototype.createWidgetByName = function (name, props) {\n            var W = this.getWidgetByName(name);\n            if (!W)\n                return;\n            var w = new W(props);\n            return w;\n        };\n        Namespace.prototype.isTagWidgetName = function (name, who) {\n            name = Leaf.Util.slugToCamel(name);\n            name = Leaf.Util.capitalize(name);\n            if (name === who.widgetName) {\n                return true;\n            }\n            return false;\n        };\n        Namespace.prototype.clear = function () {\n            this.Widgets = {};\n        };\n        Namespace.prototype.has = function (name) {\n            name = Leaf.Util.capitalize(Leaf.Util.slugToCamel(name));\n            if (this.Widgets[name])\n                return true;\n            return false;\n        };\n        return Namespace;\n    }());\n    Leaf.Namespace = Namespace;\n})(Leaf || (Leaf = {}));\n/// <reference path=\"./leaf.ts\" />\nvar Leaf;\n(function (Leaf) {\n    var ViewModel = /** @class */ (function (_super) {\n        __extends(ViewModel, _super);\n        function ViewModel(_name, _fields) {\n            if (_fields === void 0) { _fields = []; }\n            var _this = _super.call(this, _name, _fields) || this;\n            _this._name = _name;\n            _this._fields = _fields;\n            _this.depChain = new DependencyChain;\n            _this.tree = new Leaf.DataTree(_this);\n            _this.depChain.events.listenBy(_this, \"declare\", function (dep) {\n                console.log(\"Dependency declare\", dep);\n                _this.events.listenBy(\"dep/\" + dep.src + \":\" + dep.target, \"change/\" + dep.src, function () {\n                    _this.events.emit(\"depChange/\" + dep.target);\n                });\n                _this.events.listenBy(\"dep/\" + dep.src + \":\" + dep.target, \"depChange/\" + dep.src, function () {\n                    _this.events.emit(\"depChange/\" + dep.target);\n                });\n            });\n            _this.depChain.events.listenBy(_this, \"revoke\", function (dep) {\n                _this.events.stopListenBy(\"dep/\" + dep.src + \":\" + dep.target);\n            });\n            return _this;\n        }\n        ViewModel.prototype.set = function (key, value, silent) {\n            if (typeof value === \"function\" || typeof this.get(key) === \"function\") {\n                this.depChain.updateFunctionDependency(key, value);\n            }\n            return _super.prototype.set.call(this, key, value);\n        };\n        return ViewModel;\n    }(Leaf.Model));\n    Leaf.ViewModel = ViewModel;\n    var DependencyChain = /** @class */ (function () {\n        function DependencyChain() {\n            this.events = new Leaf.EventEmitter();\n            this.maxDepth = 10;\n            this.dependencyMap = {};\n        }\n        DependencyChain.prototype.extractFunctionDependency = function (fn) {\n            if (typeof fn !== \"function\")\n                return [];\n            var fnString = fn.toString();\n            var reg = /VM\\.(\\w+)\\b/g;\n            var match;\n            var result = [];\n            while (match = reg.exec(fnString)) {\n                result.push(match[1]);\n            }\n            return result;\n        };\n        DependencyChain.prototype.updateFunctionDependency = function (name, fn) {\n            var deps = this.extractFunctionDependency(fn);\n            this.validateDependency(name, deps);\n            var oldDeps = this.dependencyMap[name];\n            var diff = Leaf.Util.arrayDiff(deps, oldDeps);\n            for (var _i = 0, _a = diff.left; _i < _a.length; _i++) {\n                var dep = _a[_i];\n                this.events.emit(\"declare\", { target: name, src: dep });\n            }\n            for (var _b = 0, _c = diff.right; _b < _c.length; _b++) {\n                var dep = _c[_b];\n                this.events.emit(\"revoke\", { target: name, src: dep });\n            }\n            this.dependencyMap[name] = deps;\n        };\n        DependencyChain.prototype.validateDependency = function (target, src, depth) {\n            if (depth === void 0) { depth = 0; }\n            if (src.indexOf(target) >= 0) {\n                throw new Error(\"Recursive dependency \" + target);\n            }\n            if (depth > this.maxDepth) {\n                throw new Error(\"Max dependency depth exceed :\" + this.maxDepth);\n            }\n            var nextCheck = [];\n            for (var _i = 0, src_1 = src; _i < src_1.length; _i++) {\n                var item = src_1[_i];\n                if (this.dependencyMap[item]) {\n                    var nextDeps = this.dependencyMap[item];\n                    for (var _a = 0, nextDeps_1 = nextDeps; _a < nextDeps_1.length; _a++) {\n                        var nt = nextDeps_1[_a];\n                        // already checked\n                        if (src.indexOf(nt) >= 0)\n                            continue;\n                        if (nextCheck.indexOf(nt) >= 0)\n                            continue;\n                        nextCheck.push(nt);\n                    }\n                }\n            }\n            if (nextCheck.length === 0)\n                return true;\n            return this.validateDependency(target, nextCheck, depth + 1);\n        };\n        return DependencyChain;\n    }());\n    Leaf.DependencyChain = DependencyChain;\n})(Leaf || (Leaf = {}));\n/// <reference path=\"leaf.ts\"/>\nvar Leaf;\n(function (Leaf) {\n    var WidgetCoreDesign = /** @class */ (function () {\n        function WidgetCoreDesign(widget) {\n            this.widget = widget;\n            this.subWidgetPlaceholder = {};\n            this.slotsPlaceholder = {};\n            this.slotIndexOffset = 0;\n        }\n        return WidgetCoreDesign;\n    }());\n    Leaf.WidgetCoreDesign = WidgetCoreDesign;\n    var WidgetInitializerDesign = /** @class */ (function () {\n        function WidgetInitializerDesign(widget) {\n            this.widget = widget;\n        }\n        return WidgetInitializerDesign;\n    }());\n    Leaf.WidgetInitializerDesign = WidgetInitializerDesign;\n    var WidgetCore = /** @class */ (function (_super) {\n        __extends(WidgetCore, _super);\n        function WidgetCore() {\n            return _super !== null && _super.apply(this, arguments) || this;\n        }\n        WidgetCore.prototype.attachElement = function (el, dynamics) {\n            // 1. widget\n            // 2. common widget\n            // 3. slot\n            // 4. normal\n            // generally todos\n            // 0. create real element if needed\n            // 1. bind and sync props\n            // 2. bindUI by data id\n            var tagName = el.tagName.toLowerCase();\n            if (tagName.toLowerCase() === \"widget\") {\n                // widget\n                var name_6 = el.getAttribute(\"data-name\");\n                var path = el.getAttribute(\"data-widget\");\n                if (!name_6 && path) {\n                    var last = path.split(\"/\").pop();\n                    last = last.split(\".\")[0];\n                    name_6 = last;\n                }\n                if (!name_6) {\n                    console.error(el, \"widget missing name\");\n                    throw new Error(\"<widget> missing data-name or data-widget\");\n                }\n                this.defineSubWidget(name_6, el, dynamics, this.getChildrenAsSlot(el));\n            }\n            else if (this.widget.namespace.has(tagName) && !this.widget.namespace.isTagWidgetName(tagName, this.widget)) {\n                // common widget\n                var props = {};\n                // none dynamic props\n                for (var i = 0; i < el.attributes.length; i++) {\n                    var item = el.attributes[i];\n                    props[item.name] = item.value;\n                }\n                // slots\n                var customWidget = this.widget.namespace.createWidgetByName(tagName, props);\n                // inherit properties\n                for (var name_7 in props) {\n                    if (!customWidget.node.getAttribute(name_7)) {\n                        // resolve data-id-conflict \n                        if (name_7 === \"data-id\")\n                            name_7 = \"data-id-of-parent\";\n                        customWidget.node.setAttribute(name_7, props[name_7]);\n                    }\n                }\n                customWidget.core.fillSlots(this.getChildrenAsSlot(el));\n                // apply properties latter on this custom widget than this place holder\n                el = customWidget.node;\n                // use the data-id of placeholder to bindUI\n                this.checkAndBindUI(el, props[\"data-id\"]);\n                // sync props after end of this if statement...\n            }\n            else if (tagName === \"slot\") {\n                // slot\n                var name_8 = el.getAttribute(\"data-slot\");\n                this.defineSlot(name_8, el, dynamics);\n                // We also bind UI temperarily until filled\n                this.checkAndBindUI(el);\n            }\n            else {\n                // normal\n                // Id-for-parent priorier to data-id.\n                this.checkAndBindUI(el);\n                // Only for element that is not delegated\n                if (!el.widget && el.getAttribute(\"data-list\")) {\n                    var name_9 = el.getAttribute(\"data-list\");\n                    this.defineList(name_9, el);\n                }\n            }\n            this.attachDynamicProperty(el, dynamics);\n            this.syncDynamicProperties(el);\n            // Whatever it is, we initialize and sync the properties on it\n            return el;\n        };\n        WidgetCore.prototype.detachElement = function (el) {\n            if (!el)\n                return;\n            this.detachDynamicProperty(el);\n        };\n        ;\n        WidgetCore.prototype.attachText = function (text, config) {\n            for (var _i = 0, _a = config.templates; _i < _a.length; _i++) {\n                var item = _a[_i];\n                if (item.type !== \"value\")\n                    continue;\n                var root = Leaf.CoreLogic.getPropertyRoot(item.content);\n                this.widget.ViewModel.events.listenBy(text, [\"change/\" + root, \"depChange/\" + root], this.syncDynamicText.bind(this, text, config));\n            }\n            this.syncDynamicText(text, config);\n        };\n        WidgetCore.prototype.detachText = function (text) {\n            this.widget.ViewModel.events.stopListenBy(text);\n        };\n        // Should ignore `data-` properties\n        WidgetCore.prototype.extractDynamicPropertyConfig = function (el) {\n            var properties = {};\n            for (var i = 0; i < el.attributes.length; i++) {\n                var attr = el.attributes[i];\n                var configs = Leaf.CoreLogic.createDynamicValueConfigs(attr.value);\n                if (configs && configs.length > 0) {\n                    el.removeAttribute(attr.name);\n                    properties[attr.name] = {\n                        name: attr.name,\n                        templates: configs\n                    };\n                }\n            }\n            return properties;\n        };\n        WidgetCore.prototype.getExistDynamicProperty = function (el) {\n            for (var _i = 0, _a = el.propertyConfigs || []; _i < _a.length; _i++) {\n                var props = _a[_i];\n                if (props.master === this.widget)\n                    return props.rules;\n            }\n            return null;\n        };\n        WidgetCore.prototype.syncDynamicProperties = function (el) {\n            var props = {};\n            for (var _i = 0, _a = el.propertyConfigs || []; _i < _a.length; _i++) {\n                var config = _a[_i];\n                var vm = config.master.ViewModel;\n                for (var name_10 in config.rules) {\n                    var rule = config.rules[name_10];\n                    var value = Leaf.CoreLogic.explainDynamicString(vm.tree, rule);\n                    if (!props[name_10])\n                        props[name_10] = [];\n                    props[name_10].push(value);\n                }\n            }\n            var result = {};\n            for (var name_11 in props) {\n                if (props[name_11].length > 1 && Leaf.CoreLogic.isPropertyMergable(name_11)) {\n                    result[name_11] = Leaf.CoreLogic.mergeProperty(name_11, props[name_11]);\n                }\n                else {\n                    result[name_11] = props[name_11].pop();\n                }\n            }\n            for (var name_12 in result) {\n                var value = result[name_12];\n                if (value !== el.getAttribute(name_12)) {\n                    el.setAttribute(name_12, value);\n                }\n            }\n        };\n        WidgetCore.prototype.syncDynamicProperty = function (el, propertyName) {\n            var values = [];\n            for (var _i = 0, _a = el.propertyConfigs; _i < _a.length; _i++) {\n                var config = _a[_i];\n                for (var name_13 in config.rules) {\n                    if (name_13 === propertyName) {\n                        values.push(Leaf.CoreLogic.explainDynamicString(config.master.ViewModel.tree, config.rules[name_13]));\n                    }\n                }\n            }\n            var value = Leaf.CoreLogic.mergeProperty(propertyName, values);\n            if (value.toString() != el.getAttribute(propertyName).toString()) {\n                el.setAttribute(propertyName, value);\n            }\n        };\n        WidgetCore.prototype.syncDynamicText = function (text, rule) {\n            var _this = this;\n            // Should add pollyfill for IE8/7\n            // https://developer.mozilla.org/en/docs/Web/API/Node/textContent\n            var value = text.textContent;\n            var strs = rule.templates.map(function (t) {\n                return _this.explain(t);\n            });\n            var result = strs.join(\"\");\n            if (result !== value) {\n                text.textContent = result;\n            }\n        };\n        WidgetCore.prototype.explain = function (config) {\n            return Leaf.CoreLogic.explainDynamicValue(this.widget.ViewModel.tree, config);\n        };\n        WidgetCore.prototype.checkAndUnbindUI = function (el) {\n            var id = Leaf.Util.slugToCamel(el.getAttribute(\"data-id\"));\n            if (id && this.widget.UI[id] === el) {\n                this.unbindUI(id);\n            }\n        };\n        WidgetCore.prototype.checkAndBindUI = function (el, name) {\n            var id = Leaf.Util.slugToCamel(name || el.getAttribute(\"data-id\"));\n            if (id) {\n                this.bindUI(el, id);\n            }\n        };\n        WidgetCore.prototype.bindUI = function (node, id) {\n            if (this.widget.UI[id] === node)\n                return;\n            this.unbindUI(id);\n            this.widget.UI[id] = node;\n            this.widget.delegates.applyUIDelegateOwner(id);\n        };\n        WidgetCore.prototype.unbindUI = function (id) {\n            this.widget.delegates.clearUIDelegateOwner(id);\n            delete this.widget.UI[id];\n        };\n        WidgetCore.prototype.defineSubWidget = function (name, el, dynamics, slots) {\n            // I've considered using widget.subWidget[name], but after\n            // consider twice, I think directly assign subWidget to widget\n            // is a better practice and name collision should be minimum.\n            var _this = this;\n            // First set this element to it\n            this.subWidgetPlaceholder[name] = {\n                holder: el,\n                dynamics: dynamics,\n                slots: slots\n            };\n            Leaf.Property.define(this.widget, name, {\n                set: function (value, cache) {\n                    if ((value instanceof Leaf.Widget || value && value[\"isWidget\"]) || !value) {\n                        // First assignment do nothing, it's likely the placeholder <widget>\n                        _this.setSubWidget(name, value);\n                        cache.value = value;\n                    }\n                }\n            });\n        };\n        WidgetCore.prototype.setSubWidget = function (name, widget) {\n            // 0. detach old\n            // 1. sync properties\n            // 2. bindUI\n            // 3. replace element\n            // replace\n            var oldWidget = this.widget[name];\n            var replaceTarget;\n            var replaceSrc;\n            var isReplaceRoot = false;\n            if (oldWidget && oldWidget.node && oldWidget.node.parentElement) {\n                replaceTarget = oldWidget.node;\n            }\n            else {\n                replaceTarget = this.subWidgetPlaceholder[name].holder;\n                if (replaceTarget === this.widget.node) {\n                    isReplaceRoot = true;\n                }\n            }\n            if (widget && widget.node) {\n                replaceSrc = widget.node;\n            }\n            else {\n                replaceSrc = this.subWidgetPlaceholder[name].holder;\n            }\n            // is case replace root, the replaceTarget.parentElement can be null\n            if (replaceSrc !== replaceTarget && replaceTarget.parentElement) {\n                replaceTarget.parentElement.replaceChild(replaceSrc, replaceTarget);\n            }\n            // detach old\n            if (oldWidget) {\n                this.detachElement(oldWidget.node);\n                this.checkAndUnbindUI(oldWidget.node);\n                if (isReplaceRoot) {\n                    this.widget.core.unbindUI(\"node\");\n                }\n            }\n            if (widget) {\n                // transfer static property to it\n                // transfer dynamic property to it and bind UI\n                var holder = this.subWidgetPlaceholder[name];\n                this.transferProperties(widget.node, holder.dynamics);\n                this.attachElement(widget.node, null);\n                widget.core.fillSlots(this.subWidgetPlaceholder[name].slots);\n            }\n            if (isReplaceRoot) {\n                this.widget.node = widget.node;\n                this.widget.core.bindUI(widget.node, \"node\");\n            }\n        };\n        WidgetCore.prototype.attachDynamicProperty = function (el, dynamics) {\n            if (!el.propertyConfigs)\n                el.propertyConfigs = [];\n            //console.log(\"attach\", dynamics, el.propertyConfigs)\n            var todo = [];\n            this.widget.ViewModel.events.stopListenBy(el);\n            if (dynamics) {\n                el.propertyConfigs.push({ master: this.widget, rules: dynamics });\n            }\n            for (var _i = 0, _a = el.propertyConfigs; _i < _a.length; _i++) {\n                var config = _a[_i];\n                // already attached\n                if (config.master === this.widget) {\n                    todo.push(config.rules);\n                }\n            }\n            if (todo.length > 1) {\n                console.warn(\"Multiple dynamic attaches\");\n                console.trace();\n            }\n            for (var _b = 0, todo_1 = todo; _b < todo_1.length; _b++) {\n                var dynamics_1 = todo_1[_b];\n                for (var name_14 in dynamics_1) {\n                    var config = dynamics_1[name_14];\n                    for (var _c = 0, _d = config.templates; _c < _d.length; _c++) {\n                        var part = _d[_c];\n                        if (part.type === \"raw\")\n                            continue;\n                        var root = Leaf.CoreLogic.getPropertyRoot(part.content);\n                        this.widget.ViewModel.events.listenBy(el, [\"change/\" + root, \"depChange/\" + root], this.syncDynamicProperty.bind(this, el, name_14));\n                    }\n                }\n            }\n        };\n        WidgetCore.prototype.detachDynamicProperty = function (el) {\n            var _this = this;\n            // Detach and remove properties\n            if (!el)\n                return;\n            if (!el.propertyConfigs)\n                el.propertyConfigs = [];\n            el.propertyConfigs = el.propertyConfigs.filter(function (item) { return item.master !== _this.widget; });\n            this.widget.ViewModel.events.stopListenBy(el);\n        };\n        WidgetCore.prototype.attachDynamicText = function (text, rule) {\n            for (var _i = 0, _a = rule.templates; _i < _a.length; _i++) {\n                var part = _a[_i];\n                if (part.type === \"raw\")\n                    continue;\n                var root = Leaf.CoreLogic.getPropertyRoot(part.content);\n                this.widget.ViewModel.events.listenBy(text, [\"change/\" + root, \"depChange/\" + root], this.syncDynamicText.bind(this, text, rule));\n            }\n        };\n        WidgetCore.prototype.detachDynamicText = function (text) {\n            this.widget.ViewModel.events.stopListenBy(text);\n        };\n        WidgetCore.prototype.extractTemplates = function (node) {\n            var result = {};\n            var templates = node.querySelectorAll(\"template\");\n            for (var i = 0; i < templates.length; i++) {\n                var item = templates[i];\n                if (node.contains(item)) {\n                    item.parentElement.removeChild(item);\n                    var name_15 = item.getAttribute(\"data-name\");\n                    if (name_15) {\n                        result[name_15] = item.innerHTML;\n                    }\n                }\n            }\n            return result;\n        };\n        WidgetCore.prototype.defineSlot = function (name, el, dynamics) {\n            // refactor slot implementation and abstract it to the same\n            // way as subwidget.\n            this.slotsPlaceholder[name] = {\n                el: el,\n                name: name,\n                index: this.slotIndexOffset++,\n                dynamics: dynamics\n            };\n        };\n        WidgetCore.prototype.fillSlots = function (slots) {\n            for (var i = 0; i < slots.length; i++) {\n                var slot = slots[i];\n                var holder = this.getSlotHolder(slot.name, i);\n                if (holder) {\n                    holder.el.parentElement.replaceChild(slot.el, holder.el);\n                    holder.el = slot.el;\n                    this.transferProperties(slot.el, holder.dynamics);\n                    this.bindUI(slot.el, holder.name);\n                }\n            }\n        };\n        WidgetCore.prototype.extractDynamicStringConfig = function (content) {\n            var config = Leaf.CoreLogic.createDynamicValueConfigs(content);\n            return {\n                templates: config\n            };\n        };\n        WidgetCore.prototype.mergeProps = function (from, to, props) {\n            for (var _i = 0, props_1 = props; _i < props_1.length; _i++) {\n                var prop = props_1[_i];\n                var toPropValue = to.getAttribute(prop);\n                var fromPropValue = from.getAttribute(prop);\n                if (fromPropValue !== toPropValue) {\n                    if (Leaf.CoreLogic.isPropertyMergable(prop)) {\n                        to.setAttribute(prop, Leaf.CoreLogic.mergeProperty(prop, [fromPropValue, toPropValue]));\n                    }\n                    else {\n                        to.setAttribute(prop, fromPropValue);\n                    }\n                }\n            }\n        };\n        WidgetCore.prototype.transferProperties = function (to, dynamics) {\n            var _this = this;\n            if (!to.propertyConfigs)\n                to.propertyConfigs = [];\n            to.propertyConfigs = to.propertyConfigs.filter(function (item) { return item.master !== _this.widget; });\n            dynamics = Leaf.Util.clone(dynamics);\n            this.attachDynamicProperty(to, dynamics);\n            this.syncDynamicProperties(to);\n        };\n        WidgetCore.prototype.defineList = function (name, el) {\n            var _this = this;\n            var list = this.widget[name] = Leaf.Widget.makeList(el);\n            var events = [\"child/add\", \"child/remove\"];\n            var _loop_2 = function (event_2) {\n                var camelEventName = event_2.replace(/\\/[a-z]/ig, function (match) {\n                    return match[1].toUpperCase();\n                });\n                var handlerName = \"on\" + Leaf.Util.capitalize(camelEventName) + Leaf.Util.capitalize(name);\n                Leaf.Property.define(this_2.widget, handlerName, {\n                    set: function (value, cache) {\n                        if (cache.value) {\n                            _this.widget[name].events.removeEventListener(event_2, cache.value);\n                        }\n                        if (value) {\n                            cache.value = function () {\n                                var args = [];\n                                for (var _i = 0; _i < arguments.length; _i++) {\n                                    args[_i] = arguments[_i];\n                                }\n                                value.apply(_this.widget, args);\n                            };\n                            _this.widget[name].events.on(event_2, cache.value);\n                        }\n                        else {\n                            cache.value = null;\n                        }\n                    }\n                });\n                if (this_2.widget[handlerName]) {\n                    this_2.widget[handlerName] = this_2.widget[handlerName];\n                }\n            };\n            var this_2 = this;\n            for (var _i = 0, events_1 = events; _i < events_1.length; _i++) {\n                var event_2 = events_1[_i];\n                _loop_2(event_2);\n            }\n            list.events.listenBy(this, \"child/remove\", function (child) {\n                child.events.stopListenBy(_this);\n            });\n        };\n        WidgetCore.prototype.getPropsFromElement = function (el) {\n            var result = {};\n            var attrs = el.attributes;\n            for (var i = 0; i < attrs.length; i++) {\n                var item = attrs[i];\n                result[item.name] = item.value;\n            }\n            return result;\n        };\n        WidgetCore.prototype.getChildrenAsSlot = function (el) {\n            var slots = [];\n            if (el.childNodes.length === 1 && el.childNodes[0] instanceof Text) {\n                var result = document.createElement(\"span\");\n                result.appendChild(el.childNodes[0]);\n                return [{\n                        el: result,\n                        name: \"slot0\"\n                    }];\n            }\n            for (var i = 0; i < el.children.length; i++) {\n                var item = el.children[i];\n                var name_16 = item.getAttribute(\"data-slot\") || \"slot\" + i;\n                slots.push({ name: name_16, el: item });\n            }\n            return slots;\n        };\n        WidgetCore.prototype.getSlotHolder = function (name, index) {\n            for (var s in this.slotsPlaceholder) {\n                var item = this.slotsPlaceholder[s];\n                if (item.name === name)\n                    return item;\n            }\n            for (var s in this.slotsPlaceholder) {\n                var item = this.slotsPlaceholder[s];\n                if (item.index === index)\n                    return item;\n            }\n            return null;\n        };\n        return WidgetCore;\n    }(WidgetCoreDesign));\n    Leaf.WidgetCore = WidgetCore;\n    var WidgetInitializer = /** @class */ (function (_super) {\n        __extends(WidgetInitializer, _super);\n        function WidgetInitializer() {\n            return _super !== null && _super.apply(this, arguments) || this;\n        }\n        WidgetInitializer.prototype.initTemplate = function (template) {\n            if (!template) {\n                template = document.createElement(\"div\");\n            }\n            // All kind of template\n            if (typeof template === \"string\") {\n                var tempNode = document.createElement(\"div\");\n                tempNode.innerHTML = template.trim();\n                this.widget.node = tempNode.children[0];\n                tempNode.removeChild(this.widget.node);\n            }\n            else if (template instanceof Element) {\n                this.widget.node = template;\n            }\n            else if (typeof template === \"function\") {\n                return this.initTemplate(template());\n            }\n            if (!this.widget.node) {\n                console.error(\"Invalid Widget.node constructed with template\", template);\n                throw new Error(\"BrokenWidgetTemplate\");\n            }\n            //if (this.widget.node.getAttribute(\"data-id\")) {\n            //    console.error(\"Shouldn't bind data-id on root of the any widget you can always refer to them as `node`. `data-id` may latter be assigned by parent widget.\");\n            //    throw new Error(\"Invalid data id assignment\")\n            //}\n            if (this.widget.node.nodeType === this.widget.node.TEXT_NODE)\n                return;\n            this.widget.templates = this.widget.core.extractTemplates(this.widget.node);\n            this.traverseAndInitialize(this.widget.node);\n            this.widget.core.bindUI(this.widget.node, \"node\");\n            this.widget.node.widget = this.widget;\n        };\n        WidgetInitializer.prototype.traverseAndInitialize = function (node) {\n            if (node instanceof HTMLElement) {\n                for (var i = 0; i < node.childNodes.length; i++) {\n                    var item = node.childNodes[i];\n                    this.traverseAndInitialize(item);\n                }\n                var config = this.widget.core.extractDynamicPropertyConfig(node);\n                this.widget.core.attachElement(node, config);\n            }\n            else if (node instanceof Text) {\n                var config = this.widget.core.extractDynamicStringConfig(node.textContent);\n                this.widget.core.attachText(node, config);\n            }\n        };\n        WidgetInitializer.prototype.createElement = function (tagName, properties, children) {\n            var el = document.createElement(tagName);\n            var frag = document.createDocumentFragment();\n            for (var _i = 0, children_1 = children; _i < children_1.length; _i++) {\n                var child = children_1[_i];\n                frag.appendChild(child);\n            }\n            var dynamics = {};\n            for (var name_17 in properties) {\n                var v = properties[name_17];\n                if (typeof v === \"string\") {\n                    el.setAttribute(name_17, v);\n                    el[name_17] = v;\n                }\n                else {\n                    dynamics[name_17] = v;\n                    el.setAttribute(name_17, Leaf.CoreLogic.explainDynamicString(this.widget.ViewModel.tree, v));\n                }\n            }\n            el.appendChild(frag);\n            el = this.widget.core.attachElement(el, dynamics);\n            return el;\n        };\n        WidgetInitializer.prototype.createText = function (rule) {\n            var text = document.createTextNode(\"\");\n            this.widget.core.attachText(text, rule);\n            return text;\n        };\n        return WidgetInitializer;\n    }(WidgetInitializerDesign));\n    Leaf.WidgetInitializer = WidgetInitializer;\n    var WidgetDOMEventDelegator = /** @class */ (function () {\n        function WidgetDOMEventDelegator(widget) {\n            this.widget = widget;\n            this.lazyHandlers = {};\n        }\n        WidgetDOMEventDelegator.prototype.prepareUIDelegates = function (uiName) {\n            if (this.lazyHandlers[uiName])\n                return;\n            this.lazyHandlers[uiName] = {};\n            var events = Leaf.CoreLogic.AllEvents.slice(0);\n            var ui = this.widget.UI[uiName];\n            if (ui.widget && ui.widget.providingEvents && ui.widget.providingEvents.length > 0) {\n                events = events.concat(ui.widget.providingEvents);\n            }\n            for (var _i = 0, events_2 = events; _i < events_2.length; _i++) {\n                var event_3 = events_2[_i];\n                this.prepareUIDelegate(uiName, event_3.name);\n            }\n        };\n        WidgetDOMEventDelegator.prototype.prepareUIDelegate = function (uiName, eventName) {\n            var _this = this;\n            if (this.lazyHandlers[uiName][eventName])\n                return;\n            this.lazyHandlers[uiName][eventName] = {};\n            var handlerName = \"on\" + Leaf.Util.capitalize(eventName) + Leaf.Util.capitalize(uiName);\n            Leaf.Property.define(this.widget, handlerName, {\n                set: function (v, cache) {\n                    if (typeof v != \"function\")\n                        return;\n                    cache.value = v;\n                    _this.unbindLazyHandler(uiName, eventName);\n                    _this.provideLazyHandler(uiName, eventName, v);\n                    _this.bindLazyHandler(uiName, eventName);\n                }\n            });\n            // only set handler, dont' unbind or bind it.\n            // apply/clear delegate will do it.\n            if (this.widget[handlerName]) {\n                this.provideLazyHandler(uiName, eventName, this.widget[handlerName]);\n            }\n            // for onClick => onClickNode\n            if (uiName === \"node\") {\n                var handlerName_1 = \"on\" + Leaf.Util.capitalize(eventName);\n                Leaf.Property.define(this, handlerName_1, {\n                    set: function (v, cache) {\n                        if (typeof v != \"function\")\n                            return;\n                        cache.value = v;\n                        _this.unbindLazyHandler(uiName, eventName);\n                        _this.provideLazyHandler(uiName, eventName, v);\n                        _this.bindLazyHandler(uiName, eventName);\n                    }\n                });\n                if (this.widget[handlerName_1]) {\n                    this.provideLazyHandler(uiName, eventName, this.widget[handlerName_1]);\n                }\n            }\n        };\n        // call unbind/bind/provide carefully, or just don't call them.\n        WidgetDOMEventDelegator.prototype.unbindLazyHandler = function (uiName, eventName) {\n            var owner = this.widget.UI[uiName];\n            var info = this.lazyHandlers[uiName][eventName] || {};\n            if (info.handler) {\n                owner.removeEventListener(eventName, info.handler);\n            }\n        };\n        WidgetDOMEventDelegator.prototype.bindLazyHandler = function (uiName, eventName) {\n            var owner = this.widget.UI[uiName];\n            var info = this.lazyHandlers[uiName][eventName] || {};\n            if (info.handler) {\n                owner.addEventListener(eventName, info.handler);\n            }\n        };\n        WidgetDOMEventDelegator.prototype.provideLazyHandler = function (uiName, eventName, v) {\n            var _this = this;\n            var handler = function (e) {\n                e.capture = function () {\n                    e.stopImmediatePropagation();\n                    e.preventDefault();\n                };\n                v.call(_this.widget, e);\n            };\n            this.lazyHandlers[uiName][eventName].handler = handler;\n        };\n        WidgetDOMEventDelegator.prototype.clearUIDelegateOwner = function (id) {\n            if (!this.widget.UI[id])\n                return;\n            var owner = this.widget.UI[id];\n            var infos = this.lazyHandlers[id] || {};\n            for (var eventName in infos) {\n                var info = infos[eventName];\n                if (info.handler) {\n                    owner.removeEventListener(eventName, info.handler);\n                }\n            }\n        };\n        // Carefull call apply UI delegate owner\n        // 1. call clear\n        // 2. set UI[uiName]\n        // 3. call apply\n        // Always call them like above.\n        // But feel free to call `clear` at any time.\n        WidgetDOMEventDelegator.prototype.applyUIDelegateOwner = function (id) {\n            if (!this.widget.UI[id])\n                return;\n            var owner = this.widget.UI[id];\n            this.prepareUIDelegates(id);\n            var infos = this.lazyHandlers[id];\n            // bind any existing events\n            for (var eventName in infos) {\n                var info = infos[eventName];\n                if (info.handler) {\n                    owner.addEventListener(eventName, info.handler);\n                }\n            }\n        };\n        WidgetDOMEventDelegator.prototype.delegateTo = function (name, event) {\n            var fnName = \"on\" + Leaf.Util.capitalize(event.type) + Leaf.Util.capitalize(name);\n            var fn = this.widget[fnName];\n            if (!fn) {\n                return true;\n            }\n            return fn.call(this.widget, event);\n        };\n        return WidgetDOMEventDelegator;\n    }());\n    Leaf.WidgetDOMEventDelegator = WidgetDOMEventDelegator;\n    var WidgetSlotBehavior = /** @class */ (function () {\n        function WidgetSlotBehavior(widget) {\n            this.widget = widget;\n        }\n        WidgetSlotBehavior.prototype.fill = function () {\n            var infos = [];\n            for (var _i = 0; _i < arguments.length; _i++) {\n                infos[_i] = arguments[_i];\n            }\n            if (infos[0] instanceof Leaf.Widget) {\n                this.fillSequentially.apply(this, infos);\n            }\n            else {\n                this.fillNamingly(infos[0]);\n            }\n        };\n        WidgetSlotBehavior.prototype.fillSequentially = function () {\n            var widgets = [];\n            for (var _i = 0; _i < arguments.length; _i++) {\n                widgets[_i] = arguments[_i];\n            }\n            var slots = widgets.map(function (widget) {\n                return {\n                    name: \"#\",\n                    el: widget.node\n                };\n            });\n            this.widget.core.fillSlots(slots);\n        };\n        WidgetSlotBehavior.prototype.fillNamingly = function (infos) {\n            var slots = Object.keys(infos).map(function (name) {\n                return {\n                    name: name, el: infos[name].node\n                };\n            });\n            this.widget.core.fillSlots(slots);\n        };\n        return WidgetSlotBehavior;\n    }());\n    Leaf.WidgetSlotBehavior = WidgetSlotBehavior;\n})(Leaf || (Leaf = {}));\n/// <reference path=\"leaf.ts\" />\nvar Leaf;\n(function (Leaf) {\n    var Widget = /** @class */ (function () {\n        function Widget(template, name, _VMFields) {\n            var _this = this;\n            if (_VMFields === void 0) { _VMFields = []; }\n            this.template = template;\n            this._VMFields = _VMFields;\n            // Global namespace\n            this.isWidget = true;\n            // Use global namespace by default\n            this.namespace = Widget.namespace;\n            // If direct parent widget that contains this widget\n            this.parent = null;\n            // By default every widget has a event emitter\n            this.events = new Leaf.EventEmitter();\n            // All element with data-id\n            this.UI = {};\n            // Custom DOM events that this widget may trigger\n            this.providingEvents = [];\n            // Event that we should delegate (bubble or not)\n            this.interestingUnbubblingEvents = Leaf.CoreLogic.UnbubbleEvents.slice(0);\n            this.interestingBubblingEvents = Leaf.CoreLogic.BubbleEvents.slice(0);\n            this.core = new Leaf.WidgetCore(this);\n            this.delegates = new Leaf.WidgetDOMEventDelegator(this);\n            this.initializer = new Leaf.WidgetInitializer(this);\n            if (name) {\n                this.widgetName = this.widgetName || (this.constructor.name) || \"AnonymouseWidget\";\n            }\n            // Setup ViewModals\n            if (!this._VMFields) {\n                this._VMFields = [];\n            }\n            this.ViewModel = new Leaf.ViewModel(this.widgetName, this._VMFields);\n            Leaf.Property.define(this, \"VM\", {\n                get: function () {\n                    // for nont proxy\n                    if (typeof Proxy === \"undefined\")\n                        return _this.ViewModel;\n                    return _this.ViewModel.tree.getNode().getProxyOrValue();\n                },\n                set: function (values) {\n                    return _this.ViewModel.sets(values);\n                }\n            });\n            Leaf.Property.define(this, \"VMNest\", {\n                get: function () {\n                    return _this.ViewModel.tree.getNode().getProxyOrValue();\n                },\n                set: function (values) {\n                    return _this.ViewModel.sets(values);\n                }\n            });\n            // If we don't have a template, dont initialize it\n            // Maybe we are generated widget, or maybe we gonna do it latter.\n            Leaf.Property.define(this, \"asSlot\", {\n                get: function () {\n                    if (!_this._asSlot)\n                        _this._asSlot = new Leaf.WidgetSlotBehavior(_this);\n                    return _this._asSlot;\n                },\n            });\n            this.initializer.initTemplate(template);\n            Widget.events.emit(\"create\", this);\n        }\n        // Set custom template for this module\n        Widget.setTemplate = function (template) {\n            this.prototype.template = template;\n        };\n        Widget.prototype.toString = function () {\n            return \"<Widget \" + this.widgetName + \">\";\n        };\n        Widget.prototype.before = function (who) {\n            var node;\n            if (who instanceof Widget) {\n                node = who.node;\n            }\n            else {\n                node = who;\n            }\n            if (!node.parentElement)\n                return false;\n            node.parentElement.insertBefore(this.node, node);\n            return true;\n        };\n        Widget.prototype.after = function (who) {\n            var node;\n            if (who instanceof Widget) {\n                node = who.node;\n            }\n            else {\n                node = who;\n            }\n            if (!node.parentElement)\n                return false;\n            if (node.nextSibling) {\n                node.parentElement.insertBefore(this.node, node.nextSibling);\n            }\n            else {\n                node.parentElement.appendChild(this.node);\n            }\n            return true;\n        };\n        Widget.prototype.prependTo = function (who) {\n            var node;\n            if (who instanceof Widget) {\n                node = who.node;\n            }\n            else {\n                node = who;\n            }\n            if (node.children.length === 0) {\n                node.appendChild(this.node);\n            }\n            else {\n                var first = node.children[0];\n                node.insertBefore(this.node, first);\n            }\n            return true;\n        };\n        Widget.prototype.appendTo = function (who) {\n            var node;\n            if (who instanceof Widget) {\n                node = who.node;\n            }\n            else {\n                node = who;\n            }\n            node.appendChild(this.node);\n            return true;\n        };\n        Widget.makeList = function (el) {\n            return new Leaf.List(el);\n        };\n        Widget.prototype.emitDOMEvent = function (name, bubble, props) {\n            if (props === void 0) { props = {}; }\n            var valid = this.providingEvents.some(function (info) {\n                return info.name === name;\n            });\n            if (!valid) {\n                throw new Error(\"Should add events \" + name + \"to available events at construtor\");\n            }\n            var e = new CustomEvent(name, {\n                bubbles: bubble,\n                cancelable: true\n            });\n            for (var prop in props) {\n                e[prop] = props[prop];\n            }\n            this.node.dispatchEvent(e);\n        };\n        Widget.prototype.emitWidgetEvent = function (name, value) {\n            if (value === void 0) { value = {}; }\n            this.events.emit(name, value);\n            this.emitDOMEvent(name, false, value);\n        };\n        Widget.prototype.include = function (W) {\n            this.namespace.include(W);\n        };\n        Widget.prototype.expose = function (name, remoteName) {\n            var _this = this;\n            if (!remoteName) {\n                remoteName = name;\n            }\n            if (typeof this[name] === \"function\") {\n                Object.defineProperty(this.node, remoteName, {\n                    get: function () {\n                        return _this[name].bind(_this);\n                    }\n                });\n                return;\n            }\n            var cap = Leaf.Util.capitalize(name);\n            var getterName = \"onGet\" + cap;\n            var setterName = \"onSet\" + cap;\n            Object.defineProperty(this.node, remoteName, {\n                get: function () {\n                    if (_this[getterName])\n                        return _this[getterName]();\n                    else\n                        return _this[name];\n                },\n                set: function (value) {\n                    if (_this[setterName])\n                        return _this[setterName](value);\n                    else\n                        return _this[name];\n                }\n            });\n        };\n        Widget.prototype.makeList = function (who) {\n            var _this = this;\n            var el;\n            var name;\n            if (typeof who === \"string\") {\n                el = this.UI[who];\n                name = who;\n            }\n            else {\n                for (var prop in this.UI) {\n                    if (this.UI[prop] === who) {\n                        el = who;\n                        name = prop;\n                        break;\n                    }\n                }\n                if (!name) {\n                    return;\n                }\n            }\n            var list = Leaf.Widget.makeList(el);\n            list.events.listenBy(this, \"child/add\", function (item) {\n                var fn = _this[\"onChildAdd\" + Leaf.Util.capitalize(name)];\n                if (fn) {\n                    fn.call(_this, item);\n                }\n            });\n            list.events.listenBy(this, \"child/remove\", function (item) {\n                var fn = _this[\"onChildRemove\" + Leaf.Util.capitalize(name)];\n                if (fn) {\n                    fn.call(_this, item);\n                }\n            });\n            if (!this[name]) {\n                this[name] = list;\n            }\n            return list;\n        };\n        Widget.prototype.behave = function (handler) {\n            // This may not work property in browser without defineProperty\n            for (var key in handler) {\n                this[key] = handler[key];\n            }\n        };\n        Widget.namespace = new Leaf.Namespace();\n        Widget.events = new Leaf.EventEmitter();\n        return Widget;\n    }());\n    Leaf.Widget = Widget;\n    var GeneratedWidget = /** @class */ (function (_super) {\n        __extends(GeneratedWidget, _super);\n        function GeneratedWidget(generator, name, _VMFields) {\n            if (_VMFields === void 0) { _VMFields = []; }\n            var _this = _super.call(this, null, name, _VMFields) || this;\n            _this.generator = generator;\n            _this._VMFields = _VMFields;\n            _this.BindedWidgets = [];\n            _this.BindedLists = [];\n            _this.TestDatas = [];\n            _this.InitialData = null;\n            _this.initGeneratedTemplate(generator.call(_this));\n            return _this;\n        }\n        GeneratedWidget.prototype.initGeneratedTemplate = function (node) {\n            this.node = node;\n            this.core.bindUI(this.node, \"node\");\n            if (!this.node.widget) {\n                // in case it's a shared node by it's child\n                // the child will own it\n                this.node.widget = this;\n            }\n        };\n        GeneratedWidget.prototype._e = function (tagName, properties, children) {\n            return this.initializer.createElement(tagName, properties, children);\n        };\n        GeneratedWidget.prototype._t = function (rule) {\n            return this.initializer.createText(rule);\n        };\n        GeneratedWidget.prototype.renderRecursive = function (data, R) {\n            if (data === void 0) { data = {}; }\n            if (R === void 0) { R = this[\"R\"] || {}; }\n            for (var _i = 0, _a = this.BindedWidgets; _i < _a.length; _i++) {\n                var widget = _a[_i];\n                if (!this[widget.name]) {\n                    var Cons = this.resolveWidgetByPath(R, widget.path);\n                    if (!Cons) {\n                        console.error(\"Invalid constructor\", widget.path);\n                        continue;\n                    }\n                    this[widget.name] = new Cons();\n                }\n                if (data[widget.name] && this[widget.name][\"renderRecursive\"]) {\n                    this[widget.name][\"renderRecursive\"](data[widget.name]);\n                }\n            }\n            for (var _b = 0, _c = this.BindedLists; _b < _c.length; _b++) {\n                var list = _c[_b];\n                if (this[list.name] && Array.isArray(data[list.name])) {\n                    var Cons = this.resolveWidgetByPath(R, list.reference);\n                    if (!Cons)\n                        continue;\n                    for (var _d = 0, _f = data[list.name]; _d < _f.length; _d++) {\n                        var sub = _f[_d];\n                        var child = new Cons();\n                        this[list.name].push(child);\n                        if (child[\"renderRecursive\"]) {\n                            child[\"renderRecursive\"](sub);\n                        }\n                        else {\n                            child.VM = sub;\n                        }\n                    }\n                }\n            }\n            for (var _g = 0, _h = this._VMFields; _g < _h.length; _g++) {\n                var name_18 = _h[_g];\n                if (data[name_18]) {\n                    this.VM[name_18] = data[name_18];\n                }\n            }\n        };\n        GeneratedWidget.prototype.resolveWidgetByPath = function (R, path) {\n            if (!path)\n                return null;\n            var routes = path.split(\"/\").filter(function (item) { return item; });\n            var cur = R;\n            for (var _i = 0, routes_4 = routes; _i < routes_4.length; _i++) {\n                var route = routes_4[_i];\n                route = Leaf.Util.capitalize(route);\n                if (!cur[route])\n                    return null;\n                cur = cur[route];\n            }\n            return cur;\n        };\n        return GeneratedWidget;\n    }(Widget));\n    Leaf.GeneratedWidget = GeneratedWidget;\n})(Leaf || (Leaf = {}));\n/// <reference path=\"leaf.ts\" />\n/// <reference path=\"widget.ts\" />\nvar Leaf;\n(function (Leaf) {\n    var List = /** @class */ (function (_super) {\n        __extends(List, _super);\n        function List(el) {\n            var _this = _super.call(this, el, \"List\") || this;\n            _this._length = 0;\n            _this.length = 0;\n            var arrayFnsNames = [\"map\", \"forEach\", \"slice\", \"every\", \"some\", \"filter\"];\n            var _loop_3 = function (name_19) {\n                this_3[name_19] = function () {\n                    var args = [];\n                    for (var _i = 0; _i < arguments.length; _i++) {\n                        args[_i] = arguments[_i];\n                    }\n                    var arr = _this.toArray();\n                    return arr[name_19].apply(arr, args);\n                };\n            };\n            var this_3 = this;\n            for (var _i = 0, arrayFnsNames_1 = arrayFnsNames; _i < arrayFnsNames_1.length; _i++) {\n                var name_19 = arrayFnsNames_1[_i];\n                _loop_3(name_19);\n            }\n            Object.defineProperty(_this, \"length\", {\n                get: function () {\n                    return _this._length;\n                },\n                set: function (v) {\n                    var toRemove = [];\n                    if (v > _this._length) {\n                        throw new Error(\"can't asign length larger than the orig\");\n                    }\n                    if (typeof v != \"number\") {\n                        throw new TypeError();\n                    }\n                    for (var i = v; i < _this._length; i++) {\n                        toRemove.push(_this[i]);\n                        delete _this[i];\n                    }\n                    _this._length = v;\n                    for (var _i = 0, toRemove_1 = toRemove; _i < toRemove_1.length; _i++) {\n                        var item = toRemove_1[_i];\n                        _this.detach(item);\n                    }\n                }\n            });\n            _this._length = 0;\n            return _this;\n        }\n        List.prototype.fill = function (datas, Cons) {\n            this.length = 0;\n            for (var _i = 0, datas_1 = datas; _i < datas_1.length; _i++) {\n                var item = datas_1[_i];\n                var widget = new Cons(item);\n                for (var _a = 0, _b = widget._VMFields; _a < _b.length; _a++) {\n                    var name_20 = _b[_a];\n                    if (typeof item[name_20] !== \"undefined\") {\n                        widget.VM[name_20] = item[name_20];\n                    }\n                }\n                widget.ListItemData = item;\n                this.push(widget);\n            }\n        };\n        List.prototype.empty = function () {\n            var toRemove = [];\n            for (var i = 0; i < this._length; i++) {\n                toRemove.push(this[i]);\n                delete this[i];\n            }\n            for (var _i = 0, toRemove_2 = toRemove; _i < toRemove_2.length; _i++) {\n                var item = toRemove_2[_i];\n                this.detach(item);\n            }\n            this._length = 0;\n        };\n        List.prototype.indexOf = function (item) {\n            for (var i = 0; i < this._length; i++) {\n                if (this[i] === item) {\n                    return i;\n                }\n            }\n            return -1;\n        };\n        List.prototype.check = function (item) {\n            if (!(item instanceof Leaf.Widget)) {\n                throw new Error(\"List expect item to be Widget\");\n            }\n            for (var i = 0; i < this._length; i++) {\n                if (this[i] === item) {\n                    throw new Error(\"Duplicate ListItem\");\n                }\n            }\n            return true;\n        };\n        List.prototype.push = function () {\n            var items = [];\n            for (var _i = 0; _i < arguments.length; _i++) {\n                items[_i] = arguments[_i];\n            }\n            for (var _a = 0, items_1 = items; _a < items_1.length; _a++) {\n                var item = items_1[_a];\n                this.check(item);\n                this[this._length] = item;\n                if (this._length != 0) {\n                    item.after(this[this._length - 1]);\n                }\n                else {\n                    item.appendTo(this.node);\n                }\n                this._length += 1;\n                this.attach(item);\n            }\n        };\n        List.prototype.pop = function () {\n            if (this._length === 0)\n                return null;\n            this._length -= 1;\n            var item = this[this._length];\n            delete this[this._length];\n            return item;\n        };\n        List.prototype.unshift = function (item) {\n            this.check(item);\n            if (this._length === 0) {\n                item.prependTo(this.node);\n                this[0] = item;\n                this._length = 1;\n                this.attach(item);\n                return;\n            }\n            for (var index = this._length; index > 0; index -= 1) {\n                this[index] = this[index - 1];\n            }\n            this[0] = item;\n            this._length += 1;\n            item.before(this[1]);\n            this.attach(item);\n            return this._length;\n        };\n        List.prototype.shift = function () {\n            var result = this[0];\n            for (var index = 0; index < this._length; index++) {\n                this[index] = this[index + 1];\n            }\n            this.length -= 1;\n            this.detach(result);\n            return result;\n        };\n        List.prototype.splice = function (index, count) {\n            var _this = this;\n            var toAdd = [];\n            for (var _i = 2; _i < arguments.length; _i++) {\n                toAdd[_i - 2] = arguments[_i];\n            }\n            var result = [];\n            var toRemoves = [];\n            if (typeof count != \"number\" || index + count > this._length) {\n                count === this._length - index;\n            }\n            for (var i = 0; i < count; i++) {\n                var item = this[index + i];\n                toRemoves.push(item);\n                result.push(item);\n            }\n            var toAddFinal = toAdd;\n            var frag = document.createDocumentFragment();\n            toAddFinal.forEach(function (item) {\n                _this.check(item);\n                frag.appendChild(item.node);\n            });\n            if (index < this._length && this._length > 0) {\n                this.node.insertBefore(frag, this[index].node);\n            }\n            else {\n                this.node.appendChild(frag);\n            }\n            // make a hole\n            var increase = toAddFinal.length - count;\n            if (increase < 0) {\n                for (var origin_1 = index + count; origin_1 < this._length; origin_1++) {\n                    this[origin_1 + increase] = this[origin_1];\n                }\n            }\n            else if (increase > 0) {\n                for (var origin_2 = this._length - 1; origin_2 > index + count - 1; origin_2--) {\n                    this[origin_2 + increase] = this[origin_2];\n                }\n            }\n            // fill the hole\n            for (var offset = 0; offset < toAddFinal.length; offset++) {\n                var item = toAddFinal[offset];\n                this[index + offset] = item;\n            }\n            this._length += increase;\n            for (var _a = 0, toRemoves_1 = toRemoves; _a < toRemoves_1.length; _a++) {\n                var item = toRemoves_1[_a];\n                this.detach(item);\n            }\n            for (var _b = 0, toAddFinal_1 = toAddFinal; _b < toAddFinal_1.length; _b++) {\n                var item = toAddFinal_1[_b];\n                this.attach(item);\n            }\n            return result;\n        };\n        List.prototype.removeItem = function (item) {\n            var index = this.indexOf(item);\n            if (index < 0)\n                return;\n            this.splice(index, 1);\n            return item;\n        };\n        List.prototype.attach = function (item) {\n            item[\"parentList\"] = this;\n            this.events.emit(\"child/add\", item);\n            this.events.emit(\"child/change\");\n        };\n        List.prototype.detach = function (item) {\n            item[\"parentList\"] = null;\n            var node = item.node;\n            if (node && node.parentElement === this.node) {\n                this.node.removeChild(node);\n            }\n            this.events.emit(\"child/remove\", item);\n            this.events.emit(\"child/change\");\n        };\n        List.prototype.toArray = function () {\n            var result = [];\n            for (var i = 0; i < this._length; i++) {\n                result.push(this[i]);\n            }\n            return result;\n        };\n        return List;\n    }(Leaf.Widget));\n    Leaf.List = List;\n})(Leaf || (Leaf = {}));\n/// <reference path=\"leaf.ts\" />\nvar Leaf;\n(function (Leaf) {\n    Leaf.RPCErrors = Leaf.ErrorDoc.create()\n        .define(\"APINotExists\")\n        .define(\"Timeout\")\n        .define(\"Conflict\")\n        .define(\"BrokenConnection\")\n        .define(\"Abort\")\n        .generate();\n    function RPCMethod() {\n        return function (target, propertyKey, descriptor) {\n            if (typeof descriptor.value == \"function\") {\n                descriptor.value[\"__isRPCMethod\"] = true;\n            }\n        };\n    }\n    Leaf.RPCMethod = RPCMethod;\n    var RPCComposer = /** @class */ (function () {\n        function RPCComposer(option) {\n            if (option === void 0) { option = {}; }\n            this.option = option;\n            this.declares = {};\n            this.requestOffset = 10000;\n            this.methods = {};\n            this.remoteEvents = new Leaf.EventEmitter();\n            this.responseHandlers = [];\n            this.events = new Leaf.EventEmitter();\n            this.serializer = new Leaf.Serializer();\n            if (!(typeof this.option.defaultTimeout === \"number\")) {\n                this.option.defaultTimeout = 10000;\n            }\n        }\n        RPCComposer.prototype.isOpen = function () {\n            return !!this.connection;\n        };\n        RPCComposer.prototype.allocateId = function () { return this.requestOffset++; };\n        RPCComposer.prototype.install = function (obj, decorator) {\n            if (obj === void 0) { obj = this; }\n            for (var key in obj) {\n                var v = obj[key];\n                if (typeof v !== \"function\")\n                    continue;\n                if (v[\"__isRPCMethod\"]) {\n                    if (v.length !== 2) {\n                        console.error(\"RPCMethod \" + key + \" must accept 2 arguments (option,callback), which accepts \" + v.length + \".\");\n                        continue;\n                    }\n                    if (this.methods[key]) {\n                        console.error(\"Duplicate RPCMethod ${key}\");\n                        continue;\n                    }\n                    var method = v.bind(obj);\n                    if (decorator) {\n                        method = decorator(method, key);\n                    }\n                    this.registerRPCMethod(key, method);\n                }\n            }\n        };\n        RPCComposer.prototype.setConnection = function (con) {\n            var _this = this;\n            this.connection = con;\n            this.connection.events.listenBy(this, \"message\", function (message) {\n                _this.handleMessage(message);\n            });\n            this.connection.events.listenBy(this, \"close\", function () {\n                _this.unsetConnection();\n            });\n            this.events.emit(\"open\");\n        };\n        RPCComposer.prototype.unsetConnection = function () {\n            if (!this.connection)\n                return;\n            this.connection.events.stopListenBy(this);\n            this.connection = null;\n            for (var _i = 0, _a = this.responseHandlers; _i < _a.length; _i++) {\n                var handler = _a[_i];\n                this.finishHandler(handler, new Leaf.RPCErrors.Abort);\n            }\n            this.responseHandlers.length = 0;\n            this.events.emit(\"close\");\n        };\n        RPCComposer.prototype.revokeRPCMethod = function (name) {\n            delete this.methods[name];\n        };\n        RPCComposer.prototype.registerRPCMethod = function (name, handler) {\n            if (this.methods[name]) {\n                throw new Leaf.RPCErrors.Conflict(\"RPC Method \\\"\" + name + \"\\\" already exists\");\n            }\n            this.methods[name] = handler;\n        };\n        RPCComposer.prototype.createRPCDeclare = function (option) {\n            var api = new RPCDeclare(this, option);\n            this.declares[option.name] = api;\n            return api;\n        };\n        RPCComposer.prototype.createRPCInvokeInterface = function (option) {\n            var api = this.createRPCDeclare(option);\n            this[option.name] = api;\n            return api.getFunction();\n        };\n        RPCComposer.prototype.emitRemoteEvent = function (name, data) {\n            var blob = {\n                name: name,\n                data: data,\n                type: RPCProtocolBlobType.EVENT\n            };\n            this.send(this.normalize(blob));\n        };\n        RPCComposer.prototype.invoke = function (name, data, callback, option) {\n            var _this = this;\n            if (option === void 0) { option = {}; }\n            if (!callback) {\n                callback = function () { };\n            }\n            if (!this.connection) {\n                callback(new Leaf.RPCErrors.BrokenConnection(\"Connection not exists\"));\n                return;\n            }\n            var handler = {\n                id: this.allocateId(),\n                callback: callback,\n                finished: false,\n                timer: null,\n                method: name\n            };\n            var timeout = option.timeout || this.option.defaultTimeout;\n            if (timeout > 0) {\n                handler.timer = setTimeout(function () {\n                    if (!handler.finished) {\n                        _this.finishHandlerById(handler.id, new Leaf.RPCErrors.Timeout(\"RPC timeout after \" + (timeout || _this.option.defaultTimeout)));\n                    }\n                    _this.events.emit(\"timeout\");\n                }, timeout);\n            }\n            this.responseHandlers.push(handler);\n            var blob = {\n                id: handler.id,\n                method: name,\n                data: data,\n                type: RPCProtocolBlobType.INVOKE\n            };\n            this.send(this.normalize(blob));\n        };\n        RPCComposer.prototype.serialize = function (data) {\n            return this.serializer.serialize(data);\n        };\n        RPCComposer.prototype.deserialize = function (content) {\n            return this.serializer.deserialize(content);\n        };\n        RPCComposer.prototype.send = function (data) {\n            if (!this.connection)\n                return false;\n            if (typeof data !== \"string\") {\n                data = this.serialize(data);\n            }\n            this.connection.send(data);\n            return true;\n        };\n        RPCComposer.prototype.handleMessage = function (rawString) {\n            var data = null;\n            try {\n                var raw = this.deserialize(rawString);\n                data = this.denormalize(raw);\n            }\n            catch (e) {\n                return;\n            }\n            if (data.type === RPCProtocolBlobType.INVOKE) {\n                this.handleInvoke(data);\n            }\n            else if (data.type === RPCProtocolBlobType.RESPONSE) {\n                this.handleResponse(data);\n            }\n            else if (data.type === RPCProtocolBlobType.EVENT) {\n                this.handleEvent(data);\n            }\n        };\n        RPCComposer.prototype.handleInvoke = function (req) {\n            var _this = this;\n            var response = {\n                id: req.id,\n                type: RPCProtocolBlobType.RESPONSE\n            };\n            if (!this.methods[req.method]) {\n                response.error = new Leaf.RPCErrors.APINotExists(\"Requesting API \" + req.method + \" not exists\");\n                this.send(this.normalize(response));\n                return;\n            }\n            var call = this.methods[req.method];\n            var res = function (err, data) {\n                response.error = err;\n                response.data = data;\n                _this.send(_this.normalize(response));\n            };\n            try {\n                call(req.data, res);\n            }\n            catch (e) {\n                res(e, null);\n            }\n        };\n        RPCComposer.prototype.handleResponse = function (res) {\n            this.finishHandlerById(res.id, res.error, res.data);\n        };\n        RPCComposer.prototype.handleEvent = function (event) {\n            var _this = this;\n            setTimeout(function () {\n                _this.remoteEvents.emit(event.name, event.data);\n                _this.remoteEvents.emit(\"*\", event);\n            }, 0);\n        };\n        RPCComposer.prototype.transformObject = function (data, handler) {\n            var _this = this;\n            if (typeof data !== \"object\") {\n                return data;\n            }\n            if (Array.isArray(data)) {\n                return data.map(function (item) { return _this.transformObject(item, handler); });\n            }\n            if (!data)\n                return data;\n            var norm = data;\n            if (handler) {\n                norm = handler(norm);\n            }\n            // changed by custom norm\n            if (norm && norm !== data) {\n                return norm;\n            }\n            for (var prop in data) {\n                data[prop] = this.transformObject(data[prop], handler);\n            }\n            return data;\n        };\n        RPCComposer.prototype.normalize = function (data) {\n            return this.transformObject(data, this.customNormalize);\n        };\n        RPCComposer.prototype.denormalize = function (data) {\n            return this.transformObject(data, this.customDenormalize);\n        };\n        RPCComposer.prototype.finishHandlerById = function (id, err, value) {\n            var _this = this;\n            this.responseHandlers = this.responseHandlers.filter(function (handler) {\n                if (handler.id === id) {\n                    _this.finishHandler(handler, err, value);\n                    return false;\n                }\n                return true;\n            });\n        };\n        RPCComposer.prototype.finishHandler = function (handler, err, value) {\n            var _this = this;\n            handler.finished = true;\n            if (handler.timer) {\n                clearTimeout(handler.timer);\n                handler.timer = null;\n            }\n            setTimeout(function () {\n                _this.events.emit(\"response\", {\n                    method: handler.method,\n                    id: handler.id, error: err, value: value\n                });\n                handler.callback(err, value);\n            }, 0);\n        };\n        return RPCComposer;\n    }());\n    Leaf.RPCComposer = RPCComposer;\n    var RPCDeclare = /** @class */ (function () {\n        function RPCDeclare(center, option) {\n            this.center = center;\n            this.option = option;\n        }\n        RPCDeclare.prototype.getFunction = function () {\n            var fn = this.invoke.bind(this);\n            fn.RPC = this;\n            return fn;\n        };\n        RPCDeclare.prototype.invoke = function (data, callback) {\n            if (data === void 0) { data = {}; }\n            this.center.invoke(this.option.name, data, callback, {\n                timeout: this.option.timeout || 0\n            });\n        };\n        return RPCDeclare;\n    }());\n    Leaf.RPCDeclare = RPCDeclare;\n    var RPCConnectionBase = /** @class */ (function () {\n        function RPCConnectionBase() {\n            this.events = new Leaf.EventEmitter();\n        }\n        return RPCConnectionBase;\n    }());\n    Leaf.RPCConnectionBase = RPCConnectionBase;\n    var RPCProtocolBlobType;\n    (function (RPCProtocolBlobType) {\n        RPCProtocolBlobType[RPCProtocolBlobType[\"INVOKE\"] = 1] = \"INVOKE\";\n        RPCProtocolBlobType[RPCProtocolBlobType[\"RESPONSE\"] = 2] = \"RESPONSE\";\n        RPCProtocolBlobType[RPCProtocolBlobType[\"EVENT\"] = 3] = \"EVENT\";\n    })(RPCProtocolBlobType = Leaf.RPCProtocolBlobType || (Leaf.RPCProtocolBlobType = {}));\n    var RPCBrowserWebSocketConnection = /** @class */ (function (_super) {\n        __extends(RPCBrowserWebSocketConnection, _super);\n        function RPCBrowserWebSocketConnection(connection) {\n            var _this = _super.call(this) || this;\n            _this.connection = connection;\n            _this.connection.addEventListener(\"open\", function (msg) {\n                _this.events.emit(\"open\");\n            });\n            _this.connection.addEventListener(\"message\", function (msg) {\n                _this.events.emit(\"message\", msg.data);\n            });\n            _this.connection.addEventListener(\"close\", function () {\n                _this.events.emit(\"close\");\n            });\n            return _this;\n        }\n        RPCBrowserWebSocketConnection.prototype.send = function (content) {\n            this.connection.send(content);\n        };\n        RPCBrowserWebSocketConnection.prototype.isOpen = function () {\n            return this.connection.readyState == this.connection.OPEN;\n        };\n        RPCBrowserWebSocketConnection.prototype.close = function () {\n            this.connection.close();\n        };\n        RPCBrowserWebSocketConnection.prototype.describe = function () {\n            return this.connection.url;\n        };\n        return RPCBrowserWebSocketConnection;\n    }(RPCConnectionBase));\n    Leaf.RPCBrowserWebSocketConnection = RPCBrowserWebSocketConnection;\n})(Leaf || (Leaf = {}));\n/// <reference path=\"leaf.ts\"/>\nvar Leaf;\n(function (Leaf) {\n    var CoreLogic;\n    (function (CoreLogic) {\n        function createDynamicValueConfigs(templateString) {\n            var templates = [];\n            var reg = /\\{\\{\\s*!?([a-z0-9\\.]+(:[a-z0-9\\-]+)?)\\s*\\}\\}/ig;\n            var match;\n            var lastIndex = 0;\n            var hasValue = false;\n            while (match = reg.exec(templateString)) {\n                if (match.index > lastIndex) {\n                    templates.push({\n                        type: \"raw\",\n                        content: templateString.slice(lastIndex, match.index)\n                    });\n                }\n                var content = match[0].slice(2).slice(0, -2);\n                if (!content)\n                    continue;\n                var _a = content.split(\":\").map(function (item) { return item.trim(); }), k = _a[0], v = _a[1];\n                var reverse = false;\n                if (k[0] == \"!\") {\n                    k = k.slice(1);\n                    reverse = true;\n                }\n                templates.push({\n                    type: \"value\",\n                    content: k,\n                    value: v,\n                    reverse: reverse\n                });\n                hasValue = true;\n                lastIndex = match.index + match[0].length;\n            }\n            if (lastIndex < templateString.length) {\n                templates.push({\n                    type: \"raw\",\n                    content: templateString.slice(lastIndex)\n                });\n            }\n            return templates;\n        }\n        CoreLogic.createDynamicValueConfigs = createDynamicValueConfigs;\n        CoreLogic.MergablePropertyNames = [\"class\"];\n        function isPropertyMergable(name) {\n            return CoreLogic.MergablePropertyNames.indexOf(name) >= 0;\n        }\n        CoreLogic.isPropertyMergable = isPropertyMergable;\n        function mergeProperty(name, values) {\n            if (name === \"class\") {\n                var names = [];\n                for (var _i = 0, values_1 = values; _i < values_1.length; _i++) {\n                    var value = values_1[_i];\n                    var todos = value.split(\" \").map(function (item) { return item.trim(); }).filter(function (item) { return !!item; });\n                    for (var _a = 0, todos_1 = todos; _a < todos_1.length; _a++) {\n                        name = todos_1[_a];\n                        if (names.indexOf(name) < 0)\n                            names.push(name);\n                    }\n                }\n                return names.join(\" \");\n            }\n            else {\n                return values.join(\" \");\n            }\n        }\n        CoreLogic.mergeProperty = mergeProperty;\n        CoreLogic.BubbleEvents = [\"click\", \"mouseup\", \"mousedown\", \"mousemove\", \"mouseleave\", \"mouseenter\", \"mouseover\", \"keydown\", \"keyup\", \"keypress\", \"touchstart\", \"touchend\", \"touchmove\", \"input\"].map(function (name) {\n            return { name: name, bubble: true };\n        });\n        CoreLogic.UnbubbleEvents = [{\n                name: \"focus\",\n                bubble: false,\n                target: [\"input\", \"textarea\"]\n            }, {\n                name: \"blur\",\n                bubble: false,\n                target: [\"input\", \"textarea\"]\n            }, {\n                name: \"submit\",\n                bubble: false,\n                target: [\"form\"]\n            }, {\n                name: \"change\",\n                bubble: false,\n                target: [\"input\", \"textarea\", \"select\"]\n            }];\n        CoreLogic.AllEvents = CoreLogic.BubbleEvents.concat(CoreLogic.UnbubbleEvents);\n        function explainDynamicString(model, config) {\n            var result = [];\n            for (var _i = 0, _a = config.templates; _i < _a.length; _i++) {\n                var item = _a[_i];\n                result.push(explainDynamicValue(model, item));\n            }\n            return result.join(\"\");\n        }\n        CoreLogic.explainDynamicString = explainDynamicString;\n        function explainDynamicValue(tree, config) {\n            if (config.type === \"raw\") {\n                return config.content;\n            }\n            else {\n                var mayReverse = function (v) {\n                    if (typeof v === \"boolean\") {\n                        if (config.reverse)\n                            return !v;\n                        return v;\n                    }\n                    if (typeof v === \"undefined\") {\n                        return !!config.reverse;\n                    }\n                    return v;\n                };\n                var vmValue = tree.getValueByPath(config.content);\n                if (typeof vmValue === \"function\") {\n                    vmValue = vmValue();\n                }\n                var value = config.value || null;\n                // for {{class}} value as true, use name as className\n                var rev = mayReverse(vmValue);\n                if (rev === true) {\n                    if (value) {\n                        return value;\n                    }\n                    value = Leaf.Util.camelToSlug(config.content);\n                    return value;\n                }\n                else if (rev === false) {\n                    return \"\";\n                }\n                if (rev && rev.toString() && value) {\n                    return value;\n                }\n                if (typeof vmValue === \"undefined\" || vmValue === null) {\n                    return \"\";\n                }\n                return vmValue.toString() || \"\";\n            }\n        }\n        CoreLogic.explainDynamicValue = explainDynamicValue;\n        function getPropertyRoot(str) {\n            return str.split(\".\")[0];\n        }\n        CoreLogic.getPropertyRoot = getPropertyRoot;\n    })(CoreLogic = Leaf.CoreLogic || (Leaf.CoreLogic = {}));\n})(Leaf || (Leaf = {}));\n/// <reference path=\"leaf.ts\"/>\nvar Leaf;\n(function (Leaf) {\n    var Key;\n    (function (Key) {\n        Key[\"0\"] = 48;\n        Key[\"1\"] = 49;\n        Key[\"2\"] = 50;\n        Key[\"3\"] = 51;\n        Key[\"4\"] = 52;\n        Key[\"5\"] = 53;\n        Key[\"6\"] = 54;\n        Key[\"7\"] = 55;\n        Key[\"8\"] = 56;\n        Key[\"9\"] = 57;\n        Key.cmd = 224;\n        var browser = Leaf.Util.browser;\n        if (browser) {\n            if (browser.name === \"firefox\") {\n                Key.cmd = 224;\n            }\n            else if (browser.name === \"opera\") {\n                Key.cmd = 17;\n            }\n            else {\n                Key.cmd = 91;\n            }\n        }\n        else {\n            Key.cmd = 91;\n        }\n        Key.a = 65;\n        Key.b = 66;\n        Key.c = 67;\n        Key.d = 68;\n        Key.e = 69;\n        Key.f = 70;\n        Key.g = 71;\n        Key.h = 72;\n        Key.i = 73;\n        Key.j = 74;\n        Key.k = 75;\n        Key.l = 76;\n        Key.m = 77;\n        Key.n = 78;\n        Key.o = 79;\n        Key.p = 80;\n        Key.q = 81;\n        Key.r = 82;\n        Key.s = 83;\n        Key.t = 84;\n        Key.u = 85;\n        Key.v = 86;\n        Key.w = 87;\n        Key.x = 88;\n        Key.y = 89;\n        Key.z = 90;\n        Key.space = 32;\n        Key.shift = 16;\n        Key.ctrl = 17;\n        Key.alt = 18;\n        Key.left = 37;\n        Key.up = 38;\n        Key.right = 39;\n        Key.down = 40;\n        Key.enter = 13;\n        Key.backspace = 8;\n        Key.escape = 27;\n        Key.del = 46;\n        Key[\"delete\"] = 46;\n        Key.esc = 27;\n        Key.pageup = 33;\n        Key.pagedown = 34;\n        Key.tab = 9;\n        Key.home = 36;\n        Key.end = 35;\n        Key.quote = 222;\n        Key.openBracket = 219;\n        Key.closeBracket = 221;\n        Key.backSlash = 220;\n        Key.slash = 191;\n        Key.equal = 187;\n        Key.comma = 188;\n        Key.period = 190;\n        Key.dash = 189;\n        Key.semiColon = 186;\n        Key.graveAccent = 192;\n    })(Key = Leaf.Key || (Leaf.Key = {}));\n    var Mouse;\n    (function (Mouse) {\n        Mouse.left = 0;\n        Mouse.middle = 1;\n        Mouse.right = 2;\n    })(Mouse = Leaf.Mouse || (Leaf.Mouse = {}));\n})(Leaf || (Leaf = {}));\nvar Leaf;\n(function (Leaf) {\n    Leaf.ValidatorErrors = Leaf.ErrorDoc.build({\n        Invalid: {\n            path: \"path.to.invalid.field\",\n            code: null\n        }\n    });\n    var Validator = /** @class */ (function () {\n        function Validator(currentRouteName, parent) {\n            if (parent === void 0) { parent = null; }\n            this.currentRouteName = currentRouteName;\n            this.parent = parent;\n            this.checkers = [];\n            this.children = [];\n            //return new Proxy(this, {\n            //    get: (obj, prop) => {\n            //        let blacklist = [\"name\"]\n            //        let whitelist = [\"currentReason\", \"currentCode\", \"elementValidator\"]\n            //        if (whitelist.indexOf(prop.toString()) >= 0) return obj[prop]\n            //        return prop in obj && blacklist.indexOf(prop as string) < 0 && obj[prop] || this.field(prop as string)\n            //    }\n            //})\n        }\n        Validator.create = function (name) {\n            return new Validator(name);\n        };\n        Validator.prototype.clone = function (parent) {\n            if (parent === void 0) { parent = this.parent; }\n            var validator = new Validator(this.currentRouteName, parent);\n            validator.children = this.children.map(function (item) { return item.clone(validator); });\n            validator.checkers = this.checkers.map(function (item) { return item.clone(); });\n            return validator;\n        };\n        Validator.prototype.field = function (key) {\n            for (var _i = 0, _a = this.children; _i < _a.length; _i++) {\n                var child_1 = _a[_i];\n                if (child_1.currentRouteName == key) {\n                    return child_1;\n                }\n            }\n            var child = new Validator(key, this);\n            this.children.push(child);\n            return child;\n        };\n        Validator.prototype.with = function (key, handler) {\n            handler(this.field(key));\n            return this;\n        };\n        Validator.prototype.use = function (validator) {\n            var _this = this;\n            this.children = validator.children.map(function (child) { return child.clone(_this); });\n            this.checkers = validator.checkers.map(function (item) { return item.clone(); });\n            return this;\n        };\n        Validator.prototype.each = function () {\n            this.elementValidator;\n            return null;\n        };\n        Validator.prototype.check = function (data, root, parent) {\n            if (root === void 0) { root = data; }\n            if (parent === void 0) { parent = null; }\n            try {\n                for (var _i = 0, _a = this.checkers; _i < _a.length; _i++) {\n                    var checker = _a[_i];\n                    checker.check(data, root, parent);\n                }\n            }\n            catch (e) {\n                var path = this.getRoute().join(\".\");\n                throw new Leaf.ValidatorErrors.Invalid(path + \" \" + e.message, {\n                    path: path,\n                    code: e.code\n                });\n            }\n            if (this.elementValidator) {\n                if (Array.isArray(data)) {\n                    var i = 0;\n                    for (var _b = 0, data_1 = data; _b < data_1.length; _b++) {\n                        var child = data_1[_b];\n                        this.elementValidator.currentRouteName = i.toString();\n                        this.elementValidator.check(child, root, data);\n                        i++;\n                    }\n                }\n                else {\n                    for (var _c = 0, _d = Object.keys(data || {}); _c < _d.length; _c++) {\n                        var key = _d[_c];\n                        this.elementValidator.currentRouteName = key;\n                        this.elementValidator.check(data[key], root, data);\n                    }\n                }\n            }\n            for (var _e = 0, _f = this.children; _e < _f.length; _e++) {\n                var child = _f[_e];\n                if (data !== null && typeof data !== \"undefined\") {\n                    child.check(data[child.currentRouteName], root, data);\n                }\n                else {\n                    child.check(null, root, data);\n                }\n            }\n        };\n        Validator.prototype.reason = function (reason) {\n            Validator.currentReason = reason;\n            return this;\n        };\n        Validator.prototype.code = function (code) {\n            Validator.currentCode = code;\n            return this;\n        };\n        Validator.prototype.addChecker = function (c) {\n            c.reason = Validator.currentReason;\n            c.code = Validator.currentCode;\n            this.checkers.push(c);\n            return this;\n        };\n        Validator.prototype.getRoute = function (index) {\n            var routes = [];\n            if (this.parent)\n                routes.push.apply(routes, this.parent.getRoute());\n            routes.push(this.currentRouteName);\n            if (typeof index == \"number\" || typeof index == \"string\") {\n                routes.push(index);\n            }\n            return routes;\n        };\n        Validator.prototype.string = function () {\n            return this.addChecker(new StringTypeChecker());\n        };\n        Validator.prototype.int = function () {\n            return this.addChecker(new IntTypeChecker());\n        };\n        Validator.prototype.number = function () {\n            return this.addChecker(new NumberTypeChecker());\n        };\n        Validator.prototype.has = function () {\n            return this.addChecker(new HasChecker());\n        };\n        Validator.prototype.lt = function (num) {\n            return this.addChecker(new LtChecker(num));\n        };\n        Validator.prototype.gt = function (num) {\n            return this.addChecker(new GtChecker(num));\n        };\n        Validator.prototype.lte = function (num) {\n            return this.addChecker(new LteChecker(num));\n        };\n        Validator.prototype.gte = function (num) {\n            return this.addChecker(new GteChecker(num));\n        };\n        Validator.prototype.reg = function (reg) {\n            return this.addChecker(new RegCheck(reg));\n        };\n        Validator.prototype.pass = function (fn) {\n            return this.addChecker(new PassChecker(fn));\n        };\n        Validator.currentReason = null;\n        Validator.currentCode = null;\n        return Validator;\n    }());\n    Leaf.Validator = Validator;\n    var Checker = /** @class */ (function () {\n        function Checker(config) {\n            if (config === void 0) { config = null; }\n            this.config = config;\n            this.reason = null;\n            this.code = null;\n        }\n        Checker.prototype.clone = function () {\n            var Cons = this.constructor;\n            var checker = new Cons();\n            // We don't deep copy it, since no one should be able to modify it unless INTENTED.\n            checker.config = this.config;\n            checker.reason = this.reason;\n            checker.code = this.code;\n            return checker;\n        };\n        return Checker;\n    }());\n    var StringTypeChecker = /** @class */ (function (_super) {\n        __extends(StringTypeChecker, _super);\n        function StringTypeChecker() {\n            return _super !== null && _super.apply(this, arguments) || this;\n        }\n        StringTypeChecker.prototype.check = function (data) {\n            if (typeof data != \"string\")\n                throw new Leaf.ValidatorErrors.Invalid(this.reason || \"Not a string\");\n        };\n        return StringTypeChecker;\n    }(Checker));\n    var IntTypeChecker = /** @class */ (function (_super) {\n        __extends(IntTypeChecker, _super);\n        function IntTypeChecker() {\n            return _super.call(this) || this;\n        }\n        IntTypeChecker.prototype.check = function (data) {\n            if (typeof data != \"number\")\n                throw new Leaf.ValidatorErrors.Invalid(this.reason || \"Not a int\");\n            if (Math.floor(data) !== data || isNaN(data))\n                throw new Leaf.ValidatorErrors.Invalid(this.reason || \"Not a int\");\n        };\n        return IntTypeChecker;\n    }(Checker));\n    var NumberTypeChecker = /** @class */ (function (_super) {\n        __extends(NumberTypeChecker, _super);\n        function NumberTypeChecker() {\n            return _super.call(this) || this;\n        }\n        NumberTypeChecker.prototype.check = function (data) {\n            if (typeof data != \"number\")\n                throw new Leaf.ValidatorErrors.Invalid(this.reason || \"Not a number\");\n        };\n        return NumberTypeChecker;\n    }(Checker));\n    var HasChecker = /** @class */ (function (_super) {\n        __extends(HasChecker, _super);\n        function HasChecker() {\n            return _super !== null && _super.apply(this, arguments) || this;\n        }\n        HasChecker.prototype.check = function (data) {\n            if (typeof data == \"undefined\" || data === null) {\n                throw new Error(\"Not exists\");\n            }\n        };\n        return HasChecker;\n    }(Checker));\n    var GtChecker = /** @class */ (function (_super) {\n        __extends(GtChecker, _super);\n        function GtChecker() {\n            return _super !== null && _super.apply(this, arguments) || this;\n        }\n        GtChecker.prototype.check = function (data) {\n            if (data > this.config)\n                return;\n            throw new Leaf.ValidatorErrors.Invalid(this.reason || data + \" not greate \" + this.config);\n        };\n        return GtChecker;\n    }(Checker));\n    var LtChecker = /** @class */ (function (_super) {\n        __extends(LtChecker, _super);\n        function LtChecker() {\n            return _super !== null && _super.apply(this, arguments) || this;\n        }\n        LtChecker.prototype.check = function (data) {\n            if (data < this.config)\n                return;\n            throw new Leaf.ValidatorErrors.Invalid(this.reason || data + \" not less than \" + this.config);\n        };\n        return LtChecker;\n    }(Checker));\n    var GteChecker = /** @class */ (function (_super) {\n        __extends(GteChecker, _super);\n        function GteChecker() {\n            return _super !== null && _super.apply(this, arguments) || this;\n        }\n        GteChecker.prototype.check = function (data) {\n            if (data >= this.config)\n                return;\n            throw new Leaf.ValidatorErrors.Invalid(this.reason || data + \" not greate-or-equal than \" + this.config);\n        };\n        return GteChecker;\n    }(Checker));\n    var LteChecker = /** @class */ (function (_super) {\n        __extends(LteChecker, _super);\n        function LteChecker() {\n            return _super !== null && _super.apply(this, arguments) || this;\n        }\n        LteChecker.prototype.check = function (data) {\n            if (data <= this.config)\n                return;\n            throw new Leaf.ValidatorErrors.Invalid(this.reason || data + \" not less-or-equal than \" + this.config);\n        };\n        return LteChecker;\n    }(Checker));\n    var PassChecker = /** @class */ (function (_super) {\n        __extends(PassChecker, _super);\n        function PassChecker() {\n            return _super !== null && _super.apply(this, arguments) || this;\n        }\n        PassChecker.prototype.check = function (data, root, parent) {\n            try {\n                this.config(data, root, parent);\n            }\n            catch (e) {\n                throw new Leaf.ValidatorErrors.Invalid(e.message || this.reason);\n            }\n        };\n        return PassChecker;\n    }(Checker));\n    var RegCheck = /** @class */ (function (_super) {\n        __extends(RegCheck, _super);\n        function RegCheck() {\n            return _super !== null && _super.apply(this, arguments) || this;\n        }\n        RegCheck.prototype.check = function (data) {\n            this.config.lastIndex = 0;\n            if (this.config.test(data))\n                return;\n            throw new Leaf.ValidatorErrors.Invalid(this.reason || data + \" fail to pass reg exp checks \" + this.config.source);\n        };\n        return RegCheck;\n    }(Checker));\n    // TODO\n    // 1. lt/lte (less than)\n    // 2. gt/gte (greater than)\n    // 3. eq (equal)\n    // 4. is (===)\n    // 5. match(reg exp)\n    // 6. custom( given a function)\n    // 7. string (type string check)\n    // 8. number (type number check)\n    // 9. exists\n    // 10. in (one of given array)\n    // 11. int (is int)\n})(Leaf || (Leaf = {}));\nvar Leaf;\n(function (Leaf) {\n    var ServiceStateModel = /** @class */ (function (_super) {\n        __extends(ServiceStateModel, _super);\n        function ServiceStateModel(service, fields) {\n            if (fields === void 0) { fields = []; }\n            return _super.call(this, service.name, fields) || this;\n        }\n        return ServiceStateModel;\n    }(Leaf.DataSource));\n    Leaf.ServiceStateModel = ServiceStateModel;\n    var Service = /** @class */ (function () {\n        function Service(defaultSettings, settings) {\n            if (defaultSettings === void 0) { defaultSettings = {}; }\n            if (settings === void 0) { settings = {}; }\n            this.isInitialized = false;\n            this.dependencies = [];\n            this.events = new Leaf.EventEmitter();\n            this.apiNames = [];\n            this.api = [];\n            this.settings = Leaf.Util.buildOption(defaultSettings, settings);\n        }\n        Service.prototype.initialize = function () {\n            var args = [];\n            for (var _i = 0; _i < arguments.length; _i++) {\n                args[_i] = arguments[_i];\n            }\n            this.bindAPINames();\n        };\n        Service.prototype.connect = function (delegator) {\n            var _this = this;\n            this.bindAPINames();\n            var _loop_4 = function (name_21) {\n                this_4[name_21] = function (o, callback) {\n                    delegator.invoke(_this.name + \"/\" + name_21, o, callback);\n                };\n            };\n            var this_4 = this;\n            for (var _i = 0, _a = this.apiNames; _i < _a.length; _i++) {\n                var name_21 = _a[_i];\n                _loop_4(name_21);\n            }\n        };\n        Service.prototype.bindAPINames = function () {\n            this.apiNames.length = 0;\n            for (var prop in this) {\n                if (typeof this[prop] !== \"function\")\n                    continue;\n                var v = this[prop];\n                if (v.tag !== \"api\")\n                    continue;\n                v.api = prop;\n                this.apiNames.push(prop);\n            }\n        };\n        Service.prototype.createAPI = function (handler) {\n            if (handler === void 0) { handler = (function () { }); }\n            var withDefaultCallback = (function (o, c) {\n                if (c === void 0) { c = function () { }; }\n                return handler(o, c);\n            });\n            withDefaultCallback.tag = \"api\";\n            return withDefaultCallback;\n        };\n        return Service;\n    }());\n    Leaf.Service = Service;\n    var DependencyManager = /** @class */ (function () {\n        function DependencyManager() {\n            this.context = {};\n            this.onAddDymanicDependency = function (name) { };\n        }\n        DependencyManager.prototype.add = function (name, deps) {\n            if (this.context[name])\n                throw new Error(\"Duplicate dependency entry: \" + name);\n            if (deps && deps.length == 0)\n                deps = null;\n            this.context[name] = deps;\n        };\n        DependencyManager.prototype.resolveDependency = function (name, chain) {\n            if (chain === void 0) { chain = []; }\n            if (typeof this.context[name] === \"undefined\") {\n                this.onAddDymanicDependency(name);\n                if (typeof this.context[name] === \"undefined\") {\n                    throw new Error(name + \" required by \" + chain[chain.length - 1] + \" couldn't be fullfilled.\");\n                }\n            }\n            if (this.context[name] === null)\n                return [];\n            chain = chain.slice();\n            if (chain.indexOf(name) >= 0) {\n                chain.push(name);\n                throw new Error(\"Recursive dependency detected: \" + chain.join(\"\\n=>\"));\n            }\n            chain.push(name);\n            var result = [];\n            var all = [];\n            for (var _i = 0, _a = this.context[name] || []; _i < _a.length; _i++) {\n                var matcher = _a[_i];\n                if (typeof matcher === \"string\") {\n                    if (all.indexOf(matcher) < 0)\n                        all.push(matcher);\n                }\n                else if (matcher instanceof RegExp) {\n                    for (var name_22 in this.context) {\n                        if (matcher.test(name_22) && all.indexOf(name_22) < 0) {\n                            all.push(name_22);\n                        }\n                    }\n                }\n            }\n            for (var _b = 0, all_1 = all; _b < all_1.length; _b++) {\n                var dep = all_1[_b];\n                var deps = this.resolveDependency(dep, chain);\n                for (var _c = 0, deps_1 = deps; _c < deps_1.length; _c++) {\n                    var subDep = deps_1[_c];\n                    if (result.indexOf(subDep) < 0)\n                        result.push(subDep);\n                }\n                result.push(dep);\n            }\n            return result;\n        };\n        DependencyManager.prototype.resolve = function () {\n            var result = [];\n            for (var name_23 in this.context) {\n                var deps = this.resolveDependency(name_23);\n                for (var _i = 0, deps_2 = deps; _i < deps_2.length; _i++) {\n                    var dep = deps_2[_i];\n                    if (result.indexOf(dep) < 0)\n                        result.push(dep);\n                }\n                if (result.indexOf(name_23) < 0)\n                    result.push(name_23);\n            }\n            return result;\n        };\n        return DependencyManager;\n    }());\n    Leaf.DependencyManager = DependencyManager;\n    var ServiceSetupProcedure = /** @class */ (function (_super) {\n        __extends(ServiceSetupProcedure, _super);\n        function ServiceSetupProcedure(services, setupSequence) {\n            var _this = _super.call(this) || this;\n            _this.services = services;\n            _this.setupSequence = setupSequence;\n            _this.data = {};\n            return _this;\n        }\n        ServiceSetupProcedure.prototype.setup = function (callback) {\n            if (!this.data.dones)\n                this.data.dones = [];\n            if (this.state === \"finish\") {\n                callback(null);\n                return;\n            }\n            this.data.dones.push(callback);\n            if (this.state === \"void\") {\n                this.setState(\"prepare\");\n            }\n        };\n        ServiceSetupProcedure.prototype.atPrepare = function () {\n            this.data.todo = this.setupSequence.slice();\n            this.setState(\"setup\");\n        };\n        ServiceSetupProcedure.prototype.atSetup = function () {\n            var _this = this;\n            var name = this.data.todo.shift();\n            if (!name) {\n                this.setState(\"finish\");\n                return;\n            }\n            var service = this.services[name];\n            if (!service) {\n                this.error(new Error(\"Fail to find service name \" + name));\n                return;\n            }\n            if (service.isInitialized) {\n                this.setState(\"setup\");\n                return;\n            }\n            service.services = this.services;\n            console.log(\"Service \" + service.name + \" Initializing\");\n            if (service.initialize) {\n                if (service.initialize.length == 1) {\n                    service.initialize(function (err) {\n                        if (err) {\n                            _this.error(err);\n                            return;\n                        }\n                        service.isInitialized = true;\n                        _this.logInitialized(name);\n                        _this.setState(\"setup\");\n                    });\n                }\n                else {\n                    service.initialize();\n                    service.isInitialized = true;\n                    this.logInitialized(name);\n                    this.setState(\"setup\");\n                }\n            }\n            else {\n                // this service don't need initialization\n                service.isInitialized = true;\n                this.logInitialized(name);\n                this.setState(\"setup\");\n            }\n        };\n        ServiceSetupProcedure.prototype.atFinish = function () {\n            for (var _i = 0, _a = this.data.dones; _i < _a.length; _i++) {\n                var cb = _a[_i];\n                cb();\n            }\n        };\n        ServiceSetupProcedure.prototype.atPanic = function () {\n            for (var _i = 0, _a = this.data.dones; _i < _a.length; _i++) {\n                var cb = _a[_i];\n                cb(this.panicError);\n            }\n        };\n        ServiceSetupProcedure.prototype.logInitialized = function (name) {\n            console.log(\"Service \" + name + \" initialized\");\n        };\n        return ServiceSetupProcedure;\n    }(Leaf.States));\n    Leaf.ServiceSetupProcedure = ServiceSetupProcedure;\n    var ServiceContext = /** @class */ (function () {\n        function ServiceContext(settings) {\n            var _this = this;\n            if (settings === void 0) { settings = {}; }\n            this.settings = settings;\n            this.BuiltInServiceInstances = {};\n            this.services = {};\n            this.dependencyManager = new DependencyManager;\n            // When dependency not met but we have that dependency in our built-in service\n            this.dependencyManager.onAddDymanicDependency = function (name) {\n                var s = _this.BuiltInServiceInstances[name];\n                if (s) {\n                    if (s[\"asBuiltIn\"]) {\n                        s[\"asBuiltIn\"];\n                    }\n                    _this.register(s);\n                }\n            };\n        }\n        ServiceContext.prototype.register = function (s) {\n            this.dependencyManager.add(s.name, s.dependencies || null);\n            this.services[s.name] = s;\n            return s;\n        };\n        ServiceContext.prototype.setup = function (callback) {\n            if (!this.procedure) {\n                this.procedure = new ServiceSetupProcedure(this.services, this.dependencyManager.resolve());\n            }\n            this.procedure.setup(callback);\n        };\n        return ServiceContext;\n    }());\n    Leaf.ServiceContext = ServiceContext;\n})(Leaf || (Leaf = {}));\nvar Leaf;\n(function (Leaf) {\n    var Background;\n    (function (Background) {\n        var ChannelBackgroundEnd = /** @class */ (function () {\n            function ChannelBackgroundEnd() {\n            }\n            return ChannelBackgroundEnd;\n        }());\n        Background.ChannelBackgroundEnd = ChannelBackgroundEnd;\n        var BackgroundLayer = /** @class */ (function () {\n            // preventing inconsistant background/foreground code.\n            function BackgroundLayer(version) {\n                if (version === void 0) { version = \"0\"; }\n                this.version = version;\n            }\n            return BackgroundLayer;\n        }());\n        Background.BackgroundLayer = BackgroundLayer;\n    })(Background = Leaf.Background || (Leaf.Background = {}));\n})(Leaf || (Leaf = {}));\nvar Leaf;\n(function (Leaf) {\n    var Foreground;\n    (function (Foreground) {\n        var ChannelForegroundEnd = /** @class */ (function () {\n            function ChannelForegroundEnd() {\n            }\n            return ChannelForegroundEnd;\n        }());\n        Foreground.ChannelForegroundEnd = ChannelForegroundEnd;\n        var ChannelForegroundLayer = /** @class */ (function () {\n            function ChannelForegroundLayer(version) {\n                if (version === void 0) { version = \"0\"; }\n                this.version = version;\n                this.rpc = new Leaf.RPCComposer();\n                this.invokeBackgroundServiceAPI = this.rpc.createRPCInvokeInterface({ name: \"invokeBackgroundServiceAPI\" });\n                this.connectBackgroundLayer = this.rpc.createRPCInvokeInterface({\n                    name: \"connectBackgroundLayer\"\n                });\n            }\n            return ChannelForegroundLayer;\n        }());\n        Foreground.ChannelForegroundLayer = ChannelForegroundLayer;\n    })(Foreground = Leaf.Foreground || (Leaf.Foreground = {}));\n})(Leaf || (Leaf = {}));\nvar Leaf;\n(function (Leaf) {\n    var Application = /** @class */ (function () {\n        function Application() {\n            this.foregroundInitialize = function () { };\n            this.backgroundInitialize = function () { };\n            this.serviceContext = new Leaf.ServiceContext;\n        }\n        Application.prototype.initialize = function () {\n            var _this = this;\n            this.serviceContext.setup(function () {\n                _this.foregroundInitialize();\n            });\n        };\n        Application.prototype.implements = function (lifecircle) {\n            for (var prop in lifecircle) {\n                this[prop] = lifecircle[prop];\n            }\n        };\n        return Application;\n    }());\n    Leaf.Application = Application;\n})(Leaf || (Leaf = {}));\nvar Leaf;\n(function (Leaf) {\n    var Referencer = /** @class */ (function () {\n        function Referencer() {\n            this.events = new Leaf.EventEmitter();\n            this.counter = 0;\n        }\n        Referencer.prototype.ref = function () {\n            this.counter += 1;\n            if (this.counter == 1) {\n                this.events.emit(\"init\");\n            }\n            else {\n                this.events.emit(\"ref\");\n            }\n        };\n        Referencer.prototype.deref = function () {\n            this.counter -= 1;\n            if (this.counter == 0) {\n                this.events.emit(\"release\");\n            }\n            else if (this.counter > 0) {\n                this.events.emit(\"deref\");\n            }\n            else {\n                console.error(\"Invalid Deref\");\n            }\n        };\n        return Referencer;\n    }());\n    Leaf.Referencer = Referencer;\n    var OwnerReferencer = /** @class */ (function () {\n        function OwnerReferencer() {\n            this.events = new Leaf.EventEmitter();\n            this.refs = [];\n        }\n        OwnerReferencer.prototype.ttl = function (time) {\n            return new OwnerReferenceCachier(this, time);\n        };\n        OwnerReferencer.prototype.release = function () {\n            this.refs.length = 0;\n            this.events.emit(\"release\");\n        };\n        OwnerReferencer.prototype.getCounter = function () {\n            return this.refs.reduce(function (a, b) {\n                return a + b.counter;\n            }, 0);\n        };\n        OwnerReferencer.prototype.refBy = function (who) {\n            for (var _i = 0, _a = this.refs; _i < _a.length; _i++) {\n                var ref = _a[_i];\n                if (ref.owner == who) {\n                    ref.counter += 1;\n                    this.events.emit(\"ref\");\n                    return true;\n                }\n            }\n            this.refs.push({\n                owner: who,\n                counter: 1\n            });\n            if (this.getCounter() == 1) {\n                this.events.emit(\"init\");\n            }\n            else {\n                this.events.emit(\"ref\");\n            }\n            return true;\n        };\n        OwnerReferencer.prototype.derefBy = function (who) {\n            var i = 0;\n            for (var _i = 0, _a = this.refs; _i < _a.length; _i++) {\n                var ref = _a[_i];\n                if (ref.owner == who) {\n                    ref.counter -= 1;\n                    if (ref.counter < 0) {\n                        console.error(\"Invalid by \", who);\n                        throw new Error(\"Invalid Deref by\");\n                    }\n                    if (this.getCounter() <= 0) {\n                        this.events.emit(\"release\");\n                    }\n                    else {\n                        this.events.emit(\"deref\");\n                    }\n                    return true;\n                }\n                i++;\n            }\n            console.error(\"Invalid by \", who);\n            throw new Error(\"Invalid derefence by\");\n        };\n        return OwnerReferencer;\n    }());\n    Leaf.OwnerReferencer = OwnerReferencer;\n    var MultipleReference = /** @class */ (function () {\n        function MultipleReference() {\n            this.refs = [];\n            this.targetRefs = [];\n            this.events = new Leaf.EventEmitter();\n        }\n        MultipleReference.prototype.refTarget = function (target) {\n            for (var _i = 0, _a = this.targetRefs; _i < _a.length; _i++) {\n                var item = _a[_i];\n                if (item.target === target) {\n                    item.counter += 1;\n                    this.events.emit(\"ref\", target);\n                    return true;\n                }\n            }\n            this.targetRefs.push({\n                target: target,\n                counter: 1\n            });\n            this.events.emit(\"init\", target);\n            return true;\n        };\n        MultipleReference.prototype.derefTarget = function (target, n) {\n            if (n === void 0) { n = 1; }\n            var i = 0;\n            for (var _i = 0, _a = this.targetRefs; _i < _a.length; _i++) {\n                var item = _a[_i];\n                if (item.target === target) {\n                    item.counter -= n;\n                    if (item.counter == 0) {\n                        this.targetRefs.splice(i, 1);\n                        this.events.emit(\"release\", target);\n                    }\n                    else {\n                        this.events.emit(\"deref\", target);\n                    }\n                    return true;\n                }\n                i++;\n            }\n            return false;\n        };\n        MultipleReference.prototype.derefAll = function (who) {\n            var arr = this.refs;\n            for (var i = 0; i < arr.length; i++) {\n                var item = arr[i];\n                if (item.owner === who) {\n                    arr.splice(i, 1);\n                    i--;\n                    this.derefTarget(item.target, item.counter);\n                }\n            }\n        };\n        MultipleReference.prototype.refBy = function (who, target) {\n            var arr = this.refs;\n            for (var i = 0; i < arr.length; i++) {\n                var item = arr[i];\n                if (item.owner === who && target == item.owner) {\n                    item.counter += 1;\n                    return this.refTarget(target);\n                }\n            }\n            this.refs.push({\n                target: target,\n                owner: who,\n                counter: 1\n            });\n            return this.refTarget(target);\n        };\n        MultipleReference.prototype.derefBy = function (who, target) {\n            if (!target) {\n                return this.derefAll(who);\n            }\n            var arr = this.refs;\n            for (var i = 0; i < arr.length; i++) {\n                var item = arr[i];\n                if (item.owner === who && target == item.owner) {\n                    item.counter -= 1;\n                    if (item.counter <= 0) {\n                        arr.splice(i, 1);\n                    }\n                    return this.derefTarget(target);\n                }\n            }\n            return false;\n        };\n        return MultipleReference;\n    }());\n    Leaf.MultipleReference = MultipleReference;\n    var OwnerReferenceCachier = /** @class */ (function () {\n        function OwnerReferenceCachier(referencer, time) {\n            var _this = this;\n            if (time === void 0) { time = 10000; }\n            this.referencer = referencer;\n            this.time = time;\n            this.timer = null;\n            this.referencer.refBy(this);\n            this.referencer.events.listenBy(this, \"deref\", function () {\n                var counter = _this.referencer.getCounter();\n                // Only me reference\n                if (counter == 1) {\n                    _this.debounceDeref();\n                }\n            });\n            this.referencer.events.listenBy(this, \"ref\", function () {\n                _this.stopDebounceDeref();\n            });\n        }\n        OwnerReferenceCachier.prototype.debounceDeref = function () {\n            var _this = this;\n            this.timer = setTimeout(function () {\n                _this.referencer.derefBy(_this);\n                _this.referencer.events.stopListenBy(_this);\n            }, this.time);\n        };\n        OwnerReferenceCachier.prototype.stopDebounceDeref = function () {\n            clearTimeout(this.timer);\n        };\n        return OwnerReferenceCachier;\n    }());\n    Leaf.OwnerReferenceCachier = OwnerReferenceCachier;\n})(Leaf || (Leaf = {}));\nvar Leaf;\n(function (Leaf) {\n    var Life = /** @class */ (function () {\n        function Life(owner) {\n            this.fns = [];\n            this.depends = [];\n            this.children = [];\n            this.uses = [];\n            this.isDestroyed = false;\n            this.events = new Leaf.EventEmitter();\n            this.keeper = Math.random();\n            this.owner = owner;\n            this.connect(new Leaf.OwnerReferencer());\n        }\n        Life.prototype.connect = function (referencer) {\n            var _this = this;\n            if (this.referencer)\n                this.referencer.events.stopListenBy(this.owner);\n            this.referencer = referencer;\n            this.referencer.events.listenBy(this.owner, \"release\", function () {\n                _this.kill();\n            });\n            return this;\n        };\n        Life.prototype.dead = function (fn) {\n            this.fns.push(fn);\n            return this;\n        };\n        Life.prototype.containBy = function (owner) {\n            owner.life.contain(owner);\n            return this;\n        };\n        Life.prototype.contain = function (item) {\n            if (!item)\n                return;\n            this.children.push(item);\n            return this;\n        };\n        Life.prototype.purge = function (item) {\n            if (!item)\n                return;\n            this.children = this.children.filter(function (child) {\n                if (child === item) {\n                    child.life.kill();\n                    return false;\n                }\n                return true;\n            });\n            return this;\n        };\n        Life.prototype.use = function (obj) {\n            var _this = this;\n            if (!obj)\n                return this;\n            if (!obj.life)\n                return;\n            if (!obj.life.referencer)\n                return;\n            obj.life.referencer.refBy(this.owner);\n            this.uses.push(obj);\n            obj.life.events.listenBy(this.owner, \"dead\", function () {\n                obj.life.events.stopListenBy(_this);\n                if (obj.events) {\n                    obj.events.stopListenBy(_this);\n                }\n            });\n            return this;\n        };\n        Life.prototype.unuse = function (obj) {\n            var _this = this;\n            if (!obj)\n                return;\n            this.uses = this.uses.filter(function (item) {\n                if (item === obj) {\n                    item.life.referencer.derefBy(_this.owner);\n                    return false;\n                }\n                return true;\n            });\n            return this;\n        };\n        Life.prototype.need = function (obj) {\n            var _this = this;\n            this.depends.push(obj);\n            obj.events.listenBy(this.owner, \"dead\", function () {\n                _this.kill();\n            });\n            this.use(obj);\n            return this;\n        };\n        Life.prototype.kill = function () {\n            if (this.isDestroyed)\n                return;\n            this.isDestroyed = true;\n            this.referencer.events.stopListenBy(this.owner);\n            for (var _i = 0, _a = this.uses; _i < _a.length; _i++) {\n                var obj = _a[_i];\n                obj.life.referencer.derefBy(this.owner);\n                obj.life.events.stopListenBy(this.owner);\n                if (obj.events)\n                    obj.events.stopListenBy(this.owner);\n            }\n            for (var _b = 0, _c = this.children; _b < _c.length; _b++) {\n                var obj = _c[_b];\n                obj.life.kill();\n                obj.life.events.stopListenBy(this.owner);\n                if (obj.events)\n                    obj.events.stopListenBy(this.owner);\n            }\n            for (var _d = 0, _e = this.depends; _d < _e.length; _d++) {\n                var obj = _e[_d];\n                obj.life.events.stopListenBy(this.owner);\n                if (obj.events)\n                    obj.events.stopListenBy(this.owner);\n            }\n            for (var _f = 0, _g = this.fns; _f < _g.length; _f++) {\n                var fn = _g[_f];\n                fn();\n            }\n            this.events.emit(\"dead\");\n        };\n        Life.prototype.keep = function () {\n            this.referencer.refBy(this.keeper);\n            return this;\n        };\n        Life.prototype.unkeep = function () {\n            this.referencer.derefBy(this.keeper);\n            return this;\n        };\n        Life.prototype.ttl = function (time) {\n            this.referencer.ttl(time);\n            return this;\n        };\n        return Life;\n    }());\n    Leaf.Life = Life;\n})(Leaf || (Leaf = {}));\nvar Leaf;\n(function (Leaf) {\n    var ReadyBehavior = /** @class */ (function () {\n        function ReadyBehavior() {\n            this.isReady = false;\n            this.readyCallbacks = Leaf.SharedCallbacks.create();\n            this.counter = 0;\n            this.debug = false;\n            this.events = new Leaf.EventEmitter();\n        }\n        ReadyBehavior.prototype.yes = function () {\n            //if (this.isReady) {\n            //    throw new Error(\"Already ready\")\n            //}\n            if (this.counter++ > 0 && this.debug) {\n                console.trace();\n            }\n            this.isReady = true;\n            this.events.emit(\"ready\");\n            this.readyCallbacks();\n        };\n        ReadyBehavior.prototype.error = function (err) {\n            this.readyCallbacks(err);\n        };\n        ReadyBehavior.prototype.no = function () {\n            if (!this.isReady) {\n                throw new Error(\"Not ready\");\n            }\n            this.isReady = false;\n            this.events.emit(\"unready\");\n            this.readyCallbacks(new Error(\"Won't ready, ready.no() is specified\"));\n        };\n        ReadyBehavior.prototype.whenReady = function (cb) {\n            if (this.isReady) {\n                cb();\n            }\n            else {\n                this.readyCallbacks.push(cb);\n            }\n        };\n        return ReadyBehavior;\n    }());\n    Leaf.ReadyBehavior = ReadyBehavior;\n    var FrameBehavior = /** @class */ (function () {\n        function FrameBehavior() {\n            this.interval = 1000;\n            this.framer = function (callback) {\n                callback();\n            };\n            this.isStart = false;\n            this.isFrameActive = false;\n            this.timer = null;\n            this.timeMode = \"between\";\n        }\n        FrameBehavior.prototype.setInterval = function (interval) {\n            this.interval = interval;\n            return this;\n        };\n        FrameBehavior.prototype.frame = function (fn) {\n            this.framer = fn;\n            return this;\n        };\n        FrameBehavior.prototype.start = function () {\n            if (this.isStart)\n                return;\n            this.isStart = true;\n            this.do();\n            return this;\n        };\n        FrameBehavior.prototype.stop = function () {\n            if (!this.isStart)\n                return;\n            this.isStart = false;\n            clearTimeout(this.timer);\n            return this;\n        };\n        FrameBehavior.prototype.do = function () {\n            var _this = this;\n            var begin = Date.now();\n            this.isFrameActive = true;\n            var callback = function () {\n                _this.isFrameActive = false;\n                if (!_this.isStart)\n                    return;\n                var pass = Date.now() - begin;\n                var interval = _this.interval;\n                if (_this.timeMode == \"include\") {\n                    interval = Math.max(0, interval - pass);\n                }\n                _this.timer = setTimeout(function () {\n                    _this.do();\n                }, interval);\n            };\n            this.framer(callback);\n            if (this.framer.length == 0) {\n                callback();\n            }\n        };\n        FrameBehavior.prototype.mode = function (mode) {\n            this.timeMode = mode;\n            return this;\n        };\n        return FrameBehavior;\n    }());\n    Leaf.FrameBehavior = FrameBehavior;\n})(Leaf || (Leaf = {}));\nvar Leaf;\n(function (Leaf) {\n    var Debouncer = /** @class */ (function () {\n        function Debouncer(option) {\n            this.option = option;\n            this.previousEmit = 0;\n            this.timer = null;\n        }\n        Debouncer.prototype.debounce = function (fn) {\n            var _this = this;\n            clearTimeout(this.timer);\n            if (Date.now() - this.previousEmit > this.option.maxTime) {\n                this.previousEmit = Date.now();\n                fn();\n                return;\n            }\n            this.timer = setTimeout(function () {\n                _this.previousEmit = Date.now();\n                fn();\n            }, this.option.time);\n        };\n        return Debouncer;\n    }());\n    Leaf.Debouncer = Debouncer;\n    var GroupDebouncer = /** @class */ (function () {\n        function GroupDebouncer(option) {\n            this.option = option;\n            this.debouncers = {};\n        }\n        GroupDebouncer.prototype.debounce = function (name, fn) {\n            if (!this.debouncers[name]) {\n                this.debouncers[name] = new Debouncer(this.option);\n            }\n            this.debouncers[name].debounce(fn);\n        };\n        return GroupDebouncer;\n    }());\n    Leaf.GroupDebouncer = GroupDebouncer;\n})(Leaf || (Leaf = {}));\n/// <reference path=\"type.d.ts\"/>\n/// <reference path=\"types.ts\"/>\n/// <reference path=\"logger.ts\" />\n/// <reference path=\"property.ts\" />\n/// <reference path=\"serialize.ts\" />\n/// <reference path=\"util.ts\" />\n/// <reference path=\"condition.ts\"/>\n/// <reference path=\"render.ts\" />\n/// <reference path=\"events.ts\" />\n/// <reference path=\"states.ts\" />\n/// <reference path=\"errors.ts\" />\n/// <reference path=\"apiFactory.ts\" />\n/// <reference path=\"history.ts\" />\n/// <reference path=\"model.ts\" />\n/// <reference path=\"namespace.ts\" />\n/// <reference path=\"viewModel.ts\" />\n/// <reference path=\"widgetBase.ts\" />\n/// <reference path=\"widget.ts\" />\n/// <reference path=\"list.ts\" />\n/// <reference path=\"rpcCenter.ts\" />\n/// <reference path=\"coreLogic.ts\"/>\n/// <reference path=\"etc.ts\"/>\n/// <reference path=\"validator.ts\"/>\n/// <reference path=\"service.ts\"/>\n/// <reference path=\"background.ts\"/>\n/// <reference path=\"foreground.ts\"/>\n/// <reference path=\"application.ts\"/>\n/// <reference path=\"referencer.ts\"/>\n/// <reference path=\"life.ts\"/>\n/// <reference path=\"behavior.ts\"/>\n/// <reference path=\"debounce.ts\"/>\nvar Leaf;\n(function (Leaf) {\n    if (typeof module != \"undefined\") {\n        module.exports = Leaf;\n    }\n    else {\n        window[\"Leaf\"] = Leaf;\n    }\n})(Leaf || (Leaf = {}));\n"]}