{"version":3,"sources":["../node_modules/brew-js/util/path.js","../node_modules/brew-js/include/zeta-dom/dom.js","../node_modules/brew-js/include/zeta-dom/domUtil.js","../node_modules/brew-js-react/include/external/waterpipe.js","../node_modules/brew-js-react/include/external/jquery.js","../node_modules/brew-js/extension/router.js","../node_modules/brew-js/extension/scrollable.js","../node_modules/brew-js/extension/i18n.js","../node_modules/brew-js/libCheck.js","../node_modules/brew-js/app.js","../node_modules/brew-js/include/zeta-dom/util.js","../node_modules/brew-js/extension/viewport.js","../node_modules/brew-js/util/common.js","../node_modules/brew-js/var.js","../node_modules/brew-js/util/console.js","../node_modules/brew-js/dom.js","../node_modules/brew-js/anim.js","../node_modules/brew-js/include/zeta-dom/domLock.js","../node_modules/brew-js/errorCode.js","../node_modules/brew-js/include/external/promise-polyfill.js","../node_modules/brew-js/include/zeta-dom/observe.js","../node_modules/brew-js/include/zeta-dom/cssUtil.js","../node_modules/brew-js-react/include/brew-js/app.js","../node_modules/brew-js-react/include/zeta-dom/dom.js","../node_modules/brew-js-react/dialog.js","../node_modules/brew-js-react/app.js","../node_modules/brew-js-react/include/brew-js/defaults.js","../node_modules/brew-js-react/view.js","../node_modules/brew-js-react/hooks.js","../node_modules/brew-js-react/i18n.js","../node_modules/brew-js-react/mixins/StaticAttributeMixin.js","../node_modules/brew-js-react/mixins/Mixin.js","../node_modules/brew-js-react/mixins/StatefulMixin.js","../node_modules/brew-js-react/mixins/ClassNameMixin.js","../node_modules/brew-js-react/mixins/AnimateMixin.js","../node_modules/brew-js-react/mixins/AnimateSequenceItemMixin.js","../node_modules/brew-js-react/mixins/AnimateSequenceMixin.js","../node_modules/brew-js-react/mixins/ErrorHandlerMixin.js","../node_modules/brew-js-react/mixins/FlyoutToggleMixin.js","../node_modules/brew-js-react/mixins/FlyoutMixin.js","../node_modules/brew-js-react/mixins/FocusStateMixin.js","../node_modules/brew-js-react/mixins/LoadingStateMixin.js","../node_modules/brew-js-react/mixins/ScrollableMixin.js","../node_modules/brew-js-react/mixin.js","../node_modules/brew-js/defaults.js","../node_modules/brew-js/include/external/waterpipe.js","../node_modules/brew-js/domAction.js","../node_modules/brew-js/include/external/jquery.js","../node_modules/brew-js/core.js","../node_modules/brew-js/index.js"],"names":["defaultPort","http","https","baseUrl","setBaseUrl","b","normalizePath","combinePath","a","indexOf","path","resolveDotDir","returnEmpty","test","document","createElement","href","RegExp","$1","origin","protocol","hostname","port","slice","pathname","search","hash","String","replace","segments","split","j","length","splice","join","removeQueryAndHash","pos1","pos2","Math","min","withBaseUrl","url","isSubPathOf","toAbsoluteUrl","location","toRelativeUrl","len","substr","toSegments","map","decodeURIComponent","dom","waterpipe","window","require","module","exports","jQuery","_","createPrivateStore","parsedRoutes","sessionStorage","root","pass","fromPathname","toPathname","fromRoutePath","toRoutePath","matchRoute","route","ignoreExact","parseRoute","isArray","getCurrentQuery","RoutePattern","props","extend","this","minLength","tokens","params","v","c","d","re","push","name","bind","toLowerCase","pattern","exact","deepFreeze","createRouteState","encodeURIComponent","exclude","minPath","maxPath","matchRouteByParams","routes","partial","single","valid","i","has","varname","pick","keys","Route","app","initialPath","self","state","each","parse","current","lastMatch","handleChanges","watch","Object","preventExtensions","getOwnPropertyNames","forEach","prop","defineObservableProperty","isUndefinedOrNull","previous","routeChanged","equal","remainingSegments","set","definePrototype","Array","match","index","value","part","iequal","any","matched","toString","key","result","getPath","isPlainObject","kv","navigate","toJSON","watchable","prototype","addExtension","options","pendingState","basePath","currentPath","redirectSource","currentIndex","indexOffset","lastState","states","createNavigateResult","id","originalPath","navigated","freeze","redirected","createState","promise","resolved","resolvePromise","noop","rejectPromise","pathNoQuery","handled","Promise","resolve_","reject_","reset","forward","other","then","data","resolve","reject","emit","handleable","error","errorWithCode","ErrorCode","updatePath","history","replaceState","done","applyState","callback","appReady","locked","cancelLock","setImmediateOnce","handlePathChange","pushState","resolvePath","currentState","randomId","max","setItem","JSON","stringify","popState","isNative","step","isLocked","go","isRoutePath","parsedState","decodeURI","fullPath","processPageChange","deferred","deferrable","waitFor","always","newPath","console","log","oldPathname","oldStateId","newStateId","notifyAsync","newValue","explicitBaseUrl","initialState","queryParam","getQueryParam","includeQuery","define","back","defaultPath","defineOwnProperty","findIndex","getItem","apply","e","on","defaultOptions","bounce","DOMMatrix","WebKitCSSMatrix","MSCSSMatrix","store","getState","container","childClass","refresh","$","scrollable","updateScrollIntoView","m","getComputedStyle","transform","rootRect","getRect","thisRect","isInView","rectIntersects","translate","f","getClass","attributes","animateIn","animateOut","watchElements","selectorForAttr","nodes","filter","closest","addClass","isControlledScroll","timeout","dir","getAttribute","paged","selector","persistScroll","hasAttribute","savedOffset","scrolling","needRefresh","get","setState","obj","setVar","scrollTo","align","item","isVisible","orientation","getVar","handle","matchWord","hScroll","vScroll","content","pageItem","snapToPage","scrollStart","eventSource","scrollMove","scrollEnd","registerCleanup","drag","beginDrag","getContentRect","target","rect","padding","top","left","right","bottom","scrollBy","origX","origY","x","y","statechange","newIndex","width","pageIndex","scrollStop","clearTimeout","setTimeout","hasAsync","restoreScroll","offset","combineFn","initScrollable","focusable","setTimeoutOnce","$scrollables","selectIncludeSelf","add","parents","toggleClass","isElementActive","originalEvent","event","modalElement","body","triggerHandler","Event","keyCode","toDictionary","languages","dict","getCanonicalValue","detectLanguage","defaultLanguage","userLanguages","navigator","language","routeParam","cookie","_cookie","setLanguage","newLangauge","reloadOnChange","reload","Error","defineHiddenProperty","appInit","featureDetections","dependencies","extensions","exactTargetWrapper","handler","context","arguments","initExtension","deps","counter","grep","wrapper","loaded","defineUseMethod","method","camel","App","element","bubbles","is","Node","_define","beforeInit","isFunction","call","detect","names","supports","resolveAll","warn","when","noChildren","handlers","arr","addSelectHandlers","matchElement","beforeUpdate","hookBeforeUpdate","ready","defaults","fn","throwNotFunction","mountElement","install","autoInit","addDetect","aspectRatio","viewportWidth","viewportHeight","setOrientation","visualViewport","useAvailOrInner","IS_TOUCH","platform","checkViewportSize","triggerEvent","height","availWidth","screen","availHeight","offsetWidth","innerWidth","innerHeight","offsetHeight","previousAspectRatio","either","preloadImagesCache","loadScriptCache","getAttrValues","values","isBoolAttr","hasAttr","getAttr","attr","setAttr","setAttribute","copyAttr","src","dst","getFormValues","form","elements","defineGetterProperty","type","checked","getCookie","setCookie","expiry","Date","now","toGMTString","deleteCookie","delete","api","extra","methods","token","request","watchOnce","headers","Authorization","ajax","dataType","success","response","getTokenFromResponse","status","responseJSON","message","statusText","defineAliasProperty","getJSON","loadScript","reduce","script","nomodule","addEventListener","head","appendChild","addStyleSheet","media","link","rel","preloadImages","urls","ms","testValue","isCssUrlValue","$2","$3","iterateNode","createNodeIterator","node","matchSelector","backgroundImage","promises","preloadUrls","every","setPromiseTimeout","varAttrs","loading","tree","InheritedNodeTree","dataset","eval","trim","getDeclaredVar","globals","resetToNull","initValues","evalAttr","undefined","findVarContext","s","getNode","getPrototypeOf","hasOwnProperty","setNode","hasUpdated","batch","markUpdated","processStateChange","declareVar","newValues","resetVar","descendants","hasDataAttributes","evalExpression","template","evalTemplate","html","attrName","templateMode","updatedNodes","formatMessage","makeArray","Element","tagName","className","_typeof","json","groupLog","close","groupCollapsed","groupEnd","updatedElements","Set","pendingDOMUpdates","Map","preupdateHandlers","matchElementHandlers","selectorHandlers","transformationHandlers","renderHandlers","batchCounter","stateChangeLock","getComponentState","ns","updateDOM","suppressEvent","setClass","textContent","innerHTML","css","mergeDOMUpdates","processTransform","applyDOMUpdates","transformed","containsOrEquals","not","size","unbindHandlers","disposed","setImmediate","arrRemove","handleAsync","isThenable","makeAsync","suppressAnim","updatedProps","domUpdates","mapGet","uniqueSort","clear","oldValues","parentNode","parent","visited","reverse","processRender","animScopes","animParent","groupElements","cur","haystack","mapRemove","doUpdate","prevStateChangeLock","mountedElements","firedOnRoot","index2","w","mounted","preventLeave","suppressPrompt","addTemplate","clone","appendTo","addTransformer","addRenderer","customAnimateIn","customAnimateOut","animatingElements","nextId","handleAnimation","trigger","timeoutReject","timeoutResolve","catchAsync","animateElement","cssClass","eventName","customAnimation","runCSSTransition","delay","parseFloat","attrValue","scope","filterCallback","animationType","animationTrigger","$innerScope","find","$elements","excludeSelf","$target","removeClass","removeAttr","addAnimateIn","addAnimateOut","networkError","resourceError","apiError","validationFailed","navigationCancelled","navigationRejected","brew","createRoot","ReactDOM","createDialog","reactRoot","_closeDialog","closeFlyout","removeNode","onClose","onRender","unmount","unmountComponentAtNode","open","retainFocus","activeElement","modal","setModal","dialogProps","closeDialog","onCommit","pipe","lock","render","openFlyout","preventNavigation","onOpen","app_","react","routeMap","usedParams","sortedViews","StateContext","React","createContext","active","ViewContainer","Component","stateId","getCurrentParams","view","includeAll","maxParams","matchers","pos","last","concat","minParams","sortViews","matchCount","matchViewParams","useViewContainerState","useContext","isViewMatched","matchView","views","sort","registerView","factory","routeParams","useAsync","ref","useRef","onComponentLoaded","rootProps","combineRef","elementRef","children","renderView","shift","defaultView","linkTo","newParams","navigateTo","redirectTo","componentDidMount","componentWillUnmount","setActive","getViewComponent","currentViewComponent","forceUpdate","componentDidCatch","parentElement","lastChild","V","targetPath","prevElement","currentElement","prevView","currentView","Provider","ViewStateContainer","executeOnce","child","Fragment","emitter","ZetaEventContainer","getCurrentStates","ViewState","useAppReady","sReady","useState","setReady","useEffect","useRouteParam","defaultValue","setValue","useRouteState","provider","cache","uniqueId","ViewStateProvider","onPopState","empty","create","toPrimitive","Symbol","TString","createCallback","__html","lazy","useLanguage","useObservableProperty","makeTranslation","resources","defaultLang","getTranslation","prefix","noEncode","lang","str","getTranslationCallback","useTranslation","t","_keys","StaticAttributeMixin","Mixin","getCustomAttributes","next","getRef","getClassNames","dispose","use","args","mixins","refs","classNames","MixinRefImpl","mixin","StatefulMixin","WeakSet","flush","getMixin","initState","setAdd","initElement","onDispose","inherit","ClassNameMixinSuper","checkState","isAsync","prev","classList","contains","cb","onClassNameUpdated","ClassNameMixin","watchAttributes","includes","prevState","AnimateMixinSuper","AnimateMixin","effects","with","withEffects","AnimateSequenceItemMixinSuper","AnimateSequenceItemMixin","AnimateSequenceMixinSuper","animateSequenceMixinCounter","AnimateSequenceMixin","ErrorHandlerMixinSuper","ErrorHandlerMixin","catch","code","isErrorMatched","FlyoutToggleMixinSuper","FlyoutToggleMixin","flyoutMixin","FlyoutMixinSuper","valueMap","WeakMap","flyoutMixinCounter","FlyoutMixin","tabThrough","isFlyoutOpened","animating","visible","toggle","swipeToDismiss","onToggleState","opened","onVisibilityChanged","animationstart","animationcomplete","closing","FocusStateMixinSuper","FocusStateMixin","focusin","focused","source","focusout","LoadingStateMixinSuper","LoadingStateMixin","asyncStart","asyncEnd","cancelled","ScrollableMixinSuper","ScrollableMixin","scrollableTarget","extendSelf","createUseFunction","ctor","useMixin","withOptions","direction","pagedItemSelector","onPageIndexChanged","useAnimateSequenceMixin","useFlyoutMixin","useFocusStateMixin","useLoadingStateMixin","useScrollableMixin","useMixinRef","waterpipe_","pipes","varargs","o","hasArgs","raw","SELECTOR_FOCUSABLE","flyoutStates","executedAsyncActions","asyncActions","addAsyncAction","flyout","releaseModal","closeIfOpened","selectClosestRelative","focus","closeHandler","swipeDismiss","preventDefault","gesture","tabindexMap","tabRoot","setTabIndex","tabIndex","newRoot","stopImmediatePropagation","currentTarget","executed","returnValue","isImmediatePropagationStopped","dispatchDOMMouseEvent","isDefaultPrevented","stopPropagation","features","_objectSpread","commonUtil","animation","domAction"],"mappings":"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","file":"vendors~main~8dbb01be.js?version=20261028","sourcesContent":["const defaultPort = {\r\n    http: 80,\r\n    https: 443\r\n};\r\n\r\nexport var baseUrl = '/';\r\n\r\n/**\r\n * @param {string} b\r\n */\r\nexport function setBaseUrl(b) {\r\n    baseUrl = normalizePath(b, true);\r\n}\r\n\r\n/**\r\n * @param {string} a\r\n * @param {string} b\r\n */\r\nexport function combinePath(a, b) {\r\n    a = normalizePath(a);\r\n    b = normalizePath(b);\r\n    if (b === '/') {\r\n        return a;\r\n    }\r\n    if (a === '/' || b.indexOf('://') > 0) {\r\n        return b;\r\n    }\r\n    return a + b;\r\n}\r\n\r\n/**\r\n * @param {string} path\r\n * @param {boolean=} resolveDotDir\r\n * @param {boolean=} returnEmpty\r\n */\r\nexport function normalizePath(path, resolveDotDir, returnEmpty) {\r\n    if (!path || path === '/') {\r\n        return returnEmpty ? '' : '/';\r\n    }\r\n    if (/(^(?:[a-z0-9]+:)?\\/\\/)|\\?|#/.test(path)) {\r\n        var a = document.createElement('a');\r\n        a.href = path;\r\n        return ((RegExp.$1 && (a.origin || (a.protocol + '//' + a.hostname + (a.port && +a.port !== defaultPort[a.protocol.slice(0, -1)] ? ':' + a.port : '')))) + normalizePath(a.pathname, resolveDotDir, true) || '/') + a.search + a.hash;\r\n    }\r\n    path = String(path).replace(/\\/+(\\/|$)/g, '$1');\r\n    if (resolveDotDir && /(^|\\/)\\.{1,2}(\\/|$)/.test(path)) {\r\n        var segments = path.split('/');\r\n        for (var j = 0; j < segments.length;) {\r\n            if (segments[j] === '.' || (segments[j] === '..' && !j)) {\r\n                segments.splice(j, 1);\r\n            } else if (segments[j] === '..') {\r\n                segments.splice(--j, 2);\r\n            } else {\r\n                j++;\r\n            }\r\n        }\r\n        path = segments.join('/');\r\n    }\r\n    return path[0] === '/' ? path : '/' + path;\r\n}\r\n\r\nexport function removeQueryAndHash(path) {\r\n    var pos1 = path.indexOf('?') + 1;\r\n    var pos2 = path.indexOf('#') + 1;\r\n    if (!pos1 && !pos2) {\r\n        return path;\r\n    }\r\n    return path.slice(0, Math.min(pos1 || pos2, pos2 || pos1) - 1);\r\n}\r\n\r\n/**\r\n * @param {string} url\r\n */\r\nexport function withBaseUrl(url) {\r\n    url = normalizePath(url);\r\n    return baseUrl && url[0] === '/' && !isSubPathOf(url, baseUrl) ? combinePath(baseUrl, url) : url;\r\n}\r\n\r\n/**\r\n * @param {string} url\r\n */\r\nexport function toAbsoluteUrl(url) {\r\n    return url.indexOf('://') > 0 ? url : location.origin + withBaseUrl(url);\r\n}\r\n\r\n/**\r\n * @param {string} url\r\n */\r\nexport function toRelativeUrl(url) {\r\n    return isSubPathOf(url, location.origin) || url;\r\n}\r\n\r\n/**\r\n * @param {string} a\r\n * @param {string} b\r\n */\r\nexport function isSubPathOf(a, b) {\r\n    var len = b.length;\r\n    return a.substr(0, len) === b && (!a[len] || /[/?#]/.test(a[len]) || b[len - 1] === '/') && normalizePath(a.slice(len));\r\n}\r\n\r\n/**\r\n * @param {string} path\r\n */\r\nexport function toSegments(path) {\r\n    path = normalizePath(path);\r\n    return path === '/' ? [] : path.slice(1).split('/').map(decodeURIComponent);\r\n}\r\n","import dom from \"zeta-dom/dom\";\r\nexport * from \"zeta-dom/dom\";\r\nexport default dom;\r\n","export * from \"zeta-dom/domUtil\";\r\n","// @ts-nocheck\r\n\r\n/** @type {Waterpipe} */\r\nconst waterpipe = window.waterpipe || require('waterpipe');\r\nmodule.exports = waterpipe;\r\n","/// <reference types=\"jq-scrollable\" />\r\n// @ts-nocheck\r\n\r\n/** @type {JQueryStatic} */\r\nconst jQuery = window.jQuery || require('jquery');\r\nmodule.exports = jQuery;\r\n","import { bind } from \"../include/zeta-dom/domUtil.js\";\r\nimport dom from \"../include/zeta-dom/dom.js\";\r\nimport { cancelLock, locked, notifyAsync } from \"../include/zeta-dom/domLock.js\";\r\nimport { extend, watch, defineObservableProperty, any, definePrototype, iequal, watchable, each, defineOwnProperty, resolve, createPrivateStore, setImmediateOnce, exclude, equal, isArray, single, randomId, always, setImmediate, noop, pick, keys, isPlainObject, kv, errorWithCode, deepFreeze, freeze, isUndefinedOrNull, deferrable, reject } from \"../include/zeta-dom/util.js\";\r\nimport { addExtension, appReady } from \"../app.js\";\r\nimport { getQueryParam } from \"../util/common.js\";\r\nimport { normalizePath, combinePath, isSubPathOf, setBaseUrl, removeQueryAndHash, toSegments } from \"../util/path.js\";\r\nimport * as ErrorCode from \"../errorCode.js\";\r\n\r\nconst SESSION_KEY = 'brew.history.';\r\n\r\nconst _ = createPrivateStore();\r\nconst parsedRoutes = {};\r\nconst sessionStorage = window.sessionStorage;\r\nconst root = dom.root;\r\n\r\nvar baseUrl;\r\nvar pass = function (path) {\r\n    return path;\r\n};\r\nvar fromPathname = function (path) {\r\n    return isSubPathOf(path, baseUrl) || '/';\r\n};\r\nvar toPathname = function (path) {\r\n    return combinePath(baseUrl, path);\r\n};\r\nexport var fromRoutePath = pass;\r\nexport var toRoutePath = pass;\r\n\r\nexport function matchRoute(route, segments, ignoreExact) {\r\n    if (!route || !route.test) {\r\n        route = parseRoute(route);\r\n    }\r\n    if (!isArray(segments)) {\r\n        segments = toSegments(segments);\r\n    }\r\n    return route.test(segments, ignoreExact);\r\n}\r\n\r\nfunction getCurrentQuery() {\r\n    return location.search + location.hash;\r\n}\r\n\r\nfunction RoutePattern(props) {\r\n    extend(this, props);\r\n}\r\n\r\ndefinePrototype(RoutePattern, Array, {\r\n    has: function (name) {\r\n        return name in this.params;\r\n    },\r\n    match: function (index, value) {\r\n        if (typeof index === 'string') {\r\n            index = this.params[index];\r\n        }\r\n        var part = this[index];\r\n        return !!part && (part.name ? part.test(value) : iequal(part, value));\r\n    },\r\n    test: function (segments, ignoreExact) {\r\n        var self = this;\r\n        return segments.length >= self.minLength && (ignoreExact || !self.exact || segments.length <= self.length) && !any(self, function (v, i) {\r\n            return segments[i] && !(v.name ? v.test(segments[i]) : iequal(segments[i], v));\r\n        });\r\n    }\r\n});\r\n\r\nfunction parseRoute(path) {\r\n    path = String(path);\r\n    if (!parsedRoutes[path]) {\r\n        var tokens = new RoutePattern();\r\n        var params = {};\r\n        var minLength;\r\n        path.replace(/\\/(\\*|[^{][^\\/]*|\\{([a.-z_$][a-z0-9_$]*)(\\?)?(?::(?![*+?])((?:(?:[^\\r\\n\\[/\\\\]|\\\\.|\\[(?:[^\\r\\n\\]\\\\]|\\\\.)*\\])([*+?]|\\{\\d+(?:,\\d+)\\})?)+))?\\})(?=\\/|$)/gi, function (v, a, b, c, d) {\r\n            if (c && !minLength) {\r\n                minLength = tokens.length;\r\n            }\r\n            if (b) {\r\n                var re = d ? new RegExp('^' + d + '$', 'i') : /./;\r\n                params[b] = tokens.length;\r\n                tokens.push({ name: b, test: re.test.bind(re) });\r\n            } else {\r\n                tokens.push(a.toLowerCase());\r\n            }\r\n        });\r\n        extend(tokens, {\r\n            pattern: path,\r\n            params: params,\r\n            exact: !(tokens[tokens.length - 1] === '*' && tokens.splice(-1)),\r\n            minLength: minLength || tokens.length\r\n        });\r\n        parsedRoutes[path] = deepFreeze(tokens);\r\n    }\r\n    return parsedRoutes[path];\r\n}\r\n\r\nfunction createRouteState(route, segments, params) {\r\n    route = route || [];\r\n    segments = segments.map(encodeURIComponent);\r\n    return {\r\n        route: route,\r\n        params: exclude(params, ['remainingSegments']),\r\n        minPath: normalizePath(segments.slice(0, route.minLength).join('/')),\r\n        maxPath: normalizePath(segments.slice(0, route.length).join('/'))\r\n    };\r\n}\r\n\r\nfunction matchRouteByParams(routes, params, partial) {\r\n    var matched = single(routes, function (tokens) {\r\n        var valid = single(tokens.params, function (v, i) {\r\n            return params[i] !== null;\r\n        });\r\n        if (valid && !partial) {\r\n            valid = !single(params, function (v, i) {\r\n                return v && !tokens.has(i);\r\n            });\r\n        }\r\n        if (!valid) {\r\n            return;\r\n        }\r\n        var segments = [];\r\n        for (var i = 0, len = tokens.length; i < len; i++) {\r\n            var varname = tokens[i].name;\r\n            if (varname && !tokens[i].test(params[varname] || '')) {\r\n                if (i < tokens.minLength || params[varname]) {\r\n                    return false;\r\n                }\r\n                break;\r\n            }\r\n            segments[i] = varname ? params[varname] : tokens[i];\r\n        }\r\n        return createRouteState(tokens, segments, pick(params, keys(tokens.params)));\r\n    });\r\n    return matched || (!partial && matchRouteByParams(routes, params, true));\r\n}\r\n\r\nfunction Route(app, routes, initialPath) {\r\n    var self = this;\r\n    var params = {};\r\n    var state = _(self, {\r\n        routes: routes.map(parseRoute),\r\n        params: params,\r\n        app: app\r\n    });\r\n    each(state.routes, function (i, v) {\r\n        each(v.params, function (i) {\r\n            params[i] = null;\r\n        });\r\n    });\r\n    extend(self, params, self.parse(initialPath));\r\n    state.current = state.lastMatch;\r\n    state.handleChanges = watch(self, true);\r\n\r\n    Object.preventExtensions(self);\r\n    Object.getOwnPropertyNames(self).forEach(function (prop) {\r\n        defineObservableProperty(self, prop, null, function (v) {\r\n            return isUndefinedOrNull(v) || v === '' ? null : String(v);\r\n        });\r\n    });\r\n    watch(self, function () {\r\n        var params = exclude(self, ['remainingSegments']);\r\n        var current = state.current;\r\n        var previous = current;\r\n        var routeChanged = !equal(params, current.params);\r\n        if (routeChanged && state.lastMatch) {\r\n            current = state.lastMatch;\r\n            state.lastMatch = null;\r\n            routeChanged = !equal(params, current.params);\r\n        }\r\n        if (routeChanged) {\r\n            current = matchRouteByParams(state.routes, params) || previous;\r\n        }\r\n        state.current = current;\r\n        if (current.route.exact) {\r\n            self.remainingSegments = '/';\r\n        }\r\n        self.set(extend({}, state.params, current.params));\r\n        if (current !== previous) {\r\n            app.path = fromRoutePath(combinePath(current.maxPath, self.remainingSegments));\r\n        }\r\n    });\r\n}\r\n\r\ndefinePrototype(Route, {\r\n    parse: function (path) {\r\n        var self = this;\r\n        var state = _(self);\r\n        var segments = toSegments(toRoutePath(removeQueryAndHash(path)));\r\n        var matched = any(state.routes, function (tokens) {\r\n            return matchRoute(tokens, segments, true);\r\n        });\r\n        var params = {};\r\n        if (matched) {\r\n            for (var i in state.params) {\r\n                params[i] = segments[matched.params[i]] || null;\r\n            }\r\n            params.remainingSegments = matched.exact ? '/' : normalizePath(segments.slice(matched.length).join('/'));\r\n        }\r\n        state.lastMatch = createRouteState(matched, segments, params);\r\n        return params;\r\n    },\r\n    set: function (params) {\r\n        var self = this;\r\n        if (typeof params === 'string') {\r\n            if (iequal(params, self.toString())) {\r\n                return;\r\n            }\r\n            params = self.parse(params);\r\n        }\r\n        _(self).handleChanges(function () {\r\n            extend(self, params);\r\n        });\r\n    },\r\n    replace: function (key, value) {\r\n        var self = this;\r\n        var result;\r\n        _(self).handleChanges(function () {\r\n            var path = self.getPath(extend(self, isPlainObject(key) || kv(key, value)));\r\n            result = _(self).app.navigate(path + (path === self.toString() ? getCurrentQuery() : ''), true);\r\n        });\r\n        return result;\r\n    },\r\n    getPath: function (params) {\r\n        var matched = matchRouteByParams(_(this).routes, params);\r\n        return fromRoutePath(matched ? combinePath(matched.maxPath || '/', matched.route.exact ? '/' : params.remainingSegments) : '/');\r\n    },\r\n    toJSON: function () {\r\n        return extend({}, this);\r\n    },\r\n    toString: function () {\r\n        // @ts-ignore: unable to infer this\r\n        return fromRoutePath(combinePath(_(this).current.maxPath || '/', this.remainingSegments));\r\n    }\r\n});\r\nwatchable(Route.prototype);\r\n\r\n/**\r\n * @param {Brew.AppInstance<Brew.WithRouter>} app\r\n * @param {Record<string, any>} options\r\n */\r\nfunction configureRouter(app, options) {\r\n    var route;\r\n    var basePath = '/';\r\n    var currentPath = '';\r\n    var redirectSource = {};\r\n    var currentIndex = 0;\r\n    var indexOffset = 0;\r\n    var pendingState;\r\n    var lastState = {};\r\n    var states = [];\r\n\r\n    function createNavigateResult(id, path, originalPath, navigated) {\r\n        return Object.freeze({\r\n            id: id,\r\n            path: path,\r\n            navigated: navigated !== false,\r\n            redirected: !!originalPath,\r\n            originalPath: originalPath || null\r\n        });\r\n    }\r\n\r\n    function createState(id, path, index) {\r\n        var resolvePromise = noop;\r\n        var rejectPromise = noop;\r\n        var pathNoQuery = removeQueryAndHash(path);\r\n        var promise, resolved;\r\n        var state = {\r\n            id: id,\r\n            path: path,\r\n            index: index,\r\n            pathname: pathNoQuery,\r\n            route: freeze(route.parse(pathNoQuery)),\r\n            previous: states[currentIndex],\r\n            handled: false,\r\n            get done() {\r\n                return resolved;\r\n            },\r\n            get promise() {\r\n                return promise || (promise = new Promise(function (resolve_, reject_) {\r\n                    resolvePromise = resolve_;\r\n                    rejectPromise = reject_;\r\n                }));\r\n            },\r\n            reset: function () {\r\n                state.handled = false;\r\n                if (resolved) {\r\n                    resolved = false;\r\n                    promise = null;\r\n                }\r\n                return state;\r\n            },\r\n            forward: function (other) {\r\n                if (promise && !resolved) {\r\n                    other.promise.then(function (data) {\r\n                        state.resolve(createNavigateResult(data.id, data.path, state.path, data.navigated));\r\n                    }, state.reject);\r\n                }\r\n            },\r\n            resolve: function (result) {\r\n                resolved = true;\r\n                resolvePromise(result || createNavigateResult(id, state.path));\r\n                if (pendingState === state) {\r\n                    pendingState = null;\r\n                    lastState = state;\r\n                    app.emit('pageload', { pathname: state.path }, { handleable: false });\r\n                }\r\n            },\r\n            reject: function (error) {\r\n                promise = null;\r\n                rejectPromise(error || errorWithCode(ErrorCode.navigationCancelled));\r\n                if (pendingState === state) {\r\n                    pendingState = null;\r\n                }\r\n            }\r\n        };\r\n        return state;\r\n    }\r\n\r\n    function updatePath(state, path) {\r\n        if (removeQueryAndHash(path) === state.pathname) {\r\n            state.path = path;\r\n            if (history.state === state.id) {\r\n                history.replaceState(state.id, '', toPathname(path));\r\n                if (state.done) {\r\n                    currentPath = path;\r\n                    app.path = path;\r\n                }\r\n            }\r\n            return true;\r\n        }\r\n    }\r\n\r\n    function applyState(state, replace, callback) {\r\n        if (pendingState && pendingState !== state) {\r\n            if (replace) {\r\n                pendingState.forward(state);\r\n            } else {\r\n                pendingState.reject();\r\n            }\r\n        }\r\n        pendingState = state;\r\n        if (appReady && locked(root)) {\r\n            cancelLock(root).then(function () {\r\n                if (pendingState === state && callback()) {\r\n                    setImmediateOnce(handlePathChange);\r\n                }\r\n            }, function () {\r\n                state.reject(errorWithCode(ErrorCode.navigationRejected));\r\n            });\r\n        } else if (callback()) {\r\n            setImmediateOnce(handlePathChange);\r\n        }\r\n    }\r\n\r\n    function pushState(path, replace) {\r\n        path = resolvePath(path);\r\n        if (!isSubPathOf(path, basePath)) {\r\n            return { promise: reject(errorWithCode(ErrorCode.navigationRejected)) };\r\n        }\r\n        var currentState = pendingState || states[currentIndex];\r\n        if (currentState && updatePath(currentState, path)) {\r\n            if (currentState.done) {\r\n                return { promise: resolve(createNavigateResult(currentState.id, path, null, false)) };\r\n            }\r\n            return currentState;\r\n        }\r\n\r\n        var id = randomId();\r\n        var index = Math.max(0, currentIndex + !replace);\r\n        var state = createState(id, path, indexOffset + index);\r\n        applyState(state, replace, function () {\r\n            currentIndex = index;\r\n            if (!replace) {\r\n                states.splice(currentIndex);\r\n            }\r\n            states[currentIndex] = state;\r\n            history[replace ? 'replaceState' : 'pushState'](id, '', toPathname(path));\r\n            sessionStorage.setItem(SESSION_KEY + baseUrl, JSON.stringify(states.map(function (v) {\r\n                return [v.id, v.path, v.index];\r\n            })));\r\n            return true;\r\n        });\r\n        return state;\r\n    }\r\n\r\n    function popState(index, isNative) {\r\n        var state = states[index].reset();\r\n        var step = state.index - states[currentIndex].index;\r\n        var isLocked = locked(root);\r\n        if (isLocked && isNative && step) {\r\n            history.go(-step);\r\n        }\r\n        applyState(state, false, function () {\r\n            currentIndex = index;\r\n            if (!isNative || isLocked) {\r\n                history.go(step);\r\n            }\r\n            return isNative && !isLocked;\r\n        });\r\n        return state;\r\n    }\r\n\r\n    function resolvePath(path, currentPath, isRoutePath) {\r\n        var parsedState;\r\n        path = decodeURI(path) || '/';\r\n        currentPath = currentPath || app.path;\r\n        if (path[0] === '~' || path.indexOf('{') >= 0) {\r\n            var fullPath = (isRoutePath ? fromRoutePath : pass)(currentPath);\r\n            parsedState = iequal(fullPath, route.toString()) ? _(route).current : route.parse(fullPath) && _(route).lastMatch;\r\n            path = path.replace(/\\{([^}?]+)(\\??)\\}/g, function (v, a, b, i) {\r\n                return parsedState.params[a] || ((b && i + v.length === path.length) ? '' : 'null');\r\n            });\r\n        }\r\n        if (path[0] === '~') {\r\n            path = (isRoutePath ? pass : fromRoutePath)(combinePath(parsedState.minPath, path.slice(1)));\r\n        } else if (path[0] !== '/') {\r\n            path = combinePath(currentPath, path);\r\n        }\r\n        return normalizePath(path, true);\r\n    }\r\n\r\n    function processPageChange(state) {\r\n        var path = state.path;\r\n        var deferred = deferrable();\r\n\r\n        currentPath = path;\r\n        app.path = path;\r\n        route.set(path);\r\n        app.emit('beforepageload', { pathname: path, waitFor: deferred.waitFor }, { handleable: false });\r\n\r\n        always(deferred, function () {\r\n            if (states[currentIndex] === state) {\r\n                redirectSource = {};\r\n                state.resolve();\r\n            }\r\n        });\r\n    }\r\n\r\n    function handlePathChange() {\r\n        if (!appReady) {\r\n            return;\r\n        }\r\n        var state = states[currentIndex];\r\n        var newPath = state.path;\r\n        if (lastState && state.pathname === removeQueryAndHash(currentPath) && updatePath(lastState, newPath)) {\r\n            state.resolve(createNavigateResult(lastState.id, newPath, null, false));\r\n            return;\r\n        }\r\n        if (state.handled) {\r\n            return;\r\n        }\r\n        state.handled = true;\r\n\r\n        // prevent infinite redirection loop\r\n        // redirectSource will not be reset until processPageChange is fired\r\n        var previous = state.previous;\r\n        if (previous && redirectSource[newPath] && redirectSource[previous.path]) {\r\n            processPageChange(state);\r\n            return;\r\n        }\r\n        redirectSource[newPath] = true;\r\n\r\n        console.log('Nagivate', newPath);\r\n        var promise = resolve(app.emit('navigate', {\r\n            pathname: newPath,\r\n            oldPathname: lastState.path,\r\n            oldStateId: lastState.id,\r\n            newStateId: state.id,\r\n            route: state.route\r\n        }));\r\n        notifyAsync(root, promise);\r\n        promise.then(function () {\r\n            if (states[currentIndex] === state) {\r\n                processPageChange(state);\r\n            }\r\n        });\r\n    }\r\n\r\n    defineObservableProperty(app, 'path', '', function (newValue) {\r\n        if (!appReady) {\r\n            return currentPath;\r\n        }\r\n        newValue = resolvePath(newValue);\r\n        if (newValue !== currentPath) {\r\n            pushState(newValue);\r\n        }\r\n        return currentPath;\r\n    });\r\n\r\n    baseUrl = normalizePath(options.baseUrl);\r\n    if (baseUrl === '/') {\r\n        fromPathname = pass;\r\n        toPathname = pass;\r\n    } else if (options.explicitBaseUrl) {\r\n        fromRoutePath = toPathname;\r\n        toRoutePath = fromPathname;\r\n        fromPathname = pass;\r\n        toPathname = pass;\r\n        basePath = baseUrl;\r\n    } else {\r\n        setBaseUrl(baseUrl);\r\n    }\r\n    var initialPath = options.initialPath || (options.queryParam && getQueryParam(options.queryParam));\r\n    var includeQuery = !initialPath;\r\n    initialPath = fromPathname(initialPath || location.pathname);\r\n    if (!isSubPathOf(initialPath, basePath)) {\r\n        initialPath = basePath;\r\n    }\r\n    route = new Route(app, options.routes, initialPath);\r\n\r\n    app.define({\r\n        get canNavigateBack() {\r\n            return currentIndex > 0;\r\n        },\r\n        get previousPath() {\r\n            return (states[currentIndex - 1] || '').path || null;\r\n        },\r\n        matchRoute: matchRoute,\r\n        parseRoute: parseRoute,\r\n        resolvePath: resolvePath,\r\n        navigate: function (path, replace) {\r\n            return pushState(path, replace).promise;\r\n        },\r\n        back: function (defaultPath) {\r\n            if (currentIndex > 0) {\r\n                return popState(currentIndex - 1).promise;\r\n            } else {\r\n                return !!defaultPath && pushState(defaultPath).promise;\r\n            }\r\n        }\r\n    });\r\n    defineOwnProperty(app, 'basePath', basePath, true);\r\n    defineOwnProperty(app, 'initialPath', initialPath + (includeQuery ? location.search : ''), true);\r\n    defineOwnProperty(app, 'route', route, true);\r\n    defineOwnProperty(app, 'routes', freeze(options.routes));\r\n\r\n    bind(window, 'popstate', function () {\r\n        var index = states.findIndex(function (v, i) {\r\n            return v.id === history.state;\r\n        });\r\n        if (index >= 0) {\r\n            popState(index, true);\r\n        } else {\r\n            pushState(fromPathname(location.pathname));\r\n        }\r\n    });\r\n\r\n    try {\r\n        each(JSON.parse(sessionStorage.getItem(SESSION_KEY + baseUrl) || '[]'), function (i, v) {\r\n            states.push(createState.apply(0, v));\r\n            currentIndex = i;\r\n        });\r\n    } catch (e) { }\r\n\r\n    var initialState;\r\n    var index = states.findIndex(function (v) {\r\n        return v.id === history.state;\r\n    });\r\n    if (index >= 0) {\r\n        currentIndex = index;\r\n        indexOffset = states[index].index - currentIndex;\r\n    } else {\r\n        currentIndex = states.length;\r\n        indexOffset = history.length - currentIndex;\r\n        initialState = pushState(initialPath + (includeQuery ? getCurrentQuery() : ''), true);\r\n    }\r\n    app.on('ready', function () {\r\n        if (pendingState === initialState && includeQuery) {\r\n            pushState(initialPath + getCurrentQuery(), true);\r\n        }\r\n        handlePathChange();\r\n    });\r\n}\r\n\r\nparsedRoutes['/*'] = deepFreeze(new RoutePattern({\r\n    value: '/*',\r\n    exact: false,\r\n    length: 0,\r\n    minLength: 0,\r\n    params: {},\r\n    test: function () {\r\n        return true;\r\n    }\r\n}));\r\n\r\nexport default addExtension('router', configureRouter);\r\n","import $ from \"../include/external/jquery.js\";\r\nimport { combineFn, createPrivateStore, extend, matchWord, setTimeoutOnce } from \"../include/zeta-dom/util.js\";\r\nimport { bind, getClass, getRect, isVisible, rectIntersects, selectIncludeSelf } from \"../include/zeta-dom/domUtil.js\";\r\nimport dom, { beginDrag, focusable } from \"../include/zeta-dom/dom.js\";\r\nimport { registerCleanup, watchElements } from \"../include/zeta-dom/observe.js\";\r\nimport { animateIn, animateOut } from \"../anim.js\";\r\nimport { getVar, setVar } from \"../var.js\";\r\nimport { addExtension, isElementActive } from \"../app.js\";\r\nimport { selectorForAttr } from \"../util/common.js\";\r\n\r\nexport default addExtension('scrollable', function (app, defaultOptions) {\r\n    defaultOptions = extend({\r\n        bounce: false\r\n    }, defaultOptions);\r\n\r\n    // @ts-ignore: non-standard member\r\n    var DOMMatrix = window.DOMMatrix || window.WebKitCSSMatrix || window.MSCSSMatrix;\r\n    var store = createPrivateStore();\r\n    var id = 0;\r\n\r\n    function getState(container) {\r\n        return store(container) || store(container, {\r\n            childClass: 'scrollable-target-' + (++id)\r\n        });\r\n    }\r\n\r\n    function initScrollable(container) {\r\n        var childClass = getState(container).childClass;\r\n        var dir = container.getAttribute('scrollable');\r\n        var paged = container.getAttribute('scroller-snap-page') || '';\r\n        var varname = container.getAttribute('scroller-state') || '';\r\n        var selector = container.getAttribute('scroller-page') || '';\r\n        var persistScroll = container.hasAttribute('persist-scroll');\r\n        var savedOffset = {};\r\n\r\n        var scrolling = false;\r\n        var needRefresh = false;\r\n        var isControlledScroll;\r\n\r\n        // @ts-ignore: signature ignored\r\n        $(container).scrollable(extend({}, defaultOptions, {\r\n            handle: matchWord(dir, 'auto scrollbar content') || 'content',\r\n            hScroll: !matchWord(dir, 'y-only'),\r\n            vScroll: !matchWord(dir, 'x-only'),\r\n            content: '.' + getState(container).childClass + ':visible:not(.disabled)',\r\n            pageItem: selector,\r\n            snapToPage: (paged === 'always' || paged === app.orientation),\r\n            scrollStart: function (e) {\r\n                if (dom.eventSource !== 'script') {\r\n                    delete savedOffset[history.state];\r\n                }\r\n                app.emit('scrollStart', container, e, true);\r\n            },\r\n            scrollMove: function (e) {\r\n                app.emit('scrollMove', container, e, true);\r\n            },\r\n            scrollEnd: function (e) {\r\n                app.emit('scrollStop', container, e, true);\r\n            }\r\n        }));\r\n\r\n        registerCleanup(container, function () {\r\n            $(container).scrollable('destroy');\r\n        });\r\n\r\n        registerCleanup(container, dom.on(container, {\r\n            drag: function () {\r\n                beginDrag();\r\n            },\r\n            getContentRect: function (e) {\r\n                if (e.target === container || $(e.target).closest('.' + childClass)[0]) {\r\n                    var rect = getRect(container);\r\n                    var padding = $(container).scrollable('scrollPadding');\r\n                    rect.top += padding.top;\r\n                    rect.left += padding.left;\r\n                    rect.right -= padding.right;\r\n                    rect.bottom -= padding.bottom;\r\n                    return rect;\r\n                }\r\n            },\r\n            scrollBy: function (e) {\r\n                $(container).scrollable('stop');\r\n                var origX = $(container).scrollable('scrollLeft');\r\n                var origY = $(container).scrollable('scrollTop');\r\n                $(container).scrollable('scrollBy', e.x, e.y, 200);\r\n                return {\r\n                    x: origX - $(container).scrollable('scrollLeft'),\r\n                    y: origY - $(container).scrollable('scrollTop')\r\n                };\r\n            }\r\n        }));\r\n\r\n        function getItem(index) {\r\n            return selector && $(selector, container).get()[index];\r\n        }\r\n\r\n        function setState(index) {\r\n            if (varname) {\r\n                var obj = {};\r\n                obj[varname] = index;\r\n                setVar(container, obj);\r\n            }\r\n        }\r\n\r\n        function scrollTo(index, align) {\r\n            var item = getItem(index);\r\n            align = align || 'center top';\r\n            if (!scrolling && isVisible(container) && item) {\r\n                scrolling = true;\r\n                isControlledScroll = true;\r\n                setState(index);\r\n                $(container).scrollable('scrollToElement', item, align, align, 200, function () {\r\n                    scrolling = false;\r\n                    isControlledScroll = false;\r\n                });\r\n            }\r\n        }\r\n\r\n        function refresh() {\r\n            var isPaged = (paged === 'always' || paged === app.orientation);\r\n            if (isPaged && isVisible(container)) {\r\n                if (scrolling) {\r\n                    needRefresh = true;\r\n                } else {\r\n                    needRefresh = false;\r\n                    scrollTo(getVar(container, varname));\r\n                }\r\n            }\r\n        }\r\n\r\n        if (selector) {\r\n            if (paged !== 'always') {\r\n                registerCleanup(container, app.on('orientationchange', function () {\r\n                    $(container).scrollable('setOptions', {\r\n                        snapToPage: paged === app.orientation\r\n                    });\r\n                }));\r\n            }\r\n            if (varname) {\r\n                registerCleanup(container, app.on(container, {\r\n                    statechange: function (e) {\r\n                        var newIndex = e.data[varname];\r\n                        if (!scrolling) {\r\n                            if ((getRect(getItem(newIndex)).width | 0) > (getRect().width | 0)) {\r\n                                scrollTo(newIndex, 'left center');\r\n                            } else {\r\n                                scrollTo(newIndex);\r\n                            }\r\n                        }\r\n                    },\r\n                    scrollMove: function (e) {\r\n                        scrolling = true;\r\n                        if (!isControlledScroll) {\r\n                            setState(e.pageIndex);\r\n                        }\r\n                    },\r\n                    scrollStop: function (e) {\r\n                        setState(e.pageIndex);\r\n                        scrolling = false;\r\n                        if (needRefresh) {\r\n                            refresh();\r\n                        }\r\n                    }\r\n                }, true));\r\n                var timeout;\r\n                registerCleanup(container, bind(window, 'resize', function () {\r\n                    clearTimeout(timeout);\r\n                    timeout = setTimeout(refresh, 200);\r\n                }));\r\n            }\r\n        }\r\n\r\n        if (persistScroll) {\r\n            var hasAsync = false;\r\n            var restoreScroll = function () {\r\n                let offset = savedOffset[history.state];\r\n                if (offset) {\r\n                    $(container).scrollable('scrollTo', offset.x, offset.y, 0);\r\n                }\r\n            };\r\n            registerCleanup(container, combineFn(\r\n                dom.on('asyncStart', function () {\r\n                    hasAsync = true;\r\n                }),\r\n                dom.on('asyncEnd', function () {\r\n                    hasAsync = false;\r\n                    restoreScroll();\r\n                }),\r\n                app.on('navigate', function (e) {\r\n                    savedOffset[e.oldStateId] = {\r\n                        x: $(container).scrollable('scrollLeft'),\r\n                        y: $(container).scrollable('scrollTop')\r\n                    };\r\n                    setTimeout(function () {\r\n                        if (!hasAsync) {\r\n                            restoreScroll();\r\n                        }\r\n                    });\r\n                })\r\n            ));\r\n        }\r\n    }\r\n\r\n    app.on('ready', function () {\r\n        watchElements(dom.root, selectorForAttr(['scrollable', 'scrollable-target']), function (nodes) {\r\n            $(nodes).filter('[scrollable-target]').each(function (i, v) {\r\n                var scrollable = $(v).closest('[scrollable]')[0];\r\n                if (scrollable) {\r\n                    $(v).addClass(getState(scrollable).childClass);\r\n                }\r\n            });\r\n            $(nodes).filter('[scrollable]').each(function (i, v) {\r\n                initScrollable(v);\r\n                $(v).scrollable(focusable(v) ? 'enable' : 'disable');\r\n            });\r\n        }, true);\r\n    });\r\n\r\n    // update scroller on events other than window resize\r\n    function refresh() {\r\n        $('[scrollable]:visible').scrollable('refresh');\r\n    }\r\n    app.on('statechange orientationchange animationcomplete', function () {\r\n        setTimeoutOnce(refresh);\r\n    });\r\n    app.on('pageenter', function (e) {\r\n        var $scrollables = $(selectIncludeSelf('[scrollable]', e.target)).add($(e.target).parents('[scrollable]'));\r\n        $(selectIncludeSelf('[scrollable-target]', e.target)).each(function (i, v) {\r\n            $(v).toggleClass('disabled', !isElementActive(v));\r\n        });\r\n        $scrollables.scrollable('refresh');\r\n        $scrollables.filter(':not([keep-scroll-offset])').scrollable('scrollTo', 0, 0);\r\n    });\r\n\r\n    // scroll-into-view animation trigger\r\n    function updateScrollIntoView() {\r\n        $('[animate-on~=\"scroll-into-view\"]:visible').each(function (i, v) {\r\n            var m = new DOMMatrix(getComputedStyle(v).transform);\r\n            var rootRect = getRect(dom.root);\r\n            var thisRect = getRect(v);\r\n            var isInView = rectIntersects(rootRect, thisRect.translate(-m.e || 0, 0)) || rectIntersects(rootRect, thisRect.translate(0, -m.f || 0));\r\n            // @ts-ignore: boolean arithmetics\r\n            if ((isInView ^ getClass(v, 'tweening-in')) && (isInView || v.attributes['animate-out'])) {\r\n                (isInView ? animateIn : animateOut)(v, 'scroll-into-view');\r\n            }\r\n        });\r\n    }\r\n\r\n    app.on('resize pageenter statechange scrollMove orientationchange', function () {\r\n        setTimeoutOnce(updateScrollIntoView);\r\n    });\r\n\r\n    dom.on('modalchange', function () {\r\n        $('[scrollable]').each(function (i, v) {\r\n            $(v).scrollable(focusable(v) ? 'enable' : 'disable');\r\n        });\r\n    });\r\n\r\n    dom.on('keystroke', function (e) {\r\n        const originalEvent = dom.event;\r\n        if (dom.modalElement && originalEvent && originalEvent.target === document.body && matchWord(e.data, 'space pageUp pageDown leftArrow rightArrow upArrow downArrow')) {\r\n            var target = selectIncludeSelf('[scrollable]', dom.modalElement)[0];\r\n            if (target) {\r\n                $(target).triggerHandler($.Event('keydown', {\r\n                    keyCode: originalEvent.keyCode\r\n                }));\r\n            }\r\n        }\r\n    });\r\n});\r\n","import { defineObservableProperty, each, isArray, keys, single } from \"../include/zeta-dom/util.js\";\nimport { addExtension, appReady } from \"../app.js\";\nimport { cookie as _cookie } from \"../util/common.js\";\n\nfunction toDictionary(languages) {\n    if (languages) {\n        var dict = {};\n        each(languages, function (i, v) {\n            var key = v.toLowerCase();\n            dict[key] = v;\n            if (key.indexOf('-') > 0) {\n                dict[key.split('-')[0]] = v;\n            }\n        });\n        return dict;\n    }\n}\n\nfunction getCanonicalValue(languages, value) {\n    if (languages && value) {\n        return languages[value.toLowerCase()];\n    }\n    return value;\n}\n\nfunction detectLanguage(languages, defaultLanguage) {\n    var userLanguages = navigator.languages || [navigator.language || ''];\n    if (!languages) {\n        return userLanguages[0];\n    }\n    userLanguages = toDictionary(userLanguages);\n    if (isArray(languages)) {\n        languages = toDictionary(languages);\n    }\n    return single(userLanguages, function (v, i) {\n        return languages[i];\n    }) || defaultLanguage || keys(languages)[0];\n}\n\nexport default addExtension('i18n', function (app, options) {\n    var languages = toDictionary(options.languages);\n    var routeParam = app.route && options.routeParam;\n    var cookie = options.cookie && _cookie(options.cookie, 86400000);\n    var language = getCanonicalValue(languages, routeParam && app.route[routeParam]) || getCanonicalValue(languages, cookie && cookie.get()) || detectLanguage(languages, options.defaultLanguage);\n    var setLanguage = function (newLangauge) {\n        app.language = newLangauge;\n    };\n\n    defineObservableProperty(app, 'language', language, function (newLangauge) {\n        newLangauge = getCanonicalValue(languages, newLangauge) || language;\n        if (cookie) {\n            cookie.set(newLangauge);\n        }\n        if (routeParam && appReady) {\n            app.route.replace(routeParam, newLangauge.toLowerCase());\n        }\n        if (language !== newLangauge) {\n            language = newLangauge;\n            if (options.reloadOnChange) {\n                location.reload();\n            }\n        }\n        return language;\n    });\n    app.define({\n        setLanguage,\n        detectLanguage\n    });\n    if (routeParam) {\n        app.route.watch(routeParam, setLanguage);\n        app.on('ready', function () {\n            app.route.replace(routeParam, language.toLowerCase());\n        });\n    }\n});\n","import { defineHiddenProperty } from \"./include/zeta-dom/util.js\";\r\n\r\nconst BREW_KEY = '__BREW__';\r\nif (window[BREW_KEY]) {\r\n    throw new Error('Another copy of brew-js is instantiated. Please check your dependencies.');\r\n}\r\ndefineHiddenProperty(window, BREW_KEY, true, true);\r\n\r\nexport default null;\r\n","import $ from \"./include/external/jquery.js\";\r\nimport dom from \"./include/zeta-dom/dom.js\";\r\nimport { notifyAsync } from \"./include/zeta-dom/domLock.js\";\r\nimport { resolveAll, each, is, isFunction, camel, defineOwnProperty, define, definePrototype, extend, kv, throwNotFunction, watchable, combineFn, deferrable, grep, isArray } from \"./include/zeta-dom/util.js\";\r\nimport { } from \"./libCheck.js\";\r\nimport defaults from \"./defaults.js\";\r\nimport { addSelectHandlers, hookBeforeUpdate, matchElement, mountElement } from \"./dom.js\";\r\n\r\nconst root = dom.root;\r\nconst featureDetections = {};\r\nconst dependencies = {};\r\nconst extensions = {};\r\n\r\n/** @type {Brew.AppInstance} */\r\nexport var app;\r\n/** @type {boolean} */\r\nexport var appReady;\r\n/** @type {boolean} */\r\nexport var appInited;\r\n/** @type {Promise<void> & Zeta.Deferrable} */\r\nvar appInit;\r\n\r\nfunction exactTargetWrapper(handler) {\r\n    return function (e) {\r\n        if (e.target === e.context) {\r\n            return handler.apply(this, arguments);\r\n        }\r\n    };\r\n}\r\n\r\nfunction initExtension(app, name, deps, options, callback) {\r\n    deps = grep(deps, function (v) {\r\n        return !extensions[v.replace(/^\\?/, '')];\r\n    });\r\n    var counter = deps.length || 1;\r\n    var wrapper = function (loaded) {\r\n        if (!counter) {\r\n            throw new Error('Extension' + name + 'is already initiated');\r\n        }\r\n        if (loaded && !--counter) {\r\n            extensions[name] = true;\r\n            callback(app, options || {});\r\n            if (dependencies[name]) {\r\n                combineFn(dependencies[name].splice(0))(true);\r\n            }\r\n        }\r\n    };\r\n    if (deps[0]) {\r\n        each(deps, function (i, v) {\r\n            var key = v.replace(/^\\?/, '');\r\n            var arr = dependencies[key] || (dependencies[key] = []);\r\n            arr.push(key === v ? wrapper : wrapper.bind(0, true));\r\n        });\r\n    } else {\r\n        wrapper(true);\r\n    }\r\n}\r\n\r\nfunction defineUseMethod(name, deps, callback) {\r\n    var method = camel('use-' + name);\r\n    definePrototype(App, kv(method, function (options) {\r\n        initExtension(this, name, deps, options, callback);\r\n    }));\r\n}\r\n\r\nfunction App() {\r\n    var self = this;\r\n    defineOwnProperty(self, 'element', root, true);\r\n    defineOwnProperty(self, 'ready', new Promise(function (resolve) {\r\n        self.on('ready', resolve.bind(0, self));\r\n    }), true);\r\n}\r\n\r\ndefinePrototype(App, {\r\n    emit: function (event, element, data, bubbles) {\r\n        if (!is(element, Node)) {\r\n            bubbles = data;\r\n            data = element;\r\n            element = this.element;\r\n        }\r\n        return dom.emit(event, element, data, bubbles);\r\n    },\r\n    define: function (props) {\r\n        define(this, props);\r\n    },\r\n    beforeInit: function (promise) {\r\n        if (isFunction(promise)) {\r\n            promise = promise.call(this);\r\n        }\r\n        appInit.waitFor(promise);\r\n    },\r\n    isElementActive: function () {\r\n        return true;\r\n    },\r\n    detect: function (names, callback) {\r\n        var app = this;\r\n        var supports = {};\r\n        each(names, function (i, v) {\r\n            if (featureDetections[v]) {\r\n                supports[v] = isFunction(featureDetections[v]) ? (featureDetections[v] = resolveAll(featureDetections[v]()).catch(function (e) {\r\n                    console.warn('Detection for ' + v + ' has thrown exception:', e);\r\n                    return false;\r\n                })) : featureDetections[v];\r\n            }\r\n        });\r\n        this.beforeInit(resolveAll(supports, function (supports) {\r\n            supports = Object.freeze(extend({}, app.supports, supports));\r\n            define(app, { supports: supports });\r\n            return isFunction(callback) && callback(supports);\r\n        }));\r\n    },\r\n    when: function (value, callback) {\r\n        this.beforeInit(resolveAll(value, function (value) {\r\n            if (value) {\r\n                return callback();\r\n            }\r\n        }));\r\n    },\r\n    on: function (target, event, handler, noChildren) {\r\n        noChildren = (noChildren || handler) === true;\r\n        if (isFunction(event)) {\r\n            handler = event;\r\n            event = target;\r\n            target = root;\r\n        }\r\n        var handlers = event;\r\n        if (typeof event === 'string') {\r\n            if (noChildren) {\r\n                handler = exactTargetWrapper(handler);\r\n            }\r\n            if (event.indexOf(' ') >= 0) {\r\n                handlers = {};\r\n                each(event, function (i, v) {\r\n                    handlers[v] = handler;\r\n                });\r\n            } else {\r\n                handlers = kv(event, handler);\r\n            }\r\n        } else if (noChildren) {\r\n            for (var i in event) {\r\n                event[i] = exactTargetWrapper(event[i]);\r\n            }\r\n        }\r\n        var arr = [];\r\n        if (typeof target === 'string') {\r\n            addSelectHandlers(target, handlers, arr);\r\n            target = $(target).get();\r\n        } else if (target instanceof Node) {\r\n            target = [target];\r\n        }\r\n        each(target, function (i, v) {\r\n            arr.push(dom.on(v, handlers));\r\n        });\r\n        return combineFn(arr);\r\n    },\r\n    matchElement: matchElement,\r\n    beforeUpdate: hookBeforeUpdate\r\n});\r\nwatchable(App.prototype);\r\n\r\nexport default function () {\r\n    if (appInit) {\r\n        throw new Error('brew() can only be called once');\r\n    }\r\n    appInit = deferrable(dom.ready);\r\n    app = new App();\r\n    each(defaults, function (i, v) {\r\n        var fn = v && isFunction(app[camel('use-' + i)]);\r\n        if (fn) {\r\n            fn.call(app, v);\r\n        }\r\n    });\r\n    each(arguments, function (i, v) {\r\n        throwNotFunction(v)(app);\r\n    });\r\n    each(dependencies, function (i, v) {\r\n        combineFn(v)();\r\n    });\r\n\r\n    appInited = true;\r\n    notifyAsync(root, appInit);\r\n    appInit.then(function () {\r\n        appReady = true;\r\n        mountElement(root);\r\n        app.emit('ready');\r\n    });\r\n    return app;\r\n}\r\n\r\nexport function install(name, callback) {\r\n    defineUseMethod(name, [], throwNotFunction(callback));\r\n}\r\n\r\nexport function addExtension(autoInit, name, deps, callback) {\r\n    callback = throwNotFunction(callback || deps || name);\r\n    deps = isArray(deps) || isArray(name) || [];\r\n    return function (app) {\r\n        if (autoInit === true) {\r\n            initExtension(app, name, deps, {}, callback);\r\n        } else {\r\n            defineUseMethod(autoInit, deps, callback);\r\n        }\r\n    };\r\n}\r\n\r\nexport function addDetect(name, callback) {\r\n    featureDetections[name] = throwNotFunction(callback);\r\n}\r\n\r\nexport function isElementActive(element) {\r\n    return !app || app.isElementActive(element);\r\n}\r\n","export * from \"zeta-dom/util\";\r\n","import $ from \"../include/external/jquery.js\";\r\nimport { define, defineObservableProperty, either, setTimeoutOnce } from \"../include/zeta-dom/util.js\";\r\nimport { bind } from \"../include/zeta-dom/domUtil.js\";\r\nimport { IS_TOUCH } from \"../include/zeta-dom/env.js\";\r\nimport dom from \"../include/zeta-dom/dom.js\";\r\nimport { animateIn } from \"../anim.js\";\r\nimport { addExtension } from \"../app.js\";\r\n\r\nexport default addExtension(true, 'viewport', function (app) {\r\n    var setOrientation = defineObservableProperty(app, 'orientation', '', true);\r\n    var visualViewport = window.visualViewport;\r\n    var useAvailOrInner = IS_TOUCH && navigator.platform !== 'MacIntel';\r\n    var aspectRatio, viewportWidth, viewportHeight;\r\n\r\n    function checkViewportSize(triggerEvent) {\r\n        if (visualViewport) {\r\n            viewportWidth = visualViewport.width;\r\n            viewportHeight = visualViewport.height;\r\n        } else {\r\n            var availWidth = screen.availWidth;\r\n            var availHeight = screen.availHeight;\r\n            viewportWidth = useAvailOrInner ? availWidth : document.body.offsetWidth;\r\n            viewportHeight = useAvailOrInner ? (availWidth === window.innerWidth ? availHeight : window.innerHeight) : document.body.offsetHeight;\r\n        }\r\n        var previousAspectRatio = aspectRatio;\r\n        aspectRatio = viewportWidth / viewportHeight;\r\n        setOrientation(aspectRatio >= 1 ? 'landscape' : 'portrait');\r\n\r\n        if (triggerEvent !== false) {\r\n            app.emit('resize', {\r\n                aspectRatio: aspectRatio,\r\n                viewportWidth: viewportWidth,\r\n                viewportHeight: viewportHeight\r\n            });\r\n            if (either(aspectRatio >= 1, previousAspectRatio >= 1)) {\r\n                app.emit('orientationchange', {\r\n                    orientation: app.orientation\r\n                });\r\n            }\r\n        }\r\n    }\r\n\r\n    define(app, {\r\n        get aspectRatio() {\r\n            return aspectRatio;\r\n        },\r\n        get viewportWidth() {\r\n            return viewportWidth;\r\n        },\r\n        get viewportHeight() {\r\n            return viewportHeight;\r\n        }\r\n    });\r\n\r\n    app.on('orientationchange', function () {\r\n        animateIn(dom.root, 'orientationchange');\r\n    });\r\n    if (visualViewport) {\r\n        bind(visualViewport, 'resize', checkViewportSize);\r\n        checkViewportSize(false);\r\n    } else {\r\n        $(window).on('resize', function () {\r\n            setTimeoutOnce(checkViewportSize);\r\n        });\r\n        $(function () {\r\n            checkViewportSize(false);\r\n        });\r\n    }\r\n});\r\n","import $ from \"../include/external/jquery.js\";\r\nimport Promise from \"../include/external/promise-polyfill.js\";\r\nimport { isCssUrlValue } from \"../include/zeta-dom/cssUtil.js\";\r\nimport { createNodeIterator, iterateNode, matchSelector } from \"../include/zeta-dom/domUtil.js\";\r\nimport { defineAliasProperty, defineGetterProperty, defineHiddenProperty, each, errorWithCode, extend, isArray, isFunction, isPlainObject, keys, kv, matchWord, resolve, resolveAll, setPromiseTimeout, values, watchOnce } from \"../include/zeta-dom/util.js\";\r\nimport { combinePath, withBaseUrl } from \"./path.js\";\r\nimport * as ErrorCode from \"../errorCode.js\";\r\n\r\n/** @type {Zeta.Dictionary<Promise<void>>} */\r\nconst preloadImagesCache = {};\r\n/** @type {Zeta.Dictionary<Promise<Zeta.Dictionary>>} */\r\nconst loadScriptCache = {};\r\n\r\nexport function getAttrValues(element) {\r\n    var values = {};\r\n    each(element.attributes, function (i, v) {\r\n        values[v.name] = v.value;\r\n    });\r\n    return values;\r\n}\r\n\r\nexport function isBoolAttr(element, name) {\r\n    return matchWord(name, 'allowfullscreen async autofocus autoplay checked controls default defer disabled formnovalidate ismap itemscope loop multiple muted nomodule novalidate open playsinline readonly required reversed selected truespeed') && name in element;\r\n}\r\n\r\nexport function hasAttr(element, name) {\r\n    return !!element.attributes[name];\r\n}\r\n\r\nexport function getAttr(element, name) {\r\n    var attr = element.attributes[name];\r\n    return attr && attr.value;\r\n}\r\n\r\nexport function setAttr(element, name, value) {\r\n    each(isPlainObject(name) || kv(name, value), function (i, v) {\r\n        element.setAttribute(i, v);\r\n    });\r\n}\r\n\r\nexport function copyAttr(src, dst) {\r\n    each(src.attributes, function (i, v) {\r\n        dst.setAttribute(v.name, v.value);\r\n    });\r\n}\r\n\r\nexport function selectorForAttr(attr) {\r\n    if (isPlainObject(attr)) {\r\n        attr = keys(attr);\r\n    }\r\n    return attr[0] ? '[' + attr.join('],[') + ']' : '';\r\n}\r\n\r\n/**\r\n * @param {HTMLFormElement} form\r\n */\r\nexport function getFormValues(form) {\r\n    var values = {};\r\n    each(form.elements, function (i, v) {\r\n        if (v.name && !(v.name in values)) {\r\n            var item = form.elements[v.name];\r\n            defineGetterProperty(values, v.name, function () {\r\n                return item.type === 'checkbox' ? item.checked : item.value;\r\n            });\r\n        }\r\n    });\r\n    return values;\r\n}\r\n\r\n/**\r\n * @param {string} name\r\n */\r\nexport function getQueryParam(name) {\r\n    return new RegExp('[?&]' + name + '=([^&]+)', 'i').test(location.search) && decodeURIComponent(RegExp.$1);\r\n}\r\n\r\n/**\r\n * @param {string} name\r\n */\r\nexport function getCookie(name) {\r\n    return new RegExp('(?:^|\\\\s|;)' + name + '=([^;]+)').test(document.cookie) && RegExp.$1;\r\n}\r\n\r\n/**\r\n * @param {string} name\r\n * @param {string} value\r\n * @param {number=} expiry\r\n */\r\nexport function setCookie(name, value, expiry) {\r\n    document.cookie = name + '=' + value + ';path=/' + (expiry ? ';expires=' + new Date(Date.now() + expiry).toGMTString() : '');\r\n    return value;\r\n}\r\n\r\n/**\r\n * @param {string} name\r\n */\r\nexport function deleteCookie(name) {\r\n    document.cookie = name + '=;path=/;expires=Thu, 01 Jan 1970 00:00:01 GMT';\r\n}\r\n\r\n/**\r\n * @param {string} name\r\n * @param {number=} expiry\r\n */\r\nexport function cookie(name, expiry) {\r\n    return {\r\n        get: function () {\r\n            return getCookie(name);\r\n        },\r\n        set: function (value) {\r\n            return setCookie(name, value, expiry);\r\n        },\r\n        delete: function () {\r\n            return deleteCookie(name);\r\n        }\r\n    };\r\n}\r\n\r\n/**\r\n * @param {Brew.APIMethod | Brew.APIOptions} options\r\n * @param {=} extra\r\n */\r\nexport function api(options, extra) {\r\n    var httpMethods = 'get post put delete';\r\n    if (typeof options === 'string' && matchWord(options, httpMethods)) {\r\n        extra = extend({}, typeof extra === 'string' ? { baseUrl: extra } : extra, { methods: options });\r\n        return api(extra)[options];\r\n    }\r\n    options = extend({}, options);\r\n    var obj = {\r\n        baseUrl: options.baseUrl,\r\n        token: options.token\r\n    };\r\n    each(options.methods || httpMethods, function (i, v) {\r\n        if (matchWord(v, httpMethods)) {\r\n            defineHiddenProperty(obj, v, function request(method, data) {\r\n                if (!obj.baseUrl) {\r\n                    return watchOnce(obj, 'baseUrl', function () {\r\n                        return request(method, data);\r\n                    });\r\n                }\r\n                var headers = { 'Content-Type': 'application/json' };\r\n                if (obj.token) {\r\n                    headers.Authorization = 'Bearer ' + obj.token;\r\n                }\r\n                return $.ajax({\r\n                    method: v,\r\n                    url: combinePath(obj.baseUrl, method),\r\n                    headers: headers,\r\n                    dataType: 'json',\r\n                    data: JSON.stringify(data || {}),\r\n                    success: function (response) {\r\n                        if (isFunction(options.getTokenFromResponse)) {\r\n                            obj.token = options.getTokenFromResponse(response, obj.token);\r\n                        }\r\n                    }\r\n                }).catch(function (e) {\r\n                    if (e.status === 0) {\r\n                        throw errorWithCode(ErrorCode.networkError);\r\n                    }\r\n                    var response = e.responseJSON;\r\n                    if (response) {\r\n                        console.error(method + ':', response.error || response.message);\r\n                        throw errorWithCode(ErrorCode.apiError, response.error || response.message);\r\n                    }\r\n                    throw errorWithCode(ErrorCode.apiError, e.statusText);\r\n                });\r\n            });\r\n            defineAliasProperty(obj[v], 'baseUrl', obj);\r\n            defineAliasProperty(obj[v], 'token', obj);\r\n        }\r\n    });\r\n    return obj;\r\n}\r\n\r\n/**\r\n * @param {string} path\r\n */\r\nexport function getJSON(path) {\r\n    return $.getJSON(withBaseUrl(path));\r\n}\r\n\r\n/**\r\n * @param {string | string[]} url\r\n * @param {{ nomodule?: boolean; module?: boolean }=} options\r\n */\r\nexport function loadScript(url, options) {\r\n    if (isArray(url)) {\r\n        return url.reduce(function (v, a) {\r\n            return v.then(function () {\r\n                return loadScript(a, options);\r\n            });\r\n        }, resolve());\r\n    }\r\n    if (!loadScriptCache[url]) {\r\n        loadScriptCache[url] = new Promise(function (resolve, reject) {\r\n            var script = document.createElement('script');\r\n            options = options || {};\r\n            if (options.nomodule) {\r\n                if ('noModule' in script) {\r\n                    resolve();\r\n                    return;\r\n                }\r\n                script.setAttribute('nomodule', '');\r\n            }\r\n            if (options.module) {\r\n                script.setAttribute('type', 'module');\r\n            }\r\n            script.addEventListener('load', function () {\r\n                resolve({});\r\n            });\r\n            script.addEventListener('error', function () {\r\n                reject(errorWithCode(ErrorCode.resourceError));\r\n            });\r\n            script.src = withBaseUrl(url);\r\n            document.head.appendChild(script);\r\n        });\r\n    }\r\n    return loadScriptCache[url];\r\n}\r\n\r\n/**\r\n * @param {string} url\r\n * @param {string=} media\r\n */\r\nexport function addStyleSheet(url, media) {\r\n    var link = document.createElement('link');\r\n    link.rel = 'stylesheet';\r\n    link.href = withBaseUrl(url);\r\n    if (media) {\r\n        link.media = media;\r\n    }\r\n    document.head.appendChild(link);\r\n}\r\n\r\n/**\r\n * @param {string[]|Element} urls\r\n * @param {number=} ms\r\n */\r\nexport function preloadImages(urls, ms) {\r\n    if (!isArray(urls)) {\r\n        var map = {};\r\n        var testValue = function (value) {\r\n            if (isCssUrlValue(value)) {\r\n                map[RegExp.$1 || RegExp.$2 || RegExp.$3] = true;\r\n            }\r\n        };\r\n        iterateNode(createNodeIterator(urls, 1), function (node) {\r\n            if (matchSelector(node, 'img') && node.src) {\r\n                map[node.src] = true;\r\n            }\r\n            testValue(getComputedStyle(node).backgroundImage);\r\n            testValue(getComputedStyle(node, '::before').backgroundImage);\r\n            testValue(getComputedStyle(node, '::after').backgroundImage);\r\n        });\r\n        urls = keys(map);\r\n    }\r\n    var promises = [];\r\n    var preloadUrls = [];\r\n    urls.forEach(function (url) {\r\n        promises.push(preloadImagesCache[url] || (preloadImagesCache[url] = new Promise(function (resolve) {\r\n            preloadUrls.push(url);\r\n            $('<img>').on('load error', function () {\r\n                preloadImagesCache[url] = true;\r\n                resolve();\r\n            }).attr('src', url);\r\n        })));\r\n    });\r\n    if (!promises.length || promises.every(function (v) { return v === true; })) {\r\n        return resolve();\r\n    }\r\n    if (preloadUrls.length) {\r\n        console.log('Preload image', { urls: preloadUrls });\r\n    }\r\n    return setPromiseTimeout(resolveAll(values(preloadImagesCache)), ms, true);\r\n}\r\n","import $ from \"./include/external/jquery.js\";\r\nimport waterpipe from \"./include/external/waterpipe.js\"\r\nimport { defineGetterProperty, defineOwnProperty, each, extend, hasOwnProperty, isFunction, isPlainObject, kv, noop, pick, setImmediateOnce, trim } from \"./include/zeta-dom/util.js\";\r\nimport dom from \"./include/zeta-dom/dom.js\";\r\nimport { app, appReady } from \"./app.js\";\r\nimport { batch, markUpdated, processStateChange } from \"./dom.js\";\r\nimport { InheritedNodeTree } from \"./include/zeta-dom/tree.js\";\r\nimport { getAttr, selectorForAttr } from \"./util/common.js\";\r\n\r\nconst root = dom.root;\r\nconst varAttrs = {\r\n    'var': true,\r\n    'auto-var': true,\r\n    'loading-scope': { loading: false },\r\n    'error-scope': { error: null }\r\n};\r\nconst tree = new InheritedNodeTree(root, VarContext, {\r\n    selector: selectorForAttr(varAttrs)\r\n});\r\nconst globals = {\r\n    get app() {\r\n        return app;\r\n    }\r\n};\r\n\r\n/**\r\n * @class\r\n * @this {Brew.VarContext}\r\n */\r\nfunction VarContext() {\r\n    var self = this;\r\n    var element = self.element;\r\n    // @ts-ignore: does not throw error when property dataset does not exist\r\n    each(element.dataset, function (i, v) {\r\n        defineOwnProperty(self, i, waterpipe.eval('`' + trim(v || 'null')));\r\n    });\r\n    each(getDeclaredVar(element, true, self), function (i, v) {\r\n        defineOwnProperty(self, i, v);\r\n    });\r\n    if (element === root) {\r\n        self.loading = null;\r\n        self.error = null;\r\n    }\r\n}\r\n\r\nfunction hasDataAttributes(element) {\r\n    for (var i in element.dataset) {\r\n        return true;\r\n    }\r\n}\r\n\r\nfunction getDeclaredVar(element, resetToNull, state) {\r\n    var initValues = {};\r\n    each(varAttrs, function (i, v) {\r\n        if (element.attributes[i]) {\r\n            if (v === true) {\r\n                v = evalAttr(element, i, false, state);\r\n                if (!isPlainObject(v)) {\r\n                    return;\r\n                }\r\n            }\r\n            // @ts-ignore: v should be object\r\n            for (var j in v) {\r\n                initValues[j] = v[j] === undefined || resetToNull ? null : v[j];\r\n            }\r\n        }\r\n    });\r\n    return initValues;\r\n}\r\n\r\nfunction findVarContext(varname, element) {\r\n    element = element || root;\r\n    for (var s = tree.getNode(element); s !== null; s = Object.getPrototypeOf(s)) {\r\n        if (hasOwnProperty(s, varname)) {\r\n            return s;\r\n        }\r\n    }\r\n    console.warn('Undeclared state: %s', varname, { element: element });\r\n    return tree.setNode(element);\r\n}\r\n\r\n/**\r\n * @param {string} varname\r\n * @param {Element} element\r\n */\r\nexport function getVarScope(varname, element) {\r\n    var context = findVarContext(varname, element);\r\n    return context.element;\r\n}\r\n\r\n/**\r\n * @param {Element | string} element\r\n * @param {any} name\r\n * @param {any=} value\r\n */\r\nexport function setVar(element, name, value) {\r\n    var values = name && (isPlainObject(name) || kv(name, value));\r\n    var hasUpdated = false;\r\n    if (typeof element === 'string') {\r\n        batch(function () {\r\n            $(element).each(function (i, v) {\r\n                // @ts-ignore: boolean arithmetics\r\n                hasUpdated |= setVar(v, values);\r\n            });\r\n        });\r\n    } else {\r\n        var state = tree.setNode(element);\r\n        each(values || evalAttr(element, 'set-var'), function (i, v) {\r\n            if (state[i] !== v) {\r\n                var node = findVarContext(i, element);\r\n                node[i] = v;\r\n                hasUpdated = true;\r\n                markUpdated(node.element);\r\n            }\r\n        });\r\n        if (hasUpdated && appReady) {\r\n            setImmediateOnce(processStateChange);\r\n        }\r\n    }\r\n    return !!hasUpdated;\r\n}\r\n\r\n/**\r\n * @param {Element} element\r\n * @param {any} name\r\n * @param {any=} value\r\n */\r\nexport function declareVar(element, name, value) {\r\n    var values = isPlainObject(name) || kv(name, value);\r\n    var context = tree.setNode(element);\r\n    var newValues = {};\r\n    for (var i in values) {\r\n        if (isFunction(values[i])) {\r\n            defineGetterProperty(context, i, values[i], noop);\r\n        } else {\r\n            defineOwnProperty(context, i, context[i]);\r\n            newValues[i] = values[i];\r\n        }\r\n    }\r\n    return setVar(element, newValues);\r\n}\r\n\r\n/**\r\n * @param {Element} element\r\n * @param {boolean=} resetToNull\r\n */\r\nexport function resetVar(element, resetToNull) {\r\n    batch(function () {\r\n        each(tree.descendants(element), function (i, v) {\r\n            setVar(v.element, getDeclaredVar(v.element, resetToNull));\r\n        });\r\n    });\r\n}\r\n\r\n/**\r\n * @param {Element} element\r\n * @param {string|boolean=} name\r\n */\r\nexport function getVar(element, name) {\r\n    var values = hasDataAttributes(element) ? tree.setNode(element) : tree.getNode(element) || {};\r\n    if (name !== true) {\r\n        return name ? values[name] : extend({}, values);\r\n    }\r\n    // @ts-ignore: element property exists on tree node\r\n    if (values.element !== element) {\r\n        return {};\r\n    }\r\n    var keys = Object.getOwnPropertyNames(values);\r\n    keys.splice(keys.indexOf('element'), 1);\r\n    return pick(values, keys);\r\n}\r\n\r\n/**\r\n * @param {string} template\r\n * @param {any} context\r\n * @param {Element} element\r\n * @param {string} attrName\r\n * @param {boolean=} templateMode\r\n */\r\nexport function evaluate(template, context, element, attrName, templateMode) {\r\n    return (templateMode ? evalTemplate : evalExpression)(template, context);\r\n}\r\n\r\nexport function evalExpression(template, context) {\r\n    return template ? waterpipe.eval(template, extend({}, context), { globals }) : null;\r\n}\r\n\r\nexport function evalTemplate(template, context, html) {\r\n    return template ? waterpipe(template, extend({}, context), { globals, html: !!html }) : '';\r\n}\r\n\r\n/**\r\n * @param {Element} element\r\n * @param {string} attrName\r\n * @param {boolean=} templateMode\r\n */\r\nexport function evalAttr(element, attrName, templateMode) {\r\n    return (templateMode ? evalTemplate : evalExpression)(getAttr(element, attrName), getVar(element));\r\n}\r\n\r\ntree.on('update', function (e) {\r\n    each(e.updatedNodes, function (i, v) {\r\n        markUpdated(v.element);\r\n    });\r\n});\r\n","import { is, makeArray } from \"../include/zeta-dom/util.js\";\r\n\r\nfunction toElementTag(element) {\r\n    return element.tagName.toLowerCase() + (element.id ? '#' + element.id : element.className.trim() && element.className.replace(/^\\s*|\\s+(?=\\S)/g, '.'));\r\n}\r\n\r\nfunction truncateJSON(json) {\r\n    return '[{\"]'.indexOf(json[0]) >= 0 && json.length > 200 ? json[0] + json.substr(1, 199) + '\\u2026' + json[json.length - 1] : json;\r\n}\r\n\r\nfunction formatMessage(eventSource, message) {\r\n    message = makeArray(message).map(function (v) {\r\n        return is(v, Element) ? toElementTag(v) + ':' : v && typeof v === 'object' ? truncateJSON(JSON.stringify(v)) : v;\r\n    }).join(' ');\r\n    return '[' + eventSource + '] ' + message;\r\n}\r\n\r\n/**\r\n * @param {string} eventSource\r\n * @param {string | Element | Record<any, any> | any[]} message\r\n */\r\nexport function writeLog(eventSource, message) {\r\n    console.log(formatMessage(eventSource, message));\r\n}\r\n\r\n/**\r\n * @param {string} eventSource\r\n * @param {string | Element | Record<any, any> | any[]} message\r\n * @param {(console: Console) => void} callback\r\n */\r\nexport function groupLog(eventSource, message, callback) {\r\n    var close;\r\n    try {\r\n        console.groupCollapsed(formatMessage(eventSource, message));\r\n        close = true;\r\n    } catch (e) { }\r\n    try {\r\n        callback(console);\r\n    } finally {\r\n        if (close) {\r\n            try {\r\n                console.groupEnd();\r\n            } catch (e) { }\r\n        }\r\n    }\r\n}\r\n","import $ from \"./include/external/jquery.js\";\r\nimport { setClass, selectIncludeSelf, containsOrEquals } from \"./include/zeta-dom/domUtil.js\";\r\nimport { cancelLock, locked, notifyAsync } from \"./include/zeta-dom/domLock.js\";\r\nimport dom from \"./include/zeta-dom/dom.js\";\r\nimport { each, extend, makeArray, mapGet, resolveAll, any, noop, setImmediate, throwNotFunction, isThenable, createPrivateStore, mapRemove, grep, makeAsync, setImmediateOnce, arrRemove } from \"./include/zeta-dom/util.js\";\r\nimport { app } from \"./app.js\";\r\nimport { animateOut, animateIn } from \"./anim.js\";\r\nimport { groupLog } from \"./util/console.js\";\r\nimport { getVar, resetVar } from \"./var.js\";\r\nimport { isBoolAttr, selectorForAttr } from \"./util/common.js\";\r\n\r\nconst _ = createPrivateStore();\r\nconst root = dom.root;\r\nconst updatedElements = new Set();\r\nconst pendingDOMUpdates = new Map();\r\nconst preupdateHandlers = [];\r\nconst matchElementHandlers = [];\r\nconst selectorHandlers = [];\r\n/** @type {Zeta.Dictionary<Brew.DOMProcessorCallback>} */\r\nconst transformationHandlers = {};\r\n/** @type {Zeta.Dictionary<Brew.DOMProcessorCallback>} */\r\nconst renderHandlers = {};\r\n\r\nvar batchCounter = 0;\r\nvar stateChangeLock = false;\r\n\r\nfunction getComponentState(ns, element) {\r\n    var obj = _(element) || _(element, {});\r\n    return obj[ns] || (obj[ns] = {});\r\n}\r\n\r\nfunction updateDOM(element, props, suppressEvent) {\r\n    each(props, function (j, v) {\r\n        if (j === '$$class') {\r\n            setClass(element, v);\r\n        } else if (j === '$$text') {\r\n            element.textContent = v;\r\n        } else if (j === '$$html') {\r\n            element.innerHTML = v;\r\n        } else if (j === 'style') {\r\n            $(element).css(v);\r\n        } else if (isBoolAttr(element, j)) {\r\n            element[j] = !!v;\r\n        } else {\r\n            element.setAttribute(j, v);\r\n        }\r\n    });\r\n    if (!suppressEvent) {\r\n        dom.emit('domchange', element);\r\n    }\r\n}\r\n\r\nfunction mergeDOMUpdates(dict, props) {\r\n    each(props, function (j, v) {\r\n        if (j === '$$class' || j === 'style') {\r\n            dict[j] = extend({}, dict[j], v);\r\n        } else {\r\n            dict[j] = v;\r\n        }\r\n    });\r\n}\r\n\r\nfunction processTransform(elements, applyDOMUpdates) {\r\n    var selector = selectorForAttr(transformationHandlers);\r\n    if (!selector) {\r\n        return;\r\n    }\r\n    var transformed = new Set();\r\n    var exclude;\r\n    do {\r\n        elements = grep(makeArray(elements), function (v) {\r\n            return containsOrEquals(root, v);\r\n        });\r\n        exclude = makeArray(transformed);\r\n        $(selectIncludeSelf(selector, elements)).not(exclude).each(function (j, element) {\r\n            each(transformationHandlers, function (i, v) {\r\n                if (element.attributes[i]) {\r\n                    v(element, getComponentState.bind(0, i), applyDOMUpdates);\r\n                    transformed.add(element);\r\n                }\r\n            });\r\n        });\r\n    } while (exclude.length !== transformed.size);\r\n}\r\n\r\nfunction processRender(elements, updatedProps, applyDOMUpdates) {\r\n    var selector = selectorForAttr(renderHandlers);\r\n    if (!selector) {\r\n        return;\r\n    }\r\n    var visited = [];\r\n    each(elements.reverse(), function (i, v) {\r\n        groupLog('statechange', [v, updatedProps.get(v).newValues], function (console) {\r\n            console.log(v === root ? document : v);\r\n            $(selectIncludeSelf(selector, v)).not(visited).each(function (i, element) {\r\n                each(renderHandlers, function (i, v) {\r\n                    if (element.attributes[i]) {\r\n                        v(element, getComponentState.bind(0, i), applyDOMUpdates);\r\n                    }\r\n                });\r\n                visited.push(element);\r\n            });\r\n        });\r\n    });\r\n}\r\n\r\n/**\r\n * @param {string} target\r\n * @param {Zeta.Dictionary} handlers\r\n * @param {any[]} unbindHandlers\r\n */\r\nexport function addSelectHandlers(target, handlers, unbindHandlers) {\r\n    var obj = {\r\n        target: target,\r\n        handlers: handlers,\r\n        unbindHandlers: unbindHandlers\r\n    };\r\n    selectorHandlers.push(obj);\r\n    unbindHandlers.push(function () {\r\n        // remove entries from array in next event loop\r\n        // to prevent misindexing in mountElement\r\n        obj.disposed = true;\r\n        setImmediate(function () {\r\n            arrRemove(selectorHandlers, obj);\r\n        });\r\n    });\r\n}\r\n\r\n/**\r\n * @param {string} selector\r\n * @param {(ele: Element) => void} handler\r\n */\r\nexport function matchElement(selector, handler) {\r\n    matchElementHandlers.push({ selector, handler });\r\n}\r\n\r\n/**\r\n * @param {(domChanges: Map<Element, Brew.DOMUpdateState>) => Brew.PromiseOrEmpty} callback\r\n */\r\nexport function hookBeforeUpdate(callback) {\r\n    preupdateHandlers.push(throwNotFunction(callback));\r\n}\r\n\r\n/**\r\n * @param {Promise<any>} promise\r\n * @param {Element=} element\r\n * @param {() => any=} callback\r\n */\r\nexport function handleAsync(promise, element, callback) {\r\n    if (!isThenable(promise)) {\r\n        return makeAsync(callback || noop)();\r\n    }\r\n    notifyAsync(element || root, promise);\r\n    return promise.then(callback);\r\n}\r\n\r\n/**\r\n * @param {Element} element\r\n */\r\nexport function markUpdated(element) {\r\n    if (containsOrEquals(root, element)) {\r\n        updatedElements.add(element);\r\n    }\r\n}\r\n\r\n/**\r\n * @param {boolean=} suppressAnim\r\n */\r\nexport function processStateChange(suppressAnim) {\r\n    if (batchCounter || stateChangeLock) {\r\n        return;\r\n    }\r\n    var updatedProps = new Map();\r\n    var domUpdates = new Map();\r\n    var applyDOMUpdates = function (element, props) {\r\n        var dict = mapGet(domUpdates, element, Object);\r\n        mergeDOMUpdates(dict, props);\r\n    };\r\n    stateChangeLock = true;\r\n    try {\r\n        groupLog(dom.eventSource, 'statechange', function () {\r\n            // recursively perform transformation until there is no new element produced\r\n            processTransform(updatedElements, applyDOMUpdates);\r\n\r\n            var arr = $.uniqueSort(grep(updatedElements, function (v) {\r\n                return containsOrEquals(root, v);\r\n            }));\r\n            updatedElements.clear();\r\n            each(arr, function (i, v) {\r\n                var state = getComponentState('oldValues', v);\r\n                var oldValues = {};\r\n                var newValues = {};\r\n                each(getVar(v, true), function (j, v) {\r\n                    if (state[j] !== v) {\r\n                        oldValues[j] = state[j];\r\n                        newValues[j] = v;\r\n                        state[j] = v;\r\n                    }\r\n                });\r\n                updatedProps.set(v, {\r\n                    oldValues: oldValues,\r\n                    newValues: newValues\r\n                });\r\n                while (v = v.parentNode) {\r\n                    var parent = updatedProps.get(v);\r\n                    if (parent) {\r\n                        for (var j in parent.newValues) {\r\n                            if (!(j in newValues)) {\r\n                                newValues[j] = parent.newValues[j];\r\n                                oldValues[j] = parent.oldValues[j];\r\n                            }\r\n                        }\r\n                    }\r\n                }\r\n            });\r\n\r\n            processRender(arr, updatedProps, applyDOMUpdates);\r\n        });\r\n\r\n        // perform any async task that is related or required by the DOM changes\r\n        var preupdatePromise = resolveAll(preupdateHandlers.map(function (v) {\r\n            return v(domUpdates);\r\n        }));\r\n\r\n        // perform DOM updates, or add to pending updates if previous update is not completed\r\n        // also wait for animation completed if suppressAnim is off\r\n        preupdatePromise.then(function () {\r\n            var animScopes = new Map();\r\n            if (!suppressAnim) {\r\n                each(updatedProps, function (element) {\r\n                    var animParent = $(element).filter('[match-path]')[0] || $(element).parents('[match-path]')[0] || root;\r\n                    var groupElements = animScopes.get(animParent);\r\n                    if (!groupElements) {\r\n                        var filter = function (v) {\r\n                            var haystack = v.getAttribute('animate-on-statechange');\r\n                            if (!haystack) {\r\n                                return true;\r\n                            }\r\n                            for (var cur; v && !(cur = updatedProps.get(v)); v = v.parentNode);\r\n                            return cur && any(haystack, function (v) {\r\n                                return v in cur.newValues;\r\n                            });\r\n                        };\r\n                        groupElements = [];\r\n                        setImmediate(function () {\r\n                            animateOut(animParent, 'statechange', '[match-path]', filter, true).then(function () {\r\n                                each(groupElements, function (i, v) {\r\n                                    updateDOM(v, mapRemove(pendingDOMUpdates, v));\r\n                                });\r\n                                animateIn(animParent, 'statechange', '[match-path]', filter);\r\n                            });\r\n                        });\r\n                        animScopes.set(animParent, groupElements);\r\n                    }\r\n                    mapGet(pendingDOMUpdates, element, Object);\r\n                    groupElements.push(element);\r\n                });\r\n            }\r\n            each(domUpdates, function (element, props) {\r\n                if (pendingDOMUpdates.has(element)) {\r\n                    mergeDOMUpdates(pendingDOMUpdates.get(element), props);\r\n                } else {\r\n                    updateDOM(element, props);\r\n                }\r\n            });\r\n            each(updatedProps, function (i, v) {\r\n                dom.emit('statechange', i, {\r\n                    data: getVar(i),\r\n                    newValues: v.newValues,\r\n                    oldValues: v.oldValues\r\n                }, true);\r\n            });\r\n        });\r\n    } finally {\r\n        stateChangeLock = false;\r\n    }\r\n}\r\n\r\n/**\r\n *\r\n * @param {true|(()=>void)} suppressAnim\r\n * @param {()=>void=} callback\r\n */\r\nexport function batch(suppressAnim, callback) {\r\n    var doUpdate = true;\r\n    try {\r\n        batchCounter = (batchCounter || 0) + 1;\r\n        throwNotFunction(callback || suppressAnim)();\r\n    } catch (e) {\r\n        doUpdate = false;\r\n        throw e;\r\n    } finally {\r\n        if (!--batchCounter && doUpdate) {\r\n            processStateChange(suppressAnim === true);\r\n        }\r\n    }\r\n}\r\n\r\n/**\r\n * @param {Element} element\r\n */\r\nexport function mountElement(element) {\r\n    // apply transforms before element mounted\r\n    // suppress domchange event before element is mounted\r\n    var prevStateChangeLock = stateChangeLock;\r\n    stateChangeLock = true;\r\n    resetVar(element);\r\n    try {\r\n        processTransform(element, function (element, props) {\r\n            updateDOM(element, props, true);\r\n        });\r\n    } finally {\r\n        stateChangeLock = prevStateChangeLock;\r\n    }\r\n\r\n    var mountedElements = [element];\r\n    var firedOnRoot = element === root;\r\n    var index = -1, index2 = 0;\r\n    while (index < selectorHandlers.length) {\r\n        each(selectorHandlers.slice(index < 0 ? 0 : index), function (i, v) {\r\n            if (!v.disposed) {\r\n                $(selectIncludeSelf(v.target, element)).each(function (i, w) {\r\n                    if (index < 0) {\r\n                        v.unbindHandlers.push(app.on(w, v.handlers));\r\n                    }\r\n                    if (v.handlers.mounted && mountedElements.indexOf(w) < 0) {\r\n                        mountedElements.push(w);\r\n                    }\r\n                });\r\n            }\r\n        });\r\n        index = selectorHandlers.length;\r\n        each($.uniqueSort(mountedElements.slice(index2)), function (i, v) {\r\n            dom.emit('mounted', v);\r\n        });\r\n        if (!firedOnRoot) {\r\n            firedOnRoot = true;\r\n            dom.emit('mounted', root, { target: element });\r\n        }\r\n        index2 = mountedElements.length;\r\n    }\r\n    each(matchElementHandlers, function (i, v) {\r\n        $(selectIncludeSelf(v.selector, element)).each(function (i, w) {\r\n            v.handler.call(w, w);\r\n        });\r\n    });\r\n    markUpdated(element);\r\n    setImmediateOnce(processStateChange);\r\n}\r\n\r\n/**\r\n * @param {boolean=} suppressPrompt\r\n */\r\nexport function preventLeave(suppressPrompt) {\r\n    return suppressPrompt ? locked(root) : cancelLock(root);\r\n}\r\n\r\nexport function addTemplate(name, template) {\r\n    $(template).clone().attr('brew-template', name).appendTo(document.body);\r\n}\r\n\r\nexport function addTransformer(name, callback) {\r\n    transformationHandlers[name] = throwNotFunction(callback);\r\n}\r\n\r\nexport function addRenderer(name, callback) {\r\n    renderHandlers[name] = throwNotFunction(callback);\r\n}\r\n","import Promise from \"./include/external/promise-polyfill.js\";\r\nimport $ from \"./include/external/jquery.js\";\r\nimport { selectIncludeSelf, isVisible } from \"./include/zeta-dom/domUtil.js\";\r\nimport { catchAsync, resolve, resolveAll, each, throwNotFunction, errorWithCode } from \"./include/zeta-dom/util.js\";\r\nimport { runCSSTransition } from \"./include/zeta-dom/cssUtil.js\";\r\nimport * as ErrorCode from \"./errorCode.js\";\r\nimport dom from \"./include/zeta-dom/dom.js\";\r\n\r\nconst customAnimateIn = {};\r\nconst customAnimateOut = {};\r\nconst animatingElements = new Map();\r\n\r\nvar nextId = 0;\r\n\r\nfunction handleAnimation(element, elements, promises, trigger) {\r\n    if (!promises.length) {\r\n        return resolve();\r\n    }\r\n    var id = ++nextId;\r\n    var timeout, timeoutReject, timeoutResolve;\r\n    promises = promises.map(function (v) {\r\n        return v instanceof Promise ? catchAsync(v) : new Promise(function (resolve) {\r\n            v.then(resolve, resolve);\r\n        });\r\n    });\r\n    catchAsync(resolveAll(promises, function () {\r\n        clearTimeout(timeout);\r\n        timeoutResolve();\r\n        animatingElements.delete(element);\r\n    }));\r\n    promises.push(new Promise(function (resolve, reject) {\r\n        timeoutResolve = resolve;\r\n        timeoutReject = reject;\r\n    }));\r\n    timeout = setTimeout(function () {\r\n        timeoutReject(errorWithCode(ErrorCode.timeout, 'Animation timed out'));\r\n        console.warn('Animation #%i might take longer than expected', id, promises);\r\n        animatingElements.delete(element);\r\n    }, 1500);\r\n\r\n    var promise = catchAsync(resolveAll(promises));\r\n    animatingElements.set(element, promise);\r\n    return promise;\r\n}\r\n\r\nfunction animateElement(element, cssClass, eventName, customAnimation) {\r\n    var promises = [runCSSTransition(element, cssClass), dom.emit(eventName, element)];\r\n    var delay = parseFloat($(element).css('transition-delay')) || 0;\r\n    each(customAnimation, function (i, v) {\r\n        if (element.attributes[i]) {\r\n            var attrValue = element.getAttribute(i);\r\n            promises.push(new Promise(function (resolve, reject) {\r\n                setTimeout(function () {\r\n                    resolveAll(v(element, attrValue)).then(resolve, reject);\r\n                }, delay * 1000);\r\n            }));\r\n        }\r\n    });\r\n    return resolveAll(promises, function () {\r\n        return element;\r\n    });\r\n}\r\n\r\n/**\r\n * @param {Element} element\r\n * @param {string} trigger\r\n * @param {string=} scope\r\n * @param {((elm: Element) => boolean)=} filterCallback\r\n */\r\nexport function animateIn(element, trigger, scope, filterCallback) {\r\n    if (animatingElements.has(element)) {\r\n        return animatingElements.get(element).then(function () {\r\n            return animateIn(element, trigger, scope, filterCallback);\r\n        });\r\n    }\r\n    filterCallback = filterCallback || function () { return true; };\r\n    dom.emit('animationstart', element, { animationType: 'in', animationTrigger: trigger }, true);\r\n\r\n    var $innerScope = scope ? $(scope, element) : $();\r\n    var filter = trigger === 'show' ? ':not([animate-on]), [animate-on~=\"' + trigger + '\"]' : '[animate-on~=\"' + trigger + '\"]';\r\n    var elements = [];\r\n    var promises = [];\r\n\r\n    $(selectIncludeSelf('[animate-in]', element)).filter(filter).each(function (i, v) {\r\n        // @ts-ignore: filterCallback must be function\r\n        if (!$innerScope.find(v)[0] && filterCallback(v) && isVisible(v)) {\r\n            elements.push(v);\r\n            promises.push(animateElement(v, 'tweening-in', 'animatein', customAnimateIn));\r\n        }\r\n    });\r\n    $(selectIncludeSelf('[animate-sequence]', element)).filter(filter).each(function (i, v) {\r\n        // @ts-ignore: filterCallback must be function\r\n        if (!$innerScope.find(v)[0] && filterCallback(v) && isVisible(v)) {\r\n            var selector = v.getAttribute('animate-sequence') || '';\r\n            var type = v.getAttribute('animate-sequence-type') || '';\r\n            var $elements = $(v).find(selector[0] === '>' ? selector : $(selector));\r\n            if ($(v).attr('animate-sequence-reverse') !== undefined) {\r\n                [].reverse.apply($elements);\r\n            }\r\n            $elements.css('transition-duration', '0s');\r\n            $elements.attr('animate-in', type).attr('is-animate-sequence', '');\r\n            $elements.each(function (i, v) {\r\n                if ($(v).css('display') === 'inline') {\r\n                    // transform cannot apply on inline elements\r\n                    $(v).css('display', 'inline-block');\r\n                }\r\n                elements.push(v);\r\n                promises.push(new Promise(function (resolve, reject) {\r\n                    setTimeout(function () {\r\n                        $(v).css('transition-duration', '');\r\n                        animateElement(v, 'tweening-in', 'animatein', customAnimateIn).then(resolve, reject);\r\n                    }, i * 50);\r\n                }));\r\n            });\r\n            if (!v.attributes['animate-in']) {\r\n                $(v).attr('animate-in', '').addClass('tweening-in');\r\n            }\r\n        }\r\n    });\r\n    return handleAnimation(element, elements, promises, trigger).then(function () {\r\n        dom.emit('animationcomplete', element, { animationType: 'in', animationTrigger: trigger }, true);\r\n    });\r\n}\r\n\r\n/**\r\n * @param {Element} element\r\n * @param {string} trigger\r\n * @param {string=} scope\r\n * @param {((elm: Element) => boolean)=} filterCallback\r\n * @param {boolean=} excludeSelf\r\n */\r\nexport function animateOut(element, trigger, scope, filterCallback, excludeSelf) {\r\n    filterCallback = filterCallback || function () { return true; };\r\n    dom.emit('animationstart', element, { animationType: 'out', animationTrigger: trigger }, true);\r\n\r\n    var $innerScope = scope ? $(scope, element) : $();\r\n    var filter = trigger === 'show' ? ':not([animate-on]), [animate-on~=\"' + trigger + '\"]' : '[animate-on~=\"' + trigger + '\"]';\r\n    var elements = [];\r\n    var promises = [];\r\n\r\n    // @ts-ignore: type inference issue\r\n    var $target = $((excludeSelf ? $ : selectIncludeSelf)('[animate-out]', element)).filter(filter);\r\n    $target.each(function (i, v) {\r\n        // @ts-ignore: filterCallback must be function\r\n        if (!$innerScope.find(v)[0] && filterCallback(v)) {\r\n            elements.push(v);\r\n            promises.push(animateElement(v, 'tweening-out', 'animateout', customAnimateOut));\r\n        }\r\n    });\r\n    return handleAnimation(element, elements, promises, trigger).then(function () {\r\n        // reset animation state after outro animation has finished\r\n        // @ts-ignore: type inference issue\r\n        var $target = $((excludeSelf ? $ : selectIncludeSelf)('[animate-out], .tweening-in, .tweening-out', element));\r\n        if (trigger !== 'show') {\r\n            $target = $target.filter(filter);\r\n        }\r\n        $target = $target.filter(function (i, v) {\r\n            // @ts-ignore: filterCallback must be function\r\n            return filterCallback(v);\r\n        });\r\n        $target.removeClass('tweening-in tweening-out');\r\n        $target.find('[is-animate-sequence]').removeAttr('animate-in').removeClass('tweening-in tweening-out');\r\n        dom.emit('animationcomplete', element, { animationType: 'out', animationTrigger: trigger }, true);\r\n    });\r\n}\r\n\r\n/**\r\n * @param {string} name\r\n * @param {(elm: Element, attrValue: string) => Promise<any>} callback\r\n */\r\nexport function addAnimateIn(name, callback) {\r\n    customAnimateIn[name] = throwNotFunction(callback);\r\n}\r\n\r\n/**\r\n * @param {string} name\r\n * @param {(elm: Element, attrValue: string) => Promise<any>} callback\r\n */\r\nexport function addAnimateOut(name, callback) {\r\n    customAnimateOut[name] = throwNotFunction(callback);\r\n}\r\n","export * from \"zeta-dom/domLock\";\r\n","export const networkError = 'brew/network-error';\r\nexport const resourceError = 'brew/resource-error';\r\nexport const apiError = 'brew/api-error';\r\nexport const validationFailed = 'brew/validation-failed';\r\nexport const navigationCancelled = 'brew/navigation-cancelled';\r\nexport const navigationRejected = 'brew/navigation-rejected';\r\nexport const timeout = \"brew/timeout\";\r\n","// @ts-nocheck\r\n\r\n/** @type {PromiseConstructor} */\r\nconst Promise = window.Promise || require.cache[require.resolveWeak('promise-polyfill')].default;\r\nmodule.exports = Promise;\r\n","export * from \"zeta-dom/observe\";\r\n","export * from \"zeta-dom/cssUtil\";\r\n","import brew from \"brew-js/app\";\r\nexport * from \"brew-js/app\";\r\nexport default brew;\r\n","import dom from \"zeta-dom/dom\";\r\nexport * from \"zeta-dom/dom\";\r\nexport default dom;\r\n","import { createElement, useEffect, useState } from \"react\";\r\nimport ReactDOM from \"react-dom\";\r\nimport { always, catchAsync, either, extend, makeAsync, noop, pipe } from \"./include/zeta-dom/util.js\";\r\nimport { containsOrEquals, removeNode } from \"./include/zeta-dom/domUtil.js\";\r\nimport dom from \"./include/zeta-dom/dom.js\";\r\nimport { lock, preventLeave } from \"./include/zeta-dom/domLock.js\";\r\nimport { closeFlyout, openFlyout } from \"./include/brew-js/domAction.js\";\r\n\r\nconst createRoot = ReactDOM.createRoot;\r\n\r\n/**\r\n * @param {Partial<import(\"./dialog\").DialogOptions<any>>} props\r\n */\r\nexport function createDialog(props) {\r\n    var root = document.createElement('div');\r\n    var reactRoot = createRoot && createRoot(root);\r\n    var closeDialog = closeFlyout.bind(0, root);\r\n    var promise;\r\n\r\n    dom.on(root, 'flyouthide', function () {\r\n        removeNode(root);\r\n        (props.onClose || noop)(root);\r\n        if (props.onRender) {\r\n            if (reactRoot) {\r\n                reactRoot.unmount();\r\n            } else {\r\n                ReactDOM.unmountComponentAtNode(root);\r\n            }\r\n        }\r\n    });\r\n\r\n    return {\r\n        root: root,\r\n        close: closeDialog,\r\n        open: function () {\r\n            if (promise) {\r\n                return promise;\r\n            }\r\n            root.className = props.className || '';\r\n            document.body.appendChild(root);\r\n            dom.retainFocus(dom.activeElement, root);\r\n            if (props.modal) {\r\n                root.setAttribute('is-modal', '');\r\n                dom.setModal(root);\r\n            }\r\n            if (props.onRender) {\r\n                var dialogProps = extend({}, props, {\r\n                    closeDialog: function (value) {\r\n                        var promise = makeAsync(props.onCommit || pipe)(value);\r\n                        catchAsync(lock(dom.activeElement, promise));\r\n                        promise.then(closeDialog, noop);\r\n                    }\r\n                });\r\n                var content = createElement(props.onRender, dialogProps);\r\n                if (props.wrapper) {\r\n                    content = createElement(props.wrapper, dialogProps, content);\r\n                }\r\n                if (reactRoot) {\r\n                    reactRoot.render(content);\r\n                } else {\r\n                    ReactDOM.render(content, root);\r\n                }\r\n            }\r\n            promise = openFlyout(root);\r\n            if (props.preventLeave) {\r\n                preventLeave(root, promise);\r\n            } else if (props.preventNavigation) {\r\n                lock(root, promise);\r\n            }\r\n            always(promise, function () {\r\n                promise = null;\r\n            });\r\n            (props.onOpen || noop)(root);\r\n            return promise;\r\n        }\r\n    };\r\n}\r\n\r\n/**\r\n * @param {import(\"./dialog\").DialogProps} props\r\n */\r\nexport function Dialog(props) {\r\n    const _props = useState({})[0];\r\n    const dialog = useState(function () {\r\n        return createDialog(_props);\r\n    })[0];\r\n    extend(_props, props);\r\n\r\n    useEffect(function () {\r\n        var opened = containsOrEquals(dom.root, dialog.root);\r\n        if (either(opened, _props.isOpen)) {\r\n            if (!opened) {\r\n                dialog.open();\r\n            } else {\r\n                dialog.close();\r\n            }\r\n        }\r\n    }, [_props.isOpen])\r\n    useEffect(function () {\r\n        return dialog.close;\r\n    }, [dialog]);\r\n    return ReactDOM.createPortal(props.children, dialog.root);\r\n}\r\n","import { install } from \"./include/brew-js/app.js\";\r\nimport defaults from \"./include/brew-js/defaults.js\";\r\n\r\n/** @type {Brew.AppInstance<Brew.WithRouter & Brew.WithI18n>} */\r\nexport var app;\r\n\r\ninstall('react', function (app_) {\r\n    // @ts-ignore: type inference issue\r\n    app = app_;\r\n});\r\n\r\ndefaults.react = true;\r\n","import defaults from \"brew-js/defaults\";\r\nexport default defaults;\r\n","import React, { useRef } from \"react\";\nimport { combineRef, useAsync } from \"zeta-dom-react\";\nimport dom from \"./include/zeta-dom/dom.js\";\nimport { notifyAsync } from \"./include/zeta-dom/domLock.js\";\nimport { any, combineFn, defineObservableProperty, definePrototype, each, exclude, executeOnce, extend, grep, isFunction, keys, makeArray, map, noop, pick, randomId, setImmediate, single, watch } from \"./include/zeta-dom/util.js\";\nimport { animateIn, animateOut } from \"./include/brew-js/anim.js\";\nimport { removeQueryAndHash } from \"./include/brew-js/util/path.js\";\nimport { app } from \"./app.js\";\nimport { ViewStateContainer } from \"./hooks.js\";\n\nconst root = dom.root;\nconst routeMap = new Map();\nconst usedParams = {};\nconst sortedViews = [];\nconst StateContext = React.createContext(Object.freeze({ active: true }));\n\nfunction ViewContainer() {\n    React.Component.apply(this, arguments);\n    this.stateId = history.state;\n}\n\ndefinePrototype(ViewContainer, React.Component, {\n    componentDidMount: function () {\n        /** @type {any} */\n        var self = this;\n        self.componentWillUnmount = combineFn(\n            watch(app.route, function () {\n                self.setActive(self.getViewComponent() === self.currentViewComponent);\n            }),\n            app.on('beforepageload', function (e) {\n                self.waitFor = e.waitFor;\n                self.stateId = history.state;\n                self.forceUpdate();\n            })\n        );\n    },\n    componentDidCatch: function (error) {\n        dom.emit('error', this.parentElement || root, { error }, true);\n    },\n    render: function () {\n        /** @type {any} */\n        var self = this;\n        if (history.state !== self.stateId) {\n            return self.lastChild || null;\n        }\n        var V = self.getViewComponent();\n        if (V) {\n            // ensure the current path actually corresponds to the matched view\n            // when some views are not included in the list of allowed views\n            var targetPath = linkTo(V, getCurrentParams(V, true));\n            if (targetPath !== removeQueryAndHash(app.path)) {\n                app.navigate(targetPath, true);\n            }\n        }\n        if (V && V !== self.currentViewComponent) {\n            var prevElement = self.currentElement;\n            if (prevElement) {\n                self.setActive(false);\n                self.prevView = self.currentView;\n                self.currentElement = undefined;\n                app.emit('pageleave', prevElement, { pathname: self.currentPath }, true);\n                animateOut(prevElement, 'show').then(function () {\n                    self.prevView = undefined;\n                    self.forceUpdate();\n                });\n            }\n            var resolve;\n            var promise = new Promise(function (resolve_) {\n                resolve = resolve_;\n            });\n            var state = { view: V };\n            var view = React.createElement(StateContext.Provider, { key: routeMap.get(V).id, value: state },\n                React.createElement(ViewStateContainer, null,\n                    React.createElement(V, {\n                        rootProps: self.props.rootProps,\n                        onComponentLoaded: executeOnce(function (element) {\n                            self.currentElement = element;\n                            self.parentElement = element.parentElement;\n                            setImmediate(function () {\n                                resolve();\n                                animateIn(element, 'show');\n                                app.emit('pageenter', element, { pathname: app.path }, true);\n                            });\n                        })\n                    })));\n            extend(self, {\n                currentPath: app.path,\n                currentView: view,\n                currentViewComponent: V,\n                setActive: defineObservableProperty(state, 'active', true, true)\n            });\n            (self.waitFor || noop)(promise);\n            notifyAsync(self.parentElement || root, promise);\n        }\n        var child = React.createElement(React.Fragment, null, self.prevView, self.currentView);\n        self.lastChild = child;\n        return child;\n    },\n    getViewComponent: function () {\n        var props = this.props;\n        return any(props.views, isViewMatched) || props.defaultView;\n    }\n});\n\nfunction getCurrentParams(view, includeAll, params) {\n    var state = routeMap.get(view);\n    if (!state.maxParams) {\n        var matchers = exclude(state.matchers, ['remainingSegments']);\n        var matched = map(app.routes, function (v) {\n            var route = app.parseRoute(v);\n            var matched = route.length && !any(matchers, function (v, i) {\n                var pos = route.params[i];\n                return (v ? !(pos >= 0) : pos < route.minLength) || (!isFunction(v) && !route.match(i, v));\n            });\n            return matched ? route : null;\n        });\n        if (matched[1]) {\n            matched = grep(matched, function (v) {\n                return !single(v.params, function (v, i) {\n                    return usedParams[i] && !matchers[i];\n                });\n            });\n        }\n        if (matched[0]) {\n            var last = matched.slice(-1)[0];\n            state.maxParams = keys(extend.apply(0, [{}].concat(matched.map(function (v) {\n                return v.params;\n            }))));\n            state.minParams = map(last.params, function (v, i) {\n                return state.params[i] || v >= last.minLength ? null : i;\n            });\n        }\n    }\n    return pick(params || app.route, includeAll ? state.maxParams : state.minParams);\n}\n\nfunction sortViews(a, b) {\n    return (routeMap.get(b) || {}).matchCount - (routeMap.get(a) || {}).matchCount;\n}\n\nfunction matchViewParams(view, route) {\n    var params = routeMap.get(view);\n    return !!params && !single(params.matchers, function (v, i) {\n        var value = route[i] || '';\n        return isFunction(v) ? !v(value) : (v || '') !== value;\n    });\n}\n\nexport function useViewContainerState() {\n    return React.useContext(StateContext);\n}\n\nexport function isViewMatched(view) {\n    return matchViewParams(view, app.route);\n}\n\nexport function matchView(path, views) {\n    var route = app.route;\n    if (typeof path === 'string') {\n        route = route.parse(path);\n    } else {\n        views = path;\n    }\n    views = views ? makeArray(views).sort(sortViews) : sortedViews;\n    return any(views, function (v) {\n        return matchViewParams(v, route);\n    }) || undefined;\n}\n\nexport function registerView(factory, routeParams) {\n    var Component = function (props) {\n        var state = useAsync(factory);\n        var ref = useRef();\n        if (state[0] || state[1].error) {\n            (props.onComponentLoaded || noop)(ref.current);\n        }\n        return React.createElement('div', extend({}, props.rootProps, {\n            ref: combineRef(ref, state[1].elementRef),\n            children: state[0] && React.createElement(state[0].default)\n        }));\n    };\n    routeParams = extend({}, routeParams);\n    each(routeParams, function (i, v) {\n        usedParams[i] = true;\n        if (v instanceof RegExp) {\n            routeParams[i] = v.test.bind(v);\n        }\n    });\n    routeMap.set(Component, {\n        id: randomId(),\n        matchCount: keys(routeParams).length,\n        matchers: routeParams,\n        params: pick(routeParams, function (v) {\n            return typeof v === 'string';\n        })\n    });\n    sortedViews.push(Component);\n    sortedViews.sort(sortViews);\n    return Component;\n}\n\nexport function renderView() {\n    var views = makeArray(arguments);\n    var rootProps = isFunction(views[0]) ? {} : views.shift();\n    var defaultView = views[0];\n    views.sort(sortViews);\n    return React.createElement(ViewContainer, { rootProps, views, defaultView });\n}\n\nexport function linkTo(view, params) {\n    var state = routeMap.get(view);\n    if (!state) {\n        return '/';\n    }\n    var newParams = extend(getCurrentParams(view), getCurrentParams(view, true, params), state.params);\n    return app.route.getPath(newParams);\n}\n\nexport function navigateTo(view, params) {\n    return app.navigate(linkTo(view, params));\n}\n\nexport function redirectTo(view, params) {\n    return app.navigate(linkTo(view, params), true);\n}\n","import { createElement, useEffect, useRef, useState } from \"react\";\r\nimport { ViewStateProvider } from \"zeta-dom-react\";\r\nimport { definePrototype, extend, kv, setImmediateOnce, throwNotFunction, watch } from \"./include/zeta-dom/util.js\";\r\nimport { ZetaEventContainer } from \"./include/zeta-dom/events.js\";\r\nimport { app } from \"./app.js\";\r\nimport { useViewContainerState } from \"./view.js\";\r\n\r\nconst emitter = new ZetaEventContainer();\r\nconst states = {};\r\n\r\nfunction getCurrentStates() {\r\n    return states[history.state] || (states[history.state] = {});\r\n}\r\n\r\nfunction ViewState(key, value) {\r\n    this.key = key;\r\n    this.value = value;\r\n}\r\n\r\ndefinePrototype(ViewState, {\r\n    get: function () {\r\n        return this.value;\r\n    },\r\n    set: function (value) {\r\n        this.value = value;\r\n    },\r\n    onPopState: function (callback) {\r\n        throwNotFunction(callback);\r\n        return emitter.add(this, 'popstate', function (e) {\r\n            callback.call(this, e.newValue);\r\n        });\r\n    }\r\n});\r\n\r\nexport function useAppReady() {\r\n    const sReady = useState(false);\r\n    const ready = sReady[0], setReady = sReady[1];\r\n    useEffect(function () {\r\n        app.ready.then(function () {\r\n            setReady(true);\r\n        });\r\n    }, []);\r\n    return ready;\r\n}\r\n\r\nexport function useRouteParam(name, defaultValue) {\r\n    const container = useViewContainerState();\r\n    const route = app.route;\r\n    const value = route[name] || '';\r\n    const ref = useRef(value);\r\n    const forceUpdate = useState()[1];\r\n    useEffect(function () {\r\n        var setValue = function () {\r\n            var current = route[name] || '';\r\n            if (current !== ref.current) {\r\n                if (container.active) {\r\n                    ref.current = current;\r\n                    forceUpdate({});\r\n                } else {\r\n                    watch(container, 'active', setValue);\r\n                }\r\n            }\r\n        };\r\n        // route parameter might be changed after state initialization and before useEffect hook is called\r\n        setValue();\r\n        if (name in route) {\r\n            return route.watch(name, function () {\r\n                setImmediateOnce(setValue);\r\n            });\r\n        }\r\n        console.error('Route parameter ' + name + ' does not exist');\r\n    }, [name, defaultValue]);\r\n    ref.current = value;\r\n    if (!value && defaultValue !== undefined) {\r\n        app.navigate(route.getPath(extend({}, route, kv(name, defaultValue))), true);\r\n    }\r\n    return value;\r\n}\r\n\r\nexport function useRouteState(key, defaultValue) {\r\n    const container = useViewContainerState();\r\n    const cur = getCurrentStates();\r\n    const state = useState(key in cur ? cur[key] : defaultValue);\r\n    if (container.active) {\r\n        cur[key] = state[0];\r\n    }\r\n    return state;\r\n}\r\n\r\nexport function ViewStateContainer(props) {\r\n    const container = useViewContainerState();\r\n    const provider = useState(function () {\r\n        const cache = {};\r\n        return {\r\n            getState: function (uniqueId, key) {\r\n                var cur = getCurrentStates();\r\n                var state = cache[uniqueId] || (cache[uniqueId] = new ViewState(key, cur[key] && cur[key].value));\r\n                if (container.active) {\r\n                    var stateId = state.stateId;\r\n                    if (stateId && (stateId !== history.state || key !== state.key)) {\r\n                        var newValue = cur[key] && cur[key].value;\r\n                        emitter.emit('popstate', state, {\r\n                            newValue: newValue\r\n                        });\r\n                        // detach value in previous history state from current one\r\n                        var previous = new ViewState(state.key, state.value);\r\n                        states[stateId][previous.key] = previous;\r\n                        state.value = newValue;\r\n                        state.key = key;\r\n                    }\r\n                    state.stateId = history.state;\r\n                    cur[key] = state;\r\n                }\r\n                return state;\r\n            }\r\n        };\r\n    })[0];\r\n    return createElement(ViewStateProvider, { value: provider }, props.children);\r\n}\r\n","import { useObservableProperty } from \"zeta-dom-react\";\r\nimport waterpipe from \"./include/external/waterpipe.js\"\r\nimport { extend, keys, makeArray, single } from \"./include/zeta-dom/util.js\";\r\nimport { app } from \"./app.js\";\r\n\r\nconst empty = Object.create(null);\r\nconst toPrimitive = typeof Symbol === 'function' && Symbol.toPrimitive;\r\n\r\nfunction TString(toString) {\r\n    this.toString = toString;\r\n}\r\n\r\nif (toPrimitive) {\r\n    TString.prototype[toPrimitive] = function () {\r\n        return this.toString();\r\n    };\r\n}\r\n\r\nfunction createCallback(translate) {\r\n    var callback = function (key, data) {\r\n        var result = translate(key, data, true);\r\n        return result !== undefined ? result : key;\r\n    };\r\n    return extend(callback, {\r\n        html: function (id, data) {\r\n            return { __html: translate(id, data) };\r\n        },\r\n        lazy: function (id, data) {\r\n            return new TString(translate.bind(0, id, data, true));\r\n        }\r\n    });\r\n}\r\n\r\nexport function useLanguage() {\r\n    return useObservableProperty(app, 'language');\r\n}\r\n\r\nexport function makeTranslation(resources, defaultLang) {\r\n    const re = new RegExp('^(' + Object.keys(resources[defaultLang]).join('|') + ')\\\\.');\r\n    const cache = {};\r\n\r\n    function getTranslation(prefix, name, data, noEncode, lang) {\r\n        var str = ((resources[lang] || empty)[prefix] || empty)[name];\r\n        if (typeof str === 'string') {\r\n            if (str && (!noEncode || data !== undefined)) {\r\n                return waterpipe(str, data, { noEncode });\r\n            }\r\n            return str;\r\n        }\r\n        if (lang !== defaultLang) {\r\n            return getTranslation(prefix, name, data, noEncode, defaultLang);\r\n        }\r\n    }\r\n\r\n    function translate(key, data, noEncode) {\r\n        var prefix = re.test(key) ? RegExp.$1 : '';\r\n        var name = prefix ? key.slice(RegExp.lastMatch.length) : key;\r\n        return getTranslation(prefix, name, data, noEncode, app.language);\r\n    }\r\n\r\n    function getTranslationCallback() {\r\n        var prefix = makeArray(arguments);\r\n        var key = prefix.join(' ');\r\n        return cache[key] || (cache[key] = createCallback(function (key, data, noEncode) {\r\n            var lang = app.language;\r\n            return single(prefix, function (v) {\r\n                return getTranslation(v, key, data, noEncode, lang);\r\n            });\r\n        }));\r\n    }\r\n\r\n    function useTranslation() {\r\n        var language = useLanguage();\r\n        var t = getTranslationCallback.apply(0, arguments);\r\n        return { language, t };\r\n    }\r\n\r\n    cache[''] = createCallback(translate);\r\n    return {\r\n        translate: cache[''],\r\n        getTranslation: getTranslationCallback,\r\n        useTranslation: useTranslation,\r\n        keys: function (prefix) {\r\n            return keys(resources[defaultLang][prefix] || empty);\r\n        }\r\n    };\r\n}\r\n","import { definePrototype, extend } from \"../include/zeta-dom/util.js\";\r\nimport Mixin from \"./Mixin.js\";\r\n\r\nexport default function StaticAttributeMixin(attributes) {\r\n    Mixin.call(this);\r\n    this.attributes = attributes || {};\r\n}\r\n\r\ndefinePrototype(StaticAttributeMixin, Mixin, {\r\n    getCustomAttributes: function () {\r\n        return extend({}, this.attributes);\r\n    }\r\n});\r\n","import { classNames } from \"zeta-dom-react\";\r\nimport { combineFn, define, definePrototype, each, extend, makeArray, noop, watchable } from \"../include/zeta-dom/util.js\";\r\nimport StaticAttributeMixin from \"./StaticAttributeMixin.js\";\r\n\r\nexport default function Mixin() {\r\n}\r\n\r\ndefinePrototype(Mixin, {\r\n    next: function () {\r\n    },\r\n    getRef: function () {\r\n        return noop;\r\n    },\r\n    getClassNames: function () {\r\n        return [];\r\n    },\r\n    getCustomAttributes: function () {\r\n        return {};\r\n    },\r\n    dispose: function () {\r\n    }\r\n});\r\nwatchable(Mixin.prototype);\r\n\r\ndefine(Mixin, {\r\n    get scrollableTarget() {\r\n        return new StaticAttributeMixin({ 'scrollable-target': '' });\r\n    },\r\n    use: function () {\r\n        const args = makeArray(arguments);\r\n        const ref = args[0];\r\n        const props = {};\r\n        const mixins = args.filter(function (v) {\r\n            return v instanceof Mixin;\r\n        });\r\n        const refs = mixins.map(function (v) {\r\n            return v.getRef();\r\n        });\r\n        if (ref && !(ref instanceof Mixin)) {\r\n            if (typeof ref !== 'function') {\r\n                refs.push(function (v) {\r\n                    ref.current = v;\r\n                });\r\n            } else {\r\n                refs.push(ref);\r\n            }\r\n            args.shift();\r\n        } else if (!ref) {\r\n            args.shift();\r\n        }\r\n        each(mixins, function (i, v) {\r\n            extend(props, v.getCustomAttributes());\r\n        });\r\n        extend(props, {\r\n            ref: combineFn(refs),\r\n            className: classNames.apply(null, args)\r\n        });\r\n        each(mixins, function (i, v) {\r\n            v.next();\r\n        });\r\n        return props;\r\n    }\r\n});\r\n","import { combineFn, createPrivateStore, definePrototype, each, extend, inherit, randomId, setAdd, values, watch } from \"../include/zeta-dom/util.js\";\r\nimport Mixin from \"./Mixin.js\";\r\n\r\nconst _ = createPrivateStore();\r\n\r\nfunction MixinRefImpl(mixin) {\r\n    this.mixin = mixin;\r\n}\r\n\r\ndefinePrototype(MixinRefImpl, {\r\n    getMixin: function () {\r\n        return this.mixin;\r\n    }\r\n});\r\n\r\nexport default function StatefulMixin() {\r\n    Mixin.call(this);\r\n    _(this, {\r\n        elements: new WeakSet(),\r\n        flush: watch(this, false),\r\n        dispose: [],\r\n        states: {},\r\n        prefix: '',\r\n        counter: 0\r\n    });\r\n}\r\n\r\ndefinePrototype(StatefulMixin, Mixin, {\r\n    get ref() {\r\n        const self = this;\r\n        const state = self.state;\r\n        self.next();\r\n        return state.ref || (state.ref = new MixinRefImpl(self.clone()));\r\n    },\r\n    get state() {\r\n        const obj = _(this);\r\n        const key = obj.prefix + obj.counter;\r\n        return obj.states[key] || (obj.states[key] = this.initState());\r\n    },\r\n    reset: function () {\r\n        _(this).counter = 0;\r\n        return this;\r\n    },\r\n    next: function () {\r\n        _(this).counter++;\r\n        return this;\r\n    },\r\n    getRef: function () {\r\n        const self = this;\r\n        const state = self.state;\r\n        return function (current) {\r\n            state.element = current;\r\n            if (current && setAdd(_(self).elements, current)) {\r\n                self.initElement(current, state);\r\n            }\r\n        };\r\n    },\r\n    elements: function () {\r\n        return values(_(this).states).map(function (v) {\r\n            return v.element;\r\n        }).filter(function (v) {\r\n            return v;\r\n        });\r\n    },\r\n    onDispose: function (callback) {\r\n        _(this).dispose.push(callback);\r\n    },\r\n    initState: function () {\r\n        return { element: null };\r\n    },\r\n    initElement: function (element, state) {\r\n    },\r\n    clone: function () {\r\n        const self = this;\r\n        const clone = inherit(Object.getPrototypeOf(self), self);\r\n        _(clone, extend({}, _(self), {\r\n            prefix: randomId() + '.',\r\n            counter: 0\r\n        }));\r\n        return clone;\r\n    },\r\n    dispose: function () {\r\n        var state = _(this);\r\n        var states = state.states;\r\n        combineFn(state.dispose.splice(0))();\r\n        state.flush();\r\n        each(states, function (i, v) {\r\n            delete states[i];\r\n        });\r\n    }\r\n});\r\n","import { definePrototype, each, equal, extend, setImmediate } from \"../include/zeta-dom/util.js\";\r\nimport { containsOrEquals } from \"../include/zeta-dom/domUtil.js\";\r\nimport dom from \"../include/zeta-dom/dom.js\";\r\nimport StatefulMixin from \"./StatefulMixin.js\";\r\n\r\nconst ClassNameMixinSuper = StatefulMixin.prototype;\r\n\r\nfunction checkState(self, element, state, isAsync) {\r\n    var classNames = state.classNames;\r\n    var prev = extend({}, classNames);\r\n    each(self.classNames, function (i, v) {\r\n        classNames[v] = element.classList.contains(v);\r\n    });\r\n    if (!equal(prev, classNames)) {\r\n        var cb = self.onClassNameUpdated.bind(self, element, prev, extend({}, classNames));\r\n        if (isAsync) {\r\n            setImmediate(cb);\r\n        } else {\r\n            cb();\r\n        }\r\n    }\r\n}\r\n\r\nexport default function ClassNameMixin(classNames) {\r\n    StatefulMixin.call(this);\r\n    this.classNames = classNames || [];\r\n}\r\n\r\ndefinePrototype(ClassNameMixin, StatefulMixin, {\r\n    getClassNames: function () {\r\n        return [this.state.classNames];\r\n    },\r\n    getRef: function () {\r\n        var self = this;\r\n        var element = self.state.element;\r\n        if (element && containsOrEquals(dom.root, element)) {\r\n            checkState(self, element, self.state, true);\r\n        }\r\n        return ClassNameMixinSuper.getRef.call(this);\r\n    },\r\n    initState: function () {\r\n        return {\r\n            element: null,\r\n            classNames: {}\r\n        };\r\n    },\r\n    initElement: function (element, state) {\r\n        var self = this;\r\n        dom.watchAttributes(element, ['class'], function (nodes) {\r\n            if (nodes.includes(element)) {\r\n                checkState(self, element, state);\r\n            }\r\n        });\r\n    },\r\n    onClassNameUpdated: function (element, prevState, state) {\r\n    }\r\n});\r\n","import { definePrototype, extend, makeArray } from \"../include/zeta-dom/util.js\";\r\nimport ClassNameMixin from \"./ClassNameMixin.js\";\r\n\r\nconst AnimateMixinSuper = ClassNameMixin.prototype;\r\n\r\nexport default function AnimateMixin() {\r\n    ClassNameMixin.call(this, ['tweening-in', 'tweening-out']);\r\n}\r\n\r\ndefinePrototype(AnimateMixin, ClassNameMixin, {\r\n    next: function () {\r\n        var self = this;\r\n        self.effects = undefined;\r\n        self.trigger = undefined;\r\n        return AnimateMixinSuper.next.call(self);\r\n    },\r\n    with: function (props) {\r\n        var self = this;\r\n        self.effects = props.effects;\r\n        self.trigger = props.trigger;\r\n        return self;\r\n    },\r\n    withEffects: function () {\r\n        this.effects = makeArray(arguments);\r\n        return this;\r\n    },\r\n    getCustomAttributes: function () {\r\n        var self = this;\r\n        return extend({}, AnimateMixinSuper.getCustomAttributes.call(self), {\r\n            'animate-in': (self.effects || []).join(' '),\r\n            'animate-on': self.trigger || 'show'\r\n        });\r\n    }\r\n});\r\n","import { definePrototype } from \"../include/zeta-dom/util.js\";\r\nimport ClassNameMixin from \"./ClassNameMixin.js\";\r\n\r\nconst AnimateSequenceItemMixinSuper = ClassNameMixin.prototype;\r\n\r\nexport default function AnimateSequenceItemMixin(className) {\r\n    ClassNameMixin.call(this, ['tweening-in', 'tweening-out']);\r\n    this.className = className;\r\n}\r\n\r\ndefinePrototype(AnimateSequenceItemMixin, ClassNameMixin, {\r\n    getClassNames: function () {\r\n        return [this.className].concat(AnimateSequenceItemMixinSuper.getClassNames.call(this));\r\n    }\r\n});\r\n","import { definePrototype, extend } from \"../include/zeta-dom/util.js\";\r\nimport AnimateMixin from \"./AnimateMixin.js\";\r\nimport AnimateSequenceItemMixin from \"./AnimateSequenceItemMixin.js\";\r\n\r\nconst AnimateSequenceMixinSuper = AnimateMixin.prototype;\r\nvar animateSequenceMixinCounter = 0;\r\n\r\nexport default function AnimateSequenceMixin() {\r\n    var self = this;\r\n    AnimateMixin.call(self);\r\n    self.className = 'brew-anim-' + (++animateSequenceMixinCounter);\r\n    self.item = new AnimateSequenceItemMixin(self.className);\r\n}\r\n\r\ndefinePrototype(AnimateSequenceMixin, AnimateMixin, {\r\n    reset: function () {\r\n        this.item.reset();\r\n        return AnimateSequenceMixinSuper.reset.call(this);\r\n    },\r\n    getCustomAttributes: function () {\r\n        return extend({}, AnimateSequenceMixinSuper.getCustomAttributes.call(this), {\r\n            'animate-sequence': '.' + this.className\r\n        });\r\n    },\r\n    clone: function () {\r\n        return extend(AnimateSequenceMixinSuper.clone.call(this), {\r\n            item: this.item.ref.getMixin()\r\n        });\r\n    }\r\n});\r\n","import dom from \"../include/zeta-dom/dom.js\";\r\nimport { ZetaEventContainer } from \"../include/zeta-dom/events.js\";\r\nimport { definePrototype, is, isFunction } from \"../include/zeta-dom/util.js\";\r\nimport StatefulMixin from \"./StatefulMixin.js\";\r\n\r\nconst ErrorHandlerMixinSuper = StatefulMixin.prototype;\r\nconst emitter = new ZetaEventContainer();\r\n\r\nfunction isErrorMatched(filter, error) {\r\n    if (isFunction(filter)) {\r\n        return is(error, filter);\r\n    }\r\n    return error && error.code === filter;\r\n}\r\n\r\nexport default function ErrorHandlerMixin() {\r\n    StatefulMixin.call(this);\r\n}\r\n\r\ndefinePrototype(ErrorHandlerMixin, StatefulMixin, {\r\n    catch: function (filter, callback) {\r\n        if (!callback) {\r\n            callback = filter;\r\n            filter = null;\r\n        }\r\n        return emitter.add(this, filter ? 'error' : 'default', function (e) {\r\n            if (!filter || isErrorMatched(filter, e.error)) {\r\n                return callback(e.error);\r\n            }\r\n        });\r\n    },\r\n    initElement: function (element, state) {\r\n        var self = this;\r\n        ErrorHandlerMixinSuper.initElement.call(self, element, state);\r\n        dom.on(element, 'error', function (e) {\r\n            var data = { error: e.error };\r\n            return emitter.emit('error', self, data) || emitter.emit('default', self, data);\r\n        });\r\n    }\r\n});\r\n","import { definePrototype, extend } from \"../include/zeta-dom/util.js\";\r\nimport ClassNameMixin from \"./ClassNameMixin.js\";\r\n\r\nconst FlyoutToggleMixinSuper = ClassNameMixin.prototype;\r\n\r\nexport default function FlyoutToggleMixin(mixin) {\r\n    ClassNameMixin.call(this, ['target-opened']);\r\n    this.flyoutMixin = mixin;\r\n}\r\n\r\ndefinePrototype(FlyoutToggleMixin, ClassNameMixin, {\r\n    open: function (value) {\r\n        return this.flyoutMixin.open(value);\r\n    },\r\n    close: function (value) {\r\n        return this.flyoutMixin.close(value);\r\n    },\r\n    getCustomAttributes: function () {\r\n        var element = this.flyoutMixin.elements()[0];\r\n        return extend({}, FlyoutToggleMixinSuper.getCustomAttributes.call(this), {\r\n            'toggle': element && ('#' + element.id)\r\n        });\r\n    }\r\n});\r\n","import { defineAliasProperty, definePrototype, each, extend, makeArray, setImmediate } from \"../include/zeta-dom/util.js\";\r\nimport { closeFlyout, openFlyout } from \"../include/brew-js/domAction.js\";\r\nimport { app } from \"../app.js\";\r\nimport ClassNameMixin from \"./ClassNameMixin.js\";\r\nimport FlyoutToggleMixin from \"./FlyoutToggleMixin.js\";\r\n\r\nconst FlyoutMixinSuper = ClassNameMixin.prototype;\r\nconst valueMap = new WeakMap();\r\nvar flyoutMixinCounter = 0;\r\n\r\nexport default function FlyoutMixin() {\r\n    var self = this;\r\n    ClassNameMixin.call(self, ['open', 'closing', 'visible', 'tweening-in', 'tweening-out']);\r\n    self.modal = false;\r\n    self.tabThrough = false;\r\n    self.isFlyoutOpened = false;\r\n    self.animating = false;\r\n    self.visible = false;\r\n    self.toggle = new FlyoutToggleMixin(self);\r\n    self.onDispose(function () {\r\n        self.isFlyoutOpened = false;\r\n        self.visible = false;\r\n    });\r\n}\r\n\r\ndefinePrototype(FlyoutMixin, ClassNameMixin, {\r\n    reset: function () {\r\n        this.toggle.reset();\r\n        return FlyoutMixinSuper.reset.call(this);\r\n    },\r\n    next: function () {\r\n        this.effects = undefined;\r\n        return FlyoutMixinSuper.next.call(this);\r\n    },\r\n    withEffects: function () {\r\n        this.effects = makeArray(arguments);\r\n        return this;\r\n    },\r\n    getCustomAttributes: function () {\r\n        var self = this;\r\n        return extend({}, FlyoutMixinSuper.getCustomAttributes.call(self), {\r\n            'is-flyout': '',\r\n            'swipe-dismiss': self.swipeToDismiss\r\n        }, self.modal && {\r\n            'is-modal': ''\r\n        }, self.tabThrough && {\r\n            'tab-through': ''\r\n        }, self.effects && {\r\n            'animate-on': 'open',\r\n            'animate-in': self.effects.join(' '),\r\n            'animate-out': ''\r\n        });\r\n    },\r\n    open: function (value) {\r\n        var element = this.elements()[0];\r\n        valueMap.set(element, value);\r\n        return openFlyout(element);\r\n    },\r\n    close: function (value) {\r\n        return closeFlyout(this.elements()[0], value);\r\n    },\r\n    onOpen: function (callback) {\r\n        var element = this.elements()[0];\r\n        return this.onToggleState(function (opened) {\r\n            if (opened) {\r\n                return callback(valueMap.get(element));\r\n            }\r\n        });\r\n    },\r\n    onToggleState: function (callback) {\r\n        return this.watch('isFlyoutOpened', callback);\r\n    },\r\n    onVisibilityChanged: function (callback) {\r\n        return this.watch('visible', callback);\r\n    },\r\n    initElement: function (element, state) {\r\n        var self = this;\r\n        FlyoutMixinSuper.initElement.call(self, element, state);\r\n        if (!element.id) {\r\n            element.id = 'flyout-' + (++flyoutMixinCounter);\r\n        }\r\n        app.on(element, {\r\n            animationstart: function () {\r\n                self.animating = true;\r\n            },\r\n            animationcomplete: function () {\r\n                self.animating = false;\r\n            },\r\n        }, true);\r\n        setImmediate(function () {\r\n            each(self.toggle.elements(), function (i, v) {\r\n                v.setAttribute('toggle', '#' + element.id);\r\n            });\r\n        });\r\n    },\r\n    clone: function () {\r\n        var self = this;\r\n        var mixin = extend(FlyoutMixinSuper.clone.call(self), {\r\n            toggle: self.toggle.ref.getMixin()\r\n        });\r\n        defineAliasProperty(mixin, 'isFlyoutOpened', self);\r\n        defineAliasProperty(mixin, 'modal', self);\r\n        return mixin;\r\n    },\r\n    onClassNameUpdated: function (element, prevState, state) {\r\n        var self = this;\r\n        self.visible = state.open;\r\n        self.isFlyoutOpened = state.open && !state.closing && !state['tweening-out'];\r\n    }\r\n});\r\n","import { definePrototype } from \"../include/zeta-dom/util.js\";\r\nimport { setClass } from \"../include/zeta-dom/domUtil.js\";\r\nimport dom from \"../include/zeta-dom/dom.js\";\r\nimport StatefulMixin from \"./StatefulMixin.js\";\r\n\r\nconst FocusStateMixinSuper = StatefulMixin.prototype;\r\n\r\nexport default function FocusStateMixin() {\r\n    StatefulMixin.call(this);\r\n}\r\n\r\ndefinePrototype(FocusStateMixin, StatefulMixin, {\r\n    initElement: function (element, state) {\r\n        FocusStateMixinSuper.initElement.call(this, element, state);\r\n        dom.on(element, {\r\n            focusin: function (e) {\r\n                state.focused = true;\r\n                setClass(element, 'focused', e.source);\r\n            },\r\n            focusout: function () {\r\n                state.focused = false;\r\n                setClass(element, 'focused', false);\r\n            }\r\n        });\r\n    },\r\n    getClassNames: function () {\r\n        return [{ focused: !!this.state.focused }];\r\n    }\r\n});\r\n","import { definePrototype } from \"../include/zeta-dom/util.js\";\r\nimport { setClass } from \"../include/zeta-dom/domUtil.js\";\r\nimport { lock } from \"../include/zeta-dom/domLock.js\";\r\nimport dom from \"../include/zeta-dom/dom.js\";\r\nimport StatefulMixin from \"./StatefulMixin.js\";\r\n\r\nconst LoadingStateMixinSuper = StatefulMixin.prototype;\r\n\r\nexport default function LoadingStateMixin() {\r\n    StatefulMixin.call(this);\r\n}\r\n\r\ndefinePrototype(LoadingStateMixin, StatefulMixin, {\r\n    initElement: function (element, state) {\r\n        LoadingStateMixinSuper.initElement.call(this, element, state);\r\n        lock(element);\r\n        dom.on(element, {\r\n            asyncStart: function () {\r\n                state.loading = true;\r\n                setClass(element, 'loading', true);\r\n            },\r\n            asyncEnd: function () {\r\n                state.loading = false;\r\n                setClass(element, 'loading', false);\r\n            },\r\n            cancelled: function () {\r\n                state.loading = false;\r\n                setClass(element, 'loading', false);\r\n            }\r\n        });\r\n    },\r\n    getClassNames: function () {\r\n        return [{ loading: !!this.state.loading }];\r\n    }\r\n});\r\n","import $ from \"../include/external/jquery.js\";\r\nimport { defineAliasProperty, defineHiddenProperty, definePrototype, each, extend, makeArray } from \"../include/zeta-dom/util.js\";\r\nimport { app } from \"../app.js\";\r\nimport Mixin from \"./Mixin.js\";\r\nimport ClassNameMixin from \"./ClassNameMixin.js\";\r\n\r\nconst ScrollableMixinSuper = ClassNameMixin.prototype;\r\n\r\nexport default function ScrollableMixin() {\r\n    var self = this;\r\n    ClassNameMixin.call(self, ['scrollable-x', 'scrollable-x-l', 'scrollable-x-r', 'scrollable-y', 'scrollable-y-d', 'scrollable-y-u']);\r\n    self.target = Mixin.scrollableTarget;\r\n    self.pageIndex = 0;\r\n    self.scrolling = false;\r\n}\r\n\r\ndefinePrototype(ScrollableMixin, ClassNameMixin, {\r\n    withOptions: function (options) {\r\n        this.options = options;\r\n        return this;\r\n    },\r\n    getCustomAttributes: function () {\r\n        var options = this.options || {};\r\n        return extend({}, ScrollableMixinSuper.getCustomAttributes.call(this), {\r\n            'scrollable': [options.direction || 'both', options.handle || 'auto'].join(' '),\r\n        }, options.paged && {\r\n            'var': '{ pageIndex: 0 }',\r\n            'scroller-snap-page': options.paged,\r\n            'scroller-page': options.pagedItemSelector,\r\n            'scroller-state': 'pageIndex'\r\n        });\r\n    },\r\n    onPageIndexChanged: function (callback) {\r\n        return this.watch('pageIndex', callback);\r\n    },\r\n    initElement: function (element, state) {\r\n        var self = this;\r\n        app.on(element, {\r\n            statechange: function (e) {\r\n                if ('pageIndex' in e.newValues) {\r\n                    extend(self, { pageIndex: e.newValues.pageIndex });\r\n                }\r\n            },\r\n            scrollStart: function() {\r\n                self.scrolling = true;\r\n            },\r\n            scrollStop: function() {\r\n                self.scrolling = false;\r\n            }\r\n        }, true);\r\n    },\r\n    clone: function () {\r\n        var mixin = ScrollableMixinSuper.clone.call(this);\r\n        defineAliasProperty(mixin, 'pageIndex', this);\r\n        return mixin;\r\n    }\r\n});\r\n\r\neach('destroy enable disable setOptions refresh scrollPadding stop scrollLeft scrollTop scrollBy scrollTo scrollByPage scrollToPage scrollToElement', function (i, v) {\r\n    defineHiddenProperty(ScrollableMixin.prototype, v, function () {\r\n        var obj = $(this.elements());\r\n        return obj.scrollable.apply(obj, [v].concat(makeArray(arguments)));\r\n    });\r\n});\r\n","import { useEffect, useState } from \"react\";\r\nimport { extend } from \"./include/zeta-dom/util.js\";\r\nimport Mixin from \"./mixins/Mixin.js\";\r\nimport AnimateMixin from \"./mixins/AnimateMixin.js\";\r\nimport AnimateSequenceItemMixin from \"./mixins/AnimateSequenceItemMixin.js\";\r\nimport AnimateSequenceMixin from \"./mixins/AnimateSequenceMixin.js\";\r\nimport ClassNameMixin from \"./mixins/ClassNameMixin.js\";\r\nimport ErrorHandlerMixin from \"./mixins/ErrorHandlerMixin.js\";\r\nimport FlyoutMixin from \"./mixins/FlyoutMixin.js\";\r\nimport FlyoutToggleMixin from \"./mixins/FlyoutToggleMixin.js\";\r\nimport FocusStateMixin from \"./mixins/FocusStateMixin.js\";\r\nimport LoadingStateMixin from \"./mixins/LoadingStateMixin.js\";\r\nimport StatefulMixin from \"./mixins/StatefulMixin.js\";\r\nimport ScrollableMixin from \"./mixins/ScrollableMixin.js\";\r\n\r\nfunction extendSelf(options) {\r\n    extend(this, options);\r\n}\r\n\r\nfunction createUseFunction(ctor) {\r\n    return function () {\r\n        var mixin = useMixin(ctor);\r\n        (mixin.withOptions || extendSelf).apply(mixin, arguments);\r\n        return mixin;\r\n    };\r\n}\r\n\r\nexport const useAnimateMixin = createUseFunction(AnimateMixin);\r\nexport const useAnimateSequenceMixin = createUseFunction(AnimateSequenceMixin);\r\nexport const useErrorHandlerMixin = createUseFunction(ErrorHandlerMixin);\r\nexport const useFlyoutMixin = createUseFunction(FlyoutMixin);\r\nexport const useFocusStateMixin = createUseFunction(FocusStateMixin);\r\nexport const useLoadingStateMixin = createUseFunction(LoadingStateMixin);\r\nexport const useScrollableMixin = createUseFunction(ScrollableMixin);\r\n\r\nexport function useMixin(ctor) {\r\n    var mixin = useState(function () {\r\n        return new ctor();\r\n    })[0].reset();\r\n    useEffect(function () {\r\n        return mixin.dispose.bind(mixin);\r\n    }, []);\r\n    return mixin;\r\n}\r\n\r\nexport function useMixinRef(mixin) {\r\n    return mixin && mixin.getMixin().reset();\r\n}\r\n\r\nexport {\r\n    Mixin,\r\n    AnimateMixin,\r\n    AnimateSequenceItemMixin,\r\n    AnimateSequenceMixin,\r\n    ClassNameMixin,\r\n    ErrorHandlerMixin,\r\n    FlyoutMixin,\r\n    FlyoutToggleMixin,\r\n    FocusStateMixin,\r\n    LoadingStateMixin,\r\n    StatefulMixin,\r\n    ScrollableMixin\r\n}\r\n","/** @deprecated @type {Zeta.Dictionary} */\r\nconst defaults = {};\r\nexport default defaults;\r\n","// @ts-nocheck\r\n\r\n/** @type {Waterpipe} */\r\nconst waterpipe = window.waterpipe || require('waterpipe');\r\nmodule.exports = waterpipe;\r\n\r\n// assign to a new variable to avoid incompatble declaration issue by typescript compiler\r\nconst waterpipe_ = waterpipe;\r\nwaterpipe_.pipes['{'] = function (_, varargs) {\r\n    var globals = varargs.globals;\r\n    var prev = globals.new;\r\n    var o = {};\r\n    globals.new = o;\r\n    while (varargs.hasArgs()) {\r\n        var key = varargs.raw();\r\n        if (key === '}') {\r\n            break;\r\n        }\r\n        o[String(key).replace(/:$/, '')] = varargs.next();\r\n    }\r\n    globals.new = prev;\r\n    return o;\r\n};\r\n// @ts-ignore: add member to function\r\nwaterpipe_.pipes['{'].varargs = true;\r\n","import Promise from \"./include/external/promise-polyfill.js\";\r\nimport $ from \"./include/external/jquery.js\";\r\nimport waterpipe from \"./include/external/waterpipe.js\"\r\nimport { always, any, catchAsync, grep, mapRemove, matchWord, pipe } from \"./include/zeta-dom/util.js\";\r\nimport { runCSSTransition } from \"./include/zeta-dom/cssUtil.js\";\r\nimport { setClass, selectClosestRelative, dispatchDOMMouseEvent, selectIncludeSelf } from \"./include/zeta-dom/domUtil.js\";\r\nimport dom, { focus, focused, releaseModal, retainFocus, setModal } from \"./include/zeta-dom/dom.js\";\r\nimport { cancelLock, locked, notifyAsync } from \"./include/zeta-dom/domLock.js\";\r\nimport { watchElements } from \"./include/zeta-dom/observe.js\";\r\nimport { throwNotFunction, camel, resolveAll, each, mapGet, reject, isThenable } from \"./include/zeta-dom/util.js\";\r\nimport { app } from \"./app.js\";\r\nimport { animateIn, animateOut } from \"./anim.js\";\r\nimport { selectorForAttr } from \"./util/common.js\";\r\nimport { isSubPathOf } from \"./util/path.js\";\r\nimport { evalAttr, setVar } from \"./var.js\";\r\n\r\nconst SELECTOR_FOCUSABLE = 'button,input,select,textarea,[contenteditable],a[href],area[href],iframe';\r\nconst SELECTOR_TABROOT = '[is-flyout]:not([tab-through]),[tab-root]';\r\n\r\nconst root = dom.root;\r\nconst flyoutStates = new Map();\r\nconst executedAsyncActions = new Map();\r\n/** @type {Zeta.Dictionary<Zeta.AnyFunction>} */\r\nconst asyncActions = {};\r\n\r\nfunction isSameWindow(target) {\r\n    return !target || target === '_self' || target === window.name;\r\n}\r\n\r\n/**\r\n * @param {string} attr\r\n * @param {(this: Element, e: JQuery.UIEventBase) => Brew.PromiseOrEmpty} callback\r\n */\r\nexport function addAsyncAction(attr, callback) {\r\n    asyncActions[attr] = throwNotFunction(callback);\r\n}\r\n\r\n/**\r\n * @param {Element | string=} flyout\r\n * @param {any=} value\r\n */\r\nexport function closeFlyout(flyout, value) {\r\n    /** @type {Element[]} */\r\n    // @ts-ignore: type inference issue\r\n    var elements = $(flyout || '[is-flyout].open').get();\r\n    return resolveAll(elements.map(function (v) {\r\n        var state = flyoutStates.get(v);\r\n        if (state) {\r\n            flyoutStates.delete(v);\r\n            releaseModal(v);\r\n            state.resolve(value);\r\n            if (state.source) {\r\n                setClass(state.source, 'target-opened', false);\r\n            }\r\n        }\r\n        return catchAsync(v.attributes['animate-out'] ? (setClass(v, 'closing', true), animateOut(v, 'open')) : runCSSTransition(v, 'closing')).then(function () {\r\n            setClass(v, { open: false, closing: false, visible: false });\r\n            dom.emit('flyouthide', v);\r\n        });\r\n    }));\r\n}\r\n\r\n/**\r\n * @param {string} selector\r\n * @param {any=} states\r\n * @param {Element=} source\r\n * @param {boolean=} closeIfOpened\r\n */\r\nexport function openFlyout(selector, states, source, closeIfOpened) {\r\n    var container = source || root;\r\n    var element = selector ? selectClosestRelative(selector, container) : $(container).closest('[is-flyout]')[0];\r\n    if (!element) {\r\n        return reject();\r\n    }\r\n    var prev = flyoutStates.get(element);\r\n    if (prev) {\r\n        if (closeIfOpened) {\r\n            // @ts-ignore: can accept if no such property\r\n            closeFlyout(element, source && waterpipe.eval('`' + source.value));\r\n        } else {\r\n            // @ts-ignore: extended app property\r\n            prev.path = app.path;\r\n        }\r\n        return prev.promise;\r\n    }\r\n    var resolve;\r\n    var promise = new Promise(function (resolve_) {\r\n        resolve = resolve_;\r\n    });\r\n    flyoutStates.set(element, {\r\n        source: source,\r\n        promise: promise,\r\n        resolve: resolve,\r\n        // @ts-ignore: extended app property\r\n        path: app.path\r\n    });\r\n    if (source) {\r\n        setClass(source, 'target-opened', true);\r\n        retainFocus(element, source);\r\n    }\r\n    if (states) {\r\n        setVar(element, states);\r\n    }\r\n    setClass(element, 'visible', true);\r\n    runCSSTransition(element, 'open', function () {\r\n        focus(element);\r\n    });\r\n    animateIn(element, 'open');\r\n    if (element.attributes['is-modal']) {\r\n        setModal(element);\r\n    }\r\n    var closeHandler = function (e) {\r\n        var swipeDismiss = element.getAttribute('swipe-dismiss');\r\n        if (e.type === 'focusout' ? !swipeDismiss : e.data === camel('swipe-' + swipeDismiss)) {\r\n            closeFlyout(element);\r\n            if (dom.event) {\r\n                dom.event.preventDefault();\r\n            }\r\n            e.handled();\r\n        }\r\n    };\r\n    always(promise, dom.on(element, {\r\n        focusout: closeHandler,\r\n        gesture: closeHandler\r\n    }));\r\n    dom.emit('flyoutshow', element);\r\n    return promise;\r\n}\r\n\r\ndom.ready.then(function () {\r\n    var tabindexMap = new WeakMap();\r\n    var tabRoot = root;\r\n\r\n    function setTabIndex(nodes) {\r\n        $(nodes || SELECTOR_FOCUSABLE).each(function (i, v) {\r\n            var closest = $(v).closest(SELECTOR_TABROOT)[0] || root;\r\n            if (closest !== tabRoot) {\r\n                if (!tabindexMap.has(v)) {\r\n                    tabindexMap.set(v, v.tabIndex);\r\n                }\r\n                v.tabIndex = -1;\r\n            } else {\r\n                $(v).attr('tabindex', mapRemove(tabindexMap, v) || null);\r\n            }\r\n        });\r\n    }\r\n\r\n    dom.on('focuschange', function () {\r\n        var newRoot = any($(SELECTOR_TABROOT).get().reverse(), function (v) {\r\n            return focused(v);\r\n        }) || root;\r\n        if (newRoot !== tabRoot) {\r\n            tabRoot = newRoot;\r\n            setTabIndex();\r\n        }\r\n    });\r\n\r\n    watchElements(root, SELECTOR_FOCUSABLE, setTabIndex, true);\r\n\r\n    app.on('mounted', function (e) {\r\n        var selector = selectorForAttr(asyncActions);\r\n        if (selector) {\r\n            $(selectIncludeSelf(selector, e.target)).attr('async-action', '');\r\n        }\r\n    });\r\n\r\n    app.on('beforepageload', function () {\r\n        flyoutStates.forEach(function (v, i) {\r\n            if (v.path !== app.path) {\r\n                closeFlyout(i);\r\n            }\r\n        });\r\n    });\r\n\r\n    $('body').on('submit', 'form:not([action])', function (e) {\r\n        e.preventDefault();\r\n    });\r\n\r\n    $('body').on('click', '[disabled], .disabled, :disabled', function (e) {\r\n        e.preventDefault();\r\n        e.stopImmediatePropagation();\r\n    });\r\n\r\n    $('body').on('click', '[async-action]', function (e) {\r\n        var element = e.currentTarget;\r\n        var executed = mapGet(executedAsyncActions, element, Array);\r\n        var callback = null;\r\n        each(asyncActions, function (i, v) {\r\n            if (element.attributes[i] && executed.indexOf(v) < 0) {\r\n                callback = v;\r\n                return false;\r\n            }\r\n        });\r\n        if (!callback) {\r\n            executedAsyncActions.delete(element);\r\n        } else {\r\n            executed.push(callback);\r\n            // @ts-ignore: type inference issue\r\n            var returnValue = callback.call(element, e);\r\n            if (isThenable(returnValue) && !e.isImmediatePropagationStopped()) {\r\n                e.stopImmediatePropagation();\r\n                e.preventDefault();\r\n                notifyAsync(element, returnValue);\r\n                returnValue.then(function () {\r\n                    dispatchDOMMouseEvent(e);\r\n                }, function (e) {\r\n                    executedAsyncActions.delete(element);\r\n                    console.warn('Action threw an error:', e);\r\n                });\r\n            }\r\n        }\r\n    });\r\n\r\n    $('body').on('click', 'a[href]:not([download]), [data-href]', function (e) {\r\n        if (e.isDefaultPrevented()) {\r\n            return;\r\n        }\r\n        var self = e.currentTarget;\r\n        var href = self.getAttribute('data-href') || self.getAttribute('href');\r\n        e.stopPropagation();\r\n        if (!isSameWindow(self.target)) {\r\n            return;\r\n        }\r\n        if ('navigate' in app && isSubPathOf(href, app.basePath)) {\r\n            e.preventDefault();\r\n            app.navigate(href);\r\n        } else if (locked(root)) {\r\n            e.preventDefault();\r\n            cancelLock(root).then(function () {\r\n                var features = grep([matchWord(self.rel, 'noreferrer'), matchWord(self.rel, 'noopener')], pipe);\r\n                window.open(href, '_self', features.join(','));\r\n            });\r\n        }\r\n    });\r\n\r\n    $('body').on('click', '[set-var]:not([match-path])', function (e) {\r\n        var self = e.currentTarget;\r\n        if (self === $(e.target).closest('[set-var]')[0]) {\r\n            setVar(self);\r\n            closeFlyout();\r\n        }\r\n    });\r\n\r\n    $('body').on('click', '[toggle]', function (e) {\r\n        var self = e.currentTarget;\r\n        e.stopPropagation();\r\n        if (!self.attributes['toggle-if'] || evalAttr(self, 'toggle-if')) {\r\n            openFlyout(self.getAttribute('toggle'), null, self, true);\r\n        }\r\n    });\r\n\r\n    $('body').on('click', '[toggle-class]', function (e) {\r\n        var self = e.currentTarget;\r\n        e.stopPropagation();\r\n        if (!self.attributes['toggle-if'] || evalAttr(self, 'toggle-if')) {\r\n            var selector = self.getAttribute('toggle-class-for');\r\n            var target = selector ? selectClosestRelative(selector, self) : e.currentTarget;\r\n            each(self.getAttribute('toggle-class'), function (i, v) {\r\n                setClass(target, v.slice(1), v[0] === '+');\r\n            });\r\n        }\r\n    });\r\n});\r\n","// @ts-nocheck\r\n\r\n/** @type {JQueryStatic} */\r\nconst jQuery = window.jQuery || require('jquery');\r\nmodule.exports = jQuery;\r\n\r\ntry {\r\n    require('jq-scrollable');\r\n} catch (e) {}\r\n","import { define, isFunction, isPlainObject, map, noop } from \"./include/zeta-dom/util.js\";\r\nimport * as path from \"./util/path.js\";\r\nimport * as commonUtil from \"./util/common.js\";\r\nimport * as animation from \"./anim.js\";\r\nimport * as ErrorCode from \"./errorCode.js\";\r\nimport { declareVar, evalAttr, getVar, setVar } from \"./var.js\";\r\nimport { addRenderer, addTemplate, addTransformer, handleAsync, preventLeave } from \"./dom.js\";\r\nimport * as domAction from \"./domAction.js\";\r\nimport brew, { addDetect, addExtension, install, isElementActive } from \"./app.js\";\r\nimport defaults from \"./defaults.js\";\r\n\r\nfunction with_() {\r\n    var fn = this.bind.apply(brew, [0].concat(map(arguments, function (v) {\r\n        if (isPlainObject(v)) {\r\n            return function (app) {\r\n                define(app, v);\r\n            };\r\n        }\r\n        return isFunction(v) || noop;\r\n    })));\r\n    define(fn, method);\r\n    return fn;\r\n}\r\n\r\nconst method = {\r\n    ErrorCode,\r\n    defaults,\r\n    ...commonUtil,\r\n    ...path,\r\n    ...animation,\r\n    ...domAction,\r\n    getVar,\r\n    setVar,\r\n    declareVar,\r\n    evalAttr,\r\n    isElementActive,\r\n    handleAsync,\r\n    preventLeave,\r\n    install,\r\n    addDetect,\r\n    addExtension,\r\n    addRenderer,\r\n    addTransformer,\r\n    addTemplate,\r\n    with: with_\r\n};\r\n\r\ndefine(brew, method);\r\n\r\nexport default brew;\r\n","import brew from \"./core.js\";\r\nexport default brew;\r\n"],"sourceRoot":""}