spyne 0.14.8 → 0.17.3
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/.travis.yml +2 -2
- package/karma.conf.js +27 -20
- package/lib/channel-action-filter.test.2418910233.js +20 -0
- package/lib/channel-dom.test.1490741340.js +20 -0
- package/lib/channel-fetch-util.test.3681936279.js +20 -0
- package/lib/channel-fetch.test.380764798.js +20 -0
- package/lib/channel-payload-class.test.2325155642.js +20 -0
- package/lib/channel-payload-filter.test.1598505124.js +20 -0
- package/lib/channel-route.test.921296320.js +20 -0
- package/lib/channel-stream-item.test.159699696.js +20 -0
- package/lib/channel-ui.test.291129654.js +20 -0
- package/lib/channel-util-dom.test.181212370.js +20 -0
- package/lib/channel.test.706832124.js +20 -0
- package/lib/commons.js +50363 -0
- package/lib/dom-el-selectors.test.3296414834.js +20 -0
- package/lib/dom-el-template.test.1459850380.js +20 -0
- package/lib/dom-el.test.2449130808.js +20 -0
- package/lib/frp-tools.test.1620088187.js +20 -0
- package/lib/import.test.723835576.js +20 -0
- package/lib/index.test.2146503294.js +20 -0
- package/lib/plugins-methods.test.3482246428.js +20 -0
- package/lib/route-utils.test.2932649409.js +20 -0
- package/lib/runtime.js +174 -0
- package/lib/spyne-app-properties.test.485192211.js +20 -0
- package/lib/spyne-app.test.4150724251.js +20 -0
- package/lib/spyne-plugin.test.3993976219.js +20 -0
- package/lib/spyne.js +15477 -18467
- package/lib/spyne.min.js +2 -12
- package/lib/spyne.min.js.LICENSE.txt +10 -0
- package/lib/url-utils.test.3668806082.js +20 -0
- package/lib/view-stream-broadcaster.test.2534955231.js +20 -0
- package/lib/view-stream-enhancer-loader.test.3395418180.js +20 -0
- package/lib/view-stream-enhancer.test.1043626253.js +20 -0
- package/lib/view-stream.test.1765314964.js +20 -0
- package/package.json +37 -65
- package/src/spyne/channels/channel-fetch-class.js +24 -1
- package/src/spyne/channels/channel-payload-class.js +102 -11
- package/src/spyne/channels/channel-proxy.js +6 -4
- package/src/spyne/channels/channel.js +66 -6
- package/src/spyne/channels/channels-config.js +2 -2
- package/src/spyne/channels/{channels-delegator.js → channels-map.js} +37 -21
- package/src/spyne/channels/spyne-channel-lifecycle.js +1 -1
- package/src/spyne/channels/spyne-channel-route.js +95 -15
- package/src/spyne/channels/spyne-channel-ui.js +1 -0
- package/src/spyne/channels/spyne-channel-window.js +60 -20
- package/src/spyne/spyne-app.js +181 -0
- package/src/spyne/spyne-plugins.js +146 -0
- package/src/spyne/spyne.js +11 -139
- package/src/spyne/utils/channel-fetch-util.js +1 -1
- package/src/spyne/utils/channel-payload-filter.js +166 -30
- package/src/spyne/utils/frp-tools.js +21 -1
- package/src/spyne/utils/mixins/base-streams-mixins.js +1 -0
- package/src/spyne/utils/spyne-app-properties.js +213 -0
- package/src/spyne/utils/spyne-logger.js +18 -0
- package/src/spyne/utils/spyne-plugins-methods.js +105 -0
- package/src/spyne/utils/spyne-scroll-lock.js +95 -0
- package/src/spyne/utils/spyne-utils-channel-route-url.js +2 -1
- package/src/spyne/utils/spyne-utils-channel-route.js +3 -1
- package/src/spyne/utils/spyne-utils-channel-window.js +2 -2
- package/src/spyne/views/dom-element-template.js +52 -23
- package/src/spyne/views/dom-element.js +11 -2
- package/src/spyne/views/view-stream-broadcaster.js +3 -3
- package/src/spyne/views/view-stream-payload.js +76 -15
- package/src/spyne/views/view-stream-selector.js +2 -2
- package/src/spyne/views/view-stream.js +219 -115
- package/src/tests/channels/channel-fetch.test.js +102 -0
- package/src/tests/channels/channel-payload-class.test.js +149 -0
- package/src/tests/channels/channel-payload-filter.test.js +298 -0
- package/src/tests/channels/channel-route.test.js +76 -1
- package/src/tests/channels/channel-stream-item.test.js +3 -2
- package/src/tests/channels/channel.test.js +38 -0
- package/src/tests/channels/route-utils.test.js +1 -1
- package/src/tests/index.js +0 -1
- package/src/tests/index.test.js +6 -0
- package/src/tests/mocks/channel-payload-data.js +93 -1
- package/src/tests/mocks/msf-user-data-small.json +4103 -0
- package/src/tests/mocks/msf-user-data.json +47035 -0
- package/src/tests/mocks/utils-data.js +20 -2
- package/src/tests/spyne-app.test.js +27 -0
- package/src/tests/spyne-plugin.test.js +49 -0
- package/src/tests/utils/channel-action-filter.test.js +22 -11
- package/src/tests/utils/channel-data-packet-generator.unused.js +119 -0
- package/src/tests/utils/plugins-methods.test.js +103 -0
- package/src/tests/utils/spyne-app-properties.test.js +11 -0
- package/src/tests/views/dom-el-selectors.test.js +1 -1
- package/webpack.config.js +30 -15
- package/lib/spyne.js.map +0 -1
- package/src/spyne/utils/viewstream-dom-utils.js +0 -8
package/lib/spyne.min.js
CHANGED
|
@@ -1,12 +1,2 @@
|
|
|
1
|
-
!function(e,t){"object"==typeof exports&&"object"==typeof module?module.exports=t(require("ramda"),require("rxjs/operators"),require("rxjs")):"function"==typeof define&&define.amd?define("spyne",["ramda","rxjs/operators","rxjs"],t):"object"==typeof exports?exports.spyne=t(require("ramda"),require("rxjs/operators"),require("rxjs")):e.spyne=t(e.R,e.rxjs.operators,e.rxjs)}(window,(function(e,t,r){return function(e){var t={};function r(s){if(t[s])return t[s].exports;var n=t[s]={i:s,l:!1,exports:{}};return e[s].call(n.exports,n,n.exports,r),n.l=!0,n.exports}return r.m=e,r.c=t,r.d=function(e,t,s){r.o(e,t)||Object.defineProperty(e,t,{enumerable:!0,get:s})},r.r=function(e){"undefined"!=typeof Symbol&&Symbol.toStringTag&&Object.defineProperty(e,Symbol.toStringTag,{value:"Module"}),Object.defineProperty(e,"__esModule",{value:!0})},r.t=function(e,t){if(1&t&&(e=r(e)),8&t)return e;if(4&t&&"object"==typeof e&&e&&e.__esModule)return e;var s=Object.create(null);if(r.r(s),Object.defineProperty(s,"default",{enumerable:!0,value:e}),2&t&&"string"!=typeof e)for(var n in e)r.d(s,n,function(t){return e[t]}.bind(null,n));return s},r.n=function(e){var t=e&&e.__esModule?function(){return e.default}:function(){return e};return r.d(t,"a",t),t},r.o=function(e,t){return Object.prototype.hasOwnProperty.call(e,t)},r.p="",r(r.s=5)}([function(t,r){t.exports=e},function(e,r){e.exports=t},function(e,t){e.exports=r},function(e,t,r){e.exports=r(4)},function(e,t){e.exports=o;var r=Object.create,s=function(){throw new Error("Not implemented.")},n=function(){return this};function o(){}function i(e){this.value=e}function a(e){this.value=e}i.prototype=r(o.prototype),a.prototype=r(o.prototype),o.Failure=function(e){return new i(e)},o.prototype.Failure=o.Failure,o.Success=function(e){return new a(e)},o.prototype.Success=o.Success,o.fromNullable=function(e){return null!=e?new a(e):new i(e)},o.prototype.fromNullable=o.fromNullable,o.fromEither=function(e){return e.fold(o.Failure,o.Success)},o.prototype.isFailure=!1,i.prototype.isFailure=!0,o.prototype.isSuccess=!1,a.prototype.isSuccess=!0,o.of=function(e){return new a(e)},o.prototype.of=o.of,o.prototype.ap=s,i.prototype.ap=function(e){return e.isFailure?this.Failure(this.value.concat(e.value)):this},a.prototype.ap=function(e){return e.isFailure?e:e.map(this.value)},o.prototype.map=s,i.prototype.map=n,a.prototype.map=function(e){return this.of(e(this.value))},o.prototype.toString=s,i.prototype.toString=function(){return"Validation.Failure("+this.value+")"},a.prototype.toString=function(){return"Validation.Success("+this.value+")"},o.prototype.isEqual=s,i.prototype.isEqual=function(e){return e.isFailure&&e.value===this.value},a.prototype.isEqual=function(e){return e.isSuccess&&e.value===this.value},o.prototype.get=s,i.prototype.get=function(){throw new TypeError("Can't extract the value of a Failure(a).")},a.prototype.get=function(){return this.value},o.prototype.getOrElse=s,i.prototype.getOrElse=function(e){return e},a.prototype.getOrElse=function(e){return this.value},o.prototype.orElse=s,a.prototype.orElse=n,i.prototype.orElse=function(e){return e(this.value)},o.prototype.merge=function(){return this.value},o.prototype.fold=s,i.prototype.fold=function(e,t){return e(this.value)},a.prototype.fold=function(e,t){return t(this.value)},o.prototype.cata=s,i.prototype.cata=function(e){return e.Failure(this.value)},a.prototype.cata=function(e){return e.Success(this.value)},o.prototype.swap=s,i.prototype.swap=function(){return this.Success(this.value)},a.prototype.swap=function(){return this.Failure(this.value)},o.prototype.bimap=s,i.prototype.bimap=function(e,t){return this.Failure(e(this.value))},a.prototype.bimap=function(e,t){return this.Success(t(this.value))},o.prototype.failureMap=s,a.prototype.failureMap=n,i.prototype.failureMap=function(e){return this.Failure(e(this.value))},o.prototype.leftMap=o.prototype.failureMap,a.prototype.leftMap=a.prototype.failureMap,i.prototype.leftMap=i.prototype.failureMap},function(e,t,r){"use strict";r.r(t),r.d(t,"ViewStreamElement",(function(){return V})),r.d(t,"Channel",(function(){return se})),r.d(t,"ChannelFetch",(function(){return _e})),r.d(t,"ChannelFetchUtil",(function(){return Ne})),r.d(t,"ChannelsDelegator",(function(){return be})),r.d(t,"ViewStreamPayload",(function(){return k})),r.d(t,"ChannelPayload",(function(){return g})),r.d(t,"ChannelPayloadFilter",(function(){return Y})),r.d(t,"DomElement",(function(){return I})),r.d(t,"DomEl",(function(){return L})),r.d(t,"ViewStream",(function(){return ee})),r.d(t,"ViewStreamSelector",(function(){return J})),r.d(t,"ViewStreamBroadcaster",(function(){return G})),r.d(t,"SpyneTrait",(function(){return Oe})),r.d(t,"SpyneApp",(function(){return Te})),r.d(t,"deepMerge",(function(){return C}));var s=r(0);const n=e=>{if(void 0!==e.constructor.name)return e.constructor.name;let t=e.toString();return Object(s.defaultTo)(String(t).substr(0,12),Object(s.match)(/^(function\s)(\w+)(\(.*)$/,t)[2])},o=(e,t=[])=>{t=Object(s.concat)(["length","name","prototype","constructor"],t);let r=Object(s.compose)(Object(s.without)(t),s.uniq),n=r(Object.getOwnPropertyNames(e.constructor.prototype)),o=r((i=e.constructor,Object.getOwnPropertyNames(i)));var i;return{methods:n,staticMethods:o,allMethods:Object(s.concat)(n,o)}},i=r(2),a=r(2);let c=()=>({includes:()=>void 0!==window.Spyne?(e=>{let t=[];return Object(s.forEach)((e,r,s)=>t.push(r),e),t})(window.Spyne.channels.map):["CHANNEL_ROUTE","CHANNEL_UI","CHANNEL_WINDOW","DISPATCHER"]}),l=["LOAD","RENDER","MOUNT","UNMOUNT","DISPOSE","GARBAGE_COLLECT","UPDATE"],d=["parent","self","child","children","view"],h=["Observable","BehaviorSubject","Subject","Observer","Subscriber","FromEventObservable"],p=["subscribe","combineLatest"],u=[],E=[],m=[],b=[],O=[],N=[],_=[],T=[],S=[];if(void 0!==s.compose&&void 0!==i){u=[{error:`need to match a valid name within ${h}`,predicate:e=>c().includes(e.name)},{error:"param 'observable' must contain a valid Observable",predicate:e=>void 0!==e.observable.subscribe},{error:"param action must be a registered action",predicate:e=>p.includes(e.action)}],E=[{error:"needs vsid number in srcElement",predicate:Object(s.compose)(Object(s.is)(String),Object(s.path)(["data","srcElement","vsid"]))},{error:"needs a id in srcElement",predicate:Object(s.compose)(Object(s.is)(String),Object(s.path)(["data","srcElement","id"]))}],m=function(){return[].concat(u).concat(E)};let e=[{error:`need to match a valid name within ${h}`,predicate:e=>c().includes(e.name)},{error:`needs one of the following step strings: ${l}`,predicate:e=>l.includes(e.STEP)},{error:`type needs to one of the following: ${d}`,predicate:e=>d.includes(e.type)},{error:"viewId needs to be added ",predicate:e=>void 0!==e.viewId}];O=function(){return[].concat(e)},N=function(){return[{error:"DISPOSE STEP requires a disposeItem param in the data object",predicate:e=>"DISPOSE"===e.STEP&&void 0!==e.data.disposeItems}].concat(e)},_=function(){return[{error:"UPDATE STEP requires a data object ",predicate:e=>"UPDATE"===e.STEP&&void 0!==e.data}].concat(e)},b=function(){return e.concat(u).concat(E)},T=function(){return[].concat(u).concat(E)},S=function(){let e=[{error:"param 'name' must be of a registered type",predicate:e=>c().includes(e.name)},{error:"param 'observable' must contain a valid Observable",predicate:e=>h.includes((0,e.observable)().constructor.name)},{error:"param action must be a registered action",predicate:e=>p.includes(e.action)}];return{streams:[{init:{name:"DISPATCHER",observable:()=>new a,action:"subscribe"},structure:{type:String,observable:i||a,action:String},validations:e},{init:{name:"UBU",observable:()=>new a,action:"subscribe"},structure:{type:String,observable:i||a,action:String},validations:e}]}}}class g{constructor(e,t,r,n,o){let i=e,a={channelName:e,action:t,payload:r,srcElement:n,event:o};if(Object.defineProperty(a,"payload",{get:()=>Object(s.clone)(r)}),!0===Object(s.pathEq)(["Spyne","config","debug"],!0)(window)&&r.hasOwnProperty("payload")){let e=JSON.stringify(r);console.warn(`Spyne Warning: the following payload contains a nested payload property which may create conflicts: Action: ${t}, ${e}`)}a.props=()=>Object(s.mergeAll)([{payload:a.payload},a.payload,{channel:i},{event:o},a.srcElement,{action:a.action}]);const c=window.Spyne.getChannelActions(i);return g.validateAction(t,i,c),"CHANNEL_ROUTE"===i&&(a.location=g.getLocationData()),a}static validateAction(e,t,r){let n=Object(s.includes)(e,r);return!1===n&&void 0!==window.Spyne&&console.warn(`warning: Action: '${e}' is not registered within the ${t} channel!`),n}static getLocationData(){return Object(s.pickAll)(["href","origin","protocol","host","hostname","port","pathname","search","hash"],window.location)}static getStreamItem(){}static getMouseEventKeys(){return["altKey","bubbles","cancelBubble","cancelable","clientX","clientY","composed","ctrlKey","currentTarget","defaultPrevented","detail","eventPhase","fromElement","isTrusted","layerX","layerY","metaKey","movementX","movementY","offsetX","offsetY","pageX","pageY","path","relatedTarget","returnValue","screenX","screenY","shiftKey","sourceCapabilities","srcElement","target","timeStamp","toElement","type","view","which","x","y"]}}function j(){return{createpropsMap:function(){let e=new WeakMap,t={vsid:this.props.vsid};return e.set(t,this.props),{key:t,weakMap:e}},gc:function(){for(let e in this)delete this[e]},createId:function(){return Math.random().toString(36).replace(/\d/gm,"").substring(1,8)},setTraceFunc:function(e){return!0===e?console.log:()=>{}}}}function f(e){return e&&"object"==typeof e&&"[object RegExp]"!==Object.prototype.toString.call(e)&&"[object Date]"!==Object.prototype.toString.call(e)}function y(e,t){return t&&!0===t.clone&&f(e)?C((r=e,Array.isArray(r)?[]:{}),e,t):e;var r}function A(e,t,r){let s=e.slice();return t.forEach((function(t,n){void 0===s[n]?s[n]=y(t,r):f(t)?s[n]=C(e[n],t,r):-1===e.indexOf(t)&&s.push(y(t,r))})),s}function C(e,t,r){let s=Array.isArray(t),n=(r||{arrayMerge:A}).arrayMerge||A;return s?Array.isArray(e)?n(e,t,r):y(t,r):function(e,t,r){let s={};return f(e)&&Object.keys(e).forEach((function(t){s[t]=y(e[t],r)})),Object.keys(t).forEach((function(n){f(t[n])&&e[n]?s[n]=C(e[n],t[n],r):s[n]=y(t[n],r)})),s}(e,t,r)}C.all=function(e,t){if(!Array.isArray(e)||e.length<2)throw new Error("first argument should be an array with at least two elements");return e.reduce((function(e,r){return C(e,r,t)}))};class v{constructor(e,t){this.template=this.formatTemplate(e);(()=>{!0===Object(s.is)(Array,t)&&(t={spyneData:t},this.template=this.template.replace("{{/}}","{{/spyneData}}"),this.template=this.template.replace("{{#}}","{{#spyneData}}"))})(),this.templateData=t;let r=v.getStringArray(this.template),n=this.template.match(v.findTmplLoopsRE());n=null===n?[]:n;const o=Object(s.includes)(s.__,n),i=Object(s.ifElse)(o,(e,t)=>e.replace(v.parseTmplLoopsRE(),this.parseTheTmplLoop.bind(this)),this.addParams.bind(this));this.finalArr=r.map(i)}static getStringArray(e){let t=e.split(v.findTmplLoopsRE());const r=/^([\\n\s\W]+)$/;return Object(s.reject)(e=>e.match(r),t)}static findTmplLoopsRE(){return/({{#\w+}}[\w\n\s\W]+?{{\/\w+}})/gm}static parseTmplLoopsRE(){return/({{#(\w+)}})([\w\n\s\W]+?)({{\/\2}})/gm}static swapParamsForTagsRE(){return/({{)(.*?)(}})/gm}removeThis(){this.finalArr=void 0,this.templateData=void 0,this.template=void 0}renderDocFrag(){const e=this.finalArr.join(""),t=document.createRange().createContextualFragment(e);return window.setTimeout(this.removeThis(),10),t}getTemplateString(){return this.finalArr.join("")}formatTemplate(e){return"SCRIPT"===Object(s.prop)("nodeName",e)?e.innerHTML:e}addParams(e){return e.replace(v.swapParamsForTagsRE(),(e,t,r,n)=>{let o=Object(s.compose)(Object(s.path)(s.__,this.templateData),Object(s.split)("."))(r);return Object(s.defaultTo)("")(o)})}parseTheTmplLoop(e,t,r,n){const o=n;let i=this.templateData[r];return!0===Object(s.isNil)(i)||Object(s.isEmpty)(i)?"":(void 0===i.length&&(i=[i]),i.map(e=>e="string"==typeof e?((e,t)=>t.replace(v.swapParamsForTagsRE(),e))(e,o):((e,t)=>t.replace(v.swapParamsForTagsRE(),(t,r,n)=>Object(s.compose)(Object(s.path)(s.__,e),Object(s.split)("."))(n)))(e,o)).join(""))}}class I{constructor(e={}){var t,r;e.tagName=(t="div",r=e.tagName,Object(s.defaultTo)(t)(r)),e.attributes=void 0!==e.attributes?e.attributes:this.getDomAttributes(e),e.attrs=this.updateAttrs(e.attributes),e.fragment=document.createDocumentFragment(),this.props=e,this.addMixins()}setProp(e,t){this.props[e]=t}getProp(e){return this.props[e]}get el(){return this.props.el}setElAttrs(e,t){return this.getProp("attrs").forEach((t,r)=>{let n=(t,r)=>{e.dataset[r]=t};"dataset"===r?Object(s.forEachObjIndexed)(n,t):e.setAttribute(r,t)}),e}updateAttrs(e,t){let r=void 0!==t?t:new Map;return Object(s.mapObjIndexed)((e,t)=>r.set(t,e),e),r}addTemplate(e){let t=this.getProp("template");return void 0!==t?(t=>{let r=this.getProp("data");r=Object(s.is)(Object,r)?r:{};let n=new v(t,r).renderDocFrag();return e.appendChild(n),e})(t):e}createElement(e="div"){return document.createElement(e)}addContent(e){let t=this.getProp("data");if(!0===Object(s.is)(String,t)){let r=document.createTextNode(t);e.appendChild(r)}return e}execute(){let e=Object(s.pipe)(this.createElement.bind(this),this.setElAttrs.bind(this),this.addTemplate.bind(this),this.addContent.bind(this))(this.getProp("tagName"));this.props.el=e}render(){return this.execute(),this.props.template=void 0,this.props.data=void 0,this.props.attributes=void 0,this.getProp("el")}returnIfDefined(e,t){if(void 0!==t){let r=void 0===t;e[t]=!1===r?t:C(e[t],t)}}updateprops(e){return this.returnIfDefined(this.props,e),this}updatepropsAndRun(e){return this.updateprops(e),this.execute(),this.getProp("fragment")}unmount(){void 0!==this.props&&(this.getProp("el").remove(),this.props=void 0,this.gc())}updateTag(e="div"){this.updateprops(e)}updateAttributes(e={}){this.updateprops(e)}updateTemplate(e){this.updateprops(e)}updateData(e={}){this.updateprops(e)}addTagAndRender(e="div"){this.updatepropsAndRun(e)}addAttrsibutesAndRender(e={}){this.updatepropsAndRun(e)}addTemplateAndRender(e){this.updatepropsAndRun(e)}addDataAndRender(e={}){this.updatepropsAndRun(e)}addMixins(){let e=j();this.gc=e.gc.bind(this)}getDomAttributes(e){return Object(s.pick)(this.attributesArray,e)}get attributesArray(){return["accept","accept-charset","accesskey","action","align","allow","alt","async","autocapitalize","autocomplete","autofocus","autoplay","bgcolor","border","buffered","challenge","charset","checked","cite","class","code","codebase","color","cols","colspan","content","contenteditable","contextmenu","controls","coords","crossorigin","csp","dataset","datetime","decoding","default","defer","dir","dirname","disabled","download","draggable","dropzone","enctype","for","form","formaction","headers","height","hidden","high","href","hreflang","http-equiv","icon","id","importance","integrity","ismap","itemprop","keytype","kind","label","lang","language","lazyload","list","loop","low","manifest","max","maxlength","minlength","media","method","min","multiple","muted","name","novalidate","open","optimum","pattern","ping","placeholder","poster","preload","radiogroup","readonly","referrerpolicy","rel","required","reversed","rows","rowspan","sandbox","scope","scoped","selected","shape","size","sizes","slot","span","spellcheck","src","srcdoc","srclang","srcset","start","step","style","summary","tabindex","target","title","translate","type","usemap","value","width","wrap"]}}const L=I;let D=(e=!1,t=1,r="ease",s=!1)=>`${!0===s?"opacity:0;":""}transition: opacity ${t}s ${r}; opacity: ${!0===e?1:0};`;var w=r(2),R=r(1);class P{constructor(e){this.props.observableStreams=P.createDirectionalObservables()}static createDirectionalFiltersObject(){return{P:["parent"],C:["child"],PCI:["parent","internal","child"],CI:["child","internal"],PI:["parent","internal"],PC:["parent","child"]}}static addDefaultDir(e){return Object(s.flip)(s.mergeRight)({$dir:["internal"]},Object(s.clone)(e))}static addDownInternalDir(e,t=["internal","down"]){return Object(s.flip)(s.mergeRight)(Object(s.clone)(e),{$dir:t})}static addChildAndInternalDir(e,t=["child","down"]){return Object(s.flip)(s.mergeRight)(Object(s.clone)(e),{$dir:t})}static mapToDefaultDir(e){return this.addDefaultDir(e)}static createDirectionalObservables(e=new w.Subject,t,r){void 0!==t&&void 0!==r&&(e.viewName=t,e.vsid=r);const n=e=>Object(s.propSatisfies)(t=>t.includes(e),"$dir"),o=n("parent"),i=n("child"),a=n("internal"),c=e=>Object(s.mergeRight)({from$:e}),l=c("child"),d=c("internal"),h=c("parent"),p=e.pipe(Object(R.filter)(e=>void 0!==e&&void 0!==e.action)),u=e.pipe(Object(R.filter)(a),Object(R.map)(d)),E=e.pipe(Object(R.filter)(o),Object(R.map)(l)),m=e.pipe(Object(R.filter)(i),Object(R.map)(h)),b={parent:E,internal:u,child:m};return{raw$:p,toInternal$:u,toParent$:E,toChild$:m,completeAll:()=>{Object(s.forEach)(e=>{e.complete(),e.isStopped=!0},[p,u,E,m])},completeStream:(e=[])=>{const t=e=>{if(void 0!==b[e]){(t=b[e]).complete(),t.isStopped=!0}var t};void 0!==e&&e.length>=1&&e.forEach(t)}}}}class V{constructor(e,t={},r="",s="theName"){this.addMixins(),this._state="INIT",this.vsid=r,this.vsName=s,this.defaults={debug:!1,extendedHashMethods:{}},this.options=C(this.defaults,t);this.addActionListeners().forEach(e=>{let[t,r]=e;this.options.extendedHashMethods[t]=e=>this[r](e)}),this.options.hashMethods=this.setHashMethods(this.options.extendedHashMethods),this.sink$=e,this.sink$.subscribe(this.onObsSinkSubscribe.bind(this)),this.$dirs=P.createDirectionalFiltersObject(),this.addDefaultDir=P.addDefaultDir,this.sourceStreams=P.createDirectionalObservables(new w.Subject,this.vsName,this.vsid),this._source$=this.sourceStreams.toInternal$}addActionListeners(){return[]}setHashMethods(e={}){return C({VS_DETRITUS_COLLECT:e=>this.onGarbageCollect(e),READY_FOR_VS_DETRITUS_COLLECT:e=>this.onReadyForGC(e),EXTIRPATE:e=>this.onDispose(e),VS_SPAWN:e=>this.onRender(e),VS_SPAWN_AND_ATTACH_TO_PARENT:e=>this.onRenderAndAttachToParent(e),VS_SPAWN_AND_ATTACH_TO_DOM:e=>this.onRenderAndAttachToDom(e),ATTACH_CHILD_TO_SELF:e=>this.onAttachChildToSelf(e)},e)}createDomItem(){this.props=void 0!==this.props?this.props:{};let e=Object(s.filter)(e=>void 0!==e,Object(s.pick)(["id","className"],this.props)),{tagName:t,data:r,template:n}=this.props;return new I(t,e,r,n)}onDisposeCompleted(e){}animateInTween(e,t){!function(e,t){let r=1*window.getComputedStyle(e).opacity,s=D(!0,t,"ease",1===r);e.style.cssText+=s}(e,t)}animateOutTween(e,t,r){!function(e,t,r){let s=D(!1,t,"ease");e.style.cssText+=s,e.addEventListener("transitionend",r,!1)}(e,t,r)}setAnimateIn(e){if(!0===e.animateIn){let t=void 0!==e.el?e.el:this.domItem.el;this.animateInTween(t,e.animateInTime)}}disposeMethod(e){let t=void 0!==e.el.el?e.el.el:e.el;const r={action:"READY_FOR_VS_DETRITUS_COLLECT",$dir:this.$dirs.PI,el:t};let s=Object(w.bindCallback)((e,r)=>{this.animateOutTween(t,e.animateOutTime,r)}),n=e=>{this._source$.next(r)};return(!0===e.animateOut?e=>(s(e).subscribe(n),{action:"EXTIRPATING",$dir:this.$dirs.CI}):()=>({action:"EXTIRPATE_AND_READY_FOR_VS_DETRITUS_COLLECT",$dir:this.$dirs.CI}))(e)}onDispose(e){return this.disposeMethod(e)}removeStream(){void 0!==this.sourceStreams&&this.sourceStreams.completeStream(["internal","child"])}onReadyForGC(e){this.removeStream()}onGarbageCollect(e){void 0!==this.domItem&&this.domItem.unmount(),void 0!==this.sourceStreams&&this.sourceStreams.completeStream(["parent"])}getSourceStream(){return this._source$}combineDomItems(e){let t=Object(s.isNil)(e.query)?e.node:e.query;("appendChild"===e.attachType?(e,t)=>e.appendChild(t):(e,t)=>e.insertBefore(t,e.firstChild))(t,this.domItem.render()),this.setAnimateIn(e)}onAttachChildToSelf(e){let t=e.childRenderData;return this.combineDomItems(t),{action:"CHILD_ATTACHED",$dir:this.$dirs.PI}}onRenderAndAttachToParent(e){return this.onRender(e),this.combineDomItems(e),{action:"VS_SPAWNED_AND_ATTACHED_TO_PARENT",el:this.domItem.el,$dir:this.$dirs.PI}}renderDomItem(e){let t,r,s,n;return[t,r,s,n]=e,this.domItem=new I({tagName:t,attributes:r,data:s,template:n}),this.domItem}onRender(e){return{action:"VS_SPAWNED",el:(e=>this.renderDomItem(e))(Object(s.props)(["tagName","domAttributes","data","template"],e)),$dir:this.$dirs.I}}extendedMethods(e){}onRenderAndAttachToDom(e){return e.attachData.el=(e=>this.renderDomItem(e))(Object(s.props)(["tagName","domAttributes","data","template"],e)),this.combineDomItems(e.attachData),{action:"VS_SPAWNED_AND_ATTACHED_TO_DOM",el:e.attachData.el.el,$dir:this.$dirs.CI}}onObsSinkSubscribe(e){let t=e.action,r=Object(s.defaultTo)(e=>this.extendedMethods(e))(this.options.hashMethods[t])(e);void 0!==r&&(e=>{this._source$.next(e)})(Object.freeze(r))}addMixins(){}}class H{constructor(e,t){this.context=e,this.enhancersMap=new Map,this.enhancersArr=t,this.initMap(),this.addAllEnhancerMethods()}initMap(){this.enhancersMap.set("ALL",[]);let e=o(this.context).allMethods;this.updateMap("LOCAL",e)}getEnhancersMap(){return this.enhancersMap}updateMap(e,t){let r=Object(s.concat)(this.enhancersMap.get("ALL"),t);this.enhancersMap.set(e,t),this.enhancersMap.set("ALL",r)}getMethodsArr(e){return this.enhancersMap.get(e)}createEnhancerMethodsObj(e){const t=e=>console.error(`Spyne Error: The following enhancer method, "${e}", already exists and cannot be added to the ${r.name} Enhancer!`);let r=new e(this.context);let n=r.getEnhancerMethods(),o=(e=>{let r=Object(s.includes)(s.__,this.getMethodsArr("ALL")),n=Object(s.filter)(r,e);return n.forEach(t),n})(n.allMethods),i=Object(s.dropWhile)(Object(s.includes)(s.__,o));return n=Object(s.map)(i,n),this.updateMap(r.name,n.allMethods),n.enhancer=r,n.name=r.name,n}addAllEnhancerMethods(){Object(s.forEach)(e=>{let t=this.createEnhancerMethodsObj(e);t.enhancer.bindParentViewStream(t,this.context)},this.enhancersArr)}}var M=r(3),W=r.n(M);const U=W.a.Success,$=W.a.Failure;let F=()=>{};function x(){setTimeout(()=>{Object(s.forEach)(e=>{},this)},1)}void 0!==s.curry&&(F=Object(s.curry)((e,t)=>{const r=U(Object(s.curryN)(Object(s.length)(e),Object(s.always)(t)));return Object(s.reduce)((e,r)=>e.ap(r.predicate(t)?U(t):$([r.error])),r,e)}));class k{constructor(e,t,r,s="subscribe",n=!1){this.addMixins(),this.options={name:e,observable:t,data:r,action:s},this.getValidationChecks(e)}getValidationChecks(e){let t=e=>this.onRunValidations(e);return!0===window.Spyne.channels.map.has(e)?t(m):(r="payload Needs a Valid Stream Name!",console.warn(r));var r}onRunValidations(e){F(e(),this.options).fold(this.onError.bind(this),this.onSuccess.bind(this))}onPayloadValidated(e){this.sendToDirectorStream(e)}sendToDirectorStream(e){window.Spyne.channels.getStream("DISPATCHER").next(e),this.gc()}onError(e){console.warn("payload failed due to:\n"+e.map(e=>"* "+e).join("\n")),this.gc()}onSuccess(e){this.onPayloadValidated(e)}addMixins(){this.gc=x}}class G{constructor(e,t){this.addMixins(),this.props=e,this.broadcastFn=t,this.broadcaster(this.broadcastFn)}addDblClickEvt(e){return Object(w.fromEvent)(e,"dblclick").pipe(Object(R.map)(e=>{let t=Object(s.clone)(e);return t.typeOverRide="dblclick",t}))}broadcast(e){let t,r={UI:this.sendUIPayload,ROUTE:this.sendRoutePayload},[n,o,i]=e,a=this.props.el.querySelectorAll(n);if(a.length<=0){let e=this.props.el;const t=t=>{t===e&&(a=[t])};(()=>{let r=(null!==e.parentElement?e.parentElement:document).querySelectorAll(n);r.forEach=Array.prototype.forEach,r.forEach(t)})()}let c=void 0!==i,l=e=>{let n="dblClick"!==o?Object(w.fromEvent)(e,o,{preventDefault:()=>!0}):this.addDblClickEvt(e);t=e.dataset.channel;let i={};i.payload=(e=>{let t={};for(let r in e)t[r]=e[r];return t})(e.dataset),i.payload=Object(s.omit)(["channel"],i.payload),i.channel=t,i.srcElement={},i.srcElement.id=this.props.id,i.srcElement.vsid=this.props.vsid,i.srcElement.isLocalEvent=c,i.srcElement.srcEvent=o,i.srcElement.el=e,(void 0!==t?r[t]:r.UI)(n,i)},d=!0===Object(s.path)(["Spyne","config","debug"],window);!0===(void 0===a||a.length<=0)&&!0===d?console.warn(`Spyne Warning: The item ${n}, does not appear to exist!`):(a.forEach=Array.prototype.forEach,a.forEach(l))}broadcaster(e){e().forEach(e=>this.broadcast(e))}addMixins(){let e={testFunc:function(e){console.log("stream mixin is ",e)},sendRoutePayload:function(e,t){return new k("CHANNEL_ROUTE",e,t,"subscribe")},sendUIPayload:function(e,t){return new k("CHANNEL_UI",e,t,"subscribe")}};this.sendUIPayload=e.sendUIPayload,this.sendRoutePayload=e.sendRoutePayload}}const q=r(0).map;class Y{constructor(e={}){void 0!==e.props&&(e.propFilters=Object(s.prop)("props",e));let{selector:t,propFilters:r,label:n}=e;const o=Object(s.compose)(s.not,s.isEmpty),i=Object(s.allPass)([Object(s.is)(String),o]),a=Object(s.allPass)([Object(s.is)(Array),o]),c=i(t)?Y.filterSelector([t]):void 0,l=a(t)?Y.filterSelector(t):void 0,d=Object(s.is)(Object,r)?Y.filterData(r,n):void 0;let h=Object(s.reject)(s.isNil,[c,l,d]);return Object(s.isEmpty)(h)&&(h=[Object(s.always)(!1)],!0===Object(s.path)(["Spyne","config","debug"],window)&&console.warn(`Spyne Warning: The Channel Filter, with selector: ${t}, and propFilters:${r} appears to be empty!`)),Object(s.allPass)(h)}static filterData(e,t){const r=t;return(()=>{if(Object(s.isEmpty)(e))return Object(s.always)(!1);e=q((e,t,r)=>{return!0===Object(s.is)(String,e)?(n=e,e=>e===n):e;var n},e);let t=Object(s.where)(e);const n=Object(s.ifElse)(Object(s.prop)("props"),Object(s.invoker)(0,"props"),s.identity);return Object(s.compose)(t,t=>{if(void 0===r)return t;const n={};return Object(s.forEachObjIndexed)((e,r)=>n[r]=e(Object(s.prop)(r,t)),e),console.log(`%c CHANNEL PAYLOAD FILTER DEBUGGER '${r}': `,"color:orange;",{propsBooleans:n,comparedObj:t}),t},Object(s.defaultTo)({}),n)})()}static checkPayloadSelector(e,t){t=!0===Object(s.compose)(Object(s.equals)("Function"),s.type,Object(s.prop)("props"))(t)?t.props():t;let r=Object(s.path)(["el"],t);const n=e=>e.isEqualNode(r);if("object"!=typeof r)return!1;let o=Object(s.compose)(s.flatten,q(e=>{let t=Object(s.flatten)(document.querySelectorAll(e));return q(n,t)}))(e);return!0!==Object(s.isEmpty)(o)&&Object(s.any)(Object(s.equals)(!0),o)}static filterSelector(e){let t=Object(s.reject)(s.isEmpty,e);return Object(s.curry)(Y.checkPayloadSelector)(t)}}function B(){return!0===Object(s.path)(["Spyne","config","debug"],window)}function z(e,t,r=!1){let n=Q(e,t,r);return 1===n.length?Object(s.head)(n):n}function K(e,t,r){let n=document.querySelector(e);if(!1!==Object(s.compose)(Object(s.lte)(0),Object(s.defaultTo)(-1),Object(s.prop)("nodeType"))(n)){if(void 0!==t){null===n.querySelector(t)&&!0===B()&&!0===r&&console.warn(`Spyne Warning: the selector, ${t} does not exist in this el, ${e}`)}}else console.warn(`Spyne Warning: the el object is not a valid single element, ${n}`)}function Q(e,t,r=!1){let s=void 0!==t?`${e} ${t}`:e;return!0===r&&K(e,t,r),(e=>{try{document.querySelectorAll(e)}catch(e){return[]}return document.querySelectorAll(e)})(s)}function X(e,t,r){return Q(t,r).forEach(t=>{t.style.cssText=e}),this}function J(e,t){function r(t){return J(e,t)}return K(e="string"==typeof e?e:function(e){let t=`${Math.random().toString(36).replace(/\d/gm,"").substring(1,8)}`;return void 0===e.dataset.vsid?e.dataset.vsid=t:t=e.dataset.vsid,`[data-vsid='${t}']`}(e),t,!1),r.map=r=>Array.from(Q(e,t)).map(r),r.forEach=r=>Array.from(Q(e,t)).map(r),r.getNodeListArray=()=>Q(e,t),r.addClass=r=>(Q(e,t).forEach(e=>e.classList.add(r)),this),r.removeClass=r=>(Q(e,t).forEach(e=>{e.classList.remove(r)}),this),r.setClass=r=>(Q(e,t).forEach(e=>{let t=Object(s.compose)(Object(s.reject)(s.isEmpty),Object(s.split)(" "))(e.className),n=r.split(" ");t.forEach(t=>e.classList.remove(t)),n.forEach(t=>e.classList.add(t))}),this),r.unmount=()=>{},r.toggleClass=(r,s)=>(Q(e,t).forEach(e=>{(s=void 0!==s?s:!e.classList.contains(r))?e.classList.add(r):e.classList.remove(r)}),this),r.toggle=(e,t)=>(r.toggleClass(e,t),this),r.appendChild=e=>(0!==r.el.length?r.el.appendChild(e):console.warn(`Spyne Warning: The selector, ${t} does not appear to be valid!`),r.el),r.addAnimClass=r=>{window.setTimeout(()=>{Q(e,t).forEach(e=>e.classList.add(r))},1)},r.setActiveItem=(r,n)=>{let o=Q(e,t),i="string"==typeof n?z(e,n):n;const a=e=>e.isEqualNode(i)?e.classList.add(r):e.classList.remove(r);var c;return!0===(c=i,Object(s.compose)(Object(s.lte)(0),Object(s.defaultTo)(-1),Object(s.prop)("nodeType"))(c))?o.forEach(a):!0===B()&&console.warn(`Spyne Warning: The selector, ${n}, does not appear to be a valid item in setActiveItem: ${r}`),this},Object.defineProperty(r,"el",{get:()=>z(e,t,!0)}),Object.defineProperty(r,"els",{get:()=>Q(e,t)}),Object.defineProperty(r,"len",{get:()=>Q(e,t,!1).length}),Object.defineProperty(r,"exists",{get:()=>Q(e,t,!1).length>=1}),Object.defineProperty(r,"exist",{get:()=>Q(e,t,!1).length>=1}),Object.defineProperty(r,"nodeList",{get:()=>Q(e,t)}),Object.defineProperty(r,"arr",{get:()=>{let r=z(e,t,!0);return void 0===r?[]:void 0===r.length?[r]:Array.from(r)}}),Object.defineProperty(r,"inline",{set:r=>X(r,e,t)}),Object.defineProperty(r,"inlineCss",{set:r=>X(r,e,t)}),r}const Z=r(0).map;class ee{constructor(e={}){this.vsnum=Math.random(),this.addMixins(),this.defaults=()=>{const t=this.createId(),r=e.id?e.id:t;return{vsid:t,id:r,tagName:"div",el:void 0,data:void 0,animateIn:!1,animateInTime:.5,animateOut:!1,animateOutTime:.5,sendLifecyleEvents:!1,hashId:`#${r}`,id$:`#${r}`,viewClass:V,extendedSourcesHashMethods:{},debug:!1,template:void 0,node:document.createDocumentFragment(),name:n(this)}},this._state={},this.$dirs=P.createDirectionalFiltersObject(),this.addDefaultDirection=P.addDefaultDir,this.addDownInternalDir=P.addDownInternalDir,this.props=C(this.defaults(),e),this.sendLifecycleMethod=!0===this.props.sendLifecyleEvents?this.sendLifecycleMethodActive.bind(this):this.sendLifecycleMethodInactive.bind(this);let t=this.attributesArray;this.props.domAttributes=Object(s.pick)(t,this.props),void 0!==this.props.traits&&this.addTraits(this.props.traits),this.loadEnhancers(),this.loadAllMethods(),this.props.action="LOADED",this.sink$=new w.Subject;const r=this.props.viewClass;this.view=new r(this.sink$,{},this.props.vsid,this.props.id),this.sourceStreams=this.view.sourceStreams,this._rawSource$=this.view.getSourceStream(),this._rawSource$.viewName=this.props.name,this.sendEventsDownStream=this.sendEventsDownStreamFn,this.initViewStream(),this.isDevMode=ee.isDevMode(),this.props.addedChannels=[],this.checkIfElementAlreadyExists()}updatePropsToMatchEl(){const e=Object(s.compose)(s.toLower,Object(s.either)(Object(s.prop)("tagName"),Object(s.always)("")));this.props.tagName=e(this.props.el)}checkIfElementAlreadyExists(){const e=Object(s.compose)(Object(s.lte)(0),Object(s.defaultTo)(-1),Object(s.prop)("nodeType"));Object(s.propSatisfies)(Object(s.allPass)([e=>document.body.contains(e),e]),"el")(this.props)&&(this.updatePropsToMatchEl(),this.postRender())}loadEnhancers(e=[]){let t=new H(this,e);this.props.enhancersMap=t.getEnhancersMap(),t=void 0}loadAllMethods(){const e=Object(s.curry)(this.onChannelMethodCall.bind(this));this.addActionListeners().forEach(t=>{let[r,n,o]=t;Object(s.is)(String,o)&&(o=new Y({selector:o})),this.props.extendedSourcesHashMethods[r]=e(n,o)}),this.props.hashSourceMethods=this.setSourceHashMethods(this.props.extendedSourcesHashMethods)}addActionListeners(){return[]}onChannelMethodCall(e,t,r){const n=t=>{void 0===this[e]?console.warn(`Spyne Warning: The method, ${e} does not appear to exist in ${this.constructor.name}!`):this[e](t)};if(void 0!==r.$dir&&r.$dir.includes("child")&&!0!==this.deleted){let e=C({},r);e.$dir=this.$dirs.C,this.sourceStreams.raw$.next(e)}!0===Object(s.defaultTo)(Object(s.always)(!0),t)(r.props())&&n(r=Object(s.omit)(["$dir"],r))}setSourceHashMethods(e={}){let t={EXTIRPATING:e=>this.checkParentDispose(e),EXTIRPATE:e=>this.disposeViewStream(e),VS_SPAWNED:e=>this.onVSRendered(e),VS_SPAWNED_AND_ATTACHED_TO_DOM:e=>this.onVSRendered(e),VS_SPAWNED_AND_ATTACHED_TO_PARENT:e=>this.onVSRendered(e),READY_FOR_VS_DETRITUS_COLLECT:e=>this.onReadyToGC(e),VS_NULLITY:()=>({})};return C.all([{},t,e])}initViewStream(){this._source$=this._rawSource$.pipe(Object(R.map)(e=>this.onMapViewSource(e)),Object(R.takeWhile)(this.notGCSTATE)),this.initAutoMergeSourceStreams(),this.updateSourceSubscription(this._source$,!0)}notGCSTATE(e){return!e.action.includes("READY_FOR_VS_DETRITUS_COLLECT")}eqGCSTATE(e){return!e.action.includes("READY_FOR_VS_DETRITUS_COLLECT")}notCOMPLETED(e){return!e.action.includes("COMPLETED")}notGCCOMPLETE(e){return!e.action.includes("GC_COMPLETE")}testVal(e){console.log("TESTING VALL IS ",e)}addParentStream(e,t){this.parent$=e.pipe(Object(R.filter)(e=>void 0!==e&&void 0!==e.action),Object(R.map)(e=>{let t=C({},e);return"EXTIRPATE_AND_READY_FOR_VS_DETRITUS_COLLECT"===t.action&&(this.disposeViewStream(t),t.action="READY_FOR_VS_DETRITUS_COLLECT"),t})),this.updateSourceSubscription(this.parent$,!1,"PARENT"),this.renderAndAttachToParent(t)}addChildStream(e){let t=e.pipe(Object(R.filter)(e=>void 0!==e&&void 0!==e.action),Object(R.tap)(e=>this.tracer("addChildStraem do ",e)),Object(R.map)(e=>e),Object(R.finalize)(e=>this.onChildCompleted(t.source)));this.updateSourceSubscription(t,!0,"CHILD")}onChildDisposed(e){}onChildCompleted(e){let t=(e=>{let t=e=>{for(;void 0!==e.destination;)e=t(e.destination);return e};return Object(s.pick)(["id","vsid"],t(e))})(e);return this.tracer("onChildCompleted ",this.vsnum,e),this.onChildDisposed(t,e),t}initAutoMergeSourceStreams(){let e={next:this.onSubscribeToSourcesNext.bind(this),error:this.onSubscribeToSourcesError.bind(this),complete:this.onSubscribeToSourcesComplete.bind(this)},t=()=>{this.props.el$=void 0,this.uberSource$.complete(),this.autoSubscriber$.complete(),this.sink$.complete(),this.props=void 0,this.deleted=!0,this.tracer("completeAll",this.deleted,this.props)},r=()=>{s-=1,0===s&&t()},s=0;this.uberSource$=new w.Subject;this.autoMergeSubject$=this.uberSource$.pipe(Object(R.mergeMap)(e=>{let t=e.observable.pipe(Object(R.filter)(e=>void 0!==e&&void 0!==e.action),Object(R.map)(e=>{let t=C({},e);return t.action=e.action,this.tracer("autoMergeSubject$",t),t}));return!1===e.autoClosesBool?t:(s+=1,t.pipe(Object(R.finalize)(r)))})),this.autoSubscriber$=this.autoMergeSubject$.pipe(Object(R.filter)(e=>void 0!==e&&void 0!==e.action)).subscribe(e)}updateSourceSubscription(e,t=!1,r){let s={observable:e,autoClosesBool:t,rel:r};this.tracer("updateSourceSubscription ",this.vsnum,s),this.uberSource$.next(s)}onSubscribeToSourcesNext(e={}){let t=Object(s.defaultTo)(e=>this.sendExtendedStreams(e));const r=((e,t)=>{if(void 0!==e[t])return t;return Object(s.compose)(s.head,Object(s.filter)(Object(s.compose)(Object(s.test)(s.__,t),e=>new RegExp(e))))(Object(s.keys)(e))})(this.props.hashSourceMethods,e.action);t(this.props.hashSourceMethods[r])(e),this.tracer("onSubscribeToSourcesNext",{payload:e})}onSubscribeToSourcesError(e=""){console.log("ALL ERROR ",this.constructor.name,e)}onSubscribeToSourcesComplete(){this.tracer("onSubscribeToSourcesComplete","VS_DETRITUS_COLLECT"),this.openSpigot("VS_DETRITUS_COLLECT")}get source$(){return this._source$}sendExtendedStreams(e){this.tracer("sendExtendedStreams",e),this.openSpigot(e.action,e)}renderAndAttachToParent(e){this.openSpigot("VS_SPAWN_AND_ATTACH_TO_PARENT",e)}renderView(){this.openSpigot("VS_SPAWN")}renderViewAndAttachToDom(e,t,r){let s={node:e,type:t,attachType:r};this.openSpigot("VS_SPAWN_AND_ATTACH_TO_DOM",{attachData:s})}checkParentDispose(e){"parent"===e.from$&&this.disposeViewStream(e)}onBeforeDispose(){}setTimeout(e,t=0,r=!1){window.setTimeout((...t)=>{if(void 0!==this&&void 0!==this.props){const n=!0===r?e.bind(this):e;Object(s.apply)(n,t)}},t)}disposeViewStream(e){this.onBeforeDispose(),this.openSpigot("EXTIRPATE")}onChildDispose(e){}onParentDisposing(e){this.openSpigot("EXTIRPATE")}onReadyToGC(e){const t=void 0!==e.from$&&"internal"===e.from$;this.tracer("onReadyToGC",t,e)}openSpigot(e,t={}){if(void 0!==this.props){this.props.action=e;let r=Object(s.mergeRight)(this.props,t);this.sink$.next(Object.freeze(r))}}static isDevMode(){return!0===Object(s.path)(["Spyne","config","debug"],window)}setAttachData(e,t){return{node:this.props.el,type:"ViewStreamObservable",attachType:e,query:(()=>{let e=this.props.el.querySelector(t);return!0===ee.isDevMode()&&Object(s.is)(String,t)&&Object(s.isNil)(e)&&console.warn(`Spyne Warning: The appendView query in ${this.props.name}, '${t}', appears to not exist!`),e})()}}getParentEls(e,t){let r=e=>e.parentElement,s=0,n=e;for(;s<t;)n=r(n),s++;return n}setAttachParentData(e,t,r){return t=""!==t?t:void 0,{node:this.getParentEls(this.props.el,r),type:"ViewStreamObservable",attachType:e,query:this.props.el.parentElement.querySelector(t)}}onMapViewSource(e={}){return this.props=Object(s.mergeRight)(this.props,e),e}exchangeViewsWithChild(e,t){this.addChildStream(e.sourceStreams.toParent$),e.addParentStream(this.sourceStreams.toChild$,t)}appendToDom(e){void 0!==this.props.el&&console.warn(`Spyne Warning: The ViewStream, ${this.props.name}, has an element, ${this.props.el}, that is already rendered and does not need to be appendedToDom. This may create unsusual side effects!`),this.renderViewAndAttachToDom(e,"dom","appendChild")}prependToDom(e){void 0!==this.props.el&&console.warn(`Spyne Warning: The ViewStream, ${this.props.name}, has an element, ${this.props.el}, that is already rendered and does not need to be prependedToDom. This may create unsusual side effects!`),this.renderViewAndAttachToDom(e,"dom","prependChild")}appendView(e,t){this.exchangeViewsWithChild(e,this.setAttachData("appendChild",t))}appendViewToParentEl(e,t,r=1){this.exchangeViewsWithChild(e,this.setAttachParentData("appendChild",t,r))}prependViewToParentEl(e,t,r=1){this.exchangeViewsWithChild(e,this.setAttachParentData("prependChild",t,r))}prependView(e,t){this.exchangeViewsWithChild(e,this.setAttachData("prependChild",t))}appendToNull(){let e=document.getElementById("spyne-null-views");this.renderViewAndAttachToDom(e,"dom","appendChild")}onVSRendered(e){"internal"===e.from$&&this.postRender()}postRender(){if(this.beforeAfterRender(),this.afterRender(),this.onRendered(),!0===this.isDevMode){const e=this.broadcastEvents();!1===ee.isValidNestedArr(e)&&console.warn(`Spyne Warning: The array returned from broadcastEvents in ${this.props.name}, '${JSON.stringify(e)}', does not appear to be properly formatted!`)}this.viewsStreamBroadcaster=new G(this.props,this.broadcastEvents.bind(this)),this.afterBroadcastEvents()}addTraits(e){"Array"!==e.constructor.name&&(e=[e]);if(e.forEach(e=>{new e(this)}),!0===this.isDevMode){this.addActionListeners()}}afterBroadcastEvents(){if(!0===this.isDevMode){const e=e=>e[0],t=this.addActionListeners();let r=t.map(e);if(!1===ee.isValidNestedArr(t))console.warn(`Spyne Warning: The array returned from addActionsListeners in ${this.props.name}, '${JSON.stringify(t)}', does not appear to be properly formatted!`);else{const e=e=>{const t=Object(s.defaultTo)("",e[1]);!1===Object(s.is)(Function,this[t])&&console.warn(`Spyne Warning: The method in addActionListeners nested Array, '${JSON.stringify(e)}', in ${this.props.name}, does not appear to exist!`)};Object(s.compose)(Object(s.forEach)(e),Object(s.defaultTo)([]))(t)}const n=()=>{void 0!==Object(s.path)(["props","addedChannels"],this)&&ee.checkIfActionsAreRegistered.bind(this)(this.props.addedChannels,r)};this.setTimeout(n,500)}}static checkIfActionsAreRegistered(e=[],t){if(t.length>0){const r=t=>{let r=new RegExp(t);if(Object(s.findIndex)(Object(s.test)(r),n)<0){let r=1===e.length?"from added channel. \nDid you forget to add the Channel to this ViewStream?":"from added channels. \nDid you forget to add the Channel to this ViewStream?";console.warn(`Spyne Warning: The action, ${t}, in ${this.props.name}, does not match any of the registered actions ${r}, ${e.join(", ")}`)}};let n=(e=>{let t=e.map(e=>window.Spyne.channels.getChannelActions(e));return Object(s.flatten)(t)})(e);t.forEach(r)}}setDataVSID(){this.props.el.dataset.vsid=this.props.vsid}beforeAfterRender(){this.setDataVSID(),this.props.el$=J(this.props.el)}downStream(){}onRendered(){}afterRender(){}static isValidNestedArr(e){const t=Object(s.equals)(!0),r=Object(s.all)(t),n=Object(s.is)(String),o=Object(s.compose)(r,Z(n),Object(s.slice)(0,2),Object(s.defaultTo)([]));return Object(s.compose)(r,Z(o),Object(s.defaultTo)([]))(e)}broadcastEvents(){return[]}getChannel(e){return Object(s.ifElse)(e=>c().includes(e),e=>window.Spyne.channels.getStream(e).observer.pipe(Object(R.takeWhile)(e=>!0!==this.deleted)),e=>console.warn(`channel name ${e} is not within ${c}`))(e)}addChannel(e,t=!1,r=!1,n=!1){const o=!0===r?this.$dirs.CI:this.$dirs.I,i=Object(s.path)(["srcElement","isLocalEvent"]),a=Object(s.path)(["srcElement","vsid"]),c=[Object(R.map)(e=>{let t=Object(s.defaultTo)({},Object(s.clone)(e));return C({$dir:o},t)}),Object(R.filter)(e=>{let t=a(e);return!0!==i(e)||t===this.props.vsid})];!0===t&&c.unshift(Object(R.skip)(1));let l=this.getChannel(e).pipe(...c);this.updateSourceSubscription(l,!1),this.props.addedChannels.push(e)}checkIfChannelExists(e){let t=void 0!==window.Spyne.channels.map.get(e);return!0!==t&&console.warn(`SPYNE WARNING: The ChannelPayload from ${this.props.name}, has been sent to a channel, ${e}, that has not been registered!`),t}sendInfoToChannel(e,t={},r="VIEWSTREAM_EVENT"){let n={payload:t,action:r};if(n.srcElement=Object(s.compose)(Object(s.pick)(["id","vsid","class","tagName"]),Object(s.prop)("props"))(this),!0===this.checkIfChannelExists(e)){let t=Object(w.of)(n);return new k(e,t,n)}}tracer(...e){this.sendLifecycleMethod(...e)}sendLifecycleMethodInactive(){}sendLifecycleMethodActive(e,t){let r="VS_DETRITUS_COLLECT"===t;!0===Object(s.where)({from$:Object(s.equals)("internal"),action:Object(s.equals)("VS_SPAWNED_AND_ATTACHED_TO_PARENT")},t)?this.sendInfoToChannel("CHANNEL_LIFECYCLE",{action:"CHANNEL_LIFECYCLE_RENDERED_EVENT"},"CHANNEL_LIFECYCLE_RENDERED_EVENT"):!0===r&&this.sendInfoToChannel("CHANNEL_LIFECYCLE",{action:"CHANNEL_LIFECYCLE_DISPOSED_EVENT"},"CHANNEL_LIFECYCLE_DISPOSED_EVENT")}createActionFilter(e,t){return new Y(e,t)}isLocalEvent(e){return void 0!==Object(s.path)(["srcElement","el"],e)&&this.props.el.contains(e.srcElement.el)}get attributesArray(){return["accept","accept-charset","accesskey","action","align","allow","alt","aria-autocomplete","aria-checked","aria-disabled","aria-expanded","aria-haspopup","aria-hidden","aria-invalid","aria-label","aria-level","aria-multiline","aria-multiselectable","aria-orientation","aria-pressed","aria-readonly","aria-required","aria-selected","aria-sort","aria-valuemax","aria-valuemin","aria-valuenow","aria-valuetext","aria-atomic","aria-busy","aria-live","aria-relevant","aria-dropeffect","aria-grabbed","aria-activedescendant","aria-controls","aria-describedby","aria-flowto","aria-labelledby","aria-owns","aria-posinset","aria-setsize","async","autocapitalize","autocomplete","autofocus","autoplay","bgcolor","border","buffered","challenge","charset","checked","cite","class","code","codebase","color","cols","colspan","content","contenteditable","contextmenu","controls","coords","crossorigin","csp","dataset","datetime","decoding","default","defer","dir","dirname","disabled","download","draggable","dropzone","enctype","for","form","formaction","headers","height","hidden","high","href","hreflang","http-equiv","icon","id","importance","integrity","ismap","itemprop","keytype","kind","label","lang","language","lazyload","list","loop","low","manifest","max","maxlength","minlength","media","method","min","multiple","muted","name","novalidate","open","optimum","pattern","ping","placeholder","poster","preload","radiogroup","readonly","referrerpolicy","rel","required","reversed","role","rows","rowspan","sandbox","scope","scoped","selected","shape","size","sizes","slot","span","spellcheck","src","srcdoc","srclang","srcset","start","step","style","summary","tabindex","target","title","translate","type","usemap","value","width","wrap"]}addMixins(){let e=j();this.createId=e.createId}}class te{constructor(e){let t=String(e.props.name),r=`${t}_ROUTE_UPDATER`;return Object(s.curry)(te.createTemporaryViewStreamObj)({id:r,name:t})}static createTemporaryViewStreamObj(e,t){let{name:r,id:s}=e,n=t,o=new ee({id:s,name:r,data:t});o.onRendered=()=>{o.sendInfoToChannel("CHANNEL_ROUTE",n)},o.afterBroadcastEvents=()=>{o.disposeViewStream()},o.appendToNull()}}const re=r(0).map;class se{constructor(e,t={}){this.addRegisteredActions.bind(this),this.createChannelActionsObj(e,t.extendedActionsArr),t.name=e,this.props=t,this.props.isProxy=void 0!==this.props.isProxy&&this.props.isProxy,this.props.sendCachedPayload=void 0!==this.props.sendCachedPayload&&this.props.sendCachedPayload,this.sendPayloadToRouteChannel=new te(this),this.createChannelActionMethods(),this.streamsController=window.Spyne.channels;let r=this.getMainObserver();this.observer$=this.props.observer=r,this.streamsController.getStream("DISPATCHER").subscribe(e=>this.onReceivedObservable(e))}getMainObserver(){return!0===this.streamsController.testStream(this.props.name)?this.streamsController.getProxySubject(this.props.name,this.props.sendCachedPayload):!0===this.props.sendCachedPayload?new w.ReplaySubject(1):new w.Subject}onChannelInitialized(){}onRegistered(){}get isProxy(){return this.props.isProxy}get channelName(){return this.props.name}get observer(){return this.observer$}checkForTraits(){const e=e=>{"Array"!==e.constructor.name&&(e=[e]);e.forEach(e=>{new e(this)})};void 0!==this.props.traits&&e(this.props.traits)}initializeStream(){this.checkForTraits(),this.onChannelInitialized(),this.onRegistered()}setTrace(e){}createChannelActionsObj(e,t=[]){const r=Object(s.ifElse)(Object(s.is)(String),s.identity,s.head);let n=t.concat(this.addRegisteredActions(e)),o=re(r,n);let i=Object(s.mergeAll)(Object(s.chain)(e=>Object(s.objOf)(e,e),o));this.channelActions=i}createChannelActionMethods(){const e=Object(s.ifElse)(Object(s.is)(String),s.identity,s.head),t=Object(s.ifElse)(Object(s.is)(String),Object(s.always)("onViewStreamInfo"),e=>{const t=Object(s.view)(Object(s.lensIndex)(1),e);return!0===("function"==typeof this[t])?this[t].bind(this):console.warn(`"${this.props.name}", REQUIRES THE FOLLOWING METHOD ${t} FOR ACTION, ${e[0]}`),t});this.channelActionMethods=Object(s.fromPairs)(re(r=>[e(r),t(r)],this.addRegisteredActions()))}addRegisteredActions(){return[]}onReceivedObservable(e){this.onIncomingObservable(e)}getActionMethodForObservable(e){const t=this.onViewStreamInfo.bind(this);let r=Object(s.path)(["data","action"],e);const n=Object(s.prop)(r,this.channelActionMethods);let o=t;if(void 0!==n&&"onViewStreamInfo"!==n){!0===("function"==typeof this[n])&&(o=this[n].bind(this))}return o}onIncomingObservable(e){let t=Object(s.equals)(e.name,this.props.name),{action:r,payload:n,srcElement:o}=e.data;let i=t=>({props:()=>{return t=e.data,Object(s.mergeAll)([t,{action:Object(s.prop)("action",t)},Object(s.prop)("payload",t),Object(s.prop)("srcElement",t)]);var t},action:r,payload:n,srcElement:o,event:t});return!0===t?(e=>e.observable.pipe(Object(R.map)(i)).subscribe(this.getActionMethodForObservable(e)))(e):void 0}onViewStreamInfo(e){}sendChannelPayload(e,t,r={},s={},n=this.observer$){let o=new g(this.props.name,e,t,r,s);n.next(o)}getChannel(e,t){return Object(s.ifElse)(e=>c().includes(e),e=>{let r=this.streamsController.getStream(e).observer;return void 0!==t?r.pipe(Object(R.filter)(t)):r},e=>console.warn(`channel name ${e} is not within ${c}`))(e)}setTimeout(e,t=0,r=!1){window.setTimeout((...t)=>{if(void 0!==this&&void 0!==this.props){const n=!0===r?e.bind(this):e;Object(s.apply)(n,t)}},t)}}class ne{constructor(){this.checkIfObjIsNotEmptyOrNil=ne.checkIfObjIsNotEmptyOrNil.bind(this)}static checkIfObjIsNotEmptyOrNil(e){const t=Object(s.compose)(Object(s.complement)(s.isEmpty),s.head,s.values),r=Object(s.compose)(Object(s.complement)(s.isNil),s.head,s.values);return Object(s.allPass)([t,r])(e)}static checkIfParamValueMatchesRegex(e,t){const r=Object(s.reject)(Object(s.equals)("routeName")),n=Object(s.compose)(r,s.keys),o=Object(s.compose)(Object(s.find)(t=>Object(s.test)(new RegExp(t),e)),n)(t);return Object(s.is)(String,o)&&(t=Object(s.assoc)(e,Object(s.prop)(o,t),t)),t}static formatStrAsWindowLocation(e){return{hash:e,search:e,pathname:e}}static getLocationStrByType(e,t=!1,r=window.location){const n={slash:"pathname",query:"search",hash:"hash"}[!0===t?"hash":e];return Object(s.prop)(n,r).replace(/^(\/)?(#)?(\/)?(.*)$/,"$4")}static createRouteArrayFromParams(e,t,r="slash",n){let o=[],i=t=>{let r={},a=t.routeName,c=void 0!==e[a]?e[a]:Object(s.prop)(a,n);const l=typeof t[c];"string"===l?c=t[c]:"undefined"===l&&(t=this.checkIfParamValueMatchesRegex(c,t)),r[a]=c,this.checkIfObjIsNotEmptyOrNil(r)&&o.push(r);const d=Object(s.is)(Object,t),h=Object(s.has)(c,t),p=Object(s.has)("routePath",t);if(!0===(h&&d)){let e=t[c];Object(s.has)("routePath",e)&&i(e.routePath)}else!0===p&&void 0!==c&&i(t.routePath)};return i(t),o}static createSlashString(e){const t=Object(s.reject)(s.isNil),r=Object(s.when)(Object(s.complement)(s.isNil,s.__),Object(s.join)("/")),n=Object(s.replace)(/^(\^*)(.*|^\$)(\$)$/,"$2");return Object(s.compose)(n,r,t,s.flatten,Object(s.map)(s.values))(e)}static createQueryString(e){const t=Object(s.reject)(s.isNil),r=this.checkIfObjIsNotEmptyOrNil,n=Object(s.compose)(Object(s.join)("="),s.flatten,s.toPairs),o=Object(s.ifElse)(r,n,Object(s.always)(void 0)),i=Object(s.map)(o),a=Object(s.when)(Object(s.complement)(s.isEmpty),Object(s.concat)("?"));return Object(s.compose)(a,Object(s.join)("&"),t,i)(e)}static checkPayloadForRegexOverrides(e,t,r="Value"){const n=Object(s.compose)(e=>Object(s.prop)(`${e}${r}`,t),s.head,s.keys);return Object(s.map)(e=>{let t=n(e);return void 0!==t?Object(s.assoc)(Object(s.compose)(s.head,s.keys)(e),t,e):e},e)}static convertParamsToRoute(e,t=window.Spyne.config.channels.ROUTE,r,s){const n=void 0!==r?r:t.type,o=t.isHash;let i=t.routes.routePath,a=void 0!==s?s:this.getLocationStrByType(n,o),c=this.convertRouteToParams(a,t,n).routeData,l=this.createRouteArrayFromParams(e,i,n,c);return l=ne.checkPayloadForRegexOverrides(l,e),"query"===n?this.createQueryString(l):this.createSlashString(l)}static findIndexOfMatchedStringOrRegex(e,t){const r=Object(s.replace)(/^$/,"^$"),n=Object(s.either)(Object(s.propEq)("str",e),Object(s.compose)(Object(s.test)(s.__,e),Object(s.prop)("re")));return Object(s.compose)(Object(s.findLastIndex)(Object(s.equals)(!0)),Object(s.map)(n),Object(s.map)(e=>{return{str:e,re:(t=e,new RegExp(t))};var t}),Object(s.map)(r))(t)}static checkIfValueShouldMapToParam(e,t,r){let n=Object(s.compose)(Object(s.map)(s.last),Object(s.map)(Object(s.filter)(Object(s.is)(String))),s.toPairs)(e),o=ne.findIndexOfMatchedStringOrRegex(t,n),i=t;if(o>=0){let t=n[o],r=Object(s.invert)(e),a=Object(s.compose)(s.head,Object(s.defaultTo)([]),Object(s.prop)(t))(r);!0===/^([-\$\w]*)$/.test(a)&&!0===Object(s.is)(String,a)&&(i=a)}return i}static createArrFromSlashStr(e){return e.replace(/^([/])?(.*)$/,"$2").split("/")}static convertSlashRouteStrToParamsObj(e,t,r){const n=t;let o=this.createArrFromSlashStr(t),i=[],a=[],c=e;Object(s.reduce)((e,t)=>{let n=this.checkIfValueShouldMapToParam(c,t,r);c=this.checkIfParamValueMatchesRegex(t,c);const o=Object(s.either)(s.isEmpty,s.isNil);void 0!==c&&(e=>e!==Object(s.last)(i))(c.routeName)&&!1===o(n)&&(i.push(c.routeName),a.push(n));let l=[t,"routePath"],d=Object(s.path)(l,c),h=Object(s.path)(["routePath"],c);void 0!==d?c=d:void 0!==h&&(c=h)},0,o);let l=Object(s.zipObj)(i,a);const d=this.getLastArrVal(i);return{paths:i,pathInnermost:d,routeData:l,routeValue:n}}static getLastArrVal(e){return t=e,void 0!==Object(s.last)(t)?Object(s.last)(t):"";var t}static createDefaultParamFromEmptyStr(e,t){let r={};return r[e.routeName]=this.checkIfValueShouldMapToParam(e,t),r}static convertQueryStrToParams(e,t,r){const n=t;let o=t.replace(/^([?])?(.*)$/,"$2"),i=Object(s.compose)(Object(s.map)(Object(s.split)("=")),Object(s.split)("&"))(o),a=Object(s.fromPairs)(i),c=Object(s.map)(s.head,i);return!0===Object(s.isEmpty)(t)&&(a=this.createDefaultParamFromEmptyStr(e,t,r),c=Object(s.keys)(a)),{paths:c,pathInnermost:this.getLastArrVal(c),routeData:a,routeValue:n}}static convertRouteToParams(e,t,r){if(void 0===t)return{};const n=void 0!==r?r:t.type,o=Object(s.defaultTo)({},Object(s.prop)("regexTokens",t));let i=t.routes.routePath;return"query"===n?this.convertQueryStrToParams(i,e):(e=e.replace(/\/$|$/,"/"),this.convertSlashRouteStrToParamsObj(i,e,o))}}class oe{constructor(){this.createPopStateStream=oe.createPopStateStream.bind(this)}static createPopStateStream(e){Object(w.fromEventPattern)((function(e){window.onpopstate=e}),(function(){window.onpopstate=function(){}})).subscribe(e)}static getLastArrVal(e){return t=e,void 0!==Object(s.last)(t)?Object(s.last)(t):"";var t}static compareRouteKeywords(e={},t){const r=(e,t)=>void 0!==t?Object(s.pick)(t,e):e;let n=r(e,t);return{pickValues:r,compare:(e={},t)=>{let o=r(e,t);const i=e=>Object(s.compose)(s.keys,Object(s.filter)(Object(s.propEq)(e,!0))),a=Object(s.compose)(Object(s.map)(e=>{let t=Object(s.prop)(e,n),r=Object(s.prop)(e,o),i=Object(s.equals)(t,r),a=void 0!==t,c=void 0!==r,l=!i,d=!1===a&&!0===c,h=!0===a&&!1===c,p={};return p[e]={same:i,changed:l,added:d,removed:h,previousExists:a,nextExists:c},p}),s.uniq,Object(s.chain)(s.keys))([n,o]);let c=Object(s.chain)(i("changed"),a),l=Object(s.chain)(i("added"),a),d=Object(s.chain)(i("removed"),a);return n=o,{pathsAdded:l,pathsRemoved:d,pathsChanged:c}},getComparer:()=>n}}static getRouteArrData(e,t){let r=Object(s.filter)(Object(s.includes)(s.__,e),t);return{paths:r,pathInnermost:oe.getLastArrVal(r)}}static flattenConfigObject(e){const t=e=>Object(s.chain)(([e,r])=>"[object Object]"===Object.prototype.toString.call(r)?Object(s.map)(([t,r])=>[`${e}.${t}`,r],t(r)):[[e,r]],Object(s.toPairs)(e));return Object(s.values)(Object(s.fromPairs)(t(e)))}static addRouteDatasets(e){const{type:t,isHash:r}=e,n=s=>{const n="query"===t?"":!0===r?"#":"/",o=ne.convertParamsToRoute(s,e);return n+o.replace(/^(.*\/)([\w\-]*\/?)(.*)$/gm,"$1$2")},o=/^([A-Za-z0-9_\-])+$/m,i=(e=[],t,r={})=>{let{routeName:a}=t;return Object(s.toPairs)(t).reduce((t,c)=>{const[l,d]=c,h=Object(s.is)(Object,d),p=e=>Object(s.test)(o,e)?String(e).toUpperCase():l;if("routeName"===l||"404"===l)return t;a=a||Object(s.prop)("routeName",d);let u=Object(s.clone)(r);if(u[a]=String(l).replace(/([^A-Za-z0-9-_])/g,""),!0===h){if(1===Object(s.keys)(u).length){const e=Object(s.path)(["routePath","routeName"],d);if(e){const o=Object(s.clone)(u);o[e]="",o.navLevel=Object(s.keys)(r).length,o.title=p(l),o.href=n(o),t.push(o)}}u=i(e,d,u)}else u.title=p(l),u.href=n(u);return u.navLevel=Object(s.keys)(r).length,t.push(u),t},[])};let a=i([],e.routes);const c=Object(s.flatten)(a);return{routeDatasetsArr:c,routeNamesArr:(e=>{const t=Object(s.reject)(Object(s.includes)(s.__,["title","href","navLevel"]));return Object(s.compose)(s.uniq,t,s.flatten,Object(s.map)(s.keys))(e)})(c)}}static conformRouteObject(e={},t=!1){const r=Object(s.path)(["channels","ROUTE"],e);let{add404s:n}=void 0!==r?r:e;n=n||t;const o=e=>{let t=e[1];const r=Object(s.is)(Array,t);return""===t?e[1]="^$":r&&(e[1]=t.join("|")),e},i=Object(s.compose)(s.fromPairs,Object(s.map)(e=>{let[t,r]=e;const a=n?{404:".+"}:{},c=Object(s.is)(Object,r),l=Object(s.is)(Array,r),d="routePath"===t;return!0===c&&!1===l&&(e[1]=i(e[1]),d&&(e[1]=Object(s.compose)(Object(s.mergeDeepRight)(a),s.fromPairs,Object(s.map)(o),s.toPairs)(e[1]))),e}),s.toPairs);if(void 0!==r){e.channels.ROUTE=i(e.channels.ROUTE);const t=oe.addRouteDatasets(e.channels.ROUTE);return e.channels.ROUTE=Object(s.mergeRight)(e.channels.ROUTE,t),e}return i(e)}static getLocationData(){return Object(s.pickAll)(["href","origin","protocol","host","hostname","port","pathname","search","hash"],window.location)}}const ie=r(0).filter,ae=r(0).mergeRight;class ce extends se{constructor(e="CHANNEL_ROUTE",t={}){t.sendCachedPayload=!0,super("CHANNEL_ROUTE",t),this.createChannelActionsObj(),this.routeConfigJson=this.getRouteConfig(),this.bindStaticMethods(),this.navToStream$=new w.ReplaySubject(1),this.observer$=this.navToStream$.pipe(Object(R.map)(e=>this.onMapNext(e))),this.compareRouteKeywords=oe.compareRouteKeywords()}checkConfigForHash(){!0===("hash"===window.Spyne.config.channels.ROUTE.type)&&(window.Spyne.config.channels.ROUTE.type="slash",window.Spyne.config.channels.ROUTE.isHash=!0)}onRegistered(){this.checkConfigForHash(),this.initStream()}createChannelActionsObj(){let e=this.addRegisteredActions();let t=Object(s.mergeAll)(Object(s.chain)(e=>Object(s.objOf)(e,e),e));this.channelActions=t}addRegisteredActions(){return["CHANNEL_ROUTE_DEEPLINK_EVENT","CHANNEL_ROUTE_CHANGE_EVENT","CHANNEL_ROUTE_CONFIG_UPDATED_EVENT",["CHANNEL_ROUTE_UPDATE_CONFIG_EVENT","updateRouteConfig"]]}updateRouteConfig(e){const t=Object(s.pick)(["isHash","isHidden","routes","type"],e.payload);window.Spyne.config.channels.ROUTE=Object(s.mergeRight)(window.Spyne.config.channels.ROUTE,t);Object(s.clone)(window.Spyne.config.channels.ROUTE);window.Spyne.config=oe.conformRouteObject(window.Spyne.config);const r=this.getRouteConfig();this.routeConfigJson=r,this.bindStaticMethodsWithConfigData(),this.sendChannelPayload("CHANNEL_ROUTE_CONFIG_UPDATED_EVENT",r,{},{},this.navToStream$)}getRouteConfig(){const e=window.Spyne.config;let t=Object(s.path)(["channels","ROUTE"],e);"query"===t.type&&(t.isHash=!1);let r=oe.flattenConfigObject(t.routes);return t.paramsArr=r,t}initStream(){this.firstLoadStream$=new w.ReplaySubject(1),this.onIncomingDomEvent(void 0,this.routeConfigJson,"CHANNEL_ROUTE_DEEPLINK_EVENT"),oe.createPopStateStream(this.onIncomingDomEvent.bind(this)),this.observer$=Object(w.merge)(this.firstLoadStream$,this.navToStream$)}onMapNext(e,t=!1){return e.action="CHANNEL_ROUTE_CHANGE_EVENT",e}static removeSSID(e){const t=Object(s.lensProp)(["routeData"]);return Object(s.over)(t,Object(s.omit)(["vsid"]))(e)}static onIncomingDomEvent(e,t=this.routeConfigJson,r){let n=void 0!==r?r:this.channelActions.CHANNEL_ROUTE_CHANGE_EVENT,o=Object(s.path)(["state","routeCount"],e),i=!0===Object(s.is)(Number,o),a=this.getDataFromString(t,i);!0===i&&(a.routeCount=o);let c=this.compareRouteKeywords.compare(a.routeData,a.paths);a=ae(a,c),this.sendChannelPayload(n,a,void 0,void 0,this.navToStream$)}static checkForRouteParamsOverrides(e){return e}static checkForEventMethods(e){const t=Object(s.compose)(ie(Object(s.test)(/^(event)([A-Z].*)([A-Z].*)$/gm)),s.keys,Object(s.prop)("payload"))(e);if(t.length>=1){const r=Object(s.prop)("event",e);if(void 0!==r){const e=(e,t,r,s,n)=>String(r).toLowerCase()+s+n,n=Object(s.replace)(/^(event)([A-Z])(.*)([A-Z].*)$/gm,e),o=e=>{const t=n(e);void 0!==r[t]&&r[t]()};t.forEach(o)}}return e}onViewStreamInfo(e){let t=this.channelActions.CHANNEL_ROUTE_CHANGE_EVENT;ce.checkForEventMethods(e);let r=this.getDataFromParams(e),n=Object(s.prop)("srcElement",e),o=Object(s.prop)("event",e),i=!r.isHidden,a=this.compareRouteKeywords.compare(r.routeData,r.paths);r=ae(r,a),this.sendRouteStream(r,i),r=ce.removeSSID(r),this.sendChannelPayload(t,r,n,o,this.navToStream$)}static checkAndConvertStrWithRegexTokens(e,t){return Object(s.keys)(t)}sendRouteStream(e,t=!0){!0===t&&this.setWindowLocation(e)}static getRouteState(){return"CHANNEL_ROUTE_CHANGE_EVENT"}static getIsDeepLinkBool(e){return!1===e&&0===this._routeCount}static getRouteCount(e=!1){return void 0===this._routeCount?(this._routeCount=0,this._routeCount):(!1===e&&(this._routeCount+=1),this._routeCount)}static getExtraPayloadParams(e=this.routeConfigJson,t=!1){return{routeCount:this.getRouteCount(t),isDeepLink:this.getIsDeepLinkBool(t),isHash:e.isHash,isHidden:e.isHidden,routeType:e.type}}static getDataFromParams(e,t=this.routeConfigJson){let r=Object(s.prop)("payload",e),n=this.getRouteStrFromParams(r,t);const o=(e,r)=>Object(s.defaultTo)(r,Object(s.prop)(e,t));let i=o("type","slash"),a=o("isHash",!1),c=ne.formatStrAsWindowLocation(n),l=this.getDataFromLocationStr(i,a,c),{pathInnermost:d,paths:h}=l;r=ae(l.routeData,r);let{routeCount:p,isDeepLink:u,isHash:E,isHidden:m,routeType:b}=this.getExtraPayloadParams(t);return{isDeepLink:u,routeCount:p,pathInnermost:d,paths:h,routeData:r,routeValue:n,isHash:E,isHidden:m,routeType:b}}static getDataFromString(e=this.routeConfigJson,t=!1){const r=e.type,s=!0===e.isHash,n=ne.getLocationStrByType(r,s);let{paths:o,pathInnermost:i,routeData:a,routeValue:c}=ce.getParamsFromRouteStr(n,e,r),{routeCount:l,isDeepLink:d,isHash:h,routeType:p,isHidden:u}=this.getExtraPayloadParams(e,t);return{isDeepLink:d,routeCount:l,pathInnermost:i,paths:o,routeData:a,routeValue:c,isHash:h,isHidden:u,routeType:p}}static getDataFromLocationStr(e="slash",t=this.routeConfigJson.isHash,r=window.location){const s=void 0!==this.routeConfigJson?this.routeConfigJson.type:e,n=ne.getLocationStrByType(s,t,r);let{paths:o,pathInnermost:i,routeData:a,routeValue:c}=this.getParamsFromRouteStr(n,this.routeConfigJson,s);return{paths:o,pathInnermost:i,routeData:a,routeValue:c,action:this.getRouteState()}}static getLocationData(){return Object(s.pickAll)(["href","origin","protocol","host","hostname","port","pathname","search","hash"],window.location)}static getRouteStrFromParams(e,t,r){const s=void 0!==r?r:t.type;return ne.convertParamsToRoute(e,t,s)}static getParamsFromRouteStr(e,t,r){const s=void 0!==r?r:t.type;return ne.convertRouteToParams(e,t,s)}checkEmptyRouteStr(e,t=!1){const r=Object(s.isEmpty)(e);return!0===(!0===r&&!1===t)||!0===(!0===r&&!0===t)?"/":!0===(!1===r&&!0===t)?Object(s.concat)("#",e):e}static removeLastSlash(e){return e.replace(/^(.*)(\/)$/,"$1")}setWindowLocation(e){let{isHash:t,routeValue:r}=e;r=this.checkEmptyRouteStr(r,t);let{routeCount:n}=e;if(!0===t){r=ce.removeLastSlash(window.location.pathname)+r,window.history.pushState({routeCount:n},"",r)}else{const e=Object(s.when)(Object(s.compose)(Object(s.complement)(Object(s.equals)("/")),s.head),Object(s.concat)("/",s.__));window.history.pushState({routeCount:n},"",e(r))}}getWindowLocation(){return window.location.pathname}bindStaticMethods(){this.getIsDeepLinkBool=ce.getIsDeepLinkBool.bind(this),this.getDataFromLocationStr=ce.getDataFromLocationStr.bind(this),this.onIncomingDomEvent=ce.onIncomingDomEvent.bind(this),this.getDataFromString=ce.getDataFromString.bind(this),this.getParamsFromRouteStr=ce.getParamsFromRouteStr.bind(this),this.getLocationData=ce.getLocationData.bind(this),this.getRouteState=ce.getRouteState.bind(this),this.getDataFromParams=ce.getDataFromParams.bind(this),this.getRouteCount=ce.getRouteCount.bind(this),this.getExtraPayloadParams=ce.getExtraPayloadParams.bind(this),this.bindStaticMethodsWithConfigData()}bindStaticMethodsWithConfigData(){const e=Object(s.curryN)(3,ce.getRouteStrFromParams);this.getRouteStrFromParams=e(s.__,this.routeConfigJson,this.routeConfigJson.type)}}class le extends se{constructor(e="CHANNEL_UI",t={}){t.sendCachedPayload=!1,super(e,t),this.keyEventsLoaded=!1,this.keyCodeArr=[]}addRegisteredActions(){return["CHANNEL_UI_ANIMATIONEND_EVENT","CHANNEL_UI_ANIMATIONITERATION_EVENT","CHANNEL_UI_ANIMATIONSTART_EVENT","CHANNEL_UI_AUDIOEND_EVENT","CHANNEL_UI_AUDIOPROCESS_EVENT","CHANNEL_UI_AUDIOSTART_EVENT","CHANNEL_UI_BLUR_EVENT","CHANNEL_UI_CACHED_EVENT","CHANNEL_UI_CANPLAYTHROUGH_EVENT","CHANNEL_UI_CANPLAY_EVENT","CHANNEL_UI_CHANGE_EVENT","CHANNEL_UI_CHECKBOXSTATECHANGE_EVENT","CHANNEL_UI_CLICK_EVENT","CHANNEL_UI_COMPLETE_EVENT","CHANNEL_UI_COPY_EVENT","CHANNEL_UI_CUT_EVENT","CHANNEL_UI_DBLCLICK_EVENT","CHANNEL_UI_DURATIONCHANGE_EVENT","CHANNEL_UI_EMPTIED_EVENT","CHANNEL_UI_ENDED_EVENT","CHANNEL_UI_EVENT","CHANNEL_UI_FOCUSIN_EVENT","CHANNEL_UI_FOCUSOUT_EVENT","CHANNEL_UI_FOCUS_EVENT","CHANNEL_UI_HASHCHANGE_EVENT","CHANNEL_UI_INPUT_EVENT","CHANNEL_UI_KEYDOWN_EVENT","CHANNEL_UI_KEYPRESS_EVENT","CHANNEL_UI_KEYUP_EVENT","CHANNEL_UI_LOADEDDATA_EVENT","CHANNEL_UI_LOADEDMETADATA_EVENT","CHANNEL_UI_MOUSEDOWN_EVENT","CHANNEL_UI_MOUSEENTER_EVENT","CHANNEL_UI_MOUSELEAVE_EVENT","CHANNEL_UI_MOUSEMOVE_EVENT","CHANNEL_UI_MOUSEOUT_EVENT","CHANNEL_UI_MOUSEOVER_EVENT","CHANNEL_UI_MOUSEUP_EVENT","CHANNEL_UI_MOUSEWHEEL_EVENT","CHANNEL_UI_PAUSE_EVENT","CHANNEL_UI_PLAYING_EVENT","CHANNEL_UI_PLAY_EVENT","CHANNEL_UI_RADIOSTATECHANGE_EVENT","CHANNEL_UI_RATECHANGE_EVENT","CHANNEL_UI_READYSTATECHANGE_EVENT","CHANNEL_UI_SEEKED_EVENT","CHANNEL_UI_SEEKING_EVENT","CHANNEL_UI_SELECT_EVENT","CHANNEL_UI_STALLED_EVENT","CHANNEL_UI_SUBMIT_EVENT","CHANNEL_UI_SUSPEND_EVENT","CHANNEL_UI_SVGABORT_EVENT","CHANNEL_UI_SVGERROR_EVENT","CHANNEL_UI_SVGLOAD_EVENT","CHANNEL_UI_SVGRESIZE_EVENT","CHANNEL_UI_SVGSCROLL_EVENT","CHANNEL_UI_SVGUNLOAD_EVENT","CHANNEL_UI_SVGZOOM_EVENT","CHANNEL_UI_TIMEUPDATE_EVENT","CHANNEL_UI_TOUCHCANCEL_EVENT","CHANNEL_UI_TOUCHEND_EVENT","CHANNEL_UI_TOUCHMOVE_EVENT","CHANNEL_UI_TOUCHSTART_EVENT","CHANNEL_UI_TRANSITIONEND_EVENT","CHANNEL_UI_VALUECHANGE_EVENT","CHANNEL_UI_VOLUMECHANGE_EVENT","CHANNEL_UI_WAITING_EVENT","CHANNEL_UI_WHEEL_EVENT"]}loadKeyStream(){let e=w.Observable.fromEvent(document,"keyup");this.keyPresses$=e.groupBy(e=>e.keyCode).mergeAll().filter(e=>this.keyCodeArr.indexOf(e.keyCode)>=0).repeat().subscribe(this.onKeyPressed.bind(this))}addKeyEvent(e){!1===this.keyEventsLoaded&&this.loadKeyStream(),this.keyEventsLoaded=!0,this.registerKey(e)}registerKey(e){this.keyCodeArr.push(e)}onKeyPressed(e){console.log("key is ",e)}static removeSSID(e){const t=Object(s.lensProp)(["payload"]);return Object(s.over)(t,Object(s.omit)(["vsid"]))(e)}onIncomingObservable(e){let t=Object(s.equals)(e.name,this.props.name);e.data=le.removeSSID(e.data);let{payload:r,srcElement:n}=e.data,o=e=>({payload:r,srcElement:n,event:e});return!0===t?(e=>e.observable.pipe(Object(R.map)(o)).subscribe(this.onUIEvent.bind(this)))(e):void 0}getActionState(e){let t=Object(s.path)(["event","type"]),r=Object(s.path)(["event","typeOverRide"]),n=Object(s.compose)(s.toUpper,Object(s.either)(r,t))(e);return void 0!==n?`CHANNEL_UI_${n}_EVENT`:"CHANNEL_UI"}static checkForEventMethods(e){const t=Object(s.compose)(Object(s.filter)(Object(s.test)(/^(event)([A-Z].*)([A-Z].*)$/gm)),s.keys,Object(s.prop)("payload"))(e);if(t.length>=1){const r=Object(s.prop)("event",e);if(void 0!==r){const e=(e,t,r,s,n)=>String(r).toLowerCase()+s+n,n=Object(s.replace)(/^(event)([A-Z])(.*)([A-Z].*)$/gm,e),o=e=>{const t=n(e);void 0!==r[t]&&"function"==typeof r[t]&&r[t]()};t.forEach(o)}}return e}onUIEvent(e){le.checkForEventMethods(e),e.action=this.getActionState(e);const t=e.action,{payload:r,srcElement:s}=e,n=e.event;this.sendChannelPayload(t,r,s,n)}}class de{constructor(){this.createDomObservableFromEvent=de.createDomObservableFromEvent.bind(this)}static createDomObservableFromEvent(e,t,r=!0,s=window){return t=void 0===t?e=>e:t,Object(w.fromEventPattern)(t=>s.addEventListener(e,t,{passive:r}),()=>{s[e]=e=>e}).pipe(Object(R.map)(t))}static createMediaQuery(e){const t=window.matchMedia(e);return this.checkIfValidMediaQuery(t,e),!1!==t&&t}static checkIfValidMediaQuery(e,t){const r=e=>e.replace(/\s+/gm,""),s=void 0!==e.matches&&r(e.media).indexOf(r(t))>=0;return!1===s&&(t=>{console.warn(`Spyne Info: the following query string, "${t}", has been optimized to "${e.media}" by the browser and may not be a valid Media Query item!`)})(t),s}static createMediaQueryHandler(e,t){let r=(e=>t=>(t.mediaQueryName=e,t))(t),s=(n=e,{addHandler:e=>{n.addListener(e)},removeHandler:e=>{n.onchange=()=>{}}});var n;return new w.fromEventPattern(s.addHandler,s.removeHandler).pipe(Object(R.map)(r))}static createMergedObsFromObj(e){let t=e.mediqQueries,r=[];return Object(s.mapObjIndexed)((e,t,s)=>{let n=de.createMediaQuery(e);return!1!==n&&r.push(de.createMediaQueryHandler(n,t)),r},t),r}}const he=r(0).map;class pe extends se{constructor(e="CHANNEL_WINDOW"){super(e),this.bindStaticMethods(),this.currentScrollY=0}initializeStream(){this.domChannelConfig=window.Spyne.config.channels.WINDOW;let e=this.getActiveObservables(),t=Object(w.merge)(...e);this.dom$=t,t.subscribe(e=>{let{action:t,payload:r,srcElement:s,event:n}=e;this.sendChannelPayload(t,r,s,n)})}static getMouseWheelMapFn(e){let t=this.channelActions.CHANNEL_WINDOW_MOUSEWHEEL_EVENT,r=e.deltaY<=0?"up":"down",{deltaX:s,deltaY:n,deltaZ:o}=e;return{action:t,payload:{scrollDir:r,deltaX:s,deltaY:n,deltaZ:o},srcElement:e.srcElement,event:e}}static createCurriedGenericEvent(e){let t=`CHANNEL_WINDOW_${e.toUpperCase()}_EVENT`;return Object(s.curry)(pe.mapGenericEvent)(t)}static mapGenericEvent(e,t){return{action:e,payload:t,srcElement:t.srcElement,event:t}}static getResizeMapFn(e){return{action:this.channelActions.CHANNEL_WINDOW_RESIZE_EVENT,payload:Object(s.pick)(["innerWidth","innerHeight","outerWidth","outerHeight"],window),srcElement:e.srcElement,event:e}}static getOrientationMapFn(e){let t=this.channelActions.CHANNEL_WINDOW_ORIENTATION_EVENT;let r=window.matchMedia("(orientation: portrait)").matches,n=Object(s.pick)(["innerWidth","innerHeight","outerWidth","outerHeight"],window);return n.orientation=!0===r?"portrait":"landscape",{action:t,payload:n,srcElement:e.srcElement,event:e}}getMediaQueryMapFn(e){return{action:this.channelActions.CHANNEL_WINDOW_MEDIA_QUERY_EVENT,payload:Object(s.pick)(["matches","media","mediaQueryName"],e),srcElement:e.srcElement,event:e}}createMouseWheelObservable(e){const t=e.debounceMSTimeForScroll;return de.createDomObservableFromEvent("mousewheel",pe.getMouseWheelMapFn.bind(this)).pipe(Object(R.debounceTime)(t))}static getScrollData(){let e=0;return t=>{let r=e-t;return e=t,{scrollY:t,scrollDistance:r,scrollDir:r>=0?"up":"down"}}}static getScrollY(e){return void 0!==e.pageYOffset?e.pageYOffset:e.scrollTop}static getScrollMapFn(e,t,r,s,n){let o=s(pe.getScrollY(n)),{scrollDistance:i}=o;return{action:r,payload:o,srcElement:e.srcElement,scrollDistance:i,event:e}}createScrollObservable(e,t=window){const r=e.debounceMSTimeForScroll,n=t===window,o=void 0!==e.scrollElForVals?e.scrollElForVals:t,i=n?"CHANNEL_WINDOW_SCROLL_EVENT":"CHANNEL_WINDOW_ELEMENT_SCROLL_EVENT",a=pe.getScrollData(),c=Object(s.partialRight)(pe.getScrollMapFn,[i,a,o]).bind(this);return de.createDomObservableFromEvent("scroll",c).pipe(Object(R.debounceTime)(r),Object(R.skipWhile)(e=>0===e.scrollDistance),Object(R.map)(e=>{const t=pe.getScrollY(window);return e.payload.scrollDistanceAbs=Math.abs(this.currentScrollY-t),this.currentScrollY=t,e}))}createOrientationObservable(e){return de.createDomObservableFromEvent("orientationchange",pe.getOrientationMapFn.bind(this))}createResizeObservable(e){const t=e.debounceMSTimeForResize;return de.createDomObservableFromEvent("resize",pe.getResizeMapFn.bind(this)).pipe(Object(R.debounceTime)(t))}getEventsFromConfig(e=this.domChannelConfig){let t=e.events;return he(e=>{let t=pe.createCurriedGenericEvent(e);return de.createDomObservableFromEvent(e,t)},t)}getActiveObservables(e=this.domChannelConfig){let t=[];e.listenForMediaQueries=(e=>{const t=Object(s.compose)(Object(s.complement)(s.isEmpty),s.head,s.values),r=Object(s.compose)(Object(s.complement)(s.isNil),s.head,s.values);return Object(s.allPass)([t,r])(e)})(e.mediqQueries);let r={listenForResize:this.createResizeObservable.bind(this),listenForOrientation:this.createOrientationObservable.bind(this),listenForScroll:this.createScrollObservable.bind(this),listenForMouseWheel:this.createMouseWheelObservable.bind(this)};Object(s.mapObjIndexed)((r,s,n)=>{e[s]&&t.push(r(e))},r),this.checkForMediaQueries(e.listenForMediaQueries);let n=this.getEventsFromConfig(e);return t=t.concat(n),t}checkForMediaQueries(e){const t=e=>{let{action:t,payload:r,srcElement:s,event:n}=e;this.sendChannelPayload(t,r,s,n,this.observer$)};!0===e&&this.getMediaQueryObservable(this.domChannelConfig).subscribe(t)}getMediaQueryObservable(e){let t=this.createMergedObsFromObj(e);return Object(s.apply)(w.merge,t).pipe(Object(R.map)(this.getMediaQueryMapFn.bind(this)))}addRegisteredActions(){return["CHANNEL_WINDOW_ABORT_EVENT","CHANNEL_WINDOW_AFTERPRINT_EVENT","CHANNEL_WINDOW_ANIMATIONEND_EVENT","CHANNEL_WINDOW_ANIMATIONITERATION_EVENT","CHANNEL_WINDOW_ANIMATIONSTART_EVENT","CHANNEL_WINDOW_APPINSTALLED_EVENT","CHANNEL_WINDOW_BEFOREPRINT_EVENT","CHANNEL_WINDOW_BEFOREUNLOAD_EVENT","CHANNEL_WINDOW_BEGINEVENT_EVENT","CHANNEL_WINDOW_BLUR_EVENT","CHANNEL_WINDOW_CACHED_EVENT","CHANNEL_WINDOW_CHANGE_EVENT","CHANNEL_WINDOW_CLICK_EVENT","CHANNEL_WINDOW_CLOSE_EVENT","CHANNEL_WINDOW_COMPOSITIONEND_EVENT","CHANNEL_WINDOW_COMPOSITIONSTART_EVENT","CHANNEL_WINDOW_COMPOSITIONUPDATE_EVENT","CHANNEL_WINDOW_COPY_EVENT","CHANNEL_WINDOW_CUT_EVENT","CHANNEL_WINDOW_DEVICECHANGE_EVENT","CHANNEL_WINDOW_DEVICELIGHT_EVENT","CHANNEL_WINDOW_DEVICEMOTION_EVENT","CHANNEL_WINDOW_DEVICEORIENTATION_EVENT","CHANNEL_WINDOW_DEVICEPROXIMITY_EVENT","CHANNEL_WINDOW_DOMATTRIBUTENAMECHANGED_EVENT","CHANNEL_WINDOW_DOMATTRMODIFIED_EVENT","CHANNEL_WINDOW_DOMCHARACTERDATAMODIFIED_EVENT","CHANNEL_WINDOW_DOMCONTENTLOADED_EVENT","CHANNEL_WINDOW_DOMELEMENTNAMECHANGED_EVENT","CHANNEL_WINDOW_ERROR_EVENT","CHANNEL_WINDOW_FOCUSIN_EVENT","CHANNEL_WINDOW_FOCUS_EVENT","CHANNEL_WINDOW_FULLSCREENCHANGE_EVENT","CHANNEL_WINDOW_FULLSCREENERROR_EVENT","CHANNEL_WINDOW_LOAD_EVENT","CHANNEL_WINDOW_MEDIA_QUERY_EVENT","CHANNEL_WINDOW_MESSAGE_EVENT","CHANNEL_WINDOW_MOUSEWHEEL_EVENT","CHANNEL_WINDOW_OFFLINE_EVENT","CHANNEL_WINDOW_ONLINE_EVENT","CHANNEL_WINDOW_OPEN_EVENT","CHANNEL_WINDOW_ORIENTATION_EVENT","CHANNEL_WINDOW_PAGEHIDE_EVENT","CHANNEL_WINDOW_PAGESHOW_EVENT","CHANNEL_WINDOW_POPSTATE_EVENT","CHANNEL_WINDOW_RESET_EVENT","CHANNEL_WINDOW_RESIZE_EVENT","CHANNEL_WINDOW_ELEMENT_SCROLL_EVENT",["CHANNEL_WINDOW_SET_ELEMENT_TO_SCROLL_EVENT","onSetElementToScroll"],"CHANNEL_WINDOW_SCROLL_EVENT","CHANNEL_WINDOW_SCROLL_LOCK_EVENT",["CHANNEL_WINDOW_SCROLL_LOCK_EVENT","onScrollLockEvent"],"CHANNEL_WINDOW_SUBMIT_EVENT","CHANNEL_WINDOW_TRANSITIONCANCEL_EVENT","CHANNEL_WINDOW_TRANSITIONEND_EVENT","CHANNEL_WINDOW_TRANSITIONRUN_EVENT","CHANNEL_WINDOW_TRANSITIONSTART_EVENT","CHANNEL_WINDOW_UNLOAD_EVENT","CHANNEL_WINDOW_WHEEL_EVENT"]}onScrollLockEvent(e){let{action:t,scrollLock:r}=e.props();window.Spyne.config.scrollLock=r,!0===r&&(window.Spyne.config.scrollLockX=window.scrollX,window.Spyne.config.scrollLockY=window.scrollY),this.sendChannelPayload(t,{scrollLock:r})}onSetElementToScroll(e){let{config:t,scrollElement:r}=e.props();t=C(this.domChannelConfig,t),this.createScrollObservable(t,r).subscribe(e=>{let{action:t,payload:r,srcElement:s,event:n}=e;this.sendChannelPayload(t,r,s,n)})}bindStaticMethods(){this.createMediaQueryHandler=de.createMediaQueryHandler.bind(this),this.createMergedObsFromObj=de.createMergedObsFromObj.bind(this)}}class ue extends se{constructor(e={}){super("CHANNEL_LIFECYCLE",e)}addRegisteredActions(){return["CHANNEL_LIFECYCLE_RENDERED_EVENT","CHANNEL_LIFECYCLE_DISPOSED_EVENT"]}onViewStreamInfo(e){let{data:t,action:r,srcElement:s}=e.props(),n=s;n.action=r,this.onSendEvent(r,n)}onSendEvent(e,t={}){const r=this.channelActions[e],s={};window.setTimeout(()=>this.sendChannelPayload(r,t,s,void 0),0)}}class Ee extends se{constructor(e,t={}){t.isProxy=!0,super(e,t),this.props=t,this.subject$=new w.Subject,this.replaySub$=new w.ReplaySubject(1),this.observer$=Object(w.merge)(this.subject$,this.replaySub$),!0===(!0===Object(s.path)(["Spyne","config","debug"],window))&&this.checkIfChannelIsStillProxy(e)}getMergedSubject(e=!1){return!0===e?this.replaySub$:this.subject$}checkIfChannelIsStillProxy(e){let t=e;window.setTimeout(()=>{!0!==Object(s.includes)(t,window.Spyne.channels.listRegisteredChannels())&&console.warn(`Spyne Warning: The channel, ${t} does not appear to be registered!`)},1e3)}get replaySubject(){return this.replaySub$}get subject(){return this.subject$}}const me=r(0).map;class be{constructor(){this.addMixins(),this.map=new Map,this.map.set("DISPATCHER",new w.Subject),this.listRegisteredChannels=be.listRegisteredChannels.bind(this),this.getChannelsList=be.getChannelsList.bind(this)}static getChannelsList(){return Array.from(window.Spyne.channels.map,(e,t)=>({key:e[0],val:e[1].constructor.name}))}static listRegisteredChannels(e=!1){let t=this.getChannelsList(),r=Object(s.reject)(Object(s.propEq)("val","ChannelProxy")),n=Object(s.filter)(Object(s.propEq)("val","ChannelProxy")),o=(!0===e?n:r)(t);return Object(s.pluck)(["key"],o)}listProxyChannels(){return this.listRegisteredChannels(!0)}checkForMissingChannels(){let e=this.getChannelsList(),t=Object(s.filter)(Object(s.propEq)("val","ChannelProxy"))(e);if(t.length>=1){let e=`Spyne Warning: The following ${1===t.length?"Channel has":"Channels have"} not been initialized: ${Object(s.compose)(Object(s.join)(", "),me(Object(s.prop)("key")))(t)}`;console.warn(e)}}init(){this.createMainStreams()}createObserver(e){F(e.validations,e.init),this.map.set(e.init.name,e.init.observable())}createMainStreams(){this.routeStream=new ce,this.map.set("CHANNEL_ROUTE",this.routeStream),this.uiStream=new le,this.map.set("CHANNEL_UI",this.uiStream),this.domStream=new pe,this.map.set("CHANNEL_WINDOW",this.domStream),this.viewStreamLifecycle=new ue,this.map.set("CHANNEL_LIFECYCLE",this.viewStreamLifecycle),this.routeStream.initializeStream(),this.domStream.initializeStream()}addKeyEvent(e){this.map.get("UI").addKeyEvent(e)}registerStream(e){let t=e.channelName;this.map.set(t,e),e.initializeStream()}getChannelActions(e){return this.map.get(e).addRegisteredActions()}getProxySubject(e,t=!1){let r=!0===t?"replaySubject":"subject";return this.map.get(e)[r]}testStream(e){return void 0!==this.map.get(e)}getStream(e){return!1===this.testStream(e)&&this.map.set(e,new Ee(e)),this.map.get(e)}addMixins(){}}class Oe{constructor(e,t="",r=!0){return this.parentContext=e,this.omittedMethods=["autoBinder","initAutoBinder","getEnhancerMethods","checkForMalformedMethods","caller","arguments","bindParentViewStream"],this.prefix=t,!0===r&&this.autoBinder(),this.allMethodsList}initAutoBinder(){this.autoBinder()}getEnhancerMethods(){return o(this,this.omittedMethods)}checkForMalformedMethods(e){if(""===this.prefix)return void console.warn(`SPYNE WARNING: The following SpyneTrait ${this.constructor.name} needs a prefix`);let t=Object(s.reject)(e=>0===e.indexOf(this.prefix),e);if(t.length>=1){let e=`Spyne Warning: The following method(s) in ${this.constructor.name} require the prefix, "${this.prefix}": [${t.join(", ")}];`;console.warn(e)}}bindParentViewStream(e,t){this.checkForMalformedMethods(e.allMethods);let r={};const n=(e,s=!1)=>{let n=!0===s?this.constructor:this;var o;"function"===typeof n[e]&&(r[e]=t[o=e]=n[o].bind(t))},o=Object(s.curryN)(2,n)(s.__,!0);return Object(s.map)(o,e.staticMethods),Object(s.map)(n,e.methods),r}autoBinder(){let e=this.getEnhancerMethods();return this.allMethodsList=this.bindParentViewStream(e,this.parentContext),this.allMethodsList}}class Ne{constructor(e,t,r){this._mapFn=Ne.setMapFn(e),this._url=Ne.setUrl(e),this._responseType=Ne.setResponseType(e),this._serverOptions=Ne.setServerOptions(e),this._subscriber=void 0!==t?t:e=>console.log("FETCH RETURNED ",e),this.debug=void 0!==e.debug&&e.debug;let s={mapFn:this.mapFn,url:this.url,serverOptions:this.serverOptions,responseType:this.responseType,debug:this.debug};!0!==r&&Ne.startWindowFetch(s,this._subscriber)}static startWindowFetch(e,t){let{mapFn:r,url:s,serverOptions:n,responseType:o,debug:i}=e;const a=!0===i?e=>console.log("DEBUG FETCH :",e):()=>{};let c=Object(w.from)(window.fetch(s,n)).pipe(Object(R.tap)(a),Object(R.flatMap)(e=>Object(w.from)(e[o]())),Object(R.map)(r),Object(R.publish)());c.connect(),c.subscribe(t)}static setMapFn(e){return Object(s.compose)(Object(s.defaultTo)(e=>e),Object(s.prop)("mapFn"))(e)}static setUrl(e){let t=Object(s.prop)("url",e);return void 0===t&&console.warn("SPYNE WARNING: URL is undefined for data channel"),t}static setResponseType(e){return Object(s.defaultTo)("json",Object(s.prop)("responseType",e))}get mapFn(){return this._mapFn}get url(){return this._url}get serverOptions(){return this._serverOptions}get responseType(){return this._responseType}static stringifyBodyIfItExists(e){return Object(s.when)(Object(s.propIs)(Object,"body"),Object(s.compose)(Object(s.over)(Object(s.lensProp)("body"),JSON.stringify)))(e)}static updateMethodWhenBodyExists(e){const t=Object(s.has)("body"),r=Object(s.propEq)("method","GET"),n=Object(s.allPass)([t,r]);return Object(s.when)(n,Object(s.assoc)("method","POST"))(e)}static setServerOptions(e){let t=Object(s.pick)(["header","body","mode","method"],e),r=Object(s.mergeDeepRight)(Ne.baseOptions(),t);return r=Ne.updateMethodWhenBodyExists(r),r=Ne.stringifyBodyIfItExists(r),r}static baseOptions(){return{method:"GET",headers:{Accept:"application/json, text/plain, */*"}}}}class _e extends se{constructor(e,t={}){void 0!==t.map&&(t.mapFn=t.map),t.extendedActionsArr=[`${e}_DATA_EVENT`,[`${e}_UPDATE_DATA_EVENT`,"onFetchUpdate"]],t.sendCachedPayload=!0,super(e,t)}onRegistered(){this.startFetch()}addRegisteredActions(e){let t=Object(s.compose)(Object(s.defaultTo)([]),Object(s.path)(["props","extendedActionsArr"]));return["CHANNEL_DATA_EVENT",["CHANNEL_UPDATE_DATA_EVENT","onFetchUpdate"]].concat(t(this))}startFetch(e={},t=this.onFetchReturned.bind(this)){let r=this.consolidateAllFetchProps(e);return new Ne(r,t)}onFetchUpdate(e){let t=this.getPropsForFetch(e);this.startFetch(t)}onFetchReturned(e){this.createChannelPayloadItem(e)}createChannelPayloadItem(e,t=`${this.props.name}_DATA_EVENT`){this.sendChannelPayload(t,e)}getPropsForFetch(e){let t=Object(s.path)(["viewStreamInfo","payload"],e);return Object(s.pick)(["mapFn","url","header","body","mode","method","responseType","debug"],t)}consolidateAllFetchProps(e,t=this.props){let r=Object(s.pick)(["mapFn","url","header","body","mode","method","responseType","debug"],t);const n=Object(s.reject)(s.isNil);return Object(s.compose)(n,(e,t)=>Object(s.mergeDeepRight)(e,t))(r,e)}get observer(){return this.observer$}}class Te{constructor(e={}){this.channels=new be,this.VERSION="0.14.8",
|
|
2
|
-
/*!
|
|
3
|
-
* Spyne 0.14.8
|
|
4
|
-
* https://spynejs.org
|
|
5
|
-
*
|
|
6
|
-
* @license Copyright 2017-2020, Frank Batista, Relevant Context, LLC. All rights reserved.
|
|
7
|
-
* Spyne is licensed under the GNU Lesser General Public License v3.0
|
|
8
|
-
*
|
|
9
|
-
* @author: Frank Batista,
|
|
10
|
-
* @email: frbatista.nyc@gmail.com
|
|
11
|
-
*/
|
|
12
|
-
this.ViewStream=ee,this.BasicView=V,this.DomEl=I,this.ViewStreamBroadcaster=G,this.ChannelsPayload=k,this.ChannelsController=be,this.ChannelsBase=se,this.ChannelPayloadItem=g,window.Spyne=this;let t={scrollLock:!1,scrollLockX:0,scrollLockY:0,debug:!1,channels:{WINDOW:{mediqQueries:{},events:[],listenForResize:!0,listenForOrientation:!0,listenForScroll:!1,listenForMouseWheel:!1,debounceMSTimeForResize:200,debounceMSTimeForScroll:150},ROUTE:{type:"slash",isHash:!1,isHidden:!1,add404s:!1,routes:{routePath:{routeName:"change"}}}}};void 0!==e&&(e=oe.conformRouteObject(e),window.Spyne.config=C(t,e)),this.getChannelActions=e=>window.Spyne.channels.getChannelActions(e),this.registerChannel=e=>this.channels.registerStream(e),this.registerDataChannel=e=>this.channels.registerStream(e),this.listChannels=()=>Array.from(window.Spyne.channels.map.keys());let r=new ee({id:"spyne-null-views"});r.appendToDom(document.body),r.props.el.style.cssText="display:none; opacity:0; pointer-events:none;",this.channels.init()}static listChannels(){return Array.from(window.Spyne.channels.map.keys())}static getChannelActions(e){return window.Spyne.channels.getChannelActions(e)}static registerChannel(e){if(void 0!==window.Spyne)return window.Spyne.channels.registerStream(e);console.warn("Spyne has not been initialized")}}window.Spyne=Te}])}));
|
|
1
|
+
/*! For license information please see spyne.min.js.LICENSE.txt */
|
|
2
|
+
!function(e,t){"object"==typeof exports&&"object"==typeof module?module.exports=t(require("rxjs"),require("ramda"),require("rxjs/operators")):"function"==typeof define&&define.amd?define("spyne",["rxjs","ramda","rxjs/operators"],t):"object"==typeof exports?exports.spyne=t(require("rxjs"),require("ramda"),require("rxjs/operators")):e.spyne=t(e.rxjs,e.R,e.rxjs.operators)}(self,(function(e,t,r){return(()=>{"use strict";var s={205:e=>{e.exports=t},443:e=>{e.exports=r},318:t=>{t.exports=e}},o={};function n(e){var t=o[e];if(void 0!==t)return t.exports;var r=o[e]={exports:{}};return s[e](r,r.exports,n),r.exports}n.d=(e,t)=>{for(var r in t)n.o(t,r)&&!n.o(e,r)&&Object.defineProperty(e,r,{enumerable:!0,get:t[r]})},n.o=(e,t)=>Object.prototype.hasOwnProperty.call(e,t),n.r=e=>{"undefined"!=typeof Symbol&&Symbol.toStringTag&&Object.defineProperty(e,Symbol.toStringTag,{value:"Module"}),Object.defineProperty(e,"__esModule",{value:!0})};var i={};return(()=>{n.r(i),n.d(i,{Channel:()=>Te,ChannelFetch:()=>Pe,ChannelFetchUtil:()=>we,ChannelPayload:()=>F,ChannelPayloadFilter:()=>ae,ChannelsMap:()=>Le,DomElement:()=>q,DomElementTemplate:()=>G,SpyneApp:()=>Ve,SpyneAppProperties:()=>C,SpynePlugin:()=>We,SpyneTrait:()=>Re,ViewStream:()=>me,ViewStreamBroadcaster:()=>Z,ViewStreamElement:()=>K,ViewStreamPayload:()=>J,ViewStreamSelector:()=>ue,deepMerge:()=>E});var e=n(318),t=n(205);class r{constructor(){this.checkIfObjIsNotEmptyOrNil=r.checkIfObjIsNotEmptyOrNil.bind(this)}static checkIfObjIsNotEmptyOrNil(e){const r=(0,t.compose)((0,t.complement)(t.isEmpty),t.head,t.values),s=(0,t.compose)((0,t.complement)(t.isNil),t.head,t.values);return(0,t.allPass)([r,s])(e)}static checkIfParamValueMatchesRegex(e,r){const s=(0,t.reject)((0,t.equals)("routeName")),o=(0,t.compose)(s,t.keys),n=(0,t.compose)((0,t.find)((r=>(0,t.test)(new RegExp(r),e))),o)(r);return(0,t.is)(String,n)&&(r=(0,t.assoc)(e,(0,t.prop)(n,r),r)),r}static formatStrAsWindowLocation(e){return{hash:e,search:e,pathname:e}}static getLocationStrByType(e,r=!1,s=window.location){const o={slash:"pathname",query:"search",hash:"hash"}[!0===r?"hash":e];return(0,t.prop)(o,s).replace(/^(\/)?(#)?(\/)?(.*)$/,"$4")}static createRouteArrayFromParams(e,r,s="slash",o){let n=[],i=r=>{let s={},a=r.routeName,c=void 0!==e[a]?e[a]:(0,t.prop)(a,o);const l=typeof r[c];"string"===l?c=r[c]:"undefined"===l&&(r=this.checkIfParamValueMatchesRegex(c,r)),s[a]=c,this.checkIfObjIsNotEmptyOrNil(s)&&n.push(s);const d=(0,t.is)(Object,r),h=(0,t.has)(c,r),p=(0,t.has)("routePath",r);if(!0===(h&&d)){let e=r[c];(0,t.has)("routePath",e)&&i(e.routePath)}else!0===p&&void 0!==c&&i(r.routePath)};return i(r),n}static createSlashString(e){const r=(0,t.reject)(t.isNil),s=(0,t.when)((0,t.complement)(t.isNil,t.__),(0,t.join)("/")),o=(0,t.replace)(/^(\^*)(.*|^\$)(\$)$/,"$2");return(0,t.compose)(o,s,r,t.flatten,(0,t.map)(t.values))(e)}static createQueryString(e){const r=(0,t.reject)(t.isNil),s=this.checkIfObjIsNotEmptyOrNil,o=(0,t.compose)((0,t.join)("="),t.flatten,t.toPairs),n=(0,t.ifElse)(s,o,(0,t.always)(void 0)),i=(0,t.map)(n),a=(0,t.when)((0,t.complement)(t.isEmpty),(0,t.concat)("?"));return(0,t.compose)(a,(0,t.join)("&"),r,i)(e)}static checkPayloadForRegexOverrides(e,r,s="Value"){const o=(0,t.compose)((e=>(0,t.prop)(`${e}${s}`,r)),t.head,t.keys);return(0,t.map)((e=>{let r=o(e);return void 0!==r?(0,t.assoc)((0,t.compose)(t.head,t.keys)(e),r,e):e}),e)}static convertParamsToRoute(e,t=C.config.channels.ROUTE,s,o){const n=void 0!==s?s:t.type,i=t.isHash;let a=t.routes.routePath,c=void 0!==o?o:this.getLocationStrByType(n,i),l=this.convertRouteToParams(c,t,n).routeData,d=this.createRouteArrayFromParams(e,a,n,l);return d=r.checkPayloadForRegexOverrides(d,e),"query"===n?this.createQueryString(d):this.createSlashString(d)}static findIndexOfMatchedStringOrRegex(e,r){const s=(0,t.replace)(/^$/,"^$"),o=(0,t.either)((0,t.propEq)("str",e),(0,t.compose)((0,t.test)(t.__,e),(0,t.prop)("re")));return(0,t.compose)((0,t.findLastIndex)((0,t.equals)(!0)),(0,t.map)(o),(0,t.map)((e=>{return{str:e,re:(t=e,new RegExp(t))};var t})),(0,t.map)(s))(r)}static checkIfValueShouldMapToParam(e,s,o){let n=(0,t.compose)((0,t.map)(t.last),(0,t.map)((0,t.filter)((0,t.is)(String))),t.toPairs)(e),i=r.findIndexOfMatchedStringOrRegex(s,n),a=s;if(i>=0){let r=n[i],s=(0,t.invert)(e),o=(0,t.compose)(t.head,(0,t.defaultTo)([]),(0,t.prop)(r))(s);!0===/^([-\$\w]*)$/.test(o)&&!0===(0,t.is)(String,o)&&(a=o)}return a}static createArrFromSlashStr(e){return e.replace(/^([/])?(.*)$/,"$2").split("/")}static convertSlashRouteStrToParamsObj(e,r,s){const o=r;let n=this.createArrFromSlashStr(r),i=[],a=[],c=e;(0,t.reduce)(((e,r)=>{let o=this.checkIfValueShouldMapToParam(c,r,s);c=this.checkIfParamValueMatchesRegex(r,c);const n=(0,t.either)(t.isEmpty,t.isNil);void 0!==c&&(e=>e!==(0,t.last)(i))(c.routeName)&&!1===n(o)&&(i.push(c.routeName),a.push(o));let l=[r,"routePath"],d=(0,t.path)(l,c),h=(0,t.path)(["routePath"],c);void 0!==d?c=d:void 0!==h&&(c=h)}),0,n);let l=(0,t.zipObj)(i,a);const d=this.getLastArrVal(i);return{paths:i,pathInnermost:d,routeData:l,routeValue:o}}static getLastArrVal(e){return r=e,void 0!==(0,t.last)(r)?(0,t.last)(r):"";var r}static createDefaultParamFromEmptyStr(e,t){let r={};return r[e.routeName]=this.checkIfValueShouldMapToParam(e,t),r}static convertQueryStrToParams(e,r,s){const o=r;let n=r.replace(/^([?])?(.*)$/,"$2"),i=(0,t.compose)((0,t.map)((0,t.split)("=")),(0,t.split)("&"))(n),a=(0,t.fromPairs)(i),c=(0,t.map)(t.head,i);return!0===(0,t.isEmpty)(r)&&(a=this.createDefaultParamFromEmptyStr(e,r,s),c=(0,t.keys)(a)),{paths:c,pathInnermost:this.getLastArrVal(c),routeData:a,routeValue:o}}static convertRouteToParams(e,r,s){if(void 0===r)return{};const o=void 0!==s?s:r.type,n=(0,t.defaultTo)({},(0,t.prop)("regexTokens",r));let i=r.routes.routePath;return"query"===o?this.convertQueryStrToParams(i,e):(e=e.replace(/\/$|$/,"/"),this.convertSlashRouteStrToParamsObj(i,e,n))}}class s{constructor(){this.createPopStateStream=s.createPopStateStream.bind(this)}static createPopStateStream(t){(0,e.fromEventPattern)((function(e){window.onpopstate=e}),(function(){window.onpopstate=function(){}})).subscribe(t)}static getLastArrVal(e){return r=e,void 0!==(0,t.last)(r)?(0,t.last)(r):"";var r}static compareRouteKeywords(e={},r){const s=(e,r)=>void 0!==r?(0,t.pick)(r,e):e;let o=s(e,r);return{pickValues:s,compare:(e={},r)=>{let n=s(e,r);const i=e=>(0,t.compose)(t.keys,(0,t.filter)((0,t.propEq)(e,!0))),a=(0,t.compose)((0,t.map)((e=>{let r=(0,t.prop)(e,o),s=(0,t.prop)(e,n),i=(0,t.equals)(r,s),a=void 0!==r,c=void 0!==s,l=!i,d=!1===a&&!0===c,h=!0===a&&!1===c,p={};return p[e]={same:i,changed:l,added:d,removed:h,previousExists:a,nextExists:c},p})),t.uniq,(0,t.chain)(t.keys))([o,n]);let c=(0,t.chain)(i("changed"),a),l=(0,t.chain)(i("added"),a),d=(0,t.chain)(i("removed"),a);return o=n,{pathsAdded:l,pathsRemoved:d,pathsChanged:c}},getComparer:()=>o}}static getRouteArrData(e,r){let o=(0,t.filter)((0,t.includes)(t.__,e),r);return{paths:o,pathInnermost:s.getLastArrVal(o)}}static flattenConfigObject(e){const r=e=>(0,t.chain)((([e,s])=>"[object Object]"===Object.prototype.toString.call(s)?(0,t.map)((([t,r])=>[`${e}.${t}`,r]),r(s)):[[e,s]]),(0,t.toPairs)(e));return(0,t.values)((0,t.fromPairs)(r(e)))}static addRouteDatasets(e){const{type:s,isHash:o}=e,n=t=>("query"===s?"":!0===o?"#":"/")+r.convertParamsToRoute(t,e).replace(/^(.*\/)([\w\-]*\/?)(.*)$/gm,"$1$2"),i=/^([A-Za-z0-9_\-])+$/m,a=(e=[],r,s={})=>{let{routeName:o}=r;return(0,t.toPairs)(r).reduce(((r,c)=>{const[l,d]=c,h=(0,t.is)(Object,d),p=e=>(0,t.test)(i,e)?(e=>String(e).replace(/([-_])/g," ").toUpperCase())(e):l;if("routeName"===l||"404"===l)return r;o=o||(0,t.prop)("routeName",d);let u=(0,t.clone)(s);if(u[o]=String(l).replace(/([^A-Za-z0-9-_])/g,""),!0===h){if(1===(0,t.keys)(u).length){const e=(0,t.path)(["routePath","routeName"],d);if(e){const o=(0,t.clone)(u);o[e]="",o.navLevel=(0,t.keys)(s).length,o.title=p(l),o.href=n(o),r.push(o)}}u=a(e,d,u)}else u.title=p(l),u.href=n(u);return u.navLevel=(0,t.keys)(s).length,r.push(u),r}),[])};let c=a([],e.routes);const l=(0,t.flatten)(c);return{routeDatasetsArr:l,routeNamesArr:(e=>{const r=(0,t.reject)((0,t.includes)(t.__,["title","href","navLevel"]));return(0,t.compose)(t.uniq,r,t.flatten,(0,t.map)(t.keys))(e)})(l)}}static conformRouteObject(e={},r=!1){const o=(0,t.path)(["channels","ROUTE"],e);let{add404s:n}=void 0!==o?o:e;n=n||r;const i=e=>{let r=e[1];const s=(0,t.is)(Array,r);return""===r?e[1]="^$":s&&(e[1]=r.join("|")),e},a=(0,t.compose)(t.fromPairs,(0,t.map)((e=>{let[r,s]=e;const o=n?{404:".+"}:{},c=(0,t.is)(Object,s),l=(0,t.is)(Array,s),d="routePath"===r;return!0===c&&!1===l&&(e[1]=a(e[1]),d&&(e[1]=(0,t.compose)((0,t.mergeDeepRight)(o),t.fromPairs,(0,t.map)(i),t.toPairs)(e[1]))),e})),t.toPairs);if(void 0!==o){e.channels.ROUTE=a(e.channels.ROUTE);const r=s.addRouteDatasets(e.channels.ROUTE);return e.channels.ROUTE=(0,t.mergeRight)(e.channels.ROUTE,r),e}return a(e)}static getLocationData(){return(0,t.pickAll)(["href","origin","protocol","host","hostname","port","pathname","search","hash"],window.location)}}class o{constructor(e=window.scrollX,t=window.scrollY){this.scrollX=e,this.scrollY=t,this.scrollLocked=!1,this.scrollElement=void 0,this.defaultScrollState=o.getDefaultScrollState()}static getDefaultOverflow(){return window.getComputedStyle(document.body).overflow}static getDefaultPosition(){return window.getComputedStyle(document.body).position}static getDefaultTop(){return window.getComputedStyle(document.body).top}static getDefaultBodyTop(){return window.getComputedStyle(document.body).top}static getDefaultScrollState(){return{position:o.getDefaultPosition(),overflow:o.getDefaultOverflow(),top:o.getDefaultTop(),x:window.scrollX,y:window.scrollY}}disableBodyScroll(){this.defaultScrollState=o.getDefaultScrollState();const{y:e}=this.defaultScrollState,t=-1*e+"px";document.body.style.overflow="hidden",document.body.style.position="fixed",document.body.style.top=t}enableBodyScroll(){const{position:e,overflow:t,top:r,x:s,y:o}=this.defaultScrollState;document.body.style.overflow=t,document.body.style.position=e,document.body.style.top=r,window.scrollTo(s,o)}}const a=Object.create({});a.foo=()=>console.log("used for testing purposes.");const c=(0,t.compose)(t.not,(0,t.is)(Array)),l=(0,t.compose)(t.not,t.isEmpty),d=((0,t.allPass)([(0,t.is)(String),l]),(0,t.allPass)([(0,t.is)(Array),l]),(0,t.compose)((0,t.allPass)([c,(0,t.is)(Object)])));function h(e){return e&&"object"==typeof e&&"[object RegExp]"!==Object.prototype.toString.call(e)&&"[object Date]"!==Object.prototype.toString.call(e)}function p(e,t){return t&&!0===t.clone&&h(e)?E((r=e,Array.isArray(r)?[]:{}),e,t):e;var r}function u(e,t,r){let s=e.slice();return t.forEach((function(t,o){void 0===s[o]?s[o]=p(t,r):h(t)?s[o]=E(e[o],t,r):-1===e.indexOf(t)&&s.push(p(t,r))})),s}function E(e,t,r){let s=Array.isArray(t),o=(r||{arrayMerge:u}).arrayMerge||u;return s?Array.isArray(e)?o(e,t,r):p(t,r):function(e,t,r){let s={};return h(e)&&Object.keys(e).forEach((function(t){s[t]=p(e[t],r)})),Object.keys(t).forEach((function(o){h(t[o])&&e[o]?s[o]=E(e[o],t[o],r):s[o]=p(t[o],r)})),s}(e,t,r)}let m,N,g;(0,t.compose)((0,t.allPass)([l,c,(0,t.is)(Object)])),E.all=function(e,t){if(!Array.isArray(e)||e.length<2)throw new Error("first argument should be an array with at least two elements");return e.reduce((function(e,r){return E(e,r,t)}))};let T=!1,_=!0;const A=new o,S=new class{constructor(){}addMethod(e,t,r=!1){if(!0===a.hasOwnProperty(e)){const t=`Spyne Warning: the method name, ${e}, already exists.`;if(r)return t;console.warn(t)}else a[e]=t}addMethods(e={},r=!1){let s;return!1===d(e)?(s=`Spyne Warning: the pluginMethods property, ${JSON.stringify(e)} needs to be an object.`,r?s:void console.warn(s)):(0,t.keys)(e).map((o=>{const n=(0,t.prop)(o,e);if("function"==typeof n)this.addMethod(o,n,r);else{if(s=`the value for ${o} is not a valid function.`,r)return s;console.warn(s)}})).join(",")}checkIfMethodExists(e){}test1(){}get pluginMethodsObj(){return a}};let C=new class{constructor(){}initialize(e={},t={},r){N=r;const o=s.conformRouteObject(t);return m=E(e,o),_=void 0!==m.debug?m.debug:_,this.getChannelActions=N.getChannelActions.bind(N),this.listRegisteredChannels=N.listRegisteredChannels.bind(N),T=!0,this.setChannelsMap(),m}conformRouteConfig(e=!1){m=s.conformRouteObject(m,e)}setChannelsMap(){const e=N.getStream.bind(N),t=N.testStream.bind(N),r=N.getProxySubject.bind(N);g={getStream:e,testStream:t,getProxySubject:r}}setProp(e,t){m.tmp[e]=t}getProp(e){return(0,t.path)(["tmp",e],m)}get channelsMap(){return g}get initialized(){return T}get scrollLock(){return A}setChannelConfig(e,t){return m.channels[e]=t,m.channels[e]}getChannelConfig(e,t=m){if("CHANNEL_ROUTE"===e?e="ROUTE":"CHANNEL_WINDOW"===e&&(e="WINDOW"),void 0===t||void 0===m.channels)return void console.warn("Spyne warning: Spyne config object is empty!");const r=m.channels[e];if(void 0!==r)return r;console.warn(`Spyne warning: Spyne configuration for channel, ${e} is empty!`)}get config(){return m}static listChannels(){return Array.from(N.map.keys())}registerChannel(){}addPluginConfig(e,t={}){void 0===m.plugins&&(m.plugins={}),this.addPluginMethods(t.pluginMethods),m.plugins[e]=t}getPluginsMethodObj(e){return e&&this.addPluginMethods(e),S.pluginMethodsObj}addPluginMethods(e){e&&S.addMethods(e)}getPluginConfigByPluginName(e){return m.plugins[e]}tempGetChannelsInstance(){}tempGetConfig(){}get debug(){return _}};const f=n(318),y=n(318);let b=()=>({includes:()=>!0===C.initialized?C.listRegisteredChannels():["CHANNEL_ROUTE","CHANNEL_UI","CHANNEL_WINDOW","DISPATCHER"]}),v=["LOAD","RENDER","MOUNT","UNMOUNT","DISPOSE","GARBAGE_COLLECT","UPDATE"],O=["parent","self","child","children","view"],I=["Observable","BehaviorSubject","Subject","Observer","Subscriber","FromEventObservable"],D=["subscribe","combineLatest"],L=[],R=[],w=null,P=null,H=null,M=null,V=null,W=null,$=null;if(void 0!==t.compose&&void 0!==f){L=[{error:`need to match a valid name within ${I}`,predicate:e=>b().includes(e.name)},{error:"param 'observable' must contain a valid Observable",predicate:e=>void 0!==e.observable.subscribe},{error:"param action must be a registered action",predicate:e=>D.includes(e.action)}],R=[{error:"needs vsid number in srcElement",predicate:(0,t.compose)((0,t.is)(String),(0,t.path)(["data","srcElement","vsid"]))},{error:"needs a id in srcElement",predicate:(0,t.compose)((0,t.is)(String),(0,t.path)(["data","srcElement","id"]))}],w=function(){return[].concat(L).concat(R)};let e=[{error:`need to match a valid name within ${I}`,predicate:e=>b().includes(e.name)},{error:`needs one of the following step strings: ${v}`,predicate:e=>v.includes(e.STEP)},{error:`type needs to one of the following: ${O}`,predicate:e=>O.includes(e.type)},{error:"viewId needs to be added ",predicate:e=>void 0!==e.viewId}];H=function(){return[].concat(e)},M=function(){return[{error:"DISPOSE STEP requires a disposeItem param in the data object",predicate:e=>"DISPOSE"===e.STEP&&void 0!==e.data.disposeItems}].concat(e)},V=function(){return[{error:"UPDATE STEP requires a data object ",predicate:e=>"UPDATE"===e.STEP&&void 0!==e.data}].concat(e)},P=function(){return e.concat(L).concat(R)},W=function(){return[].concat(L).concat(R)},$=function(){let e=[{error:"param 'name' must be of a registered type",predicate:e=>b().includes(e.name)},{error:"param 'observable' must contain a valid Observable",predicate:e=>I.includes((0,e.observable)().constructor.name)},{error:"param action must be a registered action",predicate:e=>D.includes(e.action)}];return{streams:[{init:{name:"DISPATCHER",observable:()=>new y,action:"subscribe"},structure:{type:String,observable:f||y,action:String},validations:e},{init:{name:"UBU",observable:()=>new y,action:"subscribe"},structure:{type:String,observable:f||y,action:String},validations:e}]}}}class F{constructor(e,t,r,s,o,n){let i=e;n&&console.time(n);let a={channelName:e,action:t,srcElement:s,event:o};const c=F.deepFreeze(r);if(a.payload=c,!0===C.debug){if(r.hasOwnProperty("payload")){let e=JSON.stringify(r);console.warn(`Spyne Warning: the following payload contains a nested payload property which may create conflicts: Action: ${t}, ${e}`)}const e=C.getChannelActions(i);F.validateAction(t,i,e)}const l={$dir:{get:()=>a._dir,set:e=>a._dir=e}};return"CHANNEL_ROUTE"===i&&(l.location={get:()=>F.getLocationData()}),a._dir=void 0,Object.defineProperties(a,l),n&&console.timeEnd(n),a}static validateAction(e,r,s){let o=(0,t.includes)(e,s);return!1===o&&!0===C.initialized&&console.warn(`warning: Action: '${e}' is not registered within the ${r} channel!`),o}static getLocationData(){return(0,t.pickAll)(["href","origin","protocol","host","hostname","port","pathname","search","hash"],window.location)}static getStreamItem(){}static deepClone(e){const r=(0,t.is)(Array),s=(0,t.is)(Object);var o;return!1===r(o=e)&&!0===s(o)?(0,t.compose)(t.fromPairs,t.toPairs,t.clone)(e):(0,t.clone)(e)}static deepFreeze(e){const r=(0,t.compose)((0,t.lte)(0),(0,t.defaultTo)(-1),(0,t.prop)("nodeType"));try{Object.freeze(e),Object.getOwnPropertyNames(e).forEach((function(t){!e.hasOwnProperty(t)||!1!==r(e[t])||null===e[t]||"object"!=typeof e[t]&&"function"!=typeof e[t]||Object.isFrozen(e[t])||F.deepFreeze(e[t])}))}catch(t){return e}return e}static getMouseEventKeys(){return["altKey","bubbles","cancelBubble","cancelable","clientX","clientY","composed","ctrlKey","currentTarget","defaultPrevented","detail","eventPhase","fromElement","isTrusted","layerX","layerY","metaKey","movementX","movementY","offsetX","offsetY","pageX","pageY","path","relatedTarget","returnValue","screenX","screenY","shiftKey","sourceCapabilities","srcElement","target","timeStamp","toElement","type","view","which","x","y"]}}function U(){return{createpropsMap:function(){let e=new WeakMap,t={vsid:this.props.vsid};return e.set(t,this.props),{key:t,weakMap:e}},gc:function(){for(let e in this)delete this[e]},createId:function(){return Math.random().toString(36).replace(/\d/gm,"").substring(1,8)},setTraceFunc:function(e){return!0===e?console.log:()=>{}}}}const x=e=>{if(void 0!==e.constructor.name)return e.constructor.name;let r=e.toString();return(0,t.defaultTo)(String(r).substr(0,12),(0,t.match)(/^(function\s)(\w+)(\(.*)$/,r)[2])},j=e=>{const r=(0,t.compose)((0,t.complement)(t.isEmpty),t.head,t.values),s=(0,t.compose)((0,t.complement)(t.isNil),t.head,t.values);return(0,t.allPass)([r,s])(e)},k=(e,r=[])=>{r=(0,t.concat)(["length","name","prototype","constructor"],r);let s=(0,t.compose)((0,t.without)(r),t.uniq),o=s(Object.getOwnPropertyNames(e.constructor.prototype)),n=s((i=e.constructor,Object.getOwnPropertyNames(i)));var i;return{methods:o,staticMethods:n,allMethods:(0,t.concat)(o,n)}};class G{constructor(e,r){this.template=this.formatTemplate(e),(()=>{!0===(0,t.is)(Array,r)&&(r={spyneData:r},this.template=this.template.replace("{{/}}","{{/spyneData}}"),this.template=this.template.replace("{{#}}","{{#spyneData}}"))})(),this.templateData=r;let s=G.getStringArray(this.template),o=this.template.match(G.findTmplLoopsRE());o=null===o?[]:o;const n=G.parseTmplLoopsRE(),i=this.parseTheTmplLoop.bind(this),a=(0,t.includes)(t.__,o),c=(0,t.ifElse)(a,((e,t)=>e.replace(n,i)),this.addParams.bind(this));this.finalArr=s.map(c)}static getStringArray(e){let r=e.split(G.findTmplLoopsRE());const s=/^([\\n\s\W]+)$/;return(0,t.reject)((e=>e.match(s)),r)}static findTmplLoopsRE(){return/({{#\w+}}[\w\n\s\W]+?{{\/\w+}})/gm}static parseTmplLoopsRE(){return/({{#(\w+)}})([\w\n\s\W]+?)({{\/\2}})/gm}static swapParamsForTagsRE(){return/({{)(.*?)(}})/gm}removeThis(){this.finalArr=void 0,this.templateData=void 0,this.template=void 0}renderDocFrag(){const e=this.finalArr.join(""),t=/^([^>]*?)(<){1}(\b)(thead|col|colgroup|tbody|td|tfoot|tr|th)(\b)([^\0]*)$/.test(e)?e:document.createRange().createContextualFragment(e);return window.setTimeout(this.removeThis(),2),t}renderToString(){const e=this.finalArr.join("");return window.setTimeout(this.removeThis(),2),e}getTemplateString(){return this.finalArr.join("")}formatTemplate(e){return"SCRIPT"===(0,t.prop)("nodeName",e)?e.innerHTML:e}getDataValFromPathStr(e,r){const s=String(e).split(".");return(0,t.path)(s,r)||""}addParams(e){const t=/(\.)/gm;return e.replace(G.swapParamsForTagsRE(),((e,r,s,o)=>!1===t.test(s)&&void 0!==this.templateData[s]?this.templateData[s]:this.getDataValFromPathStr(s,this.templateData)))}parseTheTmplLoop(e,r,s,o){const n=/(\.)/gm,i=o;let a=this.templateData[s];const c=(e,t)=>t.replace(G.swapParamsForTagsRE(),((t,r,s)=>!1===n.test(s)&&void 0!==e[s]?e[s]:this.getDataValFromPathStr(s,e)));return!0===(0,t.isNil)(a)||(0,t.isEmpty)(a)?"":(void 0===a.length&&(a=[a]),a.map((e=>"string"==typeof e?((e,t)=>t.replace(G.swapParamsForTagsRE(),e))(e,i):c(e,i))).join(""))}}class q{constructor(e={}){var r;e.tagName=("div",r=e.tagName,(0,t.defaultTo)("div")(r)),e.attributes=void 0!==e.attributes?e.attributes:this.getDomAttributes(e),e.attrs=this.updateAttrs(e.attributes),e.fragment=document.createDocumentFragment(),this.props=e,this.addMixins()}setProp(e,t){this.props[e]=t}getProp(e){return this.props[e]}get el(){return this.props.el}setElAttrs(e,r){return this.getProp("attrs").forEach(((r,s)=>{"dataset"===s?(0,t.forEachObjIndexed)(((t,r)=>{e.dataset[r]=t}),r):e.setAttribute(s,r)})),e}updateAttrs(e,r){let s=void 0!==r?r:new Map;return(0,t.mapObjIndexed)(((e,t)=>s.set(t,e)),e),s}addTemplate(e){let r=this.getProp("template");return void 0!==r?(r=>{let s=this.getProp("data");s=(0,t.is)(Object,s)?s:{};let o=new G(r,s).renderDocFrag();return(0,t.is)(String,o)?e.innerHTML=o:e.appendChild(o),e})(r):e}createElement(e="div"){return document.createElement(e)}addContent(e){let r=this.getProp("data");if(!0===(0,t.is)(String,r)){let t=document.createTextNode(r);e.appendChild(t)}return e}execute(){let e=(0,t.pipe)(this.createElement.bind(this),this.setElAttrs.bind(this),this.addTemplate.bind(this),this.addContent.bind(this))(this.getProp("tagName"));this.props.el=e}render(){return this.execute(),this.props.template=void 0,this.props.data=void 0,this.props.attributes=void 0,this.getProp("el")}renderToHTMLString(){return this.execute(),this.props.template=void 0,this.props.data=void 0,this.props.attributes=void 0,this.getProp("el").outerHTML}returnIfDefined(e,t){if(void 0!==t){let r=void 0===t;e[t]=!1===r?t:E(e[t],t)}}updateprops(e){return this.returnIfDefined(this.props,e),this}updatepropsAndRun(e){return this.updateprops(e),this.execute(),this.getProp("fragment")}unmount(){void 0!==this.props&&(this.getProp("el").remove(),this.props=void 0,this.gc())}updateTag(e="div"){this.updateprops(e)}updateAttributes(e={}){this.updateprops(e)}updateTemplate(e){this.updateprops(e)}updateData(e={}){this.updateprops(e)}addTagAndRender(e="div"){this.updatepropsAndRun(e)}addAttrsibutesAndRender(e={}){this.updatepropsAndRun(e)}addTemplateAndRender(e){this.updatepropsAndRun(e)}addDataAndRender(e={}){this.updatepropsAndRun(e)}addMixins(){let e=U();this.gc=e.gc.bind(this)}getDomAttributes(e){return(0,t.pick)(this.attributesArray,e)}get attributesArray(){return["accept","accept-charset","accesskey","action","align","allow","alt","async","autocapitalize","autocomplete","autofocus","autoplay","bgcolor","border","buffered","challenge","charset","checked","cite","class","code","codebase","color","cols","colspan","content","contenteditable","contextmenu","controls","coords","crossorigin","csp","dataset","datetime","decoding","default","defer","dir","dirname","disabled","download","draggable","dropzone","enctype","for","form","formaction","headers","height","hidden","high","href","hreflang","http-equiv","icon","id","importance","integrity","ismap","itemprop","keytype","kind","label","lang","language","lazyload","list","loop","low","manifest","max","maxlength","minlength","media","method","min","multiple","muted","name","novalidate","open","optimum","pattern","ping","placeholder","poster","preload","radiogroup","readonly","referrerpolicy","rel","required","reversed","rows","rowspan","sandbox","scope","scoped","selected","shape","size","sizes","slot","span","spellcheck","src","srcdoc","srclang","srcset","start","step","style","summary","tabindex","target","title","translate","type","usemap","value","width","wrap"]}}let Y=(e=!1,t=1,r="ease",s=!1)=>`${!0===s?"opacity:0;":""}transition: opacity ${t}s ${r}; opacity: ${!0===e?1:0};`;var B=n(443);class z{constructor(e){this.props.observableStreams=z.createDirectionalObservables()}static createDirectionalFiltersObject(){const e="internal",t="parent",r="child";return{P:[t],C:[r],PCI:[t,e,r],CI:[r,e],PI:[t,e],PC:[t,r]}}static addDefaultDir(e){return(0,t.flip)(t.mergeRight)({$dir:["internal"]},(0,t.clone)(e))}static addDownInternalDir(e,r=["internal","down"]){return(0,t.flip)(t.mergeRight)((0,t.clone)(e),{$dir:r})}static addChildAndInternalDir(e,r=["child","down"]){return(0,t.flip)(t.mergeRight)((0,t.clone)(e),{$dir:r})}static mapToDefaultDir(e){return this.addDefaultDir(e)}static createDirectionalObservables(r=new e.Subject,s,o){void 0!==s&&void 0!==o&&(r.viewName=s,r.vsid=o);const n=e=>(0,t.propSatisfies)((t=>t.includes(e)),"$dir"),i=n("parent"),a=n("child"),c=n("internal"),l=e=>(0,t.mergeRight)({from$:e}),d=l("child"),h=l("internal"),p=l("parent"),u=r.pipe((0,B.filter)((e=>void 0!==e&&void 0!==e.action))),E=r.pipe((0,B.filter)(c),(0,B.map)(h)),m=r.pipe((0,B.filter)(i),(0,B.map)(d)),N=r.pipe((0,B.filter)(a),(0,B.map)(p)),g={parent:m,internal:E,child:N};return{raw$:u,toInternal$:E,toParent$:m,toChild$:N,completeAll:()=>{(0,t.forEach)((e=>{e.complete(),e.isStopped=!0}),[u,E,m,N])},completeStream:(e=[])=>{void 0!==e&&e.length>=1&&e.forEach((e=>{var t;void 0!==g[e]&&((t=g[e]).complete(),t.isStopped=!0)}))}}}}class K{constructor(t,r={},s="",o="theName"){this.addMixins(),this._state="INIT",this.vsid=s,this.vsName=o,this.defaults={debug:!1,extendedHashMethods:{}},this.options=E(this.defaults,r),this.addActionListeners().forEach((e=>{let[t,r]=e;this.options.extendedHashMethods[t]=e=>this[r](e)})),this.options.hashMethods=this.setHashMethods(this.options.extendedHashMethods),this.sink$=t,this.sink$.subscribe(this.onObsSinkSubscribe.bind(this)),this.$dirs=z.createDirectionalFiltersObject(),this.addDefaultDir=z.addDefaultDir,this.sourceStreams=z.createDirectionalObservables(new e.Subject,this.vsName,this.vsid),this._source$=this.sourceStreams.toInternal$}addActionListeners(){return[]}setHashMethods(e={}){return E({VS_DETRITUS_COLLECT:e=>this.onGarbageCollect(e),READY_FOR_VS_DETRITUS_COLLECT:e=>this.onReadyForGC(e),EXTIRPATE:e=>this.onDispose(e),VS_SPAWN:e=>this.onRender(e),VS_SPAWN_AND_ATTACH_TO_PARENT:e=>this.onRenderAndAttachToParent(e),VS_SPAWN_AND_ATTACH_TO_DOM:e=>this.onRenderAndAttachToDom(e),ATTACH_CHILD_TO_SELF:e=>this.onAttachChildToSelf(e)},e)}createDomItem(){this.props=void 0!==this.props?this.props:{};let e=(0,t.filter)((e=>void 0!==e),(0,t.pick)(["id","className"],this.props)),{tagName:r,data:s,template:o}=this.props;return new q(r,e,s,o)}onDisposeCompleted(e){}animateInTween(e,t){!function(e,t){let r=1*window.getComputedStyle(e).opacity,s=Y(!0,t,"ease",1===r);e.style.cssText+=s}(e,t)}animateOutTween(e,t,r){!function(e,t,r){let s=Y(!1,t,"ease");e.style.cssText+=s,e.addEventListener("transitionend",r,!1)}(e,t,r)}setAnimateIn(e){if(!0===e.animateIn){let t=void 0!==e.el?e.el:this.domItem.el;this.animateInTween(t,e.animateInTime)}}disposeMethod(t){let r=void 0!==t.el.el?t.el.el:t.el;const s={action:"READY_FOR_VS_DETRITUS_COLLECT",$dir:this.$dirs.PI,el:r};let o=(0,e.bindCallback)(((e,t)=>{this.animateOutTween(r,e.animateOutTime,t)})),n=e=>{this._source$.next(s)};return(!0===t.animateOut?e=>(o(e).subscribe(n),{action:"EXTIRPATING",$dir:this.$dirs.CI}):()=>({action:"EXTIRPATE_AND_READY_FOR_VS_DETRITUS_COLLECT",$dir:this.$dirs.CI}))(t)}onDispose(e){return this.disposeMethod(e)}removeStream(){void 0!==this.sourceStreams&&this.sourceStreams.completeStream(["internal","child"])}onReadyForGC(e){this.removeStream()}onGarbageCollect(e){void 0!==this.domItem&&this.domItem.unmount(),void 0!==this.sourceStreams&&this.sourceStreams.completeStream(["parent"])}getSourceStream(){return this._source$}combineDomItems(e){let r=(0,t.isNil)(e.query)?e.node:e.query;("appendChild"===e.attachType?(e,t)=>e.appendChild(t):(e,t)=>e.insertBefore(t,e.firstChild))(r,this.domItem.render()),this.setAnimateIn(e)}onAttachChildToSelf(e){let t=e.childRenderData;return this.combineDomItems(t),{action:"CHILD_ATTACHED",$dir:this.$dirs.PI}}onRenderAndAttachToParent(e){return this.onRender(e),this.combineDomItems(e),{action:"VS_SPAWNED_AND_ATTACHED_TO_PARENT",el:this.domItem.el,$dir:this.$dirs.PI}}renderDomItem(e){let t,r,s,o;return[t,r,s,o]=e,this.domItem=new q({tagName:t,attributes:r,data:s,template:o}),this.domItem}onRender(e){return{action:"VS_SPAWNED",el:(e=>this.renderDomItem(e))((0,t.props)(["tagName","domAttributes","data","template"],e)),$dir:this.$dirs.I}}extendedMethods(e){}onRenderAndAttachToDom(e){return e.attachData.el=(e=>this.renderDomItem(e))((0,t.props)(["tagName","domAttributes","data","template"],e)),this.combineDomItems(e.attachData),{action:"VS_SPAWNED_AND_ATTACHED_TO_DOM",el:e.attachData.el.el,$dir:this.$dirs.CI}}onObsSinkSubscribe(e){let r=e.action,s=(0,t.defaultTo)((e=>this.extendedMethods(e)))(this.options.hashMethods[r])(e);void 0!==s&&(e=>{this._source$.next(e)})(Object.freeze(s))}addMixins(){}}class Q{constructor(e,t){this.context=e,this.enhancersMap=new Map,this.enhancersArr=t,this.initMap(),this.addAllEnhancerMethods()}initMap(){this.enhancersMap.set("ALL",[]);let e=k(this.context).allMethods;this.updateMap("LOCAL",e)}getEnhancersMap(){return this.enhancersMap}updateMap(e,r){let s=(0,t.concat)(this.enhancersMap.get("ALL"),r);this.enhancersMap.set(e,r),this.enhancersMap.set("ALL",s)}getMethodsArr(e){return this.enhancersMap.get(e)}createEnhancerMethodsObj(e){const r=e=>console.error(`Spyne Error: The following enhancer method, "${e}", already exists and cannot be added to the ${s.name} Enhancer!`);let s=new e(this.context),o=s.getEnhancerMethods(),n=(e=>{let s=(0,t.includes)(t.__,this.getMethodsArr("ALL")),o=(0,t.filter)(s,e);return o.forEach(r),o})(o.allMethods),i=(0,t.dropWhile)((0,t.includes)(t.__,n));return o=(0,t.map)(i,o),this.updateMap(s.name,o.allMethods),o.enhancer=s,o.name=s.name,o}addAllEnhancerMethods(){(0,t.forEach)((e=>{let t=this.createEnhancerMethodsObj(e);t.enhancer.bindParentViewStream(t,this.context)}),this.enhancersArr)}}function X(){setTimeout((()=>{(0,t.forEach)((e=>{}),this)}),1)}class J{constructor(e,t,r,s="subscribe",o=!1){const n={name:e,observable:t,data:r,action:s};this.sendToDirectorStream(n)}sendToDirectorStream(e){let t=C.channelsMap.getStream("DISPATCHER");const r=J.deepClone(e);t.next(r),e=void 0}static deepClone(e){const r=(0,t.is)(Array),s=(0,t.is)(Object);var o;return!1===r(o=e)&&!0===s(o)?(0,t.compose)(t.fromPairs,t.toPairs,t.clone)(e):(0,t.clone)(e)}static deepFreeze(e){const r=(0,t.compose)((0,t.lte)(0),(0,t.defaultTo)(-1),(0,t.prop)("nodeType"));try{Object.freeze(e),Object.getOwnPropertyNames(e).forEach((function(t){!e.hasOwnProperty(t)||!1!==r(e[t])||null===e[t]||"object"!=typeof e[t]&&"function"!=typeof e[t]||Object.isFrozen(e[t])||ChannelPayload.deepFreeze(e[t])}))}catch(t){return e}return e}static getMouseEventKeys(){return["altKey","bubbles","cancelBubble","cancelable","clientX","clientY","composed","ctrlKey","currentTarget","defaultPrevented","detail","eventPhase","fromElement","isTrusted","layerX","layerY","metaKey","movementX","movementY","offsetX","offsetY","pageX","pageY","path","relatedTarget","returnValue","screenX","screenY","shiftKey","sourceCapabilities","srcElement","target","timeStamp","toElement","type","view","which","x","y"]}addMixins(){this.gc=X}}class Z{constructor(e,t){this.addMixins(),this.props=e,this.broadcastFn=t,this.broadcaster(this.broadcastFn)}addDblClickEvt(r){return(0,e.fromEvent)(r,"dblclick").pipe((0,B.map)((e=>{let r=(0,t.clone)(e);return r.typeOverRide="dblclick",r})))}broadcast(r){let s,o={UI:this.sendUIPayload,ROUTE:this.sendRoutePayload},[n,i,a]=r,c=this.props.el.querySelectorAll(n);if(c.length<=0){let e=this.props.el;const t=t=>{t===e&&(c=[t])};(()=>{let r=(null!==e.parentElement?e.parentElement:document).querySelectorAll(n);r.forEach=Array.prototype.forEach,r.forEach(t)})()}let l=void 0!==a,d=!0===C.debug;!0==(void 0===c||c.length<=0)&&!0===d?console.warn(`Spyne Warning: The item ${n}, does not appear to exist in ${this.props.name} --\x3e vsid:${this.props.vsid}!`):(c.forEach=Array.prototype.forEach,c.forEach((r=>{let n="dblClick"!==i?(0,e.fromEvent)(r,i,{preventDefault:()=>!0}):this.addDblClickEvt(r);s=r.dataset.channel;let a={};a.payload=(e=>{let t={};for(let r in e)t[r]=e[r];return t})(r.dataset),a.payload=(0,t.omit)(["channel"],a.payload),a.channel=s,a.srcElement={},a.srcElement.id=this.props.id,a.srcElement.vsid=this.props.vsid,a.srcElement.isLocalEvent=l,a.srcElement.srcEvent=i,a.srcElement.el=r,(void 0!==s?o[s]:o.UI)(n,a)})))}broadcaster(e){e().forEach((e=>this.broadcast(e)))}addMixins(){let e=function(e,t){return new J("CHANNEL_ROUTE",e,t,"subscribe")},t=function(e,t){return new J("CHANNEL_UI",e,t,"subscribe")};this.sendUIPayload=t,this.sendRoutePayload=e}}const ee=n(205).map,te=(0,t.compose)(t.not,(0,t.is)(Array)),re=(0,t.compose)(t.not,t.isEmpty),se=(0,t.allPass)([(0,t.is)(String),re]),oe=(0,t.allPass)([(0,t.is)(Array),re]),ne=(0,t.compose)((0,t.allPass)([te,(0,t.is)(Object)])),ie=(0,t.compose)((0,t.allPass)([re,te,(0,t.is)(Object)]));class ae{constructor(e,r={},s,o){ne(e)&&(r=e,e=(0,t.prop)("selector",r),o=o||(0,t.prop)("testMode",r));const n=[s,(0,t.prop)("debugLabel",r)];s=(0,t.compose)((0,t.find)((0,t.is)(String)))(n);let i=(0,t.omit)(["debugLabel","label","selector","props","testMode","propFilters"],r);void 0!==r.props?i=(0,t.mergeAll)([r.props,i]):void 0!==r.propFilters&&(i=(0,t.mergeAll)([r.propFilters,i])),r.propFilters=i;let{propFilters:a}=r;const c=se(e)?ae.filterSelector([e],s):void 0,l=oe(e)?ae.filterSelector(e,s):void 0,d=ie(a)?ae.filterData(a,s):void 0;let h=(0,t.reject)(t.isNil,[c,l,d]);const p=(0,t.isEmpty)(h);return p&&(h=[(0,t.always)(!1)],!0===C.debug&&!0!==o&&console.warn(`Spyne Warning: The Channel Filter, with selector: ${e}, and propFilters:${a} appears to be empty!`)),!0===o?{selector:e,propFilters:a,debugLabel:s,filters:r,testMode:o,filtersAreEmpty:p}:(0,t.allPass)(h)}static filterData(e,r){const s=r;return(()=>{if((0,t.isEmpty)(e))return(0,t.always)(!1);e=ee(((e,r,s)=>{return!0===(0,t.is)(String,e)?(o=e,e=>e===o):e;var o}),e);let r=(0,t.where)(e);return(0,t.compose)(r,(r=>{if(void 0===s)return r;const o={};return(0,t.forEachObjIndexed)(((e,s)=>o[s]=e((0,t.prop)(s,r))),e),console.log(`%c CHANNEL PAYLOAD FILTER DEBUGGER ["${s}"] - values: `,"color:orange;",{propsBooleans:o,comparedObj:r}),r}),(0,t.defaultTo)({}),(e=>{const{payload:t,srcElement:r,event:s}=e||{};return Object.assign({},e,s,t)}))})()}static checkPayloadSelector(e,r,s){const{payload:o,srcElement:n,event:i}=s||{},a=[n,o,(0,t.prop)("srcElement",i),s].reduce(((e,r)=>{const s=(0,t.prop)("el",r);return ae.elIsDomElement(s)&&void 0===e&&(e=s),e}),void 0),c=e=>e.isEqualNode(a),l=e=>{let r=(0,t.flatten)(document.querySelectorAll(e));return ee(c,r)};if(void 0!==r){let s=(0,t.compose)(t.flatten,ee(l))(e);const o=e;console.log(`%c CHANNEL PAYLOAD FILTER DEBUGGER ["${r}"] - selectors: `,"color:orange;",{el:a,selectorsArr:o,nodeArrResultsDebugger:s})}if("object"!=typeof a)return!1;let d=(0,t.compose)(t.flatten,ee(l))(e);return!0!==(0,t.isEmpty)(d)&&(0,t.any)((0,t.equals)(!0),d)}static elIsDomElement(e){return(0,t.is)(String,e)&&(e=document.querySelector(e)),(0,t.compose)((0,t.lte)(0),(0,t.defaultTo)(-1),(0,t.prop)("nodeType"))(e)}static filterSelector(e,r){let s=(0,t.reject)(t.isEmpty,e);return(0,t.curry)(ae.checkPayloadSelector)(s,r)}}function ce(){return!0===C.debug}function le(e,r,s=!1){let o=he(e,r,s);return 1===o.length?(0,t.head)(o):o}function de(e,r,s){let o=document.querySelector(e);!1!==(0,t.compose)((0,t.lte)(0),(0,t.defaultTo)(-1),(0,t.prop)("nodeType"))(o)?void 0!==r&&null===o.querySelector(r)&&!0===ce()&&!0===s&&console.warn(`Spyne Warning: the selector, ${r} does not exist in this el, ${e}`):console.warn(`Spyne Warning: the el object is not a valid single element, ${o}`)}function he(e,t,r=!1){let s=void 0!==t?`${e} ${t}`:e;return!0===r&&de(e,t,r),(e=>{try{document.querySelectorAll(e)}catch(e){return[]}return document.querySelectorAll(e)})(s)}function pe(e,t,r){return he(t,r).forEach((t=>{t.style.cssText=e})),this}function ue(e,r){function s(t){return ue(e,t)}return de(e="string"==typeof e?e:function(e){let t=`${Math.random().toString(36).replace(/\d/gm,"").substring(1,8)}`;return void 0===e.dataset.vsid?e.dataset.vsid=t:t=e.dataset.vsid,`[data-vsid='${t}']`}(e),r,!1),s.map=t=>Array.from(he(e,r)).map(t),s.forEach=t=>Array.from(he(e,r)).map(t),s.getNodeListArray=()=>he(e,r),s.addClass=t=>(he(e,r).forEach((e=>e.classList.add(t))),this),s.removeClass=t=>(he(e,r).forEach((e=>{e.classList.remove(t)})),this),s.setClass=s=>(he(e,r).forEach((e=>{let r=(0,t.compose)((0,t.reject)(t.isEmpty),(0,t.split)(" "))(e.className),o=s.split(" ");r.forEach((t=>e.classList.remove(t))),o.forEach((t=>e.classList.add(t)))})),this),s.unmount=()=>{},s.toggleClass=(t,s)=>(he(e,r).forEach((e=>{(s=void 0!==s?s:!e.classList.contains(t))?e.classList.add(t):e.classList.remove(t)})),this),s.toggle=(e,t)=>(s.toggleClass(e,t),this),s.appendChild=e=>(0!==s.el.length?s.el.appendChild(e):console.warn(`Spyne Warning: The selector, ${r} does not appear to be valid!`),s.el),s.addAnimClass=t=>{window.setTimeout((()=>{he(e,r).forEach((e=>e.classList.add(t)))}),1)},s.setActiveItem=(s,o)=>{let n=he(e,r),i="string"==typeof o?le(e,o):o;var a;return!0===(a=i,(0,t.compose)((0,t.lte)(0),(0,t.defaultTo)(-1),(0,t.prop)("nodeType"))(a))?n.forEach((e=>e.isEqualNode(i)?e.classList.add(s):e.classList.remove(s))):!0===ce()&&console.warn(`Spyne Warning: The selector, ${o}, does not appear to be a valid item in setActiveItem: ${s}`),this},Object.defineProperty(s,"el",{get:()=>le(e,r,!0)}),Object.defineProperty(s,"els",{get:()=>he(e,r)}),Object.defineProperty(s,"len",{get:()=>he(e,r,!1).length}),Object.defineProperty(s,"exists",{get:()=>he(e,r,!1).length>=1}),Object.defineProperty(s,"exist",{get:()=>he(e,r,!1).length>=1}),Object.defineProperty(s,"nodeList",{get:()=>he(e,r)}),Object.defineProperty(s,"arr",{get:()=>{let t=le(e,r,!0);return void 0===t?[]:void 0===t.length?[t]:Array.from(t)}}),Object.defineProperty(s,"inline",{set:t=>pe(t,e,r)}),Object.defineProperty(s,"inlineCss",{set:t=>pe(t,e,r)}),s}const Ee=n(205).map;class me{constructor(r={}){this.vsnum=Math.random(),this.addMixins(),this.defaults=()=>{const e=this.createId(),t=r.id?r.id:e;return{vsid:e,id:t,tagName:"div",el:void 0,data:void 0,animateIn:!1,animateInTime:.5,animateOut:!1,animateOutTime:.5,sendLifecyleEvents:!1,hashId:`#${t}`,id$:`#${t}`,viewClass:K,extendedSourcesHashMethods:{},debug:!1,template:void 0,node:document.createDocumentFragment(),name:x(this)}},this._state={},this.$dirs=z.createDirectionalFiltersObject(),this.addDefaultDirection=z.addDefaultDir,this.addDownInternalDir=z.addDownInternalDir,this.props=E(this.defaults(),r),this.sendLifecycleMethod=!0===this.props.sendLifecyleEvents?this.sendLifecycleMethodActive.bind(this):this.sendLifecycleMethodInactive.bind(this);let s=this.attributesArray;this.props.domAttributes=(0,t.pick)(s,this.props),void 0!==this.props.traits&&this.addTraits(this.props.traits),this.loadEnhancers(),this.loadAllMethods(),this.props.action="LOADED",this.sink$=new e.Subject;const o=this.props.viewClass;this.view=new o(this.sink$,{},this.props.vsid,this.props.id),this.sourceStreams=this.view.sourceStreams,this._rawSource$=this.view.getSourceStream(),this._rawSource$.viewName=this.props.name,this.sendEventsDownStream=this.sendEventsDownStreamFn,this.initViewStream(),this.isDevMode=me.isDevMode(),this.props.addedChannels=[],this.checkIfElementAlreadyExists()}updatePropsToMatchEl(){const e=(0,t.compose)(t.toLower,(0,t.either)((0,t.prop)("tagName"),(0,t.always)("")));this.props.tagName=e(this.props.el)}checkIfElementAlreadyExists(){const e=(0,t.compose)((0,t.lte)(0),(0,t.defaultTo)(-1),(0,t.prop)("nodeType"));(0,t.propSatisfies)((0,t.allPass)([e=>document.body.contains(e),e]),"el")(this.props)&&(this.updatePropsToMatchEl(),this.postRender())}loadEnhancers(e=[]){let t=new Q(this,e);this.props.enhancersMap=t.getEnhancersMap(),t=void 0}loadAllMethods(){const e=(0,t.curry)(this.onChannelMethodCall.bind(this));this.addActionListeners().forEach((r=>{let[s,o,n]=r;(0,t.is)(String,n)&&(n=new ae({selector:n})),this.props.extendedSourcesHashMethods[s]=e(o,n)})),this.props.hashSourceMethods=this.setSourceHashMethods(this.props.extendedSourcesHashMethods)}addActionListeners(){return[]}onChannelMethodCall(e,r,s){if(void 0!==s.$dir&&s.$dir.includes("child")&&!0!==this.deleted){let e=E({},s);e.$dir=this.$dirs.C,this.sourceStreams.raw$.next(e)}let o=(0,t.defaultTo)((0,t.always)(!0),r);Math.floor(999999*Math.random()),!0===o(s)&&(t=>{void 0===this[e]?console.warn(`Spyne Warning: The method, ${e} does not appear to exist in ${this.constructor.name}!`):this[e](t)})(s=(0,t.omit)(["$dir"],s))}setSourceHashMethods(e={}){let t={EXTIRPATING:e=>this.checkParentDispose(e),EXTIRPATE:e=>this.disposeViewStream(e),VS_SPAWNED:e=>this.onVSRendered(e),VS_SPAWNED_AND_ATTACHED_TO_DOM:e=>this.onVSRendered(e),VS_SPAWNED_AND_ATTACHED_TO_PARENT:e=>this.onVSRendered(e),READY_FOR_VS_DETRITUS_COLLECT:e=>this.onReadyToGC(e),VS_NULLITY:()=>({})};return E.all([{},t,e])}initViewStream(){this._source$=this._rawSource$.pipe((0,B.map)((e=>this.onMapViewSource(e))),(0,B.takeWhile)(this.notGCSTATE)),this.initAutoMergeSourceStreams(),this.updateSourceSubscription(this._source$,!0)}notGCSTATE(e){return!e.action.includes("READY_FOR_VS_DETRITUS_COLLECT")}eqGCSTATE(e){return!e.action.includes("READY_FOR_VS_DETRITUS_COLLECT")}notCOMPLETED(e){return!e.action.includes("COMPLETED")}notGCCOMPLETE(e){return!e.action.includes("GC_COMPLETE")}testVal(e){console.log("TESTING VALL IS ",e)}addParentStream(e,t){this.parent$=e.pipe((0,B.filter)((e=>void 0!==e&&void 0!==e.action)),(0,B.map)((e=>{let t=E({},e);return"EXTIRPATE_AND_READY_FOR_VS_DETRITUS_COLLECT"===t.action&&(this.disposeViewStream(t),t.action="READY_FOR_VS_DETRITUS_COLLECT"),t}))),this.updateSourceSubscription(this.parent$,!1,"PARENT"),this.renderAndAttachToParent(t)}addChildStream(e){let t=e.pipe((0,B.filter)((e=>void 0!==e&&void 0!==e.action)),(0,B.tap)((e=>this.tracer("addChildStraem do ",e))),(0,B.map)((e=>e)),(0,B.finalize)((e=>this.onChildCompleted(t.source))));this.updateSourceSubscription(t,!0,"CHILD")}onChildDisposed(e){}onChildCompleted(e){let r=(e=>{let r=e=>{for(;void 0!==e.destination;)e=r(e.destination);return e};return(0,t.pick)(["id","vsid"],r(e))})(e);return this.tracer("onChildCompleted ",this.vsnum,e),this.onChildDisposed(r,e),r}initAutoMergeSourceStreams(){let t={next:this.onSubscribeToSourcesNext.bind(this),error:this.onSubscribeToSourcesError.bind(this),complete:this.onSubscribeToSourcesComplete.bind(this)},r=()=>{this.props.el$=void 0,this.uberSource$.complete(),this.autoSubscriber$.complete(),this.sink$.complete(),this.props=void 0,this.deleted=!0,this.tracer("completeAll",this.deleted,this.props)},s=()=>{o-=1,0===o&&r()},o=0;this.uberSource$=new e.Subject,this.autoMergeSubject$=this.uberSource$.pipe((0,B.mergeMap)((e=>{let t=e.observable.pipe((0,B.filter)((e=>void 0!==e&&void 0!==e.action)),(0,B.map)((e=>{let t=E({},e);return t.action=e.action,this.tracer("autoMergeSubject$",t),t})));return!1===e.autoClosesBool?t:(o+=1,t.pipe((0,B.finalize)(s)))}))),this.autoSubscriber$=this.autoMergeSubject$.pipe((0,B.filter)((e=>void 0!==e&&void 0!==e.action))).subscribe(t)}updateSourceSubscription(e,t=!1,r){let s={observable:e,autoClosesBool:t,rel:r};this.tracer("updateSourceSubscription ",this.vsnum,s),this.uberSource$.next(s)}onSubscribeToSourcesNext(e={}){let r=(0,t.defaultTo)((e=>this.sendExtendedStreams(e)));const s=void 0!==(o=this.props.hashSourceMethods)[n=e.action]?n:(0,t.compose)(t.head,(0,t.filter)((0,t.compose)((0,t.test)(t.__,n),(e=>new RegExp(e)))))((0,t.keys)(o));var o,n;r(this.props.hashSourceMethods[s])(e),this.tracer("onSubscribeToSourcesNext",{payload:e})}onSubscribeToSourcesError(e=""){console.log("ALL ERROR ",this.constructor.name,e)}onSubscribeToSourcesComplete(){this.tracer("onSubscribeToSourcesComplete","VS_DETRITUS_COLLECT"),this.openSpigot("VS_DETRITUS_COLLECT")}get source$(){return this._source$}sendExtendedStreams(e){this.tracer("sendExtendedStreams",e),this.openSpigot(e.action,e)}renderAndAttachToParent(e){this.openSpigot("VS_SPAWN_AND_ATTACH_TO_PARENT",e)}renderView(){this.openSpigot("VS_SPAWN")}renderViewAndAttachToDom(e,t,r){let s={node:e,type:t,attachType:r};this.openSpigot("VS_SPAWN_AND_ATTACH_TO_DOM",{attachData:s})}checkParentDispose(e){"parent"===e.from$&&this.disposeViewStream(e)}onBeforeDispose(){}setTimeout(e,r=0,s=!1){window.setTimeout(((...r)=>{if(void 0!==this&&void 0!==this.props){const o=!0===s?e.bind(this):e;(0,t.apply)(o,r)}}),r)}disposeViewStream(e){this.onBeforeDispose(),this.openSpigot("EXTIRPATE")}onChildDispose(e){}onParentDisposing(e){this.openSpigot("EXTIRPATE")}onReadyToGC(e){const t=void 0!==e.from$&&"internal"===e.from$;this.tracer("onReadyToGC",t,e)}openSpigot(e,r={}){if(void 0!==this.props){this.props.action=e;let s=(0,t.mergeRight)(this.props,r);this.sink$.next(Object.freeze(s))}}static isDevMode(){return C.debug}setAttachData(e,r){return{node:this.props.el,type:"ViewStreamObservable",attachType:e,query:(()=>{let e=this.props.el.querySelector(r);return!0===me.isDevMode()&&(0,t.is)(String,r)&&(0,t.isNil)(e)&&console.warn(`Spyne Warning: The appendView query in ${this.props.name}, '${r}', appears to not exist!`),e})()}}getParentEls(e,t){let r=e=>e.parentElement,s=0,o=e;for(;s<t;)o=r(o),s++;return o}setAttachParentData(e,t,r){t=""!==t?t:void 0;const s=this.getParentEls(this.props.el,r);return{node:s,type:"ViewStreamObservable",attachType:e,query:s.querySelector(t)}}onMapViewSource(e={}){return this.props=(0,t.mergeRight)(this.props,e),e}exchangeViewsWithChild(e,t){this.addChildStream(e.sourceStreams.toParent$),e.addParentStream(this.sourceStreams.toChild$,t)}appendToDom(e){void 0!==this.props.el&&console.warn(`Spyne Warning: The ViewStream, ${this.props.name}, has an element, ${this.props.el}, that is already rendered and does not need to be appendedToDom. This may create unsusual side effects!`),this.renderViewAndAttachToDom(e,"dom","appendChild")}prependToDom(e){void 0!==this.props.el&&console.warn(`Spyne Warning: The ViewStream, ${this.props.name}, has an element, ${this.props.el}, that is already rendered and does not need to be prependedToDom. This may create unsusual side effects!`),this.renderViewAndAttachToDom(e,"dom","prependChild")}appendView(e,t){this.exchangeViewsWithChild(e,this.setAttachData("appendChild",t))}appendViewToParentEl(e,t,r=1){this.exchangeViewsWithChild(e,this.setAttachParentData("appendChild",t,r))}prependViewToParentEl(e,t,r=1){this.exchangeViewsWithChild(e,this.setAttachParentData("prependChild",t,r))}prependView(e,t){this.exchangeViewsWithChild(e,this.setAttachData("prependChild",t))}appendToNull(){let e=document.getElementById("spyne-null-views");this.renderViewAndAttachToDom(e,"dom","appendChild")}onVSRendered(e){"internal"===e.from$&&this.postRender()}postRender(){if(this.beforeAfterRender(),this.afterRender(),this.onRendered(),requestAnimationFrame((()=>this.onAnimFrameAfterRendered())),!0===this.isDevMode){const e=this.broadcastEvents();!1===me.isValidNestedArr(e)&&console.warn(`Spyne Warning: The array returned from broadcastEvents in ${this.props.name}, '${JSON.stringify(e)}', does not appear to be properly formatted!`)}this.viewsStreamBroadcaster=new Z(this.props,this.broadcastEvents.bind(this)),this.afterBroadcastEvents()}addTraits(e){"Array"!==e.constructor.name&&(e=[e]),e.forEach((e=>{new e(this)})),!0===this.isDevMode&&this.addActionListeners()}afterBroadcastEvents(){if(!0===this.isDevMode){const e=e=>e[0],r=this.addActionListeners();let s=r.map(e);if(!1===me.isValidNestedArr(r))console.warn(`Spyne Warning: The array returned from addActionsListeners in ${this.props.name}, '${JSON.stringify(r)}', does not appear to be properly formatted!`);else{const e=e=>{const r=(0,t.defaultTo)("",e[1]);!1===(0,t.is)(Function,this[r])&&console.warn(`Spyne Warning: The method in addActionListeners nested Array, '${JSON.stringify(e)}', in ${this.props.name}, does not appear to exist!`)};(0,t.compose)((0,t.forEach)(e),(0,t.defaultTo)([]))(r)}const o=()=>{void 0!==(0,t.path)(["props","addedChannels"],this)&&me.checkIfActionsAreRegistered.bind(this)(this.props.addedChannels,s)};this.setTimeout(o,500)}}static checkIfActionsAreRegistered(e=[],r){if(r.length>0){const s=r=>{let s=new RegExp(r);if((0,t.findIndex)((0,t.test)(s),o)<0){let t=1===e.length?"from added channel":"from added channels";console.warn(`Spyne Warning: The action, ${r}, in ${this.props.name}, does not match any of the registered actions ${t}, ${e.join(", ")}`)}};let o=(e=>{let r=e.map((e=>C.getChannelActions(e)));return(0,t.flatten)(r)})(e);r.forEach(s)}}setDataVSID(){this.props.el.dataset.vsid=this.props.vsid}beforeAfterRender(){this.setDataVSID(),this.props.el$=ue(this.props.el)}downStream(){}onRendered(){}onAnimFrameAfterRendered(){}afterRender(){}static isValidNestedArr(e){const r=(0,t.equals)(!0),s=(0,t.all)(r),o=(0,t.is)(String),n=(0,t.compose)(s,Ee(o),(0,t.slice)(0,2),(0,t.defaultTo)([]));return(0,t.compose)(s,Ee(n),(0,t.defaultTo)([]))(e)}broadcastEvents(){return[]}getChannel(e){return(0,t.ifElse)((e=>b().includes(e)),(e=>C.channelsMap.getStream(e).observer.pipe((0,B.takeWhile)((e=>!0!==this.deleted)))),(e=>console.warn(`channel name ${e} is not within ${b}`)))(e)}addChannel(e,r=!1,s=!1,o=!1){const n=!0===s?this.$dirs.CI:this.$dirs.I,i=(0,t.path)(["srcElement","isLocalEvent"]),a=(0,t.path)(["srcElement","vsid"]),c=[(0,B.map)((e=>{let t=e;return t.$dir=n,t})),(0,B.filter)((e=>{let t=a(e);return!0!==i(e)||t===this.props.vsid}))];!0===r&&c.unshift((0,B.skip)(1));let l=this.getChannel(e).pipe(...c);this.updateSourceSubscription(l,!1),this.props.addedChannels.push(e)}checkIfChannelExists(e){let t=C.channelsMap.testStream(e);return!0!==t&&console.warn(`SPYNE WARNING: The ChannelPayload from ${this.props.name}, has been sent to a channel, ${e}, that has not been registered!`),t}sendInfoToChannel(r,s={},o){const n=s;let i=(0,t.defaultTo)("VIEWSTREAM_EVENT");const a=(0,t.compose)(i,(0,t.prop)(r));let c={payload:n,action:o=o||a({CHANNEL_ROUTE:"CHANNEL_ROUTE_CHANGE_EVENT"})};if(c.srcElement=(0,t.compose)((0,t.pick)(["id","vsid","class","tagName"]),(0,t.prop)("props"))(this),!0===this.checkIfChannelExists(r)){!1===/CHANNEL_LIFECYCLE/.test(o)&&Object.defineProperties(c,{payload:{get:()=>(0,t.clone)(s)}});let n=(0,e.of)(c);return new J(r,n,c)}}tracer(...e){this.sendLifecycleMethod(...e)}sendLifecycleMethodInactive(){}sendLifecycleMethodActive(e,r){let s="VS_DETRITUS_COLLECT"===r;!0===(0,t.where)({from$:(0,t.equals)("internal"),action:(0,t.equals)("VS_SPAWNED_AND_ATTACHED_TO_PARENT")},r)?this.sendInfoToChannel("CHANNEL_LIFECYCLE",{action:"CHANNEL_LIFECYCLE_RENDERED_EVENT"},"CHANNEL_LIFECYCLE_RENDERED_EVENT"):!0===s&&this.sendInfoToChannel("CHANNEL_LIFECYCLE",{action:"CHANNEL_LIFECYCLE_DISPOSED_EVENT"},"CHANNEL_LIFECYCLE_DISPOSED_EVENT")}createActionFilter(e,t){return new ae(e,t)}isLocalEvent(e){const r=(0,t.path)(["srcElement","el"],e),s=(0,t.path)(["props","el"],this);return me.elIsDomElement(s)&&me.elIsDomElement(r)&&s.contains(r)}static elIsDomElement(e){return(0,t.is)(String,e)&&(e=document.querySelector(e)),(0,t.compose)((0,t.lte)(0),(0,t.defaultTo)(-1),(0,t.prop)("nodeType"))(e)}get attributesArray(){return["accept","accept-charset","accesskey","action","align","allow","alt","aria-autocomplete","aria-checked","aria-disabled","aria-expanded","aria-haspopup","aria-hidden","aria-invalid","aria-label","aria-level","aria-multiline","aria-multiselectable","aria-orientation","aria-pressed","aria-readonly","aria-required","aria-selected","aria-sort","aria-valuemax","aria-valuemin","aria-valuenow","aria-valuetext","aria-atomic","aria-busy","aria-live","aria-relevant","aria-dropeffect","aria-grabbed","aria-activedescendant","aria-controls","aria-describedby","aria-flowto","aria-labelledby","aria-owns","aria-posinset","aria-setsize","async","autocapitalize","autocomplete","autofocus","autoplay","bgcolor","border","buffered","challenge","charset","checked","cite","class","code","codebase","color","cols","colspan","content","contenteditable","contextmenu","controls","coords","crossorigin","csp","dataset","datetime","decoding","default","defer","dir","dirname","disabled","download","draggable","dropzone","enctype","for","form","formaction","headers","height","hidden","high","href","hreflang","http-equiv","icon","id","importance","integrity","ismap","itemprop","keytype","kind","label","lang","language","lazyload","list","loop","low","manifest","max","maxlength","minlength","media","method","min","multiple","muted","name","novalidate","open","optimum","pattern","ping","placeholder","poster","preload","radiogroup","readonly","referrerpolicy","rel","required","reversed","role","rows","rowspan","sandbox","scope","scoped","selected","shape","size","sizes","slot","span","spellcheck","src","srcdoc","srclang","srcset","start","step","style","summary","tabindex","target","title","translate","type","usemap","value","width","wrap"]}addMixins(){let e=U();this.createId=e.createId}}class Ne{constructor(e){let r=String(e.props.name),s=`${r}_ROUTE_UPDATER`;return(0,t.curry)(Ne.createTemporaryViewStreamObj)({id:s,name:r})}static createTemporaryViewStreamObj(e,t){let{name:r,id:s}=e,o=t,n=new me({id:s,name:r,data:t});n.onRendered=()=>{n.sendInfoToChannel("CHANNEL_ROUTE",o)},n.afterBroadcastEvents=()=>{n.disposeViewStream()},n.appendToNull()}}const ge=n(205).map;class Te{constructor(e,r={}){this.addRegisteredActions.bind(this),this.createChannelActionsObj(e,r.extendedActionsArr),r.name=e,r.defaultActions=void 0!==r.data?[`${r.name}_EVENT`]:[],this.props=r,this.props.isRegistered=!1,this.props.isProxy=void 0!==this.props.isProxy&&this.props.isProxy;const s=void 0!==this.props.data;this.props.sendCachedPayload=void 0===this.props.sendCachedPayload?s:this.props.sendCachedPayload,this.sendPayloadToRouteChannel=new Ne(this),this.createChannelActionMethods(),this.streamsController=C.channelsMap;let o=this.getMainObserver();this.checkForPersistentDataMode=Te.checkForPersistentDataMode.bind(this),this.observer$=this.props.observer=o;let n=this.streamsController.getStream("DISPATCHER");const i=(0,t.propEq)("name",r.name);n.pipe((0,B.filter)(i)).subscribe((e=>this.onReceivedObservable(e)))}getMainObserver(){return void 0===this.streamsController&&console.warn(`Spyne Warning: The following channel, ${this.props.name}, appears to be registered before Spyne has been initialized.`),!0===this.streamsController.testStream(this.props.name)?this.streamsController.getProxySubject(this.props.name,this.props.sendCachedPayload):!0===this.props.sendCachedPayload?new e.ReplaySubject(1):new e.Subject}onChannelInitialized(){}onRegistered(e=this.props){if(void 0!==e.data){const t=Object.keys(this.channelActions)[0];this.sendChannelPayload(t,e.data)}}get isProxy(){return this.props.isProxy}get channelName(){return this.props.name}get observer(){return this.observer$}checkForTraits(){void 0!==this.props.traits&&(e=>{"Array"!==e.constructor.name&&(e=[e]),e.forEach((e=>{new e(this)}))})(this.props.traits)}initializeStream(){this.checkForTraits(),this.onChannelInitialized(),this.checkForPersistentDataMode(),this.onRegistered(),this.props.isRegistered=!0}static checkForPersistentDataMode(e=this.props,r=this.channelActions){const s=(0,t.isEmpty)(r),o=void 0!==(0,t.prop)("data",e);return!0===s&&!0===o&&(e.sendCachedPayload=!0,r=(()=>{const{name:t}=e,r=`${t}_EVENT`;return{[r]:r}})(),void 0!==this.channelActions&&(this.channelActions=r)),{props:e,actionsObj:r}}setTrace(e){}createChannelActionsObj(e,r=[]){const s=(0,t.ifElse)((0,t.is)(String),t.identity,t.head);let o=r.concat(this.addRegisteredActions(e)),n=ge(s,o),i=(0,t.mergeAll)((0,t.chain)((e=>(0,t.objOf)(e,e)),n));this.channelActions=i}createChannelActionMethods(){const e=(0,t.ifElse)((0,t.is)(String),t.identity,t.head),r=(0,t.ifElse)((0,t.is)(String),(0,t.always)("onViewStreamInfo"),(e=>{const r=(0,t.view)((0,t.lensIndex)(1),e);return!0==("function"==typeof this[r])?this[r].bind(this):console.warn(`"${this.props.name}", REQUIRES THE FOLLOWING METHOD ${r} FOR ACTION, ${e[0]}`),r}));this.channelActionMethods=(0,t.fromPairs)(ge((t=>[e(t),r(t)]),this.addRegisteredActions()))}addRegisteredActions(){let e=[];return(0,t.path)(["props","data"],this)&&(e=[`${this.props.name}_EVENT`]),e}onReceivedObservable(e){this.onIncomingObservable(e)}getActionMethodForObservable(e){e.unpacked=!0;const r=this.onViewStreamInfo.bind(this);let s=(0,t.path)(["data","action"],e);const o=(0,t.prop)(s,this.channelActionMethods);let n=r;return void 0!==o&&"onViewStreamInfo"!==o&&!0==("function"==typeof this[o])&&(n=this[o].bind(this)),n}onIncomingObservable(e){let r=(0,t.equals)(e.name,this.props.name),{action:s,payload:o,srcElement:n}=e.data,i=r=>({props:()=>{return r=e.data,(0,t.mergeAll)([r,{action:(0,t.prop)("action",r)},(0,t.prop)("payload",r),(0,t.prop)("srcElement",r)]);var r},action:s,payload:o,srcElement:n,event:r});return!0===r?(e=>e.observable.pipe((0,B.map)(i)).subscribe(this.getActionMethodForObservable(e)))(e):void 0}onViewStreamInfo(e){}sendChannelPayload(e,t,r={},s={},o=this.observer$){let n=new F(this.props.name,e,t,r,s);o.next(n)}getChannel(e,r){return(0,t.ifElse)((e=>b().includes(e)),(e=>{let t=this.streamsController.getStream(e).observer;return void 0!==r?t.pipe((0,B.filter)(r)):t}),(e=>console.warn(`channel name ${e} is not within ${b}`)))(e)}}const _e=n(205).filter,Ae=n(205).mergeRight;class Se extends Te{constructor(t="CHANNEL_ROUTE",r={}){r.sendCachedPayload=!0,super("CHANNEL_ROUTE",r),this.createChannelActionsObj(),this.routeConfigJson=this.getRouteConfig(),this.bindStaticMethods(),this.navToStream$=new e.ReplaySubject(1),this.observer$=this.navToStream$.pipe((0,B.map)((e=>this.onMapNext(e)))),this.compareRouteKeywords=s.compareRouteKeywords()}checkConfigForHash(){!0==("hash"===C.config.channels.ROUTE.type)&&(C.config.channels.ROUTE.type="slash",C.config.channels.ROUTE.isHash=!0)}onRegistered(){this.checkConfigForHash(),this.initStream()}createChannelActionsObj(){let e=this.addRegisteredActions(),r=(0,t.mergeAll)((0,t.chain)((e=>(0,t.objOf)(e,e)),e));this.channelActions=r}addRegisteredActions(){return["CHANNEL_ROUTE_DEEPLINK_EVENT","CHANNEL_ROUTE_CHANGE_EVENT","CHANNEL_ROUTE_CONFIG_UPDATED_EVENT",["CHANNEL_ROUTE_UPDATE_CONFIG_EVENT","updateRouteConfig"]]}updateRouteConfig(e){const r=(0,t.pick)(["isHash","isHidden","routes","type"],e.payload);C.config.channels.ROUTE=(0,t.mergeRight)(C.config.channels.ROUTE,r),C.conformRouteConfig();const s=this.getRouteConfig();this.routeConfigJson=s,this.bindStaticMethodsWithConfigData(),this.sendChannelPayload("CHANNEL_ROUTE_CONFIG_UPDATED_EVENT",s,{},{},this.navToStream$)}getRouteConfig(){const e=C.config;let r=(0,t.path)(["channels","ROUTE"],e);"query"===r.type&&(r.isHash=!1);let o=s.flattenConfigObject(r.routes);return r.paramsArr=o,r}initStream(){this.firstLoadStream$=new e.ReplaySubject(1),this.onIncomingDomEvent(void 0,this.routeConfigJson,"CHANNEL_ROUTE_DEEPLINK_EVENT"),s.createPopStateStream(this.onIncomingDomEvent.bind(this)),this.observer$=(0,e.merge)(this.firstLoadStream$,this.navToStream$)}onMapNext(e,t=!1){return e.action="CHANNEL_ROUTE_CHANGE_EVENT",e}static removeSSID(e){const r=(0,t.lensProp)(["routeData"]);return(0,t.over)(r,(0,t.omit)(["vsid"]))(e)}static onIncomingDomEvent(e,r=this.routeConfigJson,s){let o=void 0!==s?s:this.channelActions.CHANNEL_ROUTE_CHANGE_EVENT,n=(0,t.path)(["state","routeCount"],e),i=!0===(0,t.is)(Number,n),a=this.getDataFromString(r,i);!0===i&&(a.routeCount=n);let c=this.compareRouteKeywords.compare(a.routeData,a.paths);a=Ae(a,c),this.sendChannelPayload(o,a,void 0,e,this.navToStream$)}static checkForRouteParamsOverrides(e){return e}static checkForEventMethods(e){const r=(0,t.compose)(_e((0,t.test)(/^(event)([A-Z].*)([A-Z].*)$/gm)),t.keys,(0,t.prop)("payload"))(e);if(r.length>=1){const s=(0,t.prop)("event",e);if(void 0!==s){const e=(e,t,r,s,o)=>String(r).toLowerCase()+s+o,o=(0,t.replace)(/^(event)([A-Z])(.*)([A-Z].*)$/gm,e),n=e=>{const t=o(e);void 0!==s[t]&&s[t]()};r.forEach(n)}}return e}static checkForEndRoute(e,r=this.routeConfigJson,s){if(!0!==(0,t.compose)((0,t.equals)("true"),(0,t.path)(["payload","endRoute"]))(e))return e;window;const o=void 0!==s?s:!0===C.debug,{payload:n}=e;let i=0;const a=(e=[],r)=>{const[s,c]=r,{routePath:l}=c,d=(0,t.prop)("routeName",l),h=(e=>{const r=(0,t.prop)("routeName",e);if(r){const s=(0,t.compose)(t.keys,(0,t.omit)(["routeName"]))(e);let o=n[r];const i=e=>new RegExp(`^${e}$`).test(o);return(0,t.find)(i,s)}})(l),p=(0,t.is)(Object,c),u=(0,t.is)(Array,c);if(i+=1,!0===p&&!1===u){const r=l[h];r?(0,t.compose)(t.reverse,(0,t.reduce)(a,e),t.toPairs)({nextRoutePath:r}):1===i?o&&console.warn(`Spyne Warning: use of end route method should add start route value of "${d}".`):e.push(d)}return e},{routes:c}=r,l=(0,t.compose)(t.reverse,(0,t.reduce)(a,[]),t.toPairs)({routes:c});if(1===l.length){const t=l[0];e.payload[t]=""}return e}onViewStreamInfo(e){let r=this.channelActions.CHANNEL_ROUTE_CHANGE_EVENT;Se.checkForEventMethods(e),e=this.checkForEndRoute(e);let s=this.getDataFromParams(e);const{routeConfigJson:o}=this;let n=(0,t.prop)("srcElement",e),i=(0,t.prop)("event",e),a=!s.isHidden,c=this.compareRouteKeywords.compare(s.routeData,s.paths);s=Ae(s,c),this.sendRouteStream(s,a),s=Se.removeSSID(s),this.sendChannelPayload(r,s,n,i,this.navToStream$)}static checkAndConvertStrWithRegexTokens(e,r){return(0,t.keys)(r)}sendRouteStream(e,t=!0){!0===t&&this.setWindowLocation(e)}static getRouteState(){return"CHANNEL_ROUTE_CHANGE_EVENT"}static getIsDeepLinkBool(e){return!1===e&&0===this._routeCount}static getRouteCount(e=!1){return void 0===this._routeCount?(this._routeCount=0,this._routeCount):(!1===e&&(this._routeCount+=1),this._routeCount)}static getExtraPayloadParams(e=this.routeConfigJson,t=!1){return{routeCount:this.getRouteCount(t),isDeepLink:this.getIsDeepLinkBool(t),isHash:e.isHash,isHistory:t,isHidden:e.isHidden,routeType:e.type}}static getDataFromParams(e,s=this.routeConfigJson){let o=(0,t.prop)("payload",e),n=this.getRouteStrFromParams(o,s);const i=(e,r)=>(0,t.defaultTo)(r,(0,t.prop)(e,s));let a=i("type","slash"),c=i("isHash",!1),l=r.formatStrAsWindowLocation(n),d=this.getDataFromLocationStr(a,c,l),{pathInnermost:h,paths:p}=d;o=Ae(d.routeData,o);let{routeCount:u,isDeepLink:E,isHash:m,isHistory:N,isHidden:g,routeType:T}=this.getExtraPayloadParams(s);return{isDeepLink:E,routeCount:u,pathInnermost:h,paths:p,routeData:o,routeValue:n,isHash:m,isHidden:g,isHistory:N,routeType:T}}static getDataFromString(e=this.routeConfigJson,t=!1){const s=e.type,o=!0===e.isHash,n=r.getLocationStrByType(s,o);let{paths:i,pathInnermost:a,routeData:c,routeValue:l}=Se.getParamsFromRouteStr(n,e,s),{routeCount:d,isDeepLink:h,isHash:p,routeType:u,isHidden:E}=this.getExtraPayloadParams(e,t);return{isDeepLink:h,routeCount:d,pathInnermost:a,paths:i,routeData:c,routeValue:l,isHash:p,isHidden:E,isHistory:t,routeType:u}}static getDataFromLocationStr(e="slash",t=this.routeConfigJson.isHash,s=window.location){const o=void 0!==this.routeConfigJson?this.routeConfigJson.type:e,n=r.getLocationStrByType(o,t,s);let{paths:i,pathInnermost:a,routeData:c,routeValue:l}=this.getParamsFromRouteStr(n,this.routeConfigJson,o);return{paths:i,pathInnermost:a,routeData:c,routeValue:l,action:this.getRouteState()}}static getLocationData(){return(0,t.pickAll)(["href","origin","protocol","host","hostname","port","pathname","search","hash"],window.location)}static getRouteStrFromParams(e,t,s){const o=void 0!==s?s:t.type;return r.convertParamsToRoute(e,t,o)}static getParamsFromRouteStr(e,t,s){const o=void 0!==s?s:t.type;return r.convertRouteToParams(e,t,o)}checkEmptyRouteStr(e,r=!1){const s=(0,t.isEmpty)(e);return!0==(!0===s&&!1===r)||!0==(!0===s&&!0===r)?"/":!0==(!1===s&&!0===r)?(0,t.concat)("#",e):e}static removeLastSlash(e){return e.replace(/^(.*)(\/)$/,"$1")}setWindowLocation(e){let{isHash:r,routeValue:s}=e;s=this.checkEmptyRouteStr(s,r);let{routeCount:o}=e;if(!0===r)s=Se.removeLastSlash(window.location.pathname)+s,window.history.pushState({routeCount:o},"",s);else{const e=(0,t.when)((0,t.compose)((0,t.complement)((0,t.equals)("/")),t.head),(0,t.concat)("/",t.__));window.history.pushState({routeCount:o},"",e(s))}}getWindowLocation(){return window.location.pathname}bindStaticMethods(){this.checkForEndRoute=Se.checkForEndRoute.bind(this),this.getIsDeepLinkBool=Se.getIsDeepLinkBool.bind(this),this.getDataFromLocationStr=Se.getDataFromLocationStr.bind(this),this.onIncomingDomEvent=Se.onIncomingDomEvent.bind(this),this.getDataFromString=Se.getDataFromString.bind(this),this.getParamsFromRouteStr=Se.getParamsFromRouteStr.bind(this),this.getLocationData=Se.getLocationData.bind(this),this.getRouteState=Se.getRouteState.bind(this),this.getDataFromParams=Se.getDataFromParams.bind(this),this.getRouteCount=Se.getRouteCount.bind(this),this.getExtraPayloadParams=Se.getExtraPayloadParams.bind(this),this.bindStaticMethodsWithConfigData()}bindStaticMethodsWithConfigData(){const e=(0,t.curryN)(3,Se.getRouteStrFromParams);this.getRouteStrFromParams=e(t.__,this.routeConfigJson,this.routeConfigJson.type)}}class Ce extends Te{constructor(e="CHANNEL_UI",t={}){t.sendCachedPayload=!1,super(e,t),this.keyEventsLoaded=!1,this.keyCodeArr=[]}addRegisteredActions(){return["CHANNEL_UI_ANIMATIONEND_EVENT","CHANNEL_UI_ANIMATIONITERATION_EVENT","CHANNEL_UI_ANIMATIONSTART_EVENT","CHANNEL_UI_AUDIOEND_EVENT","CHANNEL_UI_AUDIOPROCESS_EVENT","CHANNEL_UI_AUDIOSTART_EVENT","CHANNEL_UI_BLUR_EVENT","CHANNEL_UI_CACHED_EVENT","CHANNEL_UI_CANPLAYTHROUGH_EVENT","CHANNEL_UI_CANPLAY_EVENT","CHANNEL_UI_CHANGE_EVENT","CHANNEL_UI_CHECKBOXSTATECHANGE_EVENT","CHANNEL_UI_CLICK_EVENT","CHANNEL_UI_COMPLETE_EVENT","CHANNEL_UI_CONTEXTMENU_EVENT","CHANNEL_UI_COPY_EVENT","CHANNEL_UI_CUT_EVENT","CHANNEL_UI_DBLCLICK_EVENT","CHANNEL_UI_DURATIONCHANGE_EVENT","CHANNEL_UI_EMPTIED_EVENT","CHANNEL_UI_ENDED_EVENT","CHANNEL_UI_EVENT","CHANNEL_UI_FOCUSIN_EVENT","CHANNEL_UI_FOCUSOUT_EVENT","CHANNEL_UI_FOCUS_EVENT","CHANNEL_UI_HASHCHANGE_EVENT","CHANNEL_UI_INPUT_EVENT","CHANNEL_UI_KEYDOWN_EVENT","CHANNEL_UI_KEYPRESS_EVENT","CHANNEL_UI_KEYUP_EVENT","CHANNEL_UI_LOADEDDATA_EVENT","CHANNEL_UI_LOADEDMETADATA_EVENT","CHANNEL_UI_MOUSEDOWN_EVENT","CHANNEL_UI_MOUSEENTER_EVENT","CHANNEL_UI_MOUSELEAVE_EVENT","CHANNEL_UI_MOUSEMOVE_EVENT","CHANNEL_UI_MOUSEOUT_EVENT","CHANNEL_UI_MOUSEOVER_EVENT","CHANNEL_UI_MOUSEUP_EVENT","CHANNEL_UI_MOUSEWHEEL_EVENT","CHANNEL_UI_PAUSE_EVENT","CHANNEL_UI_PLAYING_EVENT","CHANNEL_UI_PLAY_EVENT","CHANNEL_UI_RADIOSTATECHANGE_EVENT","CHANNEL_UI_RATECHANGE_EVENT","CHANNEL_UI_READYSTATECHANGE_EVENT","CHANNEL_UI_SEEKED_EVENT","CHANNEL_UI_SEEKING_EVENT","CHANNEL_UI_SELECT_EVENT","CHANNEL_UI_STALLED_EVENT","CHANNEL_UI_SUBMIT_EVENT","CHANNEL_UI_SUSPEND_EVENT","CHANNEL_UI_SVGABORT_EVENT","CHANNEL_UI_SVGERROR_EVENT","CHANNEL_UI_SVGLOAD_EVENT","CHANNEL_UI_SVGRESIZE_EVENT","CHANNEL_UI_SVGSCROLL_EVENT","CHANNEL_UI_SVGUNLOAD_EVENT","CHANNEL_UI_SVGZOOM_EVENT","CHANNEL_UI_TIMEUPDATE_EVENT","CHANNEL_UI_TOUCHCANCEL_EVENT","CHANNEL_UI_TOUCHEND_EVENT","CHANNEL_UI_TOUCHMOVE_EVENT","CHANNEL_UI_TOUCHSTART_EVENT","CHANNEL_UI_TRANSITIONEND_EVENT","CHANNEL_UI_VALUECHANGE_EVENT","CHANNEL_UI_VOLUMECHANGE_EVENT","CHANNEL_UI_WAITING_EVENT","CHANNEL_UI_WHEEL_EVENT"]}loadKeyStream(){let t=e.Observable.fromEvent(document,"keyup");this.keyPresses$=t.groupBy((e=>e.keyCode)).mergeAll().filter((e=>this.keyCodeArr.indexOf(e.keyCode)>=0)).repeat().subscribe(this.onKeyPressed.bind(this))}addKeyEvent(e){!1===this.keyEventsLoaded&&this.loadKeyStream(),this.keyEventsLoaded=!0,this.registerKey(e)}registerKey(e){this.keyCodeArr.push(e)}onKeyPressed(e){console.log("key is ",e)}static removeSSID(e){const r=(0,t.lensProp)(["payload"]);return(0,t.over)(r,(0,t.omit)(["vsid"]))(e)}onIncomingObservable(e){let r=(0,t.equals)(e.name,this.props.name);e.data=Ce.removeSSID(e.data);let{payload:s,srcElement:o}=e.data,n=e=>({payload:s,srcElement:o,event:e});return!0===r?(e=>e.observable.pipe((0,B.map)(n)).subscribe(this.onUIEvent.bind(this)))(e):void 0}getActionState(e){let r=(0,t.path)(["event","type"]),s=(0,t.path)(["event","typeOverRide"]),o=(0,t.compose)(t.toUpper,(0,t.either)(s,r))(e);return void 0!==o?`CHANNEL_UI_${o}_EVENT`:"CHANNEL_UI"}static checkForEventMethods(e){const r=(0,t.compose)((0,t.filter)((0,t.test)(/^(event)([A-Z].*)([A-Z].*)$/gm)),t.keys,(0,t.prop)("payload"))(e);if(r.length>=1){const s=(0,t.prop)("event",e);if(void 0!==s){const e=(e,t,r,s,o)=>String(r).toLowerCase()+s+o,o=(0,t.replace)(/^(event)([A-Z])(.*)([A-Z].*)$/gm,e),n=e=>{const t=o(e);void 0!==s[t]&&"function"==typeof s[t]&&s[t]()};r.forEach(n)}}return e}onUIEvent(e){Ce.checkForEventMethods(e),e.action=this.getActionState(e);const t=e.action,{payload:r,srcElement:s}=e,o=e.event;this.sendChannelPayload(t,r,s,o)}}class fe{constructor(){this.createDomObservableFromEvent=fe.createDomObservableFromEvent.bind(this)}static createDomObservableFromEvent(t,r,s=!0,o=window){return r=void 0===r?e=>e:r,(0,e.fromEventPattern)((e=>o.addEventListener(t,e,{passive:s})),(()=>{o[t]=e=>e})).pipe((0,B.map)(r))}static createMediaQuery(e){const t=window.matchMedia(e);return this.checkIfValidMediaQuery(t,e),!1!==t&&t}static checkIfValidMediaQuery(e,t){const r=e=>e.replace(/\s+/gm,""),s=void 0!==e.matches&&r(e.media).indexOf(r(t))>=0;return!1===s&&(t=>{console.warn(`Spyne Info: the following query string, "${t}", has been optimized to "${e.media}" by the browser and may not be a valid Media Query item!`)})(t),s}static createMediaQueryHandler(t,r){let s=(e=>t=>(t.mediaQueryName=e,t))(r),o=(n=t,{addHandler:e=>{n.addListener(e)},removeHandler:e=>{n.onchange=()=>{}}});var n;return new e.fromEventPattern(o.addHandler,o.removeHandler).pipe((0,B.map)(s))}static createMergedObsFromObj(e){let r=e.mediaQueries||e.mediqQueries,s=[];return(0,t.mapObjIndexed)(((e,t,r)=>{let o=fe.createMediaQuery(e);return!1!==o&&s.push(fe.createMediaQueryHandler(o,t)),s}),r),s}}const ye=n(205).map;class be extends Te{constructor(e="CHANNEL_WINDOW"){super(e),this.bindStaticMethods(),this.currentScrollY=0}initializeStream(){this.domChannelConfig=C.config.channels.WINDOW;let t=this.getActiveObservables(),r=(0,e.merge)(...t);this.dom$=r,r.subscribe((e=>{let{action:t,payload:r,srcElement:s,event:o}=e;this.sendChannelPayload(t,r,s,o)}))}static getMouseWheelMapFn(e){let t=this.channelActions.CHANNEL_WINDOW_MOUSEWHEEL_EVENT,r=e.deltaY<=0?"up":"down",{deltaX:s,deltaY:o,deltaZ:n}=e;return{action:t,payload:{scrollDir:r,deltaX:s,deltaY:o,deltaZ:n},srcElement:e.srcElement,event:e}}static createCurriedGenericEvent(e){let r=`CHANNEL_WINDOW_${e.toUpperCase()}_EVENT`;return(0,t.curry)(be.mapGenericEvent)(r)}static mapGenericEvent(e,t){return{action:e,payload:t,srcElement:t.srcElement,event:t}}static getResizeMapFn(e){return{action:this.channelActions.CHANNEL_WINDOW_RESIZE_EVENT,payload:(0,t.pick)(["innerWidth","innerHeight","outerWidth","outerHeight"],window),srcElement:e.srcElement,event:e}}static getOrientationMapFn(e){let r=this.channelActions.CHANNEL_WINDOW_ORIENTATION_EVENT,s=window.matchMedia("(orientation: portrait)").matches,o=(0,t.pick)(["innerWidth","innerHeight","outerWidth","outerHeight"],window);return o.orientation=!0===s?"portrait":"landscape",{action:r,payload:o,srcElement:e.srcElement,event:e}}getMediaQueryMapFn(e){return{action:this.channelActions.CHANNEL_WINDOW_MEDIA_QUERY_EVENT,payload:(0,t.pick)(["matches","media","mediaQueryName"],e),srcElement:e.srcElement,event:e}}createMouseWheelObservable(e){const t=e.debounceMSTimeForScroll;return fe.createDomObservableFromEvent("mousewheel",be.getMouseWheelMapFn.bind(this)).pipe((0,B.debounceTime)(t))}static getScrollData(){let e=0;return t=>{let r=e-t;return e=t,{scrollY:t,scrollDistance:r,scrollDir:r>=0?"up":"down"}}}static getScrollY(e){return void 0!==e.pageYOffset?e.pageYOffset:e.scrollTop}static getScrollMapFn(e,t,r,s,o){let n=s(be.getScrollY(o)),{scrollDistance:i}=n;return{action:r,payload:n,srcElement:e.srcElement,scrollDistance:i,event:e}}createScrollObservable(e,r=window,s=!0){const o=e.debounceMSTimeForScroll,n=r,i=r===window,a=void 0!==e.scrollElForVals?e.scrollElForVals:r,c=i?"CHANNEL_WINDOW_SCROLL_EVENT":"CHANNEL_WINDOW_ELEMENT_SCROLL_EVENT",l=be.getScrollData(),d=(0,t.partialRight)(be.getScrollMapFn,[c,l,a,s,n]).bind(this);return fe.createDomObservableFromEvent("scroll",d,s,n).pipe((0,B.debounceTime)(o),(0,B.skipWhile)((e=>0===e.scrollDistance)),(0,B.map)((e=>{const t=be.getScrollY(n);return e.payload.scrollDistanceAbs=Math.abs(this.currentScrollY-t),this.currentScrollY=t,e})))}createOrientationObservable(e){return fe.createDomObservableFromEvent("orientationchange",be.getOrientationMapFn.bind(this))}createResizeObservable(e){const t=e.debounceMSTimeForResize;return fe.createDomObservableFromEvent("resize",be.getResizeMapFn.bind(this)).pipe((0,B.debounceTime)(t))}getEventsFromConfig(e=this.domChannelConfig){let t=e.events;return ye((e=>{let t=be.createCurriedGenericEvent(e);return fe.createDomObservableFromEvent(e,t)}),t)}getActiveObservables(e=this.domChannelConfig){let r=[];e.listenForMediaQueries=j(e.mediaQueries)||j(e.mediqQueries);let s={listenForResize:this.createResizeObservable.bind(this),listenForOrientation:this.createOrientationObservable.bind(this),listenForScroll:this.createScrollObservable.bind(this),listenForMouseWheel:this.createMouseWheelObservable.bind(this)};(0,t.mapObjIndexed)(((t,s,o)=>{e[s]&&r.push(t(e))}),s),this.checkForMediaQueries(e.listenForMediaQueries);let o=this.getEventsFromConfig(e);return r=r.concat(o),r}checkForMediaQueries(e){!0===e&&this.getMediaQueryObservable(this.domChannelConfig).subscribe((e=>{let{action:t,payload:r,srcElement:s,event:o}=e;this.sendChannelPayload(t,r,s,o,this.observer$)}))}getMediaQueryObservable(r){let s=this.createMergedObsFromObj(r);return(0,t.apply)(e.merge,s).pipe((0,B.map)(this.getMediaQueryMapFn.bind(this)))}addRegisteredActions(){return["CHANNEL_WINDOW_ABORT_EVENT","CHANNEL_WINDOW_AFTERPRINT_EVENT","CHANNEL_WINDOW_ANIMATIONEND_EVENT","CHANNEL_WINDOW_ANIMATIONITERATION_EVENT","CHANNEL_WINDOW_ANIMATIONSTART_EVENT","CHANNEL_WINDOW_APPINSTALLED_EVENT","CHANNEL_WINDOW_BEFOREPRINT_EVENT","CHANNEL_WINDOW_BEFOREUNLOAD_EVENT","CHANNEL_WINDOW_BEGINEVENT_EVENT","CHANNEL_WINDOW_BLUR_EVENT","CHANNEL_WINDOW_CACHED_EVENT","CHANNEL_WINDOW_CHANGE_EVENT","CHANNEL_WINDOW_CLICK_EVENT","CHANNEL_WINDOW_CLOSE_EVENT","CHANNEL_WINDOW_COMPOSITIONEND_EVENT","CHANNEL_WINDOW_COMPOSITIONSTART_EVENT","CHANNEL_WINDOW_COMPOSITIONUPDATE_EVENT","CHANNEL_WINDOW_COPY_EVENT","CHANNEL_WINDOW_CUT_EVENT","CHANNEL_WINDOW_DEVICECHANGE_EVENT","CHANNEL_WINDOW_DEVICELIGHT_EVENT","CHANNEL_WINDOW_DEVICEMOTION_EVENT","CHANNEL_WINDOW_DEVICEORIENTATION_EVENT","CHANNEL_WINDOW_DEVICEPROXIMITY_EVENT","CHANNEL_WINDOW_DOMATTRIBUTENAMECHANGED_EVENT","CHANNEL_WINDOW_DOMATTRMODIFIED_EVENT","CHANNEL_WINDOW_DOMCHARACTERDATAMODIFIED_EVENT","CHANNEL_WINDOW_DOMCONTENTLOADED_EVENT","CHANNEL_WINDOW_DOMELEMENTNAMECHANGED_EVENT","CHANNEL_WINDOW_ERROR_EVENT","CHANNEL_WINDOW_FOCUSIN_EVENT","CHANNEL_WINDOW_FOCUS_EVENT","CHANNEL_WINDOW_FULLSCREENCHANGE_EVENT","CHANNEL_WINDOW_FULLSCREENERROR_EVENT","CHANNEL_WINDOW_LOAD_EVENT","CHANNEL_WINDOW_MEDIA_QUERY_EVENT","CHANNEL_WINDOW_MESSAGE_EVENT","CHANNEL_WINDOW_MOUSEWHEEL_EVENT","CHANNEL_WINDOW_OFFLINE_EVENT","CHANNEL_WINDOW_ONLINE_EVENT","CHANNEL_WINDOW_OPEN_EVENT","CHANNEL_WINDOW_ORIENTATION_EVENT","CHANNEL_WINDOW_PAGEHIDE_EVENT","CHANNEL_WINDOW_PAGESHOW_EVENT","CHANNEL_WINDOW_POPSTATE_EVENT","CHANNEL_WINDOW_RESET_EVENT","CHANNEL_WINDOW_RESIZE_EVENT","CHANNEL_WINDOW_ELEMENT_SCROLL_EVENT","CHANNEL_WINDOW_SCROLL_ELEMENT_ADDED_EVENT",["CHANNEL_WINDOW_SET_ELEMENT_TO_SCROLL_EVENT","onSetElementToScroll"],"CHANNEL_WINDOW_SCROLL_EVENT","CHANNEL_WINDOW_SCROLL_LOCK_EVENT",["CHANNEL_WINDOW_SCROLL_LOCK_EVENT","onScrollLockEvent"],"CHANNEL_WINDOW_SUBMIT_EVENT","CHANNEL_WINDOW_TRANSITIONCANCEL_EVENT","CHANNEL_WINDOW_TRANSITIONEND_EVENT","CHANNEL_WINDOW_TRANSITIONRUN_EVENT","CHANNEL_WINDOW_TRANSITIONSTART_EVENT","CHANNEL_WINDOW_UNLOAD_EVENT","CHANNEL_WINDOW_WHEEL_EVENT"]}onScrollLockEvent(e){let{action:r,scrollLock:s,el:o}=e.payload;C.config.scrollLock=s,o=o||window,!0===s?(this.spyneScrollLock.disableBodyScroll(),(0,t.path)(["srcElement","id"],e),this.createScrollObservable(this.domChannelConfig,o,!0).subscribe((e=>{let{action:t,payload:r,srcElement:s,event:o}=e;this.sendChannelPayload(t,r,s,o)}))):this.spyneScrollLock.enableBodyScroll(),this.sendChannelPayload(r,{scrollLock:s},o)}onSetElementToScroll(e){let{config:t,el:r,scrollElement:s}=e.payload;t=t||{},t=E(this.domChannelConfig,t),s=s||r,this.sendChannelPayload("CHANNEL_WINDOW_SCROLL_ELEMENT_ADDED_EVENT",{el:r},r),this.createScrollObservable(t,s).subscribe((e=>{let{action:t,payload:r,srcElement:s,event:o}=e;this.sendChannelPayload(t,r,s,o)}))}bindStaticMethods(){this.createMediaQueryHandler=fe.createMediaQueryHandler.bind(this),this.createMergedObsFromObj=fe.createMergedObsFromObj.bind(this)}}class ve extends Te{constructor(e={}){super("CHANNEL_LIFECYCLE",e)}addRegisteredActions(){return["CHANNEL_LIFECYCLE_RENDERED_EVENT","CHANNEL_LIFECYCLE_DISPOSED_EVENT"]}onViewStreamInfo(e){let{data:t,action:r,srcElement:s}=e,o=s;o.action=r,this.onSendEvent(r,o)}onSendEvent(e,t={}){const r=this.channelActions[e],s={};window.setTimeout((()=>this.sendChannelPayload(r,t,s,void 0)),0)}}class Oe extends Te{constructor(t,r={}){r.isProxy=!0,super(t,r),this.props=r,this.subject$=new e.Subject,this.replaySub$=new e.ReplaySubject(1),this.observer$=(0,e.merge)(this.subject$,this.replaySub$),!0===C.debug&&this.checkIfChannelIsStillProxy(t)}getMergedSubject(e=!1){return!0===e?this.replaySub$:this.subject$}checkIfChannelIsStillProxy(e){let r=e;(async(e,t)=>{window.setTimeout((async()=>{await new Promise((e=>setTimeout(e,1))),window.requestAnimationFrame(e)}),t)})((()=>{!0!==(0,t.includes)(r,C.listRegisteredChannels())&&console.warn(`Spyne Warning: The channel, ${r} does not appear to be registered!`)}),1e3)}get replaySubject(){return this.replaySub$}get subject(){return this.subject$}}const Ie=n(205).map,De=new Map;class Le{constructor(){this.addMixins(),De.set("DISPATCHER",new e.Subject),this.listRegisteredChannels=Le.listRegisteredChannels.bind(this),this.getChannelsList=Le.getChannelsList.bind(this)}get map(){return De}static getChannelsList(){return Array.from(De,((e,t)=>({key:e[0],val:e[1].constructor.name})))}static listRegisteredChannels(e=!1){let r=this.getChannelsList(),s=(0,t.reject)((0,t.propEq)("val","ChannelProxy")),o=(0,t.filter)((0,t.propEq)("val","ChannelProxy")),n=(!0===e?o:s)(r);return(0,t.pluck)(["key"],n)}listProxyChannels(){return this.listRegisteredChannels(!0)}checkForMissingChannels(){let e=this.getChannelsList(),r=(0,t.filter)((0,t.propEq)("val","ChannelProxy"))(e);if(r.length>=1){let e=`Spyne Warning: The following ${1===r.length?"Channel has":"Channels have"} not been initialized: ${(0,t.compose)((0,t.join)(", "),Ie((0,t.prop)("key")))(r)}`;console.warn(e)}}init(){this.createMainStreams()}createMainStreams(){this.routeStream=new Se,De.set("CHANNEL_ROUTE",this.routeStream),this.uiStream=new Ce,De.set("CHANNEL_UI",this.uiStream),this.domStream=new be,De.set("CHANNEL_WINDOW",this.domStream),this.viewStreamLifecycle=new ve,De.set("CHANNEL_LIFECYCLE",this.viewStreamLifecycle),this.routeStream.initializeStream(),this.domStream.initializeStream()}addKeyEvent(e){De.get("UI").addKeyEvent(e)}registerStream(e){let r=e.channelName;De.has(r)&&(0,t.compose)((0,t.pathEq)(["props","isRegistered"],!0))(De.get(r))?console.warn(`Spyne Warning: The Channel, ${r}, has already been registered!`):(De.set(r,e),e.initializeStream())}getChannelActions(e){return De.get(e).addRegisteredActions()}getProxySubject(e,t=!1){let r=!0===t?"replaySubject":"subject";return De.get(e)[r]}testStream(e){return void 0!==De.get(e)}getStream(e){return!1===this.testStream(e)&&De.set(e,new Oe(e)),De.get(e)}addMixins(){}}class Re{constructor(e,t="",r=!0){return this.parentContext=e,this.omittedMethods=["autoBinder","initAutoBinder","getEnhancerMethods","checkForMalformedMethods","caller","arguments","bindParentViewStream"],this.prefix=t,!0===r&&this.autoBinder(),this.allMethodsList}initAutoBinder(){this.autoBinder()}getEnhancerMethods(){return k(this,this.omittedMethods)}checkForMalformedMethods(e){if(""===this.prefix)return void console.warn(`SPYNE WARNING: The following SpyneTrait ${this.constructor.name} needs a prefix`);let r=(0,t.reject)((e=>0===e.indexOf(this.prefix)),e);if(r.length>=1){let e=`Spyne Warning: The following method(s) in ${this.constructor.name} require the prefix, "${this.prefix}": [${r.join(", ")}];`;console.warn(e)}}bindParentViewStream(e,r){this.checkForMalformedMethods(e.allMethods);let s={};const o=(e,t=!1)=>{let o=!0===t?this.constructor:this;var n;"function"==typeof o[e]&&(s[e]=r[n=e]=o[n].bind(r))},n=(0,t.curryN)(2,o)(t.__,!0);return(0,t.map)(n,e.staticMethods),(0,t.map)(o,e.methods),s}autoBinder(){let e=this.getEnhancerMethods();return this.allMethodsList=this.bindParentViewStream(e,this.parentContext),this.allMethodsList}}class we{constructor(e,t,r){this._mapFn=we.setMapFn(e),this._url=we.setUrl(e),this._responseType=we.setResponseType(e),this._serverOptions=we.setServerOptions(e),this._subscriber=void 0!==t?t:e=>console.log("FETCH RETURNED ",e),this.debug=void 0!==e.debug&&e.debug;let s={mapFn:this.mapFn,url:this.url,serverOptions:this.serverOptions,responseType:this.responseType,debug:this.debug};!0!==r&&we.startWindowFetch(s,this._subscriber)}static startWindowFetch(t,r){let{mapFn:s,url:o,serverOptions:n,responseType:i,debug:a}=t;const c=!0===a?e=>console.log("DEBUG FETCH :",e):()=>{};let l=(0,e.from)(window.fetch(o,n)).pipe((0,B.tap)(c),(0,B.flatMap)((t=>(0,e.from)(t[i]()))),(0,B.map)(s),(0,B.publish)());l.connect(),l.subscribe(r)}static setMapFn(e){return(0,t.compose)((0,t.defaultTo)((e=>e)),(0,t.prop)("mapFn"))(e)}static setUrl(e){let r=(0,t.prop)("url",e);return void 0===r&&console.warn("SPYNE WARNING: URL is undefined for data channel"),r}static setResponseType(e){return(0,t.defaultTo)("json",(0,t.prop)("responseType",e))}get mapFn(){return this._mapFn}get url(){return this._url}get serverOptions(){return this._serverOptions}get responseType(){return this._responseType}static stringifyBodyIfItExists(e){return(0,t.when)((0,t.propIs)(Object,"body"),(0,t.compose)((0,t.over)((0,t.lensProp)("body"),JSON.stringify)))(e)}static updateMethodWhenBodyExists(e){const r=(0,t.has)("body"),s=(0,t.propEq)("method","GET"),o=(0,t.allPass)([r,s]);return(0,t.when)(o,(0,t.assoc)("method","POST"))(e)}static setServerOptions(e){let r=(0,t.pick)(["header","body","mode","method"],e),s=(0,t.mergeDeepRight)(we.baseOptions(),r);return s=we.updateMethodWhenBodyExists(s),s=we.stringifyBodyIfItExists(s),s}static baseOptions(){return{method:"GET",headers:{Accept:"application/json, text/plain, */*"}}}}class Pe extends Te{constructor(e,t={}){Pe.validateMapMethod(t,e),void 0!==t.map&&(t.mapFn=t.map),t.extendedActionsArr=[`${e}_DATA_EVENT`,[`${e}_UPDATE_DATA_EVENT`,"onFetchUpdate"]],t.sendCachedPayload=!0,super(e,t)}static validateMapMethod(e,r,s=!1){const o=(0,t.either)(t.isNil,(e=>"function"!=typeof e)),n=(0,t.all)(o),i=(0,t.allPass)([n,e=>e.length>=1]);return!(0,t.compose)(i,t.values,(0,t.pick)(["map","mapFn"]))(e)||(!1===s&&console.warn(`Spyne Warning: The map method for ChannelFetch, ${r}, appears to be invalid`),!1)}onRegistered(){this.startFetch()}addRegisteredActions(e){let r=(0,t.compose)((0,t.defaultTo)([]),(0,t.path)(["props","extendedActionsArr"]));return["CHANNEL_DATA_EVENT",["CHANNEL_UPDATE_DATA_EVENT","onFetchUpdate"]].concat(r(this))}startFetch(e={},t=this.onFetchReturned.bind(this)){let r=this.consolidateAllFetchProps(e);return new we(r,t)}onFetchUpdate(e){let t=this.getPropsForFetch(e);this.startFetch(t)}onFetchReturned(e){this.createChannelPayloadItem(e)}createChannelPayloadItem(e,t=`${this.props.name}_DATA_EVENT`){this.sendChannelPayload(t,e)}getPropsForFetch(e){let r=(0,t.path)(["viewStreamInfo","payload"],e);return(0,t.pick)(["mapFn","url","header","body","mode","method","responseType","debug"],r)}consolidateAllFetchProps(e,r=this.props){let s=(0,t.pick)(["mapFn","url","header","body","mode","method","responseType","debug"],r);const o=(0,t.reject)(t.isNil);return(0,t.compose)(o,((e,r)=>(0,t.mergeDeepRight)(e,r)))(s,e)}get observer(){return this.observer$}}const He=new Le,Me="0.17.3";let Ve=new class{constructor(){this.version=Me}get channels(){return He}init(e={},t=!1){if(!0===C.initialized)return t?"The Spyne Application has already been initialized!":void console.warn("The Spyne Application has already been initialized!");void 0!==e&&(e=C.initialize({scrollLock:!1,scrollLockX:31,scrollLockY:0,debug:!0,plugins:{},tmp:{},channels:{WINDOW:{mediqQueries:{},events:[],listenForResize:!0,listenForOrientation:!0,listenForScroll:!1,listenForMouseWheel:!1,debounceMSTimeForResize:200,debounceMSTimeForScroll:150},ROUTE:{type:"slash",isHash:!1,isHidden:!1,add404s:!1,routes:{routePath:{routeName:"change"}}}}},e,He)),this.pluginsFn=C.getPluginsMethodObj(e.pluginMethods),this.getChannelActions=e=>He.getChannelActions(e),this.registerChannel=e=>He.registerStream(e),this.registerDataChannel=e=>He.registerStream(e),this.listChannels=()=>Array.from(He.map.keys());let r=new me({id:"spyne-null-views"});r.appendToDom(document.body),r.props.el.style.cssText="display:none; opacity:0; pointer-events:none;",He.init(),!0===C.config.debug&&(window.Spyne={version:Me})}static listChannels(){return Array.from(He.map.keys())}static getChannelActions(e){return He.getChannelActions(e)}static registerChannel(e){if(!1!==C.initialized)return He.registerStream(e);console.warn("Spyne has not been initialized")}};class We{constructor(e={}){let{name:r,config:s,parentEl:o}=e;this.props=e,void 0===s&&(s=(0,t.clone)(e)),this.name=r||"empty",this.props.name=r,s=We.mergeDefaultConfig(s,this.defaultConfig()),this.props.parentEl=o||We.createParentEl(),We.getSpyneApp(r,s),void 0!==this.props.traits&&this.addTraits(this.props.traits),this.onBeforeRegistered(),this.onRegistered(),this.onRender()}addTraits(e){"Array"!==e.constructor.name&&(e=[e]),e.forEach((e=>{new e(this)}))}onBeforeRegistered(){this.props.pluginName=this.props.name,this.props.config=C.getPluginConfigByPluginName(this.props.pluginName)}static mergeDefaultConfig(e={},t=this.defaultConfig()){return Object.assign(t,e)}defaultConfig(){return{}}static getSpyneApp(e,t){!1===C.initialized&&Ve.init(),C.addPluginConfig(e,t)}static updateSpyneConfig(e,r,s){return!0===(0,t.pathSatisfies)((0,t.is)(Object),["config","plugins",r])(e)?(!0===e.config.debug&&console.warn(`Spyne Warning: The plugin, ${r}, already exists`),!1):(e.config.plugins[r]=s,e.config.plugins[r])}static createParentEl(e){return e||document.getElementById("spyne-plugins")||(()=>{const e=new q({id:"spyne-plugins"});document.body.appendChild(e.render());const t=document.getElementById("spyne-plugins");return t.style.cssText="position:absolute; top:0;left:0;width:100%;height:100%;min-height:100vh;z-index:1000000; pointer-events:none",t})()}onRegistered(){}onRender(){}}})(),i})()}));
|
|
@@ -0,0 +1,10 @@
|
|
|
1
|
+
/*!
|
|
2
|
+
* Spyne 0.17.3
|
|
3
|
+
* https://spynejs.org
|
|
4
|
+
*
|
|
5
|
+
* @license Copyright 2017-2021, Frank Batista, Relevant Context, LLC. All rights reserved.
|
|
6
|
+
* Spyne is licensed under the GNU Lesser General Public License v3.0
|
|
7
|
+
*
|
|
8
|
+
* @author: Frank Batista,
|
|
9
|
+
* @email: frbatista.nyc@gmail.com
|
|
10
|
+
*/
|
|
@@ -0,0 +1,20 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
(function webpackUniversalModuleDefinition(root, factory) {
|
|
3
|
+
if(typeof exports === 'object' && typeof module === 'object')
|
|
4
|
+
module.exports = factory();
|
|
5
|
+
else if(typeof define === 'function' && define.amd)
|
|
6
|
+
define("spyne", [], factory);
|
|
7
|
+
else if(typeof exports === 'object')
|
|
8
|
+
exports["spyne"] = factory();
|
|
9
|
+
else
|
|
10
|
+
root["spyne"] = factory();
|
|
11
|
+
})(self, function() {
|
|
12
|
+
return (self["webpackChunkspyne"] = self["webpackChunkspyne"] || []).push([[23],{},
|
|
13
|
+
/******/ __webpack_require__ => { // webpackRuntimeModules
|
|
14
|
+
/******/ var __webpack_exec__ = (moduleId) => (__webpack_require__(__webpack_require__.s = moduleId))
|
|
15
|
+
/******/ __webpack_require__.O(0, [11], () => (__webpack_exec__(649)));
|
|
16
|
+
/******/ var __webpack_exports__ = __webpack_require__.O();
|
|
17
|
+
/******/ return __webpack_exports__;
|
|
18
|
+
/******/ }
|
|
19
|
+
]);
|
|
20
|
+
});
|
|
@@ -0,0 +1,20 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
(function webpackUniversalModuleDefinition(root, factory) {
|
|
3
|
+
if(typeof exports === 'object' && typeof module === 'object')
|
|
4
|
+
module.exports = factory();
|
|
5
|
+
else if(typeof define === 'function' && define.amd)
|
|
6
|
+
define("spyne", [], factory);
|
|
7
|
+
else if(typeof exports === 'object')
|
|
8
|
+
exports["spyne"] = factory();
|
|
9
|
+
else
|
|
10
|
+
root["spyne"] = factory();
|
|
11
|
+
})(self, function() {
|
|
12
|
+
return (self["webpackChunkspyne"] = self["webpackChunkspyne"] || []).push([[24],{},
|
|
13
|
+
/******/ __webpack_require__ => { // webpackRuntimeModules
|
|
14
|
+
/******/ var __webpack_exec__ = (moduleId) => (__webpack_require__(__webpack_require__.s = moduleId))
|
|
15
|
+
/******/ __webpack_require__.O(0, [11], () => (__webpack_exec__(650)));
|
|
16
|
+
/******/ var __webpack_exports__ = __webpack_require__.O();
|
|
17
|
+
/******/ return __webpack_exports__;
|
|
18
|
+
/******/ }
|
|
19
|
+
]);
|
|
20
|
+
});
|
|
@@ -0,0 +1,20 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
(function webpackUniversalModuleDefinition(root, factory) {
|
|
3
|
+
if(typeof exports === 'object' && typeof module === 'object')
|
|
4
|
+
module.exports = factory();
|
|
5
|
+
else if(typeof define === 'function' && define.amd)
|
|
6
|
+
define("spyne", [], factory);
|
|
7
|
+
else if(typeof exports === 'object')
|
|
8
|
+
exports["spyne"] = factory();
|
|
9
|
+
else
|
|
10
|
+
root["spyne"] = factory();
|
|
11
|
+
})(self, function() {
|
|
12
|
+
return (self["webpackChunkspyne"] = self["webpackChunkspyne"] || []).push([[25],{},
|
|
13
|
+
/******/ __webpack_require__ => { // webpackRuntimeModules
|
|
14
|
+
/******/ var __webpack_exec__ = (moduleId) => (__webpack_require__(__webpack_require__.s = moduleId))
|
|
15
|
+
/******/ __webpack_require__.O(0, [11], () => (__webpack_exec__(662)));
|
|
16
|
+
/******/ var __webpack_exports__ = __webpack_require__.O();
|
|
17
|
+
/******/ return __webpack_exports__;
|
|
18
|
+
/******/ }
|
|
19
|
+
]);
|
|
20
|
+
});
|
|
@@ -0,0 +1,20 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
(function webpackUniversalModuleDefinition(root, factory) {
|
|
3
|
+
if(typeof exports === 'object' && typeof module === 'object')
|
|
4
|
+
module.exports = factory();
|
|
5
|
+
else if(typeof define === 'function' && define.amd)
|
|
6
|
+
define("spyne", [], factory);
|
|
7
|
+
else if(typeof exports === 'object')
|
|
8
|
+
exports["spyne"] = factory();
|
|
9
|
+
else
|
|
10
|
+
root["spyne"] = factory();
|
|
11
|
+
})(self, function() {
|
|
12
|
+
return (self["webpackChunkspyne"] = self["webpackChunkspyne"] || []).push([[26],{},
|
|
13
|
+
/******/ __webpack_require__ => { // webpackRuntimeModules
|
|
14
|
+
/******/ var __webpack_exec__ = (moduleId) => (__webpack_require__(__webpack_require__.s = moduleId))
|
|
15
|
+
/******/ __webpack_require__.O(0, [11], () => (__webpack_exec__(663)));
|
|
16
|
+
/******/ var __webpack_exports__ = __webpack_require__.O();
|
|
17
|
+
/******/ return __webpack_exports__;
|
|
18
|
+
/******/ }
|
|
19
|
+
]);
|
|
20
|
+
});
|
|
@@ -0,0 +1,20 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
(function webpackUniversalModuleDefinition(root, factory) {
|
|
3
|
+
if(typeof exports === 'object' && typeof module === 'object')
|
|
4
|
+
module.exports = factory();
|
|
5
|
+
else if(typeof define === 'function' && define.amd)
|
|
6
|
+
define("spyne", [], factory);
|
|
7
|
+
else if(typeof exports === 'object')
|
|
8
|
+
exports["spyne"] = factory();
|
|
9
|
+
else
|
|
10
|
+
root["spyne"] = factory();
|
|
11
|
+
})(self, function() {
|
|
12
|
+
return (self["webpackChunkspyne"] = self["webpackChunkspyne"] || []).push([[27],{},
|
|
13
|
+
/******/ __webpack_require__ => { // webpackRuntimeModules
|
|
14
|
+
/******/ var __webpack_exec__ = (moduleId) => (__webpack_require__(__webpack_require__.s = moduleId))
|
|
15
|
+
/******/ __webpack_require__.O(0, [11], () => (__webpack_exec__(666)));
|
|
16
|
+
/******/ var __webpack_exports__ = __webpack_require__.O();
|
|
17
|
+
/******/ return __webpack_exports__;
|
|
18
|
+
/******/ }
|
|
19
|
+
]);
|
|
20
|
+
});
|