{"version":3,"file":"static/components/4309-45fffceec4cdcbaf905f.js?cv=7","mappings":"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","sources":["webpack:///home/runner/work/actionpopulaire.fr/actionpopulaire.fr/agir/activity/components/BannerAnnouncements/useBannerAnnouncements.js","webpack:///home/runner/work/actionpopulaire.fr/actionpopulaire.fr/agir/front/components/genericComponents/Spinner.js","webpack:///home/runner/work/actionpopulaire.fr/actionpopulaire.fr/agir/activity/components/BannerAnnouncements/BannerAnnouncement.js","webpack:///home/runner/work/actionpopulaire.fr/actionpopulaire.fr/agir/activity/components/common/hooks.js","webpack:///home/runner/work/actionpopulaire.fr/actionpopulaire.fr/agir/front/components/allPages/FeedbackButton.js","webpack:///home/runner/work/actionpopulaire.fr/actionpopulaire.fr/agir/front/components/allPages/FloatButton.js","webpack:///home/runner/work/actionpopulaire.fr/actionpopulaire.fr/agir/front/components/allPages/HelpButton.js","webpack:///home/runner/work/actionpopulaire.fr/actionpopulaire.fr/agir/front/components/app/ActionButtons/actions.config.js","webpack:///home/runner/work/actionpopulaire.fr/actionpopulaire.fr/agir/front/components/app/ActionButtons/ActionButton.js","webpack:///home/runner/work/actionpopulaire.fr/actionpopulaire.fr/agir/front/components/app/ActionButtons/ActionButtons.js","webpack:///home/runner/work/actionpopulaire.fr/actionpopulaire.fr/agir/front/components/app/ErrorBoundary.js","webpack:///home/runner/work/actionpopulaire.fr/actionpopulaire.fr/agir/front/components/app/Layout/StyledComponents.js","webpack:///home/runner/work/actionpopulaire.fr/actionpopulaire.fr/agir/presidentielle2027/components/SoutienPage/SoutienBannerConfirmPhone.js","webpack:///home/runner/work/actionpopulaire.fr/actionpopulaire.fr/agir/presidentielle2027/components/SoutienPage/SoutienBanner.js","webpack:///home/runner/work/actionpopulaire.fr/actionpopulaire.fr/agir/front/components/app/Layout/MobileLayout.js","webpack:///home/runner/work/actionpopulaire.fr/actionpopulaire.fr/agir/front/components/genericComponents/Announcement.js","webpack:///home/runner/work/actionpopulaire.fr/actionpopulaire.fr/agir/front/components/app/Announcements.js","webpack:///home/runner/work/actionpopulaire.fr/actionpopulaire.fr/agir/front/components/app/FacebookLoginAd.js","webpack:///home/runner/work/actionpopulaire.fr/actionpopulaire.fr/agir/front/components/app/Navigation/SideBar/SecondaryMenu.js","webpack:///home/runner/work/actionpopulaire.fr/actionpopulaire.fr/agir/front/components/app/Navigation/SideBar/SideBar.js","webpack:///home/runner/work/actionpopulaire.fr/actionpopulaire.fr/agir/front/components/app/Navigation/SideBar/index.js","webpack:///home/runner/work/actionpopulaire.fr/actionpopulaire.fr/agir/front/components/app/Layout/DesktopLayout.js","webpack:///home/runner/work/actionpopulaire.fr/actionpopulaire.fr/agir/front/components/app/Layout/index.js","webpack:///home/runner/work/actionpopulaire.fr/actionpopulaire.fr/agir/front/components/app/Layout/Layout.js","webpack:///home/runner/work/actionpopulaire.fr/actionpopulaire.fr/agir/front/components/app/Navigation/BottomBar/BottomBar.js","webpack:///home/runner/work/actionpopulaire.fr/actionpopulaire.fr/agir/front/components/app/Navigation/BottomBar/index.js","webpack:///home/runner/work/actionpopulaire.fr/actionpopulaire.fr/agir/front/components/app/Navigation/CounterBadge.js","webpack:///home/runner/work/actionpopulaire.fr/actionpopulaire.fr/agir/front/components/app/Page.js","webpack:///home/runner/work/actionpopulaire.fr/actionpopulaire.fr/agir/front/components/app/ProtectedComponent.js","webpack:///home/runner/work/actionpopulaire.fr/actionpopulaire.fr/agir/front/components/app/Redirect.js","webpack:///home/runner/work/actionpopulaire.fr/actionpopulaire.fr/agir/front/components/app/apiHook.js","webpack:///home/runner/work/actionpopulaire.fr/actionpopulaire.fr/agir/front/components/app/hooks/useAppLoader.js","webpack:///home/runner/work/actionpopulaire.fr/actionpopulaire.fr/agir/front/components/authentication/api.js","webpack:///home/runner/work/actionpopulaire.fr/actionpopulaire.fr/agir/front/components/authentication/hooks.js","webpack:///home/runner/work/actionpopulaire.fr/actionpopulaire.fr/agir/front/components/errorPage/ErrorPage.js","webpack:///home/runner/work/actionpopulaire.fr/actionpopulaire.fr/agir/front/components/genericComponents/Icon.js","webpack:///home/runner/work/actionpopulaire.fr/actionpopulaire.fr/agir/front/components/genericComponents/Tooltip.js","webpack:///home/runner/work/actionpopulaire.fr/actionpopulaire.fr/agir/front/components/notFoundPage/NotFoundPage.js","webpack:///home/runner/work/actionpopulaire.fr/actionpopulaire.fr/agir/presidentielle2027/components/SoutienPage/SoutienProgressBar.js","webpack:///home/runner/work/actionpopulaire.fr/actionpopulaire.fr/agir/presidentielle2027/components/SoutienPage/soutien.api.js"],"sourcesContent":["import useSWR from \"swr\";\nimport axios from \"@agir/lib/utils/axios\";\n\n\nexport const useActiveBannerAnnouncement = () =>\n    useSWR(\"/api/activite/bannerannouncements/\")\n\nexport const answerToBannerAnnouncement = (announcementId, answerId) =>\n    axios.put(`/api/activite/bannerannouncements/${announcementId}/answer/${answerId}`)\n\nexport const closeBannerAnnouncement = (announcementId) => axios.get(`/api/activite/bannerannouncements/${announcementId}/close`)","import React from \"react\"\nimport styled, {keyframes} from \"styled-components\";\n\nconst SpinnerAnimation = keyframes`\n    from {\n        transform: rotate(0deg);\n    }\n    to {\n        transform: rotate(360deg);\n    }\n`\nconst Loader = styled.i`\n    font-size: 1.6em;\n    animation-name: ${SpinnerAnimation};\n    animation-duration: 2s;\n    animation-timing-function: ease;\n    animation-iteration-count: infinite;\n`\n\nexport default function Spinner() {\n    return <Loader className=\"fa fa-solid fa-loader\"/>\n}","import styled, {keyframes} from \"styled-components\";\nimport {\n    answerToBannerAnnouncement, closeBannerAnnouncement,\n    useActiveBannerAnnouncement\n} from \"@agir/activity/BannerAnnouncements/useBannerAnnouncements\";\nimport React, {useEffect, useState} from \"react\"\nimport Button from \"@agir/front/genericComponents/Button\";\nimport {useMutate} from \"@agir/front/app/apiHook\";\nimport Spinner from \"@agir/front/genericComponents/Spinner\";\nimport {useTransition, animated} from \"@react-spring/web\";\n\nconst BackgroundAnimation = keyframes`\n    from {\n        opacity: 0;\n    }\n    to {\n        opacity: 1;\n    }\n`\n\nconst Banner = styled.div`\n    position: relative;\n    width: 100vw;\n    min-height: 150px;\n    background-color: ${(props) => props.theme.primary500};\n    color: ${(props) => props.theme.text25};\n    flex-direction: column;\n    align-items: center;\n    align-content: center;\n    text-align: center;\n    \n    animation-name: ${BackgroundAnimation};\n    animation-duration: 1.4s;\n    animation-timing-function: ease;\n    animation-fill-mode: forwards;\n    \n    h3 {\n        font-weight: bold;\n    }\n    h2, h3, h4 {\n        text-align: center;\n        color: ${(props) => props.theme.text25};\n        margin-bottom: 0.7em;\n        font-size: 1.2em;\n        margin-top: 0;\n        padding-top: 0.7em; \n    }\n    span {\n        max-width: 800px;\n        a {\n            color: ${(props) => props.theme.text25};\n            text-decoration: underline;\n        }\n    }\n\n    @media (max-width: 700px) {\n        p {\n            text-align: center;\n            padding-top: 2px;\n            padding-right: 12px;\n            padding-left: 12px;\n        }\n        h2, h3, h4 {\n            margin-bottom: 0.2em;\n\n        }\n    }\n`\nconst Answers = styled.div`\n    display: flex;\n    align-items: center;\n    gap: 10px;\n    margin-bottom: 0.5em;\n    height: 2.8em;\n    padding-top: 0.1em;\n    padding-bottom: 0.5em;\n    justify-content: center;\n\n    @media (max-width: 600px) {\n        flex-direction: column;\n        margin-bottom: 0.7em;\n        height: auto;\n    }\n`\nconst BannerAnnouncementDone = styled.div`\n    width: 100vw;\n    min-height: 150px;\n    background-color: #17a460;\n    \n    animation-name: ${BackgroundAnimation};\n    animation-duration: 1.4s;\n    animation-timing-function: ease;\n    animation-fill-mode: forwards;\n`\n\nconst Close = styled.div`\n    position: absolute;\n    top: 8px;\n    right: 15px;\n    \n    cursor: pointer;\n    \n    font-size: 1.5em;\n`\n\nexport default function BannerAnnouncement() {\n    const [currentAnnouncement, setCurrentAnnouncement] = useState()\n    const [done, setDone] = useState(false);\n    const [selectedAnswer, setSelectedAnswer] = useState()\n\n    const [announcementsHandled, setAnnouncementsHandled] = useState([])\n\n    const {data: announcements, mutate: refresh} = useActiveBannerAnnouncement()\n    const {mutate: mutateAnswer, isLoading, error} = useMutate(answerToBannerAnnouncement, () => {\n        setDone(true)\n    })\n\n    const transitions = useTransition(announcements?.length > 0 || !!currentAnnouncement, {\n        from: { opacity: 0 },\n        enter: { opacity: 1 },\n        leave: { opacity: 0 },\n        config: {duration: 1300}\n    });\n\n    useEffect(() => {\n        const announcement = announcements?.[0]\n        if (announcement && !announcementsHandled.includes(announcement?.id) && !done) {\n            setCurrentAnnouncement(announcement)\n        }\n    }, [announcementsHandled, announcements, done]);\n\n    async function userAnswer(answer) {\n        setSelectedAnswer(answer)\n        await mutateAnswer(currentAnnouncement.id, answer.id)\n        await refresh()\n    }\n\n    function AnnouncementDone() {\n        return <BannerAnnouncementDone>\n                <h4>{currentAnnouncement.question} {selectedAnswer.name} <i className=\"fa fa-circle-check\"/></h4>\n                <p dangerouslySetInnerHTML={{__html: currentAnnouncement.afterMessage}}/>\n\n                <Button small onClick={nextAnnouncement}>Fermer</Button>\n            </BannerAnnouncementDone>\n    }\n\n    async function nextAnnouncement() {\n        await refresh()\n        setAnnouncementsHandled((prev) => {\n            return [...prev, currentAnnouncement.id];\n        })\n        setCurrentAnnouncement(undefined)\n        setDone(false)\n    }\n\n    async function closeAnnouncement() {\n        if (currentAnnouncement) {\n            const result = await closeBannerAnnouncement(currentAnnouncement.id);\n            if (result.status === 204) {\n                await nextAnnouncement()\n            }\n        }\n    }\n\n    const hasAnswers = !!currentAnnouncement?.answers?.length\n    return <>\n        {transitions((style, item) => {\n                return item && (\n                    <animated.div style={style}>\n                        <Banner>\n                            {!currentAnnouncement ? <Spinner/> : done ? <AnnouncementDone/> : <>\n                                <h3>{currentAnnouncement.title}</h3>\n                                {isLoading ? <Spinner/> : hasAnswers && <Answers>\n                                    {currentAnnouncement.question && <h4>{currentAnnouncement.question}</h4>}\n                                    {\n                                        currentAnnouncement.answers?.map((answer) => {\n                                            return <Button small onClick={() => userAnswer(answer)}\n                                                           key={answer.name}>{answer.name}</Button>\n                                        })\n                                    }\n                                </Answers>}\n                                {!isLoading &&\n                                    <span dangerouslySetInnerHTML={{__html: currentAnnouncement.description}}/>}\n                            </>}\n                            {!hasAnswers && <Close onClick={closeAnnouncement}><i className=\"fa fa-xmark\"/></Close>}\n                        </Banner>\n                    </animated.div>\n                );\n            }\n        )}\n    </>\n}\n","import { useCallback, useEffect, useMemo, useState } from \"react\";\nimport { useSessionStorage } from \"react-use\";\nimport useSWR from \"swr\";\nimport useSWRImmutable from \"swr/immutable\";\nimport useSWRInfinite from \"swr/infinite\";\n\nimport {\n  setActivityAsInteracted,\n  getActivityEndpoint,\n} from \"@agir/activity/common/api\";\nimport { ACTIVITY_STATUS } from \"@agir/activity/common/helpers\";\n\nconst ACTIVITY_PAGE_SIZE = 10;\n\nexport const useActivities = () => {\n  const { data, error, mutate, size, setSize, isValidating } = useSWRInfinite(\n    (index) =>\n      getActivityEndpoint(\"activities\", {\n        page: index + 1,\n        pageSize: ACTIVITY_PAGE_SIZE,\n      }),\n  );\n\n  const activities = useMemo(() => {\n    const activities = {};\n    const activityIds = [];\n    if (Array.isArray(data)) {\n      data.forEach(({ results }) => {\n        if (Array.isArray(results)) {\n          results.forEach((activity) => {\n            if (!activities[activity.id]) {\n              activities[activity.id] = activity;\n              activityIds.push(activity.id);\n            }\n          });\n        }\n      });\n    }\n    return activityIds.map((id) => activities[id]);\n  }, [data]);\n\n  const isLoadingInitialData = !data && !error;\n\n  const isLoadingMore =\n    isLoadingInitialData ||\n    (size > 0 && data && typeof data[size - 1] === \"undefined\");\n\n  const activityCount = (data && data[data.length - 1]?.count) || 0;\n  const isEmpty = activityCount === 0;\n  const isReachingEnd =\n    isEmpty ||\n    activities.length === activityCount ||\n    (data && data[data.length - 1]?.results?.length < ACTIVITY_PAGE_SIZE);\n  const isRefreshing = isValidating && data && data.length === size;\n\n  const loadMore = useCallback(() => setSize(size + 1), [setSize, size]);\n\n  return {\n    activities,\n    error,\n    isLoadingInitialData,\n    isLoadingMore,\n    isRefreshing,\n    loadMore: isEmpty || isReachingEnd ? undefined : loadMore,\n    mutate,\n  };\n};\n\nexport const useUnreadActivityCount = () => {\n  const [isReady, setIsReady] = useState(false);\n  const { data: session } = useSWR(\"/api/session/\");\n  const { data } = useSWR(\n    isReady && getActivityEndpoint(\"unreadActivityCount\"),\n    {\n      dedupingInterval: 10000,\n      focusThrottleInterval: 10000,\n    },\n  );\n\n  useEffect(() => {\n    if (session?.user) {\n      setIsReady(true);\n    }\n  }, [session]);\n\n  return data?.unreadActivityCount || 0;\n};\n\nexport const useCustomAnnouncement = (slug, shouldPause = true) => {\n  const [wasPaused, setIsPaused] = useSessionStorage(`AP__${slug}__p`);\n  const { data: session } = useSWR(\"/api/session/\");\n\n  const isPaused = shouldPause && wasPaused;\n  const { data, mutate, error } = useSWRImmutable(\n    !isPaused && session?.user && slug\n      ? getActivityEndpoint(\"customAnnouncement\", { slug })\n      : null,\n  );\n  const errorStatus = error?.response?.status;\n  const announcement =\n    !data?.id || data?.status === ACTIVITY_STATUS.STATUS_INTERACTED\n      ? null\n      : data;\n\n  const activityId = announcement?.activityId;\n  const dismissCallback = useCallback(async () => {\n    if (!activityId) {\n      return;\n    }\n    await setActivityAsInteracted(activityId);\n\n    mutate(\n      (announcement) => ({\n        ...announcement,\n        status: ACTIVITY_STATUS.STATUS_INTERACTED,\n      }),\n      false,\n    );\n  }, [activityId, mutate]);\n\n  useEffect(() => {\n    shouldPause && errorStatus === 404 && setIsPaused(true);\n  }, [shouldPause, setIsPaused, errorStatus]);\n\n  const isLoading =\n    !isPaused && errorStatus !== 404 && typeof data === \"undefined\";\n\n  return [announcement, dismissCallback, isLoading];\n};\n","import React from \"react\";\n\nimport { useSelector } from \"@agir/front/globalContext/GlobalContext\";\nimport { getRoutes } from \"@agir/front/globalContext/reducers\";\nimport { useMobileApp } from \"@agir/front/app/hooks/useMobileApp\";\n\nimport background from \"./life-ring.svg\";\nimport ConnectedFloatButton from \"@agir/front/allPages/FloatButton\";\n\nfunction FeedbackButton() {\n  const routes = useSelector(getRoutes);\n  const href = routes && routes.feedbackForm;\n  const { isMobileApp } = useMobileApp();\n\n  return (\n    <ConnectedFloatButton\n      background={background}\n      href={href}\n      content={\n        <>\n          <strong>Aidez-nous !</strong>\n          {isMobileApp ? (\n            <span>\n              Donnez votre avis sur l'application Action Populaire&nbsp;→\n            </span>\n          ) : (\n            <span>Donnez votre avis sur le site Action Populaire&nbsp;→</span>\n          )}\n        </>\n      }\n    />\n  );\n}\n\nexport default FeedbackButton;\n","import PropTypes from \"prop-types\";\nimport React, { useCallback, useState } from \"react\";\nimport { useTransition, animated } from \"@react-spring/web\";\nimport { useEffectOnce } from \"react-use\";\nimport styled, { css } from \"styled-components\";\n\nimport { useSelector } from \"@agir/front/globalContext/GlobalContext\";\nimport { getUser, getRoutes } from \"@agir/front/globalContext/reducers\";\nimport { useMobileApp } from \"@agir/front/app/hooks/useMobileApp\";\nimport { useLocalStorage } from \"@agir/lib/utils/hooks\";\n\nimport Tooltip from \"@agir/front/genericComponents/Tooltip\";\n\nconst slideInTransition = {\n  from: { opacity: 0, marginBottom: \"-3rem\" },\n  enter: { opacity: 1, marginBottom: \"0rem\" },\n  leave: { opacity: 0, marginBottom: \"-3rem\" },\n};\n\nconst Button = styled.a`\n  display: flex;\n  align-items: center;\n  justify-content: center;\n  width: 100%;\n  height: 100%;\n  border-radius: 100%;\n  background-color: transparent;\n  background-repeat: no-repeat;\n  background-size: cover;\n  background-position: center center;\n\n  ${({ $background }) =>\n    $background\n      ? css`\n          background-image: url(${$background});\n        `\n      : css`\n          background-color: ${(props) => props.theme.secondary500};\n          &:hover {\n            background-color: ${(props) => props.theme.secondary600};\n          }\n        `}\n\n  &:hover {\n    text-decoration: none;\n  }\n\n  i {\n    font-size: 2em;\n  }\n`;\n\nconst Wrapper = styled(animated.div)`\n  z-index: 100;\n  position: fixed;\n  bottom: 1.5rem;\n  right: 1.5rem;\n  width: 3.5rem;\n  height: 3.5rem;\n  border-radius: 50%;\n\n  @media (max-width: ${(props) => props.theme.collapse}px) {\n    width: 3rem;\n    height: 3rem;\n    bottom: 6.5rem;\n  }\n`;\n\nexport const FloatButton = (props) => {\n  const { isActive, shouldPushTooltip, href, content, icon, label } = props;\n\n  const [hasTooltip, setHasTooltip] = useState(false);\n\n  const hideTooltip = useCallback(() => {\n    setHasTooltip(false);\n  }, []);\n\n  const showTooltip = useCallback(() => {\n    setHasTooltip(true);\n  }, []);\n\n  const pushTooltip = useCallback(() => {\n    shouldPushTooltip && showTooltip();\n  }, [shouldPushTooltip, showTooltip]);\n\n  const wrapperTransition = useTransition(isActive, {\n    ...slideInTransition,\n    onRest: pushTooltip,\n  });\n\n  return wrapperTransition((style, item) =>\n    item ? (\n      <Wrapper style={{ ...(props.style || {}), ...style }}>\n        <Tooltip\n          position=\"top-left\"\n          shouldShow={hasTooltip}\n          onClose={shouldPushTooltip ? hideTooltip : undefined}\n        >\n          {content}\n        </Tooltip>\n        <Button\n          $background={props.background}\n          href={href}\n          aria-label={label}\n          onMouseOver={shouldPushTooltip ? undefined : showTooltip}\n          onMouseLeave={shouldPushTooltip ? undefined : hideTooltip}\n        >\n          <i className={icon} />\n        </Button>\n      </Wrapper>\n    ) : null,\n  );\n};\nFloatButton.propTypes = {\n  isActive: PropTypes.bool,\n  shouldPushTooltip: PropTypes.bool,\n  href: PropTypes.string,\n};\n\nconst ConnectedFloatButton = (props) => {\n  const user = useSelector(getUser);\n  const [visitCount, setVisitCount] = useLocalStorage(\"AP_vcount\", 0);\n  const [shouldPushTooltip, setShouldPushTooltip] = useState(false);\n\n  useEffectOnce(() => {\n    const count = visitCount + 1;\n    count % 20 === 3 && setShouldPushTooltip(true);\n    setVisitCount(count);\n  });\n\n  return (\n    <FloatButton\n      {...props}\n      shouldPushTooltip={shouldPushTooltip}\n      isActive={!!user}\n    />\n  );\n};\nexport default ConnectedFloatButton;\n","import React from \"react\";\n\nimport { useSelector } from \"@agir/front/globalContext/GlobalContext\";\nimport { getRoutes } from \"@agir/front/globalContext/reducers\";\n\nimport ConnectedFloatButton from \"@agir/front/allPages/FloatButton\";\n\nfunction HelpButton() {\n  const routes = useSelector(getRoutes);\n  const href = routes && routes.help;\n\n  return (\n    <ConnectedFloatButton\n      icon=\"fa-regular fa-circle-question\"\n      label=\"Aide\"\n      href={href}\n      content={<strong>Besoin d'aide ?</strong>}\n    />\n  );\n}\n\nexport default HelpButton;\n","import React from \"react\";\n\nimport * as style from \"@agir/front/genericComponents/_variables-light.scss\";\n\nimport { RawFeatherIcon } from \"@agir/front/genericComponents/FeatherIcon\";\n\nconst ACTIONS = {\n  donations: (user) =>\n    !!user?.activeContribution && user.activeContribution.renewable\n      ? {\n          key: \"contributionRenewal\",\n          route: \"contributionRenewal\",\n          label: [\"Financer\", \"Renouveler mon financement\"],\n          icon: \"refresh-cw\",\n          color: \"#FD3D66\",\n        }\n      : {\n          key: \"donations\",\n          route: \"donationLanding\",\n          label: [\"Don\", \"Faire un don\"],\n          icon: \"fa-circle-euro\",\n          color: \"#FD3D66\",\n        },\n  contributions: (user) =>\n    !!user?.activeContribution && !user.activeContribution.renewable\n      ? {\n          key: \"contributions\",\n          route: \"donations\",\n          label: [\"Don\", \"Faire un don\"],\n          icon: \"heart\",\n          color: \"#FD3D66\",\n        }\n      : !!user?.activeContribution?.renewable\n        ? {\n            key: \"contributionRenewal\",\n            route: \"contributionRenewal\",\n            label: [\"Financer\", \"Renouveler mon financement\"],\n            icon: \"refresh-cw\",\n            color: \"#FD3D66\",\n          }\n        : {\n            key: \"contributions\",\n            route: \"contributions\",\n            label: [\"Financer\", \"Devenir financeur·euse\"],\n            icon: \"trending-up\",\n            color: \"#FD3D66\",\n          },\n  createEvent: {\n    key: \"createEvent\",\n    route: \"createEvent\",\n    label: [\"Créer événement\", \"Créer un événement\"],\n    color: \"primary500\",\n    icon: (\n      <span>\n        <svg\n          width=\"24\"\n          height=\"24\"\n          viewBox=\"0 0 16 16\"\n          fill=\"none\"\n          stroke=\"currentcolor\"\n          strokeWidth={1.33}\n          strokeLinecap=\"round\"\n          strokeLinejoin=\"round\"\n          xmlns=\"http://www.w3.org/2000/svg\"\n        >\n          <path d=\"M14 8.99999V3.99999C14 3.26361 13.403 2.66666 12.6667 2.66666H3.33333C2.59695 2.66666 2 3.26361 2 3.99999V13.3333C2 14.0697 2.59695 14.6667 3.33333 14.6667H8.66667\" />\n          <path d=\"M10.6667 1.33334V4.00001\" />\n          <path d=\"M5.33331 1.33334V4.00001\" />\n          <path d=\"M2 6.66666H14\" />\n          <path d=\"M12.6667 11.3333V15.3333\" />\n          <path d=\"M14.6667 13.3333H10.6667\" />\n        </svg>\n      </span>\n    ),\n  },\n  coupDeFil: {\n    key: \"coupDeFil\",\n    route: \"coupDeFil\",\n    label: [\"Coup de fil\", \"Coup de fil pour convaincre\"],\n    icon: \"phone\",\n    color: \"success500\",\n  },\n  materiel: {\n    key: \"materiel\",\n    route: \"materiel\",\n    label: \"Matériel\",\n    icon: \"fa-box-taped\",\n    color: \"secondary500\",\n    textColor: \"text1000\",\n  },\n  createContact: {\n    key: \"createContact\",\n    route: \"createContact\",\n    label: [\"Ajouter contact\", \"Ajouter un contact\"],\n    icon: \"user-plus\",\n    color: \"primary600\",\n    textColor: \"background0\",\n  },\n  toktokPreview: {\n    key: \"toktokPreview\",\n    route: \"toktokPreview\",\n    label: [\"Porte-à-porte\", \"TokTok - Porte-à-porte\"],\n    icon: (\n      <span style={{ backgroundColor: \"PULBleu\" }}>\n        <svg\n          width=\"24\"\n          height=\"24\"\n          viewBox=\"0 0 24 24\"\n          fill=\"none\"\n          xmlns=\"http://www.w3.org/2000/svg\"\n        >\n          <path\n            d=\"M19.5 21V1.5H4.5V21\"\n            stroke=\"white\"\n            strokeWidth=\"2.25\"\n            strokeLinecap=\"round\"\n            strokeLinejoin=\"round\"\n          />\n          <line\n            x1=\"2.625\"\n            y1=\"21.375\"\n            x2=\"21.375\"\n            y2=\"21.375\"\n            stroke=\"white\"\n            strokeWidth=\"2.25\"\n            strokeLinecap=\"round\"\n            strokeLinejoin=\"round\"\n          />\n          <circle cx=\"15\" cy=\"10.5\" r=\"1.5\" fill=\"white\" />\n        </svg>\n      </span>\n    ),\n    color: \"primary500\",\n  },\n  votingProxy: (user) =>\n    user?.votingProxyId && user?.hasVotingProxyRequests\n      ? {\n          key: \"votingProxy\",\n          route: \"acceptedVotingProxyRequests\",\n          routeParams: { votingProxyPk: user.votingProxyId },\n          label: [\"Mes procurations\", \"Mes procurations de vote\"],\n          icon: \"edit-3\",\n          color: \"votingProxyOrange\",\n        }\n      : {\n          key: \"votingProxy\",\n          route: \"votingProxyLandingPage\",\n          label: [\"Procuration\", \"Espace procurations\"],\n          icon: \"edit-3\",\n          color: \"votingProxyOrange\",\n        },\n  actionTools: {\n    key: \"actionTools\",\n    route: \"actionTools\",\n    label: \"Voir tout\",\n    icon: \"arrow-right\",\n    textColor: \"text1000\",\n    borderColor: \"text200\",\n  },\n  newPollingStationOfficer: {\n    key: \"newPollingStationOfficer\",\n    route: \"newPollingStationOfficer\",\n    label: [\"Assesseurs/délégués\", \"Devenir assesseur·e ou délégué·e\"],\n    icon: (\n      <span style={{ backgroundColor: \"referralPink\" }}>\n        <svg\n          width=\"25\"\n          height=\"24\"\n          viewBox=\"0 0 25 24\"\n          fill=\"none\"\n          xmlns=\"http://www.w3.org/2000/svg\"\n        >\n          <g clipPath=\"url(#clip0_5242_40128)\">\n            <path\n              d=\"M3.5 15H2C1.44772 15 1 15.4477 1 16V21C1 21.5523 1.44772 22 2 22H22C22.5523 22 23 21.5523 23 21V16.5C23 15.9477 22.5523 15.5 22 15.5H20.5M5.5 15.5V3C5.5 2.44772 5.94772 2 6.5 2H17.5C18.0523 2 18.5 2.44771 18.5 3V15.5C18.5 16.0523 18.0523 16.5 17.5 16.5H6.5C5.94772 16.5 5.5 16.0523 5.5 15.5Z\"\n              stroke=\"white\"\n              strokeWidth=\"2\"\n            />\n            <path\n              d=\"M9 8.6L10.299 10.1588C10.6754 10.6105 11.3585 10.6415 11.7743 10.2257L15 7\"\n              stroke=\"white\"\n              strokeWidth=\"2\"\n            />\n          </g>\n          <defs>\n            <clipPath id=\"clip0_5242_40128\">\n              <rect\n                width=\"24\"\n                height=\"24\"\n                fill=\"white\"\n                transform=\"translate(0.5)\"\n              />\n            </clipPath>\n          </defs>\n        </svg>\n      </span>\n    ),\n  },\n  help: {\n    key: \"help\",\n    route: \"help\",\n    label: [\"Aide\", \"Centre d'aide\"],\n    icon: \"help-circle\",\n    color: \"text100\",\n    textColor: \"text1000\",\n  },\n  publicMeetingRequest: {\n    key: \"publicMeetingRequest\",\n    route: \"publicMeetingRequest\",\n    label: [\"Réunion publique\", \"Organiser une réunion publique\"],\n    icon: \"radio\",\n    color: \"#00ace0\",\n  },\n  cafePopulaireRequest: {\n    key: \"cafePopulaireRequest\",\n    route: \"cafePopulaireRequest\",\n    label: [\"Café populaire\", \"Organiser un café populaire\"],\n    icon: \"coffee\",\n    color: \"#00B171\",\n  },\n  joinGroup: {\n    key: \"joinGroup\",\n    route: \"groupMap\",\n    label: [\"Groupes d'action\", \"Rejoindre un groupe d'action\"],\n    icon: \"fa-people-group\",\n    color: \"vermillon\",\n  },\n};\n\nconst DEFAULT_ACTION_ORDER = [\n  \"donations\",\n  \"createEvent\",\n  \"joinGroup\",\n  \"materiel\",\n  \"help\",\n  \"actionTools\",\n];\n\nconst GROUP_MANAGER_ACTION_ORDER = [\n  \"donations\",\n  \"createEvent\",\n  \"materiel\",\n  \"help\",\n  \"actionTools\",\n];\n\nexport const getActionsForUser = (user) => {\n  let actions = DEFAULT_ACTION_ORDER;\n\n  if (!!user?.groups?.some((group) => group.isManager)) {\n    actions = GROUP_MANAGER_ACTION_ORDER;\n  }\n\n  return actions\n    .map((key) =>\n      typeof ACTIONS[key] === \"function\" ? ACTIONS[key](user) : ACTIONS[key],\n    )\n    .filter(Boolean);\n};\n\nexport default ACTIONS;\n","import PropTypes from \"prop-types\";\nimport React from \"react\";\nimport styled from \"styled-components\";\n\nimport Link from \"@agir/front/app/Link\";\nimport { useResponsiveMemo } from \"@agir/front/genericComponents/grid\";\nimport { RawFeatherIcon } from \"@agir/front/genericComponents/FeatherIcon\";\nimport Icon from \"@agir/front/genericComponents/Icon\";\n\nconst StyledButton = styled(Link)`\n  display: inline-flex;\n  flex-flow: column nowrap;\n  align-items: center;\n  gap: 8px;\n  width: 80px;\n  font-size: 12px;\n  line-height: 1.5;\n  font-weight: 400;\n  text-align: center;\n  color: ${(props) => props.theme.text700};\n\n  @media (min-width: ${(props) => props.theme.collapse}px) {\n    width: 100%;\n    flex-flow: row nowrap;\n    gap: 0;\n    font-size: 0.875rem;\n    height: 2rem;\n  }\n\n  &,\n  &:hover,\n  &:focus {\n    text-decoration: none;\n  }\n\n  &[disabled],\n  &[disabled]:hover,\n  &[disabled]:focus {\n    opacity: 0.5;\n    cursor: default;\n    color: ${(props) => props.theme.success500};\n    text-decoration: line-through;\n  }\n\n  i {\n    font-size: 2em;\n  }\n\n  & > ${RawFeatherIcon}, & > span:has(> svg),\n  i {\n    border: 1px solid;\n    border-color: ${(props) =>\n      props.$borderColor\n        ? props.theme[props.$borderColor] || props.$borderColor\n        : \"transparent\"};\n    background-color: ${(props) =>\n      props.$color ? props.theme[props.$color] || props.$color : \"transparent\"};\n  }\n\n  ${RawFeatherIcon} {\n    svg {\n      width: 1.7em;\n      height: 1.7rem;\n    }\n  }\n\n  & > span,\n  i {\n    flex: 0 0 50px;\n    width: 50px;\n    height: 50px;\n    display: inline-flex;\n    align-items: center;\n    justify-content: center;\n    border-radius: 100%;\n    color: ${(props) =>\n      props.$textColor\n        ? props.theme[props.$textColor] || props.$textColor\n        : props.theme.background0};\n\n    @media (min-width: ${(props) => props.theme.collapse}px) {\n      transform-origin: left center;\n      transform: scale(0.64);\n      margin-right: -10px;\n    }\n  }\n\n  & > strong {\n    font-weight: inherit;\n    white-space: nowrap;\n    max-width: 100%;\n    overflow: hidden;\n    text-overflow: ellipsis;\n  }\n`;\n\nconst ActionButton = (props) => {\n  const {\n    route,\n    routeParams,\n    label,\n    icon,\n    color,\n    textColor,\n    borderColor,\n    className,\n    disabled = false,\n  } = props;\n\n  const visibileLabel = useResponsiveMemo(\n    Array.isArray(label) ? label[0] : label,\n    Array.isArray(label) ? label[1] : label,\n  );\n\n  return (\n    <StyledButton\n      $color={color}\n      $textColor={textColor}\n      $borderColor={borderColor}\n      disabled={disabled}\n      onClick={disabled ? (e) => e.preventDefault() : undefined}\n      onMouseDown={(e) => e.preventDefault()}\n      className={className}\n      route={route}\n      routeParams={routeParams}\n    >\n      {typeof icon === \"string\" ? <Icon name={icon} /> : icon}\n      <strong title={Array.isArray(label) ? label[1] : label}>\n        {visibileLabel}\n      </strong>\n    </StyledButton>\n  );\n};\nActionButton.propTypes = {\n  route: PropTypes.string,\n  routeParams: PropTypes.object,\n  label: PropTypes.oneOfType([\n    PropTypes.arrayOf(PropTypes.node),\n    PropTypes.node,\n  ]),\n  icon: PropTypes.oneOfType([PropTypes.string, PropTypes.node]),\n  color: PropTypes.string,\n  textColor: PropTypes.string,\n  borderColor: PropTypes.string,\n  className: PropTypes.string,\n  disabled: PropTypes.bool,\n};\nexport default ActionButton;\n","import PropTypes from \"prop-types\";\nimport React, { useMemo } from \"react\";\nimport { animated, useSpring } from \"@react-spring/web\";\nimport styled from \"styled-components\";\nimport { Swiper, SwiperSlide } from \"swiper/react\";\nimport useSWR from \"swr\";\n\nimport \"swiper/css\";\n\nimport * as style from \"@agir/front/genericComponents/_variables-light.scss\";\n\nimport { getActionsForUser } from \"./actions.config\";\n\nimport { ResponsiveLayout } from \"@agir/front/genericComponents/grid\";\nimport ActionButton from \"./ActionButton\";\n\nconst Carousel = styled(animated.div)`\n  position: relative;\n  isolation: isolate;\n  margin: 0 -1rem;\n  width: calc(100% + 2rem);\n\n  & > * {\n    z-index: 0;\n  }\n\n  .swiper-slide {\n    padding: 0 4px;\n\n    &:first-child {\n      padding-left: 16px;\n    }\n\n    &:last-child {\n      padding-right: 16px;\n    }\n  }\n\n  &::before,\n  &::after {\n    content: \"\";\n    display: block;\n    position: absolute;\n    top: 0;\n    bottom: 0;\n    height: 100%;\n    width: 16px;\n    z-index: 1;\n    pointer-events: none;\n  }\n\n  &::before {\n    left: 0;\n    background: linear-gradient(\n      90deg,\n      ${(props) => props.theme.text25},\n      ${(props) => props.theme.text25}00\n    );\n  }\n\n  &::after {\n    right: 0;\n    background: linear-gradient(\n      -90deg,\n      ${(props) => props.theme.text25},\n      ${(props) => props.theme.text25}00\n    );\n  }\n`;\n\nconst StyledActionList = styled.nav`\n  width: 100%;\n  display: flex;\n  flex-flow: column nowrap;\n  gap: 0.5rem;\n  min-height: 1px;\n  padding: 0;\n  margin: 0;\n`;\n\nconst getSwiperBreakpoints = (slides = [], slideWidth) => {\n  const breakpoints = {};\n  for (\n    let breakpoint = style.collapse, slidesPerView = slides.length;\n    breakpoint > 0 && slidesPerView >= 3;\n    breakpoint -= slideWidth\n  ) {\n    slidesPerView = Math.ceil(breakpoint / slideWidth) - 0.5;\n    breakpoints[breakpoint] = {\n      slidesPerView,\n    };\n  }\n  return breakpoints;\n};\n\nexport const ActionButtonCarousel = (props) => {\n  const { actions } = props;\n  const breakpoints = useMemo(\n    () => getSwiperBreakpoints(actions, 75 + 8),\n    [actions],\n  );\n\n  const style = useSpring({\n    from: {\n      opacity: 0,\n      paddingLeft: 24,\n    },\n    to: {\n      opacity: 1,\n      paddingLeft: 0,\n    },\n  });\n\n  return (\n    <Carousel style={style}>\n      <Swiper\n        slidesPerView={3}\n        breakpoints={breakpoints}\n        centerInsufficientSlides\n      >\n        {actions\n          .slice(0, 3)\n          .filter((action) => !action.disabled)\n          .map((action) => (\n            <SwiperSlide key={action.key}>\n              <ActionButton {...action} />\n            </SwiperSlide>\n          ))}\n      </Swiper>\n    </Carousel>\n  );\n};\nActionButtonCarousel.propTypes = {\n  actions: PropTypes.arrayOf(PropTypes.object),\n};\n\nconst ActionButtonList = ({ actions }) => (\n  <StyledActionList>\n    {actions.map((action) => (\n      <ActionButton key={action.key} {...action} />\n    ))}\n  </StyledActionList>\n);\nActionButtonList.propTypes = {\n  actions: PropTypes.arrayOf(PropTypes.object),\n};\n\nexport const ActionButtons = ({ user }) => {\n  const actions = getActionsForUser(user);\n\n  return (\n    <ResponsiveLayout\n      MobileLayout={ActionButtonCarousel}\n      DesktopLayout={ActionButtonList}\n      actions={actions}\n    />\n  );\n};\nActionButtons.propTypes = {\n  user: PropTypes.object,\n};\n\nconst ConnectedActionButtons = () => {\n  const { data: session } = useSWR(\"/api/session/\");\n  return <ActionButtons user={session?.user} />;\n};\n\nexport default ConnectedActionButtons;\n","import PropTypes from \"prop-types\";\nimport React from \"react\";\nimport { ErrorBoundary as SentryErrorBoundary } from \"@sentry/react\";\n\nimport ErrorPage from \"@agir/front/errorPage/ErrorPage\";\n\nimport generateLogger from \"@agir/lib/utils/logger\";\n\nconst logger = generateLogger(__filename);\n\nclass DevErrorBoundary extends React.Component {\n  constructor(props) {\n    super(props);\n    this.state = {\n      errorMessage: \"\",\n    };\n  }\n\n  static getDerivedStateFromError(error) {\n    return {\n      errorMessage: error !== undefined ? error.toString() : `Une erreur s'est produite`,\n    };\n  }\n\n  componentDidCatch(error, info) {\n    logger.debug(error, info);\n  }\n\n  render() {\n    const { children, Fallback: CustomFallback } = this.props;\n    const { errorMessage } = this.state;\n\n    if (!errorMessage) {\n      return children;\n    }\n\n    if (CustomFallback) {\n      return <CustomFallback {...this.props} errorMessage={errorMessage} />;\n    }\n\n    return <ErrorPage errorMessage={errorMessage} />;\n  }\n}\n\nconst ProdErrorBoundary = (props) => {\n  const { children, Fallback: CustomFallback } = props;\n\n  const fallback = ({ error }) =>\n    CustomFallback ? (\n      <CustomFallback {...props} errorMessage={error.toString()} />\n    ) : (\n      <ErrorPage />\n    );\n\n  return (\n    <SentryErrorBoundary fallback={fallback}>{children}</SentryErrorBoundary>\n  );\n};\n\nDevErrorBoundary.propTypes = ProdErrorBoundary.propTypes = {\n  children: PropTypes.node,\n  Fallback: PropTypes.oneOfType([PropTypes.func, PropTypes.element]),\n};\n\nconst ErrorBoundary =\n  process.env.NODE_ENV === \"production\" ? ProdErrorBoundary : DevErrorBoundary;\n\nexport default ErrorBoundary;\n","import styled from \"styled-components\";\n\nexport const LayoutSubtitle = styled.h2`\n  color: ${(props) => props.theme.text700};\n  font-weight: 400;\n  font-size: 0.875rem;\n  margin: 0.75rem 0;\n\n  @media (max-width: ${(props) => props.theme.collapse}px) {\n    display: none;\n  }\n`;\n\nexport const LayoutTitle = styled.h1`\n  display: flex;\n  align-items: center;\n  font-size: 1.625rem;\n  margin: 0;\n\n  @media (max-width: ${(props) => props.theme.collapse}px) {\n    display: none;\n  }\n`;\n","import React, {useState} from \"react\";\n\nimport {useSelector} from \"@agir/front/globalContext/GlobalContext\";\nimport {getUser} from \"@agir/front/globalContext/reducers\";\nimport {SoutienBannerContainer} from \"@agir/presidentielle2027/SoutienPage/SoutienBanner\";\nimport Button from \"@agir/front/genericComponents/Button\";\nimport {mergeSoutienClone, useCloneSoutien} from \"@agir/presidentielle2027/SoutienPage/soutien.api\";\nimport styled from \"styled-components\";\nimport {useMutate} from \"@agir/front/app/apiHook\";\nimport {useToast} from \"@agir/front/globalContext/hooks\";\n\nconst SoutienCloneButton = styled.div`\n  display: flex;\n  justify-content: space-around;\n  gap: 10px;\n`\n\nexport default function SoutienBannerConfirmPhone() {\n  const sendToast = useToast();\n\n  const {data: clone, isLoading, mutate: refresh }= useCloneSoutien();\n\n  const {mutate: merge, isLoading: cloneIsLoading} = useMutate(\n    mergeSoutienClone,\n    (status) => {\n\n      // force to update useswr cache, even on 404\n      refresh(undefined, { revalidate: false });\n\n      if (status === 202) {\n        sendToast(`Le numéro de téléphone ${clone?.contact_phone} a bien été enregistré sur votre profil !`, \"SUCCESS\");\n      } else {\n        sendToast(`Le numéro sur votre profil n'a pas été changé.`, \"INFO\");\n      }\n    }\n  );\n  \n  if (!isLoading && clone) {\n    return <SoutienBannerContainer>\n      <div>\n        <p>Vous avez soutenu la candidature de Jean-Luc Mélenchon avec un autre numéro de téléphone que celui indiqué dans votre profil. Le numéro : <strong>{clone?.contact_phone}</strong> est-il bien le vôtre ?</p>\n\n    <SoutienCloneButton>\n      <Button\n        onClick={() => merge(false)}\n        disabled={cloneIsLoading}\n        style={{ minWidth: '320px' }}>\n        Non, ce n'est pas mon numéro\n      </Button>\n      <Button\n        onClick={() => merge(true)}\n        loading={cloneIsLoading}\n        color=\"soutien\">\n        Oui, c'est mon numéro\n      </Button>\n    </SoutienCloneButton>\n    </div>\n  </SoutienBannerContainer>\n  }\n  return null;\n}\n","import React from \"react\";\nimport styled from \"styled-components\";\nimport SoutienProgressBar, {\n  SoutienProgressBarContainer,\n} from \"./SoutienProgressBar\";\nimport Button from \"@agir/front/genericComponents/Button\";\nimport { useSelector } from \"@agir/front/globalContext/GlobalContext\";\nimport { getUser } from \"@agir/front/globalContext/reducers\";\nimport SoutienBannerConfirmPhone from \"@agir/presidentielle2027/SoutienPage/SoutienBannerConfirmPhone\";\n\nconst SoutienBannerButton = styled.div``;\n\nexport const SoutienBannerContainer = styled.div`\n  @keyframes fadeIn {\n      from {\n          opacity: 0;\n      }\n      to {\n          opacity: 1;\n      }\n  }\n\n  animation: fadeIn 1s ease-in-out;\n\n  animation-fill-mode: forwards;\n  display: flex;\n  justify-content: space-around;\n\n  border: 1px solid #232323;\n  border-radius: 8px;\n  align-items: center;\n    \n  margin-bottom: 10px;\n    \n  ${SoutienProgressBarContainer} {\n      margin-top: 0;\n  }\n\n  @media (max-width: ${(props) => props.theme.collapse}px) {\n    flex-direction: column;\n    gap: 10px;\n    border: none;\n    border-bottom: 1px solid #232323;\n    border-radius: 0;\n    padding: 0 1rem 10px 1rem;\n    margin-bottom: 10px;\n\n    ${SoutienProgressBarContainer} {\n        margin-top: 0;\n    }\n  }\n\n  padding: 20px;\n\n  ${SoutienBannerButton} {\n    min-width: 250px;\n    display: flex;\n    justify-content: center;\n  }\n\n  a {\n    background-color: ${({ theme }) => theme.LFIsecondary500};\n    color: white;\n    border-radius: 0;\n    font-weight: bold;\n    border: none;\n\n    &:hover {\n      background-color: ${({ theme }) => theme.LFIsecondary500}99;\n      color: white;\n    }\n  }\n`;\n\nexport default function SoutienBanner() {\n  const user = useSelector(getUser);\n\n  if (!window?.apConfig?.soutien?.enabledFront) {\n    return null;\n  }\n\n  return !user?.soutien2027 ? (\n    <SoutienBannerContainer>\n      <SoutienProgressBar\n        title={\n          <p style={{ marginBottom: \"1rem\" }}>\n            Soutenez la candidature de <b>Jean-Luc Mélenchon</b> pour l'élection{\" \"}\n            présidentielle de <b>2027</b> !\n          </p>\n        }\n      />\n      <SoutienBannerButton>\n        <Button link route=\"/soutien\">\n          Je soutiens <i className=\"fa fa-paper-plane\" />\n        </Button>\n      </SoutienBannerButton>\n    </SoutienBannerContainer>\n  ) : <SoutienBannerConfirmPhone />;\n}\n","import PropTypes from \"prop-types\";\nimport React from \"react\";\nimport styled from \"styled-components\";\n\nimport BottomBar from \"@agir/front/app/Navigation/BottomBar\";\nimport SoutienBanner from \"@agir/presidentielle2027/SoutienPage/SoutienBanner\";\n\nconst StyledContainer = styled.div`\n  padding-top: 14px;\n  padding-bottom: 14px;\n  background-color: ${(props) =>\n    props.$smallBackgroundColor\n      ? props.theme[props.$smallBackgroundColor] || props.$smallBackgroundColor\n      : \"transparent\"};\n`;\n\nconst MobileLayout = (props) => {\n  const { children } = props;\n\n  return (\n    <StyledContainer {...props}>\n      <SoutienBanner />\n      <section>{children}</section>\n      <BottomBar {...props} />\n    </StyledContainer>\n  );\n};\n\nexport default MobileLayout;\n\nMobileLayout.propTypes = {\n  children: PropTypes.node,\n};\n","import PropTypes from \"prop-types\";\nimport React, { useCallback, useRef } from \"react\";\nimport styled from \"styled-components\";\n\nconst Image = styled.div`\n  flex: 0 0 130px;\n  width: 100%;\n  background-repeat: no-repeat;\n  background-size:\n    0 0,\n    cover;\n  background-position: center center;\n  border-radius: ${(props) => props.theme.borderRadius};\n\n  @media (max-width: ${(props) => props.theme.collapse}px) {\n    flex: 0 0 80px;\n    height: 80px;\n    border-radius: 0;\n    background-size:\n      cover,\n      0 0;\n  }\n`;\n\nconst Container = styled.article`\n  display: flex;\n  flex-flow: column nowrap;\n  align-items: stretch;\n  justify-content: flex-start;\n  max-width: 255px;\n  cursor: ${({ $isClickable }) => ($isClickable ? \"pointer\" : \"default\")};\n\n  & + & {\n    margin-top: 1.5rem;\n  }\n\n  div + div {\n    margin-top: 1rem;\n  }\n\n  h3,\n  p {\n    line-height: 1.45;\n    overflow: hidden;\n    font-size: 0.875rem;\n  }\n\n  h3 {\n    display: block;\n    margin: 0;\n    margin-bottom: 0.125rem;\n    font-weight: 700;\n    color: ${(props) => props.theme.primary500};\n\n    a,\n    span {\n      color: inherit;\n    }\n  }\n\n  @media (max-width: ${(props) => props.theme.collapse}px) {\n    flex-flow: row nowrap;\n    border: 1px solid ${(props) => props.theme.primary500};\n    padding: 1rem;\n    border-radius: 4px;\n    max-width: 100%;\n    height: 112px;\n    box-shadow: 0px 3px 2px rgba(0, 35, 44, 0.05);\n\n    & + & {\n      margin-top: 0;\n    }\n\n    div {\n      max-height: 72px;\n      overflow: hidden;\n    }\n\n    div + div {\n      margin-top: 0;\n      margin-left: 1rem;\n    }\n\n    h3,\n    a {\n      color: ${(props) => props.theme.primary500};\n    }\n\n    p {\n      font-size: 0.75rem;\n    }\n  }\n`;\n\nconst Announcement = (props) => {\n  const { title, content, image, link } = props;\n  const linkRef = useRef(null);\n  const handleClick = useCallback(() => {\n    linkRef.current && linkRef.current.click();\n  }, []);\n  return (\n    <Container $isClickable={!!link} onClick={handleClick}>\n      {image && image.mobile && image.desktop ? (\n        <Image\n          aria-label={title}\n          style={{\n            backgroundImage: `url(${image.mobile}), url(${image.desktop})`,\n          }}\n        />\n      ) : null}\n      <div>\n        <h3>\n          {link ? (\n            <a ref={linkRef} href={link}>\n              {title}\n            </a>\n          ) : (\n            <span>{title}</span>\n          )}\n        </h3>\n        <p dangerouslySetInnerHTML={{ __html: content }} />\n      </div>\n    </Container>\n  );\n};\n\nAnnouncement.propTypes = {\n  title: PropTypes.string.isRequired,\n  content: PropTypes.string.isRequired,\n  image: PropTypes.shape({\n    desktop: PropTypes.string,\n    mobile: PropTypes.string,\n  }),\n  link: PropTypes.string,\n};\n\nexport default Announcement;\n","import React from \"react\";\nimport { useLocation } from \"react-router-dom\";\nimport useSWR from \"swr\";\n\nimport { routeConfig } from \"@agir/front/app/routes.config\";\n\nimport Announcement from \"@agir/front/genericComponents/Announcement\";\n\nconst Announcements = () => {\n  const { pathname } = useLocation();\n\n  const markAsDisplayed = routeConfig.activities.match(pathname) ? \"0\" : \"1\";\n\n  const { data: announcements } = useSWR(\n    \"/api/announcements/?mark_as_displayed=\" + markAsDisplayed,\n  );\n\n  if (!Array.isArray(announcements) || announcements.length === 0) return null;\n\n  return announcements.map((announcement) => (\n    <Announcement key={announcement.id} {...announcement} />\n  ));\n};\n\nexport default Announcements;\n","import React from \"react\";\nimport styled from \"styled-components\";\nimport useSWR from \"swr\";\n\nimport Button from \"@agir/front/genericComponents/Button\";\n\nimport { useCustomAnnouncement } from \"@agir/activity/common/hooks\";\nimport { useMobileApp } from \"@agir/front/app/hooks/useMobileApp\";\n\nimport facebookLogo from \"@agir/front/genericComponents/logos/facebook.svg\";\nimport facebookWhiteLogo from \"@agir/front/genericComponents/logos/facebook_white.svg\";\n\nconst FacebookLoginContainer = styled.div`\n  background-color: ${(props) => props.theme.facebookLight};\n  color: ${(props) => props.theme.black};\n  max-width: 15.9375rem;\n  border-radius: ${(props) => props.theme.borderRadius};\n  padding: 1.5rem;\n  font-size: 0.875rem;\n  margin-bottom: 1rem;\n\n  h6 {\n    color: inherit;\n  }\n`;\n\nconst DismissMessage = styled.a`\n  color: ${(props) => props.theme.black};\n  text-decoration: underline;\n  margin-top: 1rem;\n\n  &:hover {\n    color: ${(props) => props.theme.black};\n  }\n`;\n\nconst FacebookLoginAd = () => {\n  const [announcement, dismissCallback] =\n    useCustomAnnouncement(\"facebook-login-ad\");\n\n  const { data: session } = useSWR(\"/api/session/\");\n  const { isIOS } = useMobileApp();\n\n  return session && !session.facebookLogin && !isIOS && announcement ? (\n    <FacebookLoginContainer>\n      <img\n        src={facebookLogo}\n        width=\"32\"\n        height=\"32\"\n        style={{ height: \"32px\", marginBottom: \"6px\" }}\n        alt=\"Facebook\"\n      />\n      <h6>Facilitez vos prochaines connexions</h6>\n      <p>\n        Connectez votre compte à Facebook maintenant pour ne pas avoir à taper\n        de code la prochaine fois.\n      </p>\n      <Button\n        style={{ margin: \"16px 0\" }}\n        small\n        color=\"facebook\"\n        link\n        route=\"facebookLogin\"\n      >\n        <img\n          style={{ height: \"16px\", marginRight: \"5px\" }}\n          src={facebookWhiteLogo}\n          width=\"16\"\n          height=\"16\"\n        />\n        Connecter le compte\n      </Button>\n      <DismissMessage href=\"#\" onClick={dismissCallback}>\n        Ne plus afficher ce message\n      </DismissMessage>\n    </FacebookLoginContainer>\n  ) : null;\n};\n\nexport default FacebookLoginAd;\n","import PropTypes from \"prop-types\";\nimport React from \"react\";\nimport styled from \"styled-components\";\n\nimport Link from \"@agir/front/app/Link\";\n\nconst StyledLink = styled(Link)``;\n\nconst StyledMenu = styled.ul`\n  width: 100%;\n  margin-top: 0;\n  margin-bottom: 1rem;\n  list-style-type: none;\n  font-weight: 400;\n  color: ${(props) => props.theme.text500};\n\n  h6 {\n    font-size: 12px;\n    line-height: 15px;\n    color: ${(props) => props.theme.text500};\n    margin-bottom: 0.5rem;\n    font-weight: bold;\n    overflow-wrap: break-word;\n  }\n\n  li {\n    display: block;\n    line-height: 1.2;\n    margin: 0 0 0.5rem;\n    white-space: nowrap;\n    overflow: hidden;\n    max-width: 100%;\n    text-overflow: ellipsis;\n\n    ${StyledLink} {\n      &,\n      &:hover,\n      &:focus,\n      &:active {\n        color: ${(props) => props.theme.text700};\n        font-weight: 400;\n        font-size: 13px;\n        line-height: inherit;\n      }\n    }\n  }\n`;\n\nconst SecondaryMenu = ({ title, links, ...rest }) =>\n  Array.isArray(links) && links.length > 0 ? (\n    <StyledMenu {...rest}>\n      {title ? <h6>{title}</h6> : null}\n      {links.map((link) => (\n        <li key={link.id}>\n          <StyledLink\n            href={link.href || undefined}\n            route={link.route || undefined}\n            to={link.to || undefined}\n            title={link.title || link.label}\n          >\n            {link.title || link.label}\n          </StyledLink>\n        </li>\n      ))}\n    </StyledMenu>\n  ) : null;\n\nSecondaryMenu.propTypes = {\n  title: PropTypes.string,\n  links: PropTypes.arrayOf(\n    PropTypes.shape({\n      href: PropTypes.string,\n      route: PropTypes.string,\n      to: PropTypes.string,\n      title: PropTypes.string,\n      label: PropTypes.string,\n    }),\n  ),\n};\n\nexport default SecondaryMenu;\n","import PropTypes from \"prop-types\";\nimport React, { useMemo } from \"react\";\nimport styled from \"styled-components\";\n\nimport CONFIG from \"@agir/front/app/Navigation/navigation.config\";\n\nimport CounterBadge from \"@agir/front/app/Navigation/CounterBadge\";\nimport Link from \"@agir/front/app/Link\";\nimport { RawFeatherIcon } from \"@agir/front/genericComponents/FeatherIcon\";\nimport SecondaryMenu from \"./SecondaryMenu\";\n\nconst MenuLink = styled(Link)`\n  position: relative;\n  display: flex;\n  flex-flow: row nowrap;\n  align-items: center;\n  height: 1.5rem;\n\n  font-size: 1rem;\n  line-height: 1.5;\n  font-weight: 600;\n  color: ${({ $active, theme }) => ($active ? theme.primary500 : \"inherit\")};\n  padding-bottom: 15px;\n  border-bottom: ${({$active, theme}) => $active ? `${theme.primary500} 3px solid` : \"inherit\"};\n\n  &:hover,\n  &:focus {\n    color: ${({ $active, theme }) => ($active ? theme.primary500 : \"inherit\")};\n    text-decoration: none;\n  }\n\n  ${CounterBadge} {\n    margin-left: auto;\n  }\n\n  ${RawFeatherIcon} {\n    display: inline-block;\n    line-height: 0;\n    color: ${({ $active, theme }) =>\n      $active ? theme.primary500 : theme.text500};\n    margin-right: 0.7rem;\n  }\n\n  ${RawFeatherIcon}:last-child {\n    align-self: baseline;\n    margin-right: 0;\n    margin-left: 0.5rem;\n  }\n\n  i {\n    margin-right: 1rem;\n    font-size: 1.3em;\n\n    color: ${({ $active, theme }) =>\n      $active ? theme.primary500 : theme.text500};\n  }\n`;\n\nconst LINKS = CONFIG.menuLinks.filter(({ desktop }) => !!desktop);\n\nconst NavigationLink = ({\n  link,\n  active,\n  routes,\n  unreadMessageCount = 0,\n  unreadActivityCount = 0,\n}) => {\n\n  const secondaryLinks = useMemo(() => {\n    if (!routes) {\n      return null;\n    }\n    if (Array.isArray(link.secondaryLinks)) {\n      return link.secondaryLinks;\n    }\n\n    return routes[link.secondaryLinks];\n  }, [routes, link.secondaryLinks]);\n\n  return (\n    <li style={{ marginBottom: \"1.5rem\" }}>\n      <MenuLink route={link.route} $active={active === link.id}>\n\n        {link.icon?.includes(\"fa-\") ? (\n          <i className={`fa-regular ${link.icon}`} />\n        ) : (\n          <RawFeatherIcon name={link.icon} />\n        )}\n        <span>{link.title}</span>\n        {link.external && (\n          <RawFeatherIcon\n            name=\"external-link\"\n            inline\n            strokeWidth={1.33}\n            width=\"1rem\"\n            height=\"1rem\"\n          />\n        )}\n\n        {link.unreadMessageBadge && <CounterBadge value={unreadMessageCount} />}\n        {link.unreadActivityBadge && (\n            <CounterBadge value={unreadActivityCount} />\n        )}\n      </MenuLink>\n      <SecondaryMenu style={{ marginTop: \".5rem\" }} links={secondaryLinks} />\n    </li>\n  );\n};\n\nconst Navigation = (props) => {\n  return (\n    <ul style={{ listStyle: \"none\", padding: 0 }}>\n      {LINKS.map((link) => (\n        <NavigationLink key={link.id} {...props} link={link} />\n      ))}\n    </ul>\n  );\n};\n\nNavigation.propTypes = {\n  active: PropTypes.string,\n  unreadActivityCount: PropTypes.number,\n  unreadMessageCount: PropTypes.number,\n  routes: PropTypes.object,\n};\nexport default Navigation;\n","import PropTypes from \"prop-types\";\nimport React, {useEffect, useMemo} from \"react\";\n\nimport CONFIG from \"@agir/front/app/Navigation/navigation.config\";\n\nimport { useSelector } from \"@agir/front/globalContext/GlobalContext\";\nimport { getRoutes, getUser } from \"@agir/front/globalContext/reducers\";\nimport { useUnreadMessageCount } from \"@agir/msgs/common/hooks\";\nimport { useUnreadActivityCount } from \"@agir/activity/common/hooks\";\n\nimport SideBar from \"./SideBar\";\nimport SecondaryMenu from \"./SecondaryMenu\";\n\nexport const SecondarySideBar = () => (\n  <SecondaryMenu\n    title=\"LIENS\"\n    links={CONFIG.secondaryLinks}\n    style={{ padding: 0 }}\n  />\n);\n\nconst ConnectedSideBar = (props) => {\n  const unreadActivityCount = useUnreadActivityCount();\n  const unreadMessageCount = useUnreadMessageCount();\n  const routes = useSelector(getRoutes);\n  const user = useSelector(getUser);\n\n  const userRoutes = useMemo(\n    () =>\n      user && user?.groups.length > 0\n        ? {\n            ...routes,\n            userGroups: user.groups.map((group) => ({\n              id: group.id,\n              label: group.name,\n              to: group.link,\n            })),\n          }\n        : routes,\n    [user, routes],\n  );\n\n  return (\n    <SideBar\n      {...props}\n      unreadActivityCount={unreadActivityCount}\n      unreadMessageCount={unreadMessageCount}\n      routes={userRoutes}\n    />\n  );\n};\n\nexport default ConnectedSideBar;\n","import PropTypes from \"prop-types\";\nimport React from \"react\";\nimport styled from \"styled-components\";\nimport useSWR from \"swr\";\n\nimport ActionButtons from \"@agir/front/app/ActionButtons/ActionButtons\";\nimport Announcements from \"@agir/front/app/Announcements\";\nimport FacebookLoginAd from \"@agir/front/app/FacebookLoginAd\";\nimport { LayoutTitle, LayoutSubtitle } from \"./StyledComponents\";\nimport SideBar, { SecondarySideBar } from \"@agir/front/app/Navigation/SideBar\";\nimport Spacer from \"@agir/front/genericComponents/Spacer\";\nimport UpcomingEvents from \"@agir/events/common/UpcomingEvents\";\nimport SoutienBanner from \"../../../../presidentielle2027/components/SoutienPage/SoutienBanner\";\n\nconst LeftColumn = styled.aside`\n  position: sticky;\n  top: 3rem;\n  z-index: ${(props) => props.theme.zindexMainContent};\n`;\nconst MainColumn = styled.div``;\nconst RightColumn = styled.aside``;\n\nconst MainContainer = styled.div`\n  width: 100%;\n  display: flex;\n  align-items: flex-start;\n  justify-content: end;\n  padding-top: calc(var(--safe-area-inset-top, env(safe-area-inset-top, 0)) + var(--top-bar-height, 0));\n  gap: 2.2rem;\n\n  @media screen and (min-width: 2400px) {\n      justify-content: center;\n  }\n\n  ${LeftColumn} {\n    padding: 3rem 2rem 0 1rem;\n    flex: 0 0 240px;\n    min-width: 1px;\n\n    @media (max-width: ${(props) => props.theme.collapseTablet}px) {\n      display: none;\n    }\n  }\n\n  ${RightColumn} {\n    padding: 1rem 6.5vw 0 2rem;\n    background-color: ${({ theme }) => theme.background25};\n    position: sticky;\n    top: 2rem;\n    height: 100%;\n\n    h4 {\n      margin: 0 0 0.5rem;\n      line-height: 1.5;\n    }\n\n    @media (min-width: 1440px) {\n        width: 500px;\n    }\n    @media screen and (min-width: 2000px) {\n      width: 520px;\n    }\n\n  }\n\n  ${MainColumn} {\n    padding: 1.5rem 0 0 0.7rem;\n    width: 940px;\n\n    @media screen and (min-width: 2000px) {\n      width: 1050px;\n      margin-right: 50px;\n    }\n\n    @media screen and (min-width: 2400px) {\n        width: 1100px;\n        margin-right: 0;\n    }\n\n    @media screen and (min-width: 3000px) {\n      margin-right: 0;\n    }\n\n    @media (max-width: ${(props) => props.theme.collapseTablet}px) {\n      flex-grow: 1;\n    }\n  }\n`;\n\nconst DesktopLayout = (props) => {\n  const { title, subtitle, children } = props;\n\n  const { data: events } = useSWR(\"/api/evenements/rsvped/\");\n\n  return (\n    <MainContainer {...props}>\n      <LeftColumn>\n        <SideBar {...props} />\n      </LeftColumn>\n      <MainColumn>\n        <section>\n          <SoutienBanner />\n          {props.title ? (\n            <header>\n              <LayoutTitle>{title}</LayoutTitle>\n              <LayoutSubtitle>{subtitle}</LayoutSubtitle>\n            </header>\n          ) : null}\n          {children}\n        </section>\n      </MainColumn>\n      <RightColumn>\n        <div>\n          <h4>Moyens d'action</h4>\n          <ActionButtons />\n        </div>\n        <Spacer size=\"1rem\" />\n        {Array.isArray(events) && events.length > 0 ? (\n          <>\n            <div>\n              <h4>Mes événements prévus</h4>\n              <UpcomingEvents orientation=\"vertical\" events={events} />\n            </div>\n            <Spacer size=\"1rem\" />\n          </>\n        ) : null}\n        <FacebookLoginAd />\n        <Announcements />\n        <SecondarySideBar />\n      </RightColumn>\n    </MainContainer>\n  );\n};\n\nexport default DesktopLayout;\n\nDesktopLayout.propTypes = {\n  title: PropTypes.string,\n  subtitle: PropTypes.string,\n  children: PropTypes.node,\n  active: PropTypes.string\n};\n","import Layout from \"./Layout\";\n\nexport default Layout;\n","import React from \"react\";\n\nimport { useResponsiveMemo } from \"@agir/front/genericComponents/grid\";\n\nimport MobileLayout from \"./MobileLayout\";\nimport DesktopLayout from \"./DesktopLayout\";\n\nconst Layout = (props) => {\n  const Component = useResponsiveMemo(MobileLayout, DesktopLayout);\n  return <Component {...props} />;\n};\n\nexport default Layout;\n","import PropTypes from \"prop-types\";\nimport React from \"react\";\nimport styled from \"styled-components\";\n\nimport CONFIG from \"@agir/front/app/Navigation/navigation.config\";\n\nimport CounterBadge from \"@agir/front/app/Navigation/CounterBadge\";\nimport Link from \"@agir/front/app/Link\";\nimport { RawFeatherIcon } from \"@agir/front/genericComponents/FeatherIcon\";\n\nconst Title = styled.span``;\nconst MenuLink = styled(Link)`\n  position: relative;\n  display: flex;\n  flex-direction: column;\n  justify-content: center;\n  text-align: center;\n  height: 70px;\n  font-size: 11px;\n  font-weight: 500;\n  color: ${({ $active, theme }) => ($active ? theme.primary500 : \"inherit\")};\n  border-top: 2px solid\n    ${({ $active, theme }) => ($active ? theme.primary500 : \"transparent\")};\n\n  &:hover,\n  &:focus {\n    color: ${({ $active, theme }) => ($active ? theme.primary500 : \"inherit\")};\n    text-decoration: none;\n  }\n\n  ${RawFeatherIcon} {\n    display: block;\n  }\n\n  ${Title} {\n    font-size: 10px;\n    overflow: hidden;\n    white-space: nowrap;\n    text-overflow: ellipsis;\n\n    @media (max-width: 340px) {\n      font-size: 8px;\n    }\n  }\n\n  ${CounterBadge} {\n    position: absolute;\n    top: 7px;\n    right: 14px;\n\n    @media (max-width: 340px) {\n      top: 9px;\n    }\n  }\n`;\n\nconst StyledBottomBar = styled.nav`\n  background-color: ${(props) => props.theme.background0};\n  position: fixed;\n  bottom: var(--safe-area-inset-bottom, env(safe-area-inset-bottom));\n  left: 0;\n  right: 0;\n  box-shadow: inset 0 1px 0 ${(props) => props.theme.text50};\n  height: var(--bottom-bar-height);\n  padding: 0 0.5rem;\n  z-index: ${(props) => props.theme.zindexBottomBar};\n  isolation: isolate;\n  overflow: hidden;\n\n  ul {\n    padding: 0;\n    max-width: 600px;\n    margin: auto;\n    display: flex;\n    justify-content: space-around;\n    list-style: none;\n\n    li {\n      flex: 1 1 auto;\n      max-width: 70px;\n      min-width: 1px;\n    }\n  }\n`;\n\nconst LINKS = CONFIG.menuLinks.filter(({ mobile }) => !!mobile);\n\nconst BottomBar = ({ active, unreadMessageCount, unreadActivityCount }) => (\n  <StyledBottomBar>\n    <ul>\n      {LINKS.map((link) => (\n        <li key={link.id}>\n          <MenuLink route={link.route} $active={active === link.id}>\n            {link.unreadMessageBadge && (\n              <CounterBadge value={unreadMessageCount} />\n            )}\n            {link.unreadActivityBadge && (\n              <CounterBadge value={unreadActivityCount} />\n            )}\n            {link.icon?.includes(\"fa-\") ? (\n              <i\n                className={`fa-regular ${link.icon}`}\n                style={{\n                  fontSize: \"2.2em\",\n                  fontWeight: 300,\n                  paddingBottom: \"2px\",\n                }}\n              />\n            ) : (\n              <RawFeatherIcon name={link.icon} inline />\n            )}\n            <Title>{link.title}</Title>\n          </MenuLink>\n        </li>\n      ))}\n    </ul>\n  </StyledBottomBar>\n);\n\nBottomBar.propTypes = {\n  active: PropTypes.string,\n  unreadActivityCount: PropTypes.number,\n  unreadMessageCount: PropTypes.number,\n};\nexport default BottomBar;\n","import PropTypes from \"prop-types\";\nimport React from \"react\";\n\nimport { useUnreadMessageCount } from \"@agir/msgs/common/hooks\";\nimport { useUnreadActivityCount } from \"@agir/activity/common/hooks\";\n\nimport BottomBar from \"./BottomBar\";\n\nconst ConnectedBottomBar = (props) => {\n  const unreadActivityCount = useUnreadActivityCount();\n  const unreadMessageCount = useUnreadMessageCount();\n\n  return (\n    <BottomBar\n      {...props}\n      unreadActivityCount={unreadActivityCount}\n      unreadMessageCount={unreadMessageCount}\n    />\n  );\n};\n\nexport default ConnectedBottomBar;\n","import PropTypes from \"prop-types\";\nimport React from \"react\";\nimport styled from \"styled-components\";\n\nconst Counter = ({ value, ...rest }) =>\n  !!value ? (\n    <svg\n      {...rest}\n      width=\"20\"\n      height=\"20\"\n      viewBox=\"0 0 20 20\"\n      fill=\"none\"\n      xmlns=\"http://www.w3.org/2000/svg\"\n    >\n      <circle cx=\"10\" cy=\"10\" r=\"10\" fill=\"inherit\" stroke=\"none\" />\n      <text\n        x=\"10\"\n        y={value > 9 ? \"10\": \"9\"}\n        dominantBaseline=\"central\"\n        textAnchor=\"middle\"\n        fontSize={String(value).length > 1 ? \"10px\" : \"12px\"}\n        fontWeight=\"700\"\n        fill=\"#FFFFFF\"\n      >\n        {!isNaN(value) && parseInt(value) > 20 ? \"+20\" : value}\n      </text>\n    </svg>\n  ) : null;\n\nCounter.propTypes = {\n  value: PropTypes.oneOfType([PropTypes.number, PropTypes.string]),\n};\n\nconst CounterBadge = styled(Counter)`\n  fill: ${(props) =>\n    props.$background\n      ? props.theme[props.$background] || props.$background\n      : props.theme.error500};\n  z-index: ${(props) => props.theme.zindexNavigationCounter};\n\n  circle {\n    stroke: ${(props) => props.$border || \"none\"};\n  }\n\n  text {\n    fill: ${(props) =>\n      props.$color\n        ? props.theme[props.$color] || props.$color\n        : props.theme.white};\n  }\n`;\n\nexport default CounterBadge;\n","import PropTypes from \"prop-types\";\nimport React, { Suspense, useEffect, useMemo } from \"react\";\nimport { useHistory, useLocation, useParams } from \"react-router-dom\";\nimport styled from \"styled-components\";\n\nimport {\n  setAdminLink,\n  setBackLink,\n  setPageTitle,\n  setTopBarRightLink,\n} from \"@agir/front/globalContext/actions\";\nimport {\n  useDispatch,\n  useSelector,\n} from \"@agir/front/globalContext/GlobalContext\";\nimport { getIsSessionLoaded } from \"@agir/front/globalContext/reducers\";\n\nimport Layout from \"@agir/front/app/Layout\";\n\nimport logger from \"@agir/lib/utils/logger\";\nimport ErrorBoundary from \"./ErrorBoundary\";\n\nimport Redirect from \"./Redirect\";\nimport BannerAnnouncement from \"@agir/activity/BannerAnnouncements/BannerAnnouncement\";\nimport FloatButton from \"@agir/front/allPages/FloatButton\";\nimport HelpButton from \"@agir/front/allPages/HelpButton\";\nimport FeedbackButton from \"@agir/front/allPages/FeedbackButton\";\n\nconst log = logger(__filename);\n\nconst StyledPage = styled.div`\n  isolation: isolate;\n  padding-top: ${({ $hasTopBar }) => ($hasTopBar ? \"calc(var(--safe-area-inset-top, env(safe-area-inset-top)) + var(--top-bar-height))\" : \"0\")};\n`;\n\nconst Page = (props) => {\n  const { Component, routeConfig, hasTopBar, ...rest } = props;\n\n  const dispatch = useDispatch();\n  const isSessionLoaded = useSelector(getIsSessionLoaded);\n\n  const history = useHistory();\n  const routeParams = useParams();\n  const { pathname } = useLocation();\n\n  useMemo(() => {\n    if (!routeConfig.isPartial) {\n      dispatch(setBackLink(null));\n      dispatch(setTopBarRightLink(null));\n      dispatch(setAdminLink(null));\n      dispatch(setPageTitle(routeConfig?.label || null));\n    }\n    //eslint-disable-next-line\n  }, [pathname, routeConfig]);\n\n  useMemo(() => {\n    if (!isSessionLoaded || !routeConfig.backLink) {\n      return;\n    }\n    let link = routeConfig.backLink;\n    if (typeof link === \"object\" && !Array.isArray(link)) {\n      link.routeParams = {\n        ...routeParams,\n        ...(link.routeParams || {}),\n      };\n    }\n    dispatch(setBackLink(link));\n\n    //eslint-disable-next-line\n  }, [pathname, isSessionLoaded, dispatch, routeConfig]);\n\n  useMemo(() => {\n    if (!isSessionLoaded || !routeConfig.topBarRightLink) {\n      return;\n    }\n    let link = routeConfig.backLink;\n    if (typeof link === \"object\" && !Array.isArray(link)) {\n      link.routeParams = {\n        ...routeParams,\n        ...(link.routeParams || {}),\n      };\n    }\n    dispatch(setTopBarRightLink(routeConfig.topBarRightLink));\n    //eslint-disable-next-line\n  }, [pathname, isSessionLoaded, dispatch, routeConfig]);\n\n  useEffect(() => {\n    let unlisten = history.listen((location, action) => {\n      log.debug(\n        `Navigate ${action} ${location.pathname}${location.search}${location.hash}`,\n        JSON.stringify(history, null, 2),\n      );\n    });\n\n    return () => unlisten();\n  }, [history]);\n\n  useMemo(() => {\n    if (!routeConfig.keepScroll) {\n      typeof window !== \"undefined\" &&\n        !!window.scrollTo &&\n        window.scrollTo(0, 0);\n    }\n  }, [routeConfig]);\n\n  if (typeof routeConfig.redirectTo === \"function\") {\n    const redirectProps = routeConfig.redirectTo(pathname, routeParams);\n    return typeof redirectProps === \"string\" ? (\n      <Redirect route={redirectProps} />\n    ) : (\n      <Redirect {...redirectProps} />\n    );\n  }\n\n  if (routeConfig.isPartial) {\n    return (\n      <ErrorBoundary>\n        <Suspense fallback={<div />}>\n          <Component route={routeConfig} {...routeParams} {...rest} />\n        </Suspense>\n      </ErrorBoundary>\n    );\n  }\n\n  if (!routeConfig.hasLayout) {\n    return (\n      <ErrorBoundary>\n        <StyledPage $hasTopBar={hasTopBar}>\n          <Suspense fallback={<div style={{ minHeight: \"100vh\" }} />}>\n            <Component route={routeConfig} {...routeParams} {...rest} />\n            {!routeConfig.hideFeedbackButton && <HelpButton />}\n          </Suspense>\n        </StyledPage>\n      </ErrorBoundary>\n    );\n  }\n\n  return <Suspense fallback={<div />}>\n    <Component route={routeConfig} {...routeParams} {...rest} />\n  </Suspense>\n};\nPage.propTypes = {\n  Component: PropTypes.elementType,\n  routeConfig: PropTypes.object.isRequired,\n  hasTopBar: PropTypes.bool,\n};\n\nexport default Page;\n","import { Redirect, useLocation } from \"react-router-dom\";\nimport { useAuthentication } from \"@agir/front/authentication/hooks\";\nimport React, { useEffect } from \"react\";\nimport Page from \"@agir/front/app/Page\";\nimport { routeConfig } from \"@agir/front/app/routes.config\";\nimport PropTypes from \"prop-types\";\nimport logger from \"@agir/lib/utils/logger\";\nimport {useAppLoader} from \"@agir/front/app/hooks/useAppLoader\";\n\nconst log = logger(__filename);\n\nconst ProtectedComponent = (props) => {\n  const { route, ...rest } = props;\n  const { Component, AnonymousComponent = null } = route;\n\n  const location = useLocation();\n  const isAuthorized = useAuthentication(route);\n\n  useAppLoader(isAuthorized !== null);\n  useEffect(() => {\n    if (isAuthorized === null) {\n      return;\n    }\n    const PreloadedComponent = isAuthorized ? Component : AnonymousComponent;\n    if (\n      PreloadedComponent &&\n      typeof PreloadedComponent.preload === \"function\"\n    ) {\n      log.debug(\"Preloading\", PreloadedComponent);\n      PreloadedComponent.preload();\n    }\n  }, [isAuthorized, AnonymousComponent, Component]);\n\n  if (isAuthorized === null) {\n    return null;\n  }\n\n  if (isAuthorized === true) {\n    return <Page Component={Component} routeConfig={route} {...rest} />;\n  }\n\n  if (AnonymousComponent) {\n    const routeConfig = route.anonymousConfig\n      ? {\n          ...route,\n          ...route.anonymousConfig,\n        }\n      : route;\n    return (\n      <Page\n        Component={AnonymousComponent}\n        routeConfig={routeConfig}\n        {...rest}\n      />\n    );\n  }\n\n  return (\n    <Redirect\n      to={{\n        pathname: routeConfig.login.getLink(),\n        state: { next: location.pathname },\n      }}\n    />\n  );\n};\nProtectedComponent.propTypes = {\n  route: PropTypes.object.isRequired,\n};\nexport default ProtectedComponent;\n","import PropTypes from \"prop-types\";\nimport React, { useMemo } from \"react\";\nimport { Redirect } from \"react-router-dom\";\nimport { useEffectOnce } from \"react-use\";\n\nimport { routeConfig } from \"@agir/front/app/routes.config\";\nimport { addQueryStringParams } from \"@agir/lib/utils/url\";\nimport { useRoute } from \"./hooks/useRoute\";\nimport { useToast } from \"@agir/front/globalContext/hooks\";\n\nconst ExternalRedirect = (props) => {\n  const { params } = props;\n  const href = params ? addQueryStringParams(props.href, params) : props.href;\n\n  window.location.replace(href);\n\n  return null;\n};\nExternalRedirect.propTypes = {\n  href: PropTypes.string.isRequired,\n  params: PropTypes.object,\n};\n\nconst InternalRedirect = (props) => {\n  const { to, params, state, backLink, toast, ...rest } = props;\n\n  const sendToast = useToast();\n\n  useEffectOnce(() => {\n    if (!toast) {\n      return;\n    }\n    if (typeof toast === \"string\") {\n      return sendToast(toast, \"SUCCESS\");\n    }\n    if (Array.isArray(toast)) {\n      return sendToast(...toast);\n    }\n    if (typeof toast === \"object\") {\n      return sendToast(undefined, undefined, toast);\n    }\n  }, [sendToast, toast]);\n\n  const next = useMemo(() => {\n    const url = params\n      ? addQueryStringParams(to?.pathname || to, params, true)\n      : to?.pathname || to;\n\n    let nextState = { ...state };\n\n    if (backLink) {\n      nextState = nextState || {};\n      if (typeof backLink !== \"string\") {\n        nextState.backLink = backLink;\n      } else if (routeConfig[backLink]) {\n        nextState.backLink = { route: backLink };\n      } else {\n        nextState.backLink = { href: backLink };\n      }\n    }\n\n    return nextState\n      ? {\n          pathname: url.split(\"?\")[0],\n          search: url.split(\"?\")[1] && \"?\" + url.split(\"?\")[1],\n          state: nextState,\n        }\n      : url;\n  }, [to, params, state, backLink]);\n\n  return <Redirect {...rest} to={next} />;\n};\nInternalRedirect.propTypes = {\n  to: PropTypes.string.isRequired,\n  state: PropTypes.object,\n  params: PropTypes.object,\n  backLink: PropTypes.oneOfType([PropTypes.string, PropTypes.object]),\n  toast: PropTypes.oneOfType([\n    PropTypes.string,\n    PropTypes.array,\n    PropTypes.object,\n  ]),\n};\n\nconst RouteRedirect = (props) => {\n  const { route, routeParams, ...rest } = props;\n  const { url, isInternal } = useRoute(route, routeParams);\n\n  return isInternal ? (\n    <InternalRedirect {...rest} to={url} />\n  ) : (\n    <ExternalRedirect {...rest} href={url} />\n  );\n};\nRouteRedirect.propTypes = {\n  route: PropTypes.string.isRequired,\n  routeParams: PropTypes.object,\n};\n\nconst AppRedirect = (props) => {\n  const { route, href, to } = props;\n\n  if (route) {\n    return <RouteRedirect {...props} />;\n  }\n  if (to) {\n    return <InternalRedirect to={to} {...props} />;\n  }\n  if (href) {\n    return <ExternalRedirect {...props} />;\n  }\n\n  return null;\n};\nAppRedirect.propTypes = {\n  route: PropTypes.string,\n  href: PropTypes.string,\n  to: PropTypes.oneOfType([PropTypes.string, PropTypes.object]),\n};\nexport default AppRedirect;\n","import React, { useState } from \"react\";\n\nexport const useMutate = (funcApi, onSuccess) => {\n  const [error, setError] = useState();\n  const [data, setData] = useState();\n  const [isLoading, setIsLoading] = useState(false);\n\n  async function mutate(...args) {\n    setIsLoading(true);\n\n    let statusCode = 0;\n    try {\n      const response = await funcApi(...args);\n      setError(undefined);\n      setData(response.data);\n      onSuccess?.(response.status);\n      return [true, response.status];\n    } catch (e) {\n      if (e.response?.status === 500) {\n        setError(\"Une erreur est survenue, merci de réessayer plus tard\");\n      } else {\n        setError(e.response && e.response.data) || e.message;\n      }\n      statusCode = e.response.status;\n    } finally {\n      setIsLoading(false);\n    }\n\n    return [false, statusCode];\n  }\n\n  return { mutate, error, data, isLoading };\n};\n","import { useState, useEffect } from \"react\";\n\n/**\n * Custom React hook to hide the application loader\n * @param  {Boolean} [isReady=true]               whether the loader can be hidden or not\n */\n\nexport const useAppLoader = (isReady = true) => {\n  const [loader, setLoader] = useState(\n    isReady ? document.getElementById(\"app_loader\") : null\n  );\n\n  useEffect(() => {\n    isReady !== null && setLoader(document.getElementById(\"app_loader\"));\n  }, [isReady]);\n\n  useEffect(() => {\n    if (!loader) {\n      return;\n    }\n\n    loader.addEventListener(\"transitionend\", () => {\n      const loader = document.getElementById(\"app_loader\");\n      loader && loader.remove();\n    });\n    loader.style.opacity = \"0\";\n    loader.style.zIndex = -1;\n\n    setLoader(null);\n  }, [loader]);\n};\n","import axios from \"@agir/lib/utils/axios\";\n\nexport const ENDPOINT = {\n  login: \"/api/connexion/\",\n  checkCode: \"/api/connexion/code/\",\n  logout: \"/api/deconnexion/\",\n  signUp: \"/api/inscription/\",\n  getProfile: \"/api/user/profile/\",\n  getProfileOptions: \"/api/user/profile/\",\n  updateProfile: \"/api/user/profile/\",\n};\n\nexport const getAuthenticationEndpoint = (key, params) => {\n  let endpoint = ENDPOINT[key] || \"\";\n  if (params) {\n    Object.entries(params).forEach(([key, value]) => {\n      endpoint = endpoint.replace(`:${key}`, value);\n    });\n  }\n  return endpoint;\n};\n\nexport const login = async (email) => {\n  const result = {\n    success: false,\n    error: null,\n  };\n  const url = ENDPOINT.login;\n  const body = { email: email.trim() };\n  try {\n    const response = await axios.post(url, body);\n    result.success = response.status === 200;\n    result.data = response.data || null;\n  } catch (e) {\n    result.error = (e.response && e.response.data) || e.message;\n  }\n\n  return result;\n};\n\nexport const checkCode = async (code) => {\n  const result = {\n    data: null,\n    error: null,\n  };\n  const url = ENDPOINT.checkCode;\n  const body = { code };\n  try {\n    const response = await axios.post(url, body);\n    result.data = response.data;\n  } catch (e) {\n    result.error = (e.response && e.response.data) || e.message;\n  }\n\n  return result;\n};\n\nexport const logout = async () => {\n  const result = {\n    success: false,\n    error: null,\n  };\n  const url = ENDPOINT.logout;\n  try {\n    const response = await axios.get(url);\n    result.success = response.status === 200;\n  } catch (e) {\n    result.error = (e.response && e.response.data) || e.message;\n  }\n\n  return result;\n};\n\nexport const signUp = async (data, next) => {\n  const result = {\n    data: null,\n    error: null,\n  };\n  const formData = {\n    email: data.email.trim(),\n    location_zip: data.postalCode,\n    location_country: data.country,\n    next: next || undefined,\n  };\n  const url = ENDPOINT.signUp;\n  try {\n    const response = await axios.post(url, formData);\n    result.data = response.data;\n  } catch (e) {\n    result.error = {};\n    if (!e.response || !e.response.data) {\n      result.error = e.message;\n      return result;\n    }\n    const { email, location_zip, location_country, non_field_errors } =\n      e.response.data;\n    if (email) {\n      result.error.email = email;\n    }\n    if (location_zip) {\n      result.error.postalCode = location_zip;\n    }\n    if (location_country) {\n      result.error.country = location_country;\n    }\n    if (non_field_errors) {\n      result.error.global = non_field_errors;\n    }\n  }\n\n  return result;\n};\n\nexport const getProfile = async () => {\n  const result = {\n    data: null,\n    error: null,\n  };\n  const url = ENDPOINT.getProfile;\n  try {\n    const response = await axios.get(url);\n    result.data = response.data;\n  } catch (e) {\n    result.error = (e.response && e.response.data) || e.message;\n  }\n\n  return result;\n};\n\nexport const getProfileOptions = async () => {\n  const result = {\n    data: null,\n    error: null,\n  };\n  const url = ENDPOINT.getProfileOptions;\n  try {\n    const response = await axios.options(url);\n    result.data = response.data;\n  } catch (e) {\n    result.error = (e.response && e.response.data) || e.message;\n  }\n\n  return result;\n};\n\nexport const updateProfile = async (body) => {\n  const result = {\n    data: null,\n    error: null,\n  };\n\n  const url = ENDPOINT.updateProfile;\n  try {\n    const response = await axios.patch(url, body);\n    result.data = response.data;\n  } catch (e) {\n    result.error = (e.response && e.response.data) || e.message;\n  }\n\n  return result;\n};\n","import { useEffect, useCallback, useState } from \"react\";\n\nimport { useSelector } from \"@agir/front/globalContext/GlobalContext\";\nimport * as selector from \"@agir/front/globalContext/reducers\";\n\nimport {\n  getBookmarkedEmails,\n  bookmarkEmails,\n  bookmarkEmail,\n  AUTHENTICATION,\n} from \"./common\";\n\nexport const useAuthentication = (route) => {\n  const isSessionLoaded = useSelector(selector.getIsSessionLoaded);\n  const authentication = useSelector(selector.getAuthentication);\n\n  if (route.neededAuthentication === AUTHENTICATION.NONE) {\n    return true;\n  }\n\n  if (!isSessionLoaded) {\n    return null;\n  }\n\n  return authentication >= route.neededAuthentication;\n};\n\nexport const useBookmarkedEmails = () => {\n  const isSessionLoaded = useSelector(selector.getIsSessionLoaded);\n  const legacyBookmarkedEmails = useSelector(selector.getBookmarkedEmails);\n  const [bookmarkedEmails, setBookmarkedEmails] = useState(\n    getBookmarkedEmails(),\n  );\n\n  useEffect(() => {\n    if (\n      isSessionLoaded &&\n      legacyBookmarkedEmails.length > 0 &&\n      bookmarkedEmails.length === 0\n    ) {\n      setBookmarkedEmails(bookmarkEmails(legacyBookmarkedEmails));\n    }\n  }, [bookmarkedEmails.length, isSessionLoaded, legacyBookmarkedEmails]);\n\n  const addBookmarkedEmail = useCallback((email) => {\n    setBookmarkedEmails(bookmarkEmail(email));\n  }, []);\n\n  return [bookmarkedEmails, addBookmarkedEmail];\n};\n","import PropTypes from \"prop-types\";\nimport React from \"react\";\nimport styled from \"styled-components\";\n\nimport { useAppLoader } from \"@agir/front/app/hooks/useAppLoader\";\n\nimport Button from \"@agir/front/genericComponents/Button\";\nimport Link from \"@agir/front/app/Link\";\nimport { RawFeatherIcon } from \"@agir/front/genericComponents/FeatherIcon\";\nimport Spacer from \"@agir/front/genericComponents/Spacer\";\nimport TopBar from \"@agir/front/app/Navigation/TopBar\";\n\nimport background from \"@agir/front/genericComponents/images/illustration-404.svg\";\n\nconst StyledIcon = styled.div`\n  width: 3.5rem;\n  height: 3.5rem;\n  border-radius: 3.5rem;\n  font-size: 2rem;\n  background-color: ${(props) => props.theme.secondary500};\n  display: inline-flex;\n  justify-content: center;\n  align-items: center;\n  font-weight: 500;\n`;\n\nconst StyledContainer = styled.div`\n  display: flex;\n  flex-direction: column;\n  align-items: center;\n  justify-content: center;\n  width: 100%;\n  min-height: 100vh;\n  position: relative;\n  overflow: auto;\n  background-image: url(\"${background}\");\n  background-position: center;\n  background-size: cover;\n  background-repeat: no-repeat;\n  padding: 1.5rem 1rem;\n\n  h2 {\n    text-align: center;\n    font-size: 1.5rem;\n  }\n\n  p {\n    width: 100%;\n    max-width: 46.875rem;\n    text-align: center;\n  }\n\n  pre {\n    width: 100%;\n    max-width: 46.875rem;\n    padding: 1.5rem;\n    margin: 0 0 1rem;\n    overflow: auto;\n    background-color: ${(props) => props.theme.text50};\n    border-radius: ${(props) => props.theme.borderRadius};\n    text-align: center;\n  }\n\n  ${Button} {\n    max-width: 28.125rem;\n  }\n`;\n\nconst StyledPage = styled.div`\n  display: flex;\n  flex-direction: column;\n  justify-content: center;\n`;\n\nexport const ErrorPage = (props) => {\n  const {\n    title = \"Une erreur est survenue\",\n    subtitle = \"Notre équipe a été prévenue du problème\",\n    errorMessage,\n    hasReload = true,\n    hasTopBar = true,\n    icon,\n    children,\n  } = props;\n\n  useAppLoader();\n\n  return (\n    <StyledPage>\n      {hasTopBar && (\n        <>\n          <TopBar hasTopBar />\n          <Spacer size=\"4.625rem\" />\n        </>\n      )}\n      {children ? (\n        <StyledContainer>{children}</StyledContainer>\n      ) : (\n        <StyledContainer>\n          <StyledIcon>{icon || <RawFeatherIcon name=\"x\" />}</StyledIcon>\n          <h2>{title}</h2>\n          <p>{subtitle}</p>\n          <Spacer size=\"1rem\" />\n          {errorMessage && <pre>{errorMessage}</pre>}\n          <Spacer size=\"1rem\" />\n          <Button link route=\"events\" color=\"primary\" block>\n            Revenir à l'accueil\n          </Button>\n          {hasReload ? (\n            <>\n              <Spacer size=\"1rem\" />\n              <Button onClick={() => window.location.reload()} block>\n                Recharger la page\n              </Button>\n            </>\n          ) : null}\n          <Spacer size=\"1rem\" />\n          <span>\n            ou consulter le <Link route=\"helpIndex\">centre d'aide</Link>\n          </span>\n        </StyledContainer>\n      )}\n    </StyledPage>\n  );\n};\nErrorPage.propTypes = {\n  errorMessage: PropTypes.string,\n  title: PropTypes.string,\n  subtitle: PropTypes.string,\n  hasReload: PropTypes.bool,\n  hasTopBar: PropTypes.bool,\n  icon: PropTypes.node,\n  children: PropTypes.node,\n};\nexport default ErrorPage;\n","import React from \"react\";\nimport { RawFeatherIcon } from \"@agir/front/genericComponents/FeatherIcon\";\nimport PropTypes from \"prop-types\";\n\nfunction Icon({ name }) {\n  if (!name) {\n    return null;\n  }\n\n  return name?.includes(\"fa-\") ? (\n    <i className={`fa-regular ${name}`} />\n  ) : (\n    <RawFeatherIcon width=\"1rem\" height=\"1rem\" name={name} />\n  );\n}\n\nIcon.propTypes = {\n  name: PropTypes.string,\n};\n\nexport default Icon;\n","import PropTypes from \"prop-types\";\nimport React from \"react\";\nimport { useTransition, animated } from \"@react-spring/web\";\nimport styled from \"styled-components\";\n\nimport closeButton from \"./images/close-btn.svg\";\n\nconst fadeInTransition = {\n  from: { opacity: 0 },\n  enter: { opacity: 1 },\n  leave: { opacity: 0 },\n  delay: 200,\n};\n\nconst CloseButton = styled.button`\n  position: absolute;\n  top: 0;\n  right: 0;\n  transform: translate(50%, -50%);\n  width: 24px;\n  height: 24px;\n  background-color: transparent;\n  border: none;\n  background-image: url(${closeButton});\n  background-repeat: no-repeat;\n  background-position: center center;\n  cursor: pointer;\n`;\n\nconst BaseTooltip = styled(animated.p)`\n  position: absolute;\n  width: 224px;\n  background-color: ${(props) => props.theme.text1000};\n  color: ${(props) => props.theme.background0};\n  padding: 1rem;\n  display: flex;\n  flex-flow: column nowrap;\n  font-size: 13px;\n  line-height: 1.3;\n  text-align: left;\n\n  strong {\n    font-size: 14px;\n  }\n\n  &:after {\n    content: \"\";\n    position: absolute;\n    border-style: solid;\n  }\n`;\n\nconst Tooltips = {\n  \"top-center\": styled(BaseTooltip)`\n    top: -10px;\n    left: 50%;\n    transform: translate(-50%, -100%);\n\n    &:after {\n      top: 100%;\n      right: 50%;\n      transform: translateX(3px);\n      border-width: 8px 6px 0 6px;\n      border-color: ${(props) => props.theme.text1000} transparent transparent\n        transparent;\n    }\n  `,\n  \"top-left\": styled(BaseTooltip)`\n    top: -10px;\n    right: 0;\n    transform: translate(-26px, -100%);\n\n    &:after {\n      top: 100%;\n      right: 0;\n      margin-left: -4px;\n      border-width: 4px;\n      border-color: ${(props) => props.theme.text1000}\n        ${(props) => props.theme.text1000} transparent transparent;\n    }\n  `,\n  \"top-right\": styled(BaseTooltip)`\n    top: -10px;\n    left: 0;\n    transform: translate(26px, -100%);\n\n    &:after {\n      top: 100%;\n      left: 0;\n      border-width: 4px;\n      border-color: ${(props) => props.theme.text1000} transparent transparent\n        ${(props) => props.theme.text1000};\n    }\n  `,\n};\n\nexport const TooltipContainer = (props) => {\n  const { shouldShow, onClose, position = \"top-center\", children } = props;\n  const tooltipTransition = useTransition(shouldShow, fadeInTransition);\n  const Tooltip = React.useMemo(() => Tooltips[position], [position]);\n  return tooltipTransition((style, item) =>\n    item ? (\n      <Tooltip style={style} position={position}>\n        {children}\n        {onClose ? <CloseButton aria-label=\"Cacher\" onClick={onClose} /> : null}\n      </Tooltip>\n    ) : null,\n  );\n};\nTooltipContainer.propTypes = {\n  position: PropTypes.oneOf(Object.keys(Tooltips)),\n  shouldShow: PropTypes.bool,\n  onClose: PropTypes.func,\n  children: PropTypes.node,\n};\n\nexport default TooltipContainer;\n","import PropTypes from \"prop-types\";\nimport React, { useEffect } from \"react\";\nimport { usePrevious } from \"react-use\";\nimport styled from \"styled-components\";\n\nimport { useIsOffline } from \"@agir/front/offline/hooks\";\nimport { useAppLoader } from \"@agir/front/app/hooks/useAppLoader\";\n\nimport illustration from \"./illustration.svg\";\nimport ErrorPage from \"@agir/front/errorPage/ErrorPage\";\n\nconst OfflineBlock = styled.div`\n  text-align: center;\n\n  & > * {\n    margin: 0 auto;\n    padding: 0 1rem;\n  }\n\n  & > h1 {\n    font-size: 1.25rem;\n  }\n`;\n\nexport const NotFoundPage = ({\n  hasTopBar = true,\n  title = \"Page\",\n  subtitle = \"Cette page\",\n  reloadOnReconnection = true,\n}) => {\n  const isOffline = useIsOffline();\n  const wasOffline = usePrevious(isOffline);\n\n  useAppLoader();\n\n  useEffect(() => {\n    reloadOnReconnection &&\n      wasOffline &&\n      !isOffline &&\n      window.location.reload();\n  }, [reloadOnReconnection, isOffline, wasOffline]);\n\n  if (isOffline === null) return null;\n\n  if (isOffline) {\n    return (\n      <ErrorPage hasTopBar={hasTopBar}>\n        <OfflineBlock>\n          <img\n            src={illustration}\n            width=\"163\"\n            height=\"175\"\n            style={{ marginBottom: \"2rem\" }}\n          />\n          <h2 style={{ marginBottom: \".5rem\" }}>Pas de connexion</h2>\n          <p>\n            Connectez-vous à un\n            <br />\n            réseau Wi-Fi ou mobile\n          </p>\n        </OfflineBlock>\n      </ErrorPage>\n    );\n  }\n\n  return (\n    <ErrorPage\n      icon=\"?\"\n      title={`${title} introuvable`.trim()}\n      subtitle={`${subtitle} n’existe pas ou plus`.trim()}\n      hasReload={false}\n      hasTopBar={hasTopBar}\n    />\n  );\n};\n\nNotFoundPage.propTypes = {\n  hasTopBar: PropTypes.bool,\n  title: PropTypes.string,\n  subtitle: PropTypes.string,\n  reloadOnReconnection: PropTypes.bool,\n};\n\nexport default NotFoundPage;\n","import React, { useEffect, useRef } from \"react\";\nimport styled from \"styled-components\";\nimport { useSoutienCounter } from \"@agir/presidentielle2027/SoutienPage/soutien.api\";\n\nconst barHeight = 30;\n\nexport const SoutienProgressBarContainer = styled.div`\n  margin-top: 1.2rem;\n\n  width: 100%;\n  p {\n    text-align: center;\n  }\n`;\n\nconst CounterContainer = styled.div`\n  text-align: center;\n  color: ${({ theme }) => theme.white};\n`;\n\nconst ProgressBar = styled.div`\n  width: 100%;\n  height: ${barHeight + 1}px;\n  border: 1px solid ${({ theme }) => theme.soutienPrimary};\n  background-color: ${({ theme }) => theme.background0};\n  border-radius: 10px;\n\n  position: relative;\n  box-shadow: -3px -4px 0 1px ${({ theme }) => theme.soutienLight};\n`;\n\nconst ProgressBarStep = styled.div`\n  height: ${barHeight}px;\n  width: 10px;\n  border-top-left-radius: 9px;\n  border-bottom-left-radius: 9px;\n\n  background-color: ${({ theme }) => theme.soutienPrimary};\n  transition: width 0.4s ease-in-out;\n`;\n\nconst goal = 350000;\n\nexport default function SoutienProgressBar({ title }) {\n  const { data: soutienCounter } = useSoutienCounter();\n  const barStepRef = useRef();\n\n  useEffect(() => {\n    computeProgressBarStep(soutienCounter?.count ?? 0);\n  }, [soutienCounter]);\n\n  function computeProgressBarStep(count) {\n    let currentPercent = Math.ceil((count / goal) * 100);\n\n    const barStep = barStepRef.current;\n    if (barStep) {\n      if (currentPercent > 100) {\n        currentPercent = 100;\n      }\n      barStep.style.width = `${currentPercent}%`;\n      if (currentPercent > 95) {\n        barStep.style.borderBottomRightRadius = \"9px\";\n        barStep.style.borderTopRightRadius = \"9px\";\n      }\n    } else {\n      console.error(\"Cannot find bar step div\");\n    }\n  }\n\n  return (\n    <SoutienProgressBarContainer>\n      {title && title}\n      {!title && (\n        <p>\n          <b>Valider votre signature</b> pour rejoindre les{\" \"}\n          <b>{soutienCounter?.count ?? 0} soutiens</b> à la candidature de\n          Jean-Luc Mélenchon\n        </p>\n      )}\n      <CounterContainer>\n        <ProgressBar>\n          <ProgressBarStep ref={barStepRef} />\n        </ProgressBar>\n      </CounterContainer>\n    </SoutienProgressBarContainer>\n  );\n}\n","import axios from \"@agir/lib/utils/axios\";\nimport useSWR from \"swr\";\n\nexport const postFinalizeCode = (code) =>\n  axios.post(\"/api/soutien/f/\", { code });\n\nexport const useSoutienCounter = (opts) =>\n  useSWR(\"/api/soutien/count/\", { refreshInterval: 2500 });\n\nexport const initializeValidation = async (formData) =>\n  axios.post(`/api/soutien/validation/`, formData);\n\nexport const postSoutienData = async (formData, turnstileToken) =>\n  axios.post(`/api/soutien/initialiser/`, formData, {\n    headers: {\n      \"cf-turnstile-response\": turnstileToken,\n    },\n  });\n\nexport const finalizeSoutien = async (\n  verificationCode,\n  operationToken,\n  turnstileToken,\n) =>\n  axios.post(\n    \"/api/soutien/finaliser/\",\n    { verificationCode, operationToken },\n    {\n      headers: {\n        \"cf-turnstile-response\": turnstileToken,\n      },\n    },\n  );\n\n  export const useCloneSoutien = () => useSWR(`/api/soutien/`);\n\nexport const mergeSoutienClone = async (accept) => axios.patch(\"/api/soutien/merge/\", {accept})"],"names":["answerToBannerAnnouncement","announcementId","answerId","axios","put","SpinnerAnimation","keyframes","Loader","styled","i","Spinner","React","className","BackgroundAnimation","Banner","div","props","theme","primary500","text25","Answers","BannerAnnouncementDone","Close","BannerAnnouncement","_currentAnnouncement$","currentAnnouncement","setCurrentAnnouncement","useState","done","setDone","selectedAnswer","setSelectedAnswer","announcementsHandled","setAnnouncementsHandled","data","announcements","mutate","refresh","useSWR","mutateAnswer","isLoading","error","useMutate","transitions","useTransition","length","from","opacity","enter","leave","config","duration","AnnouncementDone","question","name","dangerouslySetInnerHTML","__html","afterMessage","Button","small","onClick","nextAnnouncement","async","prev","id","undefined","closeAnnouncement","get","status","useEffect","announcement","includes","hasAnswers","answers","style","item","_currentAnnouncement$2","animated","title","map","answer","userAnswer","key","description","useUnreadActivityCount","isReady","setIsReady","session","getActivityEndpoint","dedupingInterval","focusThrottleInterval","user","unreadActivityCount","useCustomAnnouncement","slug","shouldPause","_error$response","wasPaused","setIsPaused","useSessionStorage","isPaused","useSWRImmutable","errorStatus","response","ACTIVITY_STATUS","STATUS_INTERACTED","activityId","dismissCallback","useCallback","setActivityAsInteracted","_objectSpread","useActivities","_data","_data2","size","setSize","isValidating","useSWRInfinite","index","page","pageSize","activities","useMemo","activityIds","Array","isArray","forEach","results","activity","push","isLoadingInitialData","isLoadingMore","activityCount","count","isEmpty","isReachingEnd","isRefreshing","loadMore","allPages_FeedbackButton","routes","useSelector","getRoutes","href","feedbackForm","isMobileApp","useMobileApp","ConnectedFloatButton","background","content","slideInTransition","marginBottom","a","$background","css","secondary500","secondary600","Wrapper","collapse","FloatButton","isActive","shouldPushTooltip","icon","label","hasTooltip","setHasTooltip","hideTooltip","showTooltip","pushTooltip","onRest","wrapperTransition","Tooltip","position","shouldShow","onClose","onMouseOver","onMouseLeave","__WEBPACK_DEFAULT_EXPORT__","getUser","visitCount","setVisitCount","useLocalStorage","setShouldPushTooltip","useEffectOnce","_extends","help","ACTIONS","donations","activeContribution","renewable","route","color","contributions","_user$activeContribut","createEvent","width","height","viewBox","fill","stroke","strokeWidth","strokeLinecap","strokeLinejoin","xmlns","d","coupDeFil","materiel","textColor","createContact","toktokPreview","backgroundColor","x1","y1","x2","y2","cx","cy","r","votingProxy","votingProxyId","hasVotingProxyRequests","routeParams","votingProxyPk","actionTools","borderColor","newPollingStationOfficer","clipPath","transform","publicMeetingRequest","cafePopulaireRequest","joinGroup","DEFAULT_ACTION_ORDER","GROUP_MANAGER_ACTION_ORDER","StyledButton","Link","text700","success500","RawFeatherIcon","$borderColor","$color","$textColor","background0","ActionButtons_ActionButton","disabled","visibileLabel","useResponsiveMemo","e","preventDefault","onMouseDown","Icon","Carousel","StyledActionList","nav","ActionButtonCarousel","actions","breakpoints","getSwiperBreakpoints","slides","slideWidth","breakpoint","slidesPerView","Math","ceil","useSpring","paddingLeft","to","Swiper","centerInsufficientSlides","slice","filter","action","SwiperSlide","ActionButton","ActionButtonList","ActionButtons","_user$groups","groups","some","group","isManager","Boolean","getActionsForUser","ResponsiveLayout","MobileLayout","DesktopLayout","ActionButtons_ActionButtons","ConnectedActionButtons","generateLogger","children","Fallback","CustomFallback","SentryErrorBoundary","fallback","errorMessage","toString","ErrorPage","LayoutSubtitle","h2","LayoutTitle","h1","SoutienCloneButton","SoutienBannerConfirmPhone","sendToast","useToast","clone","useCloneSoutien","merge","cloneIsLoading","mergeSoutienClone","revalidate","contact_phone","SoutienBannerContainer","minWidth","loading","SoutienBannerButton","SoutienProgressBarContainer","LFIsecondary500","SoutienBanner","_window","window","apConfig","soutien","enabledFront","soutien2027","SoutienProgressBar","link","StyledContainer","$smallBackgroundColor","Layout_MobileLayout","BottomBar","Image","borderRadius","Container","article","$isClickable","genericComponents_Announcement","image","linkRef","useRef","handleClick","current","click","mobile","desktop","backgroundImage","ref","app_Announcements","Announcements","pathname","useLocation","markAsDisplayed","routeConfig","match","Announcement","FacebookLoginContainer","facebookLight","black","DismissMessage","app_FacebookLoginAd","FacebookLoginAd","isIOS","facebookLogin","src","facebookLogo","alt","margin","marginRight","facebookWhiteLogo","StyledLink","StyledMenu","ul","text500","SideBar_SecondaryMenu","_ref","links","rest","_objectWithoutProperties","_excluded","MenuLink","$active","CounterBadge","LINKS","CONFIG","NavigationLink","active","unreadMessageCount","_link$icon","secondaryLinks","external","inline","unreadMessageBadge","value","unreadActivityBadge","SecondaryMenu","marginTop","SideBar","listStyle","padding","SecondarySideBar","Navigation_SideBar","useUnreadMessageCount","userRoutes","userGroups","LeftColumn","aside","zindexMainContent","MainColumn","RightColumn","MainContainer","collapseTablet","background25","Layout_DesktopLayout","subtitle","events","Spacer","UpcomingEvents","orientation","app_Layout","Component","Title","span","StyledBottomBar","text50","zindexBottomBar","BottomBar_BottomBar","fontSize","fontWeight","paddingBottom","Navigation_BottomBar","Counter","x","y","dominantBaseline","textAnchor","String","isNaN","parseInt","error500","zindexNavigationCounter","$border","white","log","logger","StyledPage","$hasTopBar","app_Page","hasTopBar","dispatch","useDispatch","isSessionLoaded","getIsSessionLoaded","history","useHistory","useParams","isPartial","setBackLink","setTopBarRightLink","setAdminLink","setPageTitle","backLink","topBarRightLink","unlisten","listen","location","debug","search","hash","JSON","stringify","keepScroll","scrollTo","redirectTo","redirectProps","Redirect","ErrorBoundary","Suspense","hasLayout","minHeight","hideFeedbackButton","HelpButton","app_ProtectedComponent","AnonymousComponent","isAuthorized","useAuthentication","useAppLoader","PreloadedComponent","preload","Page","anonymousConfig","login","getLink","state","next","ExternalRedirect","params","addQueryStringParams","replace","propTypes","PropTypes","isRequired","InternalRedirect","toast","url","nextState","split","RouteRedirect","_excluded2","isInternal","useRoute","funcApi","onSuccess","setError","setData","setIsLoading","args","statusCode","_e$response","message","loader","setLoader","document","getElementById","addEventListener","remove","zIndex","ENDPOINT","checkCode","logout","signUp","getProfile","getProfileOptions","updateProfile","result","formData","email","trim","location_zip","postalCode","location_country","country","post","non_field_errors","global","success","body","code","patch","useBookmarkedEmails","selector","legacyBookmarkedEmails","bookmarkedEmails","setBookmarkedEmails","getBookmarkedEmails","bookmarkEmails","addBookmarkedEmail","bookmarkEmail","authentication","neededAuthentication","AUTHENTICATION","NONE","StyledIcon","hasReload","TopBar","block","reload","fadeInTransition","delay","CloseButton","button","closeButton","BaseTooltip","p","text1000","Tooltips","tooltipTransition","OfflineBlock","notFoundPage_NotFoundPage","NotFoundPage","reloadOnReconnection","isOffline","useIsOffline","wasOffline","usePrevious","illustration","CounterContainer","ProgressBar","barHeight","soutienPrimary","soutienLight","ProgressBarStep","goal","_soutienCounter$count2","soutienCounter","useSoutienCounter","barStepRef","_soutienCounter$count","currentPercent","barStep","borderBottomRightRadius","borderTopRightRadius","console","computeProgressBarStep","turnstileToken","headers","accept","verificationCode","operationToken","opts","refreshInterval"],"sourceRoot":""}