@davi-ai/retorik-framework 3.2.3 → 3.2.5

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 (48) hide show
  1. package/dist/{AttachmentDetail.1e06c2a5.js → AttachmentDetail.0a576bf3.js} +12 -13
  2. package/dist/AttachmentDetail.0a576bf3.js.map +1 -0
  3. package/dist/{AttachmentDetail.c6c297df.js → AttachmentDetail.c4286a45.js} +12 -13
  4. package/dist/AttachmentDetail.c4286a45.js.map +1 -0
  5. package/dist/{CustomView.90d2a13d.js → CustomView.913a9f32.js} +6 -7
  6. package/dist/CustomView.913a9f32.js.map +1 -0
  7. package/dist/{CustomView.080c8028.js → CustomView.edf84de1.js} +6 -7
  8. package/dist/CustomView.edf84de1.js.map +1 -0
  9. package/dist/{Emergency.a21f837c.js → Emergency.0cf005ce.js} +2 -3
  10. package/dist/Emergency.0cf005ce.js.map +1 -0
  11. package/dist/{Emergency.423214ad.js → Emergency.897ee3c7.js} +2 -3
  12. package/dist/Emergency.897ee3c7.js.map +1 -0
  13. package/dist/{HistoryList.5fd6aa12.js → HistoryList.03a56119.js} +3 -7
  14. package/dist/HistoryList.03a56119.js.map +1 -0
  15. package/dist/{HistoryList.50ff0fd9.js → HistoryList.4c303dc6.js} +3 -7
  16. package/dist/HistoryList.4c303dc6.js.map +1 -0
  17. package/dist/{LanguageChoice.61e36c1d.js → LanguageChoice.623ee802.js} +2 -5
  18. package/dist/LanguageChoice.623ee802.js.map +1 -0
  19. package/dist/{LanguageChoice.1579b654.js → LanguageChoice.ff0cd04c.js} +2 -5
  20. package/dist/LanguageChoice.ff0cd04c.js.map +1 -0
  21. package/dist/{NewsContainer.932174e9.js → NewsContainer.a91d9131.js} +17 -14
  22. package/dist/NewsContainer.a91d9131.js.map +1 -0
  23. package/dist/{NewsContainer.67f04b19.js → NewsContainer.f0d2ee9c.js} +17 -14
  24. package/dist/NewsContainer.f0d2ee9c.js.map +1 -0
  25. package/dist/{Weather.661c2cac.js → Weather.99917b66.js} +2 -3
  26. package/dist/Weather.99917b66.js.map +1 -0
  27. package/dist/{Weather.fb22fba3.js → Weather.cf58823d.js} +2 -3
  28. package/dist/Weather.cf58823d.js.map +1 -0
  29. package/dist/index.d.ts.map +1 -1
  30. package/dist/index.js +500 -689
  31. package/dist/index.js.map +1 -1
  32. package/dist/index.modern.js +485 -682
  33. package/dist/index.modern.js.map +1 -1
  34. package/package.json +1 -1
  35. package/dist/AttachmentDetail.1e06c2a5.js.map +0 -1
  36. package/dist/AttachmentDetail.c6c297df.js.map +0 -1
  37. package/dist/CustomView.080c8028.js.map +0 -1
  38. package/dist/CustomView.90d2a13d.js.map +0 -1
  39. package/dist/Emergency.423214ad.js.map +0 -1
  40. package/dist/Emergency.a21f837c.js.map +0 -1
  41. package/dist/HistoryList.50ff0fd9.js.map +0 -1
  42. package/dist/HistoryList.5fd6aa12.js.map +0 -1
  43. package/dist/LanguageChoice.1579b654.js.map +0 -1
  44. package/dist/LanguageChoice.61e36c1d.js.map +0 -1
  45. package/dist/NewsContainer.67f04b19.js.map +0 -1
  46. package/dist/NewsContainer.932174e9.js.map +0 -1
  47. package/dist/Weather.661c2cac.js.map +0 -1
  48. package/dist/Weather.fb22fba3.js.map +0 -1
@@ -75,7 +75,6 @@ const $d796192f79db347a$var$springLeaveDuration = 2500;
75
75
  const $d796192f79db347a$var$AttachmentDetails = ()=>{
76
76
  var _content_media;
77
77
  const detailedItemContent = (0, $tR7No.default)();
78
- const isRTL = (0, $6Q0mk.useLocaleStore)((state)=>state.isRTL);
79
78
  const locale = (0, $6Q0mk.useLocaleStore)((state)=>state.locale);
80
79
  const isUsedOnBorne = (0, $6EkQS.useRetorikStore)((state)=>state.configuration.isUsedOnBorne);
81
80
  const baseAddress = (0, $6EkQS.useRetorikStore)((state)=>state.baseAddress);
@@ -122,7 +121,7 @@ const $d796192f79db347a$var$AttachmentDetails = ()=>{
122
121
  ((_content_category = content.category) === null || _content_category === void 0 ? void 0 : _content_category.id) && setColor((0, $iUeqp.getColorFromCategoryId)(content.category.id, themeColors));
123
122
  api.start({
124
123
  from: {
125
- transform: isRTL ? 'translateX(100%)' : 'translateX(-100%)'
124
+ transform: 'translateX(-100%)'
126
125
  },
127
126
  to: {
128
127
  transform: 'translateX(0%)'
@@ -143,7 +142,7 @@ const $d796192f79db347a$var$AttachmentDetails = ()=>{
143
142
  transform: 'translateX(0%)'
144
143
  },
145
144
  to: {
146
- transform: isRTL ? 'translateX(100%)' : 'translateX(-100%)'
145
+ transform: 'translateX(-100%)'
147
146
  },
148
147
  config: {
149
148
  duration: $d796192f79db347a$var$springLeaveDuration,
@@ -153,8 +152,7 @@ const $d796192f79db347a$var$AttachmentDetails = ()=>{
153
152
  setCloseDetailedPOI(false);
154
153
  setRetorikEvent((0, $7WHA7.RetorikEvent).DetailViewClose);
155
154
  timerRef.current = setTimeout(()=>{
156
- sendEvent('Davi.CloseWindow', null);
157
- sendEvent('Davi.CloseWindowDetailed', null);
155
+ sendEvent('Davi.CloseWindow', null, ()=>sendEvent('Davi.CloseWindowDetailed', null));
158
156
  setContent(undefined);
159
157
  timerRef.current = null;
160
158
  }, $d796192f79db347a$var$springLeaveDuration);
@@ -485,12 +483,12 @@ const $f18ad223fcd061b7$var$DetailedTitle = ({ category: category, title: title,
485
483
  className: "rf-relative rf-pb-4 rf-flex-col rf-items-start rf-justify-center",
486
484
  children: [
487
485
  customerReviews && /*#__PURE__*/ (0, $ajtMF$reactjsxruntime.jsx)((0, $WeQpM.default), {
488
- className: "rf-absolute rf-hidden large-vertical:rf-block rf-top-0 ltr:rf-right-0 rtl:rf-left-0",
486
+ className: "rf-absolute rf-hidden large-vertical:rf-block rf-top-0 rf-right-0",
489
487
  color: color,
490
488
  customerReviews: customerReviews
491
489
  }),
492
490
  /*#__PURE__*/ (0, $ajtMF$reactjsxruntime.jsxs)("div", {
493
- className: "rf-w-full rf-flex rf-flex-row rf-justify-between ltr:rf-items-start rtl:rf-items-end",
491
+ className: "rf-w-full rf-flex rf-flex-row rf-justify-between rf-items-start",
494
492
  children: [
495
493
  isMobile && /*#__PURE__*/ (0, $ajtMF$reactjsxruntime.jsx)((0, $7v7LH.BackButton), {
496
494
  title: translation.common.back,
@@ -510,7 +508,7 @@ const $f18ad223fcd061b7$var$DetailedTitle = ({ category: category, title: title,
510
508
  className: "rf-py-6 rf-title-large-bold-size-auto large-vertical:rf-pt-[16.67%] rf-flex rf-flex-row rf-items-center rf-font-bold",
511
509
  children: [
512
510
  favorite && /*#__PURE__*/ (0, $ajtMF$reactjsxruntime.jsx)((0, $7VgIE.FavoriteIcon), {
513
- className: "rf-h-16 rf-w-20 ltr:rf-pr-4 rtl:rf-pl-4"
511
+ className: "rf-h-16 rf-w-20 rf-pr-4"
514
512
  }),
515
513
  title || ''
516
514
  ]
@@ -776,7 +774,7 @@ const $9982aaf71fbd3e1f$var$DownloadSheet = ({ className: className, url: url })
776
774
  className: "rf-px-5 rf-py-3 rf-h-fit rf-flex rf-flex-row rf-items-center rf-mt-8 rf-mb-16 large:rf-my-0 rf-border-2 rf-border-black rf-rounded-lg hover:rf-bg-truewhite rf-cursor-pointer rf-font-bold",
777
775
  children: [
778
776
  /*#__PURE__*/ (0, $ajtMF$reactjsxruntime.jsx)((0, $60kUR.DownloadIcon), {
779
- className: "rf-h-6 rf-w-6 ltr:rf-mr-1 rtl:rf-ml-1"
777
+ className: "rf-h-6 rf-w-6 rf-mr-1"
780
778
  }),
781
779
  (0, $9JtA7.capitalizeFirstLetter)(translation.common.downloadsheet, locale)
782
780
  ]
@@ -1102,7 +1100,7 @@ const $2ed0c554c11c571c$var$ShowPhoneNumber = ({ phoneNumber: phoneNumber })=>{
1102
1100
  className: "rf-px-5 rf-py-3 rf-mb-8 rf-flex rf-flex-row rf-items-center rf-font-bold",
1103
1101
  children: [
1104
1102
  /*#__PURE__*/ (0, $ajtMF$reactjsxruntime.jsx)((0, $7VgIE.PhoneIcon), {
1105
- className: "rf-h-6 rf-w-6 ltr:rf-mr-2 rtl:rf-ml-2"
1103
+ className: "rf-h-6 rf-w-6 rf-mr-2"
1106
1104
  }),
1107
1105
  phoneNumber
1108
1106
  ]
@@ -1336,6 +1334,7 @@ const $b1852deb3d7d5629$var$Routes = ({ coordinates: coordinates, setMapLayerDat
1336
1334
  var _drivingCar_features, _drivingCar_features__properties_summary, _drivingCar_features__properties, _drivingCar_features1, _drivingCar_features__properties_summary1, _drivingCar_features__properties1, _cyclingRegular_features, _cyclingRegular_features__properties_summary, _cyclingRegular_features__properties, _cyclingRegular_features1, _cyclingRegular_features__properties_summary1, _cyclingRegular_features__properties1, _footWalking_features, _footWalking_features__properties_summary, _footWalking_features__properties, _footWalking_features1, _footWalking_features__properties_summary1, _footWalking_features__properties1;
1337
1335
  const translation = (0, $6Q0mk.useLocaleStore)((state)=>state.currentTranslations);
1338
1336
  const locale = (0, $6Q0mk.useLocaleStore)((state)=>state.locale);
1337
+ const isRTL = (0, $6Q0mk.useLocaleStore)((state)=>state.isRTL);
1339
1338
  const isUsedOnBorne = (0, $6EkQS.useRetorikStore)((state)=>state.configuration.isUsedOnBorne);
1340
1339
  const [drivingCar, setDrivingCar] = (0, $ajtMF$react.useState)(undefined);
1341
1340
  const [cyclingRegular, setCyclingRegular] = (0, $ajtMF$react.useState)(undefined);
@@ -1431,7 +1430,7 @@ const $b1852deb3d7d5629$var$Routes = ({ coordinates: coordinates, setMapLayerDat
1431
1430
  className: "rf-absolute rf-bottom-2 rf-w-full rf-flex rf-flex-row rf-gap-4 rf-justify-center",
1432
1431
  children: [
1433
1432
  /*#__PURE__*/ (0, $ajtMF$reactjsxruntime.jsxs)("div", {
1434
- className: "rf-grid rf-grid-cols-routes rf-pl-6 rf-pr-4 rf-py-2 rf-gap-4 rf-rounded-lg rf-bg-truewhite ltr:rf-text-xs rtl:rf-text-arabic large:rf-text-sm rf-shadow-[0_6px_6px_#00000029]",
1433
+ className: `rf-grid rf-grid-cols-routes rf-pl-6 rf-pr-4 rf-py-2 rf-gap-4 rf-rounded-lg rf-bg-truewhite ${isRTL ? 'rf-text-arabic' : 'rf-text-xs'} large:rf-text-sm rf-shadow-[0_6px_6px_#00000029]`,
1435
1434
  children: [
1436
1435
  /*#__PURE__*/ (0, $ajtMF$reactjsxruntime.jsx)((0, $8FxIQ.default), {
1437
1436
  summary: {
@@ -1466,7 +1465,7 @@ const $b1852deb3d7d5629$var$Routes = ({ coordinates: coordinates, setMapLayerDat
1466
1465
  ]
1467
1466
  }),
1468
1467
  /*#__PURE__*/ (0, $ajtMF$reactjsxruntime.jsxs)("button", {
1469
- className: "rf-aspect-square rf-w-3/20 rf-min-w-3/20 rf-max-w-3/20 large:rf-w-1/8 large:rf-min-w-1/8 large:rf-max-w-1/8 rf-overflow-y-hidden rf-p-1 rf-flex rf-flex-col rf-justify-evenly rf-items-center rf-border-2 rf-border-trueblack rf-rounded-lg rf-font-bold ltr:rf-text-xs rtl:rf-text-arabic large:rf-text-sm rf-bg-truewhite",
1468
+ className: `rf-aspect-square rf-w-3/20 rf-min-w-3/20 rf-max-w-3/20 large:rf-w-1/8 large:rf-min-w-1/8 large:rf-max-w-1/8 rf-overflow-y-hidden rf-p-1 rf-flex rf-flex-col rf-justify-evenly rf-items-center rf-border-2 rf-border-trueblack rf-rounded-lg rf-font-bold ${isRTL ? 'rf-text-arabic' : 'rf-text-xs'} large:rf-text-sm rf-bg-truewhite`,
1470
1469
  onClick: handleClick,
1471
1470
  children: [
1472
1471
  /*#__PURE__*/ (0, $ajtMF$reactjsxruntime.jsx)((0, $2IMOe.default), {
@@ -1754,4 +1753,4 @@ var $bec002e5f7690553$export$2e2bcd8739ae039 = $bec002e5f7690553$var$MapUser;
1754
1753
 
1755
1754
 
1756
1755
 
1757
- //# sourceMappingURL=AttachmentDetail.1e06c2a5.js.map
1756
+ //# sourceMappingURL=AttachmentDetail.0a576bf3.js.map
@@ -0,0 +1 @@
1
+ {"mappings":"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","sources":["src/components/Attachments/AttachmentDetail.tsx","src/hooks/useShowPOI.ts","src/utils/mapDetailedDataFromContentItem.ts","src/components/Attachments/DetailedAttachment/DetailedTitle.tsx","src/components/Attachments/DetailedAttachment/CommentsPennant.tsx","src/components/Attachments/DetailedAttachment/DetailedText.tsx","src/components/Attachments/DetailedAttachment/DownloadSheet.tsx","src/components/Attachments/DetailedAttachment/DownloadQR.tsx","src/components/Attachments/DetailedAttachment/PrintingButton.tsx","src/components/Attachments/DetailedAttachment/DetailedMedia.tsx","src/components/Attachments/DetailedAttachment/DetailedAddress.tsx","src/components/Attachments/DetailedAttachment/ShowPhoneNumber.tsx","src/components/Attachments/DetailedAttachment/Map.tsx","src/components/Attachments/DetailedAttachment/Routes.tsx","src/components/Attachments/DetailedAttachment/RoutesItem.tsx","src/utils/getDistanceAsString.ts","src/utils/getTimeAsString.ts","src/components/Icons/MapIcons/index.ts","src/components/Icons/MapIcons/CyclingRegularIcon.tsx","src/components/Icons/MapIcons/DrivingCarIcon.tsx","src/components/Icons/MapIcons/FootWalkingIcon.tsx","src/components/Icons/MapIcons/OpenLocationIcon.tsx","src/components/Icons/MapIcons/TriangleIcon.tsx","src/components/Attachments/DetailedAttachment/MapUser.tsx"],"sourcesContent":["import React, { useEffect, useLayoutEffect, useRef, useState } from 'react'\r\nimport { useSpring, easings } from '@react-spring/web'\r\n\r\nimport { useUtilsStore } from '../Contexts/UtilsContext'\r\nimport { useSpeechStore } from '../Contexts/SpeechContext'\r\nimport { useRetorikStore } from '../Contexts/RetorikContext'\r\nimport { useLocaleStore } from '../Contexts/LocaleContext'\r\nimport { useViewStore } from '../Contexts/ViewContext'\r\nimport { useDirectlineStore } from '../Contexts/DirectlineContext'\r\n\r\nimport useShowPOI from '../../hooks/useShowPOI'\r\n\r\nimport type { POIContentType } from '../../models/attachmentTypes'\r\nimport { getColorFromCategoryId } from '../../utils/getColorFromCategoryId'\r\nimport { Mode, RetorikEvent } from '../../models/enums'\r\nimport preventEvents from '../../utils/preventEvents'\r\n\r\nimport Template from '../Templates/FullScreenRemoteClosing'\r\nimport DetailedTitle from './DetailedAttachment/DetailedTitle'\r\nimport DetailedText from './DetailedAttachment/DetailedText'\r\nimport DetailedMedia from './DetailedAttachment/DetailedMedia'\r\nimport DetailedAddress from './DetailedAttachment/DetailedAddress'\r\nimport DownloadSheet from './DetailedAttachment/DownloadSheet'\r\n\r\nconst springEnterDuration = 1500\r\nconst springLeaveDuration = 2500\r\n\r\nconst AttachmentDetails = (): JSX.Element => {\r\n const detailedItemContent = useShowPOI()\r\n const locale = useLocaleStore((state) => state.locale)\r\n const isUsedOnBorne = useRetorikStore((state) => state.configuration.isUsedOnBorne)\r\n const baseAddress = useRetorikStore((state) => state.baseAddress)\r\n const mode = useSpeechStore((state) => state.mode)\r\n const useOldRemote = useRetorikStore((state) => state.configuration.useOldRemote)\r\n const isMobile = useViewStore((state) => state.isMobile)\r\n const isWidget = useViewStore((state) => state.isWidget)\r\n const currentDeviceType = useViewStore((state) => state.currentDeviceType)\r\n const themeColors = useViewStore((state) => state.themeColors)\r\n const closeDetailedPOI = useUtilsStore((state) => state.closeDetailedPOI)\r\n const { setRetorikEvent, setCloseDetailedPOI } = useUtilsStore((state) => state.actions)\r\n const { sendMessage, sendEvent } = useDirectlineStore((state) => state.actions)\r\n\r\n const [content, setContent] = useState<POIContentType | undefined>(undefined)\r\n const [color, setColor] = useState<string>(themeColors.secondary)\r\n const [titleHeight, setTitleHeight] = useState<number>(0)\r\n const [spring, api] = useSpring(() => ({\r\n from: {\r\n transform: 'translateX(0%)'\r\n }\r\n }))\r\n const timerRef = useRef<NodeJS.Timer | null>(null)\r\n const divRef = useRef<HTMLDivElement>(null)\r\n\r\n useEffect(() => {\r\n setContent(detailedItemContent)\r\n if (detailedItemContent) {\r\n setRetorikEvent(RetorikEvent.DetailViewOpen)\r\n }\r\n }, [detailedItemContent])\r\n\r\n useEffect(() => {\r\n closeDetailedPOI && handleClose()\r\n }, [closeDetailedPOI])\r\n\r\n useLayoutEffect(() => {\r\n if (divRef?.current) {\r\n isWidget && preventEvents(null, divRef)\r\n }\r\n })\r\n\r\n useEffect(() => {\r\n if (content) {\r\n if (timerRef.current) {\r\n clearTimeout(timerRef.current)\r\n timerRef.current = null\r\n }\r\n\r\n content.category?.id && setColor(getColorFromCategoryId(content.category.id, themeColors))\r\n api.start({\r\n from: {\r\n transform: 'translateX(-100%)'\r\n },\r\n to: {\r\n transform: 'translateX(0%)'\r\n },\r\n config: {\r\n duration: springEnterDuration,\r\n easing: easings.easeInBack\r\n }\r\n })\r\n }\r\n }, [content])\r\n\r\n const handleClose = (): void => {\r\n if (!timerRef.current) {\r\n api.start({\r\n from: {\r\n transform: 'translateX(0%)'\r\n },\r\n to: {\r\n transform: 'translateX(-100%)'\r\n },\r\n config: {\r\n duration: springLeaveDuration,\r\n easing: easings.easeOutExpo\r\n }\r\n })\r\n\r\n setCloseDetailedPOI(false)\r\n setRetorikEvent(RetorikEvent.DetailViewClose)\r\n\r\n timerRef.current = setTimeout(() => {\r\n sendEvent('Davi.CloseWindow', null, () => sendEvent('Davi.CloseWindowDetailed', null))\r\n setContent(undefined)\r\n timerRef.current = null\r\n }, springLeaveDuration)\r\n }\r\n }\r\n\r\n const sendPostBack = (value: any): void => {\r\n sendMessage(undefined, value)\r\n }\r\n\r\n return content ? (\r\n <Template handleClose={handleClose} className={useOldRemote ? 'rf-z-detailedPOI' : 'rf-z-[25]'} closeButtonClassName='rf-z-util' remoteCloseButtonZIndex='rf-z-detailedPOI' animation={spring}>\r\n {/* Window containing data */}\r\n <div ref={divRef} className='rf-relative rf-flex rf-flex-row vertical:rf-flex-col rf-h-full rf-overflow-y-scroll rf-scrollbar-hidden'>\r\n {detailedItemContent?.template ? (\r\n <React.Fragment>\r\n <detailedItemContent.template\r\n props={{\r\n ...content,\r\n locale: locale,\r\n isUsedOnBorne: isUsedOnBorne,\r\n baseAddress: baseAddress,\r\n sendPostBack: sendPostBack\r\n }}\r\n currentDeviceType={currentDeviceType}\r\n handleClose={handleClose}\r\n />\r\n </React.Fragment>\r\n ) : (\r\n <React.Fragment>\r\n <div className='rf-px-6 large:rf-px-8 rf-w-2/3 vertical:rf-w-full rf-mb-4 large:rf-mb-0 rf-flex rf-flex-col rf-border-r rf-border-r-silver vertical:rf-border-r-0'>\r\n {/* Title + category */}\r\n <DetailedTitle\r\n category={content.category}\r\n title={content.title}\r\n infoBanner={content.infoBanner}\r\n color={color}\r\n customerReviews={content.customerReviews}\r\n favorite={content.favorite}\r\n handleClose={handleClose}\r\n setTitleHeight={setTitleHeight}\r\n />\r\n <div className='rf-flex rf-flex-col large:rf-flex-row landscape-retorik:rf-h-full'>\r\n {/* Text + other data */}\r\n <DetailedText text={content.text} otherInformations={content.otherInformations} color={color} url={content.downloadUri} titleHeight={titleHeight} />\r\n {/* Media + comment if there is at least one media or comment */}\r\n {(content.media?.length || content.review) && <DetailedMedia media={content.media} review={content.review} color={color} />}\r\n </div>\r\n </div>\r\n <DetailedAddress\r\n address={content.addressStructured}\r\n phoneNumber={content.phoneNumber}\r\n coordinates={content.coordinates}\r\n color={color}\r\n customerReviews={content.customerReviews}\r\n url={content.downloadUri}\r\n />\r\n {isMobile && <div className={mode === Mode.text ? 'rf-mb-28' : 'rf-mb-16'}>{content.downloadUri && <DownloadSheet className='rf-justify-center' url={content.downloadUri} />}</div>}\r\n </React.Fragment>\r\n )}\r\n </div>\r\n </Template>\r\n ) : (\r\n <React.Fragment />\r\n )\r\n}\r\n\r\nexport default AttachmentDetails\r\n","import { useEffect, useState } from 'react'\r\nimport { useActivityStore } from '../components/Contexts/ActivityContext'\r\nimport { useUtilsStore } from '../components/Contexts/UtilsContext'\r\nimport { useLocaleStore } from '../components/Contexts/LocaleContext'\r\nimport { useRetorikStore } from '../components/Contexts/RetorikContext'\r\n\r\nimport type { DetailedAttachmentAction } from '../models/activityTypes'\r\nimport { mapDetailedDataFromContentItem } from '../utils/mapDetailedDataFromContentItem'\r\n\r\nconst useShowPOI = (): any => {\r\n const locale = useLocaleStore((state) => state.locale)\r\n const translation = useLocaleStore((state) => state.currentTranslations)\r\n const lastBotActivity = useActivityStore((state) => state.lastBotActivity)\r\n const triggers = useUtilsStore((state) => state.detailedAttachmentTriggers)\r\n const baseAddress = useRetorikStore((state) => state.baseAddress)\r\n\r\n const [result, setResult] = useState<any>(undefined)\r\n\r\n useEffect(() => {\r\n let result: any = undefined\r\n\r\n if (lastBotActivity?.value && triggers.length) {\r\n triggers.forEach((trigger: DetailedAttachmentAction) => {\r\n if (lastBotActivity.type === trigger.type) {\r\n if (trigger.name && trigger.name === lastBotActivity.name) {\r\n if (trigger.contentType) {\r\n if (trigger.contentType === lastBotActivity.value?.contentType) {\r\n lastBotActivity.value.content.template = trigger.linkedComponent\r\n result = lastBotActivity.value.content\r\n }\r\n } else {\r\n const data = {\r\n id: lastBotActivity.value?.contentItemId,\r\n content: lastBotActivity.value?.content,\r\n contentType: lastBotActivity.value?.contentType,\r\n baseAddress: baseAddress,\r\n locale: locale\r\n }\r\n const checkData = mapDetailedDataFromContentItem(\r\n data,\r\n translation\r\n )\r\n if (checkData) {\r\n result = { ...checkData, template: trigger.linkedComponent }\r\n } else {\r\n lastBotActivity.value.template = trigger.linkedComponent\r\n result = lastBotActivity.value\r\n }\r\n }\r\n } else if (trigger.label && trigger.label === lastBotActivity.label) {\r\n if (trigger.contentType) {\r\n if (trigger.contentType === lastBotActivity.value?.contentType) {\r\n lastBotActivity.value.content.template = trigger.linkedComponent\r\n result = lastBotActivity.value.content\r\n }\r\n } else {\r\n lastBotActivity.value.template = trigger.linkedComponent\r\n result = lastBotActivity.value\r\n }\r\n }\r\n }\r\n })\r\n }\r\n\r\n setResult(result)\r\n }, [lastBotActivity])\r\n\r\n return result\r\n}\r\n\r\nexport default useShowPOI\r\n","import type {\r\n Coordinates,\r\n POIContentType,\r\n AddressStructured,\r\n Review\r\n} from '../models/attachmentTypes'\r\nimport type { TranslationFile } from '../models/translationsType'\r\n\r\nconst infoBannerContenTypes = ['foodestablishment', 'event']\r\n\r\nconst categoryConversion = {\r\n FoodEstablishment: 'Where to eat',\r\n LodgingBusiness: 'Where to sleep',\r\n TouristDestination: 'What to see',\r\n TouristAttraction: 'What to do',\r\n Product: 'Local products',\r\n Service: 'Services',\r\n Event: 'Events',\r\n City: 'Cities',\r\n Wine: 'Wines'\r\n}\r\n\r\ninterface MappingProps {\r\n id?: string\r\n content: any\r\n contentType?: string\r\n baseAddress: string\r\n locale: string\r\n}\r\n\r\ninterface Category {\r\n id: string\r\n label: string\r\n}\r\n\r\ninterface OtherInformation {\r\n title: string\r\n content: string | Array<string>\r\n}\r\n\r\nconst getCategoryFromContentType = (\r\n contentType: string | undefined,\r\n translation: TranslationFile\r\n): Category | undefined => {\r\n if (contentType) {\r\n if (Object.keys(categoryConversion).includes(contentType)) {\r\n return {\r\n id: categoryConversion[contentType],\r\n label: translation.poi[contentType]\r\n }\r\n }\r\n\r\n return {\r\n id: 'default',\r\n label: contentType\r\n }\r\n }\r\n\r\n return undefined\r\n}\r\n\r\nconst mapDetailedDataFromContentItem = (\r\n data: MappingProps,\r\n translation: TranslationFile\r\n): POIContentType | null => {\r\n if (data.id && data.content) {\r\n try {\r\n const content = data.content\r\n // Process medias\r\n const medias: any = []\r\n content.Thing?.Image?.Paths &&\r\n content.Thing.Image.Paths.length &&\r\n content.Thing?.Image?.Paths?.forEach((path) => {\r\n medias.push({\r\n url: `${data.baseAddress}media/${path}`\r\n })\r\n })\r\n\r\n // Processed address\r\n const address: AddressStructured = {\r\n addressLocality: content.Place?.AddressLocality?.Text || '',\r\n postalCode: content.Place?.PostalCode?.Text || '',\r\n street: content.Place?.StreetAddress?.Text || ''\r\n }\r\n\r\n // Processed coordinates\r\n const coordinates: Coordinates | undefined =\r\n content.Place?.Latitude?.Value && content.Place?.Longitude?.Value\r\n ? {\r\n latitude: content.Place.Latitude.Value,\r\n longitude: content.Place.Longitude.Value\r\n }\r\n : undefined\r\n\r\n // Processed review\r\n const review: Review = {\r\n author:\r\n content.Review?.Author || content.Review?.AuthorCapacity\r\n ? {\r\n name: content.Review?.Author,\r\n capacity: content.Review?.AuthorCapacity\r\n }\r\n : undefined,\r\n comment: content.Review?.ReviewBody || '',\r\n picture: content.Review?.Picture\r\n ? {\r\n url: content.Review.Picture,\r\n description: content.Review.PictureDescription || ''\r\n }\r\n : undefined\r\n }\r\n\r\n // Process other informations\r\n const otherInformations: Array<OtherInformation> = []\r\n // Opening hours\r\n content.LocalBusiness?.OpeningHours?.Text &&\r\n otherInformations.push({\r\n title: translation.poi.openinghours,\r\n content: content.LocalBusiness.OpeningHours.Text\r\n })\r\n // Prices\r\n content.LocalBusiness?.PriceRange?.Text &&\r\n otherInformations.push({\r\n title: translation.poi.prices,\r\n content: content.LocalBusiness.PriceRange.Text\r\n })\r\n // Payment methods\r\n content.LocalBusiness?.PaymentAccepted?.Values &&\r\n content.LocalBusiness.PaymentAccepted.Values.length &&\r\n otherInformations.push({\r\n title: translation.poi.paymentmethods,\r\n content: content.LocalBusiness.PaymentAccepted.Values\r\n })\r\n\r\n // Process information banner\r\n let infoBanner: string | undefined\r\n if (\r\n data.contentType &&\r\n infoBannerContenTypes.includes(data.contentType.toLowerCase())\r\n ) {\r\n switch (data.contentType.toLowerCase()) {\r\n case 'foodestablishment':\r\n content.Place?.MaximumAttendeeCapacity?.Value &&\r\n !isNaN(parseInt(content.Place?.MaximumAttendeeCapacity?.Value)) &&\r\n (infoBanner = `${translation.poi.numberofplaces} ${parseInt(\r\n content.Place?.MaximumAttendeeCapacity?.Value\r\n )}`)\r\n break\r\n case 'event':\r\n if (\r\n content.Event &&\r\n content.Event.StartDate?.Value &&\r\n content.Event.EndDate?.value\r\n ) {\r\n const startDate = new Date(content.Event.StartDate.Value)\r\n const endDate = new Date(content.Event.StartDate.Value)\r\n if (\r\n content.Event.StartDate.Value === content.Event.EndDate.value\r\n ) {\r\n infoBanner = `Le ${startDate.toLocaleDateString(data.locale)}`\r\n } else {\r\n infoBanner = `Du ${startDate.toLocaleDateString(\r\n data.locale\r\n )} au ${endDate.toLocaleDateString(data.locale)}`\r\n }\r\n }\r\n break\r\n }\r\n }\r\n\r\n // Hack for Wines category -> TODO : remove it !\r\n let categoryWineTest = false\r\n const categories = content.Thing?.Categories?.Values\r\n const wineFilters = [\r\n 'Blanc de blanc',\r\n 'Rosé Champagne',\r\n 'Vintages',\r\n 'Cocktail Collection',\r\n 'AUTHIGENE Collection'\r\n ]\r\n\r\n if (categories && categories.length) {\r\n categories.forEach(\r\n (category: string) =>\r\n wineFilters.includes(category) && (categoryWineTest = true)\r\n )\r\n }\r\n\r\n const mappedData: POIContentType = {\r\n identifier: data.id,\r\n title: content.Thing?.Name?.Text?.toString() || '',\r\n text: content.Thing?.Description?.Text?.toString() || '',\r\n addressStructured: address,\r\n contact: content.PointOfInterest?.Contact?.Text?.toString() || '',\r\n phoneNumber: content.Place?.Telephone?.Text\r\n ? content.Place.Telephone.Text.toString()\r\n : '',\r\n category: categoryWineTest\r\n ? {\r\n id: categoryConversion.Wine,\r\n label: translation.poi.Wine\r\n }\r\n : getCategoryFromContentType(content.contentType || data.contentType, translation),\r\n media: medias.length ? medias : undefined,\r\n customerReviews: content.Place?.AggregateRating?.Value,\r\n coordinates: coordinates,\r\n downloadUri: `${data.baseAddress}api/hospitality/${data.id}/pdf`,\r\n favorite: !!content.Thing?.Favorite?.Value,\r\n review: review,\r\n infoBanner: infoBanner,\r\n otherInformations: otherInformations\r\n }\r\n\r\n return mappedData\r\n } catch (e) {\r\n console.log(e)\r\n return null\r\n }\r\n }\r\n\r\n return null\r\n}\r\n\r\nexport { mapDetailedDataFromContentItem }\r\n","import React, { useEffect, useRef } from 'react'\r\nimport { useLocaleStore } from '../../Contexts/LocaleContext'\r\nimport { useViewStore } from '../../Contexts/ViewContext'\r\nimport CommentsPennant from './CommentsPennant'\r\nimport { FavoriteIcon } from '../../Icons/DetailedPOIIcons'\r\nimport { BackButton } from '../../Menu/Common'\r\n\r\ntype DetailedTitleProps = {\r\n category?: {\r\n id: string\r\n label: string\r\n }\r\n title?: string\r\n infoBanner?: string\r\n color?: string\r\n customerReviews?: number\r\n favorite?: boolean\r\n handleClose: () => void\r\n setTitleHeight: (x: number) => void\r\n}\r\n\r\nconst DetailedTitle = ({ category, title, infoBanner, color, customerReviews, favorite, handleClose, setTitleHeight }: DetailedTitleProps): JSX.Element => {\r\n const translation = useLocaleStore((state) => state.currentTranslations)\r\n const isMobile = useViewStore((state) => state.isMobile)\r\n const titleRef = useRef<HTMLDivElement>(null)\r\n\r\n useEffect(() => {\r\n titleRef?.current && setTitleHeight(titleRef.current.clientHeight)\r\n }, [titleRef?.current])\r\n\r\n return (\r\n <div ref={titleRef} className='rf-relative rf-pb-4 rf-flex-col rf-items-start rf-justify-center'>\r\n {/* Category + comments' pennant */}\r\n {customerReviews && <CommentsPennant className='rf-absolute rf-hidden large-vertical:rf-block rf-top-0 rf-right-0' color={color} customerReviews={customerReviews} />}\r\n <div className='rf-w-full rf-flex rf-flex-row rf-justify-between rf-items-start'>\r\n {isMobile && <BackButton title={translation.common.back} handleBack={handleClose} className='rf-relative rf-mt-4 rf-text-size-auto' />}\r\n <div className='rf-uppercase rf-w-fit rf-py-2 large:rf-py-3 rf-px-4 rf-bg-black rf-text-primary' style={{ color: color }}>\r\n {category?.label || 'category'}\r\n </div>\r\n </div>\r\n\r\n {/* 'Favorite' icon + title */}\r\n <div className='rf-py-6 rf-title-large-bold-size-auto large-vertical:rf-pt-[16.67%] rf-flex rf-flex-row rf-items-center rf-font-bold'>\r\n {favorite && <FavoriteIcon className='rf-h-16 rf-w-20 rf-pr-4' />}\r\n {title || ''}\r\n </div>\r\n\r\n {/* Informations Banner */}\r\n {infoBanner && (\r\n <div className='rf-py-1 rf-px-4 rf-subtitle-size-auto rf-bg-primary rf-text-truewhite' style={{ backgroundColor: color }}>\r\n {infoBanner}\r\n </div>\r\n )}\r\n </div>\r\n )\r\n}\r\n\r\nexport default DetailedTitle\r\n","import React, { useState, useEffect, useRef } from 'react'\r\nimport { CommentsPennantIcon } from '../../Icons/DetailedPOIIcons'\r\nimport { useLocaleStore } from '../../Contexts/LocaleContext'\r\n\r\ntype ComponentsPennantType = {\r\n className?: string\r\n color?: string\r\n customerReviews: number\r\n}\r\n\r\nconst CommentsPennant = ({\r\n className,\r\n color,\r\n customerReviews\r\n}: ComponentsPennantType): JSX.Element => {\r\n const translation = useLocaleStore((state) => state.currentTranslations)\r\n const [widthInPx, setWidthInPx] = useState<number>(0)\r\n const pennantRef = useRef<HTMLDivElement>(null)\r\n\r\n useEffect(() => {\r\n if (pennantRef.current) {\r\n setWidthInPx(Math.ceil(pennantRef.current.offsetWidth / 2))\r\n }\r\n }, [pennantRef])\r\n\r\n return (\r\n <div\r\n className={`${className} rf-flex rf-flex-col rf-justify-center rf-text-white`}\r\n ref={pennantRef}\r\n >\r\n <div\r\n className='rf-flex rf-flex-col rf-items-center rf-p-2 rf-bg-primary'\r\n style={{ backgroundColor: color }}\r\n >\r\n <CommentsPennantIcon className='rf-w-12 large:rf-w-14 large-vertical:rf-w-16 rf-pb-2' />\r\n <div className='rf-flex-col rf-text-center rf-text-size-auto rf-uppercase'>\r\n {translation.poi.comment.split(' ').map((word, index) => {\r\n return <div key={index}>{word}</div>\r\n })}\r\n </div>\r\n <div className='rf-font-bold rf-subtitle-size-auto'>\r\n {customerReviews}/10\r\n </div>\r\n </div>\r\n <div\r\n className='rf-w-0 rf-h-0 rf-border-t-0 rf-border-x-primary rf-border-b-transparent'\r\n style={{\r\n borderLeftColor: color,\r\n borderRightColor: color,\r\n borderBottomWidth: (widthInPx * 2) / 3,\r\n borderLeftWidth: widthInPx,\r\n borderRightWidth: widthInPx\r\n }}\r\n />\r\n </div>\r\n )\r\n}\r\n\r\nexport default CommentsPennant\r\n","import React, { useEffect, useRef, useState, useMemo } from 'react'\r\nimport { useRetorikStore } from '../../Contexts/RetorikContext'\r\nimport { useViewStore } from '../../Contexts/ViewContext'\r\nimport DownloadSheet from './DownloadSheet'\r\nimport DownloadQR from './DownloadQR'\r\n\r\ntype DetailedTextProps = {\r\n text?: string\r\n otherInformations?: Array<{\r\n title: string\r\n content: string | Array<string>\r\n }>\r\n color?: string\r\n url?: string\r\n titleHeight: number\r\n}\r\n\r\nconst DownloadQRHeight = 200\r\nconst DownloadSheetHeight = 100\r\n\r\nconst DetailedText = ({\r\n text,\r\n otherInformations,\r\n color,\r\n url,\r\n titleHeight\r\n}: DetailedTextProps): JSX.Element => {\r\n const isUsedOnBorne = useRetorikStore(\r\n (state) => state.configuration.isUsedOnBorne\r\n )\r\n const isMobile = useViewStore((state) => state.isMobile)\r\n const isLandscape = useViewStore((state) => state.isLandscape)\r\n const currentHeight = useViewStore((state) => state.currentHeight)\r\n\r\n const textRef = useRef<HTMLDivElement>(null)\r\n const otherInformationsRef = useRef<HTMLDivElement>(null)\r\n const [opacityStyle, setOpacityStyle] = useState<string | undefined>('')\r\n const [otherOpacityStyle, setOtherOpacityStyle] = useState<\r\n string | undefined\r\n >('')\r\n const processedText = useMemo<string>(() => {\r\n if (text) {\r\n return text.replaceAll('\\n', '<br>')\r\n }\r\n\r\n return ''\r\n }, [text])\r\n\r\n const textContainerMaxHeight = useMemo<number>(() => {\r\n return (\r\n currentHeight -\r\n titleHeight -\r\n (isUsedOnBorne ? DownloadQRHeight : DownloadSheetHeight)\r\n )\r\n }, [titleHeight])\r\n\r\n const [textMaxHeight, setTextMaxHeight] = useState<number>(0)\r\n const [otherInformationsMaxHeight, setOtherInformationsMaxHeight] =\r\n useState<number>(0)\r\n\r\n useEffect(() => {\r\n if (\r\n textRef?.current &&\r\n otherInformationsRef?.current &&\r\n textContainerMaxHeight &&\r\n !isMobile\r\n ) {\r\n const textHeight = isLandscape\r\n ? (textContainerMaxHeight * 58) / 100\r\n : (currentHeight * 30) / 100\r\n\r\n const otherInformationsHeight = isLandscape\r\n ? (textContainerMaxHeight * 40) / 100\r\n : (currentHeight * 18) / 100\r\n\r\n if (textRef.current.scrollHeight > textHeight) {\r\n if (\r\n otherInformationsRef.current.scrollHeight > otherInformationsHeight\r\n ) {\r\n setTextMaxHeight(textHeight)\r\n setOtherInformationsMaxHeight(otherInformationsHeight)\r\n } else {\r\n setTextMaxHeight(\r\n textContainerMaxHeight - otherInformationsRef.current.scrollHeight\r\n )\r\n setOtherInformationsMaxHeight(otherInformationsHeight)\r\n }\r\n } else if (\r\n otherInformationsRef.current.scrollHeight > otherInformationsHeight\r\n ) {\r\n setTextMaxHeight(textHeight)\r\n setOtherInformationsMaxHeight(\r\n textContainerMaxHeight - textRef.current.scrollHeight\r\n )\r\n } else {\r\n setTextMaxHeight(textHeight)\r\n setOtherInformationsMaxHeight(otherInformationsHeight)\r\n }\r\n }\r\n }, [textRef?.current, otherInformationsRef?.current, textContainerMaxHeight])\r\n\r\n useEffect(() => {\r\n if (textRef?.current && textMaxHeight) {\r\n if (\r\n !isMobile &&\r\n textRef.current.scrollHeight > textMaxHeight &&\r\n textRef.current.scrollHeight > textRef.current.clientHeight\r\n ) {\r\n handleScroll()\r\n } else {\r\n setOpacityStyle(undefined)\r\n }\r\n }\r\n }, [textRef?.current, textMaxHeight])\r\n\r\n useEffect(() => {\r\n if (otherInformationsRef?.current && otherInformationsMaxHeight) {\r\n if (\r\n !isMobile &&\r\n otherInformationsRef.current.scrollHeight >\r\n otherInformationsMaxHeight &&\r\n otherInformationsRef.current.scrollHeight >\r\n otherInformationsRef.current.clientHeight\r\n ) {\r\n handleOtherScroll()\r\n } else {\r\n setOtherOpacityStyle(undefined)\r\n }\r\n }\r\n }, [otherInformationsRef?.current, otherInformationsMaxHeight])\r\n\r\n /**\r\n * On call :\r\n * - check if textRef.current is defined\r\n * - set opacityStyle state depending on scroll height and current scrolling\r\n */\r\n const handleScroll = (): void => {\r\n if (textRef.current) {\r\n const maxScroll =\r\n textRef.current.scrollHeight - textRef.current.offsetHeight\r\n const percentage = Math.ceil((textRef.current.scrollTop / maxScroll) * 40)\r\n setOpacityStyle(\r\n `linear-gradient(to bottom, black ${\r\n 60 + percentage\r\n }%, transparent 100%)`\r\n )\r\n }\r\n }\r\n\r\n const handleOtherScroll = (): void => {\r\n if (otherInformationsRef.current) {\r\n const maxScroll =\r\n otherInformationsRef.current.scrollHeight -\r\n otherInformationsRef.current.offsetHeight\r\n const percentage = Math.ceil(\r\n (otherInformationsRef.current.scrollTop / maxScroll) * 30\r\n )\r\n setOtherOpacityStyle(\r\n `linear-gradient(to bottom, black ${\r\n 70 + percentage\r\n }%, transparent 100%)`\r\n )\r\n }\r\n }\r\n\r\n return (\r\n <div className='rf-flex rf-flex-col large:rf-pr-4 large:rf-min-w-1/2 rf-gap-4'>\r\n <div\r\n className='rf-w-full rf-flex rf-flex-col rf-items-start'\r\n style={{\r\n maxHeight: isLandscape ? textContainerMaxHeight : undefined\r\n }}\r\n >\r\n {processedText && (\r\n <div\r\n ref={textRef}\r\n className='large-vertical:rf-max-h-[30vh] rf-font-medium rf-overflow-y-scroll rf-pb-4 rf-scroll-pb-4 rf-scrollbar-hidden'\r\n style={{\r\n WebkitMaskImage: opacityStyle,\r\n maxHeight: textMaxHeight || undefined\r\n }}\r\n onScroll={handleScroll}\r\n dangerouslySetInnerHTML={{ __html: processedText }}\r\n />\r\n )}\r\n {otherInformations && otherInformations.length > 0 && (\r\n <div\r\n ref={otherInformationsRef}\r\n className='large-vertical:rf-max-h-[18vh] rf-flex rf-flex-col rf-justify-start rf-text-lightgray rf-overflow-y-scroll rf-pb-4 rf-scroll-pb-4 rf-scrollbar-hidden'\r\n style={{\r\n WebkitMaskImage: otherOpacityStyle,\r\n maxHeight: otherInformationsMaxHeight || undefined\r\n }}\r\n onScroll={handleOtherScroll}\r\n >\r\n {otherInformations.map((information, key) => {\r\n const tempContent = Array.isArray(information.content)\r\n ? information.content.join(' | ')\r\n : information.content\r\n const htmlContent = tempContent.replaceAll('\\n', '<br>')\r\n\r\n return (\r\n <React.Fragment key={key}>\r\n <div\r\n className='rf-mt-4'\r\n style={{\r\n color: color || 'rgb(25, 153, 177)'\r\n }}\r\n >\r\n {information.title}\r\n </div>\r\n <div dangerouslySetInnerHTML={{ __html: htmlContent }} />\r\n </React.Fragment>\r\n )\r\n })}\r\n </div>\r\n )}\r\n </div>\r\n\r\n {/* Downloading button or Qrcode in landscape mode */}\r\n {isLandscape &&\r\n url &&\r\n (isUsedOnBorne ? (\r\n <DownloadQR url={url} />\r\n ) : (\r\n <DownloadSheet url={url} />\r\n ))}\r\n </div>\r\n )\r\n}\r\n\r\nexport default DetailedText\r\n","import React from 'react'\r\nimport { useLocaleStore } from '../../Contexts/LocaleContext'\r\nimport { DownloadIcon } from '../../Icons/Miscellaneous'\r\nimport { capitalizeFirstLetter } from '../../../utils/capitalizeFirstLetter'\r\n\r\ninterface DownloadSheetProps {\r\n className?: string\r\n url: string\r\n}\r\n\r\nconst DownloadSheet = ({ className, url }: DownloadSheetProps): JSX.Element => {\r\n const translation = useLocaleStore((state) => state.currentTranslations)\r\n const locale = useLocaleStore((state) => state.locale)\r\n\r\n return (\r\n <div className={`${className} rf-w-full rf-flex`}>\r\n <a\r\n href={url}\r\n className='rf-px-5 rf-py-3 rf-h-fit rf-flex rf-flex-row rf-items-center rf-mt-8 rf-mb-16 large:rf-my-0 rf-border-2 rf-border-black rf-rounded-lg hover:rf-bg-truewhite rf-cursor-pointer rf-font-bold'\r\n >\r\n <DownloadIcon className='rf-h-6 rf-w-6 rf-mr-1' />\r\n {capitalizeFirstLetter(translation.common.downloadsheet, locale)}\r\n </a>\r\n </div>\r\n )\r\n}\r\n\r\nexport default DownloadSheet\r\n","import React, { useEffect, useRef, useState } from 'react'\r\nimport QRCode from 'qrcode'\r\n\r\nimport { useLocaleStore } from '../../Contexts/LocaleContext'\r\nimport { useRetorikStore } from '../../Contexts/RetorikContext'\r\n\r\nimport { capitalizeFirstLetter } from '../../../utils/capitalizeFirstLetter'\r\n\r\nimport QRCodeComponent from '../../Utils/QRCodeComponent'\r\nimport PrintingButton from './PrintingButton'\r\nimport { RoundIcon } from '../../Icons/DetailedPOIIcons'\r\n\r\ninterface DownloadQRProps {\r\n url: string\r\n}\r\n\r\nconst DownloadQR = ({ url }: DownloadQRProps): JSX.Element => {\r\n const translation = useLocaleStore((state) => state.currentTranslations)\r\n const locale = useLocaleStore((state) => state.locale)\r\n const enableDocumentPrinting = useRetorikStore(\r\n (state) => state.configuration.enableDocumentPrinting\r\n )\r\n\r\n const [qrCodeData, setQrCodeData] = useState<string | undefined>(undefined)\r\n const imageRef = useRef<HTMLImageElement>(null)\r\n\r\n useEffect(() => {\r\n setQrCodeDataAsync()\r\n }, [])\r\n\r\n const setQrCodeDataAsync = async (): Promise<void> => {\r\n const qrCodeString = await QRCode.toDataURL(url)\r\n setQrCodeData(qrCodeString)\r\n }\r\n\r\n return (\r\n <div className='rf-w-full rf-flex rf-flex-row rf-items-start'>\r\n {/* Printing button if allowed */}\r\n {enableDocumentPrinting && (\r\n <div className='rf-w-1/2 rf-flex rf-justify-start'>\r\n <PrintingButton url={url} />\r\n </div>\r\n )}\r\n\r\n {/* QR code for download */}\r\n <div\r\n className='rf-flex rf-flex-col rf-items-center rf-text-center rf-gap-2 rf-font-bold rf-text-sm'\r\n style={{\r\n width: enableDocumentPrinting ? '50%' : '100%'\r\n }}\r\n >\r\n <div className='rf-flex rf-flex-row rf-items-start rf-gap-1 rf-italic'>\r\n <RoundIcon />\r\n <div className='rf-w-fit'>\r\n {`${capitalizeFirstLetter(\r\n translation.common.downloadsheetmobile,\r\n locale\r\n )} ${translation.link.scanQR}`}\r\n </div>\r\n </div>\r\n\r\n {qrCodeData && (\r\n <div className='large-vertical:rf-mt-4'>\r\n <QRCodeComponent ref={imageRef} src={qrCodeData} />\r\n </div>\r\n )}\r\n </div>\r\n </div>\r\n )\r\n}\r\n\r\nexport default DownloadQR\r\n","import React from 'react'\r\nimport { useLocaleStore } from '../../Contexts/LocaleContext'\r\nimport { useUtilsStore } from '../../Contexts/UtilsContext'\r\nimport { PrintIcon } from '../../Icons/DetailedPOIIcons'\r\nimport PrintingPreview from '../PrintingPreview'\r\n\r\ninterface PrintingButtonProps {\r\n url: string\r\n}\r\n\r\nconst PrintingButton = ({ url }: PrintingButtonProps): JSX.Element => {\r\n const translation = useLocaleStore((state) => state.currentTranslations)\r\n const setModalFullscreenContent = useUtilsStore(\r\n (state) => state.actions.setModalFullscreenContent\r\n )\r\n\r\n const handleClick = (): void => {\r\n setModalFullscreenContent(\r\n <PrintingPreview url={url} printingAllowed={true} />\r\n )\r\n }\r\n\r\n return (\r\n <button\r\n className='rf-px-4 rf-py-1 rf-flex rf-flex-row rf-items-center rf-gap-2 rf-font-bold rf-text-sm rf-border-2 rf-border-black rf-rounded-lg'\r\n onClick={handleClick}\r\n >\r\n <PrintIcon />\r\n {translation.common.printsheet}\r\n </button>\r\n )\r\n}\r\n\r\nexport default PrintingButton\r\n","import React, { useEffect, useState } from 'react'\r\nimport type { Review } from '../../../models/attachmentTypes'\r\nimport { imageFiles } from '../../../utils/imageFiles'\r\nimport { capitalizeFirstLetter } from '../../../utils/capitalizeFirstLetter'\r\nimport { Carousel } from '../../Utils'\r\n\r\ninterface DetailedMediaProps {\r\n media?: [\r\n {\r\n url?: string\r\n title?: string\r\n credits?: string\r\n }\r\n ]\r\n review?: Review\r\n color?: string\r\n}\r\n\r\ninterface Media {\r\n type?: number\r\n url: string\r\n alt?: string\r\n}\r\n\r\nconst DetailedMedia = ({\r\n media,\r\n review,\r\n color\r\n}: DetailedMediaProps): JSX.Element => {\r\n const [landscapeImage, setLandscapeImage] = useState<boolean>(false)\r\n const [carouselMedia, setCarouselMedia] = useState<Array<Media>>([])\r\n\r\n useEffect(() => {\r\n if (media && media.length > 0) {\r\n let tempMedia: Array<Media> = []\r\n media.forEach((med) => {\r\n med.url &&\r\n (tempMedia = [\r\n ...tempMedia,\r\n { url: med.url, alt: med.title || 'media' }\r\n ])\r\n })\r\n setCarouselMedia(tempMedia)\r\n }\r\n }, [media])\r\n\r\n /**\r\n * On review change :\r\n * - check if the review contains a picture url\r\n * - if so, create an Image with this url, and check if its width is larger than its height\r\n * - set landscapeImage state with the result\r\n */\r\n useEffect(() => {\r\n if (review?.picture?.url) {\r\n const getImageData = async (): Promise<void> => {\r\n const image = new Image()\r\n image.onload = (): void => {\r\n setLandscapeImage(image.width > image.height)\r\n }\r\n image.src = review?.picture?.url || ''\r\n }\r\n getImageData()\r\n }\r\n }, [review])\r\n\r\n return (\r\n <div className='large:rf-min-w-1/2 large:rf-pl-4 rf-flex rf-flex-col rf-items-center'>\r\n {/* Image */}\r\n {carouselMedia && carouselMedia.length > 0 && (\r\n <div className='rf-relative rf-flex rf-justify-center rf-align-center rf-w-full rf-aspect-[4/3] rf-mb-4 rf-overflow-hidden'>\r\n <Carousel\r\n className='rf-min-h-full rf-min-w-full rf-object-cover'\r\n medias={carouselMedia}\r\n controls={true}\r\n timer={3000}\r\n color={color}\r\n />\r\n </div>\r\n )}\r\n\r\n {/* Comment data */}\r\n {review && review.comment && (\r\n <div className='rf-w-full rf-p-4 large:rf-mb-4 rf-flex rf-flex-col rf-gap-4 rf-bg-truewhite rf-rounded-lg rf-shadow-[0_3px_6px_#00000029]'>\r\n {/* Comment */}\r\n <div className='rf-text-lightgray'>{review.comment}</div>\r\n\r\n {/* Author image / name / capacity */}\r\n {(review.picture || review.author) && (\r\n <div className='rf-flex rf-flex-row rf-items-center'>\r\n {review.picture && (\r\n <div className='rf-h-12 rf-w-12 rf-min-w-12 large:rf-h-16 large:rf-w-16 large:rf-min-w-16 large-vertical:rf-h-24 large-vertical:rf-w-24 large-vertical:rf-min-w-24 rf-mr-4 rf-flex rf-items-center rf-rounded-half rf-overflow-hidden'>\r\n <img\r\n src={review.picture.url || imageFiles.noimage}\r\n alt={review.picture.description || 'auteur'}\r\n className={\r\n landscapeImage ? 'rf-h-full rf-max-w-none' : 'rf-w-full'\r\n }\r\n />\r\n </div>\r\n )}\r\n {review.author && (\r\n <div className='rf-flex rf-flex-col rf-items-start'>\r\n <p className='rf-font-bold'>\r\n {capitalizeFirstLetter(review.author.name || '')}\r\n </p>\r\n <p className='rf-italic'>\r\n {capitalizeFirstLetter(review.author.capacity || '')}\r\n </p>\r\n </div>\r\n )}\r\n </div>\r\n )}\r\n </div>\r\n )}\r\n </div>\r\n )\r\n}\r\n\r\nexport default DetailedMedia\r\n","import React from 'react'\r\nimport { useRetorikStore } from '../../Contexts/RetorikContext'\r\nimport { useViewStore } from '../../Contexts/ViewContext'\r\n\r\nimport type {\r\n AddressStructured,\r\n Coordinates\r\n} from '../../../models/attachmentTypes'\r\n\r\nimport ShowPhoneNumber from './ShowPhoneNumber'\r\nimport CommentsPennant from './CommentsPennant'\r\nimport Map from './Map'\r\nimport DownloadSheet from './DownloadSheet'\r\nimport DownloadQR from './DownloadQR'\r\n\r\ntype DetailedAddressProps = {\r\n address?: AddressStructured\r\n phoneNumber?: string\r\n coordinates?: Coordinates\r\n color?: string\r\n customerReviews?: number\r\n url?: string\r\n}\r\n\r\nconst DetailedAddress = ({\r\n address,\r\n phoneNumber,\r\n coordinates,\r\n color,\r\n customerReviews,\r\n url\r\n}: DetailedAddressProps): JSX.Element => {\r\n const isMobile = useViewStore((state) => state.isMobile)\r\n const isLandscape = useViewStore((state) => state.isLandscape)\r\n const isBorne = useViewStore((state) => state.isBorne)\r\n const currentWidth = useViewStore((state) => state.currentWidth)\r\n const configuration = useRetorikStore((state) => state.configuration)\r\n\r\n return (\r\n <div className='rf-relative rf-w-1/3 vertical:rf-w-full large:rf-bg-truewhite rf-flex rf-flex-col large-vertical:rf-flex-row'>\r\n {/* Pennant with comments */}\r\n {customerReviews && (\r\n <CommentsPennant\r\n className='rf-absolute large-vertical:rf-hidden rf-top-0 rf-left-1/2 rf--translate-x-1/2'\r\n color={color}\r\n customerReviews={customerReviews}\r\n />\r\n )}\r\n\r\n {/* Address + phone number */}\r\n <div\r\n className={`rf-px-6 rf-flex rf-flex-col large-vertical:rf-w-1/2 rf-items-center rf-text-center ${\r\n customerReviews\r\n ? isBorne\r\n ? 'rf-bg-truewhite rf-justify-center'\r\n : 'rf-bg-truewhite rf-justify-start'\r\n : 'rf-justify-center'\r\n }`}\r\n style={{\r\n height: isMobile\r\n ? customerReviews\r\n ? currentWidth\r\n : undefined\r\n : isLandscape\r\n ? coordinates && coordinates.latitude && coordinates.longitude\r\n ? '50%'\r\n : '100%'\r\n : 'calc(50vw - 3rem)'\r\n }}\r\n >\r\n <div\r\n className={\r\n customerReviews && !isBorne\r\n ? isLandscape\r\n ? 'rf-pt-[26vh] rf-pb-12'\r\n : 'rf-pt-11/20 rf-pb-12'\r\n : 'rf-py-12'\r\n }\r\n >\r\n {address && (\r\n <React.Fragment>\r\n {address.street && <div>{address.street}</div>}\r\n {address.addressLocality && (\r\n <div>\r\n {address.postalCode\r\n ? `${address.postalCode} ${address.addressLocality}`\r\n : address.addressLocality}\r\n </div>\r\n )}\r\n </React.Fragment>\r\n )}\r\n </div>\r\n {phoneNumber && <ShowPhoneNumber phoneNumber={phoneNumber} />}\r\n\r\n {/* QRcode to download data in borne mode */}\r\n {coordinates &&\r\n coordinates.latitude &&\r\n coordinates.longitude &&\r\n isBorne &&\r\n url &&\r\n (configuration.isUsedOnBorne ? (\r\n <DownloadQR url={url} />\r\n ) : (\r\n <DownloadSheet className='rf-justify-center' url={url} />\r\n ))}\r\n </div>\r\n\r\n {/* Map if coordinates are given / download button in borne mode if no coordinate */}\r\n {coordinates && coordinates.latitude && coordinates.longitude ? (\r\n <div\r\n className='rf-relative large-vertical:rf-w-1/2'\r\n style={{\r\n height: isMobile\r\n ? currentWidth\r\n : isLandscape\r\n ? '50%'\r\n : 'calc(50vw - 3rem)'\r\n }}\r\n >\r\n <Map\r\n latitude={coordinates.latitude}\r\n longitude={coordinates.longitude}\r\n color={color}\r\n />\r\n </div>\r\n ) : isBorne ? (\r\n <div className='rf-flex rf-justify-center rf-items-center rf-h-[calc(50vw-3rem)] rf-w-1/2'>\r\n {url &&\r\n (configuration.isUsedOnBorne ? (\r\n <DownloadQR url={url} />\r\n ) : (\r\n <DownloadSheet className='rf-justify-center' url={url} />\r\n ))}\r\n </div>\r\n ) : (\r\n <React.Fragment />\r\n )}\r\n </div>\r\n )\r\n}\r\n\r\nexport default DetailedAddress\r\n","import React from 'react'\r\nimport { PhoneIcon } from '../../Icons/DetailedPOIIcons'\r\n\r\ninterface ShowPhoneNumberPorps {\r\n phoneNumber: string\r\n}\r\n\r\nconst ShowPhoneNumber = ({ phoneNumber }: ShowPhoneNumberPorps): JSX.Element => {\r\n return (\r\n <div className='rf-px-5 rf-py-3 rf-mb-8 rf-flex rf-flex-row rf-items-center rf-font-bold'>\r\n <PhoneIcon className='rf-h-6 rf-w-6 rf-mr-2' />\r\n {phoneNumber}\r\n </div>\r\n )\r\n}\r\n\r\nexport default ShowPhoneNumber\r\n","import React, { useEffect, useState, useRef } from 'react'\r\nimport { useSpring, animated } from '@react-spring/web'\r\nimport { MapContainer, TileLayer, Marker, GeoJSON } from 'react-leaflet'\r\nimport type { FeatureCollection } from 'geojson'\r\nimport type { GeoJSON as GeoJSONType } from 'leaflet'\r\nimport L from 'leaflet'\r\nimport { markerShadow } from '../../../models/urlEncodedImages'\r\n\r\nimport { useLocaleStore } from '../../Contexts/LocaleContext'\r\nimport { useRetorikStore } from '../../Contexts/RetorikContext'\r\n\r\nimport { imageFiles } from '../../../utils/imageFiles'\r\nimport { capitalizeFirstLetter } from '../../../utils/capitalizeFirstLetter'\r\n\r\nimport Routes from './Routes'\r\nimport MapUser from './MapUser'\r\nimport QRCodeComponent from '../../Utils/QRCodeComponent'\r\nimport CloseButton from '../../Common/CloseButton'\r\nimport { RoundIcon } from '../../Icons/DetailedPOIIcons'\r\n\r\ninterface MapProps {\r\n latitude: number\r\n longitude: number\r\n color?: string\r\n}\r\n\r\nconst userIcon = L.icon({\r\n iconUrl: `${imageFiles.mapDeparture}`,\r\n shadowUrl: markerShadow,\r\n iconSize: [32, 41],\r\n iconAnchor: [16, 41]\r\n})\r\n\r\nconst springDuration = 500\r\n\r\nconst Map = ({ latitude, longitude, color }: MapProps): JSX.Element => {\r\n const translation = useLocaleStore((state) => state.currentTranslations)\r\n const locale = useLocaleStore((state) => state.locale)\r\n const configuration = useRetorikStore((state) => state.configuration)\r\n\r\n const [mapLayerData, setMapLayerData] = useState<\r\n FeatureCollection | undefined\r\n >(undefined)\r\n const geoJsonLayer = useRef<GeoJSONType | null>(null)\r\n const coordinates =\r\n configuration.position?.latitude && configuration.position?.longitude\r\n ? [\r\n [configuration.position.longitude, configuration.position.latitude],\r\n [longitude, latitude]\r\n ]\r\n : undefined\r\n const [qrCodeUrl, setQrCodeUrl] = useState<string | null>()\r\n\r\n const fadeInTimerRef = useRef<NodeJS.Timer | null>(null)\r\n const [spring, api] = useSpring(() => ({\r\n from: {\r\n opacity: 0\r\n }\r\n }))\r\n\r\n useEffect(() => {\r\n if (geoJsonLayer.current) {\r\n mapLayerData && geoJsonLayer.current.clearLayers().addData(mapLayerData)\r\n }\r\n }, [mapLayerData])\r\n\r\n useEffect(() => {\r\n qrCodeUrl &&\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 return () => {\r\n fadeInTimerRef?.current && clearTimeout(fadeInTimerRef.current)\r\n }\r\n }, [qrCodeUrl])\r\n\r\n const handleCloseQrCode = (): 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 fadeInTimerRef?.current && clearTimeout(fadeInTimerRef.current)\r\n fadeInTimerRef.current = setTimeout(() => {\r\n setQrCodeUrl(null)\r\n }, springDuration)\r\n }\r\n\r\n return (\r\n <React.Fragment>\r\n <MapContainer\r\n center={[latitude, longitude]}\r\n zoom={12}\r\n scrollWheelZoom={false}\r\n style={{ height: '100%', width: '100%', zIndex: 0 }}\r\n attributionControl={false}\r\n >\r\n <TileLayer url='https://{s}.tile.openstreetmap.org/{z}/{x}/{y}.png' />\r\n <Marker position={[latitude, longitude]} />\r\n {configuration.position?.latitude &&\r\n configuration.position?.longitude && (\r\n <Marker\r\n position={[\r\n configuration.position.latitude,\r\n configuration.position.longitude\r\n ]}\r\n icon={userIcon}\r\n />\r\n )}\r\n {mapLayerData && <GeoJSON ref={geoJsonLayer} data={mapLayerData} />}\r\n <MapUser\r\n configurationPosition={[\r\n configuration.position?.latitude || latitude,\r\n configuration.position?.longitude || longitude\r\n ]}\r\n coordinates={[latitude, longitude]}\r\n data={mapLayerData}\r\n />\r\n </MapContainer>\r\n\r\n {/* Available routes if there are origin and destination coordinates */}\r\n {coordinates && (\r\n <Routes\r\n coordinates={coordinates}\r\n setMapLayerData={setMapLayerData}\r\n color={color}\r\n setQrCodeUrl={setQrCodeUrl}\r\n />\r\n )}\r\n\r\n {/* QRcode covering the map in borne mode */}\r\n {qrCodeUrl && (\r\n <animated.div\r\n className='rf-absolute rf-h-full rf-w-full rf-top-0 rf-left-0 rf-z-ui rf-flex rf-flex-col rf-justify-center rf-items-center rf-gap-4 rf-text-truewhite'\r\n style={{\r\n background: 'rgba(18,18,18,0.7)',\r\n ...spring\r\n }}\r\n >\r\n <CloseButton onClick={handleCloseQrCode} showLabel={false} />\r\n <div className='rf-flex rf-flex-row rf-items-start rf-gap-1 rf-text-truewhite rf-italic'>\r\n <RoundIcon className='rf-h-4 rf-mt-[0.2rem]' color='#FFF' />\r\n <div className='rf-w-fit rf-flex rf-flex-col rf-items-center'>\r\n <div>\r\n {capitalizeFirstLetter(translation.poi.openroutemobile, locale)}\r\n </div>\r\n <div>{translation.link.scanQR}</div>\r\n </div>\r\n </div>\r\n <QRCodeComponent src={qrCodeUrl} />\r\n </animated.div>\r\n )}\r\n </React.Fragment>\r\n )\r\n}\r\n\r\nexport default Map\r\n","import React, { useEffect, useRef, useState } from 'react'\r\nimport QRCode from 'qrcode'\r\nimport type { FeatureCollection } from 'geojson'\r\n\r\nimport { useLocaleStore } from '../../Contexts/LocaleContext'\r\nimport { useRetorikStore } from '../../Contexts/RetorikContext'\r\n\r\nimport { openRoute, openRouteAPIKey, googleMapsAddress } from '../../../models/constants'\r\nimport { capitalizeFirstLetter } from '../../../utils/capitalizeFirstLetter'\r\n\r\nimport RoutesItem from './RoutesItem'\r\nimport { OpenLocationIcon } from '../../Icons/MapIcons'\r\n\r\ninterface RoutesProps {\r\n coordinates: number[][]\r\n setMapLayerData: (data: FeatureCollection | undefined) => void\r\n color?: string\r\n setQrCodeUrl: (url: string) => void\r\n}\r\n\r\nconst Routes = ({ coordinates, setMapLayerData, color, setQrCodeUrl }: RoutesProps): JSX.Element => {\r\n const translation = useLocaleStore((state) => state.currentTranslations)\r\n const locale = useLocaleStore((state) => state.locale)\r\n const isRTL = useLocaleStore((state) => state.isRTL)\r\n const isUsedOnBorne = useRetorikStore((state) => state.configuration.isUsedOnBorne)\r\n\r\n const [drivingCar, setDrivingCar] = useState<FeatureCollection | undefined>(undefined)\r\n const [cyclingRegular, setCyclingRegular] = useState<FeatureCollection | undefined>(undefined)\r\n const [footWalking, setFootWalking] = useState<FeatureCollection | undefined>(undefined)\r\n const [currentChosen, setCurrentChosen] = useState<string | undefined>(undefined)\r\n\r\n const travelModeRef = useRef<string>()\r\n\r\n /**\r\n * On component mount :\r\n * - call methods to retrieve data from openroute API\r\n */\r\n useEffect(() => {\r\n calculateForProfile('driving-car')\r\n calculateForProfile('cycling-regular')\r\n calculateForProfile('foot-walking')\r\n }, [])\r\n\r\n /**\r\n * On currentChosen state change :\r\n * - switch on currentChosen value to display the associated data on the map\r\n */\r\n useEffect(() => {\r\n switch (currentChosen) {\r\n case 'drivingCar':\r\n drivingCar && drivingCar.features && setMapLayerData(drivingCar)\r\n travelModeRef.current = 'driving'\r\n break\r\n case 'cyclingRegular':\r\n cyclingRegular && cyclingRegular.features && setMapLayerData(cyclingRegular)\r\n travelModeRef.current = 'bicycling'\r\n break\r\n case 'footWalking':\r\n footWalking && footWalking.features && setMapLayerData(footWalking)\r\n travelModeRef.current = 'walking'\r\n break\r\n default:\r\n break\r\n }\r\n }, [currentChosen])\r\n\r\n /**\r\n * On drivingCar state change :\r\n * - if driving car data were retrieved and no course has been chosen, set currentChosen state to 'driving-car'\r\n */\r\n useEffect(() => {\r\n drivingCar && !currentChosen && setCurrentChosen('drivingCar')\r\n }, [drivingCar])\r\n\r\n /**\r\n * On call :\r\n * - call the openroute API to retrieve data for the current course\r\n * @param profile : string\r\n */\r\n const calculateForProfile = async (profile: string): Promise<void> => {\r\n const url = `${openRoute}/${profile}/geojson`\r\n const data = await fetch(url, {\r\n method: 'POST',\r\n headers: {\r\n Authorization: openRouteAPIKey,\r\n 'Content-Type': 'application/json'\r\n },\r\n body: JSON.stringify({ coordinates: coordinates })\r\n })\r\n .then((result) => {\r\n return result.json()\r\n })\r\n .catch(() => {\r\n return null\r\n })\r\n\r\n if (data && !data.error) {\r\n switch (profile) {\r\n case 'driving-car':\r\n setDrivingCar(data)\r\n break\r\n case 'cycling-regular':\r\n setCyclingRegular(data)\r\n break\r\n case 'foot-walking':\r\n setFootWalking(data)\r\n break\r\n default:\r\n break\r\n }\r\n }\r\n }\r\n\r\n const handleClick = async (): Promise<void> => {\r\n if (travelModeRef?.current && coordinates.length === 2) {\r\n // Create an URL to Google Maps with coordinates and travelling mode\r\n const coordinatesInUrl = `origin=${coordinates[0][1]},${coordinates[0][0]}&destination=${coordinates[1][1]},${coordinates[1][0]}`\r\n const fullUrl = `${googleMapsAddress}${coordinatesInUrl}&travelmode=${travelModeRef.current}`\r\n\r\n if (isUsedOnBorne) {\r\n const url = await QRCode.toDataURL(fullUrl)\r\n setQrCodeUrl(url)\r\n } else {\r\n // If we are not on a borne, open a new tab in browser\r\n window.open(fullUrl, '_blank')\r\n }\r\n }\r\n }\r\n\r\n return drivingCar || cyclingRegular || footWalking ? (\r\n <div className='rf-absolute rf-bottom-2 rf-w-full rf-flex rf-flex-row rf-gap-4 rf-justify-center'>\r\n {/* Data per choice : Car / Cycle / Foot */}\r\n <div\r\n className={`rf-grid rf-grid-cols-routes rf-pl-6 rf-pr-4 rf-py-2 rf-gap-4 rf-rounded-lg rf-bg-truewhite ${\r\n isRTL ? 'rf-text-arabic' : 'rf-text-xs'\r\n } large:rf-text-sm rf-shadow-[0_6px_6px_#00000029]`}\r\n >\r\n <RoutesItem\r\n summary={{\r\n type: 'drivingCar',\r\n distance: drivingCar?.features?.length ? drivingCar.features[0].properties?.summary?.distance : undefined,\r\n duration: drivingCar?.features?.length ? drivingCar.features[0].properties?.summary?.duration : undefined\r\n }}\r\n chosen={currentChosen === 'drivingCar'}\r\n color={color}\r\n onClick={setCurrentChosen}\r\n />\r\n <RoutesItem\r\n summary={{\r\n type: 'cyclingRegular',\r\n distance: cyclingRegular?.features?.length ? cyclingRegular.features[0].properties?.summary?.distance : undefined,\r\n duration: cyclingRegular?.features?.length ? cyclingRegular.features[0].properties?.summary?.duration : undefined\r\n }}\r\n chosen={currentChosen === 'cyclingRegular'}\r\n color={color}\r\n onClick={setCurrentChosen}\r\n />\r\n <RoutesItem\r\n summary={{\r\n type: 'footWalking',\r\n distance: footWalking?.features?.length ? footWalking.features[0].properties?.summary?.distance : undefined,\r\n duration: footWalking?.features?.length ? footWalking.features[0].properties?.summary?.duration : undefined\r\n }}\r\n chosen={currentChosen === 'footWalking'}\r\n color={color}\r\n onClick={setCurrentChosen}\r\n />\r\n </div>\r\n\r\n {/* Redirection button */}\r\n <button\r\n className={`rf-aspect-square rf-w-3/20 rf-min-w-3/20 rf-max-w-3/20 large:rf-w-1/8 large:rf-min-w-1/8 large:rf-max-w-1/8 rf-overflow-y-hidden rf-p-1 rf-flex rf-flex-col rf-justify-evenly rf-items-center rf-border-2 rf-border-trueblack rf-rounded-lg rf-font-bold ${\r\n isRTL ? 'rf-text-arabic' : 'rf-text-xs'\r\n } large:rf-text-sm rf-bg-truewhite`}\r\n onClick={handleClick}\r\n >\r\n <OpenLocationIcon className='rf-w-5 rf-h-5' />\r\n {capitalizeFirstLetter(translation.poi.route, locale)}\r\n </button>\r\n </div>\r\n ) : (\r\n <React.Fragment />\r\n )\r\n}\r\n\r\nexport default Routes\r\n","import React from 'react'\r\nimport getDistanceAsString from '../../../utils/getDistanceAsString'\r\nimport getTimeAsString from '../../../utils/getTimeAsString'\r\nimport * as Icons from '../../Icons/MapIcons'\r\n\r\ninterface Summary {\r\n type: string\r\n distance?: number\r\n duration?: number\r\n}\r\n\r\ninterface RoutesItemProps {\r\n summary: Summary\r\n chosen?: boolean\r\n color?: string\r\n onClick: (type: string) => void\r\n}\r\n\r\nconst RoutesItem = ({\r\n summary,\r\n chosen,\r\n color,\r\n onClick\r\n}: RoutesItemProps): JSX.Element => {\r\n return (\r\n <div\r\n className='rf-flex rf-flex-col rf-justify-end hover:rf-cursor-pointer'\r\n onClick={(): void => onClick(summary.type)}\r\n >\r\n <div className='rf-h-full rf-flex rf-flex-row rf-gap-3 rf-items-center'>\r\n <div className='rf-relative rf-flex rf-justify-center rf-items-center'>\r\n {/* Colored circle + triangle atop */}\r\n <div\r\n className='rf-absolute rf-w-9 rf-h-9 rf-rounded-max'\r\n style={{\r\n backgroundColor: chosen ? color : '#EFEDF0'\r\n }}\r\n />\r\n <div className='rf-absolute rf-w-full -rf-top-[1.15rem] rf-flex rf-justify-center'>\r\n <Icons.TriangleIcon\r\n className='rf-w-2 rf-h-2'\r\n color={chosen ? color : 'transparent'}\r\n />\r\n </div>\r\n\r\n {summary.type === 'drivingCar' && (\r\n <Icons.DrivingCarIcon\r\n className='rf-w-5 rf-z-util'\r\n color={chosen ? '#FFF' : '#535252'}\r\n />\r\n )}\r\n {summary.type === 'cyclingRegular' && (\r\n <Icons.CyclingRegularIcon\r\n className='rf-w-6 rf-z-util'\r\n color={chosen ? '#FFF' : '#535252'}\r\n />\r\n )}\r\n {summary.type === 'footWalking' && (\r\n <Icons.FootWalkingIcon\r\n className='rf-w-6 rf-z-util'\r\n color={chosen ? '#FFF' : '#535252'}\r\n />\r\n )}\r\n </div>\r\n <div className='rf-flex rf-flex-col rf-justify-center rf-items-start'>\r\n {/* Duration */}\r\n <div className='rf-whitespace-nowrap rf-font-bold'>\r\n {getTimeAsString(summary?.duration)}\r\n </div>\r\n\r\n {/* Distance */}\r\n <div className='rf-whitespace-nowrap'>\r\n {getDistanceAsString(summary?.distance)}\r\n </div>\r\n </div>\r\n </div>\r\n </div>\r\n )\r\n}\r\n\r\nexport default RoutesItem\r\n","const getDistanceAsString = (distance: number | undefined): string => {\r\n if (typeof distance !== 'number') {\r\n return 'NC'\r\n }\r\n\r\n if (distance <= 0) return '0 m'\r\n if (distance < 1) return `${distance * 100} cm`\r\n if (distance < 1000) return `${distance} m`\r\n if (distance >= 1000) return `${(Math.ceil(distance / 1000) * 10) / 10} km`\r\n\r\n return 'NC'\r\n}\r\n\r\nexport default getDistanceAsString\r\n","const getTimeAsString = (time: number | undefined): string => {\r\n if (typeof time !== 'number') {\r\n return 'NC'\r\n }\r\n\r\n if (time < 1) return 'NC'\r\n if (time < 60) return `${time} s`\r\n if (time < 3600) return `${Math.ceil(time / 60)} min`\r\n if (time === 3600) return `1 h`\r\n if (time > 3600) {\r\n const hours = Math.floor(time / 3600)\r\n const minutes = Math.ceil((time - hours * 3600) / 60)\r\n return `${hours} h ${\r\n minutes === 60 ? 59 : minutes < 10 ? `0${minutes}` : minutes\r\n }`\r\n }\r\n\r\n return 'NC'\r\n}\r\n\r\nexport default getTimeAsString\r\n","import CyclingRegularIcon from './CyclingRegularIcon'\r\nimport DrivingCarIcon from './DrivingCarIcon'\r\nimport FootWalkingIcon from './FootWalkingIcon'\r\nimport OpenLocationIcon from './OpenLocationIcon'\r\nimport TriangleIcon from './TriangleIcon'\r\n\r\nexport {\r\n CyclingRegularIcon,\r\n DrivingCarIcon,\r\n FootWalkingIcon,\r\n OpenLocationIcon,\r\n TriangleIcon\r\n}\r\n","import React from 'react'\r\nimport type { IconDefaultProps } from '../../../models/types'\r\n\r\nconst CyclingRegularIcon = ({\r\n className,\r\n color\r\n}: IconDefaultProps): JSX.Element => {\r\n return (\r\n <svg\r\n xmlns='http://www.w3.org/2000/svg'\r\n viewBox='0 0 34.168 29.135'\r\n className={className || 'rf-w-8 rf-h-8'}\r\n >\r\n <g transform='translate(0.5 -1.484)'>\r\n <path\r\n d='M20.5,6.789a2.645,2.645,0,1,0-2.645-2.645A2.653,2.653,0,0,0,20.5,6.789Zm-13.885,8.6a6.612,6.612,0,1,0,0,13.224,6.612,6.612,0,1,0,0-13.224Zm0,11.24a4.628,4.628,0,1,1,0-9.257,4.628,4.628,0,1,1,0,9.257ZM14.282,13.4l3.174-3.174,1.058,1.058a9.264,9.264,0,0,0,6.744,2.777V11.418A6.57,6.57,0,0,1,20.5,9.434L17.984,6.922a3.242,3.242,0,0,0-2.116-.793,2.219,2.219,0,0,0-1.851.793l-3.7,3.7a2.611,2.611,0,0,0-.793,1.851,2.219,2.219,0,0,0,.793,1.851l4.232,3.7v6.612h2.645v-8.2Zm10.843,1.984A6.612,6.612,0,1,0,31.737,22,6.548,6.548,0,0,0,25.125,15.385Zm0,11.24A4.628,4.628,0,1,1,29.753,22,4.685,4.685,0,0,1,25.125,26.625Z'\r\n transform='translate(0 0.484)'\r\n fill={color || '#fff'}\r\n />\r\n </g>\r\n </svg>\r\n )\r\n}\r\n\r\nexport default CyclingRegularIcon\r\n","import React from 'react'\r\nimport type { IconDefaultProps } from '../../../models/types'\r\n\r\nconst DrivingCarIcon = ({\r\n className,\r\n color\r\n}: IconDefaultProps): JSX.Element => {\r\n return (\r\n <svg\r\n xmlns='http://www.w3.org/2000/svg'\r\n viewBox='0 0 34.168 29.135'\r\n className={className || 'rf-w-8 rf-h-8'}\r\n >\r\n <path\r\n id='car'\r\n d='M32.385,71.254H28.507L27.43,68.559A7.217,7.217,0,0,0,20.7,64H12.471a7.219,7.219,0,0,0-6.735,4.559L4.658,71.254H.781a.777.777,0,0,0-.754.966l.389,1.554a.777.777,0,0,0,.754.589h1.3a4.116,4.116,0,0,0-1.43,3.109V80.58A4.111,4.111,0,0,0,2.076,83.3v3.5a2.073,2.073,0,0,0,2.072,2.072H6.221A2.073,2.073,0,0,0,8.293,86.8V84.725h16.58V86.8a2.073,2.073,0,0,0,2.072,2.072h2.072A2.073,2.073,0,0,0,31.09,86.8V83.3a4.109,4.109,0,0,0,1.036-2.716V77.471A4.118,4.118,0,0,0,30.7,74.362H32a.777.777,0,0,0,.754-.589l.389-1.554a.778.778,0,0,0-.754-.966ZM9.584,70.1a3.109,3.109,0,0,1,2.887-1.954H20.7A3.109,3.109,0,0,1,23.582,70.1l1.291,3.227H8.293ZM6.221,80.567a2.066,2.066,0,1,1,0-4.132,3.987,3.987,0,0,1,3.109,3.1c0,1.24-1.865,1.033-3.109,1.033Zm20.725,0c-1.243,0-3.109.207-3.109-1.033a3.987,3.987,0,0,1,3.109-3.1,2.066,2.066,0,1,1,0,4.132Z'\r\n transform='translate(0.501 -63.5)'\r\n fill={color || '#fff'}\r\n />\r\n </svg>\r\n )\r\n}\r\n\r\nexport default DrivingCarIcon\r\n","import React from 'react'\r\nimport type { IconDefaultProps } from '../../../models/types'\r\n\r\nconst FootWalkingIcon = ({\r\n className,\r\n color\r\n}: IconDefaultProps): JSX.Element => {\r\n return (\r\n <svg\r\n xmlns='http://www.w3.org/2000/svg'\r\n viewBox='-6 0 34.168 29.135'\r\n className={className || 'rf-w-8 rf-h-8'}\r\n >\r\n <path\r\n d='M11.4,5.249A2.625,2.625,0,1,0,8.772,2.625,2.625,2.625,0,0,0,11.4,5.249ZM16.564,13.4l-1.274-.645-.53-1.608A5.962,5.962,0,0,0,9.171,7c-1.968-.005-3.057.552-5.1,1.378A5.216,5.216,0,0,0,1.352,10.9l-.366.744a1.755,1.755,0,0,0,.776,2.346,1.726,1.726,0,0,0,2.324-.782l.366-.744a1.738,1.738,0,0,1,.9-.842l1.465-.591-.831,3.319A3.512,3.512,0,0,0,6.8,17.568l3.275,3.576a3.529,3.529,0,0,1,.815,1.515l1,4.008a1.75,1.75,0,0,0,3.4-.848l-1.214-4.866a3.5,3.5,0,0,0-.815-1.515l-2.488-2.718.94-3.756.3.9a3.487,3.487,0,0,0,1.733,2.023l1.274.645a1.726,1.726,0,0,0,2.324-.782,1.77,1.77,0,0,0-.782-2.351ZM4.048,21.1a3.393,3.393,0,0,1-.776,1.176L.538,25.01a1.75,1.75,0,1,0,2.472,2.477l3.248-3.248a3.554,3.554,0,0,0,.776-1.176l.738-1.848c-3.024-3.3-2.116-2.286-2.592-2.936L4.048,21.1Z'\r\n transform='translate(0.612 0.5)'\r\n fill={color || '#fff'}\r\n />\r\n </svg>\r\n )\r\n}\r\n\r\nexport default FootWalkingIcon\r\n","import React from 'react'\r\nimport type { IconDefaultProps } from '../../../models/types'\r\n\r\nconst OpenLocationIcon = ({ className }: IconDefaultProps): JSX.Element => {\r\n return (\r\n <svg\r\n xmlns='http://www.w3.org/2000/svg'\r\n viewBox='0 0 29.771 29.771'\r\n className={className || 'rf-w-6 rf-h-6'}\r\n >\r\n <path d='M29.771,0,0,14.886l11.164,3.721,3.721,11.164Z' />\r\n </svg>\r\n )\r\n}\r\n\r\nexport default OpenLocationIcon\r\n","import React from 'react'\r\nimport type { IconDefaultProps } from '../../../models/types'\r\n\r\nconst TriangleIcon = ({ className, color }: IconDefaultProps): JSX.Element => {\r\n return (\r\n <svg\r\n xmlns='http://www.w3.org/2000/svg'\r\n viewBox='0 0 16 12'\r\n className={className || 'rf-w-3 rf-h-3'}\r\n >\r\n <path\r\n d='M6.336,2.5a2,2,0,0,1,3.328,0l4.263,6.394A2,2,0,0,1,12.263,12H3.737A2,2,0,0,1,2.073,8.891Z'\r\n fill={color || 'transparent'}\r\n />\r\n </svg>\r\n )\r\n}\r\n\r\nexport default TriangleIcon\r\n","import React, { useEffect } from 'react'\r\nimport { useMap } from 'react-leaflet'\r\nimport type { LatLngTuple } from 'leaflet'\r\nimport type { FeatureCollection } from 'geojson'\r\n\r\ntype MapUserProps = {\r\n configurationPosition: LatLngTuple\r\n coordinates: LatLngTuple\r\n data: FeatureCollection | undefined\r\n}\r\n\r\nconst MapUser = ({\r\n configurationPosition,\r\n coordinates,\r\n data\r\n}: MapUserProps): JSX.Element => {\r\n const map = useMap()\r\n\r\n useEffect(() => {\r\n if (configurationPosition !== coordinates) {\r\n const coords1: LatLngTuple = [...configurationPosition]\r\n const coords2: LatLngTuple = [...coordinates]\r\n if (configurationPosition[0] > coordinates[0]) {\r\n coords2[0] -= (configurationPosition[0] - coordinates[0]) / 2\r\n } else {\r\n coords1[0] -= (coordinates[0] - configurationPosition[0]) / 2\r\n }\r\n\r\n map.flyToBounds([coords1, coords2])\r\n } else {\r\n map.flyToBounds([configurationPosition, coordinates])\r\n }\r\n }, [data])\r\n\r\n return <React.Fragment />\r\n}\r\n\r\nexport default MapUser\r\n"],"names":[],"version":3,"file":"AttachmentDetail.0a576bf3.js.map","sourceRoot":"../"}
@@ -61,7 +61,6 @@ const $cccd6edc9ecbde88$var$springEnterDuration = 1500;
61
61
  const $cccd6edc9ecbde88$var$springLeaveDuration = 2500;
62
62
  const $cccd6edc9ecbde88$var$AttachmentDetails = ()=>{
63
63
  const detailedItemContent = (0, $fnQYO.default)();
64
- const isRTL = (0, $2fuDN.useLocaleStore)((state)=>state.isRTL);
65
64
  const locale = (0, $2fuDN.useLocaleStore)((state)=>state.locale);
66
65
  const isUsedOnBorne = (0, $1x02c.useRetorikStore)((state)=>state.configuration.isUsedOnBorne);
67
66
  const baseAddress = (0, $1x02c.useRetorikStore)((state)=>state.baseAddress);
@@ -107,7 +106,7 @@ const $cccd6edc9ecbde88$var$AttachmentDetails = ()=>{
107
106
  content.category?.id && setColor((0, $8Rmrq.getColorFromCategoryId)(content.category.id, themeColors));
108
107
  api.start({
109
108
  from: {
110
- transform: isRTL ? 'translateX(100%)' : 'translateX(-100%)'
109
+ transform: 'translateX(-100%)'
111
110
  },
112
111
  to: {
113
112
  transform: 'translateX(0%)'
@@ -128,7 +127,7 @@ const $cccd6edc9ecbde88$var$AttachmentDetails = ()=>{
128
127
  transform: 'translateX(0%)'
129
128
  },
130
129
  to: {
131
- transform: isRTL ? 'translateX(100%)' : 'translateX(-100%)'
130
+ transform: 'translateX(-100%)'
132
131
  },
133
132
  config: {
134
133
  duration: $cccd6edc9ecbde88$var$springLeaveDuration,
@@ -138,8 +137,7 @@ const $cccd6edc9ecbde88$var$AttachmentDetails = ()=>{
138
137
  setCloseDetailedPOI(false);
139
138
  setRetorikEvent((0, $4ucVo.RetorikEvent).DetailViewClose);
140
139
  timerRef.current = setTimeout(()=>{
141
- sendEvent('Davi.CloseWindow', null);
142
- sendEvent('Davi.CloseWindowDetailed', null);
140
+ sendEvent('Davi.CloseWindow', null, ()=>sendEvent('Davi.CloseWindowDetailed', null));
143
141
  setContent(undefined);
144
142
  timerRef.current = null;
145
143
  }, $cccd6edc9ecbde88$var$springLeaveDuration);
@@ -464,12 +462,12 @@ const $53f8c1e84286bc25$var$DetailedTitle = ({ category: category, title: title,
464
462
  className: "rf-relative rf-pb-4 rf-flex-col rf-items-start rf-justify-center",
465
463
  children: [
466
464
  customerReviews && /*#__PURE__*/ (0, $dAxr5$jsx)((0, $g0cBD.default), {
467
- className: "rf-absolute rf-hidden large-vertical:rf-block rf-top-0 ltr:rf-right-0 rtl:rf-left-0",
465
+ className: "rf-absolute rf-hidden large-vertical:rf-block rf-top-0 rf-right-0",
468
466
  color: color,
469
467
  customerReviews: customerReviews
470
468
  }),
471
469
  /*#__PURE__*/ (0, $dAxr5$jsxs)("div", {
472
- className: "rf-w-full rf-flex rf-flex-row rf-justify-between ltr:rf-items-start rtl:rf-items-end",
470
+ className: "rf-w-full rf-flex rf-flex-row rf-justify-between rf-items-start",
473
471
  children: [
474
472
  isMobile && /*#__PURE__*/ (0, $dAxr5$jsx)((0, $28ved.BackButton), {
475
473
  title: translation.common.back,
@@ -489,7 +487,7 @@ const $53f8c1e84286bc25$var$DetailedTitle = ({ category: category, title: title,
489
487
  className: "rf-py-6 rf-title-large-bold-size-auto large-vertical:rf-pt-[16.67%] rf-flex rf-flex-row rf-items-center rf-font-bold",
490
488
  children: [
491
489
  favorite && /*#__PURE__*/ (0, $dAxr5$jsx)((0, $ahoAn.FavoriteIcon), {
492
- className: "rf-h-16 rf-w-20 ltr:rf-pr-4 rtl:rf-pl-4"
490
+ className: "rf-h-16 rf-w-20 rf-pr-4"
493
491
  }),
494
492
  title || ''
495
493
  ]
@@ -755,7 +753,7 @@ const $5850ec0a690e2e58$var$DownloadSheet = ({ className: className, url: url })
755
753
  className: "rf-px-5 rf-py-3 rf-h-fit rf-flex rf-flex-row rf-items-center rf-mt-8 rf-mb-16 large:rf-my-0 rf-border-2 rf-border-black rf-rounded-lg hover:rf-bg-truewhite rf-cursor-pointer rf-font-bold",
756
754
  children: [
757
755
  /*#__PURE__*/ (0, $dAxr5$jsx)((0, $SZcIF.DownloadIcon), {
758
- className: "rf-h-6 rf-w-6 ltr:rf-mr-1 rtl:rf-ml-1"
756
+ className: "rf-h-6 rf-w-6 rf-mr-1"
759
757
  }),
760
758
  (0, $7pypd.capitalizeFirstLetter)(translation.common.downloadsheet, locale)
761
759
  ]
@@ -1079,7 +1077,7 @@ const $d97c62c8221704ca$var$ShowPhoneNumber = ({ phoneNumber: phoneNumber })=>{
1079
1077
  className: "rf-px-5 rf-py-3 rf-mb-8 rf-flex rf-flex-row rf-items-center rf-font-bold",
1080
1078
  children: [
1081
1079
  /*#__PURE__*/ (0, $dAxr5$jsx)((0, $ahoAn.PhoneIcon), {
1082
- className: "rf-h-6 rf-w-6 ltr:rf-mr-2 rtl:rf-ml-2"
1080
+ className: "rf-h-6 rf-w-6 rf-mr-2"
1083
1081
  }),
1084
1082
  phoneNumber
1085
1083
  ]
@@ -1311,6 +1309,7 @@ var $cOucF = parcelRequire("cOucF");
1311
1309
  const $2bfd7077628948bb$var$Routes = ({ coordinates: coordinates, setMapLayerData: setMapLayerData, color: color, setQrCodeUrl: setQrCodeUrl })=>{
1312
1310
  const translation = (0, $2fuDN.useLocaleStore)((state)=>state.currentTranslations);
1313
1311
  const locale = (0, $2fuDN.useLocaleStore)((state)=>state.locale);
1312
+ const isRTL = (0, $2fuDN.useLocaleStore)((state)=>state.isRTL);
1314
1313
  const isUsedOnBorne = (0, $1x02c.useRetorikStore)((state)=>state.configuration.isUsedOnBorne);
1315
1314
  const [drivingCar, setDrivingCar] = (0, $dAxr5$useState)(undefined);
1316
1315
  const [cyclingRegular, setCyclingRegular] = (0, $dAxr5$useState)(undefined);
@@ -1406,7 +1405,7 @@ const $2bfd7077628948bb$var$Routes = ({ coordinates: coordinates, setMapLayerDat
1406
1405
  className: "rf-absolute rf-bottom-2 rf-w-full rf-flex rf-flex-row rf-gap-4 rf-justify-center",
1407
1406
  children: [
1408
1407
  /*#__PURE__*/ (0, $dAxr5$jsxs)("div", {
1409
- className: "rf-grid rf-grid-cols-routes rf-pl-6 rf-pr-4 rf-py-2 rf-gap-4 rf-rounded-lg rf-bg-truewhite ltr:rf-text-xs rtl:rf-text-arabic large:rf-text-sm rf-shadow-[0_6px_6px_#00000029]",
1408
+ className: `rf-grid rf-grid-cols-routes rf-pl-6 rf-pr-4 rf-py-2 rf-gap-4 rf-rounded-lg rf-bg-truewhite ${isRTL ? 'rf-text-arabic' : 'rf-text-xs'} large:rf-text-sm rf-shadow-[0_6px_6px_#00000029]`,
1410
1409
  children: [
1411
1410
  /*#__PURE__*/ (0, $dAxr5$jsx)((0, $6w54h.default), {
1412
1411
  summary: {
@@ -1441,7 +1440,7 @@ const $2bfd7077628948bb$var$Routes = ({ coordinates: coordinates, setMapLayerDat
1441
1440
  ]
1442
1441
  }),
1443
1442
  /*#__PURE__*/ (0, $dAxr5$jsxs)("button", {
1444
- className: "rf-aspect-square rf-w-3/20 rf-min-w-3/20 rf-max-w-3/20 large:rf-w-1/8 large:rf-min-w-1/8 large:rf-max-w-1/8 rf-overflow-y-hidden rf-p-1 rf-flex rf-flex-col rf-justify-evenly rf-items-center rf-border-2 rf-border-trueblack rf-rounded-lg rf-font-bold ltr:rf-text-xs rtl:rf-text-arabic large:rf-text-sm rf-bg-truewhite",
1443
+ className: `rf-aspect-square rf-w-3/20 rf-min-w-3/20 rf-max-w-3/20 large:rf-w-1/8 large:rf-min-w-1/8 large:rf-max-w-1/8 rf-overflow-y-hidden rf-p-1 rf-flex rf-flex-col rf-justify-evenly rf-items-center rf-border-2 rf-border-trueblack rf-rounded-lg rf-font-bold ${isRTL ? 'rf-text-arabic' : 'rf-text-xs'} large:rf-text-sm rf-bg-truewhite`,
1445
1444
  onClick: handleClick,
1446
1445
  children: [
1447
1446
  /*#__PURE__*/ (0, $dAxr5$jsx)((0, $cOucF.default), {
@@ -1729,4 +1728,4 @@ var $9333337694b0d9a4$export$2e2bcd8739ae039 = $9333337694b0d9a4$var$MapUser;
1729
1728
 
1730
1729
 
1731
1730
 
1732
- //# sourceMappingURL=AttachmentDetail.c6c297df.js.map
1731
+ //# sourceMappingURL=AttachmentDetail.c4286a45.js.map