@maestro_io/maestro-web-sdk 5.1.1 → 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.
Files changed (162) hide show
  1. package/dist/1.maestro-web-sdk.esm.js +1 -1
  2. package/dist/1.maestro-web-sdk.esm.js.map +1 -1
  3. package/dist/10.maestro-web-sdk.esm.js +1 -1
  4. package/dist/10.maestro-web-sdk.esm.js.map +1 -1
  5. package/dist/11.maestro-web-sdk.esm.js +1 -1
  6. package/dist/11.maestro-web-sdk.esm.js.map +1 -1
  7. package/dist/12.maestro-web-sdk.esm.js +1 -1
  8. package/dist/12.maestro-web-sdk.esm.js.map +1 -1
  9. package/dist/13.maestro-web-sdk.esm.js +1 -1
  10. package/dist/13.maestro-web-sdk.esm.js.map +1 -1
  11. package/dist/14.maestro-web-sdk.esm.js +1 -1
  12. package/dist/14.maestro-web-sdk.esm.js.map +1 -1
  13. package/dist/15.maestro-web-sdk.esm.js +1 -1
  14. package/dist/15.maestro-web-sdk.esm.js.map +1 -1
  15. package/dist/16.maestro-web-sdk.esm.js +1 -1
  16. package/dist/16.maestro-web-sdk.esm.js.map +1 -1
  17. package/dist/17.maestro-web-sdk.esm.js +1 -1
  18. package/dist/17.maestro-web-sdk.esm.js.map +1 -1
  19. package/dist/18.maestro-web-sdk.esm.js +1 -1
  20. package/dist/18.maestro-web-sdk.esm.js.map +1 -1
  21. package/dist/19.maestro-web-sdk.esm.js +1 -1
  22. package/dist/19.maestro-web-sdk.esm.js.map +1 -1
  23. package/dist/2.maestro-web-sdk.esm.js +1 -1
  24. package/dist/20.maestro-web-sdk.esm.js +1 -1
  25. package/dist/20.maestro-web-sdk.esm.js.map +1 -1
  26. package/dist/21.maestro-web-sdk.esm.js +1 -1
  27. package/dist/21.maestro-web-sdk.esm.js.map +1 -1
  28. package/dist/22.maestro-web-sdk.esm.js +1 -1
  29. package/dist/22.maestro-web-sdk.esm.js.map +1 -1
  30. package/dist/23.maestro-web-sdk.esm.js +1 -1
  31. package/dist/23.maestro-web-sdk.esm.js.map +1 -1
  32. package/dist/24.maestro-web-sdk.esm.js +1 -1
  33. package/dist/24.maestro-web-sdk.esm.js.map +1 -1
  34. package/dist/25.maestro-web-sdk.esm.js +1 -1
  35. package/dist/25.maestro-web-sdk.esm.js.map +1 -1
  36. package/dist/26.maestro-web-sdk.esm.js +1 -1
  37. package/dist/26.maestro-web-sdk.esm.js.map +1 -1
  38. package/dist/27.maestro-web-sdk.esm.js +1 -1
  39. package/dist/27.maestro-web-sdk.esm.js.map +1 -1
  40. package/dist/28.maestro-web-sdk.esm.js +1 -1
  41. package/dist/28.maestro-web-sdk.esm.js.map +1 -1
  42. package/dist/29.maestro-web-sdk.esm.js +1 -1
  43. package/dist/29.maestro-web-sdk.esm.js.map +1 -1
  44. package/dist/3.maestro-web-sdk.esm.js +1 -1
  45. package/dist/3.maestro-web-sdk.esm.js.map +1 -1
  46. package/dist/30.maestro-web-sdk.esm.js +1 -1
  47. package/dist/30.maestro-web-sdk.esm.js.map +1 -1
  48. package/dist/31.maestro-web-sdk.esm.js +1 -1
  49. package/dist/31.maestro-web-sdk.esm.js.map +1 -1
  50. package/dist/32.maestro-web-sdk.esm.js +1 -1
  51. package/dist/32.maestro-web-sdk.esm.js.map +1 -1
  52. package/dist/33.maestro-web-sdk.esm.js +1 -1
  53. package/dist/33.maestro-web-sdk.esm.js.map +1 -1
  54. package/dist/34.maestro-web-sdk.esm.js +1 -1
  55. package/dist/34.maestro-web-sdk.esm.js.map +1 -1
  56. package/dist/35.maestro-web-sdk.esm.js +1 -1
  57. package/dist/35.maestro-web-sdk.esm.js.map +1 -1
  58. package/dist/36.maestro-web-sdk.esm.js +1 -1
  59. package/dist/36.maestro-web-sdk.esm.js.map +1 -1
  60. package/dist/37.maestro-web-sdk.esm.js +1 -1
  61. package/dist/37.maestro-web-sdk.esm.js.map +1 -1
  62. package/dist/38.maestro-web-sdk.esm.js +1 -1
  63. package/dist/38.maestro-web-sdk.esm.js.map +1 -1
  64. package/dist/39.maestro-web-sdk.esm.js +2 -0
  65. package/dist/39.maestro-web-sdk.esm.js.map +1 -0
  66. package/dist/4.maestro-web-sdk.esm.js +1 -1
  67. package/dist/4.maestro-web-sdk.esm.js.map +1 -1
  68. package/dist/40.maestro-web-sdk.esm.js +2 -0
  69. package/dist/40.maestro-web-sdk.esm.js.map +1 -0
  70. package/dist/5.maestro-web-sdk.esm.js +1 -1
  71. package/dist/5.maestro-web-sdk.esm.js.map +1 -1
  72. package/dist/6.maestro-web-sdk.esm.js +1 -1
  73. package/dist/6.maestro-web-sdk.esm.js.map +1 -1
  74. package/dist/7.maestro-web-sdk.esm.js +1 -1
  75. package/dist/7.maestro-web-sdk.esm.js.map +1 -1
  76. package/dist/8.maestro-web-sdk.esm.js +1 -1
  77. package/dist/8.maestro-web-sdk.esm.js.map +1 -1
  78. package/dist/9.maestro-web-sdk.esm.js +1 -1
  79. package/dist/9.maestro-web-sdk.esm.js.map +1 -1
  80. package/dist/index.d.ts +12 -2
  81. package/dist/maestro-web-sdk.esm.js +3 -3
  82. package/dist/maestro-web-sdk.esm.js.map +1 -1
  83. package/dist/maestro-web-sdk.umd.js +3 -3
  84. package/dist/maestro-web-sdk.umd.js.map +1 -1
  85. package/dist/package.json +1 -1
  86. package/dist/src/components/atoms/SvgIcon/AddIcon.d.ts +3 -0
  87. package/dist/src/components/atoms/SvgIcon/AddIcon.js +6 -0
  88. package/dist/src/components/atoms/SvgIcon/Icon.js +2 -0
  89. package/dist/src/components/core/PanelManager/PanelManager.js +5 -3
  90. package/dist/src/components/molecules/NetworkDialog/NetworkDialog.d.ts +11 -0
  91. package/dist/src/components/molecules/NetworkDialog/NetworkDialog.js +34 -0
  92. package/dist/src/components/molecules/NetworkDialog/index.d.ts +2 -0
  93. package/dist/src/components/molecules/NetworkDialog/index.js +2 -0
  94. package/dist/src/components/molecules/NetworkError/NetworkError.d.ts +104 -0
  95. package/dist/src/components/molecules/NetworkError/NetworkError.js +26 -0
  96. package/dist/src/components/molecules/NetworkError/index.d.ts +2 -0
  97. package/dist/src/components/molecules/NetworkError/index.js +2 -0
  98. package/dist/src/components/molecules/PanelNavButton/PanelNavButton.d.ts +1 -0
  99. package/dist/src/components/molecules/PanelNavButton/PanelNavButton.js +16 -7
  100. package/dist/src/components/organisms/PanelNavigation/PanelNavigation.d.ts +1 -0
  101. package/dist/src/components/organisms/PanelNavigation/PanelNavigation.js +11 -7
  102. package/dist/src/development/MaestroEventDelegate.js +1 -0
  103. package/dist/src/helpers/site.d.ts +1 -0
  104. package/dist/src/helpers/site.js +6 -0
  105. package/dist/src/helpers/siteConfig.d.ts +1 -0
  106. package/dist/src/helpers/siteConfig.js +5 -0
  107. package/dist/src/interfaces/IMaestroEventDelegate.d.ts +8 -1
  108. package/dist/src/models/IPanel.d.ts +1 -1
  109. package/dist/src/models/IPanel.js +1 -1
  110. package/dist/src/modules/espn/bets/view/BetsView.js +1 -1
  111. package/dist/src/modules/espn/components/TabLoadError/TabLoadError.d.ts +96 -0
  112. package/dist/src/modules/espn/components/TabLoadError/TabLoadError.js +14 -0
  113. package/dist/src/modules/espn/components/TabLoadError/index.d.ts +2 -0
  114. package/dist/src/modules/espn/components/TabLoadError/index.js +2 -0
  115. package/dist/src/modules/espn/fantasy/components/TournamentOverflowQR/TournamentOverflowQR.d.ts +5 -5
  116. package/dist/src/modules/espn/fantasy/components/TournamentOverflowQR/TournamentOverflowQR.js +7 -73
  117. package/dist/src/modules/espn/fantasy/services/FantasyService.js +1 -1
  118. package/dist/src/modules/espn/fantasy/view/FantasyItemView.js +1 -1
  119. package/dist/src/modules/espn/fantasy/view/FantasyView.js +1 -1
  120. package/dist/src/modules/espn/fantasy/view-model/FantasyViewModel.js +7 -0
  121. package/dist/src/modules/espn/key-plays/view/KeyPlayErrorStateView.js +1 -1
  122. package/dist/src/modules/espn/shop/view/ShopView.js +1 -1
  123. package/dist/src/modules/espn/stats/view/StatsView.js +1 -1
  124. package/dist/src/modules/fox/components/TabLoadError/TabLoadError.d.ts +96 -0
  125. package/dist/src/modules/fox/components/TabLoadError/TabLoadError.js +19 -0
  126. package/dist/src/modules/fox/components/TabLoadError/index.d.ts +2 -0
  127. package/dist/src/modules/fox/components/TabLoadError/index.js +2 -0
  128. package/dist/src/modules/fox/multi-view/interfaces/IMultiViewViewModel.d.ts +3 -0
  129. package/dist/src/modules/fox/multi-view/interfaces/IMultiViewViewModel.js +1 -0
  130. package/dist/src/modules/fox/multi-view/services/MultiViewService.d.ts +99 -0
  131. package/dist/src/modules/fox/multi-view/services/MultiViewService.js +94 -0
  132. package/dist/src/modules/fox/multi-view/types.d.ts +48 -0
  133. package/dist/src/modules/fox/multi-view/types.js +86 -0
  134. package/dist/src/modules/fox/multi-view/view/CuratedMultiview/CuratedMultiviews.d.ts +8 -0
  135. package/dist/src/modules/fox/multi-view/view/CuratedMultiview/CuratedMultiviews.js +91 -0
  136. package/dist/src/modules/fox/multi-view/view/CuratedMultiview/index.d.ts +2 -0
  137. package/dist/src/modules/fox/multi-view/view/CuratedMultiview/index.js +2 -0
  138. package/dist/src/modules/fox/multi-view/view/FoxMultiView.d.ts +1 -0
  139. package/dist/src/modules/fox/multi-view/view/FoxMultiView.js +62 -2
  140. package/dist/src/modules/fox/multi-view/view/components/CustomMultiviewStreamsCard/CustomMultiviewStreamsCard.d.ts +122 -0
  141. package/dist/src/modules/fox/multi-view/view/components/CustomMultiviewStreamsCard/CustomMultiviewStreamsCard.js +51 -0
  142. package/dist/src/modules/fox/multi-view/view/components/CustomMultiviewStreamsCard/index.d.ts +2 -0
  143. package/dist/src/modules/fox/multi-view/view/components/CustomMultiviewStreamsCard/index.js +2 -0
  144. package/dist/src/modules/fox/multi-view/view/components/LayoutSelector/LayoutSelector.d.ts +13 -0
  145. package/dist/src/modules/fox/multi-view/view/components/LayoutSelector/LayoutSelector.js +40 -0
  146. package/dist/src/modules/fox/multi-view/view/components/LayoutSelector/index.d.ts +2 -0
  147. package/dist/src/modules/fox/multi-view/view/components/LayoutSelector/index.js +2 -0
  148. package/dist/src/modules/fox/multi-view/view/components/curated-multiview-card/CuratedMultiviewCard.d.ts +101 -0
  149. package/dist/src/modules/fox/multi-view/view/components/curated-multiview-card/CuratedMultiviewCard.js +21 -0
  150. package/dist/src/modules/fox/multi-view/view/components/curated-multiview-card/index.d.ts +2 -0
  151. package/dist/src/modules/fox/multi-view/view/components/curated-multiview-card/index.js +2 -0
  152. package/dist/src/modules/fox/multi-view/view-model/MultiViewViewModel.d.ts +63 -0
  153. package/dist/src/modules/fox/multi-view/view-model/MultiViewViewModel.js +328 -0
  154. package/dist/src/modules/fox/multi-view/view-model/index.d.ts +1 -0
  155. package/dist/src/modules/fox/multi-view/view-model/index.js +1 -0
  156. package/dist/src/services/NetworkManager/NetworkManager.js +1 -1
  157. package/dist/src/services/NetworkManager/errors.d.ts +3 -1
  158. package/dist/src/services/NetworkManager/errors.js +15 -1
  159. package/dist/src/services/StaticService/StaticService.js +1 -0
  160. package/dist/src/view-models/MaestroEventViewModel.d.ts +2 -0
  161. package/dist/src/view-models/MaestroEventViewModel.js +17 -1
  162. package/package.json +1 -1
@@ -0,0 +1,86 @@
1
+ /**
2
+ * @description Available layouts organized by stream count
3
+ */
4
+ export const DEFAULT_LAYOUTS_BY_LISTINGS_QUANTITY = {
5
+ 2: {
6
+ layoutId: 'LR',
7
+ description: 'Two equal-sized windows side by side',
8
+ positions: {
9
+ L: {
10
+ w: 0.4766,
11
+ h: 0.4766,
12
+ x: 0.259,
13
+ y: 0.5,
14
+ },
15
+ R: {
16
+ w: 0.4766,
17
+ h: 0.4766,
18
+ x: 0.7409,
19
+ y: 0.5,
20
+ },
21
+ },
22
+ name: '50/50',
23
+ windowCount: 2,
24
+ positionsOrder: ['L', 'R'],
25
+ },
26
+ 3: {
27
+ layoutId: 'TLTRB',
28
+ description: 'Three equal-sized windows in T layout',
29
+ positions: {
30
+ B: {
31
+ w: 0.458,
32
+ h: 0.458,
33
+ x: 0.5,
34
+ y: 0.266,
35
+ },
36
+ TL: {
37
+ w: 0.458,
38
+ h: 0.458,
39
+ x: 0.268,
40
+ y: 0.7335,
41
+ },
42
+ TR: {
43
+ w: 0.458,
44
+ h: 0.458,
45
+ x: 0.732,
46
+ y: 0.7335,
47
+ },
48
+ },
49
+ name: 'Triple T',
50
+ windowCount: 3,
51
+ positionsOrder: ['TL', 'TR', 'B'],
52
+ },
53
+ 4: {
54
+ layoutId: 'TLTRBLBR',
55
+ description: 'Four equal-sized windows in 2x2 grid',
56
+ positions: {
57
+ BL: {
58
+ w: 0.4766,
59
+ h: 0.4766,
60
+ x: 0.259,
61
+ y: 0.257,
62
+ },
63
+ BR: {
64
+ w: 0.4766,
65
+ h: 0.4766,
66
+ x: 0.741,
67
+ y: 0.257,
68
+ },
69
+ TL: {
70
+ w: 0.4766,
71
+ h: 0.4766,
72
+ x: 0.259,
73
+ y: 0.743,
74
+ },
75
+ TR: {
76
+ w: 0.4766,
77
+ h: 0.4766,
78
+ x: 0.741,
79
+ y: 0.743,
80
+ },
81
+ },
82
+ name: '2x2 Grid',
83
+ windowCount: 4,
84
+ positionsOrder: ['TL', 'TR', 'BL', 'BR'],
85
+ },
86
+ };
@@ -0,0 +1,8 @@
1
+ import './CuratedMultiviews.styles.css';
2
+ import { CuratedMultiviewItem } from '../../view-model/MultiViewViewModel';
3
+ type Props = {
4
+ onSelect: (item: CuratedMultiviewItem) => void;
5
+ items: CuratedMultiviewItem[];
6
+ };
7
+ declare const CuratedMultiviews: (props: Props) => JSX.Element;
8
+ export default CuratedMultiviews;
@@ -0,0 +1,91 @@
1
+ import React, { useState, useRef, useCallback, useLayoutEffect } from 'react';
2
+ import CuratedMultiviewCard from '../components/curated-multiview-card';
3
+ import './CuratedMultiviews.styles.css';
4
+ import SDK from '@/index';
5
+ const CuratedMultiviews = (props) => {
6
+ const [maxHeight, setMaxHeight] = useState('auto');
7
+ const [scrolled, setScrolled] = useState(false);
8
+ const refsArray = useRef([]);
9
+ const headerRef = useRef(null);
10
+ const wrapperRef = useRef(null);
11
+ const hasInitialized = useRef(false);
12
+ const getHeaderHeight = useCallback(() => {
13
+ if (!headerRef.current)
14
+ return 0;
15
+ return headerRef.current.offsetHeight;
16
+ }, []);
17
+ // Compute max-height after render when refs are populated, and when items change
18
+ useLayoutEffect(() => {
19
+ if (!refsArray.current || refsArray.current.length === 0) {
20
+ setMaxHeight('auto');
21
+ hasInitialized.current = false;
22
+ return;
23
+ }
24
+ const headerHeight = getHeaderHeight();
25
+ const totalHeight = refsArray.current.reduce((prev, curr) => {
26
+ if (!curr)
27
+ return prev;
28
+ return prev + curr.clientHeight;
29
+ }, headerHeight);
30
+ if (totalHeight > 0) {
31
+ setMaxHeight(`${totalHeight}px`);
32
+ hasInitialized.current = true;
33
+ }
34
+ else {
35
+ setMaxHeight('auto');
36
+ hasInitialized.current = false;
37
+ }
38
+ }, [props.items, getHeaderHeight]);
39
+ // Calculate max-height from focused index to end
40
+ const updateMaxHeight = useCallback((focusedIndex) => {
41
+ const headerHeight = getHeaderHeight();
42
+ const items = refsArray.current.slice(focusedIndex);
43
+ const totalHeight = items.reduce((prev, curr) => {
44
+ if (!curr)
45
+ return prev;
46
+ return prev + curr.clientHeight;
47
+ }, headerHeight);
48
+ setMaxHeight(`${totalHeight}px`);
49
+ }, []);
50
+ // Scroll to element after transition
51
+ const scrollToElement = useCallback((focusedIndex) => {
52
+ const element = refsArray.current[focusedIndex];
53
+ if (!element || !wrapperRef.current)
54
+ return;
55
+ if (focusedIndex === 0) {
56
+ wrapperRef.current.scrollTop = 0;
57
+ setScrolled(false);
58
+ return;
59
+ }
60
+ const wrapperRect = wrapperRef.current.getBoundingClientRect();
61
+ const elementRect = element.getBoundingClientRect();
62
+ const scrollTop = elementRect.top -
63
+ wrapperRect.top +
64
+ wrapperRef.current.scrollTop -
65
+ getHeaderHeight();
66
+ wrapperRef.current.scrollTop = scrollTop;
67
+ setScrolled(scrollTop > 0);
68
+ }, [getHeaderHeight]);
69
+ const handleBecameFocused = useCallback((focusedIndex) => () => {
70
+ updateMaxHeight(focusedIndex);
71
+ scrollToElement(focusedIndex);
72
+ }, [updateMaxHeight, scrollToElement]);
73
+ const onArrowPress = (d) => {
74
+ if (d === 'left') {
75
+ SDK.getMaestroEventViewModel().deliverFocus();
76
+ }
77
+ };
78
+ const onBackPress = () => {
79
+ SDK.getMaestroEventViewModel().navigation.setFocus('PANEL_NAVIGATION');
80
+ };
81
+ const onSelectCuratedMultiview = (item) => () => {
82
+ props.onSelect(item);
83
+ };
84
+ return (React.createElement("div", { className: "curated-multiviews", style: { maxHeight }, ref: wrapperRef, "data-scrolled": scrolled },
85
+ React.createElement("div", { className: "header", ref: headerRef }, "Curated Multiview"),
86
+ props.items.map((item, index) => (React.createElement("div", { key: item.id, ref: (ref) => {
87
+ refsArray.current[index] = ref;
88
+ } },
89
+ React.createElement(CuratedMultiviewCard, { onEnterPress: onSelectCuratedMultiview(item), onBackPress: onBackPress, onArrowPress: onArrowPress, onBecameFocused: handleBecameFocused(index), selected: item.isSelected, listings: item.listings }))))));
90
+ };
91
+ export default CuratedMultiviews;
@@ -0,0 +1,2 @@
1
+ import CuratedMultiviews from './CuratedMultiviews';
2
+ export default CuratedMultiviews;
@@ -0,0 +1,2 @@
1
+ import CuratedMultiviews from './CuratedMultiviews';
2
+ export default CuratedMultiviews;
@@ -1,2 +1,3 @@
1
+ import './FoxMultiView.styles.css';
1
2
  declare const FoxMultiView: () => JSX.Element;
2
3
  export default FoxMultiView;
@@ -1,5 +1,65 @@
1
- import React from 'react';
1
+ import ScrollableContainer from '@/components/core/ScrollableContainer';
2
+ import SDK from '@/index';
3
+ import React, { useRef, useState, useEffect } from 'react';
4
+ import './FoxMultiView.styles.css';
5
+ import TabLoadErrorView from '../../components/TabLoadError';
6
+ import CuratedMultiviews from './CuratedMultiview/CuratedMultiviews';
2
7
  const FoxMultiView = () => {
3
- return React.createElement("div", { style: { marginTop: '36px' } }, "Fox MultiView Coming Soon!");
8
+ const vm = useRef(null);
9
+ const [items, setItems] = useState([]);
10
+ const [error, setError] = useState(null);
11
+ const [scrollableContainer, setScrollableContainer,] = useState(null);
12
+ const containerRef = useRef(null);
13
+ useEffect(() => {
14
+ if (containerRef.current) {
15
+ setScrollableContainer(containerRef.current);
16
+ }
17
+ const mvvm = SDK.getMaestroEventViewModel()
18
+ .multiViewViewModel;
19
+ if (mvvm) {
20
+ vm.current = mvvm;
21
+ setItems(vm.current.items.value);
22
+ const removeItemsListener = vm.current.items.subscribe((newItems) => {
23
+ setItems(newItems);
24
+ });
25
+ setError(vm.current.error.value);
26
+ const removeErrorListener = vm.current.error.subscribe((error) => {
27
+ setError(error);
28
+ });
29
+ vm.current.init();
30
+ return () => {
31
+ removeItemsListener();
32
+ removeErrorListener();
33
+ };
34
+ }
35
+ }, []);
36
+ const clearTabLoadFailure = () => {
37
+ vm.current?.clearTabLoadFailure();
38
+ };
39
+ const onArrowPress = (d) => {
40
+ if (d === 'left') {
41
+ SDK.getMaestroEventViewModel().deliverFocus();
42
+ }
43
+ };
44
+ const onSelectCuratedMultiview = (item) => {
45
+ vm.current?.onSelectCuratedMultiview(item);
46
+ };
47
+ const renderItems = () => {
48
+ if (error) {
49
+ return (React.createElement(TabLoadErrorView, { onEnterPress: clearTabLoadFailure, onArrowPress: onArrowPress }));
50
+ }
51
+ return items.map((item) => {
52
+ switch (item.type) {
53
+ case 'curated-multiviews':
54
+ return (React.createElement(CuratedMultiviews, { key: item.type, items: item.items, onSelect: onSelectCuratedMultiview }));
55
+ default:
56
+ return null;
57
+ }
58
+ });
59
+ };
60
+ return (React.createElement("div", { className: "fox-multiview-view" },
61
+ React.createElement(ScrollableContainer, { scrollableContainerRef: scrollableContainer },
62
+ renderItems(),
63
+ React.createElement("div", { className: "fox-multi-view-bottom-padding" }))));
4
64
  };
5
65
  export default FoxMultiView;
@@ -0,0 +1,122 @@
1
+ /// <reference types="prop-types" />
2
+ import React from 'react';
3
+ import './CustomMultiviewStreamsCard.style.css';
4
+ import { WithFocusableProps } from '@/external/spatial-navigation';
5
+ import { CuratedMultiviewListing } from '../../../types';
6
+ export type Camera = {
7
+ id: string;
8
+ name: string;
9
+ isActive: boolean;
10
+ };
11
+ export type CustomMultiviewStreamsCardProps = {
12
+ /** Primary listing displayed on this card */
13
+ listing: CuratedMultiviewListing;
14
+ /** Total number of available camera listings */
15
+ totalCameras: number;
16
+ /** Number of currently active cameras */
17
+ activeCameraCount?: number;
18
+ /** Current match time display (e.g. "42'") */
19
+ currentTime?: string;
20
+ /** Match location (e.g. "Miami, FL") */
21
+ location?: string;
22
+ /** List of available cameras for the expanded view */
23
+ cameras?: Camera[];
24
+ /** Callback when a camera radio is toggled */
25
+ onToggleCamera?: (camera: Camera) => void;
26
+ /** Whether the card is in expanded state */
27
+ expanded?: boolean;
28
+ /** Index of the currently focused camera in expanded view */
29
+ focusedCameraIndex?: number;
30
+ };
31
+ declare const CustomMultiviewStreamsCard: {
32
+ new (props: (CustomMultiviewStreamsCardProps & WithFocusableProps) | Readonly<CustomMultiviewStreamsCardProps & WithFocusableProps>): {
33
+ state: import("../../../../../../external/spatial-navigation/withFocusable").WithFocusableState;
34
+ navigation: import("../../../../../../external/spatial-navigation/spatialNavigation").default;
35
+ getChildContext(): {
36
+ parentFocusKey: string;
37
+ };
38
+ setFocus: (focusKey: string) => void;
39
+ navigateByDirection: (direction: import("../../../../../../external/spatial-navigation/utils").Direction, details?: import("../../../../../../external/spatial-navigation/utils").Details) => void;
40
+ stealFocus: () => void;
41
+ onUpdateFocus: (focused: boolean) => void;
42
+ onUpdateHasFocusedChild: (hasFocusedChild: boolean) => void;
43
+ onEnterPressHandler: (details: import("../../../../../../external/spatial-navigation/utils").Details) => void;
44
+ onClickPressHandler: (details: import("../../../../../../external/spatial-navigation/utils").Details) => void;
45
+ onEnterReleaseHandler: () => void;
46
+ onBackPressHandler: (details: import("../../../../../../external/spatial-navigation/utils").Details) => void;
47
+ onArrowPressHandler: (direction: import("../../../../../../external/spatial-navigation/utils").Direction, details: import("../../../../../../external/spatial-navigation/utils").Details) => boolean | void;
48
+ onBecameFocusedHandler: (layout: import("../../../../../../external/spatial-navigation/utils").Layout, details: import("../../../../../../external/spatial-navigation/utils").Details) => void;
49
+ onBecameBlurredHandler: (layout: import("../../../../../../external/spatial-navigation/utils").Layout, details: import("../../../../../../external/spatial-navigation/utils").Details) => void;
50
+ componentDidMount(): void;
51
+ componentDidUpdate(): void;
52
+ componentWillUnmount(): void;
53
+ render(): React.ReactElement<CustomMultiviewStreamsCardProps & WithFocusableProps, string | React.JSXElementConstructor<any>>;
54
+ context: any;
55
+ setState<K extends keyof import("../../../../../../external/spatial-navigation/withFocusable").WithFocusableState>(state: import("../../../../../../external/spatial-navigation/withFocusable").WithFocusableState | ((prevState: Readonly<import("../../../../../../external/spatial-navigation/withFocusable").WithFocusableState>, props: Readonly<CustomMultiviewStreamsCardProps & WithFocusableProps>) => import("../../../../../../external/spatial-navigation/withFocusable").WithFocusableState | Pick<import("../../../../../../external/spatial-navigation/withFocusable").WithFocusableState, K> | null) | Pick<import("../../../../../../external/spatial-navigation/withFocusable").WithFocusableState, K> | null, callback?: (() => void) | undefined): void;
56
+ forceUpdate(callback?: (() => void) | undefined): void;
57
+ readonly props: Readonly<CustomMultiviewStreamsCardProps & WithFocusableProps> & Readonly<{
58
+ children?: React.ReactNode;
59
+ }>;
60
+ refs: {
61
+ [key: string]: React.ReactInstance;
62
+ };
63
+ shouldComponentUpdate?(nextProps: Readonly<CustomMultiviewStreamsCardProps & WithFocusableProps>, nextState: Readonly<import("../../../../../../external/spatial-navigation/withFocusable").WithFocusableState>, nextContext: any): boolean;
64
+ componentDidCatch?(error: Error, errorInfo: React.ErrorInfo): void;
65
+ getSnapshotBeforeUpdate?(prevProps: Readonly<CustomMultiviewStreamsCardProps & WithFocusableProps>, prevState: Readonly<import("../../../../../../external/spatial-navigation/withFocusable").WithFocusableState>): any;
66
+ componentWillMount?(): void;
67
+ UNSAFE_componentWillMount?(): void;
68
+ componentWillReceiveProps?(nextProps: Readonly<CustomMultiviewStreamsCardProps & WithFocusableProps>, nextContext: any): void;
69
+ UNSAFE_componentWillReceiveProps?(nextProps: Readonly<CustomMultiviewStreamsCardProps & WithFocusableProps>, nextContext: any): void;
70
+ componentWillUpdate?(nextProps: Readonly<CustomMultiviewStreamsCardProps & WithFocusableProps>, nextState: Readonly<import("../../../../../../external/spatial-navigation/withFocusable").WithFocusableState>, nextContext: any): void;
71
+ UNSAFE_componentWillUpdate?(nextProps: Readonly<CustomMultiviewStreamsCardProps & WithFocusableProps>, nextState: Readonly<import("../../../../../../external/spatial-navigation/withFocusable").WithFocusableState>, nextContext: any): void;
72
+ };
73
+ new (props: CustomMultiviewStreamsCardProps & WithFocusableProps, context: any): {
74
+ state: import("../../../../../../external/spatial-navigation/withFocusable").WithFocusableState;
75
+ navigation: import("../../../../../../external/spatial-navigation/spatialNavigation").default;
76
+ getChildContext(): {
77
+ parentFocusKey: string;
78
+ };
79
+ setFocus: (focusKey: string) => void;
80
+ navigateByDirection: (direction: import("../../../../../../external/spatial-navigation/utils").Direction, details?: import("../../../../../../external/spatial-navigation/utils").Details) => void;
81
+ stealFocus: () => void;
82
+ onUpdateFocus: (focused: boolean) => void;
83
+ onUpdateHasFocusedChild: (hasFocusedChild: boolean) => void;
84
+ onEnterPressHandler: (details: import("../../../../../../external/spatial-navigation/utils").Details) => void;
85
+ onClickPressHandler: (details: import("../../../../../../external/spatial-navigation/utils").Details) => void;
86
+ onEnterReleaseHandler: () => void;
87
+ onBackPressHandler: (details: import("../../../../../../external/spatial-navigation/utils").Details) => void;
88
+ onArrowPressHandler: (direction: import("../../../../../../external/spatial-navigation/utils").Direction, details: import("../../../../../../external/spatial-navigation/utils").Details) => boolean | void;
89
+ onBecameFocusedHandler: (layout: import("../../../../../../external/spatial-navigation/utils").Layout, details: import("../../../../../../external/spatial-navigation/utils").Details) => void;
90
+ onBecameBlurredHandler: (layout: import("../../../../../../external/spatial-navigation/utils").Layout, details: import("../../../../../../external/spatial-navigation/utils").Details) => void;
91
+ componentDidMount(): void;
92
+ componentDidUpdate(): void;
93
+ componentWillUnmount(): void;
94
+ render(): React.ReactElement<CustomMultiviewStreamsCardProps & WithFocusableProps, string | React.JSXElementConstructor<any>>;
95
+ context: any;
96
+ setState<K extends keyof import("../../../../../../external/spatial-navigation/withFocusable").WithFocusableState>(state: import("../../../../../../external/spatial-navigation/withFocusable").WithFocusableState | ((prevState: Readonly<import("../../../../../../external/spatial-navigation/withFocusable").WithFocusableState>, props: Readonly<CustomMultiviewStreamsCardProps & WithFocusableProps>) => import("../../../../../../external/spatial-navigation/withFocusable").WithFocusableState | Pick<import("../../../../../../external/spatial-navigation/withFocusable").WithFocusableState, K> | null) | Pick<import("../../../../../../external/spatial-navigation/withFocusable").WithFocusableState, K> | null, callback?: (() => void) | undefined): void;
97
+ forceUpdate(callback?: (() => void) | undefined): void;
98
+ readonly props: Readonly<CustomMultiviewStreamsCardProps & WithFocusableProps> & Readonly<{
99
+ children?: React.ReactNode;
100
+ }>;
101
+ refs: {
102
+ [key: string]: React.ReactInstance;
103
+ };
104
+ shouldComponentUpdate?(nextProps: Readonly<CustomMultiviewStreamsCardProps & WithFocusableProps>, nextState: Readonly<import("../../../../../../external/spatial-navigation/withFocusable").WithFocusableState>, nextContext: any): boolean;
105
+ componentDidCatch?(error: Error, errorInfo: React.ErrorInfo): void;
106
+ getSnapshotBeforeUpdate?(prevProps: Readonly<CustomMultiviewStreamsCardProps & WithFocusableProps>, prevState: Readonly<import("../../../../../../external/spatial-navigation/withFocusable").WithFocusableState>): any;
107
+ componentWillMount?(): void;
108
+ UNSAFE_componentWillMount?(): void;
109
+ componentWillReceiveProps?(nextProps: Readonly<CustomMultiviewStreamsCardProps & WithFocusableProps>, nextContext: any): void;
110
+ UNSAFE_componentWillReceiveProps?(nextProps: Readonly<CustomMultiviewStreamsCardProps & WithFocusableProps>, nextContext: any): void;
111
+ componentWillUpdate?(nextProps: Readonly<CustomMultiviewStreamsCardProps & WithFocusableProps>, nextState: Readonly<import("../../../../../../external/spatial-navigation/withFocusable").WithFocusableState>, nextContext: any): void;
112
+ UNSAFE_componentWillUpdate?(nextProps: Readonly<CustomMultiviewStreamsCardProps & WithFocusableProps>, nextState: Readonly<import("../../../../../../external/spatial-navigation/withFocusable").WithFocusableState>, nextContext: any): void;
113
+ };
114
+ contextTypes: {
115
+ parentFocusKey: import("prop-types").Requireable<string>;
116
+ };
117
+ childContextTypes: {
118
+ parentFocusKey: import("prop-types").Requireable<string>;
119
+ };
120
+ contextType?: React.Context<any> | undefined;
121
+ };
122
+ export default CustomMultiviewStreamsCard;
@@ -0,0 +1,51 @@
1
+ import React, { useCallback } from 'react';
2
+ import './CustomMultiviewStreamsCard.style.css';
3
+ import { withFocusable, } from '@/external/spatial-navigation';
4
+ import { FocusableItem } from '@/components/core/ScrollableContainer';
5
+ import Image from '@/components/atoms/Image';
6
+ import Icon from '@/components/atoms/SvgIcon';
7
+ const CustomMultiviewStreamsCardComponent = (props) => {
8
+ const { listing, totalCameras, activeCameraCount = 0, currentTime, location, focusable, focused, cameras = [], onToggleCamera, expanded = false, focusedCameraIndex = -1, } = props;
9
+ const handleCameraToggle = useCallback((camera) => {
10
+ if (onToggleCamera) {
11
+ onToggleCamera(camera);
12
+ }
13
+ }, [onToggleCamera]);
14
+ const { backgroundImage, description } = listing;
15
+ return (React.createElement(FocusableItem, null,
16
+ React.createElement("div", { className: "custom-multiview-streams-card focus-ring", "data-focusable": focusable, "data-focused": focused, "data-expanded": expanded },
17
+ React.createElement("div", { className: "custom-multiview-streams-card-container" },
18
+ React.createElement("div", { className: "custom-multiview-streams-card-row custom-multiview-streams-card-row-first" },
19
+ React.createElement("div", { className: "custom-multiview-streams-row-content" },
20
+ React.createElement("div", { className: "custom-multiview-streams-status-badge" },
21
+ React.createElement("span", { className: "custom-multiview-streams-status-dot" }),
22
+ React.createElement("span", { className: "custom-multiview-streams-status-text" }, "LIVE")),
23
+ currentTime && (React.createElement("div", { className: "custom-multiview-streams-time" }, currentTime)),
24
+ location && (React.createElement("div", { className: "custom-multiview-streams-location" }, location.toUpperCase())))),
25
+ React.createElement("div", { className: "custom-multiview-streams-card-row custom-multiview-streams-card-row-second" },
26
+ React.createElement("div", { className: "custom-multiview-streams-row-content" },
27
+ React.createElement("div", { className: "custom-multiview-streams-thumbnail-container" }, backgroundImage ? (React.createElement(Image, { src: backgroundImage, alt: description, className: "custom-multiview-streams-thumbnail" })) : (React.createElement("div", { className: "custom-multiview-streams-thumbnail custom-multiview-streams-thumbnail-placeholder" }))),
28
+ React.createElement("div", { className: "custom-multiview-streams-info-container" },
29
+ React.createElement("div", { className: "custom-multiview-streams-teams" }, description),
30
+ React.createElement("div", { className: "custom-multiview-streams-cameras" },
31
+ activeCameraCount,
32
+ "/",
33
+ totalCameras,
34
+ ' ',
35
+ totalCameras === 1 ? 'Camera' : 'Cameras',
36
+ " Active")),
37
+ React.createElement("div", { className: "custom-multiview-streams-chevron-container" },
38
+ React.createElement("div", { className: "custom-multiview-streams-chevron" },
39
+ React.createElement("svg", { width: "16", height: "16", viewBox: "0 0 16 16", fill: "none", xmlns: "http://www.w3.org/2000/svg" },
40
+ React.createElement("path", { d: "M4 6L8 10L12 6", stroke: "currentColor", strokeWidth: "2", strokeLinecap: "round", strokeLinejoin: "round" })))))),
41
+ React.createElement("div", { className: "custom-multiview-streams-camera-list" }, cameras.map((camera, index) => (React.createElement("div", { key: camera.id, className: "custom-multiview-streams-camera-row", "data-focused": expanded && index === focusedCameraIndex, onClick: (e) => {
42
+ e.stopPropagation();
43
+ handleCameraToggle(camera);
44
+ } },
45
+ React.createElement("div", { className: "custom-multiview-streams-camera-row-inner" },
46
+ React.createElement("div", { className: "custom-multiview-streams-camera-name T01 FONT_BOLD" }, camera.name),
47
+ React.createElement("div", { className: "custom-multiview-streams-camera-radio-cell" },
48
+ React.createElement("div", { className: "custom-multiview-streams-camera-radio", "data-active": camera.isActive }, camera.isActive ? (React.createElement(Icon, { iconName: "checkmark", width: 22.5, height: 22 })) : (React.createElement(Icon, { iconName: "add", width: 21, height: 21 })))))))))))));
49
+ };
50
+ const CustomMultiviewStreamsCard = withFocusable()(CustomMultiviewStreamsCardComponent);
51
+ export default CustomMultiviewStreamsCard;
@@ -0,0 +1,2 @@
1
+ import CustomMultiviewStreamsCard from './CustomMultiviewStreamsCard';
2
+ export default CustomMultiviewStreamsCard;
@@ -0,0 +1,2 @@
1
+ import CustomMultiviewStreamsCard from './CustomMultiviewStreamsCard';
2
+ export default CustomMultiviewStreamsCard;
@@ -0,0 +1,13 @@
1
+ import './LayoutSelector.style.css';
2
+ import { WithFocusableProps } from '@/external/spatial-navigation';
3
+ import { Direction } from '@/external/spatial-navigation/utils';
4
+ import { MultiViewLayout } from '../../../types';
5
+ export type LayoutSelectorProps = {
6
+ layouts: MultiViewLayout[];
7
+ selectedLayoutId?: string;
8
+ onLayoutSelect?: (layout: MultiViewLayout) => void;
9
+ onLayoutArrowPress?: (direction: Direction) => void;
10
+ className?: string;
11
+ };
12
+ declare const LayoutSelector: (props: LayoutSelectorProps & WithFocusableProps) => JSX.Element;
13
+ export default LayoutSelector;
@@ -0,0 +1,40 @@
1
+ import React, { useCallback } from 'react';
2
+ import './LayoutSelector.style.css';
3
+ import { withFocusable, } from '@/external/spatial-navigation';
4
+ import { FocusableItem, useScrollableContainer, } from '@/components/core/ScrollableContainer';
5
+ import SDK from '@/index';
6
+ const LayoutOptionRowComponent = (props) => {
7
+ const { layout, selected, focusable, focused } = props;
8
+ return (React.createElement(FocusableItem, null,
9
+ React.createElement("div", { className: "layout-selector-option-focus focus-ring", "data-focusable": focusable, "data-focused": focused },
10
+ React.createElement("div", { className: "layout-selector-row" },
11
+ React.createElement("div", { className: "layout-selector-cell layout-selector-cell-preview" },
12
+ React.createElement("div", { className: "layout-selector-preview" }, layout.positionsOrder.map((key) => {
13
+ const pos = layout.positions[key];
14
+ return (React.createElement("div", { key: `${layout.layoutId}-pos-${key}`, className: "layout-selector-slot", style: {
15
+ left: `${pos.x * 100}%`,
16
+ top: `${pos.y * 100}%`,
17
+ width: `${pos.w * 100}%`,
18
+ height: `${pos.h * 100}%`,
19
+ } }));
20
+ }))),
21
+ React.createElement("div", { className: "layout-selector-cell layout-selector-cell-label" },
22
+ React.createElement("div", { className: "layout-selector-label T30 FONT_BOLD" }, layout.name)),
23
+ React.createElement("div", { className: "layout-selector-cell layout-selector-cell-radio" },
24
+ React.createElement("div", { className: `layout-selector-radio ${selected ? 'selected' : ''}`, "aria-hidden": true }, selected ? (React.createElement("span", { className: "layout-selector-radio-check" }, "\u2713")) : null))))));
25
+ };
26
+ const LayoutOptionRow = withFocusable()(LayoutOptionRowComponent);
27
+ const LayoutSelector = (props) => {
28
+ const { scrollToFocusedElement } = useScrollableContainer();
29
+ const { layouts, selectedLayoutId, onLayoutSelect } = props;
30
+ const onBecameFocused = useCallback((layout) => {
31
+ scrollToFocusedElement(layout);
32
+ }, [scrollToFocusedElement]);
33
+ const onArrowPress = useCallback((d, _props) => {
34
+ if (d === 'left') {
35
+ SDK.getMaestroEventViewModel().deliverFocus();
36
+ }
37
+ }, []);
38
+ return (React.createElement(React.Fragment, null, layouts.length === 0 ? (React.createElement("div", { className: "layout-selector-empty T10" }, "No layouts available.")) : (React.createElement("div", { className: "layout-selector-options" }, layouts.map((layout) => (React.createElement(LayoutOptionRow, { key: layout.layoutId, focusKey: `fox-multiview-layout-${layout.layoutId}`, layout: layout, selected: layout.layoutId === selectedLayoutId, onEnterPress: () => onLayoutSelect?.(layout), onArrowPress: onArrowPress, onBecameFocused: onBecameFocused })))))));
39
+ };
40
+ export default LayoutSelector;
@@ -0,0 +1,2 @@
1
+ import LayoutSelector from './LayoutSelector';
2
+ export default LayoutSelector;
@@ -0,0 +1,2 @@
1
+ import LayoutSelector from './LayoutSelector';
2
+ export default LayoutSelector;
@@ -0,0 +1,101 @@
1
+ /// <reference types="prop-types" />
2
+ import React from 'react';
3
+ import './CuratedMultiviewCard.style.css';
4
+ import { WithFocusableProps } from '@/external/spatial-navigation';
5
+ import { CuratedMultiviewListing } from '../../../types';
6
+ export type CuratedMultiviewCardProps = {
7
+ listings: CuratedMultiviewListing[];
8
+ selected: boolean;
9
+ };
10
+ declare const _default: {
11
+ new (props: (CuratedMultiviewCardProps & WithFocusableProps) | Readonly<CuratedMultiviewCardProps & WithFocusableProps>): {
12
+ state: import("../../../../../../external/spatial-navigation/withFocusable").WithFocusableState;
13
+ navigation: import("../../../../../../external/spatial-navigation/spatialNavigation").default;
14
+ getChildContext(): {
15
+ parentFocusKey: string;
16
+ };
17
+ setFocus: (focusKey: string) => void;
18
+ navigateByDirection: (direction: import("../../../../../../external/spatial-navigation/utils").Direction, details?: import("../../../../../../external/spatial-navigation/utils").Details) => void;
19
+ stealFocus: () => void;
20
+ onUpdateFocus: (focused: boolean) => void;
21
+ onUpdateHasFocusedChild: (hasFocusedChild: boolean) => void;
22
+ onEnterPressHandler: (details: import("../../../../../../external/spatial-navigation/utils").Details) => void;
23
+ onClickPressHandler: (details: import("../../../../../../external/spatial-navigation/utils").Details) => void;
24
+ onEnterReleaseHandler: () => void;
25
+ onBackPressHandler: (details: import("../../../../../../external/spatial-navigation/utils").Details) => void;
26
+ onArrowPressHandler: (direction: import("../../../../../../external/spatial-navigation/utils").Direction, details: import("../../../../../../external/spatial-navigation/utils").Details) => boolean | void;
27
+ onBecameFocusedHandler: (layout: import("../../../../../../external/spatial-navigation/utils").Layout, details: import("../../../../../../external/spatial-navigation/utils").Details) => void;
28
+ onBecameBlurredHandler: (layout: import("../../../../../../external/spatial-navigation/utils").Layout, details: import("../../../../../../external/spatial-navigation/utils").Details) => void;
29
+ componentDidMount(): void;
30
+ componentDidUpdate(): void;
31
+ componentWillUnmount(): void;
32
+ render(): React.ReactElement<CuratedMultiviewCardProps & WithFocusableProps, string | React.JSXElementConstructor<any>>;
33
+ context: any;
34
+ setState<K extends keyof import("../../../../../../external/spatial-navigation/withFocusable").WithFocusableState>(state: import("../../../../../../external/spatial-navigation/withFocusable").WithFocusableState | ((prevState: Readonly<import("../../../../../../external/spatial-navigation/withFocusable").WithFocusableState>, props: Readonly<CuratedMultiviewCardProps & WithFocusableProps>) => import("../../../../../../external/spatial-navigation/withFocusable").WithFocusableState | Pick<import("../../../../../../external/spatial-navigation/withFocusable").WithFocusableState, K> | null) | Pick<import("../../../../../../external/spatial-navigation/withFocusable").WithFocusableState, K> | null, callback?: (() => void) | undefined): void;
35
+ forceUpdate(callback?: (() => void) | undefined): void;
36
+ readonly props: Readonly<CuratedMultiviewCardProps & WithFocusableProps> & Readonly<{
37
+ children?: React.ReactNode;
38
+ }>;
39
+ refs: {
40
+ [key: string]: React.ReactInstance;
41
+ };
42
+ shouldComponentUpdate?(nextProps: Readonly<CuratedMultiviewCardProps & WithFocusableProps>, nextState: Readonly<import("../../../../../../external/spatial-navigation/withFocusable").WithFocusableState>, nextContext: any): boolean;
43
+ componentDidCatch?(error: Error, errorInfo: React.ErrorInfo): void;
44
+ getSnapshotBeforeUpdate?(prevProps: Readonly<CuratedMultiviewCardProps & WithFocusableProps>, prevState: Readonly<import("../../../../../../external/spatial-navigation/withFocusable").WithFocusableState>): any;
45
+ componentWillMount?(): void;
46
+ UNSAFE_componentWillMount?(): void;
47
+ componentWillReceiveProps?(nextProps: Readonly<CuratedMultiviewCardProps & WithFocusableProps>, nextContext: any): void;
48
+ UNSAFE_componentWillReceiveProps?(nextProps: Readonly<CuratedMultiviewCardProps & WithFocusableProps>, nextContext: any): void;
49
+ componentWillUpdate?(nextProps: Readonly<CuratedMultiviewCardProps & WithFocusableProps>, nextState: Readonly<import("../../../../../../external/spatial-navigation/withFocusable").WithFocusableState>, nextContext: any): void;
50
+ UNSAFE_componentWillUpdate?(nextProps: Readonly<CuratedMultiviewCardProps & WithFocusableProps>, nextState: Readonly<import("../../../../../../external/spatial-navigation/withFocusable").WithFocusableState>, nextContext: any): void;
51
+ };
52
+ new (props: CuratedMultiviewCardProps & WithFocusableProps, context: any): {
53
+ state: import("../../../../../../external/spatial-navigation/withFocusable").WithFocusableState;
54
+ navigation: import("../../../../../../external/spatial-navigation/spatialNavigation").default;
55
+ getChildContext(): {
56
+ parentFocusKey: string;
57
+ };
58
+ setFocus: (focusKey: string) => void;
59
+ navigateByDirection: (direction: import("../../../../../../external/spatial-navigation/utils").Direction, details?: import("../../../../../../external/spatial-navigation/utils").Details) => void;
60
+ stealFocus: () => void;
61
+ onUpdateFocus: (focused: boolean) => void;
62
+ onUpdateHasFocusedChild: (hasFocusedChild: boolean) => void;
63
+ onEnterPressHandler: (details: import("../../../../../../external/spatial-navigation/utils").Details) => void;
64
+ onClickPressHandler: (details: import("../../../../../../external/spatial-navigation/utils").Details) => void;
65
+ onEnterReleaseHandler: () => void;
66
+ onBackPressHandler: (details: import("../../../../../../external/spatial-navigation/utils").Details) => void;
67
+ onArrowPressHandler: (direction: import("../../../../../../external/spatial-navigation/utils").Direction, details: import("../../../../../../external/spatial-navigation/utils").Details) => boolean | void;
68
+ onBecameFocusedHandler: (layout: import("../../../../../../external/spatial-navigation/utils").Layout, details: import("../../../../../../external/spatial-navigation/utils").Details) => void;
69
+ onBecameBlurredHandler: (layout: import("../../../../../../external/spatial-navigation/utils").Layout, details: import("../../../../../../external/spatial-navigation/utils").Details) => void;
70
+ componentDidMount(): void;
71
+ componentDidUpdate(): void;
72
+ componentWillUnmount(): void;
73
+ render(): React.ReactElement<CuratedMultiviewCardProps & WithFocusableProps, string | React.JSXElementConstructor<any>>;
74
+ context: any;
75
+ setState<K extends keyof import("../../../../../../external/spatial-navigation/withFocusable").WithFocusableState>(state: import("../../../../../../external/spatial-navigation/withFocusable").WithFocusableState | ((prevState: Readonly<import("../../../../../../external/spatial-navigation/withFocusable").WithFocusableState>, props: Readonly<CuratedMultiviewCardProps & WithFocusableProps>) => import("../../../../../../external/spatial-navigation/withFocusable").WithFocusableState | Pick<import("../../../../../../external/spatial-navigation/withFocusable").WithFocusableState, K> | null) | Pick<import("../../../../../../external/spatial-navigation/withFocusable").WithFocusableState, K> | null, callback?: (() => void) | undefined): void;
76
+ forceUpdate(callback?: (() => void) | undefined): void;
77
+ readonly props: Readonly<CuratedMultiviewCardProps & WithFocusableProps> & Readonly<{
78
+ children?: React.ReactNode;
79
+ }>;
80
+ refs: {
81
+ [key: string]: React.ReactInstance;
82
+ };
83
+ shouldComponentUpdate?(nextProps: Readonly<CuratedMultiviewCardProps & WithFocusableProps>, nextState: Readonly<import("../../../../../../external/spatial-navigation/withFocusable").WithFocusableState>, nextContext: any): boolean;
84
+ componentDidCatch?(error: Error, errorInfo: React.ErrorInfo): void;
85
+ getSnapshotBeforeUpdate?(prevProps: Readonly<CuratedMultiviewCardProps & WithFocusableProps>, prevState: Readonly<import("../../../../../../external/spatial-navigation/withFocusable").WithFocusableState>): any;
86
+ componentWillMount?(): void;
87
+ UNSAFE_componentWillMount?(): void;
88
+ componentWillReceiveProps?(nextProps: Readonly<CuratedMultiviewCardProps & WithFocusableProps>, nextContext: any): void;
89
+ UNSAFE_componentWillReceiveProps?(nextProps: Readonly<CuratedMultiviewCardProps & WithFocusableProps>, nextContext: any): void;
90
+ componentWillUpdate?(nextProps: Readonly<CuratedMultiviewCardProps & WithFocusableProps>, nextState: Readonly<import("../../../../../../external/spatial-navigation/withFocusable").WithFocusableState>, nextContext: any): void;
91
+ UNSAFE_componentWillUpdate?(nextProps: Readonly<CuratedMultiviewCardProps & WithFocusableProps>, nextState: Readonly<import("../../../../../../external/spatial-navigation/withFocusable").WithFocusableState>, nextContext: any): void;
92
+ };
93
+ contextTypes: {
94
+ parentFocusKey: import("prop-types").Requireable<string>;
95
+ };
96
+ childContextTypes: {
97
+ parentFocusKey: import("prop-types").Requireable<string>;
98
+ };
99
+ contextType?: React.Context<any> | undefined;
100
+ };
101
+ export default _default;