{"version":3,"file":"static/components/209-455b395468506963408b.js?cv=7","mappings":"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","sources":["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/genericComponents/Tooltip.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/genericComponents/FeatherIcon.js","webpack:///home/runner/work/actionpopulaire.fr/actionpopulaire.fr/agir/front/components/genericComponents/AppStore.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/app/apiHook.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/authentication/api.js","webpack:///home/runner/work/actionpopulaire.fr/actionpopulaire.fr/agir/front/components/app/OpenGraphTags.js","webpack:///home/runner/work/actionpopulaire.fr/actionpopulaire.fr/agir/front/components/genericComponents/Spacer.js","webpack:///home/runner/work/actionpopulaire.fr/actionpopulaire.fr/agir/front/components/genericComponents/Icon.js","webpack:///home/runner/work/actionpopulaire.fr/actionpopulaire.fr/agir/lib/components/utils/forms.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/front/components/allPages/HelpButton.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/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/events/components/common/UpcomingEvents/MiniEventCard.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/notFoundPage/NotFoundPage.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/useTracking.js","webpack:///home/runner/work/actionpopulaire.fr/actionpopulaire.fr/agir/front/components/app/ConnectivityWarning.js","webpack:///home/runner/work/actionpopulaire.fr/actionpopulaire.fr/agir/front/components/app/Footer/index.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/ErrorBoundary.js","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/front/components/app/Page.js","webpack:///home/runner/work/actionpopulaire.fr/actionpopulaire.fr/agir/front/components/app/ModalMissingNewsletter.js","webpack:///home/runner/work/actionpopulaire.fr/actionpopulaire.fr/agir/front/components/app/Router.js","webpack:///home/runner/work/actionpopulaire.fr/actionpopulaire.fr/agir/front/components/genericComponents/DownloadApp.js","webpack:///home/runner/work/actionpopulaire.fr/actionpopulaire.fr/agir/front/components/app/Navigation/TopBar/AdminLink.js","webpack:///home/runner/work/actionpopulaire.fr/actionpopulaire.fr/agir/front/components/app/Navigation/TopBar/NavBar.js","webpack:///home/runner/work/actionpopulaire.fr/actionpopulaire.fr/agir/front/components/app/Navigation/TopBar/TopBar.js","webpack:///home/runner/work/actionpopulaire.fr/actionpopulaire.fr/agir/front/components/app/Navigation/TopBar/index.js","webpack:///home/runner/work/actionpopulaire.fr/actionpopulaire.fr/agir/events/components/common/UpcomingEvents/UpcomingEvents.js","webpack:///home/runner/work/actionpopulaire.fr/actionpopulaire.fr/agir/events/components/common/UpcomingEvents/index.js","webpack:///home/runner/work/actionpopulaire.fr/actionpopulaire.fr/agir/activity/components/common/hooks.js"],"sourcesContent":["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 { 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  background-size: cover;\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, { 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\";\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  position: fixed;\n  bottom: 1.5rem;\n  right: 1.5rem;\n  width: 3.5rem;\n  height: 3.5rem;\n  border-radius: 50%;\n  z-index: ${(props) => props.theme.zindexFloatButton};\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 { icons } from \"feather-icons\";\nimport isPropValid from \"@emotion/is-prop-valid\";\nimport PropTypes from \"prop-types\";\nimport React from \"react\";\nimport styled from \"styled-components\";\n\nconst getIconDataUrl = (icon) =>\n  icon && icons[icon]\n    ? `url('data:image/svg+xml;utf8,${icons[icon].toSvg({\n        height: 16,\n        color: \"grey\",\n      })}')`\n    : \"\";\n\nexport const allIcons = Object.keys(icons);\n\nexport const RawFeatherIcon = styled.span\n  .withConfig({\n    shouldForwardProp: isPropValid,\n  })\n  .attrs(\n    ({ name, strokeWidth, color, strokeLinecap, strokeLinejoin, svgStyle }) => {\n      const attrs = {\n        name,\n        \"stroke-width\": strokeWidth,\n        \"stroke-linecap\": strokeLinecap,\n        \"stroke-linejoin\": strokeLinejoin,\n      };\n      Object.keys(attrs).map((k) => attrs[k] === undefined && delete attrs[k]);\n\n      if (svgStyle !== undefined) {\n        attrs.style = Object.keys(svgStyle)\n          .map((key) => {\n            const cssKey = key.replace(/[A-Z]/g, (m) => `-${m.toLowerCase()}`);\n            return `${cssKey}:${svgStyle[key]}`;\n          })\n          .join(\";\");\n      }\n\n      return {\n        dangerouslySetInnerHTML: { __html: icons[name]?.toSvg(attrs) ?? \"\" },\n      };\n    },\n  )`\n  display: inline-flex;\n  align-items: center;\n\n  svg {\n    position: relative;\n    width: ${(props) => props.width};\n    height: ${(props) => props.height};\n    top: ${(props) => props.top};\n    color: ${(props) => (props.color ? props.theme[props.color] || props.color : \"currentcolor\")};\n  }\n`;\n\nRawFeatherIcon.propTypes = {\n  name: PropTypes.oneOf(allIcons),\n  color: PropTypes.string,\n  width: PropTypes.string,\n  height: PropTypes.string,\n  strokeWidth: PropTypes.number,\n  strokeLinecap: PropTypes.number,\n  strokeLinejoin: PropTypes.number,\n  style: PropTypes.objectOf(PropTypes.string),\n};\n\n/*\nLa taille de police de base est de 16 pixels.\nLes grands icônes doivent faire 24 pixels (1.5rem)\nLes petits icônes doivent faire 16 pixels (1rem)\n */\n\nconst FeatherIcon = ({ name, small, color, inline }) => {\n  // stroke dimensions\n  const strokeWidth = !small ? 2 : 1.33;\n\n  // positionning dimensions\n  const dimension = !small ? \"1.5rem\" : \"1rem\";\n\n  const top = inline ? (!small ? \"0.3rem\" : \"0.15rem\") : \"0\";\n\n  return (\n    <RawFeatherIcon\n      color={color}\n      name={name}\n      width={dimension}\n      height={dimension}\n      top={top}\n      strokeWidth={strokeWidth}\n    />\n  );\n};\nFeatherIcon.propTypes = {\n  name: PropTypes.oneOf(allIcons),\n  small: PropTypes.bool,\n  color: PropTypes.string,\n  inline: PropTypes.bool,\n};\n\nFeatherIcon.defaultProps = {\n  small: false,\n  inline: false,\n};\n\nFeatherIcon.RawFeatherIcon = RawFeatherIcon;\nFeatherIcon.allIcons = allIcons;\n\nexport default FeatherIcon;\n\nexport const IconList = styled.ul`\n  padding-left: 1.5rem;\n  margin-bottom: 0;\n`;\n\nexport const IconListItem = styled.li`\n  list-style: none;\n  position: relative;\n  margin-bottom: 0.5rem;\n\n  &:last-child {\n    margin-bottom: 0;\n  }\n\n  & > i,\n  &:before {\n    text-align: center;\n    width: 1.5rem;\n    height: 1rem;\n    position: absolute;\n    top: 0.15rem;\n    left: -1.75rem;\n    color: grey;\n  }\n\n  &:before {\n    // prettier-ignore\n    content: ${(props) => getIconDataUrl(props.name)};\n  }\n`;\n","import React from \"react\";\nimport PropTypes from \"prop-types\";\nimport styled from \"styled-components\";\n\nimport APP_STORE_APPLE from \"@agir/front/genericComponents/logos/appstore_apple.svg\";\nimport APP_STORE_GOOGLE from \"@agir/front/genericComponents/logos/appstore_google.svg\";\n\nexport const CONFIG = {\n  apple: {\n    href: \"https://apps.apple.com/fr/app/action-populaire/id1559737444#?platform=iphone\",\n    title: \"Télécharger dans l'App Store\",\n    $image: APP_STORE_APPLE,\n  },\n  google: {\n    href: \"https://play.google.com/store/apps/details?id=fr.actionpopulaire.twa\",\n    title: \"Disponible sur Google Play\",\n    $image: APP_STORE_GOOGLE,\n  },\n};\n\nconst AppStoreLink = styled.a`\n  display: block;\n  width: 170px;\n  height: 50px;\n  background-image: url(${({ $image }) => $image});\n  background-repeat: no-repeat;\n  background-size: cover;\n  background-position: center center;\n  border-radius: 0.5px;\n  cursor: pointer;\n`;\n\nconst AppStore = (props) => {\n  const { type, ...rest } = props;\n  const config = CONFIG[type];\n\n  if (!config) {\n    return null;\n  }\n\n  return <AppStoreLink {...config} {...rest} />;\n};\n\nAppStore.propTypes = {\n  type: PropTypes.oneOf(Object.keys(CONFIG)).isRequired,\n  params: PropTypes.object,\n};\n\nexport default AppStore;\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\";\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 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\n    async function mutate(...args) {\n        setIsLoading(true);\n\n        try {\n            const response = await funcApi(...args);\n            setData(response.data);\n            onSuccess?.()\n        } catch (e) {\n            setError(e.response && e.response.data) || e.message\n        } finally {\n            setIsLoading(false);\n        }\n\n    }\n\n    return { mutate, error, data, isLoading }\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 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 PropTypes from \"prop-types\";\nimport React, { useEffect } from \"react\";\nimport Helmet from \"react-helmet\";\n\nimport { useDispatch } from \"@agir/front/globalContext/GlobalContext\";\nimport { setPageTitle } from \"@agir/front/globalContext/actions\";\n\nconst DEFAULT_TYPE = \"website\";\nconst DEFAULT_TITLE = \"Action Populaire\";\nconst DEFAULT_DESCRIPTION =\n  \"Action Populaire est le réseau social d'action de la France insoumise.\";\nconst DEFAULT_URL = \"https://actionpopulaire.fr/\";\nconst DEFAULT_IMAGE = \"/static/front/assets/og_image_NSP.jpg\";\n\nexport const usePageTitle = (title) => {\n  const dispatch = useDispatch();\n\n  useEffect(() => {\n    title && dispatch(setPageTitle(title));\n  }, [dispatch, title]);\n};\n\nconst OpenGraphTags = (props) => {\n  const {\n    title,\n    description = DEFAULT_DESCRIPTION,\n    type = DEFAULT_TYPE,\n    url = DEFAULT_URL,\n    image = DEFAULT_IMAGE,\n  } = props;\n\n  const pageTitle = title ? `${title} — ${DEFAULT_TITLE}` : DEFAULT_TITLE;\n\n  return (\n    <Helmet title={pageTitle}>\n      <meta property=\"og:locale\" content=\"fr_FR\" />\n      <meta property=\"og:site_name\" content=\"Action Populaire\" />\n      <meta property=\"fb:app\" content=\"399717914004198\" />\n      <meta name=\"twitter:card\" content=\"summary_large_image\" />\n\n      <meta name=\"title\" content={pageTitle} />\n      <meta property=\"og:title\" content={pageTitle} />\n      <meta name=\"twitter:title\" content={pageTitle} />\n\n      <meta name=\"description\" content={description} />\n      <meta property=\"og:description\" content={description} />\n      <meta name=\"twitter:description\" content={description} />\n\n      <meta property=\"og:url\" content={url} />\n\n      <meta property=\"og:type\" content={type} />\n\n      <meta property=\"og:image\" content={image} />\n      <meta property=\"og:image:secure_url\" content={image} />\n      <meta name=\"twitter:image\" content={image} />\n    </Helmet>\n  );\n};\n\nOpenGraphTags.propTypes = {\n  type: PropTypes.string,\n  title: PropTypes.string,\n  description: PropTypes.string,\n  url: PropTypes.string,\n  image: PropTypes.string,\n};\n\nexport default OpenGraphTags;\n","import PropTypes from \"prop-types\";\nimport styled from \"styled-components\";\n\nconst getHeight = ({ axis, size }) => {\n  const space = typeof size === \"number\" ? size + \"px\" : size;\n  return axis === \"x\" ? \"1px\" : space;\n};\nconst getWidth = ({ axis, size }) => {\n  const space = typeof size === \"number\" ? size + \"px\" : size;\n  return axis === \"y\" ? \"1px\" : space;\n};\n\nconst Spacer = styled.span.attrs((props) => ({\n  $width: getWidth(props),\n  $height: getHeight(props),\n  \"aria-hidden\": \"true\",\n}))`\n  display: block;\n  margin: 0;\n  padding: 0;\n  line-height: 0;\n  width: ${({ $width }) => $width};\n  min-width: ${({ $width }) => $width};\n  height: ${({ $height }) => $height};\n  min-height: ${({ $height }) => $height};\n`;\n\nexport const InlineSpacer = styled(Spacer)`\n  display: inline-block;\n`;\n\nSpacer.propTypes = InlineSpacer.propTypes = {\n  axis: PropTypes.oneOf([\"x\", \"y\"]),\n  size: PropTypes.oneOfType([PropTypes.string, PropTypes.number]),\n};\n\nexport default Spacer;\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","export const objectToFormData = (obj, rootName, ignoreList) => {\n  var formData = new FormData();\n  const appendFormData = (data, rootProp) => {\n    if (Array.isArray(ignoreList) && ignoreList.includes(rootProp)) {\n      return;\n    }\n\n    rootProp = rootProp || \"\";\n\n    if (data instanceof File) {\n      formData.append(rootProp, data);\n      return;\n    }\n\n    if (Array.isArray(data)) {\n      for (var i = 0; i < data.length; i++) {\n        appendFormData(data[i], rootProp + \"[\" + i + \"]\");\n      }\n      return;\n    }\n\n    if (typeof data === \"object\" && data) {\n      for (var key in data) {\n        if (data.hasOwnProperty(key)) {\n          if (rootProp === \"\") {\n            appendFormData(data[key], key);\n          } else {\n            appendFormData(data[key], rootProp + \".\" + key);\n          }\n        }\n      }\n      return;\n    }\n\n    if (data !== null && typeof data !== \"undefined\") {\n      formData.append(rootProp, data);\n    }\n  };\n\n  appendFormData(obj, rootName);\n\n  return formData;\n};\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 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 PropTypes from \"prop-types\";\nimport React from \"react\";\nimport styled from \"styled-components\";\n\nimport { useAppLoader } from \"@agir/front/app/hooks\";\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\";\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};\n\nconst DEFAULT_ACTION_ORDER = [\n  \"donations\",\n  \"votingProxy\",\n  \"createEvent\",\n  \"materiel\",\n  \"createContact\",\n  \"help\",\n  \"actionTools\",\n];\n\nconst GROUP_MANAGER_ACTION_ORDER = [\n  \"donations\",\n  \"votingProxy\",\n  \"createEvent\",\n  \"materiel\",\n  \"publicMeetingRequest\",\n  \"createContact\",\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: 75px;\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/scss\";\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          .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 styled from \"styled-components\";\n\nimport Link from \"@agir/front/app/Link\";\n\nimport { routeConfig } from \"@agir/front/app/routes.config\";\nimport { displayHumanDateString } from \"@agir/lib/utils/time\";\n\nconst StyledCard = styled(Link)`\n  display: block;\n  width: 254px;\n  min-height: 74px;\n  padding: 1rem;\n  border-radius: ${(props) => props.theme.borderRadius};\n  box-shadow: ${(props) => props.theme.cardShadow};\n  background-color: ${(props) => props.theme.background0};\n\n  &:hover,\n  &:focus {\n    text-decoration: none;\n  }\n\n  & + & {\n    margin-top: 0.5rem;\n  }\n\n  & > * {\n    font-size: 0.875rem;\n    line-height: 1.5;\n    font-weight: 400;\n    display: block;\n    white-space: nowrap;\n    text-overflow: ellipsis;\n    overflow: hidden;\n\n    &::first-letter {\n      text-transform: capitalize;\n    }\n  }\n\n  & > strong {\n    color: ${(props) => props.theme.text1000};\n  }\n`;\n\nexport const MiniEventCard = (props) => {\n  const { id, name, startTime, location, backLink, style, className } = props;\n  return (\n    <StyledCard\n      style={style}\n      className={className}\n      backLink={backLink}\n      to={routeConfig.eventDetails.getLink({ eventPk: id })}\n    >\n      <span>\n        {[displayHumanDateString(startTime), location?.name?.trim()]\n          .filter(Boolean)\n          .join(\" • \")}\n      </span>\n      <strong>{name}</strong>\n    </StyledCard>\n  );\n};\n\nMiniEventCard.propTypes = {\n  id: PropTypes.string.isRequired,\n  startTime: PropTypes.string.isRequired,\n  name: PropTypes.string.isRequired,\n  location: PropTypes.shape({\n    name: PropTypes.string,\n  }),\n  backLink: PropTypes.oneOfType([PropTypes.string, PropTypes.object]),\n  style: PropTypes.object,\n  className: PropTypes.string,\n};\n\nexport default MiniEventCard;\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\";\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 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\";\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 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=\"16\"\n      height=\"16\"\n      viewBox=\"0 0 16 16\"\n      fill=\"none\"\n      xmlns=\"http://www.w3.org/2000/svg\"\n    >\n      <circle cx=\"8\" cy=\"8\" r=\"8\" fill=\"inherit\" stroke=\"none\" />\n      <text\n        x=\"8\"\n        y=\"8\"\n        dominantBaseline=\"central\"\n        textAnchor=\"middle\"\n        fontSize={String(value).length > 1 ? \"8px\" : \"10px\"}\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 { setUser as sentrySetUser } from \"@sentry/browser\";\nimport { useEffect, useRef } from \"react\";\nimport { useLocation } from \"react-router-dom\";\n\nimport { useSelector } from \"@agir/front/globalContext/GlobalContext\";\nimport { getUser } from \"@agir/front/globalContext/reducers\";\n\nconst useTracking = () => {\n  const location = useLocation();\n  const { pathname } = location;\n  const previous = useRef(null);\n  const user = useSelector(getUser);\n  const userId = user?.id || null;\n\n  useEffect(() => {\n    if (typeof window !== \"undefined\" && window._paq) {\n      sentrySetUser({ id: userId, ip_address: \"{{auto}}\" });\n      userId\n        ? window._paq.push([\"setUserId\", userId])\n        : window._paq.push([\"resetUserId\"]);\n    }\n  }, [userId]);\n\n  useEffect(() => {\n    if (typeof window !== \"undefined\" && window._paq) {\n      if (previous.current) {\n        window._paq.push([\"setReferrerUrl\", previous.current]);\n      }\n      previous.current = pathname;\n      window._paq.push([\"setCustomUrl\", pathname]);\n      window._paq.push([\"trackPageView\"]);\n      window._paq.push([\"HeatmapSessionRecording::enable\"]);\n    }\n\n    return () => {\n      if (typeof window !== \"undefined\" && window._paq) {\n        window._paq.push([\"HeatmapSessionRecording::disable\"]);\n      }\n    };\n  }, [pathname]);\n};\n\nexport default useTracking;\n","import React, { useEffect, useMemo, useState } from \"react\";\nimport { animated, useTransition } from \"@react-spring/web\";\nimport styled from \"styled-components\";\n\nimport { useIsOffline } from \"@agir/front/offline/hooks\";\nimport { useDownloadBanner } from \"@agir/front/app/hooks.js\";\nimport logger from \"@agir/lib/utils/logger\";\n\nconst log = logger(__filename);\n\nconst StyledWarning = styled(animated.div)`\n  position: fixed;\n  top: ${({ $hasTopBar }) => ($hasTopBar ? \"72px\" : \"0\")};\n  width: 100%;\n  z-index: ${(props) => props.theme.zindexTopBar};\n  color: ${(props) => props.theme[props.color]};\n  background: ${(props) => props.theme[props.backgroundCOlor]};\n\n  @media (max-width: ${(props) => props.theme.collapse}px) {\n    top: ${({ $hasTopBar, $hasDownloadBanner }) => {\n      if ($hasTopBar && $hasDownloadBanner) {\n        return \"136px\";\n      }\n      if ($hasTopBar) {\n        return \"56px\";\n      }\n      return \"0\";\n    }};\n  }\n\n  & > div {\n    overflow: hidden;\n    text-transform: uppercase;\n    font-weight: 600;\n    text-align: center;\n    font-size: 10px;\n    display: flex;\n    align-items: center;\n    justify-content: center;\n    height: 100%;\n  }\n`;\n\nconst ConnectivityWarning = ({ hasTopBar }) => {\n  const [hasDownloadBanner] = useDownloadBanner();\n  const offline = useIsOffline();\n  log.debug(`Offline ${offline}`);\n  const [display, setDisplay] = useState(offline);\n  log.debug(`Display ${display}`);\n\n  const [backgroundColor, color, warning] = useMemo(() => {\n    switch (offline) {\n      case false:\n        return [\"success500\", \"success100\", \"Connexion rétablie\"];\n      case true:\n        return [\"error500\", \"error100\", \"Aucune connexion internet\"];\n      default:\n        return [\"primary500\", \"primary100\", \"Connexion en cours...\"];\n    }\n  }, [offline]);\n\n  useEffect(() => {\n    let timeout = setTimeout(() => setDisplay(!!offline), offline ? 0 : 5000);\n    return () => clearTimeout(timeout);\n  }, [offline]);\n\n  const transitions = useTransition(display, {\n    initial: null,\n    enter: { height: 30 },\n    leave: { height: 0 },\n  });\n\n  return transitions(\n    (style, item) =>\n      item && (\n        <StyledWarning\n          color\n          backgroundColor\n          style={style}\n          $hasTopBar={hasTopBar}\n          $hasDownloadBanner={hasDownloadBanner}\n        >\n          <div>{warning}</div>\n        </StyledWarning>\n      ),\n  );\n};\n\nexport default ConnectivityWarning;\n","import PropTypes from \"prop-types\";\nimport React, { Suspense, useMemo } from \"react\";\nimport { useLocation } from \"react-router-dom\";\n\nimport { lazy } from \"@agir/front/app/utils\";\nimport {\n  getIsSessionLoaded,\n  getIsConnected,\n} from \"@agir/front/globalContext/reducers\";\nimport routes from \"@agir/front/app/routes.config\";\nimport { useMobileApp } from \"@agir/front/app/hooks\";\nimport { useSelector } from \"@agir/front/globalContext/GlobalContext\";\n\nconst Footer = lazy(() => import(\"./Footer\"));\n\nconst ConnectedFooter = () => {\n  const { pathname } = useLocation();\n  const isSessionLoaded = useSelector(getIsSessionLoaded);\n  const isConnected = useSelector(getIsConnected);\n  const { isMobileApp } = useMobileApp();\n\n  const route = useMemo(\n    () => routes.find((route) => route.match(pathname)),\n    [pathname],\n  );\n\n  if (!isSessionLoaded) {\n    return null;\n  }\n  if (!route || route.hideFooter) {\n    return null;\n  }\n  if (isMobileApp && !route.displayFooterOnMobileApp) {\n    return null;\n  }\n\n  return (\n    <Suspense fallback={<div />}>\n      <Footer\n        isSignedIn={isConnected}\n        isMobileApp={isMobileApp}\n        hasBanner={!route.hideFooterBanner && !isConnected}\n      />\n    </Suspense>\n  );\n};\n\nexport default ConnectedFooter;\n","import PropTypes from \"prop-types\";\nimport React from \"react\";\nimport styled from \"styled-components\";\n\nimport BottomBar from \"@agir/front/app/Navigation/BottomBar\";\n\nconst StyledContainer = styled.div`\n  padding-top: 24px;\n  padding-bottom: 24px;\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      <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\";\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\n  &:hover,\n  &:focus {\n    color: ${({ $active, theme }) => ($active ? theme.primary500 : \"inherit\")};\n    text-decoration: none;\n  }\n\n  ${CounterBadge} {\n    position: absolute;\n    left: 14px;\n    top: -5px;\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: 1rem;\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  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        {link.unreadMessageBadge && <CounterBadge value={unreadMessageCount} />}\n        {link.unreadActivityBadge && (\n          <CounterBadge value={unreadActivityCount} />\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      </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, { 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\";\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  max-width: 1442px;\n  margin: 0 auto;\n  padding: 0 50px 3rem;\n  display: flex;\n  align-items: flex-start;\n  justify-content: space-between;\n\n  ${LeftColumn} {\n    padding: 3rem 2rem 0 0;\n    flex: 0 0 255px;\n    min-width: 1px;\n\n    @media (max-width: ${(props) => props.theme.collapseTablet}px) {\n      display: none;\n    }\n  }\n\n  ${RightColumn} {\n    padding: 3rem 0 0 2rem;\n    flex: 0 0 255px;\n\n    h4 {\n      margin: 0 0 0.5rem;\n      line-height: 1.5;\n    }\n  }\n\n  ${MainColumn} {\n    padding: 3rem 0 0;\n    flex: 0 1 725px;\n    margin: 0 auto;\n\n    @media (max-width: ${(props) => props.theme.collapseTablet}px) {\n      flex-grow: 1;\n    }\n  }\n`;\n\nconst Layout = (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          {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=\"2rem\" />\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=\"2rem\" />\n          </>\n        ) : null}\n        <FacebookLoginAd />\n        <Announcements />\n        <SecondarySideBar />\n      </RightColumn>\n    </MainContainer>\n  );\n};\n\nexport default Layout;\n\nLayout.propTypes = {\n  title: PropTypes.string,\n  subtitle: PropTypes.string,\n  children: PropTypes.node,\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 { 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 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 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            <HelpButton />\n          </Suspense>\n        </StyledPage>\n      </ErrorBoundary>\n    );\n  }\n\n  return (\n    <ErrorBoundary>\n      <StyledPage $hasTopBar={hasTopBar}>\n        <BannerAnnouncement />\n        <Layout {...(routeConfig?.layoutProps || {})} active={routeConfig.id}>\n          <Suspense fallback={<div style={{ minHeight: \"100vh\" }} />}>\n            <Component route={routeConfig} {...routeParams} {...rest} />\n            <HelpButton />\n          </Suspense>\n        </Layout>\n      </StyledPage>\n    </ErrorBoundary>\n  );\n};\nPage.propTypes = {\n  Component: PropTypes.elementType,\n  routeConfig: PropTypes.object.isRequired,\n  hasTopBar: PropTypes.bool,\n};\n\nexport default Page;\n","import ModalConfirmation from \"@agir/front/genericComponents/ModalConfirmation\";\nimport React, {useEffect, useMemo, useState} from \"react\";\nimport {useLocalStorage} from \"@agir/lib/utils/hooks\";\nimport styled from \"styled-components\";\nimport useSWR from \"swr\";\nimport {getNewsletterStatus} from \"@agir/notifications/common/notifications.config\";\nimport {updateProfile} from \"@agir/front/authentication/api\";\n\nconst StyledTitle = styled.div`\n    color: ${(props) => props.theme.primary500};\n    text-align: center;\n    \n    span {\n        margin-bottom: 25px;\n    }\n`\nconst StyledModalContent = styled.div`\n    text-align: center;\n    padding: 10px;\n`\n\n\nexport default function ModalMissingNewsletter() {\n    const [alreadyShowNewsletterModal, setAlreadyShowNewsletterModal] = useLocalStorage(\"AP_show_newsletter_modal\", false)\n    const {data: profile, mutate: mutateProfile, isLoading} = useSWR(\"/api/user/profile/\");\n    const [isLoadingUpdateProfile, setIsLoadingUpdateProfile] = useState(false);\n    const newsletterOptions = useMemo(() => getNewsletterStatus(profile?.newsletters), [profile]);\n\n    function userRegisteredToReguliere() {\n        return newsletterOptions?.[\"LFI_reguliere\"]?.email ?? false\n    }\n\n    async function inscription() {\n        setIsLoadingUpdateProfile(true)\n        const updatedProfile = await updateProfile({\"newsletters\": [\"LFI_reguliere\"]});\n        await mutateProfile(() => updatedProfile?.data)\n\n        setIsLoadingUpdateProfile(false);\n        setAlreadyShowNewsletterModal(true)\n    }\n\n    function userOldEnough() {\n        const dateLessOneMonth = new Date()\n        dateLessOneMonth.setMonth(dateLessOneMonth.getMonth() - 1)\n        return new Date(profile?.created) < dateLessOneMonth;\n    }\n\n    useEffect(() => {\n        if (userRegisteredToReguliere() && !alreadyShowNewsletterModal) {\n            setAlreadyShowNewsletterModal(true)\n        }\n    }, [newsletterOptions, alreadyShowNewsletterModal]);\n\n    const show = !alreadyShowNewsletterModal && !isLoading && !userRegisteredToReguliere() && userOldEnough()\n\n    return <ModalConfirmation\n        shouldShow={show}\n        title={<StyledTitle>\n            <span className=\"fa-regular fa-envelope fa-2xl\"/><br/>\n            NE MANQUEZ PAS NOS ACTUALITÉS !\n            </StyledTitle>}\n        dismissLabel=\"Non merci\"\n        confirmationLabel=\"Je m'inscris\"\n        onConfirm={inscription}\n        onClose={() => setAlreadyShowNewsletterModal(true)}\n        shouldDismissOnClick={false}\n        isConfirming={isLoadingUpdateProfile}\n    >\n        <StyledModalContent>\n\n            <p>Cela fait un moment que vous utilisez Action populaire, mais vous n'êtes toujours pas inscrit⸱e à la\n                lettre d'information de la France Insoumise.</p>\n            <p>Inscrivez-vous dès maintenant pour suivre de près par e-mail toutes les actualités du mouvement !</p>\n        </StyledModalContent>\n    </ModalConfirmation>\n}","import PropTypes from \"prop-types\";\nimport React, { useEffect } from \"react\";\nimport {\n  BrowserRouter,\n  Redirect,\n  Route,\n  Switch,\n  useLocation,\n} from \"react-router-dom\";\nimport ScrollMemory from \"react-router-scroll-memory\";\n\nimport { useAppLoader, useMobileApp } from \"@agir/front/app/hooks\";\nimport { useAuthentication } from \"@agir/front/authentication/hooks\";\nimport routes, { BASE_PATH, routeConfig } from \"./routes.config\";\nimport useTracking from \"./useTracking\";\n\nimport ConnectivityWarning from \"@agir/front/app/ConnectivityWarning\";\nimport Footer from \"@agir/front/app/Footer\";\nimport TopBar from \"@agir/front/app/Navigation/TopBar\";\nimport OpenGraphTags from \"@agir/front/app/OpenGraphTags\";\nimport NotFoundPage from \"@agir/front/notFoundPage/NotFoundPage\";\nimport Page from \"./Page\";\n\nimport logger from \"@agir/lib/utils/logger\";\nimport ModalMissingNewsletter from \"@agir/front/app/ModalMissingNewsletter\";\n\nconst log = logger(__filename);\n\nexport const 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};\n\nconst TrackingComponent = () => {\n  useTracking();\n  return null;\n};\nconst Router = ({ children }) => {\n  const { isMobileApp } = useMobileApp();\n  return (\n    <BrowserRouter basename={BASE_PATH}>\n      <ModalMissingNewsletter />\n      <TrackingComponent />\n      <ScrollMemory />\n      <TopBar />\n      <Switch>\n        {routes.map((route) => {\n          const hasTopBar =\n            !route.hideTopBar && (!route.appOnlyTopBar || isMobileApp);\n          return (\n            <Route key={route.id} path={route.path} exact={!!route.exact}>\n              <OpenGraphTags\n                title={route.label}\n                description={route.description}\n              />\n              {!route.hideConnectivityWarning && (\n                <ConnectivityWarning hasTopBar={hasTopBar} />\n              )}\n              <ProtectedComponent route={route} hasTopBar={hasTopBar} />\n            </Route>\n          );\n        })}\n        <Route key=\"not-found\">\n          <NotFoundPage />\n        </Route>\n      </Switch>\n      {children}\n      <Footer />\n    </BrowserRouter>\n  );\n};\n\nRouter.propTypes = {\n  children: PropTypes.node,\n};\nexport default Router;\n","import PropTypes from \"prop-types\";\nimport React from \"react\";\nimport styled, { useTheme } from \"styled-components\";\n\nimport Button from \"@agir/front/genericComponents/Button\";\nimport FeatherIcon from \"@agir/front/genericComponents/FeatherIcon\";\nimport { ResponsiveLayout } from \"@agir/front/genericComponents/grid\";\n\nimport logo from \"@agir/front/genericComponents/logos/action-populaire_primary_mini.svg\";\n\nimport { useDownloadBanner } from \"@agir/front/app/hooks.js\";\nimport { CONFIG } from \"@agir/front/genericComponents/AppStore.js\";\nimport { getMobileOS } from \"@agir/front/authentication/common.js\";\n\nconst StyledContainer = styled.div`\n  display: flex;\n  align-items: center;\n  background-color: ${(props) => props.theme.primary500};\n  color: ${(props) => props.theme.background0};\n  justify-content: space-evenly;\n  height: 80px;\n`;\n\nconst Title = styled.div``;\nconst Description = styled.div``;\n\nconst Content = styled.div`\n  display: flex;\n  flex-direction: column;\n  padding: 12px;\n\n  ${Title} {\n    color: ${(props) => props.theme.secondary500};\n    font-weight: 700;\n    font-size: 15px;\n  }\n\n  ${Description} {\n    color: ${(props) => props.theme.background0};\n    font-size: 12px;\n    flex-wrap: wrap;\n  }\n`;\n\nconst Download = styled(Button)`\n  background-color: ${(props) => props.theme.background0};\n  color: ${(props) => props.theme.primary500};\n  font-size: 13px;\n  font-weight: 700;\n\n  @media (max-width: 421px) {\n    border-radius: 50px;\n    width: 52px;\n    height: 52px;\n  }\n`;\n\nconst InlineBlock = styled.span`\n  display: inline-block;\n`;\n\nconst StyledFeatherIcon = styled(FeatherIcon)`\n  &:hover {\n    cursor: pointer;\n  }\n`;\n\nconst AppLogo = styled.svg`\n  width: 52px;\n  height: 52px;\n\n  @media (max-width: 350px) {\n    display: none;\n  }\n`;\n\nconst OS = getMobileOS();\n\nexport const DownloadApp = ({ onClick }) => {\n  const theme = useTheme();\n\n  return (\n    <StyledContainer>\n      <div style={{ padding: \"0.5rem\", cursor: \"pointer\" }} onClick={onClick}>\n        <StyledFeatherIcon\n          name=\"x\"\n          color=\"${props => props.theme.background0}\"\n          width=\"0.5rem\"\n          height=\"0.5rem\"\n          small\n        />\n      </div>\n      <AppLogo width=\"52\" height=\"52\" fill=\"none\">\n        <rect width=\"52\" height=\"52\" rx=\"11.056\" fill={theme.secondary500} />\n        <g clipPath=\"url(#a)\">\n          <path\n            d=\"m29.419 42.449-8.052-8.024c-4.447-4.432-4.482-11.582-.078-15.971 4.404-4.39 11.58-4.354 16.026.077 4.447 4.432 4.482 11.582.078 15.971L29.42 42.45Z\"\n            fill={theme.background0}\n          />\n          <path\n            fillRule=\"evenodd\"\n            clipRule=\"evenodd\"\n            d=\"m17.36 28.663 6.354 6.333 6.355-6.333a8.934 8.934 0 0 0 0-12.666c-3.51-3.497-9.2-3.497-12.71 0a8.934 8.934 0 0 0 0 12.666Zm6.354 10.16 8.276-8.246a11.634 11.634 0 0 0 0-16.494c-4.57-4.554-11.98-4.554-16.551 0a11.634 11.634 0 0 0 0 16.494l8.275 8.247Z\"\n            fill={theme.text1000}\n          />\n        </g>\n        <defs>\n          <clipPath id=\"a\">\n            <path\n              fill={theme.background0}\n              transform=\"translate(11.939 10.612)\"\n              d=\"M0 0h28.918v31.837H0z\"\n            />\n          </clipPath>\n        </defs>\n      </AppLogo>\n      <Content>\n        <Title>ACTION POPULAIRE</Title>\n        <Description>\n          Téléchargez l’appli des actions près{\" \"}\n          <InlineBlock>de chez vous</InlineBlock>\n        </Description>\n      </Content>\n      <div style={{ paddingRight: \"18px\" }}>\n        <Download\n          link\n          href={\"iOS\" === OS ? CONFIG.apple.href : CONFIG.google.href}\n          aria-label=\"Télécharger\"\n        >\n          <ResponsiveLayout\n            breakpoint={421}\n            MobileLayout={() => (\n              <FeatherIcon name=\"download\" color=\"primary500\" />\n            )}\n            DesktopLayout={() => \"Télécharger\"}\n          />\n        </Download>\n      </div>\n    </StyledContainer>\n  );\n};\n\nDownloadApp.propTypes = {\n  onClick: PropTypes.func,\n};\n\nconst ConnectedDownloadApp = () => {\n  const [isBannerDownload, closeDownload] = useDownloadBanner();\n\n  if (!isBannerDownload) return null;\n\n  return <DownloadApp onClick={closeDownload} />;\n};\n\nexport default ConnectedDownloadApp;\n","import PropTypes from \"prop-types\";\nimport React from \"react\";\nimport styled from \"styled-components\";\n\nimport FeatherIcon from \"@agir/front/genericComponents/FeatherIcon\";\n\nimport Link from \"@agir/front/app/Link\";\n\nconst SettingsMenuLink = styled(Link)`\n  position: absolute;\n  padding: 6px 5px;\n  bottom: 0;\n  right: 0;\n  background-color: ${(props) => props.theme.text1000};\n  color: ${(props) => props.theme.text25};\n  width: 42px;\n  height: 42px;\n  display: flex;\n  align-items: flex-start;\n  justify-content: flex-end;\n  transform: translateY(100%);\n  clip-path: polygon(0 0, 100% 0, 100% 100%, 0 0);\n  transition: all 100ms ease-in-out;\n  cursor: pointer;\n  opacity: 0.75;\n\n  &:hover,\n  &:focus {\n    background-color: ${(props) => props.theme.text1000};\n    color: ${(props) => props.theme.background0};\n    opacity: 1;\n  }\n`;\n\nconst AdminLink = ({ link }) =>\n  link ? (\n    <SettingsMenuLink\n      to={link.to}\n      href={link.href}\n      route={link.route}\n      title={link.label}\n      aria-label={link.label}\n      className=\"small-only\"\n    >\n      <FeatherIcon name=\"settings\" />\n    </SettingsMenuLink>\n  ) : null;\n\nAdminLink.propTypes = {\n  link: PropTypes.shape({\n    to: PropTypes.string,\n    href: PropTypes.string,\n    route: PropTypes.string,\n    label: PropTypes.string,\n  }),\n};\nexport default AdminLink;\n","import React, { Suspense } from \"react\";\nimport styled from \"styled-components\";\n\nimport { lazy } from \"@agir/front/app/utils\";\nimport { useResponsiveMemo } from \"@agir/front/genericComponents/grid\";\nimport { useSelector } from \"@agir/front/globalContext/GlobalContext\";\nimport { getAdminLink } from \"@agir/front/globalContext/reducers\";\n\nimport AdminLink from \"./AdminLink\";\n\nconst MobileNavBar = lazy(() => import(\"./MobileNavBar/MobileNavBar\"));\nconst DesktopNavBar = lazy(() => import(\"./DesktopNavBar/DesktopNavBar\"));\n\nconst StyledNav = styled.div`\n  position: relative;\n  width: 100%;\n  height: var(--top-bar-height);\n  box-shadow: ${(props) => props.theme.elaborateShadow};\n\n  & > * {\n    margin: 0 auto;\n  }\n`;\n\nconst NavBar = (props) => {\n  const adminLink = useSelector(getAdminLink);\n  const NavBar = useResponsiveMemo(MobileNavBar, DesktopNavBar);\n  return (\n    <StyledNav>\n      <Suspense fallback={null}>\n        <AdminLink link={adminLink} />\n        <NavBar {...props} />\n      </Suspense>\n    </StyledNav>\n  );\n};\n\nexport default NavBar;\n","import PropTypes from \"prop-types\";\nimport React, { useMemo } from \"react\";\nimport { useLocation } from \"react-router-dom\";\nimport styled from \"styled-components\";\n\nimport routes from \"@agir/front/app/routes.config\";\nimport { useMobileApp, useDownloadBanner } from \"@agir/front/app/hooks\";\n\nimport DownloadApp from \"@agir/front/genericComponents/DownloadApp\";\nimport Spacer from \"@agir/front/genericComponents/Spacer\";\nimport NavBar from \"./NavBar\";\n\nconst StyledPageHead = styled.div`\n  position: fixed;\n  top: var(--safe-area-inset-top, env(safe-area-inset-top));\n  left: 0;\n  z-index: ${(props) => props.theme.zindexTopBar};\n  @media (max-width: ${(props) => props.theme.collapse}px) {\n    z-index: 50 !important;\n  }\n  width: 100%;\n  background-color: ${(props) => props.theme.background0};\n  isolation: isolate;\n`;\n\nexport const TopBar = ({ path, hideBannerDownload, ...rest }) => {\n  return (\n    <StyledPageHead>\n      {!hideBannerDownload && <DownloadApp />}\n      <NavBar {...rest} path={path} />\n    </StyledPageHead>\n  );\n};\n\nTopBar.propTypes = {\n  path: PropTypes.string,\n  hideBannerDownload: PropTypes.bool,\n};\n\nconst RouterTopBar = (props) => {\n  const [isBannerDownload] = useDownloadBanner();\n  const { pathname } = useLocation();\n  const { isMobileApp } = useMobileApp();\n\n  const route = useMemo(\n    () => routes.find((route) => route.match(pathname)),\n    [pathname],\n  );\n\n  const hasTopBar =\n    props.hasTopBar ||\n    (route && !route.hideTopBar && (!route.appOnlyTopBar || isMobileApp));\n\n  if (!hasTopBar) {\n    return null;\n  }\n\n  return (\n    <>\n      <TopBar path={pathname} hasLayout={!!route?.hasLayout} />\n      {isBannerDownload && <Spacer size=\"80px\" />}\n    </>\n  );\n};\n\nRouterTopBar.propTypes = {\n  hasTopBar: PropTypes.bool,\n};\n\nexport default RouterTopBar;\n","import RouterTopBar from \"./TopBar\";\n\nexport { TopBar as TopBar } from \"./TopBar\";\nexport default RouterTopBar;\n","import PropTypes from \"prop-types\";\nimport React from \"react\";\nimport { animated, useSpring } from \"@react-spring/web\";\nimport styled from \"styled-components\";\nimport { Swiper, SwiperSlide } from \"swiper/react\";\n\nimport MiniEventCard from \"./MiniEventCard\";\n\nimport \"swiper/scss\";\n\nexport const SingleSlide = styled(animated.div)`\n  margin: 0;\n`;\n\nexport const Carousel = styled(animated.div)`\n  .swiper {\n    .swiper-slide {\n      box-sizing: border-box;\n      width: auto;\n      padding: 1px;\n    }\n  }\n`;\n\nexport const HorizontalLayout = (props) => {\n  const { events, ...rest } = props;\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  if (events.length === 1) {\n    return (\n      <SingleSlide style={style}>\n        <MiniEventCard {...rest} {...events[0]} />\n      </SingleSlide>\n    );\n  }\n\n  return events.length > 0 ? (\n    <Carousel style={style}>\n      <Swiper spaceBetween={16} slidesPerView=\"auto\">\n        {events.map((event) => (\n          <SwiperSlide key={event.id}>\n            <MiniEventCard {...rest} {...event} />\n          </SwiperSlide>\n        ))}\n      </Swiper>\n    </Carousel>\n  ) : null;\n};\n\nconst VerticalLayout = (props) => {\n  const { events, ...rest } = props;\n\n  return events.length > 0\n    ? events.map((event) => (\n        <MiniEventCard key={event.id} {...rest} {...event} />\n      ))\n    : null;\n};\n\nHorizontalLayout.propTypes = VerticalLayout.propTypes = {\n  events: PropTypes.arrayOf(PropTypes.object),\n};\n\nconst UpcomingEvents = (props) => {\n  const { orientation = \"horizontal\", ...rest } = props;\n\n  if (props.events.length === 0) {\n    return null;\n  }\n\n  if (orientation === \"horizontal\") {\n    return <HorizontalLayout {...rest} />;\n  }\n\n  if (orientation === \"vertical\") {\n    return <VerticalLayout {...rest} />;\n  }\n\n  return null;\n};\nUpcomingEvents.propTypes = {\n  events: PropTypes.arrayOf(PropTypes.object),\n  orientation: PropTypes.oneOf([\"horizontal\", \"vertical\"]),\n};\n\nexport default UpcomingEvents;\n","import UpcomingEvents from \"./UpcomingEvents\";\n\nexport default UpcomingEvents;\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"],"names":["Title","styled","span","MenuLink","Link","$active","theme","primary500","RawFeatherIcon","CounterBadge","StyledBottomBar","nav","props","background0","text50","zindexBottomBar","LINKS","CONFIG","filter","mobile","BottomBar","active","unreadMessageCount","unreadActivityCount","React","map","link","_link$icon","key","id","route","unreadMessageBadge","value","unreadActivityBadge","icon","includes","className","style","fontSize","fontWeight","paddingBottom","name","inline","title","useUnreadActivityCount","useUnreadMessageCount","_extends","fadeInTransition","from","opacity","enter","leave","delay","CloseButton","button","closeButton","BaseTooltip","animated","p","text1000","Tooltips","shouldShow","onClose","position","children","tooltipTransition","useTransition","Tooltip","item","onClick","slideInTransition","marginBottom","Button","a","$background","css","secondary500","secondary600","Wrapper","div","zindexFloatButton","collapse","FloatButton","isActive","shouldPushTooltip","href","content","label","hasTooltip","setHasTooltip","useState","hideTooltip","useCallback","showTooltip","pushTooltip","_objectSpread","onRest","wrapperTransition","undefined","background","onMouseOver","onMouseLeave","user","useSelector","getUser","visitCount","setVisitCount","useLocalStorage","setShouldPushTooltip","useEffectOnce","count","allIcons","Object","keys","icons","withConfig","shouldForwardProp","isPropValid","attrs","strokeWidth","color","strokeLinecap","strokeLinejoin","svgStyle","_icons$name$toSvg","_icons$name","k","replace","m","toLowerCase","join","dangerouslySetInnerHTML","__html","toSvg","width","height","top","propTypes","PropTypes","FeatherIcon","small","dimension","defaultProps","IconList","ul","IconListItem","li","getIconDataUrl","apple","$image","APP_STORE_APPLE","google","APP_STORE_GOOGLE","AppStoreLink","type","rest","_objectWithoutProperties","_excluded","config","routes","getRoutes","feedbackForm","isMobileApp","useMobileApp","ConnectedFloatButton","useMutate","funcApi","onSuccess","error","setError","data","setData","isLoading","setIsLoading","mutate","async","args","response","e","message","useAuthentication","isSessionLoaded","selector","authentication","neededAuthentication","AUTHENTICATION","NONE","useBookmarkedEmails","legacyBookmarkedEmails","bookmarkedEmails","setBookmarkedEmails","getBookmarkedEmails","useEffect","length","bookmarkEmails","addBookmarkedEmail","email","bookmarkEmail","ENDPOINT","login","checkCode","logout","signUp","getProfile","getProfileOptions","updateProfile","getAuthenticationEndpoint","params","endpoint","entries","forEach","result","success","url","body","trim","axios","post","status","code","get","next","formData","location_zip","postalCode","location_country","country","non_field_errors","global","patch","DEFAULT_TYPE","DEFAULT_TITLE","DEFAULT_DESCRIPTION","DEFAULT_URL","DEFAULT_IMAGE","description","image","pageTitle","Helmet","property","getHeight","axis","size","getWidth","Spacer","$width","$height","InlineSpacer","objectToFormData","obj","rootName","ignoreList","FormData","appendFormData","rootProp","Array","isArray","File","append","i","hasOwnProperty","LayoutSubtitle","h2","text700","LayoutTitle","h1","help","StyledIcon","StyledContainer","borderRadius","StyledPage","subtitle","errorMessage","hasReload","hasTopBar","useAppLoader","TopBar","block","window","location","reload","ACTIONS","donations","activeContribution","renewable","contributions","_user$activeContribut","createEvent","viewBox","fill","stroke","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","DEFAULT_ACTION_ORDER","GROUP_MANAGER_ACTION_ORDER","StyledButton","success500","$borderColor","$color","$textColor","disabled","visibileLabel","useResponsiveMemo","preventDefault","onMouseDown","Icon","Carousel","text25","StyledActionList","ActionButtonCarousel","actions","breakpoints","useMemo","getSwiperBreakpoints","slides","slideWidth","breakpoint","slidesPerView","Math","ceil","useSpring","paddingLeft","to","Swiper","centerInsufficientSlides","action","SwiperSlide","ActionButton","ActionButtonList","ActionButtons","_user$groups","groups","some","group","isManager","Boolean","getActionsForUser","ResponsiveLayout","MobileLayout","DesktopLayout","ConnectedActionButtons","session","useSWR","StyledCard","cardShadow","_location$name","startTime","backLink","routeConfig","eventDetails","getLink","eventPk","displayHumanDateString","ExternalRedirect","addQueryStringParams","isRequired","InternalRedirect","state","toast","sendToast","useToast","pathname","nextState","split","search","Redirect","RouteRedirect","_excluded2","isInternal","useRoute","OfflineBlock","NotFoundPage","reloadOnReconnection","isOffline","useIsOffline","wasOffline","usePrevious","ErrorPage","src","illustration","Counter","_ref","x","y","dominantBaseline","textAnchor","String","isNaN","parseInt","error500","zindexNavigationCounter","$border","white","useTracking","useLocation","previous","useRef","userId","_paq","sentrySetUser","ip_address","push","current","log","logger","StyledWarning","$hasTopBar","zindexTopBar","backgroundCOlor","$hasDownloadBanner","ConnectivityWarning","hasDownloadBanner","useDownloadBanner","offline","debug","display","setDisplay","warning","timeout","setTimeout","clearTimeout","initial","transitions","Footer","lazy","ConnectedFooter","getIsSessionLoaded","isConnected","getIsConnected","find","match","hideFooter","displayFooterOnMobileApp","Suspense","fallback","isSignedIn","hasBanner","hideFooterBanner","$smallBackgroundColor","Image","Container","article","$isClickable","linkRef","handleClick","click","desktop","backgroundImage","ref","Announcements","markAsDisplayed","activities","announcements","announcement","Announcement","FacebookLoginContainer","facebookLight","black","DismissMessage","FacebookLoginAd","dismissCallback","useCustomAnnouncement","isIOS","facebookLogin","facebookLogo","alt","margin","marginRight","facebookWhiteLogo","StyledLink","StyledMenu","text500","links","NavigationLink","secondaryLinks","external","SecondaryMenu","marginTop","listStyle","padding","SecondarySideBar","userRoutes","userGroups","SideBar","LeftColumn","aside","zindexMainContent","MainColumn","RightColumn","MainContainer","collapseTablet","events","UpcomingEvents","orientation","Component","generateLogger","Fallback","CustomFallback","SentryErrorBoundary","toString","answerToBannerAnnouncement","announcementId","answerId","put","SpinnerAnimation","keyframes","Loader","Spinner","BackgroundAnimation","Banner","Answers","BannerAnnouncementDone","Close","BannerAnnouncement","_currentAnnouncement$","currentAnnouncement","setCurrentAnnouncement","done","setDone","selectedAnswer","setSelectedAnswer","announcementsHandled","setAnnouncementsHandled","refresh","mutateAnswer","duration","AnnouncementDone","question","afterMessage","nextAnnouncement","prev","closeAnnouncement","hasAnswers","answers","_currentAnnouncement$2","answer","userAnswer","dispatch","useDispatch","history","useHistory","useParams","isPartial","setBackLink","setTopBarRightLink","setAdminLink","setPageTitle","topBarRightLink","unlisten","listen","hash","JSON","stringify","keepScroll","scrollTo","redirectTo","redirectProps","ErrorBoundary","hasLayout","Layout","layoutProps","minHeight","HelpButton","StyledTitle","StyledModalContent","ModalMissingNewsletter","alreadyShowNewsletterModal","setAlreadyShowNewsletterModal","profile","mutateProfile","isLoadingUpdateProfile","setIsLoadingUpdateProfile","newsletterOptions","getNewsletterStatus","newsletters","userRegisteredToReguliere","_newsletterOptions$LF","_newsletterOptions$LF2","show","dateLessOneMonth","Date","setMonth","getMonth","created","userOldEnough","ModalConfirmation","dismissLabel","confirmationLabel","onConfirm","updatedProfile","shouldDismissOnClick","isConfirming","ProtectedComponent","AnonymousComponent","isAuthorized","PreloadedComponent","preload","Page","anonymousConfig","TrackingComponent","Router","BrowserRouter","basename","BASE_PATH","ScrollMemory","Switch","hideTopBar","appOnlyTopBar","Route","path","exact","OpenGraphTags","hideConnectivityWarning","Description","Content","Download","InlineBlock","StyledFeatherIcon","AppLogo","svg","OS","getMobileOS","DownloadApp","useTheme","cursor","rx","fillRule","clipRule","paddingRight","ConnectedDownloadApp","isBannerDownload","closeDownload","SettingsMenuLink","AdminLink","MobileNavBar","DesktopNavBar","StyledNav","elaborateShadow","adminLink","getAdminLink","NavBar","StyledPageHead","hideBannerDownload","SingleSlide","HorizontalLayout","MiniEventCard","spaceBetween","event","VerticalLayout","_excluded3","useActivities","_data","_data2","setSize","isValidating","useSWRInfinite","index","getActivityEndpoint","page","pageSize","activityIds","results","activity","isLoadingInitialData","isLoadingMore","activityCount","isEmpty","isReachingEnd","isRefreshing","loadMore","isReady","setIsReady","dedupingInterval","focusThrottleInterval","slug","shouldPause","_error$response","wasPaused","setIsPaused","useSessionStorage","isPaused","useSWRImmutable","errorStatus","ACTIVITY_STATUS","STATUS_INTERACTED","activityId","setActivityAsInteracted"],"sourceRoot":""}