@maestro_io/maestro-web-sdk 5.1.2 → 5.2.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/1.maestro-web-sdk.esm.js +1 -1
- package/dist/1.maestro-web-sdk.esm.js.map +1 -1
- package/dist/10.maestro-web-sdk.esm.js +1 -1
- package/dist/10.maestro-web-sdk.esm.js.map +1 -1
- package/dist/11.maestro-web-sdk.esm.js +1 -1
- package/dist/11.maestro-web-sdk.esm.js.map +1 -1
- package/dist/12.maestro-web-sdk.esm.js +1 -1
- package/dist/12.maestro-web-sdk.esm.js.map +1 -1
- package/dist/13.maestro-web-sdk.esm.js +1 -1
- package/dist/13.maestro-web-sdk.esm.js.map +1 -1
- package/dist/14.maestro-web-sdk.esm.js +1 -1
- package/dist/14.maestro-web-sdk.esm.js.map +1 -1
- package/dist/15.maestro-web-sdk.esm.js +1 -1
- package/dist/15.maestro-web-sdk.esm.js.map +1 -1
- package/dist/16.maestro-web-sdk.esm.js +1 -1
- package/dist/16.maestro-web-sdk.esm.js.map +1 -1
- package/dist/17.maestro-web-sdk.esm.js +1 -1
- package/dist/17.maestro-web-sdk.esm.js.map +1 -1
- package/dist/18.maestro-web-sdk.esm.js +1 -1
- package/dist/18.maestro-web-sdk.esm.js.map +1 -1
- package/dist/19.maestro-web-sdk.esm.js +1 -1
- package/dist/19.maestro-web-sdk.esm.js.map +1 -1
- package/dist/2.maestro-web-sdk.esm.js +1 -1
- package/dist/20.maestro-web-sdk.esm.js +1 -1
- package/dist/20.maestro-web-sdk.esm.js.map +1 -1
- package/dist/21.maestro-web-sdk.esm.js +1 -1
- package/dist/21.maestro-web-sdk.esm.js.map +1 -1
- package/dist/22.maestro-web-sdk.esm.js +1 -1
- package/dist/22.maestro-web-sdk.esm.js.map +1 -1
- package/dist/23.maestro-web-sdk.esm.js +1 -1
- package/dist/23.maestro-web-sdk.esm.js.map +1 -1
- package/dist/24.maestro-web-sdk.esm.js +1 -1
- package/dist/24.maestro-web-sdk.esm.js.map +1 -1
- package/dist/25.maestro-web-sdk.esm.js +1 -1
- package/dist/25.maestro-web-sdk.esm.js.map +1 -1
- package/dist/26.maestro-web-sdk.esm.js +1 -1
- package/dist/26.maestro-web-sdk.esm.js.map +1 -1
- package/dist/27.maestro-web-sdk.esm.js +1 -1
- package/dist/27.maestro-web-sdk.esm.js.map +1 -1
- package/dist/28.maestro-web-sdk.esm.js +1 -1
- package/dist/28.maestro-web-sdk.esm.js.map +1 -1
- package/dist/29.maestro-web-sdk.esm.js +1 -1
- package/dist/29.maestro-web-sdk.esm.js.map +1 -1
- package/dist/3.maestro-web-sdk.esm.js +1 -1
- package/dist/3.maestro-web-sdk.esm.js.map +1 -1
- package/dist/30.maestro-web-sdk.esm.js +1 -1
- package/dist/30.maestro-web-sdk.esm.js.map +1 -1
- package/dist/31.maestro-web-sdk.esm.js +1 -1
- package/dist/31.maestro-web-sdk.esm.js.map +1 -1
- package/dist/32.maestro-web-sdk.esm.js +1 -1
- package/dist/32.maestro-web-sdk.esm.js.map +1 -1
- package/dist/33.maestro-web-sdk.esm.js +1 -1
- package/dist/33.maestro-web-sdk.esm.js.map +1 -1
- package/dist/34.maestro-web-sdk.esm.js +1 -1
- package/dist/34.maestro-web-sdk.esm.js.map +1 -1
- package/dist/35.maestro-web-sdk.esm.js +1 -1
- package/dist/35.maestro-web-sdk.esm.js.map +1 -1
- package/dist/36.maestro-web-sdk.esm.js +1 -1
- package/dist/36.maestro-web-sdk.esm.js.map +1 -1
- package/dist/37.maestro-web-sdk.esm.js +1 -1
- package/dist/37.maestro-web-sdk.esm.js.map +1 -1
- package/dist/38.maestro-web-sdk.esm.js +1 -1
- package/dist/38.maestro-web-sdk.esm.js.map +1 -1
- package/dist/39.maestro-web-sdk.esm.js +2 -0
- package/dist/39.maestro-web-sdk.esm.js.map +1 -0
- package/dist/4.maestro-web-sdk.esm.js +1 -1
- package/dist/4.maestro-web-sdk.esm.js.map +1 -1
- package/dist/40.maestro-web-sdk.esm.js +2 -0
- package/dist/40.maestro-web-sdk.esm.js.map +1 -0
- package/dist/5.maestro-web-sdk.esm.js +1 -1
- package/dist/5.maestro-web-sdk.esm.js.map +1 -1
- package/dist/6.maestro-web-sdk.esm.js +1 -1
- package/dist/6.maestro-web-sdk.esm.js.map +1 -1
- package/dist/7.maestro-web-sdk.esm.js +1 -1
- package/dist/7.maestro-web-sdk.esm.js.map +1 -1
- package/dist/8.maestro-web-sdk.esm.js +1 -1
- package/dist/8.maestro-web-sdk.esm.js.map +1 -1
- package/dist/9.maestro-web-sdk.esm.js +1 -1
- package/dist/9.maestro-web-sdk.esm.js.map +1 -1
- package/dist/index.d.ts +4 -1
- package/dist/maestro-web-sdk.esm.js +3 -3
- package/dist/maestro-web-sdk.esm.js.map +1 -1
- package/dist/maestro-web-sdk.umd.js +3 -3
- package/dist/maestro-web-sdk.umd.js.map +1 -1
- package/dist/package.json +1 -1
- package/dist/src/components/atoms/SvgIcon/AddIcon.d.ts +3 -0
- package/dist/src/components/atoms/SvgIcon/AddIcon.js +6 -0
- package/dist/src/components/atoms/SvgIcon/Icon.js +2 -0
- package/dist/src/components/core/PanelManager/PanelManager.js +5 -3
- package/dist/src/components/molecules/NetworkDialog/NetworkDialog.d.ts +11 -0
- package/dist/src/components/molecules/NetworkDialog/NetworkDialog.js +34 -0
- package/dist/src/components/molecules/NetworkDialog/index.d.ts +2 -0
- package/dist/src/components/molecules/NetworkDialog/index.js +2 -0
- package/dist/src/components/molecules/NetworkError/NetworkError.d.ts +104 -0
- package/dist/src/components/molecules/NetworkError/NetworkError.js +26 -0
- package/dist/src/components/molecules/NetworkError/index.d.ts +2 -0
- package/dist/src/components/molecules/NetworkError/index.js +2 -0
- package/dist/src/components/molecules/PanelNavButton/PanelNavButton.d.ts +1 -0
- package/dist/src/components/molecules/PanelNavButton/PanelNavButton.js +16 -7
- package/dist/src/components/organisms/PanelNavigation/PanelNavigation.d.ts +1 -0
- package/dist/src/components/organisms/PanelNavigation/PanelNavigation.js +11 -7
- package/dist/src/development/MaestroEventDelegate.js +1 -0
- package/dist/src/helpers/site.d.ts +1 -0
- package/dist/src/helpers/site.js +6 -0
- package/dist/src/helpers/siteConfig.d.ts +1 -0
- package/dist/src/helpers/siteConfig.js +5 -0
- package/dist/src/models/IPanel.d.ts +1 -1
- package/dist/src/models/IPanel.js +1 -1
- package/dist/src/modules/espn/bets/view/BetsView.js +1 -1
- package/dist/src/modules/espn/components/TabLoadError/TabLoadError.d.ts +96 -0
- package/dist/src/modules/espn/components/TabLoadError/TabLoadError.js +14 -0
- package/dist/src/modules/espn/components/TabLoadError/index.d.ts +2 -0
- package/dist/src/modules/espn/components/TabLoadError/index.js +2 -0
- package/dist/src/modules/espn/fantasy/components/TournamentOverflowQR/TournamentOverflowQR.d.ts +5 -5
- package/dist/src/modules/espn/fantasy/components/TournamentOverflowQR/TournamentOverflowQR.js +7 -73
- package/dist/src/modules/espn/fantasy/services/FantasyService.js +1 -1
- package/dist/src/modules/espn/fantasy/view/FantasyItemView.js +1 -1
- package/dist/src/modules/espn/fantasy/view/FantasyView.js +1 -1
- package/dist/src/modules/espn/key-plays/view/KeyPlayErrorStateView.js +1 -1
- package/dist/src/modules/espn/shop/view/ShopView.js +1 -1
- package/dist/src/modules/espn/stats/view/StatsView.js +1 -1
- package/dist/src/modules/fox/components/TabLoadError/TabLoadError.d.ts +96 -0
- package/dist/src/modules/fox/components/TabLoadError/TabLoadError.js +19 -0
- package/dist/src/modules/fox/components/TabLoadError/index.d.ts +2 -0
- package/dist/src/modules/fox/components/TabLoadError/index.js +2 -0
- package/dist/src/modules/fox/multi-view/interfaces/IMultiViewViewModel.d.ts +3 -0
- package/dist/src/modules/fox/multi-view/interfaces/IMultiViewViewModel.js +1 -0
- package/dist/src/modules/fox/multi-view/services/MultiViewService.d.ts +99 -0
- package/dist/src/modules/fox/multi-view/services/MultiViewService.js +94 -0
- package/dist/src/modules/fox/multi-view/types.d.ts +29 -43
- package/dist/src/modules/fox/multi-view/types.js +79 -82
- package/dist/src/modules/fox/multi-view/view/CuratedMultiview/CuratedMultiviews.d.ts +8 -0
- package/dist/src/modules/fox/multi-view/view/CuratedMultiview/CuratedMultiviews.js +91 -0
- package/dist/src/modules/fox/multi-view/view/CuratedMultiview/index.d.ts +2 -0
- package/dist/src/modules/fox/multi-view/view/CuratedMultiview/index.js +2 -0
- package/dist/src/modules/fox/multi-view/view/FoxMultiView.d.ts +1 -0
- package/dist/src/modules/fox/multi-view/view/FoxMultiView.js +62 -2
- package/dist/src/modules/fox/multi-view/view/components/CustomMultiviewStreamsCard/CustomMultiviewStreamsCard.d.ts +122 -0
- package/dist/src/modules/fox/multi-view/view/components/CustomMultiviewStreamsCard/CustomMultiviewStreamsCard.js +51 -0
- package/dist/src/modules/fox/multi-view/view/components/CustomMultiviewStreamsCard/index.d.ts +2 -0
- package/dist/src/modules/fox/multi-view/view/components/CustomMultiviewStreamsCard/index.js +2 -0
- package/dist/src/modules/fox/multi-view/view/components/LayoutSelector/LayoutSelector.d.ts +1 -1
- package/dist/src/modules/fox/multi-view/view/components/LayoutSelector/LayoutSelector.js +11 -14
- package/dist/src/modules/fox/multi-view/view/components/curated-multiview-card/CuratedMultiviewCard.d.ts +101 -0
- package/dist/src/modules/fox/multi-view/view/components/curated-multiview-card/CuratedMultiviewCard.js +21 -0
- package/dist/src/modules/fox/multi-view/view/components/curated-multiview-card/index.d.ts +2 -0
- package/dist/src/modules/fox/multi-view/view/components/curated-multiview-card/index.js +2 -0
- package/dist/src/modules/fox/multi-view/view-model/MultiViewViewModel.d.ts +63 -0
- package/dist/src/modules/fox/multi-view/view-model/MultiViewViewModel.js +328 -0
- package/dist/src/modules/fox/multi-view/view-model/index.d.ts +1 -0
- package/dist/src/modules/fox/multi-view/view-model/index.js +1 -0
- package/dist/src/services/NetworkManager/NetworkManager.js +1 -1
- package/dist/src/services/NetworkManager/errors.d.ts +3 -1
- package/dist/src/services/NetworkManager/errors.js +15 -1
- package/dist/src/services/StaticService/StaticService.js +1 -0
- package/dist/src/view-models/MaestroEventViewModel.d.ts +2 -0
- package/dist/src/view-models/MaestroEventViewModel.js +17 -1
- package/package.json +1 -1
|
@@ -1,2 +1,2 @@
|
|
|
1
|
-
(window.webpackJsonp=window.webpackJsonp||[]).push([[30],{77:function(e,t,n){"use strict";n.r(t);var i=n(0),
|
|
1
|
+
(window.webpackJsonp=window.webpackJsonp||[]).push([[30],{77:function(e,t,n){"use strict";n.r(t);var i=n(0),a=n.n(i);class h extends a.a.Component{render(){return a.a.createElement("svg",{width:this.props.width,height:this.props.height,viewBox:"0 0 30 32",fill:"none",xmlns:"http://www.w3.org/2000/svg"},a.a.createElement("path",{d:"M27.375 4.75H2.625V7H27.375V4.75Z",fill:"white"}),a.a.createElement("path",{d:"M25.125 0.25H4.875V2.5H25.125V0.25Z",fill:"white"}),a.a.createElement("path",{d:"M0.375 9.25V31.75H29.625V9.25H0.375ZM11.625 26.125V14.875L20.625 20.5L11.625 26.125Z",fill:"white"}))}}t.default=h}}]);
|
|
2
2
|
//# sourceMappingURL=30.maestro-web-sdk.esm.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["webpack:///./src/components/atoms/SvgIcon/
|
|
1
|
+
{"version":3,"sources":["webpack:///./src/components/atoms/SvgIcon/KeyPlaysIcon.tsx"],"names":["KeyPlaysIcon","React","Component","render","createElement","width","this","props","height","viewBox","fill","xmlns","d"],"mappings":"0FAAA,2BAGA,MAAMA,UAAqBC,IAAMC,UAC/BC,SACE,OACEF,IAAAG,cAAA,OACEC,MAAOC,KAAKC,MAAMF,MAClBG,OAAQF,KAAKC,MAAMC,OACnBC,QAAQ,YACRC,KAAK,OACLC,MAAM,8BAENV,IAAAG,cAAA,QAAMQ,EAAE,oCAAoCF,KAAK,UACjDT,IAAAG,cAAA,QAAMQ,EAAE,sCAAsCF,KAAK,UACnDT,IAAAG,cAAA,QACEQ,EAAE,uFACFF,KAAK,YAOAV","file":"30.maestro-web-sdk.esm.js","sourcesContent":["import React from 'react';\nimport { IconProps } from './Icon';\n\nclass KeyPlaysIcon extends React.Component<IconProps, {}> {\n render() {\n return (\n <svg\n width={this.props.width}\n height={this.props.height}\n viewBox=\"0 0 30 32\"\n fill=\"none\"\n xmlns=\"http://www.w3.org/2000/svg\"\n >\n <path d=\"M27.375 4.75H2.625V7H27.375V4.75Z\" fill=\"white\" />\n <path d=\"M25.125 0.25H4.875V2.5H25.125V0.25Z\" fill=\"white\" />\n <path\n d=\"M0.375 9.25V31.75H29.625V9.25H0.375ZM11.625 26.125V14.875L20.625 20.5L11.625 26.125Z\"\n fill=\"white\"\n />\n </svg>\n );\n }\n}\n\nexport default KeyPlaysIcon;\n"],"sourceRoot":""}
|
|
@@ -1,2 +1,2 @@
|
|
|
1
|
-
(window.webpackJsonp=window.webpackJsonp||[]).push([[31],{
|
|
1
|
+
(window.webpackJsonp=window.webpackJsonp||[]).push([[31],{88:function(e,t,n){"use strict";n.r(t);var s=n(0),o=n.n(s);class i extends o.a.Component{constructor(e){super(e)}render(){return o.a.createElement("svg",{width:this.props.width,height:this.props.height,viewBox:"0 0 32 32",fill:"none",xmlns:"http://www.w3.org/2000/svg"},o.a.createElement("path",{fillRule:"evenodd",clipRule:"evenodd",d:"M9.33333 1.66663C8.04467 1.66663 7 2.7113 7 3.99996V28C7 29.2886 8.04467 30.3333 9.33333 30.3333H22.6667C23.9553 30.3333 25 29.2886 25 28V3.99996C25 2.7113 23.9553 1.66663 22.6667 1.66663H9.33333ZM9 7.66663V23H23V7.66663H9ZM18 26H14V27.3333H18V26Z",fill:"#6C6E6F"}))}}t.default=i}}]);
|
|
2
2
|
//# sourceMappingURL=31.maestro-web-sdk.esm.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["webpack:///./src/components/atoms/SvgIcon/
|
|
1
|
+
{"version":3,"sources":["webpack:///./src/components/atoms/SvgIcon/MobilePhoneIcon.tsx"],"names":["MobilePhoneIcon","React","Component","constructor","props","super","render","createElement","width","this","height","viewBox","fill","xmlns","fillRule","clipRule","d"],"mappings":"0FAAA,2BAGA,MAAMA,UAAwBC,IAAMC,UAClCC,YAAYC,GACVC,MAAMD,GAGRE,SACE,OACEL,IAAAM,cAAA,OACEC,MAAOC,KAAKL,MAAMI,MAClBE,OAAQD,KAAKL,MAAMM,OACnBC,QAAQ,YACRC,KAAK,OACLC,MAAM,8BAENZ,IAAAM,cAAA,QACEO,SAAS,UACTC,SAAS,UACTC,EAAE,0PACFJ,KAAK,cAOAZ","file":"31.maestro-web-sdk.esm.js","sourcesContent":["import React from 'react';\nimport { IconProps } from './Icon';\n\nclass MobilePhoneIcon extends React.Component<IconProps> {\n constructor(props: IconProps) {\n super(props);\n }\n\n render() {\n return (\n <svg\n width={this.props.width}\n height={this.props.height}\n viewBox=\"0 0 32 32\"\n fill=\"none\"\n xmlns=\"http://www.w3.org/2000/svg\"\n >\n <path\n fillRule=\"evenodd\"\n clipRule=\"evenodd\"\n d=\"M9.33333 1.66663C8.04467 1.66663 7 2.7113 7 3.99996V28C7 29.2886 8.04467 30.3333 9.33333 30.3333H22.6667C23.9553 30.3333 25 29.2886 25 28V3.99996C25 2.7113 23.9553 1.66663 22.6667 1.66663H9.33333ZM9 7.66663V23H23V7.66663H9ZM18 26H14V27.3333H18V26Z\"\n fill=\"#6C6E6F\"\n />\n </svg>\n );\n }\n}\n\nexport default MobilePhoneIcon;\n"],"sourceRoot":""}
|
|
@@ -1,2 +1,2 @@
|
|
|
1
|
-
(window.webpackJsonp=window.webpackJsonp||[]).push([[32],{
|
|
1
|
+
(window.webpackJsonp=window.webpackJsonp||[]).push([[32],{78:function(e,t,n){"use strict";n.r(t);var i=n(0),s=n.n(i);class l extends s.a.Component{render(){return s.a.createElement("svg",{width:this.props.width,height:this.props.height,viewBox:"0 0 20 20",fill:"none",xmlns:"http://www.w3.org/2000/svg"},s.a.createElement("path",{fillRule:"evenodd",clipRule:"evenodd",d:"M18.1891 8.29879C18.6116 8.5331 18.9367 8.80345 19.162 9.10985C19.3873 9.41624 19.5 9.71863 19.5 10.019C19.5 10.3194 19.396 10.6158 19.1837 10.9102C18.9713 11.2026 18.6463 11.4669 18.2108 11.7012L10.9111 15.6724L3.58975 19.6035C3.15207 19.8378 2.74256 19.9679 2.36122 19.994C1.98204 20.02 1.65703 19.9619 1.38836 19.8177C1.12185 19.6735 0.905177 19.4453 0.742673 19.1328C0.582335 18.8204 0.5 18.4419 0.5 17.9994V2.00062C0.5 1.55805 0.573669 1.17956 0.721006 0.867153C0.87051 0.554748 1.09152 0.326452 1.38836 0.182265C1.6852 0.0380777 2.02104 -0.0199976 2.39372 0.00603615C2.76639 0.0340725 3.16507 0.164241 3.58975 0.398545L10.9111 4.36769L18.1891 8.29879Z",fill:"white"}))}}t.default=l}}]);
|
|
2
2
|
//# sourceMappingURL=32.maestro-web-sdk.esm.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["webpack:///./src/components/atoms/SvgIcon/
|
|
1
|
+
{"version":3,"sources":["webpack:///./src/components/atoms/SvgIcon/PlayIcon.tsx"],"names":["PlayIcon","React","Component","render","createElement","width","this","props","height","viewBox","fill","xmlns","fillRule","clipRule","d"],"mappings":"0FAAA,2BAGA,MAAMA,UAAiBC,IAAMC,UAC3BC,SACE,OACEF,IAAAG,cAAA,OACEC,MAAOC,KAAKC,MAAMF,MAClBG,OAAQF,KAAKC,MAAMC,OACnBC,QAAQ,YACRC,KAAK,OACLC,MAAM,8BAENV,IAAAG,cAAA,QACEQ,SAAS,UACTC,SAAS,UACTC,EAAE,opBACFJ,KAAK,YAOAV","file":"32.maestro-web-sdk.esm.js","sourcesContent":["import React from 'react';\nimport { IconProps } from './Icon';\n\nclass PlayIcon extends React.Component<IconProps, {}> {\n render() {\n return (\n <svg\n width={this.props.width}\n height={this.props.height}\n viewBox=\"0 0 20 20\"\n fill=\"none\"\n xmlns=\"http://www.w3.org/2000/svg\"\n >\n <path\n fillRule=\"evenodd\"\n clipRule=\"evenodd\"\n d=\"M18.1891 8.29879C18.6116 8.5331 18.9367 8.80345 19.162 9.10985C19.3873 9.41624 19.5 9.71863 19.5 10.019C19.5 10.3194 19.396 10.6158 19.1837 10.9102C18.9713 11.2026 18.6463 11.4669 18.2108 11.7012L10.9111 15.6724L3.58975 19.6035C3.15207 19.8378 2.74256 19.9679 2.36122 19.994C1.98204 20.02 1.65703 19.9619 1.38836 19.8177C1.12185 19.6735 0.905177 19.4453 0.742673 19.1328C0.582335 18.8204 0.5 18.4419 0.5 17.9994V2.00062C0.5 1.55805 0.573669 1.17956 0.721006 0.867153C0.87051 0.554748 1.09152 0.326452 1.38836 0.182265C1.6852 0.0380777 2.02104 -0.0199976 2.39372 0.00603615C2.76639 0.0340725 3.16507 0.164241 3.58975 0.398545L10.9111 4.36769L18.1891 8.29879Z\"\n fill=\"white\"\n />\n </svg>\n );\n }\n}\n\nexport default PlayIcon;\n"],"sourceRoot":""}
|
|
@@ -1,2 +1,2 @@
|
|
|
1
|
-
(window.webpackJsonp=window.webpackJsonp||[]).push([[33],{
|
|
1
|
+
(window.webpackJsonp=window.webpackJsonp||[]).push([[33],{90:function(e,t,n){"use strict";n.r(t),n.d(t,"default",(function(){return s}));var i=n(0),o=n.n(i);class s extends o.a.Component{render(){return o.a.createElement("svg",{width:this.props.width,height:this.props.height,viewBox:"0 0 36 36",fill:"none",xmlns:"http://www.w3.org/2000/svg"},o.a.createElement("path",{fillRule:"evenodd",clipRule:"evenodd",d:"M12.3745 7.5V9.375H6.45201L4.99216 29.813C4.88362 31.3325 6.08709 32.625 7.61049 32.625H28.3886C29.912 32.625 31.1154 31.3325 31.0069 29.813L29.547 9.375H23.6245V7.5C23.6245 4.3934 21.1061 1.875 17.9995 1.875C14.8929 1.875 12.3745 4.3934 12.3745 7.5ZM17.9995 4.125C16.1356 4.125 14.6245 5.63604 14.6245 7.5V9.375H21.3745V7.5C21.3745 5.63604 19.8635 4.125 17.9995 4.125ZM12.3745 14.25V11.625H14.6245V14.25C14.6245 14.8713 14.1208 15.375 13.4995 15.375C12.8782 15.375 12.3745 14.8713 12.3745 14.25ZM21.3745 14.25V11.625H23.6245V14.25C23.6245 14.8713 23.1208 15.375 22.4995 15.375C21.8782 15.375 21.3745 14.8713 21.3745 14.25Z",fill:"white"}))}}}}]);
|
|
2
2
|
//# sourceMappingURL=33.maestro-web-sdk.esm.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["webpack:///./src/components/atoms/SvgIcon/
|
|
1
|
+
{"version":3,"sources":["webpack:///./src/components/atoms/SvgIcon/ShopIcon.tsx"],"names":["ShopIcon","React","Component","render","createElement","width","this","props","height","viewBox","fill","xmlns","fillRule","clipRule","d"],"mappings":"0FAAA,mEAGe,MAAMA,UAAiBC,IAAMC,UAC1CC,SACE,OACEF,IAAAG,cAAA,OACEC,MAAOC,KAAKC,MAAMF,MAClBG,OAAQF,KAAKC,MAAMC,OACnBC,QAAQ,YACRC,KAAK,OACLC,MAAM,8BAENV,IAAAG,cAAA,QACEQ,SAAS,UACTC,SAAS,UACTC,EAAE,knBACFJ,KAAK","file":"33.maestro-web-sdk.esm.js","sourcesContent":["import React from 'react';\nimport { IconProps } from './Icon';\n\nexport default class ShopIcon extends React.Component<IconProps> {\n render() {\n return (\n <svg\n width={this.props.width}\n height={this.props.height}\n viewBox=\"0 0 36 36\"\n fill=\"none\"\n xmlns=\"http://www.w3.org/2000/svg\"\n >\n <path\n fillRule=\"evenodd\"\n clipRule=\"evenodd\"\n d=\"M12.3745 7.5V9.375H6.45201L4.99216 29.813C4.88362 31.3325 6.08709 32.625 7.61049 32.625H28.3886C29.912 32.625 31.1154 31.3325 31.0069 29.813L29.547 9.375H23.6245V7.5C23.6245 4.3934 21.1061 1.875 17.9995 1.875C14.8929 1.875 12.3745 4.3934 12.3745 7.5ZM17.9995 4.125C16.1356 4.125 14.6245 5.63604 14.6245 7.5V9.375H21.3745V7.5C21.3745 5.63604 19.8635 4.125 17.9995 4.125ZM12.3745 14.25V11.625H14.6245V14.25C14.6245 14.8713 14.1208 15.375 13.4995 15.375C12.8782 15.375 12.3745 14.8713 12.3745 14.25ZM21.3745 14.25V11.625H23.6245V14.25C23.6245 14.8713 23.1208 15.375 22.4995 15.375C21.8782 15.375 21.3745 14.8713 21.3745 14.25Z\"\n fill=\"white\"\n />\n </svg>\n );\n }\n}\n"],"sourceRoot":""}
|
|
@@ -1,2 +1,2 @@
|
|
|
1
|
-
(window.webpackJsonp=window.webpackJsonp||[]).push([[34],{
|
|
1
|
+
(window.webpackJsonp=window.webpackJsonp||[]).push([[34],{93:function(C,e,t){"use strict";t.r(e);var w=t(0),i=t.n(w);e.default=C=>i.a.createElement("svg",{width:C.width,height:C.height,viewBox:"0 0 24 24",fill:"none",xmlns:"http://www.w3.org/2000/svg"},i.a.createElement("path",{d:"M10.5977 2.00098C11.0813 1.98676 11.485 2.14839 11.7998 2.48047C11.8222 2.5047 11.8439 2.52941 11.8652 2.55469C11.9152 2.55049 11.9647 2.54592 12.0146 2.5459H12.0176C12.74 2.54695 13.3378 2.95337 13.7461 3.72168C13.8728 3.95994 13.9621 4.1977 14.0225 4.39062C14.3832 4.28047 14.5976 4.2144 14.5986 4.21387C14.6848 4.18861 14.9053 4.15548 15.0186 4.2666C15.1319 4.37835 16.2793 5.47754 16.2793 5.47754C16.2892 5.47769 17.651 5.49813 17.7207 5.50391C17.7911 5.50974 17.8761 5.56252 17.8896 5.6582C17.903 5.75387 19.9875 19.6559 20 19.7393L14.8594 21L3 18.9766C3.00926 18.9059 4.41507 8.18635 4.46777 7.80371C4.53831 7.30088 4.55507 7.28376 5.0957 7.11621C5.11227 7.11092 5.86205 6.883 6.93359 6.55566C7.04794 5.74769 7.45137 4.70375 7.98145 3.87305C8.73501 2.69229 9.66452 2.02733 10.5977 2.00098ZM9.70117 8.01074C7.47039 8.17645 6.45936 10.0145 6.55664 11.8281C6.67241 13.9827 8.49975 13.9055 8.57031 15.2168C8.58721 15.5336 8.42045 15.9824 7.95312 16.0176C7.23708 16.0708 6.3418 15.2754 6.3418 15.2754L6 16.9893C6 16.9893 6.88866 18.1112 8.50293 17.9912C9.84779 17.8911 10.7817 16.6234 10.6826 14.7705C10.5566 12.4154 8.31114 12.1957 8.25684 11.1904C8.24677 11.0059 8.2573 10.2711 9.24609 10.1973C9.92058 10.1472 10.4902 10.4521 10.4902 10.4521L11 8.2041C11 8.2041 10.5604 7.94575 9.70117 8.01074ZM10.6162 2.61328C9.17601 2.65447 7.91994 4.87299 7.59863 6.35156C8.1073 6.19662 8.65986 6.02778 9.22461 5.85547C9.40578 4.91616 9.86044 3.94271 10.4531 3.31543C10.6818 3.07348 10.9255 2.88794 11.1777 2.75879C11.0201 2.65653 10.8353 2.60854 10.6162 2.61328ZM11.5801 3.25C11.3054 3.36175 11.0729 3.55787 10.9072 3.7334C10.4617 4.20518 10.0985 4.92497 9.90723 5.64746C10.5876 5.43976 11.2662 5.23175 11.8877 5.04199C11.8941 4.53332 11.8381 3.78121 11.5801 3.25ZM12.2246 3.17773C12.4448 3.73804 12.5009 4.38657 12.5078 4.85254C12.8445 4.74975 13.1556 4.65458 13.4287 4.57129C13.2817 4.10001 12.9326 3.31002 12.2246 3.17773Z",fill:"white"}))}}]);
|
|
2
2
|
//# sourceMappingURL=34.maestro-web-sdk.esm.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["webpack:///./src/components/atoms/SvgIcon/
|
|
1
|
+
{"version":3,"sources":["webpack:///./src/components/atoms/SvgIcon/ShopifyIcon.tsx"],"names":["ShopifyIcon","props","React","createElement","width","height","viewBox","fill","xmlns","d"],"mappings":"0FAAA,2BAoBeA,UAjBMC,GAEjBC,IAAAC,cAAA,OACEC,MAAOH,EAAMG,MACbC,OAAQJ,EAAMI,OACdC,QAAQ,YACRC,KAAK,OACLC,MAAM,8BAENN,IAAAC,cAAA,QACEM,EAAE,+3DACFF,KAAK","file":"34.maestro-web-sdk.esm.js","sourcesContent":["import React from 'react';\nimport { IconProps } from './Icon';\n\nconst ShopifyIcon = (props: IconProps) => {\n return (\n <svg\n width={props.width}\n height={props.height}\n viewBox=\"0 0 24 24\"\n fill=\"none\"\n xmlns=\"http://www.w3.org/2000/svg\"\n >\n <path\n d=\"M10.5977 2.00098C11.0813 1.98676 11.485 2.14839 11.7998 2.48047C11.8222 2.5047 11.8439 2.52941 11.8652 2.55469C11.9152 2.55049 11.9647 2.54592 12.0146 2.5459H12.0176C12.74 2.54695 13.3378 2.95337 13.7461 3.72168C13.8728 3.95994 13.9621 4.1977 14.0225 4.39062C14.3832 4.28047 14.5976 4.2144 14.5986 4.21387C14.6848 4.18861 14.9053 4.15548 15.0186 4.2666C15.1319 4.37835 16.2793 5.47754 16.2793 5.47754C16.2892 5.47769 17.651 5.49813 17.7207 5.50391C17.7911 5.50974 17.8761 5.56252 17.8896 5.6582C17.903 5.75387 19.9875 19.6559 20 19.7393L14.8594 21L3 18.9766C3.00926 18.9059 4.41507 8.18635 4.46777 7.80371C4.53831 7.30088 4.55507 7.28376 5.0957 7.11621C5.11227 7.11092 5.86205 6.883 6.93359 6.55566C7.04794 5.74769 7.45137 4.70375 7.98145 3.87305C8.73501 2.69229 9.66452 2.02733 10.5977 2.00098ZM9.70117 8.01074C7.47039 8.17645 6.45936 10.0145 6.55664 11.8281C6.67241 13.9827 8.49975 13.9055 8.57031 15.2168C8.58721 15.5336 8.42045 15.9824 7.95312 16.0176C7.23708 16.0708 6.3418 15.2754 6.3418 15.2754L6 16.9893C6 16.9893 6.88866 18.1112 8.50293 17.9912C9.84779 17.8911 10.7817 16.6234 10.6826 14.7705C10.5566 12.4154 8.31114 12.1957 8.25684 11.1904C8.24677 11.0059 8.2573 10.2711 9.24609 10.1973C9.92058 10.1472 10.4902 10.4521 10.4902 10.4521L11 8.2041C11 8.2041 10.5604 7.94575 9.70117 8.01074ZM10.6162 2.61328C9.17601 2.65447 7.91994 4.87299 7.59863 6.35156C8.1073 6.19662 8.65986 6.02778 9.22461 5.85547C9.40578 4.91616 9.86044 3.94271 10.4531 3.31543C10.6818 3.07348 10.9255 2.88794 11.1777 2.75879C11.0201 2.65653 10.8353 2.60854 10.6162 2.61328ZM11.5801 3.25C11.3054 3.36175 11.0729 3.55787 10.9072 3.7334C10.4617 4.20518 10.0985 4.92497 9.90723 5.64746C10.5876 5.43976 11.2662 5.23175 11.8877 5.04199C11.8941 4.53332 11.8381 3.78121 11.5801 3.25ZM12.2246 3.17773C12.4448 3.73804 12.5009 4.38657 12.5078 4.85254C12.8445 4.74975 13.1556 4.65458 13.4287 4.57129C13.2817 4.10001 12.9326 3.31002 12.2246 3.17773Z\"\n fill=\"white\"\n />\n </svg>\n );\n};\n\nexport default ShopifyIcon;\n"],"sourceRoot":""}
|
|
@@ -1,2 +1,2 @@
|
|
|
1
|
-
(window.webpackJsonp=window.webpackJsonp||[]).push([[35],{80:function(e,t,
|
|
1
|
+
(window.webpackJsonp=window.webpackJsonp||[]).push([[35],{80:function(e,t,l){"use strict";l.r(t);var i=l(0),n=l.n(i);class a extends n.a.Component{render(){return n.a.createElement("svg",{width:this.props.width,height:this.props.height,viewBox:"0 0 36 36",fill:"none",xmlns:"http://www.w3.org/2000/svg"},n.a.createElement("g",{clipPath:"url(#clip0_538_5831)"},n.a.createElement("path",{fillRule:"evenodd",clipRule:"evenodd",d:"M14.5925 1.7998V32.6941H10.4849V14.8588H3.671V32.6941H0.899902V34.7641H35.099V32.6941H32.3603V8.0125H25.514V32.6941H21.4397V1.7998H14.5925Z",fill:"#9DA0A6"})),n.a.createElement("defs",null,n.a.createElement("clipPath",{id:"clip0_538_5831"},n.a.createElement("rect",{width:"36",height:"36",fill:"white"}))))}}t.default=a}}]);
|
|
2
2
|
//# sourceMappingURL=35.maestro-web-sdk.esm.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["webpack:///./src/components/atoms/SvgIcon/
|
|
1
|
+
{"version":3,"sources":["webpack:///./src/components/atoms/SvgIcon/StatsIcon.tsx"],"names":["StatsIcon","React","Component","render","createElement","width","this","props","height","viewBox","fill","xmlns","clipPath","fillRule","clipRule","d","id"],"mappings":"0FAAA,2BAGA,MAAMA,UAAkBC,IAAMC,UAC5BC,SACE,OACEF,IAAAG,cAAA,OACEC,MAAOC,KAAKC,MAAMF,MAClBG,OAAQF,KAAKC,MAAMC,OACnBC,QAAQ,YACRC,KAAK,OACLC,MAAM,8BAENV,IAAAG,cAAA,KAAGQ,SAAS,wBACVX,IAAAG,cAAA,QACES,SAAS,UACTC,SAAS,UACTC,EAAE,8IACFL,KAAK,aAGTT,IAAAG,cAAA,YACEH,IAAAG,cAAA,YAAUY,GAAG,kBACXf,IAAAG,cAAA,QAAMC,MAAM,KAAKG,OAAO,KAAKE,KAAK,cAQ/BV","file":"35.maestro-web-sdk.esm.js","sourcesContent":["import React from 'react';\nimport { IconProps } from './Icon';\n\nclass StatsIcon extends React.Component<IconProps, {}> {\n render() {\n return (\n <svg\n width={this.props.width}\n height={this.props.height}\n viewBox=\"0 0 36 36\"\n fill=\"none\"\n xmlns=\"http://www.w3.org/2000/svg\"\n >\n <g clipPath=\"url(#clip0_538_5831)\">\n <path\n fillRule=\"evenodd\"\n clipRule=\"evenodd\"\n d=\"M14.5925 1.7998V32.6941H10.4849V14.8588H3.671V32.6941H0.899902V34.7641H35.099V32.6941H32.3603V8.0125H25.514V32.6941H21.4397V1.7998H14.5925Z\"\n fill=\"#9DA0A6\"\n />\n </g>\n <defs>\n <clipPath id=\"clip0_538_5831\">\n <rect width=\"36\" height=\"36\" fill=\"white\" />\n </clipPath>\n </defs>\n </svg>\n );\n }\n}\n\nexport default StatsIcon;\n"],"sourceRoot":""}
|
|
@@ -1,2 +1,2 @@
|
|
|
1
|
-
(window.webpackJsonp=window.webpackJsonp||[]).push([[36],{
|
|
1
|
+
(window.webpackJsonp=window.webpackJsonp||[]).push([[36],{84:function(e,t,n){"use strict";n.r(t);var i=n(0),l=n.n(i);t.default=e=>l.a.createElement("svg",{width:e.width,height:e.height,viewBox:"0 0 25 24",fill:"none",xmlns:"http://www.w3.org/2000/svg"},l.a.createElement("path",{fillRule:"evenodd",clipRule:"evenodd",d:"M6.29999 3.73242L12.8 10.2324L19.3 3.73242L21.0678 5.50019L14.5678 12.0002L21.0678 18.5002L19.3 20.268L12.8 13.768L6.29999 20.268L4.53223 18.5002L11.0322 12.0002L4.53223 5.50019L6.29999 3.73242Z",fill:"#FF7F7F"}))}}]);
|
|
2
2
|
//# sourceMappingURL=36.maestro-web-sdk.esm.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["webpack:///./src/
|
|
1
|
+
{"version":3,"sources":["webpack:///./src/components/atoms/SvgIcon/TimesIcon.tsx"],"names":["TimesIcon","props","React","createElement","width","height","viewBox","fill","xmlns","fillRule","clipRule","d"],"mappings":"0FAAA,2BAsBeA,UAnBIC,GAEfC,IAAAC,cAAA,OACEC,MAAOH,EAAMG,MACbC,OAAQJ,EAAMI,OACdC,QAAQ,YACRC,KAAK,OACLC,MAAM,8BAENN,IAAAC,cAAA,QACEM,SAAS,UACTC,SAAS,UACTC,EAAE,qMACFJ,KAAK","file":"36.maestro-web-sdk.esm.js","sourcesContent":["import React from 'react';\nimport { IconProps } from './Icon';\n\nconst TimesIcon = (props: IconProps) => {\n return (\n <svg\n width={props.width}\n height={props.height}\n viewBox=\"0 0 25 24\"\n fill=\"none\"\n xmlns=\"http://www.w3.org/2000/svg\"\n >\n <path\n fillRule=\"evenodd\"\n clipRule=\"evenodd\"\n d=\"M6.29999 3.73242L12.8 10.2324L19.3 3.73242L21.0678 5.50019L14.5678 12.0002L21.0678 18.5002L19.3 20.268L12.8 13.768L6.29999 20.268L4.53223 18.5002L11.0322 12.0002L4.53223 5.50019L6.29999 3.73242Z\"\n fill=\"#FF7F7F\"\n />\n </svg>\n );\n};\n\nexport default TimesIcon;\n"],"sourceRoot":""}
|
|
@@ -1,2 +1,2 @@
|
|
|
1
|
-
(window.webpackJsonp=window.webpackJsonp||[]).push([[37],{
|
|
1
|
+
(window.webpackJsonp=window.webpackJsonp||[]).push([[37],{81:function(e,t,n){"use strict";n.r(t);var i=n(0),s=n.n(i);class l extends s.a.Component{render(){return s.a.createElement("svg",{width:this.props.width,height:this.props.height,viewBox:"0 0 22 20",fill:"none",xmlns:"http://www.w3.org/2000/svg"},s.a.createElement("path",{fillRule:"evenodd",clipRule:"evenodd",d:"M11.0022 0.75L21.8012 19.4545H0.203125L11.0022 0.75ZM11.7522 13.5V7.5H10.2522V13.5H11.7522ZM11.8022 14.95H10.2022V16.55H11.8022V14.95Z",fill:"#F58B00"}))}}t.default=l}}]);
|
|
2
2
|
//# sourceMappingURL=37.maestro-web-sdk.esm.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["webpack:///./src/
|
|
1
|
+
{"version":3,"sources":["webpack:///./src/components/atoms/SvgIcon/WarningIcon.tsx"],"names":["WarningIcon","React","Component","render","createElement","width","this","props","height","viewBox","fill","xmlns","fillRule","clipRule","d"],"mappings":"0FAAA,2BAGA,MAAMA,UAAoBC,IAAMC,UAC9BC,SACE,OACEF,IAAAG,cAAA,OACEC,MAAOC,KAAKC,MAAMF,MAClBG,OAAQF,KAAKC,MAAMC,OACnBC,QAAQ,YACRC,KAAK,OACLC,MAAM,8BAENV,IAAAG,cAAA,QACEQ,SAAS,UACTC,SAAS,UACTC,EAAE,yIACFJ,KAAK,cAOAV","file":"37.maestro-web-sdk.esm.js","sourcesContent":["import React from 'react';\nimport { IconProps } from './Icon';\n\nclass WarningIcon extends React.Component<IconProps, {}> {\n render() {\n return (\n <svg\n width={this.props.width}\n height={this.props.height}\n viewBox=\"0 0 22 20\"\n fill=\"none\"\n xmlns=\"http://www.w3.org/2000/svg\"\n >\n <path\n fillRule=\"evenodd\"\n clipRule=\"evenodd\"\n d=\"M11.0022 0.75L21.8012 19.4545H0.203125L11.0022 0.75ZM11.7522 13.5V7.5H10.2522V13.5H11.7522ZM11.8022 14.95H10.2022V16.55H11.8022V14.95Z\"\n fill=\"#F58B00\"\n />\n </svg>\n );\n }\n}\n\nexport default WarningIcon;\n"],"sourceRoot":""}
|
|
@@ -1,2 +1,2 @@
|
|
|
1
|
-
(window.webpackJsonp=window.webpackJsonp||[]).push([[38],{
|
|
1
|
+
(window.webpackJsonp=window.webpackJsonp||[]).push([[38],{232:function(n,e,o){"use strict";o.r(e);var a=o(0),i=o.n(a);e.default=()=>i.a.createElement("div",{style:{marginTop:"36px"}},"Fox Key Plays Coming Soon!")}}]);
|
|
2
2
|
//# sourceMappingURL=38.maestro-web-sdk.esm.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["webpack:///./src/modules/fox/
|
|
1
|
+
{"version":3,"sources":["webpack:///./src/modules/fox/key-plays/view/FoxKeyPlays.tsx"],"names":["FoxKeyPlays","React","createElement","style","marginTop"],"mappings":"2FAAA,2BAMeA,UAJKA,IACXC,IAAAC,cAAA,OAAKC,MAAO,CAAEC,UAAW,SAAU","file":"38.maestro-web-sdk.esm.js","sourcesContent":["import React from 'react';\n\nconst FoxKeyPlays = () => {\n return <div style={{ marginTop: '36px' }}>Fox Key Plays Coming Soon!</div>;\n};\n\nexport default FoxKeyPlays;\n"],"sourceRoot":""}
|
|
@@ -0,0 +1,2 @@
|
|
|
1
|
+
(window.webpackJsonp=window.webpackJsonp||[]).push([[39],{247:function(t,e,i){"use strict";i.r(e),i.d(e,"MultiViewViewModel",(function(){return h}));var s=i(34),r=i(3);const a={2:{layoutId:"LR",description:"Two equal-sized windows side by side",positions:{L:{w:.4766,h:.4766,x:.259,y:.5},R:{w:.4766,h:.4766,x:.7409,y:.5}},name:"50/50",windowCount:2,positionsOrder:["L","R"]},3:{layoutId:"TLTRB",description:"Three equal-sized windows in T layout",positions:{B:{w:.458,h:.458,x:.5,y:.266},TL:{w:.458,h:.458,x:.268,y:.7335},TR:{w:.458,h:.458,x:.732,y:.7335}},name:"Triple T",windowCount:3,positionsOrder:["TL","TR","B"]},4:{layoutId:"TLTRBLBR",description:"Four equal-sized windows in 2x2 grid",positions:{BL:{w:.4766,h:.4766,x:.259,y:.257},BR:{w:.4766,h:.4766,x:.741,y:.257},TL:{w:.4766,h:.4766,x:.259,y:.743},TR:{w:.4766,h:.4766,x:.741,y:.743}},name:"2x2 Grid",windowCount:4,positionsOrder:["TL","TR","BL","BR"]}};var o=i(35);function n(t,e,i){return(e=function(t){var e=function(t,e){if("object"!=typeof t||!t)return t;var i=t[Symbol.toPrimitive];if(void 0!==i){var s=i.call(t,e||"default");if("object"!=typeof s)return s;throw new TypeError("@@toPrimitive must return a primitive value.")}return("string"===e?String:Number)(t)}(t,"string");return"symbol"==typeof e?e:e+""}(e))in t?Object.defineProperty(t,e,{value:i,enumerable:!0,configurable:!0,writable:!0}):t[e]=i,t}var l=class{constructor(){n(this,"networkManager",void 0),n(this,"productAPI",null),this.networkManager=new o.b}getLayouts(){return this.productAPI?this.networkManager.externalApiRequest({endpoint:"https://qa-mvlm.api.shared.digitalvideoplatform.com/mvlm/v1/layouts",headers:this.productAPI.headers}):null}setProductAPIData(t){this.productAPI=t}pollCuratedMultiviews(t,e,i){return this.productAPI?this.networkManager.pollExternalApiRequest({endpoint:this.productAPI.endpoint,interval:t,method:this.productAPI.method,headers:this.productAPI.headers,onData:e,onError:i}):null}getOrCreateCustomMultiview(t,e={}){return this.networkManager.externalApiRequest({endpoint:"https://qa-mvlm.api.shared.digitalvideoplatform.com/mvlm/v1/mvlisting",method:o.a.POST,data:t,headers:e})}},u=i(15),d=i(4);function c(t,e,i){return(e=function(t){var e=function(t,e){if("object"!=typeof t||!t)return t;var i=t[Symbol.toPrimitive];if(void 0!==i){var s=i.call(t,e||"default");if("object"!=typeof s)return s;throw new TypeError("@@toPrimitive must return a primitive value.")}return("string"===e?String:Number)(t)}(t,"string");return"symbol"==typeof e?e:e+""}(e))in t?Object.defineProperty(t,e,{value:i,enumerable:!0,configurable:!0,writable:!0}):t[e]=i,t}class h extends s.a{constructor(t,e,i){super(),c(this,"_layouts",new r.a([])),c(this,"_isPolling",new r.a(!1)),c(this,"service",void 0),c(this,"delegate",void 0),c(this,"eventId",void 0),c(this,"analyticsService",void 0),c(this,"isDataLoading",new r.a(!1)),c(this,"pollingTask",null),c(this,"items",new r.a([])),c(this,"hasEverSuccessfullyLoaded",new r.a(!1)),c(this,"onAuthError",void 0),this.eventId=t,this.delegate=e,this.analyticsService=i,this.service=new l}getLayouts(){return this._layouts.value}getIsPolling(){return this._isPolling}getIsDataLoading(){return this.isDataLoading}getEventId(){return this.eventId}notifyProductAPIUnauthorized(t){if(401!==t.statusCode)return;const e={code:t.statusCode,message:t.message||"Not authorized",success:!1,data:t.data};this.onAuthError&&this.onAuthError(e)}async trackPanelView(){try{await this.analyticsService.panelView("foxMultiView")}catch(t){Object(d.a)(t,{context:"MultiViewViewModel.trackPanelView"}),console.error("[MULTIVIEW] Error tracking panel view:",t)}}async init(){try{await this.trackPanelView(),await this.fetchLayouts(),this.refreshPolling()}catch(t){const e=t instanceof Error?t.message:"Failed to initialize MultiView";this.setError(e),console.error("[MultiViewViewModel] Initialization error:",t)}}async fetchLayouts(){if(!this.getLayouts().length)try{this.isDataLoading.value=!0;const t=await this.service.getLayouts();t&&(this._layouts.value=t)}catch(t){if(console.log("[MultiViewViewModel] Error fetching layouts:",t),t instanceof u.a)return void this.notifyProductAPIUnauthorized(t);const e=t instanceof Error?t.message:"Failed to fetch layouts";this.hasEverSuccessfullyLoaded.value||this.setError(e)}finally{this.isDataLoading.value=!1}}async setDataToPanel(t){try{const e="function"==typeof t.callback?t.callback:void 0;(t=>!(!t||"object"!=typeof t)&&("string"==typeof t.endpoint&&"string"==typeof t.method&&null!==t.headers&&"object"==typeof t.headers&&!Array.isArray(t.headers)))(t)&&(this.onAuthError=e,this.service.setProductAPIData(t),await this.fetchLayouts(),this.refreshPolling())}catch(t){const e=t instanceof Error?t.message:"Failed to set panel data";console.error("[MultiViewViewModel] Error setting panel data:",t),this.hasEverSuccessfullyLoaded.value||this.setError(e)}}async onSelectCustomMultiview(t){try{this.setLoading(!0),this.setError(null);const e=await this.service.getOrCreateCustomMultiview(t);this.delegate&&this.delegate.onPanelEvent({type:"fox-multiview:custom-multiview",payload:e.multiviewId})}catch(t){const e=t instanceof Error?t.message:"Failed to select custom multiview";throw this.setError(e),console.error("[MultiViewViewModel] Error selecting multiview:",t),t}finally{this.setLoading(!1)}}cleanup(){this.stopPolling(),this.hasEverSuccessfullyLoaded.value=!1}onSelectCuratedMultiview(t){if(t.isSelected)return;const e=a[t.listings.length];if(!e)return;const i={childListings:t.listings.map((t,i)=>({callsign:t.type,listingId:t.id,position:e.positions[e.positionsOrder[i]]})),multiviewID:t.id};this.delegate.onPanelEvent({type:"fox-multiview:new-multiview",payload:i})}stopPolling(){this.pollingTask&&(this.pollingTask.stop(),this.pollingTask=null),this.isDataLoading.value&&(this.isDataLoading.value=!1)}refreshPolling(){this.stopPolling(),this.pollingTask=this.service.pollCuratedMultiviews(3e4,this.processCuratedMultiviewData.bind(this),t=>{console.error("[MultiViewViewModel] Error polling data:",t),t instanceof u.a&&this.notifyProductAPIUnauthorized(t)})}processCuratedMultiviewData(t){if(!t||!t.status||!t.data)return;if(!Array.isArray(t.data.items))return;const e=[];for(const s of t.data.items){const t=[];if(s.is_multiview){var i;if(s.multiview_metadata&&Array.isArray(s.multiview_metadata))for(const e of s.multiview_metadata)t.push({id:e.entity_id||"",description:e.is_sportingevent&&e.left_team&&e.right_team?`${e.left_team.abbreviation} vs ${e.right_team.abbreviation}`:s.title||"",backgroundImage:"https://placedog.net/640/480",type:e.type||"unknown"});else t.push({id:s.entity_id||"",description:s.title||"",backgroundImage:(null===(i=s.images)||void 0===i?void 0:i.still)||"",type:s.type||"unknown"});e.push({id:s.entity_id||"",isSelected:this.eventId===s.entity_id,listings:t})}}const s=[...this.items.value],r=s.findIndex(t=>"curated-multiviews"===t.type);-1!==r?s[r]={type:"curated-multiviews",items:e}:s.unshift({type:"curated-multiviews",items:e}),this.items.value=s,this.hasEverSuccessfullyLoaded.value||(this.hasEverSuccessfullyLoaded.value=!0,this.error.value&&this.setError(null))}async clearTabLoadFailure(){this.setError(null),await this.fetchLayouts(),this.refreshPolling()}}}}]);
|
|
2
|
+
//# sourceMappingURL=39.maestro-web-sdk.esm.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["webpack:///./src/modules/fox/multi-view/types.ts","webpack:///./src/modules/fox/multi-view/services/MultiViewService.ts","webpack:///./src/modules/fox/multi-view/view-model/MultiViewViewModel.ts"],"names":["DEFAULT_LAYOUTS_BY_LISTINGS_QUANTITY","2","layoutId","description","positions","L","w","h","x","y","R","name","windowCount","positionsOrder","3","B","TL","TR","4","BL","BR","MultiViewService","constructor","_defineProperty","this","networkManager","NetworkManager","getLayouts","productAPI","externalApiRequest","endpoint","headers","setProductAPIData","pollCuratedMultiviews","interval","onData","onError","pollExternalApiRequest","method","getOrCreateCustomMultiview","config","HttpMethod","POST","data","MultiViewViewModel","ViewModel","eventId","delegate","analyticsService","super","Observable","service","_layouts","value","getIsPolling","_isPolling","getIsDataLoading","isDataLoading","getEventId","notifyProductAPIUnauthorized","error","statusCode","payload","code","message","success","onAuthError","panelView","captureException","context","console","trackPanelView","fetchLayouts","refreshPolling","errorMessage","Error","setError","length","layouts","log","AuthError","hasEverSuccessfullyLoaded","callback","undefined","Array","isArray","isProductAPIValid","params","setLoading","response","onPanelEvent","type","multiviewId","cleanup","stopPolling","onSelectCuratedMultiview","item","isSelected","layout","listings","childListings","map","l","listingIndex","callsign","listingId","id","position","multiviewID","pollingTask","stop","processCuratedMultiviewData","bind","status","items","curatedMultiviewItem","is_multiview","_item$images","multiview_metadata","mv","push","entity_id","is_sportingevent","left_team","right_team","abbreviation","title","backgroundImage","images","still","newItems","existingCuratedMultiviewIndex","findIndex","i","unshift"],"mappings":"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","file":"39.maestro-web-sdk.esm.js","sourcesContent":["/**\n * @description Represents a single stream/camera listing available for multi-view\n */\nexport interface CuratedMultiviewListing {\n id: string;\n description: string;\n backgroundImage: string;\n type: string;\n}\n\n/**\n * @description Position data for a single window within a layout\n */\nexport interface LayoutPosition {\n w: number;\n h: number;\n x: number;\n y: number;\n}\n\n/**\n * @description Defines a multi-view layout configuration with positioned windows\n */\nexport interface MultiViewLayout {\n layoutId: string;\n description: string;\n positions: Record<string, LayoutPosition>;\n name: string;\n windowCount: number;\n positionsOrder: string[];\n}\n\n/**\n * @description Child listing with position for new multiview event payload (PRD: SDK to pass event to client)\n */\nexport interface NewMultiviewChildListing {\n listingId: string;\n callsign: string;\n position: LayoutPosition;\n}\n\n/**\n * @description Payload for fox-multiview:new-multiview panel event when a curated multiview is selected\n */\nexport interface NewMultiviewPayload {\n multiviewID: string;\n childListings: NewMultiviewChildListing[];\n}\n\n/**\n * @description Available layouts organized by stream count\n */\nexport const DEFAULT_LAYOUTS_BY_LISTINGS_QUANTITY: Record<\n number,\n MultiViewLayout\n> = {\n 2: {\n layoutId: 'LR',\n description: 'Two equal-sized windows side by side',\n positions: {\n L: {\n w: 0.4766,\n h: 0.4766,\n x: 0.259,\n y: 0.5,\n },\n R: {\n w: 0.4766,\n h: 0.4766,\n x: 0.7409,\n y: 0.5,\n },\n },\n name: '50/50',\n windowCount: 2,\n positionsOrder: ['L', 'R'],\n },\n 3: {\n layoutId: 'TLTRB',\n description: 'Three equal-sized windows in T layout',\n positions: {\n B: {\n w: 0.458,\n h: 0.458,\n x: 0.5,\n y: 0.266,\n },\n TL: {\n w: 0.458,\n h: 0.458,\n x: 0.268,\n y: 0.7335,\n },\n TR: {\n w: 0.458,\n h: 0.458,\n x: 0.732,\n y: 0.7335,\n },\n },\n name: 'Triple T',\n windowCount: 3,\n positionsOrder: ['TL', 'TR', 'B'],\n },\n 4: {\n layoutId: 'TLTRBLBR',\n description: 'Four equal-sized windows in 2x2 grid',\n positions: {\n BL: {\n w: 0.4766,\n h: 0.4766,\n x: 0.259,\n y: 0.257,\n },\n BR: {\n w: 0.4766,\n h: 0.4766,\n x: 0.741,\n y: 0.257,\n },\n TL: {\n w: 0.4766,\n h: 0.4766,\n x: 0.259,\n y: 0.743,\n },\n TR: {\n w: 0.4766,\n h: 0.4766,\n x: 0.741,\n y: 0.743,\n },\n },\n name: '2x2 Grid',\n windowCount: 4,\n positionsOrder: ['TL', 'TR', 'BL', 'BR'],\n },\n};\n","import NetworkManager, {\n HttpMethod,\n} from '@/services/NetworkManager/NetworkManager';\nimport { MultiViewLayout } from '../types';\n\nconst MULTIVIEW_BASE_URL =\n 'https://qa-mvlm.api.shared.digitalvideoplatform.com';\n\nexport type ProductAPIData = {\n endpoint: string;\n method: HttpMethod;\n headers: Record<string, string>;\n};\n\nexport type ProductAPIErrorPayload = {\n code: number;\n message: string;\n success: false;\n data?: unknown;\n};\n\nexport type MultiViewListingRequest = {\n layoutId: string;\n listings: Array<{\n listingId: string;\n callsign: string;\n }>;\n};\n\nexport type MultiViewListingResponse = {\n multiviewId?: string;\n callbackSeconds?: number;\n};\n\nexport interface CuratedMultiviewResponse {\n status: boolean;\n data?: {\n items?: CuratedMultiviewItem[];\n };\n}\n\ninterface CuratedMultiviewItem {\n entity_id?: string;\n type?: string;\n title?: string;\n is_multiview?: boolean;\n is_multiview_eligible?: boolean;\n is_sportingevent?: boolean;\n images?: {\n still?: string;\n };\n multiview?: string[];\n multiview_metadata?: CuratedMultiviewMetadata[];\n}\n\ninterface CuratedMultiviewMetadata {\n entity_id: string;\n type: string; // e.g. \"EPG\"\n is_sportingevent: boolean;\n images: Record<string, unknown>;\n left_team: Team;\n right_team: Team;\n}\n\ninterface Team {\n abbreviation: string;\n}\n\nexport const isProductAPIValid = (data: any): data is ProductAPIData => {\n if (!data || typeof data !== 'object') return false;\n return (\n typeof data.endpoint === 'string' &&\n typeof data.method === 'string' &&\n data.headers !== null &&\n typeof data.headers === 'object' &&\n !Array.isArray(data.headers)\n );\n};\n\n/**\n * Service for handling multi-view API calls\n */\nclass MultiViewService {\n private networkManager: NetworkManager;\n private productAPI: ProductAPIData | null = null;\n\n constructor() {\n this.networkManager = new NetworkManager();\n }\n\n /**\n * Fetch available multi-view layouts\n *\n * @returns Promise resolving to layouts data\n */\n getLayouts(): Promise<MultiViewLayout[]> | null {\n if (!this.productAPI) {\n return null;\n }\n\n return this.networkManager.externalApiRequest<MultiViewLayout[]>({\n endpoint: `${MULTIVIEW_BASE_URL}/mvlm/v1/layouts`,\n headers: this.productAPI.headers,\n });\n }\n\n /**\n * Set the product API configuration\n *\n * @param productAPI - The product API endpoint, method, and headers\n */\n setProductAPIData(productAPI: ProductAPIData): void {\n this.productAPI = productAPI;\n }\n\n /**\n * Start polling curated multiviews using the product API configuration.\n * Returns null if no product API has been set.\n *\n * @param interval - Polling interval in milliseconds\n * @param onData - Callback invoked with the data on each successful poll\n * @param onError - Optional callback invoked on error\n * @returns Object with a stop function, or null if no productAPI is configured\n */\n pollCuratedMultiviews(\n interval: number,\n onData: (data: CuratedMultiviewResponse) => void,\n onError?: (error: Error) => void\n ): { stop: () => void } | null {\n if (!this.productAPI) {\n return null;\n }\n\n return this.networkManager.pollExternalApiRequest({\n endpoint: this.productAPI.endpoint,\n interval,\n method: this.productAPI.method,\n headers: this.productAPI.headers,\n onData,\n onError,\n });\n }\n\n /**\n * Request an existing or new custom multiview.\n * If the multiview exists, the response will include a multiviewId.\n * If the multiview needs to be created, the response will include\n * callbackSeconds indicating when to retry.\n *\n * @param config - The layout ID and listings for the multiview\n * @param headers - Request headers (e.g. x-access-token, Content-Type)\n * @returns Promise resolving to the multiview listing response\n */\n getOrCreateCustomMultiview(\n config: MultiViewListingRequest,\n headers: Record<string, string> = {}\n ): Promise<MultiViewListingResponse> {\n return this.networkManager.externalApiRequest<MultiViewListingResponse>({\n endpoint: `${MULTIVIEW_BASE_URL}/mvlm/v1/mvlisting`,\n method: HttpMethod.POST,\n data: config,\n headers,\n });\n }\n}\n\nexport default MultiViewService;\n","import { ViewModel } from '@/view-models/ViewModel';\nimport { Observable } from '@/helpers/Observable';\nimport {\n CuratedMultiviewListing,\n DEFAULT_LAYOUTS_BY_LISTINGS_QUANTITY,\n MultiViewLayout,\n NewMultiviewPayload,\n} from '../types';\nimport IMaestroEventDelegate from '@/interfaces/IMaestroEventDelegate';\nimport MultiViewService, {\n CuratedMultiviewResponse,\n isProductAPIValid,\n ProductAPIErrorPayload,\n MultiViewListingRequest,\n} from '../services/MultiViewService';\nimport AnalyticsService from '@/services/AnalyticsService/AnalyticsService';\nimport { AuthError } from '@/services/NetworkManager/errors';\nimport { captureException } from '@/sentry';\n\nexport type CuratedMultiviewItem = {\n id: string;\n isSelected: boolean;\n listings: CuratedMultiviewListing[];\n};\n\nexport type CuratedMultiviewsItem = {\n type: 'curated-multiviews';\n items: CuratedMultiviewItem[];\n};\n\nexport type MultiviewItem = CuratedMultiviewsItem;\n\nexport class MultiViewViewModel extends ViewModel {\n private _layouts = new Observable<MultiViewLayout[]>([]);\n private _isPolling = new Observable<boolean>(false);\n private service: MultiViewService;\n private delegate: IMaestroEventDelegate;\n private eventId: string;\n private analyticsService: AnalyticsService;\n public isDataLoading = new Observable<boolean>(false);\n private pollingTask: { stop: () => void } | null = null;\n items = new Observable<MultiviewItem[]>([]);\n private hasEverSuccessfullyLoaded = new Observable<boolean>(false);\n private onAuthError?: (payload: ProductAPIErrorPayload) => void;\n\n constructor(\n eventId: string,\n delegate: IMaestroEventDelegate,\n analyticsService: AnalyticsService\n ) {\n super();\n this.eventId = eventId;\n this.delegate = delegate;\n this.analyticsService = analyticsService;\n this.service = new MultiViewService();\n }\n\n getLayouts(): MultiViewLayout[] {\n return this._layouts.value;\n }\n\n getIsPolling(): Observable<boolean> {\n return this._isPolling;\n }\n\n getIsDataLoading(): Observable<boolean> {\n return this.isDataLoading;\n }\n\n getEventId(): string {\n return this.eventId;\n }\n\n /**\n * Notify client app about a Product API auth error.\n * Uses configured callback first, and falls back to onPanelEvent.\n */\n private notifyProductAPIUnauthorized(error: AuthError): void {\n if (error.statusCode !== 401) {\n return;\n }\n\n const payload: ProductAPIErrorPayload = {\n code: error.statusCode,\n message: error.message || 'Not authorized',\n success: false,\n data: error.data,\n };\n\n if (this.onAuthError) {\n this.onAuthError(payload);\n }\n }\n\n private async trackPanelView(): Promise<void> {\n try {\n await this.analyticsService.panelView('foxMultiView');\n } catch (error) {\n captureException(error, {\n context: 'MultiViewViewModel.trackPanelView',\n });\n console.error('[MULTIVIEW] Error tracking panel view:', error);\n }\n }\n\n async init(): Promise<void> {\n try {\n await this.trackPanelView();\n await this.fetchLayouts();\n this.refreshPolling();\n } catch (error) {\n const errorMessage =\n error instanceof Error\n ? error.message\n : 'Failed to initialize MultiView';\n this.setError(errorMessage);\n console.error('[MultiViewViewModel] Initialization error:', error);\n }\n }\n\n async fetchLayouts(): Promise<void> {\n if (this.getLayouts().length) {\n return;\n }\n\n try {\n this.isDataLoading.value = true;\n const layouts = await this.service.getLayouts();\n if (layouts) {\n this._layouts.value = layouts;\n }\n } catch (error) {\n console.log('[MultiViewViewModel] Error fetching layouts:', error);\n\n if (error instanceof AuthError) {\n this.notifyProductAPIUnauthorized(error);\n return;\n }\n\n const errorMessage =\n error instanceof Error ? error.message : 'Failed to fetch layouts';\n\n if (!this.hasEverSuccessfullyLoaded.value) {\n this.setError(errorMessage);\n }\n } finally {\n this.isDataLoading.value = false;\n }\n }\n\n async setDataToPanel(data: Record<string, any>) {\n try {\n const callback =\n typeof data.callback === 'function' ? data.callback : undefined;\n if (isProductAPIValid(data)) {\n this.onAuthError = callback;\n this.service.setProductAPIData(data);\n await this.fetchLayouts();\n this.refreshPolling();\n }\n } catch (error) {\n const errorMessage =\n error instanceof Error ? error.message : 'Failed to set panel data';\n console.error('[MultiViewViewModel] Error setting panel data:', error);\n\n if (!this.hasEverSuccessfullyLoaded.value) {\n this.setError(errorMessage);\n }\n }\n }\n\n async onSelectCustomMultiview(\n params: MultiViewListingRequest\n ): Promise<void> {\n try {\n this.setLoading(true);\n this.setError(null);\n\n const response = await this.service.getOrCreateCustomMultiview(params);\n\n if (this.delegate) {\n this.delegate.onPanelEvent({\n type: 'fox-multiview:custom-multiview',\n payload: response.multiviewId,\n });\n }\n } catch (error) {\n const errorMessage =\n error instanceof Error\n ? error.message\n : 'Failed to select custom multiview';\n this.setError(errorMessage);\n console.error('[MultiViewViewModel] Error selecting multiview:', error);\n throw error;\n } finally {\n this.setLoading(false);\n }\n }\n\n /**\n * Clean up resources when the ViewModel is no longer needed\n */\n cleanup(): void {\n this.stopPolling();\n this.hasEverSuccessfullyLoaded.value = false;\n }\n\n /**\n * Called when a curated multiview is selected. Notifies the client via onPanelEvent\n * so the app can switch the video player to the selected multiview.\n */\n onSelectCuratedMultiview(item: CuratedMultiviewItem) {\n if (item.isSelected) {\n return;\n }\n\n const layout = DEFAULT_LAYOUTS_BY_LISTINGS_QUANTITY[item.listings.length];\n if (!layout) {\n return;\n }\n\n const payload: NewMultiviewPayload = {\n childListings: item.listings.map((l, listingIndex) => ({\n callsign: l.type,\n listingId: l.id,\n position: layout.positions[layout.positionsOrder[listingIndex]],\n })),\n multiviewID: item.id,\n };\n this.delegate.onPanelEvent({\n type: 'fox-multiview:new-multiview',\n payload,\n });\n }\n\n /**\n * Stop polling for bet data\n */\n stopPolling(): void {\n if (this.pollingTask) {\n this.pollingTask.stop();\n this.pollingTask = null;\n }\n\n if (this.isDataLoading.value) {\n this.isDataLoading.value = false;\n }\n }\n\n /**\n * Refresh polling for curated multiviews\n */\n refreshPolling(): void {\n // First stop any existing polling\n this.stopPolling();\n\n // Start the poll loop\n this.pollingTask = this.service.pollCuratedMultiviews(\n 30000,\n this.processCuratedMultiviewData.bind(this),\n (error) => {\n console.error('[MultiViewViewModel] Error polling data:', error);\n\n if (error instanceof AuthError) {\n this.notifyProductAPIUnauthorized(error);\n }\n }\n );\n }\n\n processCuratedMultiviewData(data: CuratedMultiviewResponse) {\n if (!data || !data.status || !data.data) {\n return;\n }\n\n if (!Array.isArray(data.data.items)) {\n return;\n }\n\n const curatedMultiviewItem: CuratedMultiviewItem[] = [];\n\n for (const item of data.data.items) {\n const listings: CuratedMultiviewListing[] = [];\n if (!item.is_multiview) {\n continue;\n }\n if (item.multiview_metadata && Array.isArray(item.multiview_metadata)) {\n for (const mv of item.multiview_metadata) {\n listings.push({\n id: mv.entity_id || '',\n description:\n mv.is_sportingevent && mv.left_team && mv.right_team\n ? `${mv.left_team.abbreviation} vs ${mv.right_team.abbreviation}`\n : item.title || '',\n backgroundImage: 'https://placedog.net/640/480',\n type: mv.type || 'unknown',\n });\n }\n } else {\n listings.push({\n id: item.entity_id || '',\n description: item.title || '',\n backgroundImage: item.images?.still || '',\n type: item.type || 'unknown',\n });\n }\n\n curatedMultiviewItem.push({\n id: item.entity_id || '',\n isSelected: this.eventId === item.entity_id,\n listings,\n });\n }\n\n const newItems = [...this.items.value];\n const existingCuratedMultiviewIndex = newItems.findIndex(\n (i) => i.type === 'curated-multiviews'\n );\n\n if (existingCuratedMultiviewIndex !== -1) {\n newItems[existingCuratedMultiviewIndex] = {\n type: 'curated-multiviews',\n items: curatedMultiviewItem,\n };\n } else {\n newItems.unshift({\n type: 'curated-multiviews',\n items: curatedMultiviewItem,\n });\n }\n\n this.items.value = newItems;\n\n if (!this.hasEverSuccessfullyLoaded.value) {\n this.hasEverSuccessfullyLoaded.value = true;\n if (this.error.value) {\n this.setError(null);\n }\n }\n }\n\n async clearTabLoadFailure() {\n this.setError(null);\n await this.fetchLayouts();\n this.refreshPolling();\n }\n}\n"],"sourceRoot":""}
|