{"version":3,"file":"static/components/2453-cb9cc9747ca41735a54b.js?cv=7","mappings":"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","sources":["webpack:///home/runner/work/actionpopulaire.fr/actionpopulaire.fr/agir/notifications/components/common/notifications.config.js","webpack:///home/runner/work/actionpopulaire.fr/actionpopulaire.fr/agir/lib/components/utils/url.js","webpack:///home/runner/work/actionpopulaire.fr/actionpopulaire.fr/agir/front/components/globalContext/reducers.js","webpack:///home/runner/work/actionpopulaire.fr/actionpopulaire.fr/agir/lib/components/utils/axios.js","webpack:///home/runner/work/actionpopulaire.fr/actionpopulaire.fr/agir/activity/components/common/api.js","webpack:///home/runner/work/actionpopulaire.fr/actionpopulaire.fr/agir/front/components/globalContext/actions/index.js","webpack:///home/runner/work/actionpopulaire.fr/actionpopulaire.fr/agir/front/components/allPages/ios.js","webpack:///home/runner/work/actionpopulaire.fr/actionpopulaire.fr/agir/front/components/genericComponents/grid.js","webpack:///home/runner/work/actionpopulaire.fr/actionpopulaire.fr/agir/notifications/components/common/api.js","webpack:///home/runner/work/actionpopulaire.fr/actionpopulaire.fr/agir/lib/components/utils/dom.js","webpack:///home/runner/work/actionpopulaire.fr/actionpopulaire.fr/agir/front/components/genericComponents/Card.js","webpack:///home/runner/work/actionpopulaire.fr/actionpopulaire.fr/agir/front/components/app/utils.js","webpack:///home/runner/work/actionpopulaire.fr/actionpopulaire.fr/agir/front/components/allPages/android.js","webpack:///home/runner/work/actionpopulaire.fr/actionpopulaire.fr/agir/front/components/app/hooks.js","webpack:///home/runner/work/actionpopulaire.fr/actionpopulaire.fr/agir/front/components/globalContext/QueryStringParamsActions.js","webpack:///home/runner/work/actionpopulaire.fr/actionpopulaire.fr/agir/front/components/globalContext/GlobalContext.js","webpack:///home/runner/work/actionpopulaire.fr/actionpopulaire.fr/agir/front/components/genericComponents/Button/utils.js","webpack:///home/runner/work/actionpopulaire.fr/actionpopulaire.fr/agir/front/components/authentication/common.js","webpack:///home/runner/work/actionpopulaire.fr/actionpopulaire.fr/agir/front/components/app/routes.components.js","webpack:///home/runner/work/actionpopulaire.fr/actionpopulaire.fr/agir/front/components/app/routes.config.js","webpack:///home/runner/work/actionpopulaire.fr/actionpopulaire.fr/agir/activity/components/common/helpers.js","webpack:///home/runner/work/actionpopulaire.fr/actionpopulaire.fr/agir/front/components/offline/hooks.js"],"sourcesContent":["import {\n  NEWSLETTER_OPTIONS,\n  getNewsletterOptions,\n} from \"@agir/front/authentication/common\";\n\nconst PERSON_NOTIFICATIONS = [\n  {\n    id: \"campaign_news\",\n    type: \"Mon compte Action Populaire\",\n    icon: \"rss\",\n    subtype: \"Nouveautés\",\n    label: \"Informations importantes de la campagne\",\n    hasEmail: false,\n    hasPush: true,\n    activityTypes: [],\n  },\n  {\n    id: \"person_related_news\",\n    type: \"Mon compte Action Populaire\",\n    icon: \"rss\",\n    subtype: \"Nouveautés\",\n    label: \"Nouveautés qui me concernent\",\n    hasEmail: true,\n    hasPush: true,\n    activityTypes: [\"referral-accepted\"],\n  },\n  {\n    id: \"security_and_payment_alerts\",\n    type: \"Compte et sécurité\",\n    icon: \"lock\",\n    subtype: \"Compte et sécurité\",\n    label: \"Alertes de sécurité et de paiement\",\n    hasEmail: false,\n    hasPush: false,\n    activityTypes: [],\n  },\n  {\n    id: \"donation_reminders\",\n    type: \"Compte et sécurité\",\n    icon: \"lock\",\n    subtype: \"Compte et sécurité\",\n    label: \"Rappels de don\",\n    hasEmail: false,\n    hasPush: true,\n    activityTypes: [],\n  },\n  {\n    id: \"person_task_reminders\",\n    type: \"Compte et sécurité\",\n    icon: \"lock\",\n    subtype: \"Mes tâches à faire\",\n    label: \"Me rappeler mes tâches à faire régulièrement\",\n    hasEmail: false,\n    hasPush: true,\n    activityTypes: [],\n  },\n  {\n    id: \"event_suggestions\",\n    type: \"Événements\",\n    icon: \"calendar\",\n    subtype: \"Suggestions\",\n    label: \"Suggestion d'événement\",\n    hasEmail: false,\n    hasPush: true,\n    activityTypes: [\"event-suggestion\"],\n  },\n  {\n    id: \"event_updates\",\n    type: \"Événements\",\n    icon: \"calendar\",\n    subtype: \"Événements auxquels je participe\",\n    label: \"Mise à jour d'événement\",\n    hasEmail: true,\n    hasPush: true,\n    activityTypes: [\"event-update\"],\n  },\n  {\n    id: \"event_reminders\",\n    type: \"Événements\",\n    icon: \"calendar\",\n    subtype: \"Événements auxquels je participe\",\n    label: \"Rappel d'événement\",\n    hasEmail: false,\n    hasPush: true,\n    activityTypes: [\"reminder-upcoming-event-start\"],\n  },\n  {\n    id: \"online_event_reminders\",\n    type: \"Événements\",\n    icon: \"calendar\",\n    subtype: \"Événements auxquels je participe\",\n    label: \"Lien de connexion à la visio-conférence 5mn avant\",\n    hasEmail: false,\n    hasPush: true,\n    activityTypes: [],\n  },\n  {\n    id: \"event_rsvp_notifications\",\n    type: \"Événements\",\n    icon: \"calendar\",\n    subtype: \"Événements que j'organise\",\n    label: \"Nouveaux participant·es\",\n    hasEmail: true,\n    hasPush: true,\n    activityTypes: [\"new-attendee\"],\n  },\n  {\n    id: \"event_group_attendee_notifications\",\n    type: \"Événements\",\n    icon: \"calendar\",\n    subtype: \"Événements que j'organise\",\n    label: \"Nouveaux groupes participants\",\n    hasEmail: false,\n    hasPush: true,\n    activityTypes: [\"new-group-attendee\"],\n  },\n  {\n    id: \"event_task_reminders\",\n    type: \"Événements\",\n    icon: \"calendar\",\n    subtype: \"Événements que j'organise\",\n    label: \"Tâches à effectuer \",\n    hasEmail: false,\n    hasPush: true,\n    activityTypes: [\n      \"waiting-location-event\",\n      \"reminder-docs-event-eve\",\n      \"reminder-docs-event-nextday\",\n    ],\n  },\n  {\n    id: \"event_organizer_updates\",\n    type: \"Événements\",\n    icon: \"calendar\",\n    subtype: \"Événements que j'organise\",\n    label: \"Mises à jour pour les organisateur·ices\",\n    hasEmail: false,\n    hasPush: true,\n    activityTypes: [],\n  },\n].filter((notification) => notification.activityTypes.length > 0);\n\nconst GROUP_NOTIFICATIONS = [\n  {\n    id: \"group_join_event\",\n    type: \"Groupes\",\n    icon: \"users\",\n    subtype: \"Événements\",\n    label: \"Participation à un événement\",\n    hasEmail: false,\n    hasPush: true,\n    isActive: (group) => !group.isReferent,\n    activityTypes: [\"new-event-participation-mygroups\"],\n  },\n  {\n    id: \"group_event_coorganization-info\",\n    type: \"Groupes\",\n    icon: \"users\",\n    subtype: \"Événements\",\n    label: \"Gestion des co-organisations des événements\",\n    hasEmail: true,\n    hasPush: true,\n    isActive: (group) => group.isManager,\n    activityTypes: [\"group-coorganization-info\", \"group-coorganization-accepted\", \"group-coorganization-invite\"]\n  },\n  {\n    id: \"group_event_notifications\",\n    type: \"Groupes\",\n    icon: \"users\",\n    subtype: \"Mises à jour du groupe\",\n    label: \"Nouvel événement du groupe\",\n    hasEmail: true,\n    hasPush: true,\n    isActive: true,\n    activityTypes: [\"new-event-mygroups\"],\n  },\n  {\n    id: \"group_event_report_notifications\",\n    type: \"Groupes\",\n    icon: \"users\",\n    subtype: \"Mises à jour du groupe\",\n    label: \"Compte rendu d'un événement du groupe\",\n    hasEmail: true,\n    hasPush: true,\n    isActive: true,\n    activityTypes: [\"new-report\"],\n  },\n  {\n    id: \"group_updates\",\n    type: \"Groupes\",\n    icon: \"users\",\n    subtype: \"Mises à jour du groupe\",\n    label: \"Mise à jour du groupe\",\n    hasEmail: true,\n    hasPush: true,\n    isActive: true,\n    activityTypes: [\"group-info-update\"],\n  },\n  {\n    id: \"group_message_notifications\",\n    type: \"Groupes\",\n    icon: \"users\",\n    subtype: \"Discussions\",\n    label: \"Nouvelle discussion\",\n    hasEmail: true,\n    hasPush: true,\n    isActive: true,\n    activityTypes: [\"new-message\"],\n  },\n  {\n    id: \"group_comment_notifications\",\n    type: \"Groupes\",\n    icon: \"users\",\n    subtype: \"Discussions\",\n    label: \"Réponses à toutes les discussions\",\n    hasEmail: false,\n    hasPush: true,\n    isActive: true,\n    activityTypes: [\"new-comment\"],\n  },\n  {\n    id: \"group_restricted_comment_notifications\",\n    type: \"Groupes\",\n    icon: \"users\",\n    subtype: \"Discussions\",\n    label: \"Réponses aux discussions auxquelles je participe\",\n    hasEmail: true,\n    hasPush: true,\n    isActive: true,\n    activityTypes: [\"new-comment-restricted\"],\n  },\n  {\n    id: \"group_member_notifications\",\n    type: \"Groupes\",\n    icon: \"users\",\n    subtype: \"Gestion de mon groupe\",\n    label: \"Nouveaux membres\",\n    hasEmail: true,\n    hasPush: true,\n    isActive: (group) => group.isManager,\n    activityTypes: [\n      \"new-follower\",\n      \"new-member\",\n      \"accepted-invitation-member\",\n      \"group-membership-limit-reminder\",\n      \"new-members-through-transfer\",\n    ],\n  },\n  {\n    id: \"group_task_reminders\",\n    type: \"Groupes\",\n    icon: \"users\",\n    subtype: \"Gestion de mon groupe\",\n    label: \"Actions à faire\",\n    hasEmail: false,\n    hasPush: true,\n    isActive: (group) => group.isManager,\n    activityTypes: [\"waiting-location-group\", \"group-coorganization-invite\"],\n  },\n  {\n    id: \"group_manager_updates\",\n    type: \"Groupes\",\n    icon: \"users\",\n    subtype: \"Gestion de mon groupe\",\n    label: \"Mises à jour pour les gestionnaires\",\n    hasEmail: false,\n    hasPush: true,\n    isActive: (group) => group.isManager,\n    activityTypes: [\n      \"group-creation-confirmation\",\n      \"group-coorganization-accepted\",\n    ],\n  },\n].filter((notification) => notification.activityTypes.length > 0);\n\nconst getNotificationId = (notificationId, groupId) => {\n  if (groupId) {\n    return `${notificationId}__${groupId}`;\n  }\n  return notificationId;\n};\n\nconst getSingleGroupNotifications = (group) =>\n  GROUP_NOTIFICATIONS.filter((notification) => {\n    if (typeof notification.isActive === \"function\") {\n      return notification.isActive(group);\n    }\n    return notification.isActive;\n  }).map((notification) => ({\n    ...notification,\n    id: getNotificationId(notification.id, group.id),\n    type: group.name,\n    group: group.id,\n  }));\n\nconst getGroupNotifications = (groups = []) =>\n  groups.reduce(\n    (arr, group) => [...arr, ...getSingleGroupNotifications(group)],\n    [],\n  );\n\nconst getNewsletterNotifications = (user) => {\n  if (!user) {\n    return [];\n  }\n\n  return getNewsletterOptions(user).map((option) => ({\n    id: option.value,\n    label: option.label,\n    active: option.active,\n    type: \"Lettres d'information\",\n    icon: \"rss\",\n    subtype: \"Newsletter\",\n    hasEmail: true,\n    hasPush: false,\n    isNewsletter: true,\n  }));\n};\n\nexport const getAllNotifications = (user) => [\n  ...getNewsletterNotifications(user),\n  ...PERSON_NOTIFICATIONS,\n  ...getGroupNotifications(user?.groups),\n];\n\nexport const getNewsletterStatus = (newsletters) => {\n  if (!newsletters || !Array.isArray(newsletters)) {\n    return {};\n  }\n  let newsletterStatus = {};\n  Object.values(NEWSLETTER_OPTIONS).forEach((opt) => {\n    if (!opt.value) {\n      return;\n    }\n    newsletterStatus = {\n      ...newsletterStatus,\n      [opt.value]: { email: newsletters.includes(opt.value) },\n    };\n  });\n  return newsletterStatus;\n};\n\nexport const getNotificationStatus = (activeNotifications) => {\n  const active = {};\n\n  if (!Array.isArray(activeNotifications) || activeNotifications.length === 0) {\n    return active;\n  }\n\n  activeNotifications.forEach((activeNotification) => {\n    let notificationId = null;\n    const notification = activeNotification.group\n      ? GROUP_NOTIFICATIONS.find((groupNotification) =>\n          groupNotification.activityTypes.includes(\n            activeNotification.activityType,\n          ),\n        )\n      : PERSON_NOTIFICATIONS.find((notification) =>\n          notification.activityTypes.includes(activeNotification.activityType),\n        );\n    if (!notification) {\n      return;\n    }\n    notificationId = getNotificationId(\n      notification.id,\n      activeNotification.group,\n    );\n    active[notificationId] = active[notificationId] || {\n      email: false,\n      push: false,\n    };\n    active[notificationId][activeNotification.type] =\n      active[notificationId][activeNotification.type] || [];\n    active[notificationId][activeNotification.type].push(activeNotification.id);\n  });\n  return active;\n};\n\nexport function getDefaultNotifications() {\n  return [\n      ...PERSON_NOTIFICATIONS.filter((notification) =>\n          notification.hasPush && notification.id !== \"event_rsvp_notifications\")\n  ]\n}","export const parseURL = (url) =>\n  new URL(url, window.location && window.location.origin);\n\nexport const relativeToAbsoluteURL = ((a) => (url) => {\n  a.href = url;\n  return a.href;\n})(document.createElement(\"a\"));\n\nexport const stringifyQueryStringParams = (params = {}) => {\n  if (\n    !params ||\n    typeof params !== \"object\" ||\n    Object.keys(params).length === 0\n  ) {\n    return \"\";\n  }\n\n  return new URLSearchParams(\n    Object.entries(params).filter(([_, value]) => typeof value !== \"undefined\"),\n  ).toString();\n};\n\nexport const addQueryStringParams = (url, params = {}, relative = false) => {\n  if (!url) {\n    return \"\";\n  }\n  if (\n    !params ||\n    typeof params !== \"object\" ||\n    Object.keys(params).length === 0\n  ) {\n    return url;\n  }\n  try {\n    let parsedURL = url;\n    parsedURL = parseURL(url);\n    Object.entries(params).forEach(([key, value]) => {\n      if (typeof value !== \"undefined\") {\n        parsedURL.searchParams.set(key, value);\n      }\n    });\n    parsedURL = parsedURL.toString();\n    if (window?.location && relative) {\n      parsedURL = parsedURL.replace(window.location.origin, \"\");\n    }\n    return parsedURL;\n  } catch (e) {\n    return url;\n  }\n};\n\nexport const parseQueryStringParams = (url) => {\n  const params = Object.create(null);\n  let queryString = url ? url.split(\"?\")[1] : window.location.search.slice(1);\n  if (!queryString) {\n    return params;\n  }\n\n  queryString = queryString.split(\"#\")[0];\n  queryString.split(\"&\").forEach((entry) => {\n    // separate the keys and the values\n    let [key, value] = entry.split(\"=\");\n    value = typeof value === \"undefined\" ? true : value;\n\n    if (key.match(/\\[(\\d+)?\\]$/)) {\n      const name = key.replace(/\\[(\\d+)?\\]/, \"\");\n      params[name] = params[name] || [];\n      if (name.match(/\\[\\d+\\]$/)) {\n        var index = /\\[(\\d+)\\]/.exec(key)[1];\n        params[name][index] = value;\n      } else {\n        params[name].push(value);\n      }\n    } else {\n      if (!params[key]) {\n        params[key] = value;\n      } else if (params[key] && typeof params[key] === \"string\") {\n        params[key] = [params[key]];\n        params[key].push(value);\n      } else {\n        params[key].push(value);\n      }\n    }\n  });\n\n  return params;\n};\n\nexport const slugify = (string, separator = \"-\") => {\n  separator = separator.trim();\n  return (\n    string\n      .toString()\n      .normalize(\"NFD\")\n      .toLowerCase()\n      // remove all chars not letters, numbers, current separator and spaces (to be replaced)\n      .replace(new RegExp(`[^a-z0-9${separator} ]`, \"g\"), \"\")\n      .trim()\n      .replace(/\\s+/g, separator)\n  );\n};\n","import shortUUID from \"short-uuid\";\nimport ACTION_TYPE from \"@agir/front/globalContext/actionTypes\";\n\nimport { AUTHENTICATION } from \"@agir/front/authentication/common\";\n\nexport const hasRouter = (state = false, action) => {\n  if (action.type === ACTION_TYPE.INIT_ACTION) {\n    return !!action.hasRouter;\n  }\n  return state;\n};\n\nexport const isSessionLoaded = (state = false, action) => {\n  if (action.type === ACTION_TYPE.SET_SESSION_CONTEXT_ACTION) {\n    return true;\n  }\n  return state;\n};\n\nexport const isPoliticalSupport = (state = false, action) => {\n  if (action.type === ACTION_TYPE.SET_SESSION_CONTEXT_ACTION) {\n    return !!action.user && action.user.isPoliticalSupport;\n  }\n  if (action.type === ACTION_TYPE.SET_IS_POLITICAL_SUPPORT_ACTION) {\n    return true;\n  }\n  return state;\n};\n\nexport const user = (state = null, action) => {\n  if (action.type === ACTION_TYPE.SET_SESSION_CONTEXT_ACTION) {\n    return action.user;\n  }\n  return state;\n};\n\nexport const authentication = (state = AUTHENTICATION.NONE, action) => {\n  if (action.type === ACTION_TYPE.SET_SESSION_CONTEXT_ACTION) {\n    return action.authentication || state;\n  }\n  return state;\n};\n\nexport const bookmarkedEmails = (state = [], action) => {\n  if (action.type === ACTION_TYPE.SET_SESSION_CONTEXT_ACTION) {\n    return action.bookmarkedEmails || state;\n  }\n  return state;\n};\n\nexport const routes = (state = {}, action) => {\n  if (\n    action.type === ACTION_TYPE.INIT_ACTION ||\n    action.type === ACTION_TYPE.SET_SESSION_CONTEXT_ACTION\n  ) {\n    // Merge state and action payload since different actions can define different route properties.\n    return {\n      ...state,\n      ...(action.routes || {}),\n    };\n  }\n  return state;\n};\n\nexport const toasts = (state = [], action) => {\n  if (\n    action.type === ACTION_TYPE.INIT_ACTION ||\n    action.type === ACTION_TYPE.SET_SESSION_CONTEXT_ACTION ||\n    action.type === ACTION_TYPE.ADD_TOASTS\n  ) {\n    if (!Array.isArray(action.toasts)) {\n      return state;\n    }\n    const newState = [...state];\n    action.toasts.forEach((toast) => {\n      if (toast.toastId && newState.some((t) => t.toastId === toast.toastId)) {\n        return;\n      }\n      newState.push({\n        toastId: toast.toastId || shortUUID.generate(),\n        ...toast,\n      });\n    });\n    return newState;\n  }\n  if (action.type === ACTION_TYPE.CLEAR_TOAST) {\n    return state.filter(({ toastId }) => toastId !== action.toastId);\n  }\n  if (action.type === ACTION_TYPE.CLEAR_ALL_TOASTS) {\n    return [];\n  }\n  return state;\n};\n\nexport const pageTitle = (state = \"\", action) => {\n  if (action.type === ACTION_TYPE.SET_PAGE_TITLE) {\n    return action.title || \"\";\n  }\n  return state;\n};\n\nexport const backLink = (state = null, action) => {\n  if (action.type === ACTION_TYPE.INIT_ACTION) {\n    return action.backLink || state;\n  }\n  if (action.type === ACTION_TYPE.SET_BACK_LINK_ACTION) {\n    return action.backLink || null;\n  }\n  return state;\n};\n\nexport const topBarRightLink = (state = null, action) => {\n  if (action.type === ACTION_TYPE.INIT_ACTION) {\n    return action.topBarRightLink || state;\n  }\n  if (action.type === ACTION_TYPE.SET_TOP_BAR_RIGHT_LINK_ACTION) {\n    return action.topBarRightLink || null;\n  }\n  return state;\n};\n\nexport const adminLink = (state = null, action) => {\n  if (action.type === ACTION_TYPE.INIT_ACTION) {\n    return action.adminLink || state;\n  }\n  if (action.type === ACTION_TYPE.SET_ADMIN_LINK_ACTION) {\n    return action.adminLink || null;\n  }\n  return state;\n};\n\nexport const messages = (state = {}, action) => {\n  switch (action.type) {\n    case ACTION_TYPE.SET_MESSAGES_ACTION: {\n      if (!Array.isArray(action.messages)) {\n        return state;\n      }\n      const newState = { ...state };\n      action.messages.forEach((message) => {\n        newState[message.id] =\n          typeof newState[message.id] === \"undefined\"\n            ? message\n            : newState[message.id];\n      });\n      return newState;\n    }\n    case ACTION_TYPE.CLEAR_MESSAGES_ACTION:\n      return {};\n    case ACTION_TYPE.SET_MESSAGE_ACTION: {\n      return action.message\n        ? {\n            [action.message.id]: action.message,\n          }\n        : {};\n    }\n    case ACTION_TYPE.CREATED_MESSAGE_ACTION: {\n      return !action.error && action.message && action.message.id\n        ? { [action.message.id]: action.message, ...state }\n        : state;\n    }\n    case ACTION_TYPE.UPDATED_MESSAGE_ACTION: {\n      if (!action.error && action.message && action.message.id) {\n        const newState = { ...state };\n        newState[action.message.id] = action.message;\n        return newState;\n      }\n      return state;\n    }\n    case ACTION_TYPE.DELETED_MESSAGE_ACTION: {\n      if (!action.error && action.message && action.message.id) {\n        const newState = { ...state };\n        newState[action.message.id] = null;\n        return newState;\n      }\n      return state;\n    }\n    case ACTION_TYPE.CREATED_COMMENT_ACTION: {\n      if (\n        !action.error &&\n        action.message &&\n        action.message.id &&\n        action.comment\n      ) {\n        const newState = { ...state };\n        const newMessage = newState[action.message.id];\n        if (newMessage) {\n          newState[newMessage.id] = {\n            ...newMessage,\n            lastUpdate: Date.now(),\n            comments: Array.isArray(newMessage.comments)\n              ? [...newMessage.comments, action.comment]\n              : [...newMessage.recentComments, action.comment],\n          };\n          if (typeof newState[newMessage.id].commentCount === \"number\") {\n            newState[newMessage.id].commentCount += 1;\n          }\n        }\n        return newState;\n      }\n      return state;\n    }\n    case ACTION_TYPE.DELETED_COMMENT_ACTION: {\n      if (\n        !action.error &&\n        action.message &&\n        action.message.id &&\n        action.comment\n      ) {\n        const newState = { ...state };\n        const newMessage = newState[action.message.id];\n        if (newMessage) {\n          newState[newMessage.id] = {\n            ...newMessage,\n            lastUpdate: Date.now(),\n            comments: Array.isArray(newMessage.comments)\n              ? newMessage.comments\n              : newMessage.recentComments,\n          };\n          newState[newMessage.id].comments = newState[\n            newMessage.id\n          ].comments.filter((c) => c.id !== action.comment.id);\n          if (typeof newState[newMessage.id].commentCount === \"number\") {\n            newState[newMessage.id].commentCount -= 1;\n          }\n        }\n        return newState;\n      }\n      return state;\n    }\n    default:\n      return state;\n  }\n};\n\nexport const isLoadingMessages = (state = false, action) => {\n  switch (action.type) {\n    case ACTION_TYPE.LOADING_MESSAGES_ACTION:\n    case ACTION_TYPE.REFRESHING_MESSAGES_ACTION:\n      return true;\n    case ACTION_TYPE.SET_MESSAGES_ACTION:\n    case ACTION_TYPE.SET_MESSAGE_ACTION:\n    case ACTION_TYPE.REFRESHED_MESSAGES_ACTION:\n      return false;\n    default:\n      return state;\n  }\n};\nexport const isUpdatingMessages = (state = false, action) => {\n  switch (action.type) {\n    case ACTION_TYPE.CREATING_MESSAGE_ACTION:\n    case ACTION_TYPE.UPDATING_MESSAGE_ACTION:\n    case ACTION_TYPE.DELETING_MESSAGE_ACTION:\n    case ACTION_TYPE.REPORTING_MESSAGE_ACTION:\n    case ACTION_TYPE.CREATING_COMMENT_ACTION:\n    case ACTION_TYPE.DELETING_COMMENT_ACTION:\n    case ACTION_TYPE.REPORTING_COMMENT_ACTION:\n      return true;\n    case ACTION_TYPE.CREATED_MESSAGE_ACTION:\n    case ACTION_TYPE.UPDATED_MESSAGE_ACTION:\n    case ACTION_TYPE.DELETED_MESSAGE_ACTION:\n    case ACTION_TYPE.REPORTED_MESSAGE_ACTION:\n    case ACTION_TYPE.CREATED_COMMENT_ACTION:\n    case ACTION_TYPE.DELETED_COMMENT_ACTION:\n    case ACTION_TYPE.REPORTED_COMMENT_ACTION:\n      return false;\n    default:\n      return state;\n  }\n};\n\nexport const getHasRouter = (state) => state.hasRouter;\n\nexport const getIsSessionLoaded = (state) => state.isSessionLoaded;\n\nexport const getisPoliticalSupport = (state) => state.isPoliticalSupport;\n\nexport const getUser = (state) => state.user;\nexport const getIsConnected = (state) => !!state.user;\nexport const getAuthentication = (state) => state.authentication;\nexport const getBookmarkedEmails = (state) => state.bookmarkedEmails;\n\nexport const getRoutes = (state) => state.routes;\nexport const getRouteById = (state, id) => state.routes[id] || null;\n\nexport const getToasts = (state) => state.toasts;\n\nexport const getPageTitle = (state) => state.pageTitle;\n\nexport const getBackLink = (state) => {\n  if (!state.backLink) return null;\n  if (state.backLink.isProtected && state.isSessionLoaded && !state.user)\n    return null;\n  return state.backLink;\n};\n\nexport const getTopBarRightLink = (state) => {\n  if (!state.topBarRightLink) return null;\n  if (state.topBarRightLink.isProtected && state.isSessionLoaded && !state.user)\n    return null;\n  return state.topBarRightLink;\n};\n\nexport const getAdminLink = (state) => {\n  if (!state.adminLink) return null;\n  return state.adminLink;\n};\n\nexport const getMessages = (state) =>\n  Object.values(state.messages).filter(Boolean);\nexport const getMessageById = (state, id) =>\n  (state.messages && state.messages[id]) || null;\nexport const getIsLoadingMessages = (state) => state.isLoadingMessages;\nexport const getIsUpdatingMessages = (state) => state.isUpdatingMessages;\n\n// Root reducer\nconst reducers = {\n  hasRouter,\n  isSessionLoaded,\n  isPoliticalSupport,\n  user,\n  authentication,\n  bookmarkedEmails,\n  routes,\n  toasts,\n  pageTitle,\n  backLink,\n  topBarRightLink,\n  adminLink,\n  messages,\n  isLoadingMessages,\n  isUpdatingMessages,\n};\nconst rootReducer = (state, action) => {\n  let newState = state;\n  Object.keys(reducers).forEach((key) => {\n    const currentValue = newState[key];\n    const reducer = reducers[key];\n    const nextValue =\n      typeof reducer === \"function\" ? reducer(currentValue, action) : reducer;\n    if (nextValue !== currentValue) {\n      newState = {\n        ...newState,\n        [key]: nextValue,\n      };\n    }\n  });\n  return newState;\n};\n\nexport default rootReducer;\n","import axios from \"axios\";\nimport Cookies from \"js-cookie\";\n\nconst client = axios.create({\n  xsrfCookieName: \"csrftoken\",\n  xsrfHeaderName: \"X-CSRFToken\",\n});\n\nlet CSRFPromise = null;\n\nfunction updateCSRF() {\n  if (CSRFPromise) {\n    return CSRFPromise;\n  }\n\n  CSRFPromise = client.get(\"/api/csrf/\");\n  return CSRFPromise;\n}\n\nclient.interceptors.request.use(async function (config) {\n  if (\n    !Cookies.get(\"csrftoken\") &&\n    config.url !== \"/api/csrf/\" &&\n    config.method !== \"get\"\n  ) {\n    await updateCSRF();\n  }\n\n  return config;\n});\n\nexport default client;\n","import { mutate } from \"swr\";\n\nimport axios from \"@agir/lib/utils/axios\";\nimport logger from \"@agir/lib/utils/logger\";\n\nimport { ACTIVITY_STATUS } from \"@agir/activity/common/helpers\";\n\nconst log = logger(__filename);\n\nexport const ENDPOINT = {\n  activities: \"/api/user/activities/?page=:page&page_size=:pageSize\",\n  activity: \"/api/activity/:activityId/\",\n  bulkUpdateActivityStatus: \"/api/activity/bulk/update-status/\",\n  setAllActivitiesRead: \"/api/activity/bulk/mark-all-read/\",\n  announcements: \"/api/announcements/\",\n  customAnnouncement: \"/api/user/announcements/custom/:slug/\",\n  unreadActivityCount: \"/api/user/activities/unread-count/\",\n};\n\nexport const getActivityEndpoint = (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 updateActivityStatus = async (\n  activityId,\n  status = ACTIVITY_STATUS.STATUS_INTERACTED,\n  fromPush = false,\n) => {\n  let result = false;\n  if (!activityId) {\n    return result;\n  }\n  const url = getActivityEndpoint(\"activity\", { activityId });\n  const data = fromPush ? { pushStatus: status } : { status };\n  let res = null;\n  try {\n    res = await axios.put(url, data);\n    result = !!res && res.status === 200;\n  } catch (e) {\n    log.debug(e);\n    result = false;\n  }\n\n  return result;\n};\n\nexport const setActivityAsInteracted = (activityId, fromPush) =>\n  updateActivityStatus(activityId, ACTIVITY_STATUS.STATUS_INTERACTED, fromPush);\n\nexport const setActivityAsDisplayed = (activityId) =>\n  updateActivityStatus(activityId, ACTIVITY_STATUS.STATUS_DISPLAYED);\n\nexport const setActivitiesAsDisplayed = async (ids = []) => {\n  let result = false;\n  if (!Array.isArray(ids) || ids.length === 0) {\n    return result;\n  }\n  const url = getActivityEndpoint(\"bulkUpdateActivityStatus\");\n  const data = {\n    status: ACTIVITY_STATUS.STATUS_DISPLAYED,\n    ids,\n  };\n  let res = null;\n  try {\n    res = await axios.post(url, data);\n    result = !!res && res.status === 204;\n  } catch (e) {\n    log.debug(e);\n    result = false;\n  }\n\n  return result;\n};\n\n// Set all activities @ids as read\nexport const setCurrentActivitiesAsRead = async (ids = []) => {\n  const success = await setActivitiesAsDisplayed(ids);\n  if (!success) return;\n\n  await mutate(\"/api/session/\", (session) => ({\n    ...session,\n    hasUnreadActivities: false,\n  }));\n};\n\n// Set all activities of user as read\nexport const setAllActivitiesAsRead = async () => {\n  let result = false;\n\n  const url = getActivityEndpoint(\"setAllActivitiesRead\");\n\n  try {\n    let res = await axios.get(url);\n    result = !!res && res.status === 204;\n  } catch (e) {\n    log.debug(e);\n    result = false;\n  }\n\n  if (!result) return;\n\n  mutate(\"/api/session/\", (session) => ({\n    ...session,\n    hasUnreadActivities: false,\n  }));\n\n  return result;\n};\n","import ACTION_TYPE from \"@agir/front/globalContext/actionTypes\";\nimport nonReactRoutes from \"@agir/front/globalContext/nonReactRoutes.config\";\n\nexport const init = (hasRouter = false) => {\n  let globalContextData = {\n    hasRouter,\n    routes: nonReactRoutes,\n  };\n\n  return {\n    type: ACTION_TYPE.INIT_ACTION,\n    ...globalContextData,\n  };\n};\n\nexport const setSessionContext = (data) => ({\n  type: ACTION_TYPE.SET_SESSION_CONTEXT_ACTION,\n  ...data,\n});\n\nexport const setisPoliticalSupport = () => ({\n  type: ACTION_TYPE.SET_IS_POLITICAL_SUPPORT_ACTION,\n});\n\n// TOASTS\nexport const addToasts = (toasts = []) => ({\n  type: ACTION_TYPE.ADD_TOASTS,\n  toasts: Array.isArray(toasts) ? toasts : [toasts],\n});\nexport const clearToast = (toastId) => ({\n  type: ACTION_TYPE.CLEAR_TOAST,\n  toastId,\n});\nexport const clearAllToasts = () => ({\n  type: ACTION_TYPE.CLEAR_ALL_TOASTS,\n});\n\n// PAGE TITLE\nexport const setPageTitle = (title) => ({\n  type: ACTION_TYPE.SET_PAGE_TITLE,\n  title,\n});\n\n// BACK LINK\nexport const setBackLink = (backLink) => ({\n  type: ACTION_TYPE.SET_BACK_LINK_ACTION,\n  backLink,\n});\n\n// TOP BAR RIGHT LINK\nexport const setTopBarRightLink = (topBarRightLink) => ({\n  type: ACTION_TYPE.SET_TOP_BAR_RIGHT_LINK_ACTION,\n  topBarRightLink,\n});\n\n// ADMIN LINK\nexport const setAdminLink = (adminLink) => ({\n  type: ACTION_TYPE.SET_ADMIN_LINK_ACTION,\n  adminLink,\n});\n\nconst createDispatch = (dispatchFunction) => (action) => {\n  if (typeof action === \"function\") {\n    return action(dispatchFunction);\n  }\n  return dispatchFunction(action);\n};\n\nexport default createDispatch;\n","import {useCallback, useEffect, useRef, useState} from \"react\";\nimport {setupDefaultNotification} from \"@agir/notifications/common/api\";\n\nimport logger from \"@agir/lib/utils/logger\";\nimport {useLocalStorage} from \"@agir/lib/utils/hooks\";\n\nconst log = logger(__filename);\n\nwindow.iOSNativeMessage = (data) => {\n  let event = new CustomEvent(\"iOSMessage\", {\n    detail: {\n      data: JSON.parse(data),\n    },\n  });\n\n  log.debug(\"got message\", data);\n\n  window.dispatchEvent(event);\n};\n\nconst iosAction= {\n  SET_NOTIFICATION_STATE: 'setNotificationState',\n  GET_NOTIFICATION_STATE: 'getNotificationState',\n  ENABLE_NOTIFICATIONS: 'enableNotifications'\n};\n\nexport const useIOSNotificationGrant = (onNotificationGrant) => {\n  const [notificationIsGranted, setNotificationIsGranted] = useState(false)\n  const [fcmToken] = useLocalStorage(\"AP_FCMToken\", null);\n\n  const iosMessageHandler = useCallback(async ({action, noPermission}) => {\n    if (action === iosAction.SET_NOTIFICATION_STATE && noPermission === \"false\") {\n      setNotificationIsGranted(true);\n      onNotificationGrant?.()\n    }\n  }, []);\n\n  const postMessage = useIOSMessages(iosMessageHandler);\n\n  useEffect(() => {\n    postMessage && postMessage({ action: iosAction.GET_NOTIFICATION_STATE });\n  }, [postMessage]);\n\n  const grantNotification = useCallback(() => {\n    if (postMessage) {\n      postMessage && postMessage({ action: iosAction.ENABLE_NOTIFICATIONS });\n    } else {\n      console.error(\"postMessage not found !\")\n    }\n  }, [postMessage])\n\n  return {\n    grantNotification,\n    notificationIsGranted,\n    hasUpdate: fcmToken !== null\n  }\n}\n\nexport const useIOSMessages = (cb) => {\n  const savedCallback = useRef();\n\n  useEffect(() => {\n    savedCallback.current = cb;\n  }, [cb]);\n\n  useEffect(() => {\n    const eventListener = (event) =>\n      savedCallback.current && savedCallback.current(event.detail.data);\n\n    window.addEventListener(\"iOSMessage\", eventListener);\n\n    return () => {\n      window.removeEventListener(\"iOSMessage\", eventListener);\n    };\n  }, []);\n\n  const postMessage = useCallback((data) => {\n    window.webkit?.messageHandlers?.main?.postMessage(data);\n  }, []);\n\n  if (!window.webkit?.messageHandlers?.main) {\n    return;\n  }\n\n  return postMessage;\n};\n","import PropTypes from \"prop-types\";\nimport React, { useCallback, useEffect, useMemo, useState } from \"react\";\nimport styled, { useTheme } from \"styled-components\";\n\nimport { useDownloadBanner } from \"../app/hooks\";\nimport Card from \"./Card\";\n\n/**\n * Accessibility\n */\n\nexport const SROnly = styled.span`\n  border: 0 !important;\n  clip: rect(1px, 1px, 1px, 1px) !important;\n  -webkit-clip-path: inset(50%) !important;\n  clip-path: inset(50%) !important;\n  height: 1px !important;\n  overflow: hidden !important;\n  padding: 0 !important;\n  position: absolute !important;\n  width: 1px !important;\n  white-space: nowrap !important;\n`;\n\n/**\n * Text\n */\nexport const Center = styled.div`\n  text-align: center;\n`;\n\nexport const Right = styled.div`\n  text-align: right;\n`;\n\nexport const PullRight = styled.div`\n  float: right;\n`;\n\n/**\n * Media queries\n */\nexport const Hide = styled.div.attrs(({ $under, $over, theme }) => ({\n  $under: $under\n    ? `max-width: ${typeof $under === \"number\" ? $under : theme.collapse}px`\n    : \"width <= 0\",\n  $over: $over\n    ? `min-width: ${typeof $over === \"number\" ? $over : theme.collapse}px`\n    : \"width <= 0\",\n}))`\n  min-width: 0;\n\n  @media (${(props) => props.$under}) {\n    display: none !important;\n  }\n\n  @media (${(props) => props.$over}) {\n    display: none !important;\n  }\n`;\n\n/**\n * Grid\n */\n\nconst gutter = 16;\n\nexport const GrayBackground = styled.div`\n  background-color: ${(props) => props.theme.text25};\n`;\n\nexport const Column = styled.div.withConfig({\n  shouldForwardProp: (prop) =>\n    [\"collapse\", \"grow\", \"stack\"].includes(prop) === false,\n})`\n  flex-basis: ${({ width, grow }) =>\n    width || grow\n      ? (Array.isArray(width) && width[1] ? width[1] : width) || \"1px\"\n      : \"auto\"};\n  flex-grow: ${({ grow }) => (grow ? 1 : 0)};\n  & > ${Card} {\n    margin-bottom: 16px;\n  }\n\n  @media (max-width: ${(props) => props.collapse || props.theme.collapse}px) {\n    flex-basis: ${(props) =>\n      Array.isArray(props.width) && props.width[0] ? props.width[0] : \"100%\"};\n    padding-left: 0;\n    padding-right: 0;\n\n    & > & > ${Card} {\n      ${(props) => (props.stack ? \"margin-bottom: 0px;\" : \"\")}\n    }\n  }\n`;\n\nColumn.propTypes = {\n  width: PropTypes.oneOfType([\n    PropTypes.string,\n    PropTypes.arrayOf(PropTypes.string),\n  ]), // can be anything like \"50%\" \"400px\"\n  // if array first is mobile size, second is desktop\n  grow: PropTypes.bool, // does the column fill the remaining space\n  collapse: PropTypes.oneOfType([PropTypes.number, PropTypes.string]),\n};\n\nexport const Row = styled.div.withConfig({\n  shouldForwardProp: (prop) =>\n    [\"gutter\", \"align\", \"justify\"].includes(prop) === false,\n})`\n  margin-left: -${(props) => (typeof props.gutter === \"undefined\" ? gutter : props.gutter)}px;\n  margin-right: -${(props) => (typeof props.gutter === \"undefined\" ? gutter : props.gutter)}px;\n  display: flex;\n  flex-wrap: wrap;\n  align-items: ${({ align }) => align || \"stretch\"};\n  justify-content: ${({ justify }) => justify || \"start\"};\n  gap: ${(props) => props.gap}px;\n\n  & > ${Column} {\n    padding-left: ${(props) =>\n      typeof props.gutter === \"undefined\" ? gutter : props.gutter}px;\n    padding-right: ${(props) =>\n      typeof props.gutter === \"undefined\" ? gutter : props.gutter}px;\n  }\n\n  & > ${Column} > section {\n    margin-left: -${(props) => (typeof props.gutter === \"undefined\" ? gutter : props.gutter)}px;\n    margin-right: -${(props) => (typeof props.gutter === \"undefined\" ? gutter : props.gutter)}px;\n    border-radius: 0px;\n  }\n\n  @media (max-width: ${(props) => props.collapse || props.theme.collapse}px) {\n    & > ${Column} > ${Card} {\n      margin-left: -${(props) => (typeof props.gutter === \"undefined\" ? gutter : props.gutter)}px;\n      margin-right: -${(props) => (typeof props.gutter === \"undefined\" ? gutter : props.gutter)}px;\n      border-radius: 0px;\n    }\n  }\n`;\n\nRow.propTypes = {\n  children: PropTypes.node,\n  align: PropTypes.oneOf([\n    \"stretch\",\n    \"baseline\",\n    \"center\",\n    \"flex-start\",\n    \"flex-end\",\n  ]), // align-items CSS property\n  justify: PropTypes.oneOf([\n    \"flex-start\",\n    \"flex-end\",\n    \"center\",\n    \"space-between\",\n    \"space-around\",\n    \"space-evenly\",\n  ]), // justify-content CSS property\n};\n\nexport const Container = styled.section`\n  width: ${1400 + gutter * 2}px;\n  max-width: 100%;\n  margin: 0 auto;\n  padding-left: ${gutter}px;\n  padding-right: ${gutter}px;\n\n  & > ${Row} {\n    margin-left: -${gutter}px;\n    margin-right: -${gutter}px;\n  }\n`;\n\nexport const useIsDesktop = (breakpoint) => {\n  const theme = useTheme();\n  breakpoint = breakpoint || theme.collapse;\n  const [isDesktop, setDesktop] = useState(window.innerWidth > breakpoint);\n\n  let refresh = useCallback(\n    () => setDesktop(window.innerWidth > breakpoint),\n    [breakpoint],\n  );\n\n  useEffect(() => {\n    window.addEventListener(\"resize\", refresh);\n\n    return function cleanup() {\n      window.removeEventListener(\"resize\", refresh);\n    };\n  }, [refresh]);\n\n  return isDesktop;\n};\n\nexport const ResponsiveLayout = ({\n  MobileLayout,\n  DesktopLayout,\n  breakpoint,\n  ...props\n}) => {\n  const isDesktop = useIsDesktop(breakpoint);\n\n  return isDesktop ? <DesktopLayout {...props} /> : <MobileLayout {...props} />;\n};\nResponsiveLayout.propTypes = {\n  MobileLayout: PropTypes.oneOfType([PropTypes.element, PropTypes.func])\n    .isRequired,\n  DesktopLayout: PropTypes.oneOfType([PropTypes.element, PropTypes.func])\n    .isRequired,\n  breakpoint: PropTypes.number,\n};\n\nexport const useResponsiveMemo = (mobileValue, desktopValue, breakpoint) => {\n  const isDesktop = useIsDesktop(breakpoint);\n\n  const value = useMemo(\n    () => (isDesktop ? desktopValue : mobileValue),\n    [isDesktop, mobileValue, desktopValue],\n  );\n\n  return value;\n};\n\nexport const ResponsiveSpan = styled(\n  ({ small, large, breakpoint, ...props }) => {\n    const value = useResponsiveMemo(small, large, breakpoint);\n    return <span {...props}>{value}</span>;\n  },\n)``;\n\nResponsiveSpan.propTypes = {\n  small: PropTypes.string,\n  large: PropTypes.string,\n  breakpoint: PropTypes.number,\n};\n\nexport const useStickyOffset = (extraOffset = 0) => {\n  const hasDownloadBanner = useDownloadBanner();\n  const stickyOffset = useResponsiveMemo(hasDownloadBanner ? 134 : 54, 72);\n\n  return stickyOffset + extraOffset;\n};\n\nconst StickyDiv = styled.div.attrs((props) => ({\n  $offset:\n    typeof props.offset === \"number\" ? `${props.offset}px` : props.offset || 0,\n  $extra:\n    typeof props.extra === \"number\" ? `${props.extra}px` : props.extra || 0,\n}))`\n  position: sticky;\n  top: calc(${(props) => props.$offset} + ${(props) => props.$extra});\n`;\n\nexport const Sticky = ({ extraOffset, ...rest }) => {\n  const stickyOffset = useStickyOffset();\n  return <StickyDiv offset={stickyOffset} extra={extraOffset} {...rest} />;\n};\n\nSticky.propTypes = {\n  extraOffset: PropTypes.oneOfType([PropTypes.string, PropTypes.number]),\n};\n","import axios from \"@agir/lib/utils/axios\";\nimport {getDefaultNotifications} from \"@agir/notifications/common/notifications.config\";\n\nexport const ENDPOINT = {\n  getSubscriptions: \"/api/notifications/subscriptions/\",\n  createSubscriptions: \"/api/notifications/subscriptions/\",\n  deleteSubscriptions: \"/api/notifications/subscriptions/\",\n};\n\nexport const createSubscriptions = async (subscriptions) => {\n  const result = {\n    success: false,\n    error: null,\n  };\n  const url = ENDPOINT.createSubscriptions;\n  try {\n    const response = await axios.post(url, subscriptions);\n    result.success = response.status === 201;\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 deleteSubscriptions = async (subscriptions) => {\n  const result = {\n    success: false,\n    error: null,\n  };\n  const url = ENDPOINT.deleteSubscriptions;\n  try {\n    const response = await axios.delete(url, { data: subscriptions });\n    result.success = response.status === 201;\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 async function setupDefaultNotification() {\n  /**\n   * we must send subscribe for each notification type because if\n   * we send as a list, and there is only one which is already registered, the API will trigger a constraint and ignore the other ones.\n   */\n  const subscriptionRequest = getDefaultNotifications().map((notification) => {\n    return notification.activityTypes.map((type) =>\n        createSubscriptions([{\n          activityType: type,\n          type: \"push\",\n        }]));\n  });\n  await Promise.all(subscriptionRequest.flat(2))\n}","export const getScrollableParent = (element) => {\n  if (element === window) {\n    return element;\n  }\n\n  const regex = /(auto|scroll)/;\n  const parents = (_node, ps) => {\n    if (_node.parentNode === null) {\n      return ps;\n    }\n    return parents(_node.parentNode, ps.concat([_node]));\n  };\n\n  const style = (_node, prop) =>\n    getComputedStyle(_node, null).getPropertyValue(prop);\n  const overflow = (_node) =>\n    style(_node, \"overflow\") +\n    style(_node, \"overflow-y\") +\n    style(_node, \"overflow-x\");\n  const scroll = (_node) => regex.test(overflow(_node));\n\n  const scrollParent = (_node) => {\n    if (!(_node instanceof HTMLElement || _node instanceof SVGElement)) {\n      return;\n    }\n\n    const ps = parents(_node.parentNode, []);\n\n    for (let i = 0; i < ps.length; i += 1) {\n      if (scroll(ps[i])) {\n        return ps[i];\n      }\n    }\n\n    return document.scrollingElement || document.documentElement;\n  };\n\n  return scrollParent(element);\n};\n\nconst INTERACTIVE_ELEMENT = {\n  A: (element) => element.hasAttribute(\"href\"),\n  AUDIO: (element) => element.hasAttribute(\"controls\"),\n  BUTTON: true,\n  DETAILS: true,\n  EMBED: true,\n  IFRAME: true,\n  KEYGEN: true,\n  LABEL: true,\n  SELECT: true,\n  TEXTAREA: true,\n  VIDEO: (element) => element.hasAttribute(\"controls\"),\n};\n\nexport function isInteractiveElement(element) {\n  const { nodeName } = element;\n  if (element instanceof HTMLInputElement && element.type !== \"hidden\") {\n    return true;\n  }\n  if (element.hasAttribute(\"tabindex\") && element.tabIndex > -1) {\n    return true;\n  }\n  if (!INTERACTIVE_ELEMENT[nodeName]) {\n    return false;\n  }\n  if (typeof INTERACTIVE_ELEMENT[nodeName] === \"function\") {\n    return INTERACTIVE_ELEMENT[nodeName](element);\n  }\n  return INTERACTIVE_ELEMENT[nodeName] === true;\n}\n\nexport const handleEventExceptForInteractiveChild = (event, callback) => {\n  if (!callback) {\n    return;\n  }\n  for (\n    let target = event.target;\n    target !== event.currentTarget;\n    target = target.parentElement\n  ) {\n    if (isInteractiveElement(target)) {\n      return;\n    }\n  }\n  callback(event);\n};\n","import isPropValid from \"@emotion/is-prop-valid\";\nimport PropTypes from \"prop-types\";\nimport styled from \"styled-components\";\n\nconst cardTypes = {\n  default: {\n    backgroundColor: \"background0\",\n    borderRadius: 0,\n  },\n  primary: {\n    backgroundColor: \"primary100\",\n  },\n  alert: {\n    backgroundImage: `linear-gradient(90deg, transparent 0, transparent 3px, ${(props) => props.theme.background0} 3px)`,\n    backgroundColor: \"background0\",\n  },\n  alert_dismissed: {\n    backgroundImage: `linear-gradient(90deg, transparent 0, transparent 3px, ${(props) => props.theme.background0} 3px)`,\n    backgroundColor: \"background0\",\n  },\n  error: {\n    backgroundImage: `linear-gradient(90deg, transparent 0, transparent 8px, ${(props) => props.theme.background0} 8px)`,\n    backgroundColor: \"error500\",\n  },\n};\n\nconst Card = styled.div\n  .withConfig({\n    shouldForwardProp: isPropValid,\n  })\n  .attrs(({ type, ...props }) => ({\n    ...props,\n    config: type && cardTypes[type] ? cardTypes[type] : cardTypes.default,\n  }))`\n  background-image: ${({ config }) => config.backgroundImage || \"none\"};\n  background-color: ${({ config, theme }) =>\n    theme[config.backgroundColor] || config.backgroundColor};\n  padding: 1.5rem;\n  font-weight: 500;\n  cursor: ${({ onClick }) => (onClick ? \"pointer\" : \"default\")};\n  border: 1px solid;\n  border-color: ${(props) => props.theme.text100};\n  transition:\n    border-color,\n    background-color 300ms;\n  border-radius: ${(props) => props.theme.borderRadius};\n\n  &:hover {\n    ${({ onClick }) =>\n      onClick\n        ? `\n      border-color: ${(props) => props.theme.text100};\n    `\n        : \"\"}\n  }\n\n  @media (max-width: ${(props) => props.theme.collapse}px) {\n    padding: 1rem;\n    ${(props) =>\n      !props.bordered\n        ? `\n      border: none;\n      box-shadow: ${(props) => props.theme.elaborateShadow};\n      border-radius: 0;\n    `\n        : \"\"}\n  }\n\n  & p {\n    font-weight: 400;\n\n    & > strong,\n    & > a {\n      font-weight: bolder;\n    }\n    & > a {\n      color: inherit;\n      text-decoration: underline;\n    }\n  }\n`;\nCard.propTypes = {\n  type: PropTypes.oneOf(Object.keys(cardTypes)),\n};\nCard.defaultProps = {\n  type: \"default\",\n};\nexport default Card;\n","import React, { lazy as reactLazy, useEffect, useMemo, useState } from \"react\";\nimport { useHistory } from \"react-router-dom\";\nimport { useIsOffline } from \"@agir/front/offline/hooks\";\nimport { getScrollableParent } from \"@agir/lib/utils/dom\";\n\nexport const lazy = (lazyImport, fallback) => {\n  const LazyComponent = (props) => {\n    const isOffline = useIsOffline();\n    const [error, setError] = useState(null);\n\n    const Lazy = useMemo(\n      () =>\n        reactLazy(async () => {\n          try {\n            return await lazyImport();\n          } catch (err) {\n            if (err.name !== \"ChunkLoadError\") {\n              if (err instanceof Error) {\n                throw err;\n              }\n              const message = err?.message\n                ? err.message\n                : typeof err === \"string\"\n                  ? err\n                  : \"Lazy loading failed.\";\n              throw new Error(message);\n            }\n            setError(err.toString());\n            const Fallback = () =>\n              typeof fallback !== \"undefined\" ? (\n                fallback\n              ) : (\n                <div>\n                  <h2>Erreur</h2>\n                  <p>\n                    {process.env.NODE_ENV === \"production\"\n                      ? \"Nous n'avons pas pu charger cette page.\"\n                      : err.toString()}\n                  </p>\n                </div>\n              );\n            return {\n              default: Fallback,\n            };\n          }\n        }),\n      //eslint-disable-next-line\n      [lazyImport, error, fallback],\n    );\n\n    useEffect(() => {\n      error && !isOffline && setError(null);\n    }, [error, isOffline]);\n\n    return <Lazy {...props} />;\n  };\n\n  LazyComponent.displayName = `LazyComponent`;\n  LazyComponent.preload = async () => {\n    try {\n      return await lazyImport();\n    } catch (err) {\n      if (err.name !== \"ChunkLoadError\" && err instanceof Error) {\n        throw err;\n      }\n    }\n  };\n\n  return LazyComponent;\n};\n\nexport const scrollToElement = (\n  targetElement,\n  scrollerElement,\n  marginTop = 30,\n) => {\n  if (!targetElement || !scrollerElement) {\n    return;\n  }\n\n  const scrollableElement = getScrollableParent(scrollerElement);\n\n  targetElement &&\n    scrollableElement &&\n    scrollableElement.scrollTo({\n      top: targetElement.offsetTop - marginTop,\n      behavior: \"smooth\",\n    });\n};\n\nexport function getFirstElementFromError(errors) {\n  const keys = Object.entries(errors)\n      .filter(([_, v]) => !!v)\n      .map(([k]) => k);\n\n  let errorElement = null;\n  for (let i = 0; i < keys.length; i += 1) {\n    let elt = document.querySelector(\n        `[data-scroll=\"${keys[i]}\"], [name=\"${keys[i]}\"]`,\n    );\n    if (!elt) {\n      continue;\n    }\n    if (!errorElement) {\n      errorElement = elt;\n      continue;\n    }\n    if (elt.getBoundingClientRect().top < errorElement.getBoundingClientRect().top) {\n      errorElement = elt;\n    }\n  }\n  return errorElement\n}\n\nexport const scrollToError = (errors, scrollerElement, marginTop = 30) => {\n  if (!errors) {\n    return;\n  }\n\n  if (!scrollerElement || !Object.values(errors).some(Boolean)) {\n    return;\n  }\n\n  scrollToElement(getFirstElementFromError(errors), scrollerElement, marginTop);\n};\n\nexport const useCurrentLocation = () => {\n  const [pathname, setPathname] = useState(window.location.pathname);\n  const history = useHistory();\n\n  useEffect(() => {\n    history?.listen((location) => {\n      setPathname(location.pathname);\n    }) || setPathname(window.location.pathname);\n  }, [history]);\n\n  return pathname;\n};\n","import React, {useCallback, useEffect, useState} from \"react\";\nimport {useMobileApp} from \"@agir/front/app/hooks\";\nimport {setupDefaultNotification} from \"@agir/notifications/common/api\";\n\nexport function androidNotificationPermissionIsGranted() {\n    return window.androidApp?.notificationPermissionIsGranted() ?? false;\n}\n\nexport function askNotificationPermission() {\n    window.androidApp?.setupNotificationPermission();\n}\n\nlet grantObservers = [];\nexport function useAndroidNotificationGrant(onNotificationGrant) {\n    const [androidNotificationGranted, setAndroidNotificationGranted] = useState(androidNotificationPermissionIsGranted())\n    const {isMobileApp} = useMobileApp();\n\n    const grantNotification = useCallback(() => {\n        askNotificationPermission();\n    }, [isMobileApp])\n\n    const onAndroidMessage = useCallback((message) => {\n        if (message.channel === \"NOTIFICATION\" && message.value === \"granted\") {\n            onNotificationGrant?.()\n            grantObservers.forEach((obs) => obs(true));\n        }\n    }, []);\n\n\n    useEffect(() => {\n        if (!window.onAndroidMessage) {\n            window.onAndroidMessage = onAndroidMessage\n        }\n        grantObservers.push(setAndroidNotificationGranted)\n        return () => {\n            const observerIndex = grantObservers.findIndex((obs) => obs === setAndroidNotificationGranted)\n            grantObservers.splice(observerIndex, 1);\n            if (grantObservers.length === 0) {\n                window.onAndroidMessage = undefined\n            }\n        }\n    }, []);\n\n\n    return {\n        notificationIsGranted: isMobileApp && androidNotificationGranted,\n        grantNotification,\n        hasUpdate: window.androidApp !== undefined\n    }\n\n}","import querystring from \"query-string\";\nimport { useCallback, useEffect, useMemo, useState } from \"react\";\nimport { useHistory, useLocation } from \"react-router-dom\";\nimport { createGlobalState } from \"react-use\";\n\nimport { getRouteByPathname, routeConfig } from \"@agir/front/app/routes.config\";\nimport { useIsDesktop } from \"@agir/front/genericComponents/grid\";\nimport { useSelector } from \"@agir/front/globalContext/GlobalContext\";\nimport { getHasRouter, getRoutes } from \"@agir/front/globalContext/reducers\";\nimport { useLocalStorage } from \"@agir/lib/utils/hooks\";\nimport { parseQueryStringParams } from \"@agir/lib/utils/url\";\nimport {getDefaultNotifications} from \"../../../notifications/components/common/notifications.config\";\nimport {createSubscriptions, setupDefaultNotification} from \"../../../notifications/components/common/api\";\nimport {useIOSNotificationGrant} from \"@agir/front/allPages/ios\";\nimport {useAndroidNotificationGrant} from \"@agir/front/allPages/android\"\n\nexport const useCustomBackNavigation = (callback) => {\n  const history = useHistory();\n\n  useEffect(() => {\n    let unblock = undefined;\n    if (history && typeof callback === \"function\") {\n      unblock = history.block(() => {\n        callback();\n        return false;\n      });\n    }\n    return unblock;\n  }, [callback, history]);\n};\n\n/**\n * Custom hook to check if current page is inside a iOS or Android app webview\n * based on current or past URL querystring params [ios=[0|1], android=[0|1]]\n * @return {object} the result object\n * @property {boolean} isIOS - the page is inside an iOS app webview\n * @property {boolean} isAndroid - the page is inside an Android app webview\n * @property {boolean} isMobileApp - the page is inside an app webview\n */\nexport const useMobileApp = () => {\n  const [isAndroid, setIsAndroid] = useLocalStorage(\"AP_isAndroid\", \"0\");\n  const [isIOS, setIsIOS] = useLocalStorage(\"AP_isIOS\", \"0\");\n  const params = parseQueryStringParams();\n\n  const ios = isIOS === \"1\" || params.ios === \"1\";\n  const android = isAndroid === \"1\" || params.android === \"1\";\n\n  return {\n    isIOS: ios,\n    isAndroid: android,\n    isMobileApp: ios || android\n  };\n};\n\n\nexport function useNotificationGrant() {\n  const {isMobileApp, isAndroid, isIOS} = useMobileApp();\n  const [alreadyGrant, setAlreadyGrant] = useLocalStorage(\"AP_notification_already_grant\", false)\n\n  const onNotificationGrant = useCallback(() => {\n    if (!alreadyGrant) {\n      setupDefaultNotification();\n      setAlreadyGrant(true);\n    }\n  }, [alreadyGrant])\n\n  const {\n    hasUpdate: hasUpdateAndroid,\n    notificationIsGranted: notificationGrantedAndroid,\n    grantNotification: grantNotificationAndroid\n  } = useAndroidNotificationGrant(onNotificationGrant)\n\n  const {\n    hasUpdate: hasUpdateIOS,\n    notificationIsGranted: notificationGrantedIOS,\n    grantNotification: grantNotificationIOS\n  } = useIOSNotificationGrant(onNotificationGrant)\n\n  return {\n    notificationIsGranted: notificationGrantedAndroid || notificationGrantedIOS,\n    grantNotification: isMobileApp ? (isAndroid ? grantNotificationAndroid : grantNotificationIOS) : null,\n    hasUpdate: hasUpdateAndroid || hasUpdateIOS\n  }\n\n}\n\nconst useHasDownloadBanner = createGlobalState(undefined);\nexport const useDownloadBanner = () => {\n  const [bannerCount, setBannerCount] = useLocalStorage(\"BANNER_count\", 0);\n  const [visitCount] = useLocalStorage(\"AP_vcount\", 0);\n\n  const isDesktop = useIsDesktop();\n  const { isMobileApp } = useMobileApp();\n\n  const [hasBanner, setHasBanner] = useHasDownloadBanner();\n\n  useEffect(() => {\n    if (\n      hasBanner !== false &&\n      !isMobileApp &&\n      !isDesktop &&\n      bannerCount <= visitCount\n    ) {\n      setHasBanner(true);\n    }\n  }, [\n    hasBanner,\n    isMobileApp,\n    isDesktop,\n    bannerCount,\n    visitCount,\n    setHasBanner,\n  ]);\n\n  const hide = useCallback(() => {\n    setHasBanner(false);\n    setBannerCount(visitCount + 25);\n  }, [setBannerCount, visitCount, setHasBanner]);\n\n  return [!!hasBanner, hide];\n};\n\n/**\n * Custom React hook to hide the application loader\n * @param  {Boolean} [isReady=true]               whether the loader can be hidden or not\n */\nexport const useAppLoader = (isReady = true) => {\n  const [loader, setLoader] = useState(\n    isReady ? document.getElementById(\"app_loader\") : null,\n  );\n\n  useEffect(() => {\n    isReady !== null && setLoader(document.getElementById(\"app_loader\"));\n  }, [isReady]);\n\n  useEffect(() => {\n    if (!loader) {\n      return;\n    }\n\n    loader.addEventListener(\"transitionend\", () => {\n      const loader = document.getElementById(\"app_loader\");\n      loader && loader.remove();\n    });\n    loader.style.opacity = \"0\";\n    loader.style.zIndex = -1;\n\n    setLoader(null);\n  }, [loader]);\n};\n\nexport const useRoute = (route, routeParams) => {\n  const routes = useSelector(getRoutes);\n  const hasRouter = useSelector(getHasRouter);\n\n  if (!route) {\n    return {\n      route: null,\n      isInternal: false,\n    };\n  }\n\n  if (routes && routes[route]) {\n    return {\n      url: routes[route],\n      isInternal: !!hasRouter && !!getRouteByPathname(routes[route]),\n    };\n  }\n\n  if (routeConfig[route]) {\n    return {\n      url: routeParams\n        ? routeConfig[route].getLink(routeParams)\n        : routeConfig[route].getLink(),\n      isInternal: !!hasRouter,\n    };\n  }\n\n  return {\n    url: route,\n    isInternal: false,\n  };\n};\n\nexport const useLocationState = (singleParamKey = null) => {\n  const { search, pathname } = useLocation();\n  const history = useHistory();\n\n  const params = useMemo(\n    () => querystring.parse(search, { arrayFormat: \"comma\" }),\n    [search],\n  );\n\n  const setParams = useCallback(\n    (key, value) => {\n      history.replace({\n        pathname,\n        search: querystring.stringify(\n          {\n            ...params,\n            [key]: value,\n          },\n          { arrayFormat: \"comma\" },\n        ),\n      });\n    },\n    [pathname, history, params],\n  );\n\n  const setSingleParam = useCallback(\n    (value) => singleParamKey && setParams(singleParamKey, value),\n    [singleParamKey, setParams],\n  );\n\n  const clearParams = useCallback(() => {\n    history.replace({\n      pathname,\n      search: querystring.stringify({}, { arrayFormat: \"comma\" }),\n    });\n  }, [pathname, history]);\n\n  return singleParamKey\n    ? [\n        params[singleParamKey],\n        setSingleParam,\n        !!search ? clearParams : undefined,\n      ]\n    : [params, setParams, !!search ? clearParams : undefined];\n};\n","import { useCallback, useEffect, useRef } from \"react\";\n\nimport { setActivityAsInteracted } from \"@agir/activity/common/api\";\nimport { parseQueryStringParams } from \"@agir/lib/utils/url\";\nimport logger from \"@agir/lib/utils/logger\";\n\nconst log = logger(__filename);\n\nconst QueryStringParamsActions = ({ user }) => {\n  const params = parseQueryStringParams();\n\n  const fromActivityUpdated = useRef(false);\n\n  const handleFromActivity = useCallback(async (activityId) => {\n    fromActivityUpdated.current = true;\n    try {\n      await setActivityAsInteracted(activityId, true);\n    } catch (e) {\n      log.debug(e);\n    }\n  }, []);\n\n  useEffect(() => {\n    if (user && !fromActivityUpdated.current && params?.from_activity) {\n      handleFromActivity(params.from_activity);\n    }\n  }, [user, params, handleFromActivity]);\n\n  return null;\n};\n\nexport default QueryStringParamsActions;\n","import PropTypes from \"prop-types\";\nimport React, { useContext, useEffect, useMemo, Suspense } from \"react\";\nimport { StateInspector, useReducer } from \"reinspect\";\nimport useSWR from \"swr\";\n\nimport QueryStringParamsActions from \"./QueryStringParamsActions\";\nimport ThemeProvider, { getTheme } from \"@agir/front/theme/ThemeProvider\";\n\nimport rootReducer from \"@agir/front/globalContext/reducers\";\nimport createDispatch, {\n  init,\n  setSessionContext,\n} from \"@agir/front/globalContext/actions\";\n\nimport logger from \"@agir/lib/utils/logger\";\nimport { lazy } from \"@agir/front/app/utils\";\n\nconst log = logger(__filename);\n\nconst Toasts = lazy(() => import(\"@agir/front/globalContext/Toast\"), null);\n\nconst GlobalContext = React.createContext({});\n\nconst ProdProvider = ({\n  hasRouter = false,\n  hasToasts = false,\n  colorScheme,\n  children,\n}) => {\n  const [state, dispatch] = useReducer(\n    rootReducer,\n    rootReducer({}, init(hasRouter)),\n    (state) => state,\n    \"GC\",\n  );\n\n  const doDispatch = useMemo(() => createDispatch(dispatch), [dispatch]);\n\n  const { data: sessionContext } = useSWR(\"/api/session/\");\n\n  useEffect(() => {\n    if (!sessionContext) return;\n\n    if (!sessionContext.user) {\n      self.caches?.delete(\"session\").catch((err) => {\n        if (err.name !== \"SecurityError\") {\n          if (err instanceof Error) {\n            throw err;\n          }\n          const message = err?.message\n            ? err.message\n            : typeof err === \"string\"\n              ? err\n              : \"Session cache deletion failed.\";\n          throw new Error(message);\n        }\n      });\n    }\n\n    doDispatch(setSessionContext(sessionContext));\n    log.debug(\"Update session context\", sessionContext);\n  }, [doDispatch, sessionContext]);\n\n  return (\n    <GlobalContext.Provider value={{ state, dispatch: doDispatch }}>\n      <ThemeProvider\n        theme={(colorScheme && getTheme(colorScheme)) || undefined}\n      >\n        <QueryStringParamsActions user={sessionContext?.user} />\n        {children}\n        {hasToasts && state.toasts?.length > 0 ? (\n          <Suspense fallback={null}>\n            <Toasts />\n          </Suspense>\n        ) : null}\n      </ThemeProvider>\n    </GlobalContext.Provider>\n  );\n};\nconst DevProvider = (props) => {\n  return (\n    <StateInspector name=\"actionpopulaire\">\n      <ProdProvider {...props} />\n    </StateInspector>\n  );\n};\nDevProvider.propTypes = ProdProvider.propTypes = {\n  children: PropTypes.node,\n  hasToasts: PropTypes.bool,\n  hasRouter: PropTypes.bool,\n};\n\nexport const GlobalContextProvider =\n  process.env.NODE_ENV === \"production\" ? ProdProvider : DevProvider;\n\nexport const TestGlobalContextProvider = ({\n  hasRouter = false,\n  children,\n  value,\n}) => {\n  const [state] = useReducer(rootReducer, rootReducer({}, init()));\n  const doDispatch = useMemo(() => () => {}, []);\n  const currentState = useMemo(\n    () => ({\n      state: {\n        hasRouter,\n        ...state,\n        ...value,\n      },\n      dispatch: doDispatch,\n    }),\n    [hasRouter, state, value, doDispatch],\n  );\n\n  return (\n    <GlobalContext.Provider value={currentState}>\n      {children}\n    </GlobalContext.Provider>\n  );\n};\nTestGlobalContextProvider.propTypes = {\n  hasRouter: PropTypes.bool,\n  children: PropTypes.node,\n  value: PropTypes.object,\n};\n\nexport const useGlobalContext = () => useContext(GlobalContext);\nexport const useSelector = (selector) => {\n  const { state } = useContext(GlobalContext);\n  return selector(state);\n};\nexport const useDispatch = () => {\n  const { dispatch } = useContext(GlobalContext);\n  return dispatch;\n};\n\nexport default GlobalContextProvider;\n","import { icons } from \"feather-icons\";\n\nexport const ICONS = icons;\nexport const getIconDataUrl =\n  ({\n    color = \"black\",\n    fill,\n    width,\n    height,\n    strokeWidth,\n    strokeLineCap,\n    strokeLineJoin,\n  }) =>\n  ({ icon }) => {\n    const svg = ICONS[icon]\n      ? ICONS[icon]\n          .toSvg({\n            width,\n            height,\n            strokeWidth,\n            strokeLineCap,\n            strokeLineJoin,\n            color: encodeURI(color),\n            fill: fill ? \"currentColor\" : \"none\",\n          })\n          .replace(/#/g, \"%23\")\n      : \"\";\n    return svg && `url('data:image/svg+xml;utf8,${svg}')`;\n  };\n","import Cookies from \"js-cookie\";\n\nexport const AUTHENTICATION = {\n  NONE: 0,\n  SOFT: 1,\n  HARD: 2,\n};\n\nconst BOOKMARKED_EMAILS_COOKIE_NAME = \"AP_bookmarkedEmails\";\nconst BOOKMARKED_EMAILS_COOKIE_OPTIONS = {\n  expires: 365,\n  secure: process.env.NODE_ENV !== \"development\",\n  sameSite: \"Strict\",\n};\n\nexport const NEWSLETTERS = {\n  LFI_reguliere: {\n    label:\n      \"Les informations régulières de la France insoumise, dont la lettre d'information hébdomadaire\",\n    value: \"LFI_reguliere\",\n    selected: true,\n    visible: true,\n  },\n  LFI_exceptionnelle: {\n    label: \"Les informations exceptionnelles de la France insoumise\",\n    value: \"LFI_exceptionnelle\",\n    selected: true,\n    visible: true,\n  },\n  ELUES: {\n    label: \"Les informations destinées aux élu·es\",\n    value: \"ELUES\",\n    visible: (person) =>\n      !!person &&\n      (person.newsletters.includes(\"ELUES\") || person.membreReseauElus),\n  },\n  LFI_jeunes_insoumise: {\n    label: \"Les informations destinées aux Jeunes insoumis·es\",\n    value: \"LFI_jeunes_insoumises\",\n    selected: false,\n    visible: true,\n  },\n  LFI_liaisons: {\n    label: \"Relais insoumis\",\n    value: \"LFI_liaisons\",\n    visible: false,\n  },\n  ILB: {\n    label: \"Les informations de l'Institut La Boétie\",\n    value: \"ILB\",\n    selected: false,\n    visible: true,\n  },\n};\n\nexport const LIAISON_NEWSLETTER = NEWSLETTERS.LFI_liaisons;\n\nexport const NEWSLETTER_OPTIONS = Object.values(NEWSLETTERS);\n\nexport const getNewsletterOptions = (person) =>\n  Object.values(NEWSLETTER_OPTIONS).filter((n) =>\n    typeof n.visible === \"function\" ? n.visible(person) : !!n.visible,\n  );\n\nexport const getBookmarkedEmails = () => {\n  let cookieData = Cookies.get(BOOKMARKED_EMAILS_COOKIE_NAME);\n  cookieData = cookieData && JSON.parse(cookieData);\n  return cookieData || [];\n};\n\nexport const bookmarkEmails = (emails) => {\n  Cookies.set(\n    BOOKMARKED_EMAILS_COOKIE_NAME,\n    JSON.stringify(emails),\n    BOOKMARKED_EMAILS_COOKIE_OPTIONS,\n  );\n\n  return emails;\n};\n\nexport const bookmarkEmail = (email) => {\n  const bookmarkedEmails = getBookmarkedEmails();\n  const cookieData = JSON.stringify([\n    email,\n    ...bookmarkedEmails.filter((e) => e !== email),\n  ]);\n\n  Cookies.set(\n    BOOKMARKED_EMAILS_COOKIE_NAME,\n    cookieData,\n    BOOKMARKED_EMAILS_COOKIE_OPTIONS,\n  );\n\n  return cookieData;\n};\n\nexport const getMobileOS = () => {\n  let userAgent = navigator.userAgent || navigator.vendor || window.opera;\n\n  // Windows Phone must come first because its UA also contains \"Android\"\n  if (/windows phone/i.test(userAgent)) {\n    return \"Windows Phone\";\n  }\n  if (/android/i.test(userAgent)) {\n    return \"android\";\n  }\n  if (/iPad|iPhone|iPod/.test(userAgent) && !window.MSStream) {\n    return \"iOS\";\n  }\n  return \"unknown\";\n};\n","import { lazy } from \"./utils\";\n\nconst Routes = {\n  HomePage: lazy(\n    () =>\n      import(\n        /* webpackChunkName: \"r-homepage\" */ \"@agir/front/app/Homepage/Home\"\n      ),\n  ),\n  AgendaPage: lazy(\n    () =>\n      import(\n        /* webpackChunkName: \"r-agendapage\" */ \"@agir/events/agendaPage/Agenda\"\n      ),\n  ),\n  CalendarPage: lazy(\n    () =>\n      import(\n        /* webpackChunkName: \"r-calendar\" */ \"@agir/events/calendarPage/Calendar\"\n      ),\n  ),\n  EventMap: lazy(\n    () =>\n      import(\n        /* webpackChunkName: \"r-eventmap\" */ \"@agir/carte/page__eventMap/EventMap\"\n      ),\n  ),\n  GroupUpcomingEventPage: lazy(\n    () =>\n      import(\n        /* webpackChunkName: \"r-groupupcomingevent\" */ \"@agir/events/groupUpcomingEventPage/GroupUpcomingEventPage\"\n      ),\n  ),\n  GroupUpcomingEventRedirectPage: lazy(\n    () =>\n      import(\n        /* webpackChunkName: \"r-groupupcomingeventredirect\" */ \"@agir/events/groupUpcomingEventPage/GroupUpcomingEventRedirectPage\"\n      ),\n  ),\n  EventPage: lazy(\n    () =>\n      import(\n        /* webpackChunkName: \"r-eventpage\" */ \"@agir/events/eventPage/EventPage\"\n      ),\n  ),\n  MissingDocumentsPage: lazy(\n    () =>\n      import(\n        /* webpackChunkName: \"r-missingdocumentspage\" */ \"@agir/events/eventRequiredDocuments/MissingDocuments/MissingDocumentsPage\"\n      ),\n  ),\n  EventRequiredDocuments: lazy(\n    () =>\n      import(\n        /* webpackChunkName: \"r-eventrequireddocuments\" */ \"@agir/events/eventRequiredDocuments/EventRequiredDocumentsPage\"\n      ),\n  ),\n  GroupsPage: lazy(\n    () =>\n      import(\n        /* webpackChunkName: \"r-groupspage\" */ \"@agir/groups/groupsPage/GroupsPage\"\n      ),\n  ),\n  CreateEvent: lazy(\n    () =>\n      import(\n        /* webpackChunkName: \"r-createevent\" */ \"@agir/events/createEventPage/CreateEvent\"\n      ),\n  ),\n  FullGroupPage: lazy(\n    () =>\n      import(\n        /* webpackChunkName: \"r-fullgrouppage\" */ \"@agir/groups/fullGroupPage/FullGroupPage\"\n      ),\n  ),\n  GroupPage: lazy(\n    () =>\n      import(\n        /* webpackChunkName: \"r-grouppage\" */ \"@agir/groups/groupPage/GroupPage\"\n      ),\n  ),\n  GroupMap: lazy(\n    () =>\n      import(\n        /* webpackChunkName: \"r-groupmap\" */ \"@agir/carte/page__groupMap/GroupMap\"\n      ),\n  ),\n  ThematicGroups: lazy(\n    () =>\n      import(\n        /* webpackChunkName: \"r-thematicgroups\" */ \"@agir/groups/thematicGroupPage/ThematicGroupPage\"\n      ),\n  ),\n  ActivityPage: lazy(\n    () =>\n      import(\n        /* webpackChunkName: \"r-activitypage\" */ \"@agir/activity/ActivityPage/ActivityPage\"\n      ),\n  ),\n  NavigationPage: lazy(\n    () =>\n      import(\n        /* webpackChunkName: \"r-navigationpage\" */ \"@agir/front/navigationPage/NavigationPage\"\n      ),\n  ),\n  SignupPage: lazy(\n    () =>\n      import(\n        /* webpackChunkName: \"r-signuppage\" */ \"@agir/front/authentication/Connexion/SignupPage\"\n      ),\n  ),\n  LoginPage: lazy(\n    () =>\n      import(\n        /* webpackChunkName: \"r-loginpage\" */ \"@agir/front/authentication/Connexion/LoginPage\"\n      ),\n  ),\n  CodeLoginPage: lazy(\n    () =>\n      import(\n        /* webpackChunkName: \"r-codeloginpage\" */ \"@agir/front/authentication/Connexion/Code/CodeLogin\"\n      ),\n  ),\n  CodeSignupPage: lazy(\n    () =>\n      import(\n        /* webpackChunkName: \"r-codesignuppage\" */ \"@agir/front/authentication/Connexion/Code/CodeSignup\"\n      ),\n  ),\n  TellMorePage: lazy(\n    () =>\n      import(\n        /* webpackChunkName: \"r-tellmorepage\" */ \"@agir/front/authentication/Connexion/TellMore/TellMorePage\"\n      ),\n  ),\n  LogoutPage: lazy(\n    () =>\n      import(\n        /* webpackChunkName: \"r-logoutpage\" */ \"@agir/front/authentication/Connexion/Logout\"\n      ),\n  ),\n  MessagePage: lazy(\n    () =>\n      import(\n        /* webpackChunkName: \"r-messagepage\" */ \"@agir/msgs/MessagePage/MessagePage\"\n      ),\n  ),\n  CreateContactPage: lazy(\n    () =>\n      import(\n        /* webpackChunkName: \"r-createcontactpage\" */ \"@agir/people/contacts/CreateContactPage\"\n      ),\n  ),\n  DonationLandingPage: lazy(\n    () =>\n      import(\n        /* webpackChunkName: \"r-donationlandingpage\" */ \"@agir/donations/DonationLandingPage\"\n      ),\n  ),\n  ExternalDonationPage: lazy(\n    () =>\n      import(\n        /* webpackChunkName: \"r-externalDonationPage\" */ \"@agir/donations/externalDonationPage/ExternalDonationPage\"\n      ),\n  ),\n  DonationSuccessPage: lazy(\n    () =>\n      import(\n        /* webpackChunkName: \"r-donationSuccessPage\" */ \"@agir/donations/DonationSuccessPage\"\n      ),\n  ),\n  ChequeValidationPage: lazy(\n    () =>\n      import(\n        /* webpackChunkName: \"r-chequeValidationPage\" */\n        \"@agir/donations/validation/ChequeValidation\"\n      ),\n  ),\n  ContributionSuccessPage: lazy(\n    () =>\n      import(\n        /* webpackChunkName: \"r-contributionSuccessPage\" */ \"@agir/donations/ContributionSuccessPage\"\n      ),\n  ),\n  ContributionRenewalPage: lazy(\n    () =>\n      import(\n        /* webpackChunkName: \"r-contributionrenewalpage\" */ \"@agir/donations/contributionRenewalPage/ContributionRenewalPage\"\n      ),\n  ),\n  ActionToolsPage: lazy(\n    () =>\n      import(\n        /* webpackChunkName: \"r-actiontoolspage\" */ \"@agir/front/ActionToolsPage/ActionToolsPage\"\n      ),\n  ),\n  SearchPage: lazy(\n    () =>\n      import(\n        /* webpackChunkName: \"r-searchpage\" */ \"@agir/front/SearchPage/SearchPage\"\n      ),\n  ),\n  SearchGroupPage: lazy(\n    () =>\n      import(\n        /* webpackChunkName: \"r-searchgrouppage\" */ \"@agir/front/SearchPage/SearchGroupPage\"\n      ),\n  ),\n  SearchEventPage: lazy(\n    () =>\n      import(\n        /* webpackChunkName: \"r-searcheventpage\" */ \"@agir/front/SearchPage/SearchEventPage\"\n      ),\n  ),\n  VotingProxyLandingPage: lazy(\n    () =>\n      import(\n        /* webpackChunkName: \"r-votingproxylandingpage\" */ \"@agir/voting_proxies/VotingProxyLandingPage\"\n      ),\n  ),\n  NewVotingProxyRequest: lazy(\n    () =>\n      import(\n        /* webpackChunkName: \"r-newvotingproxyrequest\" */ \"@agir/voting_proxies/VotingProxyRequest/NewVotingProxyRequest\"\n      ),\n  ),\n  NewVotingProxy: lazy(\n    () =>\n      import(\n        /* webpackChunkName: \"r-newvotingproxy\" */ \"@agir/voting_proxies/VotingProxy/NewVotingProxy\"\n      ),\n  ),\n  ReplyToVotingProxyRequests: lazy(\n    () =>\n      import(\n        /* webpackChunkName: \"r-replytovotingproxyrequests\" */ \"@agir/voting_proxies/VotingProxy/ReplyToVotingProxyRequests\"\n      ),\n  ),\n  ReplyToSingleVotingProxyRequest: lazy(\n    () =>\n      import(\n        /* webpackChunkName: \"r-replytosinglevotingproxyrequest\" */ \"@agir/voting_proxies/VotingProxy/ReplyToVotingProxyRequests/ReplyToSingleVotingProxyRequest\"\n      ),\n  ),\n  VotingProxyRequestForProxy: lazy(\n    () =>\n      import(\n        /* webpackChunkName: \"r-votingproxyrequestsforproxy\" */ \"@agir/voting_proxies/VotingProxy/VotingProxyRequestForProxyPage\"\n      ),\n  ),\n  VotingProxyRequestDetails: lazy(\n    () =>\n      import(\n        /* webpackChunkName: \"r-votingproxyrequestdetails\" */ \"@agir/voting_proxies/VotingProxyRequest/VotingProxyRequestDetails\"\n      ),\n  ),\n  TestErrorPage: lazy(\n    () =>\n      import(\n        /* webpackChunkName: \"r-testerrorpage\" */ \"@agir/front/errorPage/TestErrorPage\"\n      ),\n  ),\n  TokTokPreview: lazy(\n    () =>\n      import(\n        /* webpackChunkName: \"r-toktokpreview\" */ \"@agir/events/TokTok/TokTokPreview\"\n      ),\n  ),\n  NewPollingStationOfficer: lazy(\n    () =>\n      import(\n        /* webpackChunkName: \"r-newpollingstationofficer\" */ \"@agir/elections/PollingStationOfficer/NewPollingStationOfficer\"\n      ),\n  ),\n  EventSpeakerPage: lazy(\n    () =>\n      import(\n        /* webpackChunkName: \"r-eventspeakerpage\" */ \"@agir/event_requests/EventSpeakerPage/EventSpeakerPage\"\n      ),\n  ),\n  FaIcons: lazy(\n    () =>\n      import(\n        /* webpackChunkName: \"r-faicons\" */ \"@agir/front/genericComponents/FaIcons\"\n      ),\n  ),\n  CreateSpendingRequest: lazy(\n    () =>\n      import(\n        /* webpackChunkName: \"r-createspendingrequest\" */ \"@agir/donations/spendingRequest/createSpendingRequestPage\"\n      ),\n  ),\n  EditSpendingRequest: lazy(\n    () =>\n      import(\n        /* webpackChunkName: \"r-editspendingrequest\" */ \"@agir/donations/spendingRequest/editSpendingRequestPage\"\n      ),\n  ),\n  SpendingRequestDetails: lazy(\n    () =>\n      import(\n        /* webpackChunkName: \"r-spendingrequestdetails\" */ \"@agir/donations/spendingRequest/spendingRequestPage\"\n      ),\n  ),\n  SpendingRequestHistory: lazy(\n    () =>\n      import(\n        /* webpackChunkName: \"r-spendingrequesthistory\" */ \"@agir/donations/spendingRequest/spendingRequestPage/SpendingRequestHistoryPage\"\n      ),\n  ),\n  GroupFinanceHistory: lazy(\n    () =>\n      import(\n        /* webpackChunkName: \"r-groupfinancehistory\" */ \"@agir/groups/groupPage/GroupSettings/GroupFinancePage/GroupFinanceHistoryPage\"\n      ),\n  ),\n  SoutienPage: lazy(\n    () =>\n      import(\n        /* webpackChunkName: \"r-soutienpage\" */ \"@agir/presidentielle2027/SoutienPage/SoutienPage\"\n      ),\n  ),\n  SoutienPageFinalize: lazy(\n    () =>\n      import(\n        /* webpackChunkName: \"r-soutienpagefinalize\" */ \"@agir/presidentielle2027/SoutienPage/FinalizeRedirectionPage\"\n      ),\n  ),\n  SoutienRejoindreActionPopulaire: lazy(\n    () =>\n      import(\n        /* webpackChunkName: \"r-soutienrejoindreactionpopulaire\" */ \"@agir/presidentielle2027/SoutienPage/SoutienRejoindreActionPopulaire\"\n      ),\n  ),\n};\n\nexport default Routes;\n","import pathToRegexp from \"path-to-regexp-es\";\n\nimport logger from \"@agir/lib/utils/logger\";\n\nimport { AUTHENTICATION } from \"@agir/front/authentication/common\";\nimport { relativeToAbsoluteURL } from \"@agir/lib/utils/url\";\n\nimport RouteComponents from \"./routes.components\";\nexport const BASE_PATH = \"/\";\n\nconst log = logger(__filename);\n\nexport class RouteConfig {\n  constructor(props) {\n    Object.keys(props).forEach((key) => (this[key] = props[key]));\n\n    this.__keys__ = [];\n    const path = Array.isArray(this.path) ? this.path[0] : this.path;\n    this.__re__ = pathToRegexp(this.path, this.__keys__, {\n      end: this.exact === false ? false : true,\n    });\n    this.__toPath__ = pathToRegexp.compile(path);\n\n    this.match = this.match.bind(this);\n    this.getLink = this.getLink.bind(this);\n  }\n\n  /**\n   * Method to match a pathname string against the RouteConfig path\n   * @param  {string} pathname The pathname to match against the RouteConfig path\n   * @return {boolean} True if the argument path matches, false otherwise\n   */\n  match(pathname) {\n    return !!pathname && !!this.__re__.exec(pathname);\n  }\n\n  /**\n   * Method to build a link to the RouteConfig pathname with optional URL parameters\n   * @param  {object} params An object mapping the path parameters value\n   * @param  {absolute} absolute Whether to return an absolute or relative link\n   * @return {string} The link path string\n   */\n  getLink(params, absolute = false) {\n    try {\n      params = {\n        ...(this.params || {}),\n        ...(params || {}),\n      };\n      const link = this.__toPath__(params);\n      return absolute ? relativeToAbsoluteURL(link) : link;\n    } catch (e) {\n      log.error(\"Failed to generate path\", e);\n      return Array.isArray(this.path) ? this.path[0] : this.path;\n    }\n  }\n}\n\nconst notificationSettingRoute = new RouteConfig({\n  id: \"notificationSettings\",\n  path: \"/:root*/parametres/\",\n  exact: true,\n  neededAuthentication: AUTHENTICATION.HARD,\n  label: \"Paramètres de notification\",\n  params: { root: \"activite\" },\n  isPartial: true,\n});\n\nexport const routeConfig = {\n  agenda: new RouteConfig({\n    id: \"agenda\",\n    path: \"/agenda/:agendaSlug\",\n    neededAuthentication: AUTHENTICATION.NONE,\n    label: \"Agenda\",\n    exact: true,\n    hasLayout: true,\n    Component: RouteComponents.CalendarPage,\n  }),\n  events: new RouteConfig({\n    id: \"events\",\n    path: [\"/\", \"/documents-justificatifs/\"],\n    exact: true,\n    neededAuthentication: AUTHENTICATION.SOFT,\n    label: \"Liste des événements\",\n    Component: RouteComponents.AgendaPage,\n    hasLayout: true,\n    layoutProps: {\n      $smallBackgroundColor: \"text25\",\n    },\n    hideFeedbackButton: true,\n    keepScroll: true,\n    hideFooterBanner: true,\n    AnonymousComponent: RouteComponents.HomePage,\n    anonymousConfig: {\n      hasLayout: false,\n    },\n  }),\n  missingEventDocumentsModal: new RouteConfig({\n    id: \"missingEventDocuments\",\n    path: \"/documents-justificatifs/\",\n    exact: true,\n    neededAuthentication: AUTHENTICATION.SOFT,\n    label: \"Documents justificatifs\",\n    hideFeedbackButton: true,\n    isPartial: true,\n  }),\n  missingEventDocuments: new RouteConfig({\n    id: \"missingEventDocuments\",\n    path: \"/evenements/documents-justificatifs/\",\n    exact: true,\n    neededAuthentication: AUTHENTICATION.HARD,\n    label: \"Documents justificatifs\",\n    Component: RouteComponents.MissingDocumentsPage,\n    hideFeedbackButton: true,\n    hasLayout: false,\n    backLink: {\n      route: \"events\",\n      label: \"Liste des événements\",\n      isProtected: true,\n    },\n  }),\n  eventMap: new RouteConfig({\n    id: \"eventMap\",\n    path: \"/evenements/carte/\",\n    exact: true,\n    neededAuthentication: AUTHENTICATION.NONE,\n    label: \"Carte des événements\",\n    Component: RouteComponents.EventMap,\n    hideFooter: true,\n    hideFeedbackButton: true,\n  }),\n  mapEventDetails: new RouteConfig({\n    id: \"mapEventDetails\",\n    path: \"/evenements/carte/:eventPk/\",\n    exact: true,\n    neededAuthentication: AUTHENTICATION.NONE,\n    label: \"Carte des événements\",\n    redirectTo: (_, routeParams) => ({\n      route: \"eventDetails\",\n      routeParams,\n      backLink: \"eventMap\",\n      push: false,\n    }),\n  }),\n  groupUpcomingEventRedirect: new RouteConfig({\n    id: \"groupUpcomingEventRedirect\",\n    path: \"/evenements/groupes/:groupPk/\",\n    exact: true,\n    neededAuthentication: AUTHENTICATION.SOFT,\n    label: \"Agenda des groupes d'action\",\n    Component: RouteComponents.GroupUpcomingEventRedirectPage,\n  }),\n  groupUpcomingEvents: new RouteConfig({\n    id: \"groupUpcomingEvents\",\n    path: \"/evenements/groupes/\",\n    exact: true,\n    neededAuthentication: AUTHENTICATION.SOFT,\n    label: \"Agenda des groupes d'action\",\n    Component: RouteComponents.GroupUpcomingEventPage,\n  }),\n  createEvent: new RouteConfig({\n    id: \"createEvent\",\n    path: \"/evenements/creer/\",\n    exact: false,\n    neededAuthentication: AUTHENTICATION.SOFT,\n    label: \"Nouvel événement\",\n    hideFeedbackButton: true,\n    Component: RouteComponents.CreateEvent,\n    hideFooter: true,\n  }),\n  eventSettings: new RouteConfig({\n    id: \"eventSettings\",\n    path: \"/evenements/:eventPk/gestion/:activePanel?/\",\n    params: { eventPk: null, activePanel: null },\n    exact: true,\n    isPartial: true,\n    neededAuthentication: AUTHENTICATION.HARD,\n    Component: RouteComponents.EventPage,\n    hideFeedbackButton: true,\n  }),\n  eventRequiredDocuments: new RouteConfig({\n    id: \"eventRequiredDocuments\",\n    path: \"/evenements/:eventPk/documents/\",\n    exact: true,\n    neededAuthentication: AUTHENTICATION.HARD,\n    label: \"Documents de l'événement\",\n    Component: RouteComponents.EventRequiredDocuments,\n    backLink: {\n      route: \"events\",\n      label: \"Liste des événements\",\n      isProtected: true,\n    },\n  }),\n  eventSpeaker: new RouteConfig({\n    id: \"eventSpeaker\",\n    path: \"/evenements/demandes/intervenant-e/\",\n    exact: true,\n    neededAuthentication: AUTHENTICATION.SOFT,\n    label: \"Demandes d'événements\",\n    Component: RouteComponents.EventSpeakerPage,\n    hasLayout: false,\n    hideFeedbackButton: true,\n  }),\n  eventDetails: new RouteConfig({\n    id: \"eventDetails\",\n    path: \"/evenements/:eventPk/\",\n    exact: false,\n    neededAuthentication: AUTHENTICATION.NONE,\n    label: \"Page de l'événement\",\n    Component: RouteComponents.EventPage,\n  }),\n  groups: new RouteConfig({\n    id: \"groups\",\n    path: \"/mes-groupes/\",\n    exact: true,\n    neededAuthentication: AUTHENTICATION.SOFT,\n    label: \"Liste des groupes\",\n    Component: RouteComponents.GroupsPage,\n    hasLayout: true,\n    layoutProps: {\n      $smallBackgroundColor: \"text25\",\n    },\n    keepScroll: true,\n  }),\n  groupMap: new RouteConfig({\n    id: \"groupMap\",\n    path: \"/groupes/carte/\",\n    exact: true,\n    neededAuthentication: AUTHENTICATION.NONE,\n    label: \"Carte des groupes\",\n    Component: RouteComponents.GroupMap,\n    hideFooter: true,\n    hideFeedbackButton: true,\n  }),\n  mapGroupDetails: new RouteConfig({\n    id: \"mapGroupDetails\",\n    path: \"/groupes/carte/:groupPk/\",\n    exact: true,\n    neededAuthentication: AUTHENTICATION.NONE,\n    redirectTo: (_, routeParams) => ({\n      route: \"groupDetails\",\n      routeParams,\n      backLink: \"groupMap\",\n      push: false,\n    }),\n  }),\n  fullGroup: new RouteConfig({\n    id: \"fullGroup\",\n    path: \"/groupes/:groupPk/complet/\",\n    exact: true,\n    neededAuthentication: AUTHENTICATION.NONE,\n    label: \"Groupe complet\",\n    Component: RouteComponents.FullGroupPage,\n    hasLayout: false,\n  }),\n  groupFinanceHistory: new RouteConfig({\n    id: \"groupFinanceHistory\",\n    path: \"/groupes/:groupPk/finance/history/\",\n    exact: true,\n    neededAuthentication: AUTHENTICATION.HARD,\n    label: \"Historique du budget\",\n    Component: RouteComponents.GroupFinanceHistory,\n  }),\n  groupSettings: new RouteConfig({\n    id: \"groupSettings\",\n    path: \"/groupes/:groupPk/:activeTab?/gestion/:activePanel?/\",\n    params: { activeTab: null, activePanel: null },\n    exact: true,\n    neededAuthentication: AUTHENTICATION.HARD,\n    Component: RouteComponents.GroupPage,\n    isPartial: true,\n  }),\n  createGroupSpendingRequest: new RouteConfig({\n    id: \"createGroupSpendingRequest\",\n    path: \"/groupes/:groupPk/depenses/creer/\",\n    exact: true,\n    neededAuthentication: AUTHENTICATION.HARD,\n    label: \"Nouvelle dépense\",\n    Component: RouteComponents.CreateSpendingRequest,\n    hideFeedbackButton: true,\n    backLink: {\n      label: \"Gestion du groupe\",\n      route: \"groupSettings\",\n      routeParams: {\n        activePanel: \"finance\",\n      },\n    },\n  }),\n  groupDetailsGestion: new RouteConfig({\n    id: \"groupDetailsGestion\",\n    path: \"/groupes/:groupPk/gestion/:any?/:action?\",\n    exact: false,\n    neededAuthentication: AUTHENTICATION.HARD,\n    label: \"Page gestion du groupe\",\n    Component: RouteComponents.GroupPage,\n    hideTopBar: true,\n    backLink: {\n      route: \"groups\",\n      isProtected: true,\n    },\n  }),\n  groupDetails: new RouteConfig({\n    id: \"groupDetails\",\n    path: \"/groupes/:groupPk/:activeTab?/\",\n    exact: false,\n    neededAuthentication: AUTHENTICATION.NONE,\n    label: \"Page du groupe\",\n    Component: RouteComponents.GroupPage,\n    backLink: {\n      route: \"groups\",\n      isProtected: true,\n    },\n  }),\n  thematicGroups: new RouteConfig({\n    id: \"thematicGroups\",\n    path: \"/groupes-thematiques/\",\n    exact: true,\n    neededAuthentication: AUTHENTICATION.NONE,\n    label: \"Les groupes thématiques\",\n    Component: RouteComponents.ThematicGroups,\n  }),\n  spendingRequestDetails: new RouteConfig({\n    id: \"spendingRequestDetails\",\n    path: \"/financement/demande/:spendingRequestPk/\",\n    exact: true,\n    neededAuthentication: AUTHENTICATION.HARD,\n    label: \"Détails de la demande\",\n    Component: RouteComponents.SpendingRequestDetails,\n  }),\n  spendingRequestHistory: new RouteConfig({\n    id: \"spendingRequestDetails\",\n    path: \"/financement/demande/:spendingRequestPk/historique/\",\n    exact: true,\n    neededAuthentication: AUTHENTICATION.HARD,\n    label: \"Historique de la demande\",\n    Component: RouteComponents.SpendingRequestHistory,\n    backLink: {\n      label: \"Détails de la demande\",\n      route: \"spendingRequestDetails\",\n    },\n  }),\n  editSpendingRequest: new RouteConfig({\n    id: \"editGroupSpendingRequest\",\n    path: \"/financement/demande/:spendingRequestPk/modifier/\",\n    exact: true,\n    neededAuthentication: AUTHENTICATION.HARD,\n    label: \"Modification de la dépense\",\n    Component: RouteComponents.EditSpendingRequest,\n    hideFeedbackButton: true,\n    backLink: {\n      label: \"Détail de la demande\",\n      route: \"spendingRequestDetails\",\n    },\n  }),\n  activities: new RouteConfig({\n    id: \"activities\",\n    path: [\"/activite/\", \"/activite/parametres/\"],\n    exact: true,\n    neededAuthentication: AUTHENTICATION.SOFT,\n    label: \"Notifications\",\n    Component: RouteComponents.ActivityPage,\n    hasLayout: true,\n    layoutProps: {\n      $smallBackgroundColor: \"text25\",\n    },\n    topBarRightLink: {\n      label: notificationSettingRoute.label,\n      to: notificationSettingRoute.getLink({ root: \"activite\" }),\n      protected: true,\n    },\n    keepScroll: true,\n  }),\n  actionTools: new RouteConfig({\n    id: \"actionTools\",\n    path: \"/agir/\",\n    exact: true,\n    neededAuthentication: AUTHENTICATION.SOFT,\n    label: \"Agir\",\n    Component: RouteComponents.ActionToolsPage,\n    hasLayout: false,\n    hideFeedbackButton: true,\n  }),\n  notificationSettings: notificationSettingRoute,\n  menu: new RouteConfig({\n    id: \"menu\",\n    path: \"/navigation/\",\n    exact: true,\n    neededAuthentication: AUTHENTICATION.SOFT,\n    label: \"Menu\",\n    Component: RouteComponents.NavigationPage,\n    hasLayout: true,\n    displayFooterOnMobileApp: true,\n    layoutProps: {\n      style: { paddingBottom: 0 },\n    },\n  }),\n  login: new RouteConfig({\n    id: \"login\",\n    path: \"/connexion/\",\n    exact: true,\n    neededAuthentication: AUTHENTICATION.NONE,\n    label: \"Connexion\",\n    description: \"Connectez-vous à Action Populaire\",\n    Component: RouteComponents.LoginPage,\n    hideTopBar: true,\n    hideFeedbackButton: true,\n    hideFooter: true,\n  }),\n  signup: new RouteConfig({\n    id: \"signup\",\n    path: \"/inscription/\",\n    exact: true,\n    neededAuthentication: AUTHENTICATION.NONE,\n    label: \"Inscription\",\n    description: \"Rejoignez Action Populaire\",\n    Component: () => {\n      window.location.href = \"https://melenchon2027.fr\";\n      return null;\n    },\n    hideTopBar: true,\n    hideFeedbackButton: true,\n    hideFooter: true,\n  }),\n  codeLogin: new RouteConfig({\n    id: \"codeLogin\",\n    path: \"/connexion/code/\",\n    exact: true,\n    neededAuthentication: AUTHENTICATION.NONE,\n    label: \"Connexion\",\n    description: \"Connectez-vous à Action Populaire\",\n    Component: RouteComponents.CodeLoginPage,\n    hideTopBar: true,\n    hideFeedbackButton: true,\n    hideFooter: true,\n  }),\n  codeSignup: new RouteConfig({\n    id: \"codeSignup\",\n    path: \"/inscription/code/\",\n    exact: true,\n    neededAuthentication: AUTHENTICATION.NONE,\n    label: \"Inscription\",\n    description: \"Rejoignez Action Populaire\",\n    Component: () => {\n      window.location.href = \"https://melenchon2027.fr\";\n      return null;\n    },\n    hideTopBar: true,\n    hideFeedbackButton: true,\n    hideFooter: true,\n  }),\n  tellMore: new RouteConfig({\n    id: \"tellMore\",\n    path: \"/bienvenue/\",\n    exact: true,\n    neededAuthentication: AUTHENTICATION.NONE,\n    label: \"J'en dis plus\",\n    Component: RouteComponents.TellMorePage,\n    hideTopBar: true,\n    hideFeedbackButton: true,\n    hidePushModal: true,\n    hideFooter: true,\n  }),\n  logout: new RouteConfig({\n    id: \"logout\",\n    path: \"/deconnexion/\",\n    exact: true,\n    neededAuthentication: AUTHENTICATION.NONE,\n    label: \"Déconnexion\",\n    Component: RouteComponents.LogoutPage,\n  }),\n  messages: new RouteConfig({\n    id: \"messages\",\n    path: [\"/messages/:messagePk?/\", \"/messages/:messagePk/parametres/\"],\n    params: { messagePk: null },\n    exact: true,\n    neededAuthentication: AUTHENTICATION.HARD,\n    label: \"Messages\",\n    Component: RouteComponents.MessagePage,\n    hasLayout: false,\n    hideFeedbackButton: true,\n    hideFooter: true,\n    topBarRightLink: {\n      messageSettings: true,\n    },\n  }),\n  createContact: new RouteConfig({\n    id: \"createContact\",\n    path: \"/contacts/creer/:step?/\",\n    params: { step: null },\n    exact: true,\n    neededAuthentication: AUTHENTICATION.SOFT,\n    label: \"Nouveau contact\",\n    Component: RouteComponents.CreateContactPage,\n    hasLayout: false,\n    hideFeedbackButton: true,\n    hideFooter: true,\n  }),\n  soutienFinalize: new RouteConfig({\n    id: \"soutienFinalizePage\",\n    path: \"/soutien/f/:code\",\n    exact: true,\n    neededAuthentication: AUTHENTICATION.NONE,\n    label: \"Soutien\",\n    Component: RouteComponents.SoutienPageFinalize,\n    hasLayout: false,\n    hideFeedbackButton: true,\n    hideFooter: true,\n    appOnlyTopBar: true,\n  }),\n  soutienRejoindreActionPopulaire: new RouteConfig({\n    id: \"soutienRejoindreActionPopulaire\",\n    path: \"/soutien/rejoindre-action-populaire/\",\n    neededAuthentication: AUTHENTICATION.NONE,\n    label: \"Rejoindre Action populaire\",\n    Component: RouteComponents.SoutienRejoindreActionPopulaire,\n    hasLayout: false,\n    hideFeedbackButton: true,\n    hideFooter: false,\n  }),\n  soutien: new RouteConfig({\n    id: \"soutienPage\",\n    path: \"/soutien/*\",\n    exact: true,\n    neededAuthentication: AUTHENTICATION.NONE,\n    label: \"Soutien\",\n    Component: RouteComponents.SoutienPage,\n    hasLayout: false,\n    hideFeedbackButton: true,\n    hideFooter: true,\n    appOnlyTopBar: true,\n  }),\n  donationLanding: new RouteConfig({\n    id: \"donationLanding\",\n    path: \"/financer/\",\n    exact: true,\n    neededAuthentication: AUTHENTICATION.NONE,\n    label: \"Financer\",\n    Component: RouteComponents.DonationLandingPage,\n    hasLayout: false,\n    hideFeedbackButton: true,\n    hideFooter: true,\n    appOnlyTopBar: true,\n  }),\n  donationSuccess: new RouteConfig({\n    id: \"donationSuccess\",\n    params: { type: null },\n    path: \"/:type?/dons/remerciement/\",\n    exact: true,\n    neededAuthentication: AUTHENTICATION.NONE,\n    label: \"Faire un don\",\n    Component: RouteComponents.DonationSuccessPage,\n    hasLayout: false,\n    hideFeedbackButton: true,\n    hideFooter: true,\n    appOnlyTopBar: true,\n  }),\n  chequeValidation: new RouteConfig({\n    id: \"chequeValidation\",\n    params: { paymentId: null },\n    path: \"/paiement/cheque/:paymentId\",\n    exact: true,\n    neededAuthentication: AUTHENTICATION.NONE,\n    label: \"Merci pour votre don\",\n    Component: RouteComponents.ChequeValidationPage,\n    hasLayout: false,\n    hideFeedbackButton: true,\n    hideFooter: true,\n    appOnlyTopBar: true,\n  }),\n  externalDonation: new RouteConfig({\n    id: \"externalDonation\",\n    params: { type: null },\n    path: [\"/:type?/dons/informations/\", \"/:type?/dons-mensuels/informations/\"],\n    exact: true,\n    neededAuthentication: AUTHENTICATION.NONE,\n    label: \"Faire un don\",\n    Component: RouteComponents.ExternalDonationPage,\n    hasLayout: false,\n    hideFeedbackButton: true,\n    hideFooter: true,\n    appOnlyTopBar: true,\n  }),\n  donations: new RouteConfig({\n    id: \"donations\",\n    path: \"/:type?/dons/:step?/\",\n    params: { type: null, step: null },\n    exact: true,\n    neededAuthentication: AUTHENTICATION.NONE,\n    label: \"Faire un don\",\n    Component: RouteComponents.DonationLandingPage,\n    hasLayout: false,\n    hideFeedbackButton: true,\n    hideFooter: true,\n    appOnlyTopBar: true,\n  }),\n  contributionSuccess: new RouteConfig({\n    id: \"contributionSuccess\",\n    path: \"/contributions/remerciement/\",\n    exact: true,\n    neededAuthentication: AUTHENTICATION.NONE,\n    label: \"Devenir financeur·euse de la France insoumise\",\n    Component: RouteComponents.ContributionSuccessPage,\n    hasLayout: false,\n    hideFeedbackButton: true,\n    hideFooter: true,\n    appOnlyTopBar: true,\n  }),\n  contributionRenewal: new RouteConfig({\n    id: \"contributionRenewal\",\n    path: \"/contributions/renouvelement/\",\n    exact: true,\n    neededAuthentication: AUTHENTICATION.HARD,\n    label: \"Renouveler le financement à la France insoumise\",\n    Component: RouteComponents.ContributionRenewalPage,\n    hasLayout: false,\n    hideFeedbackButton: true,\n  }),\n  contributions: new RouteConfig({\n    id: \"contributions\",\n    path: \"/contributions/:step?/\",\n    params: { step: null },\n    exact: true,\n    neededAuthentication: AUTHENTICATION.NONE,\n    label: \"Devenir financeur·euse de la France insoumise\",\n    Component: RouteComponents.DonationLandingPage,\n    hasLayout: false,\n    hideFeedbackButton: true,\n    hideFooter: true,\n    appOnlyTopBar: true,\n  }),\n  search: new RouteConfig({\n    id: \"search\",\n    path: \"/recherche/\",\n    exact: true,\n    neededAuthentication: AUTHENTICATION.NONE,\n    Component: RouteComponents.SearchPage,\n    label: \"Rechercher\",\n    hasLayout: false,\n    hideFeedbackButton: true,\n  }),\n  searchGroup: new RouteConfig({\n    id: \"searchGroup\",\n    path: \"/recherche/groupes/\",\n    neededAuthentication: AUTHENTICATION.NONE,\n    Component: RouteComponents.SearchGroupPage,\n    label: \"Rechercher un groupe\",\n    hasLayout: false,\n    hideFeedbackButton: true,\n  }),\n  searchEvent: new RouteConfig({\n    id: \"searchEvent\",\n    path: \"/recherche/evenements/\",\n    neededAuthentication: AUTHENTICATION.NONE,\n    Component: RouteComponents.SearchEventPage,\n    label: \"Rechercher un événement\",\n    hasLayout: false,\n    hideFeedbackButton: true,\n  }),\n  testErrorPage: new RouteConfig({\n    id: \"testErrorPage\",\n    path: \"/500/\",\n    neededAuthentication: AUTHENTICATION.NONE,\n    Component: RouteComponents.TestErrorPage,\n    label: \"Une erreur est survenue\",\n    hideFeedbackButton: true,\n    hideFooter: true,\n  }),\n  toktokPreview: new RouteConfig({\n    id: \"toktokPreview\",\n    path: \"/toktok/\",\n    exact: true,\n    neededAuthentication: AUTHENTICATION.SOFT,\n    label: \"TokTok\",\n    Component: RouteComponents.TokTokPreview,\n    hasLayout: false,\n    hideFeedbackButton: true,\n    hideFooter: true,\n  }),\n  faIcons: new RouteConfig({\n    id: \"faIcons\",\n    path: \"/test/fontawesome/\",\n    exact: true,\n    neededAuthentication: AUTHENTICATION.NONE,\n    label: \"Icônes Font Awesome\",\n    Component: RouteComponents.FaIcons,\n    hideFeedbackButton: true,\n  }),\n  newVotingProxyRequest: new RouteConfig({\n    id: \"newVotingProxyRequest\",\n    path: \"/procuration/donner-ma-procuration/\",\n    exact: true,\n    neededAuthentication: AUTHENTICATION.NONE,\n    label: \"Donner ma procuration de vote\",\n    Component: RouteComponents.NewVotingProxyRequest,\n    hasLayout: false,\n    hideFeedbackButton: true,\n    hideFooter: true,\n    appOnlyTopBar: true,\n  }),\n  votingProxyLandingPage: new RouteConfig({\n    id: \"votingProxyLandingPage\",\n    path: \"/procuration/\",\n    exact: true,\n    neededAuthentication: AUTHENTICATION.NONE,\n    label: \"Espace procurations de vote\",\n    Component: RouteComponents.VotingProxyLandingPage,\n    hasLayout: false,\n    hideFeedbackButton: true,\n    hideFooter: true,\n    appOnlyTopBar: true,\n  }),\n  newVotingProxy: new RouteConfig({\n    id: \"newVotingProxy\",\n    path: \"/procuration/prendre-une-procuration/\",\n    exact: true,\n    neededAuthentication: AUTHENTICATION.NONE,\n    label: \"Prendre une procuration de vote\",\n    Component: RouteComponents.NewVotingProxy,\n    hasLayout: false,\n    hideFeedbackButton: true,\n    hideFooter: true,\n    appOnlyTopBar: true,\n  }),\n  replyToSingleVotingProxyRequest: new RouteConfig({\n    id: \"replyToSingleVotingProxyRequest\",\n    path: \"/procuration/prendre-une-procuration/demande/:votingProxyRequestPk/\",\n    params: { votingProxyRequestPk: null },\n    exact: true,\n    neededAuthentication: AUTHENTICATION.NONE,\n    label: \"Prendre une procuration de vote\",\n    Component: RouteComponents.ReplyToSingleVotingProxyRequest,\n    hasLayout: false,\n    hideFeedbackButton: true,\n    hideFooter: true,\n    appOnlyTopBar: true,\n  }),\n  replyToVotingProxyRequests: new RouteConfig({\n    id: \"replyToVotingProxyRequests\",\n    path: \"/procuration/prendre-une-procuration/:votingProxyPk/\",\n    params: { votingProxyPk: null },\n    exact: true,\n    neededAuthentication: AUTHENTICATION.NONE,\n    label: \"Prendre une procuration de vote\",\n    Component: RouteComponents.ReplyToVotingProxyRequests,\n    hasLayout: false,\n    hideFeedbackButton: true,\n    hideFooter: true,\n    appOnlyTopBar: true,\n  }),\n  acceptedVotingProxyRequests: new RouteConfig({\n    id: \"acceptedVotingProxyRequests\",\n    path: \"/procuration/prendre-une-procuration/:votingProxyPk/acceptees/\",\n    params: { votingProxyPk: null },\n    exact: true,\n    neededAuthentication: AUTHENTICATION.NONE,\n    label: \"Prendre une procuration de vote\",\n    Component: RouteComponents.ReplyToVotingProxyRequests,\n    hasLayout: false,\n    hideFeedbackButton: true,\n    hideFooter: true,\n    appOnlyTopBar: true,\n  }),\n  votingProxyRequestsForProxy: new RouteConfig({\n    id: \"votingProxyRequestsForProxy\",\n    path: \"/procuration/prendre-une-procuration/:votingProxyPk/demandes/\",\n    params: { votingProxyPk: null },\n    exact: true,\n    neededAuthentication: AUTHENTICATION.NONE,\n    label: \"Prendre une procuration de vote\",\n    Component: RouteComponents.VotingProxyRequestForProxy,\n    hasLayout: false,\n    hideFeedbackButton: true,\n    hideFooter: true,\n    appOnlyTopBar: true,\n  }),\n  votingProxyRequestDetails: new RouteConfig({\n    id: \"votingProxyRequestDetails\",\n    path: \"/procuration/reponse/\",\n    exact: true,\n    neededAuthentication: AUTHENTICATION.NONE,\n    label: \"Procuration de vote\",\n    Component: RouteComponents.VotingProxyRequestDetails,\n    hasLayout: false,\n    hideFeedbackButton: true,\n    hideFooter: true,\n    appOnlyTopBar: true,\n  }),\n  newPollingStationOfficer: new RouteConfig({\n    id: \"newPollingStationOfficer\",\n    path: \"/elections/assesseures-deleguees/\",\n    exact: true,\n    neededAuthentication: AUTHENTICATION.NONE,\n    label: \"Devenir assesseur·e ou délégué·e\",\n    Component: RouteComponents.NewPollingStationOfficer,\n    hasLayout: false,\n    hideFeedbackButton: true,\n    hideFooter: true,\n    appOnlyTopBar: true,\n  }),\n};\n\nexport const getRouteByPathname = (pathname) => {\n  return Object.values(routeConfig).find(\n    (route) => route.path === pathname || route.match(pathname),\n  );\n};\n\nconst routes = Object.values(routeConfig).filter((route) => !route.isPartial);\n\nexport default routes;\n","export const ACTIVITY_STATUS = {\n  STATUS_UNDISPLAYED: \"U\",\n  STATUS_DISPLAYED: \"S\",\n  STATUS_INTERACTED: \"I\",\n};\n\nexport const CHANGED_DATA_LABEL = {\n  name: \"nom\",\n  start_time: \"date\",\n  end_time: \"date\",\n  contact_name: \"contact\",\n  contact_email: \"contact\",\n  contact_phone: \"contact\",\n  location_name: \"lieu\",\n  location_address1: \"lieu\",\n  location_address2: \"lieu\",\n  location_city: \"lieu\",\n  location_zip: \"lieu\",\n  location_country: \"lieu\",\n  description: \"présentation\",\n  facebook: \"lien facebook\",\n};\n\nexport const getUnread = (data) => {\n  return Array.isArray(data)\n    ? data.filter(\n        (activity) => activity.status === ACTIVITY_STATUS.STATUS_UNDISPLAYED,\n      )\n    : [];\n};\n\nexport const getUnreadCount = (data) => {\n  return getUnread(data).length;\n};\n\nexport const getUninteracted = (data) => {\n  return Array.isArray(data)\n    ? data.filter(\n        (activity) => activity.status !== ACTIVITY_STATUS.STATUS_INTERACTED,\n      )\n    : [];\n};\n\nexport const getUninteractedCount = (data) => {\n  return getUninteracted(data).length;\n};\n","import { useEffect, useState } from \"react\";\nimport useSWR from \"swr\";\n\nconst pinger = async (url) => {\n  try {\n    const res = await fetch(url, { method: \"HEAD\", credentials: \"omit\" });\n    return res.ok;\n  } catch (e) {\n    return false;\n  }\n};\n\nconst pingerConfig = {\n  refreshInterval: 10000,\n  dedupingInterval: 10000,\n  focusThrottleInterval: 10000,\n  refreshWhenOffline: true,\n  shouldRetryOnError: false,\n  revalidateIfStale: false,\n};\n\nexport const useIsOffline = () => {\n  const { data: isOnline } = useSWR(\"/api/ping/\", pinger, pingerConfig);\n\n  const [isUnloading, setIsUnloading] = useState(false);\n\n  useEffect(() => {\n    let handleBeforeUnload = () => setIsUnloading(true);\n    window.addEventListener(\"beforeunload\", handleBeforeUnload);\n    return () => {\n      window.removeEventListener(\"beforeunload\", handleBeforeUnload);\n    };\n  }, []);\n\n  return !isUnloading && typeof isOnline === \"boolean\" ? !isOnline : null;\n};\n"],"names":["PERSON_NOTIFICATIONS","id","type","icon","subtype","label","hasEmail","hasPush","activityTypes","filter","notification","length","GROUP_NOTIFICATIONS","isActive","group","isReferent","isManager","getNotificationId","notificationId","groupId","getSingleGroupNotifications","map","_objectSpread","name","getGroupNotifications","groups","reduce","arr","getNewsletterNotifications","user","getNewsletterOptions","option","value","active","isNewsletter","getAllNotifications","getNewsletterStatus","newsletters","Array","isArray","newsletterStatus","Object","values","NEWSLETTER_OPTIONS","forEach","opt","email","includes","getNotificationStatus","activeNotifications","activeNotification","find","groupNotification","activityType","push","getDefaultNotifications","relativeToAbsoluteURL","a","document","createElement","url","href","addQueryStringParams","params","relative","keys","_window","parsedURL","URL","window","location","origin","parseURL","entries","key","searchParams","set","toString","replace","e","parseQueryStringParams","create","queryString","split","search","slice","entry","match","index","exec","slugify","string","separator","trim","normalize","toLowerCase","RegExp","getHasRouter","state","hasRouter","getIsSessionLoaded","isSessionLoaded","getUser","getIsConnected","getAuthentication","authentication","getBookmarkedEmails","bookmarkedEmails","getRoutes","routes","getToasts","toasts","getPageTitle","pageTitle","getBackLink","backLink","isProtected","getTopBarRightLink","topBarRightLink","getAdminLink","adminLink","getMessages","messages","Boolean","getIsLoadingMessages","isLoadingMessages","getIsUpdatingMessages","isUpdatingMessages","reducers","action","ACTION_TYPE","isPoliticalSupport","SET_IS_POLITICAL_SUPPORT_ACTION","AUTHENTICATION","NONE","newState","toast","toastId","some","t","shortUUID","title","message","error","comment","newMessage","lastUpdate","Date","now","comments","recentComments","commentCount","c","rootReducer","currentValue","reducer","nextValue","client","axios","xsrfCookieName","xsrfHeaderName","CSRFPromise","interceptors","request","use","async","config","Cookies","get","method","log","logger","ENDPOINT","activities","activity","bulkUpdateActivityStatus","setAllActivitiesRead","announcements","customAnnouncement","unreadActivityCount","getActivityEndpoint","endpoint","updateActivityStatus","activityId","status","ACTIVITY_STATUS","STATUS_INTERACTED","fromPush","result","data","pushStatus","res","put","debug","setActivityAsInteracted","setAllActivitiesAsRead","mutate","session","hasUnreadActivities","init","globalContextData","nonReactRoutes","setSessionContext","addToasts","clearToast","setPageTitle","setBackLink","setTopBarRightLink","setAdminLink","dispatchFunction","iOSNativeMessage","event","CustomEvent","detail","JSON","parse","dispatchEvent","iosAction","useIOSNotificationGrant","onNotificationGrant","notificationIsGranted","setNotificationIsGranted","useState","fcmToken","useLocalStorage","iosMessageHandler","useCallback","noPermission","postMessage","useIOSMessages","useEffect","grantNotification","console","hasUpdate","cb","_window$webkit2","savedCallback","useRef","current","eventListener","addEventListener","removeEventListener","_window$webkit","webkit","messageHandlers","main","Hide","styled","div","attrs","$under","$over","theme","collapse","props","gutter","Column","withConfig","shouldForwardProp","prop","width","grow","Card","stack","propTypes","PropTypes","Row","align","justify","gap","children","Container","section","useIsDesktop","breakpoint","useTheme","isDesktop","setDesktop","innerWidth","refresh","ResponsiveLayout","_ref","MobileLayout","DesktopLayout","_objectWithoutProperties","_excluded","React","useResponsiveMemo","mobileValue","desktopValue","useMemo","ResponsiveSpan","_ref2","small","large","_excluded2","getSubscriptions","createSubscriptions","deleteSubscriptions","success","response","post","subscriptions","delete","setupDefaultNotification","subscriptionRequest","Promise","all","flat","getScrollableParent","element","regex","parents","_node","ps","parentNode","concat","style","getComputedStyle","getPropertyValue","scroll","test","overflow","HTMLElement","SVGElement","i","scrollingElement","documentElement","scrollParent","INTERACTIVE_ELEMENT","A","hasAttribute","AUDIO","BUTTON","DETAILS","EMBED","IFRAME","KEYGEN","LABEL","SELECT","TEXTAREA","VIDEO","isInteractiveElement","nodeName","HTMLInputElement","tabIndex","handleEventExceptForInteractiveChild","callback","target","currentTarget","parentElement","cardTypes","default","backgroundColor","borderRadius","primary","alert","backgroundImage","background0","alert_dismissed","isPropValid","onClick","text100","bordered","elaborateShadow","defaultProps","lazy","lazyImport","fallback","LazyComponent","isOffline","useIsOffline","setError","Lazy","reactLazy","err","Error","Fallback","displayName","preload","scrollToElement","targetElement","scrollerElement","marginTop","scrollableElement","scrollTo","top","offsetTop","behavior","getFirstElementFromError","errors","_","v","k","errorElement","elt","querySelector","getBoundingClientRect","scrollToError","useCurrentLocation","pathname","setPathname","history","useHistory","listen","grantObservers","useAndroidNotificationGrant","androidNotificationGranted","setAndroidNotificationGranted","_window$androidApp$no","_window$androidApp","androidApp","notificationPermissionIsGranted","isMobileApp","useMobileApp","_window$androidApp2","setupNotificationPermission","onAndroidMessage","channel","obs","observerIndex","findIndex","splice","undefined","isAndroid","setIsAndroid","isIOS","setIsIOS","ios","android","useNotificationGrant","alreadyGrant","setAlreadyGrant","hasUpdateAndroid","notificationGrantedAndroid","grantNotificationAndroid","hasUpdateIOS","notificationGrantedIOS","grantNotificationIOS","useHasDownloadBanner","createGlobalState","useDownloadBanner","bannerCount","setBannerCount","visitCount","hasBanner","setHasBanner","hide","useAppLoader","isReady","loader","setLoader","getElementById","remove","opacity","zIndex","useRoute","route","routeParams","useSelector","isInternal","getRouteByPathname","routeConfig","getLink","useLocationState","singleParamKey","useLocation","querystring","arrayFormat","setParams","stringify","setSingleParam","clearParams","QueryStringParamsActions","fromActivityUpdated","handleFromActivity","from_activity","Toasts","GlobalContext","ProdProvider","hasToasts","colorScheme","_state$toasts","dispatch","useReducer","doDispatch","createDispatch","sessionContext","useSWR","_self$caches","self","caches","catch","Provider","ThemeProvider","getTheme","Suspense","GlobalContextProvider","selector","useContext","useDispatch","ICONS","icons","getIconDataUrl","color","fill","height","strokeWidth","strokeLineCap","strokeLineJoin","svg","toSvg","encodeURI","SOFT","HARD","BOOKMARKED_EMAILS_COOKIE_NAME","BOOKMARKED_EMAILS_COOKIE_OPTIONS","expires","secure","process","sameSite","NEWSLETTERS","LFI_reguliere","selected","visible","LFI_exceptionnelle","ELUES","person","membreReseauElus","LFI_jeunes_insoumise","LFI_liaisons","ILB","n","cookieData","bookmarkEmails","emails","bookmarkEmail","getMobileOS","userAgent","navigator","vendor","opera","MSStream","HomePage","AgendaPage","CalendarPage","EventMap","GroupUpcomingEventPage","GroupUpcomingEventRedirectPage","EventPage","MissingDocumentsPage","EventRequiredDocuments","GroupsPage","CreateEvent","FullGroupPage","GroupPage","GroupMap","ThematicGroups","ActivityPage","NavigationPage","SignupPage","LoginPage","CodeLoginPage","CodeSignupPage","TellMorePage","LogoutPage","MessagePage","CreateContactPage","DonationLandingPage","ExternalDonationPage","DonationSuccessPage","ChequeValidationPage","ContributionSuccessPage","ContributionRenewalPage","ActionToolsPage","SearchPage","SearchGroupPage","SearchEventPage","VotingProxyLandingPage","NewVotingProxyRequest","NewVotingProxy","ReplyToVotingProxyRequests","ReplyToSingleVotingProxyRequest","VotingProxyRequestForProxy","VotingProxyRequestDetails","TestErrorPage","TokTokPreview","NewPollingStationOfficer","EventSpeakerPage","FaIcons","CreateSpendingRequest","EditSpendingRequest","SpendingRequestDetails","SpendingRequestHistory","GroupFinanceHistory","SoutienPage","SoutienPageFinalize","SoutienRejoindreActionPopulaire","BASE_PATH","RouteConfig","constructor","this","__keys__","path","__re__","pathToRegexp","end","exact","__toPath__","bind","absolute","link","notificationSettingRoute","neededAuthentication","root","isPartial","agenda","hasLayout","Component","RouteComponents","events","layoutProps","$smallBackgroundColor","hideFeedbackButton","keepScroll","hideFooterBanner","AnonymousComponent","anonymousConfig","missingEventDocumentsModal","missingEventDocuments","eventMap","hideFooter","mapEventDetails","redirectTo","groupUpcomingEventRedirect","groupUpcomingEvents","createEvent","eventSettings","eventPk","activePanel","eventRequiredDocuments","eventSpeaker","eventDetails","groupMap","mapGroupDetails","fullGroup","groupFinanceHistory","groupSettings","activeTab","createGroupSpendingRequest","groupDetailsGestion","hideTopBar","groupDetails","thematicGroups","spendingRequestDetails","spendingRequestHistory","editSpendingRequest","to","protected","actionTools","notificationSettings","menu","displayFooterOnMobileApp","paddingBottom","login","description","signup","codeLogin","codeSignup","tellMore","hidePushModal","logout","messagePk","messageSettings","createContact","step","soutienFinalize","appOnlyTopBar","soutienRejoindreActionPopulaire","soutien","donationLanding","donationSuccess","chequeValidation","paymentId","externalDonation","donations","contributionSuccess","contributionRenewal","contributions","searchGroup","searchEvent","testErrorPage","toktokPreview","faIcons","newVotingProxyRequest","votingProxyLandingPage","newVotingProxy","replyToSingleVotingProxyRequest","votingProxyRequestPk","replyToVotingProxyRequests","votingProxyPk","acceptedVotingProxyRequests","votingProxyRequestsForProxy","votingProxyRequestDetails","newPollingStationOfficer","STATUS_UNDISPLAYED","STATUS_DISPLAYED","CHANGED_DATA_LABEL","start_time","end_time","contact_name","contact_email","contact_phone","location_name","location_address1","location_address2","location_city","location_zip","location_country","facebook","getUnread","pinger","fetch","credentials","ok","pingerConfig","refreshInterval","dedupingInterval","focusThrottleInterval","refreshWhenOffline","shouldRetryOnError","revalidateIfStale","isOnline","isUnloading","setIsUnloading","handleBeforeUnload"],"sourceRoot":""}