spyne 0.20.2 → 0.20.5
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/.husky/pre-push +1 -0
- package/karma.conf.js +43 -84
- package/lib/spyne.esm.js +13 -10
- package/lib/{spyne.min.js.LICENSE.txt → spyne.esm.js.LICENSE.txt} +7 -1
- package/lib/spyne.esm.js.map +1 -1
- package/lib/spyne.umd.js +2 -2
- package/lib/spyne.umd.js.LICENSE.txt +12 -7
- package/package.json +7 -8
- package/rollup.config.js +1 -1
- package/src/spyne/channels/channel.js +42 -2
- package/src/spyne/spyne-app.js +12 -7
- package/src/spyne/utils/channel-payload-filter.js +18 -1
- package/src/spyne/utils/spyne-utils-channel-route.js +3 -3
- package/src/spyne/views/dom-element-template.js +5 -2
- package/src/spyne/views/dom-element.js +3 -2
- package/src/spyne/views/view-stream-broadcaster.js +12 -1
- package/src/tests/channels/channel-fetch.test.js +8 -1
- package/src/tests/channels/channel-payload-class.test.js +2 -2
- package/src/tests/channels/channel-route.test.js +1 -2
- package/src/tests/channels/channel.test.js +5 -3
- package/src/tests/channels/route-utils.test.js +2 -3
- package/src/tests/channels/view-stream-broadcaster.test.js +1 -2
- package/src/tests/package-json.spec.test.js +17 -9
- package/src/tests/spyne-app.test.js +1 -1
- package/src/tests/views/dom-el-template-proxy.test.js +12 -5
- package/src/tests/views/dom-el-template.test.js +14 -14
- package/src/tests/views/dom-el.test.js +4 -4
- package/webpack.config.js +47 -38
- package/lib/spyne.js +0 -35300
- package/lib/spyne.min.js +0 -2
package/lib/spyne.min.js
DELETED
|
@@ -1,2 +0,0 @@
|
|
|
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,((e,t,r)=>(()=>{"use strict";var s={896:e=>{e.exports=t},705:e=>{e.exports=r},130: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:()=>ge,ChannelFetch:()=>Pe,ChannelFetchUtil:()=>Re,ChannelPayload:()=>F,ChannelPayloadFilter:()=>ie,ChannelsMap:()=>De,DomElement:()=>q,DomElementTemplate:()=>G,SpyneApp:()=>Me,SpyneAppProperties:()=>y,SpynePlugin:()=>we,SpyneTrait:()=>Le,ViewStream:()=>Ee,ViewStreamBroadcaster:()=>J,ViewStreamElement:()=>K,ViewStreamPayload:()=>X,ViewStreamSelector:()=>pe,deepMerge:()=>u,safeClone:()=>U});var e=n(130),t=n(896);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=y.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)(e,"str"),(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)(!0,e))),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,_=!0;const T=[],A=new Map,C=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 y=new class{constructor(){}get channelsMap(){return N}get initialized(){return g}get config(){return E}get debug(){return _}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),_=void 0!==E.debug?E.debug:_,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),C.pluginMethodsObj}addPluginMethods(e){e&&C.addMethods(e)}doNotTrackChannel(e){T.push(e)}getUntrackedChannelsList(){return T}registerProxyReviver(e,t){A.set(e,t)}getProxyReviver(e){return A.get(e)}getPluginConfigByPluginName(e){return E.plugins[e]}tempGetChannelsInstance(){}tempGetConfig(){}};const S=n(130),f=n(130);let b=()=>({includes:()=>!0===y.initialized?y.listRegisteredChannels():["CHANNEL_ROUTE","CHANNEL_UI","CHANNEL_WINDOW","DISPATCHER"]}),v=["LOAD","RENDER","MOUNT","UNMOUNT","DISPOSE","GARBAGE_COLLECT","UPDATE"],O=["parent","self","child","children","view"],I=["Observable","BehaviorSubject","Subject","Observer","Subscriber","FromEventObservable"],D=["subscribe","combineLatest"],L=[],R=[],P=null,w=null,V=null,H=null,M=null,W=null,$=null;if(void 0!==t.compose&&void 0!==S){L=[{error:`need to match a valid name within ${I}`,predicate:e=>b().includes(e.name)},{error:"param 'observable' must contain a valid Observable",predicate:e=>void 0!==e.observable.subscribe},{error:"param action must be a registered action",predicate:e=>D.includes(e.action)}],R=[{error:"needs vsid number in srcElement",predicate:(0,t.compose)((0,t.is)(String),(0,t.path)(["data","srcElement","vsid"]))},{error:"needs a id in srcElement",predicate:(0,t.compose)((0,t.is)(String),(0,t.path)(["data","srcElement","id"]))}],P=function(){return[].concat(L).concat(R)};let e=[{error:`need to match a valid name within ${I}`,predicate:e=>b().includes(e.name)},{error:`needs one of the following step strings: ${v}`,predicate:e=>v.includes(e.STEP)},{error:`type needs to one of the following: ${O}`,predicate:e=>O.includes(e.type)},{error:"viewId needs to be added ",predicate:e=>void 0!==e.viewId}];V=function(){return[].concat(e)},H=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)},M=function(){return[{error:"UPDATE STEP requires a data object ",predicate:e=>"UPDATE"===e.STEP&&void 0!==e.data}].concat(e)},w=function(){return e.concat(L).concat(R)},W=function(){return[].concat(L).concat(R)},$=function(){let e=[{error:"param 'name' must be of a registered type",predicate:e=>b().includes(e.name)},{error:"param 'observable' must contain a valid Observable",predicate:e=>I.includes((0,e.observable)().constructor.name)},{error:"param action must be a registered action",predicate:e=>D.includes(e.action)}];return{streams:[{init:{name:"DISPATCHER",observable:()=>new f,action:"subscribe"},structure:{type:String,observable:S||f,action:String},validations:e},{init:{name:"UBU",observable:()=>new f,action:"subscribe"},structure:{type:String,observable:S||f,action:String},validations:e}]}}}const U=function(e){const{__proxy__proxyName:r}=e;if(void 0!==r){const s=y.getProxyReviver(r);if("function"==typeof s)return((e,r)=>{const{__proxy__proxyName:s}=e;void 0===s&&console.error("object is not proxy object ",e);const o=(s,o)=>{const n=(0,t.path)(o,e),{__proxy__isProxy:i,__proxy__props:a}=n;return i?r(s,a):s},n=o((0,t.clone)(e),[]),i=(e,t)=>{let r=t||[];Object.entries(e).forEach((([t,s])=>{const n=(e=>{let t=typeof e;return["number","boolean","string"].includes(t)?t="primitive":"object"===t&&(Array.isArray(e)?t="array":null===e&&(t="undefined")),t})(s),a=[...r];a.push(t),"object"!==n&&"array"!==n||(e[t]=o(s,a),i(s,a))}))};return i(n),n})(e,s)}const s=(0,t.is)(Array),o=(0,t.is)(Object);var n;return!1===s(n=e)&&!0===o(n)?(0,t.compose)(t.fromPairs,t.toPairs,t.clone)(e):(0,t.clone)(e)};class F{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=F.deepFreeze(s);if(c.payload=l,!0===y.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=y.getChannelActions(a);F.validateAction(r,a,e)}c.clone=()=>(0,t.mergeAll)([{payload:U(c.payload)},c.payload,{channel:(0,t.clone)(a)},{event:(0,t.clone)(n)},{srcElement:o},(0,t.clone)(c.srcElement),{action:(0,t.clone)(c.action)}]);const d={$dir:{get:()=>c._dir,set:e=>c._dir=e}};return"CHANNEL_ROUTE"===a&&(d.location={get:()=>F.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===y.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])||F.deepFreeze(e[t])}))}catch(t){return e}return e}static getMouseEventKeys(){return["altKey","bubbles","cancelBubble","cancelable","clientX","clientY","composed","ctrlKey","currentTarget","defaultPrevented","detail","eventPhase","fromElement","isTrusted","layerX","layerY","metaKey","movementX","movementY","offsetX","offsetY","pageX","pageY","path","relatedTarget","returnValue","screenX","screenY","shiftKey","sourceCapabilities","srcElement","target","timeStamp","toElement","type","view","which","x","y"]}}function x(){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 j=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])},k=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 G{constructor(e,r={}){this.template=this.formatTemplate(e),this.isProxyData=!0===r.__cms__isProxy,(()=>{!0===(0,t.is)(Array,r)&&(r={spyneData:r},this.template=this.template.replace("{{/}}","{{/spyneData}}"),this.template=this.template.replace("{{#}}","{{#spyneData}}"))})(),this.templateData=r;let s=G.getStringArray(this.template),o=this.template.match(G.findTmplLoopsRE());o=null===o?[]:o;const n=G.parseTmplLoopsRE(),i=this.parseTheTmplLoop.bind(this),a=(0,t.includes)(t.__,o),c=(0,t.ifElse)(a,((e,t)=>e.replace(n,i)),this.addParams.bind(this));this.finalArr=s.map(c)}static isPrimitiveTag(e){return/({{\.\*?}})/.test(e)}static getNestedDataReducer(e={},t=""){return/(\.)/gm.test(String(t))?String(t).split(".").reduce(((e,t)=>e[t]?e[t]:e),e):e[t]}static getStringArray(e){let r=e.split(G.findTmplLoopsRE());const s=/^([\\n\s\W]+)$/;return(0,t.reject)((e=>e.match(s)),r)}static findTmplLoopsRE(){return/({{#[\w.]+}}[\w\n\s\W]+?{{\/[\w.]+}})/gm}static parseTmplLoopsRE(){return/({{#([\w.]+)}})([\w\n\s\W]+?)({{\/\2}})/gm}static swapParamsForTagsRE(){return/({{)(.*?)(}})/gm}removeThis(){this.finalArr=void 0,this.templateData=void 0,this.template=void 0}renderDocFrag(){const e=this.finalArr.join(""),t=/^([^>]*?)(<){1}(\b)(thead|col|colgroup|tbody|td|tfoot|tr|th)(\b)([^\0]*)$/.test(e)?e:document.createRange().createContextualFragment(e);return window.setTimeout(this.removeThis(),2),t}renderToString(){const e=this.finalArr.join("");return window.setTimeout(this.removeThis(),2),e}getTemplateString(){return this.finalArr.join("")}formatTemplate(e){return"SCRIPT"===(0,t.prop)("nodeName",e)?e.innerHTML:e}getDataValFromPathStr(e,r){const s=String(e).split(".");return(0,t.path)(s,r)||""}addParams(e){return e.replace(G.swapParamsForTagsRE(),((e,t,r,s)=>G.getNestedDataReducer(this.templateData,r)))}parseTheTmplLoop(e,r,s,o){const n=/(\.)/gm,i=o;let a=G.getNestedDataReducer(this.templateData,s);const c=(e,t,r)=>G.isPrimitiveTag(t)?l(e,t,r):d((()=>{const t=e,s=r,o=r+1;return this.isProxyData?{spyneLoopKey:t,__cms__dataId:a.__cms__dataId,origKey:a[`__cms__keyFor_${e}`],loopIndex:s,loopNum:o,d:e}:{spyneLoopKey:t,loopIndex:s,loopNum:o}})(),t,r),l=(e,t,r,s)=>t.replace(G.swapParamsForTagsRE(),e),d=(e,t,r)=>t.replace(G.swapParamsForTagsRE(),((t,s,o)=>{const i={loopIndex:r,loopNum:r+1};if(!1===n.test(o)&&void 0!==e[o])return void 0!==i[o]?i[o]:e[o];const a=this.getDataValFromPathStr(o,e);return void 0!==i[o]?i[o]:a}));return!0===(0,t.isNil)(a)||(0,t.isEmpty)(a)?"":(void 0===a.length&&(a=[a]),a.map(((e,t)=>"string"==typeof e?c(e,i,t):d(e,i,t))).join(""))}}class q{constructor(e={}){var r;e.tagName=("div",r=e.tagName,(0,t.defaultTo)("div")(r)),e.attributes=void 0!==e.attributes?e.attributes:this.getDomAttributes(e),e.attrs=this.updateAttrs(e.attributes),e.fragment=document.createDocumentFragment(),this.props=e,this.addMixins()}setProp(e,t){this.props[e]=t}getProp(e){return this.props[e]}get el(){return this.props.el}setElAttrs(e,r){return this.getProp("attrs").forEach(((r,s)=>{"dataset"===s?(0,t.forEachObjIndexed)(((t,r)=>{e.dataset[r]=t}),r):e.setAttribute(s,r)})),e}updateAttrs(e,r){let s=void 0!==r?r:new Map;return(0,t.mapObjIndexed)(((e,t)=>s.set(t,e)),e),s}addTemplate(e){let r=this.getProp("template");return void 0!==r?(r=>{let s=this.getProp("data");s=(0,t.is)(Object,s)?s:{};let o=new G(r,s).renderDocFrag();return(0,t.is)(String,o)?e.innerHTML=o:e.appendChild(o),e})(r):e}createElement(e="div"){return document.createElement(e)}addContent(e){let r=this.getProp("data");if(!0===(0,t.is)(String,r)){let t=document.createTextNode(r);e.appendChild(t)}return e}execute(){let e=(0,t.pipe)(this.createElement.bind(this),this.setElAttrs.bind(this),this.addTemplate.bind(this),this.addContent.bind(this))(this.getProp("tagName"));this.props.el=e}render(){return this.execute(),this.props.template=void 0,this.props.data=void 0,this.props.attributes=void 0,this.getProp("el")}renderToHTMLString(){return this.execute(),this.props.template=void 0,this.props.data=void 0,this.props.attributes=void 0,this.getProp("el").outerHTML}returnIfDefined(e,t){if(void 0!==t){let r=void 0===t;e[t]=!1===r?t: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=x();this.gc=e.gc.bind(this)}getDomAttributes(e){return(0,t.pick)(this.attributesArray,e)}get attributesArray(){return["accept","accept-charset","accesskey","action","align","allow","alt","async","autocapitalize","autocomplete","autofocus","autoplay","bgcolor","border","buffered","challenge","charset","checked","cite","class","code","codebase","color","cols","colspan","content","contenteditable","contextmenu","controls","coords","crossorigin","csp","dataset","datetime","decoding","default","defer","dir","dirname","disabled","download","draggable","dropzone","enctype","for","form","formaction","headers","height","hidden","high","href","hreflang","http-equiv","icon","id","importance","integrity","ismap","itemprop","keytype","kind","label","lang","language","lazyload","list","loop","low","manifest","max","maxlength","minlength","media","method","min","multiple","muted","name","novalidate","open","optimum","pattern","ping","placeholder","poster","preload","radiogroup","readonly","referrerpolicy","rel","required","reversed","rows","rowspan","sandbox","scope","scoped","selected","shape","size","sizes","slot","span","spellcheck","src","srcdoc","srclang","srcset","start","step","style","summary","tabindex","target","title","translate","type","usemap","value","width","wrap"]}}let Y=(e=!1,t=1,r="ease",s=!1)=>`${!0===s?"opacity:0;":""}transition: opacity ${t}s ${r}; opacity: ${!0===e?1:0};`;var B=n(705);class z{constructor(e){this.props.observableStreams=z.createDirectionalObservables()}static createDirectionalFiltersObject(){const e="internal",t="parent",r="child";return{P:[t],C:[r],PCI:[t,e,r],CI:[r,e],PI:[t,e],PC:[t,r]}}static addDefaultDir(e){return(0,t.flip)(t.mergeRight)({$dir:["internal"]},(0,t.clone)(e))}static addDownInternalDir(e,r=["internal","down"]){return(0,t.flip)(t.mergeRight)((0,t.clone)(e),{$dir:r})}static addChildAndInternalDir(e,r=["child","down"]){return(0,t.flip)(t.mergeRight)((0,t.clone)(e),{$dir:r})}static mapToDefaultDir(e){return this.addDefaultDir(e)}static createDirectionalObservables(r=new e.Subject,s,o){void 0!==s&&void 0!==o&&(r.viewName=s,r.vsid=o);const n=e=>(0,t.propSatisfies)((t=>t.includes(e)),"$dir"),i=n("parent"),a=n("child"),c=n("internal"),l=e=>(0,t.mergeRight)({from$:e}),d=l("child"),h=l("internal"),p=l("parent"),u=r.pipe((0,B.filter)((e=>void 0!==e&&void 0!==e.action))),E=r.pipe((0,B.filter)(c),(0,B.map)(h)),m=r.pipe((0,B.filter)(i),(0,B.map)(d)),N=r.pipe((0,B.filter)(a),(0,B.map)(p)),g={parent:m,internal:E,child:N};return{raw$:u,toInternal$:E,toParent$:m,toChild$:N,completeAll:()=>{(0,t.forEach)((e=>{e.complete(),e.isStopped=!0}),[u,E,m,N])},completeStream:(e=[])=>{void 0!==e&&e.length>=1&&e.forEach((e=>{var t;void 0!==g[e]&&((t=g[e]).complete(),t.isStopped=!0)}))}}}}class K{constructor(t,r={},s="",o="theName"){this.addMixins(),this._state="INIT",this.vsid=s,this.vsName=o,this.defaults={debug:!1,extendedHashMethods:{}},this.options=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=z.createDirectionalFiltersObject(),this.addDefaultDir=z.addDefaultDir,this.sourceStreams=z.createDirectionalObservables(new e.Subject,this.vsName,this.vsid),this._source$=this.sourceStreams.toInternal$}addActionListeners(){return[]}setHashMethods(e={}){return 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 q(r,e,s,o)}onDisposeCompleted(e){}animateInTween(e,t){!function(e,t){let r=1*window.getComputedStyle(e).opacity,s=Y(!0,t,"ease",1===r);e.style.cssText+=s}(e,t)}animateOutTween(e,t,r){!function(e,t,r){let s=Y(!1,t,"ease");e.style.cssText+=s,e.addEventListener("transitionend",r,!1)}(e,t,r)}setAnimateIn(e){if(!0===e.animateIn){let t=void 0!==e.el?e.el:this.domItem.el;this.animateInTween(t,e.animateInTime)}}disposeMethod(t){let r=void 0!==t.el.el?t.el.el:t.el;const s={action:"READY_FOR_VS_DETRITUS_COLLECT",$dir:this.$dirs.PI,el:r};let o=(0,e.bindCallback)(((e,t)=>{this.animateOutTween(r,e.animateOutTime,t)})),n=e=>{this._source$.next(s)},i=!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});return i(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,t)=>e.appendChild(t),after:(e,t)=>e.after(t)}[e.attachType]||((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 q({tagName:t,attributes:r,data:s,template:o}),this.domItem}onRender(e){return{action:"VS_SPAWNED",el:(e=>this.renderDomItem(e))((0,t.props)(["tagName","domAttributes","data","template"],e)),$dir:this.$dirs.I}}extendedMethods(e){}onRenderAndAttachToDom(e){return e.attachData.el=(e=>this.renderDomItem(e))((0,t.props)(["tagName","domAttributes","data","template"],e)),this.combineDomItems(e.attachData),{action:"VS_SPAWNED_AND_ATTACHED_TO_DOM",el:e.attachData.el.el,$dir:this.$dirs.CI}}onObsSinkSubscribe(e){let r=e.action,s=(0,t.defaultTo)((e=>this.extendedMethods(e))),o=s(this.options.hashMethods[r])(e);void 0!==o&&(e=>{this._source$.next(e)})(Object.freeze(o))}addMixins(){}}function Q(){setTimeout((()=>{(0,t.forEach)((e=>{}),this)}),1)}class X{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=y.channelsMap.getStream("DISPATCHER");const r=U(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=Q}}class J{constructor(e,t){this.addMixins(),this.props=e,this.broadcastFn=t,this.broadcaster(this.broadcastFn)}addDblClickEvt(r){return(0,e.fromEvent)(r,"dblclick").pipe((0,B.map)((e=>{let r=(0,t.clone)(e);return r.typeOverRide="dblclick",r})))}broadcast(r){let s,o={UI:this.sendUIPayload,ROUTE:this.sendRoutePayload},[n,i,a]=r,c=this.props.el.querySelectorAll(n);if(c.length<=0){let e=this.props.el;const t=t=>{t===e&&(c=[t])};(()=>{let r=(null!==e.parentElement?e.parentElement:document).querySelectorAll(n);r.forEach=Array.prototype.forEach,r.forEach(t)})()}let l=void 0!==a,d=!0===y.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 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 Z=n(896).map,ee=(0,t.compose)(t.not,(0,t.is)(Array)),te=(0,t.compose)(t.not,t.isEmpty),re=(0,t.allPass)([(0,t.is)(String),te]),se=(0,t.allPass)([(0,t.is)(Array),te]),oe=(0,t.compose)((0,t.allPass)([ee,(0,t.is)(Object)])),ne=(0,t.compose)((0,t.allPass)([te,ee,(0,t.is)(Object)]));class ie{constructor(e,r={},s,o){oe(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=re(e)?ie.filterSelector([e],s):void 0,l=se(e)?ie.filterSelector(e,s):void 0,d=ne(a)?ie.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===y.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=Z(((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 ie.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 Z(c,r)};if(void 0!==r){let s=(0,t.compose)(t.flatten,Z(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,Z(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)(ie.checkPayloadSelector)(s,r)}}function ae(){return!0===y.debug}function ce(e,r,s=!1){let o=de(e,r,s);return 1===o.length?(0,t.head)(o):o}function le(e,r,s){let o=document.querySelector(e);const n=(0,t.compose)((0,t.lte)(0),(0,t.defaultTo)(-1),(0,t.prop)("nodeType"));null===o||!1!==n(o)?void 0!==r&&null===o.querySelector(r)&&!0===ae()&&!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 de(e,t,r=!1){let s=!1;const o=(r=>{let o=[];try{o=document.querySelectorAll(r)}catch(e){o=[]}try{s=document.querySelector(t)===document.querySelector(e),!0===s&&(o=[document.querySelector(t)])}catch(e){}return o})(void 0!==t?`${e} ${t}`:e);return!0===r&&le(!0===s?"body":e,t,r),o}function he(e,t,r){return de(t,r).forEach((t=>{t.style.cssText=e})),this}function pe(e,r){function s(t){return pe(e,t)}return le(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(de(e,r)).map(t),s.forEach=t=>Array.from(de(e,r)).map(t),s.getNodeListArray=()=>de(e,r),s.addClass=t=>(de(e,r).forEach((e=>e.classList.add(t))),this),s.removeClass=t=>(de(e,r).forEach((e=>{e.classList.remove(t)})),this),s.setClass=s=>(de(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)=>(de(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((()=>{de(e,r).forEach((e=>e.classList.add(t)))}),1)},s.setActiveItem=(s,o)=>{let n=de(e,r),i="string"==typeof o?ce(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===ae()&&console.warn(`Spyne Warning: The selector, ${o}, does not appear to be a valid item in setActiveItem: ${s}`),this},Object.defineProperty(s,"el",{get:()=>ce(e,r,!0)}),Object.defineProperty(s,"els",{get:()=>de(e,r)}),Object.defineProperty(s,"len",{get:()=>de(e,r,!1).length}),Object.defineProperty(s,"exists",{get:()=>de(e,r,!1).length>=1}),Object.defineProperty(s,"exist",{get:()=>de(e,r,!1).length>=1}),Object.defineProperty(s,"nodeList",{get:()=>de(e,r)}),Object.defineProperty(s,"arr",{get:()=>{let t=ce(e,r,!0);return void 0===t?[]:void 0===t.length?[t]:Array.from(t)}}),Object.defineProperty(s,"inline",{set:t=>he(t,e,r)}),Object.defineProperty(s,"inlineCss",{set:t=>he(t,e,r)}),s}const ue=n(896).map;class Ee{constructor(r={}){this.vsnum=Math.random(),this.addMixins(),this.defaults=()=>{const e=this.createId(),t=r.id?r.id:e;return{vsid:e,id:t,tagName:"div",el:void 0,data:void 0,animateIn:!1,animateInTime:.5,animateOut:!1,animateOutTime:.5,sendLifecyleEvents:!1,hashId:`#${t}`,id$:`#${t}`,viewClass:K,extendedSourcesHashMethods:{},debug:!1,template:void 0,node:document.createDocumentFragment(),name:j(this)}},this._state={},this.$dirs=z.createDirectionalFiltersObject(),this.addDefaultDirection=z.addDefaultDir,this.addDownInternalDir=z.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=Ee.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 y.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=>y.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,ue(o),(0,t.slice)(0,2),(0,t.defaultTo)([]));return(0,t.compose)(s,ue(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()):null===this.props.el&&console.error(`Spyne Error: The defined element for this ViewStream instance, ${this.constructor.name}, appears to not exist.`)}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 ie({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,B.map)((e=>this.onMapViewSource(e))),(0,B.takeWhile)(this.notGCSTATE)),this.initAutoMergeSourceStreams(),this.updateSourceSubscription(this._source$,!0)}notGCSTATE(e){return!e.action.includes("READY_FOR_VS_DETRITUS_COLLECT")}eqGCSTATE(e){return!e.action.includes("READY_FOR_VS_DETRITUS_COLLECT")}notCOMPLETED(e){return!e.action.includes("COMPLETED")}notGCCOMPLETE(e){return!e.action.includes("GC_COMPLETE")}testVal(e){console.log("TESTING VALL IS ",e)}addParentStream(e,t){this.parent$=e.pipe((0,B.filter)((e=>void 0!==e&&void 0!==e.action)),(0,B.map)((e=>{let t=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,B.filter)((e=>void 0!==e&&void 0!==e.action)),(0,B.tap)((e=>this.tracer("addChildStraem do ",e))),(0,B.map)((e=>e)),(0,B.finalize)((e=>this.onChildCompleted(t.source))));this.updateSourceSubscription(t,!0,"CHILD")}onChildDisposed(e){}onChildCompleted(e){let r=(e=>{let r=e=>{for(;void 0!==e.destination;)e=r(e.destination);return e};return(0,t.pick)(["id","vsid"],r(e))})(e);return this.tracer("onChildCompleted ",this.vsnum,e),this.onChildDisposed(r,e),r}initAutoMergeSourceStreams(){let t={next:this.onSubscribeToSourcesNext.bind(this),error:this.onSubscribeToSourcesError.bind(this),complete:this.onSubscribeToSourcesComplete.bind(this)},r=()=>{this.props.el$=void 0,this.uberSource$.complete(),this.autoSubscriber$.complete(),this.sink$.complete(),this.props=void 0,this.deleted=!0,this.tracer("completeAll",this.deleted,this.props)},s=()=>{o-=1,0===o&&r()},o=0;this.uberSource$=new e.Subject,this.autoMergeSubject$=this.uberSource$.pipe((0,B.mergeMap)((e=>{let t=e.observable.pipe((0,B.filter)((e=>void 0!==e&&void 0!==e.action)),(0,B.map)((e=>{let t=u({},e);return t.action=e.action,this.tracer("autoMergeSubject$",t),t})));return!1===e.autoClosesBool?t:(o+=1,t.pipe((0,B.finalize)(s)))}))),this.autoSubscriber$=this.autoMergeSubject$.pipe((0,B.filter)((e=>void 0!==e&&void 0!==e.action))).subscribe(t)}updateSourceSubscription(e,t=!1,r){let s={observable:e,autoClosesBool:t,rel:r};this.tracer("updateSourceSubscription ",this.vsnum,s),this.uberSource$.next(s)}onSubscribeToSourcesNext(e={}){let r=(0,t.defaultTo)((e=>this.sendExtendedStreams(e)));const s=void 0!==(o=this.props.hashSourceMethods)[n=e.action]?n:(0,t.compose)(t.head,(0,t.filter)((0,t.compose)((0,t.test)(t.__,n),(e=>new RegExp(e)))))((0,t.keys)(o));var o,n;r(this.props.hashSourceMethods[s])(e),this.tracer("onSubscribeToSourcesNext",{payload:e})}onSubscribeToSourcesError(e=""){console.log("ALL ERROR ",this.constructor.name,e)}onSubscribeToSourcesComplete(){this.tracer("onSubscribeToSourcesComplete","VS_DETRITUS_COLLECT"),this.openSpigot("VS_DETRITUS_COLLECT")}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===Ee.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")}appendToDomAfter(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 appendedToDomAfter. This may create unsusual side effects!`),this.renderViewAndAttachToDom(e,"dom","after")}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))}appendViewAfter(e,t){this.exchangeViewsWithChild(e,this.setAttachData("after",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===Ee.isValidNestedArr(e)&&console.warn(`Spyne Warning: The array returned from broadcastEvents in ${this.props.name}, '${JSON.stringify(e)}', does not appear to be properly formatted!`)}this.viewsStreamBroadcaster=new J(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===Ee.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)&&Ee.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$=pe(this.props.el)}downStream(){}onRendered(){}onAnimFrameAfterRendered(){}afterRender(){}broadcastEvents(){return[]}getChannel(e){return(0,t.ifElse)((e=>b().includes(e)),(e=>y.channelsMap.getStream(e).observer.pipe((0,B.takeWhile)((e=>!0!==this.deleted)))),(e=>console.warn(`channel name ${e} is not within ${b}`)))(e)}addChannel(e,r=!1,s=!1,o=!1){const n=!0===s?this.$dirs.CI:this.$dirs.I,i=(0,t.path)(["srcElement","isLocalEvent"]),a=(0,t.path)(["srcElement","vsid"]),c=[(0,B.map)((e=>{let t=e;return t.$dir=n,t})),(0,B.filter)((e=>{let t=a(e);return!0!==i(e)||t===this.props.vsid}))];!0===r&&c.unshift((0,B.skip)(1));let l=this.getChannel(e).pipe(...c);this.updateSourceSubscription(l,!1),this.props.addedChannels.push(e)}checkIfChannelExists(e){let t=y.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:()=>U(s)}});let t=(0,e.of)(c);return new X(r,t,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 ie(e,t)}isLocalEvent(e){const r=(0,t.path)(["srcElement","el"],e),s=(0,t.path)(["props","el"],this);return Ee.elIsDomElement(s)&&Ee.elIsDomElement(r)&&s.contains(r)}addMixins(){let e=x();this.createId=e.createId}}class me{constructor(e){let r=String(e.props.name),s=`${r}_ROUTE_UPDATER`;return(0,t.curry)(me.createTemporaryViewStreamObj)({id:s,name:r})}static createTemporaryViewStreamObj(e,t){let{name:r,id:s}=e,o=t,n=new Ee({id:s,name:r,data:t});n.onRendered=()=>{n.sendInfoToChannel("CHANNEL_ROUTE",o)},n.afterBroadcastEvents=()=>{n.disposeViewStream()},n.appendToNull()}}const Ne=n(896).map;class ge{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 me(this),this.createChannelActionMethods(),this.streamsController=y.channelsMap;let o=this.getMainObserver();this.checkForPersistentDataMode=ge.checkForPersistentDataMode.bind(this),this.observer$=this.props.observer=o;let n=this.streamsController.getStream("DISPATCHER");const i=(0,t.propEq)(r.name,"name");n.pipe((0,B.filter)(i)).subscribe((e=>this.onReceivedObservable(e)))}getMainObserver(){return void 0===this.streamsController&&console.warn(`Spyne Warning: The following channel, ${this.props.name}, appears to be registered before Spyne has been initialized.`),!0===this.streamsController.testStream(this.props.name)?this.streamsController.getProxySubject(this.props.name,this.props.sendCachedPayload):!0===this.props.sendCachedPayload?new e.ReplaySubject(1):new e.Subject}onChannelInitialized(){}onRegistered(e=this.props){if(void 0!==e.data){const t=Object.keys(this.channelActions)[0];this.sendChannelPayload(t,e.data)}}get isProxy(){return this.props.isProxy}get channelName(){return this.props.name}get observer(){return this.observer$}checkForTraits(){void 0!==this.props.traits&&(e=>{"Array"!==e.constructor.name&&(e=[e]),e.forEach((e=>new e(this)))})(this.props.traits)}initializeStream(){this.checkForTraits(),this.onChannelInitialized(),this.checkForPersistentDataMode(),this.onRegistered(),this.props.isRegistered=!0}static checkForPersistentDataMode(e=this.props,r=this.channelActions){const s=(0,t.isEmpty)(r),o=void 0!==(0,t.prop)("data",e);return!0===s&&!0===o&&(e.sendCachedPayload=!0,r=(()=>{const{name:t}=e,r=`${t}_EVENT`;return{[r]:r}})(),void 0!==this.channelActions&&(this.channelActions=r)),{props:e,actionsObj:r}}setTrace(e){}createChannelActionsObj(e,r=[]){const s=(0,t.ifElse)((0,t.is)(String),t.identity,t.head);let o=r.concat(this.addRegisteredActions(e)),n=Ne(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)(Ne((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=>({clone:()=>{return r=e.data,(0,t.mergeAll)([r,{action:(0,t.prop)("action",r)},(0,t.prop)("payload",r),(0,t.prop)("srcElement",r)]);var r},action:s,payload:o,srcElement:n,event:r});return!0===r?(e=>e.observable.pipe((0,B.map)(i)).subscribe(this.getActionMethodForObservable(e)))(e):void 0}onViewStreamInfo(e){}sendChannelPayload(e,t,r={},s={},o=this.observer$){let n=new F(this.props.name,e,t,r,s);o.next(n)}getChannel(e,r){return(0,t.ifElse)((e=>b().includes(e)),(e=>{let t=this.streamsController.getStream(e).observer;return void 0!==r?t.pipe((0,B.filter)(r)):t}),(e=>console.warn(`channel name ${e} is not within ${b}`)))(e)}static checkForNotTrackFlag(e={}){!0===e.doNotTrack&&y.doNotTrackChannel(e.channelName)}}const _e=n(896).filter,Te=n(896).mergeRight;class Ae extends ge{constructor(t="CHANNEL_ROUTE",r={}){r.sendCachedPayload=!0,super("CHANNEL_ROUTE",r),this.createChannelActionsObj(),this.routeConfigJson=this.getRouteConfig(),this.bindStaticMethods(),this.navToStream$=new e.ReplaySubject(1),this.observer$=this.navToStream$.pipe((0,B.map)((e=>this.onMapNext(e)))),this.compareRouteKeywords=s.compareRouteKeywords()}checkConfigForHash(){!0==("hash"===y.config.channels.ROUTE.type)&&(y.config.channels.ROUTE.type="slash",y.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);y.config.channels.ROUTE=(0,t.mergeRight)(y.config.channels.ROUTE,r),y.conformRouteConfig();const s=this.getRouteConfig();this.routeConfigJson=s,this.bindStaticMethodsWithConfigData(),this.sendChannelPayload("CHANNEL_ROUTE_CONFIG_UPDATED_EVENT",s,{},{},this.navToStream$)}getRouteConfig(){const e=y.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=Te(a,c),this.sendChannelPayload(o,a,void 0,e,this.navToStream$)}static checkForRouteParamsOverrides(e){return e}static checkForEventMethods(e){const r=(0,t.compose)(_e((0,t.test)(/^(event)([A-Z].*)([A-Z].*)$/gm)),t.keys,(0,t.prop)("payload"))(e);if(r.length>=1){const s=(0,t.prop)("event",e);if(void 0!==s){const e=(e,t,r,s,o)=>String(r).toLowerCase()+s+o,o=(0,t.replace)(/^(event)([A-Z])(.*)([A-Z].*)$/gm,e),n=e=>{const t=o(e);void 0!==s[t]&&s[t]()};r.forEach(n)}}return e}static checkForEndRoute(e,r=this.routeConfigJson,s){if(!0!==(0,t.compose)((0,t.equals)("true"),(0,t.path)(["payload","endRoute"]))(e))return e;const o=void 0!==s?s:!0===y.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;Ae.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=Te(s,a),this.sendRouteStream(s,i),s=Ae.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=Te(d.routeData,o);let{routeCount:u,isDeepLink:E,isHash:m,isHistory:N,isHidden:g,routeType:_}=this.getExtraPayloadParams(s);return{isDeepLink:E,routeCount:u,pathInnermost:h,paths:p,routeData:o,routeValue:n,isHash:m,isHidden:g,isHistory:N,routeType:_}}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}=Ae.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=Ae.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=Ae.checkForEndRoute.bind(this),this.getIsDeepLinkBool=Ae.getIsDeepLinkBool.bind(this),this.getDataFromLocationStr=Ae.getDataFromLocationStr.bind(this),this.onIncomingDomEvent=Ae.onIncomingDomEvent.bind(this),this.getDataFromString=Ae.getDataFromString.bind(this),this.getParamsFromRouteStr=Ae.getParamsFromRouteStr.bind(this),this.getLocationData=Ae.getLocationData.bind(this),this.getRouteState=Ae.getRouteState.bind(this),this.getDataFromParams=Ae.getDataFromParams.bind(this),this.getRouteCount=Ae.getRouteCount.bind(this),this.getExtraPayloadParams=Ae.getExtraPayloadParams.bind(this),this.bindStaticMethodsWithConfigData()}bindStaticMethodsWithConfigData(){const e=(0,t.curryN)(3,Ae.getRouteStrFromParams);this.getRouteStrFromParams=e(t.__,this.routeConfigJson,this.routeConfigJson.type)}}class Ce extends ge{constructor(e="CHANNEL_UI",t={}){t.sendCachedPayload=!1,super(e,t),this.keyEventsLoaded=!1,this.keyCodeArr=[]}addRegisteredActions(){return["CHANNEL_UI_ANIMATIONEND_EVENT","CHANNEL_UI_ANIMATIONITERATION_EVENT","CHANNEL_UI_ANIMATIONSTART_EVENT","CHANNEL_UI_AUDIOEND_EVENT","CHANNEL_UI_AUDIOPROCESS_EVENT","CHANNEL_UI_AUDIOSTART_EVENT","CHANNEL_UI_BLUR_EVENT","CHANNEL_UI_CACHED_EVENT","CHANNEL_UI_CANPLAYTHROUGH_EVENT","CHANNEL_UI_CANPLAY_EVENT","CHANNEL_UI_CHANGE_EVENT","CHANNEL_UI_CHECKBOXSTATECHANGE_EVENT","CHANNEL_UI_CLICK_EVENT","CHANNEL_UI_COMPLETE_EVENT","CHANNEL_UI_CONTEXTMENU_EVENT","CHANNEL_UI_COPY_EVENT","CHANNEL_UI_CUT_EVENT","CHANNEL_UI_DBLCLICK_EVENT","CHANNEL_UI_DURATIONCHANGE_EVENT","CHANNEL_UI_EMPTIED_EVENT","CHANNEL_UI_ENDED_EVENT","CHANNEL_UI_EVENT","CHANNEL_UI_FOCUSIN_EVENT","CHANNEL_UI_FOCUSOUT_EVENT","CHANNEL_UI_FOCUS_EVENT","CHANNEL_UI_HASHCHANGE_EVENT","CHANNEL_UI_INPUT_EVENT","CHANNEL_UI_KEYDOWN_EVENT","CHANNEL_UI_KEYPRESS_EVENT","CHANNEL_UI_KEYUP_EVENT","CHANNEL_UI_LOADEDDATA_EVENT","CHANNEL_UI_LOADEDMETADATA_EVENT","CHANNEL_UI_MOUSEDOWN_EVENT","CHANNEL_UI_MOUSEENTER_EVENT","CHANNEL_UI_MOUSELEAVE_EVENT","CHANNEL_UI_MOUSEMOVE_EVENT","CHANNEL_UI_MOUSEOUT_EVENT","CHANNEL_UI_MOUSEOVER_EVENT","CHANNEL_UI_MOUSEUP_EVENT","CHANNEL_UI_MOUSEWHEEL_EVENT","CHANNEL_UI_PAUSE_EVENT","CHANNEL_UI_PLAYING_EVENT","CHANNEL_UI_PLAY_EVENT","CHANNEL_UI_RADIOSTATECHANGE_EVENT","CHANNEL_UI_RATECHANGE_EVENT","CHANNEL_UI_READYSTATECHANGE_EVENT","CHANNEL_UI_SEEKED_EVENT","CHANNEL_UI_SEEKING_EVENT","CHANNEL_UI_SELECT_EVENT","CHANNEL_UI_STALLED_EVENT","CHANNEL_UI_SUBMIT_EVENT","CHANNEL_UI_SUSPEND_EVENT","CHANNEL_UI_SVGABORT_EVENT","CHANNEL_UI_SVGERROR_EVENT","CHANNEL_UI_SVGLOAD_EVENT","CHANNEL_UI_SVGRESIZE_EVENT","CHANNEL_UI_SVGSCROLL_EVENT","CHANNEL_UI_SVGUNLOAD_EVENT","CHANNEL_UI_SVGZOOM_EVENT","CHANNEL_UI_TIMEUPDATE_EVENT","CHANNEL_UI_TOUCHCANCEL_EVENT","CHANNEL_UI_TOUCHEND_EVENT","CHANNEL_UI_TOUCHMOVE_EVENT","CHANNEL_UI_TOUCHSTART_EVENT","CHANNEL_UI_TRANSITIONEND_EVENT","CHANNEL_UI_VALUECHANGE_EVENT","CHANNEL_UI_VOLUMECHANGE_EVENT","CHANNEL_UI_WAITING_EVENT","CHANNEL_UI_WHEEL_EVENT"]}loadKeyStream(){let t=e.Observable.fromEvent(document,"keyup");this.keyPresses$=t.groupBy((e=>e.keyCode)).mergeAll().filter((e=>this.keyCodeArr.indexOf(e.keyCode)>=0)).repeat().subscribe(this.onKeyPressed.bind(this))}addKeyEvent(e){!1===this.keyEventsLoaded&&this.loadKeyStream(),this.keyEventsLoaded=!0,this.registerKey(e)}registerKey(e){this.keyCodeArr.push(e)}onKeyPressed(e){console.log("key is ",e)}static removeSSID(e){const r=(0,t.lensProp)(["payload"]);return(0,t.over)(r,(0,t.omit)(["vsid"]))(e)}onIncomingObservable(e){let r=(0,t.equals)(e.name,this.props.name);e.data=Ce.removeSSID(e.data);let{payload:s,srcElement:o}=e.data,n=e=>({payload:s,srcElement:o,event:e});return!0===r?(e=>e.observable.pipe((0,B.map)(n)).subscribe(this.onUIEvent.bind(this)))(e):void 0}getActionState(e){let r=(0,t.path)(["event","type"]),s=(0,t.path)(["event","typeOverRide"]),o=(0,t.compose)(t.toUpper,(0,t.either)(s,r))(e),n="CHANNEL_UI";return void 0!==o?`${n}_${o}_EVENT`:n}static checkForEventMethods(e){const r=(0,t.compose)((0,t.filter)((0,t.test)(/^(event)([A-Z].*)([A-Z].*)$/gm)),t.keys,(0,t.prop)("payload"))(e);if(r.length>=1){const s=(0,t.prop)("event",e);if(void 0!==s){const e=(e,t,r,s,o)=>String(r).toLowerCase()+s+o,o=(0,t.replace)(/^(event)([A-Z])(.*)([A-Z].*)$/gm,e),n=e=>{const t=o(e);void 0!==s[t]&&"function"==typeof s[t]&&s[t]()};r.forEach(n)}}return e}onUIEvent(e){Ce.checkForEventMethods(e),e.action=this.getActionState(e);const t=e.action,{payload:r,srcElement:s}=e,o=e.event;this.sendChannelPayload(t,r,s,o)}}class ye{constructor(){this.createDomObservableFromEvent=ye.createDomObservableFromEvent.bind(this)}static createDomObservableFromEvent(t,r,s=!0,o=window){return r=void 0===r?e=>e:r,(0,e.fromEventPattern)((e=>o.addEventListener(t,e,{passive:s})),(()=>{o[t]=e=>e})).pipe((0,B.map)(r))}static createMediaQuery(e){const t=window.matchMedia(e);return this.checkIfValidMediaQuery(t,e),!1!==t&&t}static checkIfValidMediaQuery(e,t){const r=e=>e.replace(/\s+/gm,""),s=void 0!==e.matches&&r(e.media).indexOf(r(t))>=0;return!1===s&&(t=>{console.warn(`Spyne Info: the following query string, "${t}", has been optimized to "${e.media}" by the browser and may not be a valid Media Query item!`)})(t),s}static createMediaQueryHandler(t,r){let s=(e=>t=>(t.mediaQueryName=e,t))(r),o=(n=t,{addHandler:e=>{n.addListener(e)},removeHandler:e=>{n.onchange=()=>{}}});var n;return new e.fromEventPattern(o.addHandler,o.removeHandler).pipe((0,B.map)(s))}static createMergedObsFromObj(e){let r=e.mediaQueries||e.mediqQueries,s=[];return(0,t.mapObjIndexed)(((e,t,r)=>{let o=ye.createMediaQuery(e);return!1!==o&&s.push(ye.createMediaQueryHandler(o,t)),s}),r),s}}const Se=n(896).map;class fe extends ge{constructor(e="CHANNEL_WINDOW"){super(e),this.bindStaticMethods(),this.currentScrollY=0}initializeStream(){this.domChannelConfig=y.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)(fe.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 ye.createDomObservableFromEvent("mousewheel",fe.getMouseWheelMapFn.bind(this)).pipe((0,B.debounceTime)(t))}static getScrollData(){let e=0;return t=>{let r=e-t;return e=t,{scrollY:t,scrollDistance:r,scrollDir:r>=0?"up":"down"}}}static getScrollY(e){return void 0!==e.pageYOffset?e.pageYOffset:e.scrollTop}static getScrollMapFn(e,t,r,s,o){let n=s(fe.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=fe.getScrollData(),d=(0,t.partialRight)(fe.getScrollMapFn,[c,l,a,s,n]).bind(this);return ye.createDomObservableFromEvent("scroll",d,s,n).pipe((0,B.debounceTime)(o),(0,B.skipWhile)((e=>0===e.scrollDistance)),(0,B.map)((e=>{const t=fe.getScrollY(n);return e.payload.scrollDistanceAbs=Math.abs(this.currentScrollY-t),this.currentScrollY=t,e})))}createOrientationObservable(e){return ye.createDomObservableFromEvent("orientationchange",fe.getOrientationMapFn.bind(this))}createResizeObservable(e){const t=e.debounceMSTimeForResize;return ye.createDomObservableFromEvent("resize",fe.getResizeMapFn.bind(this)).pipe((0,B.debounceTime)(t))}getEventsFromConfig(e=this.domChannelConfig){let t=e.events;return Se((e=>{let t=fe.createCurriedGenericEvent(e);return ye.createDomObservableFromEvent(e,t)}),t)}getActiveObservables(e=this.domChannelConfig){let r=[];e.listenForMediaQueries=k(e.mediaQueries)||k(e.mediqQueries);let s={listenForResize:this.createResizeObservable.bind(this),listenForOrientation:this.createOrientationObservable.bind(this),listenForScroll:this.createScrollObservable.bind(this),listenForMouseWheel:this.createMouseWheelObservable.bind(this)};(0,t.mapObjIndexed)(((t,s,o)=>{e[s]&&r.push(t(e))}),s),this.checkForMediaQueries(e.listenForMediaQueries);let o=this.getEventsFromConfig(e);return r=r.concat(o),r}checkForMediaQueries(e){!0===e&&this.getMediaQueryObservable(this.domChannelConfig).subscribe((e=>{let{action:t,payload:r,srcElement:s,event:o}=e;this.sendChannelPayload(t,r,s,o,this.observer$)}))}getMediaQueryObservable(r){let s=this.createMergedObsFromObj(r);return(0,t.apply)(e.merge,s).pipe((0,B.map)(this.getMediaQueryMapFn.bind(this)))}addRegisteredActions(){return["CHANNEL_WINDOW_ABORT_EVENT","CHANNEL_WINDOW_AFTERPRINT_EVENT","CHANNEL_WINDOW_ANIMATIONEND_EVENT","CHANNEL_WINDOW_ANIMATIONITERATION_EVENT","CHANNEL_WINDOW_ANIMATIONSTART_EVENT","CHANNEL_WINDOW_APPINSTALLED_EVENT","CHANNEL_WINDOW_BEFOREPRINT_EVENT","CHANNEL_WINDOW_BEFOREUNLOAD_EVENT","CHANNEL_WINDOW_BEGINEVENT_EVENT","CHANNEL_WINDOW_BLUR_EVENT","CHANNEL_WINDOW_CACHED_EVENT","CHANNEL_WINDOW_CHANGE_EVENT","CHANNEL_WINDOW_CLICK_EVENT","CHANNEL_WINDOW_CLOSE_EVENT","CHANNEL_WINDOW_COMPOSITIONEND_EVENT","CHANNEL_WINDOW_COMPOSITIONSTART_EVENT","CHANNEL_WINDOW_COMPOSITIONUPDATE_EVENT","CHANNEL_WINDOW_COPY_EVENT","CHANNEL_WINDOW_CUT_EVENT","CHANNEL_WINDOW_DEVICECHANGE_EVENT","CHANNEL_WINDOW_DEVICELIGHT_EVENT","CHANNEL_WINDOW_DEVICEMOTION_EVENT","CHANNEL_WINDOW_DEVICEORIENTATION_EVENT","CHANNEL_WINDOW_DEVICEPROXIMITY_EVENT","CHANNEL_WINDOW_DOMATTRIBUTENAMECHANGED_EVENT","CHANNEL_WINDOW_DOMATTRMODIFIED_EVENT","CHANNEL_WINDOW_DOMCHARACTERDATAMODIFIED_EVENT","CHANNEL_WINDOW_DOMCONTENTLOADED_EVENT","CHANNEL_WINDOW_DOMELEMENTNAMECHANGED_EVENT","CHANNEL_WINDOW_ERROR_EVENT","CHANNEL_WINDOW_FOCUSIN_EVENT","CHANNEL_WINDOW_FOCUS_EVENT","CHANNEL_WINDOW_FULLSCREENCHANGE_EVENT","CHANNEL_WINDOW_FULLSCREENERROR_EVENT","CHANNEL_WINDOW_KEYUP_EVENT","CHANNEL_WINDOW_KEYDOWN_EVENT","CHANNEL_WINDOW_LOAD_EVENT","CHANNEL_WINDOW_MEDIA_QUERY_EVENT","CHANNEL_WINDOW_MESSAGE_EVENT","CHANNEL_WINDOW_MOUSEDOWN_EVENT","CHANNEL_WINDOW_MOUSEENTER_EVENT","CHANNEL_WINDOW_MOUSELEAVE_EVENT","CHANNEL_WINDOW_MOUSEMOVE_EVENT","CHANNEL_WINDOW_MOUSEOUT_EVENT","CHANNEL_WINDOW_MOUSEOVER_EVENT","CHANNEL_WINDOW_MOUSEUP_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=ye.createMediaQueryHandler.bind(this),this.createMergedObsFromObj=ye.createMergedObsFromObj.bind(this)}}class be extends ge{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 ve extends ge{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===y.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,y.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 Oe=n(896).map,Ie=new Map;class De{constructor(){this.addMixins(),Ie.set("DISPATCHER",new e.Subject),this.listRegisteredChannels=De.listRegisteredChannels.bind(this),this.getChannelsList=De.getChannelsList.bind(this)}get map(){return Ie}static getChannelsList(){return Array.from(Ie,((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)("ChannelProxy","val")),o=(0,t.filter)((0,t.propEq)("ChannelProxy","val")),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)("ChannelProxy","val"))(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)(", "),Oe((0,t.prop)("key")))(r)}`;console.warn(e)}}init(){this.createMainStreams()}createMainStreams(){this.routeStream=new Ae,Ie.set("CHANNEL_ROUTE",this.routeStream),this.uiStream=new Ce,Ie.set("CHANNEL_UI",this.uiStream),this.domStream=new fe,Ie.set("CHANNEL_WINDOW",this.domStream),this.viewStreamLifecycle=new be,Ie.set("CHANNEL_LIFECYCLE",this.viewStreamLifecycle),this.routeStream.initializeStream(),this.domStream.initializeStream()}addKeyEvent(e){Ie.get("UI").addKeyEvent(e)}registerStream(e){let r=e.channelName;Ie.has(r)&&(0,t.compose)((0,t.pathEq)(["props","isRegistered"],!0))(Ie.get(r))?console.warn(`Spyne Warning: The Channel, ${r}, has already been registered!`):(Ie.set(r,e),e.initializeStream())}getChannelActions(e){return Ie.get(e).addRegisteredActions()}getProxySubject(e,t=!1){let r=!0===t?"replaySubject":"subject";return Ie.get(e)[r]}testStream(e){return void 0!==Ie.get(e)}getStream(e){return!1===this.testStream(e)&&Ie.set(e,new ve(e)),Ie.get(e)}addMixins(){}}class Le{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 Re{constructor(e,t,r,s){this._mapFn=Re.setMapFn(e),this._url=Re.setUrl(e),this._responseType=Re.setResponseType(e),this._serverOptions=Re.setServerOptions(e),this._subscriber=void 0!==t?t:e=>console.log("FETCH RETURNED ",e),this.debug=void 0!==e.debug&&e.debug,this.channelName=s;let o={mapFn:this.mapFn,url:this.url,serverOptions:this.serverOptions,responseType:this.responseType,debug:this.debug};!0!==r&&Re.startWindowFetch(o,this._subscriber,this.channelName)}static startWindowFetch(t,r,s){let{mapFn:o,url:n,serverOptions:i,responseType:a,debug:c}=t;const l=!0===c?e=>console.log("DEBUG FETCH :",e,{url:n,serverOptions:i,responseType:a,channelName:s}):()=>{};let d=(0,e.from)(window.fetch(n,i)).pipe((0,B.tap)(l),(0,B.flatMap)((t=>(0,e.from)(t[a]()))),(0,B.map)((e=>{const t={channelName:s,url:n,responseType:a,serverOptions:i};return r=>e(r,t)})(o)),(0,B.publish)());d.connect(),d.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)("GET","method"),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)(Re.baseOptions(),r);return s=Re.updateMethodWhenBodyExists(s),s=Re.stringifyBodyIfItExists(s),s}static baseOptions(){return{method:"GET",headers:{Accept:"application/json, text/plain, */*"}}}}class Pe extends ge{constructor(e,t={}){Pe.validateMapMethod(t,e),void 0!==t.map&&(t.mapFn=t.map),t.extendedActionsArr=[`${e}_DATA_EVENT`,[`${e}_UPDATE_DATA_EVENT`,"onFetchUpdate"]],t.sendCachedPayload=!0,super(e,t)}static validateMapMethod(e,r,s=!1){const o=(0,t.either)(t.isNil,(e=>"function"!=typeof e)),n=(0,t.all)(o),i=(0,t.allPass)([n,e=>e.length>=1]);return!(0,t.compose)(i,t.values,(0,t.pick)(["map","mapFn"]))(e)||(!1===s&&console.warn(`Spyne Warning: The map method for ChannelFetch, ${r}, appears to be invalid`),!1)}onRegistered(){this.startFetch()}addRegisteredActions(e){let r=(0,t.compose)((0,t.defaultTo)([]),(0,t.path)(["props","extendedActionsArr"]));return["CHANNEL_DATA_EVENT",["CHANNEL_UPDATE_DATA_EVENT","onFetchUpdate"]].concat(r(this))}startFetch(e={},t=this.onFetchReturned.bind(this)){let r=this.consolidateAllFetchProps(e);return new Re(r,t,!1,this.props.name)}onFetchUpdate(e){let t=this.getPropsForFetch(e);this.startFetch(t)}onFetchReturned(e){return this.createChannelPayloadItem(e)}createChannelPayloadItem(e,t=`${this.props.name}_DATA_EVENT`){const{name:r,sendCachedPayload:s,url:o}=this.props,n={name:r,sendCachedPayload:s,url:o};this.sendChannelPayload(t,e,n)}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$}}class we{constructor(e={}){let{name:r,config:s,parentEl:o}=e;this.props=e,void 0===s&&(s=(0,t.clone)(e)),this.name=r||"empty",this.props.name=r,s=we.mergeDefaultConfig(s,this.defaultConfig()),this.props.parentEl=o||we.createParentEl(),we.getSpyneApp(r,s),void 0!==this.props.traits&&this.addTraits(this.props.traits),this.onBeforeRegistered(),this.onRegistered(),this.onRender()}static mergeDefaultConfig(e={},t=this.defaultConfig()){return Object.assign(t,e)}static getSpyneApp(e,t){!1===y.initialized?console.warn(`Spyne Warning: Unable to install plugin, ${e}! SpyneApp has not been initialized!`):y.addPluginConfig(e,t)}static updateSpyneConfig(e,r,s){return!0===(0,t.pathSatisfies)((0,t.is)(Object),["config","plugins",r])(e)?(!0===e.config.debug&&console.warn(`Spyne Warning: The plugin, ${r}, already exists`),!1):(e.config.plugins[r]=s,e.config.plugins[r])}static createParentEl(e){return e||document.getElementById("spyne-plugins")||(()=>{const e=new q({id:"spyne-plugins"});document.body.appendChild(e.render());const t=document.getElementById("spyne-plugins");return t.style.cssText="position:absolute; top:0;left:0;width:100%;height:100%;min-height:100vh;z-index:1000000; pointer-events:none",t})()}addTraits(e){"Array"!==e.constructor.name&&(e=[e]),e.forEach((e=>new e(this)))}onBeforeRegistered(){this.props.pluginName=this.props.name,this.props.config=y.getPluginConfigByPluginName(this.props.pluginName)}defaultConfig(){return{}}onRegistered(){}onRender(){}}const Ve=new De,He="0.19.0";let Me=new class{constructor(){this.version=He}get channels(){return Ve}init(e={},t=!1){if(!0===y.initialized)return t?"The Spyne Application has already been initialized!":void console.warn("The Spyne Application has already been initialized!");void 0!==e&&(e=y.initialize({scrollLock:!1,scrollLockX:31,scrollLockY:0,debug:!0,plugins:{},tmp:{},channels:{WINDOW:{mediqQueries:{},events:[],listenForResize:!0,listenForOrientation:!0,listenForScroll:!1,listenForMouseWheel:!1,debounceMSTimeForResize:200,debounceMSTimeForScroll:150},ROUTE:{type:"slash",isHash:!1,isHidden:!1,add404s:!1,routes:{routePath:{routeName:"change"}}}}},e,Ve)),this.pluginsFn=y.getPluginsMethodObj(e.pluginMethods),this.getChannelActions=e=>Ve.getChannelActions(e),this.registerChannel=e=>Ve.registerStream(e),this.registerDataChannel=e=>Ve.registerStream(e),this.listChannels=()=>Array.from(Ve.map.keys());let r=new Ee({id:"spyne-null-views"});r.appendToDom(document.body),r.props.el.style.cssText="display:none; opacity:0; pointer-events:none;",Ve.init(),!0===y.config.debug&&(window.Spyne={version:He})}static listChannels(){return Array.from(Ve.map.keys())}static getChannelActions(e){return Ve.getChannelActions(e)}static registerChannel(e){if(!1!==y.initialized)return Ve.registerStream(e);console.warn("Spyne has not been initialized")}}})(),i})()));
|