@davi-ai/retorik-framework 3.2.5 → 4.0.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 (88) hide show
  1. package/dist/{AttachmentDetail.0a576bf3.js → AttachmentDetail.37a709af.js} +160 -174
  2. package/dist/AttachmentDetail.37a709af.js.map +1 -0
  3. package/dist/{AttachmentDetail.c4286a45.js → AttachmentDetail.53ba969a.js} +159 -173
  4. package/dist/AttachmentDetail.53ba969a.js.map +1 -0
  5. package/dist/{CustomView.913a9f32.js → CustomView.9930c671.js} +16 -20
  6. package/dist/CustomView.9930c671.js.map +1 -0
  7. package/dist/{CustomView.edf84de1.js → CustomView.bf84bdf3.js} +16 -20
  8. package/dist/CustomView.bf84bdf3.js.map +1 -0
  9. package/dist/{Emergency.0cf005ce.js → Emergency.1e63c85f.js} +38 -30
  10. package/dist/Emergency.1e63c85f.js.map +1 -0
  11. package/dist/{Emergency.897ee3c7.js → Emergency.89b4d9ed.js} +37 -29
  12. package/dist/Emergency.89b4d9ed.js.map +1 -0
  13. package/dist/{FullScreenImage.9a9b978e.js → FullScreenImage.17df27bf.js} +11 -18
  14. package/dist/FullScreenImage.17df27bf.js.map +1 -0
  15. package/dist/{FullScreenImage.1fe27198.js → FullScreenImage.99e19e10.js} +11 -18
  16. package/dist/FullScreenImage.99e19e10.js.map +1 -0
  17. package/dist/{HistoryList.4c303dc6.js → HistoryList.3b4b1ffb.js} +35 -36
  18. package/dist/HistoryList.3b4b1ffb.js.map +1 -0
  19. package/dist/{HistoryList.03a56119.js → HistoryList.e5c01f21.js} +35 -36
  20. package/dist/HistoryList.e5c01f21.js.map +1 -0
  21. package/dist/LanguageChoice.1d866cfa.js +119 -0
  22. package/dist/LanguageChoice.1d866cfa.js.map +1 -0
  23. package/dist/LanguageChoice.cce361a3.js +128 -0
  24. package/dist/LanguageChoice.cce361a3.js.map +1 -0
  25. package/dist/{LittleWeatherContainer.07937cf3.js → LittleWeatherContainer.7e41105e.js} +3 -3
  26. package/dist/LittleWeatherContainer.7e41105e.js.map +1 -0
  27. package/dist/{LittleWeatherContainer.d27a6b8a.js → LittleWeatherContainer.ee087e22.js} +3 -3
  28. package/dist/LittleWeatherContainer.ee087e22.js.map +1 -0
  29. package/dist/MapContainer.14c28128.js +117 -0
  30. package/dist/MapContainer.14c28128.js.map +1 -0
  31. package/dist/MapContainer.f22ad81f.js +104 -0
  32. package/dist/MapContainer.f22ad81f.js.map +1 -0
  33. package/dist/{NewsContainer.a91d9131.js → NewsContainer.c0a24775.js} +84 -88
  34. package/dist/NewsContainer.c0a24775.js.map +1 -0
  35. package/dist/{NewsContainer.f0d2ee9c.js → NewsContainer.c3331d80.js} +79 -83
  36. package/dist/NewsContainer.c3331d80.js.map +1 -0
  37. package/dist/PrintingPreview.5351c733.js +147 -0
  38. package/dist/PrintingPreview.5351c733.js.map +1 -0
  39. package/dist/PrintingPreview.6d70355b.js +138 -0
  40. package/dist/PrintingPreview.6d70355b.js.map +1 -0
  41. package/dist/{SpiritEngineWrapper.1d8db53d.js → SpiritEngineWrapper.21ea10d4.js} +8 -7
  42. package/dist/SpiritEngineWrapper.21ea10d4.js.map +1 -0
  43. package/dist/{SpiritEngineWrapper.27e9c120.js → SpiritEngineWrapper.39627300.js} +8 -7
  44. package/dist/SpiritEngineWrapper.39627300.js.map +1 -0
  45. package/dist/{ThreeJsWrapper.09c689b8.js → ThreeJsWrapper.8f15a85b.js} +13 -16
  46. package/dist/ThreeJsWrapper.8f15a85b.js.map +1 -0
  47. package/dist/{ThreeJsWrapper.7918143f.js → ThreeJsWrapper.a46ee0e9.js} +13 -16
  48. package/dist/ThreeJsWrapper.a46ee0e9.js.map +1 -0
  49. package/dist/VeilleManager.443b366e.js +569 -0
  50. package/dist/VeilleManager.443b366e.js.map +1 -0
  51. package/dist/VeilleManager.d8bde1ee.js +550 -0
  52. package/dist/VeilleManager.d8bde1ee.js.map +1 -0
  53. package/dist/{Weather.99917b66.js → Weather.bb414852.js} +73 -117
  54. package/dist/Weather.bb414852.js.map +1 -0
  55. package/dist/{Weather.cf58823d.js → Weather.ced9b467.js} +70 -115
  56. package/dist/Weather.ced9b467.js.map +1 -0
  57. package/dist/index.d.ts +401 -366
  58. package/dist/index.d.ts.map +1 -1
  59. package/dist/index.js +47604 -19604
  60. package/dist/index.js.map +1 -1
  61. package/dist/index.modern.js +43539 -15580
  62. package/dist/index.modern.js.map +1 -1
  63. package/package.json +10 -10
  64. package/README.md +0 -6
  65. package/dist/AttachmentDetail.0a576bf3.js.map +0 -1
  66. package/dist/AttachmentDetail.c4286a45.js.map +0 -1
  67. package/dist/CustomView.913a9f32.js.map +0 -1
  68. package/dist/CustomView.edf84de1.js.map +0 -1
  69. package/dist/Emergency.0cf005ce.js.map +0 -1
  70. package/dist/Emergency.897ee3c7.js.map +0 -1
  71. package/dist/FullScreenImage.1fe27198.js.map +0 -1
  72. package/dist/FullScreenImage.9a9b978e.js.map +0 -1
  73. package/dist/HistoryList.03a56119.js.map +0 -1
  74. package/dist/HistoryList.4c303dc6.js.map +0 -1
  75. package/dist/LanguageChoice.623ee802.js +0 -113
  76. package/dist/LanguageChoice.623ee802.js.map +0 -1
  77. package/dist/LanguageChoice.ff0cd04c.js +0 -122
  78. package/dist/LanguageChoice.ff0cd04c.js.map +0 -1
  79. package/dist/LittleWeatherContainer.07937cf3.js.map +0 -1
  80. package/dist/LittleWeatherContainer.d27a6b8a.js.map +0 -1
  81. package/dist/NewsContainer.a91d9131.js.map +0 -1
  82. package/dist/NewsContainer.f0d2ee9c.js.map +0 -1
  83. package/dist/SpiritEngineWrapper.1d8db53d.js.map +0 -1
  84. package/dist/SpiritEngineWrapper.27e9c120.js.map +0 -1
  85. package/dist/ThreeJsWrapper.09c689b8.js.map +0 -1
  86. package/dist/ThreeJsWrapper.7918143f.js.map +0 -1
  87. package/dist/Weather.99917b66.js.map +0 -1
  88. package/dist/Weather.cf58823d.js.map +0 -1
@@ -0,0 +1,569 @@
1
+ var $ehKZo$reactjsxruntime = require("react/jsx-runtime");
2
+ var $ehKZo$react = require("react");
3
+ var $ehKZo$reactspringweb = require("@react-spring/web");
4
+ var $ehKZo$reactredux = require("react-redux");
5
+ var $ehKZo$mediapipetasksvision = require("@mediapipe/tasks-vision");
6
+
7
+
8
+ function $parcel$interopDefault(a) {
9
+ return a && a.__esModule ? a.default : a;
10
+ }
11
+
12
+ function $parcel$defineInteropFlag(a) {
13
+ Object.defineProperty(a, '__esModule', {value: true, configurable: true});
14
+ }
15
+
16
+ function $parcel$export(e, n, v, s) {
17
+ Object.defineProperty(e, n, {get: v, set: s, enumerable: true, configurable: true});
18
+ }
19
+
20
+ var $parcel$global =
21
+ typeof globalThis !== 'undefined'
22
+ ? globalThis
23
+ : typeof self !== 'undefined'
24
+ ? self
25
+ : typeof window !== 'undefined'
26
+ ? window
27
+ : typeof global !== 'undefined'
28
+ ? global
29
+ : {};
30
+ var parcelRequire = $parcel$global["parcelRequirea39d"];
31
+ var parcelRegister = parcelRequire.register;
32
+ parcelRegister("jtgpJ", function(module, exports) {
33
+
34
+ $parcel$defineInteropFlag(module.exports);
35
+
36
+ $parcel$export(module.exports, "default", () => $167bfc94e5487988$export$2e2bcd8739ae039);
37
+
38
+
39
+
40
+
41
+
42
+ var $kpW3P = parcelRequire("kpW3P");
43
+
44
+ var $7WHA7 = parcelRequire("7WHA7");
45
+
46
+ var $2sSL9 = parcelRequire("2sSL9");
47
+
48
+ var $kL6vX = parcelRequire("kL6vX");
49
+
50
+ var $8sMtK = parcelRequire("8sMtK");
51
+
52
+ var $8KeRZ = parcelRequire("8KeRZ");
53
+
54
+ var $9x9Q9 = parcelRequire("9x9Q9");
55
+
56
+ var $G07Rs = parcelRequire("G07Rs");
57
+ const $167bfc94e5487988$var$springDuration = 500;
58
+ const $167bfc94e5487988$var$veilleRelatedRoutes = [
59
+ (0, $7WHA7.Routes).EmptyVeille,
60
+ (0, $7WHA7.Routes).NewsInVeille,
61
+ (0, $7WHA7.Routes).ScreenSaver,
62
+ (0, $7WHA7.Routes).SlideShow
63
+ ];
64
+ const $167bfc94e5487988$var$VeilleManager = ()=>{
65
+ var _veilleConfiguration_views_screenSaver, _veilleConfiguration_views, _veilleConfiguration_views_screenSaver1, _veilleConfiguration_views1, _veilleConfiguration_views_slideShow, _veilleConfiguration_views2, _veilleConfiguration_views_slideShow1, _veilleConfiguration_views3;
66
+ const dispatch = (0, $ehKZo$reactredux.useDispatch)();
67
+ const addressData = (0, $ehKZo$reactredux.useSelector)((state)=>state.retorikReducer.addressData);
68
+ const loaderClosed = (0, $ehKZo$reactredux.useSelector)((state)=>state.retorikReducer.loaderClosed);
69
+ const appAvailable = (0, $ehKZo$reactredux.useSelector)((state)=>state.retorikReducer.appAvailable);
70
+ const route = (0, $ehKZo$reactredux.useSelector)((state)=>state.viewReducer.route);
71
+ const veilleConfiguration = (0, $ehKZo$reactredux.useSelector)((state)=>state.viewReducer.veilleConfiguration);
72
+ const muted = (0, $ehKZo$reactredux.useSelector)((state)=>state.speechReducer.muted);
73
+ const typingCount = (0, $ehKZo$reactredux.useSelector)((state)=>state.directlineReducer.typingCount);
74
+ const [veilleLaunched, setVeilleLaunched] = (0, $ehKZo$react.useState)(false);
75
+ const [loop, setLoop] = (0, $ehKZo$react.useState)(false);
76
+ const veilleDataRef = (0, $ehKZo$react.useRef)(veilleConfiguration);
77
+ const availableItemsToDisplayRef = (0, $ehKZo$react.useRef)([]);
78
+ const currentItemDisplayedRef = (0, $ehKZo$react.useRef)(0);
79
+ const timerRef = (0, $ehKZo$react.useRef)(null);
80
+ const fadeTimerRef = (0, $ehKZo$react.useRef)(null);
81
+ const oldMutedRef = (0, $ehKZo$react.useRef)(muted);
82
+ const [spring, api] = (0, $ehKZo$reactspringweb.useSpring)(()=>({
83
+ from: {
84
+ opacity: 0
85
+ }
86
+ }));
87
+ (0, $ehKZo$react.useEffect)(()=>{
88
+ veilleLaunched && api.start({
89
+ from: {
90
+ opacity: 0
91
+ },
92
+ to: {
93
+ opacity: 1
94
+ },
95
+ config: {
96
+ duration: $167bfc94e5487988$var$springDuration
97
+ }
98
+ });
99
+ }, [
100
+ veilleLaunched
101
+ ]);
102
+ const handleClose = ()=>{
103
+ api.start({
104
+ from: {
105
+ opacity: 1
106
+ },
107
+ to: {
108
+ opacity: 0
109
+ },
110
+ config: {
111
+ duration: $167bfc94e5487988$var$springDuration
112
+ }
113
+ });
114
+ (fadeTimerRef === null || fadeTimerRef === void 0 ? void 0 : fadeTimerRef.current) && clearTimeout(fadeTimerRef.current);
115
+ fadeTimerRef.current = setTimeout(()=>{
116
+ // Switch back the muted state (it could have not been changed but for security let's set it)
117
+ dispatch((0, $kpW3P.storeActions).speech.setMuted(oldMutedRef.current));
118
+ // Get back to home view
119
+ dispatch((0, $kpW3P.storeActions).view.setRoute((0, $7WHA7.Routes).Home));
120
+ }, $167bfc94e5487988$var$springDuration);
121
+ };
122
+ const launchVeille = async ()=>{
123
+ var // Set muted state to true if it is demanded in the configuration
124
+ _veilleDataRef_current_views_news, _veilleDataRef_current_views;
125
+ // Kill current directline if needed, and create a new one if the news are included in the veille
126
+ if (veilleDataRef.current.killConversationOnLaunch) {
127
+ var _veilleDataRef_current_views_news1, _veilleDataRef_current_views1;
128
+ await dispatch((0, $kpW3P.storeActions).directline.endConversation());
129
+ ((_veilleDataRef_current_views1 = veilleDataRef.current.views) === null || _veilleDataRef_current_views1 === void 0 ? void 0 : (_veilleDataRef_current_views_news1 = _veilleDataRef_current_views1.news) === null || _veilleDataRef_current_views_news1 === void 0 ? void 0 : _veilleDataRef_current_views_news1.enabled) && dispatch((0, $kpW3P.storeActions).directline.recreateDirectline({
130
+ addressData: addressData,
131
+ userId: `veille_${Date.now()}`,
132
+ skipWelcome: true
133
+ }));
134
+ }
135
+ ((_veilleDataRef_current_views = veilleDataRef.current.views) === null || _veilleDataRef_current_views === void 0 ? void 0 : (_veilleDataRef_current_views_news = _veilleDataRef_current_views.news) === null || _veilleDataRef_current_views_news === void 0 ? void 0 : _veilleDataRef_current_views_news.muted) && dispatch((0, $kpW3P.storeActions).speech.setMuted(true));
136
+ setVeilleLaunched(true);
137
+ dispatch((0, $kpW3P.storeActions).view.setRoute(availableItemsToDisplayRef.current.length ? availableItemsToDisplayRef.current[0] : (0, $7WHA7.Routes).EmptyVeille));
138
+ };
139
+ const refreshTimer = ()=>{
140
+ timerRef.current && clearTimeout(timerRef.current);
141
+ timerRef.current = setTimeout(()=>{
142
+ launchVeille();
143
+ }, (veilleDataRef.current.delayBeforeLaunchInSeconds || 120) * 1000);
144
+ };
145
+ const exitVeille = (firstTime)=>{
146
+ var _veilleDataRef_current;
147
+ // Recreate directline if needed
148
+ if (!firstTime && ((_veilleDataRef_current = veilleDataRef.current) === null || _veilleDataRef_current === void 0 ? void 0 : _veilleDataRef_current.killConversationOnLaunch)) {
149
+ var // Reset directline if a new one has already been recreated for the news inside the veille
150
+ _veilleDataRef_current_views_news, _veilleDataRef_current_views;
151
+ ((_veilleDataRef_current_views = veilleDataRef.current.views) === null || _veilleDataRef_current_views === void 0 ? void 0 : (_veilleDataRef_current_views_news = _veilleDataRef_current_views.news) === null || _veilleDataRef_current_views_news === void 0 ? void 0 : _veilleDataRef_current_views_news.enabled) && dispatch((0, $kpW3P.storeActions).directline.endConversation());
152
+ dispatch((0, $kpW3P.storeActions).directline.recreateDirectline({
153
+ addressData: addressData
154
+ }));
155
+ }
156
+ setVeilleLaunched(false);
157
+ // Set back the current item's index to 0 and clear the timeout
158
+ currentItemDisplayedRef.current = 0;
159
+ timerRef.current && clearTimeout(timerRef.current);
160
+ // Launch the timer for veille opening
161
+ refreshTimer();
162
+ // Get back to home view if we came here to close the veille
163
+ !firstTime && handleClose();
164
+ };
165
+ const switchComponent = ()=>{
166
+ if (availableItemsToDisplayRef.current.length > currentItemDisplayedRef.current + 1) {
167
+ currentItemDisplayedRef.current++;
168
+ dispatch((0, $kpW3P.storeActions).view.setRoute(availableItemsToDisplayRef.current[currentItemDisplayedRef.current]));
169
+ } else {
170
+ currentItemDisplayedRef.current = 0;
171
+ dispatch((0, $kpW3P.storeActions).view.setRoute(availableItemsToDisplayRef.current[0]));
172
+ }
173
+ };
174
+ (0, $ehKZo$react.useEffect)(()=>{
175
+ veilleDataRef.current = veilleConfiguration;
176
+ if (appAvailable || loaderClosed) {
177
+ var _veilleConfiguration_views_screenSaver, _veilleConfiguration_views, _veilleConfiguration_views_news, _veilleConfiguration_views1, _veilleConfiguration_views_slideShow, _veilleConfiguration_views2;
178
+ const tempViewArray = [];
179
+ ((_veilleConfiguration_views = veilleConfiguration.views) === null || _veilleConfiguration_views === void 0 ? void 0 : (_veilleConfiguration_views_screenSaver = _veilleConfiguration_views.screenSaver) === null || _veilleConfiguration_views_screenSaver === void 0 ? void 0 : _veilleConfiguration_views_screenSaver.enabled) && tempViewArray.push((0, $7WHA7.Routes).ScreenSaver);
180
+ ((_veilleConfiguration_views1 = veilleConfiguration.views) === null || _veilleConfiguration_views1 === void 0 ? void 0 : (_veilleConfiguration_views_news = _veilleConfiguration_views1.news) === null || _veilleConfiguration_views_news === void 0 ? void 0 : _veilleConfiguration_views_news.enabled) && tempViewArray.push((0, $7WHA7.Routes).NewsInVeille);
181
+ ((_veilleConfiguration_views2 = veilleConfiguration.views) === null || _veilleConfiguration_views2 === void 0 ? void 0 : (_veilleConfiguration_views_slideShow = _veilleConfiguration_views2.slideShow) === null || _veilleConfiguration_views_slideShow === void 0 ? void 0 : _veilleConfiguration_views_slideShow.enabled) && tempViewArray.push((0, $7WHA7.Routes).SlideShow);
182
+ // Set loop if there is only 1 item to display
183
+ setLoop(tempViewArray.length === 1);
184
+ availableItemsToDisplayRef.current = tempViewArray;
185
+ exitVeille(true);
186
+ }
187
+ }, [
188
+ veilleConfiguration,
189
+ appAvailable,
190
+ loaderClosed
191
+ ]);
192
+ /**
193
+ * Refresh the timer of the veille on each typing activity emitted
194
+ */ (0, $ehKZo$react.useEffect)(()=>{
195
+ !veilleLaunched && refreshTimer();
196
+ }, [
197
+ typingCount,
198
+ veilleLaunched
199
+ ]);
200
+ (0, $ehKZo$react.useEffect)(()=>{
201
+ return ()=>{
202
+ timerRef.current && clearTimeout(timerRef.current);
203
+ (fadeTimerRef === null || fadeTimerRef === void 0 ? void 0 : fadeTimerRef.current) && clearTimeout(fadeTimerRef.current);
204
+ // Switch back the muted state (it could have not been changed but for security let's set it)
205
+ dispatch((0, $kpW3P.storeActions).speech.setMuted(oldMutedRef.current));
206
+ };
207
+ }, []);
208
+ return /*#__PURE__*/ (0, $ehKZo$reactjsxruntime.jsxs)((0, ($parcel$interopDefault($ehKZo$react))).Fragment, {
209
+ children: [
210
+ /*#__PURE__*/ (0, $ehKZo$reactjsxruntime.jsxs)((0, $ehKZo$reactspringweb.animated).div, {
211
+ id: "retorik-framework-veille-manager",
212
+ className: "rf-relative rf-col-start-1 rf-col-span-full rf-row-start-1 rf-row-span-full rf-grid-cols-8 rf-grid-rows-12",
213
+ style: {
214
+ display: $167bfc94e5487988$var$veilleRelatedRoutes.includes(route) ? 'grid' : 'none',
215
+ ...spring
216
+ },
217
+ children: [
218
+ /*#__PURE__*/ (0, $ehKZo$reactjsxruntime.jsx)((0, $kL6vX.default), {}),
219
+ veilleConfiguration.autoExitFromWebcam && veilleLaunched && /*#__PURE__*/ (0, $ehKZo$reactjsxruntime.jsx)((0, $8sMtK.default), {
220
+ detectionThreshold: 0.95,
221
+ onFaceDetected: ()=>exitVeille()
222
+ }),
223
+ route === (0, $7WHA7.Routes).EmptyVeille && /*#__PURE__*/ (0, $ehKZo$reactjsxruntime.jsx)((0, $8KeRZ.default), {}),
224
+ route === (0, $7WHA7.Routes).NewsInVeille && /*#__PURE__*/ (0, $ehKZo$reactjsxruntime.jsx)((0, $2sSL9.default), {
225
+ hideMenu: true,
226
+ isRetorikNews: true,
227
+ handleEndedWithoutloop: switchComponent,
228
+ loop: loop,
229
+ fromVeille: true
230
+ }),
231
+ route === (0, $7WHA7.Routes).ScreenSaver && /*#__PURE__*/ (0, $ehKZo$reactjsxruntime.jsx)((0, $9x9Q9.default), {
232
+ url: (_veilleConfiguration_views = veilleConfiguration.views) === null || _veilleConfiguration_views === void 0 ? void 0 : (_veilleConfiguration_views_screenSaver = _veilleConfiguration_views.screenSaver) === null || _veilleConfiguration_views_screenSaver === void 0 ? void 0 : _veilleConfiguration_views_screenSaver.url,
233
+ timer: (_veilleConfiguration_views1 = veilleConfiguration.views) === null || _veilleConfiguration_views1 === void 0 ? void 0 : (_veilleConfiguration_views_screenSaver1 = _veilleConfiguration_views1.screenSaver) === null || _veilleConfiguration_views_screenSaver1 === void 0 ? void 0 : _veilleConfiguration_views_screenSaver1.timerBeforeSwitchInSeconds,
234
+ loop: loop,
235
+ springDuration: $167bfc94e5487988$var$springDuration,
236
+ switchComponent: switchComponent
237
+ }),
238
+ route === (0, $7WHA7.Routes).SlideShow && /*#__PURE__*/ (0, $ehKZo$reactjsxruntime.jsx)((0, $G07Rs.default), {
239
+ urls: (_veilleConfiguration_views2 = veilleConfiguration.views) === null || _veilleConfiguration_views2 === void 0 ? void 0 : (_veilleConfiguration_views_slideShow = _veilleConfiguration_views2.slideShow) === null || _veilleConfiguration_views_slideShow === void 0 ? void 0 : _veilleConfiguration_views_slideShow.urls,
240
+ timer: (_veilleConfiguration_views3 = veilleConfiguration.views) === null || _veilleConfiguration_views3 === void 0 ? void 0 : (_veilleConfiguration_views_slideShow1 = _veilleConfiguration_views3.slideShow) === null || _veilleConfiguration_views_slideShow1 === void 0 ? void 0 : _veilleConfiguration_views_slideShow1.timerBeforeSwitchInSeconds,
241
+ loop: loop,
242
+ springDuration: $167bfc94e5487988$var$springDuration,
243
+ switchComponent: switchComponent
244
+ })
245
+ ]
246
+ }),
247
+ veilleLaunched && /*#__PURE__*/ (0, $ehKZo$reactjsxruntime.jsx)("div", {
248
+ className: "rf-z-overlay rf-col-start-1 rf-col-span-full rf-row-start-1 rf-row-span-full rf-bg-transparent rf-cursor-pointer",
249
+ onClick: ()=>exitVeille()
250
+ })
251
+ ]
252
+ });
253
+ };
254
+ var $167bfc94e5487988$export$2e2bcd8739ae039 = $167bfc94e5487988$var$VeilleManager;
255
+
256
+ });
257
+ parcelRegister("kL6vX", function(module, exports) {
258
+
259
+ $parcel$export(module.exports, "default", () => $42bad5eabafac04e$export$2e2bcd8739ae039);
260
+
261
+
262
+
263
+
264
+ var $58ljk = parcelRequire("58ljk");
265
+
266
+ var $69ngO = parcelRequire("69ngO");
267
+ const $42bad5eabafac04e$var$CallToAction = ()=>{
268
+ const themeColors = (0, $ehKZo$reactredux.useSelector)((state)=>state.viewReducer.themeColors);
269
+ const [colorWithTransparency] = (0, $ehKZo$react.useState)((0, $58ljk.getColorWithTransparency)(themeColors.primary, 0.5));
270
+ return /*#__PURE__*/ (0, $ehKZo$reactjsxruntime.jsxs)("div", {
271
+ className: "rf-absolute rf-z-ui rf-bottom-0 rf-right-0 rf-w-80 rf-h-80 rf-grid rf-grid-cols-1 rf-grid-rows-1 rf-justify-end rf-justify-items-end rf-content-end rf-items-end rf-text-center rf-overflow-hidden rf-z-10",
272
+ children: [
273
+ /*#__PURE__*/ (0, $ehKZo$reactjsxruntime.jsx)("div", {
274
+ className: "rf-relative rf-col-start-1 rf-col-end-2 rf-row-start-1 rf-row-end-2 rf-w-48 rf-h-36 rf-rotate-45 rf-translate-y-8",
275
+ style: {
276
+ backgroundColor: colorWithTransparency
277
+ }
278
+ }),
279
+ /*#__PURE__*/ (0, $ehKZo$reactjsxruntime.jsxs)("div", {
280
+ className: "rf-relative rf-col-start-1 rf-col-end-2 rf-row-start-1 rf-row-end-2 rf-w-50 rf-h-32 rf-flex rf-flex-col rf-gap-2 rf-justify-center rf-items-center rf-text-white",
281
+ children: [
282
+ /*#__PURE__*/ (0, $ehKZo$reactjsxruntime.jsx)((0, $69ngO.default), {}),
283
+ /*#__PURE__*/ (0, $ehKZo$reactjsxruntime.jsx)("p", {
284
+ className: "rf-mx-4",
285
+ children: "Click on screen to start"
286
+ })
287
+ ]
288
+ })
289
+ ]
290
+ });
291
+ };
292
+ var $42bad5eabafac04e$export$2e2bcd8739ae039 = $42bad5eabafac04e$var$CallToAction;
293
+
294
+ });
295
+ parcelRegister("69ngO", function(module, exports) {
296
+
297
+ $parcel$export(module.exports, "default", () => $82350bf4cc1b081d$export$2e2bcd8739ae039);
298
+
299
+
300
+ const $82350bf4cc1b081d$var$TouchIcon = ({ className: className, color: color })=>{
301
+ return /*#__PURE__*/ (0, $ehKZo$reactjsxruntime.jsx)("svg", {
302
+ viewBox: "0 0 48 67",
303
+ xmlns: "http://www.w3.org/2000/svg",
304
+ stroke: color || 'currentColor',
305
+ fill: color || 'currentColor',
306
+ className: className || 'rf-h-12 rf-w-12',
307
+ children: /*#__PURE__*/ (0, $ehKZo$reactjsxruntime.jsx)("path", {
308
+ d: "m41 24c-1.7 0-3.2 0.65-4.4 1.7-1.2-1.1-2.7-1.7-4.4-1.7-1.7 0-3.2 0.65-4.4 1.7-0.48-0.44-1-0.8-1.6-1.1 2.1-2.6 3.4-6 3.4-9.5 2.8e-4 -8.3-6.7-15-15-15-8.3 0-15 6.7-15 15 0 5.8 3.3 11 8.4 13v18c0 11 8.9 20 20 20 11 0 20-8.9 20-20v-16c0-3.6-2.9-6.6-6.6-6.6zm-37-8.8c0-5.9 4.8-11 11-11 5.9 0 11 4.8 11 11 0 3.4-1.6 6.5-4.1 8.5v-8.5c0-3.6-2.9-6.6-6.6-6.6-3.6 0-6.6 2.9-6.6 6.6v8.5c-2.6-2-4.1-5.1-4.1-8.5zm39 32c0 8.5-6.9 15-15 15-8.5 0-15-6.9-15-15v-20c4e-3 -0.072 4e-3 -0.14 0-0.22v-12c0-1.2 1-2.3 2.3-2.3 1.2 0 2.3 1 2.3 2.3v20c0 1.2 0.96 2.1 2.1 2.1 1.2 0 2.1-0.96 2.1-2.1v-4.7c0-1.2 1-2.3 2.3-2.3s2.3 1 2.3 2.3v4.7c0 1.2 0.96 2.1 2.1 2.1 1.2 0 2.1-0.96 2.1-2.1v-4.7c0-1.2 1-2.3 2.3-2.3 1.2 0 2.3 1 2.3 2.3v4.7c0 1.2 0.96 2.1 2.1 2.1s2.1-0.96 2.1-2.1v-4.7c0-1.2 1-2.3 2.3-2.3 1.2 0 2.3 1 2.3 2.3v16z",
309
+ strokeWidth: ".29"
310
+ })
311
+ });
312
+ };
313
+ var $82350bf4cc1b081d$export$2e2bcd8739ae039 = $82350bf4cc1b081d$var$TouchIcon;
314
+
315
+ });
316
+
317
+
318
+ parcelRegister("8sMtK", function(module, exports) {
319
+
320
+ $parcel$export(module.exports, "default", () => $8d9a75d3aaaf531b$export$2e2bcd8739ae039);
321
+
322
+
323
+
324
+
325
+ const $8d9a75d3aaaf531b$var$runningMode = 'VIDEO';
326
+ let $8d9a75d3aaaf531b$var$lastVideoTime = -1;
327
+ const $8d9a75d3aaaf531b$var$constraints = {
328
+ video: true,
329
+ facingMode: 'user'
330
+ };
331
+ const $8d9a75d3aaaf531b$var$FaceDetector = ({ detectionThreshold: detectionThreshold, onFaceDetected: onFaceDetected })=>{
332
+ const currentWidth = (0, $ehKZo$reactredux.useSelector)((state)=>state.viewReducer.currentWidth);
333
+ const currentHeight = (0, $ehKZo$reactredux.useSelector)((state)=>state.viewReducer.currentHeight);
334
+ const [faceDetector, setFaceDetector] = (0, $ehKZo$react.useState)();
335
+ const videoRef = (0, $ehKZo$react.useRef)(null);
336
+ (0, $ehKZo$react.useEffect)(()=>{
337
+ const createfaceDetector = async ()=>{
338
+ const vision = await (0, $ehKZo$mediapipetasksvision.FilesetResolver).forVisionTasks('https://cdn.jsdelivr.net/npm/@mediapipe/tasks-vision@0.10.0/wasm');
339
+ const newFaceDetector = await (0, $ehKZo$mediapipetasksvision.FaceDetector).createFromOptions(vision, {
340
+ baseOptions: {
341
+ modelAssetPath: `https://storage.googleapis.com/mediapipe-models/face_detector/blaze_face_short_range/float16/1/blaze_face_short_range.tflite`,
342
+ delegate: 'GPU'
343
+ },
344
+ runningMode: $8d9a75d3aaaf531b$var$runningMode
345
+ });
346
+ newFaceDetector && setFaceDetector(newFaceDetector);
347
+ };
348
+ const initializefaceDetector = async ()=>{
349
+ navigator.mediaDevices.getUserMedia($8d9a75d3aaaf531b$var$constraints).then(()=>{
350
+ createfaceDetector();
351
+ }).catch((error)=>console.warn('Retorik Framework > an error occured when trying to use the webcam : ', error));
352
+ };
353
+ initializefaceDetector();
354
+ }, []);
355
+ const predictWebcam = async ()=>{
356
+ if (faceDetector && videoRef.current) {
357
+ let startTimeMs = performance.now();
358
+ // Detect faces using detectForVideo
359
+ if (videoRef.current.currentTime !== $8d9a75d3aaaf531b$var$lastVideoTime) {
360
+ $8d9a75d3aaaf531b$var$lastVideoTime = videoRef.current.currentTime;
361
+ const detections = faceDetector.detectForVideo(videoRef.current, startTimeMs).detections;
362
+ if (detections.length) {
363
+ const score = detections[0].categories[0].score;
364
+ score > detectionThreshold && onFaceDetected(detections, videoRef.current.videoWidth, videoRef.current.videoHeight);
365
+ }
366
+ }
367
+ }
368
+ // Call this function again to keep predicting when the browser is ready
369
+ window.requestAnimationFrame(predictWebcam);
370
+ };
371
+ (0, $ehKZo$react.useEffect)(()=>{
372
+ if (faceDetector && videoRef.current) // Activate the webcam stream.
373
+ navigator.mediaDevices.getUserMedia($8d9a75d3aaaf531b$var$constraints).then((stream)=>{
374
+ if (videoRef.current) {
375
+ videoRef.current.srcObject = stream;
376
+ videoRef.current.addEventListener('loadeddata', predictWebcam);
377
+ }
378
+ }).catch((err)=>{
379
+ console.error(err);
380
+ });
381
+ }, [
382
+ faceDetector
383
+ ]);
384
+ return /*#__PURE__*/ (0, $ehKZo$reactjsxruntime.jsx)("div", {
385
+ id: "retorik-framework-face-detector",
386
+ className: "rf-absolute rf-top-0 rf-left-0 rf-invisible",
387
+ children: /*#__PURE__*/ (0, $ehKZo$reactjsxruntime.jsx)("video", {
388
+ ref: videoRef,
389
+ src: "",
390
+ autoPlay: true,
391
+ style: {
392
+ width: currentWidth > currentHeight ? currentWidth : undefined,
393
+ height: currentHeight > currentWidth ? currentHeight : undefined,
394
+ aspectRatio: currentWidth / currentHeight
395
+ }
396
+ })
397
+ });
398
+ };
399
+ var $8d9a75d3aaaf531b$export$2e2bcd8739ae039 = $8d9a75d3aaaf531b$var$FaceDetector;
400
+
401
+ });
402
+
403
+ parcelRegister("8KeRZ", function(module, exports) {
404
+
405
+ $parcel$export(module.exports, "default", () => $dadec6c8a2c8bf97$export$2e2bcd8739ae039);
406
+
407
+
408
+ const $dadec6c8a2c8bf97$var$EmptyVeille = ()=>{
409
+ return /*#__PURE__*/ (0, $ehKZo$reactjsxruntime.jsx)("div", {
410
+ className: "rf-col-start-1 rf-col-span-full rf-row-start-1 rf-row-span-full rf-bg-black rf-flex rf-justify-center rf-items-center",
411
+ children: /*#__PURE__*/ (0, $ehKZo$reactjsxruntime.jsx)("div", {
412
+ className: "rf-uppercase rf-font-bold rf-text-3xl rf-text-white rf-animate-pulse",
413
+ children: "click or tap on the screen..."
414
+ })
415
+ });
416
+ };
417
+ var $dadec6c8a2c8bf97$export$2e2bcd8739ae039 = $dadec6c8a2c8bf97$var$EmptyVeille;
418
+
419
+ });
420
+
421
+ parcelRegister("9x9Q9", function(module, exports) {
422
+
423
+ $parcel$export(module.exports, "default", () => $c7d28215eed5d4a7$export$2e2bcd8739ae039);
424
+
425
+
426
+
427
+ const $c7d28215eed5d4a7$var$ScreenSaver = ({ url: url, timer: timer, loop: loop, springDuration: springDuration, switchComponent: switchComponent })=>{
428
+ const timerRef = (0, $ehKZo$react.useRef)(null);
429
+ const fadeTimerRef = (0, $ehKZo$react.useRef)(null);
430
+ const [spring, api] = (0, $ehKZo$reactspringweb.useSpring)(()=>({
431
+ from: {
432
+ opacity: 0
433
+ }
434
+ }));
435
+ (0, $ehKZo$react.useEffect)(()=>{
436
+ api.start({
437
+ from: {
438
+ opacity: 0
439
+ },
440
+ to: {
441
+ opacity: 1
442
+ },
443
+ config: {
444
+ duration: springDuration
445
+ }
446
+ });
447
+ }, []);
448
+ const handleClose = ()=>{
449
+ api.start({
450
+ from: {
451
+ opacity: 1
452
+ },
453
+ to: {
454
+ opacity: 0
455
+ },
456
+ config: {
457
+ duration: springDuration
458
+ }
459
+ });
460
+ (fadeTimerRef === null || fadeTimerRef === void 0 ? void 0 : fadeTimerRef.current) && clearTimeout(fadeTimerRef.current);
461
+ fadeTimerRef.current = setTimeout(()=>{
462
+ // Get back to home view
463
+ switchComponent();
464
+ }, springDuration);
465
+ };
466
+ (0, $ehKZo$react.useEffect)(()=>{
467
+ if (!loop) timerRef.current = setTimeout(()=>{
468
+ handleClose();
469
+ }, (timer || 8) * 1000 - springDuration);
470
+ return ()=>{
471
+ timerRef.current && clearTimeout(timerRef.current);
472
+ fadeTimerRef.current && clearTimeout(fadeTimerRef.current);
473
+ };
474
+ }, []);
475
+ return /*#__PURE__*/ (0, $ehKZo$reactjsxruntime.jsx)((0, $ehKZo$reactspringweb.animated).div, {
476
+ className: "rf-col-start-1 rf-col-span-full rf-row-start-1 rf-row-span-full",
477
+ style: {
478
+ backgroundImage: `url(${url})`,
479
+ backgroundPosition: 'center',
480
+ backgroundRepeat: 'no-repeat',
481
+ backgroundSize: 'cover',
482
+ ...spring
483
+ }
484
+ });
485
+ };
486
+ var $c7d28215eed5d4a7$export$2e2bcd8739ae039 = $c7d28215eed5d4a7$var$ScreenSaver;
487
+
488
+ });
489
+
490
+ parcelRegister("G07Rs", function(module, exports) {
491
+
492
+ $parcel$export(module.exports, "default", () => $a2463c3887d0d0a1$export$2e2bcd8739ae039);
493
+
494
+
495
+
496
+ const $a2463c3887d0d0a1$var$SlideShow = ({ urls: urls, timer: timer, loop: loop, springDuration: springDuration, switchComponent: switchComponent })=>{
497
+ const [currentIndex, setCurrentIndex] = (0, $ehKZo$react.useState)(0);
498
+ const timerRef = (0, $ehKZo$react.useRef)(null);
499
+ const fadeTimerRef = (0, $ehKZo$react.useRef)(null);
500
+ const [spring, api] = (0, $ehKZo$reactspringweb.useSpring)(()=>({
501
+ from: {
502
+ opacity: 0
503
+ }
504
+ }));
505
+ (0, $ehKZo$react.useEffect)(()=>{
506
+ api.start({
507
+ from: {
508
+ opacity: 0
509
+ },
510
+ to: {
511
+ opacity: 1
512
+ },
513
+ config: {
514
+ duration: springDuration
515
+ }
516
+ });
517
+ }, []);
518
+ const handleClose = ()=>{
519
+ api.start({
520
+ from: {
521
+ opacity: 1
522
+ },
523
+ to: {
524
+ opacity: 0
525
+ },
526
+ config: {
527
+ duration: springDuration
528
+ }
529
+ });
530
+ (fadeTimerRef === null || fadeTimerRef === void 0 ? void 0 : fadeTimerRef.current) && clearTimeout(fadeTimerRef.current);
531
+ fadeTimerRef.current = setTimeout(()=>{
532
+ // Get back to home view
533
+ switchComponent();
534
+ }, springDuration);
535
+ };
536
+ (0, $ehKZo$react.useEffect)(()=>{
537
+ (timerRef === null || timerRef === void 0 ? void 0 : timerRef.current) && clearTimeout(timerRef.current);
538
+ if (urls === null || urls === void 0 ? void 0 : urls.length) timerRef.current = setTimeout(()=>{
539
+ currentIndex === urls.length - 1 ? loop ? setCurrentIndex(0) : handleClose() : setCurrentIndex(currentIndex + 1);
540
+ }, (timer || 5) * 1000);
541
+ else switchComponent();
542
+ }, [
543
+ currentIndex
544
+ ]);
545
+ (0, $ehKZo$react.useEffect)(()=>{
546
+ return ()=>{
547
+ (timerRef === null || timerRef === void 0 ? void 0 : timerRef.current) && clearTimeout(timerRef.current);
548
+ (fadeTimerRef === null || fadeTimerRef === void 0 ? void 0 : fadeTimerRef.current) && clearTimeout(fadeTimerRef.current);
549
+ };
550
+ }, []);
551
+ return /*#__PURE__*/ (0, $ehKZo$reactjsxruntime.jsx)((0, $ehKZo$reactspringweb.animated).div, {
552
+ className: "rf-col-start-1 rf-col-span-full rf-row-start-1 rf-row-span-full rf-flex rf-justify-center rf-items-center rf-bg-black",
553
+ style: {
554
+ ...spring
555
+ },
556
+ children: /*#__PURE__*/ (0, $ehKZo$reactjsxruntime.jsx)("img", {
557
+ className: `${window.innerHeight > window.innerWidth ? 'rf-w-full' : 'rf-h-full'}`,
558
+ src: (urls === null || urls === void 0 ? void 0 : urls[currentIndex]) || '',
559
+ alt: "slideshow"
560
+ })
561
+ });
562
+ };
563
+ var $a2463c3887d0d0a1$export$2e2bcd8739ae039 = $a2463c3887d0d0a1$var$SlideShow;
564
+
565
+ });
566
+
567
+
568
+
569
+ //# sourceMappingURL=VeilleManager.443b366e.js.map
@@ -0,0 +1 @@
1
+ {"mappings":"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","sources":["src/components/Veille/VeilleManager.tsx","src/components/Veille/CallToAction.tsx","src/components/Icons/Miscellaneous/TouchIcon.tsx","src/components/Veille/FaceDetector.tsx","src/components/Veille/EmptyVeille.tsx","src/components/Veille/ScreenSaver.tsx","src/components/Veille/SlideShow.tsx"],"sourcesContent":["import React, { useEffect, useRef, useState } from 'react'\r\nimport { useSpring, animated } from '@react-spring/web'\r\nimport { useSelector, useDispatch } from 'react-redux'\r\nimport { RootState, storeActions } from '../../store'\r\n\r\nimport { Routes } from '../../models/enums'\r\nimport type { VeilleConfiguration } from '../../models/types'\r\n\r\nimport NewsView from '../Views/NewsView'\r\nimport CallToAction from './CallToAction'\r\nimport FaceDetector from './FaceDetector'\r\nimport EmptyVeille from './EmptyVeille'\r\nimport ScreenSaver from './ScreenSaver'\r\nimport SlideShow from './SlideShow'\r\n\r\nconst springDuration = 500\r\nconst veilleRelatedRoutes = [Routes.EmptyVeille, Routes.NewsInVeille, Routes.ScreenSaver, Routes.SlideShow]\r\n\r\nconst VeilleManager = () => {\r\n const dispatch = useDispatch()\r\n const addressData = useSelector((state: RootState) => state.retorikReducer.addressData)\r\n const loaderClosed = useSelector((state: RootState) => state.retorikReducer.loaderClosed)\r\n const appAvailable = useSelector((state: RootState) => state.retorikReducer.appAvailable)\r\n const route = useSelector((state: RootState) => state.viewReducer.route)\r\n const veilleConfiguration = useSelector((state: RootState) => state.viewReducer.veilleConfiguration)\r\n const muted = useSelector((state: RootState) => state.speechReducer.muted)\r\n const typingCount = useSelector((state: RootState) => state.directlineReducer.typingCount)\r\n\r\n const [veilleLaunched, setVeilleLaunched] = useState<boolean>(false)\r\n const [loop, setLoop] = useState<boolean>(false)\r\n const veilleDataRef = useRef<VeilleConfiguration>(veilleConfiguration)\r\n const availableItemsToDisplayRef = useRef<Array<Routes>>([])\r\n const currentItemDisplayedRef = useRef<number>(0)\r\n const timerRef = useRef<NodeJS.Timer | null>(null)\r\n const fadeTimerRef = useRef<NodeJS.Timer | null>(null)\r\n const oldMutedRef = useRef<boolean>(muted)\r\n\r\n const [spring, api] = useSpring(() => ({\r\n from: {\r\n opacity: 0\r\n }\r\n }))\r\n\r\n useEffect(() => {\r\n veilleLaunched &&\r\n api.start({\r\n from: {\r\n opacity: 0\r\n },\r\n to: {\r\n opacity: 1\r\n },\r\n config: {\r\n duration: springDuration\r\n }\r\n })\r\n }, [veilleLaunched])\r\n\r\n const handleClose = (): void => {\r\n api.start({\r\n from: {\r\n opacity: 1\r\n },\r\n to: {\r\n opacity: 0\r\n },\r\n config: {\r\n duration: springDuration\r\n }\r\n })\r\n\r\n fadeTimerRef?.current && clearTimeout(fadeTimerRef.current)\r\n fadeTimerRef.current = setTimeout(() => {\r\n // Switch back the muted state (it could have not been changed but for security let's set it)\r\n dispatch(storeActions.speech.setMuted(oldMutedRef.current))\r\n // Get back to home view\r\n dispatch(storeActions.view.setRoute(Routes.Home))\r\n }, springDuration)\r\n }\r\n\r\n const launchVeille = async (): Promise<void> => {\r\n // Kill current directline if needed, and create a new one if the news are included in the veille\r\n if (veilleDataRef.current.killConversationOnLaunch) {\r\n await dispatch(storeActions.directline.endConversation())\r\n veilleDataRef.current.views?.news?.enabled && dispatch(storeActions.directline.recreateDirectline({ addressData: addressData, userId: `veille_${Date.now()}`, skipWelcome: true }))\r\n }\r\n // Set muted state to true if it is demanded in the configuration\r\n veilleDataRef.current.views?.news?.muted && dispatch(storeActions.speech.setMuted(true))\r\n setVeilleLaunched(true)\r\n dispatch(storeActions.view.setRoute(availableItemsToDisplayRef.current.length ? availableItemsToDisplayRef.current[0] : Routes.EmptyVeille))\r\n }\r\n\r\n const refreshTimer = (): void => {\r\n timerRef.current && clearTimeout(timerRef.current)\r\n timerRef.current = setTimeout(() => {\r\n launchVeille()\r\n }, (veilleDataRef.current.delayBeforeLaunchInSeconds || 120) * 1000)\r\n }\r\n\r\n const exitVeille = (firstTime?: boolean): void => {\r\n // Recreate directline if needed\r\n if (!firstTime && veilleDataRef.current?.killConversationOnLaunch) {\r\n // Reset directline if a new one has already been recreated for the news inside the veille\r\n veilleDataRef.current.views?.news?.enabled && dispatch(storeActions.directline.endConversation())\r\n dispatch(storeActions.directline.recreateDirectline({ addressData: addressData }))\r\n }\r\n\r\n setVeilleLaunched(false)\r\n // Set back the current item's index to 0 and clear the timeout\r\n currentItemDisplayedRef.current = 0\r\n timerRef.current && clearTimeout(timerRef.current)\r\n // Launch the timer for veille opening\r\n refreshTimer()\r\n\r\n // Get back to home view if we came here to close the veille\r\n !firstTime && handleClose()\r\n }\r\n\r\n const switchComponent = (): void => {\r\n if (availableItemsToDisplayRef.current.length > currentItemDisplayedRef.current + 1) {\r\n currentItemDisplayedRef.current++\r\n dispatch(storeActions.view.setRoute(availableItemsToDisplayRef.current[currentItemDisplayedRef.current]))\r\n } else {\r\n currentItemDisplayedRef.current = 0\r\n dispatch(storeActions.view.setRoute(availableItemsToDisplayRef.current[0]))\r\n }\r\n }\r\n\r\n useEffect(() => {\r\n veilleDataRef.current = veilleConfiguration\r\n if (appAvailable || loaderClosed) {\r\n const tempViewArray: Array<Routes> = []\r\n veilleConfiguration.views?.screenSaver?.enabled && tempViewArray.push(Routes.ScreenSaver)\r\n veilleConfiguration.views?.news?.enabled && tempViewArray.push(Routes.NewsInVeille)\r\n veilleConfiguration.views?.slideShow?.enabled && tempViewArray.push(Routes.SlideShow)\r\n // Set loop if there is only 1 item to display\r\n setLoop(tempViewArray.length === 1)\r\n availableItemsToDisplayRef.current = tempViewArray\r\n\r\n exitVeille(true)\r\n }\r\n }, [veilleConfiguration, appAvailable, loaderClosed])\r\n\r\n /**\r\n * Refresh the timer of the veille on each typing activity emitted\r\n */\r\n useEffect(() => {\r\n !veilleLaunched && refreshTimer()\r\n }, [typingCount, veilleLaunched])\r\n\r\n useEffect(() => {\r\n return () => {\r\n timerRef.current && clearTimeout(timerRef.current)\r\n fadeTimerRef?.current && clearTimeout(fadeTimerRef.current)\r\n // Switch back the muted state (it could have not been changed but for security let's set it)\r\n dispatch(storeActions.speech.setMuted(oldMutedRef.current))\r\n }\r\n }, [])\r\n\r\n return (\r\n <React.Fragment>\r\n <animated.div\r\n id='retorik-framework-veille-manager'\r\n className='rf-relative rf-col-start-1 rf-col-span-full rf-row-start-1 rf-row-span-full rf-grid-cols-8 rf-grid-rows-12'\r\n style={{\r\n display: veilleRelatedRoutes.includes(route) ? 'grid' : 'none',\r\n ...spring\r\n }}\r\n >\r\n <CallToAction />\r\n {veilleConfiguration.autoExitFromWebcam && veilleLaunched && <FaceDetector detectionThreshold={0.95} onFaceDetected={() => exitVeille()} />}\r\n\r\n {route === Routes.EmptyVeille && <EmptyVeille />}\r\n {route === Routes.NewsInVeille && <NewsView hideMenu={true} isRetorikNews={true} handleEndedWithoutloop={switchComponent} loop={loop} fromVeille={true} />}\r\n {route === Routes.ScreenSaver && (\r\n <ScreenSaver\r\n url={veilleConfiguration.views?.screenSaver?.url}\r\n timer={veilleConfiguration.views?.screenSaver?.timerBeforeSwitchInSeconds}\r\n loop={loop}\r\n springDuration={springDuration}\r\n switchComponent={switchComponent}\r\n />\r\n )}\r\n {route === Routes.SlideShow && (\r\n <SlideShow\r\n urls={veilleConfiguration.views?.slideShow?.urls}\r\n timer={veilleConfiguration.views?.slideShow?.timerBeforeSwitchInSeconds}\r\n loop={loop}\r\n springDuration={springDuration}\r\n switchComponent={switchComponent}\r\n />\r\n )}\r\n </animated.div>\r\n\r\n {/* Overlay to exit the veille */}\r\n {veilleLaunched && <div className='rf-z-overlay rf-col-start-1 rf-col-span-full rf-row-start-1 rf-row-span-full rf-bg-transparent rf-cursor-pointer' onClick={() => exitVeille()} />}\r\n </React.Fragment>\r\n )\r\n}\r\n\r\nexport default VeilleManager\r\n","import React, { useState } from 'react'\r\nimport { useSelector } from 'react-redux'\r\nimport { RootState } from '../../store'\r\nimport { getColorWithTransparency } from '../../utils/colorUtils'\r\nimport TouchIcon from '../Icons/Miscellaneous/TouchIcon'\r\n\r\nconst CallToAction = (): JSX.Element => {\r\n const themeColors = useSelector((state: RootState) => state.viewReducer.themeColors)\r\n const [colorWithTransparency] = useState<string>(getColorWithTransparency(themeColors.primary, 0.5))\r\n\r\n return (\r\n <div className='rf-absolute rf-z-ui rf-bottom-0 rf-right-0 rf-w-80 rf-h-80 rf-grid rf-grid-cols-1 rf-grid-rows-1 rf-justify-end rf-justify-items-end rf-content-end rf-items-end rf-text-center rf-overflow-hidden rf-z-10'>\r\n <div className='rf-relative rf-col-start-1 rf-col-end-2 rf-row-start-1 rf-row-end-2 rf-w-48 rf-h-36 rf-rotate-45 rf-translate-y-8' style={{ backgroundColor: colorWithTransparency }}></div>\r\n <div className='rf-relative rf-col-start-1 rf-col-end-2 rf-row-start-1 rf-row-end-2 rf-w-50 rf-h-32 rf-flex rf-flex-col rf-gap-2 rf-justify-center rf-items-center rf-text-white'>\r\n <TouchIcon />\r\n <p className='rf-mx-4'>Click on screen to start</p>\r\n </div>\r\n </div>\r\n )\r\n}\r\n\r\nexport default CallToAction\r\n","import React from \"react\";\r\nimport type { IconDefaultProps } from '../../../models/types'\r\n\r\nconst TouchIcon = ({ className, color }: IconDefaultProps) => {\r\n return (\r\n <svg\r\n viewBox=\"0 0 48 67\"\r\n xmlns=\"http://www.w3.org/2000/svg\"\r\n stroke={color || 'currentColor'}\r\n fill={color || 'currentColor'}\r\n className={className || 'rf-h-12 rf-w-12'}\r\n >\r\n <path\r\n d=\"m41 24c-1.7 0-3.2 0.65-4.4 1.7-1.2-1.1-2.7-1.7-4.4-1.7-1.7 0-3.2 0.65-4.4 1.7-0.48-0.44-1-0.8-1.6-1.1 2.1-2.6 3.4-6 3.4-9.5 2.8e-4 -8.3-6.7-15-15-15-8.3 0-15 6.7-15 15 0 5.8 3.3 11 8.4 13v18c0 11 8.9 20 20 20 11 0 20-8.9 20-20v-16c0-3.6-2.9-6.6-6.6-6.6zm-37-8.8c0-5.9 4.8-11 11-11 5.9 0 11 4.8 11 11 0 3.4-1.6 6.5-4.1 8.5v-8.5c0-3.6-2.9-6.6-6.6-6.6-3.6 0-6.6 2.9-6.6 6.6v8.5c-2.6-2-4.1-5.1-4.1-8.5zm39 32c0 8.5-6.9 15-15 15-8.5 0-15-6.9-15-15v-20c4e-3 -0.072 4e-3 -0.14 0-0.22v-12c0-1.2 1-2.3 2.3-2.3 1.2 0 2.3 1 2.3 2.3v20c0 1.2 0.96 2.1 2.1 2.1 1.2 0 2.1-0.96 2.1-2.1v-4.7c0-1.2 1-2.3 2.3-2.3s2.3 1 2.3 2.3v4.7c0 1.2 0.96 2.1 2.1 2.1 1.2 0 2.1-0.96 2.1-2.1v-4.7c0-1.2 1-2.3 2.3-2.3 1.2 0 2.3 1 2.3 2.3v4.7c0 1.2 0.96 2.1 2.1 2.1s2.1-0.96 2.1-2.1v-4.7c0-1.2 1-2.3 2.3-2.3 1.2 0 2.3 1 2.3 2.3v16z\"\r\n strokeWidth=\".29\"\r\n />\r\n </svg>\r\n );\r\n};\r\n\r\nexport default TouchIcon;\r\n","import React, { useEffect, useState, useRef } from 'react'\r\nimport { FaceDetector as MediapipeFaceDetector, FilesetResolver, Detection } from '@mediapipe/tasks-vision'\r\nimport { useSelector } from 'react-redux'\r\nimport { RootState } from '../../store'\r\n\r\ninterface FaceDetectorProps {\r\n detectionThreshold: number\r\n onFaceDetected: (detections?: Array<Detection>, imageWidth?: number, imageHeight?: number) => void\r\n}\r\n\r\nconst runningMode = 'VIDEO'\r\nlet lastVideoTime = -1\r\nconst constraints = {\r\n video: true,\r\n facingMode: 'user'\r\n}\r\n\r\nconst FaceDetector = ({ detectionThreshold, onFaceDetected }: FaceDetectorProps): JSX.Element => {\r\n const currentWidth = useSelector((state: RootState) => state.viewReducer.currentWidth)\r\n const currentHeight = useSelector((state: RootState) => state.viewReducer.currentHeight)\r\n const [faceDetector, setFaceDetector] = useState<MediapipeFaceDetector | undefined>()\r\n const videoRef = useRef<HTMLVideoElement>(null)\r\n\r\n useEffect(() => {\r\n const createfaceDetector = async () => {\r\n const vision = await FilesetResolver.forVisionTasks('https://cdn.jsdelivr.net/npm/@mediapipe/tasks-vision@0.10.0/wasm')\r\n const newFaceDetector = await MediapipeFaceDetector.createFromOptions(vision, {\r\n baseOptions: {\r\n modelAssetPath: `https://storage.googleapis.com/mediapipe-models/face_detector/blaze_face_short_range/float16/1/blaze_face_short_range.tflite`,\r\n delegate: 'GPU'\r\n },\r\n runningMode: runningMode\r\n })\r\n\r\n newFaceDetector && setFaceDetector(newFaceDetector)\r\n }\r\n\r\n const initializefaceDetector = async () => {\r\n navigator.mediaDevices\r\n .getUserMedia(constraints)\r\n .then(() => {\r\n createfaceDetector()\r\n })\r\n .catch((error) => console.warn('Retorik Framework > an error occured when trying to use the webcam : ', error))\r\n }\r\n\r\n initializefaceDetector()\r\n }, [])\r\n\r\n const predictWebcam = async () => {\r\n if (faceDetector && videoRef.current) {\r\n let startTimeMs = performance.now()\r\n\r\n // Detect faces using detectForVideo\r\n if (videoRef.current.currentTime !== lastVideoTime) {\r\n lastVideoTime = videoRef.current.currentTime\r\n const detections = faceDetector.detectForVideo(videoRef.current, startTimeMs).detections\r\n\r\n if (detections.length) {\r\n const score = detections[0].categories[0].score\r\n score > detectionThreshold && onFaceDetected(detections, videoRef.current.videoWidth, videoRef.current.videoHeight)\r\n }\r\n }\r\n }\r\n\r\n // Call this function again to keep predicting when the browser is ready\r\n window.requestAnimationFrame(predictWebcam)\r\n }\r\n\r\n useEffect(() => {\r\n if (faceDetector && videoRef.current) {\r\n // Activate the webcam stream.\r\n navigator.mediaDevices\r\n .getUserMedia(constraints)\r\n .then((stream) => {\r\n if (videoRef.current) {\r\n videoRef.current.srcObject = stream\r\n videoRef.current.addEventListener('loadeddata', predictWebcam)\r\n }\r\n })\r\n .catch((err) => {\r\n console.error(err)\r\n })\r\n }\r\n }, [faceDetector])\r\n\r\n return (\r\n <div id='retorik-framework-face-detector' className='rf-absolute rf-top-0 rf-left-0 rf-invisible'>\r\n <video\r\n ref={videoRef}\r\n src=''\r\n autoPlay\r\n style={{\r\n width: currentWidth > currentHeight ? currentWidth : undefined,\r\n height: currentHeight > currentWidth ? currentHeight : undefined,\r\n aspectRatio: currentWidth / currentHeight\r\n }}\r\n />\r\n </div>\r\n )\r\n}\r\n\r\nexport default FaceDetector\r\n","import React from 'react'\r\n\r\nconst EmptyVeille = () => {\r\n return (\r\n <div className='rf-col-start-1 rf-col-span-full rf-row-start-1 rf-row-span-full rf-bg-black rf-flex rf-justify-center rf-items-center'>\r\n <div className='rf-uppercase rf-font-bold rf-text-3xl rf-text-white rf-animate-pulse'>click or tap on the screen...</div>\r\n </div>\r\n )\r\n}\r\n\r\nexport default EmptyVeille\r\n","import React, { useEffect, useRef } from 'react'\r\nimport { useSpring, animated } from '@react-spring/web'\r\n\r\ninterface ScreenSaverProps {\r\n url?: string\r\n timer?: number\r\n loop?: boolean\r\n springDuration: number\r\n switchComponent: () => void\r\n}\r\n\r\nconst ScreenSaver = ({ url, timer, loop, springDuration, switchComponent }: ScreenSaverProps) => {\r\n const timerRef = useRef<NodeJS.Timer | null>(null)\r\n const fadeTimerRef = useRef<NodeJS.Timer | null>(null)\r\n\r\n const [spring, api] = useSpring(() => ({\r\n from: {\r\n opacity: 0\r\n }\r\n }))\r\n\r\n useEffect(() => {\r\n api.start({\r\n from: {\r\n opacity: 0\r\n },\r\n to: {\r\n opacity: 1\r\n },\r\n config: {\r\n duration: springDuration\r\n }\r\n })\r\n }, [])\r\n\r\n const handleClose = (): void => {\r\n api.start({\r\n from: {\r\n opacity: 1\r\n },\r\n to: {\r\n opacity: 0\r\n },\r\n config: {\r\n duration: springDuration\r\n }\r\n })\r\n\r\n fadeTimerRef?.current && clearTimeout(fadeTimerRef.current)\r\n fadeTimerRef.current = setTimeout(() => {\r\n // Get back to home view\r\n switchComponent()\r\n }, springDuration)\r\n }\r\n\r\n useEffect(() => {\r\n if (!loop) {\r\n timerRef.current = setTimeout(() => {\r\n handleClose()\r\n }, (timer || 8) * 1000 - springDuration)\r\n }\r\n\r\n return () => {\r\n timerRef.current && clearTimeout(timerRef.current)\r\n fadeTimerRef.current && clearTimeout(fadeTimerRef.current)\r\n }\r\n }, [])\r\n\r\n return (\r\n <animated.div\r\n className='rf-col-start-1 rf-col-span-full rf-row-start-1 rf-row-span-full'\r\n style={{\r\n backgroundImage: `url(${url})`,\r\n backgroundPosition: 'center',\r\n backgroundRepeat: 'no-repeat',\r\n backgroundSize: 'cover',\r\n ...spring\r\n }}\r\n />\r\n )\r\n}\r\n\r\nexport default ScreenSaver\r\n","import React, { useEffect, useState, useRef } from 'react'\r\nimport { useSpring, animated } from '@react-spring/web'\r\n\r\ninterface SlideShowProps {\r\n urls?: Array<string>\r\n timer?: number\r\n loop?: boolean\r\n springDuration: number\r\n switchComponent: () => void\r\n}\r\n\r\nconst SlideShow = ({ urls, timer, loop, springDuration, switchComponent }: SlideShowProps) => {\r\n const [currentIndex, setCurrentIndex] = useState<number>(0)\r\n const timerRef = useRef<NodeJS.Timer | null>(null)\r\n const fadeTimerRef = useRef<NodeJS.Timer | null>(null)\r\n\r\n const [spring, api] = useSpring(() => ({\r\n from: {\r\n opacity: 0\r\n }\r\n }))\r\n\r\n useEffect(() => {\r\n api.start({\r\n from: {\r\n opacity: 0\r\n },\r\n to: {\r\n opacity: 1\r\n },\r\n config: {\r\n duration: springDuration\r\n }\r\n })\r\n }, [])\r\n\r\n const handleClose = (): void => {\r\n api.start({\r\n from: {\r\n opacity: 1\r\n },\r\n to: {\r\n opacity: 0\r\n },\r\n config: {\r\n duration: springDuration\r\n }\r\n })\r\n\r\n fadeTimerRef?.current && clearTimeout(fadeTimerRef.current)\r\n fadeTimerRef.current = setTimeout(() => {\r\n // Get back to home view\r\n switchComponent()\r\n }, springDuration)\r\n }\r\n\r\n useEffect(() => {\r\n timerRef?.current && clearTimeout(timerRef.current)\r\n if (urls?.length) {\r\n timerRef.current = setTimeout(() => {\r\n currentIndex === urls.length - 1 ? (loop ? setCurrentIndex(0) : handleClose()) : setCurrentIndex(currentIndex + 1)\r\n }, (timer || 5) * 1000)\r\n } else {\r\n switchComponent()\r\n }\r\n }, [currentIndex])\r\n\r\n useEffect(() => {\r\n return () => {\r\n timerRef?.current && clearTimeout(timerRef.current)\r\n fadeTimerRef?.current && clearTimeout(fadeTimerRef.current)\r\n }\r\n }, [])\r\n\r\n return (\r\n <animated.div className='rf-col-start-1 rf-col-span-full rf-row-start-1 rf-row-span-full rf-flex rf-justify-center rf-items-center rf-bg-black' style={{ ...spring }}>\r\n <img className={`${window.innerHeight > window.innerWidth ? 'rf-w-full' : 'rf-h-full'}`} src={urls?.[currentIndex] || ''} alt='slideshow' />\r\n </animated.div>\r\n )\r\n}\r\n\r\nexport default SlideShow\r\n"],"names":[],"version":3,"file":"VeilleManager.443b366e.js.map","sourceRoot":"../"}