spyne 0.16.2 → 0.18.2
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 +1 -1
- package/README.md +0 -60
- package/karma.conf.js +18 -69
- package/lib/spyne.js +29755 -28678
- package/lib/spyne.min.js +1 -1
- package/lib/spyne.min.js.LICENSE.txt +9 -9
- package/package.json +21 -42
- package/src/spyne/channels/channel-fetch-class.js +25 -5
- package/src/spyne/channels/channel-payload-class.js +36 -23
- package/src/spyne/channels/channel-proxy.js +7 -5
- package/src/spyne/channels/channel.js +54 -28
- package/src/spyne/channels/channels-config.js +2 -4
- package/src/spyne/channels/{channels-delegator.js → channels-map.js} +24 -40
- package/src/spyne/channels/spyne-channel-lifecycle.js +1 -2
- package/src/spyne/channels/spyne-channel-route.js +21 -62
- package/src/spyne/channels/spyne-channel-ui.js +1 -2
- package/src/spyne/channels/spyne-channel-window.js +24 -35
- package/src/spyne/spyne-app.js +165 -0
- package/src/spyne/spyne-plugins.js +39 -41
- package/src/spyne/spyne.js +6 -158
- package/src/spyne/utils/channel-config-validator.js +0 -1
- package/src/spyne/utils/channel-fetch-util.js +1 -2
- package/src/spyne/utils/channel-payload-filter.js +9 -76
- package/src/spyne/utils/frp-tools.js +21 -1
- package/src/spyne/utils/gc.js +1 -1
- package/src/spyne/utils/route-channel-updater.js +0 -4
- package/src/spyne/utils/spyne-app-properties.js +183 -0
- package/src/spyne/utils/spyne-logger.js +18 -0
- package/src/spyne/utils/spyne-plugins-methods.js +97 -0
- package/src/spyne/utils/spyne-trait.js +2 -5
- package/src/spyne/utils/spyne-utils-channel-route-url.js +3 -8
- package/src/spyne/utils/spyne-utils-channel-route.js +6 -14
- package/src/spyne/utils/spyne-utils-channel-window.js +1 -3
- package/src/spyne/utils/viewstream-observables.js +2 -3
- package/src/spyne/views/dom-element-template.js +2 -7
- package/src/spyne/views/dom-element.js +0 -19
- package/src/spyne/views/view-stream-broadcaster.js +5 -10
- package/src/spyne/views/view-stream-element.js +1 -18
- package/src/spyne/views/view-stream-payload.js +31 -37
- package/src/spyne/views/view-stream-selector.js +3 -8
- package/src/spyne/views/view-stream.js +281 -297
- package/src/tests/channels/channel-fetch.test.js +102 -0
- package/src/tests/channels/channel-payload-class.test.js +14 -5
- package/src/tests/channels/channel-payload-filter.test.js +3 -28
- package/src/tests/channels/channel.test.js +38 -0
- package/src/tests/index.js +0 -1
- package/src/tests/index.test.js +6 -0
- package/src/tests/spyne-app.test.js +27 -0
- package/src/tests/spyne-plugin.test.js +13 -9
- package/src/tests/utils/plugins-methods.test.js +103 -0
- package/src/tests/utils/spyne-app-properties.test.js +11 -0
- package/webpack.config.js +19 -34
- package/lib/channel-action-filter.test.3516417154.js +0 -20
- package/lib/channel-dom.test.104366832.js +0 -20
- package/lib/channel-fetch-util.test.3506167575.js +0 -20
- package/lib/channel-payload-class.test.1081032524.js +0 -20
- package/lib/channel-payload-filter.test.977308429.js +0 -20
- package/lib/channel-route.test.3513636042.js +0 -20
- package/lib/channel-stream-item.test.119388071.js +0 -20
- package/lib/channel-ui.test.3778619579.js +0 -20
- package/lib/channel-util-dom.test.908537750.js +0 -20
- package/lib/commons.js +0 -49274
- package/lib/dom-el-selectors.test.1268485916.js +0 -20
- package/lib/dom-el-template.test.842696987.js +0 -20
- package/lib/dom-el.test.2045076905.js +0 -20
- package/lib/frp-tools.test.2503042868.js +0 -20
- package/lib/import.test.2658619365.js +0 -20
- package/lib/index.test.2372977745.js +0 -20
- package/lib/route-utils.test.273346057.js +0 -20
- package/lib/runtime.js +0 -172
- package/lib/spyne-plugin.test.301647328.js +0 -20
- package/lib/spyne.js.map +0 -1
- package/lib/url-utils.test.1931189114.js +0 -20
- package/lib/view-stream-broadcaster.test.1306675435.js +0 -20
- package/lib/view-stream-enhancer-loader.test.3617829096.js +0 -20
- package/lib/view-stream-enhancer.test.1053738169.js +0 -20
- package/lib/view-stream.test.573231784.js +0 -20
- package/src/spyne/channels/lifestream-payload.js +0 -56
- package/src/spyne/utils/channel-data-packet-generator.js +0 -200
- package/src/spyne/utils/channel-data-packet.js +0 -59
- package/src/spyne/utils/viewstream-dom-utils.js +0 -51
- package/src/spyne/views/view-stream-enhancer-loader.js +0 -70
package/lib/spyne.min.js
CHANGED
|
@@ -1,2 +1,2 @@
|
|
|
1
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(()=>{var s={360:(e,t,r)=>{e.exports=r(989)},989:e=>{e.exports=o;var t=Object.create,r=function(){throw new Error("Not implemented.")},s=function(){return this};function o(){}function n(e){this.value=e}function i(e){this.value=e}n.prototype=t(o.prototype),i.prototype=t(o.prototype),o.Failure=function(e){return new n(e)},o.prototype.Failure=o.Failure,o.Success=function(e){return new i(e)},o.prototype.Success=o.Success,o.fromNullable=function(e){return null!=e?new i(e):new n(e)},o.prototype.fromNullable=o.fromNullable,o.fromEither=function(e){return e.fold(o.Failure,o.Success)},o.prototype.isFailure=!1,n.prototype.isFailure=!0,o.prototype.isSuccess=!1,i.prototype.isSuccess=!0,o.of=function(e){return new i(e)},o.prototype.of=o.of,o.prototype.ap=r,n.prototype.ap=function(e){return e.isFailure?this.Failure(this.value.concat(e.value)):this},i.prototype.ap=function(e){return e.isFailure?e:e.map(this.value)},o.prototype.map=r,n.prototype.map=s,i.prototype.map=function(e){return this.of(e(this.value))},o.prototype.toString=r,n.prototype.toString=function(){return"Validation.Failure("+this.value+")"},i.prototype.toString=function(){return"Validation.Success("+this.value+")"},o.prototype.isEqual=r,n.prototype.isEqual=function(e){return e.isFailure&&e.value===this.value},i.prototype.isEqual=function(e){return e.isSuccess&&e.value===this.value},o.prototype.get=r,n.prototype.get=function(){throw new TypeError("Can't extract the value of a Failure(a).")},i.prototype.get=function(){return this.value},o.prototype.getOrElse=r,n.prototype.getOrElse=function(e){return e},i.prototype.getOrElse=function(e){return this.value},o.prototype.orElse=r,i.prototype.orElse=s,n.prototype.orElse=function(e){return e(this.value)},o.prototype.merge=function(){return this.value},o.prototype.fold=r,n.prototype.fold=function(e,t){return e(this.value)},i.prototype.fold=function(e,t){return t(this.value)},o.prototype.cata=r,n.prototype.cata=function(e){return e.Failure(this.value)},i.prototype.cata=function(e){return e.Success(this.value)},o.prototype.swap=r,n.prototype.swap=function(){return this.Success(this.value)},i.prototype.swap=function(){return this.Failure(this.value)},o.prototype.bimap=r,n.prototype.bimap=function(e,t){return this.Failure(e(this.value))},i.prototype.bimap=function(e,t){return this.Success(t(this.value))},o.prototype.failureMap=r,i.prototype.failureMap=s,n.prototype.failureMap=function(e){return this.Failure(e(this.value))},o.prototype.leftMap=o.prototype.failureMap,i.prototype.leftMap=i.prototype.failureMap,n.prototype.leftMap=n.prototype.failureMap},205:e=>{"use strict";e.exports=t},443:e=>{"use strict";e.exports=r},318:t=>{"use strict";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.n=e=>{var t=e&&e.__esModule?()=>e.default:()=>e;return n.d(t,{a:t}),t},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(()=>{"use strict";n.r(i),n.d(i,{Channel:()=>ce,ChannelFetch:()=>be,ChannelFetchUtil:()=>Ce,ChannelPayload:()=>T,ChannelPayloadFilter:()=>X,ChannelsDelegator:()=>Te,DomEl:()=>D,DomElement:()=>I,DomElementTemplate:()=>O,SpyneApp:()=>Oe,SpynePlugin:()=>ve,SpyneTrait:()=>Ae,ViewStream:()=>ne,ViewStreamBroadcaster:()=>j,ViewStreamElement:()=>V,ViewStreamPayload:()=>x,ViewStreamSelector:()=>se,deepMerge:()=>v});var e=n(205);const t=t=>{if(void 0!==t.constructor.name)return t.constructor.name;let r=t.toString();return(0,e.defaultTo)(String(r).substr(0,12),(0,e.match)(/^(function\s)(\w+)(\(.*)$/,r)[2])},r=(t,r=[])=>{r=(0,e.concat)(["length","name","prototype","constructor"],r);let s=(0,e.compose)((0,e.without)(r),e.uniq),o=s(Object.getOwnPropertyNames(t.constructor.prototype)),n=s((i=t.constructor,Object.getOwnPropertyNames(i)));var i;return{methods:o,staticMethods:n,allMethods:(0,e.concat)(o,n)}},s=n(318),o=n(318);let a=()=>({includes:()=>void 0!==window.Spyne?(t=>{let r=[];return(0,e.forEach)(((e,t,s)=>r.push(t)),t),r})(window.Spyne.channels.map):["CHANNEL_ROUTE","CHANNEL_UI","CHANNEL_WINDOW","DISPATCHER"]}),c=["LOAD","RENDER","MOUNT","UNMOUNT","DISPOSE","GARBAGE_COLLECT","UPDATE"],l=["parent","self","child","children","view"],d=["Observable","BehaviorSubject","Subject","Observer","Subscriber","FromEventObservable"],p=["subscribe","combineLatest"],h=[],u=[],E=[],m=null,N=null,g=null,_=null,y=null,S=null;if(void 0!==e.compose&&void 0!==s){h=[{error:`need to match a valid name within ${d}`,predicate:e=>a().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)}],u=[{error:"needs vsid number in srcElement",predicate:(0,e.compose)((0,e.is)(String),(0,e.path)(["data","srcElement","vsid"]))},{error:"needs a id in srcElement",predicate:(0,e.compose)((0,e.is)(String),(0,e.path)(["data","srcElement","id"]))}],E=function(){return[].concat(h).concat(u)};let t=[{error:`need to match a valid name within ${d}`,predicate:e=>a().includes(e.name)},{error:`needs one of the following step strings: ${c}`,predicate:e=>c.includes(e.STEP)},{error:`type needs to one of the following: ${l}`,predicate:e=>l.includes(e.type)},{error:"viewId needs to be added ",predicate:e=>void 0!==e.viewId}];N=function(){return[].concat(t)},g=function(){return[{error:"DISPOSE STEP requires a disposeItem param in the data object",predicate:e=>"DISPOSE"===e.STEP&&void 0!==e.data.disposeItems}].concat(t)},_=function(){return[{error:"UPDATE STEP requires a data object ",predicate:e=>"UPDATE"===e.STEP&&void 0!==e.data}].concat(t)},m=function(){return t.concat(h).concat(u)},y=function(){return[].concat(h).concat(u)},S=function(){let e=[{error:"param 'name' must be of a registered type",predicate:e=>a().includes(e.name)},{error:"param 'observable' must contain a valid Observable",predicate:e=>d.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 o,action:"subscribe"},structure:{type:String,observable:s||o,action:String},validations:e},{init:{name:"UBU",observable:()=>new o,action:"subscribe"},structure:{type:String,observable:s||o,action:String},validations:e}]}}}class T{constructor(t,r,s,o,n,i){let a=t;i&&console.time(i);let c={channelName:t,action:r,srcElement:o,event:n};if(c.payload=T.deepFreeze(s),!0===(0,e.pathEq)(["Spyne","config","debug"],!0)(window)&&s.hasOwnProperty("payload")){let e=JSON.stringify(s);console.warn(`Spyne Warning: the following payload contains a nested payload property which may create conflicts: Action: ${r}, ${e}`)}c.props=()=>(0,e.clone)((0,e.mergeAll)([{payload:T.deepClone(c.payload)},c.payload,{channel:a},{event:n},c.srcElement,{action:c.action}]));const l=window.Spyne.getChannelActions(a);return T.validateAction(r,a,l),"CHANNEL_ROUTE"===a&&(c.location=T.getLocationData()),c._dir=void 0,Object.defineProperties(c,{$dir:{get:()=>c._dir,set:e=>c._dir=e}}),i&&console.timeEnd(i),c}static validateAction(t,r,s){let o=(0,e.includes)(t,s);return!1===o&&void 0!==window.Spyne&&console.warn(`warning: Action: '${t}' is not registered within the ${r} channel!`),o}static getLocationData(){return(0,e.pickAll)(["href","origin","protocol","host","hostname","port","pathname","search","hash"],window.location)}static getStreamItem(){}static deepClone(t){const r=(0,e.is)(Array),s=(0,e.is)(Object);var o;return!1===r(o=t)&&!0===s(o)?(0,e.compose)(e.fromPairs,e.toPairs,e.clone)(t):(0,e.clone)(t)}static deepFreeze(t){const r=(0,e.compose)((0,e.lte)(0),(0,e.defaultTo)(-1),(0,e.prop)("nodeType"));try{Object.freeze(t),Object.getOwnPropertyNames(t).forEach((function(e){!t.hasOwnProperty(e)||!1!==r(t[e])||null===t[e]||"object"!=typeof t[e]&&"function"!=typeof t[e]||Object.isFrozen(t[e])||T.deepFreeze(t[e])}))}catch(e){return t}return t}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 f(){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 A(e){return e&&"object"==typeof e&&"[object RegExp]"!==Object.prototype.toString.call(e)&&"[object Date]"!==Object.prototype.toString.call(e)}function C(e,t){return t&&!0===t.clone&&A(e)?v((r=e,Array.isArray(r)?[]:{}),e,t):e;var r}function b(e,t,r){let s=e.slice();return t.forEach((function(t,o){void 0===s[o]?s[o]=C(t,r):A(t)?s[o]=v(e[o],t,r):-1===e.indexOf(t)&&s.push(C(t,r))})),s}function v(e,t,r){let s=Array.isArray(t),o=(r||{arrayMerge:b}).arrayMerge||b;return s?Array.isArray(e)?o(e,t,r):C(t,r):function(e,t,r){let s={};return A(e)&&Object.keys(e).forEach((function(t){s[t]=C(e[t],r)})),Object.keys(t).forEach((function(o){A(t[o])&&e[o]?s[o]=v(e[o],t[o],r):s[o]=C(t[o],r)})),s}(e,t,r)}v.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 v(e,r,t)}))};class O{constructor(t,r){this.template=this.formatTemplate(t),(()=>{!0===(0,e.is)(Array,r)&&(r={spyneData:r},this.template=this.template.replace("{{/}}","{{/spyneData}}"),this.template=this.template.replace("{{#}}","{{#spyneData}}"))})(),this.templateData=r;let s=O.getStringArray(this.template),o=this.template.match(O.findTmplLoopsRE());o=null===o?[]:o;const n=O.parseTmplLoopsRE(),i=this.parseTheTmplLoop.bind(this),a=(0,e.includes)(e.__,o),c=(0,e.ifElse)(a,((e,t)=>e.replace(n,i)),this.addParams.bind(this));this.finalArr=s.map(c)}static getStringArray(t){let r=t.split(O.findTmplLoopsRE());const s=/^([\\n\s\W]+)$/;return(0,e.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(t){return"SCRIPT"===(0,e.prop)("nodeName",t)?t.innerHTML:t}getDataValFromPathStr(t,r){const s=String(t).split(".");return(0,e.path)(s,r)||""}addParams(e){const t=/(\.)/gm;return e.replace(O.swapParamsForTagsRE(),((e,r,s,o)=>!1===t.test(s)&&void 0!==this.templateData[s]?this.templateData[s]:this.getDataValFromPathStr(s,this.templateData)))}parseTheTmplLoop(t,r,s,o){const n=/(\.)/gm,i=o;let a=this.templateData[s];const c=(e,t)=>t.replace(O.swapParamsForTagsRE(),((t,r,s)=>!1===n.test(s)&&void 0!==e[s]?e[s]:this.getDataValFromPathStr(s,e)));return!0===(0,e.isNil)(a)||(0,e.isEmpty)(a)?"":(void 0===a.length&&(a=[a]),a.map((e=>"string"==typeof e?((e,t)=>t.replace(O.swapParamsForTagsRE(),e))(e,i):c(e,i))).join(""))}}class I{constructor(t={}){var r;t.tagName=("div",r=t.tagName,(0,e.defaultTo)("div")(r)),t.attributes=void 0!==t.attributes?t.attributes:this.getDomAttributes(t),t.attrs=this.updateAttrs(t.attributes),t.fragment=document.createDocumentFragment(),this.props=t,this.addMixins()}setProp(e,t){this.props[e]=t}getProp(e){return this.props[e]}get el(){return this.props.el}setElAttrs(t,r){return this.getProp("attrs").forEach(((r,s)=>{"dataset"===s?(0,e.forEachObjIndexed)(((e,r)=>{t.dataset[r]=e}),r):t.setAttribute(s,r)})),t}updateAttrs(t,r){let s=void 0!==r?r:new Map;return(0,e.mapObjIndexed)(((e,t)=>s.set(t,e)),t),s}addTemplate(t){let r=this.getProp("template");return void 0!==r?(r=>{let s=this.getProp("data");s=(0,e.is)(Object,s)?s:{};let o=new O(r,s).renderDocFrag();return(0,e.is)(String,o)?t.innerHTML=o:t.appendChild(o),t})(r):t}createElement(e="div"){return document.createElement(e)}addContent(t){let r=this.getProp("data");if(!0===(0,e.is)(String,r)){let e=document.createTextNode(r);t.appendChild(e)}return t}execute(){let t=(0,e.pipe)(this.createElement.bind(this),this.setElAttrs.bind(this),this.addTemplate.bind(this),this.addContent.bind(this))(this.getProp("tagName"));this.props.el=t}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:v(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=f();this.gc=e.gc.bind(this)}getDomAttributes(t){return(0,e.pick)(this.attributesArray,t)}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 D=I;let L=(e=!1,t=1,r="ease",s=!1)=>`${!0===s?"opacity:0;":""}transition: opacity ${t}s ${r}; opacity: ${!0===e?1:0};`;var w=n(318),R=n(443);class P{constructor(e){this.props.observableStreams=P.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(t){return(0,e.flip)(e.mergeRight)({$dir:["internal"]},(0,e.clone)(t))}static addDownInternalDir(t,r=["internal","down"]){return(0,e.flip)(e.mergeRight)((0,e.clone)(t),{$dir:r})}static addChildAndInternalDir(t,r=["child","down"]){return(0,e.flip)(e.mergeRight)((0,e.clone)(t),{$dir:r})}static mapToDefaultDir(e){return this.addDefaultDir(e)}static createDirectionalObservables(t=new w.Subject,r,s){void 0!==r&&void 0!==s&&(t.viewName=r,t.vsid=s);const o=t=>(0,e.propSatisfies)((e=>e.includes(t)),"$dir"),n=o("parent"),i=o("child"),a=o("internal"),c=t=>(0,e.mergeRight)({from$:t}),l=c("child"),d=c("internal"),p=c("parent"),h=t.pipe((0,R.filter)((e=>void 0!==e&&void 0!==e.action))),u=t.pipe((0,R.filter)(a),(0,R.map)(d)),E=t.pipe((0,R.filter)(n),(0,R.map)(l)),m=t.pipe((0,R.filter)(i),(0,R.map)(p)),N={parent:E,internal:u,child:m};return{raw$:h,toInternal$:u,toParent$:E,toChild$:m,completeAll:()=>{(0,e.forEach)((e=>{e.complete(),e.isStopped=!0}),[h,u,E,m])},completeStream:(e=[])=>{void 0!==e&&e.length>=1&&e.forEach((e=>{var t;void 0!==N[e]&&((t=N[e]).complete(),t.isStopped=!0)}))}}}}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=v(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 v({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 t=(0,e.filter)((e=>void 0!==e),(0,e.pick)(["id","className"],this.props)),{tagName:r,data:s,template:o}=this.props;return new I(r,t,s,o)}onDisposeCompleted(e){}animateInTween(e,t){!function(e,t){let r=1*window.getComputedStyle(e).opacity,s=L(!0,t,"ease",1===r);e.style.cssText+=s}(e,t)}animateOutTween(e,t,r){!function(e,t,r){let s=L(!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=(0,w.bindCallback)(((e,r)=>{this.animateOutTween(t,e.animateOutTime,r)})),o=e=>{this._source$.next(r)};return(!0===e.animateOut?e=>(s(e).subscribe(o),{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(t){let r=(0,e.isNil)(t.query)?t.node:t.query;("appendChild"===t.attachType?(e,t)=>e.appendChild(t):(e,t)=>e.insertBefore(t,e.firstChild))(r,this.domItem.render()),this.setAnimateIn(t)}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 I({tagName:t,attributes:r,data:s,template:o}),this.domItem}onRender(t){return{action:"VS_SPAWNED",el:(e=>this.renderDomItem(e))((0,e.props)(["tagName","domAttributes","data","template"],t)),$dir:this.$dirs.I}}extendedMethods(e){}onRenderAndAttachToDom(t){return t.attachData.el=(e=>this.renderDomItem(e))((0,e.props)(["tagName","domAttributes","data","template"],t)),this.combineDomItems(t.attachData),{action:"VS_SPAWNED_AND_ATTACHED_TO_DOM",el:t.attachData.el.el,$dir:this.$dirs.CI}}onObsSinkSubscribe(t){let r=t.action,s=(0,e.defaultTo)((e=>this.extendedMethods(e)))(this.options.hashMethods[r])(t);void 0!==s&&(e=>{this._source$.next(e)})(Object.freeze(s))}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=r(this.context).allMethods;this.updateMap("LOCAL",e)}getEnhancersMap(){return this.enhancersMap}updateMap(t,r){let s=(0,e.concat)(this.enhancersMap.get("ALL"),r);this.enhancersMap.set(t,r),this.enhancersMap.set("ALL",s)}getMethodsArr(e){return this.enhancersMap.get(e)}createEnhancerMethodsObj(t){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 t(this.context),o=s.getEnhancerMethods(),n=(t=>{let s=(0,e.includes)(e.__,this.getMethodsArr("ALL")),o=(0,e.filter)(s,t);return o.forEach(r),o})(o.allMethods),i=(0,e.dropWhile)((0,e.includes)(e.__,n));return o=(0,e.map)(i,o),this.updateMap(s.name,o.allMethods),o.enhancer=s,o.name=s.name,o}addAllEnhancerMethods(){(0,e.forEach)((e=>{let t=this.createEnhancerMethodsObj(e);t.enhancer.bindParentViewStream(t,this.context)}),this.enhancersArr)}}var M=n(360),F=n.n(M);const W=F().Success,$=F().Failure;let U=()=>{};function k(){setTimeout((()=>{(0,e.forEach)((e=>{}),this)}),1)}void 0!==e.curry&&(U=(0,e.curry)(((t,r)=>{const s=W((0,e.curryN)((0,e.length)(t),(0,e.always)(r)));return(0,e.reduce)(((e,t)=>e.ap(t.predicate(r)?W(r):$([t.error]))),s,t)})));class x{constructor(e,t,r,s="subscribe",o=!1){this.addMixins(),this.options={name:e,observable:t,data:r,action:s},this.getValidationChecks(e)}getValidationChecks(e){return!0===window.Spyne.channels.map.has(e)?(e=>this.onRunValidations(e))(E):("payload Needs a Valid Stream Name!",console.warn("payload Needs a Valid Stream Name!"))}onRunValidations(e){U(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=k}}class j{constructor(e,t){this.addMixins(),this.props=e,this.broadcastFn=t,this.broadcaster(this.broadcastFn)}addDblClickEvt(t){return(0,w.fromEvent)(t,"dblclick").pipe((0,R.map)((t=>{let r=(0,e.clone)(t);return r.typeOverRide="dblclick",r})))}broadcast(t){let r,s={UI:this.sendUIPayload,ROUTE:this.sendRoutePayload},[o,n,i]=t,a=this.props.el.querySelectorAll(o);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(o);r.forEach=Array.prototype.forEach,r.forEach(t)})()}let c=void 0!==i,l=!0===(0,e.path)(["Spyne","config","debug"],window);!0==(void 0===a||a.length<=0)&&!0===l?console.warn(`Spyne Warning: The item ${o}, does not appear to exist!`):(a.forEach=Array.prototype.forEach,a.forEach((t=>{let o="dblClick"!==n?(0,w.fromEvent)(t,n,{preventDefault:()=>!0}):this.addDblClickEvt(t);r=t.dataset.channel;let i={};i.payload=(e=>{let t={};for(let r in e)t[r]=e[r];return t})(t.dataset),i.payload=(0,e.omit)(["channel"],i.payload),i.channel=r,i.srcElement={},i.srcElement.id=this.props.id,i.srcElement.vsid=this.props.vsid,i.srcElement.isLocalEvent=c,i.srcElement.srcEvent=n,i.srcElement.el=t,(void 0!==r?s[r]:s.UI)(o,i)})))}broadcaster(e){e().forEach((e=>this.broadcast(e)))}addMixins(){let e=function(e,t){return new x("CHANNEL_ROUTE",e,t,"subscribe")},t=function(e,t){return new x("CHANNEL_UI",e,t,"subscribe")};this.sendUIPayload=t,this.sendRoutePayload=e}}const G=n(205).map,q=(0,e.compose)(e.not,(0,e.is)(Array)),Y=(0,e.compose)(e.not,e.isEmpty),B=(0,e.allPass)([(0,e.is)(String),Y]),z=(0,e.allPass)([(0,e.is)(Array),Y]),K=(0,e.compose)((0,e.allPass)([q,(0,e.is)(Object)])),Q=(0,e.compose)((0,e.allPass)([Y,q,(0,e.is)(Object)]));class X{constructor(t,r={},s,o){K(t)&&(r=t,t=(0,e.prop)("selector",r),o=o||(0,e.prop)("testMode",r));const n=[s,(0,e.prop)("debugLabel",r)];s=(0,e.compose)((0,e.find)((0,e.is)(String)))(n);let i=(0,e.omit)(["debugLabel","label","selector","props","testMode","propFilters"],r);void 0!==r.props?i=(0,e.mergeAll)([r.props,i]):void 0!==r.propFilters&&(i=(0,e.mergeAll)([r.propFilters,i])),r.propFilters=i;let{propFilters:a}=r;const c=B(t)?X.filterSelector([t],s):void 0,l=z(t)?X.filterSelector(t,s):void 0,d=Q(a)?X.filterData(a,s):void 0;let p=(0,e.reject)(e.isNil,[c,l,d]);const h=(0,e.isEmpty)(p);return h&&(p=[(0,e.always)(!1)],!0===(0,e.path)(["Spyne","config","debug"],window)&&!0!==o&&console.warn(`Spyne Warning: The Channel Filter, with selector: ${t}, and propFilters:${a} appears to be empty!`)),!0===o?{selector:t,propFilters:a,debugLabel:s,filters:r,testMode:o,filtersAreEmpty:h}:(0,e.allPass)(p)}static filterData(t,r){const s=r;return(()=>{if((0,e.isEmpty)(t))return(0,e.always)(!1);t=G(((t,r,s)=>{return!0===(0,e.is)(String,t)?(o=t,e=>e===o):t;var o}),t);let r=(0,e.where)(t);return(0,e.compose)(r,(r=>{if(void 0===s)return r;const o={};return(0,e.forEachObjIndexed)(((t,s)=>o[s]=t((0,e.prop)(s,r))),t),console.log(`%c CHANNEL PAYLOAD FILTER DEBUGGER ["${s}"] - values: `,"color:orange;",{propsBooleans:o,comparedObj:r}),r}),(0,e.defaultTo)({}),(e=>{const{payload:t,srcElement:r,event:s}=e||{};return Object.assign({},e,s,r,t)}))})()}static checkPayloadSelector(t,r,s){const{payload:o,srcElement:n,event:i}=s||{},a=[n,o,(0,e.prop)("srcElement",i),s].reduce(((t,r)=>{const s=(0,e.prop)("el",r);return X.elIsDomElement(s)&&void 0===t&&(t=s),t}),void 0),c=e=>e.isEqualNode(a),l=t=>{let r=(0,e.flatten)(document.querySelectorAll(t));return G(c,r)};if(void 0!==r){let s=(0,e.compose)(e.flatten,G(l))(t);const o=t;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,e.compose)(e.flatten,G(l))(t);return!0!==(0,e.isEmpty)(d)&&(0,e.any)((0,e.equals)(!0),d)}static elIsDomElement(t){return(0,e.is)(String,t)&&(t=document.querySelector(t)),(0,e.compose)((0,e.lte)(0),(0,e.defaultTo)(-1),(0,e.prop)("nodeType"))(t)}static filterSelector(t,r){let s=(0,e.reject)(e.isEmpty,t);return(0,e.curry)(X.checkPayloadSelector)(s,r)}}function J(){return!0===(0,e.path)(["Spyne","config","debug"],window)}function Z(t,r,s=!1){let o=te(t,r,s);return 1===o.length?(0,e.head)(o):o}function ee(t,r,s){let o=document.querySelector(t);!1!==(0,e.compose)((0,e.lte)(0),(0,e.defaultTo)(-1),(0,e.prop)("nodeType"))(o)?void 0!==r&&null===o.querySelector(r)&&!0===J()&&!0===s&&console.warn(`Spyne Warning: the selector, ${r} does not exist in this el, ${t}`):console.warn(`Spyne Warning: the el object is not a valid single element, ${o}`)}function te(e,t,r=!1){let s=void 0!==t?`${e} ${t}`:e;return!0===r&&ee(e,t,r),(e=>{try{document.querySelectorAll(e)}catch(e){return[]}return document.querySelectorAll(e)})(s)}function re(e,t,r){return te(t,r).forEach((t=>{t.style.cssText=e})),this}function se(t,r){function s(e){return se(t,e)}return ee(t="string"==typeof t?t: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}']`}(t),r,!1),s.map=e=>Array.from(te(t,r)).map(e),s.forEach=e=>Array.from(te(t,r)).map(e),s.getNodeListArray=()=>te(t,r),s.addClass=e=>(te(t,r).forEach((t=>t.classList.add(e))),this),s.removeClass=e=>(te(t,r).forEach((t=>{t.classList.remove(e)})),this),s.setClass=s=>(te(t,r).forEach((t=>{let r=(0,e.compose)((0,e.reject)(e.isEmpty),(0,e.split)(" "))(t.className),o=s.split(" ");r.forEach((e=>t.classList.remove(e))),o.forEach((e=>t.classList.add(e)))})),this),s.unmount=()=>{},s.toggleClass=(e,s)=>(te(t,r).forEach((t=>{(s=void 0!==s?s:!t.classList.contains(e))?t.classList.add(e):t.classList.remove(e)})),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=e=>{window.setTimeout((()=>{te(t,r).forEach((t=>t.classList.add(e)))}),1)},s.setActiveItem=(s,o)=>{let n=te(t,r),i="string"==typeof o?Z(t,o):o;var a;return!0===(a=i,(0,e.compose)((0,e.lte)(0),(0,e.defaultTo)(-1),(0,e.prop)("nodeType"))(a))?n.forEach((e=>e.isEqualNode(i)?e.classList.add(s):e.classList.remove(s))):!0===J()&&console.warn(`Spyne Warning: The selector, ${o}, does not appear to be a valid item in setActiveItem: ${s}`),this},Object.defineProperty(s,"el",{get:()=>Z(t,r,!0)}),Object.defineProperty(s,"els",{get:()=>te(t,r)}),Object.defineProperty(s,"len",{get:()=>te(t,r,!1).length}),Object.defineProperty(s,"exists",{get:()=>te(t,r,!1).length>=1}),Object.defineProperty(s,"exist",{get:()=>te(t,r,!1).length>=1}),Object.defineProperty(s,"nodeList",{get:()=>te(t,r)}),Object.defineProperty(s,"arr",{get:()=>{let e=Z(t,r,!0);return void 0===e?[]:void 0===e.length?[e]:Array.from(e)}}),Object.defineProperty(s,"inline",{set:e=>re(e,t,r)}),Object.defineProperty(s,"inlineCss",{set:e=>re(e,t,r)}),s}const oe=n(205).map;class ne{constructor(r={}){this.vsnum=Math.random(),this.addMixins(),this.defaults=()=>{const e=this.createId(),s=r.id?r.id:e;return{vsid:e,id:s,tagName:"div",el:void 0,data:void 0,animateIn:!1,animateInTime:.5,animateOut:!1,animateOutTime:.5,sendLifecyleEvents:!1,hashId:`#${s}`,id$:`#${s}`,viewClass:V,extendedSourcesHashMethods:{},debug:!1,template:void 0,node:document.createDocumentFragment(),name:t(this)}},this._state={},this.$dirs=P.createDirectionalFiltersObject(),this.addDefaultDirection=P.addDefaultDir,this.addDownInternalDir=P.addDownInternalDir,this.props=v(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,e.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 w.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=ne.isDevMode(),this.props.addedChannels=[],this.checkIfElementAlreadyExists()}updatePropsToMatchEl(){const t=(0,e.compose)(e.toLower,(0,e.either)((0,e.prop)("tagName"),(0,e.always)("")));this.props.tagName=t(this.props.el)}checkIfElementAlreadyExists(){const t=(0,e.compose)((0,e.lte)(0),(0,e.defaultTo)(-1),(0,e.prop)("nodeType"));(0,e.propSatisfies)((0,e.allPass)([e=>document.body.contains(e),t]),"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 t=(0,e.curry)(this.onChannelMethodCall.bind(this));this.addActionListeners().forEach((r=>{let[s,o,n]=r;(0,e.is)(String,n)&&(n=new X({selector:n})),this.props.extendedSourcesHashMethods[s]=t(o,n)})),this.props.hashSourceMethods=this.setSourceHashMethods(this.props.extendedSourcesHashMethods)}addActionListeners(){return[]}onChannelMethodCall(t,r,s){if(void 0!==s.$dir&&s.$dir.includes("child")&&!0!==this.deleted){let e=v({},s);e.$dir=this.$dirs.C,this.sourceStreams.raw$.next(e)}let o=(0,e.defaultTo)((0,e.always)(!0),r);Math.floor(999999*Math.random()),!0===o(s)&&(e=>{void 0===this[t]?console.warn(`Spyne Warning: The method, ${t} does not appear to exist in ${this.constructor.name}!`):this[t](e)})(s=(0,e.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 v.all([{},t,e])}initViewStream(){this._source$=this._rawSource$.pipe((0,R.map)((e=>this.onMapViewSource(e))),(0,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((0,R.filter)((e=>void 0!==e&&void 0!==e.action)),(0,R.map)((e=>{let t=v({},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,R.filter)((e=>void 0!==e&&void 0!==e.action)),(0,R.tap)((e=>this.tracer("addChildStraem do ",e))),(0,R.map)((e=>e)),(0,R.finalize)((e=>this.onChildCompleted(t.source))));this.updateSourceSubscription(t,!0,"CHILD")}onChildDisposed(e){}onChildCompleted(t){let r=(t=>{let r=e=>{for(;void 0!==e.destination;)e=r(e.destination);return e};return(0,e.pick)(["id","vsid"],r(t))})(t);return this.tracer("onChildCompleted ",this.vsnum,t),this.onChildDisposed(r,t),r}static removeDataFromTmpDir(t){void 0!==(0,e.path)(["Spyne","config","tmp"],window)[t]&&delete window.Spyne.config.tmp[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((0,R.mergeMap)((e=>{let t=e.observable.pipe((0,R.filter)((e=>void 0!==e&&void 0!==e.action)),(0,R.map)((e=>{let t=v({},e);return t.action=e.action,this.tracer("autoMergeSubject$",t),t})));return!1===e.autoClosesBool?t:(s+=1,t.pipe((0,R.finalize)(r)))}))),this.autoSubscriber$=this.autoMergeSubject$.pipe((0,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(t={}){let r=(0,e.defaultTo)((e=>this.sendExtendedStreams(e)));const s=void 0!==(o=this.props.hashSourceMethods)[n=t.action]?n:(0,e.compose)(e.head,(0,e.filter)((0,e.compose)((0,e.test)(e.__,n),(e=>new RegExp(e)))))((0,e.keys)(o));var o,n;r(this.props.hashSourceMethods[s])(t),this.tracer("onSubscribeToSourcesNext",{payload:t})}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(t,r=0,s=!1){window.setTimeout(((...r)=>{if(void 0!==this&&void 0!==this.props){const o=!0===s?t.bind(this):t;(0,e.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(t,r={}){if(void 0!==this.props){this.props.action=t;let s=(0,e.mergeRight)(this.props,r);this.sink$.next(Object.freeze(s))}}static isDevMode(){return!0===(0,e.path)(["Spyne","config","debug"],window)}setAttachData(t,r){return{node:this.props.el,type:"ViewStreamObservable",attachType:t,query:(()=>{let t=this.props.el.querySelector(r);return!0===ne.isDevMode()&&(0,e.is)(String,r)&&(0,e.isNil)(t)&&console.warn(`Spyne Warning: The appendView query in ${this.props.name}, '${r}', appears to not exist!`),t})()}}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){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(t={}){return this.props=(0,e.mergeRight)(this.props,t),t}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===ne.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 j(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 t=e=>e[0],r=this.addActionListeners();let s=r.map(t);if(!1===ne.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 t=t=>{const r=(0,e.defaultTo)("",t[1]);!1===(0,e.is)(Function,this[r])&&console.warn(`Spyne Warning: The method in addActionListeners nested Array, '${JSON.stringify(t)}', in ${this.props.name}, does not appear to exist!`)};(0,e.compose)((0,e.forEach)(t),(0,e.defaultTo)([]))(r)}const o=()=>{void 0!==(0,e.path)(["props","addedChannels"],this)&&ne.checkIfActionsAreRegistered.bind(this)(this.props.addedChannels,s)};this.setTimeout(o,500)}}static checkIfActionsAreRegistered(t=[],r){if(r.length>0){const s=r=>{let s=new RegExp(r);if((0,e.findIndex)((0,e.test)(s),o)<0){let e=1===t.length?"from added channel":"from added dchannels";console.warn(`Spyne Warning: The action, ${r}, in ${this.props.name}, does not match any of the registered actions ${e}, ${t.join(", ")}`)}};let o=(t=>{let r=t.map((e=>window.Spyne.channels.getChannelActions(e)));return(0,e.flatten)(r)})(t);r.forEach(s)}}setDataVSID(){this.props.el.dataset.vsid=this.props.vsid}beforeAfterRender(){this.setDataVSID(),this.props.el$=se(this.props.el)}downStream(){}onRendered(){}afterRender(){}static isValidNestedArr(t){const r=(0,e.equals)(!0),s=(0,e.all)(r),o=(0,e.is)(String),n=(0,e.compose)(s,oe(o),(0,e.slice)(0,2),(0,e.defaultTo)([]));return(0,e.compose)(s,oe(n),(0,e.defaultTo)([]))(t)}broadcastEvents(){return[]}getChannel(t){return(0,e.ifElse)((e=>a().includes(e)),(e=>window.Spyne.channels.getStream(e).observer.pipe((0,R.takeWhile)((e=>!0!==this.deleted)))),(e=>console.warn(`channel name ${e} is not within ${a}`)))(t)}addChannel(t,r=!1,s=!1,o=!1){const n=!0===s?this.$dirs.CI:this.$dirs.I,i=(0,e.path)(["srcElement","isLocalEvent"]),a=(0,e.path)(["srcElement","vsid"]),c=[(0,R.map)((e=>{let t=e;return t.$dir=n,t})),(0,R.filter)((e=>{let t=a(e);return!0!==i(e)||t===this.props.vsid}))];!0===r&&c.unshift((0,R.skip)(1));let l=this.getChannel(t).pipe(...c);this.updateSourceSubscription(l,!1),this.props.addedChannels.push(t)}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(t,r={},s="VIEWSTREAM_EVENT"){let o={payload:r,action:s};if(o.srcElement=(0,e.compose)((0,e.pick)(["id","vsid","class","tagName"]),(0,e.prop)("props"))(this),!0===this.checkIfChannelExists(t)){if(!1===/CHANNEL_LIFECYCLE/.test(s)){const t=["Spyne","config","tmp"],s=["Spyne","config","tmp",this.props.vsid];(0,e.path)(t,window)[this.props.vsid]=r;const n=this.props.vsid;Object.defineProperties(o,{payload:{get:()=>(0,e.compose)(e.clone,(0,e.path)(s))(window)}});const i=()=>ne.removeDataFromTmpDir(n);window.requestAnimationFrame(i)}let n=(0,w.of)(o);return new x(t,n,o)}}tracer(...e){this.sendLifecycleMethod(...e)}sendLifecycleMethodInactive(){}sendLifecycleMethodActive(t,r){let s="VS_DETRITUS_COLLECT"===r;!0===(0,e.where)({from$:(0,e.equals)("internal"),action:(0,e.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 X(e,t)}isLocalEvent(t){return void 0!==(0,e.path)(["srcElement","el"],t)&&this.props.el.contains(t.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=f();this.createId=e.createId}}class ie{constructor(t){let r=String(t.props.name),s=`${r}_ROUTE_UPDATER`;return(0,e.curry)(ie.createTemporaryViewStreamObj)({id:s,name:r})}static createTemporaryViewStreamObj(e,t){let{name:r,id:s}=e,o=t,n=new ne({id:s,name:r,data:t});n.onRendered=()=>{n.sendInfoToChannel("CHANNEL_ROUTE",o)},n.afterBroadcastEvents=()=>{n.disposeViewStream()},n.appendToNull()}}const ae=n(205).map;class ce{constructor(e,t={}){this.addRegisteredActions.bind(this),this.createChannelActionsObj(e,t.extendedActionsArr),t.name=e,this.props=t,this.props.isRegistered=!1,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 ie(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(){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.onRegistered(),this.props.isRegistered=!0}setTrace(e){}createChannelActionsObj(t,r=[]){const s=(0,e.ifElse)((0,e.is)(String),e.identity,e.head);let o=r.concat(this.addRegisteredActions(t)),n=ae(s,o),i=(0,e.mergeAll)((0,e.chain)((t=>(0,e.objOf)(t,t)),n));this.channelActions=i}createChannelActionMethods(){const t=(0,e.ifElse)((0,e.is)(String),e.identity,e.head),r=(0,e.ifElse)((0,e.is)(String),(0,e.always)("onViewStreamInfo"),(t=>{const r=(0,e.view)((0,e.lensIndex)(1),t);return!0==("function"==typeof this[r])?this[r].bind(this):console.warn(`"${this.props.name}", REQUIRES THE FOLLOWING METHOD ${r} FOR ACTION, ${t[0]}`),r}));this.channelActionMethods=(0,e.fromPairs)(ae((e=>[t(e),r(e)]),this.addRegisteredActions()))}addRegisteredActions(){return[]}onReceivedObservable(e){this.onIncomingObservable(e)}getActionMethodForObservable(t){t.unpacked=!0;const r=this.onViewStreamInfo.bind(this);let s=(0,e.path)(["data","action"],t);const o=(0,e.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(t){let r=(0,e.equals)(t.name,this.props.name),{action:s,payload:o,srcElement:n}=t.data,i=r=>({props:()=>{return r=t.data,(0,e.mergeAll)([r,{action:(0,e.prop)("action",r)},(0,e.prop)("payload",r),(0,e.prop)("srcElement",r)]);var r},action:s,payload:o,srcElement:n,event:r});return!0===r?(e=>e.observable.pipe((0,R.map)(i)).subscribe(this.getActionMethodForObservable(e)))(t):void 0}onViewStreamInfo(e){}sendChannelPayload(e,t,r={},s={},o=this.observer$){let n=new T(this.props.name,e,t,r,s);o.next(n)}getChannel(t,r){return(0,e.ifElse)((e=>a().includes(e)),(e=>{let t=this.streamsController.getStream(e).observer;return void 0!==r?t.pipe((0,R.filter)(r)):t}),(e=>console.warn(`channel name ${e} is not within ${a}`)))(t)}setTimeout(t,r=0,s=!1){window.setTimeout(((...r)=>{if(void 0!==this&&void 0!==this.props){const o=!0===s?t.bind(this):t;(0,e.apply)(o,r)}}),r)}}class le{constructor(){this.checkIfObjIsNotEmptyOrNil=le.checkIfObjIsNotEmptyOrNil.bind(this)}static checkIfObjIsNotEmptyOrNil(t){const r=(0,e.compose)((0,e.complement)(e.isEmpty),e.head,e.values),s=(0,e.compose)((0,e.complement)(e.isNil),e.head,e.values);return(0,e.allPass)([r,s])(t)}static checkIfParamValueMatchesRegex(t,r){const s=(0,e.reject)((0,e.equals)("routeName")),o=(0,e.compose)(s,e.keys),n=(0,e.compose)((0,e.find)((r=>(0,e.test)(new RegExp(r),t))),o)(r);return(0,e.is)(String,n)&&(r=(0,e.assoc)(t,(0,e.prop)(n,r),r)),r}static formatStrAsWindowLocation(e){return{hash:e,search:e,pathname:e}}static getLocationStrByType(t,r=!1,s=window.location){const o={slash:"pathname",query:"search",hash:"hash"}[!0===r?"hash":t];return(0,e.prop)(o,s).replace(/^(\/)?(#)?(\/)?(.*)$/,"$4")}static createRouteArrayFromParams(t,r,s="slash",o){let n=[],i=r=>{let s={},a=r.routeName,c=void 0!==t[a]?t[a]:(0,e.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,e.is)(Object,r),p=(0,e.has)(c,r),h=(0,e.has)("routePath",r);if(!0===(p&&d)){let t=r[c];(0,e.has)("routePath",t)&&i(t.routePath)}else!0===h&&void 0!==c&&i(r.routePath)};return i(r),n}static createSlashString(t){const r=(0,e.reject)(e.isNil),s=(0,e.when)((0,e.complement)(e.isNil,e.__),(0,e.join)("/")),o=(0,e.replace)(/^(\^*)(.*|^\$)(\$)$/,"$2");return(0,e.compose)(o,s,r,e.flatten,(0,e.map)(e.values))(t)}static createQueryString(t){const r=(0,e.reject)(e.isNil),s=this.checkIfObjIsNotEmptyOrNil,o=(0,e.compose)((0,e.join)("="),e.flatten,e.toPairs),n=(0,e.ifElse)(s,o,(0,e.always)(void 0)),i=(0,e.map)(n),a=(0,e.when)((0,e.complement)(e.isEmpty),(0,e.concat)("?"));return(0,e.compose)(a,(0,e.join)("&"),r,i)(t)}static checkPayloadForRegexOverrides(t,r,s="Value"){const o=(0,e.compose)((t=>(0,e.prop)(`${t}${s}`,r)),e.head,e.keys);return(0,e.map)((t=>{let r=o(t);return void 0!==r?(0,e.assoc)((0,e.compose)(e.head,e.keys)(t),r,t):t}),t)}static convertParamsToRoute(e,t=window.Spyne.config.channels.ROUTE,r,s){const o=void 0!==r?r:t.type,n=t.isHash;let i=t.routes.routePath,a=void 0!==s?s:this.getLocationStrByType(o,n),c=this.convertRouteToParams(a,t,o).routeData,l=this.createRouteArrayFromParams(e,i,o,c);return l=le.checkPayloadForRegexOverrides(l,e),"query"===o?this.createQueryString(l):this.createSlashString(l)}static findIndexOfMatchedStringOrRegex(t,r){const s=(0,e.replace)(/^$/,"^$"),o=(0,e.either)((0,e.propEq)("str",t),(0,e.compose)((0,e.test)(e.__,t),(0,e.prop)("re")));return(0,e.compose)((0,e.findLastIndex)((0,e.equals)(!0)),(0,e.map)(o),(0,e.map)((e=>{return{str:e,re:(t=e,new RegExp(t))};var t})),(0,e.map)(s))(r)}static checkIfValueShouldMapToParam(t,r,s){let o=(0,e.compose)((0,e.map)(e.last),(0,e.map)((0,e.filter)((0,e.is)(String))),e.toPairs)(t),n=le.findIndexOfMatchedStringOrRegex(r,o),i=r;if(n>=0){let r=o[n],s=(0,e.invert)(t),a=(0,e.compose)(e.head,(0,e.defaultTo)([]),(0,e.prop)(r))(s);!0===/^([-\$\w]*)$/.test(a)&&!0===(0,e.is)(String,a)&&(i=a)}return i}static createArrFromSlashStr(e){return e.replace(/^([/])?(.*)$/,"$2").split("/")}static convertSlashRouteStrToParamsObj(t,r,s){const o=r;let n=this.createArrFromSlashStr(r),i=[],a=[],c=t;(0,e.reduce)(((t,r)=>{let o=this.checkIfValueShouldMapToParam(c,r,s);c=this.checkIfParamValueMatchesRegex(r,c);const n=(0,e.either)(e.isEmpty,e.isNil);void 0!==c&&(t=>t!==(0,e.last)(i))(c.routeName)&&!1===n(o)&&(i.push(c.routeName),a.push(o));let l=[r,"routePath"],d=(0,e.path)(l,c),p=(0,e.path)(["routePath"],c);void 0!==d?c=d:void 0!==p&&(c=p)}),0,n);let l=(0,e.zipObj)(i,a);const d=this.getLastArrVal(i);return{paths:i,pathInnermost:d,routeData:l,routeValue:o}}static getLastArrVal(t){return r=t,void 0!==(0,e.last)(r)?(0,e.last)(r):"";var r}static createDefaultParamFromEmptyStr(e,t){let r={};return r[e.routeName]=this.checkIfValueShouldMapToParam(e,t),r}static convertQueryStrToParams(t,r,s){const o=r;let n=r.replace(/^([?])?(.*)$/,"$2"),i=(0,e.compose)((0,e.map)((0,e.split)("=")),(0,e.split)("&"))(n),a=(0,e.fromPairs)(i),c=(0,e.map)(e.head,i);return!0===(0,e.isEmpty)(r)&&(a=this.createDefaultParamFromEmptyStr(t,r,s),c=(0,e.keys)(a)),{paths:c,pathInnermost:this.getLastArrVal(c),routeData:a,routeValue:o}}static convertRouteToParams(t,r,s){if(void 0===r)return{};const o=void 0!==s?s:r.type,n=(0,e.defaultTo)({},(0,e.prop)("regexTokens",r));let i=r.routes.routePath;return"query"===o?this.convertQueryStrToParams(i,t):(t=t.replace(/\/$|$/,"/"),this.convertSlashRouteStrToParamsObj(i,t,n))}}class de{constructor(){this.createPopStateStream=de.createPopStateStream.bind(this)}static createPopStateStream(e){(0,w.fromEventPattern)((function(e){window.onpopstate=e}),(function(){window.onpopstate=function(){}})).subscribe(e)}static getLastArrVal(t){return r=t,void 0!==(0,e.last)(r)?(0,e.last)(r):"";var r}static compareRouteKeywords(t={},r){const s=(t,r)=>void 0!==r?(0,e.pick)(r,t):t;let o=s(t,r);return{pickValues:s,compare:(t={},r)=>{let n=s(t,r);const i=t=>(0,e.compose)(e.keys,(0,e.filter)((0,e.propEq)(t,!0))),a=(0,e.compose)((0,e.map)((t=>{let r=(0,e.prop)(t,o),s=(0,e.prop)(t,n),i=(0,e.equals)(r,s),a=void 0!==r,c=void 0!==s,l=!i,d=!1===a&&!0===c,p=!0===a&&!1===c,h={};return h[t]={same:i,changed:l,added:d,removed:p,previousExists:a,nextExists:c},h})),e.uniq,(0,e.chain)(e.keys))([o,n]);let c=(0,e.chain)(i("changed"),a),l=(0,e.chain)(i("added"),a),d=(0,e.chain)(i("removed"),a);return o=n,{pathsAdded:l,pathsRemoved:d,pathsChanged:c}},getComparer:()=>o}}static getRouteArrData(t,r){let s=(0,e.filter)((0,e.includes)(e.__,t),r);return{paths:s,pathInnermost:de.getLastArrVal(s)}}static flattenConfigObject(t){const r=t=>(0,e.chain)((([t,s])=>"[object Object]"===Object.prototype.toString.call(s)?(0,e.map)((([e,r])=>[`${t}.${e}`,r]),r(s)):[[t,s]]),(0,e.toPairs)(t));return(0,e.values)((0,e.fromPairs)(r(t)))}static addRouteDatasets(t){const{type:r,isHash:s}=t,o=e=>("query"===r?"":!0===s?"#":"/")+le.convertParamsToRoute(e,t).replace(/^(.*\/)([\w\-]*\/?)(.*)$/gm,"$1$2"),n=/^([A-Za-z0-9_\-])+$/m,i=(t=[],r,s={})=>{let{routeName:a}=r;return(0,e.toPairs)(r).reduce(((r,c)=>{const[l,d]=c,p=(0,e.is)(Object,d),h=t=>(0,e.test)(n,t)?String(t).toUpperCase():l;if("routeName"===l||"404"===l)return r;a=a||(0,e.prop)("routeName",d);let u=(0,e.clone)(s);if(u[a]=String(l).replace(/([^A-Za-z0-9-_])/g,""),!0===p){if(1===(0,e.keys)(u).length){const t=(0,e.path)(["routePath","routeName"],d);if(t){const n=(0,e.clone)(u);n[t]="",n.navLevel=(0,e.keys)(s).length,n.title=h(l),n.href=o(n),r.push(n)}}u=i(t,d,u)}else u.title=h(l),u.href=o(u);return u.navLevel=(0,e.keys)(s).length,r.push(u),r}),[])};let a=i([],t.routes);const c=(0,e.flatten)(a);return{routeDatasetsArr:c,routeNamesArr:(t=>{const r=(0,e.reject)((0,e.includes)(e.__,["title","href","navLevel"]));return(0,e.compose)(e.uniq,r,e.flatten,(0,e.map)(e.keys))(t)})(c)}}static conformRouteObject(t={},r=!1){const s=(0,e.path)(["channels","ROUTE"],t);let{add404s:o}=void 0!==s?s:t;o=o||r;const n=t=>{let r=t[1];const s=(0,e.is)(Array,r);return""===r?t[1]="^$":s&&(t[1]=r.join("|")),t},i=(0,e.compose)(e.fromPairs,(0,e.map)((t=>{let[r,s]=t;const a=o?{404:".+"}:{},c=(0,e.is)(Object,s),l=(0,e.is)(Array,s),d="routePath"===r;return!0===c&&!1===l&&(t[1]=i(t[1]),d&&(t[1]=(0,e.compose)((0,e.mergeDeepRight)(a),e.fromPairs,(0,e.map)(n),e.toPairs)(t[1]))),t})),e.toPairs);if(void 0!==s){t.channels.ROUTE=i(t.channels.ROUTE);const r=de.addRouteDatasets(t.channels.ROUTE);return t.channels.ROUTE=(0,e.mergeRight)(t.channels.ROUTE,r),t}return i(t)}static getLocationData(){return(0,e.pickAll)(["href","origin","protocol","host","hostname","port","pathname","search","hash"],window.location)}}const pe=n(205).filter,he=n(205).mergeRight;class ue extends ce{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((0,R.map)((e=>this.onMapNext(e)))),this.compareRouteKeywords=de.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 t=this.addRegisteredActions(),r=(0,e.mergeAll)((0,e.chain)((t=>(0,e.objOf)(t,t)),t));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(t){const r=(0,e.pick)(["isHash","isHidden","routes","type"],t.payload);window.Spyne.config.channels.ROUTE=(0,e.mergeRight)(window.Spyne.config.channels.ROUTE,r),(0,e.clone)(window.Spyne.config.channels.ROUTE),window.Spyne.config=de.conformRouteObject(window.Spyne.config);const s=this.getRouteConfig();this.routeConfigJson=s,this.bindStaticMethodsWithConfigData(),this.sendChannelPayload("CHANNEL_ROUTE_CONFIG_UPDATED_EVENT",s,{},{},this.navToStream$)}getRouteConfig(){const t=window.Spyne.config;let r=(0,e.path)(["channels","ROUTE"],t);"query"===r.type&&(r.isHash=!1);let s=de.flattenConfigObject(r.routes);return r.paramsArr=s,r}initStream(){this.firstLoadStream$=new w.ReplaySubject(1),this.onIncomingDomEvent(void 0,this.routeConfigJson,"CHANNEL_ROUTE_DEEPLINK_EVENT"),de.createPopStateStream(this.onIncomingDomEvent.bind(this)),this.observer$=(0,w.merge)(this.firstLoadStream$,this.navToStream$)}onMapNext(e,t=!1){return e.action="CHANNEL_ROUTE_CHANGE_EVENT",e}static removeSSID(t){const r=(0,e.lensProp)(["routeData"]);return(0,e.over)(r,(0,e.omit)(["vsid"]))(t)}static onIncomingDomEvent(t,r=this.routeConfigJson,s){let o=void 0!==s?s:this.channelActions.CHANNEL_ROUTE_CHANGE_EVENT,n=(0,e.path)(["state","routeCount"],t),i=!0===(0,e.is)(Number,n),a=this.getDataFromString(r,i);!0===i&&(a.routeCount=n);let c=this.compareRouteKeywords.compare(a.routeData,a.paths);a=he(a,c),this.sendChannelPayload(o,a,void 0,void 0,this.navToStream$)}static checkForRouteParamsOverrides(e){return e}static checkForEventMethods(t){const r=(0,e.compose)(pe((0,e.test)(/^(event)([A-Z].*)([A-Z].*)$/gm)),e.keys,(0,e.prop)("payload"))(t);if(r.length>=1){const s=(0,e.prop)("event",t);if(void 0!==s){const t=(e,t,r,s,o)=>String(r).toLowerCase()+s+o,o=(0,e.replace)(/^(event)([A-Z])(.*)([A-Z].*)$/gm,t),n=e=>{const t=o(e);void 0!==s[t]&&s[t]()};r.forEach(n)}}return t}static checkForEndRoute(t,r=this.routeConfigJson,s){if(!0!==(0,e.compose)((0,e.equals)("true"),(0,e.path)(["payload","endRoute"]))(t))return t;const o=window||{},n=void 0!==s?s:(0,e.compose)((0,e.equals)(!0),(0,e.path)(["Spyne","config","debug"]))(o),{payload:i}=t;let a=0;const c=(t=[],r)=>{const[s,o]=r,{routePath:l}=o,d=(0,e.prop)("routeName",l),p=(t=>{const r=(0,e.prop)("routeName",t);if(r){const s=(0,e.compose)(e.keys,(0,e.omit)(["routeName"]))(t);let o=i[r];const n=e=>new RegExp(`^${e}$`).test(o);return(0,e.find)(n,s)}})(l),h=(0,e.is)(Object,o),u=(0,e.is)(Array,o);if(a+=1,!0===h&&!1===u){const r=l[p];r?(0,e.compose)(e.reverse,(0,e.reduce)(c,t),e.toPairs)({nextRoutePath:r}):1===a?n&&console.warn(`Spyne Warning: use of end route method should add start route value of "${d}".`):t.push(d)}return t},{routes:l}=r,d=(0,e.compose)(e.reverse,(0,e.reduce)(c,[]),e.toPairs)({routes:l});if(1===d.length){const e=d[0];t.payload[e]=""}return t}onViewStreamInfo(t){let r=this.channelActions.CHANNEL_ROUTE_CHANGE_EVENT;ue.checkForEventMethods(t),t=this.checkForEndRoute(t);let s=this.getDataFromParams(t);const{routeConfigJson:o}=this;let n=(0,e.prop)("srcElement",t),i=(0,e.prop)("event",t),a=!s.isHidden,c=this.compareRouteKeywords.compare(s.routeData,s.paths);s=he(s,c),this.sendRouteStream(s,a),s=ue.removeSSID(s),this.sendChannelPayload(r,s,n,i,this.navToStream$)}static checkAndConvertStrWithRegexTokens(t,r){return(0,e.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,isHidden:e.isHidden,routeType:e.type}}static getDataFromParams(t,r=this.routeConfigJson){let s=(0,e.prop)("payload",t),o=this.getRouteStrFromParams(s,r);const n=(t,s)=>(0,e.defaultTo)(s,(0,e.prop)(t,r));let i=n("type","slash"),a=n("isHash",!1),c=le.formatStrAsWindowLocation(o),l=this.getDataFromLocationStr(i,a,c),{pathInnermost:d,paths:p}=l;s=he(l.routeData,s);let{routeCount:h,isDeepLink:u,isHash:E,isHidden:m,routeType:N}=this.getExtraPayloadParams(r);return{isDeepLink:u,routeCount:h,pathInnermost:d,paths:p,routeData:s,routeValue:o,isHash:E,isHidden:m,routeType:N}}static getDataFromString(e=this.routeConfigJson,t=!1){const r=e.type,s=!0===e.isHash,o=le.getLocationStrByType(r,s);let{paths:n,pathInnermost:i,routeData:a,routeValue:c}=ue.getParamsFromRouteStr(o,e,r),{routeCount:l,isDeepLink:d,isHash:p,routeType:h,isHidden:u}=this.getExtraPayloadParams(e,t);return{isDeepLink:d,routeCount:l,pathInnermost:i,paths:n,routeData:a,routeValue:c,isHash:p,isHidden:u,routeType:h}}static getDataFromLocationStr(e="slash",t=this.routeConfigJson.isHash,r=window.location){const s=void 0!==this.routeConfigJson?this.routeConfigJson.type:e,o=le.getLocationStrByType(s,t,r);let{paths:n,pathInnermost:i,routeData:a,routeValue:c}=this.getParamsFromRouteStr(o,this.routeConfigJson,s);return{paths:n,pathInnermost:i,routeData:a,routeValue:c,action:this.getRouteState()}}static getLocationData(){return(0,e.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 le.convertParamsToRoute(e,t,s)}static getParamsFromRouteStr(e,t,r){const s=void 0!==r?r:t.type;return le.convertRouteToParams(e,t,s)}checkEmptyRouteStr(t,r=!1){const s=(0,e.isEmpty)(t);return!0==(!0===s&&!1===r)||!0==(!0===s&&!0===r)?"/":!0==(!1===s&&!0===r)?(0,e.concat)("#",t):t}static removeLastSlash(e){return e.replace(/^(.*)(\/)$/,"$1")}setWindowLocation(t){let{isHash:r,routeValue:s}=t;s=this.checkEmptyRouteStr(s,r);let{routeCount:o}=t;if(!0===r)s=ue.removeLastSlash(window.location.pathname)+s,window.history.pushState({routeCount:o},"",s);else{const t=(0,e.when)((0,e.compose)((0,e.complement)((0,e.equals)("/")),e.head),(0,e.concat)("/",e.__));window.history.pushState({routeCount:o},"",t(s))}}getWindowLocation(){return window.location.pathname}bindStaticMethods(){this.checkForEndRoute=ue.checkForEndRoute.bind(this),this.getIsDeepLinkBool=ue.getIsDeepLinkBool.bind(this),this.getDataFromLocationStr=ue.getDataFromLocationStr.bind(this),this.onIncomingDomEvent=ue.onIncomingDomEvent.bind(this),this.getDataFromString=ue.getDataFromString.bind(this),this.getParamsFromRouteStr=ue.getParamsFromRouteStr.bind(this),this.getLocationData=ue.getLocationData.bind(this),this.getRouteState=ue.getRouteState.bind(this),this.getDataFromParams=ue.getDataFromParams.bind(this),this.getRouteCount=ue.getRouteCount.bind(this),this.getExtraPayloadParams=ue.getExtraPayloadParams.bind(this),this.bindStaticMethodsWithConfigData()}bindStaticMethodsWithConfigData(){const t=(0,e.curryN)(3,ue.getRouteStrFromParams);this.getRouteStrFromParams=t(e.__,this.routeConfigJson,this.routeConfigJson.type)}}class Ee extends ce{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(t){const r=(0,e.lensProp)(["payload"]);return(0,e.over)(r,(0,e.omit)(["vsid"]))(t)}onIncomingObservable(t){let r=(0,e.equals)(t.name,this.props.name);t.data=Ee.removeSSID(t.data);let{payload:s,srcElement:o}=t.data,n=e=>({payload:s,srcElement:o,event:e});return!0===r?(e=>e.observable.pipe((0,R.map)(n)).subscribe(this.onUIEvent.bind(this)))(t):void 0}getActionState(t){let r=(0,e.path)(["event","type"]),s=(0,e.path)(["event","typeOverRide"]),o=(0,e.compose)(e.toUpper,(0,e.either)(s,r))(t);return void 0!==o?`CHANNEL_UI_${o}_EVENT`:"CHANNEL_UI"}static checkForEventMethods(t){const r=(0,e.compose)((0,e.filter)((0,e.test)(/^(event)([A-Z].*)([A-Z].*)$/gm)),e.keys,(0,e.prop)("payload"))(t);if(r.length>=1){const s=(0,e.prop)("event",t);if(void 0!==s){const t=(e,t,r,s,o)=>String(r).toLowerCase()+s+o,o=(0,e.replace)(/^(event)([A-Z])(.*)([A-Z].*)$/gm,t),n=e=>{const t=o(e);void 0!==s[t]&&"function"==typeof s[t]&&s[t]()};r.forEach(n)}}return t}onUIEvent(e){Ee.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 me{constructor(){this.createDomObservableFromEvent=me.createDomObservableFromEvent.bind(this)}static createDomObservableFromEvent(e,t,r=!0,s=window){return t=void 0===t?e=>e:t,(0,w.fromEventPattern)((t=>s.addEventListener(e,t,{passive:r})),(()=>{s[e]=e=>e})).pipe((0,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=(o=e,{addHandler:e=>{o.addListener(e)},removeHandler:e=>{o.onchange=()=>{}}});var o;return new w.fromEventPattern(s.addHandler,s.removeHandler).pipe((0,R.map)(r))}static createMergedObsFromObj(t){let r=t.mediqQueries,s=[];return(0,e.mapObjIndexed)(((e,t,r)=>{let o=me.createMediaQuery(e);return!1!==o&&s.push(me.createMediaQueryHandler(o,t)),s}),r),s}}const Ne=n(205).map;class ge extends ce{constructor(e="CHANNEL_WINDOW"){super(e),this.bindStaticMethods(),this.currentScrollY=0}initializeStream(){this.domChannelConfig=window.Spyne.config.channels.WINDOW;let e=this.getActiveObservables(),t=(0,w.merge)(...e);this.dom$=t,t.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(t){let r=`CHANNEL_WINDOW_${t.toUpperCase()}_EVENT`;return(0,e.curry)(ge.mapGenericEvent)(r)}static mapGenericEvent(e,t){return{action:e,payload:t,srcElement:t.srcElement,event:t}}static getResizeMapFn(t){return{action:this.channelActions.CHANNEL_WINDOW_RESIZE_EVENT,payload:(0,e.pick)(["innerWidth","innerHeight","outerWidth","outerHeight"],window),srcElement:t.srcElement,event:t}}static getOrientationMapFn(t){let r=this.channelActions.CHANNEL_WINDOW_ORIENTATION_EVENT,s=window.matchMedia("(orientation: portrait)").matches,o=(0,e.pick)(["innerWidth","innerHeight","outerWidth","outerHeight"],window);return o.orientation=!0===s?"portrait":"landscape",{action:r,payload:o,srcElement:t.srcElement,event:t}}getMediaQueryMapFn(t){return{action:this.channelActions.CHANNEL_WINDOW_MEDIA_QUERY_EVENT,payload:(0,e.pick)(["matches","media","mediaQueryName"],t),srcElement:t.srcElement,event:t}}createMouseWheelObservable(e){const t=e.debounceMSTimeForScroll;return me.createDomObservableFromEvent("mousewheel",ge.getMouseWheelMapFn.bind(this)).pipe((0,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,o){let n=s(ge.getScrollY(o)),{scrollDistance:i}=n;return{action:r,payload:n,srcElement:e.srcElement,scrollDistance:i,event:e}}createScrollObservable(t,r=window){const s=t.debounceMSTimeForScroll,o=r===window,n=void 0!==t.scrollElForVals?t.scrollElForVals:r,i=o?"CHANNEL_WINDOW_SCROLL_EVENT":"CHANNEL_WINDOW_ELEMENT_SCROLL_EVENT",a=ge.getScrollData(),c=(0,e.partialRight)(ge.getScrollMapFn,[i,a,n]).bind(this);return me.createDomObservableFromEvent("scroll",c).pipe((0,R.debounceTime)(s),(0,R.skipWhile)((e=>0===e.scrollDistance)),(0,R.map)((e=>{const t=ge.getScrollY(window);return e.payload.scrollDistanceAbs=Math.abs(this.currentScrollY-t),this.currentScrollY=t,e})))}createOrientationObservable(e){return me.createDomObservableFromEvent("orientationchange",ge.getOrientationMapFn.bind(this))}createResizeObservable(e){const t=e.debounceMSTimeForResize;return me.createDomObservableFromEvent("resize",ge.getResizeMapFn.bind(this)).pipe((0,R.debounceTime)(t))}getEventsFromConfig(e=this.domChannelConfig){let t=e.events;return Ne((e=>{let t=ge.createCurriedGenericEvent(e);return me.createDomObservableFromEvent(e,t)}),t)}getActiveObservables(t=this.domChannelConfig){let r=[];t.listenForMediaQueries=(t=>{const r=(0,e.compose)((0,e.complement)(e.isEmpty),e.head,e.values),s=(0,e.compose)((0,e.complement)(e.isNil),e.head,e.values);return(0,e.allPass)([r,s])(t)})(t.mediqQueries);let s={listenForResize:this.createResizeObservable.bind(this),listenForOrientation:this.createOrientationObservable.bind(this),listenForScroll:this.createScrollObservable.bind(this),listenForMouseWheel:this.createMouseWheelObservable.bind(this)};(0,e.mapObjIndexed)(((e,s,o)=>{t[s]&&r.push(e(t))}),s),this.checkForMediaQueries(t.listenForMediaQueries);let o=this.getEventsFromConfig(t);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(t){let r=this.createMergedObsFromObj(t);return(0,e.apply)(w.merge,r).pipe((0,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.payload;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.payload;t=v(this.domChannelConfig,t),this.createScrollObservable(t,r).subscribe((e=>{let{action:t,payload:r,srcElement:s,event:o}=e;this.sendChannelPayload(t,r,s,o)}))}bindStaticMethods(){this.createMediaQueryHandler=me.createMediaQueryHandler.bind(this),this.createMergedObsFromObj=me.createMergedObsFromObj.bind(this)}}class _e extends ce{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 ye extends ce{constructor(t,r={}){r.isProxy=!0,super(t,r),this.props=r,this.subject$=new w.Subject,this.replaySub$=new w.ReplaySubject(1),this.observer$=(0,w.merge)(this.subject$,this.replaySub$),!0==(!0===(0,e.path)(["Spyne","config","debug"],window))&&this.checkIfChannelIsStillProxy(t)}getMergedSubject(e=!1){return!0===e?this.replaySub$:this.subject$}checkIfChannelIsStillProxy(t){let r=t;window.setTimeout((()=>{!0!==(0,e.includes)(r,window.Spyne.channels.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 Se=n(205).map;class Te{constructor(){this.addMixins(),this.map=new Map,this.map.set("DISPATCHER",new w.Subject),this.listRegisteredChannels=Te.listRegisteredChannels.bind(this),this.getChannelsList=Te.getChannelsList.bind(this)}static getChannelsList(){return Array.from(window.Spyne.channels.map,((e,t)=>({key:e[0],val:e[1].constructor.name})))}static listRegisteredChannels(t=!1){let r=this.getChannelsList(),s=(0,e.reject)((0,e.propEq)("val","ChannelProxy")),o=(0,e.filter)((0,e.propEq)("val","ChannelProxy")),n=(!0===t?o:s)(r);return(0,e.pluck)(["key"],n)}listProxyChannels(){return this.listRegisteredChannels(!0)}checkForMissingChannels(){let t=this.getChannelsList(),r=(0,e.filter)((0,e.propEq)("val","ChannelProxy"))(t);if(r.length>=1){let t=`Spyne Warning: The following ${1===r.length?"Channel has":"Channels have"} not been initialized: ${(0,e.compose)((0,e.join)(", "),Se((0,e.prop)("key")))(r)}`;console.warn(t)}}init(){this.createMainStreams()}createObserver(e){U(e.validations,e.init),this.map.set(e.init.name,e.init.observable())}createMainStreams(){this.routeStream=new ue,this.map.set("CHANNEL_ROUTE",this.routeStream),this.uiStream=new Ee,this.map.set("CHANNEL_UI",this.uiStream),this.domStream=new ge,this.map.set("CHANNEL_WINDOW",this.domStream),this.viewStreamLifecycle=new _e,this.map.set("CHANNEL_LIFECYCLE",this.viewStreamLifecycle),this.routeStream.initializeStream(),this.domStream.initializeStream()}addKeyEvent(e){this.map.get("UI").addKeyEvent(e)}registerStream(t){let r=t.channelName;this.map.has(r)&&(0,e.compose)((0,e.pathEq)(["props","isRegistered"],!0))(this.map.get(r))?console.warn(`Spyne Warning: The Channel, ${r}, has already been registered!`):(this.map.set(r,t),t.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 ye(e)),this.map.get(e)}addMixins(){}}class fe{constructor(){this._packetMap=new Map,this._iter=0,this.createFilterGateway=fe.createFilterGateway.bind(this),this.createDataPacket=fe.createDataPacket.bind(this),this.createLabel=fe.createLabel.bind(this)}static deepFreeze(e){try{Object.freeze(e),Object.getOwnPropertyNames(e).forEach((function(t){!e.hasOwnProperty(t)||null===e[t]||"object"!=typeof e[t]&&"function"!=typeof e[t]||Object.isFrozen(e[t])||fe.deepFreeze(e[t])}))}catch(t){return e}return e}static createDataPacket(t={},r=[]){t=fe.deepFreeze(t);const s=this.createLabel();this._packetMap.set(s,t);const o=(0,e.compose)(e.keys,(0,e.omit)(["props"]))(t),n=fe.createTimeStamp(),i=this.createFilterGateway(t),a=r.reduce(((e={},r)=>("props"===r||(e[r]=t[r]),e)),{}),c=(0,e.ifElse)((0,e.prop)("props"),(0,e.invoker)(0,"props"),e.identity),l=()=>{const e=this._packetMap.get(s);o.forEach((t=>{p[t]=e[t]}))};let d=Object.create(null),p=(0,e.mergeAll)([{timestamp:n,label:s,props:()=>c(this._packetMap.get(s)),users:()=>this._packetMap.get(s).payload.users,isPacket:!0,packedData:()=>this._packetMap.get(s),unpack:l,filterGateway:i},a]);return p=v(p,d),p}static createAllPassFilterGateway(){}static createFilterGateway(e,t=this._packetMap){return r=>{if("function"==typeof r)try{return r(t.get(e))}catch(e){console.log("predicate not working -> ",e)}return!1}}static createUnpackedDataArr(t){return(0,e.keys)(t)}static createLabel(e=this._iter++){return`packet_num_${this._iter}`}static createTimeStamp(){return Date.now()}static createPacketUnpacker(){}}class Ae{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 r(this,this.omittedMethods)}checkForMalformedMethods(t){if(""===this.prefix)return void console.warn(`SPYNE WARNING: The following SpyneTrait ${this.constructor.name} needs a prefix`);let r=(0,e.reject)((e=>0===e.indexOf(this.prefix)),t);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(t,r){this.checkForMalformedMethods(t.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,e.curryN)(2,o)(e.__,!0);return(0,e.map)(n,t.staticMethods),(0,e.map)(o,t.methods),s}autoBinder(){let e=this.getEnhancerMethods();return this.allMethodsList=this.bindParentViewStream(e,this.parentContext),this.allMethodsList}}class Ce{constructor(e,t,r){this._mapFn=Ce.setMapFn(e),this._url=Ce.setUrl(e),this._responseType=Ce.setResponseType(e),this._serverOptions=Ce.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&&Ce.startWindowFetch(s,this._subscriber)}static startWindowFetch(e,t){let{mapFn:r,url:s,serverOptions:o,responseType:n,debug:i}=e;const a=!0===i?e=>console.log("DEBUG FETCH :",e):()=>{};let c=(0,w.from)(window.fetch(s,o)).pipe((0,R.tap)(a),(0,R.flatMap)((e=>(0,w.from)(e[n]()))),(0,R.map)(r),(0,R.publish)());c.connect(),c.subscribe(t)}static setMapFn(t){return(0,e.compose)((0,e.defaultTo)((e=>e)),(0,e.prop)("mapFn"))(t)}static setUrl(t){let r=(0,e.prop)("url",t);return void 0===r&&console.warn("SPYNE WARNING: URL is undefined for data channel"),r}static setResponseType(t){return(0,e.defaultTo)("json",(0,e.prop)("responseType",t))}get mapFn(){return this._mapFn}get url(){return this._url}get serverOptions(){return this._serverOptions}get responseType(){return this._responseType}static stringifyBodyIfItExists(t){return(0,e.when)((0,e.propIs)(Object,"body"),(0,e.compose)((0,e.over)((0,e.lensProp)("body"),JSON.stringify)))(t)}static updateMethodWhenBodyExists(t){const r=(0,e.has)("body"),s=(0,e.propEq)("method","GET"),o=(0,e.allPass)([r,s]);return(0,e.when)(o,(0,e.assoc)("method","POST"))(t)}static setServerOptions(t){let r=(0,e.pick)(["header","body","mode","method"],t),s=(0,e.mergeDeepRight)(Ce.baseOptions(),r);return s=Ce.updateMethodWhenBodyExists(s),s=Ce.stringifyBodyIfItExists(s),s}static baseOptions(){return{method:"GET",headers:{Accept:"application/json, text/plain, */*"}}}}class be extends ce{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(t){let r=(0,e.compose)((0,e.defaultTo)([]),(0,e.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 Ce(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(t){let r=(0,e.path)(["viewStreamInfo","payload"],t);return(0,e.pick)(["mapFn","url","header","body","mode","method","responseType","debug"],r)}consolidateAllFetchProps(t,r=this.props){let s=(0,e.pick)(["mapFn","url","header","body","mode","method","responseType","debug"],r);const o=(0,e.reject)(e.isNil);return(0,e.compose)(o,((t,r)=>(0,e.mergeDeepRight)(t,r)))(s,t)}get observer(){return this.observer$}}class ve{constructor(t={}){let{name:r,config:s,parentEl:o}=t;if(this.props=t,void 0===s&&(s=(0,e.clone)(t)),this.name=r||"empty",this.props.name=r,s=ve.mergeDefaultConfig(s,this.defaultConfig()),this.props.parentEl=o||ve.createParentEl(),this.props.spyneApp=ve.getSpyneApp(r,s),!1===this.props.spyneApp)return!1;this.onBeforeRegistered(),this.onRegistered(),this.onRender()}onBeforeRegistered(){this.props.pluginName=this.props.name,this.props.config=(0,e.path)(["Spyne","config","plugins",this.props.name],window)}static mergeDefaultConfig(e={},t=this.defaultConfig()){return Object.assign(t,e)}defaultConfig(){return{}}static getSpyneApp(t,r){const s=window||{};let o=(0,e.prop)("Spyne",s);return o=!0==("object"==typeof o)?o:new o,!1!==ve.updateSpyneConfig(o,t,r)&&o}static updateSpyneConfig(t,r,s){return!0===(0,e.pathSatisfies)((0,e.is)(Object),["config","plugins",r])(t)?(!0===t.config.debug&&console.warn(`Spyne Warning: The plugin, ${r}, already exists`),!1):(t.config.plugins[r]=s,t.config.plugins[r])}static createParentEl(e){return e||document.getElementById("spyne-plugins")||(()=>{const e=new I({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(){}}class Oe{constructor(e={}){this.channels=new Te,this.VERSION="0.16.2",this.ViewStream=ne,this.BasicView=V,this.DomEl=I,this.ViewStreamBroadcaster=j,this.ChannelsPayload=x,this.ChannelsController=Te,this.ChannelsBase=ce,this.ChannelPayloadItem=T,this._channelDataPacketGenerator=new fe,window.Spyne=this;void 0!==e&&(e=de.conformRouteObject(e),window.Spyne.config=v({scrollLock:!1,scrollLockX:31,scrollLockY:0,debug:!1,utils:{tableRE:/^([^>]*?)(<){1}(\b)(thead|col|colgroup|tbody|td|tfoot|tr|th)(\b)([^\0]*)$/},tmp:{},plugins:{},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"}}},CHANNEL_ROUTE:{},CHANNEL_UI:{}}},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 t=new ne({id:"spyne-null-views"});t.appendToDom(document.body),t.props.el.style.cssText="display:none; opacity:0; pointer-events:none;",this.channels.init()}get createDataPacket(){return this._channelDataPacketGenerator.createDataPacket}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=Oe})(),i})()}));
|
|
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:()=>Ee,ChannelFetch:()=>De,ChannelFetchUtil:()=>Ie,ChannelPayload:()=>W,ChannelPayloadFilter:()=>se,ChannelsMap:()=>ve,DomElement:()=>j,DomElementTemplate:()=>x,SpyneApp:()=>Re,SpyneAppProperties:()=>A,SpynePlugin:()=>Pe,SpyneTrait:()=>Oe,ViewStream:()=>he,ViewStreamBroadcaster:()=>K,ViewStreamElement:()=>Y,ViewStreamPayload:()=>z,ViewStreamSelector:()=>le,deepMerge:()=>u});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=A.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)}}const o=Object.create({});o.foo=()=>console.log("used for testing purposes.");const a=(0,t.compose)(t.not,(0,t.is)(Array)),c=(0,t.compose)(t.not,t.isEmpty),l=((0,t.allPass)([(0,t.is)(String),c]),(0,t.allPass)([(0,t.is)(Array),c]),(0,t.compose)((0,t.allPass)([a,(0,t.is)(Object)])));function d(e){return e&&"object"==typeof e&&"[object RegExp]"!==Object.prototype.toString.call(e)&&"[object Date]"!==Object.prototype.toString.call(e)}function h(e,t){return t&&!0===t.clone&&d(e)?u((r=e,Array.isArray(r)?[]:{}),e,t):e;var r}function p(e,t,r){let s=e.slice();return t.forEach((function(t,o){void 0===s[o]?s[o]=h(t,r):d(t)?s[o]=u(e[o],t,r):-1===e.indexOf(t)&&s.push(h(t,r))})),s}function u(e,t,r){let s=Array.isArray(t),o=(r||{arrayMerge:p}).arrayMerge||p;return s?Array.isArray(e)?o(e,t,r):h(t,r):function(e,t,r){let s={};return d(e)&&Object.keys(e).forEach((function(t){s[t]=h(e[t],r)})),Object.keys(t).forEach((function(o){d(t[o])&&e[o]?s[o]=u(e[o],t[o],r):s[o]=h(t[o],r)})),s}(e,t,r)}let E,m,N;(0,t.compose)((0,t.allPass)([c,a,(0,t.is)(Object)])),u.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 u(e,r,t)}))};let g=!1,T=!0;const _=new class{constructor(){}addMethod(e,t,r=!1){if(!0===Object.prototype.hasOwnProperty.call(o,e)){const t=`Spyne Warning: the method name, ${e}, already exists.`;if(r)return t;console.warn(t)}else o[e]=t}addMethods(e={},r=!1){let s;return!1===l(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){}get pluginMethodsObj(){return o}};let A=new class{constructor(){}get channelsMap(){return N}get initialized(){return g}get config(){return E}get debug(){return T}static listChannels(){return Array.from(m.map.keys())}initialize(e={},t={},r){m=r;let o=t;return t.channels&&t.channels.ROUTE&&(o=s.conformRouteObject(t)),E=u(e,o),T=void 0!==E.debug?E.debug:T,this.getChannelActions=m.getChannelActions.bind(m),this.listRegisteredChannels=m.listRegisteredChannels.bind(m),g=!0,this.setChannelsMap(),E}conformRouteConfig(e=!1){E=s.conformRouteObject(E,e)}setChannelsMap(){const e=m.getStream.bind(m),t=m.testStream.bind(m),r=m.getProxySubject.bind(m);N={getStream:e,testStream:t,getProxySubject:r}}setProp(e,t){E.tmp[e]=t}getProp(e){return(0,t.path)(["tmp",e],E)}setChannelConfig(e,t){return E.channels[e]=t,E.channels[e]}getChannelConfig(e,t=E){if("CHANNEL_ROUTE"===e?e="ROUTE":"CHANNEL_WINDOW"===e&&(e="WINDOW"),void 0===t||void 0===E.channels)return void console.warn("Spyne warning: Spyne config object is empty!");const r=E.channels[e];if(void 0!==r)return r;console.warn(`Spyne warning: Spyne configuration for channel, ${e} is empty!`)}registerChannel(){}addPluginConfig(e,t={}){void 0===E.plugins&&(E.plugins={}),this.addPluginMethods(t.pluginMethods),E.plugins[e]=t}getPluginsMethodObj(e){return e&&this.addPluginMethods(e),_.pluginMethodsObj}addPluginMethods(e){e&&_.addMethods(e)}getPluginConfigByPluginName(e){return E.plugins[e]}tempGetChannelsInstance(){}tempGetConfig(){}};const C=n(318),S=n(318);let f=()=>({includes:()=>!0===A.initialized?A.listRegisteredChannels():["CHANNEL_ROUTE","CHANNEL_UI","CHANNEL_WINDOW","DISPATCHER"]}),y=["LOAD","RENDER","MOUNT","UNMOUNT","DISPOSE","GARBAGE_COLLECT","UPDATE"],b=["parent","self","child","children","view"],v=["Observable","BehaviorSubject","Subject","Observer","Subscriber","FromEventObservable"],O=["subscribe","combineLatest"],I=[],D=[],L=null,R=null,P=null,w=null,H=null,V=null,M=null;if(void 0!==t.compose&&void 0!==C){I=[{error:`need to match a valid name within ${v}`,predicate:e=>f().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=>O.includes(e.action)}],D=[{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"]))}],L=function(){return[].concat(I).concat(D)};let e=[{error:`need to match a valid name within ${v}`,predicate:e=>f().includes(e.name)},{error:`needs one of the following step strings: ${y}`,predicate:e=>y.includes(e.STEP)},{error:`type needs to one of the following: ${b}`,predicate:e=>b.includes(e.type)},{error:"viewId needs to be added ",predicate:e=>void 0!==e.viewId}];P=function(){return[].concat(e)},w=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)},H=function(){return[{error:"UPDATE STEP requires a data object ",predicate:e=>"UPDATE"===e.STEP&&void 0!==e.data}].concat(e)},R=function(){return e.concat(I).concat(D)},V=function(){return[].concat(I).concat(D)},M=function(){let e=[{error:"param 'name' must be of a registered type",predicate:e=>f().includes(e.name)},{error:"param 'observable' must contain a valid Observable",predicate:e=>v.includes((0,e.observable)().constructor.name)},{error:"param action must be a registered action",predicate:e=>O.includes(e.action)}];return{streams:[{init:{name:"DISPATCHER",observable:()=>new S,action:"subscribe"},structure:{type:String,observable:C||S,action:String},validations:e},{init:{name:"UBU",observable:()=>new S,action:"subscribe"},structure:{type:String,observable:C||S,action:String},validations:e}]}}}class W{constructor(e,r,s,o,n,i){let a=e;i&&console.time(i);let c={channelName:e,action:r,srcElement:o,event:n};const l=W.deepFreeze(s);if(c.payload=l,!0===A.debug){if(Object.prototype.hasOwnProperty.call(s,"payload")){let e=JSON.stringify(s);console.warn(`Spyne Warning: the following payload contains a nested payload property which may create conflicts: Action: ${r}, ${e}`)}const e=A.getChannelActions(a);W.validateAction(r,a,e)}c.clone=()=>(0,t.clone)((0,t.mergeAll)([{payload:W.deepClone(c.payload)},c.payload,{channel:a},{event:n},{srcElement:o},c.srcElement,{action:c.action}]));const d={$dir:{get:()=>c._dir,set:e=>c._dir=e}};return"CHANNEL_ROUTE"===a&&(d.location={get:()=>W.getLocationData()}),c._dir=void 0,Object.defineProperties(c,d),i&&console.timeEnd(i),c}static validateAction(e,r,s){let o=(0,t.includes)(e,s);return!1===o&&!0===A.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){!Object.prototype.hasOwnProperty.call(e,t)||!1!==r(e[t])||null===e[t]||"object"!=typeof e[t]&&"function"!=typeof e[t]||Object.isFrozen(e[t])||W.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 $(){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 U=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])},F=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)};class x{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=x.getStringArray(this.template),o=this.template.match(x.findTmplLoopsRE());o=null===o?[]:o;const n=x.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(x.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(x.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(x.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(x.swapParamsForTagsRE(),e))(e,i):c(e,i))).join(""))}}class j{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 x(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:u(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=$();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 k=(e=!1,t=1,r="ease",s=!1)=>`${!0===s?"opacity:0;":""}transition: opacity ${t}s ${r}; opacity: ${!0===e?1:0};`;var G=n(443);class q{constructor(e){this.props.observableStreams=q.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,G.filter)((e=>void 0!==e&&void 0!==e.action))),E=r.pipe((0,G.filter)(c),(0,G.map)(h)),m=r.pipe((0,G.filter)(i),(0,G.map)(d)),N=r.pipe((0,G.filter)(a),(0,G.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 Y{constructor(t,r={},s="",o="theName"){this.addMixins(),this._state="INIT",this.vsid=s,this.vsName=o,this.defaults={debug:!1,extendedHashMethods:{}},this.options=u(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=q.createDirectionalFiltersObject(),this.addDefaultDir=q.addDefaultDir,this.sourceStreams=q.createDirectionalObservables(new e.Subject,this.vsName,this.vsid),this._source$=this.sourceStreams.toInternal$}addActionListeners(){return[]}setHashMethods(e={}){return u({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 j(r,e,s,o)}onDisposeCompleted(e){}animateInTween(e,t){!function(e,t){let r=1*window.getComputedStyle(e).opacity,s=k(!0,t,"ease",1===r);e.style.cssText+=s}(e,t)}animateOutTween(e,t,r){!function(e,t,r){let s=k(!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){const[t,r,s,o]=e;return this.domItem=new j({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(){}}function B(){setTimeout((()=>{(0,t.forEach)((e=>{}),this)}),1)}class z{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=A.channelsMap.getStream("DISPATCHER");const r=z.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 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=B}}class K{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,G.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===A.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 z("CHANNEL_ROUTE",e,t,"subscribe")},t=function(e,t){return new z("CHANNEL_UI",e,t,"subscribe")};this.sendUIPayload=t,this.sendRoutePayload=e}}const Q=n(205).map,X=(0,t.compose)(t.not,(0,t.is)(Array)),J=(0,t.compose)(t.not,t.isEmpty),Z=(0,t.allPass)([(0,t.is)(String),J]),ee=(0,t.allPass)([(0,t.is)(Array),J]),te=(0,t.compose)((0,t.allPass)([X,(0,t.is)(Object)])),re=(0,t.compose)((0,t.allPass)([J,X,(0,t.is)(Object)]));class se{constructor(e,r={},s,o){te(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=Z(e)?se.filterSelector([e],s):void 0,l=ee(e)?se.filterSelector(e,s):void 0,d=re(a)?se.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===A.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=Q(((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 se.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 Q(c,r)};if(void 0!==r){let s=(0,t.compose)(t.flatten,Q(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,Q(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)(se.checkPayloadSelector)(s,r)}}function oe(){return!0===A.debug}function ne(e,r,s=!1){let o=ae(e,r,s);return 1===o.length?(0,t.head)(o):o}function ie(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===oe()&&!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 ae(e,t,r=!1){let s=void 0!==t?`${e} ${t}`:e;return!0===r&&ie(e,t,r),(e=>{try{document.querySelectorAll(e)}catch(e){return[]}return document.querySelectorAll(e)})(s)}function ce(e,t,r){return ae(t,r).forEach((t=>{t.style.cssText=e})),this}function le(e,r){function s(t){return le(e,t)}return ie(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(ae(e,r)).map(t),s.forEach=t=>Array.from(ae(e,r)).map(t),s.getNodeListArray=()=>ae(e,r),s.addClass=t=>(ae(e,r).forEach((e=>e.classList.add(t))),this),s.removeClass=t=>(ae(e,r).forEach((e=>{e.classList.remove(t)})),this),s.setClass=s=>(ae(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)=>(ae(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((()=>{ae(e,r).forEach((e=>e.classList.add(t)))}),1)},s.setActiveItem=(s,o)=>{let n=ae(e,r),i="string"==typeof o?ne(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===oe()&&console.warn(`Spyne Warning: The selector, ${o}, does not appear to be a valid item in setActiveItem: ${s}`),this},Object.defineProperty(s,"el",{get:()=>ne(e,r,!0)}),Object.defineProperty(s,"els",{get:()=>ae(e,r)}),Object.defineProperty(s,"len",{get:()=>ae(e,r,!1).length}),Object.defineProperty(s,"exists",{get:()=>ae(e,r,!1).length>=1}),Object.defineProperty(s,"exist",{get:()=>ae(e,r,!1).length>=1}),Object.defineProperty(s,"nodeList",{get:()=>ae(e,r)}),Object.defineProperty(s,"arr",{get:()=>{let t=ne(e,r,!0);return void 0===t?[]:void 0===t.length?[t]:Array.from(t)}}),Object.defineProperty(s,"inline",{set:t=>ce(t,e,r)}),Object.defineProperty(s,"inlineCss",{set:t=>ce(t,e,r)}),s}const de=n(205).map;class he{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:Y,extendedSourcesHashMethods:{},debug:!1,template:void 0,node:document.createDocumentFragment(),name:U(this)}},this._state={},this.$dirs=q.createDirectionalFiltersObject(),this.addDefaultDirection=q.addDefaultDir,this.addDownInternalDir=q.addDownInternalDir,this.props=u(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.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=he.isDevMode(),this.props.addedChannels=[],this.checkIfElementAlreadyExists()}get source$(){return this._source$}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"]}static isDevMode(){return A.debug}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=>A.getChannelActions(e)));return(0,t.flatten)(r)})(e);r.forEach(s)}}static isValidNestedArr(e){const r=(0,t.equals)(!0),s=(0,t.all)(r),o=(0,t.is)(String),n=(0,t.compose)(s,de(o),(0,t.slice)(0,2),(0,t.defaultTo)([]));return(0,t.compose)(s,de(n),(0,t.defaultTo)([]))(e)}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)}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())}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 se({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=u({},s);e.$dir=this.$dirs.C,this.sourceStreams.raw$.next(e)}!0===(0,t.defaultTo)((0,t.always)(!0),r)(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 u.all([{},t,e])}initViewStream(){this._source$=this._rawSource$.pipe((0,G.map)((e=>this.onMapViewSource(e))),(0,G.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,G.filter)((e=>void 0!==e&&void 0!==e.action)),(0,G.map)((e=>{let t=u({},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,G.filter)((e=>void 0!==e&&void 0!==e.action)),(0,G.tap)((e=>this.tracer("addChildStraem do ",e))),(0,G.map)((e=>e)),(0,G.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,G.mergeMap)((e=>{let t=e.observable.pipe((0,G.filter)((e=>void 0!==e&&void 0!==e.action)),(0,G.map)((e=>{let t=u({},e);return t.action=e.action,this.tracer("autoMergeSubject$",t),t})));return!1===e.autoClosesBool?t:(o+=1,t.pipe((0,G.finalize)(s)))}))),this.autoSubscriber$=this.autoMergeSubject$.pipe((0,G.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")}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))}}setAttachData(e,r){return{node:this.props.el,type:"ViewStreamObservable",attachType:e,query:(()=>{let e=this.props.el.querySelector(r);return!0===he.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===he.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 K(this.props,this.broadcastEvents.bind(this)),this.afterBroadcastEvents()}addTraits(e){"Array"!==e.constructor.name&&(e=[e]),e.forEach((e=>{new e(this)}))}afterBroadcastEvents(){if(!0===this.isDevMode){const e=e=>e[0],r=this.addActionListeners();let s=r.map(e);if(!1===he.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)&&he.checkIfActionsAreRegistered.bind(this)(this.props.addedChannels,s)};this.setTimeout(o,500)}}setDataVSID(){this.props.el.dataset.vsid=this.props.vsid}beforeAfterRender(){this.setDataVSID(),this.props.el$=le(this.props.el)}downStream(){}onRendered(){}onAnimFrameAfterRendered(){}afterRender(){}broadcastEvents(){return[]}getChannel(e){return(0,t.ifElse)((e=>f().includes(e)),(e=>A.channelsMap.getStream(e).observer.pipe((0,G.takeWhile)((e=>!0!==this.deleted)))),(e=>console.warn(`channel name ${e} is not within ${f}`)))(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,G.map)((e=>{let t=e;return t.$dir=n,t})),(0,G.filter)((e=>{let t=a(e);return!0!==i(e)||t===this.props.vsid}))];!0===r&&c.unshift((0,G.skip)(1));let l=this.getChannel(e).pipe(...c);this.updateSourceSubscription(l,!1),this.props.addedChannels.push(e)}checkIfChannelExists(e){let t=A.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 z(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 se(e,t)}isLocalEvent(e){const r=(0,t.path)(["srcElement","el"],e),s=(0,t.path)(["props","el"],this);return he.elIsDomElement(s)&&he.elIsDomElement(r)&&s.contains(r)}addMixins(){let e=$();this.createId=e.createId}}class pe{constructor(e){let r=String(e.props.name),s=`${r}_ROUTE_UPDATER`;return(0,t.curry)(pe.createTemporaryViewStreamObj)({id:s,name:r})}static createTemporaryViewStreamObj(e,t){let{name:r,id:s}=e,o=t,n=new he({id:s,name:r,data:t});n.onRendered=()=>{n.sendInfoToChannel("CHANNEL_ROUTE",o)},n.afterBroadcastEvents=()=>{n.disposeViewStream()},n.appendToNull()}}const ue=n(205).map;class Ee{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 pe(this),this.createChannelActionMethods(),this.streamsController=A.channelsMap;let o=this.getMainObserver();this.checkForPersistentDataMode=Ee.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,G.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=ue(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)(ue((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,G.map)(i)).subscribe(this.getActionMethodForObservable(e)))(e):void 0}onViewStreamInfo(e){}sendChannelPayload(e,t,r={},s={},o=this.observer$){let n=new W(this.props.name,e,t,r,s);o.next(n)}getChannel(e,r){return(0,t.ifElse)((e=>f().includes(e)),(e=>{let t=this.streamsController.getStream(e).observer;return void 0!==r?t.pipe((0,G.filter)(r)):t}),(e=>console.warn(`channel name ${e} is not within ${f}`)))(e)}}const me=n(205).filter,Ne=n(205).mergeRight;class ge extends Ee{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,G.map)((e=>this.onMapNext(e)))),this.compareRouteKeywords=s.compareRouteKeywords()}checkConfigForHash(){!0==("hash"===A.config.channels.ROUTE.type)&&(A.config.channels.ROUTE.type="slash",A.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);A.config.channels.ROUTE=(0,t.mergeRight)(A.config.channels.ROUTE,r),A.conformRouteConfig();const s=this.getRouteConfig();this.routeConfigJson=s,this.bindStaticMethodsWithConfigData(),this.sendChannelPayload("CHANNEL_ROUTE_CONFIG_UPDATED_EVENT",s,{},{},this.navToStream$)}getRouteConfig(){const e=A.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=Ne(a,c),this.sendChannelPayload(o,a,void 0,e,this.navToStream$)}static checkForRouteParamsOverrides(e){return e}static checkForEventMethods(e){const r=(0,t.compose)(me((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;const o=void 0!==s?s:!0===A.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;ge.checkForEventMethods(e),e=this.checkForEndRoute(e);let s=this.getDataFromParams(e),o=(0,t.prop)("srcElement",e),n=(0,t.prop)("event",e),i=!s.isHidden,a=this.compareRouteKeywords.compare(s.routeData,s.paths);s=Ne(s,a),this.sendRouteStream(s,i),s=ge.removeSSID(s),this.sendChannelPayload(r,s,o,n,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=Ne(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}=ge.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=ge.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=ge.checkForEndRoute.bind(this),this.getIsDeepLinkBool=ge.getIsDeepLinkBool.bind(this),this.getDataFromLocationStr=ge.getDataFromLocationStr.bind(this),this.onIncomingDomEvent=ge.onIncomingDomEvent.bind(this),this.getDataFromString=ge.getDataFromString.bind(this),this.getParamsFromRouteStr=ge.getParamsFromRouteStr.bind(this),this.getLocationData=ge.getLocationData.bind(this),this.getRouteState=ge.getRouteState.bind(this),this.getDataFromParams=ge.getDataFromParams.bind(this),this.getRouteCount=ge.getRouteCount.bind(this),this.getExtraPayloadParams=ge.getExtraPayloadParams.bind(this),this.bindStaticMethodsWithConfigData()}bindStaticMethodsWithConfigData(){const e=(0,t.curryN)(3,ge.getRouteStrFromParams);this.getRouteStrFromParams=e(t.__,this.routeConfigJson,this.routeConfigJson.type)}}class Te extends Ee{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=Te.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,G.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){Te.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 _e{constructor(){this.createDomObservableFromEvent=_e.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,G.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,G.map)(s))}static createMergedObsFromObj(e){let r=e.mediaQueries||e.mediqQueries,s=[];return(0,t.mapObjIndexed)(((e,t,r)=>{let o=_e.createMediaQuery(e);return!1!==o&&s.push(_e.createMediaQueryHandler(o,t)),s}),r),s}}const Ae=n(205).map;class Ce extends Ee{constructor(e="CHANNEL_WINDOW"){super(e),this.bindStaticMethods(),this.currentScrollY=0}initializeStream(){this.domChannelConfig=A.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)(Ce.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 _e.createDomObservableFromEvent("mousewheel",Ce.getMouseWheelMapFn.bind(this)).pipe((0,G.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(Ce.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=Ce.getScrollData(),d=(0,t.partialRight)(Ce.getScrollMapFn,[c,l,a,s,n]).bind(this);return _e.createDomObservableFromEvent("scroll",d,s,n).pipe((0,G.debounceTime)(o),(0,G.skipWhile)((e=>0===e.scrollDistance)),(0,G.map)((e=>{const t=Ce.getScrollY(n);return e.payload.scrollDistanceAbs=Math.abs(this.currentScrollY-t),this.currentScrollY=t,e})))}createOrientationObservable(e){return _e.createDomObservableFromEvent("orientationchange",Ce.getOrientationMapFn.bind(this))}createResizeObservable(e){const t=e.debounceMSTimeForResize;return _e.createDomObservableFromEvent("resize",Ce.getResizeMapFn.bind(this)).pipe((0,G.debounceTime)(t))}getEventsFromConfig(e=this.domChannelConfig){let t=e.events;return Ae((e=>{let t=Ce.createCurriedGenericEvent(e);return _e.createDomObservableFromEvent(e,t)}),t)}getActiveObservables(e=this.domChannelConfig){let r=[];e.listenForMediaQueries=F(e.mediaQueries)||F(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,G.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){}onSetElementToScroll(e){let{config:t,el:r,scrollElement:s}=e.payload;t=t||{},t=u(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=_e.createMediaQueryHandler.bind(this),this.createMergedObsFromObj=_e.createMergedObsFromObj.bind(this)}}class Se extends Ee{constructor(e={}){super("CHANNEL_LIFECYCLE",e)}addRegisteredActions(){return["CHANNEL_LIFECYCLE_RENDERED_EVENT","CHANNEL_LIFECYCLE_DISPOSED_EVENT"]}onViewStreamInfo(e){let{action:t,srcElement:r}=e,s=r;s.action=t,this.onSendEvent(t,s)}onSendEvent(e,t={}){const r=this.channelActions[e],s={};window.setTimeout((()=>this.sendChannelPayload(r,t,s,void 0)),0)}}class fe extends Ee{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===A.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,A.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 ye=n(205).map,be=new Map;class ve{constructor(){this.addMixins(),be.set("DISPATCHER",new e.Subject),this.listRegisteredChannels=ve.listRegisteredChannels.bind(this),this.getChannelsList=ve.getChannelsList.bind(this)}get map(){return be}static getChannelsList(){return Array.from(be,((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)(", "),ye((0,t.prop)("key")))(r)}`;console.warn(e)}}init(){this.createMainStreams()}createMainStreams(){this.routeStream=new ge,be.set("CHANNEL_ROUTE",this.routeStream),this.uiStream=new Te,be.set("CHANNEL_UI",this.uiStream),this.domStream=new Ce,be.set("CHANNEL_WINDOW",this.domStream),this.viewStreamLifecycle=new Se,be.set("CHANNEL_LIFECYCLE",this.viewStreamLifecycle),this.routeStream.initializeStream(),this.domStream.initializeStream()}addKeyEvent(e){be.get("UI").addKeyEvent(e)}registerStream(e){let r=e.channelName;be.has(r)&&(0,t.compose)((0,t.pathEq)(["props","isRegistered"],!0))(be.get(r))?console.warn(`Spyne Warning: The Channel, ${r}, has already been registered!`):(be.set(r,e),e.initializeStream())}getChannelActions(e){return be.get(e).addRegisteredActions()}getProxySubject(e,t=!1){let r=!0===t?"replaySubject":"subject";return be.get(e)[r]}testStream(e){return void 0!==be.get(e)}getStream(e){return!1===this.testStream(e)&&be.set(e,new fe(e)),be.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((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)}})(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;"function"==typeof o[e]&&(s[e]=r[e]=o[e].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 Ie{constructor(e,t,r){this._mapFn=Ie.setMapFn(e),this._url=Ie.setUrl(e),this._responseType=Ie.setResponseType(e),this._serverOptions=Ie.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&&Ie.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,G.tap)(c),(0,G.flatMap)((t=>(0,e.from)(t[i]()))),(0,G.map)(s),(0,G.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)(Ie.baseOptions(),r);return s=Ie.updateMethodWhenBodyExists(s),s=Ie.stringifyBodyIfItExists(s),s}static baseOptions(){return{method:"GET",headers:{Accept:"application/json, text/plain, */*"}}}}class De extends Ee{constructor(e,t={}){De.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 Ie(r,t)}onFetchUpdate(e){let t=this.getPropsForFetch(e);this.startFetch(t)}onFetchReturned(e){return 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 Le=new ve;let Re=new class{constructor(){this.version="0.18.1"}get channels(){return Le}init(e={},t=!1){if(!0===A.initialized)return t?"The Spyne Application has already been initialized!":void console.warn("The Spyne Application has already been initialized!");let r={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"}}}}};void 0!==e&&(e=A.initialize(r,e,Le),window.Spyne=this,window.Spyne.config=u(r,e)),this.pluginsFn=A.getPluginsMethodObj(e.pluginMethods),this.getChannelActions=e=>Le.getChannelActions(e),this.registerChannel=e=>Le.registerStream(e),this.registerDataChannel=e=>Le.registerStream(e),this.listChannels=()=>Array.from(Le.map.keys());let s=new he({id:"spyne-null-views"});s.appendToDom(document.body),s.props.el.style.cssText="display:none; opacity:0; pointer-events:none;",Le.init(),A.config.debug}static listChannels(){return Array.from(Le.map.keys())}static getChannelActions(e){return Le.getChannelActions(e)}static registerChannel(e){if(!1!==A.initialized)return Le.registerStream(e);console.warn("Spyne has not been initialized")}};class Pe{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=Pe.mergeDefaultConfig(s,this.defaultConfig()),this.props.parentEl=o||Pe.createParentEl(),Pe.getSpyneApp(r,s),void 0!==this.props.traits&&this.addTraits(this.props.traits),this.onBeforeRegistered(),this.onRegistered(),this.onRender()}static mergeDefaultConfig(e={},t=this.defaultConfig()){return Object.assign(t,e)}static getSpyneApp(e,t){!1===A.initialized&&Re.init(),A.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 j({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})()}addTraits(e){"Array"!==e.constructor.name&&(e=[e]),e.forEach((e=>new e(this)))}onBeforeRegistered(){this.props.pluginName=this.props.name,this.props.config=A.getPluginConfigByPluginName(this.props.pluginName)}defaultConfig(){return{}}onRegistered(){}onRender(){}}})(),i})()}));
|
|
@@ -1,10 +1,10 @@
|
|
|
1
1
|
/*!
|
|
2
|
-
|
|
3
|
-
|
|
4
|
-
|
|
5
|
-
|
|
6
|
-
|
|
7
|
-
|
|
8
|
-
|
|
9
|
-
|
|
10
|
-
*/
|
|
2
|
+
* Spyne 0.18.1
|
|
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
|
+
*/
|
package/package.json
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "spyne",
|
|
3
3
|
"sideEffects": false,
|
|
4
|
-
"version": "0.
|
|
4
|
+
"version": "0.18.2",
|
|
5
5
|
"description": "Reactive Real-DOM Framework for Advanced Javascript applications",
|
|
6
6
|
"main": "lib/spyne.min.js",
|
|
7
7
|
"module": "src/spyne/spyne.js",
|
|
@@ -30,60 +30,41 @@
|
|
|
30
30
|
"author": "Frank Batista",
|
|
31
31
|
"license": "LGPL",
|
|
32
32
|
"devDependencies": {
|
|
33
|
-
"@babel/core": "^7.
|
|
34
|
-
"@babel/
|
|
33
|
+
"@babel/core": "^7.15.0",
|
|
34
|
+
"@babel/plugin-transform-runtime": "^7.15.0",
|
|
35
|
+
"@babel/preset-env": "^7.15.0",
|
|
35
36
|
"babel-loader": "^8.2.2",
|
|
36
37
|
"chai": "^4.3.4",
|
|
37
38
|
"chai-dom": "^1.9.0",
|
|
38
|
-
"classlist-polyfill": "^1.2.0",
|
|
39
39
|
"clean-webpack-plugin": "^3.0.0",
|
|
40
|
-
"commitizen": "^4.2.
|
|
41
|
-
"css-loader": "^
|
|
40
|
+
"commitizen": "^4.2.4",
|
|
41
|
+
"css-loader": "^6.2.0",
|
|
42
42
|
"cz-conventional-changelog": "^3.3.0",
|
|
43
|
-
"
|
|
44
|
-
"eslint": "^
|
|
45
|
-
"eslint-config-
|
|
46
|
-
"eslint-config-standard": "^16.0.2",
|
|
43
|
+
"eslint": "^7.32.0",
|
|
44
|
+
"eslint-config-semistandard": "^16.0.0",
|
|
45
|
+
"eslint-config-standard": "^16.0.3",
|
|
47
46
|
"eslint-loader": "^4.0.2",
|
|
48
|
-
"eslint-plugin-import": "^2.
|
|
47
|
+
"eslint-plugin-import": "^2.24.2",
|
|
49
48
|
"eslint-plugin-node": "^11.1.0",
|
|
50
|
-
"eslint-plugin-promise": "^
|
|
49
|
+
"eslint-plugin-promise": "^5.1.0",
|
|
51
50
|
"eslint-plugin-standard": "^5.0.0",
|
|
52
|
-
"expect": "^26.6.2",
|
|
53
51
|
"file-loader": "^6.2.0",
|
|
54
|
-
"fstream": "^1.0.12",
|
|
55
52
|
"ghooks": "^2.0.4",
|
|
56
|
-
"
|
|
57
|
-
"immutable": "^3.8.2",
|
|
58
|
-
"istanbul": "^0.4.5",
|
|
59
|
-
"jsdoc": "^3.6.6",
|
|
60
|
-
"json-loader": "^0.5.7",
|
|
61
|
-
"karma": "^6.2.0",
|
|
53
|
+
"karma": "^6.3.4",
|
|
62
54
|
"karma-chai": "^0.1.0",
|
|
63
55
|
"karma-chrome-launcher": "^3.1.0",
|
|
64
56
|
"karma-coverage": "^2.0.3",
|
|
65
|
-
"karma-ie-launcher": "^1.0.0",
|
|
66
|
-
"karma-jasmine-es6": "0.0.3",
|
|
67
57
|
"karma-mocha": "^2.0.1",
|
|
68
|
-
"karma-virtualbox-ie11-launcher": "^1.2.7",
|
|
69
58
|
"karma-webpack": "^5.0.0",
|
|
70
|
-
"
|
|
71
|
-
"mocha": "^8.3.2",
|
|
59
|
+
"mocha": "^9.1.1",
|
|
72
60
|
"mocha-loader": "^5.1.5",
|
|
73
|
-
"
|
|
74
|
-
"
|
|
75
|
-
"
|
|
76
|
-
"
|
|
77
|
-
"
|
|
78
|
-
"
|
|
79
|
-
"
|
|
80
|
-
"url-loader": "^4.1.1",
|
|
81
|
-
"webpack": "^5.27.2",
|
|
82
|
-
"webpack-cli": "^4.6.0",
|
|
83
|
-
"webpack-dev-middleware": "^4.1.0",
|
|
84
|
-
"webpack-dev-server": "^3.11.2",
|
|
85
|
-
"webpack-merge": "^5.7.3",
|
|
86
|
-
"webpack-node-externals": "^2.5.2",
|
|
61
|
+
"selenium-webdriver": "^4.0.0-beta.4",
|
|
62
|
+
"tslib": "^2.3.1",
|
|
63
|
+
"webpack": "^5.51.1",
|
|
64
|
+
"webpack-cli": "^4.8.0",
|
|
65
|
+
"webpack-dev-middleware": "^5.0.0",
|
|
66
|
+
"webpack-dev-server": "^4.0.0",
|
|
67
|
+
"webpack-node-externals": "^3.0.0",
|
|
87
68
|
"webpack-rxjs-externals": "^2.0.0"
|
|
88
69
|
},
|
|
89
70
|
"config": {
|
|
@@ -95,9 +76,7 @@
|
|
|
95
76
|
}
|
|
96
77
|
},
|
|
97
78
|
"dependencies": {
|
|
98
|
-
"data.validation": "^1.3.1",
|
|
99
79
|
"ramda": "^0.27.1",
|
|
100
|
-
"rxjs": "^
|
|
101
|
-
"spynejs-polyfill": "0.0.5"
|
|
80
|
+
"rxjs": "^7.3.0"
|
|
102
81
|
}
|
|
103
82
|
}
|