spyne 0.17.3 → 0.18.0

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