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