@davi-ai/retorik-framework 4.0.3 → 5.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 (84) hide show
  1. package/README.md +13 -0
  2. package/dist/{AttachmentDetail.637ad44f.js → AttachmentDetail.3f9c113d.js} +15 -6
  3. package/dist/AttachmentDetail.3f9c113d.js.map +1 -0
  4. package/dist/{AttachmentDetail.83788045.js → AttachmentDetail.57c5579a.js} +15 -6
  5. package/dist/AttachmentDetail.57c5579a.js.map +1 -0
  6. package/dist/{CustomView.bf84bdf3.js → CustomView.6b96f53f.js} +8 -4
  7. package/dist/CustomView.6b96f53f.js.map +1 -0
  8. package/dist/{CustomView.9930c671.js → CustomView.b32a608f.js} +8 -4
  9. package/dist/CustomView.b32a608f.js.map +1 -0
  10. package/dist/{Emergency.1e63c85f.js → Emergency.43605d14.js} +16 -7
  11. package/dist/Emergency.43605d14.js.map +1 -0
  12. package/dist/{Emergency.89b4d9ed.js → Emergency.f1287bd5.js} +16 -7
  13. package/dist/Emergency.f1287bd5.js.map +1 -0
  14. package/dist/FullScreenImage.17df27bf.js.map +1 -1
  15. package/dist/FullScreenImage.99e19e10.js.map +1 -1
  16. package/dist/{HistoryList.3b4b1ffb.js → HistoryList.c19556a7.js} +8 -2
  17. package/dist/HistoryList.c19556a7.js.map +1 -0
  18. package/dist/{HistoryList.e5c01f21.js → HistoryList.e7262d62.js} +8 -2
  19. package/dist/HistoryList.e7262d62.js.map +1 -0
  20. package/dist/{LanguageChoice.1d866cfa.js → LanguageChoice.54fae1dc.js} +19 -8
  21. package/dist/LanguageChoice.54fae1dc.js.map +1 -0
  22. package/dist/{LanguageChoice.cce361a3.js → LanguageChoice.6e8b74f6.js} +19 -8
  23. package/dist/LanguageChoice.6e8b74f6.js.map +1 -0
  24. package/dist/LittleWeatherContainer.7e41105e.js.map +1 -1
  25. package/dist/LittleWeatherContainer.ee087e22.js.map +1 -1
  26. package/dist/{MapContainer.14c28128.js → MapContainer.25c8f4b4.js} +20 -5
  27. package/dist/MapContainer.25c8f4b4.js.map +1 -0
  28. package/dist/{MapContainer.f22ad81f.js → MapContainer.d00ab5b2.js} +20 -5
  29. package/dist/MapContainer.d00ab5b2.js.map +1 -0
  30. package/dist/{NewsContainer.c0a24775.js → NewsContainer.a39630c3.js} +33 -26
  31. package/dist/NewsContainer.a39630c3.js.map +1 -0
  32. package/dist/{NewsContainer.c3331d80.js → NewsContainer.ec15c3bb.js} +33 -26
  33. package/dist/NewsContainer.ec15c3bb.js.map +1 -0
  34. package/dist/PrintingPreview.375e62b0.js.map +1 -1
  35. package/dist/PrintingPreview.c0ca7706.js.map +1 -1
  36. package/dist/RecognitionManager.c58b8a3d.js +298 -0
  37. package/dist/RecognitionManager.c58b8a3d.js.map +1 -0
  38. package/dist/RecognitionManager.cdfb39fc.js +314 -0
  39. package/dist/RecognitionManager.cdfb39fc.js.map +1 -0
  40. package/dist/SpiritEngineWrapper.21ea10d4.js.map +1 -1
  41. package/dist/SpiritEngineWrapper.39627300.js.map +1 -1
  42. package/dist/SynthesisPonyfillManager.10888d6d.js +888 -0
  43. package/dist/SynthesisPonyfillManager.10888d6d.js.map +1 -0
  44. package/dist/SynthesisPonyfillManager.f9f9a915.js +920 -0
  45. package/dist/SynthesisPonyfillManager.f9f9a915.js.map +1 -0
  46. package/dist/{ThreeJsWrapper.dd4906ff.js → ThreeJsWrapper.0285d280.js} +24 -12
  47. package/dist/ThreeJsWrapper.0285d280.js.map +1 -0
  48. package/dist/{ThreeJsWrapper.c02a077f.js → ThreeJsWrapper.ad746197.js} +24 -11
  49. package/dist/ThreeJsWrapper.ad746197.js.map +1 -0
  50. package/dist/{VeilleManager.72cf0e9c.js → VeilleManager.0b3f2454.js} +18 -17
  51. package/dist/VeilleManager.0b3f2454.js.map +1 -0
  52. package/dist/{VeilleManager.26dcadac.js → VeilleManager.340a7825.js} +18 -17
  53. package/dist/VeilleManager.340a7825.js.map +1 -0
  54. package/dist/{Weather.bb414852.js → Weather.abc13d88.js} +25 -77
  55. package/dist/Weather.abc13d88.js.map +1 -0
  56. package/dist/{Weather.ced9b467.js → Weather.b9d9f82e.js} +25 -77
  57. package/dist/Weather.b9d9f82e.js.map +1 -0
  58. package/dist/index.d.ts +22 -929
  59. package/dist/index.d.ts.map +1 -1
  60. package/dist/index.js +53286 -33038
  61. package/dist/index.js.map +1 -1
  62. package/dist/index.modern.js +51651 -31410
  63. package/dist/index.modern.js.map +1 -1
  64. package/package.json +20 -21
  65. package/dist/AttachmentDetail.637ad44f.js.map +0 -1
  66. package/dist/AttachmentDetail.83788045.js.map +0 -1
  67. package/dist/CustomView.9930c671.js.map +0 -1
  68. package/dist/CustomView.bf84bdf3.js.map +0 -1
  69. package/dist/Emergency.1e63c85f.js.map +0 -1
  70. package/dist/Emergency.89b4d9ed.js.map +0 -1
  71. package/dist/HistoryList.3b4b1ffb.js.map +0 -1
  72. package/dist/HistoryList.e5c01f21.js.map +0 -1
  73. package/dist/LanguageChoice.1d866cfa.js.map +0 -1
  74. package/dist/LanguageChoice.cce361a3.js.map +0 -1
  75. package/dist/MapContainer.14c28128.js.map +0 -1
  76. package/dist/MapContainer.f22ad81f.js.map +0 -1
  77. package/dist/NewsContainer.c0a24775.js.map +0 -1
  78. package/dist/NewsContainer.c3331d80.js.map +0 -1
  79. package/dist/ThreeJsWrapper.c02a077f.js.map +0 -1
  80. package/dist/ThreeJsWrapper.dd4906ff.js.map +0 -1
  81. package/dist/VeilleManager.26dcadac.js.map +0 -1
  82. package/dist/VeilleManager.72cf0e9c.js.map +0 -1
  83. package/dist/Weather.bb414852.js.map +0 -1
  84. package/dist/Weather.ced9b467.js.map +0 -1
@@ -28,8 +28,6 @@ $parcel$export(module.exports, "default", () => $ae415dac8b23893c$export$2e2bcd8
28
28
 
29
29
  var $8ItUL = parcelRequire("8ItUL");
30
30
 
31
- var $4ucVo = parcelRequire("4ucVo");
32
-
33
31
  var $6Wtfz = parcelRequire("6Wtfz");
34
32
 
35
33
  var $lmkZT = parcelRequire("lmkZT");
@@ -88,7 +86,7 @@ const $ae415dac8b23893c$var$VeilleManager = ({ onClose: onClose })=>{
88
86
  // Switch back the muted state (it could have not been changed but for security let's set it)
89
87
  dispatch((0, $8ItUL.storeActions).speech.setMuted(oldMutedRef.current));
90
88
  // Get back to home view
91
- dispatch((0, $8ItUL.storeActions).view.setRoute((0, $4ucVo.Routes).Home));
89
+ dispatch((0, $8ItUL.storeActions).view.setRoute((0, $8ItUL.Routes).Home));
92
90
  onClose();
93
91
  }, $ae415dac8b23893c$var$springDuration);
94
92
  };
@@ -104,16 +102,16 @@ const $ae415dac8b23893c$var$VeilleManager = ({ onClose: onClose })=>{
104
102
  (0, $1cDKu$useEffect)(()=>{
105
103
  veilleDataRef.current = veilleConfiguration;
106
104
  const tempViewArray = [];
107
- veilleConfiguration.views?.screenSaver?.enabled && tempViewArray.push((0, $4ucVo.Routes).ScreenSaver);
108
- veilleConfiguration.views?.news?.enabled && tempViewArray.push((0, $4ucVo.Routes).NewsInVeille);
109
- veilleConfiguration.views?.slideShow?.enabled && tempViewArray.push((0, $4ucVo.Routes).SlideShow);
105
+ veilleConfiguration.views?.screenSaver?.enabled && tempViewArray.push((0, $8ItUL.Routes).ScreenSaver);
106
+ veilleConfiguration.views?.news?.enabled && tempViewArray.push((0, $8ItUL.Routes).NewsInVeille);
107
+ veilleConfiguration.views?.slideShow?.enabled && tempViewArray.push((0, $8ItUL.Routes).SlideShow);
110
108
  // Set loop if there is only 1 item to display
111
109
  setLoop(tempViewArray.length === 1);
112
110
  availableItemsToDisplayRef.current = tempViewArray;
113
111
  currentItemDisplayedRef.current = 0;
114
112
  // Mute the sound if the news in veille has to be muted
115
113
  veilleDataRef.current.views?.news?.muted && dispatch((0, $8ItUL.storeActions).speech.setMuted(true));
116
- dispatch((0, $8ItUL.storeActions).view.setRoute(availableItemsToDisplayRef.current.length ? availableItemsToDisplayRef.current[0] : (0, $4ucVo.Routes).EmptyVeille));
114
+ dispatch((0, $8ItUL.storeActions).view.setRoute(availableItemsToDisplayRef.current.length ? availableItemsToDisplayRef.current[0] : (0, $8ItUL.Routes).EmptyVeille));
117
115
  return ()=>{
118
116
  fadeTimerRef?.current && clearTimeout(fadeTimerRef.current);
119
117
  // Switch back the muted state (it could have not been changed but for security let's set it)
@@ -134,22 +132,22 @@ const $ae415dac8b23893c$var$VeilleManager = ({ onClose: onClose })=>{
134
132
  detectionThreshold: 0.95,
135
133
  onFaceDetected: ()=>handleClose()
136
134
  }),
137
- route === (0, $4ucVo.Routes).EmptyVeille && /*#__PURE__*/ (0, $1cDKu$jsx)((0, $9fA0k.default), {}),
138
- route === (0, $4ucVo.Routes).NewsInVeille && /*#__PURE__*/ (0, $1cDKu$jsx)((0, $6Wtfz.default), {
135
+ route === (0, $8ItUL.Routes).EmptyVeille && /*#__PURE__*/ (0, $1cDKu$jsx)((0, $9fA0k.default), {}),
136
+ route === (0, $8ItUL.Routes).NewsInVeille && /*#__PURE__*/ (0, $1cDKu$jsx)((0, $6Wtfz.default), {
139
137
  hideMenu: true,
140
138
  isRetorikNews: true,
141
139
  handleEndedWithoutloop: switchComponent,
142
140
  loop: loop,
143
141
  fromVeille: true
144
142
  }),
145
- route === (0, $4ucVo.Routes).ScreenSaver && /*#__PURE__*/ (0, $1cDKu$jsx)((0, $62g7u.default), {
143
+ route === (0, $8ItUL.Routes).ScreenSaver && /*#__PURE__*/ (0, $1cDKu$jsx)((0, $62g7u.default), {
146
144
  url: veilleConfiguration.views?.screenSaver?.url,
147
145
  timer: veilleConfiguration.views?.screenSaver?.timerBeforeSwitchInSeconds,
148
146
  loop: loop,
149
147
  springDuration: $ae415dac8b23893c$var$springDuration,
150
148
  switchComponent: switchComponent
151
149
  }),
152
- route === (0, $4ucVo.Routes).SlideShow && /*#__PURE__*/ (0, $1cDKu$jsx)((0, $kBIQ4.default), {
150
+ route === (0, $8ItUL.Routes).SlideShow && /*#__PURE__*/ (0, $1cDKu$jsx)((0, $kBIQ4.default), {
153
151
  urls: veilleConfiguration.views?.slideShow?.urls,
154
152
  timer: veilleConfiguration.views?.slideShow?.timerBeforeSwitchInSeconds,
155
153
  loop: loop,
@@ -159,7 +157,7 @@ const $ae415dac8b23893c$var$VeilleManager = ({ onClose: onClose })=>{
159
157
  ]
160
158
  }),
161
159
  /*#__PURE__*/ (0, $1cDKu$jsx)("div", {
162
- 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",
160
+ className: "rf-z-[40] rf-col-start-1 rf-col-span-full rf-row-start-1 rf-row-span-full rf-bg-transparent rf-cursor-pointer",
163
161
  onClick: ()=>handleClose()
164
162
  })
165
163
  ]
@@ -180,9 +178,10 @@ var $i1OHx = parcelRequire("i1OHx");
180
178
  var $9hDpx = parcelRequire("9hDpx");
181
179
  const $8d9fce4b03a5e10a$var$CallToAction = ()=>{
182
180
  const themeColors = (0, $1cDKu$useSelector)((state)=>state.viewReducer.themeColors);
181
+ const translation = (0, $1cDKu$useSelector)((state)=>state.localeReducer.currentTranslations);
183
182
  const [colorWithTransparency] = (0, $1cDKu$useState)((0, $i1OHx.getColorWithTransparency)(themeColors.primary, 0.5));
184
183
  return /*#__PURE__*/ (0, $1cDKu$jsxs)("div", {
185
- 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",
184
+ className: "rf-absolute rf-z-ui rf-bottom-0 rf-right-0 rf-w-64 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",
186
185
  children: [
187
186
  /*#__PURE__*/ (0, $1cDKu$jsx)("div", {
188
187
  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",
@@ -195,8 +194,8 @@ const $8d9fce4b03a5e10a$var$CallToAction = ()=>{
195
194
  children: [
196
195
  /*#__PURE__*/ (0, $1cDKu$jsx)((0, $9hDpx.default), {}),
197
196
  /*#__PURE__*/ (0, $1cDKu$jsx)("p", {
198
- className: "rf-mx-4",
199
- children: "Click on screen to start"
197
+ className: "rf-ml-16 rf-mr-4",
198
+ children: translation.veille.calltoaction
200
199
  })
201
200
  ]
202
201
  })
@@ -330,12 +329,14 @@ parcelRegister("9fA0k", function(module, exports) {
330
329
  $parcel$export(module.exports, "default", () => $bdd3afba8bcb9c3a$export$2e2bcd8739ae039);
331
330
 
332
331
 
332
+
333
333
  const $bdd3afba8bcb9c3a$var$EmptyVeille = ()=>{
334
+ const translation = (0, $1cDKu$useSelector)((state)=>state.localeReducer.currentTranslations);
334
335
  return /*#__PURE__*/ (0, $1cDKu$jsx)("div", {
335
336
  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",
336
337
  children: /*#__PURE__*/ (0, $1cDKu$jsx)("div", {
337
338
  className: "rf-uppercase rf-font-bold rf-text-3xl rf-text-white rf-animate-pulse",
338
- children: "click or tap on the screen..."
339
+ children: translation.veille.emptyveille
339
340
  })
340
341
  });
341
342
  };
@@ -491,4 +492,4 @@ var $8ccf4a1e66e2b9e3$export$2e2bcd8739ae039 = $8ccf4a1e66e2b9e3$var$SlideShow;
491
492
 
492
493
 
493
494
 
494
- //# sourceMappingURL=VeilleManager.72cf0e9c.js.map
495
+ //# sourceMappingURL=VeilleManager.0b3f2454.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, Routes } from '../../store'\r\n\r\nimport type { VeilleConfiguration } from '../../store/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\n\r\ninterface VeilleManagerProps {\r\n onClose: () => void\r\n}\r\n\r\nconst VeilleManager = ({ onClose }: VeilleManagerProps) => {\r\n const dispatch = useDispatch()\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\r\n const [loop, setLoop] = useState<boolean>(false)\r\n\r\n const veilleDataRef = useRef<VeilleConfiguration>(veilleConfiguration)\r\n const availableItemsToDisplayRef = useRef<Array<Routes>>([])\r\n const currentItemDisplayedRef = useRef<number>(0)\r\n const fadeTimerRef = useRef<ReturnType<typeof setTimeout> | null>(null)\r\n const oldMutedRef = useRef<boolean>(muted)\r\n\r\n const [spring, api] = useSpring(() => ({\r\n from: { opacity: 0 }\r\n }))\r\n\r\n useEffect(() => {\r\n api.start({\r\n from: { opacity: 0 },\r\n to: { opacity: 1 },\r\n config: { duration: springDuration }\r\n })\r\n }, [])\r\n\r\n const handleClose = (): void => {\r\n api.start({\r\n from: { opacity: 1 },\r\n to: { opacity: 0 },\r\n config: { duration: springDuration }\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 onClose()\r\n }, springDuration)\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 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 currentItemDisplayedRef.current = 0\r\n // Mute the sound if the news in veille has to be muted\r\n veilleDataRef.current.views?.news?.muted && dispatch(storeActions.speech.setMuted(true))\r\n dispatch(storeActions.view.setRoute(availableItemsToDisplayRef.current.length ? availableItemsToDisplayRef.current[0] : Routes.EmptyVeille))\r\n\r\n return () => {\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 rf-grid-cols-8 rf-grid-rows-12'\r\n style={{\r\n ...spring\r\n }}\r\n >\r\n <CallToAction />\r\n {veilleConfiguration.autoExitFromWebcam && <FaceDetector detectionThreshold={0.95} onFaceDetected={() => handleClose()} />}\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 <div className='rf-z-[40] rf-col-start-1 rf-col-span-full rf-row-start-1 rf-row-span-full rf-bg-transparent rf-cursor-pointer' onClick={() => handleClose()} />\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 = (): React.JSX.Element => {\r\n const themeColors = useSelector((state: RootState) => state.viewReducer.themeColors)\r\n const translation = useSelector((state: RootState) => state.localeReducer.currentTranslations)\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-64 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-ml-16 rf-mr-4'>{translation.veille.calltoaction}</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\n\r\ninterface FaceDetectorProps {\r\n detectionThreshold: number\r\n onFaceDetected: (detections?: Array<Detection>, imageWidth?: number, imageHeight?: number) => void\r\n showThumbnail?: boolean\r\n rotation?: number\r\n}\r\n\r\nconst runningMode = 'VIDEO'\r\nlet lastVideoTime = -1\r\nconst defaultConstraints: MediaStreamConstraints = {\r\n video: {\r\n facingMode: 'user'\r\n }\r\n}\r\n\r\nconst FaceDetector = ({ detectionThreshold, onFaceDetected, showThumbnail, rotation }: FaceDetectorProps): React.JSX.Element => {\r\n const [webcamWidth, setWebcamWidth] = useState<number>(0)\r\n const [webcamHeight, setWebcamHeight] = useState<number>(0)\r\n const [faceDetector, setFaceDetector] = useState<MediapipeFaceDetector | undefined>()\r\n const videoRef = useRef<HTMLVideoElement>(null)\r\n const rotationRef = useRef<number>(rotation || 0)\r\n\r\n useEffect(() => {\r\n rotationRef.current = rotation || 0\r\n }, [rotation])\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(defaultConstraints)\r\n .then((display) => {\r\n const settings = display.getVideoTracks()[0].getSettings()\r\n setWebcamWidth(settings.width || 0)\r\n setWebcamHeight(settings.height || 0)\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, { rotationDegrees: rotationRef.current }).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(defaultConstraints)\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 ${!showThumbnail && 'rf-invisible'}`}>\r\n <video\r\n ref={videoRef}\r\n src=''\r\n autoPlay\r\n style={{\r\n rotate: `${rotation}deg`,\r\n width: showThumbnail ? webcamWidth / 2 : webcamWidth,\r\n height: showThumbnail ? webcamHeight / 2 : webcamHeight\r\n }}\r\n />\r\n </div>\r\n )\r\n}\r\n\r\nexport default FaceDetector\r\n","import React from 'react'\r\nimport { useSelector } from 'react-redux'\r\nimport { RootState } from '../../store'\r\n\r\nconst EmptyVeille = () => {\r\n const translation = useSelector((state: RootState) => state.localeReducer.currentTranslations)\r\n\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'>{translation.veille.emptyveille}</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<ReturnType<typeof setTimeout> | null>(null)\r\n const fadeTimerRef = useRef<ReturnType<typeof setTimeout> | 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<ReturnType<typeof setTimeout> | null>(null)\r\n const fadeTimerRef = useRef<ReturnType<typeof setTimeout> | 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.0b3f2454.js.map"}
@@ -41,8 +41,6 @@ $parcel$export(module.exports, "default", () => $167bfc94e5487988$export$2e2bcd8
41
41
 
42
42
  var $kpW3P = parcelRequire("kpW3P");
43
43
 
44
- var $7WHA7 = parcelRequire("7WHA7");
45
-
46
44
  var $2sSL9 = parcelRequire("2sSL9");
47
45
 
48
46
  var $kL6vX = parcelRequire("kL6vX");
@@ -102,7 +100,7 @@ const $167bfc94e5487988$var$VeilleManager = ({ onClose: onClose })=>{
102
100
  // Switch back the muted state (it could have not been changed but for security let's set it)
103
101
  dispatch((0, $kpW3P.storeActions).speech.setMuted(oldMutedRef.current));
104
102
  // Get back to home view
105
- dispatch((0, $kpW3P.storeActions).view.setRoute((0, $7WHA7.Routes).Home));
103
+ dispatch((0, $kpW3P.storeActions).view.setRoute((0, $kpW3P.Routes).Home));
106
104
  onClose();
107
105
  }, $167bfc94e5487988$var$springDuration);
108
106
  };
@@ -120,15 +118,15 @@ const $167bfc94e5487988$var$VeilleManager = ({ onClose: onClose })=>{
120
118
  _veilleDataRef_current_views_news, _veilleDataRef_current_views;
121
119
  veilleDataRef.current = veilleConfiguration;
122
120
  const tempViewArray = [];
123
- ((_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);
124
- ((_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);
125
- ((_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);
121
+ ((_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, $kpW3P.Routes).ScreenSaver);
122
+ ((_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, $kpW3P.Routes).NewsInVeille);
123
+ ((_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, $kpW3P.Routes).SlideShow);
126
124
  // Set loop if there is only 1 item to display
127
125
  setLoop(tempViewArray.length === 1);
128
126
  availableItemsToDisplayRef.current = tempViewArray;
129
127
  currentItemDisplayedRef.current = 0;
130
128
  ((_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));
131
- dispatch((0, $kpW3P.storeActions).view.setRoute(availableItemsToDisplayRef.current.length ? availableItemsToDisplayRef.current[0] : (0, $7WHA7.Routes).EmptyVeille));
129
+ dispatch((0, $kpW3P.storeActions).view.setRoute(availableItemsToDisplayRef.current.length ? availableItemsToDisplayRef.current[0] : (0, $kpW3P.Routes).EmptyVeille));
132
130
  return ()=>{
133
131
  (fadeTimerRef === null || fadeTimerRef === void 0 ? void 0 : fadeTimerRef.current) && clearTimeout(fadeTimerRef.current);
134
132
  // Switch back the muted state (it could have not been changed but for security let's set it)
@@ -149,22 +147,22 @@ const $167bfc94e5487988$var$VeilleManager = ({ onClose: onClose })=>{
149
147
  detectionThreshold: 0.95,
150
148
  onFaceDetected: ()=>handleClose()
151
149
  }),
152
- route === (0, $7WHA7.Routes).EmptyVeille && /*#__PURE__*/ (0, $ehKZo$reactjsxruntime.jsx)((0, $8KeRZ.default), {}),
153
- route === (0, $7WHA7.Routes).NewsInVeille && /*#__PURE__*/ (0, $ehKZo$reactjsxruntime.jsx)((0, $2sSL9.default), {
150
+ route === (0, $kpW3P.Routes).EmptyVeille && /*#__PURE__*/ (0, $ehKZo$reactjsxruntime.jsx)((0, $8KeRZ.default), {}),
151
+ route === (0, $kpW3P.Routes).NewsInVeille && /*#__PURE__*/ (0, $ehKZo$reactjsxruntime.jsx)((0, $2sSL9.default), {
154
152
  hideMenu: true,
155
153
  isRetorikNews: true,
156
154
  handleEndedWithoutloop: switchComponent,
157
155
  loop: loop,
158
156
  fromVeille: true
159
157
  }),
160
- route === (0, $7WHA7.Routes).ScreenSaver && /*#__PURE__*/ (0, $ehKZo$reactjsxruntime.jsx)((0, $9x9Q9.default), {
158
+ route === (0, $kpW3P.Routes).ScreenSaver && /*#__PURE__*/ (0, $ehKZo$reactjsxruntime.jsx)((0, $9x9Q9.default), {
161
159
  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,
162
160
  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,
163
161
  loop: loop,
164
162
  springDuration: $167bfc94e5487988$var$springDuration,
165
163
  switchComponent: switchComponent
166
164
  }),
167
- route === (0, $7WHA7.Routes).SlideShow && /*#__PURE__*/ (0, $ehKZo$reactjsxruntime.jsx)((0, $G07Rs.default), {
165
+ route === (0, $kpW3P.Routes).SlideShow && /*#__PURE__*/ (0, $ehKZo$reactjsxruntime.jsx)((0, $G07Rs.default), {
168
166
  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,
169
167
  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,
170
168
  loop: loop,
@@ -174,7 +172,7 @@ const $167bfc94e5487988$var$VeilleManager = ({ onClose: onClose })=>{
174
172
  ]
175
173
  }),
176
174
  /*#__PURE__*/ (0, $ehKZo$reactjsxruntime.jsx)("div", {
177
- 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",
175
+ className: "rf-z-[40] rf-col-start-1 rf-col-span-full rf-row-start-1 rf-row-span-full rf-bg-transparent rf-cursor-pointer",
178
176
  onClick: ()=>handleClose()
179
177
  })
180
178
  ]
@@ -195,9 +193,10 @@ var $58ljk = parcelRequire("58ljk");
195
193
  var $69ngO = parcelRequire("69ngO");
196
194
  const $42bad5eabafac04e$var$CallToAction = ()=>{
197
195
  const themeColors = (0, $ehKZo$reactredux.useSelector)((state)=>state.viewReducer.themeColors);
196
+ const translation = (0, $ehKZo$reactredux.useSelector)((state)=>state.localeReducer.currentTranslations);
198
197
  const [colorWithTransparency] = (0, $ehKZo$react.useState)((0, $58ljk.getColorWithTransparency)(themeColors.primary, 0.5));
199
198
  return /*#__PURE__*/ (0, $ehKZo$reactjsxruntime.jsxs)("div", {
200
- 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",
199
+ className: "rf-absolute rf-z-ui rf-bottom-0 rf-right-0 rf-w-64 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",
201
200
  children: [
202
201
  /*#__PURE__*/ (0, $ehKZo$reactjsxruntime.jsx)("div", {
203
202
  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",
@@ -210,8 +209,8 @@ const $42bad5eabafac04e$var$CallToAction = ()=>{
210
209
  children: [
211
210
  /*#__PURE__*/ (0, $ehKZo$reactjsxruntime.jsx)((0, $69ngO.default), {}),
212
211
  /*#__PURE__*/ (0, $ehKZo$reactjsxruntime.jsx)("p", {
213
- className: "rf-mx-4",
214
- children: "Click on screen to start"
212
+ className: "rf-ml-16 rf-mr-4",
213
+ children: translation.veille.calltoaction
215
214
  })
216
215
  ]
217
216
  })
@@ -345,12 +344,14 @@ parcelRegister("8KeRZ", function(module, exports) {
345
344
  $parcel$export(module.exports, "default", () => $dadec6c8a2c8bf97$export$2e2bcd8739ae039);
346
345
 
347
346
 
347
+
348
348
  const $dadec6c8a2c8bf97$var$EmptyVeille = ()=>{
349
+ const translation = (0, $ehKZo$reactredux.useSelector)((state)=>state.localeReducer.currentTranslations);
349
350
  return /*#__PURE__*/ (0, $ehKZo$reactjsxruntime.jsx)("div", {
350
351
  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",
351
352
  children: /*#__PURE__*/ (0, $ehKZo$reactjsxruntime.jsx)("div", {
352
353
  className: "rf-uppercase rf-font-bold rf-text-3xl rf-text-white rf-animate-pulse",
353
- children: "click or tap on the screen..."
354
+ children: translation.veille.emptyveille
354
355
  })
355
356
  });
356
357
  };
@@ -506,4 +507,4 @@ var $a2463c3887d0d0a1$export$2e2bcd8739ae039 = $a2463c3887d0d0a1$var$SlideShow;
506
507
 
507
508
 
508
509
 
509
- //# sourceMappingURL=VeilleManager.26dcadac.js.map
510
+ //# sourceMappingURL=VeilleManager.340a7825.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, Routes } from '../../store'\r\n\r\nimport type { VeilleConfiguration } from '../../store/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\n\r\ninterface VeilleManagerProps {\r\n onClose: () => void\r\n}\r\n\r\nconst VeilleManager = ({ onClose }: VeilleManagerProps) => {\r\n const dispatch = useDispatch()\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\r\n const [loop, setLoop] = useState<boolean>(false)\r\n\r\n const veilleDataRef = useRef<VeilleConfiguration>(veilleConfiguration)\r\n const availableItemsToDisplayRef = useRef<Array<Routes>>([])\r\n const currentItemDisplayedRef = useRef<number>(0)\r\n const fadeTimerRef = useRef<ReturnType<typeof setTimeout> | null>(null)\r\n const oldMutedRef = useRef<boolean>(muted)\r\n\r\n const [spring, api] = useSpring(() => ({\r\n from: { opacity: 0 }\r\n }))\r\n\r\n useEffect(() => {\r\n api.start({\r\n from: { opacity: 0 },\r\n to: { opacity: 1 },\r\n config: { duration: springDuration }\r\n })\r\n }, [])\r\n\r\n const handleClose = (): void => {\r\n api.start({\r\n from: { opacity: 1 },\r\n to: { opacity: 0 },\r\n config: { duration: springDuration }\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 onClose()\r\n }, springDuration)\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 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 currentItemDisplayedRef.current = 0\r\n // Mute the sound if the news in veille has to be muted\r\n veilleDataRef.current.views?.news?.muted && dispatch(storeActions.speech.setMuted(true))\r\n dispatch(storeActions.view.setRoute(availableItemsToDisplayRef.current.length ? availableItemsToDisplayRef.current[0] : Routes.EmptyVeille))\r\n\r\n return () => {\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 rf-grid-cols-8 rf-grid-rows-12'\r\n style={{\r\n ...spring\r\n }}\r\n >\r\n <CallToAction />\r\n {veilleConfiguration.autoExitFromWebcam && <FaceDetector detectionThreshold={0.95} onFaceDetected={() => handleClose()} />}\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 <div className='rf-z-[40] rf-col-start-1 rf-col-span-full rf-row-start-1 rf-row-span-full rf-bg-transparent rf-cursor-pointer' onClick={() => handleClose()} />\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 = (): React.JSX.Element => {\r\n const themeColors = useSelector((state: RootState) => state.viewReducer.themeColors)\r\n const translation = useSelector((state: RootState) => state.localeReducer.currentTranslations)\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-64 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-ml-16 rf-mr-4'>{translation.veille.calltoaction}</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\n\r\ninterface FaceDetectorProps {\r\n detectionThreshold: number\r\n onFaceDetected: (detections?: Array<Detection>, imageWidth?: number, imageHeight?: number) => void\r\n showThumbnail?: boolean\r\n rotation?: number\r\n}\r\n\r\nconst runningMode = 'VIDEO'\r\nlet lastVideoTime = -1\r\nconst defaultConstraints: MediaStreamConstraints = {\r\n video: {\r\n facingMode: 'user'\r\n }\r\n}\r\n\r\nconst FaceDetector = ({ detectionThreshold, onFaceDetected, showThumbnail, rotation }: FaceDetectorProps): React.JSX.Element => {\r\n const [webcamWidth, setWebcamWidth] = useState<number>(0)\r\n const [webcamHeight, setWebcamHeight] = useState<number>(0)\r\n const [faceDetector, setFaceDetector] = useState<MediapipeFaceDetector | undefined>()\r\n const videoRef = useRef<HTMLVideoElement>(null)\r\n const rotationRef = useRef<number>(rotation || 0)\r\n\r\n useEffect(() => {\r\n rotationRef.current = rotation || 0\r\n }, [rotation])\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(defaultConstraints)\r\n .then((display) => {\r\n const settings = display.getVideoTracks()[0].getSettings()\r\n setWebcamWidth(settings.width || 0)\r\n setWebcamHeight(settings.height || 0)\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, { rotationDegrees: rotationRef.current }).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(defaultConstraints)\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 ${!showThumbnail && 'rf-invisible'}`}>\r\n <video\r\n ref={videoRef}\r\n src=''\r\n autoPlay\r\n style={{\r\n rotate: `${rotation}deg`,\r\n width: showThumbnail ? webcamWidth / 2 : webcamWidth,\r\n height: showThumbnail ? webcamHeight / 2 : webcamHeight\r\n }}\r\n />\r\n </div>\r\n )\r\n}\r\n\r\nexport default FaceDetector\r\n","import React from 'react'\r\nimport { useSelector } from 'react-redux'\r\nimport { RootState } from '../../store'\r\n\r\nconst EmptyVeille = () => {\r\n const translation = useSelector((state: RootState) => state.localeReducer.currentTranslations)\r\n\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'>{translation.veille.emptyveille}</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<ReturnType<typeof setTimeout> | null>(null)\r\n const fadeTimerRef = useRef<ReturnType<typeof setTimeout> | 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<ReturnType<typeof setTimeout> | null>(null)\r\n const fadeTimerRef = useRef<ReturnType<typeof setTimeout> | 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.340a7825.js.map","sourceRoot":"../"}
@@ -45,17 +45,16 @@ var $7WHA7 = parcelRequire("7WHA7");
45
45
 
46
46
  var $eYKUg = parcelRequire("eYKUg");
47
47
 
48
- var $aA7FU = parcelRequire("aA7FU");
49
-
50
48
  var $lONbp = parcelRequire("lONbp");
51
49
 
52
50
  var $6tFNo = parcelRequire("6tFNo");
53
51
 
54
- var $bUTyR = parcelRequire("bUTyR");
52
+ var $6GlMG = parcelRequire("6GlMG");
55
53
  const $becba6a72493aae8$var$Weather = ({ handleClose: handleClose })=>{
56
54
  var _configuration_position, _configuration_position1;
57
55
  const dispatch = (0, $avS3e$reactredux.useDispatch)();
58
56
  const locale = (0, $avS3e$reactredux.useSelector)((state)=>state.localeReducer.locale);
57
+ const translation = (0, $avS3e$reactredux.useSelector)((state)=>state.localeReducer.currentTranslations);
59
58
  const configuration = (0, $avS3e$reactredux.useSelector)((state)=>state.retorikReducer.configuration);
60
59
  const currentDeviceType = (0, $avS3e$reactredux.useSelector)((state)=>state.viewReducer.currentDeviceType);
61
60
  const isMobile = (0, $avS3e$reactredux.useSelector)((state)=>state.viewReducer.isMobile);
@@ -63,7 +62,7 @@ const $becba6a72493aae8$var$Weather = ({ handleClose: handleClose })=>{
63
62
  var _configuration_position, _configuration_position1;
64
63
  if (!((_configuration_position = configuration.position) === null || _configuration_position === void 0 ? void 0 : _configuration_position.latitude) || !((_configuration_position1 = configuration.position) === null || _configuration_position1 === void 0 ? void 0 : _configuration_position1.longitude)) {
65
64
  dispatch((0, $kpW3P.storeActions).retorik.setShowPositionModal(true));
66
- dispatch((0, $kpW3P.storeActions).utils.setCurrentSubView((0, $7WHA7.CurrentSubView).none));
65
+ dispatch((0, $kpW3P.storeActions).utils.setCurrentSubView((0, $kpW3P.CurrentSubView).none));
67
66
  }
68
67
  }, [
69
68
  configuration.position
@@ -78,7 +77,13 @@ const $becba6a72493aae8$var$Weather = ({ handleClose: handleClose })=>{
78
77
  name: 'Davi.CloseWindowWeather'
79
78
  }))
80
79
  }));
81
- handleClose ? handleClose() : dispatch((0, $kpW3P.storeActions).utils.setCurrentSubView((0, $7WHA7.CurrentSubView).none));
80
+ dispatch((0, $kpW3P.storeActions).livekit.sendEvent({
81
+ name: 'Davi.CloseWindow',
82
+ callback: ()=>dispatch((0, $kpW3P.storeActions).livekit.sendEvent({
83
+ name: 'Davi.CloseWindowWeather'
84
+ }))
85
+ }));
86
+ handleClose ? handleClose() : dispatch((0, $kpW3P.storeActions).utils.setCurrentSubView((0, $kpW3P.CurrentSubView).none));
82
87
  };
83
88
  return /*#__PURE__*/ (0, $avS3e$reactjsxruntime.jsxs)((0, $eYKUg.default), {
84
89
  target: (0, $7WHA7.TemplateTarget).weather,
@@ -87,11 +92,17 @@ const $becba6a72493aae8$var$Weather = ({ handleClose: handleClose })=>{
87
92
  /*#__PURE__*/ (0, $avS3e$reactjsxruntime.jsxs)("div", {
88
93
  className: `rf-h-full rf-w-full rf-flex rf-flex-col ${isMobile ? 'rf-px-4' : 'rf-items-center'}`,
89
94
  children: [
90
- isMobile ? /*#__PURE__*/ (0, $avS3e$reactjsxruntime.jsx)((0, $bUTyR.default), {
91
- subView: (0, $7WHA7.AvailableViews).weather,
92
- className: "rf-border-b rf-border-b-menuBorder"
93
- }) : /*#__PURE__*/ (0, $avS3e$reactjsxruntime.jsx)((0, $aA7FU.default), {
94
- subView: (0, $7WHA7.AvailableViews).weather
95
+ /*#__PURE__*/ (0, $avS3e$reactjsxruntime.jsxs)("div", {
96
+ className: `rf-flex rf-flex-row rf-w-full large:rf-pt-4 large:rf-pl-4 large-vertical:rf-pt-8 large-vertical:rf-pl-0 rf-justify-start large-vertical:rf-justify-center rf-items-end large:rf-items-center ${isMobile ? 'rf-py-2 rf-border-b rf-border-b-menuBorder' : ''}`,
97
+ children: [
98
+ /*#__PURE__*/ (0, $avS3e$reactjsxruntime.jsx)((0, $6GlMG.WeatherIcon), {
99
+ className: "rf-h-8 rf-w-8 large:rf-h-16 large:rf-w-16 large-vertical:rf-h-24 large-vertical:rf-w-24"
100
+ }),
101
+ /*#__PURE__*/ (0, $avS3e$reactjsxruntime.jsx)("div", {
102
+ className: "rf-ml-2 rf-capitalize large:rf-uppercase large:rf-text-[#575F6B] rf-subtitle-size-auto",
103
+ children: translation.weather.shorttitle
104
+ })
105
+ ]
95
106
  }),
96
107
  /*#__PURE__*/ (0, $avS3e$reactjsxruntime.jsx)((0, ($parcel$interopDefault($avS3e$daviairetorikweather))), {
97
108
  locale: locale,
@@ -114,38 +125,6 @@ const $becba6a72493aae8$var$Weather = ({ handleClose: handleClose })=>{
114
125
  var $becba6a72493aae8$export$2e2bcd8739ae039 = $becba6a72493aae8$var$Weather;
115
126
 
116
127
  });
117
- parcelRegister("aA7FU", function(module, exports) {
118
-
119
- $parcel$export(module.exports, "default", () => $5aac785fee9416e3$export$2e2bcd8739ae039);
120
-
121
-
122
-
123
-
124
- var $7WHA7 = parcelRequire("7WHA7");
125
-
126
- var $6GlMG = parcelRequire("6GlMG");
127
- const $5aac785fee9416e3$var$iconClassname = 'rf-h-16 rf-w-16 large-vertical:rf-h-24 large-vertical:rf-w-24';
128
- const $5aac785fee9416e3$var$LargeIconAndTitle = ({ subView: subView, className: className })=>{
129
- const translation = (0, $avS3e$reactredux.useSelector)((state)=>state.localeReducer.currentTranslations);
130
- return /*#__PURE__*/ (0, $avS3e$reactjsxruntime.jsxs)("div", {
131
- className: `rf-hidden large:rf-flex rf-w-full rf-pt-4 large-vertical:rf-pt-8 rf-pl-4 large-vertical:rf-pl-0 rf-flex-row rf-justify-start large-vertical:rf-justify-center rf-items-center ${className}`,
132
- children: [
133
- subView === (0, $7WHA7.AvailableViews).weather ? /*#__PURE__*/ (0, $avS3e$reactjsxruntime.jsx)($6GlMG.WeatherIcon, {
134
- className: $5aac785fee9416e3$var$iconClassname
135
- }) : subView === (0, $7WHA7.AvailableViews).emergency ? /*#__PURE__*/ (0, $avS3e$reactjsxruntime.jsx)($6GlMG.EmergencyIcon, {
136
- className: $5aac785fee9416e3$var$iconClassname
137
- }) : /*#__PURE__*/ (0, $avS3e$reactjsxruntime.jsx)((0, ($parcel$interopDefault($avS3e$react))).Fragment, {}),
138
- /*#__PURE__*/ (0, $avS3e$reactjsxruntime.jsx)("div", {
139
- className: "rf-ml-2 rf-uppercase rf-text-[#575F6B] rf-subtitle-size-auto",
140
- children: translation[subView]
141
- })
142
- ]
143
- });
144
- };
145
- var $5aac785fee9416e3$export$2e2bcd8739ae039 = $5aac785fee9416e3$var$LargeIconAndTitle;
146
-
147
- });
148
-
149
128
  parcelRegister("6tFNo", function(module, exports) {
150
129
 
151
130
  $parcel$export(module.exports, "default", () => $ca477ffba32efc70$export$2e2bcd8739ae039);
@@ -157,6 +136,7 @@ $parcel$export(module.exports, "default", () => $ca477ffba32efc70$export$2e2bcd8
157
136
  var $hQSgy = parcelRequire("hQSgy");
158
137
  const $ca477ffba32efc70$var$OpenMeteoAttribution = ()=>{
159
138
  const isUsedOnBorne = (0, $avS3e$reactredux.useSelector)((state)=>state.retorikReducer.configuration.isUsedOnBorne);
139
+ const translation = (0, $avS3e$reactredux.useSelector)((state)=>state.localeReducer.currentTranslations);
160
140
  const [qrCodeData, setQrCodeData] = (0, $avS3e$react.useState)();
161
141
  const [showQrCode, setShowQrCode] = (0, $avS3e$react.useState)(false);
162
142
  const setQrCodeDataAsync = async ()=>{
@@ -178,7 +158,7 @@ const $ca477ffba32efc70$var$OpenMeteoAttribution = ()=>{
178
158
  className: "rf-relative rf-text-sm hover:rf-cursor-pointer",
179
159
  onClick: handleClick,
180
160
  children: [
181
- "Weather data by Open-Meteo.com",
161
+ translation.weather.attribution,
182
162
  showQrCode && qrCodeData ? /*#__PURE__*/ (0, $avS3e$reactjsxruntime.jsx)("div", {
183
163
  className: "rf-absolute rf-left-1/2 rf-top-0 -rf-translate-x-1/2 -rf-translate-y-full",
184
164
  children: /*#__PURE__*/ (0, $avS3e$reactjsxruntime.jsx)((0, $hQSgy.default), {
@@ -192,7 +172,7 @@ const $ca477ffba32efc70$var$OpenMeteoAttribution = ()=>{
192
172
  target: "_blank",
193
173
  rel: "noreferrer noopener",
194
174
  className: "rf-text-sm",
195
- children: "Weather data by open-meteo.com"
175
+ children: translation.weather.attribution
196
176
  })
197
177
  });
198
178
  };
@@ -200,38 +180,6 @@ var $ca477ffba32efc70$export$2e2bcd8739ae039 = $ca477ffba32efc70$var$OpenMeteoAt
200
180
 
201
181
  });
202
182
 
203
- parcelRegister("bUTyR", function(module, exports) {
204
-
205
- $parcel$export(module.exports, "default", () => $5ec58a98f8a43d3b$export$2e2bcd8739ae039);
206
-
207
-
208
-
209
-
210
- var $7WHA7 = parcelRequire("7WHA7");
211
-
212
- var $6GlMG = parcelRequire("6GlMG");
213
- const $5ec58a98f8a43d3b$var$iconClassname = 'rf-h-8 rf-w-8';
214
- const $5ec58a98f8a43d3b$var$MobileIconAndTitle = ({ subView: subView, className: className })=>{
215
- const translation = (0, $avS3e$reactredux.useSelector)((state)=>state.localeReducer.currentTranslations);
216
- return /*#__PURE__*/ (0, $avS3e$reactjsxruntime.jsxs)("div", {
217
- className: `large:rf-hidden rf-py-2 rf-flex rf-flex-row rf-items-end ${className}`,
218
- children: [
219
- subView === (0, $7WHA7.AvailableViews).weather ? /*#__PURE__*/ (0, $avS3e$reactjsxruntime.jsx)($6GlMG.WeatherIcon, {
220
- className: $5ec58a98f8a43d3b$var$iconClassname
221
- }) : subView === (0, $7WHA7.AvailableViews).emergency ? /*#__PURE__*/ (0, $avS3e$reactjsxruntime.jsx)($6GlMG.EmergencyIcon, {
222
- className: $5ec58a98f8a43d3b$var$iconClassname
223
- }) : /*#__PURE__*/ (0, $avS3e$reactjsxruntime.jsx)((0, ($parcel$interopDefault($avS3e$react))).Fragment, {}),
224
- /*#__PURE__*/ (0, $avS3e$reactjsxruntime.jsx)("div", {
225
- className: "rf-ml-2 rf-capitalize rf-subtitle-size-auto",
226
- children: translation[subView]
227
- })
228
- ]
229
- });
230
- };
231
- var $5ec58a98f8a43d3b$export$2e2bcd8739ae039 = $5ec58a98f8a43d3b$var$MobileIconAndTitle;
232
-
233
- });
234
-
235
183
 
236
184
 
237
- //# sourceMappingURL=Weather.bb414852.js.map
185
+ //# sourceMappingURL=Weather.abc13d88.js.map
@@ -0,0 +1 @@
1
+ {"mappings":"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","sources":["src/components/Weather/Weather.tsx","src/components/Weather/OpenMeteoAttribution.tsx"],"sourcesContent":["import React, { useLayoutEffect } from 'react'\r\nimport WeatherContent from '@davi-ai/retorik-weather'\r\nimport { useSelector, useDispatch } from 'react-redux'\r\nimport { RootState, storeActions, CurrentSubView } from '../../store'\r\n\r\nimport { TemplateTarget } from '../../models/enums'\r\n\r\nimport TemplateGlobal from '../Templates/TemplateGlobal'\r\nimport AbsoluteLargeClosingButton from '../Utils/SubView/AbsoluteLargeClosingButton'\r\nimport OpenMeteoAttribution from './OpenMeteoAttribution'\r\nimport { WeatherIcon } from '../Icons/ViewIcons'\r\n\r\ninterface WeatherProps {\r\n handleClose?: () => void\r\n}\r\n\r\nconst Weather = ({ handleClose }: WeatherProps): React.JSX.Element => {\r\n const dispatch = useDispatch()\r\n const locale = useSelector((state: RootState) => state.localeReducer.locale)\r\n const translation = useSelector((state: RootState) => state.localeReducer.currentTranslations)\r\n const configuration = useSelector((state: RootState) => state.retorikReducer.configuration)\r\n const currentDeviceType = useSelector((state: RootState) => state.viewReducer.currentDeviceType)\r\n const isMobile = useSelector((state: RootState) => state.viewReducer.isMobile)\r\n\r\n useLayoutEffect(() => {\r\n if (!configuration.position?.latitude || !configuration.position?.longitude) {\r\n dispatch(storeActions.retorik.setShowPositionModal(true))\r\n dispatch(storeActions.utils.setCurrentSubView(CurrentSubView.none))\r\n }\r\n }, [configuration.position])\r\n\r\n /**\r\n * On call :\r\n * - set RetorikContext's displayWeather state to false\r\n */\r\n const handleBack = (): void => {\r\n dispatch(storeActions.directline.sendEvent({ name: 'Davi.CloseWindow', callback: () => dispatch(storeActions.directline.sendEvent({ name: 'Davi.CloseWindowWeather' })) }))\r\n dispatch(storeActions.livekit.sendEvent({ name: 'Davi.CloseWindow', callback: () => dispatch(storeActions.livekit.sendEvent({ name: 'Davi.CloseWindowWeather' })) }))\r\n handleClose ? handleClose() : dispatch(storeActions.utils.setCurrentSubView(CurrentSubView.none))\r\n }\r\n\r\n return (\r\n <TemplateGlobal target={TemplateTarget.weather} onClick={handleBack}>\r\n <div className={`rf-h-full rf-w-full rf-flex rf-flex-col ${isMobile ? 'rf-px-4' : 'rf-items-center'}`}>\r\n {/* Weather icon + title */}\r\n <div\r\n className={`rf-flex rf-flex-row rf-w-full large:rf-pt-4 large:rf-pl-4 large-vertical:rf-pt-8 large-vertical:rf-pl-0 rf-justify-start large-vertical:rf-justify-center rf-items-end large:rf-items-center ${isMobile ? 'rf-py-2 rf-border-b rf-border-b-menuBorder' : ''}`}\r\n >\r\n {/* Icon */}\r\n <WeatherIcon className='rf-h-8 rf-w-8 large:rf-h-16 large:rf-w-16 large-vertical:rf-h-24 large-vertical:rf-w-24' />\r\n {/* Title */}\r\n <div className='rf-ml-2 rf-capitalize large:rf-uppercase large:rf-text-[#575F6B] rf-subtitle-size-auto'>{translation.weather.shorttitle}</div>\r\n </div>\r\n\r\n {/* Weather data */}\r\n <WeatherContent\r\n locale={locale}\r\n deviceType={currentDeviceType}\r\n position={{\r\n latitude: configuration.position?.latitude || 0,\r\n longitude: configuration.position?.longitude || 0\r\n }}\r\n />\r\n\r\n <OpenMeteoAttribution />\r\n </div>\r\n\r\n {/* Closing button */}\r\n {!isMobile && <AbsoluteLargeClosingButton dashboardVisible={true} onClick={handleBack} />}\r\n </TemplateGlobal>\r\n )\r\n}\r\n\r\nexport default Weather\r\n","import React, { useEffect, useState } from 'react'\r\nimport QRCode from 'qrcode'\r\nimport { useSelector } from 'react-redux'\r\nimport { RootState } from '../../store'\r\nimport QRCodeComponent from '../Utils/QRCodeComponent'\r\n\r\nconst OpenMeteoAttribution = (): React.JSX.Element => {\r\n const isUsedOnBorne = useSelector((state: RootState) => state.retorikReducer.configuration.isUsedOnBorne)\r\n const translation = useSelector((state: RootState) => state.localeReducer.currentTranslations)\r\n const [qrCodeData, setQrCodeData] = useState<string>()\r\n const [showQrCode, setShowQrCode] = useState<boolean>(false)\r\n\r\n const setQrCodeDataAsync = async (): Promise<void> => {\r\n const qrCodeString = await QRCode.toDataURL('https://open-meteo.com/')\r\n setQrCodeData(qrCodeString)\r\n }\r\n\r\n useEffect(() => {\r\n isUsedOnBorne && setQrCodeDataAsync()\r\n }, [isUsedOnBorne])\r\n\r\n const handleClick = (): void => {\r\n setShowQrCode((current) => !current)\r\n }\r\n\r\n return (\r\n <div className='rf-w-full rf-py-2 rf-flex rf-justify-center'>\r\n {isUsedOnBorne ? (\r\n <React.Fragment>\r\n <div className='rf-relative rf-text-sm hover:rf-cursor-pointer' onClick={handleClick}>\r\n {translation.weather.attribution}\r\n {showQrCode && qrCodeData ? (\r\n <div className='rf-absolute rf-left-1/2 rf-top-0 -rf-translate-x-1/2 -rf-translate-y-full'>\r\n <QRCodeComponent src={qrCodeData} />\r\n </div>\r\n ) : (\r\n <React.Fragment />\r\n )}\r\n </div>\r\n </React.Fragment>\r\n ) : (\r\n <a href='https://open-meteo.com/' target='_blank' rel='noreferrer noopener' className='rf-text-sm'>\r\n {translation.weather.attribution}\r\n </a>\r\n )}\r\n </div>\r\n )\r\n}\r\n\r\nexport default OpenMeteoAttribution\r\n"],"names":[],"version":3,"file":"Weather.abc13d88.js.map","sourceRoot":"../"}