@planningcenter/topbar 9.16.0-rc.8 → 9.16.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -1 +1 @@
1
- {"version":3,"file":"topbar.modern.js","sources":["../modules/api_request.ts","../modules/hooks/jolt.ts","../modules/utils.ts","../modules/hooks/use_local_storage.ts","../modules/hooks/use_notifications_has_unread.ts","../modules/store.ts","../modules/apps_provider.tsx","../modules/hooks/use_topbar_api.ts","../modules/hooks/use_debounce.ts","../modules/connected_people_provider.tsx","../modules/display_switch.tsx","../modules/mono_app_symbols.tsx","../modules/mono_app_icon.tsx","../modules/mono_app_text.tsx","../modules/mono_app_name.tsx","../modules/styles.tsx","../modules/symbols.tsx","../modules/unbutton.tsx","../modules/components/apps_button.tsx","../modules/color_app_squircles.tsx","../modules/color_app_icon.tsx","../modules/get_apps_switch_product_path.tsx","../modules/components/hoverable_list_item.tsx","../modules/components/outsider.tsx","../modules/components/popover_root.tsx","../modules/components/popup.tsx","../modules/components/apps_menu.tsx","../modules/formatters.tsx","../modules/hooks/use_store.tsx","../modules/styled_root.tsx","../modules/colors.tsx","../modules/components/popup_root.tsx","../modules/not_small_topbar/user_menu.tsx","../modules/components/hoverable.tsx","../modules/not_small_topbar/user_menu_trigger.tsx","../modules/not_small_topbar/index.tsx","../modules/platform_announcements.tsx","../modules/product_announcement.tsx","../modules/avatar.tsx","../modules/client_storage.tsx","../modules/small_topbar/account_settings_link.tsx","../modules/small_topbar/close_menu_button.tsx","../modules/get_login_profile_path.tsx","../modules/mfa_status.tsx","../modules/theme.ts","../modules/small_topbar/user_profile_menu.tsx","../modules/small_topbar/index.tsx","../modules/hooks/use_cookie.tsx","../modules/toolbar/components/drawer.tsx","../modules/toolbar/components/drawer_header.tsx","../modules/toolbar/components/drawer_heading.tsx","../modules/toolbar/components/indicator_dot.tsx","../modules/toolbar/components/scroll_container.tsx","../modules/toolbar/components/switch_view.tsx","../modules/toolbar/hooks/use_toolbar_reducer.tsx","../modules/toolbar/tools/chat/chat_api_context.tsx","../modules/toolbar/tools/chat/chat_context.tsx","../modules/toolbar/tools/chat/hooks/use_channel_mute.ts","../node_modules/moment/moment.js","../modules/toolbar/tools/chat/constants.ts","../modules/toolbar/tools/chat/utils/index.ts","../modules/toolbar/tools/chat/hooks/use_channel_unread.ts","../modules/toolbar/tools/chat/hooks/use_chat.tsx","../modules/toolbar/tools/chat/hooks/use_chat_api.ts","../modules/toolbar/tools/chat/hooks/use_chat_connected_people.ts","../modules/toolbar/tools/chat/hooks/use_chat_filter.ts","../modules/toolbar/tools/chat/hooks/use_chat_stream_user.ts","../modules/toolbar/tools/chat/components/ui/subheading.tsx","../modules/toolbar/tools/chat/components/channel_details_view/section.tsx","../modules/toolbar/tools/chat/components/channel_details_view/groups.tsx","../modules/toolbar/tools/chat/components/channel_details_view/hooks/use_chat_members.ts","../modules/toolbar/tools/chat/components/person_list_item/avatar.tsx","../modules/toolbar/tools/chat/components/person_list_item/person.tsx","../modules/toolbar/tools/chat/components/child_notice.tsx","../modules/toolbar/tools/chat/components/channel_details_view/people.tsx","../modules/toolbar/tools/chat/components/channel_details_view/settings.tsx","../modules/toolbar/tools/chat/components/channel_details_view/title.tsx","../modules/toolbar/tools/chat/components/channel_details_view/index.tsx","../modules/toolbar/tools/chat/components/channel_details_view/hooks/use_chat_groups.ts","../modules/toolbar/tools/chat/components/channel_details_view/hooks/use_chat_member_ability.ts","../modules/toolbar/tools/chat/components/beta_badge.tsx","../modules/toolbar/tools/chat/components/channel_list_view/channel_list_blank_state.tsx","../modules/toolbar/tools/chat/components/channel_list_view/linked_account_select.tsx","../modules/toolbar/tools/chat/components/channel_list_view/loading_error_indicator.tsx","../modules/toolbar/tools/chat/components/channel_list_view/list.tsx","../modules/toolbar/tools/chat/hooks/use_chat_app_grants.ts","../modules/toolbar/tools/chat/components/channel_metas.tsx","../modules/toolbar/tools/chat/components/channel_list_view/avatar_group.tsx","../modules/toolbar/tools/chat/components/channel_list_view/preview.tsx","../modules/toolbar/tools/chat/components/channel_list_view/index.tsx","../modules/toolbar/tools/chat/hooks/use_channels_loading.ts","../modules/toolbar/tools/chat/components/channel_view/custom_empty_state_indicator.tsx","../modules/toolbar/tools/chat/components/channel_view/custom_header.tsx","../modules/toolbar/tools/chat/components/channel_view/hooks/use_message_list_scroll_shadows.ts","../modules/toolbar/tools/chat/components/channel_view/custom_message_status.tsx","../node_modules/@popperjs/core/lib/enums.js","../modules/toolbar/tools/chat/components/channel_view/custom_reaction_options.tsx","../modules/toolbar/tools/chat/components/channel_view/emoji_data.ts","../modules/toolbar/tools/chat/components/channel_view/message_input.tsx","../modules/toolbar/tools/chat/components/channel_view/index.tsx","../modules/toolbar/hooks/use_pco_meta.ts","../modules/toolbar/tools/chat/components/groups/groups_shortcuts.tsx","../modules/toolbar/tools/chat/components/groups/hooks/use_my_groups.ts","../modules/toolbar/tools/chat/components/groups/people.tsx","../modules/toolbar/tools/chat/components/groups/hooks/use_new_group_chat_people.ts","../modules/toolbar/tools/chat/components/services/service_chat_shortcuts.tsx","../modules/toolbar/tools/chat/components/services/hooks/use_services_chat_shortcuts.ts","../modules/toolbar/tools/chat/components/new_chat_shortcuts_view.tsx","../modules/toolbar/tools/chat/components/new_chat_view/footer.tsx","../modules/toolbar/tools/chat/components/new_chat_view/header.tsx","../modules/toolbar/tools/chat/components/new_groups_chat_view.tsx","../modules/toolbar/tools/chat/components/services/constants.ts","../modules/toolbar/tools/chat/components/services/people.tsx","../modules/toolbar/tools/chat/components/services/hooks/use_chat_people.ts","../modules/toolbar/tools/chat/components/services/plans.tsx","../node_modules/@babel/runtime/helpers/esm/extends.js","../node_modules/remove-accents/index.js","../node_modules/match-sorter/dist/match-sorter.esm.js","../modules/toolbar/tools/chat/components/services/utils/index.ts","../modules/toolbar/tools/chat/components/services/teams.tsx","../modules/toolbar/tools/chat/components/services/hooks/use_team_options.ts","../modules/toolbar/tools/chat/components/services/people_blank_state.tsx","../modules/toolbar/tools/chat/components/services/services_chat_options.tsx","../modules/toolbar/tools/chat/components/services/hooks/use_services_chat_filter.ts","../modules/toolbar/tools/chat/components/new_services_chat_view.tsx","../modules/toolbar/tools/chat/index.tsx","../modules/toolbar/tools/chat/hooks/use_client.ts","../modules/toolbar/tools/helpdesk/components/CustomSearchBox.tsx","../modules/toolbar/tools/helpdesk/components/DocumentationSearch.tsx","../modules/toolbar/tools/helpdesk/index.tsx","../modules/components/eyebrow.tsx","../modules/components/notification_item.tsx","../modules/hooks/use_hover.tsx","../modules/components/notifications_menu_blank_state.tsx","../modules/hooks/use_notifications.ts","../modules/toolbar/tools/notifications.tsx","../modules/toolbar/tools/tasks.tsx","../modules/toolbar/index.tsx","../modules/hooks/use_fragment_routing.tsx","../modules/toolbar/components/user_profile.tsx","../modules/hooks/use_media_query.tsx"],"sourcesContent":["export type Fetch = typeof fetch\n\nexport const defaultFetch: Fetch = (url, options) => {\n return fetch(url, { credentials: \"include\", mode: \"cors\", ...options })\n}\n\nexport const railsCsrfFetch: Fetch = (url, { headers, ...rest }) => {\n return fetch(url, {\n headers: { ...headers, \"X-CSRF-Token\": inferRailsCsrfToken() },\n ...rest,\n credentials: \"include\",\n mode: \"cors\",\n })\n}\n\nfunction inferRailsCsrfToken(): string | null {\n return (\n window?.Rails?.csrfToken() ||\n document\n .querySelector('meta[name=\"csrf-token\"]')\n ?.getAttribute(\"content\") ||\n null\n )\n}\n\nexport default function apiRequest<T = any>(\n fetch: Fetch,\n url: string,\n { method = \"GET\", data = null } = {}\n): Promise<{ json: T; ok: boolean; response: Response }> {\n const options: RequestInit = {\n headers: {\n Accept: \"application/json\",\n \"Content-Type\": \"application/json\",\n },\n method,\n redirect: \"follow\",\n }\n\n if (data && method !== \"GET\") {\n options.body = JSON.stringify(data)\n }\n\n return fetch(url, options).then(\n (response) =>\n response\n .json()\n .then((json) => ({ json, ok: response.ok, response }))\n .catch(() => ({ json: null, ok: response.ok, response })),\n (e) => {\n console.warn(e)\n\n return { json: null, ok: false, response: null }\n }\n )\n}\n","import Jolt from \"@planningcenter/jolt-client\"\nimport { JoltSubscription } from \"@planningcenter/jolt-client/dist/types/JoltSubscription\"\nimport pcoUrl, * as PCO_URL from \"@planningcenter/url\"\nimport React, { useEffect } from \"react\"\n\nimport apiRequest, { railsCsrfFetch } from \"../api_request\"\nimport { JoltMessage } from \"../interfaces\"\n\nconst wssUrl = (env: PCO_URL.Environment) => {\n switch (env) {\n case \"development\":\n case \"test\":\n return \"wss://1csnwvu025.execute-api.us-east-1.amazonaws.com/v1/\"\n case \"staging\":\n return \"wss://xvk2ac1o3l.execute-api.us-east-1.amazonaws.com/v1/\"\n default:\n return \"wss://yxe88gasn3.execute-api.us-east-1.amazonaws.com/v1/\"\n }\n}\n\ntype UseJoltChannelSubscriptionProps = {\n channelName: string\n enableJoltLogging?: boolean\n enabled?: boolean\n env: PCO_URL.Environment\n fetchSubscribeToken: (cid: string) => Promise<string>\n joltPromise?: () => Promise<Jolt | undefined | void>\n wssEndpoint?: string\n}\n\nexport const useJoltChannelSubscription = ({\n channelName,\n enableJoltLogging = false,\n enabled = true,\n env,\n wssEndpoint,\n fetchSubscribeToken,\n joltPromise = () => Promise.resolve(),\n}: UseJoltChannelSubscriptionProps) => {\n const [joltChannel, setJoltChannel] = React.useState<JoltSubscription>()\n const [joltInstance, setJoltInstance] = React.useState<Jolt>()\n const [usingIndependentJoltInstance, setUsingIndependentJoltInstance] =\n React.useState(false)\n\n const subscribeToJoltChannel = React.useCallback(async () => {\n let jolt = await joltPromise().then((j) => j)\n\n const fetchSubscribeTokenFn = async (_channel: string, cid: string) =>\n fetchSubscribeToken(cid)\n\n const fetchAuthTokenFn = async () =>\n apiRequest(\n railsCsrfFetch,\n `${window.location.origin}/~api/notifications/v2/me/notifications_jolt_authorize`,\n {\n data: { data: { attributes: {} } },\n method: \"POST\",\n }\n ).then(({ json }) => json.data.id)\n\n if (!jolt) {\n setUsingIndependentJoltInstance(true)\n jolt = new Jolt(\n wssEndpoint || wssUrl(env),\n {\n fetchAuthTokenFn,\n fetchSubscribeTokenFn,\n },\n { logToConsole: enableJoltLogging }\n )\n }\n\n const channel =\n jolt.subscriptions.find((s) => s.channel === channelName) ||\n jolt.subscribe(channelName, { fetchSubscribeTokenFn })\n setJoltChannel(channel)\n setJoltInstance(jolt)\n }, [apiRequest, channelName, env, pcoUrl, railsCsrfFetch])\n\n React.useEffect(() => {\n if (enabled) {\n subscribeToJoltChannel()\n }\n }, [enabled, subscribeToJoltChannel])\n\n React.useEffect(() => {\n const pcoPageExpiredHandler = (event) => {\n if (!event.data.hasOwnProperty(\"PCOPageExpiredCurrentPersonACID\")) return\n if (\n event.data.PCOPageExpiredCurrentPersonACID ===\n window?.pcoPageExpired?.currentPersonACID\n )\n return\n if (joltInstance) joltInstance.disconnect()\n }\n\n window.addEventListener(\"message\", pcoPageExpiredHandler)\n return () => window.removeEventListener(\"message\", pcoPageExpiredHandler)\n }, [joltInstance])\n\n React.useEffect(() => {\n return () => {\n if (joltInstance && usingIndependentJoltInstance) {\n joltInstance.disconnect()\n }\n }\n }, [joltInstance])\n\n return joltChannel\n}\n\nexport const useJoltEffect = (\n channelSubscription: JoltSubscription,\n eventName: string,\n callback: (data: JoltMessage) => void\n) => {\n return useEffect(() => {\n if (channelSubscription) {\n channelSubscription.bind(eventName, callback)\n\n return () => channelSubscription.unbind(eventName, callback)\n } else {\n return () => void 0\n }\n }, [channelSubscription, callback])\n}\n","export const capitalize = (s: string) => s.charAt(0).toUpperCase() + s.slice(1)\n\nexport const HSLtoHSLA = (hsl: string, a: number = 1) => {\n const hslArray = hsl.replace(/[a-z()%]/g, \"\").split(\" \")\n const h = hslArray[0]\n const s = hslArray[1]\n const l = hslArray[2]\n\n return `hsla(${h}, ${s}%, ${l}%, ${a})`\n}\n\nexport const debounce = (func, wait) => {\n let timeout\n\n return function (...args: any) {\n const context = this\n\n const later = () => {\n timeout = null\n func.apply(context, args)\n }\n\n clearTimeout(timeout)\n timeout = setTimeout(later, wait)\n\n if (!timeout) {\n func.apply(context, args)\n }\n }\n}\n\nexport function shallowCompare<O extends object>(a: O, b: O) {\n return (\n Object.keys(a).length === Object.keys(b).length &&\n Object.entries(a).every(([key, value]) => b[key] !== value)\n )\n}\n","import { useEffect, useState } from \"react\"\n\n// Adapted from https://usehooks.com/useLocalStorage\nfunction useLocalStorage(key: string, initialValue: any) {\n // State to store our value\n // Pass initial state function to useState so logic is only executed once\n const [storedValue, setStoredValue] = useState(() => {\n try {\n // Get from local storage by key\n const item = window.localStorage.getItem(key)\n\n // Parse stored json or if none return initialValue\n return item ? JSON.parse(item) : initialValue\n } catch (error) {\n // If error also return initialValue\n return initialValue\n }\n })\n\n // Reflect the state into localStorage as a side effect.\n const localStorageRepresentation = JSON.stringify(storedValue)\n useEffect(() => {\n window.localStorage.setItem(key, localStorageRepresentation)\n }, [key, localStorageRepresentation])\n\n // When we are done with this key, drop it from localStorage completely\n const dropKey = () => window.localStorage.removeItem(key)\n\n return { dropKey, setStoredValue, storedValue }\n}\n\nexport default useLocalStorage\n","import { JoltSubscription } from \"@planningcenter/jolt-client/dist/types/JoltSubscription\"\nimport * as PCO_URL from \"@planningcenter/url\"\nimport React from \"react\"\n\nimport apiRequest, { defaultFetch } from \"../api_request\"\nimport { useJoltEffect } from \"./jolt\"\nimport { useDebounce } from \"./use_debounce\"\nimport useLocalStorage from \"./use_local_storage\"\n\nconst noop = () => {}\n\ntype NotificationsHookProps = {\n enabled?: boolean\n env: PCO_URL.Environment\n joltChannel: JoltSubscription\n}\n\nexport const useNotificationsHasUnread = ({\n enabled,\n joltChannel,\n}: NotificationsHookProps): boolean => {\n const { storedValue, setStoredValue } = useLocalStorage(\n \"Topbar:Notifications:hasUnread\",\n false\n )\n\n const fetchHasUnread = useDebounce(() => {\n const url = `${window.location.origin}/~api/notifications/v2/me/unread`\n\n apiRequest(defaultFetch, url)\n .then(({ json }) => {\n setStoredValue(json.data.attributes.unread)\n })\n .catch(noop)\n }, 300)\n\n React.useEffect(() => {\n if (enabled) {\n fetchHasUnread()\n }\n }, [enabled])\n\n useJoltEffect(\n enabled ? joltChannel : undefined,\n \"notifications.v2.events.notification.created\",\n fetchHasUnread\n )\n\n useJoltEffect(\n enabled ? joltChannel : undefined,\n \"notifications.v2.events.notification.updated\",\n fetchHasUnread\n )\n\n useJoltEffect(\n enabled ? joltChannel : undefined,\n \"notifications.v2.events.notification.destroyed\",\n fetchHasUnread\n )\n\n return storedValue\n}\n","export function createStore<S extends object>(initialState: S) {\n type Listener = (state: S) => unknown\n let currentState = initialState\n const listeners = new Set<Listener>()\n\n return {\n getState: () => currentState,\n setState: (newState: S) => {\n currentState = newState\n listeners.forEach((listener) => listener(currentState))\n },\n subscribe: (listener: Listener) => {\n listeners.add(listener)\n return () => listeners.delete(listener)\n },\n }\n}\n\nconst store = createStore<any>({})\n\nexport default store\n","import { useEffect } from \"react\"\n\nimport apiRequest, { defaultFetch, railsCsrfFetch } from \"./api_request\"\nimport { useJoltChannelSubscription } from \"./hooks/jolt\"\nimport { useNotificationsHasUnread } from \"./hooks/use_notifications_has_unread\"\nimport useTopbarAPI from \"./hooks/use_topbar_api\"\nimport { AppsProviderProps, TopbarAPIResponse } from \"./interfaces\"\nimport store from \"./store\"\n\nexport const AppsProvider = ({\n configuredFetch = defaultFetch,\n enableJoltLogging,\n env,\n formatter = mapApps,\n joltPromise,\n wssEndpoint,\n render,\n userId,\n}: AppsProviderProps) => {\n const topbarResponse = useTopbarAPI({ configuredFetch, env })\n const apps = formatter(topbarResponse)\n const hasConnectedPeople =\n topbarResponse?.data?.attributes?.has_connected_people\n const mfaEnabled =\n topbarResponse?.data?.attributes?.features?.includes(\"mfa_enabled\")\n const notificationsContextMenu =\n topbarResponse?.data?.attributes?.features?.includes(\n \"notifications_context_menu\"\n )\n const mfaConfigured = !!topbarResponse?.data?.attributes?.mfa_configured\n const name = topbarResponse?.data?.attributes?.name\n const notificationsEnabled = !window.notificationsDisabled\n const organizationTimeZone =\n topbarResponse?.data?.attributes?.org_time_zone || \"America/Los_Angeles\"\n const chatEnabled =\n topbarResponse?.data?.attributes?.features?.includes(\"chat_enabled\")\n const algoliaSearchAuth = {\n algoliaApplicationId:\n topbarResponse?.data?.attributes?.algolia_application_identifier,\n algoliaSearchOnlyApiKey:\n topbarResponse?.data?.attributes?.algolia_search_key,\n }\n\n const notificationsJoltChannel = useJoltChannelSubscription({\n channelName: `notifications.people.${userId}`,\n enableJoltLogging,\n enabled: true,\n env,\n wssEndpoint,\n fetchSubscribeToken: async (cid) => {\n const subscribeUrl = `${window.location.origin}/~api/notifications/v2/me/notifications_jolt_subscribe`\n return apiRequest(railsCsrfFetch, subscribeUrl, {\n data: { data: { attributes: { cid } } },\n method: \"POST\",\n }).then(({ json }) => json.data.id)\n },\n joltPromise,\n })\n\n const notificationsHasUnread = useNotificationsHasUnread({\n enabled: true,\n env,\n joltChannel: notificationsJoltChannel,\n })\n\n useEffect(() => {\n const state = store.getState()\n\n store.setState({\n ...state,\n algoliaSearchAuth,\n chatEnabled,\n hasConnectedPeople,\n indicatorVisible: {\n ...state.indicatorVisible,\n Notifications: notificationsHasUnread,\n },\n joltPromise,\n mfaConfigured,\n mfaEnabled,\n name,\n notifications: {\n enabled: notificationsEnabled,\n env,\n joltChannel: notificationsJoltChannel,\n },\n notificationsContextMenu,\n notificationsEnabled,\n notificationsJoltChannel,\n organizationTimeZone,\n userId,\n })\n }, [\n joltPromise,\n mfaConfigured,\n mfaEnabled,\n name,\n notificationsContextMenu,\n notificationsEnabled,\n notificationsHasUnread,\n organizationTimeZone,\n userId,\n ])\n\n // TODO: remove `fetch` and `remove` (breaking changes)\n return render(apps || [], {\n fetch: () => {}, // no-op because we already have fresh data\n remove: () => {}, // no-op because we are no longer caching anyway\n })\n}\n\nexport function mapApps(resp: TopbarAPIResponse) {\n return resp?.data?.attributes?.apps || []\n}\n","import pcoUrl, { Environment } from \"@planningcenter/url\"\nimport { useEffect, useState } from \"react\"\n\nimport apiRequest, { Fetch } from \"../api_request\"\nimport { TopbarAPIResponse } from \"../interfaces\"\nimport useLocalStorage from \"./use_local_storage\"\n\nconst useTopbarAPI = ({\n configuredFetch,\n env,\n}: {\n configuredFetch: Fetch\n env: Environment\n}) => {\n const { storedValue: localResp, setStoredValue: setLocalResp } =\n useLocalStorage(\"Topbar\", {})\n const [resp, setResp] = useState<TopbarAPIResponse>(localResp)\n\n useEffect(() => {\n fetch()\n }, [])\n\n const fetch = () => {\n apiRequest(\n configuredFetch,\n `${pcoUrl(env)(\"api\")}/people/v2/me/topbar`\n ).then(({ json, ok }: { json: TopbarAPIResponse; ok: boolean }) => {\n if (ok) {\n setResp(json)\n setLocalResp(json)\n }\n })\n }\n\n return resp\n}\n\nexport default useTopbarAPI\n","import React from \"react\"\nimport { debounce } from \"../utils\"\n\nexport const useDebounce = <\n F extends (...args: Parameters<F>) => ReturnType<F>\n>(\n fn: F,\n t: number = 0\n): F => {\n return React.useMemo(() => <F>debounce(fn, t), [])\n}\n","import pcoUrl, { Environment } from \"@planningcenter/url\"\nimport React from \"react\"\n\nimport apiRequest, { defaultFetch, Fetch } from \"./api_request\"\nimport { ConnectedPerson } from \"./interfaces\"\n\nexport function remove() {\n window.localStorage.removeItem(\"Topbar:ConnectedPeople\")\n}\n\nexport class ConnectedPeopleProvider extends React.Component<\n {\n configuredFetch?: Fetch\n env: Environment\n render: (connectedPeople: ConnectedPerson[], callback: any) => JSX.Element\n },\n {\n connectedPeople: ConnectedPerson[]\n }\n> {\n constructor(props: any) {\n super(props)\n\n this.state = {\n connectedPeople: [],\n }\n }\n\n public static defaultProps = {\n configuredFetch: defaultFetch,\n }\n\n fetch() {\n apiRequest(\n this.props.configuredFetch,\n `${pcoUrl(this.props.env)(\"api\")}/login/v2/me/connected_people`\n ).then(({ json }) => {\n const connectedPeople = json.data\n\n return this.setState(\n {\n connectedPeople,\n },\n () =>\n window.localStorage.setItem(\n \"Topbar:ConnectedPeople\",\n JSON.stringify(connectedPeople)\n )\n )\n })\n }\n\n unlink() {\n apiRequest(\n this.props.configuredFetch,\n `${pcoUrl(this.props.env)(\"api\")}/login/v2/me/unlink`,\n {\n method: \"POST\",\n }\n ).then(({ json }) => {\n window.location = json.meta.redirect_to\n })\n }\n\n switch(toId: string, returnPath: string) {\n apiRequest(\n this.props.configuredFetch,\n `${pcoUrl(this.props.env)(\"api\")}/login/v2/me/switch_connected_person`,\n {\n data: {\n data: {\n attributes: {\n id: toId,\n return_path: returnPath,\n },\n },\n },\n method: \"POST\",\n }\n ).then(({ json }) => {\n window.location = json.meta.redirect_to\n })\n }\n\n componentDidMount() {\n const connectedPeople = JSON.parse(\n window.localStorage.getItem(\"Topbar:ConnectedPeople\")\n )\n\n if (connectedPeople) return this.setState({ connectedPeople })\n\n return this.fetch()\n }\n\n render() {\n return this.props.render(this.state.connectedPeople || [], {\n fetch: this.fetch.bind(this),\n remove: remove.bind(this),\n switch: this.switch.bind(this),\n unlink: this.unlink.bind(this),\n })\n }\n}\n","import React from \"react\"\n\nimport { debounce } from \"./utils\"\n\nexport class PointBreak extends React.Component<\n {\n render: (breakpoint: string) => React.ReactElement<any>\n },\n {\n width: number\n }\n> {\n constructor(props: any) {\n super(props)\n\n this.state = {\n width: window.innerWidth,\n }\n\n this.setWindowWidth = this.setWindowWidth.bind(this)\n }\n\n setWindowWidth() {\n this.setState({ width: window.innerWidth })\n }\n\n componentDidMount() {\n window.addEventListener(\"resize\", debounce(this.setWindowWidth, 100), false)\n }\n\n componentWillUnmount() {\n window.removeEventListener(\n \"resize\",\n debounce(this.setWindowWidth, 100),\n false\n )\n }\n\n breakpointString(width) {\n if (width < 480) return \"xs\"\n if (width < 600) return \"sm\"\n if (width < 720) return \"md\"\n if (width < 960) return \"lg\"\n return \"xl\"\n }\n\n render() {\n return <>{this.props.render(this.breakpointString(this.state.width))}</>\n }\n}\n\nexport class DisplaySwitch extends React.Component<\n {\n notSmallTopbar: (breakpointShortand: string) => React.ReactElement<any>\n smallBreakpoints: String[]\n smallTopbar: (breakpointShorthand: string) => React.ReactElement<any>\n },\n {}\n> {\n public static defaultProps = {\n smallBreakpoints: [\"xs\", \"sm\"],\n }\n\n render() {\n return (\n <PointBreak\n render={(breakpoint) => {\n if (this.props.smallBreakpoints.indexOf(breakpoint) !== -1) {\n return this.props.smallTopbar(breakpoint)\n }\n\n return this.props.notSmallTopbar(breakpoint)\n }}\n />\n )\n }\n}\n","import React from \"react\"\n\nexport function Squircle({ color = \"#fff\" }): JSX.Element {\n return (\n <path\n fill={color}\n d=\"M10.008.045C2.047.045.056,2.036.056,10s1.991,9.952,9.952,9.952S19.96,17.959,19.96,10,17.969.045,10.008.045Z\"\n />\n )\n}\n\nexport function Accounts({ color }): JSX.Element {\n return (\n <path\n fill={color}\n d=\"M16.95,9.28h0l-1.33-.23c-.12,0-.24-.04-.34-.11-.1-.07-.18-.16-.23-.27-.12-.45-.3-.89-.54-1.3-.04-.11-.05-.24-.03-.35,.02-.12,.08-.23,.16-.32l.78-1.1h0s0-.03,0-.04l-.03-.02-.04-.04-.87-.87-.05-.05h0s-.02-.02-.03,0l-1.11,.78c-.09,.08-.2,.13-.32,.16-.12,.02-.24,.01-.35-.03-.41-.24-.84-.42-1.3-.54-.11-.05-.2-.13-.27-.23-.07-.1-.11-.22-.11-.34l-.22-1.33h0s-.01-.03-.02-.03h-1.41s-.02,0-.02,.02l-.23,1.34c0,.12-.04,.24-.11,.34-.07,.1-.16,.18-.27,.23-.45,.12-.89,.3-1.3,.54-.11,.04-.24,.05-.35,.03-.12-.02-.23-.08-.32-.16l-1.1-.78h0s-.02-.01-.03,0l-.02,.03-.04,.04-.87,.87-.05,.05h0s0,.03,0,.04l.78,1.11c.08,.09,.13,.2,.16,.32,.02,.12,.01,.24-.03,.35-.24,.4-.42,.84-.54,1.29-.05,.11-.13,.2-.23,.27-.1,.07-.22,.11-.34,.11l-1.33,.22h0s-.02,0-.02,.02v1.41s0,.02,.02,.02l1.34,.23c.12,0,.24,.05,.34,.11,.1,.07,.18,.16,.23,.27,.12,.45,.3,.89,.54,1.29,.04,.11,.05,.24,.03,.35-.02,.12-.08,.23-.16,.32l-.78,1.11s0,.02,0,.03h0l.05,.06,.87,.87,.04,.04,.02,.02s.02,0,.03,0h0l1.1-.79c.09-.08,.2-.13,.32-.16,.12-.02,.24-.01,.35,.03,.4,.24,.84,.42,1.29,.54,.11,.05,.2,.13,.27,.23,.07,.1,.11,.22,.11,.34l.23,1.34s0,.02,.02,.02h1.41s.02,0,.02-.02h0l.22-1.34c0-.12,.05-.24,.11-.34,.07-.1,.16-.18,.27-.23,.45-.12,.89-.3,1.29-.54,.11-.04,.24-.05,.35-.03,.12,.02,.23,.08,.32,.16l1.11,.78s.02,0,.03,0h0l.05-.06,.87-.87,.04-.04,.02-.02s0-.02,0-.03h0l-.78-1.11c-.08-.09-.13-.2-.16-.32-.02-.12-.01-.24,.03-.35,.24-.4,.42-.84,.54-1.29,.05-.11,.13-.2,.23-.27s.22-.11,.34-.11l1.34-.23s.02,0,.02-.02v-1.4s0-.02-.02-.02Zm-4.67,3.01c-.45,.45-1.03,.76-1.65,.88-.63,.12-1.27,.06-1.86-.18-.59-.24-1.09-.66-1.45-1.19-.35-.53-.54-1.15-.54-1.79s.19-1.26,.54-1.79c.35-.53,.86-.94,1.45-1.19,.59-.24,1.24-.31,1.86-.18,.63,.12,1.2,.43,1.65,.88,.3,.3,.54,.66,.7,1.05,.16,.39,.25,.81,.25,1.24s-.08,.84-.25,1.24c-.16,.39-.4,.75-.7,1.05Z\"\n />\n )\n}\n\nexport function API({ color }): JSX.Element {\n return (\n <path\n fill={color}\n d=\"M11.08,12.387a3.277,3.277,0,0,0,.21-.86l1.47-.23-.25-1.63-1.48.22A3.167,3.167,0,0,0,9.93,8.5l.54-1.37-1.54-.6L8.39,7.9a3.393,3.393,0,0,0-1.76.27l-.92-1.15-1.3,1.03.93,1.16a3.462,3.462,0,0,0-.43.78A3.333,3.333,0,0,0,4.69,11l-1.49.23.25,1.69,1.59-.24a3.278,3.278,0,0,0,1.02,1.2l-.54,1.39,1.55.6.54-1.39a3.319,3.319,0,0,0,1.74-.27l.93,1.17,1.3-1.04-.93-1.17A3.258,3.258,0,0,0,11.08,12.387ZM9.81,11.9A1.953,1.953,0,0,1,7.29,13a1.942,1.942,0,1,1,2.52-1.1Zm5.89-4.32a1.581,1.581,0,0,0,.04-.38,2.066,2.066,0,0,0-1.39-1.95v-.82H12.97v.82A2.066,2.066,0,0,0,11.58,7.2a1.581,1.581,0,0,0,.04.38l-.71.41.7,1.2.7-.4a2.073,2.073,0,0,0,2.7,0l.7.4.7-1.2Zm-2.04.67A1.045,1.045,0,1,1,14.7,7.2,1.041,1.041,0,0,1,13.66,8.247Z\"\n />\n )\n}\n\nexport function Calendar({ color }): JSX.Element {\n return (\n <path\n fill={color}\n d=\"M14.18,6.5h-.91V5.8a.55.55,0,0,0-.55-.55h-.26a.55.55,0,0,0-.55.55v.7H8.09V5.8a.55.55,0,0,0-.55-.55H7.28a.55.55,0,0,0-.55.55v.7H5.82a.58.58,0,0,0-.58.59v7.08a.58.58,0,0,0,.58.58h8.36a.58.58,0,0,0,.58-.58V7.09A.58.58,0,0,0,14.18,6.5Zm-.91,6.71H6.73V9.09h6.54Z\"\n />\n )\n}\n\nexport function CheckIns({ color }): JSX.Element {\n return (\n <path\n fill={color}\n d=\"M14.175,8.341,9.258,13.256a1.157,1.157,0,0,1-1.638,0L5.161,10.8A1.159,1.159,0,1,1,6.8,9.16L8.439,10.8l4.1-4.1a1.159,1.159,0,0,1,1.639,1.639Z\"\n />\n )\n}\n\nexport function ChurchCenter({ color }): JSX.Element {\n return (\n <path\n fill={color}\n d=\"M13.91,14.763a.334.334,0,0,1-.331.338l-1.959-.016a.334.334,0,0,1-.338-.331s.005-.233.005-1.8a3.674,3.674,0,0,0-1.279-2.638,3.674,3.674,0,0,0-1.279,2.638c0,1.565.005,1.8.005,1.8a.334.334,0,0,1-.338.331L6.437,15.1a.334.334,0,0,1-.331-.338s-.242-6.457-.02-6.65h0L9.671,5.021a.522.522,0,0,1,.684,0l3.58,3.092H13.93C14.152,8.325,13.91,14.763,13.91,14.763Z\"\n />\n )\n}\n\nexport function Giving({ color }): JSX.Element {\n return (\n <path\n fill={color}\n d=\"M10.3,13.769a.508.508,0,0,1-.592,0c-1.259-.888-5.982-4.494-3.268-6.83a2.386,2.386,0,0,1,3.215.205l.349.349.349-.349a2.386,2.386,0,0,1,3.215-.205C16.286,9.275,11.563,12.881,10.3,13.769Z\"\n />\n )\n}\n\nexport function Groups({ color }): JSX.Element {\n return (\n <path\n fill={color}\n d=\"M13.769,11.313V8.683a1.867,1.867,0,1,0-2.443-2.449H8.69A1.867,1.867,0,1,0,6.243,8.681v2.632A1.867,1.867,0,1,0,8.69,13.76h2.632a1.867,1.867,0,1,0,2.447-2.447Zm-1.455,0a1.873,1.873,0,0,0-.992.992H8.69a1.877,1.877,0,0,0-.992-.992V8.681a1.877,1.877,0,0,0,.992-.992h2.636a1.872,1.872,0,0,0,.988.99Z\"\n />\n )\n}\n\nexport function Home({ color }): JSX.Element {\n return (\n <path\n fill={color}\n d=\"M14.7619 8.93233C14.7619 8.72768 14.6587 8.53243 14.4775 8.39414L10.5927 5.43C10.2573 5.17413 9.74265 5.17413 9.40731 5.42999L5.52252 8.39414C5.34128 8.53243 5.2381 8.72768 5.2381 8.93233V13.0794C5.2381 13.4827 5.63079 13.8095 6.11521 13.8095H13.8848C14.3692 13.8095 14.7619 13.4826 14.7619 13.0794V8.93233Z\"\n />\n )\n}\n\nexport function People({ color }): JSX.Element {\n return (\n <path\n fill={color}\n d=\"M8.177,5.732A2.018,2.018,0,1,1,6.159,7.75,2.019,2.019,0,0,1,8.177,5.732Zm2.494,8.53H5.664A.565.565,0,0,1,5.1,13.7V12.422a1.841,1.841,0,0,1,1.841-1.841H9.394a1.841,1.841,0,0,1,1.841,1.841V13.7A.565.565,0,0,1,10.671,14.262ZM12.814,6.94A1.513,1.513,0,1,1,11.3,8.453,1.513,1.513,0,0,1,12.814,6.94Zm1.537,6.093H12.413a.565.565,0,0,1-.565-.565v-.049a2.292,2.292,0,0,0-.2-.957.555.555,0,0,0-.062-.141.8.8,0,0,0-.061-.11,1.19,1.19,0,0,0-.092-.16,1.131,1.131,0,0,1,.908-.472h1.472a1.108,1.108,0,0,1,1.105,1.1v.785A.565.565,0,0,1,14.351,13.033Z\"\n />\n )\n}\n\nexport function Publishing({ color }): JSX.Element {\n return (\n <path\n fill={color}\n d=\"M7.287,13.575a.478.478,0,0,1-.477.477H5.856a.478.478,0,0,1-.477-.477V6.407a.478.478,0,0,1,.477-.477H6.81a.478.478,0,0,1,.477.477Zm7.293,0a.477.477,0,0,1-.477.477H9.268a.478.478,0,0,1-.477-.477V12.6a.478.478,0,0,1,.477-.477H14.1a.477.477,0,0,1,.477.477Zm0-3.473a.477.477,0,0,1-.476.477H9.268a.478.478,0,0,1-.477-.477V6.407a.478.478,0,0,1,.477-.477H14.1a.477.477,0,0,1,.477.477Z\"\n />\n )\n}\n\nexport function Registrations({ color }): JSX.Element {\n return (\n <path\n fill={color}\n d=\"M4.48,11.09a.51.51,0,0,0,0,.71l.7.7a.22.22,0,0,0,.27,0,1.47,1.47,0,0,1,1.8.22,1.5,1.5,0,0,1,.23,1.81.21.21,0,0,0,0,.27l.7.7a.51.51,0,0,0,.71,0l2-2a.16.16,0,0,0,0-.22L6.7,9.1a.17.17,0,0,0-.23,0Zm11-2.89-.71-.7a.21.21,0,0,0-.26,0,1.47,1.47,0,0,1-1.79-.23,1.49,1.49,0,0,1-.24-1.79.22.22,0,0,0,0-.27l-.7-.7a.51.51,0,0,0-.71,0L7.47,8.11a.14.14,0,0,0,0,.22l4.2,4.2a.14.14,0,0,0,.22,0l3.63-3.62A.51.51,0,0,0,15.52,8.2Z\"\n />\n )\n}\n\nexport function Services({ color }): JSX.Element {\n return (\n <path\n fill={color}\n d=\"M6.5,6.559A1.059,1.059,0,1,1,5.443,5.5,1.059,1.059,0,0,1,6.5,6.559ZM5.443,8.943A1.059,1.059,0,1,0,6.5,10,1.059,1.059,0,0,0,5.443,8.943Zm0,3.443A1.059,1.059,0,1,0,6.5,13.445,1.059,1.059,0,0,0,5.443,12.386ZM15,6.087a.485.485,0,0,0-.485-.485H8.136a.485.485,0,0,0-.485.485V7.03a.485.485,0,0,0,.485.485h6.38A.485.485,0,0,0,15,7.03ZM15,9.53a.485.485,0,0,0-.485-.485H8.136a.485.485,0,0,0-.485.485v.943a.485.485,0,0,0,.485.485h6.38A.485.485,0,0,0,15,10.473Zm0,3.443a.485.485,0,0,0-.485-.485H8.136a.485.485,0,0,0-.485.485v.943a.485.485,0,0,0,.485.485h6.38A.485.485,0,0,0,15,13.916Z\"\n />\n )\n}\n","import React from \"react\"\n\nimport * as AppSymbols from \"./mono_app_symbols\"\n\nfunction Squircle({ color = \"#fff\" }): JSX.Element {\n return (\n <path\n d=\"M10.008.045C2.047.045.056,2.036.056,10s1.991,9.952,9.952,9.952S19.96,17.959,19.96,10,17.969.045,10.008.045Z\"\n fill={color}\n />\n )\n}\n\nexport function MonoAppIcon({\n appName,\n colors,\n style,\n size = 20,\n ...platformProps\n}: {\n appName: string\n colors: any\n size?: number\n // TODO: shared type\n style?: any\n}): JSX.Element {\n return (\n <svg\n xmlns=\"http://www.w3.org/2000/svg\"\n width={size}\n height={size}\n viewBox=\"0 0 20 20\"\n role=\"img\"\n aria-labelledby=\"title desc\"\n style={{ display: \"block\", ...style }}\n {...platformProps}\n >\n <title id=\"title\">Planning Center {appName} App Icon</title>\n\n <desc id=\"desc\">\n An image symbolizing the Planning Center {appName} app.\n </desc>\n\n {appName === \"Accounts\" ? null : <Squircle />}\n\n {AppSymbols[appName] ? (\n React.createElement(AppSymbols[appName], {\n color: appName != \"Accounts\" ? colors.base0 : \"#fff\",\n })\n ) : (\n <div>appName not supported</div>\n )}\n </svg>\n )\n}\n","import React from \"react\"\n\nexport function Accounts({ color, size = 20 }): JSX.Element {\n return (\n <svg\n data-name=\"Layer 1\"\n height={size}\n id=\"4ce749c7-c01e-4a9b-9496-b14fd2e761aa\"\n viewBox=\"0 0 77.073 20\"\n xmlns=\"http://www.w3.org/2000/svg\"\n >\n <title>accounts-text</title>\n <path\n fill={color}\n d=\"M4.729,5.537A10.859,10.859,0,0,0,1.262,6.1a.566.566,0,0,0-.4.717l.194.819a.579.579,0,0,0,.7.5,10.108,10.108,0,0,1,2.748-.47,1.416,1.416,0,0,1,1.065.349A2.307,2.307,0,0,1,6,9.682,7.706,7.706,0,0,0,4.1,9.418c-2.493,0-4.1,1.305-4.1,3.327a3.2,3.2,0,0,0,3.328,3.434,4.385,4.385,0,0,0,3.011-1.161l.181.509c.1.249.231.415.515.415h.712a.6.6,0,0,0,.59-.589v-5.3C8.337,7.581,8.065,5.537,4.729,5.537ZM3.78,14.181a1.343,1.343,0,0,1-1.436-1.459c0-.91.777-1.522,1.932-1.522a4.726,4.726,0,0,1,1.7.3v1.556A2.983,2.983,0,0,1,3.78,14.181ZM18.6,13.194c.4.361.326.669.2.865a4.646,4.646,0,0,1-3.977,2.12,5.2,5.2,0,0,1-5.2-5.31,5.285,5.285,0,0,1,5.225-5.332,4.461,4.461,0,0,1,3.711,1.768.6.6,0,0,1-.1.869l-.775.71c-.361.335-.64.056-.806-.11A2.909,2.909,0,0,0,14.9,7.816,2.938,2.938,0,0,0,12,10.847,2.921,2.921,0,0,0,14.837,13.9a2.623,2.623,0,0,0,2.03-.965c.082-.081.161-.16.241-.233a.574.574,0,0,1,.819-.049Zm9.661,0c.4.361.326.669.2.865a4.644,4.644,0,0,1-3.976,2.12,5.2,5.2,0,0,1-5.2-5.31A5.286,5.286,0,0,1,24.5,5.537a4.459,4.459,0,0,1,3.71,1.768.6.6,0,0,1-.1.869l-.775.71c-.361.335-.641.056-.806-.11a2.779,2.779,0,0,0-4.869,2.073A2.92,2.92,0,0,0,24.5,13.9a2.625,2.625,0,0,0,2.03-.965c.081-.081.161-.16.241-.233a.573.573,0,0,1,.818-.049Zm5.86-7.657A5.323,5.323,0,1,0,39.3,10.826,5.317,5.317,0,0,0,34.117,5.537Zm2.838,5.289a2.857,2.857,0,1,1-5.7,0,2.853,2.853,0,1,1,5.7,0ZM49.346,6.341v9.012a.616.616,0,0,1-.612.589h-.517c-.34,0-.474-.245-.561-.485l-.2-.536a4.084,4.084,0,0,1-3.1,1.258c-3.388,0-3.823-2.5-3.823-4.685V6.341a.621.621,0,0,1,.59-.588h1.207a.6.6,0,0,1,.59.588v5.3c0,1.539.58,2.256,1.825,2.256a2.357,2.357,0,0,0,2.214-1.544l0-6.016c0-.544.349-.588.676-.588h1.1A.624.624,0,0,1,49.346,6.341Zm11.089,4.01v5a.605.605,0,0,1-.591.589H58.637a.6.6,0,0,1-.59-.589V10.265c0-1.579-.655-2.449-1.846-2.449a2.939,2.939,0,0,0-2.514,1.355v6.182c0,.4-.229.589-.7.589h-1.1a.6.6,0,0,1-.59-.589V6.341a.6.6,0,0,1,.59-.588h.518a.5.5,0,0,1,.522.391l.235.67a4.691,4.691,0,0,1,3.3-1.277C59.134,5.537,60.435,7.111,60.435,10.351Zm8.048,4.379a.556.556,0,0,1-.283.721,6.126,6.126,0,0,1-2.822.728c-2.337,0-2.637-1.651-2.637-3.09V7.816H61.713a.6.6,0,0,1-.589-.59V6.341a.569.569,0,0,1,.589-.588h1.028V3.088a.59.59,0,0,1,.59-.59h1.228a.573.573,0,0,1,.568.59V5.753h2.515a.582.582,0,0,1,.59.588v.885a.613.613,0,0,1-.59.59H65.127V13c0,.828.323.9.683.9a3.241,3.241,0,0,0,1.536-.458.523.523,0,0,1,.431-.064.558.558,0,0,1,.317.335Zm7.869-1.576c0,1.5-1.262,3.025-3.672,3.025a5.927,5.927,0,0,1-3.343-1.033h0a.523.523,0,0,1-.208-.663l.452-.926a.494.494,0,0,1,.3-.254.635.635,0,0,1,.505.076l.032.017a4.485,4.485,0,0,0,2.389.7c.74,0,1.2-.328,1.2-.855,0-.58-.666-.985-2.066-1.618-1.435-.648-2.763-1.49-2.763-3.253,0-1.41,1.056-2.832,3.414-2.832a5.7,5.7,0,0,1,2.973.752.706.706,0,0,1,.256.882l-.344.689a.582.582,0,0,1-.8.247,5.057,5.057,0,0,0-2.087-.485c-.8,0-1.156.385-1.156.768,0,.546.574.9,1.633,1.361C75.052,10.588,76.352,11.279,76.352,13.154Z\"\n />\n </svg>\n )\n}\n\nexport function API({ color, size = 20 }): JSX.Element {\n return (\n <svg\n data-name=\"Layer 1\"\n height={size}\n id=\"bed028ef-58ee-4c4c-a757-08ecc3276857\"\n viewBox=\"0 0 119.5 20\"\n xmlns=\"http://www.w3.org/2000/svg\"\n >\n <title>api-text</title>\n <path\n fill={color}\n d=\"M9.136.675H7.908a.621.621,0,0,0-.59.589V5.5a6.9,6.9,0,0,0-2.384-.469A5.013,5.013,0,0,0,.012,10.343c0,2.989,2.048,5.331,4.663,5.331a4.885,4.885,0,0,0,3.22-1.3l.16.543a.591.591,0,0,0,.564.519h.517a.6.6,0,0,0,.59-.59V1.264A.6.6,0,0,0,9.136.675ZM7.34,7.847v4.175A2.745,2.745,0,0,1,4.978,13.4,2.815,2.815,0,0,1,2.4,10.343a2.913,2.913,0,0,1,2.772-3.03A4.941,4.941,0,0,1,7.34,7.847Zm8.833-2.813A5.081,5.081,0,0,0,11.1,10.343a5.046,5.046,0,0,0,5.094,5.331,5.712,5.712,0,0,0,3.761-1.256.512.512,0,0,0,.064-.819l-.582-.906a.467.467,0,0,0-.3-.22.619.619,0,0,0-.45.147,3.737,3.737,0,0,1-2.368.818,2.818,2.818,0,0,1-2.854-2.484h6.755a.578.578,0,0,0,.566-.532c.023-.175.045-.524.045-.7A4.571,4.571,0,0,0,16.173,5.034ZM16.13,7.1a2.23,2.23,0,0,1,2.334,2.032H13.591A2.411,2.411,0,0,1,16.13,7.1ZM30.587,5.982l-4.3,9.366a.561.561,0,0,1-.515.326h-.129a.59.59,0,0,1-.534-.323l-4.31-9.373a.484.484,0,0,1-.024-.49.542.542,0,0,1,.493-.239h1.315a.543.543,0,0,1,.534.344l2.571,5.914,2.7-5.91c.161-.348.486-.348.773-.348h.97a.544.544,0,0,1,.494.239A.488.488,0,0,1,30.587,5.982Zm4.983-.948A5.081,5.081,0,0,0,30.5,10.343a5.045,5.045,0,0,0,5.094,5.331,5.706,5.706,0,0,0,3.76-1.256.512.512,0,0,0,.065-.819l-.582-.906a.467.467,0,0,0-.3-.22.616.616,0,0,0-.45.147,3.738,3.738,0,0,1-2.369.818,2.819,2.819,0,0,1-2.854-2.484h6.755a.58.58,0,0,0,.567-.532c.023-.175.044-.524.044-.7A4.57,4.57,0,0,0,35.57,5.034ZM35.527,7.1a2.23,2.23,0,0,1,2.334,2.032H32.988A2.413,2.413,0,0,1,35.527,7.1Zm8.426-5.833V14.847a.606.606,0,0,1-.59.59H42.156a.6.6,0,0,1-.59-.59V1.264a.606.606,0,0,1,.59-.589h1.207A.621.621,0,0,1,43.953,1.264Zm6.576,3.77a5.322,5.322,0,1,0,5.18,5.287A5.315,5.315,0,0,0,50.529,5.034Zm2.836,5.287a2.856,2.856,0,1,1-5.695,0,2.852,2.852,0,1,1,5.7,0Zm8.65-5.287a4.76,4.76,0,0,0-3.08,1.1l-.2-.487a.523.523,0,0,0-.539-.4h-.539a.606.606,0,0,0-.59.59V19.422a.6.6,0,0,0,.59.59h1.207a.58.58,0,0,0,.633-.59V15.066a5.6,5.6,0,0,0,2.427.608,5.075,5.075,0,0,0,4.9-5.331A5.026,5.026,0,0,0,62.015,5.034Zm2.427,5.309A2.9,2.9,0,0,1,61.648,13.4a4.112,4.112,0,0,1-2.19-.678v-4.1a2.628,2.628,0,0,1,2.277-1.3A2.787,2.787,0,0,1,64.442,10.343ZM72.73,5.034a5.081,5.081,0,0,0-5.073,5.309,5.046,5.046,0,0,0,5.095,5.331,5.711,5.711,0,0,0,3.76-1.256.512.512,0,0,0,.065-.819l-.583-.906a.463.463,0,0,0-.3-.22.61.61,0,0,0-.45.147,3.735,3.735,0,0,1-2.368.818,2.818,2.818,0,0,1-2.854-2.484h6.754a.577.577,0,0,0,.567-.532c.023-.178.045-.527.045-.7A4.57,4.57,0,0,0,72.73,5.034ZM72.687,7.1a2.23,2.23,0,0,1,2.334,2.032H70.147A2.413,2.413,0,0,1,72.687,7.1ZM85.434,5.6a.518.518,0,0,1,.009.524L84.926,7.2a.584.584,0,0,1-.334.323.543.543,0,0,1-.424-.032,2.366,2.366,0,0,0-.854-.181A2.734,2.734,0,0,0,81.08,8.561v6.286c0,.59-.485.59-.8.59h-.991a.6.6,0,0,1-.59-.59V5.839a.605.605,0,0,1,.59-.59H79.8a.576.576,0,0,1,.544.435l.213.688a3.921,3.921,0,0,1,2.971-1.338C84.277,5.034,85.17,5.183,85.434,5.6Zm11.8-5.4a.621.621,0,0,0-.469-.3h-.216a.62.62,0,0,0-.472.305l-6.615,14.5a.508.508,0,0,0,.02.5.517.517,0,0,0,.451.229h1.357a.652.652,0,0,0,.6-.392l1.284-2.884h6.9l1.306,2.884a.618.618,0,0,0,.6.392h1.358a.517.517,0,0,0,.451-.229.508.508,0,0,0,.021-.494Zm1.916,9.871H94.116l2.5-5.627ZM110.327.12h-4.913a.526.526,0,0,0-.526.525V14.912a.526.526,0,0,0,.526.525h1.4a.54.54,0,0,0,.525-.525V9.963h3.009A4.922,4.922,0,1,0,110.327.12Zm2.493,4.856a2.563,2.563,0,0,1-2.536,2.643H107.34V2.507h2.944A2.476,2.476,0,0,1,112.82,4.976ZM119.087.645V14.912a.54.54,0,0,1-.526.525h-1.422a.54.54,0,0,1-.525-.525V.645a.539.539,0,0,1,.525-.525h1.422A.539.539,0,0,1,119.087.645Z\"\n />\n </svg>\n )\n}\n\nexport function Calendar({ color, size = 20 }): JSX.Element {\n return (\n <svg\n data-name=\"Layer 1\"\n height={size}\n id=\"Layer_1\"\n viewBox=\"0 0 73.83 20\"\n xmlns=\"http://www.w3.org/2000/svg\"\n >\n <title>calendar-text</title>\n <path\n fill={color}\n d=\"M9,12.56c.39.36.32.66.19.85a4.65,4.65,0,0,1-4,2.12A5.21,5.21,0,0,1,0,10.21,5.3,5.3,0,0,1,5.23,4.87,4.49,4.49,0,0,1,9,6.64a.6.6,0,0,1-.1.85l-.78.71c-.35.33-.61.07-.78-.11a3,3,0,0,0-2-1,3,3,0,0,0-2.94,3.06,3,3,0,0,0,2.87,3.09,2.63,2.63,0,0,0,2.05-1l.25-.23A.55.55,0,0,1,8.32,12Zm9.25-3.17v5.33a.59.59,0,0,1-.57.57H17c-.27,0-.4-.16-.5-.4l-.19-.54a4.39,4.39,0,0,1-3,1.18A3.2,3.2,0,0,1,9.91,12.1c0-2,1.61-3.33,4.11-3.33a7.24,7.24,0,0,1,1.92.28,2.33,2.33,0,0,0-.43-1.72A1.44,1.44,0,0,0,14.43,7a10.27,10.27,0,0,0-2.77.48A.56.56,0,0,1,11,7l-.2-.82a.56.56,0,0,1,.39-.7,10.9,10.9,0,0,1,3.48-.57C18,4.87,18.25,6.92,18.25,9.39Zm-2.34,3V10.83a4.91,4.91,0,0,0-1.72-.3c-1.17,0-2,.62-2,1.55a1.37,1.37,0,0,0,1.46,1.48A3,3,0,0,0,15.91,12.42ZM22,.47H20.79a.6.6,0,0,0-.58.57V14.72a.59.59,0,0,0,.58.57H22a.59.59,0,0,0,.57-.57V1A.61.61,0,0,0,22,.47ZM33.75,9.56c0,.18,0,.53,0,.71a.57.57,0,0,1-.55.52H26.35a2.84,2.84,0,0,0,2.89,2.53,3.84,3.84,0,0,0,2.39-.82.57.57,0,0,1,.43-.15.45.45,0,0,1,.29.21l.58.92a.48.48,0,0,1-.06.79,5.67,5.67,0,0,1-3.76,1.26A5.05,5.05,0,0,1,24,10.19a5.1,5.1,0,0,1,5.08-5.32A4.58,4.58,0,0,1,33.75,9.56ZM26.46,9h4.95A2.27,2.27,0,0,0,29,6.91,2.45,2.45,0,0,0,26.46,9Zm13.8-4.12a4.72,4.72,0,0,0-3.32,1.3l-.24-.7a.48.48,0,0,0-.51-.38h-.52a.59.59,0,0,0-.57.57v9.06a.58.58,0,0,0,.57.57h1.11c.45,0,.68-.19.68-.57V8.5A3,3,0,0,1,40,7.13c1.21,0,1.88.88,1.88,2.48v5.11a.58.58,0,0,0,.57.57h1.21a.6.6,0,0,0,.58-.57v-5C44.24,6.45,42.94,4.87,40.26,4.87ZM55.29,1V14.72a.58.58,0,0,1-.57.57H54.2a.57.57,0,0,1-.55-.5l-.17-.58a4.89,4.89,0,0,1-3.24,1.32c-2.62,0-4.67-2.34-4.67-5.34A5,5,0,0,1,50.5,4.87a6.85,6.85,0,0,1,2.39.48h0V1a.61.61,0,0,1,.58-.57h1.23A.59.59,0,0,1,55.29,1ZM52.93,11.88V7.67a5,5,0,0,0-2.19-.54,2.94,2.94,0,0,0-2.81,3.06,2.85,2.85,0,0,0,2.61,3.09A2.76,2.76,0,0,0,52.93,11.88Zm12-2.49v5.33a.59.59,0,0,1-.57.57h-.72c-.27,0-.39-.16-.5-.4L63,14.35a4.39,4.39,0,0,1-3,1.18A3.2,3.2,0,0,1,56.6,12.1c0-2,1.62-3.33,4.11-3.33a7.24,7.24,0,0,1,1.92.28,2.33,2.33,0,0,0-.43-1.72A1.42,1.42,0,0,0,61.12,7a10.27,10.27,0,0,0-2.77.48A.56.56,0,0,1,57.67,7l-.2-.82a.56.56,0,0,1,.39-.7,10.9,10.9,0,0,1,3.48-.57C64.67,4.87,64.94,6.92,64.94,9.39Zm-2.34,3V10.83a4.91,4.91,0,0,0-1.72-.3c-1.17,0-2,.62-2,1.55a1.37,1.37,0,0,0,1.46,1.48A3,3,0,0,0,62.6,12.42Zm11-7c-.26-.42-1.18-.57-1.9-.57a4,4,0,0,0-3,1.37l-.23-.73A.56.56,0,0,0,68,5.09h-.52a.59.59,0,0,0-.58.57v9.06a.58.58,0,0,0,.58.57h1c.32,0,.79,0,.79-.57V8.4A2.77,2.77,0,0,1,71.5,7.13a2.47,2.47,0,0,1,.86.18.5.5,0,0,0,.41,0A.56.56,0,0,0,73.1,7l.52-1.09A.48.48,0,0,0,73.61,5.44Z\"\n />\n </svg>\n )\n}\n\nexport function CheckIns({ color, size = 20 }): JSX.Element {\n return (\n <svg\n data-name=\"Layer 1\"\n height={size}\n id=\"dc713595-39c2-41c4-b1d9-3ef8c295b738\"\n viewBox=\"0 0 79.311 20\"\n xmlns=\"http://www.w3.org/2000/svg\"\n >\n <title>check-ins-text</title>\n <path\n fill={color}\n d=\"M40.221,13.213c.4.362.326.669.2.866A4.646,4.646,0,0,1,36.44,16.2a5.2,5.2,0,0,1-5.2-5.311,5.286,5.286,0,0,1,5.225-5.331,4.462,4.462,0,0,1,3.711,1.768.605.605,0,0,1-.1.869L39.3,8.9c-.362.333-.64.055-.806-.109a2.9,2.9,0,0,0-1.967-.959,2.937,2.937,0,0,0-2.9,3.031,2.92,2.92,0,0,0,2.837,3.054,2.62,2.62,0,0,0,2.03-.965c.082-.081.162-.16.242-.234a.572.572,0,0,1,.818-.049h0Zm-9.679-2.971c0,.178-.022.526-.044.7a.579.579,0,0,1-.567.531H23.174a2.82,2.82,0,0,0,2.855,2.485,3.736,3.736,0,0,0,2.369-.818.609.609,0,0,1,.45-.147.459.459,0,0,1,.3.219l.583.907a.513.513,0,0,1-.065.819A5.708,5.708,0,0,1,25.9,16.2a5.046,5.046,0,0,1-5.1-5.332,5.081,5.081,0,0,1,5.074-5.31A4.572,4.572,0,0,1,30.542,10.242ZM23.3,9.653h4.874A2.23,2.23,0,0,0,25.835,7.62,2.412,2.412,0,0,0,23.3,9.653Zm-7.751-4.1a4.789,4.789,0,0,0-2.773.924V2.339a.621.621,0,0,0-.59-.588H10.974a.6.6,0,0,0-.59.588V15.373a.59.59,0,0,0,.59.589H12.16a.575.575,0,0,0,.611-.589V9.193a2.871,2.871,0,0,1,2.493-1.357c1.2,0,1.867.884,1.867,2.492v5.045a.59.59,0,0,0,.59.589h1.207a.606.606,0,0,0,.59-.589v-5C19.518,7.221,18.144,5.557,15.544,5.557ZM8.315,12.674h0a.573.573,0,0,0-.818.049c-.08.074-.16.154-.242.235a2.624,2.624,0,0,1-2.029.964,2.92,2.92,0,0,1-2.838-3.054,2.938,2.938,0,0,1,2.9-3.031A2.906,2.906,0,0,1,7.257,8.8c.166.164.444.442.8.109l.775-.71a.6.6,0,0,0,.1-.869A4.464,4.464,0,0,0,5.225,5.557,5.285,5.285,0,0,0,0,10.888,5.2,5.2,0,0,0,5.2,16.2a4.647,4.647,0,0,0,3.977-2.12c.13-.2.2-.5-.2-.866ZM55.084,9.566h-4.1a.514.514,0,0,0-.525.525v.926a.51.51,0,0,0,.525.5h4.1a.51.51,0,0,0,.526-.5v-.926A.514.514,0,0,0,55.084,9.566Zm20.945.2C74.97,9.308,74.4,8.955,74.4,8.41c0-.383.357-.769,1.156-.769a5.059,5.059,0,0,1,2.087.486.581.581,0,0,0,.8-.248l.344-.689a.706.706,0,0,0-.256-.882,5.705,5.705,0,0,0-2.973-.751c-2.358,0-3.413,1.422-3.413,2.831,0,1.764,1.327,2.606,2.762,3.253,1.4.634,2.066,1.038,2.066,1.618,0,.528-.459.856-1.2.856a4.5,4.5,0,0,1-2.39-.7l-.031-.018a.629.629,0,0,0-.506-.075.494.494,0,0,0-.3.254l-.452.926a.523.523,0,0,0,.21.664A5.935,5.935,0,0,0,75.639,16.2c2.41,0,3.672-1.522,3.672-3.025C79.311,11.3,78.011,10.609,76.029,9.769Zm-9.2-4.212a4.687,4.687,0,0,0-3.3,1.277l-.235-.67a.5.5,0,0,0-.522-.392h-.517a.605.605,0,0,0-.591.59v9.011a.591.591,0,0,0,.591.589h1.1c.469,0,.7-.193.7-.589V9.19A2.934,2.934,0,0,1,66.57,7.836c1.191,0,1.846.87,1.846,2.45v5.087a.59.59,0,0,0,.59.589h1.207a.606.606,0,0,0,.59-.589v-5C70.8,7.131,69.5,5.557,66.829,5.557Zm-8.3-4.275a1.543,1.543,0,0,0-1.538,1.581,1.532,1.532,0,0,0,1.538,1.559,1.57,1.57,0,1,0,0-3.14Zm-12.215,9.1,3.949-3.716a.548.548,0,0,0,.14-.588.484.484,0,0,0-.476-.3H48.355a1.063,1.063,0,0,0-.7.331L44.008,9.4V2.339a.62.62,0,0,0-.59-.588H42.211a.6.6,0,0,0-.59.588V15.373a.59.59,0,0,0,.59.589h1.207a.606.606,0,0,0,.59-.589V11.329l3.783,4.4a.711.711,0,0,0,.542.237H50.1a.468.468,0,0,0,.461-.256.561.561,0,0,0-.094-.582ZM59.135,5.772H57.928a.605.605,0,0,0-.59.59v9.011a.59.59,0,0,0,.59.589h1.207a.606.606,0,0,0,.59-.589V6.362A.621.621,0,0,0,59.135,5.772Z\"\n />\n </svg>\n )\n}\n\nexport function ChurchCenter({ color, size = 20 }): JSX.Element {\n return (\n <svg\n data-name=\"Layer 1\"\n height={size}\n id=\"e2e8a225-c349-4aea-935c-64b6ad436be8\"\n viewBox=\"0 0 118.083 20\"\n xmlns=\"http://www.w3.org/2000/svg\"\n >\n <title>church-center-text</title>\n <path\n fill={color}\n d=\"M5.188,16.2A5.187,5.187,0,0,1,0,10.908,5.27,5.27,0,0,1,5.209,5.591a4.453,4.453,0,0,1,3.7,1.762.588.588,0,0,1-.1.844l-.776.712c-.346.319-.607.062-.779-.109a2.93,2.93,0,0,0-1.983-.966A2.959,2.959,0,0,0,2.35,10.887a2.942,2.942,0,0,0,2.859,3.076,2.642,2.642,0,0,0,2.045-.971c.082-.081.162-.16.242-.234a.552.552,0,0,1,.794-.047l.669.539c.388.352.318.651.193.841A4.629,4.629,0,0,1,5.188,16.2ZM19.5,15.4V10.391c0-3.14-1.368-4.8-3.959-4.8a4.788,4.788,0,0,0-2.788.939l-.006-4.209a.609.609,0,0,0-.571-.57H10.964a.592.592,0,0,0-.571.57V15.4a.58.58,0,0,0,.571.572H12.15a.558.558,0,0,0,.593-.572V9.207a2.893,2.893,0,0,1,2.515-1.373c1.217,0,1.888.893,1.888,2.514V15.4a.579.579,0,0,0,.571.572h1.208A.593.593,0,0,0,19.5,15.4Zm8.7-.468.2.566c.09.246.218.474.544.474h.518a.6.6,0,0,0,.592-.572V6.378a.612.612,0,0,0-.592-.57h-1.1c-.332,0-.657.044-.657.57l0,6.023a2.38,2.38,0,0,1-2.236,1.562c-1.259,0-1.845-.723-1.845-2.277V6.378a.585.585,0,0,0-.571-.57H21.843a.6.6,0,0,0-.57.57v5.156c0,2.175.433,4.67,3.807,4.67A4.06,4.06,0,0,0,28.193,14.928Zm6.2.468V9.1A2.755,2.755,0,0,1,36.65,7.834a2.382,2.382,0,0,1,.863.184.53.53,0,0,0,.41.032.571.571,0,0,0,.324-.315l.518-1.077a.5.5,0,0,0-.009-.507c-.259-.413-1.18-.56-1.89-.56a3.975,3.975,0,0,0-2.984,1.356l-.223-.719a.555.555,0,0,0-.525-.42h-.518a.585.585,0,0,0-.571.57V15.4a.58.58,0,0,0,.571.572h.993C33.922,15.968,34.4,15.968,34.4,15.4Zm13.35-1.305c.125-.19.2-.489-.193-.841l-.669-.539a.552.552,0,0,0-.794.047c-.08.074-.16.153-.242.234a2.642,2.642,0,0,1-2.044.971,2.942,2.942,0,0,1-2.86-3.076,2.959,2.959,0,0,1,2.924-3.053A2.93,2.93,0,0,1,45.85,8.8c.172.171.433.428.779.109l.776-.712a.588.588,0,0,0,.1-.844,4.452,4.452,0,0,0-3.7-1.762,5.271,5.271,0,0,0-5.21,5.317,5.187,5.187,0,0,0,5.188,5.3A4.629,4.629,0,0,0,47.745,14.091ZM58.089,15.4V10.391c0-3.14-1.368-4.8-3.959-4.8a4.79,4.79,0,0,0-2.788.939l-.006-4.209a.609.609,0,0,0-.571-.57H49.557a.592.592,0,0,0-.571.57V15.4a.58.58,0,0,0,.571.572h1.187a.557.557,0,0,0,.592-.572V9.207a2.893,2.893,0,0,1,2.515-1.373c1.217,0,1.888.893,1.888,2.514V15.4a.579.579,0,0,0,.571.572h1.208A.593.593,0,0,0,58.089,15.4Zm12.926-1.305c.126-.19.2-.489-.192-.841l-.669-.539a.553.553,0,0,0-.8.047c-.08.074-.159.153-.242.234a2.64,2.64,0,0,1-2.044.971,2.941,2.941,0,0,1-2.859-3.076A2.8,2.8,0,0,1,69.121,8.8c.171.171.433.428.778.109l.777-.712a.587.587,0,0,0,.1-.844,4.449,4.449,0,0,0-3.7-1.762,5.271,5.271,0,0,0-5.21,5.317,5.187,5.187,0,0,0,5.188,5.3A4.629,4.629,0,0,0,71.015,14.091Zm10.247-3.83c0,.177-.022.525-.044.7a.562.562,0,0,1-.549.516H73.887a2.838,2.838,0,0,0,2.877,2.526,3.743,3.743,0,0,0,2.382-.824.6.6,0,0,1,.436-.143.447.447,0,0,1,.283.212l.584.907a.492.492,0,0,1-.063.794A5.7,5.7,0,0,1,76.634,16.2a5.031,5.031,0,0,1-5.08-5.317,5.068,5.068,0,0,1,5.059-5.3A4.558,4.558,0,0,1,81.262,10.261Zm-2.335-.57a2.251,2.251,0,0,0-2.358-2.073,2.433,2.433,0,0,0-2.564,2.073ZM91.707,15.4V10.391c0-3.23-1.3-4.8-3.959-4.8a4.657,4.657,0,0,0-3.306,1.3l-.246-.7a.479.479,0,0,0-.5-.376h-.518a.585.585,0,0,0-.571.57V15.4a.58.58,0,0,0,.571.572h1.1c.457,0,.679-.187.679-.572V9.2a2.96,2.96,0,0,1,2.536-1.37c1.2,0,1.867.877,1.867,2.471V15.4a.58.58,0,0,0,.571.572h1.208A.594.594,0,0,0,91.707,15.4Zm7.779.081a.538.538,0,0,0,.277-.7l-.389-1.014a.537.537,0,0,0-.306-.325.493.493,0,0,0-.415.061,3.249,3.249,0,0,1-1.548.462c-.445,0-.7-.15-.7-.918V7.834h2.536a.594.594,0,0,0,.571-.571V6.378a.564.564,0,0,0-.571-.57H96.4V3.12a.555.555,0,0,0-.549-.571h-1.23a.579.579,0,0,0-.571.571V5.808H93.005a.552.552,0,0,0-.571.57v.885a.579.579,0,0,0,.571.571h1.048v5.3c0,1.431.3,3.073,2.62,3.073A6.067,6.067,0,0,0,99.486,15.477Zm10.11-5.216c0,.177-.022.525-.044.7a.561.561,0,0,1-.549.516h-6.782a2.838,2.838,0,0,0,2.877,2.526,3.743,3.743,0,0,0,2.382-.824.6.6,0,0,1,.437-.143.446.446,0,0,1,.282.212l.584.907a.491.491,0,0,1-.063.794,5.7,5.7,0,0,1-3.752,1.252,5.032,5.032,0,0,1-5.08-5.317,5.068,5.068,0,0,1,5.059-5.3A4.557,4.557,0,0,1,109.6,10.261Zm-2.335-.57A2.25,2.25,0,0,0,104.9,7.618a2.434,2.434,0,0,0-2.565,2.073Zm6.026,5.705V9.1a2.755,2.755,0,0,1,2.255-1.265,2.388,2.388,0,0,1,.864.184.528.528,0,0,0,.409.032.568.568,0,0,0,.324-.315l.519-1.077a.5.5,0,0,0-.009-.507c-.26-.413-1.181-.56-1.891-.56a3.977,3.977,0,0,0-2.984,1.356l-.223-.719a.555.555,0,0,0-.525-.42h-.518a.585.585,0,0,0-.571.57V15.4a.58.58,0,0,0,.571.572h.993C112.814,15.968,113.287,15.968,113.287,15.4Z\"\n />\n </svg>\n )\n}\n\nexport function Giving({ color, size = 20 }): JSX.Element {\n return (\n <svg\n data-name=\"Layer 1\"\n height={size}\n id=\"a221b42b-722d-4eb3-b043-fff7f3c6686f\"\n viewBox=\"0 0 50.486 20\"\n xmlns=\"http://www.w3.org/2000/svg\"\n >\n <title>giving-text</title>\n <path\n fill={color}\n d=\"M9.17,5.089H8.588c-.335,0-.42.255-.474.416l-.2.473a4.791,4.791,0,0,0-3.1-1.1A5.026,5.026,0,0,0,0,10.184a5.085,5.085,0,0,0,4.923,5.332,5.459,5.459,0,0,0,2.428-.629v.342c0,2.113-1.285,2.557-2.363,2.557a3.619,3.619,0,0,1-2.259-.905.567.567,0,0,0-.474-.114.553.553,0,0,0-.365.3l-.516.948a.563.563,0,0,0,.126.7A5.489,5.489,0,0,0,5.031,20a4.407,4.407,0,0,0,4.728-4.771V5.679A.6.6,0,0,0,9.17,5.089Zm-1.8,3.378V12.5a3.951,3.951,0,0,1-2.191.74,2.973,2.973,0,0,1-2.8-3.054A2.82,2.82,0,0,1,5.1,7.152,2.835,2.835,0,0,1,7.373,8.467Zm6.745-2.788v9.01a.6.6,0,0,1-.59.589H12.321a.59.59,0,0,1-.59-.589V5.679a.605.605,0,0,1,.59-.59h1.207A.62.62,0,0,1,14.118,5.679Zm.388-3.508A1.572,1.572,0,0,1,12.924,3.73a1.532,1.532,0,0,1-1.538-1.559A1.543,1.543,0,0,1,12.924.59,1.564,1.564,0,0,1,14.506,2.171Zm10.3,3.156a.49.49,0,0,1-.027.5l-4.307,9.367a.558.558,0,0,1-.514.327h-.13a.6.6,0,0,1-.534-.323L14.984,5.817a.487.487,0,0,1-.025-.49.545.545,0,0,1,.494-.238h1.315a.547.547,0,0,1,.535.344l2.572,5.917,2.7-5.913c.16-.348.486-.348.773-.348h.97A.545.545,0,0,1,24.807,5.327Zm3.249.352v9.01a.6.6,0,0,1-.59.589H26.259a.59.59,0,0,1-.59-.589V5.679a.605.605,0,0,1,.59-.59h1.207A.62.62,0,0,1,28.056,5.679Zm.388-3.508A1.572,1.572,0,0,1,26.863,3.73a1.532,1.532,0,0,1-1.539-1.559A1.544,1.544,0,0,1,26.863.59,1.564,1.564,0,0,1,28.444,2.171Zm10.69,7.517v5a.6.6,0,0,1-.59.589H37.337a.59.59,0,0,1-.59-.589V9.6c0-1.581-.655-2.451-1.846-2.451a2.938,2.938,0,0,0-2.514,1.355v6.182c0,.4-.229.589-.7.589h-1.1a.59.59,0,0,1-.59-.589V5.679a.605.605,0,0,1,.59-.59h.517a.5.5,0,0,1,.522.391l.235.67a4.692,4.692,0,0,1,3.3-1.276C37.834,4.874,39.134,6.448,39.134,9.688Zm10.456-4.6h-.582c-.336,0-.42.255-.473.416l-.2.473a4.777,4.777,0,0,0-3.1-1.1,5.026,5.026,0,0,0-4.815,5.31,5.085,5.085,0,0,0,4.923,5.332,5.459,5.459,0,0,0,2.428-.629v.342c0,2.113-1.285,2.557-2.363,2.557a3.619,3.619,0,0,1-2.259-.905.567.567,0,0,0-.474-.114.553.553,0,0,0-.365.3l-.516.948a.563.563,0,0,0,.126.7A5.489,5.489,0,0,0,45.451,20a4.407,4.407,0,0,0,4.729-4.771V5.679A.605.605,0,0,0,49.59,5.089Zm-1.8,7.409a3.944,3.944,0,0,1-2.19.74,2.973,2.973,0,0,1-2.795-3.054,2.693,2.693,0,0,1,4.985-1.717Z\"\n />\n </svg>\n )\n}\n\nexport function Home({ color, size = 20 }): JSX.Element {\n return (\n <svg\n id=\"a221b42b-722d-4eb3-b043-fff7f3c6686f\"\n data-name=\"Layer 1\"\n xmlns=\"http://www.w3.org/2000/svg\"\n height={size}\n viewBox=\"0 0 47.624 20\"\n >\n <title>home-text</title>\n <path\n fill={color}\n d=\"M8.952,9.7V14.69a.584.584,0,0,1-.553.57H7.229a.57.57,0,0,1-.553-.57V9.658c0-1.616-.649-2.506-1.827-2.506A2.791,2.791,0,0,0,2.414,8.52v6.17a.547.547,0,0,1-.573.57H.692a.569.569,0,0,1-.553-.57v-13a.583.583,0,0,1,.553-.569H1.861a.6.6,0,0,1,.553.569V5.857a4.544,4.544,0,0,1,2.706-.94C7.627,4.917,8.952,6.571,8.952,9.7Zm11.261.473a5.239,5.239,0,0,1-5,5.322,5.185,5.185,0,0,1-5.022-5.322A5.213,5.213,0,0,1,15.21,4.917,5.2,5.2,0,0,1,20.213,10.174Zm-2.234,0a2.789,2.789,0,1,0-5.558,0,2.884,2.884,0,0,0,2.789,3.087A2.876,2.876,0,0,0,17.979,10.174Zm14.59-5.257a4.475,4.475,0,0,0-3.248,1.519,3.34,3.34,0,0,0-2.956-1.519,4.128,4.128,0,0,0-3.031,1.289L23.111,5.5a.487.487,0,0,0-.506-.367h-.48a.584.584,0,0,0-.553.569V14.69a.57.57,0,0,0,.553.57h1.169a.577.577,0,0,0,.553-.57V8.512a2.367,2.367,0,0,1,2.184-1.36c1.216,0,1.808.806,1.808,2.463V14.69a.555.555,0,0,0,.552.57h1.191a.559.559,0,0,0,.532-.57V9.551a10.249,10.249,0,0,0-.077-1.3l.06-.064a2.793,2.793,0,0,1,2.159-1.034c1.2,0,1.807.829,1.807,2.463V14.69a.538.538,0,0,0,.553.57h1.17a.549.549,0,0,0,.553-.57V9.7C36.339,7.647,35.948,4.917,32.569,4.917ZM47.042,9.572c0,.176-.021.523-.043.7a.549.549,0,0,1-.531.514H39.9A2.778,2.778,0,0,0,42.687,13.3a3.573,3.573,0,0,0,2.306-.82.6.6,0,0,1,.422-.144.431.431,0,0,1,.274.211l.566.9a.5.5,0,0,1-.061.791A5.416,5.416,0,0,1,42.562,15.5c-2.85,0-4.919-2.229-4.919-5.3a4.988,4.988,0,0,1,4.9-5.279A4.479,4.479,0,0,1,47.042,9.572ZM40.016,9h4.765A2.2,2.2,0,0,0,42.5,6.937,2.375,2.375,0,0,0,40.016,9Z\"\n />\n </svg>\n )\n}\n\nexport function Groups({ color, size = 20 }): JSX.Element {\n return (\n <svg\n data-name=\"Layer 1\"\n height={size}\n id=\"08e4075e-8ca4-4400-a3ae-98f53270d1d0\"\n viewBox=\"0 0 58.688 20\"\n xmlns=\"http://www.w3.org/2000/svg\"\n >\n <title>groups-text</title>\n <path\n fill={color}\n d=\"M9.17,5.09H8.588c-.335,0-.42.255-.474.416l-.2.472a4.791,4.791,0,0,0-3.1-1.1A5.027,5.027,0,0,0,0,10.185a5.085,5.085,0,0,0,4.923,5.332,5.465,5.465,0,0,0,2.428-.63v.342c0,2.113-1.285,2.557-2.363,2.557a3.631,3.631,0,0,1-2.259-.9.568.568,0,0,0-.473-.115.556.556,0,0,0-.366.3l-.516.947a.574.574,0,0,0,.126.7A5.487,5.487,0,0,0,5.031,20a4.407,4.407,0,0,0,4.728-4.771V5.679A.6.6,0,0,0,9.17,5.09Zm-1.8,3.378V12.5a3.951,3.951,0,0,1-2.191.74,2.972,2.972,0,0,1-2.8-3.053A2.821,2.821,0,0,1,5.1,7.152,2.835,2.835,0,0,1,7.373,8.468Zm11.092-2.5-.517,1.077a.588.588,0,0,1-.335.323.535.535,0,0,1-.424-.032,2.351,2.351,0,0,0-.854-.183A2.738,2.738,0,0,0,14.1,8.4v6.288c0,.59-.485.59-.806.59H12.3a.6.6,0,0,1-.59-.59V5.679a.6.6,0,0,1,.59-.589h.517a.574.574,0,0,1,.544.434l.213.688A3.931,3.931,0,0,1,16.55,4.874c.749,0,1.642.149,1.9.568A.517.517,0,0,1,18.465,5.967Zm4.994-1.093a5.323,5.323,0,0,0,0,10.643,5.323,5.323,0,0,0,0-10.643Zm0,8.364A2.907,2.907,0,0,1,20.6,10.163a2.852,2.852,0,1,1,5.7,0A2.9,2.9,0,0,1,23.459,13.238ZM38.688,5.679v9.01a.616.616,0,0,1-.611.59H37.56c-.34,0-.475-.246-.561-.486l-.2-.535a4.082,4.082,0,0,1-3.1,1.259c-3.389,0-3.824-2.5-3.824-4.686V5.679a.621.621,0,0,1,.59-.589h1.207a.605.605,0,0,1,.591.589v5.3c0,1.539.579,2.256,1.824,2.256A2.356,2.356,0,0,0,36.3,11.694l0-6.015c0-.544.334-.589.677-.589h1.1A.632.632,0,0,1,38.688,5.679Zm6.9-.805a4.752,4.752,0,0,0-3.081,1.1l-.2-.488a.523.523,0,0,0-.54-.4h-.538a.6.6,0,0,0-.59.589V19.266a.6.6,0,0,0,.59.589H42.44a.58.58,0,0,0,.633-.589V14.909a5.612,5.612,0,0,0,2.428.608,5.075,5.075,0,0,0,4.9-5.332A5.027,5.027,0,0,0,45.587,4.874ZM43.029,8.457a2.633,2.633,0,0,1,2.278-1.305,2.789,2.789,0,0,1,2.708,3.033,2.9,2.9,0,0,1-2.794,3.053,4.131,4.131,0,0,1-2.192-.676Zm15.349,4.034c0,1.5-1.262,3.026-3.672,3.026a5.921,5.921,0,0,1-3.343-1.034h0a.522.522,0,0,1-.208-.663l.452-.925a.493.493,0,0,1,.3-.254.633.633,0,0,1,.5.075l.037.02a4.488,4.488,0,0,0,2.384.7c.74,0,1.2-.329,1.2-.856,0-.581-.666-.985-2.066-1.619-1.435-.646-2.763-1.487-2.763-3.252,0-1.41,1.056-2.832,3.414-2.832a5.71,5.71,0,0,1,2.973.752.705.705,0,0,1,.256.881L57.5,7.2a.58.58,0,0,1-.8.248,5.043,5.043,0,0,0-2.087-.485c-.8,0-1.156.386-1.156.768,0,.545.574.9,1.633,1.361C57.078,9.926,58.378,10.616,58.378,12.491Z\"\n />\n </svg>\n )\n}\n\nexport function People({ color, size = 20 }): JSX.Element {\n return (\n <svg\n data-name=\"Layer 1\"\n height={size}\n id=\"c461f8d4-1c6e-406e-af2d-8d7721d891d5\"\n viewBox=\"0 0 57.729 20\"\n xmlns=\"http://www.w3.org/2000/svg\"\n >\n <title>people-text</title>\n <path\n fill={color}\n d=\"M4.944,5.019a4.754,4.754,0,0,0-3.08,1.1l-.2-.487a.521.521,0,0,0-.539-.4H.59A.606.606,0,0,0,0,5.823V19.41A.6.6,0,0,0,.59,20H1.8a.58.58,0,0,0,.633-.59V15.053a5.593,5.593,0,0,0,2.428.607,5.075,5.075,0,0,0,4.9-5.331A5.027,5.027,0,0,0,4.944,5.019ZM2.387,8.6A2.63,2.63,0,0,1,4.665,7.3a2.789,2.789,0,0,1,2.708,3.032,2.9,2.9,0,0,1-2.795,3.054,4.109,4.109,0,0,1-2.191-.678ZM15.663,5.019a5.083,5.083,0,0,0-5.075,5.31,5.046,5.046,0,0,0,5.1,5.331A5.707,5.707,0,0,0,19.445,14.4a.511.511,0,0,0,.065-.818l-.583-.907a.459.459,0,0,0-.295-.22.609.609,0,0,0-.45.147,3.735,3.735,0,0,1-2.369.82,2.819,2.819,0,0,1-2.854-2.487h6.756a.578.578,0,0,0,.567-.531c.022-.177.045-.525.045-.7A4.572,4.572,0,0,0,15.663,5.019Zm-2.583,4.1a2.411,2.411,0,0,1,2.539-2.033,2.231,2.231,0,0,1,2.335,2.033Zm13.145-4.1a5.322,5.322,0,0,0,0,10.641,5.322,5.322,0,0,0,0-10.641Zm2.837,5.289a2.856,2.856,0,1,1-5.7,0,2.852,2.852,0,1,1,5.7,0Zm8.653-5.289a4.758,4.758,0,0,0-3.081,1.1l-.2-.487a.522.522,0,0,0-.54-.4h-.538a.606.606,0,0,0-.591.589V19.41a.592.592,0,0,0,.591.59h1.207a.58.58,0,0,0,.633-.59V15.05a5.541,5.541,0,0,0,2.428.61,5.075,5.075,0,0,0,4.9-5.331A5.027,5.027,0,0,0,37.715,5.019ZM35.158,8.6a2.629,2.629,0,0,1,2.277-1.3,2.789,2.789,0,0,1,2.708,3.032,2.9,2.9,0,0,1-2.794,3.054,4.109,4.109,0,0,1-2.191-.678ZM46.324,1.247V14.834a.606.606,0,0,1-.59.59H44.527a.6.6,0,0,1-.59-.59V1.247a.6.6,0,0,1,.59-.589h1.207A.621.621,0,0,1,46.324,1.247Zm6.459,3.772a5.083,5.083,0,0,0-5.075,5.31,5.047,5.047,0,0,0,5.1,5.331A5.713,5.713,0,0,0,56.566,14.4a.511.511,0,0,0,.064-.818l-.583-.907a.459.459,0,0,0-.295-.22.6.6,0,0,0-.449.147,3.739,3.739,0,0,1-2.369.82,2.821,2.821,0,0,1-2.855-2.487h6.756a.577.577,0,0,0,.567-.531c.022-.177.045-.525.045-.7A4.572,4.572,0,0,0,52.783,5.019ZM52.74,7.081a2.231,2.231,0,0,1,2.334,2.033H50.2A2.412,2.412,0,0,1,52.74,7.081Z\"\n />\n </svg>\n )\n}\n\nexport function Publishing({ color, size = 20 }): JSX.Element {\n return (\n <svg\n id=\"Layer_1\"\n data-name=\"Layer 1\"\n xmlns=\"http://www.w3.org/2000/svg\"\n height={size}\n viewBox=\"0 0 84.973 20\"\n >\n <title>publishing-text</title>\n <path\n d=\"M4.905,5.03A4.709,4.709,0,0,0,1.829,6.141l-.2-.511a.5.5,0,0,0-.52-.385H.568A.59.59,0,0,0,0,5.812V19.374a.575.575,0,0,0,.568.568h1.2a.559.559,0,0,0,.611-.568v-4.4a5.573,5.573,0,0,0,2.437.618A5.036,5.036,0,0,0,9.681,10.3,4.988,4.988,0,0,0,4.905,5.03ZM2.338,8.575A2.642,2.642,0,0,1,4.626,7.261,2.8,2.8,0,0,1,7.343,10.3a2.908,2.908,0,0,1-2.8,3.06,4.117,4.117,0,0,1-2.2-.684Zm17.4-2.763v8.974a.6.6,0,0,1-.59.569h-.515c-.326,0-.456-.238-.541-.472l-.2-.562a4.046,4.046,0,0,1-3.1,1.27c-3.358,0-3.788-2.484-3.788-4.647V5.812a.606.606,0,0,1,.568-.567h1.2a.59.59,0,0,1,.568.567v5.282c0,1.546.584,2.266,1.837,2.266A2.368,2.368,0,0,0,17.4,11.806V5.812c0-.524.323-.567.654-.567h1.094A.609.609,0,0,1,19.737,5.812Zm6.74-.782A6.836,6.836,0,0,0,24.1,5.5l-.018.006V1.246a.606.606,0,0,0-.568-.567H22.29a.583.583,0,0,0-.568.567v13.54a.576.576,0,0,0,.568.569h.516a.569.569,0,0,0,.542-.5l.17-.576a4.845,4.845,0,0,0,3.217,1.31c2.6,0,4.711-2.374,4.711-5.291A5.071,5.071,0,0,0,26.477,5.03ZM24.061,7.76a5.243,5.243,0,0,1,2.18-.5A3,3,0,0,1,29.107,10.3a2.9,2.9,0,0,1-2.694,3.06A2.761,2.761,0,0,1,24.061,12ZM35.225,1.246v13.54a.591.591,0,0,1-.568.569h-1.2a.576.576,0,0,1-.569-.569V1.246a.59.59,0,0,1,.569-.567h1.2A.606.606,0,0,1,35.225,1.246Zm4.349,4.566v8.974a.591.591,0,0,1-.568.569H37.8a.576.576,0,0,1-.568-.569V5.812a.582.582,0,0,1,.568-.567h1.2A.606.606,0,0,1,39.574,5.812Zm.387-3.577a1.547,1.547,0,0,1-1.556,1.534,1.508,1.508,0,0,1-1.513-1.534A1.519,1.519,0,0,1,38.405.679,1.539,1.539,0,0,1,39.961,2.235ZM48.143,12.6c0,1.488-1.25,2.994-3.638,2.994a5.875,5.875,0,0,1-3.318-1.026h0a.5.5,0,0,1-.2-.636l.45-.922a.47.47,0,0,1,.291-.243.613.613,0,0,1,.487.073l.036.02a4.489,4.489,0,0,0,2.385.7c.737,0,1.214-.342,1.214-.871,0-.589-.667-.994-2.069-1.629-1.423-.642-2.74-1.476-2.74-3.222,0-1.394,1.045-2.8,3.38-2.8a5.67,5.67,0,0,1,2.951.745.684.684,0,0,1,.248.853l-.343.687a.56.56,0,0,1-.769.238,5.05,5.05,0,0,0-2.087-.485c-.808,0-1.17.394-1.17.784,0,.554.575.91,1.638,1.372C46.853,10.057,48.143,10.742,48.143,12.6ZM58.461,9.805v4.981a.592.592,0,0,1-.569.569h-1.2a.576.576,0,0,1-.568-.569V9.763c0-1.614-.668-2.5-1.879-2.5a2.881,2.881,0,0,0-2.5,1.366v6.159a.554.554,0,0,1-.589.569H49.97a.576.576,0,0,1-.568-.569V1.246A.582.582,0,0,1,49.97.679h1.2a.606.606,0,0,1,.567.567V5.967a4.766,4.766,0,0,1,2.782-.937C57.1,5.03,58.461,6.681,58.461,9.805Zm4.2-3.993v8.974a.59.59,0,0,1-.567.569h-1.2a.576.576,0,0,1-.568-.569V5.812a.59.59,0,0,1,.568-.567h1.2A.606.606,0,0,1,62.657,5.812Zm.387-3.577a1.547,1.547,0,0,1-1.556,1.534,1.507,1.507,0,0,1-1.512-1.534A1.518,1.518,0,0,1,61.488.679,1.539,1.539,0,0,1,63.044,2.235Zm10.647,7.57v4.981a.591.591,0,0,1-.569.569h-1.2a.576.576,0,0,1-.568-.569V9.72c0-1.586-.66-2.459-1.858-2.459a2.944,2.944,0,0,0-2.523,1.364v6.161c0,.383-.221.569-.676.569H65.2a.576.576,0,0,1-.568-.569V5.812a.59.59,0,0,1,.568-.567h.516a.474.474,0,0,1,.5.375l.245.7a4.64,4.64,0,0,1,3.29-1.288C72.4,5.03,73.691,6.592,73.691,9.805Zm10.432-4.56h-.579c-.32,0-.4.236-.454.4l-.2.5a4.737,4.737,0,0,0-3.1-1.112A4.988,4.988,0,0,0,75.01,10.3a5.046,5.046,0,0,0,4.884,5.291,5.429,5.429,0,0,0,2.437-.64v.372c0,2.121-1.29,2.566-2.373,2.566a3.629,3.629,0,0,1-2.261-.9.547.547,0,0,0-.456-.111.535.535,0,0,0-.352.292l-.514.944a.551.551,0,0,0,.123.673A5.444,5.444,0,0,0,80,20.056a4.371,4.371,0,0,0,4.69-4.733V5.812A.582.582,0,0,0,84.123,5.245ZM80.151,13.36a2.979,2.979,0,0,1-2.8-3.06,2.7,2.7,0,0,1,5-1.715v4.029A3.973,3.973,0,0,1,80.151,13.36Z\"\n fill={color}\n />\n </svg>\n )\n}\n\nexport function Registrations({ color, size = 20 }): JSX.Element {\n return (\n <svg\n id=\"2da9f999-408b-4466-9b5d-b1268727ac81\"\n data-name=\"Layer 1\"\n xmlns=\"http://www.w3.org/2000/svg\"\n height={size}\n viewBox=\"0 0 105.758 20\"\n >\n <title>registrations-text</title>\n <path\n fill={color}\n d=\"M6.751,5.966,6.234,7.043a.589.589,0,0,1-.336.324.545.545,0,0,1-.423-.033,2.375,2.375,0,0,0-.854-.182A2.74,2.74,0,0,0,2.387,8.4v6.288c0,.59-.485.59-.8.59H.59a.6.6,0,0,1-.59-.59V5.679A.6.6,0,0,1,.59,5.09h.517a.574.574,0,0,1,.544.433l.212.685A4,4,0,0,1,4.836,4.874c.749,0,1.643.148,1.9.567A.517.517,0,0,1,6.751,5.966Zm9.583,3.593c0,.181-.022.53-.044.705a.578.578,0,0,1-.567.531H8.966a2.82,2.82,0,0,0,2.855,2.486,3.74,3.74,0,0,0,2.369-.819.608.608,0,0,1,.45-.148.465.465,0,0,1,.295.22l.583.907a.513.513,0,0,1-.065.819,5.708,5.708,0,0,1-3.762,1.256,5.046,5.046,0,0,1-5.1-5.331A5.083,5.083,0,0,1,11.67,4.874,4.572,4.572,0,0,1,16.334,9.559ZM11.627,6.937A2.411,2.411,0,0,0,9.087,8.97h4.874A2.23,2.23,0,0,0,11.627,6.937ZM26.8,5.679v9.55A4.407,4.407,0,0,1,22.071,20a5.486,5.486,0,0,1-3.53-1.284.564.564,0,0,1-.127-.7l.516-.948a.555.555,0,0,1,.365-.3.561.561,0,0,1,.474.114,3.622,3.622,0,0,0,2.259.905c1.078,0,2.364-.444,2.364-2.557v-.342a5.472,5.472,0,0,1-2.429.629,5.084,5.084,0,0,1-4.922-5.331,5.027,5.027,0,0,1,4.814-5.311,4.777,4.777,0,0,1,3.1,1.1l.2-.473c.053-.161.138-.415.473-.415h.582A.6.6,0,0,1,26.8,5.679ZM22.136,7.152a2.821,2.821,0,0,0-2.708,3.033,2.972,2.972,0,0,0,2.794,3.053,3.948,3.948,0,0,0,2.191-.74V8.468A2.834,2.834,0,0,0,22.136,7.152ZM29.965.6a1.544,1.544,0,0,0-1.538,1.582A1.55,1.55,0,0,0,29.965,3.74a1.571,1.571,0,1,0,0-3.141Zm.6,4.491H29.361a.6.6,0,0,0-.59.589v9.01a.59.59,0,0,0,.59.59h1.208a.6.6,0,0,0,.589-.59V5.679A.62.62,0,0,0,30.569,5.09Zm5.91,4c-1.059-.462-1.632-.815-1.632-1.36,0-.383.357-.769,1.155-.769a5.048,5.048,0,0,1,2.088.486.582.582,0,0,0,.8-.248l.345-.689a.709.709,0,0,0-.256-.882A5.713,5.713,0,0,0,36,4.874c-2.357,0-3.413,1.422-3.413,2.831,0,1.764,1.328,2.606,2.763,3.253,1.4.634,2.065,1.038,2.065,1.618,0,.528-.459.856-1.2.856a4.5,4.5,0,0,1-2.387-.7l-.034-.018a.644.644,0,0,0-.5-.076.494.494,0,0,0-.3.254l-.452.925a.517.517,0,0,0,.208.663h0a5.917,5.917,0,0,0,3.342,1.034c2.411,0,3.672-1.522,3.672-3.025C39.761,10.617,38.461,9.926,36.479,9.087Zm10.558,3.964a.556.556,0,0,0-.316-.335.523.523,0,0,0-.432.063,3.244,3.244,0,0,1-1.537.459c-.359,0-.681-.069-.681-.9V7.152h2.514a.605.605,0,0,0,.59-.59V5.679a.577.577,0,0,0-.59-.589H44.071V2.424a.574.574,0,0,0-.569-.59H42.273a.59.59,0,0,0-.589.59V5.09H40.657a.57.57,0,0,0-.59.589v.883a.59.59,0,0,0,.59.59h1.027v5.274c0,1.438.3,3.09,2.637,3.09a6.116,6.116,0,0,0,2.822-.729.556.556,0,0,0,.283-.721Zm8.023-7.61c-.263-.419-1.156-.567-1.905-.567a4,4,0,0,0-2.973,1.335l-.212-.686a.574.574,0,0,0-.544-.433h-.517a.6.6,0,0,0-.59.589v9.01a.59.59,0,0,0,.59.59H49.9c.321,0,.806,0,.806-.59V8.4A2.738,2.738,0,0,1,52.94,7.152a2.369,2.369,0,0,1,.853.182.548.548,0,0,0,.424.033.6.6,0,0,0,.336-.324l.517-1.077A.517.517,0,0,0,55.06,5.441Zm8.351,3.946v5.3a.605.605,0,0,1-.59.59H62.11c-.284,0-.412-.166-.516-.416l-.181-.509A4.386,4.386,0,0,1,58.4,15.516a3.2,3.2,0,0,1-3.328-3.435c0-2.021,1.611-3.327,4.1-3.327a7.7,7.7,0,0,1,1.892.265,2.3,2.3,0,0,0-.417-1.668A1.414,1.414,0,0,0,59.588,7a10.1,10.1,0,0,0-2.749.47.577.577,0,0,1-.7-.494l-.194-.82a.566.566,0,0,1,.4-.717A10.865,10.865,0,0,1,59.8,4.874C63.14,4.874,63.411,6.918,63.411,9.387Zm-4.06,1.149c-1.174,0-1.933.6-1.933,1.524a1.343,1.343,0,0,0,1.436,1.458,2.987,2.987,0,0,0,2.191-1.125V10.835A4.853,4.853,0,0,0,59.351,10.536Zm11.773,2.515a.556.556,0,0,0-.316-.335.523.523,0,0,0-.432.063,3.244,3.244,0,0,1-1.537.459c-.359,0-.681-.069-.681-.9V7.152h2.514a.605.605,0,0,0,.59-.59V5.679a.577.577,0,0,0-.59-.589H68.158V2.424a.574.574,0,0,0-.569-.59H66.36a.591.591,0,0,0-.59.59V5.09H64.744a.57.57,0,0,0-.59.589v.883a.591.591,0,0,0,.59.59H65.77v5.274c0,1.438.3,3.09,2.638,3.09a6.107,6.107,0,0,0,2.821-.729.556.556,0,0,0,.284-.721ZM74.2,5.09H72.994a.605.605,0,0,0-.591.589v9.01a.591.591,0,0,0,.591.59H74.2a.605.605,0,0,0,.59-.59V5.679A.621.621,0,0,0,74.2,5.09ZM73.6.6a1.543,1.543,0,0,0-1.538,1.582A1.55,1.55,0,0,0,73.6,3.74,1.571,1.571,0,1,0,73.6.6Zm12.869,9.563a5.341,5.341,0,0,1-5.182,5.354,5.323,5.323,0,1,1,5.182-5.354Zm-2.344,0a2.853,2.853,0,1,0-5.7,0,2.857,2.857,0,1,0,5.7,0Zm8.867-5.288a4.7,4.7,0,0,0-3.3,1.277l-.235-.671a.5.5,0,0,0-.522-.39h-.518a.6.6,0,0,0-.589.589v9.01a.6.6,0,0,0,.589.59h1.1c.469,0,.7-.192.7-.59V8.507A2.939,2.939,0,0,1,92.73,7.152c1.191,0,1.847.87,1.847,2.451v5.086a.6.6,0,0,0,.59.59h1.207a.605.605,0,0,0,.59-.59v-5C96.964,6.448,95.664,4.874,92.989,4.874Zm9.2,4.213c-1.059-.462-1.633-.815-1.633-1.36,0-.383.358-.769,1.156-.769a5.04,5.04,0,0,1,2.087.486.585.585,0,0,0,.8-.248l.344-.689a.709.709,0,0,0-.255-.882,5.718,5.718,0,0,0-2.974-.751C99.355,4.874,98.3,6.3,98.3,7.705c0,1.764,1.328,2.606,2.763,3.253,1.4.634,2.066,1.038,2.066,1.618,0,.528-.46.856-1.2.856a4.49,4.49,0,0,1-2.387-.7l-.034-.018A.633.633,0,0,0,99,12.64a.49.49,0,0,0-.3.253l-.452.925a.516.516,0,0,0,.209.663h0a5.923,5.923,0,0,0,3.342,1.034c2.411,0,3.673-1.522,3.673-3.025C105.472,10.617,104.172,9.926,102.19,9.087Z\"\n />\n </svg>\n )\n}\n\nexport function Services({ color, size = 20 }): JSX.Element {\n return (\n <svg\n id=\"bd77a8f3-6992-4241-927e-9fdc3bf67b80\"\n data-name=\"Layer 1\"\n xmlns=\"http://www.w3.org/2000/svg\"\n height={size}\n viewBox=\"0 0 67.995 20\"\n >\n <title>services-text</title>\n <path\n fill={color}\n d=\"M7.277,12.49c0,1.5-1.262,3.026-3.672,3.026A5.924,5.924,0,0,1,.262,14.482h0a.521.521,0,0,1-.209-.663L.5,12.893a.5.5,0,0,1,.305-.254.62.62,0,0,1,.5.075l.036.019a4.479,4.479,0,0,0,2.385.7c.74,0,1.2-.328,1.2-.856,0-.582-.666-.985-2.066-1.618C1.432,10.311.105,9.469.105,7.705c0-1.41,1.055-2.832,3.413-2.832a5.717,5.717,0,0,1,2.974.752.7.7,0,0,1,.255.881L6.4,7.2a.58.58,0,0,1-.8.248,5.04,5.04,0,0,0-2.087-.485c-.8,0-1.155.386-1.155.768,0,.546.573.9,1.632,1.361C5.977,9.925,7.277,10.615,7.277,12.49ZM17.622,9.559c0,.178-.022.528-.044.7a.58.58,0,0,1-.568.532H10.255a2.818,2.818,0,0,0,2.854,2.485,3.734,3.734,0,0,0,2.369-.819.64.64,0,0,1,.451-.148.472.472,0,0,1,.294.22l.583.907a.513.513,0,0,1-.065.82,5.715,5.715,0,0,1-3.761,1.256,5.047,5.047,0,0,1-5.1-5.332,5.083,5.083,0,0,1,5.074-5.311A4.573,4.573,0,0,1,17.622,9.559ZM15.249,8.97a2.229,2.229,0,0,0-2.334-2.034,2.412,2.412,0,0,0-2.54,2.034Zm8.511-4.1a3.929,3.929,0,0,0-2.972,1.338l-.213-.688a.575.575,0,0,0-.544-.434h-.518a.6.6,0,0,0-.589.589v9.01a.6.6,0,0,0,.589.59h.992c.32,0,.8,0,.8-.59V8.4a2.74,2.74,0,0,1,2.235-1.249,2.351,2.351,0,0,1,.854.183.534.534,0,0,0,.424.032.584.584,0,0,0,.334-.323l.518-1.077a.517.517,0,0,0-.01-.525C25.4,5.022,24.509,4.873,23.76,4.873Zm11.569.216H34.36c-.288,0-.613,0-.774.348l-2.695,5.912L28.319,5.433a.545.545,0,0,0-.535-.344H26.469a.544.544,0,0,0-.493.238.489.489,0,0,0,.024.49l4.311,9.376a.6.6,0,0,0,.534.323h.13a.56.56,0,0,0,.514-.327L35.8,5.822a.49.49,0,0,0,.027-.5A.545.545,0,0,0,35.329,5.089Zm3.154,0H37.276a.6.6,0,0,0-.59.589v9.01a.6.6,0,0,0,.59.59h1.207a.605.605,0,0,0,.59-.59V5.678A.621.621,0,0,0,38.483,5.089ZM37.879.6A1.543,1.543,0,0,0,36.341,2.18a1.532,1.532,0,0,0,1.538,1.559,1.57,1.57,0,1,0,0-3.14Zm10.8,11.392a.567.567,0,0,0-.818.047c-.08.073-.16.152-.241.233a2.623,2.623,0,0,1-2.031.966,2.92,2.92,0,0,1-2.838-3.053,2.778,2.778,0,0,1,4.87-2.073c.165.164.444.443.806.11l.774-.71a.606.606,0,0,0,.1-.87,4.465,4.465,0,0,0-3.711-1.768,5.285,5.285,0,0,0-5.225,5.332,5.2,5.2,0,0,0,5.2,5.311,4.647,4.647,0,0,0,3.977-2.12c.13-.2.2-.5-.2-.866ZM59.784,9.559c0,.178-.022.528-.044.7a.58.58,0,0,1-.567.532H52.417a2.818,2.818,0,0,0,2.854,2.485,3.734,3.734,0,0,0,2.369-.819.641.641,0,0,1,.451-.148.472.472,0,0,1,.294.22l.583.907a.513.513,0,0,1-.065.82,5.712,5.712,0,0,1-3.761,1.256,5.047,5.047,0,0,1-5.1-5.332A5.083,5.083,0,0,1,55.12,4.873,4.573,4.573,0,0,1,59.784,9.559ZM52.537,8.97h4.874a2.229,2.229,0,0,0-2.334-2.034A2.412,2.412,0,0,0,52.537,8.97ZM64.4,9.087c-1.06-.462-1.633-.816-1.633-1.361,0-.382.357-.768,1.156-.768a5.047,5.047,0,0,1,2.087.485.58.58,0,0,0,.8-.248l.344-.689a.706.706,0,0,0-.256-.881,5.71,5.71,0,0,0-2.973-.752c-2.358,0-3.414,1.422-3.414,2.832,0,1.764,1.328,2.606,2.763,3.253,1.4.633,2.066,1.036,2.066,1.618,0,.528-.459.856-1.2.856a4.485,4.485,0,0,1-2.384-.7l-.037-.02a.632.632,0,0,0-.5-.075.493.493,0,0,0-.3.254l-.452.925a.521.521,0,0,0,.209.663h0a5.923,5.923,0,0,0,3.342,1.034c2.412,0,3.673-1.522,3.673-3.026C67.685,10.615,66.385,9.925,64.4,9.087Z\"\n />\n </svg>\n )\n}\n","import React from \"react\"\n\nimport * as MonoAppText from \"./mono_app_text\"\n\nexport function MonoAppName({ appName, color, size = 20 }) {\n return MonoAppText[appName] ? (\n React.createElement(MonoAppText[appName], { color, size })\n ) : (\n <div>appName not supported</div>\n )\n}\n","export const slightBackgroundTransition = {\n transition: \"background-color 120ms ease-in\",\n}\n\nexport const fontFamily = {\n fontFamily: `inherit`,\n}\n\nexport const IEFlex1 = {\n flex: \"1 1 auto\",\n}\n","import React from \"react\"\n\nexport const Bell = ({\n dot = false,\n dotFill = \"#fff\",\n fill = \"#fff\",\n style,\n ...props\n}: {\n dot?: boolean\n dotFill?: string\n fill?: string\n style?: object\n}) => {\n const bellPath = (\n <path\n d=\"M21.482,16.626,19.1,13.649V9a7,7,0,0,0-14,0v4.649L2.478,16.929A1.89,1.89,0,0,0,3.952,20H9.285a2.983,2.983,0,0,0,5.633,0H19.86a2.077,2.077,0,0,0,1.622-3.374ZM19.86,18H4.182l2.7-3.375A1,1,0,0,0,7.1,14V9a5,5,0,0,1,10,0v5a1,1,0,0,0,.219.625l2.6,3.25Z\"\n fill=\"white\"\n />\n )\n return (\n <svg\n width=\"24\"\n height=\"24\"\n viewBox=\"0 0 24 24\"\n style={{ display: \"block\", ...style }}\n {...props}\n stroke=\"none\"\n >\n <title>bell</title>\n <defs>\n <mask id=\"mask-no-dot\">{bellPath}</mask>\n <mask id=\"mask-dot\">\n {bellPath}\n <circle cx=\"18\" cy=\"6\" fill=\"black\" r=\"7\" />\n </mask>\n </defs>\n <rect\n fill={fill}\n height=\"24\"\n mask={dot ? \"url(#mask-dot)\" : \"url(#mask-no-dot\"}\n width=\"24\"\n x=\"0\"\n y=\"0\"\n />\n {dot && <circle cx=\"18\" cy=\"6\" r=\"4\" fill={dotFill || fill} />}\n </svg>\n )\n}\n\nexport const BlankStateIcon = ({\n dark = false,\n id = \"default\",\n style,\n ...nativeProps\n}: {\n dark?: boolean\n id?: string\n style?: object\n}) => (\n <svg\n fill=\"none\"\n height=\"123\"\n style={{ ...style }}\n width=\"160\"\n {...nativeProps}\n >\n <g clipPath={`url(#clip-path-blank-state-${id})`}>\n <path\n opacity=\".6\"\n d=\"M155.367 66.751c-6.081 17.955-18.824 33.158-32.579 41.991-14.045 8.977-28.96 11.294-46.19 7.529-16.941-3.764-33.738-11.583-47.638-18.968C15.204 89.63 4.344 82.533 1.593 71.385-1.013 60.525 4.78 45.61 18.68 30.842 32.435 16.362 54.3 2.896 80.362.579c25.919-2.606 49.666 6.082 63.276 18.534 13.901 12.597 17.666 29.828 11.729 47.638z\"\n fill={dark ? \"#414141\" : \"#E1F0F9\"}\n />\n <g opacity=\".2\">\n <path\n opacity=\".2\"\n d=\"M90.643 122.063c-9.702 0-19.258-2.606-29.25-7.674-12.741-6.66-26.352-16.796-41.41-30.841C8.832 72.688-.29 62.697 0 50.678c.145-8.542 5.503-17.81 14.914-26.352l1.448 1.593c-9.122 8.108-14.19 16.94-14.335 24.76-.29 11.294 8.543 20.85 19.403 31.42C36.344 96 49.81 105.992 62.263 112.508c13.031 6.805 25.629 8.977 38.371 6.516l.434 2.027c-3.475.724-6.95 1.013-10.425 1.013zM116.706 115.982l-.869-1.738c13.756-6.226 25.919-16.507 34.027-28.67l1.738 1.159c-8.254 12.453-20.706 22.878-34.896 29.249zM158.552 71.385l-2.027-.58c2.896-11.294.869-22.877-5.792-33.303-10.715-17.086-32-29.973-55.457-33.882-19.258-3.475-40.108-.29-58.642 8.688l-.869-1.883c18.824-9.122 40.109-12.307 59.8-8.832 24.037 3.91 45.901 17.23 56.906 34.75 7.095 11.005 9.267 23.023 6.081 35.042z\"\n fill=\"#BAC7D3\"\n />\n </g>\n <path\n d=\"M115.258 20.706l-.145 4.199c0 .869.289 1.882 1.013 2.461l3.186 2.752c.724.724.29 1.882-.724 1.882l-4.199-.145c-.869 0-1.882.29-2.462 1.014l-2.896 3.33c-.724.724-1.882.29-1.882-.724l.145-4.199c0-.869-.29-1.882-1.014-2.462l-3.185-2.75c-.724-.725-.29-1.883.724-1.883l4.199.145c.869 0 1.882-.29 2.461-1.014l2.751-3.185c.724-.87 2.028-.435 2.028.579zM92.959 30.842v1.882c0 .434.144.869.579 1.158l1.448 1.159c.29.29.145.869-.29.869h-1.882c-.434 0-.869.144-1.158.579l-1.159 1.448c-.29.29-.869.145-.869-.29v-1.882c0-.435-.144-.869-.579-1.159l-1.448-1.158c-.29-.29-.145-.869.29-.869h1.882c.435 0 .869-.145 1.159-.579l1.158-1.448c.29-.434.869-.29.869.29z\"\n fill=\"#FCC846\"\n />\n <path\n d=\"M68.778 36.633l-19.982 57.63 57.919-20.127-37.937-37.502z\"\n fill=\"#48A5E5\"\n />\n <path\n d=\"M82.099 54.299H62.696l2.027-5.647h12.308l5.068 5.647zM99.91 70.082H57.194l2.027-5.648h33.737l6.95 5.648zM72.398 85.864H51.692l1.737-5.647h35.91l-16.941 5.647z\"\n fill=\"#79CAF2\"\n />\n <path\n d=\"M107.613 73.964c1.44-1.5-6.087-11.069-16.813-21.374-10.726-10.305-20.588-17.443-22.029-15.944-1.44 1.5 6.087 11.069 16.813 21.374 10.726 10.305 20.588 17.443 22.029 15.944z\"\n fill={dark ? \"#525252\" : \"#636363\"}\n />\n <path\n d=\"M113.086 55.747h-3.041c-.724 0-1.303.29-1.737.868l-1.883 2.607c-.434.579-1.448.29-1.448-.435l-.144-3.185c0-.724-.29-1.303-.869-1.738l-2.607-1.882c-.579-.434-.289-1.448.435-1.448l3.185-.145c.724 0 1.303-.29 1.738-.869l1.882-2.606c.435-.58 1.448-.29 1.448.434l.145 3.186c0 .724.29 1.303.869 1.738l2.606 1.882c.579.58.29 1.593-.579 1.593z\"\n fill=\"#FCC846\"\n />\n </g>\n <defs>\n <clipPath id={`clip-path-blank-state-${id}`}>\n <path fill=\"#fff\" d=\"M0 0h160v122.063H0z\" />\n </clipPath>\n </defs>\n </svg>\n)\n\nexport const ChevronIcon = ({\n fill = \"#000\",\n size = 24,\n style,\n ...nativeProps\n}: {\n fill?: string\n size?: number\n style?: object\n}) => (\n <svg\n height={size}\n style={{ display: \"block\", ...style }}\n viewBox=\"0 0 16 16\"\n width={size}\n {...nativeProps}\n >\n <title>chevron</title>\n <path\n d=\"M10.209 16L2.255 8.045L10.209 0.0910034L11.977 1.859L5.789 8.045L11.977 14.233L10.209 16Z\"\n fill={fill}\n />\n </svg>\n)\n\nexport const Cog = ({\n fill = \"#000\",\n size = 24,\n style,\n ...nativeProps\n}: {\n fill?: string\n size?: number\n style?: object\n}) => (\n <svg\n height={size}\n style={{ display: \"block\", ...style }}\n viewBox=\"0 0 16 16\"\n width={size}\n {...nativeProps}\n >\n <title>cog icon</title>\n <path\n d=\"M15.975 7.169H15.965L14.44 6.91C14.3024 6.90264 14.1694 6.85837 14.0548 6.78182C13.9403 6.70528 13.8484 6.59929 13.789 6.475C13.653 5.95399 13.4465 5.45403 13.175 4.989C13.1286 4.85874 13.118 4.71844 13.1442 4.58267C13.1704 4.44691 13.2325 4.32064 13.324 4.217L14.224 2.957L14.23 2.949C14.24 2.934 14.24 2.923 14.23 2.914L14.2 2.89L14.155 2.844L13.155 1.844L13.095 1.784L13.085 1.775C13.076 1.765 13.065 1.765 13.05 1.775L11.782 2.675C11.6788 2.76662 11.5529 2.82887 11.4175 2.85525C11.2821 2.88164 11.142 2.87119 11.012 2.825C10.5462 2.55339 10.0456 2.34649 9.524 2.21C9.40004 2.1505 9.29435 2.05878 9.218 1.94443C9.14164 1.83007 9.09744 1.6973 9.09 1.56L8.833 0.035V0.025C8.828 0.008 8.821 0 8.807 0H7.193C7.179 0 7.172 0.008 7.169 0.025L6.91 1.56C6.90286 1.69763 6.85866 1.83078 6.7821 1.94537C6.70553 2.05996 6.59942 2.15173 6.475 2.211C5.95399 2.34697 5.45403 2.55355 4.989 2.825C4.85874 2.87138 4.71844 2.88203 4.58267 2.85583C4.44691 2.82962 4.32064 2.76753 4.217 2.676L2.957 1.776L2.949 1.77C2.934 1.76 2.923 1.76 2.914 1.77L2.89 1.8L2.844 1.845L1.844 2.845L1.784 2.905L1.775 2.915C1.765 2.924 1.765 2.935 1.775 2.95L2.675 4.218C2.76662 4.32118 2.82887 4.44706 2.85525 4.5825C2.88164 4.71794 2.87119 4.85797 2.825 4.988C2.55382 5.45174 2.34724 5.95035 2.211 6.47C2.15164 6.59477 2.05996 6.70138 1.94549 6.77875C1.83101 6.85612 1.69791 6.90144 1.56 6.91L0.035 7.167H0.025C0.008 7.167 0 7.177 0 7.191V8.807C0 8.821 0.008 8.828 0.025 8.831L1.56 9.09C1.69791 9.09856 1.83101 9.14388 1.94549 9.22125C2.05996 9.29862 2.15164 9.40523 2.211 9.53C2.34701 10.0494 2.5536 10.5477 2.825 11.011C2.87138 11.1413 2.88203 11.2816 2.85583 11.4173C2.82962 11.5531 2.76753 11.6794 2.676 11.783L1.776 13.051C1.766 13.066 1.766 13.077 1.776 13.086L1.785 13.096L1.845 13.156L2.845 14.156L2.891 14.201L2.915 14.225C2.924 14.235 2.935 14.235 2.95 14.225L2.958 14.219L4.218 13.319C4.32118 13.2274 4.44706 13.1651 4.5825 13.1387C4.71794 13.1124 4.85797 13.1228 4.988 13.169C5.452 13.4406 5.95095 13.6475 6.471 13.784C6.59563 13.8433 6.70214 13.9348 6.77951 14.0491C6.85687 14.1634 6.90227 14.2963 6.911 14.434L7.17 15.97C7.17 15.987 7.18 15.995 7.194 15.995H8.807C8.821 15.995 8.828 15.987 8.831 15.97V15.96L9.088 14.434C9.09673 14.2963 9.14213 14.1634 9.21949 14.0491C9.29686 13.9348 9.40337 13.8433 9.528 13.784C10.0474 13.648 10.5457 13.4414 11.009 13.17C11.1393 13.1236 11.2796 13.113 11.4153 13.1392C11.5511 13.1654 11.6774 13.2275 11.781 13.319L13.049 14.219C13.064 14.229 13.075 14.229 13.084 14.219L13.094 14.21L13.154 14.15L14.154 13.15L14.199 13.104L14.223 13.08C14.233 13.071 14.233 13.06 14.223 13.045L14.217 13.037L13.317 11.777C13.2254 11.6738 13.1631 11.5479 13.1367 11.4125C13.1104 11.2771 13.1208 11.137 13.167 11.007C13.4386 10.543 13.6455 10.044 13.782 9.524C13.8414 9.39923 13.933 9.29262 14.0475 9.21525C14.162 9.13788 14.2951 9.09256 14.433 9.084L15.968 8.825C15.985 8.825 15.993 8.815 15.993 8.801V7.193C16 7.179 15.992 7.172 15.975 7.169ZM10.619 10.619C10.1012 11.1357 9.44195 11.4873 8.72443 11.6295C8.00691 11.7716 7.26336 11.6979 6.58772 11.4176C5.91208 11.1374 5.33467 10.6631 4.92844 10.0548C4.52222 9.44652 4.30541 8.73147 4.30541 8C4.30541 7.26854 4.52222 6.55348 4.92844 5.94519C5.33467 5.33689 5.91208 4.86265 6.58772 4.58238C7.26336 4.30211 8.00691 4.22839 8.72443 4.37054C9.44195 4.51268 10.1012 4.86431 10.619 5.381C10.9634 5.72468 11.2366 6.1329 11.423 6.5823C11.6095 7.03171 11.7054 7.51346 11.7054 8C11.7054 8.48654 11.6095 8.96829 11.423 9.4177C11.2366 9.8671 10.9634 10.2753 10.619 10.619Z\"\n fill={fill}\n />\n </svg>\n)\n\nexport const DisclosureChevronIcon = ({\n colors,\n style,\n ...nativeProps\n}: {\n colors: any\n style?: object\n}) => (\n <svg\n color={colors.base3}\n height=\"16\"\n viewBox=\"0 0 16 16\"\n width=\"16\"\n {...{ style }}\n {...nativeProps}\n >\n <title>chevron</title>\n <polygon\n fill=\"currentColor\"\n points=\"11.931 4.892 8 8.824 4.069 4.892 2.927 6.034 8 11.108 9.142 9.966 13.073 6.034 11.931 4.892\"\n />\n </svg>\n)\n\nexport const HelpIcon = ({\n colors,\n style,\n ...nativeProps\n}: {\n colors: any\n style?: object\n}) => (\n <svg\n color={colors.base3}\n height=\"24\"\n style={{ display: \"block\" }}\n viewBox=\"0 0 24 24\"\n width=\"24\"\n {...nativeProps}\n >\n <title>help</title>\n <path\n d=\"M12,22A10,10,0,1,1,22,12,10.011,10.011,0,0,1,12,22ZM12,4a8,8,0,1,0,8,8A8.009,8.009,0,0,0,12,4Zm-.342,11.067a1.41,1.41,0,1,0,1.41,1.41A1.41,1.41,0,0,0,11.658,15.067Zm1.914-2.488c1.938-1.885,2.232-3.607.872-5.118A3.37,3.37,0,0,0,11.9,6.307h-.017A5.121,5.121,0,0,0,8.343,7.959L9.817,9.311a3.153,3.153,0,0,1,2.067-1h.008a1.366,1.366,0,0,1,1.065.493c.494.549.517,1.085-.78,2.345A4.612,4.612,0,0,0,10.632,14.2h2A2.733,2.733,0,0,1,13.572,12.579Z\"\n fill=\"currentColor\"\n />\n </svg>\n)\n\nexport const ExclamationTriangle = ({\n fill = \"#000\",\n size = 24,\n style,\n ...nativeProps\n}: {\n fill?: string\n size: number\n style?: object\n}) => (\n <svg\n height={size}\n style={{ display: \"block\", ...style }}\n viewBox=\"0 0 16 16\"\n width={size}\n {...nativeProps}\n >\n <title>exclamation triangle icon</title>\n <path\n d=\"M15.669 13.676L8.65499 1.56099C8.58867 1.44593 8.49322 1.35037 8.37823 1.28392C8.26325 1.21748 8.13279 1.1825 7.99999 1.1825C7.86718 1.1825 7.73672 1.21748 7.62174 1.28392C7.50675 1.35037 7.4113 1.44593 7.34499 1.56099L0.330986 13.676C0.264196 13.7911 0.228916 13.9217 0.2287 14.0548C0.228484 14.1878 0.26334 14.3186 0.329756 14.4339C0.396172 14.5492 0.491802 14.6449 0.60701 14.7115C0.722218 14.778 0.852933 14.813 0.985986 14.813H15.014C15.147 14.813 15.2778 14.778 15.393 14.7115C15.5082 14.6449 15.6038 14.5492 15.6702 14.4339C15.7366 14.3186 15.7715 14.1878 15.7713 14.0548C15.7711 13.9217 15.7358 13.7911 15.669 13.676ZM8.75699 12.542H7.24299V11.028H8.75699V12.542ZM8.75699 9.51399H7.24299V6.48499H8.75699V9.51399Z\"\n fill={fill}\n />\n </svg>\n)\n\nexport const Spyglass = ({\n fill = \"#000\",\n style,\n ...nativeProps\n}: {\n fill?: string\n style?: object\n}) => (\n <svg\n width=\"24\"\n height=\"24\"\n viewBox=\"0 0 24 24\"\n style={{ display: \"block\", ...style }}\n {...nativeProps}\n >\n <title>search spyglass icon</title>\n <path\n d=\"M17.352,15.481a8.517,8.517,0,1,0-2.209,2.033l4.642,4.642,2.121-2.121Zm-6.757,1.364a6.5,6.5,0,1,1,6.5-6.5A6.508,6.508,0,0,1,10.595,16.845Z\"\n fill={fill}\n />\n </svg>\n)\n\nexport const X = ({\n fill = \"#A0A0A0\",\n style,\n ...nativeProps\n}: {\n fill?: string\n style?: object\n}) => (\n <svg\n width=\"16\"\n height=\"16\"\n viewBox=\"0 0 16 16\"\n style={{ display: \"block\", ...style }}\n {...nativeProps}\n >\n <title>close-x</title>\n <path\n d=\"M9.142,8l3.814,3.814-1.142,1.142L8,9.142,4.186,12.956,3.044,11.814,6.858,8,3.044,4.186,4.186,3.044,8,6.858l3.814-3.814,1.142,1.142Z\"\n fill={fill}\n />\n </svg>\n)\n","import React from \"react\"\n\nimport { fontFamily } from \"./styles\"\n\nexport function Unbutton({\n style,\n ...nativeProps\n}: {\n children: any\n id?: string\n onClick?: any\n onMouseDown?: any\n onMouseEnter?: any\n onMouseLeave?: any\n onMouseUp?: any\n style?: object\n}): JSX.Element {\n return (\n <button\n style={{\n WebkitAppearance: \"none\",\n appearance: \"none\",\n backgroundColor: \"transparent\",\n border: \"none\",\n cursor: \"pointer\",\n display: \"inline-block\",\n outline: 0,\n padding: 0,\n ...fontFamily,\n ...style,\n }}\n {...nativeProps}\n />\n )\n}\n","import React from \"react\"\n\nimport { MonoAppIcon } from \"../mono_app_icon\"\nimport { MonoAppName } from \"../mono_app_name\"\nimport { slightBackgroundTransition } from \"../styles\"\nimport { DisclosureChevronIcon } from \"../symbols\"\nimport { Unbutton } from \"../unbutton\"\n\nconst AppsButton = ({\n appName,\n colors,\n displayIconOnly,\n expanded,\n onClick,\n style = null,\n ...nativeProps\n}: {\n appName: string\n colors: any\n displayIconOnly?: boolean\n expanded: boolean\n onClick: any\n style?: object\n}) => {\n const [down, setDown] = React.useState(false)\n const [entered, setEntered] = React.useState(false)\n\n const getBackgroundColor = () => {\n if (expanded && !down) return colors.base1\n if (entered && down) return colors.base2\n if (entered) return colors.base1\n return \"transparent\"\n }\n\n return (\n <Unbutton\n onClick={onClick}\n onMouseDown={() => setDown(true)}\n onMouseEnter={() => setEntered(true)}\n onMouseLeave={() => setEntered(false)}\n onMouseUp={() => setDown(false)}\n style={{\n alignItems: \"center\",\n backgroundColor: getBackgroundColor(),\n display: \"flex\",\n height: \"100%\",\n outline: 0, // TODO: #improve-outline-a11y\n paddingLeft: \"16px\",\n paddingRight: \"16px\",\n whiteSpace: \"nowrap\",\n ...slightBackgroundTransition,\n ...style,\n }}\n {...nativeProps}\n >\n <MonoAppIcon\n appName={appName.replace(/[\\s-]/, \"\")}\n colors={colors}\n size={24}\n />\n {!displayIconOnly && (\n <>\n {appName === \"Accounts\" ? (\n <div\n style={{\n color: \"#fff\",\n fontSize: \"14px\",\n fontWeight: 500,\n marginLeft: 3,\n }}\n >\n Account settings\n </div>\n ) : (\n <>\n <div key=\"spacer-1\" style={{ margin: 4 }} />\n <MonoAppName\n appName={appName.replace(/[\\s-]/, \"\")}\n color=\"#fff\"\n key=\"mono-app-name\"\n size={24}\n />\n </>\n )}\n <div key=\"space-2\" style={{ margin: 4 }} />\n <DisclosureChevronIcon\n colors={colors}\n key=\"disclosure-chevron-icon\"\n style={{ display: \"block\" }}\n />\n </>\n )}\n </Unbutton>\n )\n}\n\nexport default AppsButton\n","// TODO: Use Fragments when we React 16 is a baseline\nimport React from \"react\"\n\nexport function Accounts(): JSX.Element[] {\n return [\n <defs key=\"def\">\n <linearGradient\n id=\"2e1ed2e7-b842-4126-8f57-f6b6dd63ddb6\"\n x1=\"1.844\"\n y1=\"1.833\"\n x2=\"18.622\"\n y2=\"18.612\"\n gradientUnits=\"userSpaceOnUse\"\n >\n <stop offset=\"0\" stopColor=\"#32a0f0\" />\n <stop offset=\"1\" stopColor=\"#3f75e5\" />\n </linearGradient>\n </defs>,\n <title key=\"title\">accounts-squircle</title>,\n <path\n key=\"path\"\n d=\"M19.96,10c0,7.962-1.991,9.952-9.952,9.952S.056,17.959.056,10,2.047.045,10.008.045,19.96,2.036,19.96,10Z\"\n fill=\"url(#2e1ed2e7-b842-4126-8f57-f6b6dd63ddb6)\"\n />,\n ]\n}\n\nexport function API(): JSX.Element[] {\n return [\n <defs key=\"def\">\n <linearGradient\n id=\"c8ec303e-a96d-4850-93ae-70864e3306bb\"\n x1=\"0.991\"\n y1=\"0.983\"\n x2=\"19.295\"\n y2=\"19.288\"\n gradientUnits=\"userSpaceOnUse\"\n >\n <stop offset=\"0\" stopColor=\"#32a0f0\" />\n <stop offset=\"1\" stopColor=\"#3f75e5\" />\n </linearGradient>\n </defs>,\n <title key=\"title\">api-squircle</title>,\n <path\n key=\"path\"\n d=\"M20,10c0,7.991-2,9.989-9.989,9.989S.019,17.991.019,10s2-9.989,9.989-9.989S20,2.009,20,10Z\"\n fill=\"url(#c8ec303e-a96d-4850-93ae-70864e3306bb)\"\n />,\n ]\n}\n\nexport function Calendar(): JSX.Element[] {\n return [\n <defs key=\"defs\">\n <linearGradient\n id=\"calendar-gradient\"\n x1=\"2.05\"\n y1=\"2.04\"\n x2=\"17.97\"\n y2=\"17.96\"\n gradientUnits=\"userSpaceOnUse\"\n >\n <stop offset=\"0\" stopColor=\"#f25437\" />\n <stop offset=\"1\" stopColor=\"#cd4e39\" />\n </linearGradient>\n </defs>,\n <title key=\"title\">calendar-squircle</title>,\n <path\n key=\"path\"\n d=\"M20,10c0,8-2,10-10,10S.06,18,.06,10,2.05.05,10,.05,20,2,20,10Z\"\n fill=\"url(#calendar-gradient)\"\n />,\n ]\n}\n\nexport function CheckIns(): JSX.Element[] {\n return [\n <defs key=\"def\">\n <linearGradient\n id=\"679bc2bf-38c8-45ab-9ee3-a2ff814fead7\"\n x1=\"1.75\"\n y1=\"1.739\"\n x2=\"18.156\"\n y2=\"18.145\"\n gradientUnits=\"userSpaceOnUse\"\n >\n <stop offset=\"0\" stopColor=\"#a76ebe\" />\n <stop offset=\"1\" stopColor=\"#875e96\" />\n </linearGradient>\n </defs>,\n <title key=\"title\">check-ins-squircle</title>,\n <path\n key=\"path\"\n d=\"M10.008.045C2.047.045.056,2.036.056,10s1.991,9.952,9.952,9.952S19.96,17.959,19.96,10,17.969.045,10.008.045Z\"\n fill=\"url(#679bc2bf-38c8-45ab-9ee3-a2ff814fead7)\"\n />,\n ]\n}\n\nexport function ChurchCenter(): JSX.Element[] {\n return [\n <defs key=\"def\">\n <linearGradient\n id=\"6de99831-a6f8-498e-9bf3-9d55c8d887fa\"\n x1=\"2.04\"\n y1=\"2.029\"\n x2=\"17.976\"\n y2=\"17.965\"\n gradientUnits=\"userSpaceOnUse\"\n >\n <stop offset=\"0\" stopColor=\"#42a5f5\" />\n <stop offset=\"1\" stopColor=\"#66bb6a\" />\n </linearGradient>\n </defs>,\n <title key=\"title\">church-center-squircle</title>,\n <path\n key=\"path\"\n d=\"M10.008.037C2.04.037.048,2.029.048,10s1.992,9.96,9.96,9.96,9.96-1.992,9.96-9.96S17.976.037,10.008.037Z\"\n fill=\"url(#6de99831-a6f8-498e-9bf3-9d55c8d887fa)\"\n />,\n ]\n}\n\nexport function Giving(): JSX.Element[] {\n return [\n <defs key=\"def\">\n <linearGradient\n id=\"0aae6372-b733-476d-af45-8777c08c1e24\"\n x1=\"2.047\"\n y1=\"2.036\"\n x2=\"17.969\"\n y2=\"17.959\"\n gradientUnits=\"userSpaceOnUse\"\n >\n <stop offset=\"0\" stopColor=\"#f5c426\" />\n <stop offset=\"1\" stopColor=\"#f2b327\" />\n </linearGradient>\n </defs>,\n <title key=\"title\">giving-squircle</title>,\n <path\n key=\"path\"\n d=\"M10.008.045C2.047.045.056,2.036.056,10s1.991,9.952,9.952,9.952S19.96,17.959,19.96,10,17.969.045,10.008.045Z\"\n fill=\"url(#0aae6372-b733-476d-af45-8777c08c1e24)\"\n />,\n ]\n}\n\nexport function Groups(): JSX.Element[] {\n return [\n <defs key=\"def\">\n <linearGradient\n id=\"86d10072-1c7f-4a02-88fe-0735565ae99a\"\n x1=\"1.939\"\n y1=\"1.928\"\n x2=\"18.146\"\n y2=\"18.135\"\n gradientUnits=\"userSpaceOnUse\"\n >\n <stop offset=\"0\" stopColor=\"#ff962d\" />\n <stop offset=\"1\" stopColor=\"#fc7638\" />\n </linearGradient>\n </defs>,\n <title key=\"title\">groups-squircle</title>,\n <path\n key=\"path\"\n d=\"M19.96,10c0,7.962-1.991,9.952-9.952,9.952S.056,17.959.056,10,2.047.045,10.008.045,19.96,2.036,19.96,10Z\"\n fill=\"url(#86d10072-1c7f-4a02-88fe-0735565ae99a)\"\n />,\n ]\n}\n\nexport function Home(): JSX.Element[] {\n return [\n <defs key=\"def\">\n <linearGradient\n id=\"paint0_linear_1_2\"\n x1=\"-2.23242\"\n y1=\"0.320978\"\n x2=\"19.9609\"\n y2=\"22.5228\"\n gradientUnits=\"userSpaceOnUse\"\n >\n <stop offset=\"0\" stopColor=\"#289DFF\" />\n <stop offset=\"1\" stopColor=\"#2266F7\" />\n </linearGradient>\n </defs>,\n <title key=\"title\">home-squircle</title>,\n <path\n key=\"path\"\n d=\"M9.99962 0C1.99854 0 0 2.00015 0 10C0 17.9998 1.99854 20 9.99962 20C18.0007 20 20 18.0014 20 10C20 1.99862 17.9999 0 9.99962 0Z\"\n fill=\"url(#paint0_linear_1_2)\"\n />,\n ]\n}\n\nexport function People(): JSX.Element[] {\n return [\n <defs key=\"def\">\n <linearGradient\n id=\"7f805f16-2322-4b42-b61a-2bf71eadb25a\"\n x1=\"2.047\"\n y1=\"2.036\"\n x2=\"17.969\"\n y2=\"17.958\"\n gradientUnits=\"userSpaceOnUse\"\n >\n <stop offset=\"0\" stopColor=\"#32a0f0\" />\n <stop offset=\"1\" stopColor=\"#3f75e5\" />\n </linearGradient>\n </defs>,\n <title key=\"title\">people-squircle</title>,\n <path\n key=\"path\"\n d=\"M19.96,10c0,7.962-1.991,9.952-9.952,9.952S.056,17.959.056,10,2.047.045,10.008.045,19.96,2.036,19.96,10Z\"\n fill=\"url(#7f805f16-2322-4b42-b61a-2bf71eadb25a)\"\n />,\n ]\n}\n\nexport function Publishing(): JSX.Element[] {\n return [\n <defs key=\"def\">\n <linearGradient\n id=\"publishing-gradient\"\n x1=\"2.047\"\n y1=\"2.036\"\n x2=\"17.969\"\n y2=\"17.958\"\n gradientUnits=\"userSpaceOnUse\"\n >\n <stop offset=\"0\" stopColor=\"#787882\" />\n <stop offset=\"1\" stopColor=\"#5f5f69\" />\n </linearGradient>\n <linearGradient\n id=\"publishing-gradient-2\"\n x1=\"2.03\"\n y1=\"2.03\"\n x2=\"17.952\"\n y2=\"17.952\"\n gradientTransform=\"translate(2.563 -2.028) rotate(13.283)\"\n xlinkHref=\"#publishing-gradient\"\n />\n </defs>,\n <title key=\"title\">publishing-squircle</title>,\n <path\n d=\"M19.96,10c0,7.962-1.991,9.952-9.952,9.952S.056,17.959.056,10,2.047.045,10.008.045,19.96,2.036,19.96,10Z\"\n fill=\"url(#publishing-gradient)\"\n key=\"path\"\n />,\n <circle\n cx=\"9.991\"\n cy=\"9.991\"\n r=\"9.951\"\n transform=\"translate(-2.028 2.563) rotate(-13.283)\"\n fill=\"url(#publishing-gradient-2)\"\n key=\"circle\"\n />,\n ]\n}\n\nexport function Registrations(): JSX.Element[] {\n return [\n <defs key=\"def\">\n <linearGradient\n id=\"bd67604d-f11c-4431-bd82-159c57241115\"\n x1=\"2.047\"\n y1=\"2.036\"\n x2=\"17.969\"\n y2=\"17.958\"\n gradientUnits=\"userSpaceOnUse\"\n >\n <stop offset=\"0\" stopColor=\"#41b99e\" />\n <stop offset=\"1\" stopColor=\"#46948d\" />\n </linearGradient>\n </defs>,\n <title key=\"title\">registrations-squircle</title>,\n <path\n key=\"path\"\n d=\"M19.96,10c0,7.962-1.991,9.952-9.952,9.952S.056,17.959.056,10,2.047.045,10.008.045,19.96,2.036,19.96,10Z\"\n fill=\"url(#bd67604d-f11c-4431-bd82-159c57241115)\"\n />,\n ]\n}\n\nexport function Services(): JSX.Element[] {\n return [\n <defs key=\"def\">\n <linearGradient\n id=\"00f9217c-0536-41ea-b265-a8689874be71\"\n x1=\"2.04\"\n y1=\"2.029\"\n x2=\"17.976\"\n y2=\"17.965\"\n gradientUnits=\"userSpaceOnUse\"\n >\n <stop offset=\"0\" stopColor=\"#6eaa50\" />\n <stop offset=\"1\" stopColor=\"#6a9639\" />\n </linearGradient>\n </defs>,\n <title key=\"title\">services-squircle</title>,\n <path\n key=\"path\"\n d=\"M19.968,10c0,7.968-1.992,9.96-9.96,9.96S.048,17.965.048,10,2.04.037,10.008.037,19.968,2.029,19.968,10Z\"\n fill=\"url(#00f9217c-0536-41ea-b265-a8689874be71)\"\n />,\n ]\n}\n","import React from \"react\"\n\nimport * as ColorAppSquircles from \"./color_app_squircles\"\nimport * as AppSymbols from \"./mono_app_symbols\"\n\nexport function ColorAppIcon({\n appName,\n size = 20,\n}: {\n appName: string\n size?: number\n}): JSX.Element {\n return (\n <svg\n xmlns=\"http://www.w3.org/2000/svg\"\n width={size}\n height={size}\n viewBox=\"0 0 20 20\"\n style={{ display: \"block\" }}\n >\n {ColorAppSquircles[appName] ? (\n React.createElement(ColorAppSquircles[appName], { key: \"key1\" })\n ) : (\n <span key=\"key1\" />\n )}\n {AppSymbols[appName] ? (\n React.createElement(AppSymbols[appName], { color: \"#fff\", key: \"key2\" })\n ) : (\n <div key=\"key3\">appName not supported</div>\n )}\n </svg>\n )\n}\n","export default function getAppsSwitchProductPath(productName: string): string {\n const basePath = `/apps/${productName.toLowerCase()}`\n const referer = window?.location?.pathname?.toString()\n\n if (!referer) return basePath\n\n const params = new URLSearchParams()\n params.append(\"referer\", referer)\n\n return `${basePath}?${params.toString()}`\n}\n","import React from \"react\"\n\nconst HoverableListItem = ({\n active = false,\n component: C = \"span\",\n style = null,\n ...nativeProps\n}: {\n active?: boolean\n children?: React.ReactNode\n component?: any\n href?: string\n onClick?: any\n style?: object\n}) => {\n const [entered, setEntered] = React.useState(false)\n\n const getBackgroundColor = () =>\n active ? \"#ededed\" : entered ? \"#f7f7f7\" : \"transparent\"\n\n return (\n <C\n onMouseEnter={() => setEntered(true)}\n onMouseLeave={() => setEntered(false)}\n style={{ ...style, backgroundColor: getBackgroundColor() }}\n {...nativeProps}\n />\n )\n}\n\nexport default HoverableListItem\n","import React from \"react\"\n\nexport default class Outsider extends React.Component<\n {\n cleanup: boolean\n component: any\n onOutsideClick: any\n visible: boolean\n },\n {}\n> {\n private container: HTMLElement\n\n constructor(props: any) {\n super(props)\n this.handleOutsideClick = this.handleOutsideClick.bind(this)\n }\n\n componentWillUnmount() {\n document.removeEventListener(\"click\", this.handleOutsideClick, true)\n }\n\n handleOutsideClick(e) {\n if (this.container.contains(e.target)) return\n\n e.stopPropagation()\n e.preventDefault()\n\n return this.props.onOutsideClick()\n }\n\n render() {\n const { cleanup, onOutsideClick, visible, ...props } = this.props\n\n if (cleanup) {\n document.removeEventListener(\"click\", this.handleOutsideClick, true)\n } else {\n document.addEventListener(\"click\", this.handleOutsideClick, true)\n }\n\n return <div ref={(c) => (this.container = c)} {...props} />\n }\n}\n","import React from \"react\"\n\nconst PopupRoot = ({\n style = null,\n ...nativeProps\n}: {\n children?: React.ReactNode\n style?: object\n}) => (\n <div\n style={{\n alignSelf: \"flex-end\",\n display: \"flex\",\n position: \"relative\",\n ...style,\n }}\n {...nativeProps}\n />\n)\n\nexport default PopupRoot\n","import React from \"react\"\n\nconst Popup = ({\n component: C = \"div\",\n style = null,\n ...nativeProps\n}: {\n children?: React.ReactNode\n cleanup?: any\n component?: any\n onOutsideClick?: any\n style?: object\n}) => (\n <C\n style={{\n background: \"#FFFFFF\",\n borderRadius: \"3px\",\n boxShadow: \"0 0 0 1px #D4D9E2, 0 8px 32px rgba(0,0,0,.3)\",\n overflow: \"hidden\",\n position: \"absolute\",\n ...style,\n }}\n {...nativeProps}\n />\n)\n\nexport default Popup\n","import pcoUrl, * as PCO_URL from \"@planningcenter/url\"\nimport React from \"react\"\n\nimport { ColorAppIcon } from \"../color_app_icon\"\nimport getAppsSwitchProductPath from \"../get_apps_switch_product_path\"\nimport { App } from \"../interfaces\"\nimport { MonoAppName } from \"../mono_app_name\"\nimport * as AppSymbols from \"../mono_app_symbols\"\nimport { fontFamily } from \"../styles\"\nimport HoverableListItem from \"./hoverable_list_item\"\nimport Outsider from \"./outsider\"\nimport PopupRoot from \"./popover_root\"\nimport Popup from \"./popup\"\n\nconst AppsMenu = ({\n appName,\n apps,\n env,\n toggle,\n visible,\n}: {\n appName: string\n apps: App[]\n env: PCO_URL.Environment\n toggle: any\n visible: boolean\n}) => {\n const accountsProduct = apps.find(({ name }) => name === \"Accounts\")\n const homeProduct = apps.find(({ name }) => name === \"Home\")\n const restProducts = [...apps]\n .filter(({ name }) => name !== \"Home\" && name !== \"Accounts\")\n .sort((a, b) => a.name.localeCompare(b.name))\n\n const listItemProps = {\n ...fontFamily,\n alignItems: \"center\",\n display: \"flex\",\n height: \"48px\",\n overflow: \"hidden\",\n padding: \"0 16px\",\n verticalAlign: \"middle\",\n }\n\n return (\n <PopupRoot>\n <Popup\n cleanup={!visible}\n component={Outsider}\n onOutsideClick={toggle}\n style={{\n marginTop: \"8px\",\n ...(visible\n ? { opacity: 1, transition: \"none\", visibility: \"visible\" }\n : {\n opacity: 0,\n transition: \"all 120ms ease-in\",\n visibility: \"hidden\",\n }),\n }}\n >\n <menu\n data-pendo=\"app-switcher\"\n style={{ margin: 0, minWidth: 180, padding: 0 }}\n >\n {homeProduct && (\n <HoverableListItem\n component=\"a\"\n data-pendo={`app-switcher--change-app--${homeProduct.name}`}\n data-turbolinks={false}\n href={\n appName === homeProduct.name\n ? `${pcoUrl(env)(\"accounts\")}/apps/${appName}`\n : pcoUrl(env)(\"accounts\") +\n getAppsSwitchProductPath(homeProduct.name)\n }\n style={{ ...listItemProps, borderBottom: \"1px solid #ededed\" }}\n >\n <div style={{ marginRight: \"6px\" }}>\n <ColorAppIcon appName=\"Home\" size={20} />\n </div>\n <MonoAppName appName=\"Home\" color=\"#444\" size={18} />\n </HoverableListItem>\n )}\n {restProducts.map(({ name }, i) => {\n const isFirst = i === 0\n const isLast = i === restProducts.length - 1\n return (\n <HoverableListItem\n component=\"a\"\n data-pendo={`app-switcher--change-app--${name}`}\n data-turbolinks={false}\n href={\n name === appName\n ? `${pcoUrl(env)(\"accounts\")}/apps/${name.toLowerCase()}`\n : pcoUrl(env)(\"accounts\") + getAppsSwitchProductPath(name)\n }\n key={name}\n style={{\n ...listItemProps,\n height: \"40px\",\n paddingBottom: isLast ? \"4px\" : null,\n paddingTop: isFirst ? \"4px\" : null,\n }}\n >\n <div style={{ marginRight: \"6px\" }}>\n <ColorAppIcon appName={name.replace(/[\\s-]/, \"\")} size={20} />\n </div>\n <MonoAppName\n appName={name.replace(/[\\s-]/, \"\")}\n color=\"#444\"\n size={18}\n />\n </HoverableListItem>\n )\n })}\n {accountsProduct && (\n <HoverableListItem\n component=\"a\"\n data-pendo={`app-switcher--change-app--${accountsProduct.name}`}\n data-turbolinks={false}\n href={\n pcoUrl(env)(\"accounts\") +\n getAppsSwitchProductPath(accountsProduct.name)\n }\n style={{\n ...listItemProps,\n borderTop: \"1px solid #ededed\",\n padding: \"0 12px\",\n textDecoration: \"none\",\n }}\n >\n <svg\n height={22}\n style={{ display: \"block\", marginRight: \"2px\" }}\n viewBox=\"0 0 20 20\"\n width={22}\n xmlns=\"http://www.w3.org/2000/svg\"\n >\n {React.createElement(AppSymbols[\"Accounts\"], {\n color: \"#9e9e9e\",\n key: \"key2\",\n })}\n </svg>\n <div\n style={{\n color: \"#737373\",\n fontSize: \"12px\",\n lineHeight: \"28px\",\n }}\n >\n Account settings\n </div>\n </HoverableListItem>\n )}\n </menu>\n </Popup>\n </PopupRoot>\n )\n}\n\nexport default AppsMenu\n","import { App, ConnectedPerson } from \"./interfaces\"\n\nconst sortByAttribute =\n (attr: string) =>\n (arr: any[]): any[] =>\n arr.slice().sort((a, b) => a[attr].localeCompare(b[attr]))\n\nexport const appsMenuFormatter = (apps: App[]): App[] =>\n sortByAttribute(\"name\")(apps).reduce(\n (acc, item) =>\n (item.name || \"\") === \"Church Center\" || (item.name || \"\") === \"API\"\n ? acc\n : item.name === \"Home\"\n ? [item, ...acc]\n : [...acc, item],\n []\n )\n\nexport const connectedPeopleMenuFormatter = (\n connectedPeople: ConnectedPerson[]\n): ConnectedPerson[] =>\n connectedPeople\n .slice()\n .sort((a, b) =>\n a.attributes[\"organization_name\"].localeCompare(\n b.attributes[\"organization_name\"]\n )\n )\n","import { useSyncExternalStore } from \"use-sync-external-store/shim\"\n\nimport store from \"../store\"\n\nconst useStore = <StoreShape = any,>(selector = (state: StoreShape) => state) =>\n useSyncExternalStore(store.subscribe, () => selector(store.getState())) as StoreShape\n\nexport default useStore\n","import React from \"react\"\n\nexport function StyledRoot({ children, style, ...nativeProps }): JSX.Element {\n return (\n <nav\n className=\"simple\"\n data-pendo=\"topbar\"\n aria-label=\"topbar-navigation\"\n style={{\n MozOsxFontSmoothing: \"grayscale\",\n WebkitFontSmoothing: \"antialiased\",\n alignItems: \"center\",\n color: \"white\",\n display: \"flex\",\n height: \"48px\",\n position: \"relative\",\n ...style,\n }}\n {...nativeProps}\n >\n <style>{`\n @media only print {\n .simple {\n display: none !important;\n }\n }\n `}</style>\n {children}\n </nav>\n )\n}\n","const colors = {\n danger43: \"hsl(8 60% 43%)\",\n danger45: \"hsl(8 60% 45%)\", // base\n danger47: \"hsl(8 60% 47%)\",\n danger93: \"hsl(9 59% 93%)\",\n danger97: \"hsl(7 60% 97%)\",\n darkNeutral07: \"hsl(0 0% 7%)\",\n darkNeutral12: \"hsl(0 0% 12%)\",\n darkNeutral15: \"hsl(0 0% 15%)\",\n darkNeutral17: \"hsl(0 0% 17%)\",\n darkNeutral19: \"hsl(0 0% 19%)\",\n darkNeutral24: \"hsl(0 0% 24%)\",\n darkNeutral32: \"hsl(0 0% 32%)\",\n darkNeutral50: \"hsl(0 0% 50%)\",\n darkNeutral68: \"hsl(0 0% 68%)\",\n darkNeutral88: \"hsl(0 0% 88%)\",\n darkNeutral98: \"hsl(0 0% 98%)\",\n interaction45: \"hsl(221 75% 45%)\",\n interaction50: \"hsl(221 91% 50%)\",\n interaction55: \"hsl(221 91% 55%)\", // base\n interaction66: \"hsl(221 91% 66%)\", // controls\n interaction91: \"hsl(221 91% 91%)\",\n interaction93: \"hsl(221 91% 93%)\",\n interaction97: \"hsl(221 89% 97%)\", // alias 09\n lightNeutral12: \"hsl(0 0% 12%)\",\n lightNeutral24: \"hsl(0 0% 24%)\",\n lightNeutral45: \"hsl(0 0% 45%)\",\n lightNeutral62: \"hsl(0 0% 62%)\",\n lightNeutral81: \"hsl(0 0% 81%)\",\n lightNeutral88: \"hsl(0 0% 88%)\",\n lightNeutral93: \"hsl(0 0% 93%)\",\n lightNeutral95: \"hsl(0 0% 95%)\",\n lightNeutral97: \"hsl(0 0% 97%)\",\n lightNeutral98: \"hsl(0 0% 98%)\",\n lightNeutral100: \"hsl(0 0% 100%)\",\n success23: \"hsl(86 91% 23%)\",\n success25: \"hsl(86 91% 25%)\", // base\n success27: \"hsl(86 91% 27%)\",\n success91: \"hsl(95 50% 91%)\",\n success97: \"hsl(93 53% 97%)\",\n warning20: \"hsl(42 100% 20%)\",\n warning49: \"hsl(42 84% 49%)\",\n warning55: \"hsl(42 84% 55%)\",\n warning63: \"hsl(42 84% 63%)\", // base\n warning94: \"hsl(42 84% 94%)\",\n warning97: \"hsl(42 84% 97%)\",\n}\n\nexport default colors\n","import React from \"react\"\n\nconst PopupRoot = ({\n style = null,\n ...nativeProps\n}: {\n children?: React.ReactNode\n style?: object\n}) => (\n <div\n style={{\n alignSelf: \"flex-end\",\n display: \"flex\",\n position: \"relative\",\n ...style,\n }}\n {...nativeProps}\n />\n)\n\nexport default PopupRoot\n","import {\n Button,\n Divider,\n Icon,\n StackView,\n Text,\n ThemeProvider,\n} from \"@planningcenter/tapestry-react\"\nimport pcoUrl from \"@planningcenter/url\"\nimport * as PCO_URL from \"@planningcenter/url\"\nimport React from \"react\"\n\nimport { default as themeColors } from \"../colors\"\nimport HoverableListItem from \"../components/hoverable_list_item\"\nimport Outsider from \"../components/outsider\"\nimport Popup from \"../components/popup\"\nimport PopupRoot from \"../components/popup_root\"\nimport { connectedPeopleMenuFormatter } from \"../formatters\"\nimport { ConnectedPerson } from \"../interfaces\"\nimport { fontFamily, IEFlex1 } from \"../styles\"\n\ninterface UserMenuProps {\n appName: string\n connectedPeople: ConnectedPerson[]\n env: PCO_URL.Environment\n hasConnectedPeople: boolean\n requestClearAppsCache: any\n requestClearConnectedPeopleCache: any\n requestSwitchConnectedPerson: any\n requestUnlinkConnectedPeople: any\n setUserMenuVisible: Function\n userMenuVisible: boolean\n}\n\nexport const UserMenu = ({\n appName,\n connectedPeople,\n env,\n hasConnectedPeople,\n requestClearAppsCache,\n requestClearConnectedPeopleCache,\n requestSwitchConnectedPerson,\n requestUnlinkConnectedPeople,\n setUserMenuVisible,\n userMenuVisible,\n}: UserMenuProps) => {\n const logoutUrl = `${pcoUrl(env)(\"login\")}/logout`\n\n return (\n <PopupRoot>\n <Popup\n component={Outsider}\n onOutsideClick={() => setUserMenuVisible(false)}\n cleanup={!userMenuVisible}\n style={{\n color: \"#525252\",\n marginTop: \"8px\",\n maxHeight: \"75vh\",\n maxWidth: \"320px\",\n minWidth: \"242px\",\n overflow: \"auto\",\n right: 0,\n ...(userMenuVisible\n ? {\n opacity: 1,\n transition: \"none\",\n visibility: \"visible\",\n }\n : {\n opacity: 0,\n transition: \"all 120ms ease-in\",\n visibility: \"hidden\",\n }),\n cursor: \"default\",\n }}\n >\n <div>\n {hasConnectedPeople ? (\n <div\n style={{\n alignItems: \"center\",\n backgroundColor: \"#eee\",\n display: \"flex\",\n lineHeight: \"32px\",\n padding: \"0 16px\",\n }}\n >\n <div\n style={{\n ...IEFlex1,\n color: \"#666\",\n fontSize: \"12px\",\n textTransform: \"uppercase\",\n whiteSpace: \"nowrap\",\n ...fontFamily,\n }}\n >\n Linked Accounts\n </div>\n\n <div\n style={{\n ...IEFlex1,\n alignItems: \"center\",\n fontSize: \"12px\",\n textAlign: \"right\",\n }}\n >\n <a\n href=\"\"\n onClick={(e) => {\n requestClearAppsCache()\n requestClearConnectedPeopleCache()\n requestUnlinkConnectedPeople()\n e.preventDefault()\n }}\n style={{\n color: \"#666\",\n marginLeft: \"64px\",\n textDecoration: \"none\",\n ...fontFamily,\n }}\n >\n unlink\n </a>\n </div>\n </div>\n ) : (\n <noscript />\n )}\n\n <style>{`\n .NotSmallTopbar__connected-people-list > *:first-child > * { border-top-width: 0 !important }\n `}</style>\n <ul\n className=\"NotSmallTopbar__connected-people-list\"\n style={{ listStyleType: \"none\", margin: 0, padding: 0 }}\n >\n {connectedPeopleMenuFormatter(connectedPeople).map(\n ({ id, attributes: person }) => (\n <HoverableListItem component=\"li\" key={id}>\n <a\n href=\"\"\n onClick={(e) => {\n requestClearAppsCache()\n requestClearConnectedPeopleCache()\n requestSwitchConnectedPerson(id, `${appName}/`)\n e.preventDefault()\n }}\n style={{\n borderTop: \"1px solid #ddd\",\n color: \"#444\",\n display: \"block\",\n lineHeight: \"48px\",\n overflow: \"hidden\",\n paddingLeft: \"16px\",\n paddingRight: \"16px\",\n textDecoration: \"none\",\n textOverflow: \"ellipsis\",\n whiteSpace: \"nowrap\",\n ...fontFamily,\n }}\n >\n {person.organization_name}\n </a>\n </HoverableListItem>\n )\n )}\n </ul>\n </div>\n\n <ThemeProvider>\n {hasConnectedPeople && <Divider />}\n <form method=\"POST\" action={logoutUrl}>\n <Button\n data-turbolinks={false}\n hover={{ backgroundColor: themeColors.lightNeutral97 }}\n onClick={() => {\n requestClearAppsCache()\n requestClearConnectedPeopleCache()\n return\n }}\n style={{ padding: 0 }}\n theme={false}\n type=\"submit\"\n width=\"100%\"\n >\n <StackView\n distribution=\"space-between\"\n alignment=\"center\"\n axis=\"horizontal\"\n grow={1}\n paddingHorizontal={2}\n paddingVertical={1.5}\n spacing={4}\n >\n <Text color={themeColors.lightNeutral45} lineHeight=\"24px\">\n Log out\n </Text>\n <Icon\n name=\"general.intoBox\"\n fill={themeColors.lightNeutral45}\n />\n </StackView>\n </Button>\n </form>\n </ThemeProvider>\n </Popup>\n </PopupRoot>\n )\n}\n","import React from \"react\"\n\nimport { fontFamily } from \"../styles\"\n\nconst Hoverable = ({\n active = null,\n component: C = \"div\",\n hover = null,\n innerRef = null,\n style = null,\n ...nativeProps\n}: {\n active?: any\n children?: React.ReactNode\n component?: any\n hover?: any\n href?: string\n innerRef?: any\n onClick?: any\n style?: object\n type?: string\n}) => {\n const [down, setDown] = React.useState(false)\n const [entered, setEntered] = React.useState(false)\n\n return (\n <C\n onMouseDown={() => setDown(true)}\n onMouseEnter={() => setEntered(true)}\n onMouseLeave={() => setEntered(false)}\n onMouseUp={() => setDown(false)}\n style={{\n ...fontFamily,\n ...style,\n ...(entered && hover),\n ...(down && active),\n }}\n {...(innerRef && { ref: innerRef })}\n {...nativeProps}\n />\n )\n}\n\nexport default Hoverable\n","import React from \"react\"\n\nimport Hoverable from \"../components/hoverable\"\nimport { slightBackgroundTransition } from \"../styles\"\nimport { DisclosureChevronIcon } from \"../symbols\"\n\ninterface UserMenuTriggerProps {\n colors: any\n orgName: string\n requestConnectedPeopleFetch: any\n setUserMenuVisible: Function\n showOrgName: boolean\n}\n\nexport const UserMenuTrigger = ({\n colors,\n orgName,\n requestConnectedPeopleFetch,\n setUserMenuVisible,\n showOrgName,\n}: UserMenuTriggerProps) => {\n return (\n <div\n style={{\n cursor: \"pointer\",\n marginLeft: \"16px\",\n position: \"relative\",\n whiteSpace: \"nowrap\",\n }}\n data-pendo=\"topbar-org-switcher\"\n >\n <Hoverable\n component=\"button\"\n type=\"button\"\n style={{\n WebkitAppearance: \"none\",\n alignItems: \"center\",\n appearance: \"none\",\n backgroundColor: colors.base1,\n border: \"none\",\n borderRadius: \"9999px\",\n color: colors.text || \"#fff\",\n // TODO: #improve-outline-a11y\n cursor: \"pointer\",\n display: \"flex\",\n fontSize: \"13px\",\n lineHeight: \"32px\",\n outline: 0,\n padding: 0,\n ...slightBackgroundTransition,\n }}\n active={{ backgroundColor: colors.base3 }}\n hover={{ backgroundColor: colors.base2 }}\n onClick={() => {\n setUserMenuVisible((visible) => !visible)\n requestConnectedPeopleFetch()\n }}\n >\n <div style={{ marginLeft: 8 }} />\n\n {showOrgName ? (\n <div\n style={{\n fontSize: \"13px\",\n margin: \"0 8px 0 8px\",\n maxWidth: \"240px\",\n overflow: \"hidden\",\n textOverflow: \"ellipsis\",\n whiteSpace: \"nowrap\",\n }}\n >\n {orgName}\n </div>\n ) : (\n <div style={{ margin: \"0 4px 0 4px\" }} />\n )}\n <div style={{ paddingRight: \"8px\" }}>\n <DisclosureChevronIcon colors={colors} style={{ margin: \"-3px\" }} />\n </div>\n </Hoverable>\n </div>\n )\n}\n","import React from \"react\"\n\nimport AppsButton from \"../components/apps_button\"\nimport AppsMenu from \"../components/apps_menu\"\nimport { appsMenuFormatter } from \"../formatters\"\nimport useStore from \"../hooks/use_store\"\nimport { SharedTopbarProps } from \"../interfaces\"\nimport { StyledRoot } from \"../styled_root\"\nimport { fontFamily, slightBackgroundTransition } from \"../styles\"\nimport { UserMenu } from \"./user_menu\"\nimport { UserMenuTrigger } from \"./user_menu_trigger\"\n\ninterface NotSmallTopbarProps {\n onLinkToProfileClick?: () => any\n search?: any\n showOrgName?: boolean\n}\n\nconst Topbar = (props: NotSmallTopbarProps & SharedTopbarProps) => {\n const [appsMenuVisible, setAppsMenuVisible] = React.useState(false)\n const [routesVisible, setRoutesVisible] = React.useState(true)\n const [userMenuVisible, setUserMenuVisible] = React.useState(false)\n const { hasConnectedPeople, notificationsEnabled } = useStore()\n\n return (\n <StyledRoot\n style={{\n paddingLeft: \"8px\",\n paddingRight: \"16px\",\n ...props.style,\n }}\n >\n <AppsMenu\n env={props.env}\n appName={props.appName}\n apps={appsMenuFormatter(props.apps)}\n visible={appsMenuVisible}\n toggle={() => setAppsMenuVisible((visible) => !visible)}\n />\n\n <AppsButton\n colors={props.colors}\n expanded={appsMenuVisible}\n onClick={() => {\n setAppsMenuVisible((visible) => !visible)\n props.requestAppsFetch()\n }}\n appName={props.appName}\n />\n\n <div style={{ margin: \"12px\" }} />\n\n {routesVisible && props.routes}\n\n <div style={{ margin: \"auto\" }} />\n\n {!notificationsEnabled && props.notifications()}\n\n {props.search({\n hideRoutes: () => setRoutesVisible(false),\n showRoutes: () => setRoutesVisible(true),\n })}\n\n <UserMenuTrigger\n colors={props.colors}\n orgName={props.orgName}\n requestConnectedPeopleFetch={props.requestConnectedPeopleFetch}\n setUserMenuVisible={setUserMenuVisible}\n showOrgName={props.showOrgName}\n />\n\n <UserMenu\n appName={props.appName}\n hasConnectedPeople={hasConnectedPeople}\n connectedPeople={props.connectedPeople}\n env={props.env}\n requestClearAppsCache={props.requestClearAppsCache}\n requestClearConnectedPeopleCache={\n props.requestClearConnectedPeopleCache\n }\n requestSwitchConnectedPerson={props.requestSwitchConnectedPerson}\n requestUnlinkConnectedPeople={props.requestUnlinkConnectedPeople}\n setUserMenuVisible={setUserMenuVisible}\n userMenuVisible={userMenuVisible}\n />\n </StyledRoot>\n )\n}\n\nTopbar.defaultProps = {\n notifications: () => null,\n search: () => null,\n showOrgName: true,\n useDummyNotifications: false,\n}\n\nconst Route = ({\n active,\n colors,\n style = null,\n ...nativeProps\n}: {\n active: boolean\n children: React.ReactNode\n colors: any\n href?: string\n style?: object\n}) => {\n const [entered, setEntered] = React.useState(false)\n const [down, setDown] = React.useState(false)\n\n const getBackgroundColor = () => {\n if (entered && down) return colors.base2\n if (entered || active) return colors.base1\n return \"transparent\"\n }\n\n const getTextColor = () => {\n return colors.text || \"#fff\"\n }\n\n return (\n <a\n style={{\n backgroundColor: getBackgroundColor(),\n borderRadius: \"9999px\",\n color: getTextColor(),\n fontSize: \"14px\",\n fontWeight: 600,\n lineHeight: \"32px\",\n marginRight: \"4px\", // off-grid\n paddingLeft: \"12px\",\n paddingRight: \"12px\",\n textDecoration: \"none\",\n textTransform: \"capitalize\",\n verticalAlign: \"middle\",\n whiteSpace: \"nowrap\",\n ...fontFamily,\n ...slightBackgroundTransition,\n ...style,\n }}\n onMouseEnter={() => setEntered(true)}\n onMouseLeave={() => setEntered(false)}\n onMouseDown={() => setDown(true)}\n onMouseUp={() => setDown(false)}\n {...nativeProps}\n />\n )\n}\n\nexport { Route, Topbar }\n","import pcURL, { Environment } from \"@planningcenter/url\"\nimport React from \"react\"\n\nimport apiRequest, { defaultFetch, Fetch } from \"./api_request\"\nimport { PointBreak } from \"./display_switch\"\nimport { X as XSymbol } from \"./symbols\"\n\nconst entries = function (obj) {\n const ownProps = Object.keys(obj)\n let i = ownProps.length\n const resArray = new Array(i) // preallocate the Array\n while (i--) resArray[i] = [ownProps[i], obj[ownProps[i]]]\n\n return resArray\n}\n\nfunction formatter(announcements) {\n return entries(announcements).map((entry) => ({\n data: entry[1],\n id: entry[0],\n }))\n}\n\nclass Provider extends React.Component<\n {\n children: (announcements: any, callback: any) => React.ReactElement<any>\n configuredFetch: Fetch\n env: Environment\n formatter?: any\n initialAnnouncements: object\n },\n {\n announcements: object[]\n }\n> {\n constructor(props: any) {\n super(props)\n\n this.state = {\n announcements: props.initialAnnouncements,\n }\n }\n\n public static defaultProps = {\n formatter: formatter,\n }\n\n dismissAnnouncements(id) {\n this.setState(({ announcements }) => {\n const newAnnouncements = announcements\n if (announcements[id]) delete newAnnouncements[id]\n\n return { announcements: newAnnouncements }\n })\n\n return apiRequest(\n this.props.configuredFetch,\n `${pcURL(this.props.env)(\n \"api\"\n )}/people/v2/me/platform_notifications/${id}/dismiss`,\n { method: \"POST\" }\n )\n }\n\n render() {\n return (\n <>\n {this.props.children(\n { announcements: this.props.formatter(this.state.announcements) },\n { dismissAnnouncements: this.dismissAnnouncements.bind(this) }\n )}\n </>\n )\n }\n}\n\nexport class StyledAnnouncement extends React.Component<\n { style?: object },\n {}\n> {\n render() {\n const { style, ...platformProps } = this.props\n\n return (\n <PointBreak\n render={(breakpoint) => (\n <div\n style={{\n alignItems: \"center\",\n display: \"flex\",\n justifyContent: \"space-between\",\n paddingBottom: 14,\n paddingLeft: [\"xs\", \"sm\"].indexOf(breakpoint) !== -1 ? 16 : 24,\n paddingRight: 18,\n paddingTop: 14,\n ...style,\n }}\n {...platformProps}\n />\n )}\n />\n )\n }\n}\n\nexport class StyleProvider extends React.Component<\n {\n className?: string\n colors: any\n style?: object\n },\n {}\n> {\n render() {\n const { children, className, colors, style, ...platformProps } = this.props\n\n return (\n <div\n className={[\"__Topbar_PlatformAnnouncements_link\"].join(\" \").trim()}\n style={{\n backgroundColor: \"#282828\",\n color: \"white\",\n fontSize: \"14px\",\n ...style,\n }}\n {...platformProps}\n >\n <style>{`\n .__Topbar_PlatformAnnouncements_link { color: white }\n .__Topbar_PlatformAnnouncements_link a { color: ${colors.base0} }\n .__Topbar_PlatformAnnouncements_link a:hover { color: ${colors.base1} }\n .__Topbar_PlatformAnnouncements_link a:active { color: ${colors.base2} }\n `}</style>\n {children}\n </div>\n )\n }\n}\n\nexport default class PlatformAnnouncements extends React.Component<\n {\n colors: any\n configuredFetch?: Fetch\n data: object\n env: Environment\n renderItem?: any\n },\n {}\n> {\n public static defaultProps = {\n configuredFetch: defaultFetch,\n renderItem: ({ announcement, actions }) => (\n <DissmissibleAnnouncement\n key={announcement.id}\n html={announcement.data.html}\n onClick={() => actions.dismissAnnouncements(announcement.id)}\n />\n ),\n }\n\n render() {\n return (\n <StyleProvider colors={this.props.colors}>\n <Provider\n env={this.props.env}\n initialAnnouncements={this.props.data}\n configuredFetch={this.props.configuredFetch}\n >\n {(data, actions) =>\n Boolean(data.announcements.length > 0) ? (\n <div>\n {data.announcements.map((announcement) =>\n this.props.renderItem({ actions, announcement })\n )}\n </div>\n ) : null\n }\n </Provider>\n </StyleProvider>\n )\n }\n}\n\nfunction StyledDismissButton({ ...props }: any): JSX.Element {\n return (\n <button\n type=\"button\"\n style={{\n WebkitAppearance: \"none\",\n backgroundColor: \"transparent\",\n borderWidth: 0,\n cursor: \"pointer\",\n\n margin: -8,\n // larger click target without increasing box\n padding: 8,\n }}\n {...props}\n >\n <XSymbol fill=\"white\" style={{ height: 20, width: 20 }} />\n </button>\n )\n}\n\nfunction DissmissibleAnnouncement(props: {\n html: string\n onClick: () => any\n}): JSX.Element {\n return (\n <StyledAnnouncement>\n <span\n dangerouslySetInnerHTML={{\n __html: props.html,\n }}\n />\n\n <StyledDismissButton onClick={props.onClick} />\n </StyledAnnouncement>\n )\n}\n","import React from \"react\"\n\nimport { PointBreak } from \"./display_switch\"\nimport { X as XSymbol } from \"./symbols\"\n\n/*\nProductAnnouncement:\nDisplays a dismissible product announcements when provided an `html` prop.\nRenders nothing when no `html` prop is falsy.\n\nWhen the dismiss button is clicked, ProductAnnouncement will immediately dissappear.\nPass an `onClick` prop to coordinate this dismissal with a server request that will prevent message from being passed to future page views.\n\nIt should look something like this in your application's Topbar composition:\n\n```jsx\n<ProductAnnouncement\n colors={shared.colors}\n html={this.props.productAnnouncement}\n onClick={() => alert(\"Sending fire-and-forget dismiss request to server\")}\n/>\n```\n\nAttributes like `className`, `id`, `data-*`, and `aria-*` are all applied to the root element.\n*/\n\nexport function ProductAnnouncement({\n colors,\n html = \"\",\n onClick = (_event) => {\n /* noop */\n },\n ...props\n}: {\n colors: object\n html: string\n onClick: (event: any) => any\n}) {\n const [dismissed, updateDismissed] = React.useState(false)\n\n return dismissed || !html ? null : (\n <StyleProvider colors={colors} {...props}>\n <StyledAnnouncement>\n <span dangerouslySetInnerHTML={{ __html: html }} />\n <StyledDismissButton\n onClick={(event) => {\n onClick(event)\n updateDismissed(true)\n }}\n />\n </StyledAnnouncement>\n </StyleProvider>\n )\n}\n\nexport class StyleProvider extends React.Component<\n {\n className?: string\n colors: any\n style?: object\n },\n {}\n> {\n render() {\n const { children, className, colors, style, ...platformProps } = this.props\n\n return (\n <div\n className={[\"Topbar_ProductAnnouncement\", className]\n .filter(Boolean)\n .join(\" \")\n .trim()}\n style={{\n backgroundColor: colors.base1,\n ...style,\n }}\n {...platformProps}\n >\n <style>{`\n .Topbar_ProductAnnouncement {\n color: white;\n font-size: 14px;\n }\n .Topbar_ProductAnnouncement a { color: white; font-weight: bold; }\n `}</style>\n {children}\n </div>\n )\n }\n}\n\nexport class StyledAnnouncement extends React.Component<\n { style?: object },\n {}\n> {\n render() {\n const { style, ...platformProps } = this.props\n\n return (\n <PointBreak\n render={(breakpoint) => (\n <div\n style={{\n alignItems: \"center\",\n boxSizing: \"border-box\",\n display: \"flex\",\n justifyContent: \"space-between\",\n paddingBottom: 14,\n paddingLeft: [\"xs\", \"sm\"].indexOf(breakpoint) !== -1 ? 16 : 24,\n paddingRight: 18,\n paddingTop: 14,\n ...style,\n }}\n {...platformProps}\n />\n )}\n />\n )\n }\n}\n\nexport function StyledDismissButton({ ...props }: any): JSX.Element {\n return (\n <button\n type=\"button\"\n style={{\n WebkitAppearance: \"none\",\n backgroundColor: \"transparent\",\n borderWidth: 0,\n cursor: \"pointer\",\n\n margin: -8,\n // larger click target without increasing box\n padding: 8,\n }}\n {...props}\n >\n <XSymbol fill=\"white\" style={{ height: 20, width: 20 }} />\n </button>\n )\n}\n","import pcoUrl, { Environment } from \"@planningcenter/url\"\nimport React from \"react\"\n\nexport function Avatar({\n env,\n url: incomingUrl = \"\",\n style,\n ...nativeProps\n}: {\n env: Environment\n style?: object\n url?: string\n}): JSX.Element {\n const url =\n incomingUrl || `${pcoUrl(env)(\"people\")}/static/no_photo_thumbnail_gray.svg`\n\n return (\n <div\n style={{\n backgroundColor: \"white\",\n backgroundImage: `url(${url})`,\n backgroundPosition: \"center\",\n backgroundSize: \"cover\",\n borderRadius: \"50%\",\n height: \"26px\",\n marginLeft: \"4px\",\n width: \"26px\",\n ...style,\n }}\n {...nativeProps}\n />\n )\n}\n","import React from \"react\"\n\nexport class ClientStorage extends React.Component<\n {\n item: string\n method?: \"localStorage\" | \"sessionStorage\"\n render: (apps: any, other: any) => React.ReactElement<any>\n },\n {}\n> {\n public static defaultProps = {\n method: \"localStorage\",\n }\n\n update(value) {\n window[this.props.method].setItem(this.props.item, JSON.stringify(value))\n return this.forceUpdate()\n }\n\n render() {\n return (\n <>\n {this.props.render(\n JSON.parse(window[this.props.method].getItem(this.props.item)) ||\n undefined,\n this.update.bind(this)\n )}\n </>\n )\n }\n}\n","import pcoUrl, { Environment } from \"@planningcenter/url\"\nimport React from \"react\"\n\nimport { default as themeColors } from \"../colors\"\nimport getAppsSwitchProductPath from \"../get_apps_switch_product_path\"\nimport * as AppSymbols from \"../mono_app_symbols\"\n\nexport function AccountSettingsLink({ env }: { env: Environment }) {\n const accountsName = \"accounts\"\n\n return (\n <a\n style={{\n alignItems: \"center\",\n display: \"flex\",\n height: \"48px\",\n paddingLeft: \"12px\",\n paddingRight: \"16px\",\n textDecoration: \"none\",\n }}\n data-pendo={`app-switcher--change-app--${accountsName}`}\n data-turbolinks={false}\n href={pcoUrl(env)(accountsName) + getAppsSwitchProductPath(accountsName)}\n >\n <svg\n height={22}\n style={{ display: \"block\", marginRight: \"2px\" }}\n viewBox=\"0 0 20 20\"\n width={22}\n xmlns=\"http://www.w3.org/2000/svg\"\n >\n {React.createElement(AppSymbols[\"Accounts\"], {\n color: themeColors.lightNeutral45,\n key: \"key2\",\n })}\n </svg>\n <div\n style={{\n color: themeColors.lightNeutral45,\n fontSize: \"12px\",\n lineHeight: \"48px\",\n textDecoration: \"none\",\n }}\n >\n Account settings\n </div>\n </a>\n )\n}\n","import React from \"react\"\n\nimport { default as themeColors } from \"../colors\"\nimport { X } from \"../symbols\"\n\nexport const CloseMenuButton = ({\n color = themeColors.lightNeutral100,\n size = 22,\n style = {},\n}: {\n color?: string\n size?: number\n style?: object\n}) => (\n <div style={style}>\n <X fill={color} style={{ height: `${size}px`, width: `${size}px` }} />\n </div>\n)\n","import pcoUrl, { Environment } from \"@planningcenter/url\"\n\ntype props = {\n appName: string\n env: Environment\n userId: string\n}\n\nexport default function getLoginProfilePath({\n env,\n appName,\n userId,\n}: props): string {\n const basePath = pcoUrl(env)(\"login\") + `/people/AC${userId}`\n const pathname = window?.location?.pathname?.toString()\n\n if (!pathname) return basePath\n\n const params = new URLSearchParams()\n params.append(\"return\", `${appName}/${pathname}`)\n\n return `${basePath}?${params.toString()}`\n}\n","import React from \"react\"\n\ntype MFAStatusProps = {\n isActive: boolean\n}\n\nconst MFAStatus = ({ isActive }: MFAStatusProps) => {\n const statusColor = isActive ? \"hsl(86, 91%, 27%)\" : \"hsl(8, 60%, 47%)\"\n\n const displayStatusIcon = () =>\n isActive ? (\n <svg width=\"12\" height=\"12\" viewBox=\"0 0 16 16\" fill=\"none\">\n <path\n d=\"M12.588 5.31499H11.832V3.79999C11.8159 2.80798 11.4105 1.86207 10.7032 1.16625C9.99602 0.470436 9.04363 0.0804749 8.0515 0.0804749C7.05937 0.0804749 6.10698 0.470436 5.39976 1.16625C4.69253 1.86207 4.28713 2.80798 4.271 3.79999V5.31499H3.515C3.1138 5.31525 2.72906 5.47454 2.44508 5.75795C2.16111 6.04136 2.00106 6.42579 2 6.82699V14.388C2.00132 14.7891 2.16146 15.1734 2.44537 15.4567C2.72929 15.7401 3.11388 15.8995 3.515 15.9H12.588C12.9886 15.8987 13.3724 15.7389 13.6557 15.4557C13.939 15.1724 14.0987 14.7886 14.1 14.388V6.82699C14.0987 6.42639 13.939 6.04257 13.6557 5.7593C13.3724 5.47603 12.9886 5.31631 12.588 5.31499ZM8.051 12.115C7.75171 12.1152 7.45909 12.0266 7.21015 11.8605C6.96121 11.6944 6.76713 11.4581 6.65246 11.1817C6.53779 10.9052 6.50768 10.601 6.56595 10.3074C6.62422 10.0139 6.76824 9.74418 6.97979 9.53249C7.19135 9.32079 7.46094 9.17659 7.75446 9.11813C8.04798 9.05967 8.35225 9.08958 8.62877 9.20406C8.90529 9.31855 9.14165 9.51247 9.30794 9.7613C9.47424 10.0101 9.563 10.3027 9.563 10.602C9.56327 11.0036 9.40424 11.389 9.1208 11.6735C8.83736 11.9581 8.45264 12.1187 8.051 12.12V12.115ZM10.395 5.31499H5.707V3.79999C5.707 3.17832 5.95396 2.58211 6.39354 2.14253C6.83313 1.70294 7.42933 1.45599 8.051 1.45599C8.67267 1.45599 9.26887 1.70294 9.70846 2.14253C10.148 2.58211 10.395 3.17832 10.395 3.79999V5.31499Z\"\n fill={statusColor}\n />\n </svg>\n ) : (\n <svg width=\"12\" height=\"12\" viewBox=\"0 0 16 16\" fill=\"none\">\n <path\n d=\"M13.7,5.8a1.5,1.5,0,0,0-1.1-.4H5.7V3.8a2.34,2.34,0,0,1,.7-1.7,2.19,2.19,0,0,1,1.7-.7,2.34,2.34,0,0,1,1.7.7,2.67,2.67,0,0,1,.7,1.4h1.4a4.12,4.12,0,0,0-1.1-2.4A4.73,4.73,0,0,0,8.1.1,4,4,0,0,0,5.4,1.2,3.63,3.63,0,0,0,4.3,3.8V5.3H3.5a2.1,2.1,0,0,0-1.1.4A2.1,2.1,0,0,0,2,6.8v7.6a2.1,2.1,0,0,0,.4,1.1,1.5,1.5,0,0,0,1.1.4h9.1a2.1,2.1,0,0,0,1.1-.4,1.5,1.5,0,0,0,.4-1.1V6.8A1.53,1.53,0,0,0,13.7,5.8ZM9.1,11.7a1.5,1.5,0,0,1-1.1.4H8a1.14,1.14,0,0,1-.8-.3,4.35,4.35,0,0,1-.6-.7,2.77,2.77,0,0,1-.1-.9A3,3,0,0,1,7,9.5a1.23,1.23,0,0,1,.8-.4,1.41,1.41,0,0,1,.9.1,1.34,1.34,0,0,1,.7.6,1.14,1.14,0,0,1,.3.8A2.38,2.38,0,0,1,9.1,11.7Z\"\n fill={statusColor}\n />\n </svg>\n )\n\n return (\n <div\n style={{\n alignItems: \"center\",\n display: \"flex\",\n fontSize: \"13px\",\n marginBottom: 2,\n marginTop: 4,\n }}\n >\n {displayStatusIcon()}\n\n <span\n style={{\n color: \"#888\",\n marginLeft: 4,\n whiteSpace: \"nowrap\",\n }}\n >\n Two-step verification {isActive ? \"active\" : \"inactive\"}\n </span>\n </div>\n )\n}\n\nexport default MFAStatus\n","import * as churchCenter from \"@planningcenter/icons/paths/church-center\"\nimport * as general from \"@planningcenter/icons/paths/general\"\nimport * as people from \"@planningcenter/icons/paths/people\"\nimport * as toolbar from \"@planningcenter/icons/paths/toolbar\"\nimport { designSystem } from \"@planningcenter/tapestry-react\"\n\nconst { generateColorScale } = designSystem\n\nexport const topbarTheme = {\n colors: {\n ...generateColorScale({\n baseColor: \"#2266f7\",\n key: \"primary\",\n }),\n },\n icons: {\n churchCenter,\n general,\n people,\n toolbar,\n },\n id: \"topbar\",\n}\n","import {\n Button,\n HeadingUppercase,\n Link,\n List,\n StackView,\n Text,\n ThemeProvider,\n} from \"@planningcenter/tapestry-react\"\nimport pcoUrl, { Environment } from \"@planningcenter/url\"\nimport React from \"react\"\n\nimport { Avatar } from \"../avatar\"\nimport { default as themeColors } from \"../colors\"\nimport { connectedPeopleMenuFormatter } from \"../formatters\"\nimport getLoginProfilePath from \"../get_login_profile_path\"\nimport { ConnectedPerson } from \"../interfaces\"\nimport MFAStatus from \"../mfa_status\"\nimport { topbarTheme } from \"../theme\"\n\nexport function UserProfileMenu({\n appName,\n connectedPeople,\n env,\n hasConnectedPeople,\n linkToProfile,\n mfaConfigured,\n mfaEnabled,\n requestClearAppsCache,\n requestClearConnectedPeopleCache,\n requestSwitchConnectedPerson,\n requestUnlinkConnectedPeople,\n setUserMenuVisible,\n userAvatarPath,\n userId,\n userName,\n}: {\n appName: string\n connectedPeople: ConnectedPerson[]\n env: Environment\n hasConnectedPeople: boolean\n linkToProfile: boolean\n mfaConfigured: boolean\n mfaEnabled: boolean\n requestClearAppsCache: any\n requestClearConnectedPeopleCache: any\n requestSwitchConnectedPerson: any\n requestUnlinkConnectedPeople: any\n setUserMenuVisible: any\n userAvatarPath: string\n userId: string\n userName: string\n}) {\n return (\n <ThemeProvider theme={topbarTheme}>\n <StackView axis=\"vertical\" width=\"100%\">\n <StackView\n axis=\"horizontal\"\n alignItems=\"start\"\n distribution=\"space-between\"\n >\n <StackView\n axis=\"horizontal\"\n spacing={2}\n padding={2}\n paddingRight={0}\n shrink={1}\n >\n <StackView shrink={0}>\n <Avatar\n env={env}\n url={userAvatarPath}\n style={{ height: 48, width: 48 }}\n />\n </StackView>\n <StackView spacing={1} shrink={1}>\n <Text color={themeColors.lightNeutral24} weight={700} truncate>\n {userName}\n </Text>\n {linkToProfile && (\n <Link\n as=\"a\"\n href={`/people/AC${userId}`}\n color={themeColors.lightNeutral45}\n underline={false}\n >\n My profile\n </Link>\n )}\n {mfaEnabled && (\n <Link\n as=\"a\"\n href={getLoginProfilePath({\n appName: appName,\n env: env,\n userId: userId,\n })}\n color={themeColors.lightNeutral45}\n underline={false}\n >\n My login settings\n <MFAStatus isActive={mfaConfigured} />\n </Link>\n )}\n <form method=\"POST\" action={`${pcoUrl(env)(\"login\")}/logout`}>\n <Button\n color={themeColors.lightNeutral45}\n data-turbolinks={false}\n onClick={() => {\n requestClearAppsCache()\n requestClearConnectedPeopleCache()\n return\n }}\n type=\"submit\"\n >\n Log out\n </Button>\n </form>\n </StackView>\n </StackView>\n <Button\n color={themeColors.lightNeutral45}\n icon=\"general.x\"\n onClick={() => setUserMenuVisible(false)}\n padding={2}\n variant=\"naked\"\n title=\"Close Menu\"\n />\n </StackView>\n {hasConnectedPeople && (\n <>\n <StackView\n backgroundColor={themeColors.lightNeutral95}\n paddingVertical={1.5}\n paddingHorizontal={2}\n marginTop={1}\n borderBottom={`1px solid ${themeColors.lightNeutral88}`}\n >\n <HeadingUppercase\n color={themeColors.lightNeutral62}\n fontWeight={500}\n >\n Linked Accounts\n </HeadingUppercase>\n </StackView>\n\n <List dividerColor={themeColors.lightNeutral88} width=\"100%\">\n {connectedPeopleMenuFormatter(connectedPeople).map(\n ({ id, attributes: person }) => (\n <List.Item\n key={id}\n onClick={(e) => {\n requestClearAppsCache()\n requestClearConnectedPeopleCache()\n requestSwitchConnectedPerson(id, `${appName}/`)\n e.preventDefault()\n }}\n color={themeColors.lightNeutral45}\n padding={2}\n >\n <Text truncate>{person.organization_name}</Text>\n </List.Item>\n )\n )}\n <List.Item\n onClick={(e) => {\n requestClearAppsCache()\n requestClearConnectedPeopleCache()\n requestUnlinkConnectedPeople()\n e.preventDefault()\n }}\n color={themeColors.danger47}\n padding={2}\n underline={false}\n >\n <Text size={3}>Unlink my accounts</Text>\n </List.Item>\n </List>\n </>\n )}\n </StackView>\n </ThemeProvider>\n )\n}\n","import pcoUrl from \"@planningcenter/url\"\nimport React from \"react\"\n\nimport { Avatar } from \"../avatar\"\nimport { ClientStorage as LocalStorageProvider } from \"../client_storage\"\nimport { ColorAppIcon } from \"../color_app_icon\"\nimport { default as themeColors } from \"../colors\"\nimport { appsMenuFormatter } from \"../formatters\"\nimport getAppsSwitchProductPath from \"../get_apps_switch_product_path\"\nimport useStore from \"../hooks/use_store\"\nimport { SharedTopbarProps } from \"../interfaces\"\nimport { MonoAppIcon } from \"../mono_app_icon\"\nimport { MonoAppName } from \"../mono_app_name\"\nimport { StyledRoot } from \"../styled_root\"\nimport { fontFamily, IEFlex1 } from \"../styles\"\nimport { DisclosureChevronIcon } from \"../symbols\"\nimport { capitalize, HSLtoHSLA } from \"../utils\"\nimport { AccountSettingsLink } from \"./account_settings_link\"\nimport { CloseMenuButton } from \"./close_menu_button\"\nimport { UserProfileMenu } from \"./user_profile_menu\"\n\nconst MENU_GUTTER = 57\nconst NAVBAR_HEIGHT = 52\n\nconst UserMenuAppLockup = ({\n appName: originalAppName,\n}: {\n appName: string\n}) => {\n const appName = originalAppName.replace(/[\\s-]/, \"\")\n\n return (\n <div style={{ alignItems: \"center\", display: \"flex\" }}>\n <div style={{ marginRight: \"6px\" }}>\n <ColorAppIcon appName={appName} size={20} />\n </div>\n <MonoAppName\n appName={appName}\n color={themeColors.lightNeutral24}\n size={18}\n />\n </div>\n )\n}\n\ninterface SmallTopbarProps {\n currentRouteComponent?: any\n}\n\ninterface PropagateableEvent {\n forcePropagation: Boolean\n}\n\nconst Topbar = (props: SharedTopbarProps & SmallTopbarProps) => {\n const [routesMenuVisible, setRoutesMenuVisible] = React.useState(false)\n const [productSwitcherVisible, setProductSwitcherVisible] =\n React.useState(false)\n const [userMenuVisible, setUserMenuVisible] = React.useState(false)\n const { hasConnectedPeople, mfaConfigured, mfaEnabled, userId, name } =\n useStore()\n\n const appColors = props.colors\n\n const activeRoute =\n props.routes.filter(({ props: { active } }) => active) || []\n\n const CurrentRouteComponent = props.currentRouteComponent\n const currentRouteText =\n (activeRoute &&\n activeRoute[0] &&\n activeRoute[0].props &&\n activeRoute[0].props.children) ||\n props.appName\n\n const accountsProduct = props.apps.find(({ name }) => name === \"Accounts\")\n\n const homeProduct = props.apps.find(({ name }) => name === \"Home\")\n\n const restProducts = [...props.apps].filter(\n ({ name }) => name !== \"Home\" && name !== \"Accounts\"\n )\n\n const borderColor = themeColors.lightNeutral88\n\n React.useEffect(() => {\n setRoutesMenuVisible(false)\n }, [activeRoute && activeRoute[0]?.props?.href])\n\n return (\n <StyledRoot style={{ ...props.style }}>\n <div\n style={{\n alignItems: \"center\",\n display: \"flex\",\n height: \"48px\",\n justifyContent: \"center\",\n paddingLeft: \"16px\",\n paddingRight: \"16px\",\n }}\n onClick={() => {\n props.requestAppsFetch()\n props.requestConnectedPeopleFetch()\n\n setRoutesMenuVisible(false)\n setProductSwitcherVisible((visible) => !visible)\n }}\n >\n <MonoAppIcon\n appName={props.appName.replace(/[\\s-]/, \"\")}\n colors={appColors}\n size={26}\n />\n </div>\n <div\n style={{\n left: 0,\n position: \"absolute\",\n top: \"48px\",\n width: \"100%\",\n }}\n >\n {routesMenuVisible && props.routes}\n </div>\n <LocalStorageProvider\n item=\"Topbar:Small:Menus:Products:visibility\"\n render={() => (\n <div\n style={{\n MozUserSelect: \"none\",\n WebkitTapHighlightColor: \"transparent\",\n WebkitUserSelect: \"none\",\n backgroundColor: HSLtoHSLA(themeColors.lightNeutral12, 0.75),\n bottom: 0,\n color: \"black\",\n display: productSwitcherVisible ? \"block\" : \"none\",\n left: 0,\n msUserSelect: \"none\",\n position: \"fixed\",\n right: 0,\n top: 0,\n userSelect: \"none\",\n }}\n onClick={() => {\n setProductSwitcherVisible((visible) => !visible)\n setUserMenuVisible(false)\n }}\n >\n <CloseMenuButton\n style={{\n position: \"absolute\",\n right: \"17px\",\n top: \"12px\",\n }}\n />\n <div\n onClick={(e) => {\n const { forcePropagation } = e as unknown as PropagateableEvent\n if (!forcePropagation) {\n e.stopPropagation()\n }\n }}\n style={{\n backgroundColor: themeColors.lightNeutral100,\n borderRight: `1px solid ${borderColor}`,\n display: \"flex\",\n flexDirection: \"column\",\n height: `calc(100% - ${NAVBAR_HEIGHT}px - env(safe-area-inset-bottom))`,\n position: \"relative\",\n width: `calc(100% - ${MENU_GUTTER}px)`,\n }}\n >\n <div\n style={{\n alignItems: \"center\",\n backgroundColor: themeColors.lightNeutral98,\n borderBottom: `1px solid ${borderColor}`,\n display: \"flex\",\n height: \"48px\",\n paddingLeft: \"16px\",\n paddingRight: \"16px\",\n }}\n >\n <div style={{ ...IEFlex1 }}>\n <a\n style={{\n alignItems: \"center\",\n display: \"flex\",\n height: \"48px\",\n paddingRight: \"16px\",\n }}\n data-pendo={`app-switcher--change-app--${homeProduct?.name}`}\n data-turbolinks={false}\n href={\n homeProduct\n ? pcoUrl(props.env)(\"accounts\") +\n getAppsSwitchProductPath(homeProduct?.name)\n : undefined\n }\n >\n <div style={{ alignItems: \"center\", display: \"flex\" }}>\n <UserMenuAppLockup\n appName={homeProduct ? homeProduct.name : props.appName}\n />\n </div>\n </a>\n </div>\n </div>\n\n <div\n style={{\n ...IEFlex1,\n WebkitOverflowScrolling: \"touch\",\n overflowY: \"scroll\",\n }}\n >\n <ul data-pendo=\"app-switcher\" style={{ margin: 0, padding: 0 }}>\n {appsMenuFormatter(restProducts).map(({ name }, i) => {\n const isFirst = i === 0\n const isLast =\n i === appsMenuFormatter(restProducts).length - 1\n return (\n <li key={name} style={{ listStyleType: \"none\" }}>\n <a\n style={{\n alignItems: \"center\",\n display: \"flex\",\n height: \"40px\",\n paddingBottom: isLast ? \"4px\" : 0,\n paddingLeft: \"16px\",\n paddingRight: \"16px\",\n paddingTop: isFirst ? \"4px\" : 0,\n }}\n data-pendo={`app-switcher--change-app--${name}`}\n data-turbolinks={false}\n href={\n pcoUrl(props.env)(\"accounts\") +\n getAppsSwitchProductPath(name)\n }\n >\n <UserMenuAppLockup appName={name} />\n </a>\n </li>\n )\n })}\n </ul>\n\n {accountsProduct && (\n <div\n style={{\n borderTop: `1px solid ${borderColor}`,\n }}\n >\n <AccountSettingsLink env={props.env} />\n </div>\n )}\n </div>\n </div>\n </div>\n )}\n />\n <div\n style={{\n ...IEFlex1,\n fontWeight: 600,\n lineHeight: \"48px\",\n textAlign: \"center\",\n }}\n onClick={\n props.routes.length > 0\n ? () => {\n setProductSwitcherVisible(false)\n setRoutesMenuVisible((visible) => !visible)\n }\n : null\n }\n >\n <CurrentRouteComponent>\n {capitalize(currentRouteText)}\n </CurrentRouteComponent>\n {props.routes.length > 0 && (\n <DisclosureChevronIcon\n colors={appColors}\n style={{ marginLeft: \"4px\", verticalAlign: \"middle\" }}\n />\n )}\n </div>\n\n <button\n onClick={() => setUserMenuVisible(!userMenuVisible)}\n style={{\n background: \"none\",\n border: \"none\",\n margin: \"0 12px\",\n padding: 0,\n }}\n >\n <Avatar env={props.env} url={props.userAvatarPath} />\n </button>\n\n <div\n style={{\n MozUserSelect: \"none\",\n WebkitTapHighlightColor: \"transparent\",\n WebkitUserSelect: \"none\",\n bottom: 0,\n color: \"black\",\n display: userMenuVisible ? \"block\" : \"none\",\n left: 0,\n msUserSelect: \"none\",\n position: \"fixed\",\n right: 0,\n top: 0,\n userSelect: \"none\",\n }}\n >\n <div\n onClick={(e) => e.stopPropagation()}\n style={{\n WebkitOverflowScrolling: \"touch\",\n backgroundColor: \"#fff\",\n display: \"flex\",\n flexDirection: \"column\",\n height: \"100%\",\n overflowY: \"scroll\",\n position: \"relative\",\n width: \"100%\",\n }}\n >\n <UserProfileMenu\n appName={props.appName}\n env={props.env}\n connectedPeople={props.connectedPeople}\n hasConnectedPeople={hasConnectedPeople}\n linkToProfile={props.linkToProfile}\n mfaConfigured={mfaConfigured}\n mfaEnabled={mfaEnabled}\n requestClearAppsCache={props.requestClearAppsCache}\n requestClearConnectedPeopleCache={\n props.requestClearConnectedPeopleCache\n }\n requestSwitchConnectedPerson={props.requestSwitchConnectedPerson}\n requestUnlinkConnectedPeople={props.requestUnlinkConnectedPeople}\n setUserMenuVisible={setUserMenuVisible}\n userAvatarPath={props.userAvatarPath}\n userId={userId}\n userName={name}\n />\n </div>\n </div>\n </StyledRoot>\n )\n}\n\nTopbar.defaultProps = {\n currentRouteComponent: (props) => <span {...props} />,\n linkToProfile: true,\n}\n\nconst Route = ({ active, ...props }) => (\n <a\n style={{\n backgroundColor: \"#444\",\n borderBottom: \"1px solid #333\",\n color: \"#fff\",\n display: \"block\",\n fontWeight: 600,\n lineHeight: \"47px\",\n position: \"relative\",\n textAlign: \"center\",\n textDecoration: \"none\",\n textTransform: \"capitalize\",\n whiteSpace: \"nowrap\",\n ...fontFamily,\n ...(active && { backgroundColor: \"#333\" }),\n }}\n {...props}\n />\n)\n\nexport { Route, Topbar }\n","import { useCallback, useMemo, useState } from \"react\"\n\nconst defaultCookieConfig = {\n domain: window.location.host.split(\".\").slice(-2).join(\".\"),\n \"max-age\": 60 * 60 * 24 * 30,\n}\nconst cookieConfigString = Object.entries(defaultCookieConfig)\n .map(([key, value]) => `${key}=${value}`)\n .join(\"; \")\n\nfunction readCookie(name: string) {\n const cookies = document.cookie.split(\";\").map((c) => c.trim())\n\n const cookie = cookies.find((c) => c.startsWith(`${name}=`))\n\n return cookie && decodeURIComponent(cookie.split(\"=\")[1])\n}\n\nexport function useCookie(name: string) {\n const [cookieState, setCookieState] = useState(() => readCookie(name))\n const update = useCallback((newValue: string) => {\n document.cookie = `${name}=${encodeURIComponent(\n newValue\n )}; ${cookieConfigString}`\n setCookieState(newValue)\n }, [name])\n\n return [cookieState, update] as const\n}\n\nexport function useJSONCookie(name: string) {\n const [cookie, setCookie] = useCookie(name)\n\n const parsed = useMemo(() => {\n if (cookie) {\n try {\n return JSON.parse(cookie)\n } catch {\n return {}\n }\n } else {\n return {}\n }\n }, [cookie])\n const update = useCallback(\n (newValue: object) => setCookie(JSON.stringify(newValue)),\n [setCookie]\n )\n\n return [parsed, update] as const\n}\n","import { StackView } from \"@planningcenter/tapestry-react\"\nimport React from \"react\"\n\ntype DrawerProps = {\n bottom?: number | string\n children: React.ReactNode\n hasShadow?: boolean\n height?: number | string\n id?: string\n overflow?: \"auto\" | \"hidden\" | \"scroll\" | \"visible\"\n position?: \"absolute\" | \"fixed\"\n width?: number | string\n}\n\nexport function Drawer({\n bottom = \"auto\",\n children,\n hasShadow = false,\n height = \"100%\",\n id = \"toolbarDrawer\",\n overflow = \"visible\",\n position = \"absolute\",\n width = \"100%\",\n}: DrawerProps) {\n return (\n <StackView\n backgroundColor=\"surface\"\n elevation={hasShadow && open ? 2 : undefined}\n left={0}\n position=\"absolute\"\n zIndex={1}\n {...{ bottom, height, id, overflow, position, width }}\n >\n {children}\n </StackView>\n )\n}\n","import { Box, Button, StackView } from \"@planningcenter/tapestry-react\"\nimport React from \"react\"\n\nimport { default as themeColors } from \"../../colors\"\n\ninterface DrawerHeaderProps {\n children: React.ReactNode\n closeDrawer?: Function\n}\n\nexport function DrawerHeader({ children, closeDrawer }: DrawerHeaderProps) {\n return (\n <StackView\n alignment=\"start\"\n axis=\"horizontal\"\n color=\"foreground\"\n distribution=\"space-between\"\n padding={2}\n paddingTop={1}\n >\n <Box>{children}</Box>\n {closeDrawer && (\n <Button\n icon={{\n fill: themeColors.lightNeutral12,\n name: \"general.x\",\n size: \"md\",\n }}\n onClick={() => closeDrawer()}\n title=\"Close\"\n theme={false}\n hover={{\n backgroundColor: themeColors.lightNeutral95,\n }}\n />\n )}\n </StackView>\n )\n}\n","import { Heading } from \"@planningcenter/tapestry-react\"\nimport React from \"react\"\n\nimport { default as themeColors } from \"../../colors\"\n\nexport function DrawerHeading({ children, ...props }) {\n return (\n <Heading\n {...props}\n color={themeColors.lightNeutral12}\n letterSpacing=\".002em\"\n level={2}\n lineHeight=\"35px\"\n weight={700}\n >\n {children}\n </Heading>\n )\n}\n","import { Box, BoxProps } from \"@planningcenter/tapestry-react\"\nimport React from \"react\"\n\nimport colors from \"../../colors\"\n\nexport const IndicatorDot = (props: BoxProps) => (\n <Box\n backgroundColor={colors.interaction66}\n height={1.5}\n pointerEvents=\"none\"\n position=\"absolute\"\n radius=\"50%\"\n width={1.5}\n zIndex={6}\n {...props}\n />\n)\n","import { Box, StackView, StackViewProps } from \"@planningcenter/tapestry-react\"\nimport React, { useEffect, useRef, useState } from \"react\"\n\n// TODO: This component could prob be genrealized to provide overflow-y scroll indication, as well, if needed.\n// `top`/`bottom` // `left`/`right` → `start`/`end`\n\nexport const INDICATOR_STYLES = {\n bottom: {\n background: \"linear-gradient(rgba(255, 255, 255, 0), rgba(0, 0, 0, 0.07))\",\n bottom: 0,\n },\n top: {\n background: \"linear-gradient(rgba(0, 0, 0, 0.07), rgba(255, 255, 255, 0))\",\n top: 0,\n },\n}\n\ntype OmittedStackViewProps = Omit<\n StackViewProps,\n \"innerRef\" | \"overflow\" | \"spacing\"\n // `spacing` will cause the appearance of extra top & bottom padding\n // it's preferable to wrap the children in a StackView with the desired spacing\n>\n\ninterface ScrollContainerProps extends OmittedStackViewProps {\n children: React.ReactNode\n}\n\n// Perf: should this component be memoized?\nexport const ScrollContainer: React.FC<ScrollContainerProps> = ({\n children,\n ...props\n}) => {\n const [overflowTop, setOverflowTop] = useState(false)\n const [overflowBottom, setOverflowBottom] = useState(false)\n\n const containerRef = useRef(null)\n const bottomEdgeRef = useRef(null)\n const topEdgeRef = useRef(null)\n\n // Perf: should this be debounced?\n const handleResize = () => {\n const container = containerRef?.current\n\n if (container) {\n const hasOverflowBottom =\n container.scrollHeight - container.clientHeight >\n container.scrollTop + 1\n\n setOverflowBottom(hasOverflowBottom)\n }\n }\n\n useEffect(() => {\n const container = containerRef?.current\n\n if (!container) {\n return () => {} // noop\n }\n\n setOverflowBottom(container.scrollHeight > container.clientHeight)\n\n // setup intersection observers\n const options = { root: container, threshold: 1 }\n const bottomObserver = new IntersectionObserver(\n ([{ isIntersecting }]) => setOverflowBottom(!isIntersecting),\n options\n )\n const topObserver = new IntersectionObserver(\n ([{ isIntersecting }]) => setOverflowTop(!isIntersecting),\n options\n )\n\n const bottomTarget = bottomEdgeRef?.current\n const topTarget = topEdgeRef?.current\n\n if (bottomTarget) {\n bottomObserver.observe(bottomTarget)\n }\n if (topTarget) {\n topObserver.observe(topTarget)\n }\n\n // setup resize observer\n const resizeObserver = new ResizeObserver(handleResize)\n resizeObserver.observe(container)\n\n return () => {\n if (bottomTarget) {\n bottomObserver.unobserve(bottomTarget)\n }\n if (topTarget) {\n topObserver.unobserve(topTarget)\n }\n resizeObserver.unobserve(container)\n }\n }, [])\n\n return (\n <StackView grow={1} position=\"relative\" shrink={1}>\n {overflowTop && <OverflowIndicator edge=\"top\" />}\n {overflowBottom && <OverflowIndicator edge=\"bottom\" />}\n <StackView\n basis={2}\n grow={1}\n innerRef={containerRef}\n overflow=\"auto\"\n role=\"region\"\n shrink={1}\n css={{ overscrollBehavior: \"contain\" }}\n {...props}\n >\n <Box innerRef={topEdgeRef} />\n {children}\n <Box innerRef={bottomEdgeRef} />\n </StackView>\n </StackView>\n )\n}\n\nconst OverflowIndicator = ({ edge }) => {\n return (\n <Box\n height={1}\n left={0}\n pointerEvents=\"none\"\n position=\"absolute\"\n right={0}\n role=\"presentation\"\n zIndex={10}\n {...INDICATOR_STYLES[edge]}\n />\n )\n}\n","import { StackView } from \"@planningcenter/tapestry-react\"\nimport React, { ReactNode } from \"react\"\n\ninterface SwitchViewProps {\n activeIndex: number\n children: ReactNode\n}\n\nconst SwitchView: React.FC<SwitchViewProps> = ({ activeIndex, children }) => {\n const childCount = React.Children.count(children)\n\n const validatedIndex =\n activeIndex < 0\n ? 0\n : activeIndex > childCount - 1\n ? childCount - 1\n : activeIndex\n\n return (\n <StackView grow={1} overflow=\"hidden\" position=\"relative\">\n {React.Children.map(children, (view, index) => {\n const inView = index === validatedIndex\n return (\n <StackView\n aria-hidden={!inView}\n visibility={inView ? \"visible\" : \"hidden\"}\n height=\"100%\"\n key={index}\n opacity={inView ? 1 : 0}\n pointerEvents={inView ? \"auto\" : \"none\"}\n position=\"absolute\"\n top={0}\n width=\"100%\"\n transform={\n inView\n ? \"translateX(0)\"\n : index < activeIndex\n ? \"translateX(-100px)\"\n : \"translateX(100px)\"\n }\n transition=\"visibility 100ms 50ms ease-in-out, transform 200ms ease-in-out, opacity 100ms 50ms ease-in-out\"\n >\n {view}\n </StackView>\n )\n })}\n </StackView>\n )\n}\n\nexport { SwitchView }\n","import * as React from \"react\"\n\nimport { ToolbarTool } from \"../types\"\n\nenum ActionType {\n close = \"close\",\n mount = \"mount\",\n open = \"open\",\n unmount = \"unmount\",\n}\n\ntype ToolbarState = {\n currentContent: ToolbarTool | null\n open: boolean\n}\n\ntype ToolbarDispatch = {\n payload?: any\n type: ActionType\n}\n\nconst initialState: ToolbarState = {\n currentContent: null,\n open: false,\n}\n\nconst reducer = (\n state: ToolbarState,\n action: ToolbarDispatch\n): ToolbarState => {\n switch (action.type) {\n case ActionType.mount:\n return { ...state, currentContent: action.payload.content }\n case ActionType.unmount:\n return { ...state, currentContent: null }\n case ActionType.open:\n return { ...state, open: true }\n case ActionType.close:\n return { ...state, open: false }\n }\n}\n\nconst useToolbarReducer = (overrides?: Partial<ToolbarState>) =>\n React.useReducer(reducer, { ...initialState, ...overrides })\n\nexport { ActionType, useToolbarReducer }\n","import pcURL from \"@planningcenter/url\"\nimport React, { ReactNode, useMemo } from \"react\"\n\nimport apiRequest, { defaultFetch, railsCsrfFetch } from \"../../../api_request\"\n\ntype ChatApiContextValue = {\n [key: string]: any\n}\n\ninterface ChatApiProviderProps {\n children: ReactNode\n env: string\n}\n\ntype Result = Record<string, any>\n\ntype Attributes = Record<string, any>\n\ntype Query = {\n [key: string]: any\n fields?: Record<string, any>\n}\n\ninterface Api {\n delete: (path: string) => Result\n get: (path: string, query?: Query) => Result | Result[]\n patch: (path: string, attributes: Attributes) => Result\n post: (path: string, attributes: Attributes) => Result\n}\n\nconst ChatApiContext = React.createContext<ChatApiContextValue>({})\n\nconst buildRelationships = (relationships = {}) => {\n return Object.keys(relationships).reduce((acc, key) => {\n const { data } = relationships[key]\n const isArray = Array.isArray(data)\n\n return {\n ...acc,\n [`${key}_${isArray ? \"ids\" : \"id\"}`]: isArray\n ? data.map(({ id }) => id)\n : data?.id,\n }\n }, {})\n}\n\nconst buildResponse = (json) => {\n const data = [json.data].flat()\n\n const [head, ...tail] = data.map(({ id, attributes, relationships }) => ({\n id,\n ...buildRelationships(relationships),\n ...attributes,\n }))\n\n return Array.isArray(json.data) ? (head ? [head, ...tail] : []) : head\n}\n\nconst buildApi = ({ app, env }): Api => {\n const url = `${pcURL(env)(\"api\")}/${app}/v2`\n\n return {\n delete: (path) =>\n apiRequest(railsCsrfFetch, [url, path].join(\"/\"), { method: \"DELETE\" }),\n get: async (path, { fields = {}, ...query } = {}) => {\n fields = Object.entries(fields).reduce(\n (acc, [key, value]) => ({ ...acc, [`fields[${key}]`]: value }),\n {}\n )\n\n const params = new URLSearchParams({ ...fields, ...query })\n\n const { json } = await apiRequest(\n defaultFetch,\n [[url, path].join(\"/\"), params].join(\"?\")\n )\n\n return buildResponse(json)\n },\n patch: async (path, attributes) => {\n const { json } = await apiRequest(railsCsrfFetch, [url, path].join(\"/\"), {\n data: { data: { attributes } },\n method: \"PATCH\",\n })\n\n return buildResponse(json)\n },\n post: async (path, attributes) => {\n const { json } = await apiRequest(railsCsrfFetch, [url, path].join(\"/\"), {\n data: { data: { attributes } },\n method: \"POST\",\n })\n\n return buildResponse(json)\n },\n }\n}\n\nconst ChatApiProvider = ({ children, env }: ChatApiProviderProps) => {\n const value = useMemo(() => {\n const chat = buildApi({ app: \"chat\", env })\n const services = buildApi({ app: \"services\", env })\n const groups = buildApi({ app: \"groups\", env })\n\n return { chat, groups, services }\n }, [env])\n\n return (\n <ChatApiContext.Provider value={value}>{children}</ChatApiContext.Provider>\n )\n}\n\nexport { ChatApiContext, ChatApiProvider }\n","import React, { ReactNode } from \"react\"\n\nimport { FilterValues, SetFilterValuesFn } from \"./hooks/use_chat_filter\"\n\ntype SwitchViewFn = () => void\ntype ActionsForOpenChannel = boolean | null | string\n\nexport interface ChatContextValue {\n actionsOpenForChannel: ActionsForOpenChannel\n closeDrawer: () => void\n filterValues: FilterValues\n findAndSwitchToChannel: ({\n stream_channel_id,\n }: {\n stream_channel_id: string\n }) => void\n isChannelDetailsViewActive: boolean\n isChannelViewActive: boolean\n isNewChatShortcutsViewActive: boolean\n isNewGroupsChatViewActive: boolean\n isNewServicesChatViewActive: boolean\n setActionsOpenForChannel: React.Dispatch<\n React.SetStateAction<ActionsForOpenChannel>\n >\n setFilterValues: SetFilterValuesFn\n switchToChannelDetailsView: SwitchViewFn\n switchToChannelListView: SwitchViewFn\n switchToChannelView: SwitchViewFn\n switchToNewChatShortcutsView: SwitchViewFn\n switchToNewGroupsChatView: SwitchViewFn\n switchToNewServicesChatView: SwitchViewFn\n}\n\ninterface ChatProviderProps {\n children: ReactNode\n value?: ChatContextValue\n}\n\nconst ChatContext = React.createContext<ChatContextValue>(\n {} as ChatContextValue\n)\n\nconst ChatProvider = ({ children, value }: ChatProviderProps) => {\n return <ChatContext.Provider value={value}>{children}</ChatContext.Provider>\n}\n\nexport { ChatContext, ChatProvider }\n","import React from \"react\"\nimport { useChatContext } from \"stream-chat-react\"\n\nexport const useChannelMute = (channel) => {\n const { client } = useChatContext()\n const [{ muted }, setMuteStatus] = React.useState(() => channel.muteStatus())\n\n React.useEffect(() => {\n const updateMuteState = () => {\n setMuteStatus(channel.muteStatus())\n }\n\n client.on(\"notification.channel_mutes_updated\", updateMuteState)\n\n return () =>\n client.off(\"notification.channel_mutes_updated\", updateMuteState)\n }, [])\n\n return muted\n}\n","//! moment.js\n//! version : 2.29.4\n//! authors : Tim Wood, Iskren Chernev, Moment.js contributors\n//! license : MIT\n//! momentjs.com\n\n;(function (global, factory) {\n typeof exports === 'object' && typeof module !== 'undefined' ? module.exports = factory() :\n typeof define === 'function' && define.amd ? define(factory) :\n global.moment = factory()\n}(this, (function () { 'use strict';\n\n var hookCallback;\n\n function hooks() {\n return hookCallback.apply(null, arguments);\n }\n\n // This is done to register the method called with moment()\n // without creating circular dependencies.\n function setHookCallback(callback) {\n hookCallback = callback;\n }\n\n function isArray(input) {\n return (\n input instanceof Array ||\n Object.prototype.toString.call(input) === '[object Array]'\n );\n }\n\n function isObject(input) {\n // IE8 will treat undefined and null as object if it wasn't for\n // input != null\n return (\n input != null &&\n Object.prototype.toString.call(input) === '[object Object]'\n );\n }\n\n function hasOwnProp(a, b) {\n return Object.prototype.hasOwnProperty.call(a, b);\n }\n\n function isObjectEmpty(obj) {\n if (Object.getOwnPropertyNames) {\n return Object.getOwnPropertyNames(obj).length === 0;\n } else {\n var k;\n for (k in obj) {\n if (hasOwnProp(obj, k)) {\n return false;\n }\n }\n return true;\n }\n }\n\n function isUndefined(input) {\n return input === void 0;\n }\n\n function isNumber(input) {\n return (\n typeof input === 'number' ||\n Object.prototype.toString.call(input) === '[object Number]'\n );\n }\n\n function isDate(input) {\n return (\n input instanceof Date ||\n Object.prototype.toString.call(input) === '[object Date]'\n );\n }\n\n function map(arr, fn) {\n var res = [],\n i,\n arrLen = arr.length;\n for (i = 0; i < arrLen; ++i) {\n res.push(fn(arr[i], i));\n }\n return res;\n }\n\n function extend(a, b) {\n for (var i in b) {\n if (hasOwnProp(b, i)) {\n a[i] = b[i];\n }\n }\n\n if (hasOwnProp(b, 'toString')) {\n a.toString = b.toString;\n }\n\n if (hasOwnProp(b, 'valueOf')) {\n a.valueOf = b.valueOf;\n }\n\n return a;\n }\n\n function createUTC(input, format, locale, strict) {\n return createLocalOrUTC(input, format, locale, strict, true).utc();\n }\n\n function defaultParsingFlags() {\n // We need to deep clone this object.\n return {\n empty: false,\n unusedTokens: [],\n unusedInput: [],\n overflow: -2,\n charsLeftOver: 0,\n nullInput: false,\n invalidEra: null,\n invalidMonth: null,\n invalidFormat: false,\n userInvalidated: false,\n iso: false,\n parsedDateParts: [],\n era: null,\n meridiem: null,\n rfc2822: false,\n weekdayMismatch: false,\n };\n }\n\n function getParsingFlags(m) {\n if (m._pf == null) {\n m._pf = defaultParsingFlags();\n }\n return m._pf;\n }\n\n var some;\n if (Array.prototype.some) {\n some = Array.prototype.some;\n } else {\n some = function (fun) {\n var t = Object(this),\n len = t.length >>> 0,\n i;\n\n for (i = 0; i < len; i++) {\n if (i in t && fun.call(this, t[i], i, t)) {\n return true;\n }\n }\n\n return false;\n };\n }\n\n function isValid(m) {\n if (m._isValid == null) {\n var flags = getParsingFlags(m),\n parsedParts = some.call(flags.parsedDateParts, function (i) {\n return i != null;\n }),\n isNowValid =\n !isNaN(m._d.getTime()) &&\n flags.overflow < 0 &&\n !flags.empty &&\n !flags.invalidEra &&\n !flags.invalidMonth &&\n !flags.invalidWeekday &&\n !flags.weekdayMismatch &&\n !flags.nullInput &&\n !flags.invalidFormat &&\n !flags.userInvalidated &&\n (!flags.meridiem || (flags.meridiem && parsedParts));\n\n if (m._strict) {\n isNowValid =\n isNowValid &&\n flags.charsLeftOver === 0 &&\n flags.unusedTokens.length === 0 &&\n flags.bigHour === undefined;\n }\n\n if (Object.isFrozen == null || !Object.isFrozen(m)) {\n m._isValid = isNowValid;\n } else {\n return isNowValid;\n }\n }\n return m._isValid;\n }\n\n function createInvalid(flags) {\n var m = createUTC(NaN);\n if (flags != null) {\n extend(getParsingFlags(m), flags);\n } else {\n getParsingFlags(m).userInvalidated = true;\n }\n\n return m;\n }\n\n // Plugins that add properties should also add the key here (null value),\n // so we can properly clone ourselves.\n var momentProperties = (hooks.momentProperties = []),\n updateInProgress = false;\n\n function copyConfig(to, from) {\n var i,\n prop,\n val,\n momentPropertiesLen = momentProperties.length;\n\n if (!isUndefined(from._isAMomentObject)) {\n to._isAMomentObject = from._isAMomentObject;\n }\n if (!isUndefined(from._i)) {\n to._i = from._i;\n }\n if (!isUndefined(from._f)) {\n to._f = from._f;\n }\n if (!isUndefined(from._l)) {\n to._l = from._l;\n }\n if (!isUndefined(from._strict)) {\n to._strict = from._strict;\n }\n if (!isUndefined(from._tzm)) {\n to._tzm = from._tzm;\n }\n if (!isUndefined(from._isUTC)) {\n to._isUTC = from._isUTC;\n }\n if (!isUndefined(from._offset)) {\n to._offset = from._offset;\n }\n if (!isUndefined(from._pf)) {\n to._pf = getParsingFlags(from);\n }\n if (!isUndefined(from._locale)) {\n to._locale = from._locale;\n }\n\n if (momentPropertiesLen > 0) {\n for (i = 0; i < momentPropertiesLen; i++) {\n prop = momentProperties[i];\n val = from[prop];\n if (!isUndefined(val)) {\n to[prop] = val;\n }\n }\n }\n\n return to;\n }\n\n // Moment prototype object\n function Moment(config) {\n copyConfig(this, config);\n this._d = new Date(config._d != null ? config._d.getTime() : NaN);\n if (!this.isValid()) {\n this._d = new Date(NaN);\n }\n // Prevent infinite loop in case updateOffset creates new moment\n // objects.\n if (updateInProgress === false) {\n updateInProgress = true;\n hooks.updateOffset(this);\n updateInProgress = false;\n }\n }\n\n function isMoment(obj) {\n return (\n obj instanceof Moment || (obj != null && obj._isAMomentObject != null)\n );\n }\n\n function warn(msg) {\n if (\n hooks.suppressDeprecationWarnings === false &&\n typeof console !== 'undefined' &&\n console.warn\n ) {\n console.warn('Deprecation warning: ' + msg);\n }\n }\n\n function deprecate(msg, fn) {\n var firstTime = true;\n\n return extend(function () {\n if (hooks.deprecationHandler != null) {\n hooks.deprecationHandler(null, msg);\n }\n if (firstTime) {\n var args = [],\n arg,\n i,\n key,\n argLen = arguments.length;\n for (i = 0; i < argLen; i++) {\n arg = '';\n if (typeof arguments[i] === 'object') {\n arg += '\\n[' + i + '] ';\n for (key in arguments[0]) {\n if (hasOwnProp(arguments[0], key)) {\n arg += key + ': ' + arguments[0][key] + ', ';\n }\n }\n arg = arg.slice(0, -2); // Remove trailing comma and space\n } else {\n arg = arguments[i];\n }\n args.push(arg);\n }\n warn(\n msg +\n '\\nArguments: ' +\n Array.prototype.slice.call(args).join('') +\n '\\n' +\n new Error().stack\n );\n firstTime = false;\n }\n return fn.apply(this, arguments);\n }, fn);\n }\n\n var deprecations = {};\n\n function deprecateSimple(name, msg) {\n if (hooks.deprecationHandler != null) {\n hooks.deprecationHandler(name, msg);\n }\n if (!deprecations[name]) {\n warn(msg);\n deprecations[name] = true;\n }\n }\n\n hooks.suppressDeprecationWarnings = false;\n hooks.deprecationHandler = null;\n\n function isFunction(input) {\n return (\n (typeof Function !== 'undefined' && input instanceof Function) ||\n Object.prototype.toString.call(input) === '[object Function]'\n );\n }\n\n function set(config) {\n var prop, i;\n for (i in config) {\n if (hasOwnProp(config, i)) {\n prop = config[i];\n if (isFunction(prop)) {\n this[i] = prop;\n } else {\n this['_' + i] = prop;\n }\n }\n }\n this._config = config;\n // Lenient ordinal parsing accepts just a number in addition to\n // number + (possibly) stuff coming from _dayOfMonthOrdinalParse.\n // TODO: Remove \"ordinalParse\" fallback in next major release.\n this._dayOfMonthOrdinalParseLenient = new RegExp(\n (this._dayOfMonthOrdinalParse.source || this._ordinalParse.source) +\n '|' +\n /\\d{1,2}/.source\n );\n }\n\n function mergeConfigs(parentConfig, childConfig) {\n var res = extend({}, parentConfig),\n prop;\n for (prop in childConfig) {\n if (hasOwnProp(childConfig, prop)) {\n if (isObject(parentConfig[prop]) && isObject(childConfig[prop])) {\n res[prop] = {};\n extend(res[prop], parentConfig[prop]);\n extend(res[prop], childConfig[prop]);\n } else if (childConfig[prop] != null) {\n res[prop] = childConfig[prop];\n } else {\n delete res[prop];\n }\n }\n }\n for (prop in parentConfig) {\n if (\n hasOwnProp(parentConfig, prop) &&\n !hasOwnProp(childConfig, prop) &&\n isObject(parentConfig[prop])\n ) {\n // make sure changes to properties don't modify parent config\n res[prop] = extend({}, res[prop]);\n }\n }\n return res;\n }\n\n function Locale(config) {\n if (config != null) {\n this.set(config);\n }\n }\n\n var keys;\n\n if (Object.keys) {\n keys = Object.keys;\n } else {\n keys = function (obj) {\n var i,\n res = [];\n for (i in obj) {\n if (hasOwnProp(obj, i)) {\n res.push(i);\n }\n }\n return res;\n };\n }\n\n var defaultCalendar = {\n sameDay: '[Today at] LT',\n nextDay: '[Tomorrow at] LT',\n nextWeek: 'dddd [at] LT',\n lastDay: '[Yesterday at] LT',\n lastWeek: '[Last] dddd [at] LT',\n sameElse: 'L',\n };\n\n function calendar(key, mom, now) {\n var output = this._calendar[key] || this._calendar['sameElse'];\n return isFunction(output) ? output.call(mom, now) : output;\n }\n\n function zeroFill(number, targetLength, forceSign) {\n var absNumber = '' + Math.abs(number),\n zerosToFill = targetLength - absNumber.length,\n sign = number >= 0;\n return (\n (sign ? (forceSign ? '+' : '') : '-') +\n Math.pow(10, Math.max(0, zerosToFill)).toString().substr(1) +\n absNumber\n );\n }\n\n var formattingTokens =\n /(\\[[^\\[]*\\])|(\\\\)?([Hh]mm(ss)?|Mo|MM?M?M?|Do|DDDo|DD?D?D?|ddd?d?|do?|w[o|w]?|W[o|W]?|Qo?|N{1,5}|YYYYYY|YYYYY|YYYY|YY|y{2,4}|yo?|gg(ggg?)?|GG(GGG?)?|e|E|a|A|hh?|HH?|kk?|mm?|ss?|S{1,9}|x|X|zz?|ZZ?|.)/g,\n localFormattingTokens = /(\\[[^\\[]*\\])|(\\\\)?(LTS|LT|LL?L?L?|l{1,4})/g,\n formatFunctions = {},\n formatTokenFunctions = {};\n\n // token: 'M'\n // padded: ['MM', 2]\n // ordinal: 'Mo'\n // callback: function () { this.month() + 1 }\n function addFormatToken(token, padded, ordinal, callback) {\n var func = callback;\n if (typeof callback === 'string') {\n func = function () {\n return this[callback]();\n };\n }\n if (token) {\n formatTokenFunctions[token] = func;\n }\n if (padded) {\n formatTokenFunctions[padded[0]] = function () {\n return zeroFill(func.apply(this, arguments), padded[1], padded[2]);\n };\n }\n if (ordinal) {\n formatTokenFunctions[ordinal] = function () {\n return this.localeData().ordinal(\n func.apply(this, arguments),\n token\n );\n };\n }\n }\n\n function removeFormattingTokens(input) {\n if (input.match(/\\[[\\s\\S]/)) {\n return input.replace(/^\\[|\\]$/g, '');\n }\n return input.replace(/\\\\/g, '');\n }\n\n function makeFormatFunction(format) {\n var array = format.match(formattingTokens),\n i,\n length;\n\n for (i = 0, length = array.length; i < length; i++) {\n if (formatTokenFunctions[array[i]]) {\n array[i] = formatTokenFunctions[array[i]];\n } else {\n array[i] = removeFormattingTokens(array[i]);\n }\n }\n\n return function (mom) {\n var output = '',\n i;\n for (i = 0; i < length; i++) {\n output += isFunction(array[i])\n ? array[i].call(mom, format)\n : array[i];\n }\n return output;\n };\n }\n\n // format date using native date object\n function formatMoment(m, format) {\n if (!m.isValid()) {\n return m.localeData().invalidDate();\n }\n\n format = expandFormat(format, m.localeData());\n formatFunctions[format] =\n formatFunctions[format] || makeFormatFunction(format);\n\n return formatFunctions[format](m);\n }\n\n function expandFormat(format, locale) {\n var i = 5;\n\n function replaceLongDateFormatTokens(input) {\n return locale.longDateFormat(input) || input;\n }\n\n localFormattingTokens.lastIndex = 0;\n while (i >= 0 && localFormattingTokens.test(format)) {\n format = format.replace(\n localFormattingTokens,\n replaceLongDateFormatTokens\n );\n localFormattingTokens.lastIndex = 0;\n i -= 1;\n }\n\n return format;\n }\n\n var defaultLongDateFormat = {\n LTS: 'h:mm:ss A',\n LT: 'h:mm A',\n L: 'MM/DD/YYYY',\n LL: 'MMMM D, YYYY',\n LLL: 'MMMM D, YYYY h:mm A',\n LLLL: 'dddd, MMMM D, YYYY h:mm A',\n };\n\n function longDateFormat(key) {\n var format = this._longDateFormat[key],\n formatUpper = this._longDateFormat[key.toUpperCase()];\n\n if (format || !formatUpper) {\n return format;\n }\n\n this._longDateFormat[key] = formatUpper\n .match(formattingTokens)\n .map(function (tok) {\n if (\n tok === 'MMMM' ||\n tok === 'MM' ||\n tok === 'DD' ||\n tok === 'dddd'\n ) {\n return tok.slice(1);\n }\n return tok;\n })\n .join('');\n\n return this._longDateFormat[key];\n }\n\n var defaultInvalidDate = 'Invalid date';\n\n function invalidDate() {\n return this._invalidDate;\n }\n\n var defaultOrdinal = '%d',\n defaultDayOfMonthOrdinalParse = /\\d{1,2}/;\n\n function ordinal(number) {\n return this._ordinal.replace('%d', number);\n }\n\n var defaultRelativeTime = {\n future: 'in %s',\n past: '%s ago',\n s: 'a few seconds',\n ss: '%d seconds',\n m: 'a minute',\n mm: '%d minutes',\n h: 'an hour',\n hh: '%d hours',\n d: 'a day',\n dd: '%d days',\n w: 'a week',\n ww: '%d weeks',\n M: 'a month',\n MM: '%d months',\n y: 'a year',\n yy: '%d years',\n };\n\n function relativeTime(number, withoutSuffix, string, isFuture) {\n var output = this._relativeTime[string];\n return isFunction(output)\n ? output(number, withoutSuffix, string, isFuture)\n : output.replace(/%d/i, number);\n }\n\n function pastFuture(diff, output) {\n var format = this._relativeTime[diff > 0 ? 'future' : 'past'];\n return isFunction(format) ? format(output) : format.replace(/%s/i, output);\n }\n\n var aliases = {};\n\n function addUnitAlias(unit, shorthand) {\n var lowerCase = unit.toLowerCase();\n aliases[lowerCase] = aliases[lowerCase + 's'] = aliases[shorthand] = unit;\n }\n\n function normalizeUnits(units) {\n return typeof units === 'string'\n ? aliases[units] || aliases[units.toLowerCase()]\n : undefined;\n }\n\n function normalizeObjectUnits(inputObject) {\n var normalizedInput = {},\n normalizedProp,\n prop;\n\n for (prop in inputObject) {\n if (hasOwnProp(inputObject, prop)) {\n normalizedProp = normalizeUnits(prop);\n if (normalizedProp) {\n normalizedInput[normalizedProp] = inputObject[prop];\n }\n }\n }\n\n return normalizedInput;\n }\n\n var priorities = {};\n\n function addUnitPriority(unit, priority) {\n priorities[unit] = priority;\n }\n\n function getPrioritizedUnits(unitsObj) {\n var units = [],\n u;\n for (u in unitsObj) {\n if (hasOwnProp(unitsObj, u)) {\n units.push({ unit: u, priority: priorities[u] });\n }\n }\n units.sort(function (a, b) {\n return a.priority - b.priority;\n });\n return units;\n }\n\n function isLeapYear(year) {\n return (year % 4 === 0 && year % 100 !== 0) || year % 400 === 0;\n }\n\n function absFloor(number) {\n if (number < 0) {\n // -0 -> 0\n return Math.ceil(number) || 0;\n } else {\n return Math.floor(number);\n }\n }\n\n function toInt(argumentForCoercion) {\n var coercedNumber = +argumentForCoercion,\n value = 0;\n\n if (coercedNumber !== 0 && isFinite(coercedNumber)) {\n value = absFloor(coercedNumber);\n }\n\n return value;\n }\n\n function makeGetSet(unit, keepTime) {\n return function (value) {\n if (value != null) {\n set$1(this, unit, value);\n hooks.updateOffset(this, keepTime);\n return this;\n } else {\n return get(this, unit);\n }\n };\n }\n\n function get(mom, unit) {\n return mom.isValid()\n ? mom._d['get' + (mom._isUTC ? 'UTC' : '') + unit]()\n : NaN;\n }\n\n function set$1(mom, unit, value) {\n if (mom.isValid() && !isNaN(value)) {\n if (\n unit === 'FullYear' &&\n isLeapYear(mom.year()) &&\n mom.month() === 1 &&\n mom.date() === 29\n ) {\n value = toInt(value);\n mom._d['set' + (mom._isUTC ? 'UTC' : '') + unit](\n value,\n mom.month(),\n daysInMonth(value, mom.month())\n );\n } else {\n mom._d['set' + (mom._isUTC ? 'UTC' : '') + unit](value);\n }\n }\n }\n\n // MOMENTS\n\n function stringGet(units) {\n units = normalizeUnits(units);\n if (isFunction(this[units])) {\n return this[units]();\n }\n return this;\n }\n\n function stringSet(units, value) {\n if (typeof units === 'object') {\n units = normalizeObjectUnits(units);\n var prioritized = getPrioritizedUnits(units),\n i,\n prioritizedLen = prioritized.length;\n for (i = 0; i < prioritizedLen; i++) {\n this[prioritized[i].unit](units[prioritized[i].unit]);\n }\n } else {\n units = normalizeUnits(units);\n if (isFunction(this[units])) {\n return this[units](value);\n }\n }\n return this;\n }\n\n var match1 = /\\d/, // 0 - 9\n match2 = /\\d\\d/, // 00 - 99\n match3 = /\\d{3}/, // 000 - 999\n match4 = /\\d{4}/, // 0000 - 9999\n match6 = /[+-]?\\d{6}/, // -999999 - 999999\n match1to2 = /\\d\\d?/, // 0 - 99\n match3to4 = /\\d\\d\\d\\d?/, // 999 - 9999\n match5to6 = /\\d\\d\\d\\d\\d\\d?/, // 99999 - 999999\n match1to3 = /\\d{1,3}/, // 0 - 999\n match1to4 = /\\d{1,4}/, // 0 - 9999\n match1to6 = /[+-]?\\d{1,6}/, // -999999 - 999999\n matchUnsigned = /\\d+/, // 0 - inf\n matchSigned = /[+-]?\\d+/, // -inf - inf\n matchOffset = /Z|[+-]\\d\\d:?\\d\\d/gi, // +00:00 -00:00 +0000 -0000 or Z\n matchShortOffset = /Z|[+-]\\d\\d(?::?\\d\\d)?/gi, // +00 -00 +00:00 -00:00 +0000 -0000 or Z\n matchTimestamp = /[+-]?\\d+(\\.\\d{1,3})?/, // 123456789 123456789.123\n // any word (or two) characters or numbers including two/three word month in arabic.\n // includes scottish gaelic two word and hyphenated months\n matchWord =\n /[0-9]{0,256}['a-z\\u00A0-\\u05FF\\u0700-\\uD7FF\\uF900-\\uFDCF\\uFDF0-\\uFF07\\uFF10-\\uFFEF]{1,256}|[\\u0600-\\u06FF\\/]{1,256}(\\s*?[\\u0600-\\u06FF]{1,256}){1,2}/i,\n regexes;\n\n regexes = {};\n\n function addRegexToken(token, regex, strictRegex) {\n regexes[token] = isFunction(regex)\n ? regex\n : function (isStrict, localeData) {\n return isStrict && strictRegex ? strictRegex : regex;\n };\n }\n\n function getParseRegexForToken(token, config) {\n if (!hasOwnProp(regexes, token)) {\n return new RegExp(unescapeFormat(token));\n }\n\n return regexes[token](config._strict, config._locale);\n }\n\n // Code from http://stackoverflow.com/questions/3561493/is-there-a-regexp-escape-function-in-javascript\n function unescapeFormat(s) {\n return regexEscape(\n s\n .replace('\\\\', '')\n .replace(\n /\\\\(\\[)|\\\\(\\])|\\[([^\\]\\[]*)\\]|\\\\(.)/g,\n function (matched, p1, p2, p3, p4) {\n return p1 || p2 || p3 || p4;\n }\n )\n );\n }\n\n function regexEscape(s) {\n return s.replace(/[-\\/\\\\^$*+?.()|[\\]{}]/g, '\\\\$&');\n }\n\n var tokens = {};\n\n function addParseToken(token, callback) {\n var i,\n func = callback,\n tokenLen;\n if (typeof token === 'string') {\n token = [token];\n }\n if (isNumber(callback)) {\n func = function (input, array) {\n array[callback] = toInt(input);\n };\n }\n tokenLen = token.length;\n for (i = 0; i < tokenLen; i++) {\n tokens[token[i]] = func;\n }\n }\n\n function addWeekParseToken(token, callback) {\n addParseToken(token, function (input, array, config, token) {\n config._w = config._w || {};\n callback(input, config._w, config, token);\n });\n }\n\n function addTimeToArrayFromToken(token, input, config) {\n if (input != null && hasOwnProp(tokens, token)) {\n tokens[token](input, config._a, config, token);\n }\n }\n\n var YEAR = 0,\n MONTH = 1,\n DATE = 2,\n HOUR = 3,\n MINUTE = 4,\n SECOND = 5,\n MILLISECOND = 6,\n WEEK = 7,\n WEEKDAY = 8;\n\n function mod(n, x) {\n return ((n % x) + x) % x;\n }\n\n var indexOf;\n\n if (Array.prototype.indexOf) {\n indexOf = Array.prototype.indexOf;\n } else {\n indexOf = function (o) {\n // I know\n var i;\n for (i = 0; i < this.length; ++i) {\n if (this[i] === o) {\n return i;\n }\n }\n return -1;\n };\n }\n\n function daysInMonth(year, month) {\n if (isNaN(year) || isNaN(month)) {\n return NaN;\n }\n var modMonth = mod(month, 12);\n year += (month - modMonth) / 12;\n return modMonth === 1\n ? isLeapYear(year)\n ? 29\n : 28\n : 31 - ((modMonth % 7) % 2);\n }\n\n // FORMATTING\n\n addFormatToken('M', ['MM', 2], 'Mo', function () {\n return this.month() + 1;\n });\n\n addFormatToken('MMM', 0, 0, function (format) {\n return this.localeData().monthsShort(this, format);\n });\n\n addFormatToken('MMMM', 0, 0, function (format) {\n return this.localeData().months(this, format);\n });\n\n // ALIASES\n\n addUnitAlias('month', 'M');\n\n // PRIORITY\n\n addUnitPriority('month', 8);\n\n // PARSING\n\n addRegexToken('M', match1to2);\n addRegexToken('MM', match1to2, match2);\n addRegexToken('MMM', function (isStrict, locale) {\n return locale.monthsShortRegex(isStrict);\n });\n addRegexToken('MMMM', function (isStrict, locale) {\n return locale.monthsRegex(isStrict);\n });\n\n addParseToken(['M', 'MM'], function (input, array) {\n array[MONTH] = toInt(input) - 1;\n });\n\n addParseToken(['MMM', 'MMMM'], function (input, array, config, token) {\n var month = config._locale.monthsParse(input, token, config._strict);\n // if we didn't find a month name, mark the date as invalid.\n if (month != null) {\n array[MONTH] = month;\n } else {\n getParsingFlags(config).invalidMonth = input;\n }\n });\n\n // LOCALES\n\n var defaultLocaleMonths =\n 'January_February_March_April_May_June_July_August_September_October_November_December'.split(\n '_'\n ),\n defaultLocaleMonthsShort =\n 'Jan_Feb_Mar_Apr_May_Jun_Jul_Aug_Sep_Oct_Nov_Dec'.split('_'),\n MONTHS_IN_FORMAT = /D[oD]?(\\[[^\\[\\]]*\\]|\\s)+MMMM?/,\n defaultMonthsShortRegex = matchWord,\n defaultMonthsRegex = matchWord;\n\n function localeMonths(m, format) {\n if (!m) {\n return isArray(this._months)\n ? this._months\n : this._months['standalone'];\n }\n return isArray(this._months)\n ? this._months[m.month()]\n : this._months[\n (this._months.isFormat || MONTHS_IN_FORMAT).test(format)\n ? 'format'\n : 'standalone'\n ][m.month()];\n }\n\n function localeMonthsShort(m, format) {\n if (!m) {\n return isArray(this._monthsShort)\n ? this._monthsShort\n : this._monthsShort['standalone'];\n }\n return isArray(this._monthsShort)\n ? this._monthsShort[m.month()]\n : this._monthsShort[\n MONTHS_IN_FORMAT.test(format) ? 'format' : 'standalone'\n ][m.month()];\n }\n\n function handleStrictParse(monthName, format, strict) {\n var i,\n ii,\n mom,\n llc = monthName.toLocaleLowerCase();\n if (!this._monthsParse) {\n // this is not used\n this._monthsParse = [];\n this._longMonthsParse = [];\n this._shortMonthsParse = [];\n for (i = 0; i < 12; ++i) {\n mom = createUTC([2000, i]);\n this._shortMonthsParse[i] = this.monthsShort(\n mom,\n ''\n ).toLocaleLowerCase();\n this._longMonthsParse[i] = this.months(mom, '').toLocaleLowerCase();\n }\n }\n\n if (strict) {\n if (format === 'MMM') {\n ii = indexOf.call(this._shortMonthsParse, llc);\n return ii !== -1 ? ii : null;\n } else {\n ii = indexOf.call(this._longMonthsParse, llc);\n return ii !== -1 ? ii : null;\n }\n } else {\n if (format === 'MMM') {\n ii = indexOf.call(this._shortMonthsParse, llc);\n if (ii !== -1) {\n return ii;\n }\n ii = indexOf.call(this._longMonthsParse, llc);\n return ii !== -1 ? ii : null;\n } else {\n ii = indexOf.call(this._longMonthsParse, llc);\n if (ii !== -1) {\n return ii;\n }\n ii = indexOf.call(this._shortMonthsParse, llc);\n return ii !== -1 ? ii : null;\n }\n }\n }\n\n function localeMonthsParse(monthName, format, strict) {\n var i, mom, regex;\n\n if (this._monthsParseExact) {\n return handleStrictParse.call(this, monthName, format, strict);\n }\n\n if (!this._monthsParse) {\n this._monthsParse = [];\n this._longMonthsParse = [];\n this._shortMonthsParse = [];\n }\n\n // TODO: add sorting\n // Sorting makes sure if one month (or abbr) is a prefix of another\n // see sorting in computeMonthsParse\n for (i = 0; i < 12; i++) {\n // make the regex if we don't have it already\n mom = createUTC([2000, i]);\n if (strict && !this._longMonthsParse[i]) {\n this._longMonthsParse[i] = new RegExp(\n '^' + this.months(mom, '').replace('.', '') + '$',\n 'i'\n );\n this._shortMonthsParse[i] = new RegExp(\n '^' + this.monthsShort(mom, '').replace('.', '') + '$',\n 'i'\n );\n }\n if (!strict && !this._monthsParse[i]) {\n regex =\n '^' + this.months(mom, '') + '|^' + this.monthsShort(mom, '');\n this._monthsParse[i] = new RegExp(regex.replace('.', ''), 'i');\n }\n // test the regex\n if (\n strict &&\n format === 'MMMM' &&\n this._longMonthsParse[i].test(monthName)\n ) {\n return i;\n } else if (\n strict &&\n format === 'MMM' &&\n this._shortMonthsParse[i].test(monthName)\n ) {\n return i;\n } else if (!strict && this._monthsParse[i].test(monthName)) {\n return i;\n }\n }\n }\n\n // MOMENTS\n\n function setMonth(mom, value) {\n var dayOfMonth;\n\n if (!mom.isValid()) {\n // No op\n return mom;\n }\n\n if (typeof value === 'string') {\n if (/^\\d+$/.test(value)) {\n value = toInt(value);\n } else {\n value = mom.localeData().monthsParse(value);\n // TODO: Another silent failure?\n if (!isNumber(value)) {\n return mom;\n }\n }\n }\n\n dayOfMonth = Math.min(mom.date(), daysInMonth(mom.year(), value));\n mom._d['set' + (mom._isUTC ? 'UTC' : '') + 'Month'](value, dayOfMonth);\n return mom;\n }\n\n function getSetMonth(value) {\n if (value != null) {\n setMonth(this, value);\n hooks.updateOffset(this, true);\n return this;\n } else {\n return get(this, 'Month');\n }\n }\n\n function getDaysInMonth() {\n return daysInMonth(this.year(), this.month());\n }\n\n function monthsShortRegex(isStrict) {\n if (this._monthsParseExact) {\n if (!hasOwnProp(this, '_monthsRegex')) {\n computeMonthsParse.call(this);\n }\n if (isStrict) {\n return this._monthsShortStrictRegex;\n } else {\n return this._monthsShortRegex;\n }\n } else {\n if (!hasOwnProp(this, '_monthsShortRegex')) {\n this._monthsShortRegex = defaultMonthsShortRegex;\n }\n return this._monthsShortStrictRegex && isStrict\n ? this._monthsShortStrictRegex\n : this._monthsShortRegex;\n }\n }\n\n function monthsRegex(isStrict) {\n if (this._monthsParseExact) {\n if (!hasOwnProp(this, '_monthsRegex')) {\n computeMonthsParse.call(this);\n }\n if (isStrict) {\n return this._monthsStrictRegex;\n } else {\n return this._monthsRegex;\n }\n } else {\n if (!hasOwnProp(this, '_monthsRegex')) {\n this._monthsRegex = defaultMonthsRegex;\n }\n return this._monthsStrictRegex && isStrict\n ? this._monthsStrictRegex\n : this._monthsRegex;\n }\n }\n\n function computeMonthsParse() {\n function cmpLenRev(a, b) {\n return b.length - a.length;\n }\n\n var shortPieces = [],\n longPieces = [],\n mixedPieces = [],\n i,\n mom;\n for (i = 0; i < 12; i++) {\n // make the regex if we don't have it already\n mom = createUTC([2000, i]);\n shortPieces.push(this.monthsShort(mom, ''));\n longPieces.push(this.months(mom, ''));\n mixedPieces.push(this.months(mom, ''));\n mixedPieces.push(this.monthsShort(mom, ''));\n }\n // Sorting makes sure if one month (or abbr) is a prefix of another it\n // will match the longer piece.\n shortPieces.sort(cmpLenRev);\n longPieces.sort(cmpLenRev);\n mixedPieces.sort(cmpLenRev);\n for (i = 0; i < 12; i++) {\n shortPieces[i] = regexEscape(shortPieces[i]);\n longPieces[i] = regexEscape(longPieces[i]);\n }\n for (i = 0; i < 24; i++) {\n mixedPieces[i] = regexEscape(mixedPieces[i]);\n }\n\n this._monthsRegex = new RegExp('^(' + mixedPieces.join('|') + ')', 'i');\n this._monthsShortRegex = this._monthsRegex;\n this._monthsStrictRegex = new RegExp(\n '^(' + longPieces.join('|') + ')',\n 'i'\n );\n this._monthsShortStrictRegex = new RegExp(\n '^(' + shortPieces.join('|') + ')',\n 'i'\n );\n }\n\n // FORMATTING\n\n addFormatToken('Y', 0, 0, function () {\n var y = this.year();\n return y <= 9999 ? zeroFill(y, 4) : '+' + y;\n });\n\n addFormatToken(0, ['YY', 2], 0, function () {\n return this.year() % 100;\n });\n\n addFormatToken(0, ['YYYY', 4], 0, 'year');\n addFormatToken(0, ['YYYYY', 5], 0, 'year');\n addFormatToken(0, ['YYYYYY', 6, true], 0, 'year');\n\n // ALIASES\n\n addUnitAlias('year', 'y');\n\n // PRIORITIES\n\n addUnitPriority('year', 1);\n\n // PARSING\n\n addRegexToken('Y', matchSigned);\n addRegexToken('YY', match1to2, match2);\n addRegexToken('YYYY', match1to4, match4);\n addRegexToken('YYYYY', match1to6, match6);\n addRegexToken('YYYYYY', match1to6, match6);\n\n addParseToken(['YYYYY', 'YYYYYY'], YEAR);\n addParseToken('YYYY', function (input, array) {\n array[YEAR] =\n input.length === 2 ? hooks.parseTwoDigitYear(input) : toInt(input);\n });\n addParseToken('YY', function (input, array) {\n array[YEAR] = hooks.parseTwoDigitYear(input);\n });\n addParseToken('Y', function (input, array) {\n array[YEAR] = parseInt(input, 10);\n });\n\n // HELPERS\n\n function daysInYear(year) {\n return isLeapYear(year) ? 366 : 365;\n }\n\n // HOOKS\n\n hooks.parseTwoDigitYear = function (input) {\n return toInt(input) + (toInt(input) > 68 ? 1900 : 2000);\n };\n\n // MOMENTS\n\n var getSetYear = makeGetSet('FullYear', true);\n\n function getIsLeapYear() {\n return isLeapYear(this.year());\n }\n\n function createDate(y, m, d, h, M, s, ms) {\n // can't just apply() to create a date:\n // https://stackoverflow.com/q/181348\n var date;\n // the date constructor remaps years 0-99 to 1900-1999\n if (y < 100 && y >= 0) {\n // preserve leap years using a full 400 year cycle, then reset\n date = new Date(y + 400, m, d, h, M, s, ms);\n if (isFinite(date.getFullYear())) {\n date.setFullYear(y);\n }\n } else {\n date = new Date(y, m, d, h, M, s, ms);\n }\n\n return date;\n }\n\n function createUTCDate(y) {\n var date, args;\n // the Date.UTC function remaps years 0-99 to 1900-1999\n if (y < 100 && y >= 0) {\n args = Array.prototype.slice.call(arguments);\n // preserve leap years using a full 400 year cycle, then reset\n args[0] = y + 400;\n date = new Date(Date.UTC.apply(null, args));\n if (isFinite(date.getUTCFullYear())) {\n date.setUTCFullYear(y);\n }\n } else {\n date = new Date(Date.UTC.apply(null, arguments));\n }\n\n return date;\n }\n\n // start-of-first-week - start-of-year\n function firstWeekOffset(year, dow, doy) {\n var // first-week day -- which january is always in the first week (4 for iso, 1 for other)\n fwd = 7 + dow - doy,\n // first-week day local weekday -- which local weekday is fwd\n fwdlw = (7 + createUTCDate(year, 0, fwd).getUTCDay() - dow) % 7;\n\n return -fwdlw + fwd - 1;\n }\n\n // https://en.wikipedia.org/wiki/ISO_week_date#Calculating_a_date_given_the_year.2C_week_number_and_weekday\n function dayOfYearFromWeeks(year, week, weekday, dow, doy) {\n var localWeekday = (7 + weekday - dow) % 7,\n weekOffset = firstWeekOffset(year, dow, doy),\n dayOfYear = 1 + 7 * (week - 1) + localWeekday + weekOffset,\n resYear,\n resDayOfYear;\n\n if (dayOfYear <= 0) {\n resYear = year - 1;\n resDayOfYear = daysInYear(resYear) + dayOfYear;\n } else if (dayOfYear > daysInYear(year)) {\n resYear = year + 1;\n resDayOfYear = dayOfYear - daysInYear(year);\n } else {\n resYear = year;\n resDayOfYear = dayOfYear;\n }\n\n return {\n year: resYear,\n dayOfYear: resDayOfYear,\n };\n }\n\n function weekOfYear(mom, dow, doy) {\n var weekOffset = firstWeekOffset(mom.year(), dow, doy),\n week = Math.floor((mom.dayOfYear() - weekOffset - 1) / 7) + 1,\n resWeek,\n resYear;\n\n if (week < 1) {\n resYear = mom.year() - 1;\n resWeek = week + weeksInYear(resYear, dow, doy);\n } else if (week > weeksInYear(mom.year(), dow, doy)) {\n resWeek = week - weeksInYear(mom.year(), dow, doy);\n resYear = mom.year() + 1;\n } else {\n resYear = mom.year();\n resWeek = week;\n }\n\n return {\n week: resWeek,\n year: resYear,\n };\n }\n\n function weeksInYear(year, dow, doy) {\n var weekOffset = firstWeekOffset(year, dow, doy),\n weekOffsetNext = firstWeekOffset(year + 1, dow, doy);\n return (daysInYear(year) - weekOffset + weekOffsetNext) / 7;\n }\n\n // FORMATTING\n\n addFormatToken('w', ['ww', 2], 'wo', 'week');\n addFormatToken('W', ['WW', 2], 'Wo', 'isoWeek');\n\n // ALIASES\n\n addUnitAlias('week', 'w');\n addUnitAlias('isoWeek', 'W');\n\n // PRIORITIES\n\n addUnitPriority('week', 5);\n addUnitPriority('isoWeek', 5);\n\n // PARSING\n\n addRegexToken('w', match1to2);\n addRegexToken('ww', match1to2, match2);\n addRegexToken('W', match1to2);\n addRegexToken('WW', match1to2, match2);\n\n addWeekParseToken(\n ['w', 'ww', 'W', 'WW'],\n function (input, week, config, token) {\n week[token.substr(0, 1)] = toInt(input);\n }\n );\n\n // HELPERS\n\n // LOCALES\n\n function localeWeek(mom) {\n return weekOfYear(mom, this._week.dow, this._week.doy).week;\n }\n\n var defaultLocaleWeek = {\n dow: 0, // Sunday is the first day of the week.\n doy: 6, // The week that contains Jan 6th is the first week of the year.\n };\n\n function localeFirstDayOfWeek() {\n return this._week.dow;\n }\n\n function localeFirstDayOfYear() {\n return this._week.doy;\n }\n\n // MOMENTS\n\n function getSetWeek(input) {\n var week = this.localeData().week(this);\n return input == null ? week : this.add((input - week) * 7, 'd');\n }\n\n function getSetISOWeek(input) {\n var week = weekOfYear(this, 1, 4).week;\n return input == null ? week : this.add((input - week) * 7, 'd');\n }\n\n // FORMATTING\n\n addFormatToken('d', 0, 'do', 'day');\n\n addFormatToken('dd', 0, 0, function (format) {\n return this.localeData().weekdaysMin(this, format);\n });\n\n addFormatToken('ddd', 0, 0, function (format) {\n return this.localeData().weekdaysShort(this, format);\n });\n\n addFormatToken('dddd', 0, 0, function (format) {\n return this.localeData().weekdays(this, format);\n });\n\n addFormatToken('e', 0, 0, 'weekday');\n addFormatToken('E', 0, 0, 'isoWeekday');\n\n // ALIASES\n\n addUnitAlias('day', 'd');\n addUnitAlias('weekday', 'e');\n addUnitAlias('isoWeekday', 'E');\n\n // PRIORITY\n addUnitPriority('day', 11);\n addUnitPriority('weekday', 11);\n addUnitPriority('isoWeekday', 11);\n\n // PARSING\n\n addRegexToken('d', match1to2);\n addRegexToken('e', match1to2);\n addRegexToken('E', match1to2);\n addRegexToken('dd', function (isStrict, locale) {\n return locale.weekdaysMinRegex(isStrict);\n });\n addRegexToken('ddd', function (isStrict, locale) {\n return locale.weekdaysShortRegex(isStrict);\n });\n addRegexToken('dddd', function (isStrict, locale) {\n return locale.weekdaysRegex(isStrict);\n });\n\n addWeekParseToken(['dd', 'ddd', 'dddd'], function (input, week, config, token) {\n var weekday = config._locale.weekdaysParse(input, token, config._strict);\n // if we didn't get a weekday name, mark the date as invalid\n if (weekday != null) {\n week.d = weekday;\n } else {\n getParsingFlags(config).invalidWeekday = input;\n }\n });\n\n addWeekParseToken(['d', 'e', 'E'], function (input, week, config, token) {\n week[token] = toInt(input);\n });\n\n // HELPERS\n\n function parseWeekday(input, locale) {\n if (typeof input !== 'string') {\n return input;\n }\n\n if (!isNaN(input)) {\n return parseInt(input, 10);\n }\n\n input = locale.weekdaysParse(input);\n if (typeof input === 'number') {\n return input;\n }\n\n return null;\n }\n\n function parseIsoWeekday(input, locale) {\n if (typeof input === 'string') {\n return locale.weekdaysParse(input) % 7 || 7;\n }\n return isNaN(input) ? null : input;\n }\n\n // LOCALES\n function shiftWeekdays(ws, n) {\n return ws.slice(n, 7).concat(ws.slice(0, n));\n }\n\n var defaultLocaleWeekdays =\n 'Sunday_Monday_Tuesday_Wednesday_Thursday_Friday_Saturday'.split('_'),\n defaultLocaleWeekdaysShort = 'Sun_Mon_Tue_Wed_Thu_Fri_Sat'.split('_'),\n defaultLocaleWeekdaysMin = 'Su_Mo_Tu_We_Th_Fr_Sa'.split('_'),\n defaultWeekdaysRegex = matchWord,\n defaultWeekdaysShortRegex = matchWord,\n defaultWeekdaysMinRegex = matchWord;\n\n function localeWeekdays(m, format) {\n var weekdays = isArray(this._weekdays)\n ? this._weekdays\n : this._weekdays[\n m && m !== true && this._weekdays.isFormat.test(format)\n ? 'format'\n : 'standalone'\n ];\n return m === true\n ? shiftWeekdays(weekdays, this._week.dow)\n : m\n ? weekdays[m.day()]\n : weekdays;\n }\n\n function localeWeekdaysShort(m) {\n return m === true\n ? shiftWeekdays(this._weekdaysShort, this._week.dow)\n : m\n ? this._weekdaysShort[m.day()]\n : this._weekdaysShort;\n }\n\n function localeWeekdaysMin(m) {\n return m === true\n ? shiftWeekdays(this._weekdaysMin, this._week.dow)\n : m\n ? this._weekdaysMin[m.day()]\n : this._weekdaysMin;\n }\n\n function handleStrictParse$1(weekdayName, format, strict) {\n var i,\n ii,\n mom,\n llc = weekdayName.toLocaleLowerCase();\n if (!this._weekdaysParse) {\n this._weekdaysParse = [];\n this._shortWeekdaysParse = [];\n this._minWeekdaysParse = [];\n\n for (i = 0; i < 7; ++i) {\n mom = createUTC([2000, 1]).day(i);\n this._minWeekdaysParse[i] = this.weekdaysMin(\n mom,\n ''\n ).toLocaleLowerCase();\n this._shortWeekdaysParse[i] = this.weekdaysShort(\n mom,\n ''\n ).toLocaleLowerCase();\n this._weekdaysParse[i] = this.weekdays(mom, '').toLocaleLowerCase();\n }\n }\n\n if (strict) {\n if (format === 'dddd') {\n ii = indexOf.call(this._weekdaysParse, llc);\n return ii !== -1 ? ii : null;\n } else if (format === 'ddd') {\n ii = indexOf.call(this._shortWeekdaysParse, llc);\n return ii !== -1 ? ii : null;\n } else {\n ii = indexOf.call(this._minWeekdaysParse, llc);\n return ii !== -1 ? ii : null;\n }\n } else {\n if (format === 'dddd') {\n ii = indexOf.call(this._weekdaysParse, llc);\n if (ii !== -1) {\n return ii;\n }\n ii = indexOf.call(this._shortWeekdaysParse, llc);\n if (ii !== -1) {\n return ii;\n }\n ii = indexOf.call(this._minWeekdaysParse, llc);\n return ii !== -1 ? ii : null;\n } else if (format === 'ddd') {\n ii = indexOf.call(this._shortWeekdaysParse, llc);\n if (ii !== -1) {\n return ii;\n }\n ii = indexOf.call(this._weekdaysParse, llc);\n if (ii !== -1) {\n return ii;\n }\n ii = indexOf.call(this._minWeekdaysParse, llc);\n return ii !== -1 ? ii : null;\n } else {\n ii = indexOf.call(this._minWeekdaysParse, llc);\n if (ii !== -1) {\n return ii;\n }\n ii = indexOf.call(this._weekdaysParse, llc);\n if (ii !== -1) {\n return ii;\n }\n ii = indexOf.call(this._shortWeekdaysParse, llc);\n return ii !== -1 ? ii : null;\n }\n }\n }\n\n function localeWeekdaysParse(weekdayName, format, strict) {\n var i, mom, regex;\n\n if (this._weekdaysParseExact) {\n return handleStrictParse$1.call(this, weekdayName, format, strict);\n }\n\n if (!this._weekdaysParse) {\n this._weekdaysParse = [];\n this._minWeekdaysParse = [];\n this._shortWeekdaysParse = [];\n this._fullWeekdaysParse = [];\n }\n\n for (i = 0; i < 7; i++) {\n // make the regex if we don't have it already\n\n mom = createUTC([2000, 1]).day(i);\n if (strict && !this._fullWeekdaysParse[i]) {\n this._fullWeekdaysParse[i] = new RegExp(\n '^' + this.weekdays(mom, '').replace('.', '\\\\.?') + '$',\n 'i'\n );\n this._shortWeekdaysParse[i] = new RegExp(\n '^' + this.weekdaysShort(mom, '').replace('.', '\\\\.?') + '$',\n 'i'\n );\n this._minWeekdaysParse[i] = new RegExp(\n '^' + this.weekdaysMin(mom, '').replace('.', '\\\\.?') + '$',\n 'i'\n );\n }\n if (!this._weekdaysParse[i]) {\n regex =\n '^' +\n this.weekdays(mom, '') +\n '|^' +\n this.weekdaysShort(mom, '') +\n '|^' +\n this.weekdaysMin(mom, '');\n this._weekdaysParse[i] = new RegExp(regex.replace('.', ''), 'i');\n }\n // test the regex\n if (\n strict &&\n format === 'dddd' &&\n this._fullWeekdaysParse[i].test(weekdayName)\n ) {\n return i;\n } else if (\n strict &&\n format === 'ddd' &&\n this._shortWeekdaysParse[i].test(weekdayName)\n ) {\n return i;\n } else if (\n strict &&\n format === 'dd' &&\n this._minWeekdaysParse[i].test(weekdayName)\n ) {\n return i;\n } else if (!strict && this._weekdaysParse[i].test(weekdayName)) {\n return i;\n }\n }\n }\n\n // MOMENTS\n\n function getSetDayOfWeek(input) {\n if (!this.isValid()) {\n return input != null ? this : NaN;\n }\n var day = this._isUTC ? this._d.getUTCDay() : this._d.getDay();\n if (input != null) {\n input = parseWeekday(input, this.localeData());\n return this.add(input - day, 'd');\n } else {\n return day;\n }\n }\n\n function getSetLocaleDayOfWeek(input) {\n if (!this.isValid()) {\n return input != null ? this : NaN;\n }\n var weekday = (this.day() + 7 - this.localeData()._week.dow) % 7;\n return input == null ? weekday : this.add(input - weekday, 'd');\n }\n\n function getSetISODayOfWeek(input) {\n if (!this.isValid()) {\n return input != null ? this : NaN;\n }\n\n // behaves the same as moment#day except\n // as a getter, returns 7 instead of 0 (1-7 range instead of 0-6)\n // as a setter, sunday should belong to the previous week.\n\n if (input != null) {\n var weekday = parseIsoWeekday(input, this.localeData());\n return this.day(this.day() % 7 ? weekday : weekday - 7);\n } else {\n return this.day() || 7;\n }\n }\n\n function weekdaysRegex(isStrict) {\n if (this._weekdaysParseExact) {\n if (!hasOwnProp(this, '_weekdaysRegex')) {\n computeWeekdaysParse.call(this);\n }\n if (isStrict) {\n return this._weekdaysStrictRegex;\n } else {\n return this._weekdaysRegex;\n }\n } else {\n if (!hasOwnProp(this, '_weekdaysRegex')) {\n this._weekdaysRegex = defaultWeekdaysRegex;\n }\n return this._weekdaysStrictRegex && isStrict\n ? this._weekdaysStrictRegex\n : this._weekdaysRegex;\n }\n }\n\n function weekdaysShortRegex(isStrict) {\n if (this._weekdaysParseExact) {\n if (!hasOwnProp(this, '_weekdaysRegex')) {\n computeWeekdaysParse.call(this);\n }\n if (isStrict) {\n return this._weekdaysShortStrictRegex;\n } else {\n return this._weekdaysShortRegex;\n }\n } else {\n if (!hasOwnProp(this, '_weekdaysShortRegex')) {\n this._weekdaysShortRegex = defaultWeekdaysShortRegex;\n }\n return this._weekdaysShortStrictRegex && isStrict\n ? this._weekdaysShortStrictRegex\n : this._weekdaysShortRegex;\n }\n }\n\n function weekdaysMinRegex(isStrict) {\n if (this._weekdaysParseExact) {\n if (!hasOwnProp(this, '_weekdaysRegex')) {\n computeWeekdaysParse.call(this);\n }\n if (isStrict) {\n return this._weekdaysMinStrictRegex;\n } else {\n return this._weekdaysMinRegex;\n }\n } else {\n if (!hasOwnProp(this, '_weekdaysMinRegex')) {\n this._weekdaysMinRegex = defaultWeekdaysMinRegex;\n }\n return this._weekdaysMinStrictRegex && isStrict\n ? this._weekdaysMinStrictRegex\n : this._weekdaysMinRegex;\n }\n }\n\n function computeWeekdaysParse() {\n function cmpLenRev(a, b) {\n return b.length - a.length;\n }\n\n var minPieces = [],\n shortPieces = [],\n longPieces = [],\n mixedPieces = [],\n i,\n mom,\n minp,\n shortp,\n longp;\n for (i = 0; i < 7; i++) {\n // make the regex if we don't have it already\n mom = createUTC([2000, 1]).day(i);\n minp = regexEscape(this.weekdaysMin(mom, ''));\n shortp = regexEscape(this.weekdaysShort(mom, ''));\n longp = regexEscape(this.weekdays(mom, ''));\n minPieces.push(minp);\n shortPieces.push(shortp);\n longPieces.push(longp);\n mixedPieces.push(minp);\n mixedPieces.push(shortp);\n mixedPieces.push(longp);\n }\n // Sorting makes sure if one weekday (or abbr) is a prefix of another it\n // will match the longer piece.\n minPieces.sort(cmpLenRev);\n shortPieces.sort(cmpLenRev);\n longPieces.sort(cmpLenRev);\n mixedPieces.sort(cmpLenRev);\n\n this._weekdaysRegex = new RegExp('^(' + mixedPieces.join('|') + ')', 'i');\n this._weekdaysShortRegex = this._weekdaysRegex;\n this._weekdaysMinRegex = this._weekdaysRegex;\n\n this._weekdaysStrictRegex = new RegExp(\n '^(' + longPieces.join('|') + ')',\n 'i'\n );\n this._weekdaysShortStrictRegex = new RegExp(\n '^(' + shortPieces.join('|') + ')',\n 'i'\n );\n this._weekdaysMinStrictRegex = new RegExp(\n '^(' + minPieces.join('|') + ')',\n 'i'\n );\n }\n\n // FORMATTING\n\n function hFormat() {\n return this.hours() % 12 || 12;\n }\n\n function kFormat() {\n return this.hours() || 24;\n }\n\n addFormatToken('H', ['HH', 2], 0, 'hour');\n addFormatToken('h', ['hh', 2], 0, hFormat);\n addFormatToken('k', ['kk', 2], 0, kFormat);\n\n addFormatToken('hmm', 0, 0, function () {\n return '' + hFormat.apply(this) + zeroFill(this.minutes(), 2);\n });\n\n addFormatToken('hmmss', 0, 0, function () {\n return (\n '' +\n hFormat.apply(this) +\n zeroFill(this.minutes(), 2) +\n zeroFill(this.seconds(), 2)\n );\n });\n\n addFormatToken('Hmm', 0, 0, function () {\n return '' + this.hours() + zeroFill(this.minutes(), 2);\n });\n\n addFormatToken('Hmmss', 0, 0, function () {\n return (\n '' +\n this.hours() +\n zeroFill(this.minutes(), 2) +\n zeroFill(this.seconds(), 2)\n );\n });\n\n function meridiem(token, lowercase) {\n addFormatToken(token, 0, 0, function () {\n return this.localeData().meridiem(\n this.hours(),\n this.minutes(),\n lowercase\n );\n });\n }\n\n meridiem('a', true);\n meridiem('A', false);\n\n // ALIASES\n\n addUnitAlias('hour', 'h');\n\n // PRIORITY\n addUnitPriority('hour', 13);\n\n // PARSING\n\n function matchMeridiem(isStrict, locale) {\n return locale._meridiemParse;\n }\n\n addRegexToken('a', matchMeridiem);\n addRegexToken('A', matchMeridiem);\n addRegexToken('H', match1to2);\n addRegexToken('h', match1to2);\n addRegexToken('k', match1to2);\n addRegexToken('HH', match1to2, match2);\n addRegexToken('hh', match1to2, match2);\n addRegexToken('kk', match1to2, match2);\n\n addRegexToken('hmm', match3to4);\n addRegexToken('hmmss', match5to6);\n addRegexToken('Hmm', match3to4);\n addRegexToken('Hmmss', match5to6);\n\n addParseToken(['H', 'HH'], HOUR);\n addParseToken(['k', 'kk'], function (input, array, config) {\n var kInput = toInt(input);\n array[HOUR] = kInput === 24 ? 0 : kInput;\n });\n addParseToken(['a', 'A'], function (input, array, config) {\n config._isPm = config._locale.isPM(input);\n config._meridiem = input;\n });\n addParseToken(['h', 'hh'], function (input, array, config) {\n array[HOUR] = toInt(input);\n getParsingFlags(config).bigHour = true;\n });\n addParseToken('hmm', function (input, array, config) {\n var pos = input.length - 2;\n array[HOUR] = toInt(input.substr(0, pos));\n array[MINUTE] = toInt(input.substr(pos));\n getParsingFlags(config).bigHour = true;\n });\n addParseToken('hmmss', function (input, array, config) {\n var pos1 = input.length - 4,\n pos2 = input.length - 2;\n array[HOUR] = toInt(input.substr(0, pos1));\n array[MINUTE] = toInt(input.substr(pos1, 2));\n array[SECOND] = toInt(input.substr(pos2));\n getParsingFlags(config).bigHour = true;\n });\n addParseToken('Hmm', function (input, array, config) {\n var pos = input.length - 2;\n array[HOUR] = toInt(input.substr(0, pos));\n array[MINUTE] = toInt(input.substr(pos));\n });\n addParseToken('Hmmss', function (input, array, config) {\n var pos1 = input.length - 4,\n pos2 = input.length - 2;\n array[HOUR] = toInt(input.substr(0, pos1));\n array[MINUTE] = toInt(input.substr(pos1, 2));\n array[SECOND] = toInt(input.substr(pos2));\n });\n\n // LOCALES\n\n function localeIsPM(input) {\n // IE8 Quirks Mode & IE7 Standards Mode do not allow accessing strings like arrays\n // Using charAt should be more compatible.\n return (input + '').toLowerCase().charAt(0) === 'p';\n }\n\n var defaultLocaleMeridiemParse = /[ap]\\.?m?\\.?/i,\n // Setting the hour should keep the time, because the user explicitly\n // specified which hour they want. So trying to maintain the same hour (in\n // a new timezone) makes sense. Adding/subtracting hours does not follow\n // this rule.\n getSetHour = makeGetSet('Hours', true);\n\n function localeMeridiem(hours, minutes, isLower) {\n if (hours > 11) {\n return isLower ? 'pm' : 'PM';\n } else {\n return isLower ? 'am' : 'AM';\n }\n }\n\n var baseConfig = {\n calendar: defaultCalendar,\n longDateFormat: defaultLongDateFormat,\n invalidDate: defaultInvalidDate,\n ordinal: defaultOrdinal,\n dayOfMonthOrdinalParse: defaultDayOfMonthOrdinalParse,\n relativeTime: defaultRelativeTime,\n\n months: defaultLocaleMonths,\n monthsShort: defaultLocaleMonthsShort,\n\n week: defaultLocaleWeek,\n\n weekdays: defaultLocaleWeekdays,\n weekdaysMin: defaultLocaleWeekdaysMin,\n weekdaysShort: defaultLocaleWeekdaysShort,\n\n meridiemParse: defaultLocaleMeridiemParse,\n };\n\n // internal storage for locale config files\n var locales = {},\n localeFamilies = {},\n globalLocale;\n\n function commonPrefix(arr1, arr2) {\n var i,\n minl = Math.min(arr1.length, arr2.length);\n for (i = 0; i < minl; i += 1) {\n if (arr1[i] !== arr2[i]) {\n return i;\n }\n }\n return minl;\n }\n\n function normalizeLocale(key) {\n return key ? key.toLowerCase().replace('_', '-') : key;\n }\n\n // pick the locale from the array\n // try ['en-au', 'en-gb'] as 'en-au', 'en-gb', 'en', as in move through the list trying each\n // substring from most specific to least, but move to the next array item if it's a more specific variant than the current root\n function chooseLocale(names) {\n var i = 0,\n j,\n next,\n locale,\n split;\n\n while (i < names.length) {\n split = normalizeLocale(names[i]).split('-');\n j = split.length;\n next = normalizeLocale(names[i + 1]);\n next = next ? next.split('-') : null;\n while (j > 0) {\n locale = loadLocale(split.slice(0, j).join('-'));\n if (locale) {\n return locale;\n }\n if (\n next &&\n next.length >= j &&\n commonPrefix(split, next) >= j - 1\n ) {\n //the next array item is better than a shallower substring of this one\n break;\n }\n j--;\n }\n i++;\n }\n return globalLocale;\n }\n\n function isLocaleNameSane(name) {\n // Prevent names that look like filesystem paths, i.e contain '/' or '\\'\n return name.match('^[^/\\\\\\\\]*$') != null;\n }\n\n function loadLocale(name) {\n var oldLocale = null,\n aliasedRequire;\n // TODO: Find a better way to register and load all the locales in Node\n if (\n locales[name] === undefined &&\n typeof module !== 'undefined' &&\n module &&\n module.exports &&\n isLocaleNameSane(name)\n ) {\n try {\n oldLocale = globalLocale._abbr;\n aliasedRequire = require;\n aliasedRequire('./locale/' + name);\n getSetGlobalLocale(oldLocale);\n } catch (e) {\n // mark as not found to avoid repeating expensive file require call causing high CPU\n // when trying to find en-US, en_US, en-us for every format call\n locales[name] = null; // null means not found\n }\n }\n return locales[name];\n }\n\n // This function will load locale and then set the global locale. If\n // no arguments are passed in, it will simply return the current global\n // locale key.\n function getSetGlobalLocale(key, values) {\n var data;\n if (key) {\n if (isUndefined(values)) {\n data = getLocale(key);\n } else {\n data = defineLocale(key, values);\n }\n\n if (data) {\n // moment.duration._locale = moment._locale = data;\n globalLocale = data;\n } else {\n if (typeof console !== 'undefined' && console.warn) {\n //warn user if arguments are passed but the locale could not be set\n console.warn(\n 'Locale ' + key + ' not found. Did you forget to load it?'\n );\n }\n }\n }\n\n return globalLocale._abbr;\n }\n\n function defineLocale(name, config) {\n if (config !== null) {\n var locale,\n parentConfig = baseConfig;\n config.abbr = name;\n if (locales[name] != null) {\n deprecateSimple(\n 'defineLocaleOverride',\n 'use moment.updateLocale(localeName, config) to change ' +\n 'an existing locale. moment.defineLocale(localeName, ' +\n 'config) should only be used for creating a new locale ' +\n 'See http://momentjs.com/guides/#/warnings/define-locale/ for more info.'\n );\n parentConfig = locales[name]._config;\n } else if (config.parentLocale != null) {\n if (locales[config.parentLocale] != null) {\n parentConfig = locales[config.parentLocale]._config;\n } else {\n locale = loadLocale(config.parentLocale);\n if (locale != null) {\n parentConfig = locale._config;\n } else {\n if (!localeFamilies[config.parentLocale]) {\n localeFamilies[config.parentLocale] = [];\n }\n localeFamilies[config.parentLocale].push({\n name: name,\n config: config,\n });\n return null;\n }\n }\n }\n locales[name] = new Locale(mergeConfigs(parentConfig, config));\n\n if (localeFamilies[name]) {\n localeFamilies[name].forEach(function (x) {\n defineLocale(x.name, x.config);\n });\n }\n\n // backwards compat for now: also set the locale\n // make sure we set the locale AFTER all child locales have been\n // created, so we won't end up with the child locale set.\n getSetGlobalLocale(name);\n\n return locales[name];\n } else {\n // useful for testing\n delete locales[name];\n return null;\n }\n }\n\n function updateLocale(name, config) {\n if (config != null) {\n var locale,\n tmpLocale,\n parentConfig = baseConfig;\n\n if (locales[name] != null && locales[name].parentLocale != null) {\n // Update existing child locale in-place to avoid memory-leaks\n locales[name].set(mergeConfigs(locales[name]._config, config));\n } else {\n // MERGE\n tmpLocale = loadLocale(name);\n if (tmpLocale != null) {\n parentConfig = tmpLocale._config;\n }\n config = mergeConfigs(parentConfig, config);\n if (tmpLocale == null) {\n // updateLocale is called for creating a new locale\n // Set abbr so it will have a name (getters return\n // undefined otherwise).\n config.abbr = name;\n }\n locale = new Locale(config);\n locale.parentLocale = locales[name];\n locales[name] = locale;\n }\n\n // backwards compat for now: also set the locale\n getSetGlobalLocale(name);\n } else {\n // pass null for config to unupdate, useful for tests\n if (locales[name] != null) {\n if (locales[name].parentLocale != null) {\n locales[name] = locales[name].parentLocale;\n if (name === getSetGlobalLocale()) {\n getSetGlobalLocale(name);\n }\n } else if (locales[name] != null) {\n delete locales[name];\n }\n }\n }\n return locales[name];\n }\n\n // returns locale data\n function getLocale(key) {\n var locale;\n\n if (key && key._locale && key._locale._abbr) {\n key = key._locale._abbr;\n }\n\n if (!key) {\n return globalLocale;\n }\n\n if (!isArray(key)) {\n //short-circuit everything else\n locale = loadLocale(key);\n if (locale) {\n return locale;\n }\n key = [key];\n }\n\n return chooseLocale(key);\n }\n\n function listLocales() {\n return keys(locales);\n }\n\n function checkOverflow(m) {\n var overflow,\n a = m._a;\n\n if (a && getParsingFlags(m).overflow === -2) {\n overflow =\n a[MONTH] < 0 || a[MONTH] > 11\n ? MONTH\n : a[DATE] < 1 || a[DATE] > daysInMonth(a[YEAR], a[MONTH])\n ? DATE\n : a[HOUR] < 0 ||\n a[HOUR] > 24 ||\n (a[HOUR] === 24 &&\n (a[MINUTE] !== 0 ||\n a[SECOND] !== 0 ||\n a[MILLISECOND] !== 0))\n ? HOUR\n : a[MINUTE] < 0 || a[MINUTE] > 59\n ? MINUTE\n : a[SECOND] < 0 || a[SECOND] > 59\n ? SECOND\n : a[MILLISECOND] < 0 || a[MILLISECOND] > 999\n ? MILLISECOND\n : -1;\n\n if (\n getParsingFlags(m)._overflowDayOfYear &&\n (overflow < YEAR || overflow > DATE)\n ) {\n overflow = DATE;\n }\n if (getParsingFlags(m)._overflowWeeks && overflow === -1) {\n overflow = WEEK;\n }\n if (getParsingFlags(m)._overflowWeekday && overflow === -1) {\n overflow = WEEKDAY;\n }\n\n getParsingFlags(m).overflow = overflow;\n }\n\n return m;\n }\n\n // iso 8601 regex\n // 0000-00-00 0000-W00 or 0000-W00-0 + T + 00 or 00:00 or 00:00:00 or 00:00:00.000 + +00:00 or +0000 or +00)\n var extendedIsoRegex =\n /^\\s*((?:[+-]\\d{6}|\\d{4})-(?:\\d\\d-\\d\\d|W\\d\\d-\\d|W\\d\\d|\\d\\d\\d|\\d\\d))(?:(T| )(\\d\\d(?::\\d\\d(?::\\d\\d(?:[.,]\\d+)?)?)?)([+-]\\d\\d(?::?\\d\\d)?|\\s*Z)?)?$/,\n basicIsoRegex =\n /^\\s*((?:[+-]\\d{6}|\\d{4})(?:\\d\\d\\d\\d|W\\d\\d\\d|W\\d\\d|\\d\\d\\d|\\d\\d|))(?:(T| )(\\d\\d(?:\\d\\d(?:\\d\\d(?:[.,]\\d+)?)?)?)([+-]\\d\\d(?::?\\d\\d)?|\\s*Z)?)?$/,\n tzRegex = /Z|[+-]\\d\\d(?::?\\d\\d)?/,\n isoDates = [\n ['YYYYYY-MM-DD', /[+-]\\d{6}-\\d\\d-\\d\\d/],\n ['YYYY-MM-DD', /\\d{4}-\\d\\d-\\d\\d/],\n ['GGGG-[W]WW-E', /\\d{4}-W\\d\\d-\\d/],\n ['GGGG-[W]WW', /\\d{4}-W\\d\\d/, false],\n ['YYYY-DDD', /\\d{4}-\\d{3}/],\n ['YYYY-MM', /\\d{4}-\\d\\d/, false],\n ['YYYYYYMMDD', /[+-]\\d{10}/],\n ['YYYYMMDD', /\\d{8}/],\n ['GGGG[W]WWE', /\\d{4}W\\d{3}/],\n ['GGGG[W]WW', /\\d{4}W\\d{2}/, false],\n ['YYYYDDD', /\\d{7}/],\n ['YYYYMM', /\\d{6}/, false],\n ['YYYY', /\\d{4}/, false],\n ],\n // iso time formats and regexes\n isoTimes = [\n ['HH:mm:ss.SSSS', /\\d\\d:\\d\\d:\\d\\d\\.\\d+/],\n ['HH:mm:ss,SSSS', /\\d\\d:\\d\\d:\\d\\d,\\d+/],\n ['HH:mm:ss', /\\d\\d:\\d\\d:\\d\\d/],\n ['HH:mm', /\\d\\d:\\d\\d/],\n ['HHmmss.SSSS', /\\d\\d\\d\\d\\d\\d\\.\\d+/],\n ['HHmmss,SSSS', /\\d\\d\\d\\d\\d\\d,\\d+/],\n ['HHmmss', /\\d\\d\\d\\d\\d\\d/],\n ['HHmm', /\\d\\d\\d\\d/],\n ['HH', /\\d\\d/],\n ],\n aspNetJsonRegex = /^\\/?Date\\((-?\\d+)/i,\n // RFC 2822 regex: For details see https://tools.ietf.org/html/rfc2822#section-3.3\n rfc2822 =\n /^(?:(Mon|Tue|Wed|Thu|Fri|Sat|Sun),?\\s)?(\\d{1,2})\\s(Jan|Feb|Mar|Apr|May|Jun|Jul|Aug|Sep|Oct|Nov|Dec)\\s(\\d{2,4})\\s(\\d\\d):(\\d\\d)(?::(\\d\\d))?\\s(?:(UT|GMT|[ECMP][SD]T)|([Zz])|([+-]\\d{4}))$/,\n obsOffsets = {\n UT: 0,\n GMT: 0,\n EDT: -4 * 60,\n EST: -5 * 60,\n CDT: -5 * 60,\n CST: -6 * 60,\n MDT: -6 * 60,\n MST: -7 * 60,\n PDT: -7 * 60,\n PST: -8 * 60,\n };\n\n // date from iso format\n function configFromISO(config) {\n var i,\n l,\n string = config._i,\n match = extendedIsoRegex.exec(string) || basicIsoRegex.exec(string),\n allowTime,\n dateFormat,\n timeFormat,\n tzFormat,\n isoDatesLen = isoDates.length,\n isoTimesLen = isoTimes.length;\n\n if (match) {\n getParsingFlags(config).iso = true;\n for (i = 0, l = isoDatesLen; i < l; i++) {\n if (isoDates[i][1].exec(match[1])) {\n dateFormat = isoDates[i][0];\n allowTime = isoDates[i][2] !== false;\n break;\n }\n }\n if (dateFormat == null) {\n config._isValid = false;\n return;\n }\n if (match[3]) {\n for (i = 0, l = isoTimesLen; i < l; i++) {\n if (isoTimes[i][1].exec(match[3])) {\n // match[2] should be 'T' or space\n timeFormat = (match[2] || ' ') + isoTimes[i][0];\n break;\n }\n }\n if (timeFormat == null) {\n config._isValid = false;\n return;\n }\n }\n if (!allowTime && timeFormat != null) {\n config._isValid = false;\n return;\n }\n if (match[4]) {\n if (tzRegex.exec(match[4])) {\n tzFormat = 'Z';\n } else {\n config._isValid = false;\n return;\n }\n }\n config._f = dateFormat + (timeFormat || '') + (tzFormat || '');\n configFromStringAndFormat(config);\n } else {\n config._isValid = false;\n }\n }\n\n function extractFromRFC2822Strings(\n yearStr,\n monthStr,\n dayStr,\n hourStr,\n minuteStr,\n secondStr\n ) {\n var result = [\n untruncateYear(yearStr),\n defaultLocaleMonthsShort.indexOf(monthStr),\n parseInt(dayStr, 10),\n parseInt(hourStr, 10),\n parseInt(minuteStr, 10),\n ];\n\n if (secondStr) {\n result.push(parseInt(secondStr, 10));\n }\n\n return result;\n }\n\n function untruncateYear(yearStr) {\n var year = parseInt(yearStr, 10);\n if (year <= 49) {\n return 2000 + year;\n } else if (year <= 999) {\n return 1900 + year;\n }\n return year;\n }\n\n function preprocessRFC2822(s) {\n // Remove comments and folding whitespace and replace multiple-spaces with a single space\n return s\n .replace(/\\([^()]*\\)|[\\n\\t]/g, ' ')\n .replace(/(\\s\\s+)/g, ' ')\n .replace(/^\\s\\s*/, '')\n .replace(/\\s\\s*$/, '');\n }\n\n function checkWeekday(weekdayStr, parsedInput, config) {\n if (weekdayStr) {\n // TODO: Replace the vanilla JS Date object with an independent day-of-week check.\n var weekdayProvided = defaultLocaleWeekdaysShort.indexOf(weekdayStr),\n weekdayActual = new Date(\n parsedInput[0],\n parsedInput[1],\n parsedInput[2]\n ).getDay();\n if (weekdayProvided !== weekdayActual) {\n getParsingFlags(config).weekdayMismatch = true;\n config._isValid = false;\n return false;\n }\n }\n return true;\n }\n\n function calculateOffset(obsOffset, militaryOffset, numOffset) {\n if (obsOffset) {\n return obsOffsets[obsOffset];\n } else if (militaryOffset) {\n // the only allowed military tz is Z\n return 0;\n } else {\n var hm = parseInt(numOffset, 10),\n m = hm % 100,\n h = (hm - m) / 100;\n return h * 60 + m;\n }\n }\n\n // date and time from ref 2822 format\n function configFromRFC2822(config) {\n var match = rfc2822.exec(preprocessRFC2822(config._i)),\n parsedArray;\n if (match) {\n parsedArray = extractFromRFC2822Strings(\n match[4],\n match[3],\n match[2],\n match[5],\n match[6],\n match[7]\n );\n if (!checkWeekday(match[1], parsedArray, config)) {\n return;\n }\n\n config._a = parsedArray;\n config._tzm = calculateOffset(match[8], match[9], match[10]);\n\n config._d = createUTCDate.apply(null, config._a);\n config._d.setUTCMinutes(config._d.getUTCMinutes() - config._tzm);\n\n getParsingFlags(config).rfc2822 = true;\n } else {\n config._isValid = false;\n }\n }\n\n // date from 1) ASP.NET, 2) ISO, 3) RFC 2822 formats, or 4) optional fallback if parsing isn't strict\n function configFromString(config) {\n var matched = aspNetJsonRegex.exec(config._i);\n if (matched !== null) {\n config._d = new Date(+matched[1]);\n return;\n }\n\n configFromISO(config);\n if (config._isValid === false) {\n delete config._isValid;\n } else {\n return;\n }\n\n configFromRFC2822(config);\n if (config._isValid === false) {\n delete config._isValid;\n } else {\n return;\n }\n\n if (config._strict) {\n config._isValid = false;\n } else {\n // Final attempt, use Input Fallback\n hooks.createFromInputFallback(config);\n }\n }\n\n hooks.createFromInputFallback = deprecate(\n 'value provided is not in a recognized RFC2822 or ISO format. moment construction falls back to js Date(), ' +\n 'which is not reliable across all browsers and versions. Non RFC2822/ISO date formats are ' +\n 'discouraged. Please refer to http://momentjs.com/guides/#/warnings/js-date/ for more info.',\n function (config) {\n config._d = new Date(config._i + (config._useUTC ? ' UTC' : ''));\n }\n );\n\n // Pick the first defined of two or three arguments.\n function defaults(a, b, c) {\n if (a != null) {\n return a;\n }\n if (b != null) {\n return b;\n }\n return c;\n }\n\n function currentDateArray(config) {\n // hooks is actually the exported moment object\n var nowValue = new Date(hooks.now());\n if (config._useUTC) {\n return [\n nowValue.getUTCFullYear(),\n nowValue.getUTCMonth(),\n nowValue.getUTCDate(),\n ];\n }\n return [nowValue.getFullYear(), nowValue.getMonth(), nowValue.getDate()];\n }\n\n // convert an array to a date.\n // the array should mirror the parameters below\n // note: all values past the year are optional and will default to the lowest possible value.\n // [year, month, day , hour, minute, second, millisecond]\n function configFromArray(config) {\n var i,\n date,\n input = [],\n currentDate,\n expectedWeekday,\n yearToUse;\n\n if (config._d) {\n return;\n }\n\n currentDate = currentDateArray(config);\n\n //compute day of the year from weeks and weekdays\n if (config._w && config._a[DATE] == null && config._a[MONTH] == null) {\n dayOfYearFromWeekInfo(config);\n }\n\n //if the day of the year is set, figure out what it is\n if (config._dayOfYear != null) {\n yearToUse = defaults(config._a[YEAR], currentDate[YEAR]);\n\n if (\n config._dayOfYear > daysInYear(yearToUse) ||\n config._dayOfYear === 0\n ) {\n getParsingFlags(config)._overflowDayOfYear = true;\n }\n\n date = createUTCDate(yearToUse, 0, config._dayOfYear);\n config._a[MONTH] = date.getUTCMonth();\n config._a[DATE] = date.getUTCDate();\n }\n\n // Default to current date.\n // * if no year, month, day of month are given, default to today\n // * if day of month is given, default month and year\n // * if month is given, default only year\n // * if year is given, don't default anything\n for (i = 0; i < 3 && config._a[i] == null; ++i) {\n config._a[i] = input[i] = currentDate[i];\n }\n\n // Zero out whatever was not defaulted, including time\n for (; i < 7; i++) {\n config._a[i] = input[i] =\n config._a[i] == null ? (i === 2 ? 1 : 0) : config._a[i];\n }\n\n // Check for 24:00:00.000\n if (\n config._a[HOUR] === 24 &&\n config._a[MINUTE] === 0 &&\n config._a[SECOND] === 0 &&\n config._a[MILLISECOND] === 0\n ) {\n config._nextDay = true;\n config._a[HOUR] = 0;\n }\n\n config._d = (config._useUTC ? createUTCDate : createDate).apply(\n null,\n input\n );\n expectedWeekday = config._useUTC\n ? config._d.getUTCDay()\n : config._d.getDay();\n\n // Apply timezone offset from input. The actual utcOffset can be changed\n // with parseZone.\n if (config._tzm != null) {\n config._d.setUTCMinutes(config._d.getUTCMinutes() - config._tzm);\n }\n\n if (config._nextDay) {\n config._a[HOUR] = 24;\n }\n\n // check for mismatching day of week\n if (\n config._w &&\n typeof config._w.d !== 'undefined' &&\n config._w.d !== expectedWeekday\n ) {\n getParsingFlags(config).weekdayMismatch = true;\n }\n }\n\n function dayOfYearFromWeekInfo(config) {\n var w, weekYear, week, weekday, dow, doy, temp, weekdayOverflow, curWeek;\n\n w = config._w;\n if (w.GG != null || w.W != null || w.E != null) {\n dow = 1;\n doy = 4;\n\n // TODO: We need to take the current isoWeekYear, but that depends on\n // how we interpret now (local, utc, fixed offset). So create\n // a now version of current config (take local/utc/offset flags, and\n // create now).\n weekYear = defaults(\n w.GG,\n config._a[YEAR],\n weekOfYear(createLocal(), 1, 4).year\n );\n week = defaults(w.W, 1);\n weekday = defaults(w.E, 1);\n if (weekday < 1 || weekday > 7) {\n weekdayOverflow = true;\n }\n } else {\n dow = config._locale._week.dow;\n doy = config._locale._week.doy;\n\n curWeek = weekOfYear(createLocal(), dow, doy);\n\n weekYear = defaults(w.gg, config._a[YEAR], curWeek.year);\n\n // Default to current week.\n week = defaults(w.w, curWeek.week);\n\n if (w.d != null) {\n // weekday -- low day numbers are considered next week\n weekday = w.d;\n if (weekday < 0 || weekday > 6) {\n weekdayOverflow = true;\n }\n } else if (w.e != null) {\n // local weekday -- counting starts from beginning of week\n weekday = w.e + dow;\n if (w.e < 0 || w.e > 6) {\n weekdayOverflow = true;\n }\n } else {\n // default to beginning of week\n weekday = dow;\n }\n }\n if (week < 1 || week > weeksInYear(weekYear, dow, doy)) {\n getParsingFlags(config)._overflowWeeks = true;\n } else if (weekdayOverflow != null) {\n getParsingFlags(config)._overflowWeekday = true;\n } else {\n temp = dayOfYearFromWeeks(weekYear, week, weekday, dow, doy);\n config._a[YEAR] = temp.year;\n config._dayOfYear = temp.dayOfYear;\n }\n }\n\n // constant that refers to the ISO standard\n hooks.ISO_8601 = function () {};\n\n // constant that refers to the RFC 2822 form\n hooks.RFC_2822 = function () {};\n\n // date from string and format string\n function configFromStringAndFormat(config) {\n // TODO: Move this to another part of the creation flow to prevent circular deps\n if (config._f === hooks.ISO_8601) {\n configFromISO(config);\n return;\n }\n if (config._f === hooks.RFC_2822) {\n configFromRFC2822(config);\n return;\n }\n config._a = [];\n getParsingFlags(config).empty = true;\n\n // This array is used to make a Date, either with `new Date` or `Date.UTC`\n var string = '' + config._i,\n i,\n parsedInput,\n tokens,\n token,\n skipped,\n stringLength = string.length,\n totalParsedInputLength = 0,\n era,\n tokenLen;\n\n tokens =\n expandFormat(config._f, config._locale).match(formattingTokens) || [];\n tokenLen = tokens.length;\n for (i = 0; i < tokenLen; i++) {\n token = tokens[i];\n parsedInput = (string.match(getParseRegexForToken(token, config)) ||\n [])[0];\n if (parsedInput) {\n skipped = string.substr(0, string.indexOf(parsedInput));\n if (skipped.length > 0) {\n getParsingFlags(config).unusedInput.push(skipped);\n }\n string = string.slice(\n string.indexOf(parsedInput) + parsedInput.length\n );\n totalParsedInputLength += parsedInput.length;\n }\n // don't parse if it's not a known token\n if (formatTokenFunctions[token]) {\n if (parsedInput) {\n getParsingFlags(config).empty = false;\n } else {\n getParsingFlags(config).unusedTokens.push(token);\n }\n addTimeToArrayFromToken(token, parsedInput, config);\n } else if (config._strict && !parsedInput) {\n getParsingFlags(config).unusedTokens.push(token);\n }\n }\n\n // add remaining unparsed input length to the string\n getParsingFlags(config).charsLeftOver =\n stringLength - totalParsedInputLength;\n if (string.length > 0) {\n getParsingFlags(config).unusedInput.push(string);\n }\n\n // clear _12h flag if hour is <= 12\n if (\n config._a[HOUR] <= 12 &&\n getParsingFlags(config).bigHour === true &&\n config._a[HOUR] > 0\n ) {\n getParsingFlags(config).bigHour = undefined;\n }\n\n getParsingFlags(config).parsedDateParts = config._a.slice(0);\n getParsingFlags(config).meridiem = config._meridiem;\n // handle meridiem\n config._a[HOUR] = meridiemFixWrap(\n config._locale,\n config._a[HOUR],\n config._meridiem\n );\n\n // handle era\n era = getParsingFlags(config).era;\n if (era !== null) {\n config._a[YEAR] = config._locale.erasConvertYear(era, config._a[YEAR]);\n }\n\n configFromArray(config);\n checkOverflow(config);\n }\n\n function meridiemFixWrap(locale, hour, meridiem) {\n var isPm;\n\n if (meridiem == null) {\n // nothing to do\n return hour;\n }\n if (locale.meridiemHour != null) {\n return locale.meridiemHour(hour, meridiem);\n } else if (locale.isPM != null) {\n // Fallback\n isPm = locale.isPM(meridiem);\n if (isPm && hour < 12) {\n hour += 12;\n }\n if (!isPm && hour === 12) {\n hour = 0;\n }\n return hour;\n } else {\n // this is not supposed to happen\n return hour;\n }\n }\n\n // date from string and array of format strings\n function configFromStringAndArray(config) {\n var tempConfig,\n bestMoment,\n scoreToBeat,\n i,\n currentScore,\n validFormatFound,\n bestFormatIsValid = false,\n configfLen = config._f.length;\n\n if (configfLen === 0) {\n getParsingFlags(config).invalidFormat = true;\n config._d = new Date(NaN);\n return;\n }\n\n for (i = 0; i < configfLen; i++) {\n currentScore = 0;\n validFormatFound = false;\n tempConfig = copyConfig({}, config);\n if (config._useUTC != null) {\n tempConfig._useUTC = config._useUTC;\n }\n tempConfig._f = config._f[i];\n configFromStringAndFormat(tempConfig);\n\n if (isValid(tempConfig)) {\n validFormatFound = true;\n }\n\n // if there is any input that was not parsed add a penalty for that format\n currentScore += getParsingFlags(tempConfig).charsLeftOver;\n\n //or tokens\n currentScore += getParsingFlags(tempConfig).unusedTokens.length * 10;\n\n getParsingFlags(tempConfig).score = currentScore;\n\n if (!bestFormatIsValid) {\n if (\n scoreToBeat == null ||\n currentScore < scoreToBeat ||\n validFormatFound\n ) {\n scoreToBeat = currentScore;\n bestMoment = tempConfig;\n if (validFormatFound) {\n bestFormatIsValid = true;\n }\n }\n } else {\n if (currentScore < scoreToBeat) {\n scoreToBeat = currentScore;\n bestMoment = tempConfig;\n }\n }\n }\n\n extend(config, bestMoment || tempConfig);\n }\n\n function configFromObject(config) {\n if (config._d) {\n return;\n }\n\n var i = normalizeObjectUnits(config._i),\n dayOrDate = i.day === undefined ? i.date : i.day;\n config._a = map(\n [i.year, i.month, dayOrDate, i.hour, i.minute, i.second, i.millisecond],\n function (obj) {\n return obj && parseInt(obj, 10);\n }\n );\n\n configFromArray(config);\n }\n\n function createFromConfig(config) {\n var res = new Moment(checkOverflow(prepareConfig(config)));\n if (res._nextDay) {\n // Adding is smart enough around DST\n res.add(1, 'd');\n res._nextDay = undefined;\n }\n\n return res;\n }\n\n function prepareConfig(config) {\n var input = config._i,\n format = config._f;\n\n config._locale = config._locale || getLocale(config._l);\n\n if (input === null || (format === undefined && input === '')) {\n return createInvalid({ nullInput: true });\n }\n\n if (typeof input === 'string') {\n config._i = input = config._locale.preparse(input);\n }\n\n if (isMoment(input)) {\n return new Moment(checkOverflow(input));\n } else if (isDate(input)) {\n config._d = input;\n } else if (isArray(format)) {\n configFromStringAndArray(config);\n } else if (format) {\n configFromStringAndFormat(config);\n } else {\n configFromInput(config);\n }\n\n if (!isValid(config)) {\n config._d = null;\n }\n\n return config;\n }\n\n function configFromInput(config) {\n var input = config._i;\n if (isUndefined(input)) {\n config._d = new Date(hooks.now());\n } else if (isDate(input)) {\n config._d = new Date(input.valueOf());\n } else if (typeof input === 'string') {\n configFromString(config);\n } else if (isArray(input)) {\n config._a = map(input.slice(0), function (obj) {\n return parseInt(obj, 10);\n });\n configFromArray(config);\n } else if (isObject(input)) {\n configFromObject(config);\n } else if (isNumber(input)) {\n // from milliseconds\n config._d = new Date(input);\n } else {\n hooks.createFromInputFallback(config);\n }\n }\n\n function createLocalOrUTC(input, format, locale, strict, isUTC) {\n var c = {};\n\n if (format === true || format === false) {\n strict = format;\n format = undefined;\n }\n\n if (locale === true || locale === false) {\n strict = locale;\n locale = undefined;\n }\n\n if (\n (isObject(input) && isObjectEmpty(input)) ||\n (isArray(input) && input.length === 0)\n ) {\n input = undefined;\n }\n // object construction must be done this way.\n // https://github.com/moment/moment/issues/1423\n c._isAMomentObject = true;\n c._useUTC = c._isUTC = isUTC;\n c._l = locale;\n c._i = input;\n c._f = format;\n c._strict = strict;\n\n return createFromConfig(c);\n }\n\n function createLocal(input, format, locale, strict) {\n return createLocalOrUTC(input, format, locale, strict, false);\n }\n\n var prototypeMin = deprecate(\n 'moment().min is deprecated, use moment.max instead. http://momentjs.com/guides/#/warnings/min-max/',\n function () {\n var other = createLocal.apply(null, arguments);\n if (this.isValid() && other.isValid()) {\n return other < this ? this : other;\n } else {\n return createInvalid();\n }\n }\n ),\n prototypeMax = deprecate(\n 'moment().max is deprecated, use moment.min instead. http://momentjs.com/guides/#/warnings/min-max/',\n function () {\n var other = createLocal.apply(null, arguments);\n if (this.isValid() && other.isValid()) {\n return other > this ? this : other;\n } else {\n return createInvalid();\n }\n }\n );\n\n // Pick a moment m from moments so that m[fn](other) is true for all\n // other. This relies on the function fn to be transitive.\n //\n // moments should either be an array of moment objects or an array, whose\n // first element is an array of moment objects.\n function pickBy(fn, moments) {\n var res, i;\n if (moments.length === 1 && isArray(moments[0])) {\n moments = moments[0];\n }\n if (!moments.length) {\n return createLocal();\n }\n res = moments[0];\n for (i = 1; i < moments.length; ++i) {\n if (!moments[i].isValid() || moments[i][fn](res)) {\n res = moments[i];\n }\n }\n return res;\n }\n\n // TODO: Use [].sort instead?\n function min() {\n var args = [].slice.call(arguments, 0);\n\n return pickBy('isBefore', args);\n }\n\n function max() {\n var args = [].slice.call(arguments, 0);\n\n return pickBy('isAfter', args);\n }\n\n var now = function () {\n return Date.now ? Date.now() : +new Date();\n };\n\n var ordering = [\n 'year',\n 'quarter',\n 'month',\n 'week',\n 'day',\n 'hour',\n 'minute',\n 'second',\n 'millisecond',\n ];\n\n function isDurationValid(m) {\n var key,\n unitHasDecimal = false,\n i,\n orderLen = ordering.length;\n for (key in m) {\n if (\n hasOwnProp(m, key) &&\n !(\n indexOf.call(ordering, key) !== -1 &&\n (m[key] == null || !isNaN(m[key]))\n )\n ) {\n return false;\n }\n }\n\n for (i = 0; i < orderLen; ++i) {\n if (m[ordering[i]]) {\n if (unitHasDecimal) {\n return false; // only allow non-integers for smallest unit\n }\n if (parseFloat(m[ordering[i]]) !== toInt(m[ordering[i]])) {\n unitHasDecimal = true;\n }\n }\n }\n\n return true;\n }\n\n function isValid$1() {\n return this._isValid;\n }\n\n function createInvalid$1() {\n return createDuration(NaN);\n }\n\n function Duration(duration) {\n var normalizedInput = normalizeObjectUnits(duration),\n years = normalizedInput.year || 0,\n quarters = normalizedInput.quarter || 0,\n months = normalizedInput.month || 0,\n weeks = normalizedInput.week || normalizedInput.isoWeek || 0,\n days = normalizedInput.day || 0,\n hours = normalizedInput.hour || 0,\n minutes = normalizedInput.minute || 0,\n seconds = normalizedInput.second || 0,\n milliseconds = normalizedInput.millisecond || 0;\n\n this._isValid = isDurationValid(normalizedInput);\n\n // representation for dateAddRemove\n this._milliseconds =\n +milliseconds +\n seconds * 1e3 + // 1000\n minutes * 6e4 + // 1000 * 60\n hours * 1000 * 60 * 60; //using 1000 * 60 * 60 instead of 36e5 to avoid floating point rounding errors https://github.com/moment/moment/issues/2978\n // Because of dateAddRemove treats 24 hours as different from a\n // day when working around DST, we need to store them separately\n this._days = +days + weeks * 7;\n // It is impossible to translate months into days without knowing\n // which months you are are talking about, so we have to store\n // it separately.\n this._months = +months + quarters * 3 + years * 12;\n\n this._data = {};\n\n this._locale = getLocale();\n\n this._bubble();\n }\n\n function isDuration(obj) {\n return obj instanceof Duration;\n }\n\n function absRound(number) {\n if (number < 0) {\n return Math.round(-1 * number) * -1;\n } else {\n return Math.round(number);\n }\n }\n\n // compare two arrays, return the number of differences\n function compareArrays(array1, array2, dontConvert) {\n var len = Math.min(array1.length, array2.length),\n lengthDiff = Math.abs(array1.length - array2.length),\n diffs = 0,\n i;\n for (i = 0; i < len; i++) {\n if (\n (dontConvert && array1[i] !== array2[i]) ||\n (!dontConvert && toInt(array1[i]) !== toInt(array2[i]))\n ) {\n diffs++;\n }\n }\n return diffs + lengthDiff;\n }\n\n // FORMATTING\n\n function offset(token, separator) {\n addFormatToken(token, 0, 0, function () {\n var offset = this.utcOffset(),\n sign = '+';\n if (offset < 0) {\n offset = -offset;\n sign = '-';\n }\n return (\n sign +\n zeroFill(~~(offset / 60), 2) +\n separator +\n zeroFill(~~offset % 60, 2)\n );\n });\n }\n\n offset('Z', ':');\n offset('ZZ', '');\n\n // PARSING\n\n addRegexToken('Z', matchShortOffset);\n addRegexToken('ZZ', matchShortOffset);\n addParseToken(['Z', 'ZZ'], function (input, array, config) {\n config._useUTC = true;\n config._tzm = offsetFromString(matchShortOffset, input);\n });\n\n // HELPERS\n\n // timezone chunker\n // '+10:00' > ['10', '00']\n // '-1530' > ['-15', '30']\n var chunkOffset = /([\\+\\-]|\\d\\d)/gi;\n\n function offsetFromString(matcher, string) {\n var matches = (string || '').match(matcher),\n chunk,\n parts,\n minutes;\n\n if (matches === null) {\n return null;\n }\n\n chunk = matches[matches.length - 1] || [];\n parts = (chunk + '').match(chunkOffset) || ['-', 0, 0];\n minutes = +(parts[1] * 60) + toInt(parts[2]);\n\n return minutes === 0 ? 0 : parts[0] === '+' ? minutes : -minutes;\n }\n\n // Return a moment from input, that is local/utc/zone equivalent to model.\n function cloneWithOffset(input, model) {\n var res, diff;\n if (model._isUTC) {\n res = model.clone();\n diff =\n (isMoment(input) || isDate(input)\n ? input.valueOf()\n : createLocal(input).valueOf()) - res.valueOf();\n // Use low-level api, because this fn is low-level api.\n res._d.setTime(res._d.valueOf() + diff);\n hooks.updateOffset(res, false);\n return res;\n } else {\n return createLocal(input).local();\n }\n }\n\n function getDateOffset(m) {\n // On Firefox.24 Date#getTimezoneOffset returns a floating point.\n // https://github.com/moment/moment/pull/1871\n return -Math.round(m._d.getTimezoneOffset());\n }\n\n // HOOKS\n\n // This function will be called whenever a moment is mutated.\n // It is intended to keep the offset in sync with the timezone.\n hooks.updateOffset = function () {};\n\n // MOMENTS\n\n // keepLocalTime = true means only change the timezone, without\n // affecting the local hour. So 5:31:26 +0300 --[utcOffset(2, true)]-->\n // 5:31:26 +0200 It is possible that 5:31:26 doesn't exist with offset\n // +0200, so we adjust the time as needed, to be valid.\n //\n // Keeping the time actually adds/subtracts (one hour)\n // from the actual represented time. That is why we call updateOffset\n // a second time. In case it wants us to change the offset again\n // _changeInProgress == true case, then we have to adjust, because\n // there is no such time in the given timezone.\n function getSetOffset(input, keepLocalTime, keepMinutes) {\n var offset = this._offset || 0,\n localAdjust;\n if (!this.isValid()) {\n return input != null ? this : NaN;\n }\n if (input != null) {\n if (typeof input === 'string') {\n input = offsetFromString(matchShortOffset, input);\n if (input === null) {\n return this;\n }\n } else if (Math.abs(input) < 16 && !keepMinutes) {\n input = input * 60;\n }\n if (!this._isUTC && keepLocalTime) {\n localAdjust = getDateOffset(this);\n }\n this._offset = input;\n this._isUTC = true;\n if (localAdjust != null) {\n this.add(localAdjust, 'm');\n }\n if (offset !== input) {\n if (!keepLocalTime || this._changeInProgress) {\n addSubtract(\n this,\n createDuration(input - offset, 'm'),\n 1,\n false\n );\n } else if (!this._changeInProgress) {\n this._changeInProgress = true;\n hooks.updateOffset(this, true);\n this._changeInProgress = null;\n }\n }\n return this;\n } else {\n return this._isUTC ? offset : getDateOffset(this);\n }\n }\n\n function getSetZone(input, keepLocalTime) {\n if (input != null) {\n if (typeof input !== 'string') {\n input = -input;\n }\n\n this.utcOffset(input, keepLocalTime);\n\n return this;\n } else {\n return -this.utcOffset();\n }\n }\n\n function setOffsetToUTC(keepLocalTime) {\n return this.utcOffset(0, keepLocalTime);\n }\n\n function setOffsetToLocal(keepLocalTime) {\n if (this._isUTC) {\n this.utcOffset(0, keepLocalTime);\n this._isUTC = false;\n\n if (keepLocalTime) {\n this.subtract(getDateOffset(this), 'm');\n }\n }\n return this;\n }\n\n function setOffsetToParsedOffset() {\n if (this._tzm != null) {\n this.utcOffset(this._tzm, false, true);\n } else if (typeof this._i === 'string') {\n var tZone = offsetFromString(matchOffset, this._i);\n if (tZone != null) {\n this.utcOffset(tZone);\n } else {\n this.utcOffset(0, true);\n }\n }\n return this;\n }\n\n function hasAlignedHourOffset(input) {\n if (!this.isValid()) {\n return false;\n }\n input = input ? createLocal(input).utcOffset() : 0;\n\n return (this.utcOffset() - input) % 60 === 0;\n }\n\n function isDaylightSavingTime() {\n return (\n this.utcOffset() > this.clone().month(0).utcOffset() ||\n this.utcOffset() > this.clone().month(5).utcOffset()\n );\n }\n\n function isDaylightSavingTimeShifted() {\n if (!isUndefined(this._isDSTShifted)) {\n return this._isDSTShifted;\n }\n\n var c = {},\n other;\n\n copyConfig(c, this);\n c = prepareConfig(c);\n\n if (c._a) {\n other = c._isUTC ? createUTC(c._a) : createLocal(c._a);\n this._isDSTShifted =\n this.isValid() && compareArrays(c._a, other.toArray()) > 0;\n } else {\n this._isDSTShifted = false;\n }\n\n return this._isDSTShifted;\n }\n\n function isLocal() {\n return this.isValid() ? !this._isUTC : false;\n }\n\n function isUtcOffset() {\n return this.isValid() ? this._isUTC : false;\n }\n\n function isUtc() {\n return this.isValid() ? this._isUTC && this._offset === 0 : false;\n }\n\n // ASP.NET json date format regex\n var aspNetRegex = /^(-|\\+)?(?:(\\d*)[. ])?(\\d+):(\\d+)(?::(\\d+)(\\.\\d*)?)?$/,\n // from http://docs.closure-library.googlecode.com/git/closure_goog_date_date.js.source.html\n // somewhat more in line with 4.4.3.2 2004 spec, but allows decimal anywhere\n // and further modified to allow for strings containing both week and day\n isoRegex =\n /^(-|\\+)?P(?:([-+]?[0-9,.]*)Y)?(?:([-+]?[0-9,.]*)M)?(?:([-+]?[0-9,.]*)W)?(?:([-+]?[0-9,.]*)D)?(?:T(?:([-+]?[0-9,.]*)H)?(?:([-+]?[0-9,.]*)M)?(?:([-+]?[0-9,.]*)S)?)?$/;\n\n function createDuration(input, key) {\n var duration = input,\n // matching against regexp is expensive, do it on demand\n match = null,\n sign,\n ret,\n diffRes;\n\n if (isDuration(input)) {\n duration = {\n ms: input._milliseconds,\n d: input._days,\n M: input._months,\n };\n } else if (isNumber(input) || !isNaN(+input)) {\n duration = {};\n if (key) {\n duration[key] = +input;\n } else {\n duration.milliseconds = +input;\n }\n } else if ((match = aspNetRegex.exec(input))) {\n sign = match[1] === '-' ? -1 : 1;\n duration = {\n y: 0,\n d: toInt(match[DATE]) * sign,\n h: toInt(match[HOUR]) * sign,\n m: toInt(match[MINUTE]) * sign,\n s: toInt(match[SECOND]) * sign,\n ms: toInt(absRound(match[MILLISECOND] * 1000)) * sign, // the millisecond decimal point is included in the match\n };\n } else if ((match = isoRegex.exec(input))) {\n sign = match[1] === '-' ? -1 : 1;\n duration = {\n y: parseIso(match[2], sign),\n M: parseIso(match[3], sign),\n w: parseIso(match[4], sign),\n d: parseIso(match[5], sign),\n h: parseIso(match[6], sign),\n m: parseIso(match[7], sign),\n s: parseIso(match[8], sign),\n };\n } else if (duration == null) {\n // checks for null or undefined\n duration = {};\n } else if (\n typeof duration === 'object' &&\n ('from' in duration || 'to' in duration)\n ) {\n diffRes = momentsDifference(\n createLocal(duration.from),\n createLocal(duration.to)\n );\n\n duration = {};\n duration.ms = diffRes.milliseconds;\n duration.M = diffRes.months;\n }\n\n ret = new Duration(duration);\n\n if (isDuration(input) && hasOwnProp(input, '_locale')) {\n ret._locale = input._locale;\n }\n\n if (isDuration(input) && hasOwnProp(input, '_isValid')) {\n ret._isValid = input._isValid;\n }\n\n return ret;\n }\n\n createDuration.fn = Duration.prototype;\n createDuration.invalid = createInvalid$1;\n\n function parseIso(inp, sign) {\n // We'd normally use ~~inp for this, but unfortunately it also\n // converts floats to ints.\n // inp may be undefined, so careful calling replace on it.\n var res = inp && parseFloat(inp.replace(',', '.'));\n // apply sign while we're at it\n return (isNaN(res) ? 0 : res) * sign;\n }\n\n function positiveMomentsDifference(base, other) {\n var res = {};\n\n res.months =\n other.month() - base.month() + (other.year() - base.year()) * 12;\n if (base.clone().add(res.months, 'M').isAfter(other)) {\n --res.months;\n }\n\n res.milliseconds = +other - +base.clone().add(res.months, 'M');\n\n return res;\n }\n\n function momentsDifference(base, other) {\n var res;\n if (!(base.isValid() && other.isValid())) {\n return { milliseconds: 0, months: 0 };\n }\n\n other = cloneWithOffset(other, base);\n if (base.isBefore(other)) {\n res = positiveMomentsDifference(base, other);\n } else {\n res = positiveMomentsDifference(other, base);\n res.milliseconds = -res.milliseconds;\n res.months = -res.months;\n }\n\n return res;\n }\n\n // TODO: remove 'name' arg after deprecation is removed\n function createAdder(direction, name) {\n return function (val, period) {\n var dur, tmp;\n //invert the arguments, but complain about it\n if (period !== null && !isNaN(+period)) {\n deprecateSimple(\n name,\n 'moment().' +\n name +\n '(period, number) is deprecated. Please use moment().' +\n name +\n '(number, period). ' +\n 'See http://momentjs.com/guides/#/warnings/add-inverted-param/ for more info.'\n );\n tmp = val;\n val = period;\n period = tmp;\n }\n\n dur = createDuration(val, period);\n addSubtract(this, dur, direction);\n return this;\n };\n }\n\n function addSubtract(mom, duration, isAdding, updateOffset) {\n var milliseconds = duration._milliseconds,\n days = absRound(duration._days),\n months = absRound(duration._months);\n\n if (!mom.isValid()) {\n // No op\n return;\n }\n\n updateOffset = updateOffset == null ? true : updateOffset;\n\n if (months) {\n setMonth(mom, get(mom, 'Month') + months * isAdding);\n }\n if (days) {\n set$1(mom, 'Date', get(mom, 'Date') + days * isAdding);\n }\n if (milliseconds) {\n mom._d.setTime(mom._d.valueOf() + milliseconds * isAdding);\n }\n if (updateOffset) {\n hooks.updateOffset(mom, days || months);\n }\n }\n\n var add = createAdder(1, 'add'),\n subtract = createAdder(-1, 'subtract');\n\n function isString(input) {\n return typeof input === 'string' || input instanceof String;\n }\n\n // type MomentInput = Moment | Date | string | number | (number | string)[] | MomentInputObject | void; // null | undefined\n function isMomentInput(input) {\n return (\n isMoment(input) ||\n isDate(input) ||\n isString(input) ||\n isNumber(input) ||\n isNumberOrStringArray(input) ||\n isMomentInputObject(input) ||\n input === null ||\n input === undefined\n );\n }\n\n function isMomentInputObject(input) {\n var objectTest = isObject(input) && !isObjectEmpty(input),\n propertyTest = false,\n properties = [\n 'years',\n 'year',\n 'y',\n 'months',\n 'month',\n 'M',\n 'days',\n 'day',\n 'd',\n 'dates',\n 'date',\n 'D',\n 'hours',\n 'hour',\n 'h',\n 'minutes',\n 'minute',\n 'm',\n 'seconds',\n 'second',\n 's',\n 'milliseconds',\n 'millisecond',\n 'ms',\n ],\n i,\n property,\n propertyLen = properties.length;\n\n for (i = 0; i < propertyLen; i += 1) {\n property = properties[i];\n propertyTest = propertyTest || hasOwnProp(input, property);\n }\n\n return objectTest && propertyTest;\n }\n\n function isNumberOrStringArray(input) {\n var arrayTest = isArray(input),\n dataTypeTest = false;\n if (arrayTest) {\n dataTypeTest =\n input.filter(function (item) {\n return !isNumber(item) && isString(input);\n }).length === 0;\n }\n return arrayTest && dataTypeTest;\n }\n\n function isCalendarSpec(input) {\n var objectTest = isObject(input) && !isObjectEmpty(input),\n propertyTest = false,\n properties = [\n 'sameDay',\n 'nextDay',\n 'lastDay',\n 'nextWeek',\n 'lastWeek',\n 'sameElse',\n ],\n i,\n property;\n\n for (i = 0; i < properties.length; i += 1) {\n property = properties[i];\n propertyTest = propertyTest || hasOwnProp(input, property);\n }\n\n return objectTest && propertyTest;\n }\n\n function getCalendarFormat(myMoment, now) {\n var diff = myMoment.diff(now, 'days', true);\n return diff < -6\n ? 'sameElse'\n : diff < -1\n ? 'lastWeek'\n : diff < 0\n ? 'lastDay'\n : diff < 1\n ? 'sameDay'\n : diff < 2\n ? 'nextDay'\n : diff < 7\n ? 'nextWeek'\n : 'sameElse';\n }\n\n function calendar$1(time, formats) {\n // Support for single parameter, formats only overload to the calendar function\n if (arguments.length === 1) {\n if (!arguments[0]) {\n time = undefined;\n formats = undefined;\n } else if (isMomentInput(arguments[0])) {\n time = arguments[0];\n formats = undefined;\n } else if (isCalendarSpec(arguments[0])) {\n formats = arguments[0];\n time = undefined;\n }\n }\n // We want to compare the start of today, vs this.\n // Getting start-of-today depends on whether we're local/utc/offset or not.\n var now = time || createLocal(),\n sod = cloneWithOffset(now, this).startOf('day'),\n format = hooks.calendarFormat(this, sod) || 'sameElse',\n output =\n formats &&\n (isFunction(formats[format])\n ? formats[format].call(this, now)\n : formats[format]);\n\n return this.format(\n output || this.localeData().calendar(format, this, createLocal(now))\n );\n }\n\n function clone() {\n return new Moment(this);\n }\n\n function isAfter(input, units) {\n var localInput = isMoment(input) ? input : createLocal(input);\n if (!(this.isValid() && localInput.isValid())) {\n return false;\n }\n units = normalizeUnits(units) || 'millisecond';\n if (units === 'millisecond') {\n return this.valueOf() > localInput.valueOf();\n } else {\n return localInput.valueOf() < this.clone().startOf(units).valueOf();\n }\n }\n\n function isBefore(input, units) {\n var localInput = isMoment(input) ? input : createLocal(input);\n if (!(this.isValid() && localInput.isValid())) {\n return false;\n }\n units = normalizeUnits(units) || 'millisecond';\n if (units === 'millisecond') {\n return this.valueOf() < localInput.valueOf();\n } else {\n return this.clone().endOf(units).valueOf() < localInput.valueOf();\n }\n }\n\n function isBetween(from, to, units, inclusivity) {\n var localFrom = isMoment(from) ? from : createLocal(from),\n localTo = isMoment(to) ? to : createLocal(to);\n if (!(this.isValid() && localFrom.isValid() && localTo.isValid())) {\n return false;\n }\n inclusivity = inclusivity || '()';\n return (\n (inclusivity[0] === '('\n ? this.isAfter(localFrom, units)\n : !this.isBefore(localFrom, units)) &&\n (inclusivity[1] === ')'\n ? this.isBefore(localTo, units)\n : !this.isAfter(localTo, units))\n );\n }\n\n function isSame(input, units) {\n var localInput = isMoment(input) ? input : createLocal(input),\n inputMs;\n if (!(this.isValid() && localInput.isValid())) {\n return false;\n }\n units = normalizeUnits(units) || 'millisecond';\n if (units === 'millisecond') {\n return this.valueOf() === localInput.valueOf();\n } else {\n inputMs = localInput.valueOf();\n return (\n this.clone().startOf(units).valueOf() <= inputMs &&\n inputMs <= this.clone().endOf(units).valueOf()\n );\n }\n }\n\n function isSameOrAfter(input, units) {\n return this.isSame(input, units) || this.isAfter(input, units);\n }\n\n function isSameOrBefore(input, units) {\n return this.isSame(input, units) || this.isBefore(input, units);\n }\n\n function diff(input, units, asFloat) {\n var that, zoneDelta, output;\n\n if (!this.isValid()) {\n return NaN;\n }\n\n that = cloneWithOffset(input, this);\n\n if (!that.isValid()) {\n return NaN;\n }\n\n zoneDelta = (that.utcOffset() - this.utcOffset()) * 6e4;\n\n units = normalizeUnits(units);\n\n switch (units) {\n case 'year':\n output = monthDiff(this, that) / 12;\n break;\n case 'month':\n output = monthDiff(this, that);\n break;\n case 'quarter':\n output = monthDiff(this, that) / 3;\n break;\n case 'second':\n output = (this - that) / 1e3;\n break; // 1000\n case 'minute':\n output = (this - that) / 6e4;\n break; // 1000 * 60\n case 'hour':\n output = (this - that) / 36e5;\n break; // 1000 * 60 * 60\n case 'day':\n output = (this - that - zoneDelta) / 864e5;\n break; // 1000 * 60 * 60 * 24, negate dst\n case 'week':\n output = (this - that - zoneDelta) / 6048e5;\n break; // 1000 * 60 * 60 * 24 * 7, negate dst\n default:\n output = this - that;\n }\n\n return asFloat ? output : absFloor(output);\n }\n\n function monthDiff(a, b) {\n if (a.date() < b.date()) {\n // end-of-month calculations work correct when the start month has more\n // days than the end month.\n return -monthDiff(b, a);\n }\n // difference in months\n var wholeMonthDiff = (b.year() - a.year()) * 12 + (b.month() - a.month()),\n // b is in (anchor - 1 month, anchor + 1 month)\n anchor = a.clone().add(wholeMonthDiff, 'months'),\n anchor2,\n adjust;\n\n if (b - anchor < 0) {\n anchor2 = a.clone().add(wholeMonthDiff - 1, 'months');\n // linear across the month\n adjust = (b - anchor) / (anchor - anchor2);\n } else {\n anchor2 = a.clone().add(wholeMonthDiff + 1, 'months');\n // linear across the month\n adjust = (b - anchor) / (anchor2 - anchor);\n }\n\n //check for negative zero, return zero if negative zero\n return -(wholeMonthDiff + adjust) || 0;\n }\n\n hooks.defaultFormat = 'YYYY-MM-DDTHH:mm:ssZ';\n hooks.defaultFormatUtc = 'YYYY-MM-DDTHH:mm:ss[Z]';\n\n function toString() {\n return this.clone().locale('en').format('ddd MMM DD YYYY HH:mm:ss [GMT]ZZ');\n }\n\n function toISOString(keepOffset) {\n if (!this.isValid()) {\n return null;\n }\n var utc = keepOffset !== true,\n m = utc ? this.clone().utc() : this;\n if (m.year() < 0 || m.year() > 9999) {\n return formatMoment(\n m,\n utc\n ? 'YYYYYY-MM-DD[T]HH:mm:ss.SSS[Z]'\n : 'YYYYYY-MM-DD[T]HH:mm:ss.SSSZ'\n );\n }\n if (isFunction(Date.prototype.toISOString)) {\n // native implementation is ~50x faster, use it when we can\n if (utc) {\n return this.toDate().toISOString();\n } else {\n return new Date(this.valueOf() + this.utcOffset() * 60 * 1000)\n .toISOString()\n .replace('Z', formatMoment(m, 'Z'));\n }\n }\n return formatMoment(\n m,\n utc ? 'YYYY-MM-DD[T]HH:mm:ss.SSS[Z]' : 'YYYY-MM-DD[T]HH:mm:ss.SSSZ'\n );\n }\n\n /**\n * Return a human readable representation of a moment that can\n * also be evaluated to get a new moment which is the same\n *\n * @link https://nodejs.org/dist/latest/docs/api/util.html#util_custom_inspect_function_on_objects\n */\n function inspect() {\n if (!this.isValid()) {\n return 'moment.invalid(/* ' + this._i + ' */)';\n }\n var func = 'moment',\n zone = '',\n prefix,\n year,\n datetime,\n suffix;\n if (!this.isLocal()) {\n func = this.utcOffset() === 0 ? 'moment.utc' : 'moment.parseZone';\n zone = 'Z';\n }\n prefix = '[' + func + '(\"]';\n year = 0 <= this.year() && this.year() <= 9999 ? 'YYYY' : 'YYYYYY';\n datetime = '-MM-DD[T]HH:mm:ss.SSS';\n suffix = zone + '[\")]';\n\n return this.format(prefix + year + datetime + suffix);\n }\n\n function format(inputString) {\n if (!inputString) {\n inputString = this.isUtc()\n ? hooks.defaultFormatUtc\n : hooks.defaultFormat;\n }\n var output = formatMoment(this, inputString);\n return this.localeData().postformat(output);\n }\n\n function from(time, withoutSuffix) {\n if (\n this.isValid() &&\n ((isMoment(time) && time.isValid()) || createLocal(time).isValid())\n ) {\n return createDuration({ to: this, from: time })\n .locale(this.locale())\n .humanize(!withoutSuffix);\n } else {\n return this.localeData().invalidDate();\n }\n }\n\n function fromNow(withoutSuffix) {\n return this.from(createLocal(), withoutSuffix);\n }\n\n function to(time, withoutSuffix) {\n if (\n this.isValid() &&\n ((isMoment(time) && time.isValid()) || createLocal(time).isValid())\n ) {\n return createDuration({ from: this, to: time })\n .locale(this.locale())\n .humanize(!withoutSuffix);\n } else {\n return this.localeData().invalidDate();\n }\n }\n\n function toNow(withoutSuffix) {\n return this.to(createLocal(), withoutSuffix);\n }\n\n // If passed a locale key, it will set the locale for this\n // instance. Otherwise, it will return the locale configuration\n // variables for this instance.\n function locale(key) {\n var newLocaleData;\n\n if (key === undefined) {\n return this._locale._abbr;\n } else {\n newLocaleData = getLocale(key);\n if (newLocaleData != null) {\n this._locale = newLocaleData;\n }\n return this;\n }\n }\n\n var lang = deprecate(\n 'moment().lang() is deprecated. Instead, use moment().localeData() to get the language configuration. Use moment().locale() to change languages.',\n function (key) {\n if (key === undefined) {\n return this.localeData();\n } else {\n return this.locale(key);\n }\n }\n );\n\n function localeData() {\n return this._locale;\n }\n\n var MS_PER_SECOND = 1000,\n MS_PER_MINUTE = 60 * MS_PER_SECOND,\n MS_PER_HOUR = 60 * MS_PER_MINUTE,\n MS_PER_400_YEARS = (365 * 400 + 97) * 24 * MS_PER_HOUR;\n\n // actual modulo - handles negative numbers (for dates before 1970):\n function mod$1(dividend, divisor) {\n return ((dividend % divisor) + divisor) % divisor;\n }\n\n function localStartOfDate(y, m, d) {\n // the date constructor remaps years 0-99 to 1900-1999\n if (y < 100 && y >= 0) {\n // preserve leap years using a full 400 year cycle, then reset\n return new Date(y + 400, m, d) - MS_PER_400_YEARS;\n } else {\n return new Date(y, m, d).valueOf();\n }\n }\n\n function utcStartOfDate(y, m, d) {\n // Date.UTC remaps years 0-99 to 1900-1999\n if (y < 100 && y >= 0) {\n // preserve leap years using a full 400 year cycle, then reset\n return Date.UTC(y + 400, m, d) - MS_PER_400_YEARS;\n } else {\n return Date.UTC(y, m, d);\n }\n }\n\n function startOf(units) {\n var time, startOfDate;\n units = normalizeUnits(units);\n if (units === undefined || units === 'millisecond' || !this.isValid()) {\n return this;\n }\n\n startOfDate = this._isUTC ? utcStartOfDate : localStartOfDate;\n\n switch (units) {\n case 'year':\n time = startOfDate(this.year(), 0, 1);\n break;\n case 'quarter':\n time = startOfDate(\n this.year(),\n this.month() - (this.month() % 3),\n 1\n );\n break;\n case 'month':\n time = startOfDate(this.year(), this.month(), 1);\n break;\n case 'week':\n time = startOfDate(\n this.year(),\n this.month(),\n this.date() - this.weekday()\n );\n break;\n case 'isoWeek':\n time = startOfDate(\n this.year(),\n this.month(),\n this.date() - (this.isoWeekday() - 1)\n );\n break;\n case 'day':\n case 'date':\n time = startOfDate(this.year(), this.month(), this.date());\n break;\n case 'hour':\n time = this._d.valueOf();\n time -= mod$1(\n time + (this._isUTC ? 0 : this.utcOffset() * MS_PER_MINUTE),\n MS_PER_HOUR\n );\n break;\n case 'minute':\n time = this._d.valueOf();\n time -= mod$1(time, MS_PER_MINUTE);\n break;\n case 'second':\n time = this._d.valueOf();\n time -= mod$1(time, MS_PER_SECOND);\n break;\n }\n\n this._d.setTime(time);\n hooks.updateOffset(this, true);\n return this;\n }\n\n function endOf(units) {\n var time, startOfDate;\n units = normalizeUnits(units);\n if (units === undefined || units === 'millisecond' || !this.isValid()) {\n return this;\n }\n\n startOfDate = this._isUTC ? utcStartOfDate : localStartOfDate;\n\n switch (units) {\n case 'year':\n time = startOfDate(this.year() + 1, 0, 1) - 1;\n break;\n case 'quarter':\n time =\n startOfDate(\n this.year(),\n this.month() - (this.month() % 3) + 3,\n 1\n ) - 1;\n break;\n case 'month':\n time = startOfDate(this.year(), this.month() + 1, 1) - 1;\n break;\n case 'week':\n time =\n startOfDate(\n this.year(),\n this.month(),\n this.date() - this.weekday() + 7\n ) - 1;\n break;\n case 'isoWeek':\n time =\n startOfDate(\n this.year(),\n this.month(),\n this.date() - (this.isoWeekday() - 1) + 7\n ) - 1;\n break;\n case 'day':\n case 'date':\n time = startOfDate(this.year(), this.month(), this.date() + 1) - 1;\n break;\n case 'hour':\n time = this._d.valueOf();\n time +=\n MS_PER_HOUR -\n mod$1(\n time + (this._isUTC ? 0 : this.utcOffset() * MS_PER_MINUTE),\n MS_PER_HOUR\n ) -\n 1;\n break;\n case 'minute':\n time = this._d.valueOf();\n time += MS_PER_MINUTE - mod$1(time, MS_PER_MINUTE) - 1;\n break;\n case 'second':\n time = this._d.valueOf();\n time += MS_PER_SECOND - mod$1(time, MS_PER_SECOND) - 1;\n break;\n }\n\n this._d.setTime(time);\n hooks.updateOffset(this, true);\n return this;\n }\n\n function valueOf() {\n return this._d.valueOf() - (this._offset || 0) * 60000;\n }\n\n function unix() {\n return Math.floor(this.valueOf() / 1000);\n }\n\n function toDate() {\n return new Date(this.valueOf());\n }\n\n function toArray() {\n var m = this;\n return [\n m.year(),\n m.month(),\n m.date(),\n m.hour(),\n m.minute(),\n m.second(),\n m.millisecond(),\n ];\n }\n\n function toObject() {\n var m = this;\n return {\n years: m.year(),\n months: m.month(),\n date: m.date(),\n hours: m.hours(),\n minutes: m.minutes(),\n seconds: m.seconds(),\n milliseconds: m.milliseconds(),\n };\n }\n\n function toJSON() {\n // new Date(NaN).toJSON() === null\n return this.isValid() ? this.toISOString() : null;\n }\n\n function isValid$2() {\n return isValid(this);\n }\n\n function parsingFlags() {\n return extend({}, getParsingFlags(this));\n }\n\n function invalidAt() {\n return getParsingFlags(this).overflow;\n }\n\n function creationData() {\n return {\n input: this._i,\n format: this._f,\n locale: this._locale,\n isUTC: this._isUTC,\n strict: this._strict,\n };\n }\n\n addFormatToken('N', 0, 0, 'eraAbbr');\n addFormatToken('NN', 0, 0, 'eraAbbr');\n addFormatToken('NNN', 0, 0, 'eraAbbr');\n addFormatToken('NNNN', 0, 0, 'eraName');\n addFormatToken('NNNNN', 0, 0, 'eraNarrow');\n\n addFormatToken('y', ['y', 1], 'yo', 'eraYear');\n addFormatToken('y', ['yy', 2], 0, 'eraYear');\n addFormatToken('y', ['yyy', 3], 0, 'eraYear');\n addFormatToken('y', ['yyyy', 4], 0, 'eraYear');\n\n addRegexToken('N', matchEraAbbr);\n addRegexToken('NN', matchEraAbbr);\n addRegexToken('NNN', matchEraAbbr);\n addRegexToken('NNNN', matchEraName);\n addRegexToken('NNNNN', matchEraNarrow);\n\n addParseToken(\n ['N', 'NN', 'NNN', 'NNNN', 'NNNNN'],\n function (input, array, config, token) {\n var era = config._locale.erasParse(input, token, config._strict);\n if (era) {\n getParsingFlags(config).era = era;\n } else {\n getParsingFlags(config).invalidEra = input;\n }\n }\n );\n\n addRegexToken('y', matchUnsigned);\n addRegexToken('yy', matchUnsigned);\n addRegexToken('yyy', matchUnsigned);\n addRegexToken('yyyy', matchUnsigned);\n addRegexToken('yo', matchEraYearOrdinal);\n\n addParseToken(['y', 'yy', 'yyy', 'yyyy'], YEAR);\n addParseToken(['yo'], function (input, array, config, token) {\n var match;\n if (config._locale._eraYearOrdinalRegex) {\n match = input.match(config._locale._eraYearOrdinalRegex);\n }\n\n if (config._locale.eraYearOrdinalParse) {\n array[YEAR] = config._locale.eraYearOrdinalParse(input, match);\n } else {\n array[YEAR] = parseInt(input, 10);\n }\n });\n\n function localeEras(m, format) {\n var i,\n l,\n date,\n eras = this._eras || getLocale('en')._eras;\n for (i = 0, l = eras.length; i < l; ++i) {\n switch (typeof eras[i].since) {\n case 'string':\n // truncate time\n date = hooks(eras[i].since).startOf('day');\n eras[i].since = date.valueOf();\n break;\n }\n\n switch (typeof eras[i].until) {\n case 'undefined':\n eras[i].until = +Infinity;\n break;\n case 'string':\n // truncate time\n date = hooks(eras[i].until).startOf('day').valueOf();\n eras[i].until = date.valueOf();\n break;\n }\n }\n return eras;\n }\n\n function localeErasParse(eraName, format, strict) {\n var i,\n l,\n eras = this.eras(),\n name,\n abbr,\n narrow;\n eraName = eraName.toUpperCase();\n\n for (i = 0, l = eras.length; i < l; ++i) {\n name = eras[i].name.toUpperCase();\n abbr = eras[i].abbr.toUpperCase();\n narrow = eras[i].narrow.toUpperCase();\n\n if (strict) {\n switch (format) {\n case 'N':\n case 'NN':\n case 'NNN':\n if (abbr === eraName) {\n return eras[i];\n }\n break;\n\n case 'NNNN':\n if (name === eraName) {\n return eras[i];\n }\n break;\n\n case 'NNNNN':\n if (narrow === eraName) {\n return eras[i];\n }\n break;\n }\n } else if ([name, abbr, narrow].indexOf(eraName) >= 0) {\n return eras[i];\n }\n }\n }\n\n function localeErasConvertYear(era, year) {\n var dir = era.since <= era.until ? +1 : -1;\n if (year === undefined) {\n return hooks(era.since).year();\n } else {\n return hooks(era.since).year() + (year - era.offset) * dir;\n }\n }\n\n function getEraName() {\n var i,\n l,\n val,\n eras = this.localeData().eras();\n for (i = 0, l = eras.length; i < l; ++i) {\n // truncate time\n val = this.clone().startOf('day').valueOf();\n\n if (eras[i].since <= val && val <= eras[i].until) {\n return eras[i].name;\n }\n if (eras[i].until <= val && val <= eras[i].since) {\n return eras[i].name;\n }\n }\n\n return '';\n }\n\n function getEraNarrow() {\n var i,\n l,\n val,\n eras = this.localeData().eras();\n for (i = 0, l = eras.length; i < l; ++i) {\n // truncate time\n val = this.clone().startOf('day').valueOf();\n\n if (eras[i].since <= val && val <= eras[i].until) {\n return eras[i].narrow;\n }\n if (eras[i].until <= val && val <= eras[i].since) {\n return eras[i].narrow;\n }\n }\n\n return '';\n }\n\n function getEraAbbr() {\n var i,\n l,\n val,\n eras = this.localeData().eras();\n for (i = 0, l = eras.length; i < l; ++i) {\n // truncate time\n val = this.clone().startOf('day').valueOf();\n\n if (eras[i].since <= val && val <= eras[i].until) {\n return eras[i].abbr;\n }\n if (eras[i].until <= val && val <= eras[i].since) {\n return eras[i].abbr;\n }\n }\n\n return '';\n }\n\n function getEraYear() {\n var i,\n l,\n dir,\n val,\n eras = this.localeData().eras();\n for (i = 0, l = eras.length; i < l; ++i) {\n dir = eras[i].since <= eras[i].until ? +1 : -1;\n\n // truncate time\n val = this.clone().startOf('day').valueOf();\n\n if (\n (eras[i].since <= val && val <= eras[i].until) ||\n (eras[i].until <= val && val <= eras[i].since)\n ) {\n return (\n (this.year() - hooks(eras[i].since).year()) * dir +\n eras[i].offset\n );\n }\n }\n\n return this.year();\n }\n\n function erasNameRegex(isStrict) {\n if (!hasOwnProp(this, '_erasNameRegex')) {\n computeErasParse.call(this);\n }\n return isStrict ? this._erasNameRegex : this._erasRegex;\n }\n\n function erasAbbrRegex(isStrict) {\n if (!hasOwnProp(this, '_erasAbbrRegex')) {\n computeErasParse.call(this);\n }\n return isStrict ? this._erasAbbrRegex : this._erasRegex;\n }\n\n function erasNarrowRegex(isStrict) {\n if (!hasOwnProp(this, '_erasNarrowRegex')) {\n computeErasParse.call(this);\n }\n return isStrict ? this._erasNarrowRegex : this._erasRegex;\n }\n\n function matchEraAbbr(isStrict, locale) {\n return locale.erasAbbrRegex(isStrict);\n }\n\n function matchEraName(isStrict, locale) {\n return locale.erasNameRegex(isStrict);\n }\n\n function matchEraNarrow(isStrict, locale) {\n return locale.erasNarrowRegex(isStrict);\n }\n\n function matchEraYearOrdinal(isStrict, locale) {\n return locale._eraYearOrdinalRegex || matchUnsigned;\n }\n\n function computeErasParse() {\n var abbrPieces = [],\n namePieces = [],\n narrowPieces = [],\n mixedPieces = [],\n i,\n l,\n eras = this.eras();\n\n for (i = 0, l = eras.length; i < l; ++i) {\n namePieces.push(regexEscape(eras[i].name));\n abbrPieces.push(regexEscape(eras[i].abbr));\n narrowPieces.push(regexEscape(eras[i].narrow));\n\n mixedPieces.push(regexEscape(eras[i].name));\n mixedPieces.push(regexEscape(eras[i].abbr));\n mixedPieces.push(regexEscape(eras[i].narrow));\n }\n\n this._erasRegex = new RegExp('^(' + mixedPieces.join('|') + ')', 'i');\n this._erasNameRegex = new RegExp('^(' + namePieces.join('|') + ')', 'i');\n this._erasAbbrRegex = new RegExp('^(' + abbrPieces.join('|') + ')', 'i');\n this._erasNarrowRegex = new RegExp(\n '^(' + narrowPieces.join('|') + ')',\n 'i'\n );\n }\n\n // FORMATTING\n\n addFormatToken(0, ['gg', 2], 0, function () {\n return this.weekYear() % 100;\n });\n\n addFormatToken(0, ['GG', 2], 0, function () {\n return this.isoWeekYear() % 100;\n });\n\n function addWeekYearFormatToken(token, getter) {\n addFormatToken(0, [token, token.length], 0, getter);\n }\n\n addWeekYearFormatToken('gggg', 'weekYear');\n addWeekYearFormatToken('ggggg', 'weekYear');\n addWeekYearFormatToken('GGGG', 'isoWeekYear');\n addWeekYearFormatToken('GGGGG', 'isoWeekYear');\n\n // ALIASES\n\n addUnitAlias('weekYear', 'gg');\n addUnitAlias('isoWeekYear', 'GG');\n\n // PRIORITY\n\n addUnitPriority('weekYear', 1);\n addUnitPriority('isoWeekYear', 1);\n\n // PARSING\n\n addRegexToken('G', matchSigned);\n addRegexToken('g', matchSigned);\n addRegexToken('GG', match1to2, match2);\n addRegexToken('gg', match1to2, match2);\n addRegexToken('GGGG', match1to4, match4);\n addRegexToken('gggg', match1to4, match4);\n addRegexToken('GGGGG', match1to6, match6);\n addRegexToken('ggggg', match1to6, match6);\n\n addWeekParseToken(\n ['gggg', 'ggggg', 'GGGG', 'GGGGG'],\n function (input, week, config, token) {\n week[token.substr(0, 2)] = toInt(input);\n }\n );\n\n addWeekParseToken(['gg', 'GG'], function (input, week, config, token) {\n week[token] = hooks.parseTwoDigitYear(input);\n });\n\n // MOMENTS\n\n function getSetWeekYear(input) {\n return getSetWeekYearHelper.call(\n this,\n input,\n this.week(),\n this.weekday(),\n this.localeData()._week.dow,\n this.localeData()._week.doy\n );\n }\n\n function getSetISOWeekYear(input) {\n return getSetWeekYearHelper.call(\n this,\n input,\n this.isoWeek(),\n this.isoWeekday(),\n 1,\n 4\n );\n }\n\n function getISOWeeksInYear() {\n return weeksInYear(this.year(), 1, 4);\n }\n\n function getISOWeeksInISOWeekYear() {\n return weeksInYear(this.isoWeekYear(), 1, 4);\n }\n\n function getWeeksInYear() {\n var weekInfo = this.localeData()._week;\n return weeksInYear(this.year(), weekInfo.dow, weekInfo.doy);\n }\n\n function getWeeksInWeekYear() {\n var weekInfo = this.localeData()._week;\n return weeksInYear(this.weekYear(), weekInfo.dow, weekInfo.doy);\n }\n\n function getSetWeekYearHelper(input, week, weekday, dow, doy) {\n var weeksTarget;\n if (input == null) {\n return weekOfYear(this, dow, doy).year;\n } else {\n weeksTarget = weeksInYear(input, dow, doy);\n if (week > weeksTarget) {\n week = weeksTarget;\n }\n return setWeekAll.call(this, input, week, weekday, dow, doy);\n }\n }\n\n function setWeekAll(weekYear, week, weekday, dow, doy) {\n var dayOfYearData = dayOfYearFromWeeks(weekYear, week, weekday, dow, doy),\n date = createUTCDate(dayOfYearData.year, 0, dayOfYearData.dayOfYear);\n\n this.year(date.getUTCFullYear());\n this.month(date.getUTCMonth());\n this.date(date.getUTCDate());\n return this;\n }\n\n // FORMATTING\n\n addFormatToken('Q', 0, 'Qo', 'quarter');\n\n // ALIASES\n\n addUnitAlias('quarter', 'Q');\n\n // PRIORITY\n\n addUnitPriority('quarter', 7);\n\n // PARSING\n\n addRegexToken('Q', match1);\n addParseToken('Q', function (input, array) {\n array[MONTH] = (toInt(input) - 1) * 3;\n });\n\n // MOMENTS\n\n function getSetQuarter(input) {\n return input == null\n ? Math.ceil((this.month() + 1) / 3)\n : this.month((input - 1) * 3 + (this.month() % 3));\n }\n\n // FORMATTING\n\n addFormatToken('D', ['DD', 2], 'Do', 'date');\n\n // ALIASES\n\n addUnitAlias('date', 'D');\n\n // PRIORITY\n addUnitPriority('date', 9);\n\n // PARSING\n\n addRegexToken('D', match1to2);\n addRegexToken('DD', match1to2, match2);\n addRegexToken('Do', function (isStrict, locale) {\n // TODO: Remove \"ordinalParse\" fallback in next major release.\n return isStrict\n ? locale._dayOfMonthOrdinalParse || locale._ordinalParse\n : locale._dayOfMonthOrdinalParseLenient;\n });\n\n addParseToken(['D', 'DD'], DATE);\n addParseToken('Do', function (input, array) {\n array[DATE] = toInt(input.match(match1to2)[0]);\n });\n\n // MOMENTS\n\n var getSetDayOfMonth = makeGetSet('Date', true);\n\n // FORMATTING\n\n addFormatToken('DDD', ['DDDD', 3], 'DDDo', 'dayOfYear');\n\n // ALIASES\n\n addUnitAlias('dayOfYear', 'DDD');\n\n // PRIORITY\n addUnitPriority('dayOfYear', 4);\n\n // PARSING\n\n addRegexToken('DDD', match1to3);\n addRegexToken('DDDD', match3);\n addParseToken(['DDD', 'DDDD'], function (input, array, config) {\n config._dayOfYear = toInt(input);\n });\n\n // HELPERS\n\n // MOMENTS\n\n function getSetDayOfYear(input) {\n var dayOfYear =\n Math.round(\n (this.clone().startOf('day') - this.clone().startOf('year')) / 864e5\n ) + 1;\n return input == null ? dayOfYear : this.add(input - dayOfYear, 'd');\n }\n\n // FORMATTING\n\n addFormatToken('m', ['mm', 2], 0, 'minute');\n\n // ALIASES\n\n addUnitAlias('minute', 'm');\n\n // PRIORITY\n\n addUnitPriority('minute', 14);\n\n // PARSING\n\n addRegexToken('m', match1to2);\n addRegexToken('mm', match1to2, match2);\n addParseToken(['m', 'mm'], MINUTE);\n\n // MOMENTS\n\n var getSetMinute = makeGetSet('Minutes', false);\n\n // FORMATTING\n\n addFormatToken('s', ['ss', 2], 0, 'second');\n\n // ALIASES\n\n addUnitAlias('second', 's');\n\n // PRIORITY\n\n addUnitPriority('second', 15);\n\n // PARSING\n\n addRegexToken('s', match1to2);\n addRegexToken('ss', match1to2, match2);\n addParseToken(['s', 'ss'], SECOND);\n\n // MOMENTS\n\n var getSetSecond = makeGetSet('Seconds', false);\n\n // FORMATTING\n\n addFormatToken('S', 0, 0, function () {\n return ~~(this.millisecond() / 100);\n });\n\n addFormatToken(0, ['SS', 2], 0, function () {\n return ~~(this.millisecond() / 10);\n });\n\n addFormatToken(0, ['SSS', 3], 0, 'millisecond');\n addFormatToken(0, ['SSSS', 4], 0, function () {\n return this.millisecond() * 10;\n });\n addFormatToken(0, ['SSSSS', 5], 0, function () {\n return this.millisecond() * 100;\n });\n addFormatToken(0, ['SSSSSS', 6], 0, function () {\n return this.millisecond() * 1000;\n });\n addFormatToken(0, ['SSSSSSS', 7], 0, function () {\n return this.millisecond() * 10000;\n });\n addFormatToken(0, ['SSSSSSSS', 8], 0, function () {\n return this.millisecond() * 100000;\n });\n addFormatToken(0, ['SSSSSSSSS', 9], 0, function () {\n return this.millisecond() * 1000000;\n });\n\n // ALIASES\n\n addUnitAlias('millisecond', 'ms');\n\n // PRIORITY\n\n addUnitPriority('millisecond', 16);\n\n // PARSING\n\n addRegexToken('S', match1to3, match1);\n addRegexToken('SS', match1to3, match2);\n addRegexToken('SSS', match1to3, match3);\n\n var token, getSetMillisecond;\n for (token = 'SSSS'; token.length <= 9; token += 'S') {\n addRegexToken(token, matchUnsigned);\n }\n\n function parseMs(input, array) {\n array[MILLISECOND] = toInt(('0.' + input) * 1000);\n }\n\n for (token = 'S'; token.length <= 9; token += 'S') {\n addParseToken(token, parseMs);\n }\n\n getSetMillisecond = makeGetSet('Milliseconds', false);\n\n // FORMATTING\n\n addFormatToken('z', 0, 0, 'zoneAbbr');\n addFormatToken('zz', 0, 0, 'zoneName');\n\n // MOMENTS\n\n function getZoneAbbr() {\n return this._isUTC ? 'UTC' : '';\n }\n\n function getZoneName() {\n return this._isUTC ? 'Coordinated Universal Time' : '';\n }\n\n var proto = Moment.prototype;\n\n proto.add = add;\n proto.calendar = calendar$1;\n proto.clone = clone;\n proto.diff = diff;\n proto.endOf = endOf;\n proto.format = format;\n proto.from = from;\n proto.fromNow = fromNow;\n proto.to = to;\n proto.toNow = toNow;\n proto.get = stringGet;\n proto.invalidAt = invalidAt;\n proto.isAfter = isAfter;\n proto.isBefore = isBefore;\n proto.isBetween = isBetween;\n proto.isSame = isSame;\n proto.isSameOrAfter = isSameOrAfter;\n proto.isSameOrBefore = isSameOrBefore;\n proto.isValid = isValid$2;\n proto.lang = lang;\n proto.locale = locale;\n proto.localeData = localeData;\n proto.max = prototypeMax;\n proto.min = prototypeMin;\n proto.parsingFlags = parsingFlags;\n proto.set = stringSet;\n proto.startOf = startOf;\n proto.subtract = subtract;\n proto.toArray = toArray;\n proto.toObject = toObject;\n proto.toDate = toDate;\n proto.toISOString = toISOString;\n proto.inspect = inspect;\n if (typeof Symbol !== 'undefined' && Symbol.for != null) {\n proto[Symbol.for('nodejs.util.inspect.custom')] = function () {\n return 'Moment<' + this.format() + '>';\n };\n }\n proto.toJSON = toJSON;\n proto.toString = toString;\n proto.unix = unix;\n proto.valueOf = valueOf;\n proto.creationData = creationData;\n proto.eraName = getEraName;\n proto.eraNarrow = getEraNarrow;\n proto.eraAbbr = getEraAbbr;\n proto.eraYear = getEraYear;\n proto.year = getSetYear;\n proto.isLeapYear = getIsLeapYear;\n proto.weekYear = getSetWeekYear;\n proto.isoWeekYear = getSetISOWeekYear;\n proto.quarter = proto.quarters = getSetQuarter;\n proto.month = getSetMonth;\n proto.daysInMonth = getDaysInMonth;\n proto.week = proto.weeks = getSetWeek;\n proto.isoWeek = proto.isoWeeks = getSetISOWeek;\n proto.weeksInYear = getWeeksInYear;\n proto.weeksInWeekYear = getWeeksInWeekYear;\n proto.isoWeeksInYear = getISOWeeksInYear;\n proto.isoWeeksInISOWeekYear = getISOWeeksInISOWeekYear;\n proto.date = getSetDayOfMonth;\n proto.day = proto.days = getSetDayOfWeek;\n proto.weekday = getSetLocaleDayOfWeek;\n proto.isoWeekday = getSetISODayOfWeek;\n proto.dayOfYear = getSetDayOfYear;\n proto.hour = proto.hours = getSetHour;\n proto.minute = proto.minutes = getSetMinute;\n proto.second = proto.seconds = getSetSecond;\n proto.millisecond = proto.milliseconds = getSetMillisecond;\n proto.utcOffset = getSetOffset;\n proto.utc = setOffsetToUTC;\n proto.local = setOffsetToLocal;\n proto.parseZone = setOffsetToParsedOffset;\n proto.hasAlignedHourOffset = hasAlignedHourOffset;\n proto.isDST = isDaylightSavingTime;\n proto.isLocal = isLocal;\n proto.isUtcOffset = isUtcOffset;\n proto.isUtc = isUtc;\n proto.isUTC = isUtc;\n proto.zoneAbbr = getZoneAbbr;\n proto.zoneName = getZoneName;\n proto.dates = deprecate(\n 'dates accessor is deprecated. Use date instead.',\n getSetDayOfMonth\n );\n proto.months = deprecate(\n 'months accessor is deprecated. Use month instead',\n getSetMonth\n );\n proto.years = deprecate(\n 'years accessor is deprecated. Use year instead',\n getSetYear\n );\n proto.zone = deprecate(\n 'moment().zone is deprecated, use moment().utcOffset instead. http://momentjs.com/guides/#/warnings/zone/',\n getSetZone\n );\n proto.isDSTShifted = deprecate(\n 'isDSTShifted is deprecated. See http://momentjs.com/guides/#/warnings/dst-shifted/ for more information',\n isDaylightSavingTimeShifted\n );\n\n function createUnix(input) {\n return createLocal(input * 1000);\n }\n\n function createInZone() {\n return createLocal.apply(null, arguments).parseZone();\n }\n\n function preParsePostFormat(string) {\n return string;\n }\n\n var proto$1 = Locale.prototype;\n\n proto$1.calendar = calendar;\n proto$1.longDateFormat = longDateFormat;\n proto$1.invalidDate = invalidDate;\n proto$1.ordinal = ordinal;\n proto$1.preparse = preParsePostFormat;\n proto$1.postformat = preParsePostFormat;\n proto$1.relativeTime = relativeTime;\n proto$1.pastFuture = pastFuture;\n proto$1.set = set;\n proto$1.eras = localeEras;\n proto$1.erasParse = localeErasParse;\n proto$1.erasConvertYear = localeErasConvertYear;\n proto$1.erasAbbrRegex = erasAbbrRegex;\n proto$1.erasNameRegex = erasNameRegex;\n proto$1.erasNarrowRegex = erasNarrowRegex;\n\n proto$1.months = localeMonths;\n proto$1.monthsShort = localeMonthsShort;\n proto$1.monthsParse = localeMonthsParse;\n proto$1.monthsRegex = monthsRegex;\n proto$1.monthsShortRegex = monthsShortRegex;\n proto$1.week = localeWeek;\n proto$1.firstDayOfYear = localeFirstDayOfYear;\n proto$1.firstDayOfWeek = localeFirstDayOfWeek;\n\n proto$1.weekdays = localeWeekdays;\n proto$1.weekdaysMin = localeWeekdaysMin;\n proto$1.weekdaysShort = localeWeekdaysShort;\n proto$1.weekdaysParse = localeWeekdaysParse;\n\n proto$1.weekdaysRegex = weekdaysRegex;\n proto$1.weekdaysShortRegex = weekdaysShortRegex;\n proto$1.weekdaysMinRegex = weekdaysMinRegex;\n\n proto$1.isPM = localeIsPM;\n proto$1.meridiem = localeMeridiem;\n\n function get$1(format, index, field, setter) {\n var locale = getLocale(),\n utc = createUTC().set(setter, index);\n return locale[field](utc, format);\n }\n\n function listMonthsImpl(format, index, field) {\n if (isNumber(format)) {\n index = format;\n format = undefined;\n }\n\n format = format || '';\n\n if (index != null) {\n return get$1(format, index, field, 'month');\n }\n\n var i,\n out = [];\n for (i = 0; i < 12; i++) {\n out[i] = get$1(format, i, field, 'month');\n }\n return out;\n }\n\n // ()\n // (5)\n // (fmt, 5)\n // (fmt)\n // (true)\n // (true, 5)\n // (true, fmt, 5)\n // (true, fmt)\n function listWeekdaysImpl(localeSorted, format, index, field) {\n if (typeof localeSorted === 'boolean') {\n if (isNumber(format)) {\n index = format;\n format = undefined;\n }\n\n format = format || '';\n } else {\n format = localeSorted;\n index = format;\n localeSorted = false;\n\n if (isNumber(format)) {\n index = format;\n format = undefined;\n }\n\n format = format || '';\n }\n\n var locale = getLocale(),\n shift = localeSorted ? locale._week.dow : 0,\n i,\n out = [];\n\n if (index != null) {\n return get$1(format, (index + shift) % 7, field, 'day');\n }\n\n for (i = 0; i < 7; i++) {\n out[i] = get$1(format, (i + shift) % 7, field, 'day');\n }\n return out;\n }\n\n function listMonths(format, index) {\n return listMonthsImpl(format, index, 'months');\n }\n\n function listMonthsShort(format, index) {\n return listMonthsImpl(format, index, 'monthsShort');\n }\n\n function listWeekdays(localeSorted, format, index) {\n return listWeekdaysImpl(localeSorted, format, index, 'weekdays');\n }\n\n function listWeekdaysShort(localeSorted, format, index) {\n return listWeekdaysImpl(localeSorted, format, index, 'weekdaysShort');\n }\n\n function listWeekdaysMin(localeSorted, format, index) {\n return listWeekdaysImpl(localeSorted, format, index, 'weekdaysMin');\n }\n\n getSetGlobalLocale('en', {\n eras: [\n {\n since: '0001-01-01',\n until: +Infinity,\n offset: 1,\n name: 'Anno Domini',\n narrow: 'AD',\n abbr: 'AD',\n },\n {\n since: '0000-12-31',\n until: -Infinity,\n offset: 1,\n name: 'Before Christ',\n narrow: 'BC',\n abbr: 'BC',\n },\n ],\n dayOfMonthOrdinalParse: /\\d{1,2}(th|st|nd|rd)/,\n ordinal: function (number) {\n var b = number % 10,\n output =\n toInt((number % 100) / 10) === 1\n ? 'th'\n : b === 1\n ? 'st'\n : b === 2\n ? 'nd'\n : b === 3\n ? 'rd'\n : 'th';\n return number + output;\n },\n });\n\n // Side effect imports\n\n hooks.lang = deprecate(\n 'moment.lang is deprecated. Use moment.locale instead.',\n getSetGlobalLocale\n );\n hooks.langData = deprecate(\n 'moment.langData is deprecated. Use moment.localeData instead.',\n getLocale\n );\n\n var mathAbs = Math.abs;\n\n function abs() {\n var data = this._data;\n\n this._milliseconds = mathAbs(this._milliseconds);\n this._days = mathAbs(this._days);\n this._months = mathAbs(this._months);\n\n data.milliseconds = mathAbs(data.milliseconds);\n data.seconds = mathAbs(data.seconds);\n data.minutes = mathAbs(data.minutes);\n data.hours = mathAbs(data.hours);\n data.months = mathAbs(data.months);\n data.years = mathAbs(data.years);\n\n return this;\n }\n\n function addSubtract$1(duration, input, value, direction) {\n var other = createDuration(input, value);\n\n duration._milliseconds += direction * other._milliseconds;\n duration._days += direction * other._days;\n duration._months += direction * other._months;\n\n return duration._bubble();\n }\n\n // supports only 2.0-style add(1, 's') or add(duration)\n function add$1(input, value) {\n return addSubtract$1(this, input, value, 1);\n }\n\n // supports only 2.0-style subtract(1, 's') or subtract(duration)\n function subtract$1(input, value) {\n return addSubtract$1(this, input, value, -1);\n }\n\n function absCeil(number) {\n if (number < 0) {\n return Math.floor(number);\n } else {\n return Math.ceil(number);\n }\n }\n\n function bubble() {\n var milliseconds = this._milliseconds,\n days = this._days,\n months = this._months,\n data = this._data,\n seconds,\n minutes,\n hours,\n years,\n monthsFromDays;\n\n // if we have a mix of positive and negative values, bubble down first\n // check: https://github.com/moment/moment/issues/2166\n if (\n !(\n (milliseconds >= 0 && days >= 0 && months >= 0) ||\n (milliseconds <= 0 && days <= 0 && months <= 0)\n )\n ) {\n milliseconds += absCeil(monthsToDays(months) + days) * 864e5;\n days = 0;\n months = 0;\n }\n\n // The following code bubbles up values, see the tests for\n // examples of what that means.\n data.milliseconds = milliseconds % 1000;\n\n seconds = absFloor(milliseconds / 1000);\n data.seconds = seconds % 60;\n\n minutes = absFloor(seconds / 60);\n data.minutes = minutes % 60;\n\n hours = absFloor(minutes / 60);\n data.hours = hours % 24;\n\n days += absFloor(hours / 24);\n\n // convert days to months\n monthsFromDays = absFloor(daysToMonths(days));\n months += monthsFromDays;\n days -= absCeil(monthsToDays(monthsFromDays));\n\n // 12 months -> 1 year\n years = absFloor(months / 12);\n months %= 12;\n\n data.days = days;\n data.months = months;\n data.years = years;\n\n return this;\n }\n\n function daysToMonths(days) {\n // 400 years have 146097 days (taking into account leap year rules)\n // 400 years have 12 months === 4800\n return (days * 4800) / 146097;\n }\n\n function monthsToDays(months) {\n // the reverse of daysToMonths\n return (months * 146097) / 4800;\n }\n\n function as(units) {\n if (!this.isValid()) {\n return NaN;\n }\n var days,\n months,\n milliseconds = this._milliseconds;\n\n units = normalizeUnits(units);\n\n if (units === 'month' || units === 'quarter' || units === 'year') {\n days = this._days + milliseconds / 864e5;\n months = this._months + daysToMonths(days);\n switch (units) {\n case 'month':\n return months;\n case 'quarter':\n return months / 3;\n case 'year':\n return months / 12;\n }\n } else {\n // handle milliseconds separately because of floating point math errors (issue #1867)\n days = this._days + Math.round(monthsToDays(this._months));\n switch (units) {\n case 'week':\n return days / 7 + milliseconds / 6048e5;\n case 'day':\n return days + milliseconds / 864e5;\n case 'hour':\n return days * 24 + milliseconds / 36e5;\n case 'minute':\n return days * 1440 + milliseconds / 6e4;\n case 'second':\n return days * 86400 + milliseconds / 1000;\n // Math.floor prevents floating point math errors here\n case 'millisecond':\n return Math.floor(days * 864e5) + milliseconds;\n default:\n throw new Error('Unknown unit ' + units);\n }\n }\n }\n\n // TODO: Use this.as('ms')?\n function valueOf$1() {\n if (!this.isValid()) {\n return NaN;\n }\n return (\n this._milliseconds +\n this._days * 864e5 +\n (this._months % 12) * 2592e6 +\n toInt(this._months / 12) * 31536e6\n );\n }\n\n function makeAs(alias) {\n return function () {\n return this.as(alias);\n };\n }\n\n var asMilliseconds = makeAs('ms'),\n asSeconds = makeAs('s'),\n asMinutes = makeAs('m'),\n asHours = makeAs('h'),\n asDays = makeAs('d'),\n asWeeks = makeAs('w'),\n asMonths = makeAs('M'),\n asQuarters = makeAs('Q'),\n asYears = makeAs('y');\n\n function clone$1() {\n return createDuration(this);\n }\n\n function get$2(units) {\n units = normalizeUnits(units);\n return this.isValid() ? this[units + 's']() : NaN;\n }\n\n function makeGetter(name) {\n return function () {\n return this.isValid() ? this._data[name] : NaN;\n };\n }\n\n var milliseconds = makeGetter('milliseconds'),\n seconds = makeGetter('seconds'),\n minutes = makeGetter('minutes'),\n hours = makeGetter('hours'),\n days = makeGetter('days'),\n months = makeGetter('months'),\n years = makeGetter('years');\n\n function weeks() {\n return absFloor(this.days() / 7);\n }\n\n var round = Math.round,\n thresholds = {\n ss: 44, // a few seconds to seconds\n s: 45, // seconds to minute\n m: 45, // minutes to hour\n h: 22, // hours to day\n d: 26, // days to month/week\n w: null, // weeks to month\n M: 11, // months to year\n };\n\n // helper function for moment.fn.from, moment.fn.fromNow, and moment.duration.fn.humanize\n function substituteTimeAgo(string, number, withoutSuffix, isFuture, locale) {\n return locale.relativeTime(number || 1, !!withoutSuffix, string, isFuture);\n }\n\n function relativeTime$1(posNegDuration, withoutSuffix, thresholds, locale) {\n var duration = createDuration(posNegDuration).abs(),\n seconds = round(duration.as('s')),\n minutes = round(duration.as('m')),\n hours = round(duration.as('h')),\n days = round(duration.as('d')),\n months = round(duration.as('M')),\n weeks = round(duration.as('w')),\n years = round(duration.as('y')),\n a =\n (seconds <= thresholds.ss && ['s', seconds]) ||\n (seconds < thresholds.s && ['ss', seconds]) ||\n (minutes <= 1 && ['m']) ||\n (minutes < thresholds.m && ['mm', minutes]) ||\n (hours <= 1 && ['h']) ||\n (hours < thresholds.h && ['hh', hours]) ||\n (days <= 1 && ['d']) ||\n (days < thresholds.d && ['dd', days]);\n\n if (thresholds.w != null) {\n a =\n a ||\n (weeks <= 1 && ['w']) ||\n (weeks < thresholds.w && ['ww', weeks]);\n }\n a = a ||\n (months <= 1 && ['M']) ||\n (months < thresholds.M && ['MM', months]) ||\n (years <= 1 && ['y']) || ['yy', years];\n\n a[2] = withoutSuffix;\n a[3] = +posNegDuration > 0;\n a[4] = locale;\n return substituteTimeAgo.apply(null, a);\n }\n\n // This function allows you to set the rounding function for relative time strings\n function getSetRelativeTimeRounding(roundingFunction) {\n if (roundingFunction === undefined) {\n return round;\n }\n if (typeof roundingFunction === 'function') {\n round = roundingFunction;\n return true;\n }\n return false;\n }\n\n // This function allows you to set a threshold for relative time strings\n function getSetRelativeTimeThreshold(threshold, limit) {\n if (thresholds[threshold] === undefined) {\n return false;\n }\n if (limit === undefined) {\n return thresholds[threshold];\n }\n thresholds[threshold] = limit;\n if (threshold === 's') {\n thresholds.ss = limit - 1;\n }\n return true;\n }\n\n function humanize(argWithSuffix, argThresholds) {\n if (!this.isValid()) {\n return this.localeData().invalidDate();\n }\n\n var withSuffix = false,\n th = thresholds,\n locale,\n output;\n\n if (typeof argWithSuffix === 'object') {\n argThresholds = argWithSuffix;\n argWithSuffix = false;\n }\n if (typeof argWithSuffix === 'boolean') {\n withSuffix = argWithSuffix;\n }\n if (typeof argThresholds === 'object') {\n th = Object.assign({}, thresholds, argThresholds);\n if (argThresholds.s != null && argThresholds.ss == null) {\n th.ss = argThresholds.s - 1;\n }\n }\n\n locale = this.localeData();\n output = relativeTime$1(this, !withSuffix, th, locale);\n\n if (withSuffix) {\n output = locale.pastFuture(+this, output);\n }\n\n return locale.postformat(output);\n }\n\n var abs$1 = Math.abs;\n\n function sign(x) {\n return (x > 0) - (x < 0) || +x;\n }\n\n function toISOString$1() {\n // for ISO strings we do not use the normal bubbling rules:\n // * milliseconds bubble up until they become hours\n // * days do not bubble at all\n // * months bubble up until they become years\n // This is because there is no context-free conversion between hours and days\n // (think of clock changes)\n // and also not between days and months (28-31 days per month)\n if (!this.isValid()) {\n return this.localeData().invalidDate();\n }\n\n var seconds = abs$1(this._milliseconds) / 1000,\n days = abs$1(this._days),\n months = abs$1(this._months),\n minutes,\n hours,\n years,\n s,\n total = this.asSeconds(),\n totalSign,\n ymSign,\n daysSign,\n hmsSign;\n\n if (!total) {\n // this is the same as C#'s (Noda) and python (isodate)...\n // but not other JS (goog.date)\n return 'P0D';\n }\n\n // 3600 seconds -> 60 minutes -> 1 hour\n minutes = absFloor(seconds / 60);\n hours = absFloor(minutes / 60);\n seconds %= 60;\n minutes %= 60;\n\n // 12 months -> 1 year\n years = absFloor(months / 12);\n months %= 12;\n\n // inspired by https://github.com/dordille/moment-isoduration/blob/master/moment.isoduration.js\n s = seconds ? seconds.toFixed(3).replace(/\\.?0+$/, '') : '';\n\n totalSign = total < 0 ? '-' : '';\n ymSign = sign(this._months) !== sign(total) ? '-' : '';\n daysSign = sign(this._days) !== sign(total) ? '-' : '';\n hmsSign = sign(this._milliseconds) !== sign(total) ? '-' : '';\n\n return (\n totalSign +\n 'P' +\n (years ? ymSign + years + 'Y' : '') +\n (months ? ymSign + months + 'M' : '') +\n (days ? daysSign + days + 'D' : '') +\n (hours || minutes || seconds ? 'T' : '') +\n (hours ? hmsSign + hours + 'H' : '') +\n (minutes ? hmsSign + minutes + 'M' : '') +\n (seconds ? hmsSign + s + 'S' : '')\n );\n }\n\n var proto$2 = Duration.prototype;\n\n proto$2.isValid = isValid$1;\n proto$2.abs = abs;\n proto$2.add = add$1;\n proto$2.subtract = subtract$1;\n proto$2.as = as;\n proto$2.asMilliseconds = asMilliseconds;\n proto$2.asSeconds = asSeconds;\n proto$2.asMinutes = asMinutes;\n proto$2.asHours = asHours;\n proto$2.asDays = asDays;\n proto$2.asWeeks = asWeeks;\n proto$2.asMonths = asMonths;\n proto$2.asQuarters = asQuarters;\n proto$2.asYears = asYears;\n proto$2.valueOf = valueOf$1;\n proto$2._bubble = bubble;\n proto$2.clone = clone$1;\n proto$2.get = get$2;\n proto$2.milliseconds = milliseconds;\n proto$2.seconds = seconds;\n proto$2.minutes = minutes;\n proto$2.hours = hours;\n proto$2.days = days;\n proto$2.weeks = weeks;\n proto$2.months = months;\n proto$2.years = years;\n proto$2.humanize = humanize;\n proto$2.toISOString = toISOString$1;\n proto$2.toString = toISOString$1;\n proto$2.toJSON = toISOString$1;\n proto$2.locale = locale;\n proto$2.localeData = localeData;\n\n proto$2.toIsoString = deprecate(\n 'toIsoString() is deprecated. Please use toISOString() instead (notice the capitals)',\n toISOString$1\n );\n proto$2.lang = lang;\n\n // FORMATTING\n\n addFormatToken('X', 0, 0, 'unix');\n addFormatToken('x', 0, 0, 'valueOf');\n\n // PARSING\n\n addRegexToken('x', matchSigned);\n addRegexToken('X', matchTimestamp);\n addParseToken('X', function (input, array, config) {\n config._d = new Date(parseFloat(input) * 1000);\n });\n addParseToken('x', function (input, array, config) {\n config._d = new Date(toInt(input));\n });\n\n //! moment.js\n\n hooks.version = '2.29.4';\n\n setHookCallback(createLocal);\n\n hooks.fn = proto;\n hooks.min = min;\n hooks.max = max;\n hooks.now = now;\n hooks.utc = createUTC;\n hooks.unix = createUnix;\n hooks.months = listMonths;\n hooks.isDate = isDate;\n hooks.locale = getSetGlobalLocale;\n hooks.invalid = createInvalid;\n hooks.duration = createDuration;\n hooks.isMoment = isMoment;\n hooks.weekdays = listWeekdays;\n hooks.parseZone = createInZone;\n hooks.localeData = getLocale;\n hooks.isDuration = isDuration;\n hooks.monthsShort = listMonthsShort;\n hooks.weekdaysMin = listWeekdaysMin;\n hooks.defineLocale = defineLocale;\n hooks.updateLocale = updateLocale;\n hooks.locales = listLocales;\n hooks.weekdaysShort = listWeekdaysShort;\n hooks.normalizeUnits = normalizeUnits;\n hooks.relativeTimeRounding = getSetRelativeTimeRounding;\n hooks.relativeTimeThreshold = getSetRelativeTimeThreshold;\n hooks.calendarFormat = getCalendarFormat;\n hooks.prototype = proto;\n\n // currently HTML5 input type only supports 24-hour formats\n hooks.HTML5_FMT = {\n DATETIME_LOCAL: 'YYYY-MM-DDTHH:mm', // <input type=\"datetime-local\" />\n DATETIME_LOCAL_SECONDS: 'YYYY-MM-DDTHH:mm:ss', // <input type=\"datetime-local\" step=\"1\" />\n DATETIME_LOCAL_MS: 'YYYY-MM-DDTHH:mm:ss.SSS', // <input type=\"datetime-local\" step=\"0.001\" />\n DATE: 'YYYY-MM-DD', // <input type=\"date\" />\n TIME: 'HH:mm', // <input type=\"time\" />\n TIME_SECONDS: 'HH:mm:ss', // <input type=\"time\" step=\"1\" />\n TIME_MS: 'HH:mm:ss.SSS', // <input type=\"time\" step=\"0.001\" />\n WEEK: 'GGGG-[W]WW', // <input type=\"week\" />\n MONTH: 'YYYY-MM', // <input type=\"month\" />\n };\n\n return hooks;\n\n})));\n","export const BUTTON_STYLE_BASE_OVERRIDES = {\n fontSize: \"16px\",\n fontWeight: 400,\n lineHeight: \"165%\",\n}\n","import datetimeFmt from \"@planningcenter/datetime-fmt\"\nimport moment from \"moment\"\n\nimport colors from \"../../../../colors\"\nimport { BUTTON_STYLE_BASE_OVERRIDES } from \"../constants\"\n\nexport const noop = () => {}\n\n// until we can use Array.prototype.findLast\nexport const findLast = <T>(\n xs: T[],\n p: (x: T, i: number, xs: T[]) => boolean\n): T | undefined => {\n for (let i = xs.length - 1; i >= 0; i--) {\n if (p(xs[i], i, xs)) return xs[i]\n }\n\n return undefined\n}\n\nexport const getPrimaryButtonStyleOverrides = ({\n disabled,\n spinner,\n}: { disabled?: boolean; spinner?: boolean } = {}) => {\n const base = {\n ...BUTTON_STYLE_BASE_OVERRIDES,\n backgroundColor: colors.interaction55,\n color: spinner ? \"transparent\" : \"surface\",\n spinner: spinner ? { color: colors.interaction55 } : undefined,\n }\n\n if (disabled)\n return {\n ...base,\n backgroundColor: colors.lightNeutral81,\n spinner: spinner ? { color: colors.lightNeutral81 } : undefined,\n }\n\n return {\n ...base,\n active: { backgroundColor: colors.interaction45 },\n focus: { backgroundColor: colors.interaction55 },\n hover: { backgroundColor: colors.interaction50 },\n }\n}\n\nexport const formatDate = (date: Date): string => {\n const now = moment()\n\n const isToday = now.isSame(date, \"day\")\n const isThisWeek = now.isSame(date, \"week\")\n const isThisYear = now.isSame(date, \"year\")\n\n if (isToday) return datetimeFmt.time(date)\n if (isThisWeek) return datetimeFmt.date(date, { style: \"relative\" })\n if (isThisYear) return datetimeFmt.date(date, { style: \"abbreviated\" })\n\n return datetimeFmt.date(date, { style: \"short\", year: true })\n}\n","import React from \"react\"\nimport { useChatContext } from \"stream-chat-react\"\nimport type { Channel, FormatMessageResponse } from \"stream-chat\"\n\nimport { findLast } from \"../utils\"\n\nconst MARK_READ = \"notification.mark_read\"\nconst MARK_UNREAD = \"notification.mark_unread\"\n\nconst EVENTS = [MARK_READ, MARK_UNREAD]\n\ninterface ChannelUnread {\n isUnread: boolean\n isUnreadable: boolean\n markRead: () => void\n markUnread: () => void\n unreadCount: number\n}\n\nexport const useChannelUnread = (\n channel: Channel,\n unread: number\n): ChannelUnread => {\n const { client } = useChatContext()\n\n const [unreadCount, setUnreadCount] = React.useState(unread)\n\n React.useEffect(() => {\n setUnreadCount(unread)\n }, [unread])\n\n React.useEffect(() => {\n const updateUnread = (event) => {\n if (event.cid !== channel.cid) return\n if (event.user?.id !== client.user?.id) return\n\n const count = event.type === MARK_READ ? 0 : channel.countUnread()\n\n setUnreadCount(count)\n }\n\n EVENTS.forEach((event) => client.on(event, updateUnread))\n\n return () => EVENTS.forEach((event) => client.off(event, updateUnread))\n }, [])\n\n const lastReadMessage = React.useMemo(\n () =>\n findLast(\n channel.state.latestMessages,\n (msg: FormatMessageResponse) => msg.user?.id !== client.userID\n ),\n [unreadCount]\n )\n\n const isUnreadable = Boolean(lastReadMessage?.id)\n\n return {\n isUnread: Boolean(unreadCount),\n isUnreadable,\n markRead: () => channel.markRead(),\n markUnread: () =>\n isUnreadable && channel.markUnread({ message_id: lastReadMessage.id }),\n unreadCount,\n }\n}\n","import { useContext } from \"react\"\n\nimport type { ChatContextValue } from \"../chat_context\"\nimport { ChatContext } from \"../chat_context\"\n\nexport const useChat = (): ChatContextValue => {\n const context = useContext(ChatContext)\n if (!context) {\n throw new Error(\"useChat must be used within a ChatProvider\")\n }\n return context\n}\n","import { useContext } from \"react\"\n\nimport { ChatApiContext } from \"../chat_api_context\"\n\nexport const useChatApi = () => useContext(ChatApiContext)\n","import pcoUrl, { Environment } from \"@planningcenter/url\"\nimport React from \"react\"\n\nimport apiRequest, { railsCsrfFetch } from \"../../../../api_request\"\nimport { useChatApi } from \"./use_chat_api\"\n\nexport type ConnectedPerson = {\n id: string,\n organization_id: string\n organization_name: string\n unread_count: number\n}\n\ntype UseChatConnectedPeopleValue = {\n loading: boolean\n people: ConnectedPerson[] | null,\n switchPerson: Function\n}\n\nconst LOADING = null\n\nexport const useChatConnectedPeople = (): UseChatConnectedPeopleValue => {\n const [people, setPeople] = React.useState<ConnectedPerson[] | null>(LOADING);\n const loading = people === LOADING\n\n const api = useChatApi()\n\n React.useEffect(() => {\n api.chat\n .get(\"me/connected_people\")\n .then(people => setPeople(people))\n }, [])\n\n return { loading, people, switchPerson }\n}\n\nexport const switchPerson = (toId: string, returnPath: string, env: Environment) => {\n apiRequest(\n railsCsrfFetch,\n `${pcoUrl(env)(\"api\")}/login/v2/me/switch_connected_person`,\n {\n data: {\n data: {\n attributes: {\n id: toId,\n return_path: returnPath,\n },\n },\n },\n method: \"POST\",\n }\n ).then(({ json }) => {\n window.location = json.meta.redirect_to\n })\n}\n","import React, { useCallback } from \"react\"\n\nexport interface ServicesFilterValues {\n plan_id: number | null\n teams: {\n service_type_id: number\n team_id: number\n }[]\n}\nexport const SERVICES_INITIAL_VALUES: ServicesFilterValues = {\n plan_id: null,\n teams: [],\n}\n\nexport interface GroupsFilterValues {\n group: {\n id: number\n name: string\n }\n}\n\nexport interface FilterValues {\n Groups?: GroupsFilterValues\n Services: ServicesFilterValues\n // add apps as needed\n}\n\nexport type FilterUpdateFn<T> = (prevState: T) => T\n\nexport type SetFilterValuesFn = <K extends keyof FilterValues>(\n args: SetFilterValuesArgs<K>\n) => void\n\nexport type SetFilterValuesArgs<K extends keyof FilterValues> = {\n appName: K\n values: FilterValues[K] | FilterUpdateFn<FilterValues[K]>\n}\n\n// TODO: consider using the AppName type out of channel_metas.tsx when #331 is merged\n// https://github.com/planningcenter/topbar/pull/331/files\nconst INITIAL_VALUES = { Services: SERVICES_INITIAL_VALUES }\n\nexport const useChatFilter = () => {\n const [filterValues, _setFilterValuesInner] =\n React.useState<FilterValues>(INITIAL_VALUES)\n\n const setFilterValues: SetFilterValuesFn = useCallback(\n ({ appName, values }) => {\n _setFilterValuesInner((prevState) => ({\n ...prevState,\n [appName]:\n typeof values === \"function\" ? values(prevState[appName]) : values,\n }))\n },\n []\n )\n\n return { filterValues, setFilterValues }\n}\n","import pcURL from \"@planningcenter/url\"\nimport React from \"react\"\n\nimport apiRequest, {\n defaultFetch,\n railsCsrfFetch,\n} from \"../../../../api_request\"\nimport {\n useJoltChannelSubscription,\n useJoltEffect,\n} from \"../../../../hooks/jolt\"\nimport { noop } from \"../utils\"\n\ntype Token = string\n\ntype ChatStreamUser = {\n api_key: string\n tokenProvider(): Promise<Token>\n unread: boolean\n}\n\nexport const useChatStreamUser = ({\n enableJoltLogging,\n env,\n userId,\n isEnabled,\n joltPromise,\n onConnectionFailure = noop,\n}) => {\n const [streamUser, setStreamUser] = React.useState<ChatStreamUser | null>(null)\n\n const chatJoltChannel = useJoltChannelSubscription({\n channelName: `chat.people.${userId}`,\n enableJoltLogging,\n enabled: isEnabled,\n env,\n fetchSubscribeToken: async (cid) => {\n const subscribeUrl = `${pcURL(env)(\"api\")}/chat/v2/me/jolt_subscribe`\n return apiRequest(railsCsrfFetch, subscribeUrl, {\n data: { data: { attributes: { cid } } },\n method: \"POST\",\n }).then(({ json }) => json.data.id)\n },\n joltPromise,\n })\n\n const fetchStreamUser = async ({ fields }) => {\n const url = `${pcURL(env)(\"api\")}/chat/v2/me/stream_user`\n const query = `?context=linked_accounts&fields[StreamUser]=${fields.join(',')}`\n const { json } = await apiRequest(defaultFetch, `${url}${query}`)\n\n return json.data\n }\n\n const setupStreamUser = () =>\n fetchStreamUser({ fields: ['api_key', 'token', 'unread'] })\n .then(({ id, attributes }) => {\n const { token, ...attrs } = attributes\n\n if (token) {\n setStreamUser((prev) => ({\n id,\n ...prev,\n ...attrs,\n tokenProvider: async (): Promise<Token> => {\n const { attributes } = await fetchStreamUser({ fields: ['token'] })\n\n return attributes.token\n },\n }))\n } else {\n onConnectionFailure()\n setStreamUser(null)\n }\n })\n .catch(noop)\n\n useJoltEffect(\n isEnabled ? chatJoltChannel : undefined,\n \"STREAM_USER_UPDATED\",\n setupStreamUser\n )\n\n React.useEffect(() => {\n if (!isEnabled) return\n\n setupStreamUser()\n }, [isEnabled])\n\n return streamUser\n}\n","import { Heading } from \"@planningcenter/tapestry-react\"\nimport React from \"react\"\n\nexport const SUBHEADING_STYLES = {\n fontSize: \"16px\",\n fontWeight: 600,\n lineHeight: \"165%\",\n}\n\nexport const Subheading = ({ children }) => (\n <Heading level={2} {...SUBHEADING_STYLES}>\n {children}\n </Heading>\n)\n","import { StackView } from \"@planningcenter/tapestry-react\"\nimport React from \"react\"\n\nimport { Subheading } from \"../ui/subheading\"\n\nexport const Section = ({ children, title }) => {\n return (\n <StackView spacing={1}>\n <Subheading>{title}</Subheading>\n <>{children}</>\n </StackView>\n )\n}\n","import { Badge, WrapView } from \"@planningcenter/tapestry-react\"\nimport React from \"react\"\n\nimport type {\n AppChatGroups,\n AppsChatGroups,\n ChatGroup,\n} from \"./hooks/use_chat_groups\"\nimport { Section } from \"./section\"\n\nconst AppGroups = {\n Services: ({ groups }: { groups: AppChatGroups }) => {\n const teams = [\"Team\", \"PlanTeam\"].reduce(\n (acc, type) => (groups[type] ? [...acc, ...groups[type]] : acc),\n [] as ChatGroup[]\n )\n\n return (\n <Section title=\"Teams\">\n <WrapView spacing={1}>\n {teams.map((team) => (\n <Badge key={team.source_identifier} size=\"sm\">\n {team.name}\n </Badge>\n ))}\n </WrapView>\n </Section>\n )\n },\n}\n\nexport const Groups = ({ groups }: { groups: AppsChatGroups }) => {\n return (\n <>\n {Object.entries(groups).reduce((acc, [appName, appGroups]) => {\n const Component = AppGroups[appName]\n\n if (!Component) return acc\n\n return [...acc, <Component key={appName} groups={appGroups} />]\n }, [] as React.ReactElement[])}\n </>\n )\n}\n","import React from \"react\"\nimport type { Channel, ChannelMembership, User } from \"stream-chat\"\n\nimport { useChatApi } from \"../../../hooks\"\nimport { noop } from \"../../../utils\"\n\nexport type ChatUser = ChatMember & User\n\nexport type ChatMember = {\n badges: Record<string, string>[]\n child: boolean\n image: string\n stream_member_id: string\n}\n\nconst PCO_DELETED = { badges: [] }\n\nexport const useChatMembers = (channel: Channel): ChatUser[] => {\n const [members, setMembers] = React.useState<Record<string, ChatMember>>({})\n\n const pcoDeletedMembers = React.useMemo(() => {\n if (!channel) return {}\n return Object.values(channel.state.members).reduce(\n (acc, member) =>\n member.user.pco_deleted\n ? { ...acc, [member.user.id]: PCO_DELETED }\n : acc,\n {}\n )\n }, [channel])\n\n const api = useChatApi()\n\n React.useEffect(() => {\n if (!channel) return\n\n api.chat\n .get(`me/conversations/${channel.id}/members`)\n .then((members) =>\n members.reduce(\n (acc, member: ChatMember) => ({\n ...acc,\n [member.stream_member_id]: member,\n }),\n {}\n )\n )\n .then((members) => ({ ...pcoDeletedMembers, ...members }))\n .then(setMembers)\n .catch(noop)\n }, [channel])\n\n return Object.values(channel.state.members).reduce<ChatUser[]>(\n (acc: [], member: ChannelMembership) =>\n member.user && members[member.user.id]\n ? [...acc, { ...member.user, ...members[member.user.id] }]\n : acc,\n []\n )\n}\n","import { Avatar as TapestryAvatar } from \"@planningcenter/tapestry-react\"\nimport React from \"react\"\nimport { Avatar as StreamAvatar } from \"stream-chat-react\"\n\nimport { ChatUser } from \"../channel_details_view/hooks/use_chat_members\"\nimport { Person } from \"../services/hooks/use_chat_people\"\nimport { ListItemPerson } from \"./person\"\n\nconst TAPESTRY_AVATAR_SIZE = {\n lg: 48,\n md: 36,\n sm: 24,\n}\n\nconst isChatUser = (person: ListItemPerson): person is ChatUser =>\n (person as ChatUser).image !== undefined\n\nconst isPerson = (person: ListItemPerson): person is Person =>\n (person as Person).avatar !== undefined\n\nconst Avatar = ({\n person,\n size = \"md\",\n}: {\n person: ListItemPerson\n size?: \"sm\" | \"md\" | \"lg\"\n}) => {\n if (isPerson(person)) {\n return <TapestryAvatar source={person.avatar} size={size} />\n }\n\n if (isChatUser(person)) {\n return (\n <StreamAvatar\n image={person.image}\n name={person.name}\n size={TAPESTRY_AVATAR_SIZE[size]}\n />\n )\n }\n\n return null\n}\n\nexport { Avatar }\n","import {\n Badge,\n Box,\n Icon,\n StackView,\n Text,\n} from \"@planningcenter/tapestry-react\"\nimport React from \"react\"\n\nimport colors from \"../../../../../colors\"\nimport { ChatUser } from \"../channel_details_view/hooks/use_chat_members\"\nimport { Person } from \"../services/hooks/use_chat_people\"\nimport { Avatar } from \"./avatar\"\n\ntype ListItemPerson = Person | ChatUser\n\nconst Person = ({ person }: { person: ListItemPerson }) => {\n const Comp = person.child ? Child : Adult\n return <Comp person={person} />\n}\n\nconst Adult = ({ person }: { person: ListItemPerson }) => (\n <StackView alignment=\"center\" axis=\"horizontal\" spacing={1}>\n <Avatar person={person} size=\"lg\" />\n <StackView alignment=\"start\" spacing={0.25}>\n <Text truncate>{person.name}</Text>\n {person.badges.length > 0 && (\n <StackView alignment=\"center\" axis=\"horizontal\" spacing={0.5}>\n {person.badges.map(({ title }) => (\n <Badge key={title} size=\"xs\">\n {title}\n </Badge>\n ))}\n </StackView>\n )}\n </StackView>\n </StackView>\n)\n\nconst Child = ({ person }: { person: ListItemPerson }) => (\n <StackView alignment=\"center\" axis=\"horizontal\" spacing={1}>\n <Box opacity={0.5}>\n <Avatar person={person} size=\"lg\" />\n </Box>\n <StackView>\n <Text color=\"foreground\" opacity={0.75} truncate>\n {person.name}\n </Text>\n <StackView alignment=\"center\" axis=\"horizontal\" spacing={0.5}>\n <Icon name=\"general.shieldExclamation\" color={colors.warning49} />\n <Text color={colors.warning20} size={5}>\n Not eligible to chat\n </Text>\n </StackView>\n </StackView>\n </StackView>\n)\n\nexport { type ListItemPerson, Person }\n","import {\n Button,\n Collapse,\n GridView,\n Icon,\n StackView,\n Text,\n} from \"@planningcenter/tapestry-react\"\nimport React, { useState } from \"react\"\n\nimport colors from \"../../../../colors\"\nimport { type ListItemPerson, Avatar } from \"./person_list_item\"\n\nconst COLUMNS = \"18px 1fr auto\"\n\nexport const ChildNotice = ({\n childPeople,\n}: {\n childPeople: ListItemPerson[]\n}) => {\n const [open, setOpen] = useState(false)\n\n const childCount = childPeople.length\n const childCountLabel = childCount === 1 ? \"member\" : \"members\"\n\n const summary = `${childCount} ${childCountLabel} under age 13`\n const explanation = `Members under age 13 cannot chat. They will not see conversations or receive notifications.`\n\n return (\n <StackView\n background={colors.warning94}\n marginBottom={0.5}\n padding={1}\n radius={4}\n >\n <GridView alignment=\"start\" columns={COLUMNS} spacing={1}>\n <Icon\n color={colors.warning49}\n marginTop=\"1px\"\n name=\"general.shieldExclamation\"\n size=\"lg\"\n />\n <Text grow={1} color=\"foreground\" size={4}>\n {open ? explanation : summary}\n </Text>\n <Button\n aria-label={open ? \"Hide explanation\" : \"Show explanation\"}\n icon={{\n name: open ? \"general.upCaret\" : \"general.downCaret\",\n size: \"md\",\n }}\n onClick={() => setOpen(!open)}\n size=\"xs\"\n theme=\"warning\"\n tooltip={open ? \"Hide explanation\" : \"Show explanation\"}\n variant=\"naked\"\n />\n </GridView>\n\n <Collapse open={open}>\n <GridView alignment=\"start\" columns={COLUMNS} spacing={1}>\n <StackView gridColumnStart={2} paddingTop={1} spacing={1}>\n {childPeople.map((person) => (\n <StackView\n alignment=\"center\"\n axis=\"horizontal\"\n key={person.id}\n spacing={1}\n >\n <Avatar person={person} size=\"sm\" />\n <Text color=\"foreground\" size={4} weight={500}>\n {person.name}\n </Text>\n </StackView>\n ))}\n </StackView>\n </GridView>\n </Collapse>\n </StackView>\n )\n}\n","import { StackView } from \"@planningcenter/tapestry-react\"\nimport React from \"react\"\n\nimport { ChildNotice } from \"../child_notice\"\nimport { Person } from \"../person_list_item\"\nimport { ChatUser } from \"./hooks/use_chat_members\"\nimport { Section } from \"./section\"\n\ninterface PeopleProps {\n people: ChatUser[]\n}\n\nexport const People = ({ people }: PeopleProps) => {\n const childPeople = people.filter((p) => p.child)\n const someChildPeople = childPeople.length > 0\n\n return (\n <Section title=\"People\">\n <StackView spacing={1.5}>\n {someChildPeople && <ChildNotice childPeople={childPeople} />}\n {people.map((person) => (\n <Person key={person.id} person={person} />\n ))}\n </StackView>\n </Section>\n )\n}\n","import {\n Box,\n Button,\n Collapse,\n StackView,\n Text,\n ToggleSwitch,\n} from \"@planningcenter/tapestry-react\"\nimport React from \"react\"\n\nimport { useChannelMute, useChat, useChatApi } from \"../../hooks\"\nimport { noop } from \"../../utils\"\nimport { Section } from \"./section\"\n\nconst MuteChannel = ({ channel }) => {\n const muted = useChannelMute(channel)\n\n return (\n <StackView axis=\"horizontal\" width=\"100%\">\n <Text as=\"label\" display=\"flex\" grow={1}>\n Mute\n <StackView grow={1} />\n <ToggleSwitch\n isChecked={muted}\n ariaLabel=\"Mute Channel\"\n onClick={() => muted ? channel.unmute() : channel.mute()}\n />\n </Text>\n </StackView>\n )\n}\n\nconst RemoveChannel = ({ channel }) => {\n const [isRemoveHot, setRemoveHot] = React.useState(false)\n const [isRemoving, setRemoving] = React.useState(false)\n const { switchToChannelListView } = useChat()\n\n const api = useChatApi()\n\n return (\n <Box>\n {!isRemoveHot && (\n <Button\n onClick={() => setRemoveHot(true)}\n paddingHorizontal={0}\n paddingVertical={0}\n theme={false}\n >\n <Text color=\"error\">Delete conversation</Text>\n </Button>\n )}\n <Collapse open={isRemoveHot}>\n <StackView\n backgroundColor=\"error-lightest\"\n padding={2}\n radius={4}\n spacing={1}\n >\n <Text size={4}>\n Deleting this conversation will remove it for everyone. This cannot\n be undone. Are you sure?\n </Text>\n <StackView\n distribution=\"end\"\n alignment=\"end\"\n axis=\"horizontal\"\n spacing={1}\n >\n <Button\n fontWeight={400}\n onClick={() => setRemoveHot(false)}\n size=\"sm\"\n theme=\"dark\"\n variant=\"naked\"\n >\n Cancel\n </Button>\n <Button\n disabled={isRemoving}\n fontWeight={400}\n onMouseDown={(e) => e.preventDefault()}\n onClick={() => {\n setRemoving(true)\n api.chat\n .delete(`me/conversations/${channel.id}`)\n .then(switchToChannelListView)\n .catch(noop)\n }}\n size=\"sm\"\n theme=\"error\"\n title=\"Yes, delete\"\n spinner={isRemoving}\n />\n </StackView>\n </StackView>\n </Collapse>\n </Box>\n )\n}\n\nexport const Settings = ({ channel, isRemovable }) => (\n <Section title=\"Settings\">\n <StackView spacing={1}>\n <MuteChannel channel={channel} />\n {isRemovable && <RemoveChannel channel={channel} />}\n </StackView>\n </Section>\n)\n","import { Input } from \"@planningcenter/tapestry-react\"\nimport React from \"react\"\nimport type { Channel } from \"stream-chat\"\n\nimport { useChatApi } from \"../../hooks\"\nimport { noop } from \"../../utils\"\nimport { Section } from \"./section\"\n\nexport const Title = ({\n channel,\n isEditable,\n}: {\n channel: Channel\n isEditable: boolean\n}) => {\n const [title, setTitle] = React.useState(channel.data.name)\n const api = useChatApi()\n\n return (\n <Section title=\"Title\">\n <Input\n size=\"lg\"\n value={title}\n maxLength={255}\n disabled={!isEditable}\n onChange={(e) => setTitle(e.target.value)}\n onBlur={() => {\n if (title === channel.data.name) return\n\n api.chat\n .patch(`me/conversations/${channel.id}`, { title })\n .catch(noop)\n }}\n onKeyDown={(e) =>\n e.key === \"Enter\" && (e.target as HTMLInputElement).blur()\n }\n />\n </Section>\n )\n}\n","import { Button, StackView } from \"@planningcenter/tapestry-react\"\nimport React from \"react\"\nimport type { Channel } from \"stream-chat\"\nimport { useChatContext } from \"stream-chat-react\"\n\nimport { default as themeColors } from \"../../../../../colors\"\nimport { DrawerHeading, ScrollContainer } from \"../../../../components\"\nimport { useChat } from \"../../hooks\"\nimport type { StreamChatGenerics } from \"../../types\"\nimport { Groups } from \"./groups\"\nimport { useChatGroups, useChatMemberAbility, useChatMembers } from \"./hooks\"\nimport { People } from \"./people\"\nimport { Settings } from \"./settings\"\nimport { Title } from \"./title\"\n\nconst Details = ({ channel }: { channel: Channel }) => {\n const chatGroups = useChatGroups(channel)\n const chatMembers = useChatMembers(channel)\n const chatMemberAbility = useChatMemberAbility(channel)\n\n return (\n <ScrollContainer>\n <StackView padding={2} spacing={4} grow={1}>\n <Title channel={channel} isEditable={chatMemberAbility.canUpdate} />\n <Settings channel={channel} isRemovable={chatMemberAbility.canDelete} />\n {Object.keys(chatGroups).length > 0 && <Groups groups={chatGroups} />}\n <People people={chatMembers} />\n </StackView>\n </ScrollContainer>\n )\n}\n\nexport const ChannelDetailsView = () => {\n const { channel } = useChatContext<StreamChatGenerics>()\n const { isChannelDetailsViewActive, switchToChannelView } = useChat()\n\n if (!(channel && isChannelDetailsViewActive)) return null\n\n return (\n <>\n <StackView\n alignment=\"center\"\n axis=\"horizontal\"\n spacing={1}\n padding={2}\n paddingTop={1}\n >\n <Button\n aria-label=\"Switch to chat list\"\n color={themeColors.lightNeutral12}\n icon=\"general.leftChevron\"\n onClick={switchToChannelView}\n size=\"sm\"\n title=\"Back to chat list\"\n variant=\"naked\"\n />\n <DrawerHeading truncate>Conversation details</DrawerHeading>\n </StackView>\n <Details channel={channel} />\n </>\n )\n}\n","import React from \"react\"\nimport type { Channel } from \"stream-chat\"\n\nimport { useChatApi } from \"../../../hooks\"\nimport { noop } from '../../../utils'\n\ntype AppName = \"Services\" | \"Chat\"\ntype SourceType = string\n\nexport type ChatGroup = {\n name: string | null,\n source_app_name: AppName,\n source_identifier: string\n source_type: SourceType\n}\n\nexport type AppChatGroups = Record<SourceType, ChatGroup[]>\n\nexport type AppsChatGroups = {\n [N in AppName]?: AppChatGroups\n}\n\nexport const useChatGroups = (channel: Channel): AppsChatGroups => {\n const [groups, setGroups] = React.useState<ChatGroup[]>([])\n\n const api = useChatApi()\n\n React.useEffect(() => {\n if (!channel) return\n\n api.chat\n .get(`me/conversations/${channel.id}/groups`)\n .then(setGroups)\n .catch(noop)\n }, [channel])\n\n return groups.reduce((acc, group: ChatGroup) => {\n acc[group.source_app_name] ||= {}\n acc[group.source_app_name][group.source_type] ||= []\n acc[group.source_app_name][group.source_type].push(group)\n\n return acc\n }, {} as AppsChatGroups)\n}\n","import React from 'react'\nimport type { Channel } from 'stream-chat';\n\nimport { useChatApi } from \"../../../hooks\"\n\nexport const useChatMemberAbility = (channel: Channel) => {\n const api = useChatApi()\n const [ability, setAbility] = React.useState({\n canDelete: false,\n canUpdate: false,\n })\n\n React.useEffect(() => {\n api.chat\n .get(`/me/conversations/${channel.id}/member_ability`)\n .then((data) => setAbility({\n canDelete: data.can_delete,\n canUpdate: data.can_update,\n }))\n }, [channel])\n\n return ability\n}\n","import { Badge, Text } from \"@planningcenter/tapestry-react\"\nimport React from \"react\"\n\nexport const BetaBadge = () => (\n <Badge color=\"hsla(221, 89%, 93%, 1)\" radius=\"pill\" size=\"xs\">\n <Text color=\"hsla(221, 91%, 55%, 1)\">Beta</Text>\n </Badge>\n)\n","import { Heading, StackView } from \"@planningcenter/tapestry-react\"\nimport React from \"react\"\n\nexport const ChannelListBlankState = () => (\n <StackView\n alignment=\"center\"\n distribution=\"center\"\n padding={4}\n paddingTop=\"54px\"\n width=\"100%\"\n >\n <ChannelListBlankStateIcon />\n <Heading color=\"foreground\" fontWeight={500} marginTop={1} size={3}>\n No conversations\n </Heading>\n </StackView>\n)\n\nconst ChannelListBlankStateIcon = () => (\n <svg\n width=\"162\"\n height=\"124\"\n viewBox=\"0 0 162 124\"\n fill=\"none\"\n xmlns=\"http://www.w3.org/2000/svg\"\n >\n <path\n d=\"M157.354 67.5522C151.241 85.6769 138.257 101.123 124.335 110.111C110.102 119.278 94.9458 121.54 77.5441 117.715C60.3357 113.846 43.3207 105.974 29.2803 98.519C15.344 90.6768 4.35267 83.5043 1.63086 72.2247C-1.04633 61.2576 4.81374 46.0644 18.8987 31.0943C32.835 16.3773 54.9962 2.71679 81.3665 0.469802C107.543 -2.16409 131.594 6.57091 145.381 19.3088C159.526 32.1211 163.437 49.5613 157.369 67.5522H157.354Z\"\n fill=\"#EDF6FB\"\n />\n <g opacity=\"0.2\">\n <path\n opacity=\"0.2\"\n d=\"M102.204 121.658C88.8481 124.173 75.9678 121.851 62.6562 114.947C47.0244 106.747 32.642 94.7534 20.9962 83.9054C9.55863 72.7299 0.798274 62.9533 1.08087 51.3463C1.25935 43.147 6.37575 33.9656 15.85 25.4092\"\n stroke=\"#BAC7D3\"\n strokeWidth=\"1.48\"\n strokeMiterlimit=\"10\"\n />\n <path\n opacity=\"0.2\"\n d=\"M152.714 87.1641C143.909 100.408 130.985 110.631 117.792 116.628\"\n stroke=\"#BAC7D3\"\n strokeWidth=\"1.48\"\n strokeMiterlimit=\"10\"\n />\n <path\n opacity=\"0.2\"\n d=\"M36.5986 11.6C53.108 3.53464 74.4809 -1.27187 96.6421 2.6864C122.611 6.91253 143.582 21.5701 153.607 37.4478C160.761 48.5191 162.62 60.4683 159.63 72.0009\"\n stroke=\"#BAC7D3\"\n strokeWidth=\"1.48\"\n strokeMiterlimit=\"10\"\n />\n </g>\n <path\n d=\"M108.125 25.5668H52.4657C49.4438 25.4274 46.4893 26.4961 44.2438 28.5407C41.9982 30.5854 40.6427 33.441 40.4717 36.4876V72.233C40.6427 75.2796 41.9982 78.1352 44.2438 80.1799C46.4893 82.2245 49.4438 83.2931 52.4657 83.1538H64.7654L80.2729 96.7441L95.7804 83.1538H108.125C111.147 83.2931 114.102 82.2245 116.347 80.1799C118.593 78.1352 119.948 75.2796 120.119 72.233V36.4876C119.948 33.441 118.593 30.5854 116.347 28.5407C114.102 26.4961 111.147 25.4274 108.125 25.5668Z\"\n fill=\"#48A5E5\"\n />\n <path\n d=\"M64.8701 59.3043C62.3848 59.3043 60.3701 57.2886 60.3701 54.8021C60.3701 52.3155 62.3848 50.2998 64.8701 50.2998C67.3554 50.2998 69.3701 52.3155 69.3701 54.8021C69.3701 57.2886 67.3554 59.3043 64.8701 59.3043Z\"\n fill=\"#EEF5FD\"\n />\n <path\n d=\"M79.9258 59.3043C77.4405 59.3043 75.4258 57.2886 75.4258 54.8021C75.4258 52.3155 77.4405 50.2998 79.9258 50.2998C82.4111 50.2998 84.4258 52.3155 84.4258 54.8021C84.4258 57.2886 82.4111 59.3043 79.9258 59.3043Z\"\n fill=\"#EEF5FD\"\n />\n <path\n d=\"M95.0615 59.3043C92.5762 59.3043 90.5615 57.2886 90.5615 54.8021C90.5615 52.3155 92.5762 50.2998 95.0615 50.2998C97.5468 50.2998 99.5615 52.3155 99.5615 54.8021C99.5615 57.2886 97.5468 59.3043 95.0615 59.3043Z\"\n fill=\"#EEF5FD\"\n />\n <path\n d=\"M124.007 65.7374H96.4523C94.9563 65.6685 93.4937 66.1975 92.382 67.2097C91.2703 68.2219 90.5993 69.6355 90.5146 71.1438V88.8395C90.5993 90.3477 91.2703 91.7614 92.382 92.7736C93.4937 93.7858 94.9563 94.3148 96.4523 94.2458H102.541L110.218 100.974L117.895 94.2458H124.007C125.503 94.3148 126.965 93.7858 128.077 92.7736C129.188 91.7614 129.859 90.3477 129.944 88.8395V71.1438C129.859 69.6355 129.188 68.2219 128.077 67.2097C126.965 66.1975 125.503 65.6685 124.007 65.7374Z\"\n fill=\"#79CAF2\"\n />\n <path\n d=\"M102.594 82.4391C101.363 82.4391 100.366 81.4412 100.366 80.2103C100.366 78.9793 101.363 77.9814 102.594 77.9814C103.824 77.9814 104.821 78.9793 104.821 80.2103C104.821 81.4412 103.824 82.4391 102.594 82.4391Z\"\n fill=\"#EEF5FD\"\n />\n <path\n d=\"M110.047 82.4391C108.816 82.4391 107.819 81.4412 107.819 80.2103C107.819 78.9793 108.816 77.9814 110.047 77.9814C111.277 77.9814 112.274 78.9793 112.274 80.2103C112.274 81.4412 111.277 82.4391 110.047 82.4391Z\"\n fill=\"#EEF5FD\"\n />\n <path\n d=\"M117.54 82.4391C116.31 82.4391 115.312 81.4412 115.312 80.2103C115.312 78.9793 116.31 77.9814 117.54 77.9814C118.77 77.9814 119.768 78.9793 119.768 80.2103C119.768 81.4412 118.77 82.4391 117.54 82.4391Z\"\n fill=\"#EEF5FD\"\n />\n </svg>\n)\n","import {\n Icon,\n Menu,\n Select,\n Spinner,\n StackView,\n Text,\n} from \"@planningcenter/tapestry-react\"\nimport { Environment } from \"@planningcenter/url\"\nimport React, { useEffect, useState } from \"react\"\n\nimport colors from \"../../../../../colors\"\nimport { IndicatorDot } from \"../../../../components\"\nimport { useChatConnectedPeople } from \"../../hooks\"\nimport type { ConnectedPerson } from \"../../hooks/use_chat_connected_people\"\n\ntype LinkedAccountSelectProps = {\n appName: string\n currentPersonId: number\n env: Environment\n}\n\nexport const LinkedAccountSelect = ({\n appName,\n env,\n currentPersonId,\n}: LinkedAccountSelectProps) => {\n const { people, loading, switchPerson } = useChatConnectedPeople()\n const [connectedPeople, setConnectedPeople] = useState(people)\n const [selected, setSelected] = useState<ConnectedPerson | null>(null)\n const [switching, setSwitching] = useState(false)\n const anyConnectedUnread = connectedPeople?.some(\n (p) => p.id !== `${currentPersonId}` && p.unread_count\n )\n\n useEffect(() => {\n if (people) {\n const sortedByOrgName = people.sort((a, b) =>\n a.organization_name.localeCompare(b.organization_name)\n )\n setConnectedPeople(sortedByOrgName)\n const currentPerson = people.find(\n (person) => person.id === `${currentPersonId}`\n )\n setSelected(currentPerson)\n }\n }, [people])\n\n return (\n <StackView paddingHorizontal={2}>\n <Select\n emptyValue=\"Linked Accounts\"\n disabled={switching}\n matchWidths={true}\n onChange={({ value }) => {\n const person = connectedPeople.find((p) => p.id === value)\n setSelected(person)\n if (person.id !== `${currentPersonId}`) {\n setSwitching(true)\n switchPerson(person.id, `${appName}/`, env)\n }\n }}\n value={selected?.id}\n renderValue={() => (\n <StackView\n alignment=\"center\"\n axis=\"horizontal\"\n distribution=\"space-between\"\n spacing={1}\n >\n {selected.organization_name}\n {anyConnectedUnread && !switching && (\n <IndicatorDot right={3.5} top={1.25} />\n )}\n {switching && (\n <Spinner\n key=\"loader\"\n position=\"absolute\"\n height={1.5}\n width={1.5}\n zIndex={6}\n right={3.5}\n top={1.25}\n />\n )}\n </StackView>\n )}\n >\n <SwitchAccountsWarning />\n {connectedPeople?.map((connectedPerson) => (\n <Select.Option value={connectedPerson.id} key={connectedPerson.id}>\n <StackView\n alignment=\"center\"\n axis=\"horizontal\"\n distribution=\"space-between\"\n spacing={1}\n >\n {connectedPerson.organization_name}\n {connectedPerson.unread_count > 0 && (\n <IndicatorDot right={1.5} top={1.25} />\n )}\n </StackView>\n </Select.Option>\n ))}\n {loading && <LoadingIndicator />}\n </Select>\n </StackView>\n )\n}\n\nconst LoadingIndicator = () => (\n <Menu.Item\n alignment=\"center\"\n distribution=\"center\"\n paddingBottom={2}\n paddingTop={2}\n >\n <Spinner />\n </Menu.Item>\n)\n\nconst SwitchAccountsWarning = () => (\n <StackView\n axis=\"horizontal\"\n backgroundColor={colors.interaction97}\n marginBottom={0.5}\n marginHorizontal={1.25}\n marginTop={1}\n padding={1}\n radius={4}\n spacing={1}\n >\n <Icon\n color={colors.interaction66}\n marginTop=\"3px\"\n name=\"general.outlinedExclamationCircle\"\n />\n <Text size={5}>\n Make sure any changes outside of chat are saved before switching accounts.\n </Text>\n </StackView>\n)\n","import { Icon, StackView, Text } from \"@planningcenter/tapestry-react\"\nimport React from \"react\"\n\nexport const LoadingErrorIndicator = () => (\n <StackView alignment=\"center\" spacing={2} padding={2} paddingTop=\"10%\">\n <Icon name=\"general.exclamationTriangle\" color=\"warning\" size=\"xl\" />\n <Text color=\"foregroundSecondary\" align=\"center\">\n An error occured while connecting to the chat, please try again.\n </Text>\n </StackView>\n)\n","import { Button, Divider, StackView } from \"@planningcenter/tapestry-react\"\nimport React, { PropsWithChildren } from \"react\"\nimport { ChannelListMessengerProps } from \"stream-chat-react\"\n\nimport { ScrollContainer } from \"../../../../components\"\nimport { useChat, useChatAppGrants } from \"../../hooks\"\nimport { getPrimaryButtonStyleOverrides } from \"../../utils\"\nimport { LoadingErrorIndicator } from \"./loading_error_indicator\"\n\nexport const List = (props: PropsWithChildren<ChannelListMessengerProps>) => {\n const { children, error = null, loading } = props\n const { switchToNewChatShortcutsView } = useChat()\n const chatAppGrants = useChatAppGrants()\n const displayNewConversationButton =\n chatAppGrants.canCreateChat(\"Services\") ||\n chatAppGrants.canCreateChat(\"Groups\")\n\n if (error) return <LoadingErrorIndicator />\n if (loading) return null\n\n return (\n <StackView grow={1} shrink={1}>\n <ScrollContainer>{children}</ScrollContainer>\n <Divider />\n <StackView padding={2} alignment=\"stretch\">\n {displayNewConversationButton && (\n <Button\n aria-label=\"Switch to new conversation\"\n onClick={switchToNewChatShortcutsView}\n {...getPrimaryButtonStyleOverrides()}\n >\n New conversation\n </Button>\n )}\n </StackView>\n </StackView>\n )\n}\n","import React from \"react\"\n\nimport { useChatApi } from \"./use_chat_api\"\n\ntype AppName = \"Services\" | \"Groups\"\n\ntype AppGrant = {\n app_name: AppName\n create_conversations: boolean\n}\n\ntype AppGrantMap = {\n [P in AppName]?: AppGrant\n}\n\ninterface ChatAppGrants {\n canCreateChat: (appName: AppName) => boolean\n}\n\nexport const useChatAppGrants = (): ChatAppGrants => {\n const [appGrants, setAppGrants] = React.useState<AppGrantMap>({})\n\n const api = useChatApi()\n\n React.useEffect(() => {\n api.chat\n .get(\"me/app_grants\")\n .then((grants: AppGrant[]) =>\n grants.reduce((acc, grant) => ({ ...acc, [grant.app_name]: grant }), {})\n )\n .then(setAppGrants)\n }, [])\n\n return {\n canCreateChat: (appName) =>\n appGrants[appName] && appGrants[appName].create_conversations,\n }\n}\n","import { Group, StackView, Text, Tooltip } from \"@planningcenter/tapestry-react\"\nimport React from \"react\"\nimport type { Channel } from \"stream-chat\"\n\nimport { ColorAppIcon } from \"../../../../color_app_icon\"\nimport { default as themeColors } from \"../../../../colors\"\n\ntype AppName = \"Groups\" | \"Services\" | null\n\nconst PcoAppNames = {\n groups: \"Groups\",\n services: \"Services\",\n}\n\ninterface GroupsAppMetaComponentProps {\n names?: string[]\n}\ninterface ServicesAppMetaComponentProps {\n dates?: string\n}\n\ntype ChannelMetaProps = {\n appName: AppName\n channel: Channel\n}\n\nconst ChannelMeta = ({ appName, channel }: ChannelMetaProps) => {\n let resourceType: \"Plan\" | \"Team\" | \"Group\" | undefined\n let resourceId: string | undefined\n\n switch (appName) {\n case \"Groups\": {\n const metadata = channel.data[appName] as GroupsAppMetaComponentProps\n resourceType = \"Group\"\n if (metadata?.names?.length) {\n resourceId = metadata.names?.join(\", \")\n }\n break\n }\n case \"Services\": {\n const metadata = channel.data[appName] as ServicesAppMetaComponentProps\n resourceType = metadata?.dates ? \"Plan\" : \"Team\"\n if (metadata?.dates) {\n resourceId = metadata.dates\n }\n break\n }\n }\n\n return (\n <Group radius={4} spacing=\"0.25px\" className=\"channel-meta\" maxWidth=\"100%\">\n <StackView\n alignment=\"center\"\n axis=\"horizontal\"\n backgroundColor={themeColors.lightNeutral95}\n borderColor={themeColors.lightNeutral95}\n borderWidth={1}\n distribution=\"center\"\n padding={0.5}\n paddingHorizontal={1}\n spacing={0.5}\n >\n <ColorAppIcon appName={appName} size={15} />\n <Text lineHeight=\"13px\" size={5} weight={500}>\n {resourceType}\n </Text>\n </StackView>\n {resourceId && (\n <StackView\n alignment=\"center\"\n borderColor={themeColors.lightNeutral95}\n borderLeftWidth={0}\n borderWidth={1}\n distribution=\"center\"\n padding={0.5}\n paddingHorizontal={1}\n shrink={1}\n >\n <Tooltip title={resourceId} openDelay={800}>\n <Text\n color=\"foregroundSecondary\"\n lineHeight=\"13px\"\n size={5}\n truncate\n maxWidth=\"100%\"\n >\n {resourceId}\n </Text>\n </Tooltip>\n </StackView>\n )}\n </Group>\n )\n}\n\nexport const ChannelMetas = ({ channel }) => {\n if (!channel?.data?.pco_apps) return null\n\n const metas: JSX.Element[] = channel.data.pco_apps.map((pco_app: string) => (\n <ChannelMeta\n key={pco_app}\n appName={PcoAppNames[pco_app]}\n channel={channel}\n />\n ))\n\n return (\n <StackView axis=\"horizontal\" maxWidth=\"calc(100% + 24px)\">\n {metas}\n </StackView>\n )\n}\n","import React from \"react\"\nimport type { ChannelMemberResponse } from \"stream-chat\"\nimport { Avatar as SCAvatar } from \"stream-chat-react\"\n\nconst getImage = (member) => member.user?.image\n\nconst Avatar = ({ member, size = 40 }) => <SCAvatar image={getImage(member)} shape=\"square\" size={size}/>\n\n// based off of https://github.com/GetStream/website-react-examples/blob/master/social-messenger-ts/src/components/AvatarGroup/AvatarGroup.tsx\nexport const AvatarGroup = ({\n members,\n}: {\n members: ChannelMemberResponse[]\n}) => {\n let content = null\n\n if (members.length === 1) {\n content = <Avatar member={members[0]} />\n }\n\n if (members.length === 2) {\n content = (\n <>\n <div>\n <Avatar member={members[0]} />\n </div>\n <div style={{ marginLeft: \"-20px\" }}>\n <Avatar member={members[1]} />\n </div>\n </>\n )\n }\n\n if (members.length === 3) {\n content = (\n <>\n <div>\n <Avatar member={members[0]} />\n </div>\n <div style={{ marginLeft: \"-20px\" }}>\n <Avatar member={members[1]} size={20} />\n <Avatar member={members[2]} size={20} />\n </div>\n </>\n )\n }\n\n if (members.length >= 4) {\n content = (\n <>\n <div>\n <Avatar\n member={members[members.length - 4]}\n size={20}\n />\n <Avatar\n member={members[members.length - 3]}\n size={20}\n />\n </div>\n <div>\n <Avatar\n member={members[members.length - 2]}\n size={20}\n />\n <Avatar\n member={members[members.length - 1]}\n size={20}\n />\n </div>\n </>\n )\n }\n\n return <div className=\"str-chat__avatar-group\">{content}</div>\n}\n\nexport default AvatarGroup\n","import {\n Badge,\n Box,\n Dropdown,\n GridView,\n Heading,\n Icon,\n StackView,\n Text,\n} from \"@planningcenter/tapestry-react\"\nimport React from \"react\"\nimport { Channel } from \"stream-chat\"\nimport { StreamMessage, useChatContext } from \"stream-chat-react\"\n\nimport colors from \"../../../../../colors\"\nimport { useChannelMute, useChannelUnread, useChat } from \"../../hooks\"\nimport { formatDate } from \"../../utils\"\nimport { ChannelMetas } from \"../channel_metas\"\nimport AvatarGroup from \"./avatar_group\"\n\nconst getTimeStamp = (channel: Channel): string | null => {\n const lastMessageCreatedAt = channel.state?.last_message_at\n const conversationCreatedAt = channel.data?.created_at as\n | string\n | Date\n | undefined\n\n if (!lastMessageCreatedAt && !conversationCreatedAt) return null\n\n const date = new Date(lastMessageCreatedAt || conversationCreatedAt)\n\n if (isNaN(date.getTime())) return null\n\n return formatDate(date)\n}\n\nconst getLastMessagePreview = (lastMessage: StreamMessage) => {\n if (!lastMessage) return \"Empty conversation\"\n\n const from = lastMessage.user?.name\n const text = lastMessage.deleted_at ? \"Message deleted\" : lastMessage.text\n\n const attachmentCount = lastMessage.attachments?.length\n const attachmentString =\n attachmentCount === 1 ? \"1 attachment\" : `${attachmentCount} attachments`\n\n const messagePreview = text || attachmentString\n\n return `${from}: ${messagePreview}`\n}\n\nconst UnreadBadge = ({ unread }) => {\n if (unread < 1) return null\n\n const clampedValue = unread <= 99 ? unread.toString() : \"99+\"\n\n return (\n <Badge\n title={clampedValue}\n size=\"xs\"\n color={colors.interaction66}\n radius=\"pill\"\n minWidth={3}\n />\n )\n}\n\nexport const Preview = ({ channel, lastMessage, setActiveChannel, unread }) => {\n const { client } = useChatContext()\n\n const {\n setActionsOpenForChannel,\n actionsOpenForChannel,\n switchToChannelView,\n } = useChat()\n\n const muted = useChannelMute(channel)\n\n const { isUnread, isUnreadable, markRead, markUnread, unreadCount } =\n useChannelUnread(channel, unread)\n\n const channelActionsOpen = actionsOpenForChannel === channel.id\n\n const handleChannelClick = (\n e: React.MouseEvent<HTMLDivElement> | React.KeyboardEvent<HTMLDivElement>\n ) => {\n const target = e.target as HTMLElement\n if (target.getAttribute(\"data-type\") !== \"actions-dropdown\") {\n setActiveChannel(channel)\n switchToChannelView()\n }\n }\n\n const handleChannelKeyDown = (event: React.KeyboardEvent<HTMLDivElement>) => {\n if (event.key === \"Enter\" || event.key === \" \") {\n handleChannelClick(event)\n }\n }\n\n const members = Object.values(channel.state.members).filter(\n ({ user }) => user.id !== client.userID\n )\n\n const displayTitle = channel.data.name\n\n return (\n <GridView\n alignment=\"start\"\n aria-label={`Select Channel: ${displayTitle || \"\"}`}\n backgroundColor={channelActionsOpen ? \"surfaceTertiary\" : \"surface\"}\n borderBottomColor=\"separatorTertiary\"\n borderBottomWidth={1}\n columns=\"auto 1fr auto\"\n cursor=\"pointer\"\n css={{\n \"&:hover\": {\n \".actions-dropdown\": { visibility: \"visible\" },\n \".channel-meta > *\": { borderColor: colors.lightNeutral88 },\n backgroundColor: \"surfaceTertiary\",\n },\n \"@media (hover: none)\": {\n \".actions-dropdown\": { visibility: \"visible\" },\n },\n }}\n minHeight={10}\n onClick={handleChannelClick}\n onKeyDown={handleChannelKeyDown}\n padding={1}\n paddingHorizontal={2}\n radius={0}\n role=\"button\"\n spacing={1}\n tabIndex={0}\n width=\"100%\"\n >\n <AvatarGroup members={members} />\n <StackView height=\"100%\" alignment=\"start\" paddingRight={1}>\n <Heading level={4} maxWidth=\"100%\" truncate weight={500}>\n {displayTitle}\n </Heading>\n <Text\n color=\"foregroundSecondary\"\n css={{\n WebkitBoxOrient: \"vertical\",\n WebkitLineClamp: \"2\",\n display: \"-webkit-box\",\n overflow: \"hidden\",\n textOverflow: \"ellipsis\",\n }}\n lineHeight=\"1.35\"\n maxWidth=\"100%\"\n size={4}\n textAlign=\"left\"\n >\n {getLastMessagePreview(lastMessage)}\n </Text>\n <StackView basis={0.5} grow={1} />\n <ChannelMetas channel={channel} />\n </StackView>\n <StackView alignment=\"end\" minWidth={6} height=\"100%\">\n <Text color=\"foregroundSecondary\" size={5}>\n {getTimeStamp(channel)}\n </Text>\n <StackView alignment=\"end\" alignSelf=\"stretch\" grow={1}>\n {muted ? (\n <Icon name=\"general.bellMuted\" />\n ) : (\n <UnreadBadge unread={unreadCount} />\n )}\n </StackView>\n <Box onClick={(e) => e.stopPropagation()}>\n <Dropdown\n alignSelf=\"end\"\n className=\"actions-dropdown\"\n data-type=\"actions-dropdown\"\n icon={{\n name: \"people.importProgress\",\n size: \"lg\",\n }}\n radius=\"circle\"\n iconRight={null}\n lockScrollWhileOpen={true}\n onClose={() => setActionsOpenForChannel(null)}\n onOpen={() => setActionsOpenForChannel(channel.id)}\n placement=\"top-end\"\n popoverProps={{ offset: 4, shouldFlip: true }}\n right=\"1.5px\"\n size=\"xs\"\n theme=\"dark\"\n title=\"Chat actions\"\n variant=\"naked\"\n visibility={channelActionsOpen ? \"visible\" : \"hidden\"}\n >\n <Dropdown.Item\n disabled={!(isUnread || isUnreadable)}\n onSelect={isUnread ? markRead : markUnread}\n >\n {`Mark ${isUnread ? \"read\" : \"unread\"}`}\n </Dropdown.Item>\n <Dropdown.Item\n onSelect={() => (muted ? channel.unmute() : channel.mute())}\n >\n {muted ? \"Unmute\" : \"Mute\"}\n </Dropdown.Item>\n </Dropdown>\n </Box>\n </StackView>\n </GridView>\n )\n}\n","import { Spinner, StackView } from \"@planningcenter/tapestry-react\"\nimport React, { useCallback } from \"react\"\nimport {\n ChannelList,\n ChannelListProps,\n InfiniteScroll,\n} from \"stream-chat-react\"\n\nimport useStore from \"../../../../../hooks/use_store\"\nimport { DrawerHeader, DrawerHeading } from \"../../../../components\"\nimport { useChannelsLoading } from \"../../hooks\"\nimport { BetaBadge } from \"../beta_badge\"\nimport { ChannelListBlankState } from \"./channel_list_blank_state\"\nimport { LinkedAccountSelect } from \"./linked_account_select\"\nimport { List } from \"./list\"\nimport { Preview } from \"./preview\"\n\ntype FilterType = ChannelListProps[\"filters\"]\n\nexport const ChannelListView = ({\n client,\n closeDrawer,\n env,\n appName,\n currentPersonId,\n}) => {\n const channelsLoading = useChannelsLoading()\n const { hasConnectedPeople } = useStore()\n\n // Updating these filters might require changes in `handlePotentialChannelAddingEvent`\n const filters: FilterType = {\n $or: [\n { last_message_at: { $exists: true } },\n { created_by_id: client.userID },\n ],\n members: { $in: [client.userID] },\n type: \"messaging\",\n }\n\n // If the above `filters` change we may need to update this logic as well.\n const handlePotentialChannelAddingEvent = useCallback(\n async (setChannels, event) => {\n const eventChannel = event.channel\n\n if (!eventChannel?.id) return\n\n // Ensures empty conversations added by a different user are still hidden across event changes.\n const channelHasMessages = Boolean(eventChannel.last_message_at)\n\n if (!channelHasMessages) return\n\n try {\n const newChannel = client.channel(eventChannel.type, eventChannel.id)\n await newChannel.watch()\n setChannels((channels) => [newChannel, ...channels])\n } catch (error) {\n console.error(error)\n }\n },\n [client.userID]\n )\n\n return (\n <>\n <DrawerHeader closeDrawer={closeDrawer}>\n <StackView axis=\"horizontal\" alignment=\"center\" spacing={1}>\n <DrawerHeading>Chat</DrawerHeading>\n <BetaBadge />\n {channelsLoading && (\n <Spinner\n color=\"hsl(0 0% 62%)\"\n thickness={2}\n trackColor=\"hsl(0 0% 97%)\"\n />\n )}\n </StackView>\n </DrawerHeader>\n <StackView spacing={2} grow={1}>\n {hasConnectedPeople && (\n <LinkedAccountSelect\n env={env}\n appName={appName}\n currentPersonId={currentPersonId}\n />\n )}\n <ChannelList\n setActiveChannelOnMount={false}\n EmptyStateIndicator={ChannelListBlankState}\n filters={filters}\n onMessageNew={handlePotentialChannelAddingEvent}\n onAddedToChannel={handlePotentialChannelAddingEvent}\n List={List}\n // Infinite scroll implementation details may need to be revisited once we have real data to work with.\n // https://getstream.io/chat/docs/sdk/react/guides/channel-list-infinite-scroll/#what-to-take-into-consideration\n Paginator={InfiniteScroll}\n Preview={Preview}\n />\n </StackView>\n </>\n )\n}\n","import { useEffect, useState } from \"react\"\nimport { useChatContext } from \"stream-chat-react\"\n\nconst LOADED = null\n\n// returns a loading boolean for the ChannelList channels query.\n// State is considered to be loading if the query is in any state beside LOADED.\nexport const useChannelsLoading = (): boolean => {\n const [loading, setLoading] = useState(true)\n const { channelsQueryState } = useChatContext(\"ChannelList\")\n const { queryInProgress: queryState } = channelsQueryState\n\n useEffect(() => {\n setLoading(queryState != LOADED)\n }, [queryState])\n\n return loading\n}\n","import { Icon, StackView, Text } from \"@planningcenter/tapestry-react\"\nimport React from \"react\"\n\nimport { default as themeColors } from \"../../../../../colors\"\n\nexport const CustomEmptyStateIndicator = () => (\n <StackView alignment=\"center\" distribution=\"center\" height=\"100%\" spacing={1}>\n <Icon\n color={themeColors.lightNeutral81}\n name=\"general.outlinedTextMessage\"\n size=\"64px\"\n />\n <Text color=\"foregroundTertiary\">No conversation</Text>\n </StackView>\n)\n","import { Button, StackView } from \"@planningcenter/tapestry-react\"\nimport React from \"react\"\n\nimport { default as themeColors } from \"../../../../../colors\"\nimport { DrawerHeading } from \"../../../../components\"\nimport { ChannelMetas } from \"../channel_metas\"\nimport { useMessageListScrollShadows } from \"./hooks/use_message_list_scroll_shadows\"\n\nexport const InjectableCustomHeader = ({\n channel,\n closeDrawer,\n setOverflowBottom,\n setOverflowTop,\n switchToChannelDetailsView,\n switchToChannelListView,\n title,\n}) => {\n const { headerRef } = useMessageListScrollShadows({\n setOverflowBottom,\n setOverflowTop,\n })\n\n return (\n <CustomHeader\n channel={channel}\n closeDrawer={closeDrawer}\n innerRef={headerRef}\n switchToChannelDetailsView={switchToChannelDetailsView}\n switchToChannelListView={switchToChannelListView}\n title={title}\n />\n )\n}\n\nexport const CustomHeader = ({\n channel,\n closeDrawer,\n switchToChannelDetailsView,\n switchToChannelListView,\n title,\n innerRef = null,\n}) => {\n return (\n <StackView\n axis=\"horizontal\"\n backgroundColor=\"surface\"\n innerRef={innerRef}\n left={0}\n padding={2}\n paddingTop={1}\n position=\"absolute\"\n right={0}\n spacing={1}\n top={0}\n zIndex={5}\n >\n <Button\n alignSelf=\"baseline\"\n aria-label=\"Switch to chat list\"\n icon={{\n color: themeColors.lightNeutral12,\n name: \"general.leftChevron\",\n }}\n marginTop={0.25}\n onClick={switchToChannelListView}\n size=\"md\"\n title=\"Back to chat list\"\n variant=\"naked\"\n />\n <StackView shrink={1}>\n <DrawerHeading truncate>{title}</DrawerHeading>\n <ChannelMetas channel={channel} />\n </StackView>\n <StackView\n alignment=\"start\"\n axis=\"horizontal\"\n marginLeft=\"auto\"\n spacing={0.25}\n >\n <Button\n aria-label=\"Switch to conversation details\"\n icon={{\n color: themeColors.lightNeutral12,\n name: \"general.cog\",\n }}\n onClick={switchToChannelDetailsView}\n size=\"md\"\n title=\"Conversation details\"\n variant=\"naked\"\n />\n <Button\n aria-label=\"Close drawer\"\n icon={{\n color: themeColors.lightNeutral12,\n name: \"general.x\",\n }}\n onClick={closeDrawer}\n size=\"md\"\n title=\"Close drawer\"\n variant=\"naked\"\n />\n </StackView>\n </StackView>\n )\n}\n","import { useEffect, useRef } from \"react\"\nimport { useMessageListContext } from \"stream-chat-react\"\n\nexport const useMessageListScrollShadows = ({\n setOverflowBottom,\n setOverflowTop,\n}) => {\n const { listElement, scrollToBottom } = useMessageListContext()\n const headerRef = useRef(null)\n\n // setup resize observer to show/hide scroll shadows\n useEffect(() => {\n const handleResize = () => {\n if (listElement) {\n const hasOverflowBottom =\n listElement.scrollHeight - listElement.clientHeight >\n listElement.scrollTop + 1\n\n setOverflowBottom(hasOverflowBottom)\n }\n }\n\n const resizeObserver = new ResizeObserver(handleResize)\n resizeObserver.observe(listElement)\n\n return () => resizeObserver.unobserve(listElement)\n }, [listElement, setOverflowBottom])\n\n // evaluate if scroll shadows are needed initially\n useEffect(() => {\n const { scrollTop, scrollHeight, clientHeight } = listElement\n setOverflowTop(scrollTop > 0)\n setOverflowBottom(scrollHeight - clientHeight > scrollTop + 1)\n\n const headerHeight = headerRef?.current?.offsetHeight\n listElement.style.marginTop = `${headerHeight}px`\n\n scrollToBottom()\n }, [listElement])\n\n // setup scroll event listener to show/hide scroll shadows\n useEffect(() => {\n const handleScroll = () => {\n const { scrollTop, scrollHeight, clientHeight } = listElement\n setOverflowTop(scrollTop > 0)\n setOverflowBottom(scrollHeight - clientHeight > scrollTop + 1)\n }\n\n listElement.addEventListener(\"scroll\", handleScroll)\n return () => listElement.removeEventListener(\"scroll\", handleScroll)\n }, [listElement, setOverflowTop, setOverflowBottom])\n\n return { headerRef }\n}\n","import { Icon, StackView, Text, Tooltip } from \"@planningcenter/tapestry-react\"\nimport { top } from \"@popperjs/core\"\nimport React from \"react\"\nimport {\n getReadByTooltipText,\n mapToUserNameOrId,\n MessageStatus,\n useChatContext,\n useMessageContext,\n useTranslationContext,\n} from \"stream-chat-react\"\n\nconst SHARED_TOOLTIP_PROPS = {\n placement: top,\n popoverProps: {\n backgroundColor: \"surface\",\n color: \"foreground\",\n elevation: 2,\n offset: 0,\n paddingHorizontal: 1,\n paddingVertical: 1,\n radius: 6,\n },\n}\n\nconst SHARED_LAYOUT_PROPS = {\n alignment: StackView.CENTER,\n axis: StackView.HORIZONTAL,\n distribution: StackView.CENTER,\n marginRight: 0.5,\n padding: 0.5,\n spacing: 1,\n}\n\nexport const CustomMessageStatus = () => {\n return (\n <MessageStatus\n MessageReadStatus={CustomMessageReadStatus}\n MessageDeliveredStatus={CustomMessageDeliveredStatus}\n />\n )\n}\n\nconst CustomMessageDeliveredStatus = () => {\n return (\n <Tooltip title=\"Delivered\" {...SHARED_TOOLTIP_PROPS}>\n <StackView {...SHARED_LAYOUT_PROPS}>\n <Icon name=\"general.check\" />\n </StackView>\n </Tooltip>\n )\n}\n\nconst CustomMessageReadStatus = () => {\n const { client } = useChatContext()\n const { readBy } = useMessageContext(\"MessageStatus\")\n const { t } = useTranslationContext(\"MessageStatus\")\n\n const tooltipTitle = getReadByTooltipText(\n readBy,\n t,\n client,\n mapToUserNameOrId\n )\n\n const justReadByMe = readBy?.length === 1 && readBy[0].id === client.user?.id\n const deliveredAndRead = !!(readBy?.length && !justReadByMe)\n\n const readersWithoutOwnUser = deliveredAndRead\n ? readBy.filter((item) => item.id !== client.user?.id)\n : []\n\n const readByCount = readersWithoutOwnUser.length\n\n return (\n <Tooltip title={tooltipTitle} {...SHARED_TOOLTIP_PROPS}>\n <StackView {...SHARED_LAYOUT_PROPS}>\n <Text size={5} color=\"foregroundSecondary\">\n {readByCount}\n </Text>\n <Icon name=\"general.checkDouble\" size=\"lg\" />\n </StackView>\n </Tooltip>\n )\n}\n","export var top = 'top';\nexport var bottom = 'bottom';\nexport var right = 'right';\nexport var left = 'left';\nexport var auto = 'auto';\nexport var basePlacements = [top, bottom, right, left];\nexport var start = 'start';\nexport var end = 'end';\nexport var clippingParents = 'clippingParents';\nexport var viewport = 'viewport';\nexport var popper = 'popper';\nexport var reference = 'reference';\nexport var variationPlacements = /*#__PURE__*/basePlacements.reduce(function (acc, placement) {\n return acc.concat([placement + \"-\" + start, placement + \"-\" + end]);\n}, []);\nexport var placements = /*#__PURE__*/[].concat(basePlacements, [auto]).reduce(function (acc, placement) {\n return acc.concat([placement, placement + \"-\" + start, placement + \"-\" + end]);\n}, []); // modifiers that need to read the DOM\n\nexport var beforeRead = 'beforeRead';\nexport var read = 'read';\nexport var afterRead = 'afterRead'; // pure-logic modifiers\n\nexport var beforeMain = 'beforeMain';\nexport var main = 'main';\nexport var afterMain = 'afterMain'; // modifier with the purpose to write to the DOM (or write into a framework state)\n\nexport var beforeWrite = 'beforeWrite';\nexport var write = 'write';\nexport var afterWrite = 'afterWrite';\nexport var modifierPhases = [beforeRead, read, afterRead, beforeMain, main, afterMain, beforeWrite, write, afterWrite];","import React from \"react\"\n\nexport const customReactionOptions = [\n {\n Component: () => <>❤️</>,\n name: \"Love\",\n type: \"heart\",\n },\n {\n Component: () => <>🙏</>,\n name: \"Pray\",\n type: \"pray\",\n },\n {\n Component: () => <>😂</>,\n name: \"Laughing\",\n type: \"laughing\",\n },\n {\n Component: () => <>👍</>,\n name: \"Thumbs up\",\n type: \"+1\",\n },\n {\n Component: () => <>👎</>,\n name: \"Thumbs down\",\n type: \"-1\",\n },\n]\n","import data from \"@emoji-mart/data\"\nimport { init, SearchIndex } from \"emoji-mart\"\n\ninit({ data })\n\nexport const emojiSearchIndex = SearchIndex\n","import {\n Box,\n Button,\n GridView,\n Icon,\n StackView,\n Text,\n} from \"@planningcenter/tapestry-react\"\nimport { nanoid } from \"nanoid\"\nimport React, { useEffect, useRef, useState } from \"react\"\nimport { useDropzone } from \"react-dropzone\"\nimport { UploadButton } from \"react-file-utils\"\nimport {\n AttachmentPreviewList,\n ChatAutoComplete,\n useChannelStateContext,\n useMessageInputContext,\n} from \"stream-chat-react\"\nimport { EmojiPicker } from \"stream-chat-react/emojis\"\n\nimport colors from \"../../../../../colors\"\nimport { getPrimaryButtonStyleOverrides } from \"../../utils\"\n\nexport const MessageInput = () => {\n const {\n handleSubmit,\n isUploadEnabled,\n maxFilesLeft,\n numberOfUploads,\n text,\n uploadNewFiles,\n } = useMessageInputContext()\n const [focused, setFocused] = useState(false)\n\n const { multipleUploads } = useChannelStateContext()\n\n const { getRootProps, isDragActive, isDragReject } = useDropzone({\n disabled: !isUploadEnabled || maxFilesLeft === 0,\n multiple: multipleUploads,\n noClick: true,\n onDrop: uploadNewFiles,\n })\n\n const { isChildOfModal, ref } = useIsChildOfModal()\n const wrapInputRef = useAutoFocus()\n const disabled = !numberOfUploads && !text.length\n\n return (\n <GridView\n alignment=\"end\"\n borderColor=\"separatorTertiary\"\n borderTopWidth={isChildOfModal ? 0 : 1}\n columns=\"auto 1fr auto\"\n innerRef={ref}\n padding={2}\n spacing={1}\n >\n <FileUploadUI\n isUploadEnabled={isUploadEnabled}\n maxFilesLeft={maxFilesLeft}\n multipleUploads={multipleUploads}\n uploadNewFiles={uploadNewFiles}\n />\n <StackView\n {...getRootProps({\n borderColor: \"separatorTertiary\",\n borderWidth: 1,\n className: isChildOfModal ? \"is-modal-child\" : \"\",\n outline: focused ? colors.interaction66 : \"none\",\n outlineOffset: 1,\n outlineStyle: focused ? \"solid\" : \"none\",\n position: \"relative\",\n radius: 8,\n refKey: \"innerRef\",\n })}\n >\n {isDragActive && <DropzoneUI isDragReject={isDragReject} />}\n {isUploadEnabled && !!numberOfUploads && <AttachmentPreviewList />}\n <StackView\n alignment=\"end\"\n axis=\"horizontal\"\n position=\"relative\"\n spacing={0.5}\n >\n <Box grow={1} innerRef={wrapInputRef}>\n <ChatAutoComplete\n placeholder=\"Send a message\"\n onFocus={() => setFocused(true)}\n onBlur={(e) => e.type === \"blur\" && setFocused(false)}\n />\n </Box>\n <Box marginBottom={1.25} marginRight={1}>\n <EmojiPicker\n pickerProps={{ previewPosition: \"none\", theme: \"light\" }}\n />\n </Box>\n </StackView>\n </StackView>\n <Button\n className=\"focus-visible\"\n disabled={disabled}\n icon={{\n color: \"surface\",\n name: \"general.upArrow\",\n }}\n marginBottom=\"10px\"\n onClick={handleSubmit}\n radius=\"circle\"\n size=\"sm\"\n title={isChildOfModal ? \"Save\" : \"Send\"}\n tabIndex={0}\n {...getPrimaryButtonStyleOverrides({ disabled })}\n />\n </GridView>\n )\n}\n\nconst FileUploadUI = ({\n isUploadEnabled,\n maxFilesLeft,\n multipleUploads,\n uploadNewFiles,\n}) => {\n const id = React.useMemo(() => nanoid(), [])\n const inputEl = document.getElementById(id)\n\n const handleKeyDown = (event) => {\n if (inputEl && (event.key === \"Enter\" || event.key === \" \")) {\n event.preventDefault()\n inputEl.click()\n }\n }\n return (\n <Box marginBottom={1.5}>\n <label\n htmlFor={id}\n tabIndex={0}\n onKeyDown={handleKeyDown}\n className=\"str-chat__file-label\"\n >\n <Icon\n color={colors.lightNeutral45}\n css={{\n \"&:active\": { fill: colors.lightNeutral12 },\n \"&:hover\": { fill: colors.lightNeutral24 },\n }}\n cursor=\"pointer\"\n name=\"general.paperclip\"\n size=\"20px\"\n />\n </label>\n <UploadButton\n aria-label=\"File upload\"\n className=\"str-chat__file-input\"\n disabled={!isUploadEnabled || maxFilesLeft === 0}\n id={id}\n multiple={multipleUploads}\n onFileChange={uploadNewFiles}\n />\n </Box>\n )\n}\n\nconst DropzoneUI = ({ isDragReject }) => (\n <StackView\n alignment=\"center\"\n backgroundColor=\"surfaceTertiary\"\n borderColor={isDragReject ? \"error-dark\" : \"success-darker\"}\n borderRadius={8}\n borderStyle=\"dashed\"\n borderWidth={1}\n bottom={0}\n distribution=\"center\"\n left={0}\n position=\"absolute\"\n right={0}\n top={0}\n zIndex={10}\n >\n <Text\n color={isDragReject ? \"error-dark\" : \"success-darker\"}\n size={4}\n weight={600}\n >\n {isDragReject\n ? \"Some of the files will not be accepted\"\n : \"Drop your files here\"}\n </Text>\n </StackView>\n)\n\nconst useIsChildOfModal = () => {\n const [isChildOfModal, setIsChildOfModal] = useState(false)\n const ref = useRef(null)\n\n useEffect(() => {\n const modal = document.querySelector(\".str-chat__modal\")\n setIsChildOfModal(modal?.contains(ref.current))\n }, [])\n\n return { isChildOfModal, ref }\n}\n\nconst useAutoFocus = () => {\n const wrapInputRef = React.useRef(null)\n\n useEffect(() => {\n if (wrapInputRef.current) {\n const input = wrapInputRef.current?.querySelector(\"textarea\")\n input?.focus()\n input?.setSelectionRange(input?.value?.length, input?.value?.length)\n }\n }, [])\n\n return wrapInputRef\n}\n","import { Box, StackView } from \"@planningcenter/tapestry-react\"\nimport React, { Fragment, useEffect, useState } from \"react\"\nimport { logChatPromiseExecution } from \"stream-chat\"\nimport {\n Channel,\n MessageInput as StreamMessageInput,\n MessageList,\n useChatContext,\n Window,\n} from \"stream-chat-react\"\n\nimport { INDICATOR_STYLES } from \"../../../../components/scroll_container\"\nimport { useChat } from \"../../hooks\"\nimport { noop } from \"../../utils\"\nimport { CustomEmptyStateIndicator } from \"./custom_empty_state_indicator\"\nimport { CustomHeader, InjectableCustomHeader } from \"./custom_header\"\nimport { CustomMessageStatus } from \"./custom_message_status\"\nimport { customReactionOptions } from \"./custom_reaction_options\"\nimport { emojiSearchIndex } from \"./emoji_data\"\nimport { MessageInput } from \"./message_input\"\n\nexport const ChannelView = () => {\n const { client, channel } = useChatContext()\n const {\n closeDrawer,\n isChannelViewActive,\n switchToChannelDetailsView,\n switchToChannelListView,\n } = useChat()\n const title = channel?.data?.name || \"Channel name\"\n\n const [, updateCount] = useState(0)\n\n const [overflowTop, setOverflowTop] = useState(false)\n const [overflowBottom, setOverflowBottom] = useState(false)\n\n // force a render when the channel gets updated\n useEffect(() => {\n if (!channel) return noop\n\n const handleUpdate = (event) => {\n const isUpdated = channel && channel.cid === event.cid\n isUpdated && updateCount((c) => c + 1)\n }\n\n client.on(\"channel.updated\", handleUpdate)\n return () => client.off(\"channel.updated\", handleUpdate)\n }, [channel?.cid])\n\n const hasMessages = !!channel?.data?.last_message_at\n\n const sharedProps = {\n channel,\n closeDrawer,\n switchToChannelDetailsView,\n switchToChannelListView,\n title,\n }\n\n const scrollProps = {\n overflowBottom,\n overflowTop,\n setOverflowBottom,\n setOverflowTop,\n }\n\n return (\n <StackView grow={1} shrink={1}>\n <Channel\n Input={MessageInput}\n EditMessageInput={MessageInput}\n emojiSearchIndex={emojiSearchIndex}\n EmptyStateIndicator={CustomEmptyStateIndicator}\n reactionOptions={customReactionOptions}\n doMarkReadRequest={(channel) =>\n isChannelViewActive &&\n logChatPromiseExecution(channel.markRead(), \"mark read\")\n }\n MessageStatus={CustomMessageStatus}\n >\n <Window>\n {hasMessages ? (\n <WithMessages {...sharedProps} {...scrollProps} />\n ) : (\n <NoMessages {...sharedProps} />\n )}\n <Box position=\"relative\">\n {overflowBottom && (\n <Box\n {...INDICATOR_STYLES.bottom}\n bottom=\"unset\"\n height={1}\n left={-1}\n pointerEvents=\"none\"\n position=\"absolute\"\n right={-1}\n role=\"presentation\"\n top={-1}\n zIndex={10}\n />\n )}\n <StreamMessageInput disableMentions={true} grow={true} />\n </Box>\n </Window>\n </Channel>\n </StackView>\n )\n}\n\nconst WithMessages = ({\n channel,\n closeDrawer,\n overflowTop,\n setOverflowBottom,\n setOverflowTop,\n switchToChannelDetailsView,\n switchToChannelListView,\n title,\n}) => (\n <MessageList\n head={\n <Fragment key=\"custom-head\">\n <InjectableCustomHeader\n channel={channel}\n closeDrawer={closeDrawer}\n setOverflowBottom={setOverflowBottom}\n setOverflowTop={setOverflowTop}\n switchToChannelDetailsView={switchToChannelDetailsView}\n switchToChannelListView={switchToChannelListView}\n title={title}\n />\n {overflowTop && (\n <Box\n {...INDICATOR_STYLES.top}\n height={1}\n left={-1}\n pointerEvents=\"none\"\n position=\"absolute\"\n right={-1}\n role=\"presentation\"\n top=\"unset\"\n zIndex={10}\n />\n )}\n </Fragment>\n }\n messageActions={[\"edit\", \"delete\", \"react\"]}\n />\n)\n\nconst NoMessages = ({\n channel,\n closeDrawer,\n switchToChannelDetailsView,\n switchToChannelListView,\n title,\n}) => (\n <>\n <CustomHeader\n channel={channel}\n closeDrawer={closeDrawer}\n switchToChannelDetailsView={switchToChannelDetailsView}\n switchToChannelListView={switchToChannelListView}\n title={title}\n />\n <MessageList messageActions={[\"edit\", \"delete\", \"react\"]} />\n </>\n)\n","import { useSyncExternalStore } from \"use-sync-external-store/shim\"\nimport { createStore } from \"../../store\"\nimport { shallowCompare } from \"../../utils\"\n\ntype PCOMeta = {\n resource?: string\n}\n\nfunction parseValue(element: HTMLMetaElement) {\n const datatype = element.getAttribute(\"datatype\")\n switch (datatype) {\n case \"boolean\":\n return element.content === \"true\" || element.content === \"1\"\n default:\n return element.content\n }\n}\n\nfunction getAllPcoMeta(): PCOMeta {\n const elements = document.head.querySelectorAll<HTMLMetaElement>(\n `meta[property^=\"pco:\"]`\n )\n const meta = {}\n\n elements.forEach((e) => {\n const property = e.getAttribute(\"property\")\n\n meta[property.substring(\"pco:\".length)] = parseValue(e)\n })\n\n return meta\n}\n\nconst store = createStore(getAllPcoMeta())\n\nconst observer = new MutationObserver(() => {\n const prevState = store.getState()\n const nextState = getAllPcoMeta()\n\n if (!shallowCompare(prevState, nextState)) store.setState(nextState)\n})\n\nlet hasTriggeredObserve = false\n\nfunction observe() {\n if (hasTriggeredObserve) return\n\n hasTriggeredObserve = true\n observer.observe(document.head, {\n attributes: true,\n childList: true,\n subtree: true,\n })\n}\n\nexport function usePcoMeta() {\n observe()\n\n return useSyncExternalStore(store.subscribe, () =>\n store.getState()\n ) as PCOMeta\n}\n","import React, { useState } from \"react\"\nimport {\n Box,\n Button,\n Icon,\n Spinner,\n StackView,\n Text,\n} from \"@planningcenter/tapestry-react\"\n\nimport { useChat } from \"../../hooks\"\nimport { Subheading } from \"../ui/subheading\"\nimport { Group, useMyGroups } from \"./hooks/use_my_groups\"\n\nexport const GroupsShortcuts = ({ isActive }: { isActive: boolean }) => {\n const { isLoading, isError, groups } = useMyGroups(isActive)\n const { setFilterValues, switchToNewGroupsChatView } = useChat()\n const [showAll, setShowAll] = useState(false)\n\n const filteredGroups = groups.filter((group) => group.canCreateConversation)\n const MAX_VISIBLE_GROUPS = 5\n const visibleGroups = filteredGroups.slice(\n 0,\n showAll ? undefined : MAX_VISIBLE_GROUPS\n )\n const hasGroupsWithoutChatPermission = groups.length !== filteredGroups.length\n const displayGroupsWithoutChatPermissionDisclaimer =\n hasGroupsWithoutChatPermission &&\n (showAll || filteredGroups.length <= MAX_VISIBLE_GROUPS)\n\n return (\n <StackView>\n <StackView\n axis=\"horizontal\"\n padding={2}\n paddingBottom={1}\n alignment=\"center\"\n spacing={1}\n >\n <Subheading>My groups</Subheading>\n {isLoading && <Spinner size=\"xs\" />}\n </StackView>\n {groups.length === 0 && !isError ? (\n <BlankState />\n ) : (\n <StackView spacing={1.5}>\n <StackView>\n {visibleGroups.map(\n ({\n id,\n name,\n headerImage: { thumbnail },\n membershipsCount,\n }: Group) => (\n <Button\n alignment=\"start\"\n aria-label={`Select ${name}`}\n axis=\"vertical\"\n borderBottomColor=\"separatorTertiary\"\n borderBottomStyle=\"solid\"\n borderBottomWidth={1}\n hover={{ backgroundColor: \"surfaceSecondary\" }}\n key={id}\n paddingHorizontal={2}\n paddingVertical={1}\n spacing={0.25}\n textAlign=\"left\"\n theme={false}\n onClick={() => {\n setFilterValues({\n appName: \"Groups\",\n values: {\n group: { id, name },\n },\n })\n switchToNewGroupsChatView()\n }}\n >\n <StackView axis=\"horizontal\" spacing={1}>\n <img\n alt=\"\"\n src={thumbnail}\n style={{\n borderRadius: \"4px\",\n height: 40,\n width: 75,\n objectFit: \"cover\",\n }}\n />\n <StackView distribution=\"start\" maxWidth=\"250px\">\n <Text lineHeight=\"1.3\" weight={500} truncate>\n {name}\n </Text>\n <Text lineHeight=\"1.3\" weight={300}>\n {membershipsCount}{\" \"}\n {membershipsCount === 1 ? \"member\" : \"members\"}\n </Text>\n </StackView>\n </StackView>\n </Button>\n )\n )}\n </StackView>\n\n {displayGroupsWithoutChatPermissionDisclaimer && (\n <HasGroupsWithoutChatPermission />\n )}\n\n {filteredGroups.length > MAX_VISIBLE_GROUPS && (\n <ToggleGroups\n showAll={showAll}\n onClick={() => setShowAll(!showAll)}\n />\n )}\n\n {isError && <Error />}\n </StackView>\n )}\n </StackView>\n )\n}\n\nconst Error = () => (\n <Box\n backgroundColor=\"error-lighter\"\n marginHorizontal={2}\n padding={2}\n radius={3}\n >\n <StackView axis=\"horizontal\" spacing={1}>\n <Icon name=\"general.exclamationTriangle\" color=\"error\" marginTop={0.5} />\n <Text size={4}>\n There was an issue loading your groups, please refresh and try again.\n </Text>\n </StackView>\n </Box>\n)\n\nconst BlankState = () => (\n <StackView\n axis=\"vertical\"\n alignment=\"center\"\n distribution=\"center\"\n height={20}\n padding={2}\n >\n <Text align=\"center\" color=\"foregroundSecondary\">\n Join a group with chat enabled and permissions to start a new\n conversation.\n </Text>\n </StackView>\n)\n\nconst HasGroupsWithoutChatPermission = () => (\n <StackView alignment=\"center\" distribution=\"center\" paddingHorizontal={2}>\n <Text lineHeight=\"1.3\" size={5}>\n *You have additional groups without chat enabled or permissions to start a\n new conversation.\n </Text>\n </StackView>\n)\n\nconst ToggleGroups = ({\n onClick,\n showAll,\n}: {\n onClick: () => void\n showAll: boolean\n}) => (\n <Button\n variant=\"outline\"\n size=\"sm\"\n onClick={onClick}\n marginLeft=\"auto\"\n marginRight=\"auto\"\n marginBottom={2}\n >\n <Icon\n name={showAll ? \"general.upCaret\" : \"general.downCaret\"}\n size=\"lg\"\n paddingRight={1}\n />\n <Text>View {showAll ? \"fewer\" : \"more\"} groups</Text>\n </Button>\n)\n","import pcURL from \"@planningcenter/url\"\nimport { useCallback, useEffect, useState } from \"react\"\n\nimport apiRequest, { defaultFetch } from \"../../../../../../api_request\"\nimport { usePcoMeta } from \"../../../../../hooks/use_pco_meta\"\n\nexport type Group = {\n id: number\n name: string\n headerImage: { thumbnail: string }\n membershipsCount: number\n canCreateConversation: boolean\n}\n\ninterface Result {\n id: number\n attributes: {\n name: string\n header_image: { thumbnail: string }\n memberships_count: number\n can_create_conversation: boolean\n }\n}\n\nexport function useMyGroups(shouldRunInitialLoad: boolean): {\n groups: Group[]\n hasMore: boolean\n isError: boolean\n isLoading: boolean\n loadMore: () => void\n} {\n const pcoMeta = usePcoMeta()\n const url = `${pcURL(pcoMeta[\"rails-env\"])(\"api\")}/groups/v2/me/groups`\n const params = new URLSearchParams({\n \"fields[Group]\":\n \"name,header_image,memberships_count,can_create_conversation\",\n per_page: \"100\",\n })\n const [nextLink, setNextLink] = useState<string | null>(`${url}?${params}`)\n const [groups, setGroups] = useState<Group[]>([])\n const [isLoading, setIsLoading] = useState(false)\n const [isError, setIsError] = useState<boolean>(false)\n const hasMore = Boolean(nextLink)\n\n const loadGroups = useCallback(() => {\n if (!hasMore) return\n\n setIsLoading(true)\n apiRequest(defaultFetch, nextLink)\n .then(({ json }) => {\n const results = json.data.map(\n (result: Result): Group => ({\n id: result.id,\n name: result.attributes.name,\n headerImage: result.attributes.header_image,\n membershipsCount: result.attributes.memberships_count,\n canCreateConversation: result.attributes.can_create_conversation,\n })\n )\n setGroups((prev) => [...prev, ...results])\n setNextLink(json.links.next || null)\n })\n .catch(() => setIsError(true))\n .finally(() => setIsLoading(false))\n }, [nextLink])\n\n useEffect(() => {\n if (!shouldRunInitialLoad) return\n\n loadGroups()\n }, [shouldRunInitialLoad])\n\n return { groups, hasMore, isError, isLoading, loadMore: loadGroups }\n}\n","import {\n Box,\n Icon,\n Spinner,\n StackView,\n Text,\n} from \"@planningcenter/tapestry-react\"\nimport React from \"react\"\n\nimport { ScrollContainer } from \"../../../../components\"\nimport { ChildNotice } from \"../child_notice\"\nimport { Person } from \"../person_list_item\"\nimport { Subheading } from \"../ui/subheading\"\nimport { useNewGroupChatPeople } from \"./hooks/use_new_group_chat_people\"\n\nexport function People({ groupId }: { groupId: number }) {\n const { isLoading, isError, people, hasMore, totalCount } =\n useNewGroupChatPeople(groupId)\n\n const somePeople = people.length > 0\n const childPeople = people.filter((p) => p.child)\n const someChildPeople = childPeople.length > 0\n\n let title: string\n switch (totalCount) {\n case null:\n case 0:\n title = \"Members\"\n break\n case 1:\n title = \"1 member\"\n break\n default:\n title = `${totalCount} members`\n }\n\n return (\n <>\n <StackView alignment=\"center\" axis=\"horizontal\" spacing={1}>\n <Subheading>{title}</Subheading>\n {isLoading && <Spinner size=\"sm\" />}\n </StackView>\n {isError && <Error />}\n {somePeople && (\n <>\n {someChildPeople && <ChildNotice childPeople={childPeople} />}\n <ScrollContainer>\n <StackView paddingBottom={2} spacing={1.5}>\n {people.map((person) => (\n <Person key={person.id} person={person} />\n ))}\n {hasMore && (\n <Text color=\"foregroundSecondary\">\n and {totalCount - people.length} more...\n </Text>\n )}\n </StackView>\n </ScrollContainer>\n </>\n )}\n </>\n )\n}\n\nconst Error = () => (\n <Box backgroundColor=\"error-lighter\" marginBottom={2} padding={2} radius={3}>\n <StackView axis=\"horizontal\" spacing={1}>\n <Icon name=\"general.exclamationTriangle\" color=\"error\" marginTop={0.5} />\n <Text size={4}>\n There was an issue loading group members, please refresh and try again.\n </Text>\n </StackView>\n </Box>\n)\n","import pcURL from \"@planningcenter/url\"\nimport { useEffect, useState } from \"react\"\n\nimport apiRequest, { defaultFetch } from \"../../../../../../api_request\"\nimport { usePcoMeta } from \"../../../../../hooks/use_pco_meta\"\nimport { ListItemPerson } from \"../../person_list_item\"\n\ninterface Result {\n attributes: { role: string }\n relationships: { person: { data: { id: number } } }\n}\n\ninterface Include {\n id: number\n type: string\n}\n\nexport function useNewGroupChatPeople(groupId: number): {\n hasMore: boolean | null\n isError: boolean\n isLoading: boolean\n people: ListItemPerson[]\n totalCount: number | null\n} {\n const pcoMeta = usePcoMeta()\n const url = `${pcURL(pcoMeta[\"rails-env\"])(\n \"api\"\n )}/groups/v2/me/groups/${groupId}/memberships`\n const params = new URLSearchParams({\n \"fields[Membership]\": \"person,role\",\n \"fields[Person]\": \"avatar_url,child,first_name,last_name\",\n include: \"person\",\n per_page: \"50\",\n })\n const [isLoading, setIsLoading] = useState<boolean>(false)\n const [isError, setIsError] = useState<boolean>(false)\n const [people, setPeople] = useState<ListItemPerson[]>([])\n const [totalCount, setTotalCount] = useState<number | null>(null)\n const hasMore = totalCount === null ? null : totalCount > people.length\n\n const loadMembers = () => {\n setIsLoading(true)\n apiRequest(defaultFetch, `${url}?${params}`)\n .then(({ json }) => {\n const results = json.data.map((result: Result): ListItemPerson => {\n const person = json.included.find(\n (i: Include) =>\n i.type === \"Person\" &&\n i.id === result.relationships.person.data.id\n )\n\n const badges = []\n if (result.attributes.role === \"leader\") {\n badges.push({ title: \"Leader\" })\n }\n if (person.id === pcoMeta[\"current-person-id\"]) {\n badges.push({ title: \"Conversation owner\" })\n }\n\n return {\n avatar: person.attributes.avatar_url,\n badges: badges,\n child: person.attributes.child,\n id: person.id,\n name: `${person.attributes.first_name} ${person.attributes.last_name}`,\n source: [],\n }\n })\n setPeople((prev) => [...prev, ...results])\n setTotalCount(json.meta.total_count)\n })\n .catch(() => setIsError(true))\n .finally(() => setIsLoading(false))\n }\n\n useEffect(() => {\n loadMembers()\n }, [])\n\n return { hasMore, isError, isLoading, people, totalCount }\n}\n","import {\n Button,\n Spinner,\n StackView,\n Text,\n} from \"@planningcenter/tapestry-react\"\nimport React, { useEffect, useState } from \"react\"\n\nimport { Subheading } from \"../ui/subheading\"\nimport { useServicesChatShortcuts } from \"./hooks/use_services_chat_shortcuts\"\n\nconst DEFAULT_SHORTCUT_COUNT = 4\n\nexport const ServicesChatShortcuts = ({\n isActive,\n setFilterValues,\n switchToNewServicesChatView,\n}) => {\n const [showAll, setSetshowAll] = useState(false)\n const { loading, serviceTypeTeams } = useServicesChatShortcuts(isActive)\n\n useEffect(() => {\n if (!isActive) setSetshowAll(false)\n }, [])\n\n const hasMore = serviceTypeTeams.length > DEFAULT_SHORTCUT_COUNT\n\n return (\n <StackView>\n <StackView\n alignment=\"center\"\n axis=\"horizontal\"\n distribution=\"space-between\"\n paddingBottom={1}\n paddingHorizontal={2}\n spacing={1}\n >\n <StackView alignment=\"center\" axis=\"horizontal\" spacing={1}>\n <Subheading>Teams I lead</Subheading>\n {loading && <Spinner size=\"xs\" />}\n </StackView>\n <Button\n icon=\"general.search\"\n marginLeft=\"auto\"\n onClick={switchToNewServicesChatView}\n size=\"sm\"\n title=\"Search all teams\"\n tooltip=\"Search all teams\"\n variant=\"outline\"\n />\n </StackView>\n {serviceTypeTeams.length === 0 ? (\n <NoTeams onClick={switchToNewServicesChatView} />\n ) : (\n <StackView spacing={1.5} paddingBottom={1}>\n <StackView>\n {serviceTypeTeams\n .slice(0, showAll ? undefined : DEFAULT_SHORTCUT_COUNT)\n .map(({ id, name, teams }) => (\n <Button\n alignment=\"start\"\n aria-label={`Select ${name} teams I lead`}\n axis=\"vertical\"\n borderBottomColor=\"separatorTertiary\"\n borderBottomStyle=\"solid\"\n borderBottomWidth={1}\n hover={{ backgroundColor: \"surfaceSecondary\" }}\n key={id}\n paddingHorizontal={2}\n paddingVertical={1}\n spacing={0.25}\n textAlign=\"left\"\n theme={false}\n onClick={() => {\n setFilterValues({\n appName: \"Services\",\n values: {\n plan_id: null,\n teams: teams.map(\n (team: { id: number; name: string }) => ({\n service_type_id: id,\n team_id: team.id,\n })\n ),\n },\n })\n switchToNewServicesChatView()\n }}\n >\n <Text weight={500}>{name}</Text>\n <Text color=\"foregroundSecondary\">\n {teams.map((team) => team.name).join(\", \")}\n </Text>\n </Button>\n ))}\n </StackView>\n {hasMore && (\n <StackView alignment=\"center\">\n <Button\n fontWeight={400}\n iconLeft={{\n name: showAll ? \"general.upCaret\" : \"general.downCaret\",\n }}\n onClick={() => setSetshowAll(!showAll)}\n size=\"xs\"\n title={showAll ? \"Less teams\" : \"Show all teams I lead\"}\n variant=\"outline\"\n />\n </StackView>\n )}\n </StackView>\n )}\n </StackView>\n )\n}\n\nconst NoTeams = ({ onClick }) => (\n <StackView\n alignment=\"center\"\n axis=\"vertical\"\n distribution=\"center\"\n height={20}\n padding={2}\n spacing={1}\n >\n <Text color=\"foregroundSecondary\">You don't lead any teams.</Text>\n <Button fontWeight={400} onClick={onClick} size=\"sm\" variant=\"outline\">\n Browse teams\n </Button>\n </StackView>\n)\n","import { useEffect, useMemo, useState } from \"react\"\n\nimport { useChatApi } from \"../../../hooks\"\n\ntype ServiceTypeTeamData = {\n service_type: {\n id: number\n name: string\n }\n team: {\n id: number\n name: string\n }\n}[]\n\ntype ServiceTypeTeams = {\n id: number\n name: string\n teams: {\n id: number\n name: string\n }[]\n}\n\nexport const useServicesChatShortcuts = (\n isActive: boolean\n): {\n loading: boolean\n serviceTypeTeams: ServiceTypeTeams[]\n} => {\n const [data, setData] = useState<ServiceTypeTeamData>([])\n const [loading, setLoading] = useState(false)\n\n const api = useChatApi()\n\n useEffect(() => {\n if (!isActive) return\n\n setLoading(true)\n api.services\n .get(\"chat\", { fields: { Chat: \"teams_i_lead\" } })\n .then(({ teams_i_lead }) => {\n const data: ServiceTypeTeamData = teams_i_lead.map(\n ({ value, service_type_name, team_name }) => ({\n service_type: {\n id: value.service_type_id,\n name: service_type_name,\n },\n team: {\n id: value.team_id,\n name: team_name,\n },\n })\n )\n setData(data)\n })\n .finally(() => setLoading(false))\n }, [isActive])\n\n const serviceTypeTeams = useMemo(() => {\n return data.reduce(\n (acc: ServiceTypeTeams[], { service_type, team }: any) => {\n let serviceTypeEntry = acc.find((entry) => entry.id === service_type.id)\n\n if (!serviceTypeEntry) {\n serviceTypeEntry = {\n id: service_type.id,\n name: service_type.name,\n teams: [],\n }\n acc.push(serviceTypeEntry)\n }\n\n serviceTypeEntry.teams.push(team)\n return acc\n },\n []\n )\n }, [data])\n\n return { loading, serviceTypeTeams }\n}\n","import { Button, StackView } from \"@planningcenter/tapestry-react\"\nimport React from \"react\"\n\nimport { default as themeColors } from \"../../../../colors\"\nimport { DrawerHeading, ScrollContainer } from \"../../../components\"\nimport { useChat } from \"../hooks\"\nimport { GroupsShortcuts } from \"./groups\"\nimport { ServicesChatShortcuts } from \"./services/service_chat_shortcuts\"\n\nexport const NewChatShortcutsView = () => {\n const {\n isNewChatShortcutsViewActive,\n setFilterValues,\n switchToNewServicesChatView,\n switchToChannelListView,\n } = useChat()\n\n return (\n <>\n <StackView\n alignment=\"center\"\n axis=\"horizontal\"\n spacing={1}\n padding={2}\n paddingTop={1}\n >\n <Button\n icon={{\n color: themeColors.lightNeutral12,\n name: \"general.leftChevron\",\n }}\n marginTop={0.25}\n onClick={switchToChannelListView}\n size=\"md\"\n title=\"Back to to conversation list\"\n tooltip=\"Back to conversations list\"\n variant=\"naked\"\n />\n <DrawerHeading>New conversation</DrawerHeading>\n </StackView>\n <ScrollContainer>\n <ServicesChatShortcuts\n isActive={isNewChatShortcutsViewActive}\n setFilterValues={setFilterValues}\n switchToNewServicesChatView={switchToNewServicesChatView}\n />\n <GroupsShortcuts isActive={isNewChatShortcutsViewActive} />\n </ScrollContainer>\n </>\n )\n}\n","import {\n Button,\n Divider,\n StackView,\n Text,\n} from \"@planningcenter/tapestry-react\"\nimport React from \"react\"\n\nimport { getPrimaryButtonStyleOverrides } from \"../../utils\"\n\nexport const NewChatViewFooter = ({\n text,\n buttonDisabled,\n showSpinner,\n onButtonClick,\n}: {\n buttonDisabled: boolean\n onButtonClick: () => void\n showSpinner: boolean\n text: string\n}) => (\n <>\n <Divider />\n <StackView grow={0} marginHorizontal=\"auto\" padding={2} spacing={2}>\n <Text align=\"center\" size={5} color=\"foregroundSecondary\">\n {text}\n </Text>\n\n <Button\n aria-label=\"Start conversation\"\n disabled={buttonDisabled}\n onClick={onButtonClick}\n {...getPrimaryButtonStyleOverrides({\n disabled: buttonDisabled,\n spinner: showSpinner,\n })}\n >\n Start conversation\n </Button>\n </StackView>\n </>\n)\n","import { Button, StackView } from \"@planningcenter/tapestry-react\"\nimport React from \"react\"\n\nimport { default as themeColors } from \"../../../../../colors\"\nimport { DrawerHeading } from \"../../../../components\"\nimport { useChat } from \"../../hooks\"\n\nexport const NewChatViewHeader = () => {\n const { switchToNewChatShortcutsView } = useChat()\n\n return (\n <StackView\n alignment=\"center\"\n axis=\"horizontal\"\n spacing={1}\n padding={2}\n paddingTop={1}\n >\n <Button\n icon={{\n color: themeColors.lightNeutral12,\n name: \"general.leftChevron\",\n }}\n marginTop={0.25}\n onClick={switchToNewChatShortcutsView}\n size=\"md\"\n title=\"Back to to new conversation shortcuts\"\n tooltip=\"Back to to new conversation shortcuts\"\n variant=\"naked\"\n />\n <DrawerHeading>New conversation</DrawerHeading>\n </StackView>\n )\n}\n","import {\n Box,\n Divider,\n Icon,\n Input,\n StackView,\n Text,\n} from \"@planningcenter/tapestry-react\"\nimport React, { useState } from \"react\"\n\nimport { ColorAppIcon } from \"../../../../color_app_icon\"\nimport { useChat, useChatApi } from \"../hooks\"\nimport { People } from \"./groups\"\nimport { NewChatViewFooter, NewChatViewHeader } from \"./new_chat_view\"\n\nexport const NewGroupsChatView = () => {\n const [title, setTitle] = useState(\"\")\n const [isCreating, setIsCreating] = useState(false)\n const [isError, setIsError] = useState(false)\n const api = useChatApi()\n const { filterValues, findAndSwitchToChannel } = useChat()\n const group = filterValues?.Groups?.group\n\n if (!group) return null\n\n const createConversation = () => {\n setIsCreating(true)\n return api.groups\n .post(`me/groups/${group.id}/chat_conversation_payload`, { title })\n .then(({ value: payload }: { value: string }) =>\n api.chat.post(\"me/conversations\", { payload })\n )\n .catch(() => setIsError(true))\n .finally(() => setIsCreating(false))\n }\n\n return (\n <>\n <NewChatViewHeader />\n <StackView grow={1}>\n <StackView spacing={2} padding={2} paddingTop={0}>\n <StackView axis=\"horizontal\" alignment=\"center\" spacing={1}>\n <Text weight={600}>To:</Text>\n <ColorAppIcon appName=\"Groups\" />\n <Text wrap={false} truncate>\n {group.name}\n </Text>\n </StackView>\n <StackView spacing={1}>\n <Input.InputLabel controls=\"title\">Title</Input.InputLabel>\n <Input\n id=\"title\"\n placeholder=\"Topic of conversation... (required)\"\n required\n onChange={(e) => setTitle(e.target.value)}\n />\n </StackView>\n </StackView>\n <Divider />\n <StackView grow={1} padding={2} paddingBottom={0} spacing={1}>\n <People groupId={group.id} />\n </StackView>\n </StackView>\n {isError && <Error />}\n <NewChatViewFooter\n text=\"Conversation will be automatically updated if any people are added or removed from the group.\"\n showSpinner={isCreating}\n buttonDisabled={title.trim().length === 0}\n onButtonClick={() =>\n createConversation()\n .then(findAndSwitchToChannel)\n .then(() => setTitle(\"\"))\n }\n />\n </>\n )\n}\n\nconst Error = () => (\n <Box\n backgroundColor=\"error-lighter\"\n marginHorizontal={2}\n marginBottom={2}\n padding={2}\n radius={3}\n >\n <StackView axis=\"horizontal\" spacing={1}>\n <Icon name=\"general.exclamationTriangle\" color=\"error\" marginTop={0.5} />\n <Text size={4}>\n There was an issue starting the conversation, please try again.\n </Text>\n </StackView>\n </Box>\n)\n","export const NEW_SERVICES_CHAT_FOOTER_TEXT =\n \"Conversation will be automatically updated if any people are added or removed from a team.\"\n","import { Spinner, StackView, Text } from \"@planningcenter/tapestry-react\"\nimport React from \"react\"\n\nimport { ScrollContainer } from \"../../../../components\"\nimport { ChildNotice } from \"../child_notice\"\nimport { NewChatViewFooter } from \"../new_chat_view\"\nimport { Person } from \"../person_list_item\"\nimport { Subheading } from \"../ui/subheading\"\nimport { NEW_SERVICES_CHAT_FOOTER_TEXT } from \"./constants\"\nimport { useChatPeople } from \"./hooks\"\n\nexport const People = ({ filter }) => {\n const { people, createChat, isCreating, isFetching } = useChatPeople(filter)\n\n const somePeople = people.length > 0\n const peopleCount = people.length\n const childPeople = people.filter((p) => p.child)\n const someChildPeople = childPeople.length > 0\n\n let title: string\n switch (peopleCount) {\n case 0:\n title = \"People selected\"\n break\n case 1:\n title = \"1 person selected\"\n break\n default:\n title = `${peopleCount} people selected`\n }\n\n return (\n <StackView grow={1}>\n <StackView grow={1} padding={2} paddingBottom={0} spacing={1}>\n <StackView alignment=\"center\" axis=\"horizontal\" spacing={1}>\n <Subheading>{title}</Subheading>\n {isFetching && <Spinner size=\"sm\" />}\n </StackView>\n {somePeople ? (\n <>\n {someChildPeople && <ChildNotice childPeople={childPeople} />}\n <ScrollContainer>\n <StackView paddingBottom={2} spacing={1.5}>\n {people.map((person) => (\n <Person key={person.id} person={person} />\n ))}\n </StackView>\n </ScrollContainer>\n </>\n ) : (\n <StackView alignment=\"center\" grow={1} maxHeight={18}>\n <Text color=\"foregroundSecondary\">No Results</Text>\n </StackView>\n )}\n </StackView>\n <NewChatViewFooter\n text={NEW_SERVICES_CHAT_FOOTER_TEXT}\n showSpinner={isCreating}\n buttonDisabled={!somePeople}\n onButtonClick={createChat}\n />\n </StackView>\n )\n}\n","import { useEffect, useMemo, useRef,useState } from \"react\"\n\nimport { useChat, useChatApi } from \"../../../hooks\"\n\ninterface Source {\n id: number,\n type: string\n}\n\nexport interface Person {\n avatar: string | null\n badges: Record<string, string>[]\n child: boolean\n id: number\n name: string\n source: Source[]\n}\n\ninterface FilterParams {\n plan_id?: number,\n team_id: Array<number>\n}\n\ntype PeopleCache = {\n [key: string]: Person[]\n}\n\ninterface ChatPeople {\n createChat: () => void,\n isCreating: boolean,\n isFetching: boolean,\n people: Person[]\n}\n\nexport const useChatPeople = (filter): ChatPeople => {\n const [people, setPeople] = useState([])\n const [isCreating, setCreating] = useState(false)\n const [isFetching, setFetching] = useState(false)\n const cache = useRef<PeopleCache>({})\n\n const { findAndSwitchToChannel } = useChat()\n const api = useChatApi()\n\n const filterParams = useMemo(() => {\n const params: FilterParams = {\n team_id: filter.teams.map(({ team_id }) => team_id).sort(),\n }\n\n if (filter.plan_id) {\n params.plan_id = filter.plan_id\n }\n\n return params\n }, [filter])\n\n useEffect(() => {\n const getPeople = async (params) => {\n const key = JSON.stringify(params)\n const people =\n cache.current[key] ||\n (await fetchPeople(params).then((data) => data.people))\n\n cache.current[key] = people\n\n setPeople(people)\n }\n\n const fetchPeople = async (params) => {\n setFetching(true)\n const result = await api.services.get(\"chat\", {\n fields: { Chat: \"people\" },\n ...params,\n })\n setFetching(false)\n\n return result\n }\n\n getPeople(filterParams)\n }, [filterParams])\n\n return {\n createChat: async () => {\n setCreating(true)\n const { payload } = await api.services.get(\"chat\", {\n fields: { Chat: \"payload\" },\n ...filterParams,\n })\n api.chat.post(\"me/conversations\", { payload }).then(findAndSwitchToChannel)\n },\n isCreating,\n isFetching,\n people,\n }\n}\n","import {\n Icon,\n Select,\n Spinner,\n StackView,\n Text,\n ToggleSwitch,\n} from \"@planningcenter/tapestry-react\"\nimport React, { useEffect, useMemo, useState } from \"react\"\n\nimport { useChatApi } from \"../../hooks\"\nimport { ServicesFilterValues } from \"../../hooks/use_chat_filter\"\nimport { Subheading } from \"../ui/subheading\"\nimport { ServicesFilterProps } from \"./services_chat_options\"\n\nconst toSelectOptions = ({ value, name }) => ({ label: name, value })\n\nexport const Plans = ({ onChange, isActive, values }: ServicesFilterProps) => {\n const [options, setOptions] = useState({})\n const [isEnabled, setEnabled] = useState(false)\n const [fetchingCount, setFetchingCount] = useState(0)\n const api = useChatApi()\n\n const isFetchable = isActive && isEnabled\n const isInvalid = !isActive && values.teams.length > 0\n\n useEffect(() => {\n if (isActive) return\n\n setEnabled(false)\n }, [isActive])\n\n useEffect(() => {\n if (!isFetchable) return\n\n values.teams.forEach(({ team_id }) => {\n if (options[team_id]) return\n\n setFetchingCount((c) => c + 1)\n\n api.services\n .get(\"chat\", { fields: { Chat: \"plans\" }, team_id })\n .then(({ plans }) => {\n setOptions((prevOptions) => ({ ...prevOptions, [team_id]: plans }))\n setFetchingCount((c) => c - 1)\n })\n })\n }, [values.teams, isFetchable])\n\n const availableOptions = useMemo(() => {\n const uniqOptions = values.teams.reduce(\n (acc, { team_id }) =>\n options[team_id]\n ? {\n ...acc,\n ...options[team_id].reduce(\n (obj, option) => ({\n ...obj,\n [option.value]: option,\n }),\n {}\n ),\n }\n : acc,\n {}\n )\n\n return Object.values(uniqOptions).map(toSelectOptions)\n }, [values.teams, options])\n\n return (\n <StackView spacing={1}>\n <StackView axis=\"horizontal\" alignItems=\"center\" spacing={1}>\n <StackView\n alignItems=\"center\"\n axis=\"horizontal\"\n marginRight=\"auto\"\n spacing={1}\n >\n <Subheading>Filter by plan</Subheading>\n {fetchingCount > 0 && <Spinner size=\"xs\" />}\n </StackView>\n <ToggleSwitch\n ariaLabel=\"Filter by plan\"\n disabled={!isActive}\n isChecked={isEnabled}\n onClick={() => {\n setEnabled((e) => !e)\n onChange({\n appName: \"Services\",\n values: (prev: ServicesFilterValues) => ({\n ...prev,\n plan_id: null,\n }),\n })\n }}\n />\n </StackView>\n {isEnabled ? (\n <Select\n id=\"filter-by-plan-select\"\n value={values.plan_id}\n defaultValue={null}\n emptyValue={\n availableOptions.length ? \"Choose a plan\" : \"No plans available\"\n }\n disabled={availableOptions.length < 1}\n options={availableOptions}\n onChange={({ value }) =>\n onChange({\n appName: \"Services\",\n values: (prev: ServicesFilterValues) => ({\n ...prev,\n plan_id: value,\n }),\n })\n }\n />\n ) : isInvalid ? (\n <StackView\n axis=\"horizontal\"\n alignItems=\"center\"\n spacing={2}\n padding={2}\n >\n <Icon\n color=\"foregroundSecondary\"\n name=\"general.exclamationTriangle\"\n size=\"lg\"\n />\n <Text size={5} color=\"foregroundSecondary\">\n Plan filtering is not possible using teams from multiple service\n types. Try choosing teams above with only one service type.\n </Text>\n </StackView>\n ) : null}\n </StackView>\n )\n}\n","export default function _extends() {\n _extends = Object.assign ? Object.assign.bind() : function (target) {\n for (var i = 1; i < arguments.length; i++) {\n var source = arguments[i];\n for (var key in source) {\n if (Object.prototype.hasOwnProperty.call(source, key)) {\n target[key] = source[key];\n }\n }\n }\n return target;\n };\n return _extends.apply(this, arguments);\n}","var characterMap = {\r\n\t\"À\": \"A\",\r\n\t\"Á\": \"A\",\r\n\t\"Â\": \"A\",\r\n\t\"Ã\": \"A\",\r\n\t\"Ä\": \"A\",\r\n\t\"Å\": \"A\",\r\n\t\"Ấ\": \"A\",\r\n\t\"Ắ\": \"A\",\r\n\t\"Ẳ\": \"A\",\r\n\t\"Ẵ\": \"A\",\r\n\t\"Ặ\": \"A\",\r\n\t\"Æ\": \"AE\",\r\n\t\"Ầ\": \"A\",\r\n\t\"Ằ\": \"A\",\r\n\t\"Ȃ\": \"A\",\r\n\t\"Ç\": \"C\",\r\n\t\"Ḉ\": \"C\",\r\n\t\"È\": \"E\",\r\n\t\"É\": \"E\",\r\n\t\"Ê\": \"E\",\r\n\t\"Ë\": \"E\",\r\n\t\"Ế\": \"E\",\r\n\t\"Ḗ\": \"E\",\r\n\t\"Ề\": \"E\",\r\n\t\"Ḕ\": \"E\",\r\n\t\"Ḝ\": \"E\",\r\n\t\"Ȇ\": \"E\",\r\n\t\"Ì\": \"I\",\r\n\t\"Í\": \"I\",\r\n\t\"Î\": \"I\",\r\n\t\"Ï\": \"I\",\r\n\t\"Ḯ\": \"I\",\r\n\t\"Ȋ\": \"I\",\r\n\t\"Ð\": \"D\",\r\n\t\"Ñ\": \"N\",\r\n\t\"Ò\": \"O\",\r\n\t\"Ó\": \"O\",\r\n\t\"Ô\": \"O\",\r\n\t\"Õ\": \"O\",\r\n\t\"Ö\": \"O\",\r\n\t\"Ø\": \"O\",\r\n\t\"Ố\": \"O\",\r\n\t\"Ṍ\": \"O\",\r\n\t\"Ṓ\": \"O\",\r\n\t\"Ȏ\": \"O\",\r\n\t\"Ù\": \"U\",\r\n\t\"Ú\": \"U\",\r\n\t\"Û\": \"U\",\r\n\t\"Ü\": \"U\",\r\n\t\"Ý\": \"Y\",\r\n\t\"à\": \"a\",\r\n\t\"á\": \"a\",\r\n\t\"â\": \"a\",\r\n\t\"ã\": \"a\",\r\n\t\"ä\": \"a\",\r\n\t\"å\": \"a\",\r\n\t\"ấ\": \"a\",\r\n\t\"ắ\": \"a\",\r\n\t\"ẳ\": \"a\",\r\n\t\"ẵ\": \"a\",\r\n\t\"ặ\": \"a\",\r\n\t\"æ\": \"ae\",\r\n\t\"ầ\": \"a\",\r\n\t\"ằ\": \"a\",\r\n\t\"ȃ\": \"a\",\r\n\t\"ç\": \"c\",\r\n\t\"ḉ\": \"c\",\r\n\t\"è\": \"e\",\r\n\t\"é\": \"e\",\r\n\t\"ê\": \"e\",\r\n\t\"ë\": \"e\",\r\n\t\"ế\": \"e\",\r\n\t\"ḗ\": \"e\",\r\n\t\"ề\": \"e\",\r\n\t\"ḕ\": \"e\",\r\n\t\"ḝ\": \"e\",\r\n\t\"ȇ\": \"e\",\r\n\t\"ì\": \"i\",\r\n\t\"í\": \"i\",\r\n\t\"î\": \"i\",\r\n\t\"ï\": \"i\",\r\n\t\"ḯ\": \"i\",\r\n\t\"ȋ\": \"i\",\r\n\t\"ð\": \"d\",\r\n\t\"ñ\": \"n\",\r\n\t\"ò\": \"o\",\r\n\t\"ó\": \"o\",\r\n\t\"ô\": \"o\",\r\n\t\"õ\": \"o\",\r\n\t\"ö\": \"o\",\r\n\t\"ø\": \"o\",\r\n\t\"ố\": \"o\",\r\n\t\"ṍ\": \"o\",\r\n\t\"ṓ\": \"o\",\r\n\t\"ȏ\": \"o\",\r\n\t\"ù\": \"u\",\r\n\t\"ú\": \"u\",\r\n\t\"û\": \"u\",\r\n\t\"ü\": \"u\",\r\n\t\"ý\": \"y\",\r\n\t\"ÿ\": \"y\",\r\n\t\"Ā\": \"A\",\r\n\t\"ā\": \"a\",\r\n\t\"Ă\": \"A\",\r\n\t\"ă\": \"a\",\r\n\t\"Ą\": \"A\",\r\n\t\"ą\": \"a\",\r\n\t\"Ć\": \"C\",\r\n\t\"ć\": \"c\",\r\n\t\"Ĉ\": \"C\",\r\n\t\"ĉ\": \"c\",\r\n\t\"Ċ\": \"C\",\r\n\t\"ċ\": \"c\",\r\n\t\"Č\": \"C\",\r\n\t\"č\": \"c\",\r\n\t\"C̆\": \"C\",\r\n\t\"c̆\": \"c\",\r\n\t\"Ď\": \"D\",\r\n\t\"ď\": \"d\",\r\n\t\"Đ\": \"D\",\r\n\t\"đ\": \"d\",\r\n\t\"Ē\": \"E\",\r\n\t\"ē\": \"e\",\r\n\t\"Ĕ\": \"E\",\r\n\t\"ĕ\": \"e\",\r\n\t\"Ė\": \"E\",\r\n\t\"ė\": \"e\",\r\n\t\"Ę\": \"E\",\r\n\t\"ę\": \"e\",\r\n\t\"Ě\": \"E\",\r\n\t\"ě\": \"e\",\r\n\t\"Ĝ\": \"G\",\r\n\t\"Ǵ\": \"G\",\r\n\t\"ĝ\": \"g\",\r\n\t\"ǵ\": \"g\",\r\n\t\"Ğ\": \"G\",\r\n\t\"ğ\": \"g\",\r\n\t\"Ġ\": \"G\",\r\n\t\"ġ\": \"g\",\r\n\t\"Ģ\": \"G\",\r\n\t\"ģ\": \"g\",\r\n\t\"Ĥ\": \"H\",\r\n\t\"ĥ\": \"h\",\r\n\t\"Ħ\": \"H\",\r\n\t\"ħ\": \"h\",\r\n\t\"Ḫ\": \"H\",\r\n\t\"ḫ\": \"h\",\r\n\t\"Ĩ\": \"I\",\r\n\t\"ĩ\": \"i\",\r\n\t\"Ī\": \"I\",\r\n\t\"ī\": \"i\",\r\n\t\"Ĭ\": \"I\",\r\n\t\"ĭ\": \"i\",\r\n\t\"Į\": \"I\",\r\n\t\"į\": \"i\",\r\n\t\"İ\": \"I\",\r\n\t\"ı\": \"i\",\r\n\t\"IJ\": \"IJ\",\r\n\t\"ij\": \"ij\",\r\n\t\"Ĵ\": \"J\",\r\n\t\"ĵ\": \"j\",\r\n\t\"Ķ\": \"K\",\r\n\t\"ķ\": \"k\",\r\n\t\"Ḱ\": \"K\",\r\n\t\"ḱ\": \"k\",\r\n\t\"K̆\": \"K\",\r\n\t\"k̆\": \"k\",\r\n\t\"Ĺ\": \"L\",\r\n\t\"ĺ\": \"l\",\r\n\t\"Ļ\": \"L\",\r\n\t\"ļ\": \"l\",\r\n\t\"Ľ\": \"L\",\r\n\t\"ľ\": \"l\",\r\n\t\"Ŀ\": \"L\",\r\n\t\"ŀ\": \"l\",\r\n\t\"Ł\": \"l\",\r\n\t\"ł\": \"l\",\r\n\t\"Ḿ\": \"M\",\r\n\t\"ḿ\": \"m\",\r\n\t\"M̆\": \"M\",\r\n\t\"m̆\": \"m\",\r\n\t\"Ń\": \"N\",\r\n\t\"ń\": \"n\",\r\n\t\"Ņ\": \"N\",\r\n\t\"ņ\": \"n\",\r\n\t\"Ň\": \"N\",\r\n\t\"ň\": \"n\",\r\n\t\"ʼn\": \"n\",\r\n\t\"N̆\": \"N\",\r\n\t\"n̆\": \"n\",\r\n\t\"Ō\": \"O\",\r\n\t\"ō\": \"o\",\r\n\t\"Ŏ\": \"O\",\r\n\t\"ŏ\": \"o\",\r\n\t\"Ő\": \"O\",\r\n\t\"ő\": \"o\",\r\n\t\"Œ\": \"OE\",\r\n\t\"œ\": \"oe\",\r\n\t\"P̆\": \"P\",\r\n\t\"p̆\": \"p\",\r\n\t\"Ŕ\": \"R\",\r\n\t\"ŕ\": \"r\",\r\n\t\"Ŗ\": \"R\",\r\n\t\"ŗ\": \"r\",\r\n\t\"Ř\": \"R\",\r\n\t\"ř\": \"r\",\r\n\t\"R̆\": \"R\",\r\n\t\"r̆\": \"r\",\r\n\t\"Ȓ\": \"R\",\r\n\t\"ȓ\": \"r\",\r\n\t\"Ś\": \"S\",\r\n\t\"ś\": \"s\",\r\n\t\"Ŝ\": \"S\",\r\n\t\"ŝ\": \"s\",\r\n\t\"Ş\": \"S\",\r\n\t\"Ș\": \"S\",\r\n\t\"ș\": \"s\",\r\n\t\"ş\": \"s\",\r\n\t\"Š\": \"S\",\r\n\t\"š\": \"s\",\r\n\t\"Ţ\": \"T\",\r\n\t\"ţ\": \"t\",\r\n\t\"ț\": \"t\",\r\n\t\"Ț\": \"T\",\r\n\t\"Ť\": \"T\",\r\n\t\"ť\": \"t\",\r\n\t\"Ŧ\": \"T\",\r\n\t\"ŧ\": \"t\",\r\n\t\"T̆\": \"T\",\r\n\t\"t̆\": \"t\",\r\n\t\"Ũ\": \"U\",\r\n\t\"ũ\": \"u\",\r\n\t\"Ū\": \"U\",\r\n\t\"ū\": \"u\",\r\n\t\"Ŭ\": \"U\",\r\n\t\"ŭ\": \"u\",\r\n\t\"Ů\": \"U\",\r\n\t\"ů\": \"u\",\r\n\t\"Ű\": \"U\",\r\n\t\"ű\": \"u\",\r\n\t\"Ų\": \"U\",\r\n\t\"ų\": \"u\",\r\n\t\"Ȗ\": \"U\",\r\n\t\"ȗ\": \"u\",\r\n\t\"V̆\": \"V\",\r\n\t\"v̆\": \"v\",\r\n\t\"Ŵ\": \"W\",\r\n\t\"ŵ\": \"w\",\r\n\t\"Ẃ\": \"W\",\r\n\t\"ẃ\": \"w\",\r\n\t\"X̆\": \"X\",\r\n\t\"x̆\": \"x\",\r\n\t\"Ŷ\": \"Y\",\r\n\t\"ŷ\": \"y\",\r\n\t\"Ÿ\": \"Y\",\r\n\t\"Y̆\": \"Y\",\r\n\t\"y̆\": \"y\",\r\n\t\"Ź\": \"Z\",\r\n\t\"ź\": \"z\",\r\n\t\"Ż\": \"Z\",\r\n\t\"ż\": \"z\",\r\n\t\"Ž\": \"Z\",\r\n\t\"ž\": \"z\",\r\n\t\"ſ\": \"s\",\r\n\t\"ƒ\": \"f\",\r\n\t\"Ơ\": \"O\",\r\n\t\"ơ\": \"o\",\r\n\t\"Ư\": \"U\",\r\n\t\"ư\": \"u\",\r\n\t\"Ǎ\": \"A\",\r\n\t\"ǎ\": \"a\",\r\n\t\"Ǐ\": \"I\",\r\n\t\"ǐ\": \"i\",\r\n\t\"Ǒ\": \"O\",\r\n\t\"ǒ\": \"o\",\r\n\t\"Ǔ\": \"U\",\r\n\t\"ǔ\": \"u\",\r\n\t\"Ǖ\": \"U\",\r\n\t\"ǖ\": \"u\",\r\n\t\"Ǘ\": \"U\",\r\n\t\"ǘ\": \"u\",\r\n\t\"Ǚ\": \"U\",\r\n\t\"ǚ\": \"u\",\r\n\t\"Ǜ\": \"U\",\r\n\t\"ǜ\": \"u\",\r\n\t\"Ứ\": \"U\",\r\n\t\"ứ\": \"u\",\r\n\t\"Ṹ\": \"U\",\r\n\t\"ṹ\": \"u\",\r\n\t\"Ǻ\": \"A\",\r\n\t\"ǻ\": \"a\",\r\n\t\"Ǽ\": \"AE\",\r\n\t\"ǽ\": \"ae\",\r\n\t\"Ǿ\": \"O\",\r\n\t\"ǿ\": \"o\",\r\n\t\"Þ\": \"TH\",\r\n\t\"þ\": \"th\",\r\n\t\"Ṕ\": \"P\",\r\n\t\"ṕ\": \"p\",\r\n\t\"Ṥ\": \"S\",\r\n\t\"ṥ\": \"s\",\r\n\t\"X́\": \"X\",\r\n\t\"x́\": \"x\",\r\n\t\"Ѓ\": \"Г\",\r\n\t\"ѓ\": \"г\",\r\n\t\"Ќ\": \"К\",\r\n\t\"ќ\": \"к\",\r\n\t\"A̋\": \"A\",\r\n\t\"a̋\": \"a\",\r\n\t\"E̋\": \"E\",\r\n\t\"e̋\": \"e\",\r\n\t\"I̋\": \"I\",\r\n\t\"i̋\": \"i\",\r\n\t\"Ǹ\": \"N\",\r\n\t\"ǹ\": \"n\",\r\n\t\"Ồ\": \"O\",\r\n\t\"ồ\": \"o\",\r\n\t\"Ṑ\": \"O\",\r\n\t\"ṑ\": \"o\",\r\n\t\"Ừ\": \"U\",\r\n\t\"ừ\": \"u\",\r\n\t\"Ẁ\": \"W\",\r\n\t\"ẁ\": \"w\",\r\n\t\"Ỳ\": \"Y\",\r\n\t\"ỳ\": \"y\",\r\n\t\"Ȁ\": \"A\",\r\n\t\"ȁ\": \"a\",\r\n\t\"Ȅ\": \"E\",\r\n\t\"ȅ\": \"e\",\r\n\t\"Ȉ\": \"I\",\r\n\t\"ȉ\": \"i\",\r\n\t\"Ȍ\": \"O\",\r\n\t\"ȍ\": \"o\",\r\n\t\"Ȑ\": \"R\",\r\n\t\"ȑ\": \"r\",\r\n\t\"Ȕ\": \"U\",\r\n\t\"ȕ\": \"u\",\r\n\t\"B̌\": \"B\",\r\n\t\"b̌\": \"b\",\r\n\t\"Č̣\": \"C\",\r\n\t\"č̣\": \"c\",\r\n\t\"Ê̌\": \"E\",\r\n\t\"ê̌\": \"e\",\r\n\t\"F̌\": \"F\",\r\n\t\"f̌\": \"f\",\r\n\t\"Ǧ\": \"G\",\r\n\t\"ǧ\": \"g\",\r\n\t\"Ȟ\": \"H\",\r\n\t\"ȟ\": \"h\",\r\n\t\"J̌\": \"J\",\r\n\t\"ǰ\": \"j\",\r\n\t\"Ǩ\": \"K\",\r\n\t\"ǩ\": \"k\",\r\n\t\"M̌\": \"M\",\r\n\t\"m̌\": \"m\",\r\n\t\"P̌\": \"P\",\r\n\t\"p̌\": \"p\",\r\n\t\"Q̌\": \"Q\",\r\n\t\"q̌\": \"q\",\r\n\t\"Ř̩\": \"R\",\r\n\t\"ř̩\": \"r\",\r\n\t\"Ṧ\": \"S\",\r\n\t\"ṧ\": \"s\",\r\n\t\"V̌\": \"V\",\r\n\t\"v̌\": \"v\",\r\n\t\"W̌\": \"W\",\r\n\t\"w̌\": \"w\",\r\n\t\"X̌\": \"X\",\r\n\t\"x̌\": \"x\",\r\n\t\"Y̌\": \"Y\",\r\n\t\"y̌\": \"y\",\r\n\t\"A̧\": \"A\",\r\n\t\"a̧\": \"a\",\r\n\t\"B̧\": \"B\",\r\n\t\"b̧\": \"b\",\r\n\t\"Ḑ\": \"D\",\r\n\t\"ḑ\": \"d\",\r\n\t\"Ȩ\": \"E\",\r\n\t\"ȩ\": \"e\",\r\n\t\"Ɛ̧\": \"E\",\r\n\t\"ɛ̧\": \"e\",\r\n\t\"Ḩ\": \"H\",\r\n\t\"ḩ\": \"h\",\r\n\t\"I̧\": \"I\",\r\n\t\"i̧\": \"i\",\r\n\t\"Ɨ̧\": \"I\",\r\n\t\"ɨ̧\": \"i\",\r\n\t\"M̧\": \"M\",\r\n\t\"m̧\": \"m\",\r\n\t\"O̧\": \"O\",\r\n\t\"o̧\": \"o\",\r\n\t\"Q̧\": \"Q\",\r\n\t\"q̧\": \"q\",\r\n\t\"U̧\": \"U\",\r\n\t\"u̧\": \"u\",\r\n\t\"X̧\": \"X\",\r\n\t\"x̧\": \"x\",\r\n\t\"Z̧\": \"Z\",\r\n\t\"z̧\": \"z\",\r\n};\r\n\r\nvar chars = Object.keys(characterMap).join('|');\r\nvar allAccents = new RegExp(chars, 'g');\r\nvar firstAccent = new RegExp(chars, '');\r\n\r\nvar removeAccents = function(string) {\t\r\n\treturn string.replace(allAccents, function(match) {\r\n\t\treturn characterMap[match];\r\n\t});\r\n};\r\n\r\nvar hasAccents = function(string) {\r\n\treturn !!string.match(firstAccent);\r\n};\r\n\r\nmodule.exports = removeAccents;\r\nmodule.exports.has = hasAccents;\r\nmodule.exports.remove = removeAccents;\r\n","import _extends from '@babel/runtime/helpers/esm/extends';\nimport removeAccents from 'remove-accents';\n\nvar rankings = {\n CASE_SENSITIVE_EQUAL: 7,\n EQUAL: 6,\n STARTS_WITH: 5,\n WORD_STARTS_WITH: 4,\n CONTAINS: 3,\n ACRONYM: 2,\n MATCHES: 1,\n NO_MATCH: 0\n};\nmatchSorter.rankings = rankings;\n\nvar defaultBaseSortFn = function defaultBaseSortFn(a, b) {\n return String(a.rankedValue).localeCompare(String(b.rankedValue));\n};\n/**\n * Takes an array of items and a value and returns a new array with the items that match the given value\n * @param {Array} items - the items to sort\n * @param {String} value - the value to use for ranking\n * @param {Object} options - Some options to configure the sorter\n * @return {Array} - the new sorted array\n */\n\n\nfunction matchSorter(items, value, options) {\n if (options === void 0) {\n options = {};\n }\n\n var _options = options,\n keys = _options.keys,\n _options$threshold = _options.threshold,\n threshold = _options$threshold === void 0 ? rankings.MATCHES : _options$threshold,\n _options$baseSort = _options.baseSort,\n baseSort = _options$baseSort === void 0 ? defaultBaseSortFn : _options$baseSort,\n _options$sorter = _options.sorter,\n sorter = _options$sorter === void 0 ? function (matchedItems) {\n return matchedItems.sort(function (a, b) {\n return sortRankedValues(a, b, baseSort);\n });\n } : _options$sorter;\n var matchedItems = items.reduce(reduceItemsToRanked, []);\n return sorter(matchedItems).map(function (_ref) {\n var item = _ref.item;\n return item;\n });\n\n function reduceItemsToRanked(matches, item, index) {\n var rankingInfo = getHighestRanking(item, keys, value, options);\n var rank = rankingInfo.rank,\n _rankingInfo$keyThres = rankingInfo.keyThreshold,\n keyThreshold = _rankingInfo$keyThres === void 0 ? threshold : _rankingInfo$keyThres;\n\n if (rank >= keyThreshold) {\n matches.push(_extends({}, rankingInfo, {\n item: item,\n index: index\n }));\n }\n\n return matches;\n }\n}\n/**\n * Gets the highest ranking for value for the given item based on its values for the given keys\n * @param {*} item - the item to rank\n * @param {Array} keys - the keys to get values from the item for the ranking\n * @param {String} value - the value to rank against\n * @param {Object} options - options to control the ranking\n * @return {{rank: Number, keyIndex: Number, keyThreshold: Number}} - the highest ranking\n */\n\n\nfunction getHighestRanking(item, keys, value, options) {\n if (!keys) {\n // if keys is not specified, then we assume the item given is ready to be matched\n var stringItem = item;\n return {\n // ends up being duplicate of 'item' in matches but consistent\n rankedValue: stringItem,\n rank: getMatchRanking(stringItem, value, options),\n keyIndex: -1,\n keyThreshold: options.threshold\n };\n }\n\n var valuesToRank = getAllValuesToRank(item, keys);\n return valuesToRank.reduce(function (_ref2, _ref3, i) {\n var rank = _ref2.rank,\n rankedValue = _ref2.rankedValue,\n keyIndex = _ref2.keyIndex,\n keyThreshold = _ref2.keyThreshold;\n var itemValue = _ref3.itemValue,\n attributes = _ref3.attributes;\n var newRank = getMatchRanking(itemValue, value, options);\n var newRankedValue = rankedValue;\n var minRanking = attributes.minRanking,\n maxRanking = attributes.maxRanking,\n threshold = attributes.threshold;\n\n if (newRank < minRanking && newRank >= rankings.MATCHES) {\n newRank = minRanking;\n } else if (newRank > maxRanking) {\n newRank = maxRanking;\n }\n\n if (newRank > rank) {\n rank = newRank;\n keyIndex = i;\n keyThreshold = threshold;\n newRankedValue = itemValue;\n }\n\n return {\n rankedValue: newRankedValue,\n rank: rank,\n keyIndex: keyIndex,\n keyThreshold: keyThreshold\n };\n }, {\n rankedValue: item,\n rank: rankings.NO_MATCH,\n keyIndex: -1,\n keyThreshold: options.threshold\n });\n}\n/**\n * Gives a rankings score based on how well the two strings match.\n * @param {String} testString - the string to test against\n * @param {String} stringToRank - the string to rank\n * @param {Object} options - options for the match (like keepDiacritics for comparison)\n * @returns {Number} the ranking for how well stringToRank matches testString\n */\n\n\nfunction getMatchRanking(testString, stringToRank, options) {\n testString = prepareValueForComparison(testString, options);\n stringToRank = prepareValueForComparison(stringToRank, options); // too long\n\n if (stringToRank.length > testString.length) {\n return rankings.NO_MATCH;\n } // case sensitive equals\n\n\n if (testString === stringToRank) {\n return rankings.CASE_SENSITIVE_EQUAL;\n } // Lower casing before further comparison\n\n\n testString = testString.toLowerCase();\n stringToRank = stringToRank.toLowerCase(); // case insensitive equals\n\n if (testString === stringToRank) {\n return rankings.EQUAL;\n } // starts with\n\n\n if (testString.startsWith(stringToRank)) {\n return rankings.STARTS_WITH;\n } // word starts with\n\n\n if (testString.includes(\" \" + stringToRank)) {\n return rankings.WORD_STARTS_WITH;\n } // contains\n\n\n if (testString.includes(stringToRank)) {\n return rankings.CONTAINS;\n } else if (stringToRank.length === 1) {\n // If the only character in the given stringToRank\n // isn't even contained in the testString, then\n // it's definitely not a match.\n return rankings.NO_MATCH;\n } // acronym\n\n\n if (getAcronym(testString).includes(stringToRank)) {\n return rankings.ACRONYM;\n } // will return a number between rankings.MATCHES and\n // rankings.MATCHES + 1 depending on how close of a match it is.\n\n\n return getClosenessRanking(testString, stringToRank);\n}\n/**\n * Generates an acronym for a string.\n *\n * @param {String} string the string for which to produce the acronym\n * @returns {String} the acronym\n */\n\n\nfunction getAcronym(string) {\n var acronym = '';\n var wordsInString = string.split(' ');\n wordsInString.forEach(function (wordInString) {\n var splitByHyphenWords = wordInString.split('-');\n splitByHyphenWords.forEach(function (splitByHyphenWord) {\n acronym += splitByHyphenWord.substr(0, 1);\n });\n });\n return acronym;\n}\n/**\n * Returns a score based on how spread apart the\n * characters from the stringToRank are within the testString.\n * A number close to rankings.MATCHES represents a loose match. A number close\n * to rankings.MATCHES + 1 represents a tighter match.\n * @param {String} testString - the string to test against\n * @param {String} stringToRank - the string to rank\n * @returns {Number} the number between rankings.MATCHES and\n * rankings.MATCHES + 1 for how well stringToRank matches testString\n */\n\n\nfunction getClosenessRanking(testString, stringToRank) {\n var matchingInOrderCharCount = 0;\n var charNumber = 0;\n\n function findMatchingCharacter(matchChar, string, index) {\n for (var j = index, J = string.length; j < J; j++) {\n var stringChar = string[j];\n\n if (stringChar === matchChar) {\n matchingInOrderCharCount += 1;\n return j + 1;\n }\n }\n\n return -1;\n }\n\n function getRanking(spread) {\n var spreadPercentage = 1 / spread;\n var inOrderPercentage = matchingInOrderCharCount / stringToRank.length;\n var ranking = rankings.MATCHES + inOrderPercentage * spreadPercentage;\n return ranking;\n }\n\n var firstIndex = findMatchingCharacter(stringToRank[0], testString, 0);\n\n if (firstIndex < 0) {\n return rankings.NO_MATCH;\n }\n\n charNumber = firstIndex;\n\n for (var i = 1, I = stringToRank.length; i < I; i++) {\n var matchChar = stringToRank[i];\n charNumber = findMatchingCharacter(matchChar, testString, charNumber);\n var found = charNumber > -1;\n\n if (!found) {\n return rankings.NO_MATCH;\n }\n }\n\n var spread = charNumber - firstIndex;\n return getRanking(spread);\n}\n/**\n * Sorts items that have a rank, index, and keyIndex\n * @param {Object} a - the first item to sort\n * @param {Object} b - the second item to sort\n * @return {Number} -1 if a should come first, 1 if b should come first, 0 if equal\n */\n\n\nfunction sortRankedValues(a, b, baseSort) {\n var aFirst = -1;\n var bFirst = 1;\n var aRank = a.rank,\n aKeyIndex = a.keyIndex;\n var bRank = b.rank,\n bKeyIndex = b.keyIndex;\n var same = aRank === bRank;\n\n if (same) {\n if (aKeyIndex === bKeyIndex) {\n // use the base sort function as a tie-breaker\n return baseSort(a, b);\n } else {\n return aKeyIndex < bKeyIndex ? aFirst : bFirst;\n }\n } else {\n return aRank > bRank ? aFirst : bFirst;\n }\n}\n/**\n * Prepares value for comparison by stringifying it, removing diacritics (if specified)\n * @param {String} value - the value to clean\n * @param {Object} options - {keepDiacritics: whether to remove diacritics}\n * @return {String} the prepared value\n */\n\n\nfunction prepareValueForComparison(value, _ref4) {\n var keepDiacritics = _ref4.keepDiacritics;\n // value might not actually be a string at this point (we don't get to choose)\n // so part of preparing the value for comparison is ensure that it is a string\n value = \"\" + value; // toString\n\n if (!keepDiacritics) {\n value = removeAccents(value);\n }\n\n return value;\n}\n/**\n * Gets value for key in item at arbitrarily nested keypath\n * @param {Object} item - the item\n * @param {Object|Function} key - the potentially nested keypath or property callback\n * @return {Array} - an array containing the value(s) at the nested keypath\n */\n\n\nfunction getItemValues(item, key) {\n if (typeof key === 'object') {\n key = key.key;\n }\n\n var value;\n\n if (typeof key === 'function') {\n value = key(item);\n } else if (item == null) {\n value = null;\n } else if (Object.hasOwnProperty.call(item, key)) {\n value = item[key];\n } else if (key.includes('.')) {\n // eslint-disable-next-line @typescript-eslint/no-unsafe-call\n return getNestedValues(key, item);\n } else {\n value = null;\n } // because `value` can also be undefined\n\n\n if (value == null) {\n return [];\n }\n\n if (Array.isArray(value)) {\n return value;\n }\n\n return [String(value)];\n}\n/**\n * Given path: \"foo.bar.baz\"\n * And item: {foo: {bar: {baz: 'buzz'}}}\n * -> 'buzz'\n * @param path a dot-separated set of keys\n * @param item the item to get the value from\n */\n\n\nfunction getNestedValues(path, item) {\n var keys = path.split('.');\n var values = [item];\n\n for (var i = 0, I = keys.length; i < I; i++) {\n var nestedKey = keys[i];\n var nestedValues = [];\n\n for (var j = 0, J = values.length; j < J; j++) {\n var nestedItem = values[j];\n if (nestedItem == null) continue;\n\n if (Object.hasOwnProperty.call(nestedItem, nestedKey)) {\n var nestedValue = nestedItem[nestedKey];\n\n if (nestedValue != null) {\n nestedValues.push(nestedValue);\n }\n } else if (nestedKey === '*') {\n // ensure that values is an array\n nestedValues = nestedValues.concat(nestedItem);\n }\n }\n\n values = nestedValues;\n }\n\n if (Array.isArray(values[0])) {\n // keep allowing the implicit wildcard for an array of strings at the end of\n // the path; don't use `.flat()` because that's not available in node.js v10\n var result = [];\n return result.concat.apply(result, values);\n } // Based on our logic it should be an array of strings by now...\n // assuming the user's path terminated in strings\n\n\n return values;\n}\n/**\n * Gets all the values for the given keys in the given item and returns an array of those values\n * @param item - the item from which the values will be retrieved\n * @param keys - the keys to use to retrieve the values\n * @return objects with {itemValue, attributes}\n */\n\n\nfunction getAllValuesToRank(item, keys) {\n var allValues = [];\n\n for (var j = 0, J = keys.length; j < J; j++) {\n var key = keys[j];\n var attributes = getKeyAttributes(key);\n var itemValues = getItemValues(item, key);\n\n for (var i = 0, I = itemValues.length; i < I; i++) {\n allValues.push({\n itemValue: itemValues[i],\n attributes: attributes\n });\n }\n }\n\n return allValues;\n}\n\nvar defaultKeyAttributes = {\n maxRanking: Infinity,\n minRanking: -Infinity\n};\n/**\n * Gets all the attributes for the given key\n * @param key - the key from which the attributes will be retrieved\n * @return object containing the key's attributes\n */\n\nfunction getKeyAttributes(key) {\n if (typeof key === 'string') {\n return defaultKeyAttributes;\n }\n\n return _extends({}, defaultKeyAttributes, key);\n}\n/*\neslint\n no-continue: \"off\",\n*/\n\nexport { defaultBaseSortFn, matchSorter, rankings };\n","import { matchSorter } from \"match-sorter\"\n\nimport { TeamOptionGroups, TeamOptions } from \"../types\"\n\nconst teamOptionSort = (a, b) => {\n const [x, aService, aTeam] = a.order\n const [y, bService, bTeam] = b.order\n\n return x - y || aService.localeCompare(bService) || aTeam.localeCompare(bTeam)\n}\n\nexport const groupTeamOptions = (\n options: TeamOptions,\n searchTerm: string\n): TeamOptionGroups =>\n matchSorter(options, searchTerm, {\n keys: [\"name\"],\n threshold: matchSorter.rankings.CONTAINS,\n })\n .sort(teamOptionSort)\n .reduce((acc, option) => {\n acc[option.group] ||= []\n acc[option.group].push(option)\n return acc\n }, {})\n","import {\n Badge,\n Button,\n Combobox,\n Icon,\n Input,\n Menu,\n Spinner,\n StackView,\n Text,\n WrapView,\n} from \"@planningcenter/tapestry-react\"\nimport React, { useEffect, useRef, useState } from \"react\"\n\nimport { ServicesFilterValues } from \"../../hooks/use_chat_filter\"\nimport { SUBHEADING_STYLES } from \"../ui/subheading\"\nimport { useTeamOptions } from \"./hooks\"\nimport { ServicesFilterProps } from \"./services_chat_options\"\nimport { groupTeamOptions } from \"./utils\"\n\nconst SELECT_ALL_LIMIT = 10\n\nconst getGroupDisplayName = (groupName: string) =>\n groupName\n .split(\"_\")\n .map((word, i) => {\n if (word.toLowerCase() === \"i\") return \"I\"\n return i === 0\n ? word.charAt(0).toUpperCase() + word.slice(1).toLowerCase()\n : word.toLowerCase()\n })\n .join(\" \")\n\nexport const Teams = ({ values, onChange, isActive }: ServicesFilterProps) => {\n const [searchTerm, setSearchTerm] = useState(\"\")\n const [selected, unselected, isLoading] = useTeamOptions(values, isActive)\n\n const ref = useRef<typeof Combobox.Popover>()\n\n let index = 0\n\n const isSelectAll = { teams_i_lead: true }\n\n const unselectedGroups = groupTeamOptions(unselected, searchTerm)\n\n // temp cleanup since switch view seems to be rendering everything not just what is visible\n useEffect(() => {\n if (!isActive) {\n setSearchTerm(\"\")\n }\n }, [isActive])\n\n const groups = Object.entries(unselectedGroups)\n\n return (\n <StackView spacing={1}>\n <StackView axis=\"horizontal\" alignItems=\"center\" spacing={1}>\n <Input.InputLabel controls=\"teams\" {...SUBHEADING_STYLES}>\n Teams\n </Input.InputLabel>\n {isLoading && <Spinner size=\"xs\" />}\n </StackView>\n <StackView spacing={1}>\n {selected.length > 0 && (\n <WrapView spacing={1}>\n {selected.map((option) => (\n <Badge\n key={option.value.team_id}\n renderRight={\n <Button\n title=\"remove\"\n icon={{ name: \"general.x\", size: \"xs\" }}\n theme=\"naked\"\n onClick={() =>\n onChange({\n appName: \"Services\",\n values: (prev: ServicesFilterValues) => ({\n ...prev,\n teams: prev.teams.filter(\n ({ team_id }) => team_id !== option.value.team_id\n ),\n }),\n })\n }\n />\n }\n size=\"sm\"\n title={option.name}\n />\n ))}\n </WrapView>\n )}\n <Combobox.Popover\n ref={ref}\n id=\"teams\"\n openOnFocus={true}\n closeOnSelect={true}\n onClear={() => setSearchTerm(\"\")}\n onChange={(e) => setSearchTerm(e.target.value)}\n onSelect={({ value }) =>\n onChange({\n appName: \"Services\",\n values: (prev: ServicesFilterValues) => ({\n ...prev,\n teams: [...prev.teams, value],\n }),\n })\n }\n placeholder=\"Search teams\"\n renderLeft={<Icon name=\"general.search\" />}\n value={searchTerm}\n >\n {groups.length ? (\n groups.map(([groupName, groupOptions], idx) => {\n const groupDisplayName = getGroupDisplayName(groupName)\n const items = groupOptions.map((option) => (\n <Combobox.Item key={index} index={index++} value={option}>\n <Text truncate>{option.name}</Text>\n </Combobox.Item>\n ))\n\n const tooManyOptionsForSelectAll =\n groupOptions.length > SELECT_ALL_LIMIT\n\n return Object.keys(unselectedGroups).length > 1 ? (\n <StackView key={groupName} marginTop={idx > 0 ? 1.5 : 0}>\n <StackView axis=\"horizontal\">\n <Menu.Item>\n <Text weight={600}>{groupDisplayName}</Text>\n </Menu.Item>\n {isSelectAll[groupName] && (\n <StackView padding={1} marginLeft=\"auto\">\n <Button\n disabled={tooManyOptionsForSelectAll}\n fontWeight={400}\n onClick={(e) => {\n onChange({\n appName: \"Services\",\n values: (prev) => ({\n ...prev,\n teams: [\n ...prev.teams,\n ...groupOptions.map((option) => option.value),\n ],\n }),\n })\n ref.current && ref.current.handleBlur(e)\n }}\n size={\"xs\" as never}\n theme=\"primary\"\n title=\"Select all\"\n tooltip={{\n popoverProps: { zIndex: 10000 },\n title: tooManyOptionsForSelectAll\n ? `Disabled when options would exceed ${SELECT_ALL_LIMIT}`\n : `select all in \"${groupDisplayName}\"`,\n }}\n variant=\"naked\"\n />\n </StackView>\n )}\n </StackView>\n {items}\n </StackView>\n ) : (\n items\n )\n })\n ) : (\n <Menu.Item>\n <Text>\n No matching teams for:{\" \"}\n <Text as=\"span\" inline italic>\n {`\"${searchTerm}\"`}\n </Text>\n </Text>\n </Menu.Item>\n )}\n </Combobox.Popover>\n </StackView>\n </StackView>\n )\n}\n","import { useEffect, useState } from \"react\"\n\nimport { useChatApi } from \"../../../hooks\"\nimport { TeamOptions } from \"../types\"\n\nexport const useTeamOptions = (\n values,\n isActive\n): [TeamOptions, TeamOptions, Boolean] => {\n const [options, setOptions] = useState([])\n const [isLoading, setLoading] = useState(false)\n\n const api = useChatApi()\n\n useEffect(() => {\n if (!isActive) return\n\n setLoading(true)\n\n api.services\n .get(\"chat\", { fields: { Chat: \"teams\" } })\n .then(({ teams }) => setOptions(teams))\n .finally(() => setLoading(false))\n }, [isActive])\n\n const [selected, unselected] = options.reduce(\n (acc, option) => {\n const isSelected = values.teams.some(\n ({ team_id }) => team_id === option.value.team_id\n )\n acc[isSelected ? 0 : 1].push(option)\n\n return acc\n },\n [[], []]\n )\n\n return [selected, unselected, isLoading]\n}\n","import { StackView, Text } from \"@planningcenter/tapestry-react\"\nimport React from \"react\"\n\nimport { Subheading } from \"../ui/subheading\"\n\nexport const PeopleBlankState = () => (\n <StackView grow={1}>\n <StackView alignItems=\"center\" axis=\"horizontal\" padding={2} spacing={1}>\n <Subheading>People selected</Subheading>\n </StackView>\n <StackView alignment=\"center\" grow={1} maxHeight={18} padding={2}>\n <Text color=\"foreground\" align=\"center\" size={4}>\n Search teams above to add people to the chat.\n </Text>\n </StackView>\n </StackView>\n)\n","import { Divider, StackView } from \"@planningcenter/tapestry-react\"\nimport React from \"react\"\n\nimport {\n ServicesFilterValues,\n SetFilterValuesFn,\n} from \"../../hooks/use_chat_filter\"\nimport { noop } from \"../../utils\"\nimport { NewChatViewFooter } from \"../new_chat_view\"\nimport { People, Plans, Teams } from \".\"\nimport { NEW_SERVICES_CHAT_FOOTER_TEXT } from \"./constants\"\nimport { useServicesChatFilter } from \"./hooks\"\nimport { PeopleBlankState } from \"./people_blank_state\"\n\nexport interface ServicesFilterProps {\n isActive: boolean\n onChange: SetFilterValuesFn\n values: ServicesFilterValues\n}\n\nexport const ServicesChatOptions = ({ isActive }) => {\n const { filterValues, setFilterValues, isFiltering, isPlansActive } =\n useServicesChatFilter(isActive)\n\n return (\n <StackView grow={1}>\n <StackView spacing={2} padding={2} paddingTop={0}>\n <Teams\n values={filterValues}\n onChange={setFilterValues}\n isActive={isActive}\n />\n <Plans\n values={filterValues}\n onChange={setFilterValues}\n isActive={isPlansActive}\n />\n </StackView>\n <Divider />\n {isFiltering ? (\n <People filter={filterValues} />\n ) : (\n <>\n <PeopleBlankState />\n <NewChatViewFooter\n text={NEW_SERVICES_CHAT_FOOTER_TEXT}\n buttonDisabled={true}\n showSpinner={false}\n onButtonClick={noop}\n />\n </>\n )}\n </StackView>\n )\n}\n","import { useEffect, useMemo } from \"react\"\n\nimport { useChat } from \"../../../hooks\"\nimport {\n SERVICES_INITIAL_VALUES,\n ServicesFilterValues,\n} from \"../../../hooks/use_chat_filter\"\n\nexport const useServicesChatFilter = (isActive: boolean) => {\n const { filterValues, setFilterValues } = useChat()\n const { Services } = filterValues\n\n useEffect(() => {\n setFilterValues({\n appName: \"Services\",\n values: isActive\n ? (prev: ServicesFilterValues) => prev\n : SERVICES_INITIAL_VALUES,\n })\n }, [isActive])\n\n const isPlansActive = useMemo(() => {\n const [first, ...rest] = Services.teams\n return (\n Boolean(first) &&\n rest.every(\n ({ service_type_id }) => service_type_id === first.service_type_id\n )\n )\n }, [Services.teams])\n\n useEffect(() => {\n if (isPlansActive) return\n\n setFilterValues({\n appName: \"Services\",\n values: (prev) => ({ ...prev, plan_id: null }),\n })\n }, [isPlansActive])\n\n const isFiltering = Services.teams.length > 0\n\n return { filterValues: Services, isFiltering, isPlansActive, setFilterValues }\n}\n","import React from \"react\"\n\nimport { useChat } from \"../hooks\"\nimport { NewChatViewHeader } from \"./new_chat_view\"\nimport { ServicesChatOptions } from \"./services/services_chat_options\"\n\nexport const NewServicesChatView = () => {\n const { isNewServicesChatViewActive } = useChat()\n\n return (\n <>\n <NewChatViewHeader />\n <ServicesChatOptions isActive={isNewServicesChatViewActive} />\n </>\n )\n}\n","import { Spinner, StackView } from \"@planningcenter/tapestry-react\"\nimport React, { useEffect } from \"react\"\nimport { Chat as StreamChat, useChatContext } from \"stream-chat-react\"\n\nimport { DrawerHeader, DrawerHeading, SwitchView } from \"../../components\"\nimport { ToolbarTool, ToolbarToolProps } from \"../../types\"\nimport { ChatApiProvider } from \"./chat_api_context\"\nimport { ChatProvider } from \"./chat_context\"\nimport {\n ChannelDetailsView,\n ChannelListView,\n ChannelView,\n NewChatShortcutsView,\n NewServicesChatView,\n NewGroupsChatView,\n} from \"./components\"\nimport { BetaBadge } from \"./components/beta_badge\"\nimport { useChatFilter, useClient } from \"./hooks\"\n\nconst ChatController = ({ closeDrawer, children }) => {\n const { client, channel, setActiveChannel } = useChatContext()\n const { filterValues, setFilterValues } = useChatFilter()\n\n const [actionsOpenForChannel, setActionsOpenForChannel] =\n React.useState(false)\n const [activeIndex, setActiveIndex] = React.useState(0)\n\n const switchToChannelListView = () => setActiveIndex(0)\n const switchToNewChatShortcutsView = () => setActiveIndex(1)\n const switchToNewServicesChatView = () => setActiveIndex(2)\n const switchToNewGroupsChatView = () => setActiveIndex(3)\n const switchToChannelView = () => setActiveIndex(4)\n const switchToChannelDetailsView = () => setActiveIndex(5)\n\n const findAndSwitchToChannel = async ({ stream_channel_id: id }) => {\n const [channel] = await client.queryChannels({ id: { $eq: id } })\n\n if (!channel) return\n\n setActiveChannel(channel)\n switchToChannelView()\n }\n\n const isChannelListViewActive = activeIndex === 0\n const isNewChatShortcutsViewActive = activeIndex === 1\n const isNewServicesChatViewActive = activeIndex === 2\n const isNewGroupsChatViewActive = activeIndex === 3\n const isChannelViewActive = activeIndex === 4\n const isChannelDetailsViewActive = activeIndex === 5\n\n useEffect(() => {\n if (isChannelListViewActive && channel) {\n setActiveChannel(null)\n }\n }, [channel, isChannelListViewActive])\n\n return (\n <ChatProvider\n value={{\n actionsOpenForChannel,\n closeDrawer,\n filterValues,\n findAndSwitchToChannel,\n isChannelDetailsViewActive,\n isChannelViewActive,\n isNewChatShortcutsViewActive,\n isNewServicesChatViewActive,\n isNewGroupsChatViewActive,\n setActionsOpenForChannel,\n setFilterValues,\n switchToChannelDetailsView,\n switchToChannelListView,\n switchToChannelView,\n switchToNewChatShortcutsView,\n switchToNewServicesChatView,\n switchToNewGroupsChatView,\n }}\n >\n <SwitchView activeIndex={activeIndex}>{children}</SwitchView>\n </ChatProvider>\n )\n}\n\nconst ChatTool = ({\n appName,\n closeDrawer,\n env,\n chatStreamUser,\n userId: currentPersonId,\n}: ToolbarToolProps & { chatStreamUser: any }) => {\n const chatClient = useClient(chatStreamUser)\n\n return chatClient ? (\n <ChatComponent\n chatClient={chatClient}\n closeDrawer={closeDrawer}\n env={env}\n appName={appName}\n currentPersonId={currentPersonId}\n />\n ) : (\n <DrawerHeader closeDrawer={closeDrawer}>\n <StackView alignment=\"center\" axis=\"horizontal\" spacing={1}>\n <DrawerHeading>Chat</DrawerHeading>\n <BetaBadge />\n <Spinner\n color=\"hsl(0 0% 62%)\"\n thickness={2}\n trackColor=\"hsl(0 0% 97%)\"\n />\n </StackView>\n </DrawerHeader>\n )\n}\n\nconst ChatComponent = ({\n chatClient,\n closeDrawer,\n env,\n appName,\n currentPersonId,\n}) => {\n return (\n <StreamChat client={chatClient} theme=\"str-chat__theme-light\">\n <ChatApiProvider env={env}>\n <ChatController closeDrawer={closeDrawer}>\n <ChannelListView\n closeDrawer={closeDrawer}\n client={chatClient}\n env={env}\n appName={appName}\n currentPersonId={currentPersonId}\n />\n <NewChatShortcutsView />\n <NewServicesChatView />\n <NewGroupsChatView />\n <ChannelView />\n <ChannelDetailsView />\n </ChatController>\n </ChatApiProvider>\n </StreamChat>\n )\n}\n\nconst Chat: ToolbarTool = {\n component: ChatTool,\n icons: {\n active: \"general.textMessage\",\n static: \"general.outlinedTextMessage\",\n },\n name: \"Chat\",\n}\n\nexport { Chat }\n","import React from \"react\"\nimport { StreamChat } from \"stream-chat\"\n\nimport { StreamChatGenerics } from '../types'\nimport { noop } from \"../utils\"\n\nexport const useClient = streamUser => {\n const [chatClient, setChatClient] = React.useState<StreamChat<StreamChatGenerics> | null>(null)\n\n React.useEffect(() => {\n if (!streamUser) return noop\n\n // prevents application from setting stale client (user changed, for example)\n let didUserConnectInterrupt = false\n\n const client = new StreamChat<StreamChatGenerics>(streamUser.api_key)\n\n const connectionPromise = client\n .connectUser({ id: streamUser.id }, streamUser.tokenProvider)\n .then(() => {\n if (!didUserConnectInterrupt) setChatClient(client)\n })\n\n return () => {\n didUserConnectInterrupt = true\n setChatClient(null)\n // wait for connection to finish before initiating closing sequence\n connectionPromise\n .then(() => client.disconnectUser())\n .then(() => {\n console.log(\"connection closed\")\n })\n }\n }, [streamUser?.id, streamUser?.api_key])\n\n return chatClient\n}\n","import {\n Combobox,\n Divider,\n Icon,\n Logo,\n StackView,\n Text,\n} from \"@planningcenter/tapestry-react\"\nimport React from \"react\"\nimport { useHits, useSearchBox } from \"react-instantsearch\"\n\ntype Hit = {\n body_safe: string\n category: {\n id: string\n title: string\n }\n comments_disabled: boolean\n created_at_iso: string\n edited_at: number\n edited_at_iso: string\n id: string\n label_names: string[]\n locale: {\n locale: string\n name: string\n rtl: boolean\n }\n objectID: string\n outdated: boolean\n position: number\n promoted: boolean\n section: {\n full_path: string\n id: string\n title: string\n user_segment: string\n }\n title: string\n updated_at: number\n updated_at_iso: string\n user_segment: string\n vote_sum: number\n}\n\nconst handleSearchSelect = (hit: Hit, indexName: string) => {\n const appName = indexName.split(\"_\")[1]\n const zendeskUrl = `https://${appName}.zendesk.com/hc/${hit.locale.locale}/articles/${hit.id}`\n\n const newTab = window.open(zendeskUrl, \"_blank\")\n if (newTab) {\n newTab.focus()\n }\n}\n\nconst HeadingIcon = ({\n sectionName,\n currentAppName,\n}: {\n currentAppName: string\n sectionName: string\n}) => {\n const lowerCaseSectionName = sectionName.toLowerCase()\n if (\n lowerCaseSectionName === \"account information\" ||\n lowerCaseSectionName === \"recent updates\"\n ) {\n return (\n <Icon\n name={\n lowerCaseSectionName === \"account information\"\n ? \"general.cogPerson\"\n : \"general.outlinedGenericFile\"\n }\n color=\"foregroundSecondary\"\n />\n )\n } else if (currentAppName === \"Accounts\") {\n return <Icon name=\"general.cog\" color=\"foregroundSecondary\" />\n } else {\n return (\n <StackView width={2} height={2}>\n <Logo\n name={\n currentAppName\n .toLowerCase()\n .replace(/[\\s]/, \"-\") as keyof typeof Logo\n }\n size=\"sm\"\n theme=\"color\"\n markOnly={true}\n />\n </StackView>\n )\n }\n}\n\nconst HitResult = ({ hit, index }: { hit: Hit; index: number }) => {\n return (\n <Combobox.Item\n key={hit.objectID}\n index={index}\n value={hit}\n paddingVertical={1}\n >\n <Text color=\"neutralDarker\" size={4} whiteSpace=\"normal\">\n {hit.title}\n </Text>\n </Combobox.Item>\n )\n}\n\nexport const CustomSearchBox = ({\n currentAppName,\n indexName,\n}: {\n currentAppName: string\n indexName: string\n}) => {\n const { query, refine: setQuery } = useSearchBox()\n const { hits, results } = useHits()\n const groups = results?.hits.reduce(\n (acc: { [key: string]: any[] }, hit: any) => {\n const key = hit.category.title\n if (!acc[key]) {\n acc[key] = []\n }\n acc[key].push(hit)\n return acc\n },\n {}\n )\n let resultIndex = 0\n\n return (\n <StackView id=\"helpdesk-search\" position=\"relative\">\n <Combobox.Popover\n renderTo=\"#helpdesk-search\"\n popoverProps={{ zIndex: 2 }}\n placeholder=\"Search our documentation\"\n value={query}\n renderRight={<Icon name=\"general.search\" />}\n onChange={(e) => setQuery(e.target.value)}\n onSelect={(selectedValue) => handleSearchSelect(selectedValue, indexName)}\n placement=\"bottom-start\"\n >\n {!hits.length && (\n <>\n <StackView\n axis=\"horizontal\"\n alignment=\"center\"\n paddingHorizontal={2}\n paddingVertical={1}\n >\n <Text color=\"neutralDarker\" size={4} whiteSpace=\"normal\">\n No results match your search\n </Text>\n </StackView>\n </>\n )}\n {groups &&\n Object.keys(groups).map((key) => {\n const hits = groups[key]\n return (\n <React.Fragment key={key}>\n {resultIndex > 0 && <Divider margin={1} />}\n <StackView\n axis=\"horizontal\"\n alignment=\"center\"\n spacing={0.5}\n paddingHorizontal={2}\n paddingVertical={1}\n >\n <HeadingIcon\n currentAppName={currentAppName}\n sectionName={key}\n />\n <Text size={5} color=\"foregroundSecondary\" fontWeight={500}>\n {key}\n </Text>\n </StackView>\n {hits.map((hit) => (\n <HitResult key={hit.objectID} hit={hit} index={resultIndex++} />\n ))}\n </React.Fragment>\n )\n })}\n </Combobox.Popover>\n </StackView>\n )\n}\n","import algoliasearch from \"algoliasearch\"\nimport React from \"react\"\nimport {\n Configure,\n InstantSearch\n} from \"react-instantsearch\"\n\nimport useStore from \"../../../../hooks/use_store\"\nimport { CustomSearchBox } from \"./CustomSearchBox\"\n\nexport const DocumentationSearch = ({\n indexName,\n currentAppName,\n}: {\n currentAppName: string,\n indexName: string\n}) => {\n const {\n algoliaSearchAuth: { algoliaApplicationId, algoliaSearchOnlyApiKey },\n } = useStore<{\n algoliaSearchAuth: {\n algoliaApplicationId: string\n algoliaSearchOnlyApiKey: string\n }\n }>()\n\n const searchClient = algoliasearch(\n algoliaApplicationId,\n algoliaSearchOnlyApiKey\n )\n\n return (\n <InstantSearch indexName={indexName} searchClient={searchClient}>\n <Configure hitsPerPage={5} />\n <CustomSearchBox currentAppName={currentAppName} indexName={indexName} />\n </InstantSearch>\n )\n}\n","import {\n components,\n UiExtensionFirstPartyComponent,\n} from \"@planningcenter/add-ons\"\nimport pcoUrl from \"@planningcenter/url\"\nimport React from \"react\"\nimport { InlineWidget as CalendlyWidget } from \"react-calendly\"\n\nimport {\n DrawerHeader,\n DrawerHeading,\n ScrollContainer,\n SwitchView,\n} from \"../../components\"\nimport { ToolbarTool, ToolbarToolProps } from \"../../types\"\nimport { DocumentationSearch } from \"./components/DocumentationSearch\"\n\nconst { LoadingIndicator, StackView } = components\n\nfunction HelpdeskComponent({\n appName,\n closeDrawer,\n env,\n helpdeskConfig,\n}: ToolbarToolProps) {\n const source = `${pcoUrl(env)(\n \"helpdesk\" as any\n )}/addons/toolbar.helpdesk.help`\n\n return (\n <UiExtensionFirstPartyComponent\n grow={1}\n display=\"flex\"\n extensionId=\"11\"\n url={source}\n loadingFallback={\n <StackView flex={1} axis=\"vertical\">\n <DrawerHeader closeDrawer={closeDrawer}>\n <StackView axis=\"horizontal\" spacing={1}>\n <DrawerHeading>Help and support</DrawerHeading>\n <LoadingIndicator />\n </StackView>\n </DrawerHeader>\n </StackView>\n }\n additionalComponents={{\n // @ts-expect-error TODO: Relax type specification in add-ons-js to not require children\n CalendlyWidget,\n // @ts-expect-error TODO: Relax type specification in add-ons-js to not require children\n DocumentationSearch,\n DrawerHeader,\n DrawerHeading,\n ScrollContainer,\n SwitchView,\n }}\n args={{\n appName,\n closeDrawer,\n currentPageParams: location.search,\n helpdeskConfig,\n }}\n />\n )\n}\n\nconst Helpdesk: ToolbarTool = {\n component: HelpdeskComponent,\n icons: {\n active: \"general.questionCircle\",\n static: \"general.outlinedQuestionCircle\",\n },\n name: \"Helpdesk\",\n}\n\nexport { Helpdesk }\n","import React from \"react\"\n\nimport colors from \"../colors\"\n\nconst Eyebrow = ({\n dark,\n style,\n ...props\n}: {\n children?: React.ReactNode\n dark: boolean\n style?: object\n}) => (\n <div\n style={{\n color: dark ? colors.lightNeutral62 : colors.lightNeutral24,\n fontSize: \"12px\",\n fontWeight: 400,\n textTransform: \"uppercase\",\n ...style,\n }}\n {...props}\n />\n)\n\nexport default Eyebrow\n","import datetimeFmt from \"@planningcenter/datetime-fmt\"\nimport { Dropdown } from \"@planningcenter/tapestry-react\"\nimport React from \"react\"\n\nimport colors from \"../colors\"\nimport useHover from \"../hooks/use_hover\"\nimport useStore from \"../hooks/use_store\"\nimport { Notification } from \"../interfaces\"\nimport { fontFamily } from \"../styles\"\nimport Eyebrow from \"./eyebrow\"\nimport HoverableListItem from \"./hoverable_list_item\"\n\nconst MarkReadDot = ({\n isRead = false,\n onClick,\n}: {\n isRead?: boolean\n onClick: any\n}) => {\n const hoverRef = React.useRef(null)\n const isHover = useHover(hoverRef)\n\n return (\n <div\n ref={hoverRef}\n style={{\n alignItems: \"center\",\n display: \"flex\",\n height: \"12px\",\n justifyContent: \"center\",\n width: \"12px\",\n }}\n {...{ onClick }}\n >\n <svg height=\"12\" viewBox=\"0 0 12 12\" width=\"12\">\n <title>unread dot</title>\n <circle\n cx=\"6\"\n cy=\"6\"\n fill={isHover ? colors.interaction66 : colors.lightNeutral81}\n r=\"6\"\n style={{ transition: \"all 0.2s\" }}\n />\n <circle cx=\"6\" cy=\"6\" fill={colors.lightNeutral100} r=\"5\" />\n {!isRead && <circle cx=\"6\" cy=\"6\" r=\"4\" fill={colors.interaction66} />}\n </svg>\n </div>\n )\n}\n\nconst NotificationItem = ({\n mobile = false,\n isLast,\n onCreateTask,\n onMarkAsRead = async () => Promise.resolve({}),\n onToggleRead,\n showBottomBorder,\n notification,\n}: {\n isLast?: boolean\n mobile?: boolean\n notification: Notification\n onCreateTask: (notification: Notification) => Promise<any>\n onMarkAsRead?: (notification: Notification) => Promise<any>\n onToggleRead: any\n showBottomBorder?: boolean\n}) => {\n const { appName, createdAt, isRead, link, title } = notification\n const { organizationTimeZone, notificationsContextMenu } = useStore()\n\n const [isActive, setIsActive] = React.useState(false)\n\n const appColors = {\n Calendar: \"9 61% 50%\",\n \"Check-Ins\": \"283 22% 48%\",\n Giving: \"43 88% 64%\",\n Groups: \"17 96% 62%\",\n People: \"220 74% 57%\",\n Publishing: \"220 12% 31%\",\n Registrations: \"175 36% 43%\",\n Services: \"88 45% 41%\",\n }\n\n const handleDotClick = (e) => {\n e.preventDefault()\n e.stopPropagation()\n onToggleRead()\n }\n\n const handleClick = async (_e) => {\n setIsActive(true)\n await onMarkAsRead(notification)\n window.location.href = link\n }\n\n const datetimeFmtOptions = { style: \"relative\" } as {\n style?: string\n timeZone?: string\n }\n if (organizationTimeZone) {\n datetimeFmtOptions.timeZone = organizationTimeZone\n }\n\n return (\n <HoverableListItem\n active={isActive}\n data-turbolinks={false}\n href={link}\n onClick={handleClick}\n style={{\n alignItems: \"flex-start\",\n borderBottom:\n showBottomBorder || !isLast\n ? `1px solid ${\n mobile ? colors.lightNeutral24 : colors.lightNeutral93\n }`\n : \"none\",\n cursor: \"pointer\",\n display: \"flex\",\n overflow: \"hidden\",\n padding: \"12px 16px\",\n textDecoration: \"none\",\n verticalAlign: \"middle\",\n ...fontFamily,\n }}\n >\n <div\n style={{\n display: \"flex\",\n flexDirection: \"column\",\n flexGrow: 1,\n justifyContent: \"center\",\n }}\n >\n <div\n style={{\n alignItems: \"center\",\n borderLeft: `4px solid hsl(${appColors[appName] || \"0 0% 81%\"} / ${\n isRead ? \"40%\" : \"100%\"\n }`,\n display: \"flex\",\n marginBottom: \"10px\",\n paddingLeft: \"8px\",\n }}\n >\n <div style={{ flexGrow: 1, marginRight: \"16px\" }}>\n <Eyebrow\n dark={mobile}\n style={{ marginBottom: \"6px\", userSelect: \"none\" }}\n >\n {appName}\n </Eyebrow>\n <h1\n style={{\n color: mobile ? colors.lightNeutral88 : colors.darkNeutral12,\n fontSize: \"16px\",\n fontWeight: 500,\n lineHeight: \"1.3em\",\n margin: 0,\n userSelect: \"none\",\n }}\n >\n {title}\n </h1>\n </div>\n {!mobile && !notificationsContextMenu && (\n <MarkReadDot onClick={handleDotClick} {...{ isRead }} />\n )}\n\n {!mobile && notificationsContextMenu && (\n <Dropdown\n icon={{ name: \"general.threeDots\" }}\n title=\"More options\"\n variant=\"naked\"\n iconRight={null}\n placement=\"bottom-end\"\n onClick={(e) => {\n e.stopPropagation()\n }}\n >\n <Dropdown.Item\n onClick={(e: MouseEvent) => {\n e.preventDefault()\n e.stopPropagation()\n onToggleRead()\n }}\n >\n Mark {isRead ? \"unread\" : \"as read\"}\n </Dropdown.Item>\n {notification.taskUrl ? (\n <Dropdown.Item\n onClick={(e: MouseEvent) => {\n e.preventDefault()\n e.stopPropagation()\n window.location.href = notification.taskUrl\n }}\n >\n Open task\n </Dropdown.Item>\n ) : (\n <Dropdown.Item\n onClick={(e: MouseEvent) => {\n e.preventDefault()\n e.stopPropagation()\n onCreateTask(notification)\n }}\n >\n Create task\n </Dropdown.Item>\n )}\n </Dropdown>\n )}\n </div>\n <div\n style={{\n color: mobile ? colors.lightNeutral62 : colors.lightNeutral24,\n fontSize: \"12px\",\n paddingLeft: \"12px\",\n userSelect: \"none\",\n }}\n >\n {datetimeFmt.datetime(createdAt, datetimeFmtOptions)}\n </div>\n </div>\n </HoverableListItem>\n )\n}\n\nexport default NotificationItem\n","import { RefObject, useEffect, useState } from \"react\"\n\nfunction useHover<T extends HTMLElement = HTMLElement>(\n elementRef: RefObject<T>\n): boolean {\n const [value, setValue] = useState<boolean>(false)\n\n const handleMouseEnter = () => setValue(true)\n const handleMouseLeave = () => setValue(false)\n\n useEffect(() => {\n const node = elementRef?.current\n if (!node) return undefined\n\n node.addEventListener(\"mouseenter\", handleMouseEnter)\n node.addEventListener(\"mouseleave\", handleMouseLeave)\n\n return () => {\n node.removeEventListener(\"mouseenter\", handleMouseEnter)\n node.removeEventListener(\"mouseleave\", handleMouseLeave)\n }\n }, [elementRef])\n\n return value\n}\n\nexport default useHover\n","import { Heading, StackView, Text } from \"@planningcenter/tapestry-react\"\nimport React from \"react\"\n\nimport { BlankStateIcon } from \"../symbols\"\n\nconst NotificationsMenuBlankState = ({\n context,\n dark = false,\n description,\n title = \"No notifications\",\n}: {\n context?: string\n dark?: boolean\n description: string\n style?: object\n title?: string\n}) => (\n <StackView alignment=\"center\" distribution=\"center\" padding={4}>\n <BlankStateIcon id={context} {...{ dark }} />\n <Heading\n color={dark ? \"#fafafa\" : \"#3d3d3d\"}\n fontWeight={500}\n marginTop={1}\n size={3}\n >\n {title}\n </Heading>\n <Text align=\"center\" color={dark ? \"#fafafa\" : \"#3d3d3d\"} size={4}>\n {description}\n </Text>\n </StackView>\n)\n\nexport default NotificationsMenuBlankState\n","import { JoltSubscription } from \"@planningcenter/jolt-client/dist/types/JoltSubscription\"\nimport pcoUrl, * as PCO_URL from \"@planningcenter/url\"\nimport React, { useCallback } from \"react\"\n\nimport apiRequest, { defaultFetch, railsCsrfFetch } from \"../api_request\"\nimport {\n JoltMessage,\n JoltMessageNotificationDataPayload,\n Notification,\n} from \"../interfaces\"\nimport { useJoltEffect } from \"./jolt\"\n\nconst notificationsOrganizer = (\n notifications: Notification[]\n): { read: Notification[]; unread: Notification[] } => {\n const { read, unread } = [...notifications]\n .sort((a: Notification, b: Notification) => {\n return a.createdAt < b.createdAt ? 1 : -1\n })\n .reduce(\n (acc, notification) => {\n return notification.isRead\n ? { ...acc, read: [...acc.read, notification] }\n : { ...acc, unread: [...acc.unread, notification] }\n },\n { read: [], unread: [] }\n )\n return { read, unread }\n}\n\nconst buildNotificationFromApiResponse = (resp, json): Notification => {\n const findInIncluded = ({ type, id }, included) => {\n return included.find((i) => {\n return i.type === type && i.id === id\n })\n }\n\n const appName: string = findInIncluded(\n resp.relationships.app.data,\n json.included\n )?.attributes?.name\n\n // There is technically the possibility that there are multiple web payloads\n // returned from the API endpoint. However, at this point I'm not sure in\n // which situations that would be the case. For v1 of this feature, we'll\n // assume that there is only one web payload we need to worry about and it is\n // the first in the array that is returned.\n const notificationData = JSON.parse(\n findInIncluded(\n {\n id: resp?.relationships?.web_payloads?.data[0]?.id,\n type: \"Payload\",\n },\n json.included\n )?.attributes?.content\n )\n\n return {\n appName,\n createdAt: new Date(resp.attributes.created_at),\n id: resp.id,\n isRead: resp.attributes.read_at?.length > 0,\n link: notificationData?.link,\n title: notificationData?.title,\n }\n}\n\nexport type NotificationsHookProps = {\n enabled?: boolean\n env: PCO_URL.Environment\n joltChannel: JoltSubscription\n}\n\nconst useNotifications = ({\n enabled,\n env,\n joltChannel,\n}: NotificationsHookProps): {\n handleCreateTask: (notification: Notification) => Promise<any>\n handleMarkAllAsRead: () => any\n handleMarkAsRead: (notification: Notification) => Promise<any>\n handleToggleRead: (notification: Notification) => Promise<any>\n hasError: boolean\n isLoading: boolean\n read: Notification[]\n unread: Notification[]\n} => {\n const [notifications, setNotifications]: [\n Notification[],\n React.Dispatch<React.SetStateAction<Notification[]>>\n ] = React.useState([])\n\n const [isLoading, setIsLoading] = React.useState(true)\n const [hasError, setHasError] = React.useState(false)\n const { read, unread } = notificationsOrganizer(notifications)\n\n const fetchNotifications = () => {\n try {\n setHasError(false)\n apiRequest(\n defaultFetch,\n `${window.location.origin}/~api/notifications/v2/me/notifications?include=app,web_payloads&per_page=100&order=read_at,-created_at`\n ).then(({ json }) => {\n const notifications = json.data.map((resp) =>\n buildNotificationFromApiResponse(resp, json)\n )\n\n setIsLoading(false)\n setNotifications(notifications)\n })\n } catch (exception) {\n setHasError(true)\n console.error(\n \"topbar encountered error when fetching all notifications\",\n exception\n )\n }\n }\n\n React.useEffect(() => {\n if (enabled) {\n fetchNotifications()\n }\n }, [enabled])\n\n const fetchNotification = async (id: string) => {\n try {\n setHasError(false)\n return apiRequest(\n defaultFetch,\n `${window.location.origin}/~api/notifications/v2/me/notifications/${id}?include=app,web_payloads`\n ).then(({ json }) => json)\n } catch (exception) {\n setHasError(true)\n console.error(\n \"topbar encountered error when fetching a single notification\",\n exception\n )\n }\n }\n\n const extractPayloadFromJoltMessage = (\n notification: JoltMessage\n ): JoltMessageNotificationDataPayload => {\n if (typeof notification.data === \"string\") {\n return JSON.parse(notification.data)\n } else {\n return notification.data as JoltMessageNotificationDataPayload\n }\n }\n\n const updateStateFromJoltMessage = React.useCallback(\n (message: JoltMessage) => {\n try {\n const joltMessageNotificationDataPayload =\n extractPayloadFromJoltMessage(message)\n\n fetchNotification(joltMessageNotificationDataPayload.data.id).then(\n (resp) => {\n const notification = buildNotificationFromApiResponse(\n resp.data,\n resp\n )\n\n setNotifications((notifications) => [\n ...notifications.filter(\n (candidate) => candidate.id !== notification.id\n ),\n notification,\n ])\n }\n )\n } catch (exception) {\n console.error(\n \"topbar encountered error when updating state from jolt message\",\n exception\n )\n }\n },\n [\n buildNotificationFromApiResponse,\n extractPayloadFromJoltMessage,\n fetchNotifications,\n read,\n setNotifications,\n unread,\n ]\n )\n\n const removeNotification = React.useCallback(\n (message: JoltMessage) => {\n const joltMessageNotificationDataPayload =\n extractPayloadFromJoltMessage(message)\n const newNotifications = notifications.filter(\n (candidate) =>\n candidate.id !== joltMessageNotificationDataPayload.data.id\n )\n setNotifications(newNotifications)\n },\n [extractPayloadFromJoltMessage, notifications, setNotifications]\n )\n\n useJoltEffect(\n enabled ? joltChannel : undefined,\n \"notifications.v2.events.notification.created\",\n updateStateFromJoltMessage\n )\n\n useJoltEffect(\n enabled ? joltChannel : undefined,\n \"notifications.v2.events.notification.updated\",\n updateStateFromJoltMessage\n )\n\n useJoltEffect(\n enabled ? joltChannel : undefined,\n \"notifications.v2.events.notification.destroyed\",\n removeNotification\n )\n\n const markAsReadOrUnread = async (\n notificationIds: string[],\n readOrUnread: \"read\" | \"unread\"\n ) => {\n const included = notificationIds.reduce(\n (acc, id: string) => [\n ...acc,\n {\n attributes: { action: readOrUnread },\n id,\n type: \"graph_notification\",\n },\n ],\n []\n )\n\n return apiRequest(\n railsCsrfFetch,\n `${pcoUrl(env)(\"api\")}/notifications/v2/me/bulk_update`,\n {\n data: {\n data: {\n attributes: {},\n relationships: {\n notifications: {\n data: {\n source: \"/included/graph_notification/*\",\n },\n },\n },\n type: \"BulkUpdate\",\n },\n included,\n },\n method: \"POST\",\n }\n ).then((e) => {\n if (!e.ok) {\n // TODO: show an alert or something?\n\n setIsLoading(false)\n setHasError(true)\n // Rollback any optimistic UI updates\n setNotifications((notifications) =>\n notifications.map((n) =>\n notificationIds.includes(n.id) ? { ...n, isRead: !n.isRead } : n\n )\n )\n }\n })\n }\n\n const handleCreateTask = useCallback(async (notification: Notification) => {\n return apiRequest(\n railsCsrfFetch,\n `${pcoUrl(env)(\"api\")}/home/v2/me/task_lists/inbox/tasks`,\n {\n data: {\n data: {\n attributes: {\n description: notification.link\n ? `<a href=\"${notification.link}\">Link</a>`\n : undefined,\n title: notification.title,\n },\n },\n },\n method: \"POST\",\n }\n ).then((e) => {\n if (e.ok) {\n setNotifications((notifications) =>\n notifications.map((n) =>\n notification.id === n.id\n ? { ...n, taskUrl: e.json.data.links.html }\n : n\n )\n )\n }\n })\n }, [])\n\n const handleToggleRead = async (notification: Notification) => {\n const action = notification.isRead ? \"unread\" : \"read\"\n\n // optimistic UI update\n setNotifications((notifications) =>\n notifications.map((n) =>\n notification.id == n.id ? { ...n, isRead: action === \"read\" } : n\n )\n )\n\n return markAsReadOrUnread([notification.id], action)\n }\n\n const handleMarkAsRead = async (notification: Notification) => {\n return markAsReadOrUnread([notification.id], \"read\")\n }\n\n const handleMarkAllAsRead = () => {\n const unreadIds = unread.map((n) => n.id)\n\n // optimistic UI update\n setNotifications((notifications) =>\n notifications.map((n) =>\n unreadIds.includes(n.id) ? { ...n, isRead: true } : n\n )\n )\n\n markAsReadOrUnread(\n unread.map((u: Notification) => u.id),\n \"read\"\n )\n }\n\n return {\n handleCreateTask,\n handleMarkAllAsRead,\n handleMarkAsRead,\n handleToggleRead,\n hasError,\n isLoading,\n read,\n unread,\n }\n}\n\nexport default useNotifications\n","import { Heading, Spinner, StackView } from \"@planningcenter/tapestry-react\"\nimport React from \"react\"\nimport { Transition, TransitionGroup } from \"react-transition-group\"\n\nimport { default as themeColors } from \"../../colors\"\nimport NotificationItem from \"../../components/notification_item\"\nimport NotificationsMenuBlankState from \"../../components/notifications_menu_blank_state\"\nimport useNotifications from \"../../hooks/use_notifications\"\nimport { Notification } from \"../../interfaces\"\nimport store from \"../../store\"\nimport { ExclamationTriangle } from \"../../symbols\"\nimport { DrawerHeader, DrawerHeading, ScrollContainer } from \"../components\"\nimport { ToolbarTool, ToolbarToolProps } from \"../types\"\n\nconst SectionHeaderButton = ({\n disabled,\n onClick,\n title,\n ...props\n}: {\n disabled?: boolean\n onClick: any\n title: string\n}) => (\n <StackView\n color={disabled ? themeColors.lightNeutral62 : themeColors.interaction66}\n cursor={disabled ? \"default\" : \"pointer\"}\n fontSize={5}\n fontWeight={600}\n userSelect=\"none\"\n onClick={!disabled && onClick}\n {...props}\n >\n {title}\n </StackView>\n)\n\nconst SectionHeaderTitle = ({\n ...props\n}: {\n children?: React.ReactNode\n padding?: number\n}) => (\n <Heading\n color={themeColors.lightNeutral12}\n lineHeight={2}\n size={5}\n textTransform=\"uppercase\"\n userSelect=\"none\"\n {...props}\n />\n)\n\nfunction NotificationsComponent({ closeDrawer }: ToolbarToolProps) {\n const [showRead, setShowRead] = React.useState(false)\n\n const duration = 300\n\n const defaultStyle = { transition: `opacity ${duration}ms ease-in-out` }\n\n const transitionStyles = {\n entered: { opacity: 1 },\n entering: { opacity: 0.2 },\n }\n\n const { env, enabled, joltChannel } = store.getState()[\"notifications\"]\n\n const {\n handleCreateTask,\n handleMarkAllAsRead,\n handleMarkAsRead,\n handleToggleRead,\n hasError,\n isLoading,\n read,\n unread,\n } = useNotifications({ enabled, env, joltChannel })\n\n return (\n <>\n <DrawerHeader closeDrawer={closeDrawer}>\n <StackView spacing={0.5}>\n <StackView alignment=\"center\" axis=\"horizontal\" spacing={1}>\n <DrawerHeading>Notifications</DrawerHeading>\n {isLoading && (\n <Spinner\n color=\"hsl(0 0% 62%)\"\n thickness={2}\n trackColor=\"hsl(0 0% 97%)\"\n />\n )}\n {hasError && (\n <ExclamationTriangle fill=\"hsl(8 60% 47%)\" size={16} />\n )}\n </StackView>\n {read.length > 0 && (\n <SectionHeaderButton\n onClick={() => setShowRead((showRead) => !showRead)}\n title={`${showRead ? \"Hide\" : \"Show\"} read`}\n />\n )}\n </StackView>\n </DrawerHeader>\n <ScrollContainer>\n <StackView alignment=\"stretch\" spacing={2}>\n <div\n style={{\n boxSizing: \"border-box\",\n display: \"flex\",\n flexDirection: \"column\",\n justifyContent: \"space-between\",\n margin: 0,\n padding: \"4px 0\",\n }}\n >\n {!isLoading && unread.length === 0 && (\n <NotificationsMenuBlankState\n context=\"toolbar\"\n description={`When you have ${\n read.length > 0 ? \"unread \" : \"\"\n }notifications they will show up here.`}\n {...(read.length > 0 && { title: \"No unread notifications\" })}\n />\n )}\n {unread.length > 0 && (\n <StackView\n axis=\"horizontal\"\n alignment=\"center\"\n distribution=\"space-between\"\n padding={2}\n >\n <SectionHeaderTitle>Unread</SectionHeaderTitle>\n {unread.length > 0 && (\n <SectionHeaderButton\n onClick={() => handleMarkAllAsRead()}\n title={`Mark ${unread.length} as read`}\n />\n )}\n </StackView>\n )}\n <TransitionGroup exit={false}>\n {unread.map((notification: Notification, idx) => (\n <Transition key={notification.id} timeout={0}>\n {(state) => (\n <div\n style={{\n ...defaultStyle,\n ...transitionStyles[state],\n }}\n >\n <NotificationItem\n isLast={unread.length === idx + 1}\n key={notification.id}\n onMarkAsRead={handleMarkAsRead}\n onToggleRead={() => handleToggleRead(notification)}\n onCreateTask={handleCreateTask}\n showBottomBorder={read.length > 0}\n {...{ notification }}\n />\n </div>\n )}\n </Transition>\n ))}\n </TransitionGroup>\n {read.length > 0 && showRead && (\n <>\n <SectionHeaderTitle padding={2}>Read</SectionHeaderTitle>\n <TransitionGroup exit={false}>\n {read.map((notification: Notification) => (\n <Transition key={notification.id} timeout={0}>\n {(state) => (\n <div\n style={{\n ...defaultStyle,\n ...transitionStyles[state],\n }}\n >\n <div style={{ opacity: 0.6 }}>\n <NotificationItem\n key={notification.id}\n onToggleRead={() =>\n handleToggleRead(notification)\n }\n onCreateTask={handleCreateTask}\n showBottomBorder\n {...{ notification }}\n />\n </div>\n </div>\n )}\n </Transition>\n ))}\n </TransitionGroup>\n </>\n )}\n </div>\n </StackView>\n </ScrollContainer>\n </>\n )\n}\n\nconst Notifications: ToolbarTool = {\n component: NotificationsComponent,\n icons: {\n active: \"toolbar.notification\",\n static: \"toolbar.notificationO\",\n },\n name: \"Notifications\",\n}\n\nexport { Notifications }\n","import {\n components,\n UiExtensionFirstPartyComponent,\n} from \"@planningcenter/add-ons\"\nimport { Badge, StackView as TRStackView } from \"@planningcenter/tapestry-react\"\nimport pcoUrl from \"@planningcenter/url\"\nimport React, { useCallback, useState } from \"react\"\n\nimport apiRequest, { railsCsrfFetch } from \"../../api_request\"\nimport { useJoltChannelSubscription, useJoltEffect } from \"../../hooks/jolt\"\nimport { JoltMessage } from \"../../interfaces\"\nimport {\n DrawerHeader,\n DrawerHeading,\n ScrollContainer,\n SwitchView,\n} from \"../components\"\nimport { usePcoMeta } from \"../hooks/use_pco_meta\"\nimport { ToolbarTool, ToolbarToolProps } from \"../types\"\n\nconst { LoadingIndicator, StackView } = components\n\nfunction NavLinkWithBadge({\n children,\n badge,\n onClick,\n ...rest\n}: {\n badge: React.ComponentProps<typeof Badge> | null\n children: React.ReactNode\n onClick: () => unknown\n}) {\n return (\n <TRStackView\n as=\"button\"\n axis=\"horizontal\"\n distribution=\"space-between\"\n alignment=\"center\"\n paddingBottom={0.75}\n onClick={() => onClick()}\n spacing={1}\n {...rest}\n >\n {children}\n {badge && <Badge size=\"sm\" fontWeight=\"600\" {...badge} />}\n </TRStackView>\n )\n}\n\ntype JoltChannelRequest = {\n channelName: string\n subscribeUrl: string\n}\n\nfunction TasksComponent({\n closeDrawer,\n enableJoltLogging,\n env,\n isOpen,\n joltPromise,\n onReceiveWorker,\n openDrawer,\n currentPath,\n onChangePath,\n}: ToolbarToolProps & { onReceiveWorker: (worker: Worker) => void }) {\n const pcoMeta = usePcoMeta()\n const source = `${pcoUrl(env)(\"home\" as any)}/addons/toolbar.tasks.list.js`\n\n const [latestJoltMessage, setLatestJoltMessage] = useState<\n JoltMessage & { timestamp: number }\n >()\n const [requestedJoltChannel, setRequestedJoltChannel] =\n useState<JoltChannelRequest>()\n\n const joltChannel = useJoltChannelSubscription({\n channelName: requestedJoltChannel?.channelName,\n enableJoltLogging,\n enabled: !!requestedJoltChannel,\n env,\n fetchSubscribeToken: async (connection_id) => {\n const subscribeUrl = requestedJoltChannel.subscribeUrl\n\n const response = await apiRequest(railsCsrfFetch, subscribeUrl, {\n data: { data: { attributes: { connection_id } } },\n method: \"POST\",\n })\n\n return response.json.data.id\n },\n joltPromise,\n })\n\n const handleJoltMessage = useCallback((message: JoltMessage) => {\n setLatestJoltMessage({ ...message, timestamp: new Date().getTime() })\n }, [])\n\n useJoltEffect(joltChannel, \"\", handleJoltMessage)\n\n const pendoTrackEvent = useCallback((event: string, properties = {}) => {\n if (!window?.pendo) {\n return console.warn(\"`window.pendo` is undefined\")\n }\n window.pendo.track(event, properties)\n }, [])\n\n return (\n <UiExtensionFirstPartyComponent\n grow={1}\n display=\"flex\"\n extensionId=\"2\"\n url={source}\n onReceiveWorker={onReceiveWorker}\n loadingFallback={\n <StackView flex={1} axis=\"vertical\">\n <DrawerHeader closeDrawer={closeDrawer}>\n <StackView axis=\"horizontal\" spacing={1}>\n <DrawerHeading>To do</DrawerHeading>\n <LoadingIndicator />\n </StackView>\n </DrawerHeader>\n </StackView>\n }\n additionalComponents={{\n DrawerHeader,\n DrawerHeading,\n NavLinkWithBadge,\n ScrollContainer,\n SwitchView,\n }}\n args={{\n closeDrawer,\n currentPath,\n isOpen,\n latestJoltMessage,\n onChangePath,\n openDrawer,\n pcoMeta,\n requestJoltChannel: setRequestedJoltChannel,\n trackPendo: pendoTrackEvent,\n }}\n />\n )\n}\n\nconst Tasks: ToolbarTool = {\n component: TasksComponent,\n icons: {\n active: \"toolbar.checklist\",\n static: \"toolbar.checklistO\",\n },\n name: \"Tasks\",\n}\n\nexport { Tasks }\n","import { UiExtensionDataContext } from \"@planningcenter/add-ons\"\nimport Jolt from \"@planningcenter/jolt-client\"\nimport {\n Avatar,\n Box,\n Button,\n Divider,\n Icon,\n StackView,\n ThemeProvider,\n} from \"@planningcenter/tapestry-react\"\nimport pcoUrl, { Environment } from \"@planningcenter/url\"\nimport React, { useCallback } from \"react\"\n\nimport { default as themeColors } from \"../colors\"\nimport getLoginProfilePath from \"../get_login_profile_path\"\nimport { useJSONCookie } from \"../hooks/use_cookie\"\nimport { useFragmentRouting } from \"../hooks/use_fragment_routing\"\nimport useMediaQuery from \"../hooks/use_media_query\"\nimport useStore from \"../hooks/use_store\"\nimport { topbarTheme } from \"../theme\"\nimport { shallowCompare } from \"../utils\"\nimport {\n Drawer,\n IndicatorDot,\n UserProfile as OriginalUserProfile,\n} from \"./components\"\nimport { ActionType, useToolbarReducer } from \"./hooks\"\nimport { Chat, Helpdesk, Notifications, Tasks } from \"./tools\"\nimport { useChatStreamUser } from \"./tools/chat/hooks\"\nimport { HelpdeskConfig, ToolbarTool, ToolbarToolProps } from \"./types\"\n\nconst TOOLBAR_WIDTH = 48\nconst DRAWER_WIDTH = 360\nconst DURATION = 100\nconst NAVBAR_HEIGHT = 52\n\ntype ToolbarProps = {\n appName: string\n autoMountTool?: string\n enableJoltLogging?: boolean\n env: Environment\n helpdeskConfig?: HelpdeskConfig\n linkToProfile?: boolean\n onReceiveTasksWorker?: (worker: Worker) => void\n userAvatarPath: string\n userName: string\n}\n\nconst TOOLS_MAP: Record<string, ToolbarTool> = {\n Chat,\n Notifications,\n Tasks,\n}\n\nconst toolsRouteMap = Object.fromEntries(Object.entries(TOOLS_MAP).map(([k, v]) => [k.toLowerCase(), v]))\n\nfunction toolIsRoutable(tool: { name: string }) {\n return tool.name.toLowerCase() in toolsRouteMap\n}\n\nexport function Toolbar({\n appName,\n autoMountTool,\n enableJoltLogging,\n env,\n helpdeskConfig = {},\n linkToProfile = true,\n userAvatarPath,\n userName,\n onReceiveTasksWorker,\n}: ToolbarProps): JSX.Element {\n const [toolbarFragmentRoute, onChangeToolbarFragmentRoute, clearRoute] = useFragmentRouting()\n const [toolStateCookie, setToolStateCookie] = useJSONCookie(\n \"topbarToolbarToolState\"\n )\n const autoMountedTool = autoMountTool ? TOOLS_MAP[autoMountTool] : null\n const [state, dispatch] = useToolbarReducer({\n currentContent: autoMountedTool,\n })\n const { currentContent, open } = state\n const mounted = !!currentContent\n const { indicatorVisible, joltPromise, chatEnabled, userId } = useStore<{\n chatEnabled: boolean\n indicatorVisible: object\n joltPromise: () => Promise<Jolt | void>\n userId: string\n }>()\n\n React.useEffect(() => {\n if (open) {\n document.body.style.overflow = \"hidden\"\n window.scrollTo(0, 0)\n } else {\n document.body.style.overflow = \"auto\"\n }\n }, [open])\n\n React.useEffect(() => {\n window.openHelpdesk = () => handleToolOnClick(Helpdesk)\n\n return () => {\n delete window.openHelpdesk\n }\n }, [Helpdesk])\n\n const loginSettingsUrl = getLoginProfilePath({\n appName: appName.replace(/[\\s-]/, \"\"),\n env: env,\n userId: userId,\n })\n const logoutUrl = `${pcoUrl(env)(\"login\")}/logout`\n const profileUrl = `/people/AC${userId}`\n\n const HelpDeskTool = Helpdesk as ToolbarTool\n const helpdeskOnClick = !!helpdeskConfig?.onClick\n ? helpdeskConfig.onClick\n : () => toggleDrawer(HelpDeskTool)\n\n const setToolAndOpenDrawer = useCallback((content: ToolbarTool | typeof UserProfile) => {\n dispatch({ payload: { content }, type: ActionType.mount })\n setTimeout(() => dispatch({ type: ActionType.open }))\n }, [])\n\n const openDrawer = useCallback(\n (content: ToolbarTool | typeof UserProfile) => {\n if (toolIsRoutable(content)) {\n onChangeToolbarFragmentRoute(content.name.toLowerCase(), toolStateCookie[content.name.toLowerCase()])\n } else {\n clearRoute()\n setToolAndOpenDrawer(content)\n }\n },\n [onChangeToolbarFragmentRoute, clearRoute, setToolAndOpenDrawer, toolStateCookie]\n )\n\n const closeDrawer = useCallback(() => {\n dispatch({ type: ActionType.close })\n clearRoute()\n setTimeout(() => dispatch({ type: ActionType.unmount }), DURATION)\n }, [clearRoute])\n\n React.useEffect(() => {\n if (!toolbarFragmentRoute) return\n\n const nextState = {\n ...toolStateCookie,\n [toolbarFragmentRoute.tool]: toolbarFragmentRoute.path,\n }\n\n if (!shallowCompare(nextState, toolStateCookie)) {\n setToolStateCookie(nextState)\n }\n }, [toolbarFragmentRoute, toolStateCookie])\n\n React.useEffect(() => {\n if (\n toolbarFragmentRoute?.tool &&\n (currentContent !== toolsRouteMap[toolbarFragmentRoute.tool] || !open)\n ) {\n setToolAndOpenDrawer(toolsRouteMap[toolbarFragmentRoute.tool])\n }\n }, [setToolAndOpenDrawer, toolbarFragmentRoute?.tool, currentContent, open])\n\n\n const toggleDrawer = (content: ToolbarTool | typeof UserProfile) => {\n if (!open) {\n return openDrawer(content)\n }\n\n return currentContent?.name === content.name\n ? closeDrawer()\n : openDrawer(content)\n }\n\n const chatStreamUser = useChatStreamUser({\n enableJoltLogging,\n env,\n isEnabled: Boolean(userId && chatEnabled),\n joltPromise,\n onConnectionFailure: () => currentContent === Chat && closeDrawer(),\n userId,\n })\n\n const TOOLS = [Notifications, Tasks, chatStreamUser && Chat].filter(\n Boolean\n ) as ToolbarTool[]\n\n const UserProfile: Omit<ToolbarTool, \"icons\"> = {\n component: () =>\n OriginalUserProfile({\n closeDrawer,\n linkToProfile,\n loginSettingsUrl,\n logoutUrl,\n profileUrl,\n userAvatarPath,\n }),\n name: \"Profile\",\n }\n\n const isMobile = useMediaQuery(\"(max-width: 599px)\")\n\n const [visibleWindowHeight, setVisibleWindowHeight] = React.useState(0)\n\n React.useLayoutEffect(() => {\n const handleResize = () => {\n setVisibleWindowHeight(window.innerHeight)\n }\n\n window.addEventListener(\"resize\", handleResize)\n\n return () => window.removeEventListener(\"resize\", handleResize)\n }, [])\n\n const handleToolOnClick = (tool: ToolbarTool) => {\n openDrawer(tool)\n document\n .getElementById(`toolbarDrawer${tool.name}`)\n ?.scrollTo({ behavior: \"smooth\", top: 0 })\n }\n\n const toolSpecificProps = {\n Chat: { chatStreamUser },\n Tasks: { onReceiveWorker: onReceiveTasksWorker },\n }\n\n const onChangePath = useCallback((path: string) => {\n onChangeToolbarFragmentRoute(currentContent?.name.toLowerCase(), path)\n }, [currentContent?.name])\n\n const currentToolProps: ToolbarToolProps = {\n appName,\n closeDrawer,\n currentPath: toolbarFragmentRoute?.path,\n env,\n helpdeskConfig,\n isOpen: open,\n joltPromise,\n onChangePath,\n openDrawer: () => currentContent && openDrawer(currentContent),\n userId,\n ...(currentContent ? toolSpecificProps[currentContent.name] : {}),\n }\n\n const indicatorState = {\n ...indicatorVisible,\n Chat: chatStreamUser?.unread,\n }\n\n return (\n <ThemeProvider theme={topbarTheme}>\n <UiExtensionDataContext>\n {isMobile ? (\n <>\n <StackView\n left={0}\n position=\"absolute\"\n right={0}\n pointerEvents=\"none\"\n style={{ minHeight: visibleWindowHeight }}\n top={0}\n zIndex={10001}\n >\n <StackView\n alignItems=\"start\"\n axis=\"horizontal\"\n backgroundColor=\"white\"\n borderTopColor=\"separatorTertiary\"\n borderTopWidth={1}\n bottom={0}\n distribution=\"fill\"\n height={`calc(${NAVBAR_HEIGHT}px + env(safe-area-inset-bottom))`}\n left={0}\n position=\"fixed\"\n pointerEvents=\"auto\"\n right={0}\n >\n <StackView alignment=\"center\" flex=\"1\" position=\"relative\">\n <Button\n css={{ WebkitTapHighlightColor: \"transparent\" }}\n color={\n !open\n ? themeColors.lightNeutral24\n : themeColors.lightNeutral62\n }\n hover={{ color: themeColors.lightNeutral24 }}\n icon={{\n name: open\n ? \"toolbar.planningCenterO\"\n : \"toolbar.planningCenter\",\n size: \"20px\",\n }}\n onClick={() => closeDrawer()}\n padding={2}\n theme={false}\n title={`Home`}\n />\n </StackView>\n {[HelpDeskTool, ...TOOLS].map((tool) => (\n <StackView\n alignment=\"center\"\n flex=\"1\"\n key={tool.name}\n position=\"relative\"\n >\n <Button\n id={`toolbar-${tool.name.toLowerCase()}`}\n aria-label={`${tool.name}`}\n color={\n open && currentContent === tool\n ? themeColors.lightNeutral24\n : themeColors.lightNeutral62\n }\n css={{ WebkitTapHighlightColor: \"transparent\" }}\n hover={{ color: themeColors.lightNeutral24 }}\n key={tool.name}\n onClick={() => handleToolOnClick(tool)}\n paddingHorizontal={2}\n paddingVertical={2}\n theme={false}\n >\n <Box position=\"relative\">\n {indicatorState[tool.name] && (\n <IndicatorDot right={-0.5} top={-0.5} />\n )}\n <Icon\n name={\n open && currentContent === tool\n ? tool.icons.active\n : tool.icons.static\n }\n size=\"20px\"\n />\n </Box>\n </Button>\n </StackView>\n ))}\n </StackView>\n </StackView>\n {mounted && (\n <Drawer\n id={`toolbarDrawer${currentContent.name}`}\n bottom={`${NAVBAR_HEIGHT}px`}\n height={open ? `calc(100% - ${NAVBAR_HEIGHT}px)` : \"0px\"}\n overflow=\"auto\"\n position=\"absolute\"\n >\n <currentContent.component {...currentToolProps} />\n </Drawer>\n )}\n </>\n ) : (\n <StackView\n height=\"100vh\"\n position=\"absolute\"\n right={0}\n width={\n open\n ? `calc(${DRAWER_WIDTH}px + ${TOOLBAR_WIDTH}px)`\n : `${TOOLBAR_WIDTH}px`\n }\n transition={`all ${DURATION}ms ease-in-out`}\n >\n <StackView\n backgroundColor=\"surface\"\n borderLeftColor=\"separatorTertiary\"\n borderLeftWidth={1}\n grow={1}\n paddingVertical={1}\n spacing={<Divider margin={1.5} />}\n zIndex={2}\n position=\"absolute\"\n right={0}\n height=\"100%\"\n width={`${TOOLBAR_WIDTH}px`}\n >\n <StackView\n alignment=\"center\"\n data-pendo=\"toolbar-profile-support-wrapper\"\n spacing={2}\n >\n <Button\n data-pendo=\"toolbar-profile\"\n onClick={() => toggleDrawer(UserProfile)}\n radius={0}\n theme={false}\n >\n <Avatar\n alt={`${userName}'s avatar`}\n hover={{ outlineColor: themeColors.lightNeutral62 }}\n outlineColor={\n open && mounted && currentContent.name == \"Profile\"\n ? themeColors.lightNeutral62\n : \"transparent\"\n }\n outlineOffset=\"2px\"\n outlineStyle=\"solid\"\n outlineWidth=\"2px\"\n size=\"sm\"\n source={userAvatarPath}\n />\n </Button>\n <Tool\n currentContent={currentContent}\n indicatorState={indicatorState}\n key={HelpDeskTool.name}\n onClick={helpdeskOnClick}\n open={open}\n tool={HelpDeskTool}\n />\n </StackView>\n <StackView alignment=\"center\" spacing={2}>\n {TOOLS.map((tool) => (\n <Tool\n currentContent={currentContent}\n indicatorState={indicatorState}\n key={tool.name}\n onClick={() => toggleDrawer(tool)}\n open={open}\n tool={tool}\n />\n ))}\n </StackView>\n </StackView>\n {mounted && (\n <Drawer\n hasShadow\n id={`toolbarDrawer${currentContent.name}`}\n width={`${DRAWER_WIDTH}px`}\n >\n <currentContent.component {...currentToolProps} />\n </Drawer>\n )}\n </StackView>\n )}\n </UiExtensionDataContext>\n </ThemeProvider>\n )\n}\n\ntype ToolProps = {\n currentContent: ToolbarTool | undefined\n indicatorState: { [key: string]: boolean }\n onClick: () => void\n open: boolean\n tool: ToolbarTool\n}\n\nconst Tool = ({\n currentContent,\n indicatorState,\n onClick,\n open,\n tool,\n}: ToolProps) => (\n <Box\n data-pendo={`toolbar-${tool.name.toLowerCase()}`}\n key={tool.name}\n position=\"relative\"\n >\n {indicatorState[tool.name] && <IndicatorDot right={0.25} top={0.25} />}\n <Button\n id={`toolbar-${tool.name.toLowerCase()}`}\n color={\n open && currentContent === tool\n ? themeColors.lightNeutral24\n : themeColors.lightNeutral62\n }\n hover={{\n color: themeColors.lightNeutral24,\n }}\n icon={{\n name:\n open && currentContent === tool\n ? tool.icons.active\n : tool.icons.static,\n size: \"20px\",\n }}\n key={tool.name}\n onClick={onClick}\n title={`Open ${tool.name} drawer`}\n theme={false}\n />\n </Box>\n)\n","import { useCallback, useEffect, useMemo, useState } from \"react\"\n\nfunction useFragmentKey(key: string) {\n const regex = useMemo(() => new RegExp(`${key}=([^&]+)`), [key])\n\n const getFragment = useCallback((hash: string) => {\n const match = hash.match(regex)\n\n return match ? match[1] : null\n }, [regex])\n\n const [value, setValue] = useState(() => getFragment(location.hash))\n\n const updateFragment = useCallback((hash: string) => {\n setValue(getFragment(hash))\n }, [])\n\n useEffect(() => {\n function onHashChange() {\n updateFragment(location.hash)\n }\n window.addEventListener('hashchange', onHashChange)\n\n return () => window.removeEventListener('hashchange', onHashChange)\n }, [updateFragment])\n\n return [value, updateFragment] as const\n}\n\nexport function useFragmentRouting() {\n const key = \"toolbar\"\n const [toolbarFragment, updateFragment] = useFragmentKey(key)\n\n const onChangeRoute = useCallback((tool: string, path: string = \"\") => {\n const nextHash = `#${key}=${tool}/${path}`\n history.replaceState(undefined, undefined, nextHash)\n updateFragment(nextHash)\n }, [updateFragment])\n\n const route = useMemo(() => {\n if (toolbarFragment) {\n const [tool, ...rest] = toolbarFragment.split('/')\n\n return { path: rest.join('/'), tool }\n } else {\n return null\n }\n }, [toolbarFragment])\n\n const clearRoute = useCallback(() => {\n history.replaceState(undefined, undefined, \"#\")\n updateFragment(\"\")\n }, [])\n\n return [route, onChangeRoute, clearRoute] as const\n}\n","import {\n Avatar,\n Button,\n Divider,\n GridView,\n Heading,\n Icon,\n Link,\n StackView,\n Text,\n} from \"@planningcenter/tapestry-react\"\nimport React from \"react\"\n\nimport { default as themeColors } from \"../../colors\"\nimport { remove } from \"../../connected_people_provider\"\nimport useStore from \"../../hooks/use_store\"\n\nconst requestClearConnectedPeopleCache = () => remove()\n\ninterface Props {\n closeDrawer: () => void\n linkToProfile: boolean\n loginSettingsUrl: string\n logoutUrl: string\n profileUrl: string\n userAvatarPath: string\n}\n\nexport function UserProfile({\n closeDrawer,\n linkToProfile,\n loginSettingsUrl,\n logoutUrl,\n profileUrl,\n userAvatarPath,\n}: Props) {\n const { mfaConfigured, mfaEnabled, name } = useStore()\n\n return (\n <StackView axis=\"vertical\" spacing={<Divider />}>\n <GridView\n columns=\"auto 1fr auto\"\n alignment=\"start\"\n spacing={2}\n padding={2}\n paddingTop={1}\n width=\"100%\"\n >\n <Avatar source={userAvatarPath} size=\"md\" />\n <StackView axis=\"vertical\" spacing={1} grow={0} shrink={1}>\n <Heading\n level={3}\n size={1}\n weight={600}\n paddingTop={0.5}\n color={themeColors.lightNeutral12}\n >\n {name}\n </Heading>\n {linkToProfile && (\n <Link\n to={profileUrl}\n style={{ color: themeColors.lightNeutral45 }}\n size={3}\n >\n My profile\n </Link>\n )}\n {mfaEnabled && (\n <>\n <Link\n to={loginSettingsUrl}\n style={{ color: themeColors.lightNeutral45 }}\n size={3}\n >\n My login settings\n </Link>\n <StackView\n axis=\"horizontal\"\n alignment=\"center\"\n spacing={0.5}\n width=\"100%\"\n >\n <Icon\n name={mfaConfigured ? \"general.lock\" : \"general.unlock\"}\n size=\"sm\"\n color={\n mfaConfigured ? themeColors.success25 : themeColors.danger45\n }\n />\n <Text\n size={5}\n weight={400}\n color={themeColors.lightNeutral62}\n wrap={true}\n >\n Two-step verification {mfaConfigured ? \"active\" : \"inactive\"}\n </Text>\n </StackView>\n </>\n )}\n </StackView>\n <Button\n icon={{\n fill: themeColors.lightNeutral24,\n name: \"general.x\",\n size: \"md\",\n }}\n onClick={closeDrawer}\n title=\"Close\"\n variant=\"naked\"\n theme={false}\n hover={{\n backgroundColor: themeColors.lightNeutral95,\n }}\n />\n </GridView>\n <form method=\"POST\" action={logoutUrl}>\n <Button\n data-turbolinks={false}\n onClick={() => {\n requestClearConnectedPeopleCache()\n return\n }}\n style={{ padding: 0 }}\n theme={false}\n type=\"submit\"\n width=\"100%\"\n >\n <StackView\n distribution=\"space-between\"\n alignment=\"center\"\n axis=\"horizontal\"\n grow={1}\n paddingHorizontal={3}\n paddingVertical={2}\n >\n <Text color={themeColors.lightNeutral45} size={3}>\n Log out\n </Text>\n <Icon name=\"general.intoBox\" fill={themeColors.lightNeutral45} />\n </StackView>\n </Button>\n </form>\n </StackView>\n )\n}\n","import { useEffect, useState } from \"react\"\n\nfunction useMediaQuery(query: string): boolean {\n const getMatches = (query: string): boolean => {\n // Prevents SSR issues\n if (typeof window !== \"undefined\") {\n return window.matchMedia(query).matches\n }\n return false\n }\n\n const [matches, setMatches] = useState<boolean>(getMatches(query))\n\n function handleChange() {\n setMatches(getMatches(query))\n }\n\n useEffect(() => {\n const matchMedia = window.matchMedia(query)\n\n // Triggered at the first client-side load and if query changes\n handleChange()\n\n // Listen matchMedia\n if (matchMedia.addListener) {\n matchMedia.addListener(handleChange)\n } else {\n matchMedia.addEventListener(\"change\", handleChange)\n }\n\n return () => {\n if (matchMedia.removeListener) {\n matchMedia.removeListener(handleChange)\n } else {\n matchMedia.removeEventListener(\"change\", handleChange)\n }\n }\n }, [query])\n\n return matches\n}\n\nexport default useMediaQuery\n"],"names":["_excluded","defaultFetch","url","options","fetch","_extends","credentials","mode","railsCsrfFetch","_ref","headers","rest","_objectWithoutPropertiesLoose","_window$Rails","_window","window","Rails","csrfToken","_document$querySelect","document","querySelector","getAttribute","apiRequest","method","data","Accept","redirect","body","JSON","stringify","then","response","json","ok","catch","e","console","warn","useJoltChannelSubscription","channelName","enableJoltLogging","enabled","env","wssEndpoint","fetchSubscribeToken","joltPromise","Promise","resolve","joltChannel","setJoltChannel","React","useState","joltInstance","setJoltInstance","usingIndependentJoltInstance","setUsingIndependentJoltInstance","subscribeToJoltChannel","useCallback","async","jolt","j","fetchSubscribeTokenFn","_channel","cid","Jolt","wssUrl","fetchAuthTokenFn","location","origin","attributes","id","logToConsole","channel","subscriptions","find","s","subscribe","pcoUrl","useEffect","pcoPageExpiredHandler","event","_window$pcoPageExpire","hasOwnProperty","PCOPageExpiredCurrentPersonACID","pcoPageExpired","currentPersonACID","disconnect","addEventListener","removeEventListener","useJoltEffect","channelSubscription","eventName","callback","bind","unbind","HSLtoHSLA","hsl","a","hslArray","replace","split","debounce","func","wait","timeout","args","context","this","clearTimeout","setTimeout","later","apply","shallowCompare","b","Object","keys","length","entries","every","key","value","useLocalStorage","initialValue","storedValue","setStoredValue","item","localStorage","getItem","parse","error","localStorageRepresentation","setItem","dropKey","removeItem","noop","createStore","initialState","currentState","listeners","Set","getState","setState","newState","forEach","listener","add","delete","store","AppsProvider","configuredFetch","formatter","mapApps","render","userId","_topbarResponse$data","_topbarResponse$data$","_topbarResponse$data2","_topbarResponse$data3","_topbarResponse$data4","_topbarResponse$data5","_topbarResponse$data6","_topbarResponse$data7","_topbarResponse$data8","_topbarResponse$data9","_topbarResponse$data10","_topbarResponse$data11","_topbarResponse$data12","_topbarResponse$data13","_topbarResponse$data14","_topbarResponse$data15","_topbarResponse$data16","_topbarResponse$data17","_topbarResponse$data18","_topbarResponse$data19","_topbarResponse$data20","topbarResponse","useTopbarAPI","localResp","setLocalResp","resp","setResp","apps","hasConnectedPeople","has_connected_people","mfaEnabled","features","includes","notificationsContextMenu","mfaConfigured","mfa_configured","name","notificationsEnabled","notificationsDisabled","organizationTimeZone","org_time_zone","chatEnabled","algoliaSearchAuth","algoliaApplicationId","algolia_application_identifier","algoliaSearchOnlyApiKey","algolia_search_key","notificationsJoltChannel","subscribeUrl","notificationsHasUnread","useNotificationsHasUnread","fetchHasUnread","useDebounce","fn","t","useMemo","unread","undefined","state","indicatorVisible","Notifications","notifications","remove","_resp$data","_resp$data$attributes","ConnectedPeopleProvider","Component","constructor","props","super","connectedPeople","unlink","meta","redirect_to","switch","toId","returnPath","return_path","componentDidMount","defaultProps","PointBreak","width","innerWidth","setWindowWidth","componentWillUnmount","breakpointString","DisplaySwitch","breakpoint","smallBreakpoints","indexOf","smallTopbar","notSmallTopbar","Accounts","color","createElement","fill","d","Squircle","MonoAppIcon","appName","colors","style","size","platformProps","xmlns","height","viewBox","role","display","AppSymbols","base0","MonoAppName","MonoAppText","slightBackgroundTransition","transition","fontFamily","IEFlex1","flex","_excluded2","_excluded5","_excluded7","_excluded8","_excluded9","Bell","dot","dotFill","bellPath","stroke","cx","cy","r","mask","x","y","BlankStateIcon","_ref2","dark","nativeProps","clipPath","opacity","DisclosureChevronIcon","_ref5","base3","points","ExclamationTriangle","_ref7","Spyglass","_ref8","X","_ref9","Unbutton","WebkitAppearance","appearance","backgroundColor","border","cursor","outline","padding","AppsButton","displayIconOnly","expanded","onClick","down","setDown","entered","setEntered","onMouseDown","onMouseEnter","onMouseLeave","onMouseUp","alignItems","base1","base2","paddingLeft","paddingRight","whiteSpace","Fragment","fontSize","fontWeight","marginLeft","margin","x1","y1","x2","y2","gradientUnits","offset","stopColor","gradientTransform","xlinkHref","transform","ColorAppIcon","ColorAppSquircles","getAppsSwitchProductPath","productName","_window$location","_window$location$path","basePath","toLowerCase","referer","pathname","toString","params","URLSearchParams","append","HoverableListItem","active","component","C","Outsider","container","handleOutsideClick","contains","target","stopPropagation","preventDefault","onOutsideClick","_this$props","cleanup","ref","c","PopupRoot","alignSelf","position","Popup","background","borderRadius","boxShadow","overflow","AppsMenu","toggle","visible","accountsProduct","homeProduct","restProducts","filter","sort","localeCompare","listItemProps","verticalAlign","marginTop","visibility","minWidth","href","borderBottom","marginRight","map","i","isFirst","isLast","paddingBottom","paddingTop","borderTop","textDecoration","lineHeight","appsMenuFormatter","sortByAttribute","attr","arr","slice","reduce","acc","connectedPeopleMenuFormatter","useStore","selector","useSyncExternalStore","StyledRoot","children","className","MozOsxFontSmoothing","WebkitFontSmoothing","danger43","danger45","danger47","danger93","danger97","darkNeutral07","darkNeutral12","darkNeutral15","darkNeutral17","darkNeutral19","darkNeutral24","darkNeutral32","darkNeutral50","darkNeutral68","darkNeutral88","darkNeutral98","interaction45","interaction50","interaction55","interaction66","interaction91","interaction93","interaction97","lightNeutral12","lightNeutral24","lightNeutral45","lightNeutral62","lightNeutral81","lightNeutral88","lightNeutral93","lightNeutral95","lightNeutral97","lightNeutral98","lightNeutral100","success23","success25","success27","success91","success97","warning20","warning49","warning55","warning63","warning94","warning97","UserMenu","requestClearAppsCache","requestClearConnectedPeopleCache","requestSwitchConnectedPerson","requestUnlinkConnectedPeople","setUserMenuVisible","userMenuVisible","logoutUrl","maxHeight","maxWidth","right","textTransform","textAlign","listStyleType","person","textOverflow","organization_name","ThemeProvider","Divider","action","Button","hover","themeColors","theme","type","StackView","distribution","alignment","axis","grow","paddingHorizontal","paddingVertical","spacing","Text","Icon","Hoverable","innerRef","UserMenuTrigger","orgName","requestConnectedPeopleFetch","showOrgName","text","Topbar","appsMenuVisible","setAppsMenuVisible","routesVisible","setRoutesVisible","requestAppsFetch","routes","search","hideRoutes","showRoutes","useDummyNotifications","Route","Provider","announcements","initialAnnouncements","dismissAnnouncements","newAnnouncements","pcURL","obj","ownProps","resArray","Array","entry","StyledAnnouncement","justifyContent","StyleProvider","_this$props2","join","trim","PlatformAnnouncements","actions","Boolean","announcement","renderItem","StyledDismissButton","_objectDestructuringEmpty","borderWidth","XSymbol","DissmissibleAnnouncement","dangerouslySetInnerHTML","__html","html","ProductAnnouncement","_event","dismissed","updateDismissed","_excluded3","boxSizing","Avatar","incomingUrl","backgroundImage","backgroundPosition","backgroundSize","ClientStorage","update","forceUpdate","AccountSettingsLink","accountsName","CloseMenuButton","getLoginProfilePath","MFAStatus","isActive","statusColor","marginBottom","generateColorScale","designSystem","topbarTheme","baseColor","icons","churchCenter","general","people","toolbar","UserProfileMenu","linkToProfile","userAvatarPath","userName","shrink","weight","truncate","Link","as","underline","icon","variant","title","HeadingUppercase","List","dividerColor","Item","UserMenuAppLockup","originalAppName","_activeRoute$","_activeRoute$$props","routesMenuVisible","setRoutesMenuVisible","productSwitcherVisible","setProductSwitcherVisible","appColors","activeRoute","CurrentRouteComponent","currentRouteComponent","currentRouteText","borderColor","left","top","LocalStorageProvider","MozUserSelect","WebkitTapHighlightColor","WebkitUserSelect","bottom","msUserSelect","userSelect","forcePropagation","borderRight","flexDirection","WebkitOverflowScrolling","overflowY","charAt","toUpperCase","defaultCookieConfig","domain","host","cookieConfigString","Drawer","hasShadow","elevation","open","zIndex","DrawerHeader","closeDrawer","Box","DrawerHeading","Heading","letterSpacing","level","IndicatorDot","pointerEvents","radius","INDICATOR_STYLES","ScrollContainer","overflowTop","setOverflowTop","overflowBottom","setOverflowBottom","containerRef","useRef","bottomEdgeRef","topEdgeRef","handleResize","current","scrollHeight","clientHeight","scrollTop","root","threshold","bottomObserver","IntersectionObserver","isIntersecting","topObserver","bottomTarget","topTarget","observe","resizeObserver","ResizeObserver","unobserve","OverflowIndicator","edge","basis","css","overscrollBehavior","SwitchView","activeIndex","childCount","Children","count","validatedIndex","view","index","inView","ActionType","currentContent","reducer","mount","payload","content","unmount","close","ChatApiContext","createContext","buildResponse","flat","head","tail","relationships","buildRelationships","isArray","buildApi","app","path","get","fields","query","patch","post","ChatApiProvider","chat","services","groups","ChatContext","ChatProvider","useChannelMute","client","useChatContext","muted","setMuteStatus","muteStatus","updateMuteState","on","off","module","exports","hookCallback","some","hooks","arguments","input","prototype","call","isObject","hasOwnProp","isObjectEmpty","getOwnPropertyNames","k","isUndefined","isNumber","isDate","Date","res","arrLen","push","extend","valueOf","createUTC","format","locale","strict","createLocalOrUTC","utc","getParsingFlags","m","_pf","empty","unusedTokens","unusedInput","charsLeftOver","nullInput","invalidEra","invalidMonth","invalidFormat","userInvalidated","iso","parsedDateParts","era","meridiem","rfc2822","weekdayMismatch","isValid","_isValid","flags","parsedParts","isNowValid","isNaN","_d","getTime","invalidWeekday","_strict","bigHour","isFrozen","createInvalid","NaN","fun","len","momentProperties","updateInProgress","copyConfig","to","from","prop","val","momentPropertiesLen","_isAMomentObject","_i","_f","_l","_tzm","_isUTC","_offset","_locale","Moment","config","updateOffset","isMoment","msg","suppressDeprecationWarnings","deprecate","firstTime","deprecationHandler","arg","argLen","Error","stack","deprecations","deprecateSimple","isFunction","Function","mergeConfigs","parentConfig","childConfig","Locale","set","zeroFill","number","targetLength","forceSign","absNumber","Math","abs","pow","max","substr","formattingTokens","localFormattingTokens","formatFunctions","formatTokenFunctions","addFormatToken","token","padded","ordinal","localeData","formatMoment","expandFormat","array","match","mom","output","makeFormatFunction","invalidDate","replaceLongDateFormatTokens","longDateFormat","lastIndex","test","aliases","addUnitAlias","unit","shorthand","lowerCase","normalizeUnits","units","normalizeObjectUnits","inputObject","normalizedProp","normalizedInput","priorities","addUnitPriority","priority","isLeapYear","year","absFloor","ceil","floor","toInt","argumentForCoercion","coercedNumber","isFinite","makeGetSet","keepTime","set$1","month","date","daysInMonth","regexes","match1","match2","match3","match4","match6","match1to2","match3to4","match5to6","match1to3","match1to4","match1to6","matchUnsigned","matchSigned","matchOffset","matchShortOffset","matchWord","addRegexToken","regex","strictRegex","isStrict","getParseRegexForToken","RegExp","regexEscape","matched","p1","p2","p3","p4","tokens","addParseToken","tokenLen","addWeekParseToken","_w","addTimeToArrayFromToken","_a","YEAR","MONTH","DATE","HOUR","MINUTE","SECOND","MILLISECOND","WEEK","WEEKDAY","modMonth","o","monthsShort","months","monthsShortRegex","monthsRegex","monthsParse","defaultLocaleMonths","defaultLocaleMonthsShort","MONTHS_IN_FORMAT","defaultMonthsShortRegex","defaultMonthsRegex","handleStrictParse","monthName","ii","llc","toLocaleLowerCase","_monthsParse","_longMonthsParse","_shortMonthsParse","setMonth","dayOfMonth","min","getSetMonth","computeMonthsParse","cmpLenRev","shortPieces","longPieces","mixedPieces","_monthsRegex","_monthsShortRegex","_monthsStrictRegex","_monthsShortStrictRegex","daysInYear","parseTwoDigitYear","parseInt","getSetYear","createDate","h","M","ms","getFullYear","setFullYear","createUTCDate","UTC","getUTCFullYear","setUTCFullYear","firstWeekOffset","dow","doy","fwd","getUTCDay","dayOfYearFromWeeks","week","weekday","resYear","resDayOfYear","dayOfYear","weekOfYear","resWeek","weekOffset","weeksInYear","weekOffsetNext","shiftWeekdays","ws","n","concat","weekdaysMin","weekdaysShort","weekdays","weekdaysMinRegex","weekdaysShortRegex","weekdaysRegex","weekdaysParse","defaultLocaleWeekdays","defaultLocaleWeekdaysShort","defaultLocaleWeekdaysMin","defaultWeekdaysRegex","defaultWeekdaysShortRegex","defaultWeekdaysMinRegex","handleStrictParse$1","weekdayName","_weekdaysParse","_shortWeekdaysParse","_minWeekdaysParse","day","computeWeekdaysParse","minp","shortp","longp","minPieces","_weekdaysRegex","_weekdaysShortRegex","_weekdaysMinRegex","_weekdaysStrictRegex","_weekdaysShortStrictRegex","_weekdaysMinStrictRegex","hFormat","hours","lowercase","minutes","matchMeridiem","_meridiemParse","seconds","kInput","_isPm","isPM","_meridiem","pos","pos1","pos2","globalLocale","getSetHour","baseConfig","calendar","sameDay","nextDay","nextWeek","lastDay","lastWeek","sameElse","LTS","LT","L","LL","LLL","LLLL","dayOfMonthOrdinalParse","relativeTime","future","past","ss","mm","hh","dd","w","ww","MM","yy","meridiemParse","locales","localeFamilies","commonPrefix","arr1","arr2","minl","normalizeLocale","loadLocale","oldLocale","isLocaleNameSane","_abbr","aliasedRequire","getSetGlobalLocale","values","getLocale","defineLocale","abbr","_config","parentLocale","names","next","chooseLocale","checkOverflow","_overflowDayOfYear","_overflowWeeks","_overflowWeekday","extendedIsoRegex","basicIsoRegex","tzRegex","isoDates","isoTimes","aspNetJsonRegex","obsOffsets","UT","GMT","EDT","EST","CDT","CST","MDT","MST","PDT","PST","configFromISO","l","allowTime","dateFormat","timeFormat","tzFormat","string","exec","isoDatesLen","isoTimesLen","configFromStringAndFormat","configFromRFC2822","parsedArray","monthStr","dayStr","hourStr","minuteStr","secondStr","result","yearStr","weekdayStr","parsedInput","getDay","checkWeekday","obsOffset","militaryOffset","numOffset","hm","calculateOffset","setUTCMinutes","getUTCMinutes","defaults","configFromArray","currentDate","expectedWeekday","yearToUse","nowValue","now","_useUTC","getUTCMonth","getUTCDate","getMonth","getDate","currentDateArray","weekYear","temp","weekdayOverflow","curWeek","GG","W","E","createLocal","_week","gg","_dayOfYear","dayOfYearFromWeekInfo","_nextDay","ISO_8601","RFC_2822","skipped","stringLength","totalParsedInputLength","hour","isPm","meridiemHour","meridiemFixWrap","erasConvertYear","prepareConfig","preparse","tempConfig","bestMoment","scoreToBeat","currentScore","validFormatFound","bestFormatIsValid","configfLen","score","configFromStringAndArray","createFromInputFallback","configFromString","minute","second","millisecond","configFromObject","configFromInput","isUTC","prototypeMin","other","prototypeMax","pickBy","moments","ordering","Duration","duration","years","quarters","quarter","weeks","isoWeek","days","milliseconds","unitHasDecimal","orderLen","parseFloat","isDurationValid","_milliseconds","_days","_months","_data","_bubble","isDuration","absRound","round","separator","utcOffset","sign","offsetFromString","chunkOffset","matcher","parts","matches","cloneWithOffset","model","diff","clone","setTime","local","getDateOffset","getTimezoneOffset","isUtc","aspNetRegex","isoRegex","createDuration","ret","diffRes","base","parseIso","isBefore","positiveMomentsDifference","inp","isAfter","createAdder","direction","period","tmp","addSubtract","isAdding","invalid","subtract","isString","String","monthDiff","wholeMonthDiff","anchor","newLocaleData","defaultFormat","defaultFormatUtc","lang","MS_PER_SECOND","MS_PER_MINUTE","MS_PER_HOUR","MS_PER_400_YEARS","mod$1","dividend","divisor","localStartOfDate","utcStartOfDate","matchEraAbbr","erasAbbrRegex","computeErasParse","abbrPieces","namePieces","narrowPieces","eras","narrow","_erasRegex","_erasNameRegex","_erasAbbrRegex","_erasNarrowRegex","addWeekYearFormatToken","getter","getSetWeekYearHelper","weeksTarget","setWeekAll","dayOfYearData","erasNameRegex","erasNarrowRegex","erasParse","_eraYearOrdinalRegex","eraYearOrdinalParse","isoWeekYear","_dayOfMonthOrdinalParse","_ordinalParse","_dayOfMonthOrdinalParseLenient","getSetDayOfMonth","getSetMinute","getSetMillisecond","getSetSecond","parseMs","proto","preParsePostFormat","time","formats","arrayTest","dataTypeTest","isNumberOrStringArray","objectTest","propertyTest","properties","propertyLen","isMomentInputObject","isCalendarSpec","sod","startOf","calendarFormat","asFloat","that","zoneDelta","endOf","startOfDate","isoWeekday","inputString","postformat","withoutSuffix","humanize","fromNow","toNow","invalidAt","localInput","isBetween","inclusivity","localFrom","localTo","isSame","inputMs","isSameOrAfter","isSameOrBefore","parsingFlags","prioritized","unitsObj","u","getPrioritizedUnits","prioritizedLen","toArray","toObject","toDate","toISOString","keepOffset","inspect","prefix","zone","isLocal","Symbol","for","toJSON","unix","creationData","eraName","since","until","eraNarrow","eraAbbr","eraYear","dir","isoWeeks","weekInfo","weeksInWeekYear","isoWeeksInYear","isoWeeksInISOWeekYear","parseWeekday","parseIsoWeekday","keepLocalTime","keepMinutes","localAdjust","_changeInProgress","parseZone","tZone","hasAlignedHourOffset","isDST","isUtcOffset","zoneAbbr","zoneName","dates","isDSTShifted","_isDSTShifted","array1","array2","dontConvert","lengthDiff","diffs","compareArrays","proto$1","get$1","field","setter","listMonthsImpl","out","listWeekdaysImpl","localeSorted","shift","_calendar","_longDateFormat","formatUpper","tok","_invalidDate","_ordinal","isFuture","_relativeTime","pastFuture","source","_eras","isFormat","_monthsShort","_monthsParseExact","firstDayOfYear","firstDayOfWeek","_weekdays","_weekdaysMin","_weekdaysShort","_weekdaysParseExact","_fullWeekdaysParse","isLower","Infinity","langData","mathAbs","addSubtract$1","absCeil","daysToMonths","monthsToDays","makeAs","alias","asMilliseconds","asSeconds","asMinutes","asHours","asDays","asWeeks","asMonths","asQuarters","asYears","makeGetter","thresholds","substituteTimeAgo","abs$1","toISOString$1","totalSign","ymSign","daysSign","hmsSign","total","toFixed","proto$2","monthsFromDays","argWithSuffix","argThresholds","withSuffix","th","assign","posNegDuration","relativeTime$1","toIsoString","version","updateLocale","tmpLocale","relativeTimeRounding","roundingFunction","relativeTimeThreshold","limit","myMoment","HTML5_FMT","DATETIME_LOCAL","DATETIME_LOCAL_SECONDS","DATETIME_LOCAL_MS","TIME","TIME_SECONDS","TIME_MS","factory","BUTTON_STYLE_BASE_OVERRIDES","getPrimaryButtonStyleOverrides","disabled","spinner","focus","MARK_READ","EVENTS","useChat","useContext","useChatApi","useChatConnectedPeople","setPeople","loading","api","switchPerson","SERVICES_INITIAL_VALUES","plan_id","teams","INITIAL_VALUES","Services","SUBHEADING_STYLES","Subheading","Section","AppGroups","WrapView","team","Badge","source_identifier","Groups","appGroups","PCO_DELETED","badges","TAPESTRY_AVATAR_SIZE","lg","md","sm","avatar","isPerson","TapestryAvatar","image","isChatUser","StreamAvatar","Person","child","Child","Adult","COLUMNS","ChildNotice","childPeople","setOpen","summary","GridView","columns","tooltip","Collapse","gridColumnStart","People","p","MuteChannel","ToggleSwitch","isChecked","ariaLabel","unmute","mute","RemoveChannel","isRemoveHot","setRemoveHot","isRemoving","setRemoving","switchToChannelListView","Settings","isRemovable","Title","isEditable","setTitle","Input","maxLength","onChange","onBlur","onKeyDown","blur","Details","chatGroups","setGroups","group","_group$source_app_nam","_acc$group$source_app","_group$source_type","source_app_name","source_type","useChatGroups","chatMembers","members","setMembers","pcoDeletedMembers","member","user","pco_deleted","stream_member_id","useChatMembers","chatMemberAbility","ability","setAbility","canDelete","canUpdate","can_delete","can_update","useChatMemberAbility","ChannelDetailsView","isChannelDetailsViewActive","switchToChannelView","BetaBadge","ChannelListBlankState","ChannelListBlankStateIcon","strokeWidth","strokeMiterlimit","LinkedAccountSelect","currentPersonId","setConnectedPeople","selected","setSelected","switching","setSwitching","anyConnectedUnread","unread_count","sortedByOrgName","currentPerson","Select","emptyValue","matchWidths","renderValue","Spinner","SwitchAccountsWarning","connectedPerson","Option","LoadingIndicator","Menu","marginHorizontal","LoadingErrorIndicator","align","switchToNewChatShortcutsView","chatAppGrants","useChatAppGrants","appGrants","setAppGrants","grants","grant","app_name","canCreateChat","create_conversations","displayNewConversationButton","PcoAppNames","ChannelMeta","resourceType","resourceId","_metadata$names","metadata","_metadata$names2","Group","borderLeftWidth","Tooltip","openDelay","ChannelMetas","_channel$data","pco_apps","metas","pco_app","getImage","_member$user","SCAvatar","shape","AvatarGroup","UnreadBadge","clampedValue","Preview","lastMessage","setActiveChannel","setActionsOpenForChannel","actionsOpenForChannel","isUnread","isUnreadable","markRead","markUnread","unreadCount","useChannelUnread","setUnreadCount","updateUnread","_event$user","_client$user","countUnread","lastReadMessage","findLast","xs","_msg$user","userID","latestMessages","message_id","channelActionsOpen","handleChannelClick","displayTitle","borderBottomColor","borderBottomWidth","minHeight","tabIndex","WebkitBoxOrient","WebkitLineClamp","_lastMessage$user","_lastMessage$attachme","attachmentCount","attachments","deleted_at","getLastMessagePreview","_channel$state","lastMessageCreatedAt","last_message_at","conversationCreatedAt","created_at","moment","isToday","isThisWeek","isThisYear","datetimeFmt","formatDate","getTimeStamp","Dropdown","iconRight","lockScrollWhileOpen","onClose","onOpen","placement","popoverProps","shouldFlip","onSelect","ChannelListView","channelsLoading","useChannelsLoading","setLoading","channelsQueryState","queryInProgress","queryState","filters","$or","$exists","created_by_id","$in","handlePotentialChannelAddingEvent","setChannels","eventChannel","newChannel","watch","channels","thickness","trackColor","ChannelList","setActiveChannelOnMount","EmptyStateIndicator","onMessageNew","onAddedToChannel","Paginator","InfiniteScroll","CustomEmptyStateIndicator","InjectableCustomHeader","switchToChannelDetailsView","headerRef","useMessageListScrollShadows","listElement","scrollToBottom","useMessageListContext","_headerRef$current","headerHeight","offsetHeight","handleScroll","CustomHeader","SHARED_TOOLTIP_PROPS","SHARED_LAYOUT_PROPS","CENTER","HORIZONTAL","CustomMessageStatus","MessageStatus","MessageReadStatus","CustomMessageReadStatus","MessageDeliveredStatus","CustomMessageDeliveredStatus","readBy","useMessageContext","useTranslationContext","tooltipTitle","getReadByTooltipText","mapToUserNameOrId","justReadByMe","readByCount","_client$user2","customReactionOptions","init","emojiSearchIndex","SearchIndex","MessageInput","handleSubmit","isUploadEnabled","maxFilesLeft","numberOfUploads","uploadNewFiles","useMessageInputContext","focused","setFocused","multipleUploads","useChannelStateContext","getRootProps","isDragActive","isDragReject","useDropzone","multiple","noClick","onDrop","isChildOfModal","useIsChildOfModal","wrapInputRef","useAutoFocus","borderTopWidth","FileUploadUI","outlineOffset","outlineStyle","refKey","DropzoneUI","AttachmentPreviewList","ChatAutoComplete","placeholder","onFocus","EmojiPicker","pickerProps","previewPosition","nanoid","inputEl","getElementById","htmlFor","click","UploadButton","onFileChange","borderStyle","setIsChildOfModal","modal","_wrapInputRef$current","_input$value","_input$value2","setSelectionRange","ChannelView","_channel$data2","isChannelViewActive","updateCount","handleUpdate","hasMessages","sharedProps","Channel","EditMessageInput","reactionOptions","doMarkReadRequest","logChatPromiseExecution","Window","WithMessages","NoMessages","StreamMessageInput","disableMentions","MessageList","messageActions","getAllPcoMeta","elements","querySelectorAll","property","element","substring","observer","MutationObserver","prevState","nextState","hasTriggeredObserve","usePcoMeta","childList","subtree","GroupsShortcuts","isLoading","isError","shouldRunInitialLoad","pcoMeta","per_page","nextLink","setNextLink","setIsLoading","setIsError","hasMore","loadGroups","results","headerImage","header_image","membershipsCount","memberships_count","canCreateConversation","can_create_conversation","prev","links","finally","loadMore","useMyGroups","setFilterValues","switchToNewGroupsChatView","showAll","setShowAll","filteredGroups","visibleGroups","displayGroupsWithoutChatPermissionDisclaimer","thumbnail","borderBottomStyle","alt","src","objectFit","HasGroupsWithoutChatPermission","ToggleGroups","BlankState","groupId","totalCount","include","setTotalCount","included","avatar_url","first_name","last_name","total_count","useNewGroupChatPeople","somePeople","someChildPeople","ServicesChatShortcuts","switchToNewServicesChatView","setSetshowAll","serviceTypeTeams","setData","Chat","teams_i_lead","service_type_name","team_name","service_type","service_type_id","team_id","serviceTypeEntry","useServicesChatShortcuts","NoTeams","iconLeft","NewChatShortcutsView","isNewChatShortcutsViewActive","NewChatViewFooter","buttonDisabled","showSpinner","onButtonClick","NewChatViewHeader","NewGroupsChatView","_filterValues$Groups","isCreating","setIsCreating","filterValues","findAndSwitchToChannel","wrap","InputLabel","controls","required","NEW_SERVICES_CHAT_FOOTER_TEXT","createChat","isFetching","setCreating","setFetching","cache","filterParams","fetchPeople","getPeople","useChatPeople","peopleCount","toSelectOptions","label","Plans","setOptions","isEnabled","setEnabled","fetchingCount","setFetchingCount","isFetchable","isInvalid","plans","prevOptions","availableOptions","uniqOptions","option","defaultValue","characterMap","chars","allAccents","firstAccent","removeAccents","removeAccents_1","rankings","CASE_SENSITIVE_EQUAL","EQUAL","STARTS_WITH","WORD_STARTS_WITH","CONTAINS","ACRONYM","MATCHES","NO_MATCH","matchSorter","defaultBaseSortFn","rankedValue","items","_options$threshold","_options$baseSort","baseSort","_options$sorter","sorter","matchedItems","aRank","rank","aKeyIndex","keyIndex","bRank","bKeyIndex","sortRankedValues","rankingInfo","getMatchRanking","keyThreshold","valuesToRank","allValues","J","getKeyAttributes","itemValues","getItemValues","I","itemValue","getAllValuesToRank","_ref3","newRank","newRankedValue","minRanking","maxRanking","getHighestRanking","_rankingInfo$keyThres","testString","stringToRank","prepareValueForComparison","startsWith","acronym","wordInString","splitByHyphenWord","matchingInOrderCharCount","charNumber","findMatchingCharacter","matchChar","firstIndex","getClosenessRanking","_ref4","keepDiacritics","nestedKey","nestedValues","nestedItem","nestedValue","getNestedValues","defaultKeyAttributes","teamOptionSort","aService","aTeam","order","bService","bTeam","Teams","searchTerm","setSearchTerm","unselected","useTeamOptions","isSelectAll","unselectedGroups","groupTeamOptions","_option$group","renderRight","Combobox","Popover","openOnFocus","closeOnSelect","onClear","renderLeft","groupName","groupOptions","idx","groupDisplayName","word","getGroupDisplayName","tooManyOptionsForSelectAll","handleBlur","inline","italic","PeopleBlankState","ServicesChatOptions","isFiltering","isPlansActive","first","useServicesChatFilter","NewServicesChatView","isNewServicesChatViewActive","ChatController","useChatFilter","_setFilterValuesInner","setActiveIndex","isChannelListViewActive","isNewGroupsChatViewActive","stream_channel_id","queryChannels","$eq","ChatComponent","chatClient","StreamChat","ChatTool","chatStreamUser","streamUser","setChatClient","didUserConnectInterrupt","api_key","connectionPromise","connectUser","tokenProvider","disconnectUser","log","useClient","static","HeadingIcon","sectionName","currentAppName","lowerCaseSectionName","Logo","markOnly","HitResult","hit","objectID","CustomSearchBox","indexName","refine","setQuery","useSearchBox","hits","useHits","category","resultIndex","renderTo","selectedValue","handleSearchSelect","newTab","DocumentationSearch","searchClient","algoliasearch","InstantSearch","Configure","hitsPerPage","components","Helpdesk","helpdeskConfig","UiExtensionFirstPartyComponent","extensionId","loadingFallback","additionalComponents","CalendlyWidget","currentPageParams","Eyebrow","MarkReadDot","isRead","hoverRef","isHover","elementRef","setValue","handleMouseEnter","handleMouseLeave","node","useHover","NotificationItem","mobile","onCreateTask","onMarkAsRead","onToggleRead","showBottomBorder","notification","createdAt","link","setIsActive","datetimeFmtOptions","timeZone","flexGrow","borderLeft","Calendar","Giving","Publishing","Registrations","taskUrl","datetime","NotificationsMenuBlankState","description","buildNotificationFromApiResponse","_findInIncluded","_findInIncluded$attri","_findInIncluded2","_findInIncluded2$attr","_resp$relationships","_resp$relationships$w","_resp$relationships$w2","_resp$attributes$read","findInIncluded","notificationData","web_payloads","read_at","SectionHeaderButton","SectionHeaderTitle","showRead","setShowRead","defaultStyle","transitionStyles","entering","handleCreateTask","handleMarkAllAsRead","handleMarkAsRead","handleToggleRead","hasError","read","useNotifications","setNotifications","setHasError","notificationsOrganizer","fetchNotifications","exception","extractPayloadFromJoltMessage","updateStateFromJoltMessage","message","fetchNotification","candidate","removeNotification","joltMessageNotificationDataPayload","newNotifications","markAsReadOrUnread","notificationIds","readOrUnread","unreadIds","TransitionGroup","exit","Transition","NavLinkWithBadge","badge","TRStackView","Tasks","isOpen","onReceiveWorker","openDrawer","currentPath","onChangePath","latestJoltMessage","setLatestJoltMessage","requestedJoltChannel","setRequestedJoltChannel","connection_id","handleJoltMessage","timestamp","pendoTrackEvent","pendo","track","requestJoltChannel","trackPendo","TOOLS_MAP","toolsRouteMap","fromEntries","v","Toolbar","autoMountTool","onReceiveTasksWorker","toolbarFragmentRoute","onChangeToolbarFragmentRoute","clearRoute","toolbarFragment","updateFragment","getFragment","hash","onHashChange","useFragmentKey","onChangeRoute","tool","nextHash","history","replaceState","useFragmentRouting","toolStateCookie","setToolStateCookie","cookie","setCookie","cookieState","setCookieState","decodeURIComponent","readCookie","newValue","encodeURIComponent","useCookie","_unused","useJSONCookie","autoMountedTool","dispatch","useReducer","mounted","scrollTo","openHelpdesk","handleToolOnClick","loginSettingsUrl","profileUrl","HelpDeskTool","helpdeskOnClick","toggleDrawer","setToolAndOpenDrawer","useChatStreamUser","onConnectionFailure","setStreamUser","chatJoltChannel","fetchStreamUser","setupStreamUser","attrs","TOOLS","UserProfile","OriginalUserProfile","isMobile","getMatches","matchMedia","setMatches","handleChange","addListener","removeListener","useMediaQuery","visibleWindowHeight","setVisibleWindowHeight","useLayoutEffect","innerHeight","_document$getElementB","behavior","toolSpecificProps","currentToolProps","indicatorState","UiExtensionDataContext","borderTopColor","borderLeftColor","outlineColor","outlineWidth","Tool"],"mappings":"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CL,EAAK,IACL,EAAK,IACL,EAAK,IACL,EAAK,IACL,EAAK,IACL,EAAK,IACL,EAAK,IACL,EAAK,IACL,GAAM,IACN,GAAM,IACN,EAAK,IACL,EAAK,IACL,EAAK,IACL,EAAK,IACL,EAAK,IACL,EAAK,IACL,EAAK,IACL,EAAK,IACL,EAAK,IACL,EAAK,IACL,EAAK,IACL,EAAK,IACL,EAAK,IACL,EAAK,IACL,EAAK,IACL,EAAK,IACL,EAAK,IACL,EAAK,IACL,EAAK,IACL,EAAK,IACL,EAAK,IACL,EAAK,IACL,EAAK,IACL,EAAK,IACL,EAAK,IACL,EAAK,IACL,EAAK,IACL,EAAK,IACL,EAAK,IACL,EAAK,IACL,EAAK,IACL,EAAK,IACL,EAAK,IACL,EAAK,IACL,EAAK,IACL,EAAK,IACL,EAAK,IACL,EAAK,IACL,EAAK,IACL,EAAK,IACL,EAAK,KACL,EAAK,KACL,EAAK,IACL,EAAK,IACL,EAAK,IACL,EAAK,IACL,EAAK,IACL,EAAK,IACL,GAAM,IACN,GAAM,IACN,EAAK,IACL,EAAK,IACL,EAAK,IACL,EAAK,IACL,EAAK,IACL,EAAK,IACL,EAAK,IACL,EAAK,IACL,EAAK,IACL,EAAK,IACL,EAAK,IACL,EAAK,IACL,GAAM,IACN,GAAM,IACN,EAAK,IACL,EAAK,IACL,EAAK,IACL,EAAK,IACL,EAAK,IACL,EAAK,IACL,EAAK,IACL,GAAM,IACN,GAAM,IACN,EAAK,IACL,EAAK,IACL,EAAK,IACL,EAAK,IACL,EAAK,IACL,EAAK,IACL,EAAK,KACL,EAAK,KACL,GAAM,IACN,GAAM,IACN,EAAK,IACL,EAAK,IACL,EAAK,IACL,EAAK,IACL,EAAK,IACL,EAAK,IACL,GAAM,IACN,GAAM,IACN,EAAK,IACL,EAAK,IACL,EAAK,IACL,EAAK,IACL,EAAK,IACL,EAAK,IACL,EAAK,IACL,EAAK,IACL,EAAK,IACL,EAAK,IACL,EAAK,IACL,EAAK,IACL,EAAK,IACL,EAAK,IACL,EAAK,IACL,EAAK,IACL,EAAK,IACL,EAAK,IACL,EAAK,IACL,EAAK,IACL,GAAM,IACN,GAAM,IACN,EAAK,IACL,EAAK,IACL,EAAK,IACL,EAAK,IACL,EAAK,IACL,EAAK,IACL,EAAK,IACL,EAAK,IACL,EAAK,IACL,EAAK,IACL,EAAK,IACL,EAAK,IACL,EAAK,IACL,EAAK,IACL,GAAM,IACN,GAAM,IACN,EAAK,IACL,EAAK,IACL,EAAK,IACL,EAAK,IACL,GAAM,IACN,GAAM,IACN,EAAK,IACL,EAAK,IACL,EAAK,IACL,GAAM,IACN,GAAM,IACN,EAAK,IACL,EAAK,IACL,EAAK,IACL,EAAK,IACL,EAAK,IACL,EAAK,IACL,EAAK,IACL,EAAK,IACL,EAAK,IACL,EAAK,IACL,EAAK,IACL,EAAK,IACL,EAAK,IACL,EAAK,IACL,EAAK,IACL,EAAK,IACL,EAAK,IACL,EAAK,IACL,EAAK,IACL,EAAK,IACL,EAAK,IACL,EAAK,IACL,EAAK,IACL,EAAK,IACL,EAAK,IACL,EAAK,IACL,EAAK,IACL,EAAK,IACL,EAAK,IACL,EAAK,IACL,EAAK,IACL,EAAK,IACL,EAAK,IACL,EAAK,IACL,EAAK,KACL,EAAK,KACL,EAAK,IACL,EAAK,IACL,EAAK,KACL,EAAK,KACL,EAAK,IACL,EAAK,IACL,EAAK,IACL,EAAK,IACL,GAAM,IACN,GAAM,IACN,EAAK,IACL,EAAK,IACL,EAAK,IACL,EAAK,IACL,GAAM,IACN,GAAM,IACN,GAAM,IACN,GAAM,IACN,GAAM,IACN,GAAM,IACN,EAAK,IACL,EAAK,IACL,EAAK,IACL,EAAK,IACL,EAAK,IACL,EAAK,IACL,EAAK,IACL,EAAK,IACL,EAAK,IACL,EAAK,IACL,EAAK,IACL,EAAK,IACL,EAAK,IACL,EAAK,IACL,EAAK,IACL,EAAK,IACL,EAAK,IACL,EAAK,IACL,EAAK,IACL,EAAK,IACL,EAAK,IACL,EAAK,IACL,EAAK,IACL,EAAK,IACL,GAAM,IACN,GAAM,IACN,GAAM,IACN,GAAM,IACN,GAAM,IACN,GAAM,IACN,GAAM,IACN,GAAM,IACN,EAAK,IACL,EAAK,IA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"}
1
+ {"version":3,"file":"topbar.modern.js","sources":["../modules/api_request.ts","../modules/hooks/jolt.ts","../modules/utils.ts","../modules/hooks/use_local_storage.ts","../modules/hooks/use_notifications_has_unread.ts","../modules/store.ts","../modules/apps_provider.tsx","../modules/hooks/use_topbar_api.ts","../modules/hooks/use_debounce.ts","../modules/connected_people_provider.tsx","../modules/display_switch.tsx","../modules/mono_app_symbols.tsx","../modules/mono_app_icon.tsx","../modules/mono_app_text.tsx","../modules/mono_app_name.tsx","../modules/styles.tsx","../modules/symbols.tsx","../modules/unbutton.tsx","../modules/components/apps_button.tsx","../modules/color_app_squircles.tsx","../modules/color_app_icon.tsx","../modules/get_apps_switch_product_path.tsx","../modules/components/hoverable_list_item.tsx","../modules/components/outsider.tsx","../modules/components/popover_root.tsx","../modules/components/popup.tsx","../modules/components/apps_menu.tsx","../modules/formatters.tsx","../modules/hooks/use_store.tsx","../modules/styled_root.tsx","../modules/colors.tsx","../modules/components/popup_root.tsx","../modules/not_small_topbar/user_menu.tsx","../modules/components/hoverable.tsx","../modules/not_small_topbar/user_menu_trigger.tsx","../modules/not_small_topbar/index.tsx","../modules/platform_announcements.tsx","../modules/product_announcement.tsx","../modules/avatar.tsx","../modules/client_storage.tsx","../modules/small_topbar/account_settings_link.tsx","../modules/small_topbar/close_menu_button.tsx","../modules/get_login_profile_path.tsx","../modules/mfa_status.tsx","../modules/theme.ts","../modules/small_topbar/user_profile_menu.tsx","../modules/small_topbar/index.tsx","../modules/hooks/use_cookie.tsx","../modules/toolbar/components/drawer.tsx","../modules/toolbar/components/drawer_header.tsx","../modules/toolbar/components/drawer_heading.tsx","../modules/toolbar/components/indicator_dot.tsx","../modules/toolbar/components/scroll_container.tsx","../modules/toolbar/components/switch_view.tsx","../modules/toolbar/hooks/use_toolbar_reducer.tsx","../modules/toolbar/tools/chat/chat_api_context.tsx","../modules/toolbar/tools/chat/chat_context.tsx","../modules/toolbar/tools/chat/hooks/use_channel_mute.ts","../node_modules/moment/moment.js","../modules/toolbar/tools/chat/constants.ts","../modules/toolbar/tools/chat/utils/index.ts","../modules/toolbar/tools/chat/hooks/use_channel_unread.ts","../modules/toolbar/tools/chat/hooks/use_chat.tsx","../modules/toolbar/tools/chat/hooks/use_chat_api.ts","../modules/toolbar/tools/chat/hooks/use_chat_connected_people.ts","../modules/toolbar/tools/chat/hooks/use_chat_filter.ts","../modules/toolbar/tools/chat/hooks/use_chat_stream_user.ts","../modules/toolbar/tools/chat/components/ui/subheading.tsx","../modules/toolbar/tools/chat/components/channel_details_view/section.tsx","../modules/toolbar/tools/chat/components/channel_details_view/groups.tsx","../modules/toolbar/tools/chat/components/channel_details_view/hooks/use_chat_members.ts","../modules/toolbar/tools/chat/components/person_list_item/avatar.tsx","../modules/toolbar/tools/chat/components/person_list_item/person.tsx","../modules/toolbar/tools/chat/components/child_notice.tsx","../modules/toolbar/tools/chat/components/channel_details_view/people.tsx","../modules/toolbar/tools/chat/components/channel_details_view/settings.tsx","../modules/toolbar/tools/chat/components/channel_details_view/title.tsx","../modules/toolbar/tools/chat/components/channel_details_view/index.tsx","../modules/toolbar/tools/chat/components/channel_details_view/hooks/use_chat_groups.ts","../modules/toolbar/tools/chat/components/channel_details_view/hooks/use_chat_member_ability.ts","../modules/toolbar/tools/chat/components/beta_badge.tsx","../modules/toolbar/tools/chat/components/channel_list_view/channel_list_blank_state.tsx","../modules/toolbar/tools/chat/components/channel_list_view/linked_account_select.tsx","../modules/toolbar/tools/chat/components/channel_list_view/loading_error_indicator.tsx","../modules/toolbar/tools/chat/components/channel_list_view/list.tsx","../modules/toolbar/tools/chat/hooks/use_chat_app_grants.ts","../modules/toolbar/tools/chat/components/channel_metas.tsx","../modules/toolbar/tools/chat/components/channel_list_view/avatar_group.tsx","../modules/toolbar/tools/chat/components/channel_list_view/preview.tsx","../modules/toolbar/tools/chat/components/channel_list_view/index.tsx","../modules/toolbar/tools/chat/hooks/use_channels_loading.ts","../modules/toolbar/tools/chat/components/channel_view/custom_empty_state_indicator.tsx","../modules/toolbar/tools/chat/components/channel_view/custom_header.tsx","../modules/toolbar/tools/chat/components/channel_view/hooks/use_message_list_scroll_shadows.ts","../modules/toolbar/tools/chat/components/channel_view/custom_message_status.tsx","../node_modules/@popperjs/core/lib/enums.js","../modules/toolbar/tools/chat/components/channel_view/custom_reaction_options.tsx","../modules/toolbar/tools/chat/components/channel_view/emoji_data.ts","../modules/toolbar/tools/chat/components/channel_view/message_input.tsx","../modules/toolbar/tools/chat/components/channel_view/index.tsx","../modules/toolbar/hooks/use_pco_meta.ts","../modules/toolbar/tools/chat/components/groups/groups_shortcuts.tsx","../modules/toolbar/tools/chat/components/groups/hooks/use_my_groups.ts","../modules/toolbar/tools/chat/components/groups/people.tsx","../modules/toolbar/tools/chat/components/groups/hooks/use_new_group_chat_people.ts","../modules/toolbar/tools/chat/components/services/service_chat_shortcuts.tsx","../modules/toolbar/tools/chat/components/services/hooks/use_services_chat_shortcuts.ts","../modules/toolbar/tools/chat/components/new_chat_shortcuts_view.tsx","../modules/toolbar/tools/chat/components/new_chat_view/footer.tsx","../modules/toolbar/tools/chat/components/new_chat_view/header.tsx","../modules/toolbar/tools/chat/components/new_groups_chat_view.tsx","../modules/toolbar/tools/chat/components/services/constants.ts","../modules/toolbar/tools/chat/components/services/people.tsx","../modules/toolbar/tools/chat/components/services/hooks/use_chat_people.ts","../modules/toolbar/tools/chat/components/services/plans.tsx","../node_modules/@babel/runtime/helpers/esm/extends.js","../node_modules/remove-accents/index.js","../node_modules/match-sorter/dist/match-sorter.esm.js","../modules/toolbar/tools/chat/components/services/utils/index.ts","../modules/toolbar/tools/chat/components/services/teams.tsx","../modules/toolbar/tools/chat/components/services/hooks/use_team_options.ts","../modules/toolbar/tools/chat/components/services/people_blank_state.tsx","../modules/toolbar/tools/chat/components/services/services_chat_options.tsx","../modules/toolbar/tools/chat/components/services/hooks/use_services_chat_filter.ts","../modules/toolbar/tools/chat/components/new_services_chat_view.tsx","../modules/toolbar/tools/chat/index.tsx","../modules/toolbar/tools/chat/hooks/use_client.ts","../modules/toolbar/tools/helpdesk/components/CustomSearchBox.tsx","../modules/toolbar/tools/helpdesk/components/DocumentationSearch.tsx","../modules/toolbar/tools/helpdesk/index.tsx","../modules/components/eyebrow.tsx","../modules/components/notification_item.tsx","../modules/hooks/use_hover.tsx","../modules/components/notifications_menu_blank_state.tsx","../modules/hooks/use_notifications.ts","../modules/toolbar/tools/notifications.tsx","../modules/toolbar/tools/tasks.tsx","../modules/toolbar/index.tsx","../modules/hooks/use_fragment_routing.tsx","../modules/toolbar/components/user_profile.tsx","../modules/hooks/use_media_query.tsx"],"sourcesContent":["export type Fetch = typeof fetch\n\nexport const defaultFetch: Fetch = (url, options) => {\n return fetch(url, { credentials: \"include\", mode: \"cors\", ...options })\n}\n\nexport const railsCsrfFetch: Fetch = (url, { headers, ...rest }) => {\n return fetch(url, {\n headers: { ...headers, \"X-CSRF-Token\": inferRailsCsrfToken() },\n ...rest,\n credentials: \"include\",\n mode: \"cors\",\n })\n}\n\nfunction inferRailsCsrfToken(): string | null {\n return (\n window?.Rails?.csrfToken() ||\n document\n .querySelector('meta[name=\"csrf-token\"]')\n ?.getAttribute(\"content\") ||\n null\n )\n}\n\nexport default function apiRequest<T = any>(\n fetch: Fetch,\n url: string,\n { method = \"GET\", data = null } = {}\n): Promise<{ json: T; ok: boolean; response: Response }> {\n const options: RequestInit = {\n headers: {\n Accept: \"application/json\",\n \"Content-Type\": \"application/json\",\n },\n method,\n redirect: \"follow\",\n }\n\n if (data && method !== \"GET\") {\n options.body = JSON.stringify(data)\n }\n\n return fetch(url, options).then(\n (response) =>\n response\n .json()\n .then((json) => ({ json, ok: response.ok, response }))\n .catch(() => ({ json: null, ok: response.ok, response })),\n (e) => {\n console.warn(e)\n\n return { json: null, ok: false, response: null }\n }\n )\n}\n","import Jolt from \"@planningcenter/jolt-client\"\nimport { JoltSubscription } from \"@planningcenter/jolt-client/dist/types/JoltSubscription\"\nimport pcoUrl, * as PCO_URL from \"@planningcenter/url\"\nimport React, { useEffect } from \"react\"\n\nimport apiRequest, { railsCsrfFetch } from \"../api_request\"\nimport { JoltMessage } from \"../interfaces\"\n\nconst wssUrl = (env: PCO_URL.Environment) => {\n switch (env) {\n case \"development\":\n case \"test\":\n return \"wss://1csnwvu025.execute-api.us-east-1.amazonaws.com/v1/\"\n case \"staging\":\n return \"wss://xvk2ac1o3l.execute-api.us-east-1.amazonaws.com/v1/\"\n default:\n return \"wss://yxe88gasn3.execute-api.us-east-1.amazonaws.com/v1/\"\n }\n}\n\ntype UseJoltChannelSubscriptionProps = {\n channelName: string\n enableJoltLogging?: boolean\n enabled?: boolean\n env: PCO_URL.Environment\n fetchSubscribeToken: (cid: string) => Promise<string>\n joltPromise?: () => Promise<Jolt | undefined | void>\n wssEndpoint?: string\n}\n\nexport const useJoltChannelSubscription = ({\n channelName,\n enableJoltLogging = false,\n enabled = true,\n env,\n wssEndpoint,\n fetchSubscribeToken,\n joltPromise = () => Promise.resolve(),\n}: UseJoltChannelSubscriptionProps) => {\n const [joltChannel, setJoltChannel] = React.useState<JoltSubscription>()\n const [joltInstance, setJoltInstance] = React.useState<Jolt>()\n const [usingIndependentJoltInstance, setUsingIndependentJoltInstance] =\n React.useState(false)\n\n const subscribeToJoltChannel = React.useCallback(async () => {\n let jolt = await joltPromise().then((j) => j)\n\n const fetchSubscribeTokenFn = async (_channel: string, cid: string) =>\n fetchSubscribeToken(cid)\n\n const fetchAuthTokenFn = async () =>\n apiRequest(\n railsCsrfFetch,\n `${window.location.origin}/~api/notifications/v2/me/notifications_jolt_authorize`,\n {\n data: { data: { attributes: {} } },\n method: \"POST\",\n }\n ).then(({ json }) => json.data.id)\n\n if (!jolt) {\n setUsingIndependentJoltInstance(true)\n jolt = new Jolt(\n wssEndpoint || wssUrl(env),\n {\n fetchAuthTokenFn,\n fetchSubscribeTokenFn,\n },\n { logToConsole: enableJoltLogging }\n )\n }\n\n const channel =\n jolt.subscriptions.find((s) => s.channel === channelName) ||\n jolt.subscribe(channelName, { fetchSubscribeTokenFn })\n setJoltChannel(channel)\n setJoltInstance(jolt)\n }, [apiRequest, channelName, env, pcoUrl, railsCsrfFetch])\n\n React.useEffect(() => {\n if (enabled) {\n subscribeToJoltChannel()\n }\n }, [enabled, subscribeToJoltChannel])\n\n React.useEffect(() => {\n const pcoPageExpiredHandler = (event) => {\n if (!event.data.hasOwnProperty(\"PCOPageExpiredCurrentPersonACID\")) return\n if (\n event.data.PCOPageExpiredCurrentPersonACID ===\n window?.pcoPageExpired?.currentPersonACID\n )\n return\n if (joltInstance) joltInstance.disconnect()\n }\n\n window.addEventListener(\"message\", pcoPageExpiredHandler)\n return () => window.removeEventListener(\"message\", pcoPageExpiredHandler)\n }, [joltInstance])\n\n React.useEffect(() => {\n return () => {\n if (joltInstance && usingIndependentJoltInstance) {\n joltInstance.disconnect()\n }\n }\n }, [joltInstance])\n\n return joltChannel\n}\n\nexport const useJoltEffect = (\n channelSubscription: JoltSubscription,\n eventName: string,\n callback: (data: JoltMessage) => void\n) => {\n return useEffect(() => {\n if (channelSubscription) {\n channelSubscription.bind(eventName, callback)\n\n return () => channelSubscription.unbind(eventName, callback)\n } else {\n return () => void 0\n }\n }, [channelSubscription, callback])\n}\n","export const capitalize = (s: string) => s.charAt(0).toUpperCase() + s.slice(1)\n\nexport const HSLtoHSLA = (hsl: string, a: number = 1) => {\n const hslArray = hsl.replace(/[a-z()%]/g, \"\").split(\" \")\n const h = hslArray[0]\n const s = hslArray[1]\n const l = hslArray[2]\n\n return `hsla(${h}, ${s}%, ${l}%, ${a})`\n}\n\nexport const debounce = (func, wait) => {\n let timeout\n\n return function (...args: any) {\n const context = this\n\n const later = () => {\n timeout = null\n func.apply(context, args)\n }\n\n clearTimeout(timeout)\n timeout = setTimeout(later, wait)\n\n if (!timeout) {\n func.apply(context, args)\n }\n }\n}\n\nexport function shallowCompare<O extends object>(a: O, b: O) {\n return (\n Object.keys(a).length === Object.keys(b).length &&\n Object.entries(a).every(([key, value]) => b[key] !== value)\n )\n}\n","import { useEffect, useState } from \"react\"\n\n// Adapted from https://usehooks.com/useLocalStorage\nfunction useLocalStorage(key: string, initialValue: any) {\n // State to store our value\n // Pass initial state function to useState so logic is only executed once\n const [storedValue, setStoredValue] = useState(() => {\n try {\n // Get from local storage by key\n const item = window.localStorage.getItem(key)\n\n // Parse stored json or if none return initialValue\n return item ? JSON.parse(item) : initialValue\n } catch (error) {\n // If error also return initialValue\n return initialValue\n }\n })\n\n // Reflect the state into localStorage as a side effect.\n const localStorageRepresentation = JSON.stringify(storedValue)\n useEffect(() => {\n window.localStorage.setItem(key, localStorageRepresentation)\n }, [key, localStorageRepresentation])\n\n // When we are done with this key, drop it from localStorage completely\n const dropKey = () => window.localStorage.removeItem(key)\n\n return { dropKey, setStoredValue, storedValue }\n}\n\nexport default useLocalStorage\n","import { JoltSubscription } from \"@planningcenter/jolt-client/dist/types/JoltSubscription\"\nimport * as PCO_URL from \"@planningcenter/url\"\nimport React from \"react\"\n\nimport apiRequest, { defaultFetch } from \"../api_request\"\nimport { useJoltEffect } from \"./jolt\"\nimport { useDebounce } from \"./use_debounce\"\nimport useLocalStorage from \"./use_local_storage\"\n\nconst noop = () => {}\n\ntype NotificationsHookProps = {\n enabled?: boolean\n env: PCO_URL.Environment\n joltChannel: JoltSubscription\n}\n\nexport const useNotificationsHasUnread = ({\n enabled,\n joltChannel,\n}: NotificationsHookProps): boolean => {\n const { storedValue, setStoredValue } = useLocalStorage(\n \"Topbar:Notifications:hasUnread\",\n false\n )\n\n const fetchHasUnread = useDebounce(() => {\n const url = `${window.location.origin}/~api/notifications/v2/me/unread`\n\n apiRequest(defaultFetch, url)\n .then(({ json }) => {\n setStoredValue(json.data.attributes.unread)\n })\n .catch(noop)\n }, 300)\n\n React.useEffect(() => {\n if (enabled) {\n fetchHasUnread()\n }\n }, [enabled])\n\n useJoltEffect(\n enabled ? joltChannel : undefined,\n \"notifications.v2.events.notification.created\",\n fetchHasUnread\n )\n\n useJoltEffect(\n enabled ? joltChannel : undefined,\n \"notifications.v2.events.notification.updated\",\n fetchHasUnread\n )\n\n useJoltEffect(\n enabled ? joltChannel : undefined,\n \"notifications.v2.events.notification.destroyed\",\n fetchHasUnread\n )\n\n return storedValue\n}\n","export function createStore<S extends object>(initialState: S) {\n type Listener = (state: S) => unknown\n let currentState = initialState\n const listeners = new Set<Listener>()\n\n return {\n getState: () => currentState,\n setState: (newState: S) => {\n currentState = newState\n listeners.forEach((listener) => listener(currentState))\n },\n subscribe: (listener: Listener) => {\n listeners.add(listener)\n return () => listeners.delete(listener)\n },\n }\n}\n\nconst store = createStore<any>({})\n\nexport default store\n","import { useEffect } from \"react\"\n\nimport apiRequest, { defaultFetch, railsCsrfFetch } from \"./api_request\"\nimport { useJoltChannelSubscription } from \"./hooks/jolt\"\nimport { useNotificationsHasUnread } from \"./hooks/use_notifications_has_unread\"\nimport useTopbarAPI from \"./hooks/use_topbar_api\"\nimport { AppsProviderProps, TopbarAPIResponse } from \"./interfaces\"\nimport store from \"./store\"\n\nexport const AppsProvider = ({\n configuredFetch = defaultFetch,\n enableJoltLogging,\n env,\n formatter = mapApps,\n joltPromise,\n wssEndpoint,\n render,\n userId,\n}: AppsProviderProps) => {\n const topbarResponse = useTopbarAPI({ configuredFetch, env })\n const apps = formatter(topbarResponse)\n const hasConnectedPeople =\n topbarResponse?.data?.attributes?.has_connected_people\n const mfaEnabled =\n topbarResponse?.data?.attributes?.features?.includes(\"mfa_enabled\")\n const notificationsContextMenu =\n topbarResponse?.data?.attributes?.features?.includes(\n \"notifications_context_menu\"\n )\n const mfaConfigured = !!topbarResponse?.data?.attributes?.mfa_configured\n const name = topbarResponse?.data?.attributes?.name\n const notificationsEnabled = !window.notificationsDisabled\n const organizationTimeZone =\n topbarResponse?.data?.attributes?.org_time_zone || \"America/Los_Angeles\"\n const chatEnabled =\n topbarResponse?.data?.attributes?.features?.includes(\"chat_enabled\")\n const algoliaSearchAuth = {\n algoliaApplicationId:\n topbarResponse?.data?.attributes?.algolia_application_identifier,\n algoliaSearchOnlyApiKey:\n topbarResponse?.data?.attributes?.algolia_search_key,\n }\n\n const notificationsJoltChannel = useJoltChannelSubscription({\n channelName: `notifications.people.${userId}`,\n enableJoltLogging,\n enabled: true,\n env,\n wssEndpoint,\n fetchSubscribeToken: async (cid) => {\n const subscribeUrl = `${window.location.origin}/~api/notifications/v2/me/notifications_jolt_subscribe`\n return apiRequest(railsCsrfFetch, subscribeUrl, {\n data: { data: { attributes: { cid } } },\n method: \"POST\",\n }).then(({ json }) => json.data.id)\n },\n joltPromise,\n })\n\n const notificationsHasUnread = useNotificationsHasUnread({\n enabled: true,\n env,\n joltChannel: notificationsJoltChannel,\n })\n\n useEffect(() => {\n const state = store.getState()\n\n store.setState({\n ...state,\n algoliaSearchAuth,\n chatEnabled,\n hasConnectedPeople,\n indicatorVisible: {\n ...state.indicatorVisible,\n Notifications: notificationsHasUnread,\n },\n joltPromise,\n mfaConfigured,\n mfaEnabled,\n name,\n notifications: {\n enabled: notificationsEnabled,\n env,\n joltChannel: notificationsJoltChannel,\n },\n notificationsContextMenu,\n notificationsEnabled,\n notificationsJoltChannel,\n organizationTimeZone,\n userId,\n })\n }, [\n joltPromise,\n mfaConfigured,\n mfaEnabled,\n name,\n notificationsContextMenu,\n notificationsEnabled,\n notificationsHasUnread,\n organizationTimeZone,\n userId,\n ])\n\n // TODO: remove `fetch` and `remove` (breaking changes)\n return render(apps || [], {\n fetch: () => {}, // no-op because we already have fresh data\n remove: () => {}, // no-op because we are no longer caching anyway\n })\n}\n\nexport function mapApps(resp: TopbarAPIResponse) {\n return resp?.data?.attributes?.apps || []\n}\n","import pcoUrl, { Environment } from \"@planningcenter/url\"\nimport { useEffect, useState } from \"react\"\n\nimport apiRequest, { Fetch } from \"../api_request\"\nimport { TopbarAPIResponse } from \"../interfaces\"\nimport useLocalStorage from \"./use_local_storage\"\n\nconst useTopbarAPI = ({\n configuredFetch,\n env,\n}: {\n configuredFetch: Fetch\n env: Environment\n}) => {\n const { storedValue: localResp, setStoredValue: setLocalResp } =\n useLocalStorage(\"Topbar\", {})\n const [resp, setResp] = useState<TopbarAPIResponse>(localResp)\n\n useEffect(() => {\n fetch()\n }, [])\n\n const fetch = () => {\n apiRequest(\n configuredFetch,\n `${pcoUrl(env)(\"api\")}/people/v2/me/topbar`\n ).then(({ json, ok }: { json: TopbarAPIResponse; ok: boolean }) => {\n if (ok) {\n setResp(json)\n setLocalResp(json)\n }\n })\n }\n\n return resp\n}\n\nexport default useTopbarAPI\n","import React from \"react\"\nimport { debounce } from \"../utils\"\n\nexport const useDebounce = <\n F extends (...args: Parameters<F>) => ReturnType<F>\n>(\n fn: F,\n t: number = 0\n): F => {\n return React.useMemo(() => <F>debounce(fn, t), [])\n}\n","import pcoUrl, { Environment } from \"@planningcenter/url\"\nimport React from \"react\"\n\nimport apiRequest, { defaultFetch, Fetch } from \"./api_request\"\nimport { ConnectedPerson } from \"./interfaces\"\n\nexport function remove() {\n window.localStorage.removeItem(\"Topbar:ConnectedPeople\")\n}\n\nexport class ConnectedPeopleProvider extends React.Component<\n {\n configuredFetch?: Fetch\n env: Environment\n render: (connectedPeople: ConnectedPerson[], callback: any) => JSX.Element\n },\n {\n connectedPeople: ConnectedPerson[]\n }\n> {\n constructor(props: any) {\n super(props)\n\n this.state = {\n connectedPeople: [],\n }\n }\n\n public static defaultProps = {\n configuredFetch: defaultFetch,\n }\n\n fetch() {\n apiRequest(\n this.props.configuredFetch,\n `${pcoUrl(this.props.env)(\"api\")}/login/v2/me/connected_people`\n ).then(({ json }) => {\n const connectedPeople = json.data\n\n return this.setState(\n {\n connectedPeople,\n },\n () =>\n window.localStorage.setItem(\n \"Topbar:ConnectedPeople\",\n JSON.stringify(connectedPeople)\n )\n )\n })\n }\n\n unlink() {\n apiRequest(\n this.props.configuredFetch,\n `${pcoUrl(this.props.env)(\"api\")}/login/v2/me/unlink`,\n {\n method: \"POST\",\n }\n ).then(({ json }) => {\n window.location = json.meta.redirect_to\n })\n }\n\n switch(toId: string, returnPath: string) {\n apiRequest(\n this.props.configuredFetch,\n `${pcoUrl(this.props.env)(\"api\")}/login/v2/me/switch_connected_person`,\n {\n data: {\n data: {\n attributes: {\n id: toId,\n return_path: returnPath,\n },\n },\n },\n method: \"POST\",\n }\n ).then(({ json }) => {\n window.location = json.meta.redirect_to\n })\n }\n\n componentDidMount() {\n const connectedPeople = JSON.parse(\n window.localStorage.getItem(\"Topbar:ConnectedPeople\")\n )\n\n if (connectedPeople) return this.setState({ connectedPeople })\n\n return this.fetch()\n }\n\n render() {\n return this.props.render(this.state.connectedPeople || [], {\n fetch: this.fetch.bind(this),\n remove: remove.bind(this),\n switch: this.switch.bind(this),\n unlink: this.unlink.bind(this),\n })\n }\n}\n","import React from \"react\"\n\nimport { debounce } from \"./utils\"\n\nexport class PointBreak extends React.Component<\n {\n render: (breakpoint: string) => React.ReactElement<any>\n },\n {\n width: number\n }\n> {\n constructor(props: any) {\n super(props)\n\n this.state = {\n width: window.innerWidth,\n }\n\n this.setWindowWidth = this.setWindowWidth.bind(this)\n }\n\n setWindowWidth() {\n this.setState({ width: window.innerWidth })\n }\n\n componentDidMount() {\n window.addEventListener(\"resize\", debounce(this.setWindowWidth, 100), false)\n }\n\n componentWillUnmount() {\n window.removeEventListener(\n \"resize\",\n debounce(this.setWindowWidth, 100),\n false\n )\n }\n\n breakpointString(width) {\n if (width < 480) return \"xs\"\n if (width < 600) return \"sm\"\n if (width < 720) return \"md\"\n if (width < 960) return \"lg\"\n return \"xl\"\n }\n\n render() {\n return <>{this.props.render(this.breakpointString(this.state.width))}</>\n }\n}\n\nexport class DisplaySwitch extends React.Component<\n {\n notSmallTopbar: (breakpointShortand: string) => React.ReactElement<any>\n smallBreakpoints: String[]\n smallTopbar: (breakpointShorthand: string) => React.ReactElement<any>\n },\n {}\n> {\n public static defaultProps = {\n smallBreakpoints: [\"xs\", \"sm\"],\n }\n\n render() {\n return (\n <PointBreak\n render={(breakpoint) => {\n if (this.props.smallBreakpoints.indexOf(breakpoint) !== -1) {\n return this.props.smallTopbar(breakpoint)\n }\n\n return this.props.notSmallTopbar(breakpoint)\n }}\n />\n )\n }\n}\n","import React from \"react\"\n\nexport function Squircle({ color = \"#fff\" }): JSX.Element {\n return (\n <path\n fill={color}\n d=\"M10.008.045C2.047.045.056,2.036.056,10s1.991,9.952,9.952,9.952S19.96,17.959,19.96,10,17.969.045,10.008.045Z\"\n />\n )\n}\n\nexport function Accounts({ color }): JSX.Element {\n return (\n <path\n fill={color}\n d=\"M16.95,9.28h0l-1.33-.23c-.12,0-.24-.04-.34-.11-.1-.07-.18-.16-.23-.27-.12-.45-.3-.89-.54-1.3-.04-.11-.05-.24-.03-.35,.02-.12,.08-.23,.16-.32l.78-1.1h0s0-.03,0-.04l-.03-.02-.04-.04-.87-.87-.05-.05h0s-.02-.02-.03,0l-1.11,.78c-.09,.08-.2,.13-.32,.16-.12,.02-.24,.01-.35-.03-.41-.24-.84-.42-1.3-.54-.11-.05-.2-.13-.27-.23-.07-.1-.11-.22-.11-.34l-.22-1.33h0s-.01-.03-.02-.03h-1.41s-.02,0-.02,.02l-.23,1.34c0,.12-.04,.24-.11,.34-.07,.1-.16,.18-.27,.23-.45,.12-.89,.3-1.3,.54-.11,.04-.24,.05-.35,.03-.12-.02-.23-.08-.32-.16l-1.1-.78h0s-.02-.01-.03,0l-.02,.03-.04,.04-.87,.87-.05,.05h0s0,.03,0,.04l.78,1.11c.08,.09,.13,.2,.16,.32,.02,.12,.01,.24-.03,.35-.24,.4-.42,.84-.54,1.29-.05,.11-.13,.2-.23,.27-.1,.07-.22,.11-.34,.11l-1.33,.22h0s-.02,0-.02,.02v1.41s0,.02,.02,.02l1.34,.23c.12,0,.24,.05,.34,.11,.1,.07,.18,.16,.23,.27,.12,.45,.3,.89,.54,1.29,.04,.11,.05,.24,.03,.35-.02,.12-.08,.23-.16,.32l-.78,1.11s0,.02,0,.03h0l.05,.06,.87,.87,.04,.04,.02,.02s.02,0,.03,0h0l1.1-.79c.09-.08,.2-.13,.32-.16,.12-.02,.24-.01,.35,.03,.4,.24,.84,.42,1.29,.54,.11,.05,.2,.13,.27,.23,.07,.1,.11,.22,.11,.34l.23,1.34s0,.02,.02,.02h1.41s.02,0,.02-.02h0l.22-1.34c0-.12,.05-.24,.11-.34,.07-.1,.16-.18,.27-.23,.45-.12,.89-.3,1.29-.54,.11-.04,.24-.05,.35-.03,.12,.02,.23,.08,.32,.16l1.11,.78s.02,0,.03,0h0l.05-.06,.87-.87,.04-.04,.02-.02s0-.02,0-.03h0l-.78-1.11c-.08-.09-.13-.2-.16-.32-.02-.12-.01-.24,.03-.35,.24-.4,.42-.84,.54-1.29,.05-.11,.13-.2,.23-.27s.22-.11,.34-.11l1.34-.23s.02,0,.02-.02v-1.4s0-.02-.02-.02Zm-4.67,3.01c-.45,.45-1.03,.76-1.65,.88-.63,.12-1.27,.06-1.86-.18-.59-.24-1.09-.66-1.45-1.19-.35-.53-.54-1.15-.54-1.79s.19-1.26,.54-1.79c.35-.53,.86-.94,1.45-1.19,.59-.24,1.24-.31,1.86-.18,.63,.12,1.2,.43,1.65,.88,.3,.3,.54,.66,.7,1.05,.16,.39,.25,.81,.25,1.24s-.08,.84-.25,1.24c-.16,.39-.4,.75-.7,1.05Z\"\n />\n )\n}\n\nexport function API({ color }): JSX.Element {\n return (\n <path\n fill={color}\n d=\"M11.08,12.387a3.277,3.277,0,0,0,.21-.86l1.47-.23-.25-1.63-1.48.22A3.167,3.167,0,0,0,9.93,8.5l.54-1.37-1.54-.6L8.39,7.9a3.393,3.393,0,0,0-1.76.27l-.92-1.15-1.3,1.03.93,1.16a3.462,3.462,0,0,0-.43.78A3.333,3.333,0,0,0,4.69,11l-1.49.23.25,1.69,1.59-.24a3.278,3.278,0,0,0,1.02,1.2l-.54,1.39,1.55.6.54-1.39a3.319,3.319,0,0,0,1.74-.27l.93,1.17,1.3-1.04-.93-1.17A3.258,3.258,0,0,0,11.08,12.387ZM9.81,11.9A1.953,1.953,0,0,1,7.29,13a1.942,1.942,0,1,1,2.52-1.1Zm5.89-4.32a1.581,1.581,0,0,0,.04-.38,2.066,2.066,0,0,0-1.39-1.95v-.82H12.97v.82A2.066,2.066,0,0,0,11.58,7.2a1.581,1.581,0,0,0,.04.38l-.71.41.7,1.2.7-.4a2.073,2.073,0,0,0,2.7,0l.7.4.7-1.2Zm-2.04.67A1.045,1.045,0,1,1,14.7,7.2,1.041,1.041,0,0,1,13.66,8.247Z\"\n />\n )\n}\n\nexport function Calendar({ color }): JSX.Element {\n return (\n <path\n fill={color}\n d=\"M14.18,6.5h-.91V5.8a.55.55,0,0,0-.55-.55h-.26a.55.55,0,0,0-.55.55v.7H8.09V5.8a.55.55,0,0,0-.55-.55H7.28a.55.55,0,0,0-.55.55v.7H5.82a.58.58,0,0,0-.58.59v7.08a.58.58,0,0,0,.58.58h8.36a.58.58,0,0,0,.58-.58V7.09A.58.58,0,0,0,14.18,6.5Zm-.91,6.71H6.73V9.09h6.54Z\"\n />\n )\n}\n\nexport function CheckIns({ color }): JSX.Element {\n return (\n <path\n fill={color}\n d=\"M14.175,8.341,9.258,13.256a1.157,1.157,0,0,1-1.638,0L5.161,10.8A1.159,1.159,0,1,1,6.8,9.16L8.439,10.8l4.1-4.1a1.159,1.159,0,0,1,1.639,1.639Z\"\n />\n )\n}\n\nexport function ChurchCenter({ color }): JSX.Element {\n return (\n <path\n fill={color}\n d=\"M13.91,14.763a.334.334,0,0,1-.331.338l-1.959-.016a.334.334,0,0,1-.338-.331s.005-.233.005-1.8a3.674,3.674,0,0,0-1.279-2.638,3.674,3.674,0,0,0-1.279,2.638c0,1.565.005,1.8.005,1.8a.334.334,0,0,1-.338.331L6.437,15.1a.334.334,0,0,1-.331-.338s-.242-6.457-.02-6.65h0L9.671,5.021a.522.522,0,0,1,.684,0l3.58,3.092H13.93C14.152,8.325,13.91,14.763,13.91,14.763Z\"\n />\n )\n}\n\nexport function Giving({ color }): JSX.Element {\n return (\n <path\n fill={color}\n d=\"M10.3,13.769a.508.508,0,0,1-.592,0c-1.259-.888-5.982-4.494-3.268-6.83a2.386,2.386,0,0,1,3.215.205l.349.349.349-.349a2.386,2.386,0,0,1,3.215-.205C16.286,9.275,11.563,12.881,10.3,13.769Z\"\n />\n )\n}\n\nexport function Groups({ color }): JSX.Element {\n return (\n <path\n fill={color}\n d=\"M13.769,11.313V8.683a1.867,1.867,0,1,0-2.443-2.449H8.69A1.867,1.867,0,1,0,6.243,8.681v2.632A1.867,1.867,0,1,0,8.69,13.76h2.632a1.867,1.867,0,1,0,2.447-2.447Zm-1.455,0a1.873,1.873,0,0,0-.992.992H8.69a1.877,1.877,0,0,0-.992-.992V8.681a1.877,1.877,0,0,0,.992-.992h2.636a1.872,1.872,0,0,0,.988.99Z\"\n />\n )\n}\n\nexport function Home({ color }): JSX.Element {\n return (\n <path\n fill={color}\n d=\"M14.7619 8.93233C14.7619 8.72768 14.6587 8.53243 14.4775 8.39414L10.5927 5.43C10.2573 5.17413 9.74265 5.17413 9.40731 5.42999L5.52252 8.39414C5.34128 8.53243 5.2381 8.72768 5.2381 8.93233V13.0794C5.2381 13.4827 5.63079 13.8095 6.11521 13.8095H13.8848C14.3692 13.8095 14.7619 13.4826 14.7619 13.0794V8.93233Z\"\n />\n )\n}\n\nexport function People({ color }): JSX.Element {\n return (\n <path\n fill={color}\n d=\"M8.177,5.732A2.018,2.018,0,1,1,6.159,7.75,2.019,2.019,0,0,1,8.177,5.732Zm2.494,8.53H5.664A.565.565,0,0,1,5.1,13.7V12.422a1.841,1.841,0,0,1,1.841-1.841H9.394a1.841,1.841,0,0,1,1.841,1.841V13.7A.565.565,0,0,1,10.671,14.262ZM12.814,6.94A1.513,1.513,0,1,1,11.3,8.453,1.513,1.513,0,0,1,12.814,6.94Zm1.537,6.093H12.413a.565.565,0,0,1-.565-.565v-.049a2.292,2.292,0,0,0-.2-.957.555.555,0,0,0-.062-.141.8.8,0,0,0-.061-.11,1.19,1.19,0,0,0-.092-.16,1.131,1.131,0,0,1,.908-.472h1.472a1.108,1.108,0,0,1,1.105,1.1v.785A.565.565,0,0,1,14.351,13.033Z\"\n />\n )\n}\n\nexport function Publishing({ color }): JSX.Element {\n return (\n <path\n fill={color}\n d=\"M7.287,13.575a.478.478,0,0,1-.477.477H5.856a.478.478,0,0,1-.477-.477V6.407a.478.478,0,0,1,.477-.477H6.81a.478.478,0,0,1,.477.477Zm7.293,0a.477.477,0,0,1-.477.477H9.268a.478.478,0,0,1-.477-.477V12.6a.478.478,0,0,1,.477-.477H14.1a.477.477,0,0,1,.477.477Zm0-3.473a.477.477,0,0,1-.476.477H9.268a.478.478,0,0,1-.477-.477V6.407a.478.478,0,0,1,.477-.477H14.1a.477.477,0,0,1,.477.477Z\"\n />\n )\n}\n\nexport function Registrations({ color }): JSX.Element {\n return (\n <path\n fill={color}\n d=\"M4.48,11.09a.51.51,0,0,0,0,.71l.7.7a.22.22,0,0,0,.27,0,1.47,1.47,0,0,1,1.8.22,1.5,1.5,0,0,1,.23,1.81.21.21,0,0,0,0,.27l.7.7a.51.51,0,0,0,.71,0l2-2a.16.16,0,0,0,0-.22L6.7,9.1a.17.17,0,0,0-.23,0Zm11-2.89-.71-.7a.21.21,0,0,0-.26,0,1.47,1.47,0,0,1-1.79-.23,1.49,1.49,0,0,1-.24-1.79.22.22,0,0,0,0-.27l-.7-.7a.51.51,0,0,0-.71,0L7.47,8.11a.14.14,0,0,0,0,.22l4.2,4.2a.14.14,0,0,0,.22,0l3.63-3.62A.51.51,0,0,0,15.52,8.2Z\"\n />\n )\n}\n\nexport function Services({ color }): JSX.Element {\n return (\n <path\n fill={color}\n d=\"M6.5,6.559A1.059,1.059,0,1,1,5.443,5.5,1.059,1.059,0,0,1,6.5,6.559ZM5.443,8.943A1.059,1.059,0,1,0,6.5,10,1.059,1.059,0,0,0,5.443,8.943Zm0,3.443A1.059,1.059,0,1,0,6.5,13.445,1.059,1.059,0,0,0,5.443,12.386ZM15,6.087a.485.485,0,0,0-.485-.485H8.136a.485.485,0,0,0-.485.485V7.03a.485.485,0,0,0,.485.485h6.38A.485.485,0,0,0,15,7.03ZM15,9.53a.485.485,0,0,0-.485-.485H8.136a.485.485,0,0,0-.485.485v.943a.485.485,0,0,0,.485.485h6.38A.485.485,0,0,0,15,10.473Zm0,3.443a.485.485,0,0,0-.485-.485H8.136a.485.485,0,0,0-.485.485v.943a.485.485,0,0,0,.485.485h6.38A.485.485,0,0,0,15,13.916Z\"\n />\n )\n}\n","import React from \"react\"\n\nimport * as AppSymbols from \"./mono_app_symbols\"\n\nfunction Squircle({ color = \"#fff\" }): JSX.Element {\n return (\n <path\n d=\"M10.008.045C2.047.045.056,2.036.056,10s1.991,9.952,9.952,9.952S19.96,17.959,19.96,10,17.969.045,10.008.045Z\"\n fill={color}\n />\n )\n}\n\nexport function MonoAppIcon({\n appName,\n colors,\n style,\n size = 20,\n ...platformProps\n}: {\n appName: string\n colors: any\n size?: number\n // TODO: shared type\n style?: any\n}): JSX.Element {\n return (\n <svg\n xmlns=\"http://www.w3.org/2000/svg\"\n width={size}\n height={size}\n viewBox=\"0 0 20 20\"\n role=\"img\"\n aria-labelledby=\"title desc\"\n style={{ display: \"block\", ...style }}\n {...platformProps}\n >\n <title id=\"title\">Planning Center {appName} App Icon</title>\n\n <desc id=\"desc\">\n An image symbolizing the Planning Center {appName} app.\n </desc>\n\n {appName === \"Accounts\" ? null : <Squircle />}\n\n {AppSymbols[appName] ? (\n React.createElement(AppSymbols[appName], {\n color: appName != \"Accounts\" ? colors.base0 : \"#fff\",\n })\n ) : (\n <div>appName not supported</div>\n )}\n </svg>\n )\n}\n","import React from \"react\"\n\nexport function Accounts({ color, size = 20 }): JSX.Element {\n return (\n <svg\n data-name=\"Layer 1\"\n height={size}\n id=\"4ce749c7-c01e-4a9b-9496-b14fd2e761aa\"\n viewBox=\"0 0 77.073 20\"\n xmlns=\"http://www.w3.org/2000/svg\"\n >\n <title>accounts-text</title>\n <path\n fill={color}\n d=\"M4.729,5.537A10.859,10.859,0,0,0,1.262,6.1a.566.566,0,0,0-.4.717l.194.819a.579.579,0,0,0,.7.5,10.108,10.108,0,0,1,2.748-.47,1.416,1.416,0,0,1,1.065.349A2.307,2.307,0,0,1,6,9.682,7.706,7.706,0,0,0,4.1,9.418c-2.493,0-4.1,1.305-4.1,3.327a3.2,3.2,0,0,0,3.328,3.434,4.385,4.385,0,0,0,3.011-1.161l.181.509c.1.249.231.415.515.415h.712a.6.6,0,0,0,.59-.589v-5.3C8.337,7.581,8.065,5.537,4.729,5.537ZM3.78,14.181a1.343,1.343,0,0,1-1.436-1.459c0-.91.777-1.522,1.932-1.522a4.726,4.726,0,0,1,1.7.3v1.556A2.983,2.983,0,0,1,3.78,14.181ZM18.6,13.194c.4.361.326.669.2.865a4.646,4.646,0,0,1-3.977,2.12,5.2,5.2,0,0,1-5.2-5.31,5.285,5.285,0,0,1,5.225-5.332,4.461,4.461,0,0,1,3.711,1.768.6.6,0,0,1-.1.869l-.775.71c-.361.335-.64.056-.806-.11A2.909,2.909,0,0,0,14.9,7.816,2.938,2.938,0,0,0,12,10.847,2.921,2.921,0,0,0,14.837,13.9a2.623,2.623,0,0,0,2.03-.965c.082-.081.161-.16.241-.233a.574.574,0,0,1,.819-.049Zm9.661,0c.4.361.326.669.2.865a4.644,4.644,0,0,1-3.976,2.12,5.2,5.2,0,0,1-5.2-5.31A5.286,5.286,0,0,1,24.5,5.537a4.459,4.459,0,0,1,3.71,1.768.6.6,0,0,1-.1.869l-.775.71c-.361.335-.641.056-.806-.11a2.779,2.779,0,0,0-4.869,2.073A2.92,2.92,0,0,0,24.5,13.9a2.625,2.625,0,0,0,2.03-.965c.081-.081.161-.16.241-.233a.573.573,0,0,1,.818-.049Zm5.86-7.657A5.323,5.323,0,1,0,39.3,10.826,5.317,5.317,0,0,0,34.117,5.537Zm2.838,5.289a2.857,2.857,0,1,1-5.7,0,2.853,2.853,0,1,1,5.7,0ZM49.346,6.341v9.012a.616.616,0,0,1-.612.589h-.517c-.34,0-.474-.245-.561-.485l-.2-.536a4.084,4.084,0,0,1-3.1,1.258c-3.388,0-3.823-2.5-3.823-4.685V6.341a.621.621,0,0,1,.59-.588h1.207a.6.6,0,0,1,.59.588v5.3c0,1.539.58,2.256,1.825,2.256a2.357,2.357,0,0,0,2.214-1.544l0-6.016c0-.544.349-.588.676-.588h1.1A.624.624,0,0,1,49.346,6.341Zm11.089,4.01v5a.605.605,0,0,1-.591.589H58.637a.6.6,0,0,1-.59-.589V10.265c0-1.579-.655-2.449-1.846-2.449a2.939,2.939,0,0,0-2.514,1.355v6.182c0,.4-.229.589-.7.589h-1.1a.6.6,0,0,1-.59-.589V6.341a.6.6,0,0,1,.59-.588h.518a.5.5,0,0,1,.522.391l.235.67a4.691,4.691,0,0,1,3.3-1.277C59.134,5.537,60.435,7.111,60.435,10.351Zm8.048,4.379a.556.556,0,0,1-.283.721,6.126,6.126,0,0,1-2.822.728c-2.337,0-2.637-1.651-2.637-3.09V7.816H61.713a.6.6,0,0,1-.589-.59V6.341a.569.569,0,0,1,.589-.588h1.028V3.088a.59.59,0,0,1,.59-.59h1.228a.573.573,0,0,1,.568.59V5.753h2.515a.582.582,0,0,1,.59.588v.885a.613.613,0,0,1-.59.59H65.127V13c0,.828.323.9.683.9a3.241,3.241,0,0,0,1.536-.458.523.523,0,0,1,.431-.064.558.558,0,0,1,.317.335Zm7.869-1.576c0,1.5-1.262,3.025-3.672,3.025a5.927,5.927,0,0,1-3.343-1.033h0a.523.523,0,0,1-.208-.663l.452-.926a.494.494,0,0,1,.3-.254.635.635,0,0,1,.505.076l.032.017a4.485,4.485,0,0,0,2.389.7c.74,0,1.2-.328,1.2-.855,0-.58-.666-.985-2.066-1.618-1.435-.648-2.763-1.49-2.763-3.253,0-1.41,1.056-2.832,3.414-2.832a5.7,5.7,0,0,1,2.973.752.706.706,0,0,1,.256.882l-.344.689a.582.582,0,0,1-.8.247,5.057,5.057,0,0,0-2.087-.485c-.8,0-1.156.385-1.156.768,0,.546.574.9,1.633,1.361C75.052,10.588,76.352,11.279,76.352,13.154Z\"\n />\n </svg>\n )\n}\n\nexport function API({ color, size = 20 }): JSX.Element {\n return (\n <svg\n data-name=\"Layer 1\"\n height={size}\n id=\"bed028ef-58ee-4c4c-a757-08ecc3276857\"\n viewBox=\"0 0 119.5 20\"\n xmlns=\"http://www.w3.org/2000/svg\"\n >\n <title>api-text</title>\n <path\n fill={color}\n d=\"M9.136.675H7.908a.621.621,0,0,0-.59.589V5.5a6.9,6.9,0,0,0-2.384-.469A5.013,5.013,0,0,0,.012,10.343c0,2.989,2.048,5.331,4.663,5.331a4.885,4.885,0,0,0,3.22-1.3l.16.543a.591.591,0,0,0,.564.519h.517a.6.6,0,0,0,.59-.59V1.264A.6.6,0,0,0,9.136.675ZM7.34,7.847v4.175A2.745,2.745,0,0,1,4.978,13.4,2.815,2.815,0,0,1,2.4,10.343a2.913,2.913,0,0,1,2.772-3.03A4.941,4.941,0,0,1,7.34,7.847Zm8.833-2.813A5.081,5.081,0,0,0,11.1,10.343a5.046,5.046,0,0,0,5.094,5.331,5.712,5.712,0,0,0,3.761-1.256.512.512,0,0,0,.064-.819l-.582-.906a.467.467,0,0,0-.3-.22.619.619,0,0,0-.45.147,3.737,3.737,0,0,1-2.368.818,2.818,2.818,0,0,1-2.854-2.484h6.755a.578.578,0,0,0,.566-.532c.023-.175.045-.524.045-.7A4.571,4.571,0,0,0,16.173,5.034ZM16.13,7.1a2.23,2.23,0,0,1,2.334,2.032H13.591A2.411,2.411,0,0,1,16.13,7.1ZM30.587,5.982l-4.3,9.366a.561.561,0,0,1-.515.326h-.129a.59.59,0,0,1-.534-.323l-4.31-9.373a.484.484,0,0,1-.024-.49.542.542,0,0,1,.493-.239h1.315a.543.543,0,0,1,.534.344l2.571,5.914,2.7-5.91c.161-.348.486-.348.773-.348h.97a.544.544,0,0,1,.494.239A.488.488,0,0,1,30.587,5.982Zm4.983-.948A5.081,5.081,0,0,0,30.5,10.343a5.045,5.045,0,0,0,5.094,5.331,5.706,5.706,0,0,0,3.76-1.256.512.512,0,0,0,.065-.819l-.582-.906a.467.467,0,0,0-.3-.22.616.616,0,0,0-.45.147,3.738,3.738,0,0,1-2.369.818,2.819,2.819,0,0,1-2.854-2.484h6.755a.58.58,0,0,0,.567-.532c.023-.175.044-.524.044-.7A4.57,4.57,0,0,0,35.57,5.034ZM35.527,7.1a2.23,2.23,0,0,1,2.334,2.032H32.988A2.413,2.413,0,0,1,35.527,7.1Zm8.426-5.833V14.847a.606.606,0,0,1-.59.59H42.156a.6.6,0,0,1-.59-.59V1.264a.606.606,0,0,1,.59-.589h1.207A.621.621,0,0,1,43.953,1.264Zm6.576,3.77a5.322,5.322,0,1,0,5.18,5.287A5.315,5.315,0,0,0,50.529,5.034Zm2.836,5.287a2.856,2.856,0,1,1-5.695,0,2.852,2.852,0,1,1,5.7,0Zm8.65-5.287a4.76,4.76,0,0,0-3.08,1.1l-.2-.487a.523.523,0,0,0-.539-.4h-.539a.606.606,0,0,0-.59.59V19.422a.6.6,0,0,0,.59.59h1.207a.58.58,0,0,0,.633-.59V15.066a5.6,5.6,0,0,0,2.427.608,5.075,5.075,0,0,0,4.9-5.331A5.026,5.026,0,0,0,62.015,5.034Zm2.427,5.309A2.9,2.9,0,0,1,61.648,13.4a4.112,4.112,0,0,1-2.19-.678v-4.1a2.628,2.628,0,0,1,2.277-1.3A2.787,2.787,0,0,1,64.442,10.343ZM72.73,5.034a5.081,5.081,0,0,0-5.073,5.309,5.046,5.046,0,0,0,5.095,5.331,5.711,5.711,0,0,0,3.76-1.256.512.512,0,0,0,.065-.819l-.583-.906a.463.463,0,0,0-.3-.22.61.61,0,0,0-.45.147,3.735,3.735,0,0,1-2.368.818,2.818,2.818,0,0,1-2.854-2.484h6.754a.577.577,0,0,0,.567-.532c.023-.178.045-.527.045-.7A4.57,4.57,0,0,0,72.73,5.034ZM72.687,7.1a2.23,2.23,0,0,1,2.334,2.032H70.147A2.413,2.413,0,0,1,72.687,7.1ZM85.434,5.6a.518.518,0,0,1,.009.524L84.926,7.2a.584.584,0,0,1-.334.323.543.543,0,0,1-.424-.032,2.366,2.366,0,0,0-.854-.181A2.734,2.734,0,0,0,81.08,8.561v6.286c0,.59-.485.59-.8.59h-.991a.6.6,0,0,1-.59-.59V5.839a.605.605,0,0,1,.59-.59H79.8a.576.576,0,0,1,.544.435l.213.688a3.921,3.921,0,0,1,2.971-1.338C84.277,5.034,85.17,5.183,85.434,5.6Zm11.8-5.4a.621.621,0,0,0-.469-.3h-.216a.62.62,0,0,0-.472.305l-6.615,14.5a.508.508,0,0,0,.02.5.517.517,0,0,0,.451.229h1.357a.652.652,0,0,0,.6-.392l1.284-2.884h6.9l1.306,2.884a.618.618,0,0,0,.6.392h1.358a.517.517,0,0,0,.451-.229.508.508,0,0,0,.021-.494Zm1.916,9.871H94.116l2.5-5.627ZM110.327.12h-4.913a.526.526,0,0,0-.526.525V14.912a.526.526,0,0,0,.526.525h1.4a.54.54,0,0,0,.525-.525V9.963h3.009A4.922,4.922,0,1,0,110.327.12Zm2.493,4.856a2.563,2.563,0,0,1-2.536,2.643H107.34V2.507h2.944A2.476,2.476,0,0,1,112.82,4.976ZM119.087.645V14.912a.54.54,0,0,1-.526.525h-1.422a.54.54,0,0,1-.525-.525V.645a.539.539,0,0,1,.525-.525h1.422A.539.539,0,0,1,119.087.645Z\"\n />\n </svg>\n )\n}\n\nexport function Calendar({ color, size = 20 }): JSX.Element {\n return (\n <svg\n data-name=\"Layer 1\"\n height={size}\n id=\"Layer_1\"\n viewBox=\"0 0 73.83 20\"\n xmlns=\"http://www.w3.org/2000/svg\"\n >\n <title>calendar-text</title>\n <path\n fill={color}\n d=\"M9,12.56c.39.36.32.66.19.85a4.65,4.65,0,0,1-4,2.12A5.21,5.21,0,0,1,0,10.21,5.3,5.3,0,0,1,5.23,4.87,4.49,4.49,0,0,1,9,6.64a.6.6,0,0,1-.1.85l-.78.71c-.35.33-.61.07-.78-.11a3,3,0,0,0-2-1,3,3,0,0,0-2.94,3.06,3,3,0,0,0,2.87,3.09,2.63,2.63,0,0,0,2.05-1l.25-.23A.55.55,0,0,1,8.32,12Zm9.25-3.17v5.33a.59.59,0,0,1-.57.57H17c-.27,0-.4-.16-.5-.4l-.19-.54a4.39,4.39,0,0,1-3,1.18A3.2,3.2,0,0,1,9.91,12.1c0-2,1.61-3.33,4.11-3.33a7.24,7.24,0,0,1,1.92.28,2.33,2.33,0,0,0-.43-1.72A1.44,1.44,0,0,0,14.43,7a10.27,10.27,0,0,0-2.77.48A.56.56,0,0,1,11,7l-.2-.82a.56.56,0,0,1,.39-.7,10.9,10.9,0,0,1,3.48-.57C18,4.87,18.25,6.92,18.25,9.39Zm-2.34,3V10.83a4.91,4.91,0,0,0-1.72-.3c-1.17,0-2,.62-2,1.55a1.37,1.37,0,0,0,1.46,1.48A3,3,0,0,0,15.91,12.42ZM22,.47H20.79a.6.6,0,0,0-.58.57V14.72a.59.59,0,0,0,.58.57H22a.59.59,0,0,0,.57-.57V1A.61.61,0,0,0,22,.47ZM33.75,9.56c0,.18,0,.53,0,.71a.57.57,0,0,1-.55.52H26.35a2.84,2.84,0,0,0,2.89,2.53,3.84,3.84,0,0,0,2.39-.82.57.57,0,0,1,.43-.15.45.45,0,0,1,.29.21l.58.92a.48.48,0,0,1-.06.79,5.67,5.67,0,0,1-3.76,1.26A5.05,5.05,0,0,1,24,10.19a5.1,5.1,0,0,1,5.08-5.32A4.58,4.58,0,0,1,33.75,9.56ZM26.46,9h4.95A2.27,2.27,0,0,0,29,6.91,2.45,2.45,0,0,0,26.46,9Zm13.8-4.12a4.72,4.72,0,0,0-3.32,1.3l-.24-.7a.48.48,0,0,0-.51-.38h-.52a.59.59,0,0,0-.57.57v9.06a.58.58,0,0,0,.57.57h1.11c.45,0,.68-.19.68-.57V8.5A3,3,0,0,1,40,7.13c1.21,0,1.88.88,1.88,2.48v5.11a.58.58,0,0,0,.57.57h1.21a.6.6,0,0,0,.58-.57v-5C44.24,6.45,42.94,4.87,40.26,4.87ZM55.29,1V14.72a.58.58,0,0,1-.57.57H54.2a.57.57,0,0,1-.55-.5l-.17-.58a4.89,4.89,0,0,1-3.24,1.32c-2.62,0-4.67-2.34-4.67-5.34A5,5,0,0,1,50.5,4.87a6.85,6.85,0,0,1,2.39.48h0V1a.61.61,0,0,1,.58-.57h1.23A.59.59,0,0,1,55.29,1ZM52.93,11.88V7.67a5,5,0,0,0-2.19-.54,2.94,2.94,0,0,0-2.81,3.06,2.85,2.85,0,0,0,2.61,3.09A2.76,2.76,0,0,0,52.93,11.88Zm12-2.49v5.33a.59.59,0,0,1-.57.57h-.72c-.27,0-.39-.16-.5-.4L63,14.35a4.39,4.39,0,0,1-3,1.18A3.2,3.2,0,0,1,56.6,12.1c0-2,1.62-3.33,4.11-3.33a7.24,7.24,0,0,1,1.92.28,2.33,2.33,0,0,0-.43-1.72A1.42,1.42,0,0,0,61.12,7a10.27,10.27,0,0,0-2.77.48A.56.56,0,0,1,57.67,7l-.2-.82a.56.56,0,0,1,.39-.7,10.9,10.9,0,0,1,3.48-.57C64.67,4.87,64.94,6.92,64.94,9.39Zm-2.34,3V10.83a4.91,4.91,0,0,0-1.72-.3c-1.17,0-2,.62-2,1.55a1.37,1.37,0,0,0,1.46,1.48A3,3,0,0,0,62.6,12.42Zm11-7c-.26-.42-1.18-.57-1.9-.57a4,4,0,0,0-3,1.37l-.23-.73A.56.56,0,0,0,68,5.09h-.52a.59.59,0,0,0-.58.57v9.06a.58.58,0,0,0,.58.57h1c.32,0,.79,0,.79-.57V8.4A2.77,2.77,0,0,1,71.5,7.13a2.47,2.47,0,0,1,.86.18.5.5,0,0,0,.41,0A.56.56,0,0,0,73.1,7l.52-1.09A.48.48,0,0,0,73.61,5.44Z\"\n />\n </svg>\n )\n}\n\nexport function CheckIns({ color, size = 20 }): JSX.Element {\n return (\n <svg\n data-name=\"Layer 1\"\n height={size}\n id=\"dc713595-39c2-41c4-b1d9-3ef8c295b738\"\n viewBox=\"0 0 79.311 20\"\n xmlns=\"http://www.w3.org/2000/svg\"\n >\n <title>check-ins-text</title>\n <path\n fill={color}\n d=\"M40.221,13.213c.4.362.326.669.2.866A4.646,4.646,0,0,1,36.44,16.2a5.2,5.2,0,0,1-5.2-5.311,5.286,5.286,0,0,1,5.225-5.331,4.462,4.462,0,0,1,3.711,1.768.605.605,0,0,1-.1.869L39.3,8.9c-.362.333-.64.055-.806-.109a2.9,2.9,0,0,0-1.967-.959,2.937,2.937,0,0,0-2.9,3.031,2.92,2.92,0,0,0,2.837,3.054,2.62,2.62,0,0,0,2.03-.965c.082-.081.162-.16.242-.234a.572.572,0,0,1,.818-.049h0Zm-9.679-2.971c0,.178-.022.526-.044.7a.579.579,0,0,1-.567.531H23.174a2.82,2.82,0,0,0,2.855,2.485,3.736,3.736,0,0,0,2.369-.818.609.609,0,0,1,.45-.147.459.459,0,0,1,.3.219l.583.907a.513.513,0,0,1-.065.819A5.708,5.708,0,0,1,25.9,16.2a5.046,5.046,0,0,1-5.1-5.332,5.081,5.081,0,0,1,5.074-5.31A4.572,4.572,0,0,1,30.542,10.242ZM23.3,9.653h4.874A2.23,2.23,0,0,0,25.835,7.62,2.412,2.412,0,0,0,23.3,9.653Zm-7.751-4.1a4.789,4.789,0,0,0-2.773.924V2.339a.621.621,0,0,0-.59-.588H10.974a.6.6,0,0,0-.59.588V15.373a.59.59,0,0,0,.59.589H12.16a.575.575,0,0,0,.611-.589V9.193a2.871,2.871,0,0,1,2.493-1.357c1.2,0,1.867.884,1.867,2.492v5.045a.59.59,0,0,0,.59.589h1.207a.606.606,0,0,0,.59-.589v-5C19.518,7.221,18.144,5.557,15.544,5.557ZM8.315,12.674h0a.573.573,0,0,0-.818.049c-.08.074-.16.154-.242.235a2.624,2.624,0,0,1-2.029.964,2.92,2.92,0,0,1-2.838-3.054,2.938,2.938,0,0,1,2.9-3.031A2.906,2.906,0,0,1,7.257,8.8c.166.164.444.442.8.109l.775-.71a.6.6,0,0,0,.1-.869A4.464,4.464,0,0,0,5.225,5.557,5.285,5.285,0,0,0,0,10.888,5.2,5.2,0,0,0,5.2,16.2a4.647,4.647,0,0,0,3.977-2.12c.13-.2.2-.5-.2-.866ZM55.084,9.566h-4.1a.514.514,0,0,0-.525.525v.926a.51.51,0,0,0,.525.5h4.1a.51.51,0,0,0,.526-.5v-.926A.514.514,0,0,0,55.084,9.566Zm20.945.2C74.97,9.308,74.4,8.955,74.4,8.41c0-.383.357-.769,1.156-.769a5.059,5.059,0,0,1,2.087.486.581.581,0,0,0,.8-.248l.344-.689a.706.706,0,0,0-.256-.882,5.705,5.705,0,0,0-2.973-.751c-2.358,0-3.413,1.422-3.413,2.831,0,1.764,1.327,2.606,2.762,3.253,1.4.634,2.066,1.038,2.066,1.618,0,.528-.459.856-1.2.856a4.5,4.5,0,0,1-2.39-.7l-.031-.018a.629.629,0,0,0-.506-.075.494.494,0,0,0-.3.254l-.452.926a.523.523,0,0,0,.21.664A5.935,5.935,0,0,0,75.639,16.2c2.41,0,3.672-1.522,3.672-3.025C79.311,11.3,78.011,10.609,76.029,9.769Zm-9.2-4.212a4.687,4.687,0,0,0-3.3,1.277l-.235-.67a.5.5,0,0,0-.522-.392h-.517a.605.605,0,0,0-.591.59v9.011a.591.591,0,0,0,.591.589h1.1c.469,0,.7-.193.7-.589V9.19A2.934,2.934,0,0,1,66.57,7.836c1.191,0,1.846.87,1.846,2.45v5.087a.59.59,0,0,0,.59.589h1.207a.606.606,0,0,0,.59-.589v-5C70.8,7.131,69.5,5.557,66.829,5.557Zm-8.3-4.275a1.543,1.543,0,0,0-1.538,1.581,1.532,1.532,0,0,0,1.538,1.559,1.57,1.57,0,1,0,0-3.14Zm-12.215,9.1,3.949-3.716a.548.548,0,0,0,.14-.588.484.484,0,0,0-.476-.3H48.355a1.063,1.063,0,0,0-.7.331L44.008,9.4V2.339a.62.62,0,0,0-.59-.588H42.211a.6.6,0,0,0-.59.588V15.373a.59.59,0,0,0,.59.589h1.207a.606.606,0,0,0,.59-.589V11.329l3.783,4.4a.711.711,0,0,0,.542.237H50.1a.468.468,0,0,0,.461-.256.561.561,0,0,0-.094-.582ZM59.135,5.772H57.928a.605.605,0,0,0-.59.59v9.011a.59.59,0,0,0,.59.589h1.207a.606.606,0,0,0,.59-.589V6.362A.621.621,0,0,0,59.135,5.772Z\"\n />\n </svg>\n )\n}\n\nexport function ChurchCenter({ color, size = 20 }): JSX.Element {\n return (\n <svg\n data-name=\"Layer 1\"\n height={size}\n id=\"e2e8a225-c349-4aea-935c-64b6ad436be8\"\n viewBox=\"0 0 118.083 20\"\n xmlns=\"http://www.w3.org/2000/svg\"\n >\n <title>church-center-text</title>\n <path\n fill={color}\n d=\"M5.188,16.2A5.187,5.187,0,0,1,0,10.908,5.27,5.27,0,0,1,5.209,5.591a4.453,4.453,0,0,1,3.7,1.762.588.588,0,0,1-.1.844l-.776.712c-.346.319-.607.062-.779-.109a2.93,2.93,0,0,0-1.983-.966A2.959,2.959,0,0,0,2.35,10.887a2.942,2.942,0,0,0,2.859,3.076,2.642,2.642,0,0,0,2.045-.971c.082-.081.162-.16.242-.234a.552.552,0,0,1,.794-.047l.669.539c.388.352.318.651.193.841A4.629,4.629,0,0,1,5.188,16.2ZM19.5,15.4V10.391c0-3.14-1.368-4.8-3.959-4.8a4.788,4.788,0,0,0-2.788.939l-.006-4.209a.609.609,0,0,0-.571-.57H10.964a.592.592,0,0,0-.571.57V15.4a.58.58,0,0,0,.571.572H12.15a.558.558,0,0,0,.593-.572V9.207a2.893,2.893,0,0,1,2.515-1.373c1.217,0,1.888.893,1.888,2.514V15.4a.579.579,0,0,0,.571.572h1.208A.593.593,0,0,0,19.5,15.4Zm8.7-.468.2.566c.09.246.218.474.544.474h.518a.6.6,0,0,0,.592-.572V6.378a.612.612,0,0,0-.592-.57h-1.1c-.332,0-.657.044-.657.57l0,6.023a2.38,2.38,0,0,1-2.236,1.562c-1.259,0-1.845-.723-1.845-2.277V6.378a.585.585,0,0,0-.571-.57H21.843a.6.6,0,0,0-.57.57v5.156c0,2.175.433,4.67,3.807,4.67A4.06,4.06,0,0,0,28.193,14.928Zm6.2.468V9.1A2.755,2.755,0,0,1,36.65,7.834a2.382,2.382,0,0,1,.863.184.53.53,0,0,0,.41.032.571.571,0,0,0,.324-.315l.518-1.077a.5.5,0,0,0-.009-.507c-.259-.413-1.18-.56-1.89-.56a3.975,3.975,0,0,0-2.984,1.356l-.223-.719a.555.555,0,0,0-.525-.42h-.518a.585.585,0,0,0-.571.57V15.4a.58.58,0,0,0,.571.572h.993C33.922,15.968,34.4,15.968,34.4,15.4Zm13.35-1.305c.125-.19.2-.489-.193-.841l-.669-.539a.552.552,0,0,0-.794.047c-.08.074-.16.153-.242.234a2.642,2.642,0,0,1-2.044.971,2.942,2.942,0,0,1-2.86-3.076,2.959,2.959,0,0,1,2.924-3.053A2.93,2.93,0,0,1,45.85,8.8c.172.171.433.428.779.109l.776-.712a.588.588,0,0,0,.1-.844,4.452,4.452,0,0,0-3.7-1.762,5.271,5.271,0,0,0-5.21,5.317,5.187,5.187,0,0,0,5.188,5.3A4.629,4.629,0,0,0,47.745,14.091ZM58.089,15.4V10.391c0-3.14-1.368-4.8-3.959-4.8a4.79,4.79,0,0,0-2.788.939l-.006-4.209a.609.609,0,0,0-.571-.57H49.557a.592.592,0,0,0-.571.57V15.4a.58.58,0,0,0,.571.572h1.187a.557.557,0,0,0,.592-.572V9.207a2.893,2.893,0,0,1,2.515-1.373c1.217,0,1.888.893,1.888,2.514V15.4a.579.579,0,0,0,.571.572h1.208A.593.593,0,0,0,58.089,15.4Zm12.926-1.305c.126-.19.2-.489-.192-.841l-.669-.539a.553.553,0,0,0-.8.047c-.08.074-.159.153-.242.234a2.64,2.64,0,0,1-2.044.971,2.941,2.941,0,0,1-2.859-3.076A2.8,2.8,0,0,1,69.121,8.8c.171.171.433.428.778.109l.777-.712a.587.587,0,0,0,.1-.844,4.449,4.449,0,0,0-3.7-1.762,5.271,5.271,0,0,0-5.21,5.317,5.187,5.187,0,0,0,5.188,5.3A4.629,4.629,0,0,0,71.015,14.091Zm10.247-3.83c0,.177-.022.525-.044.7a.562.562,0,0,1-.549.516H73.887a2.838,2.838,0,0,0,2.877,2.526,3.743,3.743,0,0,0,2.382-.824.6.6,0,0,1,.436-.143.447.447,0,0,1,.283.212l.584.907a.492.492,0,0,1-.063.794A5.7,5.7,0,0,1,76.634,16.2a5.031,5.031,0,0,1-5.08-5.317,5.068,5.068,0,0,1,5.059-5.3A4.558,4.558,0,0,1,81.262,10.261Zm-2.335-.57a2.251,2.251,0,0,0-2.358-2.073,2.433,2.433,0,0,0-2.564,2.073ZM91.707,15.4V10.391c0-3.23-1.3-4.8-3.959-4.8a4.657,4.657,0,0,0-3.306,1.3l-.246-.7a.479.479,0,0,0-.5-.376h-.518a.585.585,0,0,0-.571.57V15.4a.58.58,0,0,0,.571.572h1.1c.457,0,.679-.187.679-.572V9.2a2.96,2.96,0,0,1,2.536-1.37c1.2,0,1.867.877,1.867,2.471V15.4a.58.58,0,0,0,.571.572h1.208A.594.594,0,0,0,91.707,15.4Zm7.779.081a.538.538,0,0,0,.277-.7l-.389-1.014a.537.537,0,0,0-.306-.325.493.493,0,0,0-.415.061,3.249,3.249,0,0,1-1.548.462c-.445,0-.7-.15-.7-.918V7.834h2.536a.594.594,0,0,0,.571-.571V6.378a.564.564,0,0,0-.571-.57H96.4V3.12a.555.555,0,0,0-.549-.571h-1.23a.579.579,0,0,0-.571.571V5.808H93.005a.552.552,0,0,0-.571.57v.885a.579.579,0,0,0,.571.571h1.048v5.3c0,1.431.3,3.073,2.62,3.073A6.067,6.067,0,0,0,99.486,15.477Zm10.11-5.216c0,.177-.022.525-.044.7a.561.561,0,0,1-.549.516h-6.782a2.838,2.838,0,0,0,2.877,2.526,3.743,3.743,0,0,0,2.382-.824.6.6,0,0,1,.437-.143.446.446,0,0,1,.282.212l.584.907a.491.491,0,0,1-.063.794,5.7,5.7,0,0,1-3.752,1.252,5.032,5.032,0,0,1-5.08-5.317,5.068,5.068,0,0,1,5.059-5.3A4.557,4.557,0,0,1,109.6,10.261Zm-2.335-.57A2.25,2.25,0,0,0,104.9,7.618a2.434,2.434,0,0,0-2.565,2.073Zm6.026,5.705V9.1a2.755,2.755,0,0,1,2.255-1.265,2.388,2.388,0,0,1,.864.184.528.528,0,0,0,.409.032.568.568,0,0,0,.324-.315l.519-1.077a.5.5,0,0,0-.009-.507c-.26-.413-1.181-.56-1.891-.56a3.977,3.977,0,0,0-2.984,1.356l-.223-.719a.555.555,0,0,0-.525-.42h-.518a.585.585,0,0,0-.571.57V15.4a.58.58,0,0,0,.571.572h.993C112.814,15.968,113.287,15.968,113.287,15.4Z\"\n />\n </svg>\n )\n}\n\nexport function Giving({ color, size = 20 }): JSX.Element {\n return (\n <svg\n data-name=\"Layer 1\"\n height={size}\n id=\"a221b42b-722d-4eb3-b043-fff7f3c6686f\"\n viewBox=\"0 0 50.486 20\"\n xmlns=\"http://www.w3.org/2000/svg\"\n >\n <title>giving-text</title>\n <path\n fill={color}\n d=\"M9.17,5.089H8.588c-.335,0-.42.255-.474.416l-.2.473a4.791,4.791,0,0,0-3.1-1.1A5.026,5.026,0,0,0,0,10.184a5.085,5.085,0,0,0,4.923,5.332,5.459,5.459,0,0,0,2.428-.629v.342c0,2.113-1.285,2.557-2.363,2.557a3.619,3.619,0,0,1-2.259-.905.567.567,0,0,0-.474-.114.553.553,0,0,0-.365.3l-.516.948a.563.563,0,0,0,.126.7A5.489,5.489,0,0,0,5.031,20a4.407,4.407,0,0,0,4.728-4.771V5.679A.6.6,0,0,0,9.17,5.089Zm-1.8,3.378V12.5a3.951,3.951,0,0,1-2.191.74,2.973,2.973,0,0,1-2.8-3.054A2.82,2.82,0,0,1,5.1,7.152,2.835,2.835,0,0,1,7.373,8.467Zm6.745-2.788v9.01a.6.6,0,0,1-.59.589H12.321a.59.59,0,0,1-.59-.589V5.679a.605.605,0,0,1,.59-.59h1.207A.62.62,0,0,1,14.118,5.679Zm.388-3.508A1.572,1.572,0,0,1,12.924,3.73a1.532,1.532,0,0,1-1.538-1.559A1.543,1.543,0,0,1,12.924.59,1.564,1.564,0,0,1,14.506,2.171Zm10.3,3.156a.49.49,0,0,1-.027.5l-4.307,9.367a.558.558,0,0,1-.514.327h-.13a.6.6,0,0,1-.534-.323L14.984,5.817a.487.487,0,0,1-.025-.49.545.545,0,0,1,.494-.238h1.315a.547.547,0,0,1,.535.344l2.572,5.917,2.7-5.913c.16-.348.486-.348.773-.348h.97A.545.545,0,0,1,24.807,5.327Zm3.249.352v9.01a.6.6,0,0,1-.59.589H26.259a.59.59,0,0,1-.59-.589V5.679a.605.605,0,0,1,.59-.59h1.207A.62.62,0,0,1,28.056,5.679Zm.388-3.508A1.572,1.572,0,0,1,26.863,3.73a1.532,1.532,0,0,1-1.539-1.559A1.544,1.544,0,0,1,26.863.59,1.564,1.564,0,0,1,28.444,2.171Zm10.69,7.517v5a.6.6,0,0,1-.59.589H37.337a.59.59,0,0,1-.59-.589V9.6c0-1.581-.655-2.451-1.846-2.451a2.938,2.938,0,0,0-2.514,1.355v6.182c0,.4-.229.589-.7.589h-1.1a.59.59,0,0,1-.59-.589V5.679a.605.605,0,0,1,.59-.59h.517a.5.5,0,0,1,.522.391l.235.67a4.692,4.692,0,0,1,3.3-1.276C37.834,4.874,39.134,6.448,39.134,9.688Zm10.456-4.6h-.582c-.336,0-.42.255-.473.416l-.2.473a4.777,4.777,0,0,0-3.1-1.1,5.026,5.026,0,0,0-4.815,5.31,5.085,5.085,0,0,0,4.923,5.332,5.459,5.459,0,0,0,2.428-.629v.342c0,2.113-1.285,2.557-2.363,2.557a3.619,3.619,0,0,1-2.259-.905.567.567,0,0,0-.474-.114.553.553,0,0,0-.365.3l-.516.948a.563.563,0,0,0,.126.7A5.489,5.489,0,0,0,45.451,20a4.407,4.407,0,0,0,4.729-4.771V5.679A.605.605,0,0,0,49.59,5.089Zm-1.8,7.409a3.944,3.944,0,0,1-2.19.74,2.973,2.973,0,0,1-2.795-3.054,2.693,2.693,0,0,1,4.985-1.717Z\"\n />\n </svg>\n )\n}\n\nexport function Home({ color, size = 20 }): JSX.Element {\n return (\n <svg\n id=\"a221b42b-722d-4eb3-b043-fff7f3c6686f\"\n data-name=\"Layer 1\"\n xmlns=\"http://www.w3.org/2000/svg\"\n height={size}\n viewBox=\"0 0 47.624 20\"\n >\n <title>home-text</title>\n <path\n fill={color}\n d=\"M8.952,9.7V14.69a.584.584,0,0,1-.553.57H7.229a.57.57,0,0,1-.553-.57V9.658c0-1.616-.649-2.506-1.827-2.506A2.791,2.791,0,0,0,2.414,8.52v6.17a.547.547,0,0,1-.573.57H.692a.569.569,0,0,1-.553-.57v-13a.583.583,0,0,1,.553-.569H1.861a.6.6,0,0,1,.553.569V5.857a4.544,4.544,0,0,1,2.706-.94C7.627,4.917,8.952,6.571,8.952,9.7Zm11.261.473a5.239,5.239,0,0,1-5,5.322,5.185,5.185,0,0,1-5.022-5.322A5.213,5.213,0,0,1,15.21,4.917,5.2,5.2,0,0,1,20.213,10.174Zm-2.234,0a2.789,2.789,0,1,0-5.558,0,2.884,2.884,0,0,0,2.789,3.087A2.876,2.876,0,0,0,17.979,10.174Zm14.59-5.257a4.475,4.475,0,0,0-3.248,1.519,3.34,3.34,0,0,0-2.956-1.519,4.128,4.128,0,0,0-3.031,1.289L23.111,5.5a.487.487,0,0,0-.506-.367h-.48a.584.584,0,0,0-.553.569V14.69a.57.57,0,0,0,.553.57h1.169a.577.577,0,0,0,.553-.57V8.512a2.367,2.367,0,0,1,2.184-1.36c1.216,0,1.808.806,1.808,2.463V14.69a.555.555,0,0,0,.552.57h1.191a.559.559,0,0,0,.532-.57V9.551a10.249,10.249,0,0,0-.077-1.3l.06-.064a2.793,2.793,0,0,1,2.159-1.034c1.2,0,1.807.829,1.807,2.463V14.69a.538.538,0,0,0,.553.57h1.17a.549.549,0,0,0,.553-.57V9.7C36.339,7.647,35.948,4.917,32.569,4.917ZM47.042,9.572c0,.176-.021.523-.043.7a.549.549,0,0,1-.531.514H39.9A2.778,2.778,0,0,0,42.687,13.3a3.573,3.573,0,0,0,2.306-.82.6.6,0,0,1,.422-.144.431.431,0,0,1,.274.211l.566.9a.5.5,0,0,1-.061.791A5.416,5.416,0,0,1,42.562,15.5c-2.85,0-4.919-2.229-4.919-5.3a4.988,4.988,0,0,1,4.9-5.279A4.479,4.479,0,0,1,47.042,9.572ZM40.016,9h4.765A2.2,2.2,0,0,0,42.5,6.937,2.375,2.375,0,0,0,40.016,9Z\"\n />\n </svg>\n )\n}\n\nexport function Groups({ color, size = 20 }): JSX.Element {\n return (\n <svg\n data-name=\"Layer 1\"\n height={size}\n id=\"08e4075e-8ca4-4400-a3ae-98f53270d1d0\"\n viewBox=\"0 0 58.688 20\"\n xmlns=\"http://www.w3.org/2000/svg\"\n >\n <title>groups-text</title>\n <path\n fill={color}\n d=\"M9.17,5.09H8.588c-.335,0-.42.255-.474.416l-.2.472a4.791,4.791,0,0,0-3.1-1.1A5.027,5.027,0,0,0,0,10.185a5.085,5.085,0,0,0,4.923,5.332,5.465,5.465,0,0,0,2.428-.63v.342c0,2.113-1.285,2.557-2.363,2.557a3.631,3.631,0,0,1-2.259-.9.568.568,0,0,0-.473-.115.556.556,0,0,0-.366.3l-.516.947a.574.574,0,0,0,.126.7A5.487,5.487,0,0,0,5.031,20a4.407,4.407,0,0,0,4.728-4.771V5.679A.6.6,0,0,0,9.17,5.09Zm-1.8,3.378V12.5a3.951,3.951,0,0,1-2.191.74,2.972,2.972,0,0,1-2.8-3.053A2.821,2.821,0,0,1,5.1,7.152,2.835,2.835,0,0,1,7.373,8.468Zm11.092-2.5-.517,1.077a.588.588,0,0,1-.335.323.535.535,0,0,1-.424-.032,2.351,2.351,0,0,0-.854-.183A2.738,2.738,0,0,0,14.1,8.4v6.288c0,.59-.485.59-.806.59H12.3a.6.6,0,0,1-.59-.59V5.679a.6.6,0,0,1,.59-.589h.517a.574.574,0,0,1,.544.434l.213.688A3.931,3.931,0,0,1,16.55,4.874c.749,0,1.642.149,1.9.568A.517.517,0,0,1,18.465,5.967Zm4.994-1.093a5.323,5.323,0,0,0,0,10.643,5.323,5.323,0,0,0,0-10.643Zm0,8.364A2.907,2.907,0,0,1,20.6,10.163a2.852,2.852,0,1,1,5.7,0A2.9,2.9,0,0,1,23.459,13.238ZM38.688,5.679v9.01a.616.616,0,0,1-.611.59H37.56c-.34,0-.475-.246-.561-.486l-.2-.535a4.082,4.082,0,0,1-3.1,1.259c-3.389,0-3.824-2.5-3.824-4.686V5.679a.621.621,0,0,1,.59-.589h1.207a.605.605,0,0,1,.591.589v5.3c0,1.539.579,2.256,1.824,2.256A2.356,2.356,0,0,0,36.3,11.694l0-6.015c0-.544.334-.589.677-.589h1.1A.632.632,0,0,1,38.688,5.679Zm6.9-.805a4.752,4.752,0,0,0-3.081,1.1l-.2-.488a.523.523,0,0,0-.54-.4h-.538a.6.6,0,0,0-.59.589V19.266a.6.6,0,0,0,.59.589H42.44a.58.58,0,0,0,.633-.589V14.909a5.612,5.612,0,0,0,2.428.608,5.075,5.075,0,0,0,4.9-5.332A5.027,5.027,0,0,0,45.587,4.874ZM43.029,8.457a2.633,2.633,0,0,1,2.278-1.305,2.789,2.789,0,0,1,2.708,3.033,2.9,2.9,0,0,1-2.794,3.053,4.131,4.131,0,0,1-2.192-.676Zm15.349,4.034c0,1.5-1.262,3.026-3.672,3.026a5.921,5.921,0,0,1-3.343-1.034h0a.522.522,0,0,1-.208-.663l.452-.925a.493.493,0,0,1,.3-.254.633.633,0,0,1,.5.075l.037.02a4.488,4.488,0,0,0,2.384.7c.74,0,1.2-.329,1.2-.856,0-.581-.666-.985-2.066-1.619-1.435-.646-2.763-1.487-2.763-3.252,0-1.41,1.056-2.832,3.414-2.832a5.71,5.71,0,0,1,2.973.752.705.705,0,0,1,.256.881L57.5,7.2a.58.58,0,0,1-.8.248,5.043,5.043,0,0,0-2.087-.485c-.8,0-1.156.386-1.156.768,0,.545.574.9,1.633,1.361C57.078,9.926,58.378,10.616,58.378,12.491Z\"\n />\n </svg>\n )\n}\n\nexport function People({ color, size = 20 }): JSX.Element {\n return (\n <svg\n data-name=\"Layer 1\"\n height={size}\n id=\"c461f8d4-1c6e-406e-af2d-8d7721d891d5\"\n viewBox=\"0 0 57.729 20\"\n xmlns=\"http://www.w3.org/2000/svg\"\n >\n <title>people-text</title>\n <path\n fill={color}\n d=\"M4.944,5.019a4.754,4.754,0,0,0-3.08,1.1l-.2-.487a.521.521,0,0,0-.539-.4H.59A.606.606,0,0,0,0,5.823V19.41A.6.6,0,0,0,.59,20H1.8a.58.58,0,0,0,.633-.59V15.053a5.593,5.593,0,0,0,2.428.607,5.075,5.075,0,0,0,4.9-5.331A5.027,5.027,0,0,0,4.944,5.019ZM2.387,8.6A2.63,2.63,0,0,1,4.665,7.3a2.789,2.789,0,0,1,2.708,3.032,2.9,2.9,0,0,1-2.795,3.054,4.109,4.109,0,0,1-2.191-.678ZM15.663,5.019a5.083,5.083,0,0,0-5.075,5.31,5.046,5.046,0,0,0,5.1,5.331A5.707,5.707,0,0,0,19.445,14.4a.511.511,0,0,0,.065-.818l-.583-.907a.459.459,0,0,0-.295-.22.609.609,0,0,0-.45.147,3.735,3.735,0,0,1-2.369.82,2.819,2.819,0,0,1-2.854-2.487h6.756a.578.578,0,0,0,.567-.531c.022-.177.045-.525.045-.7A4.572,4.572,0,0,0,15.663,5.019Zm-2.583,4.1a2.411,2.411,0,0,1,2.539-2.033,2.231,2.231,0,0,1,2.335,2.033Zm13.145-4.1a5.322,5.322,0,0,0,0,10.641,5.322,5.322,0,0,0,0-10.641Zm2.837,5.289a2.856,2.856,0,1,1-5.7,0,2.852,2.852,0,1,1,5.7,0Zm8.653-5.289a4.758,4.758,0,0,0-3.081,1.1l-.2-.487a.522.522,0,0,0-.54-.4h-.538a.606.606,0,0,0-.591.589V19.41a.592.592,0,0,0,.591.59h1.207a.58.58,0,0,0,.633-.59V15.05a5.541,5.541,0,0,0,2.428.61,5.075,5.075,0,0,0,4.9-5.331A5.027,5.027,0,0,0,37.715,5.019ZM35.158,8.6a2.629,2.629,0,0,1,2.277-1.3,2.789,2.789,0,0,1,2.708,3.032,2.9,2.9,0,0,1-2.794,3.054,4.109,4.109,0,0,1-2.191-.678ZM46.324,1.247V14.834a.606.606,0,0,1-.59.59H44.527a.6.6,0,0,1-.59-.59V1.247a.6.6,0,0,1,.59-.589h1.207A.621.621,0,0,1,46.324,1.247Zm6.459,3.772a5.083,5.083,0,0,0-5.075,5.31,5.047,5.047,0,0,0,5.1,5.331A5.713,5.713,0,0,0,56.566,14.4a.511.511,0,0,0,.064-.818l-.583-.907a.459.459,0,0,0-.295-.22.6.6,0,0,0-.449.147,3.739,3.739,0,0,1-2.369.82,2.821,2.821,0,0,1-2.855-2.487h6.756a.577.577,0,0,0,.567-.531c.022-.177.045-.525.045-.7A4.572,4.572,0,0,0,52.783,5.019ZM52.74,7.081a2.231,2.231,0,0,1,2.334,2.033H50.2A2.412,2.412,0,0,1,52.74,7.081Z\"\n />\n </svg>\n )\n}\n\nexport function Publishing({ color, size = 20 }): JSX.Element {\n return (\n <svg\n id=\"Layer_1\"\n data-name=\"Layer 1\"\n xmlns=\"http://www.w3.org/2000/svg\"\n height={size}\n viewBox=\"0 0 84.973 20\"\n >\n <title>publishing-text</title>\n <path\n d=\"M4.905,5.03A4.709,4.709,0,0,0,1.829,6.141l-.2-.511a.5.5,0,0,0-.52-.385H.568A.59.59,0,0,0,0,5.812V19.374a.575.575,0,0,0,.568.568h1.2a.559.559,0,0,0,.611-.568v-4.4a5.573,5.573,0,0,0,2.437.618A5.036,5.036,0,0,0,9.681,10.3,4.988,4.988,0,0,0,4.905,5.03ZM2.338,8.575A2.642,2.642,0,0,1,4.626,7.261,2.8,2.8,0,0,1,7.343,10.3a2.908,2.908,0,0,1-2.8,3.06,4.117,4.117,0,0,1-2.2-.684Zm17.4-2.763v8.974a.6.6,0,0,1-.59.569h-.515c-.326,0-.456-.238-.541-.472l-.2-.562a4.046,4.046,0,0,1-3.1,1.27c-3.358,0-3.788-2.484-3.788-4.647V5.812a.606.606,0,0,1,.568-.567h1.2a.59.59,0,0,1,.568.567v5.282c0,1.546.584,2.266,1.837,2.266A2.368,2.368,0,0,0,17.4,11.806V5.812c0-.524.323-.567.654-.567h1.094A.609.609,0,0,1,19.737,5.812Zm6.74-.782A6.836,6.836,0,0,0,24.1,5.5l-.018.006V1.246a.606.606,0,0,0-.568-.567H22.29a.583.583,0,0,0-.568.567v13.54a.576.576,0,0,0,.568.569h.516a.569.569,0,0,0,.542-.5l.17-.576a4.845,4.845,0,0,0,3.217,1.31c2.6,0,4.711-2.374,4.711-5.291A5.071,5.071,0,0,0,26.477,5.03ZM24.061,7.76a5.243,5.243,0,0,1,2.18-.5A3,3,0,0,1,29.107,10.3a2.9,2.9,0,0,1-2.694,3.06A2.761,2.761,0,0,1,24.061,12ZM35.225,1.246v13.54a.591.591,0,0,1-.568.569h-1.2a.576.576,0,0,1-.569-.569V1.246a.59.59,0,0,1,.569-.567h1.2A.606.606,0,0,1,35.225,1.246Zm4.349,4.566v8.974a.591.591,0,0,1-.568.569H37.8a.576.576,0,0,1-.568-.569V5.812a.582.582,0,0,1,.568-.567h1.2A.606.606,0,0,1,39.574,5.812Zm.387-3.577a1.547,1.547,0,0,1-1.556,1.534,1.508,1.508,0,0,1-1.513-1.534A1.519,1.519,0,0,1,38.405.679,1.539,1.539,0,0,1,39.961,2.235ZM48.143,12.6c0,1.488-1.25,2.994-3.638,2.994a5.875,5.875,0,0,1-3.318-1.026h0a.5.5,0,0,1-.2-.636l.45-.922a.47.47,0,0,1,.291-.243.613.613,0,0,1,.487.073l.036.02a4.489,4.489,0,0,0,2.385.7c.737,0,1.214-.342,1.214-.871,0-.589-.667-.994-2.069-1.629-1.423-.642-2.74-1.476-2.74-3.222,0-1.394,1.045-2.8,3.38-2.8a5.67,5.67,0,0,1,2.951.745.684.684,0,0,1,.248.853l-.343.687a.56.56,0,0,1-.769.238,5.05,5.05,0,0,0-2.087-.485c-.808,0-1.17.394-1.17.784,0,.554.575.91,1.638,1.372C46.853,10.057,48.143,10.742,48.143,12.6ZM58.461,9.805v4.981a.592.592,0,0,1-.569.569h-1.2a.576.576,0,0,1-.568-.569V9.763c0-1.614-.668-2.5-1.879-2.5a2.881,2.881,0,0,0-2.5,1.366v6.159a.554.554,0,0,1-.589.569H49.97a.576.576,0,0,1-.568-.569V1.246A.582.582,0,0,1,49.97.679h1.2a.606.606,0,0,1,.567.567V5.967a4.766,4.766,0,0,1,2.782-.937C57.1,5.03,58.461,6.681,58.461,9.805Zm4.2-3.993v8.974a.59.59,0,0,1-.567.569h-1.2a.576.576,0,0,1-.568-.569V5.812a.59.59,0,0,1,.568-.567h1.2A.606.606,0,0,1,62.657,5.812Zm.387-3.577a1.547,1.547,0,0,1-1.556,1.534,1.507,1.507,0,0,1-1.512-1.534A1.518,1.518,0,0,1,61.488.679,1.539,1.539,0,0,1,63.044,2.235Zm10.647,7.57v4.981a.591.591,0,0,1-.569.569h-1.2a.576.576,0,0,1-.568-.569V9.72c0-1.586-.66-2.459-1.858-2.459a2.944,2.944,0,0,0-2.523,1.364v6.161c0,.383-.221.569-.676.569H65.2a.576.576,0,0,1-.568-.569V5.812a.59.59,0,0,1,.568-.567h.516a.474.474,0,0,1,.5.375l.245.7a4.64,4.64,0,0,1,3.29-1.288C72.4,5.03,73.691,6.592,73.691,9.805Zm10.432-4.56h-.579c-.32,0-.4.236-.454.4l-.2.5a4.737,4.737,0,0,0-3.1-1.112A4.988,4.988,0,0,0,75.01,10.3a5.046,5.046,0,0,0,4.884,5.291,5.429,5.429,0,0,0,2.437-.64v.372c0,2.121-1.29,2.566-2.373,2.566a3.629,3.629,0,0,1-2.261-.9.547.547,0,0,0-.456-.111.535.535,0,0,0-.352.292l-.514.944a.551.551,0,0,0,.123.673A5.444,5.444,0,0,0,80,20.056a4.371,4.371,0,0,0,4.69-4.733V5.812A.582.582,0,0,0,84.123,5.245ZM80.151,13.36a2.979,2.979,0,0,1-2.8-3.06,2.7,2.7,0,0,1,5-1.715v4.029A3.973,3.973,0,0,1,80.151,13.36Z\"\n fill={color}\n />\n </svg>\n )\n}\n\nexport function Registrations({ color, size = 20 }): JSX.Element {\n return (\n <svg\n id=\"2da9f999-408b-4466-9b5d-b1268727ac81\"\n data-name=\"Layer 1\"\n xmlns=\"http://www.w3.org/2000/svg\"\n height={size}\n viewBox=\"0 0 105.758 20\"\n >\n <title>registrations-text</title>\n <path\n fill={color}\n d=\"M6.751,5.966,6.234,7.043a.589.589,0,0,1-.336.324.545.545,0,0,1-.423-.033,2.375,2.375,0,0,0-.854-.182A2.74,2.74,0,0,0,2.387,8.4v6.288c0,.59-.485.59-.8.59H.59a.6.6,0,0,1-.59-.59V5.679A.6.6,0,0,1,.59,5.09h.517a.574.574,0,0,1,.544.433l.212.685A4,4,0,0,1,4.836,4.874c.749,0,1.643.148,1.9.567A.517.517,0,0,1,6.751,5.966Zm9.583,3.593c0,.181-.022.53-.044.705a.578.578,0,0,1-.567.531H8.966a2.82,2.82,0,0,0,2.855,2.486,3.74,3.74,0,0,0,2.369-.819.608.608,0,0,1,.45-.148.465.465,0,0,1,.295.22l.583.907a.513.513,0,0,1-.065.819,5.708,5.708,0,0,1-3.762,1.256,5.046,5.046,0,0,1-5.1-5.331A5.083,5.083,0,0,1,11.67,4.874,4.572,4.572,0,0,1,16.334,9.559ZM11.627,6.937A2.411,2.411,0,0,0,9.087,8.97h4.874A2.23,2.23,0,0,0,11.627,6.937ZM26.8,5.679v9.55A4.407,4.407,0,0,1,22.071,20a5.486,5.486,0,0,1-3.53-1.284.564.564,0,0,1-.127-.7l.516-.948a.555.555,0,0,1,.365-.3.561.561,0,0,1,.474.114,3.622,3.622,0,0,0,2.259.905c1.078,0,2.364-.444,2.364-2.557v-.342a5.472,5.472,0,0,1-2.429.629,5.084,5.084,0,0,1-4.922-5.331,5.027,5.027,0,0,1,4.814-5.311,4.777,4.777,0,0,1,3.1,1.1l.2-.473c.053-.161.138-.415.473-.415h.582A.6.6,0,0,1,26.8,5.679ZM22.136,7.152a2.821,2.821,0,0,0-2.708,3.033,2.972,2.972,0,0,0,2.794,3.053,3.948,3.948,0,0,0,2.191-.74V8.468A2.834,2.834,0,0,0,22.136,7.152ZM29.965.6a1.544,1.544,0,0,0-1.538,1.582A1.55,1.55,0,0,0,29.965,3.74a1.571,1.571,0,1,0,0-3.141Zm.6,4.491H29.361a.6.6,0,0,0-.59.589v9.01a.59.59,0,0,0,.59.59h1.208a.6.6,0,0,0,.589-.59V5.679A.62.62,0,0,0,30.569,5.09Zm5.91,4c-1.059-.462-1.632-.815-1.632-1.36,0-.383.357-.769,1.155-.769a5.048,5.048,0,0,1,2.088.486.582.582,0,0,0,.8-.248l.345-.689a.709.709,0,0,0-.256-.882A5.713,5.713,0,0,0,36,4.874c-2.357,0-3.413,1.422-3.413,2.831,0,1.764,1.328,2.606,2.763,3.253,1.4.634,2.065,1.038,2.065,1.618,0,.528-.459.856-1.2.856a4.5,4.5,0,0,1-2.387-.7l-.034-.018a.644.644,0,0,0-.5-.076.494.494,0,0,0-.3.254l-.452.925a.517.517,0,0,0,.208.663h0a5.917,5.917,0,0,0,3.342,1.034c2.411,0,3.672-1.522,3.672-3.025C39.761,10.617,38.461,9.926,36.479,9.087Zm10.558,3.964a.556.556,0,0,0-.316-.335.523.523,0,0,0-.432.063,3.244,3.244,0,0,1-1.537.459c-.359,0-.681-.069-.681-.9V7.152h2.514a.605.605,0,0,0,.59-.59V5.679a.577.577,0,0,0-.59-.589H44.071V2.424a.574.574,0,0,0-.569-.59H42.273a.59.59,0,0,0-.589.59V5.09H40.657a.57.57,0,0,0-.59.589v.883a.59.59,0,0,0,.59.59h1.027v5.274c0,1.438.3,3.09,2.637,3.09a6.116,6.116,0,0,0,2.822-.729.556.556,0,0,0,.283-.721Zm8.023-7.61c-.263-.419-1.156-.567-1.905-.567a4,4,0,0,0-2.973,1.335l-.212-.686a.574.574,0,0,0-.544-.433h-.517a.6.6,0,0,0-.59.589v9.01a.59.59,0,0,0,.59.59H49.9c.321,0,.806,0,.806-.59V8.4A2.738,2.738,0,0,1,52.94,7.152a2.369,2.369,0,0,1,.853.182.548.548,0,0,0,.424.033.6.6,0,0,0,.336-.324l.517-1.077A.517.517,0,0,0,55.06,5.441Zm8.351,3.946v5.3a.605.605,0,0,1-.59.59H62.11c-.284,0-.412-.166-.516-.416l-.181-.509A4.386,4.386,0,0,1,58.4,15.516a3.2,3.2,0,0,1-3.328-3.435c0-2.021,1.611-3.327,4.1-3.327a7.7,7.7,0,0,1,1.892.265,2.3,2.3,0,0,0-.417-1.668A1.414,1.414,0,0,0,59.588,7a10.1,10.1,0,0,0-2.749.47.577.577,0,0,1-.7-.494l-.194-.82a.566.566,0,0,1,.4-.717A10.865,10.865,0,0,1,59.8,4.874C63.14,4.874,63.411,6.918,63.411,9.387Zm-4.06,1.149c-1.174,0-1.933.6-1.933,1.524a1.343,1.343,0,0,0,1.436,1.458,2.987,2.987,0,0,0,2.191-1.125V10.835A4.853,4.853,0,0,0,59.351,10.536Zm11.773,2.515a.556.556,0,0,0-.316-.335.523.523,0,0,0-.432.063,3.244,3.244,0,0,1-1.537.459c-.359,0-.681-.069-.681-.9V7.152h2.514a.605.605,0,0,0,.59-.59V5.679a.577.577,0,0,0-.59-.589H68.158V2.424a.574.574,0,0,0-.569-.59H66.36a.591.591,0,0,0-.59.59V5.09H64.744a.57.57,0,0,0-.59.589v.883a.591.591,0,0,0,.59.59H65.77v5.274c0,1.438.3,3.09,2.638,3.09a6.107,6.107,0,0,0,2.821-.729.556.556,0,0,0,.284-.721ZM74.2,5.09H72.994a.605.605,0,0,0-.591.589v9.01a.591.591,0,0,0,.591.59H74.2a.605.605,0,0,0,.59-.59V5.679A.621.621,0,0,0,74.2,5.09ZM73.6.6a1.543,1.543,0,0,0-1.538,1.582A1.55,1.55,0,0,0,73.6,3.74,1.571,1.571,0,1,0,73.6.6Zm12.869,9.563a5.341,5.341,0,0,1-5.182,5.354,5.323,5.323,0,1,1,5.182-5.354Zm-2.344,0a2.853,2.853,0,1,0-5.7,0,2.857,2.857,0,1,0,5.7,0Zm8.867-5.288a4.7,4.7,0,0,0-3.3,1.277l-.235-.671a.5.5,0,0,0-.522-.39h-.518a.6.6,0,0,0-.589.589v9.01a.6.6,0,0,0,.589.59h1.1c.469,0,.7-.192.7-.59V8.507A2.939,2.939,0,0,1,92.73,7.152c1.191,0,1.847.87,1.847,2.451v5.086a.6.6,0,0,0,.59.59h1.207a.605.605,0,0,0,.59-.59v-5C96.964,6.448,95.664,4.874,92.989,4.874Zm9.2,4.213c-1.059-.462-1.633-.815-1.633-1.36,0-.383.358-.769,1.156-.769a5.04,5.04,0,0,1,2.087.486.585.585,0,0,0,.8-.248l.344-.689a.709.709,0,0,0-.255-.882,5.718,5.718,0,0,0-2.974-.751C99.355,4.874,98.3,6.3,98.3,7.705c0,1.764,1.328,2.606,2.763,3.253,1.4.634,2.066,1.038,2.066,1.618,0,.528-.46.856-1.2.856a4.49,4.49,0,0,1-2.387-.7l-.034-.018A.633.633,0,0,0,99,12.64a.49.49,0,0,0-.3.253l-.452.925a.516.516,0,0,0,.209.663h0a5.923,5.923,0,0,0,3.342,1.034c2.411,0,3.673-1.522,3.673-3.025C105.472,10.617,104.172,9.926,102.19,9.087Z\"\n />\n </svg>\n )\n}\n\nexport function Services({ color, size = 20 }): JSX.Element {\n return (\n <svg\n id=\"bd77a8f3-6992-4241-927e-9fdc3bf67b80\"\n data-name=\"Layer 1\"\n xmlns=\"http://www.w3.org/2000/svg\"\n height={size}\n viewBox=\"0 0 67.995 20\"\n >\n <title>services-text</title>\n <path\n fill={color}\n d=\"M7.277,12.49c0,1.5-1.262,3.026-3.672,3.026A5.924,5.924,0,0,1,.262,14.482h0a.521.521,0,0,1-.209-.663L.5,12.893a.5.5,0,0,1,.305-.254.62.62,0,0,1,.5.075l.036.019a4.479,4.479,0,0,0,2.385.7c.74,0,1.2-.328,1.2-.856,0-.582-.666-.985-2.066-1.618C1.432,10.311.105,9.469.105,7.705c0-1.41,1.055-2.832,3.413-2.832a5.717,5.717,0,0,1,2.974.752.7.7,0,0,1,.255.881L6.4,7.2a.58.58,0,0,1-.8.248,5.04,5.04,0,0,0-2.087-.485c-.8,0-1.155.386-1.155.768,0,.546.573.9,1.632,1.361C5.977,9.925,7.277,10.615,7.277,12.49ZM17.622,9.559c0,.178-.022.528-.044.7a.58.58,0,0,1-.568.532H10.255a2.818,2.818,0,0,0,2.854,2.485,3.734,3.734,0,0,0,2.369-.819.64.64,0,0,1,.451-.148.472.472,0,0,1,.294.22l.583.907a.513.513,0,0,1-.065.82,5.715,5.715,0,0,1-3.761,1.256,5.047,5.047,0,0,1-5.1-5.332,5.083,5.083,0,0,1,5.074-5.311A4.573,4.573,0,0,1,17.622,9.559ZM15.249,8.97a2.229,2.229,0,0,0-2.334-2.034,2.412,2.412,0,0,0-2.54,2.034Zm8.511-4.1a3.929,3.929,0,0,0-2.972,1.338l-.213-.688a.575.575,0,0,0-.544-.434h-.518a.6.6,0,0,0-.589.589v9.01a.6.6,0,0,0,.589.59h.992c.32,0,.8,0,.8-.59V8.4a2.74,2.74,0,0,1,2.235-1.249,2.351,2.351,0,0,1,.854.183.534.534,0,0,0,.424.032.584.584,0,0,0,.334-.323l.518-1.077a.517.517,0,0,0-.01-.525C25.4,5.022,24.509,4.873,23.76,4.873Zm11.569.216H34.36c-.288,0-.613,0-.774.348l-2.695,5.912L28.319,5.433a.545.545,0,0,0-.535-.344H26.469a.544.544,0,0,0-.493.238.489.489,0,0,0,.024.49l4.311,9.376a.6.6,0,0,0,.534.323h.13a.56.56,0,0,0,.514-.327L35.8,5.822a.49.49,0,0,0,.027-.5A.545.545,0,0,0,35.329,5.089Zm3.154,0H37.276a.6.6,0,0,0-.59.589v9.01a.6.6,0,0,0,.59.59h1.207a.605.605,0,0,0,.59-.59V5.678A.621.621,0,0,0,38.483,5.089ZM37.879.6A1.543,1.543,0,0,0,36.341,2.18a1.532,1.532,0,0,0,1.538,1.559,1.57,1.57,0,1,0,0-3.14Zm10.8,11.392a.567.567,0,0,0-.818.047c-.08.073-.16.152-.241.233a2.623,2.623,0,0,1-2.031.966,2.92,2.92,0,0,1-2.838-3.053,2.778,2.778,0,0,1,4.87-2.073c.165.164.444.443.806.11l.774-.71a.606.606,0,0,0,.1-.87,4.465,4.465,0,0,0-3.711-1.768,5.285,5.285,0,0,0-5.225,5.332,5.2,5.2,0,0,0,5.2,5.311,4.647,4.647,0,0,0,3.977-2.12c.13-.2.2-.5-.2-.866ZM59.784,9.559c0,.178-.022.528-.044.7a.58.58,0,0,1-.567.532H52.417a2.818,2.818,0,0,0,2.854,2.485,3.734,3.734,0,0,0,2.369-.819.641.641,0,0,1,.451-.148.472.472,0,0,1,.294.22l.583.907a.513.513,0,0,1-.065.82,5.712,5.712,0,0,1-3.761,1.256,5.047,5.047,0,0,1-5.1-5.332A5.083,5.083,0,0,1,55.12,4.873,4.573,4.573,0,0,1,59.784,9.559ZM52.537,8.97h4.874a2.229,2.229,0,0,0-2.334-2.034A2.412,2.412,0,0,0,52.537,8.97ZM64.4,9.087c-1.06-.462-1.633-.816-1.633-1.361,0-.382.357-.768,1.156-.768a5.047,5.047,0,0,1,2.087.485.58.58,0,0,0,.8-.248l.344-.689a.706.706,0,0,0-.256-.881,5.71,5.71,0,0,0-2.973-.752c-2.358,0-3.414,1.422-3.414,2.832,0,1.764,1.328,2.606,2.763,3.253,1.4.633,2.066,1.036,2.066,1.618,0,.528-.459.856-1.2.856a4.485,4.485,0,0,1-2.384-.7l-.037-.02a.632.632,0,0,0-.5-.075.493.493,0,0,0-.3.254l-.452.925a.521.521,0,0,0,.209.663h0a5.923,5.923,0,0,0,3.342,1.034c2.412,0,3.673-1.522,3.673-3.026C67.685,10.615,66.385,9.925,64.4,9.087Z\"\n />\n </svg>\n )\n}\n","import React from \"react\"\n\nimport * as MonoAppText from \"./mono_app_text\"\n\nexport function MonoAppName({ appName, color, size = 20 }) {\n return MonoAppText[appName] ? (\n React.createElement(MonoAppText[appName], { color, size })\n ) : (\n <div>appName not supported</div>\n )\n}\n","export const slightBackgroundTransition = {\n transition: \"background-color 120ms ease-in\",\n}\n\nexport const fontFamily = {\n fontFamily: `inherit`,\n}\n\nexport const IEFlex1 = {\n flex: \"1 1 auto\",\n}\n","import React from \"react\"\n\nexport const Bell = ({\n dot = false,\n dotFill = \"#fff\",\n fill = \"#fff\",\n style,\n ...props\n}: {\n dot?: boolean\n dotFill?: string\n fill?: string\n style?: object\n}) => {\n const bellPath = (\n <path\n d=\"M21.482,16.626,19.1,13.649V9a7,7,0,0,0-14,0v4.649L2.478,16.929A1.89,1.89,0,0,0,3.952,20H9.285a2.983,2.983,0,0,0,5.633,0H19.86a2.077,2.077,0,0,0,1.622-3.374ZM19.86,18H4.182l2.7-3.375A1,1,0,0,0,7.1,14V9a5,5,0,0,1,10,0v5a1,1,0,0,0,.219.625l2.6,3.25Z\"\n fill=\"white\"\n />\n )\n return (\n <svg\n width=\"24\"\n height=\"24\"\n viewBox=\"0 0 24 24\"\n style={{ display: \"block\", ...style }}\n {...props}\n stroke=\"none\"\n >\n <title>bell</title>\n <defs>\n <mask id=\"mask-no-dot\">{bellPath}</mask>\n <mask id=\"mask-dot\">\n {bellPath}\n <circle cx=\"18\" cy=\"6\" fill=\"black\" r=\"7\" />\n </mask>\n </defs>\n <rect\n fill={fill}\n height=\"24\"\n mask={dot ? \"url(#mask-dot)\" : \"url(#mask-no-dot\"}\n width=\"24\"\n x=\"0\"\n y=\"0\"\n />\n {dot && <circle cx=\"18\" cy=\"6\" r=\"4\" fill={dotFill || fill} />}\n </svg>\n )\n}\n\nexport const BlankStateIcon = ({\n dark = false,\n id = \"default\",\n style,\n ...nativeProps\n}: {\n dark?: boolean\n id?: string\n style?: object\n}) => (\n <svg\n fill=\"none\"\n height=\"123\"\n style={{ ...style }}\n width=\"160\"\n {...nativeProps}\n >\n <g clipPath={`url(#clip-path-blank-state-${id})`}>\n <path\n opacity=\".6\"\n d=\"M155.367 66.751c-6.081 17.955-18.824 33.158-32.579 41.991-14.045 8.977-28.96 11.294-46.19 7.529-16.941-3.764-33.738-11.583-47.638-18.968C15.204 89.63 4.344 82.533 1.593 71.385-1.013 60.525 4.78 45.61 18.68 30.842 32.435 16.362 54.3 2.896 80.362.579c25.919-2.606 49.666 6.082 63.276 18.534 13.901 12.597 17.666 29.828 11.729 47.638z\"\n fill={dark ? \"#414141\" : \"#E1F0F9\"}\n />\n <g opacity=\".2\">\n <path\n opacity=\".2\"\n d=\"M90.643 122.063c-9.702 0-19.258-2.606-29.25-7.674-12.741-6.66-26.352-16.796-41.41-30.841C8.832 72.688-.29 62.697 0 50.678c.145-8.542 5.503-17.81 14.914-26.352l1.448 1.593c-9.122 8.108-14.19 16.94-14.335 24.76-.29 11.294 8.543 20.85 19.403 31.42C36.344 96 49.81 105.992 62.263 112.508c13.031 6.805 25.629 8.977 38.371 6.516l.434 2.027c-3.475.724-6.95 1.013-10.425 1.013zM116.706 115.982l-.869-1.738c13.756-6.226 25.919-16.507 34.027-28.67l1.738 1.159c-8.254 12.453-20.706 22.878-34.896 29.249zM158.552 71.385l-2.027-.58c2.896-11.294.869-22.877-5.792-33.303-10.715-17.086-32-29.973-55.457-33.882-19.258-3.475-40.108-.29-58.642 8.688l-.869-1.883c18.824-9.122 40.109-12.307 59.8-8.832 24.037 3.91 45.901 17.23 56.906 34.75 7.095 11.005 9.267 23.023 6.081 35.042z\"\n fill=\"#BAC7D3\"\n />\n </g>\n <path\n d=\"M115.258 20.706l-.145 4.199c0 .869.289 1.882 1.013 2.461l3.186 2.752c.724.724.29 1.882-.724 1.882l-4.199-.145c-.869 0-1.882.29-2.462 1.014l-2.896 3.33c-.724.724-1.882.29-1.882-.724l.145-4.199c0-.869-.29-1.882-1.014-2.462l-3.185-2.75c-.724-.725-.29-1.883.724-1.883l4.199.145c.869 0 1.882-.29 2.461-1.014l2.751-3.185c.724-.87 2.028-.435 2.028.579zM92.959 30.842v1.882c0 .434.144.869.579 1.158l1.448 1.159c.29.29.145.869-.29.869h-1.882c-.434 0-.869.144-1.158.579l-1.159 1.448c-.29.29-.869.145-.869-.29v-1.882c0-.435-.144-.869-.579-1.159l-1.448-1.158c-.29-.29-.145-.869.29-.869h1.882c.435 0 .869-.145 1.159-.579l1.158-1.448c.29-.434.869-.29.869.29z\"\n fill=\"#FCC846\"\n />\n <path\n d=\"M68.778 36.633l-19.982 57.63 57.919-20.127-37.937-37.502z\"\n fill=\"#48A5E5\"\n />\n <path\n d=\"M82.099 54.299H62.696l2.027-5.647h12.308l5.068 5.647zM99.91 70.082H57.194l2.027-5.648h33.737l6.95 5.648zM72.398 85.864H51.692l1.737-5.647h35.91l-16.941 5.647z\"\n fill=\"#79CAF2\"\n />\n <path\n d=\"M107.613 73.964c1.44-1.5-6.087-11.069-16.813-21.374-10.726-10.305-20.588-17.443-22.029-15.944-1.44 1.5 6.087 11.069 16.813 21.374 10.726 10.305 20.588 17.443 22.029 15.944z\"\n fill={dark ? \"#525252\" : \"#636363\"}\n />\n <path\n d=\"M113.086 55.747h-3.041c-.724 0-1.303.29-1.737.868l-1.883 2.607c-.434.579-1.448.29-1.448-.435l-.144-3.185c0-.724-.29-1.303-.869-1.738l-2.607-1.882c-.579-.434-.289-1.448.435-1.448l3.185-.145c.724 0 1.303-.29 1.738-.869l1.882-2.606c.435-.58 1.448-.29 1.448.434l.145 3.186c0 .724.29 1.303.869 1.738l2.606 1.882c.579.58.29 1.593-.579 1.593z\"\n fill=\"#FCC846\"\n />\n </g>\n <defs>\n <clipPath id={`clip-path-blank-state-${id}`}>\n <path fill=\"#fff\" d=\"M0 0h160v122.063H0z\" />\n </clipPath>\n </defs>\n </svg>\n)\n\nexport const ChevronIcon = ({\n fill = \"#000\",\n size = 24,\n style,\n ...nativeProps\n}: {\n fill?: string\n size?: number\n style?: object\n}) => (\n <svg\n height={size}\n style={{ display: \"block\", ...style }}\n viewBox=\"0 0 16 16\"\n width={size}\n {...nativeProps}\n >\n <title>chevron</title>\n <path\n d=\"M10.209 16L2.255 8.045L10.209 0.0910034L11.977 1.859L5.789 8.045L11.977 14.233L10.209 16Z\"\n fill={fill}\n />\n </svg>\n)\n\nexport const Cog = ({\n fill = \"#000\",\n size = 24,\n style,\n ...nativeProps\n}: {\n fill?: string\n size?: number\n style?: object\n}) => (\n <svg\n height={size}\n style={{ display: \"block\", ...style }}\n viewBox=\"0 0 16 16\"\n width={size}\n {...nativeProps}\n >\n <title>cog icon</title>\n <path\n d=\"M15.975 7.169H15.965L14.44 6.91C14.3024 6.90264 14.1694 6.85837 14.0548 6.78182C13.9403 6.70528 13.8484 6.59929 13.789 6.475C13.653 5.95399 13.4465 5.45403 13.175 4.989C13.1286 4.85874 13.118 4.71844 13.1442 4.58267C13.1704 4.44691 13.2325 4.32064 13.324 4.217L14.224 2.957L14.23 2.949C14.24 2.934 14.24 2.923 14.23 2.914L14.2 2.89L14.155 2.844L13.155 1.844L13.095 1.784L13.085 1.775C13.076 1.765 13.065 1.765 13.05 1.775L11.782 2.675C11.6788 2.76662 11.5529 2.82887 11.4175 2.85525C11.2821 2.88164 11.142 2.87119 11.012 2.825C10.5462 2.55339 10.0456 2.34649 9.524 2.21C9.40004 2.1505 9.29435 2.05878 9.218 1.94443C9.14164 1.83007 9.09744 1.6973 9.09 1.56L8.833 0.035V0.025C8.828 0.008 8.821 0 8.807 0H7.193C7.179 0 7.172 0.008 7.169 0.025L6.91 1.56C6.90286 1.69763 6.85866 1.83078 6.7821 1.94537C6.70553 2.05996 6.59942 2.15173 6.475 2.211C5.95399 2.34697 5.45403 2.55355 4.989 2.825C4.85874 2.87138 4.71844 2.88203 4.58267 2.85583C4.44691 2.82962 4.32064 2.76753 4.217 2.676L2.957 1.776L2.949 1.77C2.934 1.76 2.923 1.76 2.914 1.77L2.89 1.8L2.844 1.845L1.844 2.845L1.784 2.905L1.775 2.915C1.765 2.924 1.765 2.935 1.775 2.95L2.675 4.218C2.76662 4.32118 2.82887 4.44706 2.85525 4.5825C2.88164 4.71794 2.87119 4.85797 2.825 4.988C2.55382 5.45174 2.34724 5.95035 2.211 6.47C2.15164 6.59477 2.05996 6.70138 1.94549 6.77875C1.83101 6.85612 1.69791 6.90144 1.56 6.91L0.035 7.167H0.025C0.008 7.167 0 7.177 0 7.191V8.807C0 8.821 0.008 8.828 0.025 8.831L1.56 9.09C1.69791 9.09856 1.83101 9.14388 1.94549 9.22125C2.05996 9.29862 2.15164 9.40523 2.211 9.53C2.34701 10.0494 2.5536 10.5477 2.825 11.011C2.87138 11.1413 2.88203 11.2816 2.85583 11.4173C2.82962 11.5531 2.76753 11.6794 2.676 11.783L1.776 13.051C1.766 13.066 1.766 13.077 1.776 13.086L1.785 13.096L1.845 13.156L2.845 14.156L2.891 14.201L2.915 14.225C2.924 14.235 2.935 14.235 2.95 14.225L2.958 14.219L4.218 13.319C4.32118 13.2274 4.44706 13.1651 4.5825 13.1387C4.71794 13.1124 4.85797 13.1228 4.988 13.169C5.452 13.4406 5.95095 13.6475 6.471 13.784C6.59563 13.8433 6.70214 13.9348 6.77951 14.0491C6.85687 14.1634 6.90227 14.2963 6.911 14.434L7.17 15.97C7.17 15.987 7.18 15.995 7.194 15.995H8.807C8.821 15.995 8.828 15.987 8.831 15.97V15.96L9.088 14.434C9.09673 14.2963 9.14213 14.1634 9.21949 14.0491C9.29686 13.9348 9.40337 13.8433 9.528 13.784C10.0474 13.648 10.5457 13.4414 11.009 13.17C11.1393 13.1236 11.2796 13.113 11.4153 13.1392C11.5511 13.1654 11.6774 13.2275 11.781 13.319L13.049 14.219C13.064 14.229 13.075 14.229 13.084 14.219L13.094 14.21L13.154 14.15L14.154 13.15L14.199 13.104L14.223 13.08C14.233 13.071 14.233 13.06 14.223 13.045L14.217 13.037L13.317 11.777C13.2254 11.6738 13.1631 11.5479 13.1367 11.4125C13.1104 11.2771 13.1208 11.137 13.167 11.007C13.4386 10.543 13.6455 10.044 13.782 9.524C13.8414 9.39923 13.933 9.29262 14.0475 9.21525C14.162 9.13788 14.2951 9.09256 14.433 9.084L15.968 8.825C15.985 8.825 15.993 8.815 15.993 8.801V7.193C16 7.179 15.992 7.172 15.975 7.169ZM10.619 10.619C10.1012 11.1357 9.44195 11.4873 8.72443 11.6295C8.00691 11.7716 7.26336 11.6979 6.58772 11.4176C5.91208 11.1374 5.33467 10.6631 4.92844 10.0548C4.52222 9.44652 4.30541 8.73147 4.30541 8C4.30541 7.26854 4.52222 6.55348 4.92844 5.94519C5.33467 5.33689 5.91208 4.86265 6.58772 4.58238C7.26336 4.30211 8.00691 4.22839 8.72443 4.37054C9.44195 4.51268 10.1012 4.86431 10.619 5.381C10.9634 5.72468 11.2366 6.1329 11.423 6.5823C11.6095 7.03171 11.7054 7.51346 11.7054 8C11.7054 8.48654 11.6095 8.96829 11.423 9.4177C11.2366 9.8671 10.9634 10.2753 10.619 10.619Z\"\n fill={fill}\n />\n </svg>\n)\n\nexport const DisclosureChevronIcon = ({\n colors,\n style,\n ...nativeProps\n}: {\n colors: any\n style?: object\n}) => (\n <svg\n color={colors.base3}\n height=\"16\"\n viewBox=\"0 0 16 16\"\n width=\"16\"\n {...{ style }}\n {...nativeProps}\n >\n <title>chevron</title>\n <polygon\n fill=\"currentColor\"\n points=\"11.931 4.892 8 8.824 4.069 4.892 2.927 6.034 8 11.108 9.142 9.966 13.073 6.034 11.931 4.892\"\n />\n </svg>\n)\n\nexport const HelpIcon = ({\n colors,\n style,\n ...nativeProps\n}: {\n colors: any\n style?: object\n}) => (\n <svg\n color={colors.base3}\n height=\"24\"\n style={{ display: \"block\" }}\n viewBox=\"0 0 24 24\"\n width=\"24\"\n {...nativeProps}\n >\n <title>help</title>\n <path\n d=\"M12,22A10,10,0,1,1,22,12,10.011,10.011,0,0,1,12,22ZM12,4a8,8,0,1,0,8,8A8.009,8.009,0,0,0,12,4Zm-.342,11.067a1.41,1.41,0,1,0,1.41,1.41A1.41,1.41,0,0,0,11.658,15.067Zm1.914-2.488c1.938-1.885,2.232-3.607.872-5.118A3.37,3.37,0,0,0,11.9,6.307h-.017A5.121,5.121,0,0,0,8.343,7.959L9.817,9.311a3.153,3.153,0,0,1,2.067-1h.008a1.366,1.366,0,0,1,1.065.493c.494.549.517,1.085-.78,2.345A4.612,4.612,0,0,0,10.632,14.2h2A2.733,2.733,0,0,1,13.572,12.579Z\"\n fill=\"currentColor\"\n />\n </svg>\n)\n\nexport const ExclamationTriangle = ({\n fill = \"#000\",\n size = 24,\n style,\n ...nativeProps\n}: {\n fill?: string\n size: number\n style?: object\n}) => (\n <svg\n height={size}\n style={{ display: \"block\", ...style }}\n viewBox=\"0 0 16 16\"\n width={size}\n {...nativeProps}\n >\n <title>exclamation triangle icon</title>\n <path\n d=\"M15.669 13.676L8.65499 1.56099C8.58867 1.44593 8.49322 1.35037 8.37823 1.28392C8.26325 1.21748 8.13279 1.1825 7.99999 1.1825C7.86718 1.1825 7.73672 1.21748 7.62174 1.28392C7.50675 1.35037 7.4113 1.44593 7.34499 1.56099L0.330986 13.676C0.264196 13.7911 0.228916 13.9217 0.2287 14.0548C0.228484 14.1878 0.26334 14.3186 0.329756 14.4339C0.396172 14.5492 0.491802 14.6449 0.60701 14.7115C0.722218 14.778 0.852933 14.813 0.985986 14.813H15.014C15.147 14.813 15.2778 14.778 15.393 14.7115C15.5082 14.6449 15.6038 14.5492 15.6702 14.4339C15.7366 14.3186 15.7715 14.1878 15.7713 14.0548C15.7711 13.9217 15.7358 13.7911 15.669 13.676ZM8.75699 12.542H7.24299V11.028H8.75699V12.542ZM8.75699 9.51399H7.24299V6.48499H8.75699V9.51399Z\"\n fill={fill}\n />\n </svg>\n)\n\nexport const Spyglass = ({\n fill = \"#000\",\n style,\n ...nativeProps\n}: {\n fill?: string\n style?: object\n}) => (\n <svg\n width=\"24\"\n height=\"24\"\n viewBox=\"0 0 24 24\"\n style={{ display: \"block\", ...style }}\n {...nativeProps}\n >\n <title>search spyglass icon</title>\n <path\n d=\"M17.352,15.481a8.517,8.517,0,1,0-2.209,2.033l4.642,4.642,2.121-2.121Zm-6.757,1.364a6.5,6.5,0,1,1,6.5-6.5A6.508,6.508,0,0,1,10.595,16.845Z\"\n fill={fill}\n />\n </svg>\n)\n\nexport const X = ({\n fill = \"#A0A0A0\",\n style,\n ...nativeProps\n}: {\n fill?: string\n style?: object\n}) => (\n <svg\n width=\"16\"\n height=\"16\"\n viewBox=\"0 0 16 16\"\n style={{ display: \"block\", ...style }}\n {...nativeProps}\n >\n <title>close-x</title>\n <path\n d=\"M9.142,8l3.814,3.814-1.142,1.142L8,9.142,4.186,12.956,3.044,11.814,6.858,8,3.044,4.186,4.186,3.044,8,6.858l3.814-3.814,1.142,1.142Z\"\n fill={fill}\n />\n </svg>\n)\n","import React from \"react\"\n\nimport { fontFamily } from \"./styles\"\n\nexport function Unbutton({\n style,\n ...nativeProps\n}: {\n children: any\n id?: string\n onClick?: any\n onMouseDown?: any\n onMouseEnter?: any\n onMouseLeave?: any\n onMouseUp?: any\n style?: object\n}): JSX.Element {\n return (\n <button\n style={{\n WebkitAppearance: \"none\",\n appearance: \"none\",\n backgroundColor: \"transparent\",\n border: \"none\",\n cursor: \"pointer\",\n display: \"inline-block\",\n outline: 0,\n padding: 0,\n ...fontFamily,\n ...style,\n }}\n {...nativeProps}\n />\n )\n}\n","import React from \"react\"\n\nimport { MonoAppIcon } from \"../mono_app_icon\"\nimport { MonoAppName } from \"../mono_app_name\"\nimport { slightBackgroundTransition } from \"../styles\"\nimport { DisclosureChevronIcon } from \"../symbols\"\nimport { Unbutton } from \"../unbutton\"\n\nconst AppsButton = ({\n appName,\n colors,\n displayIconOnly,\n expanded,\n onClick,\n style = null,\n ...nativeProps\n}: {\n appName: string\n colors: any\n displayIconOnly?: boolean\n expanded: boolean\n onClick: any\n style?: object\n}) => {\n const [down, setDown] = React.useState(false)\n const [entered, setEntered] = React.useState(false)\n\n const getBackgroundColor = () => {\n if (expanded && !down) return colors.base1\n if (entered && down) return colors.base2\n if (entered) return colors.base1\n return \"transparent\"\n }\n\n return (\n <Unbutton\n onClick={onClick}\n onMouseDown={() => setDown(true)}\n onMouseEnter={() => setEntered(true)}\n onMouseLeave={() => setEntered(false)}\n onMouseUp={() => setDown(false)}\n style={{\n alignItems: \"center\",\n backgroundColor: getBackgroundColor(),\n display: \"flex\",\n height: \"100%\",\n outline: 0, // TODO: #improve-outline-a11y\n paddingLeft: \"16px\",\n paddingRight: \"16px\",\n whiteSpace: \"nowrap\",\n ...slightBackgroundTransition,\n ...style,\n }}\n {...nativeProps}\n >\n <MonoAppIcon\n appName={appName.replace(/[\\s-]/, \"\")}\n colors={colors}\n size={24}\n />\n {!displayIconOnly && (\n <>\n {appName === \"Accounts\" ? (\n <div\n style={{\n color: \"#fff\",\n fontSize: \"14px\",\n fontWeight: 500,\n marginLeft: 3,\n }}\n >\n Account settings\n </div>\n ) : (\n <>\n <div key=\"spacer-1\" style={{ margin: 4 }} />\n <MonoAppName\n appName={appName.replace(/[\\s-]/, \"\")}\n color=\"#fff\"\n key=\"mono-app-name\"\n size={24}\n />\n </>\n )}\n <div key=\"space-2\" style={{ margin: 4 }} />\n <DisclosureChevronIcon\n colors={colors}\n key=\"disclosure-chevron-icon\"\n style={{ display: \"block\" }}\n />\n </>\n )}\n </Unbutton>\n )\n}\n\nexport default AppsButton\n","// TODO: Use Fragments when we React 16 is a baseline\nimport React from \"react\"\n\nexport function Accounts(): JSX.Element[] {\n return [\n <defs key=\"def\">\n <linearGradient\n id=\"2e1ed2e7-b842-4126-8f57-f6b6dd63ddb6\"\n x1=\"1.844\"\n y1=\"1.833\"\n x2=\"18.622\"\n y2=\"18.612\"\n gradientUnits=\"userSpaceOnUse\"\n >\n <stop offset=\"0\" stopColor=\"#32a0f0\" />\n <stop offset=\"1\" stopColor=\"#3f75e5\" />\n </linearGradient>\n </defs>,\n <title key=\"title\">accounts-squircle</title>,\n <path\n key=\"path\"\n d=\"M19.96,10c0,7.962-1.991,9.952-9.952,9.952S.056,17.959.056,10,2.047.045,10.008.045,19.96,2.036,19.96,10Z\"\n fill=\"url(#2e1ed2e7-b842-4126-8f57-f6b6dd63ddb6)\"\n />,\n ]\n}\n\nexport function API(): JSX.Element[] {\n return [\n <defs key=\"def\">\n <linearGradient\n id=\"c8ec303e-a96d-4850-93ae-70864e3306bb\"\n x1=\"0.991\"\n y1=\"0.983\"\n x2=\"19.295\"\n y2=\"19.288\"\n gradientUnits=\"userSpaceOnUse\"\n >\n <stop offset=\"0\" stopColor=\"#32a0f0\" />\n <stop offset=\"1\" stopColor=\"#3f75e5\" />\n </linearGradient>\n </defs>,\n <title key=\"title\">api-squircle</title>,\n <path\n key=\"path\"\n d=\"M20,10c0,7.991-2,9.989-9.989,9.989S.019,17.991.019,10s2-9.989,9.989-9.989S20,2.009,20,10Z\"\n fill=\"url(#c8ec303e-a96d-4850-93ae-70864e3306bb)\"\n />,\n ]\n}\n\nexport function Calendar(): JSX.Element[] {\n return [\n <defs key=\"defs\">\n <linearGradient\n id=\"calendar-gradient\"\n x1=\"2.05\"\n y1=\"2.04\"\n x2=\"17.97\"\n y2=\"17.96\"\n gradientUnits=\"userSpaceOnUse\"\n >\n <stop offset=\"0\" stopColor=\"#f25437\" />\n <stop offset=\"1\" stopColor=\"#cd4e39\" />\n </linearGradient>\n </defs>,\n <title key=\"title\">calendar-squircle</title>,\n <path\n key=\"path\"\n d=\"M20,10c0,8-2,10-10,10S.06,18,.06,10,2.05.05,10,.05,20,2,20,10Z\"\n fill=\"url(#calendar-gradient)\"\n />,\n ]\n}\n\nexport function CheckIns(): JSX.Element[] {\n return [\n <defs key=\"def\">\n <linearGradient\n id=\"679bc2bf-38c8-45ab-9ee3-a2ff814fead7\"\n x1=\"1.75\"\n y1=\"1.739\"\n x2=\"18.156\"\n y2=\"18.145\"\n gradientUnits=\"userSpaceOnUse\"\n >\n <stop offset=\"0\" stopColor=\"#a76ebe\" />\n <stop offset=\"1\" stopColor=\"#875e96\" />\n </linearGradient>\n </defs>,\n <title key=\"title\">check-ins-squircle</title>,\n <path\n key=\"path\"\n d=\"M10.008.045C2.047.045.056,2.036.056,10s1.991,9.952,9.952,9.952S19.96,17.959,19.96,10,17.969.045,10.008.045Z\"\n fill=\"url(#679bc2bf-38c8-45ab-9ee3-a2ff814fead7)\"\n />,\n ]\n}\n\nexport function ChurchCenter(): JSX.Element[] {\n return [\n <defs key=\"def\">\n <linearGradient\n id=\"6de99831-a6f8-498e-9bf3-9d55c8d887fa\"\n x1=\"2.04\"\n y1=\"2.029\"\n x2=\"17.976\"\n y2=\"17.965\"\n gradientUnits=\"userSpaceOnUse\"\n >\n <stop offset=\"0\" stopColor=\"#42a5f5\" />\n <stop offset=\"1\" stopColor=\"#66bb6a\" />\n </linearGradient>\n </defs>,\n <title key=\"title\">church-center-squircle</title>,\n <path\n key=\"path\"\n d=\"M10.008.037C2.04.037.048,2.029.048,10s1.992,9.96,9.96,9.96,9.96-1.992,9.96-9.96S17.976.037,10.008.037Z\"\n fill=\"url(#6de99831-a6f8-498e-9bf3-9d55c8d887fa)\"\n />,\n ]\n}\n\nexport function Giving(): JSX.Element[] {\n return [\n <defs key=\"def\">\n <linearGradient\n id=\"0aae6372-b733-476d-af45-8777c08c1e24\"\n x1=\"2.047\"\n y1=\"2.036\"\n x2=\"17.969\"\n y2=\"17.959\"\n gradientUnits=\"userSpaceOnUse\"\n >\n <stop offset=\"0\" stopColor=\"#f5c426\" />\n <stop offset=\"1\" stopColor=\"#f2b327\" />\n </linearGradient>\n </defs>,\n <title key=\"title\">giving-squircle</title>,\n <path\n key=\"path\"\n d=\"M10.008.045C2.047.045.056,2.036.056,10s1.991,9.952,9.952,9.952S19.96,17.959,19.96,10,17.969.045,10.008.045Z\"\n fill=\"url(#0aae6372-b733-476d-af45-8777c08c1e24)\"\n />,\n ]\n}\n\nexport function Groups(): JSX.Element[] {\n return [\n <defs key=\"def\">\n <linearGradient\n id=\"86d10072-1c7f-4a02-88fe-0735565ae99a\"\n x1=\"1.939\"\n y1=\"1.928\"\n x2=\"18.146\"\n y2=\"18.135\"\n gradientUnits=\"userSpaceOnUse\"\n >\n <stop offset=\"0\" stopColor=\"#ff962d\" />\n <stop offset=\"1\" stopColor=\"#fc7638\" />\n </linearGradient>\n </defs>,\n <title key=\"title\">groups-squircle</title>,\n <path\n key=\"path\"\n d=\"M19.96,10c0,7.962-1.991,9.952-9.952,9.952S.056,17.959.056,10,2.047.045,10.008.045,19.96,2.036,19.96,10Z\"\n fill=\"url(#86d10072-1c7f-4a02-88fe-0735565ae99a)\"\n />,\n ]\n}\n\nexport function Home(): JSX.Element[] {\n return [\n <defs key=\"def\">\n <linearGradient\n id=\"paint0_linear_1_2\"\n x1=\"-2.23242\"\n y1=\"0.320978\"\n x2=\"19.9609\"\n y2=\"22.5228\"\n gradientUnits=\"userSpaceOnUse\"\n >\n <stop offset=\"0\" stopColor=\"#289DFF\" />\n <stop offset=\"1\" stopColor=\"#2266F7\" />\n </linearGradient>\n </defs>,\n <title key=\"title\">home-squircle</title>,\n <path\n key=\"path\"\n d=\"M9.99962 0C1.99854 0 0 2.00015 0 10C0 17.9998 1.99854 20 9.99962 20C18.0007 20 20 18.0014 20 10C20 1.99862 17.9999 0 9.99962 0Z\"\n fill=\"url(#paint0_linear_1_2)\"\n />,\n ]\n}\n\nexport function People(): JSX.Element[] {\n return [\n <defs key=\"def\">\n <linearGradient\n id=\"7f805f16-2322-4b42-b61a-2bf71eadb25a\"\n x1=\"2.047\"\n y1=\"2.036\"\n x2=\"17.969\"\n y2=\"17.958\"\n gradientUnits=\"userSpaceOnUse\"\n >\n <stop offset=\"0\" stopColor=\"#32a0f0\" />\n <stop offset=\"1\" stopColor=\"#3f75e5\" />\n </linearGradient>\n </defs>,\n <title key=\"title\">people-squircle</title>,\n <path\n key=\"path\"\n d=\"M19.96,10c0,7.962-1.991,9.952-9.952,9.952S.056,17.959.056,10,2.047.045,10.008.045,19.96,2.036,19.96,10Z\"\n fill=\"url(#7f805f16-2322-4b42-b61a-2bf71eadb25a)\"\n />,\n ]\n}\n\nexport function Publishing(): JSX.Element[] {\n return [\n <defs key=\"def\">\n <linearGradient\n id=\"publishing-gradient\"\n x1=\"2.047\"\n y1=\"2.036\"\n x2=\"17.969\"\n y2=\"17.958\"\n gradientUnits=\"userSpaceOnUse\"\n >\n <stop offset=\"0\" stopColor=\"#787882\" />\n <stop offset=\"1\" stopColor=\"#5f5f69\" />\n </linearGradient>\n <linearGradient\n id=\"publishing-gradient-2\"\n x1=\"2.03\"\n y1=\"2.03\"\n x2=\"17.952\"\n y2=\"17.952\"\n gradientTransform=\"translate(2.563 -2.028) rotate(13.283)\"\n xlinkHref=\"#publishing-gradient\"\n />\n </defs>,\n <title key=\"title\">publishing-squircle</title>,\n <path\n d=\"M19.96,10c0,7.962-1.991,9.952-9.952,9.952S.056,17.959.056,10,2.047.045,10.008.045,19.96,2.036,19.96,10Z\"\n fill=\"url(#publishing-gradient)\"\n key=\"path\"\n />,\n <circle\n cx=\"9.991\"\n cy=\"9.991\"\n r=\"9.951\"\n transform=\"translate(-2.028 2.563) rotate(-13.283)\"\n fill=\"url(#publishing-gradient-2)\"\n key=\"circle\"\n />,\n ]\n}\n\nexport function Registrations(): JSX.Element[] {\n return [\n <defs key=\"def\">\n <linearGradient\n id=\"bd67604d-f11c-4431-bd82-159c57241115\"\n x1=\"2.047\"\n y1=\"2.036\"\n x2=\"17.969\"\n y2=\"17.958\"\n gradientUnits=\"userSpaceOnUse\"\n >\n <stop offset=\"0\" stopColor=\"#41b99e\" />\n <stop offset=\"1\" stopColor=\"#46948d\" />\n </linearGradient>\n </defs>,\n <title key=\"title\">registrations-squircle</title>,\n <path\n key=\"path\"\n d=\"M19.96,10c0,7.962-1.991,9.952-9.952,9.952S.056,17.959.056,10,2.047.045,10.008.045,19.96,2.036,19.96,10Z\"\n fill=\"url(#bd67604d-f11c-4431-bd82-159c57241115)\"\n />,\n ]\n}\n\nexport function Services(): JSX.Element[] {\n return [\n <defs key=\"def\">\n <linearGradient\n id=\"00f9217c-0536-41ea-b265-a8689874be71\"\n x1=\"2.04\"\n y1=\"2.029\"\n x2=\"17.976\"\n y2=\"17.965\"\n gradientUnits=\"userSpaceOnUse\"\n >\n <stop offset=\"0\" stopColor=\"#6eaa50\" />\n <stop offset=\"1\" stopColor=\"#6a9639\" />\n </linearGradient>\n </defs>,\n <title key=\"title\">services-squircle</title>,\n <path\n key=\"path\"\n d=\"M19.968,10c0,7.968-1.992,9.96-9.96,9.96S.048,17.965.048,10,2.04.037,10.008.037,19.968,2.029,19.968,10Z\"\n fill=\"url(#00f9217c-0536-41ea-b265-a8689874be71)\"\n />,\n ]\n}\n","import React from \"react\"\n\nimport * as ColorAppSquircles from \"./color_app_squircles\"\nimport * as AppSymbols from \"./mono_app_symbols\"\n\nexport function ColorAppIcon({\n appName,\n size = 20,\n}: {\n appName: string\n size?: number\n}): JSX.Element {\n return (\n <svg\n xmlns=\"http://www.w3.org/2000/svg\"\n width={size}\n height={size}\n viewBox=\"0 0 20 20\"\n style={{ display: \"block\" }}\n >\n {ColorAppSquircles[appName] ? (\n React.createElement(ColorAppSquircles[appName], { key: \"key1\" })\n ) : (\n <span key=\"key1\" />\n )}\n {AppSymbols[appName] ? (\n React.createElement(AppSymbols[appName], { color: \"#fff\", key: \"key2\" })\n ) : (\n <div key=\"key3\">appName not supported</div>\n )}\n </svg>\n )\n}\n","export default function getAppsSwitchProductPath(productName: string): string {\n const basePath = `/apps/${productName.toLowerCase()}`\n const referer = window?.location?.pathname?.toString()\n\n if (!referer) return basePath\n\n const params = new URLSearchParams()\n params.append(\"referer\", referer)\n\n return `${basePath}?${params.toString()}`\n}\n","import React from \"react\"\n\nconst HoverableListItem = ({\n active = false,\n component: C = \"span\",\n style = null,\n ...nativeProps\n}: {\n active?: boolean\n children?: React.ReactNode\n component?: any\n href?: string\n onClick?: any\n style?: object\n}) => {\n const [entered, setEntered] = React.useState(false)\n\n const getBackgroundColor = () =>\n active ? \"#ededed\" : entered ? \"#f7f7f7\" : \"transparent\"\n\n return (\n <C\n onMouseEnter={() => setEntered(true)}\n onMouseLeave={() => setEntered(false)}\n style={{ ...style, backgroundColor: getBackgroundColor() }}\n {...nativeProps}\n />\n )\n}\n\nexport default HoverableListItem\n","import React from \"react\"\n\nexport default class Outsider extends React.Component<\n {\n cleanup: boolean\n component: any\n onOutsideClick: any\n visible: boolean\n },\n {}\n> {\n private container: HTMLElement\n\n constructor(props: any) {\n super(props)\n this.handleOutsideClick = this.handleOutsideClick.bind(this)\n }\n\n componentWillUnmount() {\n document.removeEventListener(\"click\", this.handleOutsideClick, true)\n }\n\n handleOutsideClick(e) {\n if (this.container.contains(e.target)) return\n\n e.stopPropagation()\n e.preventDefault()\n\n return this.props.onOutsideClick()\n }\n\n render() {\n const { cleanup, onOutsideClick, visible, ...props } = this.props\n\n if (cleanup) {\n document.removeEventListener(\"click\", this.handleOutsideClick, true)\n } else {\n document.addEventListener(\"click\", this.handleOutsideClick, true)\n }\n\n return <div ref={(c) => (this.container = c)} {...props} />\n }\n}\n","import React from \"react\"\n\nconst PopupRoot = ({\n style = null,\n ...nativeProps\n}: {\n children?: React.ReactNode\n style?: object\n}) => (\n <div\n style={{\n alignSelf: \"flex-end\",\n display: \"flex\",\n position: \"relative\",\n ...style,\n }}\n {...nativeProps}\n />\n)\n\nexport default PopupRoot\n","import React from \"react\"\n\nconst Popup = ({\n component: C = \"div\",\n style = null,\n ...nativeProps\n}: {\n children?: React.ReactNode\n cleanup?: any\n component?: any\n onOutsideClick?: any\n style?: object\n}) => (\n <C\n style={{\n background: \"#FFFFFF\",\n borderRadius: \"3px\",\n boxShadow: \"0 0 0 1px #D4D9E2, 0 8px 32px rgba(0,0,0,.3)\",\n overflow: \"hidden\",\n position: \"absolute\",\n ...style,\n }}\n {...nativeProps}\n />\n)\n\nexport default Popup\n","import pcoUrl, * as PCO_URL from \"@planningcenter/url\"\nimport React from \"react\"\n\nimport { ColorAppIcon } from \"../color_app_icon\"\nimport getAppsSwitchProductPath from \"../get_apps_switch_product_path\"\nimport { App } from \"../interfaces\"\nimport { MonoAppName } from \"../mono_app_name\"\nimport * as AppSymbols from \"../mono_app_symbols\"\nimport { fontFamily } from \"../styles\"\nimport HoverableListItem from \"./hoverable_list_item\"\nimport Outsider from \"./outsider\"\nimport PopupRoot from \"./popover_root\"\nimport Popup from \"./popup\"\n\nconst AppsMenu = ({\n appName,\n apps,\n env,\n toggle,\n visible,\n}: {\n appName: string\n apps: App[]\n env: PCO_URL.Environment\n toggle: any\n visible: boolean\n}) => {\n const accountsProduct = apps.find(({ name }) => name === \"Accounts\")\n const homeProduct = apps.find(({ name }) => name === \"Home\")\n const restProducts = [...apps]\n .filter(({ name }) => name !== \"Home\" && name !== \"Accounts\")\n .sort((a, b) => a.name.localeCompare(b.name))\n\n const listItemProps = {\n ...fontFamily,\n alignItems: \"center\",\n display: \"flex\",\n height: \"48px\",\n overflow: \"hidden\",\n padding: \"0 16px\",\n verticalAlign: \"middle\",\n }\n\n return (\n <PopupRoot>\n <Popup\n cleanup={!visible}\n component={Outsider}\n onOutsideClick={toggle}\n style={{\n marginTop: \"8px\",\n ...(visible\n ? { opacity: 1, transition: \"none\", visibility: \"visible\" }\n : {\n opacity: 0,\n transition: \"all 120ms ease-in\",\n visibility: \"hidden\",\n }),\n }}\n >\n <menu\n data-pendo=\"app-switcher\"\n style={{ margin: 0, minWidth: 180, padding: 0 }}\n >\n {homeProduct && (\n <HoverableListItem\n component=\"a\"\n data-pendo={`app-switcher--change-app--${homeProduct.name}`}\n data-turbolinks={false}\n href={\n appName === homeProduct.name\n ? `${pcoUrl(env)(\"accounts\")}/apps/${appName}`\n : pcoUrl(env)(\"accounts\") +\n getAppsSwitchProductPath(homeProduct.name)\n }\n style={{ ...listItemProps, borderBottom: \"1px solid #ededed\" }}\n >\n <div style={{ marginRight: \"6px\" }}>\n <ColorAppIcon appName=\"Home\" size={20} />\n </div>\n <MonoAppName appName=\"Home\" color=\"#444\" size={18} />\n </HoverableListItem>\n )}\n {restProducts.map(({ name }, i) => {\n const isFirst = i === 0\n const isLast = i === restProducts.length - 1\n return (\n <HoverableListItem\n component=\"a\"\n data-pendo={`app-switcher--change-app--${name}`}\n data-turbolinks={false}\n href={\n name === appName\n ? `${pcoUrl(env)(\"accounts\")}/apps/${name.toLowerCase()}`\n : pcoUrl(env)(\"accounts\") + getAppsSwitchProductPath(name)\n }\n key={name}\n style={{\n ...listItemProps,\n height: \"40px\",\n paddingBottom: isLast ? \"4px\" : null,\n paddingTop: isFirst ? \"4px\" : null,\n }}\n >\n <div style={{ marginRight: \"6px\" }}>\n <ColorAppIcon appName={name.replace(/[\\s-]/, \"\")} size={20} />\n </div>\n <MonoAppName\n appName={name.replace(/[\\s-]/, \"\")}\n color=\"#444\"\n size={18}\n />\n </HoverableListItem>\n )\n })}\n {accountsProduct && (\n <HoverableListItem\n component=\"a\"\n data-pendo={`app-switcher--change-app--${accountsProduct.name}`}\n data-turbolinks={false}\n href={\n pcoUrl(env)(\"accounts\") +\n getAppsSwitchProductPath(accountsProduct.name)\n }\n style={{\n ...listItemProps,\n borderTop: \"1px solid #ededed\",\n padding: \"0 12px\",\n textDecoration: \"none\",\n }}\n >\n <svg\n height={22}\n style={{ display: \"block\", marginRight: \"2px\" }}\n viewBox=\"0 0 20 20\"\n width={22}\n xmlns=\"http://www.w3.org/2000/svg\"\n >\n {React.createElement(AppSymbols[\"Accounts\"], {\n color: \"#9e9e9e\",\n key: \"key2\",\n })}\n </svg>\n <div\n style={{\n color: \"#737373\",\n fontSize: \"12px\",\n lineHeight: \"28px\",\n }}\n >\n Account settings\n </div>\n </HoverableListItem>\n )}\n </menu>\n </Popup>\n </PopupRoot>\n )\n}\n\nexport default AppsMenu\n","import { App, ConnectedPerson } from \"./interfaces\"\n\nconst sortByAttribute =\n (attr: string) =>\n (arr: any[]): any[] =>\n arr.slice().sort((a, b) => a[attr].localeCompare(b[attr]))\n\nexport const appsMenuFormatter = (apps: App[]): App[] =>\n sortByAttribute(\"name\")(apps).reduce(\n (acc, item) =>\n (item.name || \"\") === \"Church Center\" || (item.name || \"\") === \"API\"\n ? acc\n : item.name === \"Home\"\n ? [item, ...acc]\n : [...acc, item],\n []\n )\n\nexport const connectedPeopleMenuFormatter = (\n connectedPeople: ConnectedPerson[]\n): ConnectedPerson[] =>\n connectedPeople\n .slice()\n .sort((a, b) =>\n a.attributes[\"organization_name\"].localeCompare(\n b.attributes[\"organization_name\"]\n )\n )\n","import { useSyncExternalStore } from \"use-sync-external-store/shim\"\n\nimport store from \"../store\"\n\nconst useStore = <StoreShape = any,>(selector = (state: StoreShape) => state) =>\n useSyncExternalStore(store.subscribe, () => selector(store.getState())) as StoreShape\n\nexport default useStore\n","import React from \"react\"\n\nexport function StyledRoot({ children, style, ...nativeProps }): JSX.Element {\n return (\n <nav\n className=\"simple\"\n data-pendo=\"topbar\"\n aria-label=\"topbar-navigation\"\n style={{\n MozOsxFontSmoothing: \"grayscale\",\n WebkitFontSmoothing: \"antialiased\",\n alignItems: \"center\",\n color: \"white\",\n display: \"flex\",\n height: \"48px\",\n position: \"relative\",\n ...style,\n }}\n {...nativeProps}\n >\n <style>{`\n @media only print {\n .simple {\n display: none !important;\n }\n }\n `}</style>\n {children}\n </nav>\n )\n}\n","const colors = {\n danger43: \"hsl(8 60% 43%)\",\n danger45: \"hsl(8 60% 45%)\", // base\n danger47: \"hsl(8 60% 47%)\",\n danger93: \"hsl(9 59% 93%)\",\n danger97: \"hsl(7 60% 97%)\",\n darkNeutral07: \"hsl(0 0% 7%)\",\n darkNeutral12: \"hsl(0 0% 12%)\",\n darkNeutral15: \"hsl(0 0% 15%)\",\n darkNeutral17: \"hsl(0 0% 17%)\",\n darkNeutral19: \"hsl(0 0% 19%)\",\n darkNeutral24: \"hsl(0 0% 24%)\",\n darkNeutral32: \"hsl(0 0% 32%)\",\n darkNeutral50: \"hsl(0 0% 50%)\",\n darkNeutral68: \"hsl(0 0% 68%)\",\n darkNeutral88: \"hsl(0 0% 88%)\",\n darkNeutral98: \"hsl(0 0% 98%)\",\n interaction45: \"hsl(221 75% 45%)\",\n interaction50: \"hsl(221 91% 50%)\",\n interaction55: \"hsl(221 91% 55%)\", // base\n interaction66: \"hsl(221 91% 66%)\", // controls\n interaction91: \"hsl(221 91% 91%)\",\n interaction93: \"hsl(221 91% 93%)\",\n interaction97: \"hsl(221 89% 97%)\", // alias 09\n lightNeutral12: \"hsl(0 0% 12%)\",\n lightNeutral24: \"hsl(0 0% 24%)\",\n lightNeutral45: \"hsl(0 0% 45%)\",\n lightNeutral62: \"hsl(0 0% 62%)\",\n lightNeutral81: \"hsl(0 0% 81%)\",\n lightNeutral88: \"hsl(0 0% 88%)\",\n lightNeutral93: \"hsl(0 0% 93%)\",\n lightNeutral95: \"hsl(0 0% 95%)\",\n lightNeutral97: \"hsl(0 0% 97%)\",\n lightNeutral98: \"hsl(0 0% 98%)\",\n lightNeutral100: \"hsl(0 0% 100%)\",\n success23: \"hsl(86 91% 23%)\",\n success25: \"hsl(86 91% 25%)\", // base\n success27: \"hsl(86 91% 27%)\",\n success91: \"hsl(95 50% 91%)\",\n success97: \"hsl(93 53% 97%)\",\n warning20: \"hsl(42 100% 20%)\",\n warning49: \"hsl(42 84% 49%)\",\n warning55: \"hsl(42 84% 55%)\",\n warning63: \"hsl(42 84% 63%)\", // base\n warning94: \"hsl(42 84% 94%)\",\n warning97: \"hsl(42 84% 97%)\",\n}\n\nexport default colors\n","import React from \"react\"\n\nconst PopupRoot = ({\n style = null,\n ...nativeProps\n}: {\n children?: React.ReactNode\n style?: object\n}) => (\n <div\n style={{\n alignSelf: \"flex-end\",\n display: \"flex\",\n position: \"relative\",\n ...style,\n }}\n {...nativeProps}\n />\n)\n\nexport default PopupRoot\n","import {\n Button,\n Divider,\n Icon,\n StackView,\n Text,\n ThemeProvider,\n} from \"@planningcenter/tapestry-react\"\nimport pcoUrl from \"@planningcenter/url\"\nimport * as PCO_URL from \"@planningcenter/url\"\nimport React from \"react\"\n\nimport { default as themeColors } from \"../colors\"\nimport HoverableListItem from \"../components/hoverable_list_item\"\nimport Outsider from \"../components/outsider\"\nimport Popup from \"../components/popup\"\nimport PopupRoot from \"../components/popup_root\"\nimport { connectedPeopleMenuFormatter } from \"../formatters\"\nimport { ConnectedPerson } from \"../interfaces\"\nimport { fontFamily, IEFlex1 } from \"../styles\"\n\ninterface UserMenuProps {\n appName: string\n connectedPeople: ConnectedPerson[]\n env: PCO_URL.Environment\n hasConnectedPeople: boolean\n requestClearAppsCache: any\n requestClearConnectedPeopleCache: any\n requestSwitchConnectedPerson: any\n requestUnlinkConnectedPeople: any\n setUserMenuVisible: Function\n userMenuVisible: boolean\n}\n\nexport const UserMenu = ({\n appName,\n connectedPeople,\n env,\n hasConnectedPeople,\n requestClearAppsCache,\n requestClearConnectedPeopleCache,\n requestSwitchConnectedPerson,\n requestUnlinkConnectedPeople,\n setUserMenuVisible,\n userMenuVisible,\n}: UserMenuProps) => {\n const logoutUrl = `${pcoUrl(env)(\"login\")}/logout`\n\n return (\n <PopupRoot>\n <Popup\n component={Outsider}\n onOutsideClick={() => setUserMenuVisible(false)}\n cleanup={!userMenuVisible}\n style={{\n color: \"#525252\",\n marginTop: \"8px\",\n maxHeight: \"75vh\",\n maxWidth: \"320px\",\n minWidth: \"242px\",\n overflow: \"auto\",\n right: 0,\n ...(userMenuVisible\n ? {\n opacity: 1,\n transition: \"none\",\n visibility: \"visible\",\n }\n : {\n opacity: 0,\n transition: \"all 120ms ease-in\",\n visibility: \"hidden\",\n }),\n cursor: \"default\",\n }}\n >\n <div>\n {hasConnectedPeople ? (\n <div\n style={{\n alignItems: \"center\",\n backgroundColor: \"#eee\",\n display: \"flex\",\n lineHeight: \"32px\",\n padding: \"0 16px\",\n }}\n >\n <div\n style={{\n ...IEFlex1,\n color: \"#666\",\n fontSize: \"12px\",\n textTransform: \"uppercase\",\n whiteSpace: \"nowrap\",\n ...fontFamily,\n }}\n >\n Linked Accounts\n </div>\n\n <div\n style={{\n ...IEFlex1,\n alignItems: \"center\",\n fontSize: \"12px\",\n textAlign: \"right\",\n }}\n >\n <a\n href=\"\"\n onClick={(e) => {\n requestClearAppsCache()\n requestClearConnectedPeopleCache()\n requestUnlinkConnectedPeople()\n e.preventDefault()\n }}\n style={{\n color: \"#666\",\n marginLeft: \"64px\",\n textDecoration: \"none\",\n ...fontFamily,\n }}\n >\n unlink\n </a>\n </div>\n </div>\n ) : (\n <noscript />\n )}\n\n <style>{`\n .NotSmallTopbar__connected-people-list > *:first-child > * { border-top-width: 0 !important }\n `}</style>\n <ul\n className=\"NotSmallTopbar__connected-people-list\"\n style={{ listStyleType: \"none\", margin: 0, padding: 0 }}\n >\n {connectedPeopleMenuFormatter(connectedPeople).map(\n ({ id, attributes: person }) => (\n <HoverableListItem component=\"li\" key={id}>\n <a\n href=\"\"\n onClick={(e) => {\n requestClearAppsCache()\n requestClearConnectedPeopleCache()\n requestSwitchConnectedPerson(id, `${appName}/`)\n e.preventDefault()\n }}\n style={{\n borderTop: \"1px solid #ddd\",\n color: \"#444\",\n display: \"block\",\n lineHeight: \"48px\",\n overflow: \"hidden\",\n paddingLeft: \"16px\",\n paddingRight: \"16px\",\n textDecoration: \"none\",\n textOverflow: \"ellipsis\",\n whiteSpace: \"nowrap\",\n ...fontFamily,\n }}\n >\n {person.organization_name}\n </a>\n </HoverableListItem>\n )\n )}\n </ul>\n </div>\n\n <ThemeProvider>\n {hasConnectedPeople && <Divider />}\n <form method=\"POST\" action={logoutUrl}>\n <Button\n data-turbolinks={false}\n hover={{ backgroundColor: themeColors.lightNeutral97 }}\n onClick={() => {\n requestClearAppsCache()\n requestClearConnectedPeopleCache()\n return\n }}\n style={{ padding: 0 }}\n theme={false}\n type=\"submit\"\n width=\"100%\"\n >\n <StackView\n distribution=\"space-between\"\n alignment=\"center\"\n axis=\"horizontal\"\n grow={1}\n paddingHorizontal={2}\n paddingVertical={1.5}\n spacing={4}\n >\n <Text color={themeColors.lightNeutral45} lineHeight=\"24px\">\n Log out\n </Text>\n <Icon\n name=\"general.intoBox\"\n fill={themeColors.lightNeutral45}\n />\n </StackView>\n </Button>\n </form>\n </ThemeProvider>\n </Popup>\n </PopupRoot>\n )\n}\n","import React from \"react\"\n\nimport { fontFamily } from \"../styles\"\n\nconst Hoverable = ({\n active = null,\n component: C = \"div\",\n hover = null,\n innerRef = null,\n style = null,\n ...nativeProps\n}: {\n active?: any\n children?: React.ReactNode\n component?: any\n hover?: any\n href?: string\n innerRef?: any\n onClick?: any\n style?: object\n type?: string\n}) => {\n const [down, setDown] = React.useState(false)\n const [entered, setEntered] = React.useState(false)\n\n return (\n <C\n onMouseDown={() => setDown(true)}\n onMouseEnter={() => setEntered(true)}\n onMouseLeave={() => setEntered(false)}\n onMouseUp={() => setDown(false)}\n style={{\n ...fontFamily,\n ...style,\n ...(entered && hover),\n ...(down && active),\n }}\n {...(innerRef && { ref: innerRef })}\n {...nativeProps}\n />\n )\n}\n\nexport default Hoverable\n","import React from \"react\"\n\nimport Hoverable from \"../components/hoverable\"\nimport { slightBackgroundTransition } from \"../styles\"\nimport { DisclosureChevronIcon } from \"../symbols\"\n\ninterface UserMenuTriggerProps {\n colors: any\n orgName: string\n requestConnectedPeopleFetch: any\n setUserMenuVisible: Function\n showOrgName: boolean\n}\n\nexport const UserMenuTrigger = ({\n colors,\n orgName,\n requestConnectedPeopleFetch,\n setUserMenuVisible,\n showOrgName,\n}: UserMenuTriggerProps) => {\n return (\n <div\n style={{\n cursor: \"pointer\",\n marginLeft: \"16px\",\n position: \"relative\",\n whiteSpace: \"nowrap\",\n }}\n data-pendo=\"topbar-org-switcher\"\n >\n <Hoverable\n component=\"button\"\n type=\"button\"\n style={{\n WebkitAppearance: \"none\",\n alignItems: \"center\",\n appearance: \"none\",\n backgroundColor: colors.base1,\n border: \"none\",\n borderRadius: \"9999px\",\n color: colors.text || \"#fff\",\n // TODO: #improve-outline-a11y\n cursor: \"pointer\",\n display: \"flex\",\n fontSize: \"13px\",\n lineHeight: \"32px\",\n outline: 0,\n padding: 0,\n ...slightBackgroundTransition,\n }}\n active={{ backgroundColor: colors.base3 }}\n hover={{ backgroundColor: colors.base2 }}\n onClick={() => {\n setUserMenuVisible((visible) => !visible)\n requestConnectedPeopleFetch()\n }}\n >\n <div style={{ marginLeft: 8 }} />\n\n {showOrgName ? (\n <div\n style={{\n fontSize: \"13px\",\n margin: \"0 8px 0 8px\",\n maxWidth: \"240px\",\n overflow: \"hidden\",\n textOverflow: \"ellipsis\",\n whiteSpace: \"nowrap\",\n }}\n >\n {orgName}\n </div>\n ) : (\n <div style={{ margin: \"0 4px 0 4px\" }} />\n )}\n <div style={{ paddingRight: \"8px\" }}>\n <DisclosureChevronIcon colors={colors} style={{ margin: \"-3px\" }} />\n </div>\n </Hoverable>\n </div>\n )\n}\n","import React from \"react\"\n\nimport AppsButton from \"../components/apps_button\"\nimport AppsMenu from \"../components/apps_menu\"\nimport { appsMenuFormatter } from \"../formatters\"\nimport useStore from \"../hooks/use_store\"\nimport { SharedTopbarProps } from \"../interfaces\"\nimport { StyledRoot } from \"../styled_root\"\nimport { fontFamily, slightBackgroundTransition } from \"../styles\"\nimport { UserMenu } from \"./user_menu\"\nimport { UserMenuTrigger } from \"./user_menu_trigger\"\n\ninterface NotSmallTopbarProps {\n onLinkToProfileClick?: () => any\n search?: any\n showOrgName?: boolean\n}\n\nconst Topbar = (props: NotSmallTopbarProps & SharedTopbarProps) => {\n const [appsMenuVisible, setAppsMenuVisible] = React.useState(false)\n const [routesVisible, setRoutesVisible] = React.useState(true)\n const [userMenuVisible, setUserMenuVisible] = React.useState(false)\n const { hasConnectedPeople, notificationsEnabled } = useStore()\n\n return (\n <StyledRoot\n style={{\n paddingLeft: \"8px\",\n paddingRight: \"16px\",\n ...props.style,\n }}\n >\n <AppsMenu\n env={props.env}\n appName={props.appName}\n apps={appsMenuFormatter(props.apps)}\n visible={appsMenuVisible}\n toggle={() => setAppsMenuVisible((visible) => !visible)}\n />\n\n <AppsButton\n colors={props.colors}\n expanded={appsMenuVisible}\n onClick={() => {\n setAppsMenuVisible((visible) => !visible)\n props.requestAppsFetch()\n }}\n appName={props.appName}\n />\n\n <div style={{ margin: \"12px\" }} />\n\n {routesVisible && props.routes}\n\n <div style={{ margin: \"auto\" }} />\n\n {!notificationsEnabled && props.notifications()}\n\n {props.search({\n hideRoutes: () => setRoutesVisible(false),\n showRoutes: () => setRoutesVisible(true),\n })}\n\n <UserMenuTrigger\n colors={props.colors}\n orgName={props.orgName}\n requestConnectedPeopleFetch={props.requestConnectedPeopleFetch}\n setUserMenuVisible={setUserMenuVisible}\n showOrgName={props.showOrgName}\n />\n\n <UserMenu\n appName={props.appName}\n hasConnectedPeople={hasConnectedPeople}\n connectedPeople={props.connectedPeople}\n env={props.env}\n requestClearAppsCache={props.requestClearAppsCache}\n requestClearConnectedPeopleCache={\n props.requestClearConnectedPeopleCache\n }\n requestSwitchConnectedPerson={props.requestSwitchConnectedPerson}\n requestUnlinkConnectedPeople={props.requestUnlinkConnectedPeople}\n setUserMenuVisible={setUserMenuVisible}\n userMenuVisible={userMenuVisible}\n />\n </StyledRoot>\n )\n}\n\nTopbar.defaultProps = {\n notifications: () => null,\n search: () => null,\n showOrgName: true,\n useDummyNotifications: false,\n}\n\nconst Route = ({\n active,\n colors,\n style = null,\n ...nativeProps\n}: {\n active: boolean\n children: React.ReactNode\n colors: any\n href?: string\n style?: object\n}) => {\n const [entered, setEntered] = React.useState(false)\n const [down, setDown] = React.useState(false)\n\n const getBackgroundColor = () => {\n if (entered && down) return colors.base2\n if (entered || active) return colors.base1\n return \"transparent\"\n }\n\n const getTextColor = () => {\n return colors.text || \"#fff\"\n }\n\n return (\n <a\n style={{\n backgroundColor: getBackgroundColor(),\n borderRadius: \"9999px\",\n color: getTextColor(),\n fontSize: \"14px\",\n fontWeight: 600,\n lineHeight: \"32px\",\n marginRight: \"4px\", // off-grid\n paddingLeft: \"12px\",\n paddingRight: \"12px\",\n textDecoration: \"none\",\n textTransform: \"capitalize\",\n verticalAlign: \"middle\",\n whiteSpace: \"nowrap\",\n ...fontFamily,\n ...slightBackgroundTransition,\n ...style,\n }}\n onMouseEnter={() => setEntered(true)}\n onMouseLeave={() => setEntered(false)}\n onMouseDown={() => setDown(true)}\n onMouseUp={() => setDown(false)}\n {...nativeProps}\n />\n )\n}\n\nexport { Route, Topbar }\n","import pcURL, { Environment } from \"@planningcenter/url\"\nimport React from \"react\"\n\nimport apiRequest, { defaultFetch, Fetch } from \"./api_request\"\nimport { PointBreak } from \"./display_switch\"\nimport { X as XSymbol } from \"./symbols\"\n\nconst entries = function (obj) {\n const ownProps = Object.keys(obj)\n let i = ownProps.length\n const resArray = new Array(i) // preallocate the Array\n while (i--) resArray[i] = [ownProps[i], obj[ownProps[i]]]\n\n return resArray\n}\n\nfunction formatter(announcements) {\n return entries(announcements).map((entry) => ({\n data: entry[1],\n id: entry[0],\n }))\n}\n\nclass Provider extends React.Component<\n {\n children: (announcements: any, callback: any) => React.ReactElement<any>\n configuredFetch: Fetch\n env: Environment\n formatter?: any\n initialAnnouncements: object\n },\n {\n announcements: object[]\n }\n> {\n constructor(props: any) {\n super(props)\n\n this.state = {\n announcements: props.initialAnnouncements,\n }\n }\n\n public static defaultProps = {\n formatter: formatter,\n }\n\n dismissAnnouncements(id) {\n this.setState(({ announcements }) => {\n const newAnnouncements = announcements\n if (announcements[id]) delete newAnnouncements[id]\n\n return { announcements: newAnnouncements }\n })\n\n return apiRequest(\n this.props.configuredFetch,\n `${pcURL(this.props.env)(\n \"api\"\n )}/people/v2/me/platform_notifications/${id}/dismiss`,\n { method: \"POST\" }\n )\n }\n\n render() {\n return (\n <>\n {this.props.children(\n { announcements: this.props.formatter(this.state.announcements) },\n { dismissAnnouncements: this.dismissAnnouncements.bind(this) }\n )}\n </>\n )\n }\n}\n\nexport class StyledAnnouncement extends React.Component<\n { style?: object },\n {}\n> {\n render() {\n const { style, ...platformProps } = this.props\n\n return (\n <PointBreak\n render={(breakpoint) => (\n <div\n style={{\n alignItems: \"center\",\n display: \"flex\",\n justifyContent: \"space-between\",\n paddingBottom: 14,\n paddingLeft: [\"xs\", \"sm\"].indexOf(breakpoint) !== -1 ? 16 : 24,\n paddingRight: 18,\n paddingTop: 14,\n ...style,\n }}\n {...platformProps}\n />\n )}\n />\n )\n }\n}\n\nexport class StyleProvider extends React.Component<\n {\n className?: string\n colors: any\n style?: object\n },\n {}\n> {\n render() {\n const { children, className, colors, style, ...platformProps } = this.props\n\n return (\n <div\n className={[\"__Topbar_PlatformAnnouncements_link\"].join(\" \").trim()}\n style={{\n backgroundColor: \"#282828\",\n color: \"white\",\n fontSize: \"14px\",\n ...style,\n }}\n {...platformProps}\n >\n <style>{`\n .__Topbar_PlatformAnnouncements_link { color: white }\n .__Topbar_PlatformAnnouncements_link a { color: ${colors.base0} }\n .__Topbar_PlatformAnnouncements_link a:hover { color: ${colors.base1} }\n .__Topbar_PlatformAnnouncements_link a:active { color: ${colors.base2} }\n `}</style>\n {children}\n </div>\n )\n }\n}\n\nexport default class PlatformAnnouncements extends React.Component<\n {\n colors: any\n configuredFetch?: Fetch\n data: object\n env: Environment\n renderItem?: any\n },\n {}\n> {\n public static defaultProps = {\n configuredFetch: defaultFetch,\n renderItem: ({ announcement, actions }) => (\n <DissmissibleAnnouncement\n key={announcement.id}\n html={announcement.data.html}\n onClick={() => actions.dismissAnnouncements(announcement.id)}\n />\n ),\n }\n\n render() {\n return (\n <StyleProvider colors={this.props.colors}>\n <Provider\n env={this.props.env}\n initialAnnouncements={this.props.data}\n configuredFetch={this.props.configuredFetch}\n >\n {(data, actions) =>\n Boolean(data.announcements.length > 0) ? (\n <div>\n {data.announcements.map((announcement) =>\n this.props.renderItem({ actions, announcement })\n )}\n </div>\n ) : null\n }\n </Provider>\n </StyleProvider>\n )\n }\n}\n\nfunction StyledDismissButton({ ...props }: any): JSX.Element {\n return (\n <button\n type=\"button\"\n style={{\n WebkitAppearance: \"none\",\n backgroundColor: \"transparent\",\n borderWidth: 0,\n cursor: \"pointer\",\n\n margin: -8,\n // larger click target without increasing box\n padding: 8,\n }}\n {...props}\n >\n <XSymbol fill=\"white\" style={{ height: 20, width: 20 }} />\n </button>\n )\n}\n\nfunction DissmissibleAnnouncement(props: {\n html: string\n onClick: () => any\n}): JSX.Element {\n return (\n <StyledAnnouncement>\n <span\n dangerouslySetInnerHTML={{\n __html: props.html,\n }}\n />\n\n <StyledDismissButton onClick={props.onClick} />\n </StyledAnnouncement>\n )\n}\n","import React from \"react\"\n\nimport { PointBreak } from \"./display_switch\"\nimport { X as XSymbol } from \"./symbols\"\n\n/*\nProductAnnouncement:\nDisplays a dismissible product announcements when provided an `html` prop.\nRenders nothing when no `html` prop is falsy.\n\nWhen the dismiss button is clicked, ProductAnnouncement will immediately dissappear.\nPass an `onClick` prop to coordinate this dismissal with a server request that will prevent message from being passed to future page views.\n\nIt should look something like this in your application's Topbar composition:\n\n```jsx\n<ProductAnnouncement\n colors={shared.colors}\n html={this.props.productAnnouncement}\n onClick={() => alert(\"Sending fire-and-forget dismiss request to server\")}\n/>\n```\n\nAttributes like `className`, `id`, `data-*`, and `aria-*` are all applied to the root element.\n*/\n\nexport function ProductAnnouncement({\n colors,\n html = \"\",\n onClick = (_event) => {\n /* noop */\n },\n ...props\n}: {\n colors: object\n html: string\n onClick: (event: any) => any\n}) {\n const [dismissed, updateDismissed] = React.useState(false)\n\n return dismissed || !html ? null : (\n <StyleProvider colors={colors} {...props}>\n <StyledAnnouncement>\n <span dangerouslySetInnerHTML={{ __html: html }} />\n <StyledDismissButton\n onClick={(event) => {\n onClick(event)\n updateDismissed(true)\n }}\n />\n </StyledAnnouncement>\n </StyleProvider>\n )\n}\n\nexport class StyleProvider extends React.Component<\n {\n className?: string\n colors: any\n style?: object\n },\n {}\n> {\n render() {\n const { children, className, colors, style, ...platformProps } = this.props\n\n return (\n <div\n className={[\"Topbar_ProductAnnouncement\", className]\n .filter(Boolean)\n .join(\" \")\n .trim()}\n style={{\n backgroundColor: colors.base1,\n ...style,\n }}\n {...platformProps}\n >\n <style>{`\n .Topbar_ProductAnnouncement {\n color: white;\n font-size: 14px;\n }\n .Topbar_ProductAnnouncement a { color: white; font-weight: bold; }\n `}</style>\n {children}\n </div>\n )\n }\n}\n\nexport class StyledAnnouncement extends React.Component<\n { style?: object },\n {}\n> {\n render() {\n const { style, ...platformProps } = this.props\n\n return (\n <PointBreak\n render={(breakpoint) => (\n <div\n style={{\n alignItems: \"center\",\n boxSizing: \"border-box\",\n display: \"flex\",\n justifyContent: \"space-between\",\n paddingBottom: 14,\n paddingLeft: [\"xs\", \"sm\"].indexOf(breakpoint) !== -1 ? 16 : 24,\n paddingRight: 18,\n paddingTop: 14,\n ...style,\n }}\n {...platformProps}\n />\n )}\n />\n )\n }\n}\n\nexport function StyledDismissButton({ ...props }: any): JSX.Element {\n return (\n <button\n type=\"button\"\n style={{\n WebkitAppearance: \"none\",\n backgroundColor: \"transparent\",\n borderWidth: 0,\n cursor: \"pointer\",\n\n margin: -8,\n // larger click target without increasing box\n padding: 8,\n }}\n {...props}\n >\n <XSymbol fill=\"white\" style={{ height: 20, width: 20 }} />\n </button>\n )\n}\n","import pcoUrl, { Environment } from \"@planningcenter/url\"\nimport React from \"react\"\n\nexport function Avatar({\n env,\n url: incomingUrl = \"\",\n style,\n ...nativeProps\n}: {\n env: Environment\n style?: object\n url?: string\n}): JSX.Element {\n const url =\n incomingUrl || `${pcoUrl(env)(\"people\")}/static/no_photo_thumbnail_gray.svg`\n\n return (\n <div\n style={{\n backgroundColor: \"white\",\n backgroundImage: `url(${url})`,\n backgroundPosition: \"center\",\n backgroundSize: \"cover\",\n borderRadius: \"50%\",\n height: \"26px\",\n marginLeft: \"4px\",\n width: \"26px\",\n ...style,\n }}\n {...nativeProps}\n />\n )\n}\n","import React from \"react\"\n\nexport class ClientStorage extends React.Component<\n {\n item: string\n method?: \"localStorage\" | \"sessionStorage\"\n render: (apps: any, other: any) => React.ReactElement<any>\n },\n {}\n> {\n public static defaultProps = {\n method: \"localStorage\",\n }\n\n update(value) {\n window[this.props.method].setItem(this.props.item, JSON.stringify(value))\n return this.forceUpdate()\n }\n\n render() {\n return (\n <>\n {this.props.render(\n JSON.parse(window[this.props.method].getItem(this.props.item)) ||\n undefined,\n this.update.bind(this)\n )}\n </>\n )\n }\n}\n","import pcoUrl, { Environment } from \"@planningcenter/url\"\nimport React from \"react\"\n\nimport { default as themeColors } from \"../colors\"\nimport getAppsSwitchProductPath from \"../get_apps_switch_product_path\"\nimport * as AppSymbols from \"../mono_app_symbols\"\n\nexport function AccountSettingsLink({ env }: { env: Environment }) {\n const accountsName = \"accounts\"\n\n return (\n <a\n style={{\n alignItems: \"center\",\n display: \"flex\",\n height: \"48px\",\n paddingLeft: \"12px\",\n paddingRight: \"16px\",\n textDecoration: \"none\",\n }}\n data-pendo={`app-switcher--change-app--${accountsName}`}\n data-turbolinks={false}\n href={pcoUrl(env)(accountsName) + getAppsSwitchProductPath(accountsName)}\n >\n <svg\n height={22}\n style={{ display: \"block\", marginRight: \"2px\" }}\n viewBox=\"0 0 20 20\"\n width={22}\n xmlns=\"http://www.w3.org/2000/svg\"\n >\n {React.createElement(AppSymbols[\"Accounts\"], {\n color: themeColors.lightNeutral45,\n key: \"key2\",\n })}\n </svg>\n <div\n style={{\n color: themeColors.lightNeutral45,\n fontSize: \"12px\",\n lineHeight: \"48px\",\n textDecoration: \"none\",\n }}\n >\n Account settings\n </div>\n </a>\n )\n}\n","import React from \"react\"\n\nimport { default as themeColors } from \"../colors\"\nimport { X } from \"../symbols\"\n\nexport const CloseMenuButton = ({\n color = themeColors.lightNeutral100,\n size = 22,\n style = {},\n}: {\n color?: string\n size?: number\n style?: object\n}) => (\n <div style={style}>\n <X fill={color} style={{ height: `${size}px`, width: `${size}px` }} />\n </div>\n)\n","import pcoUrl, { Environment } from \"@planningcenter/url\"\n\ntype props = {\n appName: string\n env: Environment\n userId: string\n}\n\nexport default function getLoginProfilePath({\n env,\n appName,\n userId,\n}: props): string {\n const basePath = pcoUrl(env)(\"login\") + `/people/AC${userId}`\n const pathname = window?.location?.pathname?.toString()\n\n if (!pathname) return basePath\n\n const params = new URLSearchParams()\n params.append(\"return\", `${appName}/${pathname}`)\n\n return `${basePath}?${params.toString()}`\n}\n","import React from \"react\"\n\ntype MFAStatusProps = {\n isActive: boolean\n}\n\nconst MFAStatus = ({ isActive }: MFAStatusProps) => {\n const statusColor = isActive ? \"hsl(86, 91%, 27%)\" : \"hsl(8, 60%, 47%)\"\n\n const displayStatusIcon = () =>\n isActive ? (\n <svg width=\"12\" height=\"12\" viewBox=\"0 0 16 16\" fill=\"none\">\n <path\n d=\"M12.588 5.31499H11.832V3.79999C11.8159 2.80798 11.4105 1.86207 10.7032 1.16625C9.99602 0.470436 9.04363 0.0804749 8.0515 0.0804749C7.05937 0.0804749 6.10698 0.470436 5.39976 1.16625C4.69253 1.86207 4.28713 2.80798 4.271 3.79999V5.31499H3.515C3.1138 5.31525 2.72906 5.47454 2.44508 5.75795C2.16111 6.04136 2.00106 6.42579 2 6.82699V14.388C2.00132 14.7891 2.16146 15.1734 2.44537 15.4567C2.72929 15.7401 3.11388 15.8995 3.515 15.9H12.588C12.9886 15.8987 13.3724 15.7389 13.6557 15.4557C13.939 15.1724 14.0987 14.7886 14.1 14.388V6.82699C14.0987 6.42639 13.939 6.04257 13.6557 5.7593C13.3724 5.47603 12.9886 5.31631 12.588 5.31499ZM8.051 12.115C7.75171 12.1152 7.45909 12.0266 7.21015 11.8605C6.96121 11.6944 6.76713 11.4581 6.65246 11.1817C6.53779 10.9052 6.50768 10.601 6.56595 10.3074C6.62422 10.0139 6.76824 9.74418 6.97979 9.53249C7.19135 9.32079 7.46094 9.17659 7.75446 9.11813C8.04798 9.05967 8.35225 9.08958 8.62877 9.20406C8.90529 9.31855 9.14165 9.51247 9.30794 9.7613C9.47424 10.0101 9.563 10.3027 9.563 10.602C9.56327 11.0036 9.40424 11.389 9.1208 11.6735C8.83736 11.9581 8.45264 12.1187 8.051 12.12V12.115ZM10.395 5.31499H5.707V3.79999C5.707 3.17832 5.95396 2.58211 6.39354 2.14253C6.83313 1.70294 7.42933 1.45599 8.051 1.45599C8.67267 1.45599 9.26887 1.70294 9.70846 2.14253C10.148 2.58211 10.395 3.17832 10.395 3.79999V5.31499Z\"\n fill={statusColor}\n />\n </svg>\n ) : (\n <svg width=\"12\" height=\"12\" viewBox=\"0 0 16 16\" fill=\"none\">\n <path\n d=\"M13.7,5.8a1.5,1.5,0,0,0-1.1-.4H5.7V3.8a2.34,2.34,0,0,1,.7-1.7,2.19,2.19,0,0,1,1.7-.7,2.34,2.34,0,0,1,1.7.7,2.67,2.67,0,0,1,.7,1.4h1.4a4.12,4.12,0,0,0-1.1-2.4A4.73,4.73,0,0,0,8.1.1,4,4,0,0,0,5.4,1.2,3.63,3.63,0,0,0,4.3,3.8V5.3H3.5a2.1,2.1,0,0,0-1.1.4A2.1,2.1,0,0,0,2,6.8v7.6a2.1,2.1,0,0,0,.4,1.1,1.5,1.5,0,0,0,1.1.4h9.1a2.1,2.1,0,0,0,1.1-.4,1.5,1.5,0,0,0,.4-1.1V6.8A1.53,1.53,0,0,0,13.7,5.8ZM9.1,11.7a1.5,1.5,0,0,1-1.1.4H8a1.14,1.14,0,0,1-.8-.3,4.35,4.35,0,0,1-.6-.7,2.77,2.77,0,0,1-.1-.9A3,3,0,0,1,7,9.5a1.23,1.23,0,0,1,.8-.4,1.41,1.41,0,0,1,.9.1,1.34,1.34,0,0,1,.7.6,1.14,1.14,0,0,1,.3.8A2.38,2.38,0,0,1,9.1,11.7Z\"\n fill={statusColor}\n />\n </svg>\n )\n\n return (\n <div\n style={{\n alignItems: \"center\",\n display: \"flex\",\n fontSize: \"13px\",\n marginBottom: 2,\n marginTop: 4,\n }}\n >\n {displayStatusIcon()}\n\n <span\n style={{\n color: \"#888\",\n marginLeft: 4,\n whiteSpace: \"nowrap\",\n }}\n >\n Two-step verification {isActive ? \"active\" : \"inactive\"}\n </span>\n </div>\n )\n}\n\nexport default MFAStatus\n","import * as churchCenter from \"@planningcenter/icons/paths/church-center\"\nimport * as general from \"@planningcenter/icons/paths/general\"\nimport * as people from \"@planningcenter/icons/paths/people\"\nimport * as toolbar from \"@planningcenter/icons/paths/toolbar\"\nimport { designSystem } from \"@planningcenter/tapestry-react\"\n\nconst { generateColorScale } = designSystem\n\nexport const topbarTheme = {\n colors: {\n ...generateColorScale({\n baseColor: \"#2266f7\",\n key: \"primary\",\n }),\n },\n icons: {\n churchCenter,\n general,\n people,\n toolbar,\n },\n id: \"topbar\",\n}\n","import {\n Button,\n HeadingUppercase,\n Link,\n List,\n StackView,\n Text,\n ThemeProvider,\n} from \"@planningcenter/tapestry-react\"\nimport pcoUrl, { Environment } from \"@planningcenter/url\"\nimport React from \"react\"\n\nimport { Avatar } from \"../avatar\"\nimport { default as themeColors } from \"../colors\"\nimport { connectedPeopleMenuFormatter } from \"../formatters\"\nimport getLoginProfilePath from \"../get_login_profile_path\"\nimport { ConnectedPerson } from \"../interfaces\"\nimport MFAStatus from \"../mfa_status\"\nimport { topbarTheme } from \"../theme\"\n\nexport function UserProfileMenu({\n appName,\n connectedPeople,\n env,\n hasConnectedPeople,\n linkToProfile,\n mfaConfigured,\n mfaEnabled,\n requestClearAppsCache,\n requestClearConnectedPeopleCache,\n requestSwitchConnectedPerson,\n requestUnlinkConnectedPeople,\n setUserMenuVisible,\n userAvatarPath,\n userId,\n userName,\n}: {\n appName: string\n connectedPeople: ConnectedPerson[]\n env: Environment\n hasConnectedPeople: boolean\n linkToProfile: boolean\n mfaConfigured: boolean\n mfaEnabled: boolean\n requestClearAppsCache: any\n requestClearConnectedPeopleCache: any\n requestSwitchConnectedPerson: any\n requestUnlinkConnectedPeople: any\n setUserMenuVisible: any\n userAvatarPath: string\n userId: string\n userName: string\n}) {\n return (\n <ThemeProvider theme={topbarTheme}>\n <StackView axis=\"vertical\" width=\"100%\">\n <StackView\n axis=\"horizontal\"\n alignItems=\"start\"\n distribution=\"space-between\"\n >\n <StackView\n axis=\"horizontal\"\n spacing={2}\n padding={2}\n paddingRight={0}\n shrink={1}\n >\n <StackView shrink={0}>\n <Avatar\n env={env}\n url={userAvatarPath}\n style={{ height: 48, width: 48 }}\n />\n </StackView>\n <StackView spacing={1} shrink={1}>\n <Text color={themeColors.lightNeutral24} weight={700} truncate>\n {userName}\n </Text>\n {linkToProfile && (\n <Link\n as=\"a\"\n href={`/people/AC${userId}`}\n color={themeColors.lightNeutral45}\n underline={false}\n >\n My profile\n </Link>\n )}\n {mfaEnabled && (\n <Link\n as=\"a\"\n href={getLoginProfilePath({\n appName: appName,\n env: env,\n userId: userId,\n })}\n color={themeColors.lightNeutral45}\n underline={false}\n >\n My login settings\n <MFAStatus isActive={mfaConfigured} />\n </Link>\n )}\n <form method=\"POST\" action={`${pcoUrl(env)(\"login\")}/logout`}>\n <Button\n color={themeColors.lightNeutral45}\n data-turbolinks={false}\n onClick={() => {\n requestClearAppsCache()\n requestClearConnectedPeopleCache()\n return\n }}\n type=\"submit\"\n >\n Log out\n </Button>\n </form>\n </StackView>\n </StackView>\n <Button\n color={themeColors.lightNeutral45}\n icon=\"general.x\"\n onClick={() => setUserMenuVisible(false)}\n padding={2}\n variant=\"naked\"\n title=\"Close Menu\"\n />\n </StackView>\n {hasConnectedPeople && (\n <>\n <StackView\n backgroundColor={themeColors.lightNeutral95}\n paddingVertical={1.5}\n paddingHorizontal={2}\n marginTop={1}\n borderBottom={`1px solid ${themeColors.lightNeutral88}`}\n >\n <HeadingUppercase\n color={themeColors.lightNeutral62}\n fontWeight={500}\n >\n Linked Accounts\n </HeadingUppercase>\n </StackView>\n\n <List dividerColor={themeColors.lightNeutral88} width=\"100%\">\n {connectedPeopleMenuFormatter(connectedPeople).map(\n ({ id, attributes: person }) => (\n <List.Item\n key={id}\n onClick={(e) => {\n requestClearAppsCache()\n requestClearConnectedPeopleCache()\n requestSwitchConnectedPerson(id, `${appName}/`)\n e.preventDefault()\n }}\n color={themeColors.lightNeutral45}\n padding={2}\n >\n <Text truncate>{person.organization_name}</Text>\n </List.Item>\n )\n )}\n <List.Item\n onClick={(e) => {\n requestClearAppsCache()\n requestClearConnectedPeopleCache()\n requestUnlinkConnectedPeople()\n e.preventDefault()\n }}\n color={themeColors.danger47}\n padding={2}\n underline={false}\n >\n <Text size={3}>Unlink my accounts</Text>\n </List.Item>\n </List>\n </>\n )}\n </StackView>\n </ThemeProvider>\n )\n}\n","import pcoUrl from \"@planningcenter/url\"\nimport React from \"react\"\n\nimport { Avatar } from \"../avatar\"\nimport { ClientStorage as LocalStorageProvider } from \"../client_storage\"\nimport { ColorAppIcon } from \"../color_app_icon\"\nimport { default as themeColors } from \"../colors\"\nimport { appsMenuFormatter } from \"../formatters\"\nimport getAppsSwitchProductPath from \"../get_apps_switch_product_path\"\nimport useStore from \"../hooks/use_store\"\nimport { SharedTopbarProps } from \"../interfaces\"\nimport { MonoAppIcon } from \"../mono_app_icon\"\nimport { MonoAppName } from \"../mono_app_name\"\nimport { StyledRoot } from \"../styled_root\"\nimport { fontFamily, IEFlex1 } from \"../styles\"\nimport { DisclosureChevronIcon } from \"../symbols\"\nimport { capitalize, HSLtoHSLA } from \"../utils\"\nimport { AccountSettingsLink } from \"./account_settings_link\"\nimport { CloseMenuButton } from \"./close_menu_button\"\nimport { UserProfileMenu } from \"./user_profile_menu\"\n\nconst MENU_GUTTER = 57\nconst NAVBAR_HEIGHT = 52\n\nconst UserMenuAppLockup = ({\n appName: originalAppName,\n}: {\n appName: string\n}) => {\n const appName = originalAppName.replace(/[\\s-]/, \"\")\n\n return (\n <div style={{ alignItems: \"center\", display: \"flex\" }}>\n <div style={{ marginRight: \"6px\" }}>\n <ColorAppIcon appName={appName} size={20} />\n </div>\n <MonoAppName\n appName={appName}\n color={themeColors.lightNeutral24}\n size={18}\n />\n </div>\n )\n}\n\ninterface SmallTopbarProps {\n currentRouteComponent?: any\n}\n\ninterface PropagateableEvent {\n forcePropagation: Boolean\n}\n\nconst Topbar = (props: SharedTopbarProps & SmallTopbarProps) => {\n const [routesMenuVisible, setRoutesMenuVisible] = React.useState(false)\n const [productSwitcherVisible, setProductSwitcherVisible] =\n React.useState(false)\n const [userMenuVisible, setUserMenuVisible] = React.useState(false)\n const { hasConnectedPeople, mfaConfigured, mfaEnabled, userId, name } =\n useStore()\n\n const appColors = props.colors\n\n const activeRoute =\n props.routes.filter(({ props: { active } }) => active) || []\n\n const CurrentRouteComponent = props.currentRouteComponent\n const currentRouteText =\n (activeRoute &&\n activeRoute[0] &&\n activeRoute[0].props &&\n activeRoute[0].props.children) ||\n props.appName\n\n const accountsProduct = props.apps.find(({ name }) => name === \"Accounts\")\n\n const homeProduct = props.apps.find(({ name }) => name === \"Home\")\n\n const restProducts = [...props.apps].filter(\n ({ name }) => name !== \"Home\" && name !== \"Accounts\"\n )\n\n const borderColor = themeColors.lightNeutral88\n\n React.useEffect(() => {\n setRoutesMenuVisible(false)\n }, [activeRoute && activeRoute[0]?.props?.href])\n\n return (\n <StyledRoot style={{ ...props.style }}>\n <div\n style={{\n alignItems: \"center\",\n display: \"flex\",\n height: \"48px\",\n justifyContent: \"center\",\n paddingLeft: \"16px\",\n paddingRight: \"16px\",\n }}\n onClick={() => {\n props.requestAppsFetch()\n props.requestConnectedPeopleFetch()\n\n setRoutesMenuVisible(false)\n setProductSwitcherVisible((visible) => !visible)\n }}\n >\n <MonoAppIcon\n appName={props.appName.replace(/[\\s-]/, \"\")}\n colors={appColors}\n size={26}\n />\n </div>\n <div\n style={{\n left: 0,\n position: \"absolute\",\n top: \"48px\",\n width: \"100%\",\n }}\n >\n {routesMenuVisible && props.routes}\n </div>\n <LocalStorageProvider\n item=\"Topbar:Small:Menus:Products:visibility\"\n render={() => (\n <div\n style={{\n MozUserSelect: \"none\",\n WebkitTapHighlightColor: \"transparent\",\n WebkitUserSelect: \"none\",\n backgroundColor: HSLtoHSLA(themeColors.lightNeutral12, 0.75),\n bottom: 0,\n color: \"black\",\n display: productSwitcherVisible ? \"block\" : \"none\",\n left: 0,\n msUserSelect: \"none\",\n position: \"fixed\",\n right: 0,\n top: 0,\n userSelect: \"none\",\n }}\n onClick={() => {\n setProductSwitcherVisible((visible) => !visible)\n setUserMenuVisible(false)\n }}\n >\n <CloseMenuButton\n style={{\n position: \"absolute\",\n right: \"17px\",\n top: \"12px\",\n }}\n />\n <div\n onClick={(e) => {\n const { forcePropagation } = e as unknown as PropagateableEvent\n if (!forcePropagation) {\n e.stopPropagation()\n }\n }}\n style={{\n backgroundColor: themeColors.lightNeutral100,\n borderRight: `1px solid ${borderColor}`,\n display: \"flex\",\n flexDirection: \"column\",\n height: `calc(100% - ${NAVBAR_HEIGHT}px - env(safe-area-inset-bottom))`,\n position: \"relative\",\n width: `calc(100% - ${MENU_GUTTER}px)`,\n }}\n >\n <div\n style={{\n alignItems: \"center\",\n backgroundColor: themeColors.lightNeutral98,\n borderBottom: `1px solid ${borderColor}`,\n display: \"flex\",\n height: \"48px\",\n paddingLeft: \"16px\",\n paddingRight: \"16px\",\n }}\n >\n <div style={{ ...IEFlex1 }}>\n <a\n style={{\n alignItems: \"center\",\n display: \"flex\",\n height: \"48px\",\n paddingRight: \"16px\",\n }}\n data-pendo={`app-switcher--change-app--${homeProduct?.name}`}\n data-turbolinks={false}\n href={\n homeProduct\n ? pcoUrl(props.env)(\"accounts\") +\n getAppsSwitchProductPath(homeProduct?.name)\n : undefined\n }\n >\n <div style={{ alignItems: \"center\", display: \"flex\" }}>\n <UserMenuAppLockup\n appName={homeProduct ? homeProduct.name : props.appName}\n />\n </div>\n </a>\n </div>\n </div>\n\n <div\n style={{\n ...IEFlex1,\n WebkitOverflowScrolling: \"touch\",\n overflowY: \"scroll\",\n }}\n >\n <ul data-pendo=\"app-switcher\" style={{ margin: 0, padding: 0 }}>\n {appsMenuFormatter(restProducts).map(({ name }, i) => {\n const isFirst = i === 0\n const isLast =\n i === appsMenuFormatter(restProducts).length - 1\n return (\n <li key={name} style={{ listStyleType: \"none\" }}>\n <a\n style={{\n alignItems: \"center\",\n display: \"flex\",\n height: \"40px\",\n paddingBottom: isLast ? \"4px\" : 0,\n paddingLeft: \"16px\",\n paddingRight: \"16px\",\n paddingTop: isFirst ? \"4px\" : 0,\n }}\n data-pendo={`app-switcher--change-app--${name}`}\n data-turbolinks={false}\n href={\n pcoUrl(props.env)(\"accounts\") +\n getAppsSwitchProductPath(name)\n }\n >\n <UserMenuAppLockup appName={name} />\n </a>\n </li>\n )\n })}\n </ul>\n\n {accountsProduct && (\n <div\n style={{\n borderTop: `1px solid ${borderColor}`,\n }}\n >\n <AccountSettingsLink env={props.env} />\n </div>\n )}\n </div>\n </div>\n </div>\n )}\n />\n <div\n style={{\n ...IEFlex1,\n fontWeight: 600,\n lineHeight: \"48px\",\n textAlign: \"center\",\n }}\n onClick={\n props.routes.length > 0\n ? () => {\n setProductSwitcherVisible(false)\n setRoutesMenuVisible((visible) => !visible)\n }\n : null\n }\n >\n <CurrentRouteComponent>\n {capitalize(currentRouteText)}\n </CurrentRouteComponent>\n {props.routes.length > 0 && (\n <DisclosureChevronIcon\n colors={appColors}\n style={{ marginLeft: \"4px\", verticalAlign: \"middle\" }}\n />\n )}\n </div>\n\n <button\n onClick={() => setUserMenuVisible(!userMenuVisible)}\n style={{\n background: \"none\",\n border: \"none\",\n margin: \"0 12px\",\n padding: 0,\n }}\n >\n <Avatar env={props.env} url={props.userAvatarPath} />\n </button>\n\n <div\n style={{\n MozUserSelect: \"none\",\n WebkitTapHighlightColor: \"transparent\",\n WebkitUserSelect: \"none\",\n bottom: 0,\n color: \"black\",\n display: userMenuVisible ? \"block\" : \"none\",\n left: 0,\n msUserSelect: \"none\",\n position: \"fixed\",\n right: 0,\n top: 0,\n userSelect: \"none\",\n }}\n >\n <div\n onClick={(e) => e.stopPropagation()}\n style={{\n WebkitOverflowScrolling: \"touch\",\n backgroundColor: \"#fff\",\n display: \"flex\",\n flexDirection: \"column\",\n height: \"100%\",\n overflowY: \"scroll\",\n position: \"relative\",\n width: \"100%\",\n }}\n >\n <UserProfileMenu\n appName={props.appName}\n env={props.env}\n connectedPeople={props.connectedPeople}\n hasConnectedPeople={hasConnectedPeople}\n linkToProfile={props.linkToProfile}\n mfaConfigured={mfaConfigured}\n mfaEnabled={mfaEnabled}\n requestClearAppsCache={props.requestClearAppsCache}\n requestClearConnectedPeopleCache={\n props.requestClearConnectedPeopleCache\n }\n requestSwitchConnectedPerson={props.requestSwitchConnectedPerson}\n requestUnlinkConnectedPeople={props.requestUnlinkConnectedPeople}\n setUserMenuVisible={setUserMenuVisible}\n userAvatarPath={props.userAvatarPath}\n userId={userId}\n userName={name}\n />\n </div>\n </div>\n </StyledRoot>\n )\n}\n\nTopbar.defaultProps = {\n currentRouteComponent: (props) => <span {...props} />,\n linkToProfile: true,\n}\n\nconst Route = ({ active, ...props }) => (\n <a\n style={{\n backgroundColor: \"#444\",\n borderBottom: \"1px solid #333\",\n color: \"#fff\",\n display: \"block\",\n fontWeight: 600,\n lineHeight: \"47px\",\n position: \"relative\",\n textAlign: \"center\",\n textDecoration: \"none\",\n textTransform: \"capitalize\",\n whiteSpace: \"nowrap\",\n ...fontFamily,\n ...(active && { backgroundColor: \"#333\" }),\n }}\n {...props}\n />\n)\n\nexport { Route, Topbar }\n","import { useCallback, useMemo, useState } from \"react\"\n\nconst defaultCookieConfig = {\n domain: window.location.host.split(\".\").slice(-2).join(\".\"),\n \"max-age\": 60 * 60 * 24 * 30,\n}\nconst cookieConfigString = Object.entries(defaultCookieConfig)\n .map(([key, value]) => `${key}=${value}`)\n .join(\"; \")\n\nfunction readCookie(name: string) {\n const cookies = document.cookie.split(\";\").map((c) => c.trim())\n\n const cookie = cookies.find((c) => c.startsWith(`${name}=`))\n\n return cookie && decodeURIComponent(cookie.split(\"=\")[1])\n}\n\nexport function useCookie(name: string) {\n const [cookieState, setCookieState] = useState(() => readCookie(name))\n const update = useCallback((newValue: string) => {\n document.cookie = `${name}=${encodeURIComponent(\n newValue\n )}; ${cookieConfigString}`\n setCookieState(newValue)\n }, [name])\n\n return [cookieState, update] as const\n}\n\nexport function useJSONCookie(name: string) {\n const [cookie, setCookie] = useCookie(name)\n\n const parsed = useMemo(() => {\n if (cookie) {\n try {\n return JSON.parse(cookie)\n } catch {\n return {}\n }\n } else {\n return {}\n }\n }, [cookie])\n const update = useCallback(\n (newValue: object) => setCookie(JSON.stringify(newValue)),\n [setCookie]\n )\n\n return [parsed, update] as const\n}\n","import { StackView } from \"@planningcenter/tapestry-react\"\nimport React from \"react\"\n\ntype DrawerProps = {\n bottom?: number | string\n children: React.ReactNode\n hasShadow?: boolean\n height?: number | string\n id?: string\n overflow?: \"auto\" | \"hidden\" | \"scroll\" | \"visible\"\n position?: \"absolute\" | \"fixed\"\n width?: number | string\n}\n\nexport function Drawer({\n bottom = \"auto\",\n children,\n hasShadow = false,\n height = \"100%\",\n id = \"toolbarDrawer\",\n overflow = \"visible\",\n position = \"absolute\",\n width = \"100%\",\n}: DrawerProps) {\n return (\n <StackView\n backgroundColor=\"surface\"\n elevation={hasShadow && open ? 2 : undefined}\n left={0}\n position=\"absolute\"\n zIndex={1}\n {...{ bottom, height, id, overflow, position, width }}\n >\n {children}\n </StackView>\n )\n}\n","import { Box, Button, StackView } from \"@planningcenter/tapestry-react\"\nimport React from \"react\"\n\nimport { default as themeColors } from \"../../colors\"\n\ninterface DrawerHeaderProps {\n children: React.ReactNode\n closeDrawer?: Function\n}\n\nexport function DrawerHeader({ children, closeDrawer }: DrawerHeaderProps) {\n return (\n <StackView\n alignment=\"start\"\n axis=\"horizontal\"\n color=\"foreground\"\n distribution=\"space-between\"\n padding={2}\n paddingTop={1}\n >\n <Box flex={1}>{children}</Box>\n {closeDrawer && (\n <Button\n icon={{\n fill: themeColors.lightNeutral12,\n name: \"general.x\",\n size: \"md\",\n }}\n onClick={() => closeDrawer()}\n title=\"Close\"\n theme={false}\n hover={{\n backgroundColor: themeColors.lightNeutral93,\n }}\n marginTop={0.25}\n />\n )}\n </StackView>\n )\n}\n","import { Heading } from \"@planningcenter/tapestry-react\"\nimport React from \"react\"\n\nimport { default as themeColors } from \"../../colors\"\n\nexport function DrawerHeading({ children, ...props }) {\n return (\n <Heading\n {...props}\n color={themeColors.lightNeutral12}\n letterSpacing=\".002em\"\n level={2}\n lineHeight=\"35px\"\n weight={700}\n >\n {children}\n </Heading>\n )\n}\n","import { Box, BoxProps } from \"@planningcenter/tapestry-react\"\nimport React from \"react\"\n\nimport colors from \"../../colors\"\n\nexport const IndicatorDot = (props: BoxProps) => (\n <Box\n backgroundColor={colors.interaction66}\n height={1.5}\n pointerEvents=\"none\"\n position=\"absolute\"\n radius=\"50%\"\n width={1.5}\n zIndex={6}\n {...props}\n />\n)\n","import { Box, StackView, StackViewProps } from \"@planningcenter/tapestry-react\"\nimport React, { useEffect, useRef, useState } from \"react\"\n\n// TODO: This component could prob be genrealized to provide overflow-y scroll indication, as well, if needed.\n// `top`/`bottom` // `left`/`right` → `start`/`end`\n\nexport const INDICATOR_STYLES = {\n bottom: {\n background: \"linear-gradient(rgba(255, 255, 255, 0), rgba(0, 0, 0, 0.07))\",\n bottom: 0,\n },\n top: {\n background: \"linear-gradient(rgba(0, 0, 0, 0.07), rgba(255, 255, 255, 0))\",\n top: 0,\n },\n}\n\ntype OmittedStackViewProps = Omit<\n StackViewProps,\n \"innerRef\" | \"overflow\" | \"spacing\"\n // `spacing` will cause the appearance of extra top & bottom padding\n // it's preferable to wrap the children in a StackView with the desired spacing\n>\n\ninterface ScrollContainerProps extends OmittedStackViewProps {\n children: React.ReactNode\n}\n\n// Perf: should this component be memoized?\nexport const ScrollContainer: React.FC<ScrollContainerProps> = ({\n children,\n ...props\n}) => {\n const [overflowTop, setOverflowTop] = useState(false)\n const [overflowBottom, setOverflowBottom] = useState(false)\n\n const containerRef = useRef(null)\n const bottomEdgeRef = useRef(null)\n const topEdgeRef = useRef(null)\n\n // Perf: should this be debounced?\n const handleResize = () => {\n const container = containerRef?.current\n\n if (container) {\n const hasOverflowBottom =\n container.scrollHeight - container.clientHeight >\n container.scrollTop + 1\n\n setOverflowBottom(hasOverflowBottom)\n }\n }\n\n useEffect(() => {\n const container = containerRef?.current\n\n if (!container) {\n return () => {} // noop\n }\n\n setOverflowBottom(container.scrollHeight > container.clientHeight)\n\n // setup intersection observers\n const options = { root: container, threshold: 1 }\n const bottomObserver = new IntersectionObserver(\n ([{ isIntersecting }]) => setOverflowBottom(!isIntersecting),\n options\n )\n const topObserver = new IntersectionObserver(\n ([{ isIntersecting }]) => setOverflowTop(!isIntersecting),\n options\n )\n\n const bottomTarget = bottomEdgeRef?.current\n const topTarget = topEdgeRef?.current\n\n if (bottomTarget) {\n bottomObserver.observe(bottomTarget)\n }\n if (topTarget) {\n topObserver.observe(topTarget)\n }\n\n // setup resize observer\n const resizeObserver = new ResizeObserver(handleResize)\n resizeObserver.observe(container)\n\n return () => {\n if (bottomTarget) {\n bottomObserver.unobserve(bottomTarget)\n }\n if (topTarget) {\n topObserver.unobserve(topTarget)\n }\n resizeObserver.unobserve(container)\n }\n }, [])\n\n return (\n <StackView grow={1} position=\"relative\" shrink={1}>\n {overflowTop && <OverflowIndicator edge=\"top\" />}\n {overflowBottom && <OverflowIndicator edge=\"bottom\" />}\n <StackView\n basis={2}\n grow={1}\n innerRef={containerRef}\n overflow=\"auto\"\n role=\"region\"\n shrink={1}\n css={{ overscrollBehavior: \"contain\" }}\n {...props}\n >\n <Box innerRef={topEdgeRef} />\n {children}\n <Box innerRef={bottomEdgeRef} />\n </StackView>\n </StackView>\n )\n}\n\nconst OverflowIndicator = ({ edge }) => {\n return (\n <Box\n height={1}\n left={0}\n pointerEvents=\"none\"\n position=\"absolute\"\n right={0}\n role=\"presentation\"\n zIndex={10}\n {...INDICATOR_STYLES[edge]}\n />\n )\n}\n","import { StackView } from \"@planningcenter/tapestry-react\"\nimport React, { ReactNode } from \"react\"\n\ninterface SwitchViewProps {\n activeIndex: number\n children: ReactNode\n}\n\nconst SwitchView: React.FC<SwitchViewProps> = ({ activeIndex, children }) => {\n const childCount = React.Children.count(children)\n\n const validatedIndex =\n activeIndex < 0\n ? 0\n : activeIndex > childCount - 1\n ? childCount - 1\n : activeIndex\n\n return (\n <StackView grow={1} overflow=\"hidden\" position=\"relative\">\n {React.Children.map(children, (view, index) => {\n const inView = index === validatedIndex\n return (\n <StackView\n aria-hidden={!inView}\n visibility={inView ? \"visible\" : \"hidden\"}\n height=\"100%\"\n key={index}\n opacity={inView ? 1 : 0}\n pointerEvents={inView ? \"auto\" : \"none\"}\n position=\"absolute\"\n top={0}\n width=\"100%\"\n transform={\n inView\n ? \"translateX(0)\"\n : index < activeIndex\n ? \"translateX(-100px)\"\n : \"translateX(100px)\"\n }\n transition=\"visibility 100ms 50ms ease-in-out, transform 200ms ease-in-out, opacity 100ms 50ms ease-in-out\"\n >\n {view}\n </StackView>\n )\n })}\n </StackView>\n )\n}\n\nexport { SwitchView }\n","import * as React from \"react\"\n\nimport { ToolbarTool } from \"../types\"\n\nenum ActionType {\n close = \"close\",\n mount = \"mount\",\n open = \"open\",\n unmount = \"unmount\",\n}\n\ntype ToolbarState = {\n currentContent: ToolbarTool | null\n open: boolean\n}\n\ntype ToolbarDispatch = {\n payload?: any\n type: ActionType\n}\n\nconst initialState: ToolbarState = {\n currentContent: null,\n open: false,\n}\n\nconst reducer = (\n state: ToolbarState,\n action: ToolbarDispatch\n): ToolbarState => {\n switch (action.type) {\n case ActionType.mount:\n return { ...state, currentContent: action.payload.content }\n case ActionType.unmount:\n return { ...state, currentContent: null }\n case ActionType.open:\n return { ...state, open: true }\n case ActionType.close:\n return { ...state, open: false }\n }\n}\n\nconst useToolbarReducer = (overrides?: Partial<ToolbarState>) =>\n React.useReducer(reducer, { ...initialState, ...overrides })\n\nexport { ActionType, useToolbarReducer }\n","import pcURL from \"@planningcenter/url\"\nimport React, { ReactNode, useMemo } from \"react\"\n\nimport apiRequest, { defaultFetch, railsCsrfFetch } from \"../../../api_request\"\n\ntype ChatApiContextValue = {\n [key: string]: any\n}\n\ninterface ChatApiProviderProps {\n children: ReactNode\n env: string\n}\n\ntype Result = Record<string, any>\n\ntype Attributes = Record<string, any>\n\ntype Query = {\n [key: string]: any\n fields?: Record<string, any>\n}\n\ninterface Api {\n delete: (path: string) => Result\n get: (path: string, query?: Query) => Result | Result[]\n patch: (path: string, attributes: Attributes) => Result\n post: (path: string, attributes: Attributes) => Result\n}\n\nconst ChatApiContext = React.createContext<ChatApiContextValue>({})\n\nconst buildRelationships = (relationships = {}) => {\n return Object.keys(relationships).reduce((acc, key) => {\n const { data } = relationships[key]\n const isArray = Array.isArray(data)\n\n return {\n ...acc,\n [`${key}_${isArray ? \"ids\" : \"id\"}`]: isArray\n ? data.map(({ id }) => id)\n : data?.id,\n }\n }, {})\n}\n\nconst buildResponse = (json) => {\n const data = [json.data].flat()\n\n const [head, ...tail] = data.map(({ id, attributes, relationships }) => ({\n id,\n ...buildRelationships(relationships),\n ...attributes,\n }))\n\n return Array.isArray(json.data) ? (head ? [head, ...tail] : []) : head\n}\n\nconst buildApi = ({ app, env }): Api => {\n const url = `${pcURL(env)(\"api\")}/${app}/v2`\n\n return {\n delete: (path) =>\n apiRequest(railsCsrfFetch, [url, path].join(\"/\"), { method: \"DELETE\" }),\n get: async (path, { fields = {}, ...query } = {}) => {\n fields = Object.entries(fields).reduce(\n (acc, [key, value]) => ({ ...acc, [`fields[${key}]`]: value }),\n {}\n )\n\n const params = new URLSearchParams({ ...fields, ...query })\n\n const { json } = await apiRequest(\n defaultFetch,\n [[url, path].join(\"/\"), params].join(\"?\")\n )\n\n return buildResponse(json)\n },\n patch: async (path, attributes) => {\n const { json } = await apiRequest(railsCsrfFetch, [url, path].join(\"/\"), {\n data: { data: { attributes } },\n method: \"PATCH\",\n })\n\n return buildResponse(json)\n },\n post: async (path, attributes) => {\n const { json } = await apiRequest(railsCsrfFetch, [url, path].join(\"/\"), {\n data: { data: { attributes } },\n method: \"POST\",\n })\n\n return buildResponse(json)\n },\n }\n}\n\nconst ChatApiProvider = ({ children, env }: ChatApiProviderProps) => {\n const value = useMemo(() => {\n const chat = buildApi({ app: \"chat\", env })\n const services = buildApi({ app: \"services\", env })\n const groups = buildApi({ app: \"groups\", env })\n\n return { chat, groups, services }\n }, [env])\n\n return (\n <ChatApiContext.Provider value={value}>{children}</ChatApiContext.Provider>\n )\n}\n\nexport { ChatApiContext, ChatApiProvider }\n","import React, { ReactNode } from \"react\"\n\nimport { FilterValues, SetFilterValuesFn } from \"./hooks/use_chat_filter\"\n\ntype SwitchViewFn = () => void\ntype ActionsForOpenChannel = boolean | null | string\n\nexport interface ChatContextValue {\n actionsOpenForChannel: ActionsForOpenChannel\n closeDrawer: () => void\n filterValues: FilterValues\n findAndSwitchToChannel: ({\n stream_channel_id,\n }: {\n stream_channel_id: string\n }) => void\n isChannelDetailsViewActive: boolean\n isChannelViewActive: boolean\n isNewChatShortcutsViewActive: boolean\n isNewGroupsChatViewActive: boolean\n isNewServicesChatViewActive: boolean\n setActionsOpenForChannel: React.Dispatch<\n React.SetStateAction<ActionsForOpenChannel>\n >\n setFilterValues: SetFilterValuesFn\n switchToChannelDetailsView: SwitchViewFn\n switchToChannelListView: SwitchViewFn\n switchToChannelView: SwitchViewFn\n switchToNewChatShortcutsView: SwitchViewFn\n switchToNewGroupsChatView: SwitchViewFn\n switchToNewServicesChatView: SwitchViewFn\n}\n\ninterface ChatProviderProps {\n children: ReactNode\n value?: ChatContextValue\n}\n\nconst ChatContext = React.createContext<ChatContextValue>(\n {} as ChatContextValue\n)\n\nconst ChatProvider = ({ children, value }: ChatProviderProps) => {\n return <ChatContext.Provider value={value}>{children}</ChatContext.Provider>\n}\n\nexport { ChatContext, ChatProvider }\n","import React from \"react\"\nimport { useChatContext } from \"stream-chat-react\"\n\nexport const useChannelMute = (channel) => {\n const { client } = useChatContext()\n const [{ muted }, setMuteStatus] = React.useState(() => channel.muteStatus())\n\n React.useEffect(() => {\n const updateMuteState = () => {\n setMuteStatus(channel.muteStatus())\n }\n\n client.on(\"notification.channel_mutes_updated\", updateMuteState)\n\n return () =>\n client.off(\"notification.channel_mutes_updated\", updateMuteState)\n }, [])\n\n return muted\n}\n","//! moment.js\n//! version : 2.29.4\n//! authors : Tim Wood, Iskren Chernev, Moment.js contributors\n//! license : MIT\n//! momentjs.com\n\n;(function (global, factory) {\n typeof exports === 'object' && typeof module !== 'undefined' ? module.exports = factory() :\n typeof define === 'function' && define.amd ? define(factory) :\n global.moment = factory()\n}(this, (function () { 'use strict';\n\n var hookCallback;\n\n function hooks() {\n return hookCallback.apply(null, arguments);\n }\n\n // This is done to register the method called with moment()\n // without creating circular dependencies.\n function setHookCallback(callback) {\n hookCallback = callback;\n }\n\n function isArray(input) {\n return (\n input instanceof Array ||\n Object.prototype.toString.call(input) === '[object Array]'\n );\n }\n\n function isObject(input) {\n // IE8 will treat undefined and null as object if it wasn't for\n // input != null\n return (\n input != null &&\n Object.prototype.toString.call(input) === '[object Object]'\n );\n }\n\n function hasOwnProp(a, b) {\n return Object.prototype.hasOwnProperty.call(a, b);\n }\n\n function isObjectEmpty(obj) {\n if (Object.getOwnPropertyNames) {\n return Object.getOwnPropertyNames(obj).length === 0;\n } else {\n var k;\n for (k in obj) {\n if (hasOwnProp(obj, k)) {\n return false;\n }\n }\n return true;\n }\n }\n\n function isUndefined(input) {\n return input === void 0;\n }\n\n function isNumber(input) {\n return (\n typeof input === 'number' ||\n Object.prototype.toString.call(input) === '[object Number]'\n );\n }\n\n function isDate(input) {\n return (\n input instanceof Date ||\n Object.prototype.toString.call(input) === '[object Date]'\n );\n }\n\n function map(arr, fn) {\n var res = [],\n i,\n arrLen = arr.length;\n for (i = 0; i < arrLen; ++i) {\n res.push(fn(arr[i], i));\n }\n return res;\n }\n\n function extend(a, b) {\n for (var i in b) {\n if (hasOwnProp(b, i)) {\n a[i] = b[i];\n }\n }\n\n if (hasOwnProp(b, 'toString')) {\n a.toString = b.toString;\n }\n\n if (hasOwnProp(b, 'valueOf')) {\n a.valueOf = b.valueOf;\n }\n\n return a;\n }\n\n function createUTC(input, format, locale, strict) {\n return createLocalOrUTC(input, format, locale, strict, true).utc();\n }\n\n function defaultParsingFlags() {\n // We need to deep clone this object.\n return {\n empty: false,\n unusedTokens: [],\n unusedInput: [],\n overflow: -2,\n charsLeftOver: 0,\n nullInput: false,\n invalidEra: null,\n invalidMonth: null,\n invalidFormat: false,\n userInvalidated: false,\n iso: false,\n parsedDateParts: [],\n era: null,\n meridiem: null,\n rfc2822: false,\n weekdayMismatch: false,\n };\n }\n\n function getParsingFlags(m) {\n if (m._pf == null) {\n m._pf = defaultParsingFlags();\n }\n return m._pf;\n }\n\n var some;\n if (Array.prototype.some) {\n some = Array.prototype.some;\n } else {\n some = function (fun) {\n var t = Object(this),\n len = t.length >>> 0,\n i;\n\n for (i = 0; i < len; i++) {\n if (i in t && fun.call(this, t[i], i, t)) {\n return true;\n }\n }\n\n return false;\n };\n }\n\n function isValid(m) {\n if (m._isValid == null) {\n var flags = getParsingFlags(m),\n parsedParts = some.call(flags.parsedDateParts, function (i) {\n return i != null;\n }),\n isNowValid =\n !isNaN(m._d.getTime()) &&\n flags.overflow < 0 &&\n !flags.empty &&\n !flags.invalidEra &&\n !flags.invalidMonth &&\n !flags.invalidWeekday &&\n !flags.weekdayMismatch &&\n !flags.nullInput &&\n !flags.invalidFormat &&\n !flags.userInvalidated &&\n (!flags.meridiem || (flags.meridiem && parsedParts));\n\n if (m._strict) {\n isNowValid =\n isNowValid &&\n flags.charsLeftOver === 0 &&\n flags.unusedTokens.length === 0 &&\n flags.bigHour === undefined;\n }\n\n if (Object.isFrozen == null || !Object.isFrozen(m)) {\n m._isValid = isNowValid;\n } else {\n return isNowValid;\n }\n }\n return m._isValid;\n }\n\n function createInvalid(flags) {\n var m = createUTC(NaN);\n if (flags != null) {\n extend(getParsingFlags(m), flags);\n } else {\n getParsingFlags(m).userInvalidated = true;\n }\n\n return m;\n }\n\n // Plugins that add properties should also add the key here (null value),\n // so we can properly clone ourselves.\n var momentProperties = (hooks.momentProperties = []),\n updateInProgress = false;\n\n function copyConfig(to, from) {\n var i,\n prop,\n val,\n momentPropertiesLen = momentProperties.length;\n\n if (!isUndefined(from._isAMomentObject)) {\n to._isAMomentObject = from._isAMomentObject;\n }\n if (!isUndefined(from._i)) {\n to._i = from._i;\n }\n if (!isUndefined(from._f)) {\n to._f = from._f;\n }\n if (!isUndefined(from._l)) {\n to._l = from._l;\n }\n if (!isUndefined(from._strict)) {\n to._strict = from._strict;\n }\n if (!isUndefined(from._tzm)) {\n to._tzm = from._tzm;\n }\n if (!isUndefined(from._isUTC)) {\n to._isUTC = from._isUTC;\n }\n if (!isUndefined(from._offset)) {\n to._offset = from._offset;\n }\n if (!isUndefined(from._pf)) {\n to._pf = getParsingFlags(from);\n }\n if (!isUndefined(from._locale)) {\n to._locale = from._locale;\n }\n\n if (momentPropertiesLen > 0) {\n for (i = 0; i < momentPropertiesLen; i++) {\n prop = momentProperties[i];\n val = from[prop];\n if (!isUndefined(val)) {\n to[prop] = val;\n }\n }\n }\n\n return to;\n }\n\n // Moment prototype object\n function Moment(config) {\n copyConfig(this, config);\n this._d = new Date(config._d != null ? config._d.getTime() : NaN);\n if (!this.isValid()) {\n this._d = new Date(NaN);\n }\n // Prevent infinite loop in case updateOffset creates new moment\n // objects.\n if (updateInProgress === false) {\n updateInProgress = true;\n hooks.updateOffset(this);\n updateInProgress = false;\n }\n }\n\n function isMoment(obj) {\n return (\n obj instanceof Moment || (obj != null && obj._isAMomentObject != null)\n );\n }\n\n function warn(msg) {\n if (\n hooks.suppressDeprecationWarnings === false &&\n typeof console !== 'undefined' &&\n console.warn\n ) {\n console.warn('Deprecation warning: ' + msg);\n }\n }\n\n function deprecate(msg, fn) {\n var firstTime = true;\n\n return extend(function () {\n if (hooks.deprecationHandler != null) {\n hooks.deprecationHandler(null, msg);\n }\n if (firstTime) {\n var args = [],\n arg,\n i,\n key,\n argLen = arguments.length;\n for (i = 0; i < argLen; i++) {\n arg = '';\n if (typeof arguments[i] === 'object') {\n arg += '\\n[' + i + '] ';\n for (key in arguments[0]) {\n if (hasOwnProp(arguments[0], key)) {\n arg += key + ': ' + arguments[0][key] + ', ';\n }\n }\n arg = arg.slice(0, -2); // Remove trailing comma and space\n } else {\n arg = arguments[i];\n }\n args.push(arg);\n }\n warn(\n msg +\n '\\nArguments: ' +\n Array.prototype.slice.call(args).join('') +\n '\\n' +\n new Error().stack\n );\n firstTime = false;\n }\n return fn.apply(this, arguments);\n }, fn);\n }\n\n var deprecations = {};\n\n function deprecateSimple(name, msg) {\n if (hooks.deprecationHandler != null) {\n hooks.deprecationHandler(name, msg);\n }\n if (!deprecations[name]) {\n warn(msg);\n deprecations[name] = true;\n }\n }\n\n hooks.suppressDeprecationWarnings = false;\n hooks.deprecationHandler = null;\n\n function isFunction(input) {\n return (\n (typeof Function !== 'undefined' && input instanceof Function) ||\n Object.prototype.toString.call(input) === '[object Function]'\n );\n }\n\n function set(config) {\n var prop, i;\n for (i in config) {\n if (hasOwnProp(config, i)) {\n prop = config[i];\n if (isFunction(prop)) {\n this[i] = prop;\n } else {\n this['_' + i] = prop;\n }\n }\n }\n this._config = config;\n // Lenient ordinal parsing accepts just a number in addition to\n // number + (possibly) stuff coming from _dayOfMonthOrdinalParse.\n // TODO: Remove \"ordinalParse\" fallback in next major release.\n this._dayOfMonthOrdinalParseLenient = new RegExp(\n (this._dayOfMonthOrdinalParse.source || this._ordinalParse.source) +\n '|' +\n /\\d{1,2}/.source\n );\n }\n\n function mergeConfigs(parentConfig, childConfig) {\n var res = extend({}, parentConfig),\n prop;\n for (prop in childConfig) {\n if (hasOwnProp(childConfig, prop)) {\n if (isObject(parentConfig[prop]) && isObject(childConfig[prop])) {\n res[prop] = {};\n extend(res[prop], parentConfig[prop]);\n extend(res[prop], childConfig[prop]);\n } else if (childConfig[prop] != null) {\n res[prop] = childConfig[prop];\n } else {\n delete res[prop];\n }\n }\n }\n for (prop in parentConfig) {\n if (\n hasOwnProp(parentConfig, prop) &&\n !hasOwnProp(childConfig, prop) &&\n isObject(parentConfig[prop])\n ) {\n // make sure changes to properties don't modify parent config\n res[prop] = extend({}, res[prop]);\n }\n }\n return res;\n }\n\n function Locale(config) {\n if (config != null) {\n this.set(config);\n }\n }\n\n var keys;\n\n if (Object.keys) {\n keys = Object.keys;\n } else {\n keys = function (obj) {\n var i,\n res = [];\n for (i in obj) {\n if (hasOwnProp(obj, i)) {\n res.push(i);\n }\n }\n return res;\n };\n }\n\n var defaultCalendar = {\n sameDay: '[Today at] LT',\n nextDay: '[Tomorrow at] LT',\n nextWeek: 'dddd [at] LT',\n lastDay: '[Yesterday at] LT',\n lastWeek: '[Last] dddd [at] LT',\n sameElse: 'L',\n };\n\n function calendar(key, mom, now) {\n var output = this._calendar[key] || this._calendar['sameElse'];\n return isFunction(output) ? output.call(mom, now) : output;\n }\n\n function zeroFill(number, targetLength, forceSign) {\n var absNumber = '' + Math.abs(number),\n zerosToFill = targetLength - absNumber.length,\n sign = number >= 0;\n return (\n (sign ? (forceSign ? '+' : '') : '-') +\n Math.pow(10, Math.max(0, zerosToFill)).toString().substr(1) +\n absNumber\n );\n }\n\n var formattingTokens =\n /(\\[[^\\[]*\\])|(\\\\)?([Hh]mm(ss)?|Mo|MM?M?M?|Do|DDDo|DD?D?D?|ddd?d?|do?|w[o|w]?|W[o|W]?|Qo?|N{1,5}|YYYYYY|YYYYY|YYYY|YY|y{2,4}|yo?|gg(ggg?)?|GG(GGG?)?|e|E|a|A|hh?|HH?|kk?|mm?|ss?|S{1,9}|x|X|zz?|ZZ?|.)/g,\n localFormattingTokens = /(\\[[^\\[]*\\])|(\\\\)?(LTS|LT|LL?L?L?|l{1,4})/g,\n formatFunctions = {},\n formatTokenFunctions = {};\n\n // token: 'M'\n // padded: ['MM', 2]\n // ordinal: 'Mo'\n // callback: function () { this.month() + 1 }\n function addFormatToken(token, padded, ordinal, callback) {\n var func = callback;\n if (typeof callback === 'string') {\n func = function () {\n return this[callback]();\n };\n }\n if (token) {\n formatTokenFunctions[token] = func;\n }\n if (padded) {\n formatTokenFunctions[padded[0]] = function () {\n return zeroFill(func.apply(this, arguments), padded[1], padded[2]);\n };\n }\n if (ordinal) {\n formatTokenFunctions[ordinal] = function () {\n return this.localeData().ordinal(\n func.apply(this, arguments),\n token\n );\n };\n }\n }\n\n function removeFormattingTokens(input) {\n if (input.match(/\\[[\\s\\S]/)) {\n return input.replace(/^\\[|\\]$/g, '');\n }\n return input.replace(/\\\\/g, '');\n }\n\n function makeFormatFunction(format) {\n var array = format.match(formattingTokens),\n i,\n length;\n\n for (i = 0, length = array.length; i < length; i++) {\n if (formatTokenFunctions[array[i]]) {\n array[i] = formatTokenFunctions[array[i]];\n } else {\n array[i] = removeFormattingTokens(array[i]);\n }\n }\n\n return function (mom) {\n var output = '',\n i;\n for (i = 0; i < length; i++) {\n output += isFunction(array[i])\n ? array[i].call(mom, format)\n : array[i];\n }\n return output;\n };\n }\n\n // format date using native date object\n function formatMoment(m, format) {\n if (!m.isValid()) {\n return m.localeData().invalidDate();\n }\n\n format = expandFormat(format, m.localeData());\n formatFunctions[format] =\n formatFunctions[format] || makeFormatFunction(format);\n\n return formatFunctions[format](m);\n }\n\n function expandFormat(format, locale) {\n var i = 5;\n\n function replaceLongDateFormatTokens(input) {\n return locale.longDateFormat(input) || input;\n }\n\n localFormattingTokens.lastIndex = 0;\n while (i >= 0 && localFormattingTokens.test(format)) {\n format = format.replace(\n localFormattingTokens,\n replaceLongDateFormatTokens\n );\n localFormattingTokens.lastIndex = 0;\n i -= 1;\n }\n\n return format;\n }\n\n var defaultLongDateFormat = {\n LTS: 'h:mm:ss A',\n LT: 'h:mm A',\n L: 'MM/DD/YYYY',\n LL: 'MMMM D, YYYY',\n LLL: 'MMMM D, YYYY h:mm A',\n LLLL: 'dddd, MMMM D, YYYY h:mm A',\n };\n\n function longDateFormat(key) {\n var format = this._longDateFormat[key],\n formatUpper = this._longDateFormat[key.toUpperCase()];\n\n if (format || !formatUpper) {\n return format;\n }\n\n this._longDateFormat[key] = formatUpper\n .match(formattingTokens)\n .map(function (tok) {\n if (\n tok === 'MMMM' ||\n tok === 'MM' ||\n tok === 'DD' ||\n tok === 'dddd'\n ) {\n return tok.slice(1);\n }\n return tok;\n })\n .join('');\n\n return this._longDateFormat[key];\n }\n\n var defaultInvalidDate = 'Invalid date';\n\n function invalidDate() {\n return this._invalidDate;\n }\n\n var defaultOrdinal = '%d',\n defaultDayOfMonthOrdinalParse = /\\d{1,2}/;\n\n function ordinal(number) {\n return this._ordinal.replace('%d', number);\n }\n\n var defaultRelativeTime = {\n future: 'in %s',\n past: '%s ago',\n s: 'a few seconds',\n ss: '%d seconds',\n m: 'a minute',\n mm: '%d minutes',\n h: 'an hour',\n hh: '%d hours',\n d: 'a day',\n dd: '%d days',\n w: 'a week',\n ww: '%d weeks',\n M: 'a month',\n MM: '%d months',\n y: 'a year',\n yy: '%d years',\n };\n\n function relativeTime(number, withoutSuffix, string, isFuture) {\n var output = this._relativeTime[string];\n return isFunction(output)\n ? output(number, withoutSuffix, string, isFuture)\n : output.replace(/%d/i, number);\n }\n\n function pastFuture(diff, output) {\n var format = this._relativeTime[diff > 0 ? 'future' : 'past'];\n return isFunction(format) ? format(output) : format.replace(/%s/i, output);\n }\n\n var aliases = {};\n\n function addUnitAlias(unit, shorthand) {\n var lowerCase = unit.toLowerCase();\n aliases[lowerCase] = aliases[lowerCase + 's'] = aliases[shorthand] = unit;\n }\n\n function normalizeUnits(units) {\n return typeof units === 'string'\n ? aliases[units] || aliases[units.toLowerCase()]\n : undefined;\n }\n\n function normalizeObjectUnits(inputObject) {\n var normalizedInput = {},\n normalizedProp,\n prop;\n\n for (prop in inputObject) {\n if (hasOwnProp(inputObject, prop)) {\n normalizedProp = normalizeUnits(prop);\n if (normalizedProp) {\n normalizedInput[normalizedProp] = inputObject[prop];\n }\n }\n }\n\n return normalizedInput;\n }\n\n var priorities = {};\n\n function addUnitPriority(unit, priority) {\n priorities[unit] = priority;\n }\n\n function getPrioritizedUnits(unitsObj) {\n var units = [],\n u;\n for (u in unitsObj) {\n if (hasOwnProp(unitsObj, u)) {\n units.push({ unit: u, priority: priorities[u] });\n }\n }\n units.sort(function (a, b) {\n return a.priority - b.priority;\n });\n return units;\n }\n\n function isLeapYear(year) {\n return (year % 4 === 0 && year % 100 !== 0) || year % 400 === 0;\n }\n\n function absFloor(number) {\n if (number < 0) {\n // -0 -> 0\n return Math.ceil(number) || 0;\n } else {\n return Math.floor(number);\n }\n }\n\n function toInt(argumentForCoercion) {\n var coercedNumber = +argumentForCoercion,\n value = 0;\n\n if (coercedNumber !== 0 && isFinite(coercedNumber)) {\n value = absFloor(coercedNumber);\n }\n\n return value;\n }\n\n function makeGetSet(unit, keepTime) {\n return function (value) {\n if (value != null) {\n set$1(this, unit, value);\n hooks.updateOffset(this, keepTime);\n return this;\n } else {\n return get(this, unit);\n }\n };\n }\n\n function get(mom, unit) {\n return mom.isValid()\n ? mom._d['get' + (mom._isUTC ? 'UTC' : '') + unit]()\n : NaN;\n }\n\n function set$1(mom, unit, value) {\n if (mom.isValid() && !isNaN(value)) {\n if (\n unit === 'FullYear' &&\n isLeapYear(mom.year()) &&\n mom.month() === 1 &&\n mom.date() === 29\n ) {\n value = toInt(value);\n mom._d['set' + (mom._isUTC ? 'UTC' : '') + unit](\n value,\n mom.month(),\n daysInMonth(value, mom.month())\n );\n } else {\n mom._d['set' + (mom._isUTC ? 'UTC' : '') + unit](value);\n }\n }\n }\n\n // MOMENTS\n\n function stringGet(units) {\n units = normalizeUnits(units);\n if (isFunction(this[units])) {\n return this[units]();\n }\n return this;\n }\n\n function stringSet(units, value) {\n if (typeof units === 'object') {\n units = normalizeObjectUnits(units);\n var prioritized = getPrioritizedUnits(units),\n i,\n prioritizedLen = prioritized.length;\n for (i = 0; i < prioritizedLen; i++) {\n this[prioritized[i].unit](units[prioritized[i].unit]);\n }\n } else {\n units = normalizeUnits(units);\n if (isFunction(this[units])) {\n return this[units](value);\n }\n }\n return this;\n }\n\n var match1 = /\\d/, // 0 - 9\n match2 = /\\d\\d/, // 00 - 99\n match3 = /\\d{3}/, // 000 - 999\n match4 = /\\d{4}/, // 0000 - 9999\n match6 = /[+-]?\\d{6}/, // -999999 - 999999\n match1to2 = /\\d\\d?/, // 0 - 99\n match3to4 = /\\d\\d\\d\\d?/, // 999 - 9999\n match5to6 = /\\d\\d\\d\\d\\d\\d?/, // 99999 - 999999\n match1to3 = /\\d{1,3}/, // 0 - 999\n match1to4 = /\\d{1,4}/, // 0 - 9999\n match1to6 = /[+-]?\\d{1,6}/, // -999999 - 999999\n matchUnsigned = /\\d+/, // 0 - inf\n matchSigned = /[+-]?\\d+/, // -inf - inf\n matchOffset = /Z|[+-]\\d\\d:?\\d\\d/gi, // +00:00 -00:00 +0000 -0000 or Z\n matchShortOffset = /Z|[+-]\\d\\d(?::?\\d\\d)?/gi, // +00 -00 +00:00 -00:00 +0000 -0000 or Z\n matchTimestamp = /[+-]?\\d+(\\.\\d{1,3})?/, // 123456789 123456789.123\n // any word (or two) characters or numbers including two/three word month in arabic.\n // includes scottish gaelic two word and hyphenated months\n matchWord =\n /[0-9]{0,256}['a-z\\u00A0-\\u05FF\\u0700-\\uD7FF\\uF900-\\uFDCF\\uFDF0-\\uFF07\\uFF10-\\uFFEF]{1,256}|[\\u0600-\\u06FF\\/]{1,256}(\\s*?[\\u0600-\\u06FF]{1,256}){1,2}/i,\n regexes;\n\n regexes = {};\n\n function addRegexToken(token, regex, strictRegex) {\n regexes[token] = isFunction(regex)\n ? regex\n : function (isStrict, localeData) {\n return isStrict && strictRegex ? strictRegex : regex;\n };\n }\n\n function getParseRegexForToken(token, config) {\n if (!hasOwnProp(regexes, token)) {\n return new RegExp(unescapeFormat(token));\n }\n\n return regexes[token](config._strict, config._locale);\n }\n\n // Code from http://stackoverflow.com/questions/3561493/is-there-a-regexp-escape-function-in-javascript\n function unescapeFormat(s) {\n return regexEscape(\n s\n .replace('\\\\', '')\n .replace(\n /\\\\(\\[)|\\\\(\\])|\\[([^\\]\\[]*)\\]|\\\\(.)/g,\n function (matched, p1, p2, p3, p4) {\n return p1 || p2 || p3 || p4;\n }\n )\n );\n }\n\n function regexEscape(s) {\n return s.replace(/[-\\/\\\\^$*+?.()|[\\]{}]/g, '\\\\$&');\n }\n\n var tokens = {};\n\n function addParseToken(token, callback) {\n var i,\n func = callback,\n tokenLen;\n if (typeof token === 'string') {\n token = [token];\n }\n if (isNumber(callback)) {\n func = function (input, array) {\n array[callback] = toInt(input);\n };\n }\n tokenLen = token.length;\n for (i = 0; i < tokenLen; i++) {\n tokens[token[i]] = func;\n }\n }\n\n function addWeekParseToken(token, callback) {\n addParseToken(token, function (input, array, config, token) {\n config._w = config._w || {};\n callback(input, config._w, config, token);\n });\n }\n\n function addTimeToArrayFromToken(token, input, config) {\n if (input != null && hasOwnProp(tokens, token)) {\n tokens[token](input, config._a, config, token);\n }\n }\n\n var YEAR = 0,\n MONTH = 1,\n DATE = 2,\n HOUR = 3,\n MINUTE = 4,\n SECOND = 5,\n MILLISECOND = 6,\n WEEK = 7,\n WEEKDAY = 8;\n\n function mod(n, x) {\n return ((n % x) + x) % x;\n }\n\n var indexOf;\n\n if (Array.prototype.indexOf) {\n indexOf = Array.prototype.indexOf;\n } else {\n indexOf = function (o) {\n // I know\n var i;\n for (i = 0; i < this.length; ++i) {\n if (this[i] === o) {\n return i;\n }\n }\n return -1;\n };\n }\n\n function daysInMonth(year, month) {\n if (isNaN(year) || isNaN(month)) {\n return NaN;\n }\n var modMonth = mod(month, 12);\n year += (month - modMonth) / 12;\n return modMonth === 1\n ? isLeapYear(year)\n ? 29\n : 28\n : 31 - ((modMonth % 7) % 2);\n }\n\n // FORMATTING\n\n addFormatToken('M', ['MM', 2], 'Mo', function () {\n return this.month() + 1;\n });\n\n addFormatToken('MMM', 0, 0, function (format) {\n return this.localeData().monthsShort(this, format);\n });\n\n addFormatToken('MMMM', 0, 0, function (format) {\n return this.localeData().months(this, format);\n });\n\n // ALIASES\n\n addUnitAlias('month', 'M');\n\n // PRIORITY\n\n addUnitPriority('month', 8);\n\n // PARSING\n\n addRegexToken('M', match1to2);\n addRegexToken('MM', match1to2, match2);\n addRegexToken('MMM', function (isStrict, locale) {\n return locale.monthsShortRegex(isStrict);\n });\n addRegexToken('MMMM', function (isStrict, locale) {\n return locale.monthsRegex(isStrict);\n });\n\n addParseToken(['M', 'MM'], function (input, array) {\n array[MONTH] = toInt(input) - 1;\n });\n\n addParseToken(['MMM', 'MMMM'], function (input, array, config, token) {\n var month = config._locale.monthsParse(input, token, config._strict);\n // if we didn't find a month name, mark the date as invalid.\n if (month != null) {\n array[MONTH] = month;\n } else {\n getParsingFlags(config).invalidMonth = input;\n }\n });\n\n // LOCALES\n\n var defaultLocaleMonths =\n 'January_February_March_April_May_June_July_August_September_October_November_December'.split(\n '_'\n ),\n defaultLocaleMonthsShort =\n 'Jan_Feb_Mar_Apr_May_Jun_Jul_Aug_Sep_Oct_Nov_Dec'.split('_'),\n MONTHS_IN_FORMAT = /D[oD]?(\\[[^\\[\\]]*\\]|\\s)+MMMM?/,\n defaultMonthsShortRegex = matchWord,\n defaultMonthsRegex = matchWord;\n\n function localeMonths(m, format) {\n if (!m) {\n return isArray(this._months)\n ? this._months\n : this._months['standalone'];\n }\n return isArray(this._months)\n ? this._months[m.month()]\n : this._months[\n (this._months.isFormat || MONTHS_IN_FORMAT).test(format)\n ? 'format'\n : 'standalone'\n ][m.month()];\n }\n\n function localeMonthsShort(m, format) {\n if (!m) {\n return isArray(this._monthsShort)\n ? this._monthsShort\n : this._monthsShort['standalone'];\n }\n return isArray(this._monthsShort)\n ? this._monthsShort[m.month()]\n : this._monthsShort[\n MONTHS_IN_FORMAT.test(format) ? 'format' : 'standalone'\n ][m.month()];\n }\n\n function handleStrictParse(monthName, format, strict) {\n var i,\n ii,\n mom,\n llc = monthName.toLocaleLowerCase();\n if (!this._monthsParse) {\n // this is not used\n this._monthsParse = [];\n this._longMonthsParse = [];\n this._shortMonthsParse = [];\n for (i = 0; i < 12; ++i) {\n mom = createUTC([2000, i]);\n this._shortMonthsParse[i] = this.monthsShort(\n mom,\n ''\n ).toLocaleLowerCase();\n this._longMonthsParse[i] = this.months(mom, '').toLocaleLowerCase();\n }\n }\n\n if (strict) {\n if (format === 'MMM') {\n ii = indexOf.call(this._shortMonthsParse, llc);\n return ii !== -1 ? ii : null;\n } else {\n ii = indexOf.call(this._longMonthsParse, llc);\n return ii !== -1 ? ii : null;\n }\n } else {\n if (format === 'MMM') {\n ii = indexOf.call(this._shortMonthsParse, llc);\n if (ii !== -1) {\n return ii;\n }\n ii = indexOf.call(this._longMonthsParse, llc);\n return ii !== -1 ? ii : null;\n } else {\n ii = indexOf.call(this._longMonthsParse, llc);\n if (ii !== -1) {\n return ii;\n }\n ii = indexOf.call(this._shortMonthsParse, llc);\n return ii !== -1 ? ii : null;\n }\n }\n }\n\n function localeMonthsParse(monthName, format, strict) {\n var i, mom, regex;\n\n if (this._monthsParseExact) {\n return handleStrictParse.call(this, monthName, format, strict);\n }\n\n if (!this._monthsParse) {\n this._monthsParse = [];\n this._longMonthsParse = [];\n this._shortMonthsParse = [];\n }\n\n // TODO: add sorting\n // Sorting makes sure if one month (or abbr) is a prefix of another\n // see sorting in computeMonthsParse\n for (i = 0; i < 12; i++) {\n // make the regex if we don't have it already\n mom = createUTC([2000, i]);\n if (strict && !this._longMonthsParse[i]) {\n this._longMonthsParse[i] = new RegExp(\n '^' + this.months(mom, '').replace('.', '') + '$',\n 'i'\n );\n this._shortMonthsParse[i] = new RegExp(\n '^' + this.monthsShort(mom, '').replace('.', '') + '$',\n 'i'\n );\n }\n if (!strict && !this._monthsParse[i]) {\n regex =\n '^' + this.months(mom, '') + '|^' + this.monthsShort(mom, '');\n this._monthsParse[i] = new RegExp(regex.replace('.', ''), 'i');\n }\n // test the regex\n if (\n strict &&\n format === 'MMMM' &&\n this._longMonthsParse[i].test(monthName)\n ) {\n return i;\n } else if (\n strict &&\n format === 'MMM' &&\n this._shortMonthsParse[i].test(monthName)\n ) {\n return i;\n } else if (!strict && this._monthsParse[i].test(monthName)) {\n return i;\n }\n }\n }\n\n // MOMENTS\n\n function setMonth(mom, value) {\n var dayOfMonth;\n\n if (!mom.isValid()) {\n // No op\n return mom;\n }\n\n if (typeof value === 'string') {\n if (/^\\d+$/.test(value)) {\n value = toInt(value);\n } else {\n value = mom.localeData().monthsParse(value);\n // TODO: Another silent failure?\n if (!isNumber(value)) {\n return mom;\n }\n }\n }\n\n dayOfMonth = Math.min(mom.date(), daysInMonth(mom.year(), value));\n mom._d['set' + (mom._isUTC ? 'UTC' : '') + 'Month'](value, dayOfMonth);\n return mom;\n }\n\n function getSetMonth(value) {\n if (value != null) {\n setMonth(this, value);\n hooks.updateOffset(this, true);\n return this;\n } else {\n return get(this, 'Month');\n }\n }\n\n function getDaysInMonth() {\n return daysInMonth(this.year(), this.month());\n }\n\n function monthsShortRegex(isStrict) {\n if (this._monthsParseExact) {\n if (!hasOwnProp(this, '_monthsRegex')) {\n computeMonthsParse.call(this);\n }\n if (isStrict) {\n return this._monthsShortStrictRegex;\n } else {\n return this._monthsShortRegex;\n }\n } else {\n if (!hasOwnProp(this, '_monthsShortRegex')) {\n this._monthsShortRegex = defaultMonthsShortRegex;\n }\n return this._monthsShortStrictRegex && isStrict\n ? this._monthsShortStrictRegex\n : this._monthsShortRegex;\n }\n }\n\n function monthsRegex(isStrict) {\n if (this._monthsParseExact) {\n if (!hasOwnProp(this, '_monthsRegex')) {\n computeMonthsParse.call(this);\n }\n if (isStrict) {\n return this._monthsStrictRegex;\n } else {\n return this._monthsRegex;\n }\n } else {\n if (!hasOwnProp(this, '_monthsRegex')) {\n this._monthsRegex = defaultMonthsRegex;\n }\n return this._monthsStrictRegex && isStrict\n ? this._monthsStrictRegex\n : this._monthsRegex;\n }\n }\n\n function computeMonthsParse() {\n function cmpLenRev(a, b) {\n return b.length - a.length;\n }\n\n var shortPieces = [],\n longPieces = [],\n mixedPieces = [],\n i,\n mom;\n for (i = 0; i < 12; i++) {\n // make the regex if we don't have it already\n mom = createUTC([2000, i]);\n shortPieces.push(this.monthsShort(mom, ''));\n longPieces.push(this.months(mom, ''));\n mixedPieces.push(this.months(mom, ''));\n mixedPieces.push(this.monthsShort(mom, ''));\n }\n // Sorting makes sure if one month (or abbr) is a prefix of another it\n // will match the longer piece.\n shortPieces.sort(cmpLenRev);\n longPieces.sort(cmpLenRev);\n mixedPieces.sort(cmpLenRev);\n for (i = 0; i < 12; i++) {\n shortPieces[i] = regexEscape(shortPieces[i]);\n longPieces[i] = regexEscape(longPieces[i]);\n }\n for (i = 0; i < 24; i++) {\n mixedPieces[i] = regexEscape(mixedPieces[i]);\n }\n\n this._monthsRegex = new RegExp('^(' + mixedPieces.join('|') + ')', 'i');\n this._monthsShortRegex = this._monthsRegex;\n this._monthsStrictRegex = new RegExp(\n '^(' + longPieces.join('|') + ')',\n 'i'\n );\n this._monthsShortStrictRegex = new RegExp(\n '^(' + shortPieces.join('|') + ')',\n 'i'\n );\n }\n\n // FORMATTING\n\n addFormatToken('Y', 0, 0, function () {\n var y = this.year();\n return y <= 9999 ? zeroFill(y, 4) : '+' + y;\n });\n\n addFormatToken(0, ['YY', 2], 0, function () {\n return this.year() % 100;\n });\n\n addFormatToken(0, ['YYYY', 4], 0, 'year');\n addFormatToken(0, ['YYYYY', 5], 0, 'year');\n addFormatToken(0, ['YYYYYY', 6, true], 0, 'year');\n\n // ALIASES\n\n addUnitAlias('year', 'y');\n\n // PRIORITIES\n\n addUnitPriority('year', 1);\n\n // PARSING\n\n addRegexToken('Y', matchSigned);\n addRegexToken('YY', match1to2, match2);\n addRegexToken('YYYY', match1to4, match4);\n addRegexToken('YYYYY', match1to6, match6);\n addRegexToken('YYYYYY', match1to6, match6);\n\n addParseToken(['YYYYY', 'YYYYYY'], YEAR);\n addParseToken('YYYY', function (input, array) {\n array[YEAR] =\n input.length === 2 ? hooks.parseTwoDigitYear(input) : toInt(input);\n });\n addParseToken('YY', function (input, array) {\n array[YEAR] = hooks.parseTwoDigitYear(input);\n });\n addParseToken('Y', function (input, array) {\n array[YEAR] = parseInt(input, 10);\n });\n\n // HELPERS\n\n function daysInYear(year) {\n return isLeapYear(year) ? 366 : 365;\n }\n\n // HOOKS\n\n hooks.parseTwoDigitYear = function (input) {\n return toInt(input) + (toInt(input) > 68 ? 1900 : 2000);\n };\n\n // MOMENTS\n\n var getSetYear = makeGetSet('FullYear', true);\n\n function getIsLeapYear() {\n return isLeapYear(this.year());\n }\n\n function createDate(y, m, d, h, M, s, ms) {\n // can't just apply() to create a date:\n // https://stackoverflow.com/q/181348\n var date;\n // the date constructor remaps years 0-99 to 1900-1999\n if (y < 100 && y >= 0) {\n // preserve leap years using a full 400 year cycle, then reset\n date = new Date(y + 400, m, d, h, M, s, ms);\n if (isFinite(date.getFullYear())) {\n date.setFullYear(y);\n }\n } else {\n date = new Date(y, m, d, h, M, s, ms);\n }\n\n return date;\n }\n\n function createUTCDate(y) {\n var date, args;\n // the Date.UTC function remaps years 0-99 to 1900-1999\n if (y < 100 && y >= 0) {\n args = Array.prototype.slice.call(arguments);\n // preserve leap years using a full 400 year cycle, then reset\n args[0] = y + 400;\n date = new Date(Date.UTC.apply(null, args));\n if (isFinite(date.getUTCFullYear())) {\n date.setUTCFullYear(y);\n }\n } else {\n date = new Date(Date.UTC.apply(null, arguments));\n }\n\n return date;\n }\n\n // start-of-first-week - start-of-year\n function firstWeekOffset(year, dow, doy) {\n var // first-week day -- which january is always in the first week (4 for iso, 1 for other)\n fwd = 7 + dow - doy,\n // first-week day local weekday -- which local weekday is fwd\n fwdlw = (7 + createUTCDate(year, 0, fwd).getUTCDay() - dow) % 7;\n\n return -fwdlw + fwd - 1;\n }\n\n // https://en.wikipedia.org/wiki/ISO_week_date#Calculating_a_date_given_the_year.2C_week_number_and_weekday\n function dayOfYearFromWeeks(year, week, weekday, dow, doy) {\n var localWeekday = (7 + weekday - dow) % 7,\n weekOffset = firstWeekOffset(year, dow, doy),\n dayOfYear = 1 + 7 * (week - 1) + localWeekday + weekOffset,\n resYear,\n resDayOfYear;\n\n if (dayOfYear <= 0) {\n resYear = year - 1;\n resDayOfYear = daysInYear(resYear) + dayOfYear;\n } else if (dayOfYear > daysInYear(year)) {\n resYear = year + 1;\n resDayOfYear = dayOfYear - daysInYear(year);\n } else {\n resYear = year;\n resDayOfYear = dayOfYear;\n }\n\n return {\n year: resYear,\n dayOfYear: resDayOfYear,\n };\n }\n\n function weekOfYear(mom, dow, doy) {\n var weekOffset = firstWeekOffset(mom.year(), dow, doy),\n week = Math.floor((mom.dayOfYear() - weekOffset - 1) / 7) + 1,\n resWeek,\n resYear;\n\n if (week < 1) {\n resYear = mom.year() - 1;\n resWeek = week + weeksInYear(resYear, dow, doy);\n } else if (week > weeksInYear(mom.year(), dow, doy)) {\n resWeek = week - weeksInYear(mom.year(), dow, doy);\n resYear = mom.year() + 1;\n } else {\n resYear = mom.year();\n resWeek = week;\n }\n\n return {\n week: resWeek,\n year: resYear,\n };\n }\n\n function weeksInYear(year, dow, doy) {\n var weekOffset = firstWeekOffset(year, dow, doy),\n weekOffsetNext = firstWeekOffset(year + 1, dow, doy);\n return (daysInYear(year) - weekOffset + weekOffsetNext) / 7;\n }\n\n // FORMATTING\n\n addFormatToken('w', ['ww', 2], 'wo', 'week');\n addFormatToken('W', ['WW', 2], 'Wo', 'isoWeek');\n\n // ALIASES\n\n addUnitAlias('week', 'w');\n addUnitAlias('isoWeek', 'W');\n\n // PRIORITIES\n\n addUnitPriority('week', 5);\n addUnitPriority('isoWeek', 5);\n\n // PARSING\n\n addRegexToken('w', match1to2);\n addRegexToken('ww', match1to2, match2);\n addRegexToken('W', match1to2);\n addRegexToken('WW', match1to2, match2);\n\n addWeekParseToken(\n ['w', 'ww', 'W', 'WW'],\n function (input, week, config, token) {\n week[token.substr(0, 1)] = toInt(input);\n }\n );\n\n // HELPERS\n\n // LOCALES\n\n function localeWeek(mom) {\n return weekOfYear(mom, this._week.dow, this._week.doy).week;\n }\n\n var defaultLocaleWeek = {\n dow: 0, // Sunday is the first day of the week.\n doy: 6, // The week that contains Jan 6th is the first week of the year.\n };\n\n function localeFirstDayOfWeek() {\n return this._week.dow;\n }\n\n function localeFirstDayOfYear() {\n return this._week.doy;\n }\n\n // MOMENTS\n\n function getSetWeek(input) {\n var week = this.localeData().week(this);\n return input == null ? week : this.add((input - week) * 7, 'd');\n }\n\n function getSetISOWeek(input) {\n var week = weekOfYear(this, 1, 4).week;\n return input == null ? week : this.add((input - week) * 7, 'd');\n }\n\n // FORMATTING\n\n addFormatToken('d', 0, 'do', 'day');\n\n addFormatToken('dd', 0, 0, function (format) {\n return this.localeData().weekdaysMin(this, format);\n });\n\n addFormatToken('ddd', 0, 0, function (format) {\n return this.localeData().weekdaysShort(this, format);\n });\n\n addFormatToken('dddd', 0, 0, function (format) {\n return this.localeData().weekdays(this, format);\n });\n\n addFormatToken('e', 0, 0, 'weekday');\n addFormatToken('E', 0, 0, 'isoWeekday');\n\n // ALIASES\n\n addUnitAlias('day', 'd');\n addUnitAlias('weekday', 'e');\n addUnitAlias('isoWeekday', 'E');\n\n // PRIORITY\n addUnitPriority('day', 11);\n addUnitPriority('weekday', 11);\n addUnitPriority('isoWeekday', 11);\n\n // PARSING\n\n addRegexToken('d', match1to2);\n addRegexToken('e', match1to2);\n addRegexToken('E', match1to2);\n addRegexToken('dd', function (isStrict, locale) {\n return locale.weekdaysMinRegex(isStrict);\n });\n addRegexToken('ddd', function (isStrict, locale) {\n return locale.weekdaysShortRegex(isStrict);\n });\n addRegexToken('dddd', function (isStrict, locale) {\n return locale.weekdaysRegex(isStrict);\n });\n\n addWeekParseToken(['dd', 'ddd', 'dddd'], function (input, week, config, token) {\n var weekday = config._locale.weekdaysParse(input, token, config._strict);\n // if we didn't get a weekday name, mark the date as invalid\n if (weekday != null) {\n week.d = weekday;\n } else {\n getParsingFlags(config).invalidWeekday = input;\n }\n });\n\n addWeekParseToken(['d', 'e', 'E'], function (input, week, config, token) {\n week[token] = toInt(input);\n });\n\n // HELPERS\n\n function parseWeekday(input, locale) {\n if (typeof input !== 'string') {\n return input;\n }\n\n if (!isNaN(input)) {\n return parseInt(input, 10);\n }\n\n input = locale.weekdaysParse(input);\n if (typeof input === 'number') {\n return input;\n }\n\n return null;\n }\n\n function parseIsoWeekday(input, locale) {\n if (typeof input === 'string') {\n return locale.weekdaysParse(input) % 7 || 7;\n }\n return isNaN(input) ? null : input;\n }\n\n // LOCALES\n function shiftWeekdays(ws, n) {\n return ws.slice(n, 7).concat(ws.slice(0, n));\n }\n\n var defaultLocaleWeekdays =\n 'Sunday_Monday_Tuesday_Wednesday_Thursday_Friday_Saturday'.split('_'),\n defaultLocaleWeekdaysShort = 'Sun_Mon_Tue_Wed_Thu_Fri_Sat'.split('_'),\n defaultLocaleWeekdaysMin = 'Su_Mo_Tu_We_Th_Fr_Sa'.split('_'),\n defaultWeekdaysRegex = matchWord,\n defaultWeekdaysShortRegex = matchWord,\n defaultWeekdaysMinRegex = matchWord;\n\n function localeWeekdays(m, format) {\n var weekdays = isArray(this._weekdays)\n ? this._weekdays\n : this._weekdays[\n m && m !== true && this._weekdays.isFormat.test(format)\n ? 'format'\n : 'standalone'\n ];\n return m === true\n ? shiftWeekdays(weekdays, this._week.dow)\n : m\n ? weekdays[m.day()]\n : weekdays;\n }\n\n function localeWeekdaysShort(m) {\n return m === true\n ? shiftWeekdays(this._weekdaysShort, this._week.dow)\n : m\n ? this._weekdaysShort[m.day()]\n : this._weekdaysShort;\n }\n\n function localeWeekdaysMin(m) {\n return m === true\n ? shiftWeekdays(this._weekdaysMin, this._week.dow)\n : m\n ? this._weekdaysMin[m.day()]\n : this._weekdaysMin;\n }\n\n function handleStrictParse$1(weekdayName, format, strict) {\n var i,\n ii,\n mom,\n llc = weekdayName.toLocaleLowerCase();\n if (!this._weekdaysParse) {\n this._weekdaysParse = [];\n this._shortWeekdaysParse = [];\n this._minWeekdaysParse = [];\n\n for (i = 0; i < 7; ++i) {\n mom = createUTC([2000, 1]).day(i);\n this._minWeekdaysParse[i] = this.weekdaysMin(\n mom,\n ''\n ).toLocaleLowerCase();\n this._shortWeekdaysParse[i] = this.weekdaysShort(\n mom,\n ''\n ).toLocaleLowerCase();\n this._weekdaysParse[i] = this.weekdays(mom, '').toLocaleLowerCase();\n }\n }\n\n if (strict) {\n if (format === 'dddd') {\n ii = indexOf.call(this._weekdaysParse, llc);\n return ii !== -1 ? ii : null;\n } else if (format === 'ddd') {\n ii = indexOf.call(this._shortWeekdaysParse, llc);\n return ii !== -1 ? ii : null;\n } else {\n ii = indexOf.call(this._minWeekdaysParse, llc);\n return ii !== -1 ? ii : null;\n }\n } else {\n if (format === 'dddd') {\n ii = indexOf.call(this._weekdaysParse, llc);\n if (ii !== -1) {\n return ii;\n }\n ii = indexOf.call(this._shortWeekdaysParse, llc);\n if (ii !== -1) {\n return ii;\n }\n ii = indexOf.call(this._minWeekdaysParse, llc);\n return ii !== -1 ? ii : null;\n } else if (format === 'ddd') {\n ii = indexOf.call(this._shortWeekdaysParse, llc);\n if (ii !== -1) {\n return ii;\n }\n ii = indexOf.call(this._weekdaysParse, llc);\n if (ii !== -1) {\n return ii;\n }\n ii = indexOf.call(this._minWeekdaysParse, llc);\n return ii !== -1 ? ii : null;\n } else {\n ii = indexOf.call(this._minWeekdaysParse, llc);\n if (ii !== -1) {\n return ii;\n }\n ii = indexOf.call(this._weekdaysParse, llc);\n if (ii !== -1) {\n return ii;\n }\n ii = indexOf.call(this._shortWeekdaysParse, llc);\n return ii !== -1 ? ii : null;\n }\n }\n }\n\n function localeWeekdaysParse(weekdayName, format, strict) {\n var i, mom, regex;\n\n if (this._weekdaysParseExact) {\n return handleStrictParse$1.call(this, weekdayName, format, strict);\n }\n\n if (!this._weekdaysParse) {\n this._weekdaysParse = [];\n this._minWeekdaysParse = [];\n this._shortWeekdaysParse = [];\n this._fullWeekdaysParse = [];\n }\n\n for (i = 0; i < 7; i++) {\n // make the regex if we don't have it already\n\n mom = createUTC([2000, 1]).day(i);\n if (strict && !this._fullWeekdaysParse[i]) {\n this._fullWeekdaysParse[i] = new RegExp(\n '^' + this.weekdays(mom, '').replace('.', '\\\\.?') + '$',\n 'i'\n );\n this._shortWeekdaysParse[i] = new RegExp(\n '^' + this.weekdaysShort(mom, '').replace('.', '\\\\.?') + '$',\n 'i'\n );\n this._minWeekdaysParse[i] = new RegExp(\n '^' + this.weekdaysMin(mom, '').replace('.', '\\\\.?') + '$',\n 'i'\n );\n }\n if (!this._weekdaysParse[i]) {\n regex =\n '^' +\n this.weekdays(mom, '') +\n '|^' +\n this.weekdaysShort(mom, '') +\n '|^' +\n this.weekdaysMin(mom, '');\n this._weekdaysParse[i] = new RegExp(regex.replace('.', ''), 'i');\n }\n // test the regex\n if (\n strict &&\n format === 'dddd' &&\n this._fullWeekdaysParse[i].test(weekdayName)\n ) {\n return i;\n } else if (\n strict &&\n format === 'ddd' &&\n this._shortWeekdaysParse[i].test(weekdayName)\n ) {\n return i;\n } else if (\n strict &&\n format === 'dd' &&\n this._minWeekdaysParse[i].test(weekdayName)\n ) {\n return i;\n } else if (!strict && this._weekdaysParse[i].test(weekdayName)) {\n return i;\n }\n }\n }\n\n // MOMENTS\n\n function getSetDayOfWeek(input) {\n if (!this.isValid()) {\n return input != null ? this : NaN;\n }\n var day = this._isUTC ? this._d.getUTCDay() : this._d.getDay();\n if (input != null) {\n input = parseWeekday(input, this.localeData());\n return this.add(input - day, 'd');\n } else {\n return day;\n }\n }\n\n function getSetLocaleDayOfWeek(input) {\n if (!this.isValid()) {\n return input != null ? this : NaN;\n }\n var weekday = (this.day() + 7 - this.localeData()._week.dow) % 7;\n return input == null ? weekday : this.add(input - weekday, 'd');\n }\n\n function getSetISODayOfWeek(input) {\n if (!this.isValid()) {\n return input != null ? this : NaN;\n }\n\n // behaves the same as moment#day except\n // as a getter, returns 7 instead of 0 (1-7 range instead of 0-6)\n // as a setter, sunday should belong to the previous week.\n\n if (input != null) {\n var weekday = parseIsoWeekday(input, this.localeData());\n return this.day(this.day() % 7 ? weekday : weekday - 7);\n } else {\n return this.day() || 7;\n }\n }\n\n function weekdaysRegex(isStrict) {\n if (this._weekdaysParseExact) {\n if (!hasOwnProp(this, '_weekdaysRegex')) {\n computeWeekdaysParse.call(this);\n }\n if (isStrict) {\n return this._weekdaysStrictRegex;\n } else {\n return this._weekdaysRegex;\n }\n } else {\n if (!hasOwnProp(this, '_weekdaysRegex')) {\n this._weekdaysRegex = defaultWeekdaysRegex;\n }\n return this._weekdaysStrictRegex && isStrict\n ? this._weekdaysStrictRegex\n : this._weekdaysRegex;\n }\n }\n\n function weekdaysShortRegex(isStrict) {\n if (this._weekdaysParseExact) {\n if (!hasOwnProp(this, '_weekdaysRegex')) {\n computeWeekdaysParse.call(this);\n }\n if (isStrict) {\n return this._weekdaysShortStrictRegex;\n } else {\n return this._weekdaysShortRegex;\n }\n } else {\n if (!hasOwnProp(this, '_weekdaysShortRegex')) {\n this._weekdaysShortRegex = defaultWeekdaysShortRegex;\n }\n return this._weekdaysShortStrictRegex && isStrict\n ? this._weekdaysShortStrictRegex\n : this._weekdaysShortRegex;\n }\n }\n\n function weekdaysMinRegex(isStrict) {\n if (this._weekdaysParseExact) {\n if (!hasOwnProp(this, '_weekdaysRegex')) {\n computeWeekdaysParse.call(this);\n }\n if (isStrict) {\n return this._weekdaysMinStrictRegex;\n } else {\n return this._weekdaysMinRegex;\n }\n } else {\n if (!hasOwnProp(this, '_weekdaysMinRegex')) {\n this._weekdaysMinRegex = defaultWeekdaysMinRegex;\n }\n return this._weekdaysMinStrictRegex && isStrict\n ? this._weekdaysMinStrictRegex\n : this._weekdaysMinRegex;\n }\n }\n\n function computeWeekdaysParse() {\n function cmpLenRev(a, b) {\n return b.length - a.length;\n }\n\n var minPieces = [],\n shortPieces = [],\n longPieces = [],\n mixedPieces = [],\n i,\n mom,\n minp,\n shortp,\n longp;\n for (i = 0; i < 7; i++) {\n // make the regex if we don't have it already\n mom = createUTC([2000, 1]).day(i);\n minp = regexEscape(this.weekdaysMin(mom, ''));\n shortp = regexEscape(this.weekdaysShort(mom, ''));\n longp = regexEscape(this.weekdays(mom, ''));\n minPieces.push(minp);\n shortPieces.push(shortp);\n longPieces.push(longp);\n mixedPieces.push(minp);\n mixedPieces.push(shortp);\n mixedPieces.push(longp);\n }\n // Sorting makes sure if one weekday (or abbr) is a prefix of another it\n // will match the longer piece.\n minPieces.sort(cmpLenRev);\n shortPieces.sort(cmpLenRev);\n longPieces.sort(cmpLenRev);\n mixedPieces.sort(cmpLenRev);\n\n this._weekdaysRegex = new RegExp('^(' + mixedPieces.join('|') + ')', 'i');\n this._weekdaysShortRegex = this._weekdaysRegex;\n this._weekdaysMinRegex = this._weekdaysRegex;\n\n this._weekdaysStrictRegex = new RegExp(\n '^(' + longPieces.join('|') + ')',\n 'i'\n );\n this._weekdaysShortStrictRegex = new RegExp(\n '^(' + shortPieces.join('|') + ')',\n 'i'\n );\n this._weekdaysMinStrictRegex = new RegExp(\n '^(' + minPieces.join('|') + ')',\n 'i'\n );\n }\n\n // FORMATTING\n\n function hFormat() {\n return this.hours() % 12 || 12;\n }\n\n function kFormat() {\n return this.hours() || 24;\n }\n\n addFormatToken('H', ['HH', 2], 0, 'hour');\n addFormatToken('h', ['hh', 2], 0, hFormat);\n addFormatToken('k', ['kk', 2], 0, kFormat);\n\n addFormatToken('hmm', 0, 0, function () {\n return '' + hFormat.apply(this) + zeroFill(this.minutes(), 2);\n });\n\n addFormatToken('hmmss', 0, 0, function () {\n return (\n '' +\n hFormat.apply(this) +\n zeroFill(this.minutes(), 2) +\n zeroFill(this.seconds(), 2)\n );\n });\n\n addFormatToken('Hmm', 0, 0, function () {\n return '' + this.hours() + zeroFill(this.minutes(), 2);\n });\n\n addFormatToken('Hmmss', 0, 0, function () {\n return (\n '' +\n this.hours() +\n zeroFill(this.minutes(), 2) +\n zeroFill(this.seconds(), 2)\n );\n });\n\n function meridiem(token, lowercase) {\n addFormatToken(token, 0, 0, function () {\n return this.localeData().meridiem(\n this.hours(),\n this.minutes(),\n lowercase\n );\n });\n }\n\n meridiem('a', true);\n meridiem('A', false);\n\n // ALIASES\n\n addUnitAlias('hour', 'h');\n\n // PRIORITY\n addUnitPriority('hour', 13);\n\n // PARSING\n\n function matchMeridiem(isStrict, locale) {\n return locale._meridiemParse;\n }\n\n addRegexToken('a', matchMeridiem);\n addRegexToken('A', matchMeridiem);\n addRegexToken('H', match1to2);\n addRegexToken('h', match1to2);\n addRegexToken('k', match1to2);\n addRegexToken('HH', match1to2, match2);\n addRegexToken('hh', match1to2, match2);\n addRegexToken('kk', match1to2, match2);\n\n addRegexToken('hmm', match3to4);\n addRegexToken('hmmss', match5to6);\n addRegexToken('Hmm', match3to4);\n addRegexToken('Hmmss', match5to6);\n\n addParseToken(['H', 'HH'], HOUR);\n addParseToken(['k', 'kk'], function (input, array, config) {\n var kInput = toInt(input);\n array[HOUR] = kInput === 24 ? 0 : kInput;\n });\n addParseToken(['a', 'A'], function (input, array, config) {\n config._isPm = config._locale.isPM(input);\n config._meridiem = input;\n });\n addParseToken(['h', 'hh'], function (input, array, config) {\n array[HOUR] = toInt(input);\n getParsingFlags(config).bigHour = true;\n });\n addParseToken('hmm', function (input, array, config) {\n var pos = input.length - 2;\n array[HOUR] = toInt(input.substr(0, pos));\n array[MINUTE] = toInt(input.substr(pos));\n getParsingFlags(config).bigHour = true;\n });\n addParseToken('hmmss', function (input, array, config) {\n var pos1 = input.length - 4,\n pos2 = input.length - 2;\n array[HOUR] = toInt(input.substr(0, pos1));\n array[MINUTE] = toInt(input.substr(pos1, 2));\n array[SECOND] = toInt(input.substr(pos2));\n getParsingFlags(config).bigHour = true;\n });\n addParseToken('Hmm', function (input, array, config) {\n var pos = input.length - 2;\n array[HOUR] = toInt(input.substr(0, pos));\n array[MINUTE] = toInt(input.substr(pos));\n });\n addParseToken('Hmmss', function (input, array, config) {\n var pos1 = input.length - 4,\n pos2 = input.length - 2;\n array[HOUR] = toInt(input.substr(0, pos1));\n array[MINUTE] = toInt(input.substr(pos1, 2));\n array[SECOND] = toInt(input.substr(pos2));\n });\n\n // LOCALES\n\n function localeIsPM(input) {\n // IE8 Quirks Mode & IE7 Standards Mode do not allow accessing strings like arrays\n // Using charAt should be more compatible.\n return (input + '').toLowerCase().charAt(0) === 'p';\n }\n\n var defaultLocaleMeridiemParse = /[ap]\\.?m?\\.?/i,\n // Setting the hour should keep the time, because the user explicitly\n // specified which hour they want. So trying to maintain the same hour (in\n // a new timezone) makes sense. Adding/subtracting hours does not follow\n // this rule.\n getSetHour = makeGetSet('Hours', true);\n\n function localeMeridiem(hours, minutes, isLower) {\n if (hours > 11) {\n return isLower ? 'pm' : 'PM';\n } else {\n return isLower ? 'am' : 'AM';\n }\n }\n\n var baseConfig = {\n calendar: defaultCalendar,\n longDateFormat: defaultLongDateFormat,\n invalidDate: defaultInvalidDate,\n ordinal: defaultOrdinal,\n dayOfMonthOrdinalParse: defaultDayOfMonthOrdinalParse,\n relativeTime: defaultRelativeTime,\n\n months: defaultLocaleMonths,\n monthsShort: defaultLocaleMonthsShort,\n\n week: defaultLocaleWeek,\n\n weekdays: defaultLocaleWeekdays,\n weekdaysMin: defaultLocaleWeekdaysMin,\n weekdaysShort: defaultLocaleWeekdaysShort,\n\n meridiemParse: defaultLocaleMeridiemParse,\n };\n\n // internal storage for locale config files\n var locales = {},\n localeFamilies = {},\n globalLocale;\n\n function commonPrefix(arr1, arr2) {\n var i,\n minl = Math.min(arr1.length, arr2.length);\n for (i = 0; i < minl; i += 1) {\n if (arr1[i] !== arr2[i]) {\n return i;\n }\n }\n return minl;\n }\n\n function normalizeLocale(key) {\n return key ? key.toLowerCase().replace('_', '-') : key;\n }\n\n // pick the locale from the array\n // try ['en-au', 'en-gb'] as 'en-au', 'en-gb', 'en', as in move through the list trying each\n // substring from most specific to least, but move to the next array item if it's a more specific variant than the current root\n function chooseLocale(names) {\n var i = 0,\n j,\n next,\n locale,\n split;\n\n while (i < names.length) {\n split = normalizeLocale(names[i]).split('-');\n j = split.length;\n next = normalizeLocale(names[i + 1]);\n next = next ? next.split('-') : null;\n while (j > 0) {\n locale = loadLocale(split.slice(0, j).join('-'));\n if (locale) {\n return locale;\n }\n if (\n next &&\n next.length >= j &&\n commonPrefix(split, next) >= j - 1\n ) {\n //the next array item is better than a shallower substring of this one\n break;\n }\n j--;\n }\n i++;\n }\n return globalLocale;\n }\n\n function isLocaleNameSane(name) {\n // Prevent names that look like filesystem paths, i.e contain '/' or '\\'\n return name.match('^[^/\\\\\\\\]*$') != null;\n }\n\n function loadLocale(name) {\n var oldLocale = null,\n aliasedRequire;\n // TODO: Find a better way to register and load all the locales in Node\n if (\n locales[name] === undefined &&\n typeof module !== 'undefined' &&\n module &&\n module.exports &&\n isLocaleNameSane(name)\n ) {\n try {\n oldLocale = globalLocale._abbr;\n aliasedRequire = require;\n aliasedRequire('./locale/' + name);\n getSetGlobalLocale(oldLocale);\n } catch (e) {\n // mark as not found to avoid repeating expensive file require call causing high CPU\n // when trying to find en-US, en_US, en-us for every format call\n locales[name] = null; // null means not found\n }\n }\n return locales[name];\n }\n\n // This function will load locale and then set the global locale. If\n // no arguments are passed in, it will simply return the current global\n // locale key.\n function getSetGlobalLocale(key, values) {\n var data;\n if (key) {\n if (isUndefined(values)) {\n data = getLocale(key);\n } else {\n data = defineLocale(key, values);\n }\n\n if (data) {\n // moment.duration._locale = moment._locale = data;\n globalLocale = data;\n } else {\n if (typeof console !== 'undefined' && console.warn) {\n //warn user if arguments are passed but the locale could not be set\n console.warn(\n 'Locale ' + key + ' not found. Did you forget to load it?'\n );\n }\n }\n }\n\n return globalLocale._abbr;\n }\n\n function defineLocale(name, config) {\n if (config !== null) {\n var locale,\n parentConfig = baseConfig;\n config.abbr = name;\n if (locales[name] != null) {\n deprecateSimple(\n 'defineLocaleOverride',\n 'use moment.updateLocale(localeName, config) to change ' +\n 'an existing locale. moment.defineLocale(localeName, ' +\n 'config) should only be used for creating a new locale ' +\n 'See http://momentjs.com/guides/#/warnings/define-locale/ for more info.'\n );\n parentConfig = locales[name]._config;\n } else if (config.parentLocale != null) {\n if (locales[config.parentLocale] != null) {\n parentConfig = locales[config.parentLocale]._config;\n } else {\n locale = loadLocale(config.parentLocale);\n if (locale != null) {\n parentConfig = locale._config;\n } else {\n if (!localeFamilies[config.parentLocale]) {\n localeFamilies[config.parentLocale] = [];\n }\n localeFamilies[config.parentLocale].push({\n name: name,\n config: config,\n });\n return null;\n }\n }\n }\n locales[name] = new Locale(mergeConfigs(parentConfig, config));\n\n if (localeFamilies[name]) {\n localeFamilies[name].forEach(function (x) {\n defineLocale(x.name, x.config);\n });\n }\n\n // backwards compat for now: also set the locale\n // make sure we set the locale AFTER all child locales have been\n // created, so we won't end up with the child locale set.\n getSetGlobalLocale(name);\n\n return locales[name];\n } else {\n // useful for testing\n delete locales[name];\n return null;\n }\n }\n\n function updateLocale(name, config) {\n if (config != null) {\n var locale,\n tmpLocale,\n parentConfig = baseConfig;\n\n if (locales[name] != null && locales[name].parentLocale != null) {\n // Update existing child locale in-place to avoid memory-leaks\n locales[name].set(mergeConfigs(locales[name]._config, config));\n } else {\n // MERGE\n tmpLocale = loadLocale(name);\n if (tmpLocale != null) {\n parentConfig = tmpLocale._config;\n }\n config = mergeConfigs(parentConfig, config);\n if (tmpLocale == null) {\n // updateLocale is called for creating a new locale\n // Set abbr so it will have a name (getters return\n // undefined otherwise).\n config.abbr = name;\n }\n locale = new Locale(config);\n locale.parentLocale = locales[name];\n locales[name] = locale;\n }\n\n // backwards compat for now: also set the locale\n getSetGlobalLocale(name);\n } else {\n // pass null for config to unupdate, useful for tests\n if (locales[name] != null) {\n if (locales[name].parentLocale != null) {\n locales[name] = locales[name].parentLocale;\n if (name === getSetGlobalLocale()) {\n getSetGlobalLocale(name);\n }\n } else if (locales[name] != null) {\n delete locales[name];\n }\n }\n }\n return locales[name];\n }\n\n // returns locale data\n function getLocale(key) {\n var locale;\n\n if (key && key._locale && key._locale._abbr) {\n key = key._locale._abbr;\n }\n\n if (!key) {\n return globalLocale;\n }\n\n if (!isArray(key)) {\n //short-circuit everything else\n locale = loadLocale(key);\n if (locale) {\n return locale;\n }\n key = [key];\n }\n\n return chooseLocale(key);\n }\n\n function listLocales() {\n return keys(locales);\n }\n\n function checkOverflow(m) {\n var overflow,\n a = m._a;\n\n if (a && getParsingFlags(m).overflow === -2) {\n overflow =\n a[MONTH] < 0 || a[MONTH] > 11\n ? MONTH\n : a[DATE] < 1 || a[DATE] > daysInMonth(a[YEAR], a[MONTH])\n ? DATE\n : a[HOUR] < 0 ||\n a[HOUR] > 24 ||\n (a[HOUR] === 24 &&\n (a[MINUTE] !== 0 ||\n a[SECOND] !== 0 ||\n a[MILLISECOND] !== 0))\n ? HOUR\n : a[MINUTE] < 0 || a[MINUTE] > 59\n ? MINUTE\n : a[SECOND] < 0 || a[SECOND] > 59\n ? SECOND\n : a[MILLISECOND] < 0 || a[MILLISECOND] > 999\n ? MILLISECOND\n : -1;\n\n if (\n getParsingFlags(m)._overflowDayOfYear &&\n (overflow < YEAR || overflow > DATE)\n ) {\n overflow = DATE;\n }\n if (getParsingFlags(m)._overflowWeeks && overflow === -1) {\n overflow = WEEK;\n }\n if (getParsingFlags(m)._overflowWeekday && overflow === -1) {\n overflow = WEEKDAY;\n }\n\n getParsingFlags(m).overflow = overflow;\n }\n\n return m;\n }\n\n // iso 8601 regex\n // 0000-00-00 0000-W00 or 0000-W00-0 + T + 00 or 00:00 or 00:00:00 or 00:00:00.000 + +00:00 or +0000 or +00)\n var extendedIsoRegex =\n /^\\s*((?:[+-]\\d{6}|\\d{4})-(?:\\d\\d-\\d\\d|W\\d\\d-\\d|W\\d\\d|\\d\\d\\d|\\d\\d))(?:(T| )(\\d\\d(?::\\d\\d(?::\\d\\d(?:[.,]\\d+)?)?)?)([+-]\\d\\d(?::?\\d\\d)?|\\s*Z)?)?$/,\n basicIsoRegex =\n /^\\s*((?:[+-]\\d{6}|\\d{4})(?:\\d\\d\\d\\d|W\\d\\d\\d|W\\d\\d|\\d\\d\\d|\\d\\d|))(?:(T| )(\\d\\d(?:\\d\\d(?:\\d\\d(?:[.,]\\d+)?)?)?)([+-]\\d\\d(?::?\\d\\d)?|\\s*Z)?)?$/,\n tzRegex = /Z|[+-]\\d\\d(?::?\\d\\d)?/,\n isoDates = [\n ['YYYYYY-MM-DD', /[+-]\\d{6}-\\d\\d-\\d\\d/],\n ['YYYY-MM-DD', /\\d{4}-\\d\\d-\\d\\d/],\n ['GGGG-[W]WW-E', /\\d{4}-W\\d\\d-\\d/],\n ['GGGG-[W]WW', /\\d{4}-W\\d\\d/, false],\n ['YYYY-DDD', /\\d{4}-\\d{3}/],\n ['YYYY-MM', /\\d{4}-\\d\\d/, false],\n ['YYYYYYMMDD', /[+-]\\d{10}/],\n ['YYYYMMDD', /\\d{8}/],\n ['GGGG[W]WWE', /\\d{4}W\\d{3}/],\n ['GGGG[W]WW', /\\d{4}W\\d{2}/, false],\n ['YYYYDDD', /\\d{7}/],\n ['YYYYMM', /\\d{6}/, false],\n ['YYYY', /\\d{4}/, false],\n ],\n // iso time formats and regexes\n isoTimes = [\n ['HH:mm:ss.SSSS', /\\d\\d:\\d\\d:\\d\\d\\.\\d+/],\n ['HH:mm:ss,SSSS', /\\d\\d:\\d\\d:\\d\\d,\\d+/],\n ['HH:mm:ss', /\\d\\d:\\d\\d:\\d\\d/],\n ['HH:mm', /\\d\\d:\\d\\d/],\n ['HHmmss.SSSS', /\\d\\d\\d\\d\\d\\d\\.\\d+/],\n ['HHmmss,SSSS', /\\d\\d\\d\\d\\d\\d,\\d+/],\n ['HHmmss', /\\d\\d\\d\\d\\d\\d/],\n ['HHmm', /\\d\\d\\d\\d/],\n ['HH', /\\d\\d/],\n ],\n aspNetJsonRegex = /^\\/?Date\\((-?\\d+)/i,\n // RFC 2822 regex: For details see https://tools.ietf.org/html/rfc2822#section-3.3\n rfc2822 =\n /^(?:(Mon|Tue|Wed|Thu|Fri|Sat|Sun),?\\s)?(\\d{1,2})\\s(Jan|Feb|Mar|Apr|May|Jun|Jul|Aug|Sep|Oct|Nov|Dec)\\s(\\d{2,4})\\s(\\d\\d):(\\d\\d)(?::(\\d\\d))?\\s(?:(UT|GMT|[ECMP][SD]T)|([Zz])|([+-]\\d{4}))$/,\n obsOffsets = {\n UT: 0,\n GMT: 0,\n EDT: -4 * 60,\n EST: -5 * 60,\n CDT: -5 * 60,\n CST: -6 * 60,\n MDT: -6 * 60,\n MST: -7 * 60,\n PDT: -7 * 60,\n PST: -8 * 60,\n };\n\n // date from iso format\n function configFromISO(config) {\n var i,\n l,\n string = config._i,\n match = extendedIsoRegex.exec(string) || basicIsoRegex.exec(string),\n allowTime,\n dateFormat,\n timeFormat,\n tzFormat,\n isoDatesLen = isoDates.length,\n isoTimesLen = isoTimes.length;\n\n if (match) {\n getParsingFlags(config).iso = true;\n for (i = 0, l = isoDatesLen; i < l; i++) {\n if (isoDates[i][1].exec(match[1])) {\n dateFormat = isoDates[i][0];\n allowTime = isoDates[i][2] !== false;\n break;\n }\n }\n if (dateFormat == null) {\n config._isValid = false;\n return;\n }\n if (match[3]) {\n for (i = 0, l = isoTimesLen; i < l; i++) {\n if (isoTimes[i][1].exec(match[3])) {\n // match[2] should be 'T' or space\n timeFormat = (match[2] || ' ') + isoTimes[i][0];\n break;\n }\n }\n if (timeFormat == null) {\n config._isValid = false;\n return;\n }\n }\n if (!allowTime && timeFormat != null) {\n config._isValid = false;\n return;\n }\n if (match[4]) {\n if (tzRegex.exec(match[4])) {\n tzFormat = 'Z';\n } else {\n config._isValid = false;\n return;\n }\n }\n config._f = dateFormat + (timeFormat || '') + (tzFormat || '');\n configFromStringAndFormat(config);\n } else {\n config._isValid = false;\n }\n }\n\n function extractFromRFC2822Strings(\n yearStr,\n monthStr,\n dayStr,\n hourStr,\n minuteStr,\n secondStr\n ) {\n var result = [\n untruncateYear(yearStr),\n defaultLocaleMonthsShort.indexOf(monthStr),\n parseInt(dayStr, 10),\n parseInt(hourStr, 10),\n parseInt(minuteStr, 10),\n ];\n\n if (secondStr) {\n result.push(parseInt(secondStr, 10));\n }\n\n return result;\n }\n\n function untruncateYear(yearStr) {\n var year = parseInt(yearStr, 10);\n if (year <= 49) {\n return 2000 + year;\n } else if (year <= 999) {\n return 1900 + year;\n }\n return year;\n }\n\n function preprocessRFC2822(s) {\n // Remove comments and folding whitespace and replace multiple-spaces with a single space\n return s\n .replace(/\\([^()]*\\)|[\\n\\t]/g, ' ')\n .replace(/(\\s\\s+)/g, ' ')\n .replace(/^\\s\\s*/, '')\n .replace(/\\s\\s*$/, '');\n }\n\n function checkWeekday(weekdayStr, parsedInput, config) {\n if (weekdayStr) {\n // TODO: Replace the vanilla JS Date object with an independent day-of-week check.\n var weekdayProvided = defaultLocaleWeekdaysShort.indexOf(weekdayStr),\n weekdayActual = new Date(\n parsedInput[0],\n parsedInput[1],\n parsedInput[2]\n ).getDay();\n if (weekdayProvided !== weekdayActual) {\n getParsingFlags(config).weekdayMismatch = true;\n config._isValid = false;\n return false;\n }\n }\n return true;\n }\n\n function calculateOffset(obsOffset, militaryOffset, numOffset) {\n if (obsOffset) {\n return obsOffsets[obsOffset];\n } else if (militaryOffset) {\n // the only allowed military tz is Z\n return 0;\n } else {\n var hm = parseInt(numOffset, 10),\n m = hm % 100,\n h = (hm - m) / 100;\n return h * 60 + m;\n }\n }\n\n // date and time from ref 2822 format\n function configFromRFC2822(config) {\n var match = rfc2822.exec(preprocessRFC2822(config._i)),\n parsedArray;\n if (match) {\n parsedArray = extractFromRFC2822Strings(\n match[4],\n match[3],\n match[2],\n match[5],\n match[6],\n match[7]\n );\n if (!checkWeekday(match[1], parsedArray, config)) {\n return;\n }\n\n config._a = parsedArray;\n config._tzm = calculateOffset(match[8], match[9], match[10]);\n\n config._d = createUTCDate.apply(null, config._a);\n config._d.setUTCMinutes(config._d.getUTCMinutes() - config._tzm);\n\n getParsingFlags(config).rfc2822 = true;\n } else {\n config._isValid = false;\n }\n }\n\n // date from 1) ASP.NET, 2) ISO, 3) RFC 2822 formats, or 4) optional fallback if parsing isn't strict\n function configFromString(config) {\n var matched = aspNetJsonRegex.exec(config._i);\n if (matched !== null) {\n config._d = new Date(+matched[1]);\n return;\n }\n\n configFromISO(config);\n if (config._isValid === false) {\n delete config._isValid;\n } else {\n return;\n }\n\n configFromRFC2822(config);\n if (config._isValid === false) {\n delete config._isValid;\n } else {\n return;\n }\n\n if (config._strict) {\n config._isValid = false;\n } else {\n // Final attempt, use Input Fallback\n hooks.createFromInputFallback(config);\n }\n }\n\n hooks.createFromInputFallback = deprecate(\n 'value provided is not in a recognized RFC2822 or ISO format. moment construction falls back to js Date(), ' +\n 'which is not reliable across all browsers and versions. Non RFC2822/ISO date formats are ' +\n 'discouraged. Please refer to http://momentjs.com/guides/#/warnings/js-date/ for more info.',\n function (config) {\n config._d = new Date(config._i + (config._useUTC ? ' UTC' : ''));\n }\n );\n\n // Pick the first defined of two or three arguments.\n function defaults(a, b, c) {\n if (a != null) {\n return a;\n }\n if (b != null) {\n return b;\n }\n return c;\n }\n\n function currentDateArray(config) {\n // hooks is actually the exported moment object\n var nowValue = new Date(hooks.now());\n if (config._useUTC) {\n return [\n nowValue.getUTCFullYear(),\n nowValue.getUTCMonth(),\n nowValue.getUTCDate(),\n ];\n }\n return [nowValue.getFullYear(), nowValue.getMonth(), nowValue.getDate()];\n }\n\n // convert an array to a date.\n // the array should mirror the parameters below\n // note: all values past the year are optional and will default to the lowest possible value.\n // [year, month, day , hour, minute, second, millisecond]\n function configFromArray(config) {\n var i,\n date,\n input = [],\n currentDate,\n expectedWeekday,\n yearToUse;\n\n if (config._d) {\n return;\n }\n\n currentDate = currentDateArray(config);\n\n //compute day of the year from weeks and weekdays\n if (config._w && config._a[DATE] == null && config._a[MONTH] == null) {\n dayOfYearFromWeekInfo(config);\n }\n\n //if the day of the year is set, figure out what it is\n if (config._dayOfYear != null) {\n yearToUse = defaults(config._a[YEAR], currentDate[YEAR]);\n\n if (\n config._dayOfYear > daysInYear(yearToUse) ||\n config._dayOfYear === 0\n ) {\n getParsingFlags(config)._overflowDayOfYear = true;\n }\n\n date = createUTCDate(yearToUse, 0, config._dayOfYear);\n config._a[MONTH] = date.getUTCMonth();\n config._a[DATE] = date.getUTCDate();\n }\n\n // Default to current date.\n // * if no year, month, day of month are given, default to today\n // * if day of month is given, default month and year\n // * if month is given, default only year\n // * if year is given, don't default anything\n for (i = 0; i < 3 && config._a[i] == null; ++i) {\n config._a[i] = input[i] = currentDate[i];\n }\n\n // Zero out whatever was not defaulted, including time\n for (; i < 7; i++) {\n config._a[i] = input[i] =\n config._a[i] == null ? (i === 2 ? 1 : 0) : config._a[i];\n }\n\n // Check for 24:00:00.000\n if (\n config._a[HOUR] === 24 &&\n config._a[MINUTE] === 0 &&\n config._a[SECOND] === 0 &&\n config._a[MILLISECOND] === 0\n ) {\n config._nextDay = true;\n config._a[HOUR] = 0;\n }\n\n config._d = (config._useUTC ? createUTCDate : createDate).apply(\n null,\n input\n );\n expectedWeekday = config._useUTC\n ? config._d.getUTCDay()\n : config._d.getDay();\n\n // Apply timezone offset from input. The actual utcOffset can be changed\n // with parseZone.\n if (config._tzm != null) {\n config._d.setUTCMinutes(config._d.getUTCMinutes() - config._tzm);\n }\n\n if (config._nextDay) {\n config._a[HOUR] = 24;\n }\n\n // check for mismatching day of week\n if (\n config._w &&\n typeof config._w.d !== 'undefined' &&\n config._w.d !== expectedWeekday\n ) {\n getParsingFlags(config).weekdayMismatch = true;\n }\n }\n\n function dayOfYearFromWeekInfo(config) {\n var w, weekYear, week, weekday, dow, doy, temp, weekdayOverflow, curWeek;\n\n w = config._w;\n if (w.GG != null || w.W != null || w.E != null) {\n dow = 1;\n doy = 4;\n\n // TODO: We need to take the current isoWeekYear, but that depends on\n // how we interpret now (local, utc, fixed offset). So create\n // a now version of current config (take local/utc/offset flags, and\n // create now).\n weekYear = defaults(\n w.GG,\n config._a[YEAR],\n weekOfYear(createLocal(), 1, 4).year\n );\n week = defaults(w.W, 1);\n weekday = defaults(w.E, 1);\n if (weekday < 1 || weekday > 7) {\n weekdayOverflow = true;\n }\n } else {\n dow = config._locale._week.dow;\n doy = config._locale._week.doy;\n\n curWeek = weekOfYear(createLocal(), dow, doy);\n\n weekYear = defaults(w.gg, config._a[YEAR], curWeek.year);\n\n // Default to current week.\n week = defaults(w.w, curWeek.week);\n\n if (w.d != null) {\n // weekday -- low day numbers are considered next week\n weekday = w.d;\n if (weekday < 0 || weekday > 6) {\n weekdayOverflow = true;\n }\n } else if (w.e != null) {\n // local weekday -- counting starts from beginning of week\n weekday = w.e + dow;\n if (w.e < 0 || w.e > 6) {\n weekdayOverflow = true;\n }\n } else {\n // default to beginning of week\n weekday = dow;\n }\n }\n if (week < 1 || week > weeksInYear(weekYear, dow, doy)) {\n getParsingFlags(config)._overflowWeeks = true;\n } else if (weekdayOverflow != null) {\n getParsingFlags(config)._overflowWeekday = true;\n } else {\n temp = dayOfYearFromWeeks(weekYear, week, weekday, dow, doy);\n config._a[YEAR] = temp.year;\n config._dayOfYear = temp.dayOfYear;\n }\n }\n\n // constant that refers to the ISO standard\n hooks.ISO_8601 = function () {};\n\n // constant that refers to the RFC 2822 form\n hooks.RFC_2822 = function () {};\n\n // date from string and format string\n function configFromStringAndFormat(config) {\n // TODO: Move this to another part of the creation flow to prevent circular deps\n if (config._f === hooks.ISO_8601) {\n configFromISO(config);\n return;\n }\n if (config._f === hooks.RFC_2822) {\n configFromRFC2822(config);\n return;\n }\n config._a = [];\n getParsingFlags(config).empty = true;\n\n // This array is used to make a Date, either with `new Date` or `Date.UTC`\n var string = '' + config._i,\n i,\n parsedInput,\n tokens,\n token,\n skipped,\n stringLength = string.length,\n totalParsedInputLength = 0,\n era,\n tokenLen;\n\n tokens =\n expandFormat(config._f, config._locale).match(formattingTokens) || [];\n tokenLen = tokens.length;\n for (i = 0; i < tokenLen; i++) {\n token = tokens[i];\n parsedInput = (string.match(getParseRegexForToken(token, config)) ||\n [])[0];\n if (parsedInput) {\n skipped = string.substr(0, string.indexOf(parsedInput));\n if (skipped.length > 0) {\n getParsingFlags(config).unusedInput.push(skipped);\n }\n string = string.slice(\n string.indexOf(parsedInput) + parsedInput.length\n );\n totalParsedInputLength += parsedInput.length;\n }\n // don't parse if it's not a known token\n if (formatTokenFunctions[token]) {\n if (parsedInput) {\n getParsingFlags(config).empty = false;\n } else {\n getParsingFlags(config).unusedTokens.push(token);\n }\n addTimeToArrayFromToken(token, parsedInput, config);\n } else if (config._strict && !parsedInput) {\n getParsingFlags(config).unusedTokens.push(token);\n }\n }\n\n // add remaining unparsed input length to the string\n getParsingFlags(config).charsLeftOver =\n stringLength - totalParsedInputLength;\n if (string.length > 0) {\n getParsingFlags(config).unusedInput.push(string);\n }\n\n // clear _12h flag if hour is <= 12\n if (\n config._a[HOUR] <= 12 &&\n getParsingFlags(config).bigHour === true &&\n config._a[HOUR] > 0\n ) {\n getParsingFlags(config).bigHour = undefined;\n }\n\n getParsingFlags(config).parsedDateParts = config._a.slice(0);\n getParsingFlags(config).meridiem = config._meridiem;\n // handle meridiem\n config._a[HOUR] = meridiemFixWrap(\n config._locale,\n config._a[HOUR],\n config._meridiem\n );\n\n // handle era\n era = getParsingFlags(config).era;\n if (era !== null) {\n config._a[YEAR] = config._locale.erasConvertYear(era, config._a[YEAR]);\n }\n\n configFromArray(config);\n checkOverflow(config);\n }\n\n function meridiemFixWrap(locale, hour, meridiem) {\n var isPm;\n\n if (meridiem == null) {\n // nothing to do\n return hour;\n }\n if (locale.meridiemHour != null) {\n return locale.meridiemHour(hour, meridiem);\n } else if (locale.isPM != null) {\n // Fallback\n isPm = locale.isPM(meridiem);\n if (isPm && hour < 12) {\n hour += 12;\n }\n if (!isPm && hour === 12) {\n hour = 0;\n }\n return hour;\n } else {\n // this is not supposed to happen\n return hour;\n }\n }\n\n // date from string and array of format strings\n function configFromStringAndArray(config) {\n var tempConfig,\n bestMoment,\n scoreToBeat,\n i,\n currentScore,\n validFormatFound,\n bestFormatIsValid = false,\n configfLen = config._f.length;\n\n if (configfLen === 0) {\n getParsingFlags(config).invalidFormat = true;\n config._d = new Date(NaN);\n return;\n }\n\n for (i = 0; i < configfLen; i++) {\n currentScore = 0;\n validFormatFound = false;\n tempConfig = copyConfig({}, config);\n if (config._useUTC != null) {\n tempConfig._useUTC = config._useUTC;\n }\n tempConfig._f = config._f[i];\n configFromStringAndFormat(tempConfig);\n\n if (isValid(tempConfig)) {\n validFormatFound = true;\n }\n\n // if there is any input that was not parsed add a penalty for that format\n currentScore += getParsingFlags(tempConfig).charsLeftOver;\n\n //or tokens\n currentScore += getParsingFlags(tempConfig).unusedTokens.length * 10;\n\n getParsingFlags(tempConfig).score = currentScore;\n\n if (!bestFormatIsValid) {\n if (\n scoreToBeat == null ||\n currentScore < scoreToBeat ||\n validFormatFound\n ) {\n scoreToBeat = currentScore;\n bestMoment = tempConfig;\n if (validFormatFound) {\n bestFormatIsValid = true;\n }\n }\n } else {\n if (currentScore < scoreToBeat) {\n scoreToBeat = currentScore;\n bestMoment = tempConfig;\n }\n }\n }\n\n extend(config, bestMoment || tempConfig);\n }\n\n function configFromObject(config) {\n if (config._d) {\n return;\n }\n\n var i = normalizeObjectUnits(config._i),\n dayOrDate = i.day === undefined ? i.date : i.day;\n config._a = map(\n [i.year, i.month, dayOrDate, i.hour, i.minute, i.second, i.millisecond],\n function (obj) {\n return obj && parseInt(obj, 10);\n }\n );\n\n configFromArray(config);\n }\n\n function createFromConfig(config) {\n var res = new Moment(checkOverflow(prepareConfig(config)));\n if (res._nextDay) {\n // Adding is smart enough around DST\n res.add(1, 'd');\n res._nextDay = undefined;\n }\n\n return res;\n }\n\n function prepareConfig(config) {\n var input = config._i,\n format = config._f;\n\n config._locale = config._locale || getLocale(config._l);\n\n if (input === null || (format === undefined && input === '')) {\n return createInvalid({ nullInput: true });\n }\n\n if (typeof input === 'string') {\n config._i = input = config._locale.preparse(input);\n }\n\n if (isMoment(input)) {\n return new Moment(checkOverflow(input));\n } else if (isDate(input)) {\n config._d = input;\n } else if (isArray(format)) {\n configFromStringAndArray(config);\n } else if (format) {\n configFromStringAndFormat(config);\n } else {\n configFromInput(config);\n }\n\n if (!isValid(config)) {\n config._d = null;\n }\n\n return config;\n }\n\n function configFromInput(config) {\n var input = config._i;\n if (isUndefined(input)) {\n config._d = new Date(hooks.now());\n } else if (isDate(input)) {\n config._d = new Date(input.valueOf());\n } else if (typeof input === 'string') {\n configFromString(config);\n } else if (isArray(input)) {\n config._a = map(input.slice(0), function (obj) {\n return parseInt(obj, 10);\n });\n configFromArray(config);\n } else if (isObject(input)) {\n configFromObject(config);\n } else if (isNumber(input)) {\n // from milliseconds\n config._d = new Date(input);\n } else {\n hooks.createFromInputFallback(config);\n }\n }\n\n function createLocalOrUTC(input, format, locale, strict, isUTC) {\n var c = {};\n\n if (format === true || format === false) {\n strict = format;\n format = undefined;\n }\n\n if (locale === true || locale === false) {\n strict = locale;\n locale = undefined;\n }\n\n if (\n (isObject(input) && isObjectEmpty(input)) ||\n (isArray(input) && input.length === 0)\n ) {\n input = undefined;\n }\n // object construction must be done this way.\n // https://github.com/moment/moment/issues/1423\n c._isAMomentObject = true;\n c._useUTC = c._isUTC = isUTC;\n c._l = locale;\n c._i = input;\n c._f = format;\n c._strict = strict;\n\n return createFromConfig(c);\n }\n\n function createLocal(input, format, locale, strict) {\n return createLocalOrUTC(input, format, locale, strict, false);\n }\n\n var prototypeMin = deprecate(\n 'moment().min is deprecated, use moment.max instead. http://momentjs.com/guides/#/warnings/min-max/',\n function () {\n var other = createLocal.apply(null, arguments);\n if (this.isValid() && other.isValid()) {\n return other < this ? this : other;\n } else {\n return createInvalid();\n }\n }\n ),\n prototypeMax = deprecate(\n 'moment().max is deprecated, use moment.min instead. http://momentjs.com/guides/#/warnings/min-max/',\n function () {\n var other = createLocal.apply(null, arguments);\n if (this.isValid() && other.isValid()) {\n return other > this ? this : other;\n } else {\n return createInvalid();\n }\n }\n );\n\n // Pick a moment m from moments so that m[fn](other) is true for all\n // other. This relies on the function fn to be transitive.\n //\n // moments should either be an array of moment objects or an array, whose\n // first element is an array of moment objects.\n function pickBy(fn, moments) {\n var res, i;\n if (moments.length === 1 && isArray(moments[0])) {\n moments = moments[0];\n }\n if (!moments.length) {\n return createLocal();\n }\n res = moments[0];\n for (i = 1; i < moments.length; ++i) {\n if (!moments[i].isValid() || moments[i][fn](res)) {\n res = moments[i];\n }\n }\n return res;\n }\n\n // TODO: Use [].sort instead?\n function min() {\n var args = [].slice.call(arguments, 0);\n\n return pickBy('isBefore', args);\n }\n\n function max() {\n var args = [].slice.call(arguments, 0);\n\n return pickBy('isAfter', args);\n }\n\n var now = function () {\n return Date.now ? Date.now() : +new Date();\n };\n\n var ordering = [\n 'year',\n 'quarter',\n 'month',\n 'week',\n 'day',\n 'hour',\n 'minute',\n 'second',\n 'millisecond',\n ];\n\n function isDurationValid(m) {\n var key,\n unitHasDecimal = false,\n i,\n orderLen = ordering.length;\n for (key in m) {\n if (\n hasOwnProp(m, key) &&\n !(\n indexOf.call(ordering, key) !== -1 &&\n (m[key] == null || !isNaN(m[key]))\n )\n ) {\n return false;\n }\n }\n\n for (i = 0; i < orderLen; ++i) {\n if (m[ordering[i]]) {\n if (unitHasDecimal) {\n return false; // only allow non-integers for smallest unit\n }\n if (parseFloat(m[ordering[i]]) !== toInt(m[ordering[i]])) {\n unitHasDecimal = true;\n }\n }\n }\n\n return true;\n }\n\n function isValid$1() {\n return this._isValid;\n }\n\n function createInvalid$1() {\n return createDuration(NaN);\n }\n\n function Duration(duration) {\n var normalizedInput = normalizeObjectUnits(duration),\n years = normalizedInput.year || 0,\n quarters = normalizedInput.quarter || 0,\n months = normalizedInput.month || 0,\n weeks = normalizedInput.week || normalizedInput.isoWeek || 0,\n days = normalizedInput.day || 0,\n hours = normalizedInput.hour || 0,\n minutes = normalizedInput.minute || 0,\n seconds = normalizedInput.second || 0,\n milliseconds = normalizedInput.millisecond || 0;\n\n this._isValid = isDurationValid(normalizedInput);\n\n // representation for dateAddRemove\n this._milliseconds =\n +milliseconds +\n seconds * 1e3 + // 1000\n minutes * 6e4 + // 1000 * 60\n hours * 1000 * 60 * 60; //using 1000 * 60 * 60 instead of 36e5 to avoid floating point rounding errors https://github.com/moment/moment/issues/2978\n // Because of dateAddRemove treats 24 hours as different from a\n // day when working around DST, we need to store them separately\n this._days = +days + weeks * 7;\n // It is impossible to translate months into days without knowing\n // which months you are are talking about, so we have to store\n // it separately.\n this._months = +months + quarters * 3 + years * 12;\n\n this._data = {};\n\n this._locale = getLocale();\n\n this._bubble();\n }\n\n function isDuration(obj) {\n return obj instanceof Duration;\n }\n\n function absRound(number) {\n if (number < 0) {\n return Math.round(-1 * number) * -1;\n } else {\n return Math.round(number);\n }\n }\n\n // compare two arrays, return the number of differences\n function compareArrays(array1, array2, dontConvert) {\n var len = Math.min(array1.length, array2.length),\n lengthDiff = Math.abs(array1.length - array2.length),\n diffs = 0,\n i;\n for (i = 0; i < len; i++) {\n if (\n (dontConvert && array1[i] !== array2[i]) ||\n (!dontConvert && toInt(array1[i]) !== toInt(array2[i]))\n ) {\n diffs++;\n }\n }\n return diffs + lengthDiff;\n }\n\n // FORMATTING\n\n function offset(token, separator) {\n addFormatToken(token, 0, 0, function () {\n var offset = this.utcOffset(),\n sign = '+';\n if (offset < 0) {\n offset = -offset;\n sign = '-';\n }\n return (\n sign +\n zeroFill(~~(offset / 60), 2) +\n separator +\n zeroFill(~~offset % 60, 2)\n );\n });\n }\n\n offset('Z', ':');\n offset('ZZ', '');\n\n // PARSING\n\n addRegexToken('Z', matchShortOffset);\n addRegexToken('ZZ', matchShortOffset);\n addParseToken(['Z', 'ZZ'], function (input, array, config) {\n config._useUTC = true;\n config._tzm = offsetFromString(matchShortOffset, input);\n });\n\n // HELPERS\n\n // timezone chunker\n // '+10:00' > ['10', '00']\n // '-1530' > ['-15', '30']\n var chunkOffset = /([\\+\\-]|\\d\\d)/gi;\n\n function offsetFromString(matcher, string) {\n var matches = (string || '').match(matcher),\n chunk,\n parts,\n minutes;\n\n if (matches === null) {\n return null;\n }\n\n chunk = matches[matches.length - 1] || [];\n parts = (chunk + '').match(chunkOffset) || ['-', 0, 0];\n minutes = +(parts[1] * 60) + toInt(parts[2]);\n\n return minutes === 0 ? 0 : parts[0] === '+' ? minutes : -minutes;\n }\n\n // Return a moment from input, that is local/utc/zone equivalent to model.\n function cloneWithOffset(input, model) {\n var res, diff;\n if (model._isUTC) {\n res = model.clone();\n diff =\n (isMoment(input) || isDate(input)\n ? input.valueOf()\n : createLocal(input).valueOf()) - res.valueOf();\n // Use low-level api, because this fn is low-level api.\n res._d.setTime(res._d.valueOf() + diff);\n hooks.updateOffset(res, false);\n return res;\n } else {\n return createLocal(input).local();\n }\n }\n\n function getDateOffset(m) {\n // On Firefox.24 Date#getTimezoneOffset returns a floating point.\n // https://github.com/moment/moment/pull/1871\n return -Math.round(m._d.getTimezoneOffset());\n }\n\n // HOOKS\n\n // This function will be called whenever a moment is mutated.\n // It is intended to keep the offset in sync with the timezone.\n hooks.updateOffset = function () {};\n\n // MOMENTS\n\n // keepLocalTime = true means only change the timezone, without\n // affecting the local hour. So 5:31:26 +0300 --[utcOffset(2, true)]-->\n // 5:31:26 +0200 It is possible that 5:31:26 doesn't exist with offset\n // +0200, so we adjust the time as needed, to be valid.\n //\n // Keeping the time actually adds/subtracts (one hour)\n // from the actual represented time. That is why we call updateOffset\n // a second time. In case it wants us to change the offset again\n // _changeInProgress == true case, then we have to adjust, because\n // there is no such time in the given timezone.\n function getSetOffset(input, keepLocalTime, keepMinutes) {\n var offset = this._offset || 0,\n localAdjust;\n if (!this.isValid()) {\n return input != null ? this : NaN;\n }\n if (input != null) {\n if (typeof input === 'string') {\n input = offsetFromString(matchShortOffset, input);\n if (input === null) {\n return this;\n }\n } else if (Math.abs(input) < 16 && !keepMinutes) {\n input = input * 60;\n }\n if (!this._isUTC && keepLocalTime) {\n localAdjust = getDateOffset(this);\n }\n this._offset = input;\n this._isUTC = true;\n if (localAdjust != null) {\n this.add(localAdjust, 'm');\n }\n if (offset !== input) {\n if (!keepLocalTime || this._changeInProgress) {\n addSubtract(\n this,\n createDuration(input - offset, 'm'),\n 1,\n false\n );\n } else if (!this._changeInProgress) {\n this._changeInProgress = true;\n hooks.updateOffset(this, true);\n this._changeInProgress = null;\n }\n }\n return this;\n } else {\n return this._isUTC ? offset : getDateOffset(this);\n }\n }\n\n function getSetZone(input, keepLocalTime) {\n if (input != null) {\n if (typeof input !== 'string') {\n input = -input;\n }\n\n this.utcOffset(input, keepLocalTime);\n\n return this;\n } else {\n return -this.utcOffset();\n }\n }\n\n function setOffsetToUTC(keepLocalTime) {\n return this.utcOffset(0, keepLocalTime);\n }\n\n function setOffsetToLocal(keepLocalTime) {\n if (this._isUTC) {\n this.utcOffset(0, keepLocalTime);\n this._isUTC = false;\n\n if (keepLocalTime) {\n this.subtract(getDateOffset(this), 'm');\n }\n }\n return this;\n }\n\n function setOffsetToParsedOffset() {\n if (this._tzm != null) {\n this.utcOffset(this._tzm, false, true);\n } else if (typeof this._i === 'string') {\n var tZone = offsetFromString(matchOffset, this._i);\n if (tZone != null) {\n this.utcOffset(tZone);\n } else {\n this.utcOffset(0, true);\n }\n }\n return this;\n }\n\n function hasAlignedHourOffset(input) {\n if (!this.isValid()) {\n return false;\n }\n input = input ? createLocal(input).utcOffset() : 0;\n\n return (this.utcOffset() - input) % 60 === 0;\n }\n\n function isDaylightSavingTime() {\n return (\n this.utcOffset() > this.clone().month(0).utcOffset() ||\n this.utcOffset() > this.clone().month(5).utcOffset()\n );\n }\n\n function isDaylightSavingTimeShifted() {\n if (!isUndefined(this._isDSTShifted)) {\n return this._isDSTShifted;\n }\n\n var c = {},\n other;\n\n copyConfig(c, this);\n c = prepareConfig(c);\n\n if (c._a) {\n other = c._isUTC ? createUTC(c._a) : createLocal(c._a);\n this._isDSTShifted =\n this.isValid() && compareArrays(c._a, other.toArray()) > 0;\n } else {\n this._isDSTShifted = false;\n }\n\n return this._isDSTShifted;\n }\n\n function isLocal() {\n return this.isValid() ? !this._isUTC : false;\n }\n\n function isUtcOffset() {\n return this.isValid() ? this._isUTC : false;\n }\n\n function isUtc() {\n return this.isValid() ? this._isUTC && this._offset === 0 : false;\n }\n\n // ASP.NET json date format regex\n var aspNetRegex = /^(-|\\+)?(?:(\\d*)[. ])?(\\d+):(\\d+)(?::(\\d+)(\\.\\d*)?)?$/,\n // from http://docs.closure-library.googlecode.com/git/closure_goog_date_date.js.source.html\n // somewhat more in line with 4.4.3.2 2004 spec, but allows decimal anywhere\n // and further modified to allow for strings containing both week and day\n isoRegex =\n /^(-|\\+)?P(?:([-+]?[0-9,.]*)Y)?(?:([-+]?[0-9,.]*)M)?(?:([-+]?[0-9,.]*)W)?(?:([-+]?[0-9,.]*)D)?(?:T(?:([-+]?[0-9,.]*)H)?(?:([-+]?[0-9,.]*)M)?(?:([-+]?[0-9,.]*)S)?)?$/;\n\n function createDuration(input, key) {\n var duration = input,\n // matching against regexp is expensive, do it on demand\n match = null,\n sign,\n ret,\n diffRes;\n\n if (isDuration(input)) {\n duration = {\n ms: input._milliseconds,\n d: input._days,\n M: input._months,\n };\n } else if (isNumber(input) || !isNaN(+input)) {\n duration = {};\n if (key) {\n duration[key] = +input;\n } else {\n duration.milliseconds = +input;\n }\n } else if ((match = aspNetRegex.exec(input))) {\n sign = match[1] === '-' ? -1 : 1;\n duration = {\n y: 0,\n d: toInt(match[DATE]) * sign,\n h: toInt(match[HOUR]) * sign,\n m: toInt(match[MINUTE]) * sign,\n s: toInt(match[SECOND]) * sign,\n ms: toInt(absRound(match[MILLISECOND] * 1000)) * sign, // the millisecond decimal point is included in the match\n };\n } else if ((match = isoRegex.exec(input))) {\n sign = match[1] === '-' ? -1 : 1;\n duration = {\n y: parseIso(match[2], sign),\n M: parseIso(match[3], sign),\n w: parseIso(match[4], sign),\n d: parseIso(match[5], sign),\n h: parseIso(match[6], sign),\n m: parseIso(match[7], sign),\n s: parseIso(match[8], sign),\n };\n } else if (duration == null) {\n // checks for null or undefined\n duration = {};\n } else if (\n typeof duration === 'object' &&\n ('from' in duration || 'to' in duration)\n ) {\n diffRes = momentsDifference(\n createLocal(duration.from),\n createLocal(duration.to)\n );\n\n duration = {};\n duration.ms = diffRes.milliseconds;\n duration.M = diffRes.months;\n }\n\n ret = new Duration(duration);\n\n if (isDuration(input) && hasOwnProp(input, '_locale')) {\n ret._locale = input._locale;\n }\n\n if (isDuration(input) && hasOwnProp(input, '_isValid')) {\n ret._isValid = input._isValid;\n }\n\n return ret;\n }\n\n createDuration.fn = Duration.prototype;\n createDuration.invalid = createInvalid$1;\n\n function parseIso(inp, sign) {\n // We'd normally use ~~inp for this, but unfortunately it also\n // converts floats to ints.\n // inp may be undefined, so careful calling replace on it.\n var res = inp && parseFloat(inp.replace(',', '.'));\n // apply sign while we're at it\n return (isNaN(res) ? 0 : res) * sign;\n }\n\n function positiveMomentsDifference(base, other) {\n var res = {};\n\n res.months =\n other.month() - base.month() + (other.year() - base.year()) * 12;\n if (base.clone().add(res.months, 'M').isAfter(other)) {\n --res.months;\n }\n\n res.milliseconds = +other - +base.clone().add(res.months, 'M');\n\n return res;\n }\n\n function momentsDifference(base, other) {\n var res;\n if (!(base.isValid() && other.isValid())) {\n return { milliseconds: 0, months: 0 };\n }\n\n other = cloneWithOffset(other, base);\n if (base.isBefore(other)) {\n res = positiveMomentsDifference(base, other);\n } else {\n res = positiveMomentsDifference(other, base);\n res.milliseconds = -res.milliseconds;\n res.months = -res.months;\n }\n\n return res;\n }\n\n // TODO: remove 'name' arg after deprecation is removed\n function createAdder(direction, name) {\n return function (val, period) {\n var dur, tmp;\n //invert the arguments, but complain about it\n if (period !== null && !isNaN(+period)) {\n deprecateSimple(\n name,\n 'moment().' +\n name +\n '(period, number) is deprecated. Please use moment().' +\n name +\n '(number, period). ' +\n 'See http://momentjs.com/guides/#/warnings/add-inverted-param/ for more info.'\n );\n tmp = val;\n val = period;\n period = tmp;\n }\n\n dur = createDuration(val, period);\n addSubtract(this, dur, direction);\n return this;\n };\n }\n\n function addSubtract(mom, duration, isAdding, updateOffset) {\n var milliseconds = duration._milliseconds,\n days = absRound(duration._days),\n months = absRound(duration._months);\n\n if (!mom.isValid()) {\n // No op\n return;\n }\n\n updateOffset = updateOffset == null ? true : updateOffset;\n\n if (months) {\n setMonth(mom, get(mom, 'Month') + months * isAdding);\n }\n if (days) {\n set$1(mom, 'Date', get(mom, 'Date') + days * isAdding);\n }\n if (milliseconds) {\n mom._d.setTime(mom._d.valueOf() + milliseconds * isAdding);\n }\n if (updateOffset) {\n hooks.updateOffset(mom, days || months);\n }\n }\n\n var add = createAdder(1, 'add'),\n subtract = createAdder(-1, 'subtract');\n\n function isString(input) {\n return typeof input === 'string' || input instanceof String;\n }\n\n // type MomentInput = Moment | Date | string | number | (number | string)[] | MomentInputObject | void; // null | undefined\n function isMomentInput(input) {\n return (\n isMoment(input) ||\n isDate(input) ||\n isString(input) ||\n isNumber(input) ||\n isNumberOrStringArray(input) ||\n isMomentInputObject(input) ||\n input === null ||\n input === undefined\n );\n }\n\n function isMomentInputObject(input) {\n var objectTest = isObject(input) && !isObjectEmpty(input),\n propertyTest = false,\n properties = [\n 'years',\n 'year',\n 'y',\n 'months',\n 'month',\n 'M',\n 'days',\n 'day',\n 'd',\n 'dates',\n 'date',\n 'D',\n 'hours',\n 'hour',\n 'h',\n 'minutes',\n 'minute',\n 'm',\n 'seconds',\n 'second',\n 's',\n 'milliseconds',\n 'millisecond',\n 'ms',\n ],\n i,\n property,\n propertyLen = properties.length;\n\n for (i = 0; i < propertyLen; i += 1) {\n property = properties[i];\n propertyTest = propertyTest || hasOwnProp(input, property);\n }\n\n return objectTest && propertyTest;\n }\n\n function isNumberOrStringArray(input) {\n var arrayTest = isArray(input),\n dataTypeTest = false;\n if (arrayTest) {\n dataTypeTest =\n input.filter(function (item) {\n return !isNumber(item) && isString(input);\n }).length === 0;\n }\n return arrayTest && dataTypeTest;\n }\n\n function isCalendarSpec(input) {\n var objectTest = isObject(input) && !isObjectEmpty(input),\n propertyTest = false,\n properties = [\n 'sameDay',\n 'nextDay',\n 'lastDay',\n 'nextWeek',\n 'lastWeek',\n 'sameElse',\n ],\n i,\n property;\n\n for (i = 0; i < properties.length; i += 1) {\n property = properties[i];\n propertyTest = propertyTest || hasOwnProp(input, property);\n }\n\n return objectTest && propertyTest;\n }\n\n function getCalendarFormat(myMoment, now) {\n var diff = myMoment.diff(now, 'days', true);\n return diff < -6\n ? 'sameElse'\n : diff < -1\n ? 'lastWeek'\n : diff < 0\n ? 'lastDay'\n : diff < 1\n ? 'sameDay'\n : diff < 2\n ? 'nextDay'\n : diff < 7\n ? 'nextWeek'\n : 'sameElse';\n }\n\n function calendar$1(time, formats) {\n // Support for single parameter, formats only overload to the calendar function\n if (arguments.length === 1) {\n if (!arguments[0]) {\n time = undefined;\n formats = undefined;\n } else if (isMomentInput(arguments[0])) {\n time = arguments[0];\n formats = undefined;\n } else if (isCalendarSpec(arguments[0])) {\n formats = arguments[0];\n time = undefined;\n }\n }\n // We want to compare the start of today, vs this.\n // Getting start-of-today depends on whether we're local/utc/offset or not.\n var now = time || createLocal(),\n sod = cloneWithOffset(now, this).startOf('day'),\n format = hooks.calendarFormat(this, sod) || 'sameElse',\n output =\n formats &&\n (isFunction(formats[format])\n ? formats[format].call(this, now)\n : formats[format]);\n\n return this.format(\n output || this.localeData().calendar(format, this, createLocal(now))\n );\n }\n\n function clone() {\n return new Moment(this);\n }\n\n function isAfter(input, units) {\n var localInput = isMoment(input) ? input : createLocal(input);\n if (!(this.isValid() && localInput.isValid())) {\n return false;\n }\n units = normalizeUnits(units) || 'millisecond';\n if (units === 'millisecond') {\n return this.valueOf() > localInput.valueOf();\n } else {\n return localInput.valueOf() < this.clone().startOf(units).valueOf();\n }\n }\n\n function isBefore(input, units) {\n var localInput = isMoment(input) ? input : createLocal(input);\n if (!(this.isValid() && localInput.isValid())) {\n return false;\n }\n units = normalizeUnits(units) || 'millisecond';\n if (units === 'millisecond') {\n return this.valueOf() < localInput.valueOf();\n } else {\n return this.clone().endOf(units).valueOf() < localInput.valueOf();\n }\n }\n\n function isBetween(from, to, units, inclusivity) {\n var localFrom = isMoment(from) ? from : createLocal(from),\n localTo = isMoment(to) ? to : createLocal(to);\n if (!(this.isValid() && localFrom.isValid() && localTo.isValid())) {\n return false;\n }\n inclusivity = inclusivity || '()';\n return (\n (inclusivity[0] === '('\n ? this.isAfter(localFrom, units)\n : !this.isBefore(localFrom, units)) &&\n (inclusivity[1] === ')'\n ? this.isBefore(localTo, units)\n : !this.isAfter(localTo, units))\n );\n }\n\n function isSame(input, units) {\n var localInput = isMoment(input) ? input : createLocal(input),\n inputMs;\n if (!(this.isValid() && localInput.isValid())) {\n return false;\n }\n units = normalizeUnits(units) || 'millisecond';\n if (units === 'millisecond') {\n return this.valueOf() === localInput.valueOf();\n } else {\n inputMs = localInput.valueOf();\n return (\n this.clone().startOf(units).valueOf() <= inputMs &&\n inputMs <= this.clone().endOf(units).valueOf()\n );\n }\n }\n\n function isSameOrAfter(input, units) {\n return this.isSame(input, units) || this.isAfter(input, units);\n }\n\n function isSameOrBefore(input, units) {\n return this.isSame(input, units) || this.isBefore(input, units);\n }\n\n function diff(input, units, asFloat) {\n var that, zoneDelta, output;\n\n if (!this.isValid()) {\n return NaN;\n }\n\n that = cloneWithOffset(input, this);\n\n if (!that.isValid()) {\n return NaN;\n }\n\n zoneDelta = (that.utcOffset() - this.utcOffset()) * 6e4;\n\n units = normalizeUnits(units);\n\n switch (units) {\n case 'year':\n output = monthDiff(this, that) / 12;\n break;\n case 'month':\n output = monthDiff(this, that);\n break;\n case 'quarter':\n output = monthDiff(this, that) / 3;\n break;\n case 'second':\n output = (this - that) / 1e3;\n break; // 1000\n case 'minute':\n output = (this - that) / 6e4;\n break; // 1000 * 60\n case 'hour':\n output = (this - that) / 36e5;\n break; // 1000 * 60 * 60\n case 'day':\n output = (this - that - zoneDelta) / 864e5;\n break; // 1000 * 60 * 60 * 24, negate dst\n case 'week':\n output = (this - that - zoneDelta) / 6048e5;\n break; // 1000 * 60 * 60 * 24 * 7, negate dst\n default:\n output = this - that;\n }\n\n return asFloat ? output : absFloor(output);\n }\n\n function monthDiff(a, b) {\n if (a.date() < b.date()) {\n // end-of-month calculations work correct when the start month has more\n // days than the end month.\n return -monthDiff(b, a);\n }\n // difference in months\n var wholeMonthDiff = (b.year() - a.year()) * 12 + (b.month() - a.month()),\n // b is in (anchor - 1 month, anchor + 1 month)\n anchor = a.clone().add(wholeMonthDiff, 'months'),\n anchor2,\n adjust;\n\n if (b - anchor < 0) {\n anchor2 = a.clone().add(wholeMonthDiff - 1, 'months');\n // linear across the month\n adjust = (b - anchor) / (anchor - anchor2);\n } else {\n anchor2 = a.clone().add(wholeMonthDiff + 1, 'months');\n // linear across the month\n adjust = (b - anchor) / (anchor2 - anchor);\n }\n\n //check for negative zero, return zero if negative zero\n return -(wholeMonthDiff + adjust) || 0;\n }\n\n hooks.defaultFormat = 'YYYY-MM-DDTHH:mm:ssZ';\n hooks.defaultFormatUtc = 'YYYY-MM-DDTHH:mm:ss[Z]';\n\n function toString() {\n return this.clone().locale('en').format('ddd MMM DD YYYY HH:mm:ss [GMT]ZZ');\n }\n\n function toISOString(keepOffset) {\n if (!this.isValid()) {\n return null;\n }\n var utc = keepOffset !== true,\n m = utc ? this.clone().utc() : this;\n if (m.year() < 0 || m.year() > 9999) {\n return formatMoment(\n m,\n utc\n ? 'YYYYYY-MM-DD[T]HH:mm:ss.SSS[Z]'\n : 'YYYYYY-MM-DD[T]HH:mm:ss.SSSZ'\n );\n }\n if (isFunction(Date.prototype.toISOString)) {\n // native implementation is ~50x faster, use it when we can\n if (utc) {\n return this.toDate().toISOString();\n } else {\n return new Date(this.valueOf() + this.utcOffset() * 60 * 1000)\n .toISOString()\n .replace('Z', formatMoment(m, 'Z'));\n }\n }\n return formatMoment(\n m,\n utc ? 'YYYY-MM-DD[T]HH:mm:ss.SSS[Z]' : 'YYYY-MM-DD[T]HH:mm:ss.SSSZ'\n );\n }\n\n /**\n * Return a human readable representation of a moment that can\n * also be evaluated to get a new moment which is the same\n *\n * @link https://nodejs.org/dist/latest/docs/api/util.html#util_custom_inspect_function_on_objects\n */\n function inspect() {\n if (!this.isValid()) {\n return 'moment.invalid(/* ' + this._i + ' */)';\n }\n var func = 'moment',\n zone = '',\n prefix,\n year,\n datetime,\n suffix;\n if (!this.isLocal()) {\n func = this.utcOffset() === 0 ? 'moment.utc' : 'moment.parseZone';\n zone = 'Z';\n }\n prefix = '[' + func + '(\"]';\n year = 0 <= this.year() && this.year() <= 9999 ? 'YYYY' : 'YYYYYY';\n datetime = '-MM-DD[T]HH:mm:ss.SSS';\n suffix = zone + '[\")]';\n\n return this.format(prefix + year + datetime + suffix);\n }\n\n function format(inputString) {\n if (!inputString) {\n inputString = this.isUtc()\n ? hooks.defaultFormatUtc\n : hooks.defaultFormat;\n }\n var output = formatMoment(this, inputString);\n return this.localeData().postformat(output);\n }\n\n function from(time, withoutSuffix) {\n if (\n this.isValid() &&\n ((isMoment(time) && time.isValid()) || createLocal(time).isValid())\n ) {\n return createDuration({ to: this, from: time })\n .locale(this.locale())\n .humanize(!withoutSuffix);\n } else {\n return this.localeData().invalidDate();\n }\n }\n\n function fromNow(withoutSuffix) {\n return this.from(createLocal(), withoutSuffix);\n }\n\n function to(time, withoutSuffix) {\n if (\n this.isValid() &&\n ((isMoment(time) && time.isValid()) || createLocal(time).isValid())\n ) {\n return createDuration({ from: this, to: time })\n .locale(this.locale())\n .humanize(!withoutSuffix);\n } else {\n return this.localeData().invalidDate();\n }\n }\n\n function toNow(withoutSuffix) {\n return this.to(createLocal(), withoutSuffix);\n }\n\n // If passed a locale key, it will set the locale for this\n // instance. Otherwise, it will return the locale configuration\n // variables for this instance.\n function locale(key) {\n var newLocaleData;\n\n if (key === undefined) {\n return this._locale._abbr;\n } else {\n newLocaleData = getLocale(key);\n if (newLocaleData != null) {\n this._locale = newLocaleData;\n }\n return this;\n }\n }\n\n var lang = deprecate(\n 'moment().lang() is deprecated. Instead, use moment().localeData() to get the language configuration. Use moment().locale() to change languages.',\n function (key) {\n if (key === undefined) {\n return this.localeData();\n } else {\n return this.locale(key);\n }\n }\n );\n\n function localeData() {\n return this._locale;\n }\n\n var MS_PER_SECOND = 1000,\n MS_PER_MINUTE = 60 * MS_PER_SECOND,\n MS_PER_HOUR = 60 * MS_PER_MINUTE,\n MS_PER_400_YEARS = (365 * 400 + 97) * 24 * MS_PER_HOUR;\n\n // actual modulo - handles negative numbers (for dates before 1970):\n function mod$1(dividend, divisor) {\n return ((dividend % divisor) + divisor) % divisor;\n }\n\n function localStartOfDate(y, m, d) {\n // the date constructor remaps years 0-99 to 1900-1999\n if (y < 100 && y >= 0) {\n // preserve leap years using a full 400 year cycle, then reset\n return new Date(y + 400, m, d) - MS_PER_400_YEARS;\n } else {\n return new Date(y, m, d).valueOf();\n }\n }\n\n function utcStartOfDate(y, m, d) {\n // Date.UTC remaps years 0-99 to 1900-1999\n if (y < 100 && y >= 0) {\n // preserve leap years using a full 400 year cycle, then reset\n return Date.UTC(y + 400, m, d) - MS_PER_400_YEARS;\n } else {\n return Date.UTC(y, m, d);\n }\n }\n\n function startOf(units) {\n var time, startOfDate;\n units = normalizeUnits(units);\n if (units === undefined || units === 'millisecond' || !this.isValid()) {\n return this;\n }\n\n startOfDate = this._isUTC ? utcStartOfDate : localStartOfDate;\n\n switch (units) {\n case 'year':\n time = startOfDate(this.year(), 0, 1);\n break;\n case 'quarter':\n time = startOfDate(\n this.year(),\n this.month() - (this.month() % 3),\n 1\n );\n break;\n case 'month':\n time = startOfDate(this.year(), this.month(), 1);\n break;\n case 'week':\n time = startOfDate(\n this.year(),\n this.month(),\n this.date() - this.weekday()\n );\n break;\n case 'isoWeek':\n time = startOfDate(\n this.year(),\n this.month(),\n this.date() - (this.isoWeekday() - 1)\n );\n break;\n case 'day':\n case 'date':\n time = startOfDate(this.year(), this.month(), this.date());\n break;\n case 'hour':\n time = this._d.valueOf();\n time -= mod$1(\n time + (this._isUTC ? 0 : this.utcOffset() * MS_PER_MINUTE),\n MS_PER_HOUR\n );\n break;\n case 'minute':\n time = this._d.valueOf();\n time -= mod$1(time, MS_PER_MINUTE);\n break;\n case 'second':\n time = this._d.valueOf();\n time -= mod$1(time, MS_PER_SECOND);\n break;\n }\n\n this._d.setTime(time);\n hooks.updateOffset(this, true);\n return this;\n }\n\n function endOf(units) {\n var time, startOfDate;\n units = normalizeUnits(units);\n if (units === undefined || units === 'millisecond' || !this.isValid()) {\n return this;\n }\n\n startOfDate = this._isUTC ? utcStartOfDate : localStartOfDate;\n\n switch (units) {\n case 'year':\n time = startOfDate(this.year() + 1, 0, 1) - 1;\n break;\n case 'quarter':\n time =\n startOfDate(\n this.year(),\n this.month() - (this.month() % 3) + 3,\n 1\n ) - 1;\n break;\n case 'month':\n time = startOfDate(this.year(), this.month() + 1, 1) - 1;\n break;\n case 'week':\n time =\n startOfDate(\n this.year(),\n this.month(),\n this.date() - this.weekday() + 7\n ) - 1;\n break;\n case 'isoWeek':\n time =\n startOfDate(\n this.year(),\n this.month(),\n this.date() - (this.isoWeekday() - 1) + 7\n ) - 1;\n break;\n case 'day':\n case 'date':\n time = startOfDate(this.year(), this.month(), this.date() + 1) - 1;\n break;\n case 'hour':\n time = this._d.valueOf();\n time +=\n MS_PER_HOUR -\n mod$1(\n time + (this._isUTC ? 0 : this.utcOffset() * MS_PER_MINUTE),\n MS_PER_HOUR\n ) -\n 1;\n break;\n case 'minute':\n time = this._d.valueOf();\n time += MS_PER_MINUTE - mod$1(time, MS_PER_MINUTE) - 1;\n break;\n case 'second':\n time = this._d.valueOf();\n time += MS_PER_SECOND - mod$1(time, MS_PER_SECOND) - 1;\n break;\n }\n\n this._d.setTime(time);\n hooks.updateOffset(this, true);\n return this;\n }\n\n function valueOf() {\n return this._d.valueOf() - (this._offset || 0) * 60000;\n }\n\n function unix() {\n return Math.floor(this.valueOf() / 1000);\n }\n\n function toDate() {\n return new Date(this.valueOf());\n }\n\n function toArray() {\n var m = this;\n return [\n m.year(),\n m.month(),\n m.date(),\n m.hour(),\n m.minute(),\n m.second(),\n m.millisecond(),\n ];\n }\n\n function toObject() {\n var m = this;\n return {\n years: m.year(),\n months: m.month(),\n date: m.date(),\n hours: m.hours(),\n minutes: m.minutes(),\n seconds: m.seconds(),\n milliseconds: m.milliseconds(),\n };\n }\n\n function toJSON() {\n // new Date(NaN).toJSON() === null\n return this.isValid() ? this.toISOString() : null;\n }\n\n function isValid$2() {\n return isValid(this);\n }\n\n function parsingFlags() {\n return extend({}, getParsingFlags(this));\n }\n\n function invalidAt() {\n return getParsingFlags(this).overflow;\n }\n\n function creationData() {\n return {\n input: this._i,\n format: this._f,\n locale: this._locale,\n isUTC: this._isUTC,\n strict: this._strict,\n };\n }\n\n addFormatToken('N', 0, 0, 'eraAbbr');\n addFormatToken('NN', 0, 0, 'eraAbbr');\n addFormatToken('NNN', 0, 0, 'eraAbbr');\n addFormatToken('NNNN', 0, 0, 'eraName');\n addFormatToken('NNNNN', 0, 0, 'eraNarrow');\n\n addFormatToken('y', ['y', 1], 'yo', 'eraYear');\n addFormatToken('y', ['yy', 2], 0, 'eraYear');\n addFormatToken('y', ['yyy', 3], 0, 'eraYear');\n addFormatToken('y', ['yyyy', 4], 0, 'eraYear');\n\n addRegexToken('N', matchEraAbbr);\n addRegexToken('NN', matchEraAbbr);\n addRegexToken('NNN', matchEraAbbr);\n addRegexToken('NNNN', matchEraName);\n addRegexToken('NNNNN', matchEraNarrow);\n\n addParseToken(\n ['N', 'NN', 'NNN', 'NNNN', 'NNNNN'],\n function (input, array, config, token) {\n var era = config._locale.erasParse(input, token, config._strict);\n if (era) {\n getParsingFlags(config).era = era;\n } else {\n getParsingFlags(config).invalidEra = input;\n }\n }\n );\n\n addRegexToken('y', matchUnsigned);\n addRegexToken('yy', matchUnsigned);\n addRegexToken('yyy', matchUnsigned);\n addRegexToken('yyyy', matchUnsigned);\n addRegexToken('yo', matchEraYearOrdinal);\n\n addParseToken(['y', 'yy', 'yyy', 'yyyy'], YEAR);\n addParseToken(['yo'], function (input, array, config, token) {\n var match;\n if (config._locale._eraYearOrdinalRegex) {\n match = input.match(config._locale._eraYearOrdinalRegex);\n }\n\n if (config._locale.eraYearOrdinalParse) {\n array[YEAR] = config._locale.eraYearOrdinalParse(input, match);\n } else {\n array[YEAR] = parseInt(input, 10);\n }\n });\n\n function localeEras(m, format) {\n var i,\n l,\n date,\n eras = this._eras || getLocale('en')._eras;\n for (i = 0, l = eras.length; i < l; ++i) {\n switch (typeof eras[i].since) {\n case 'string':\n // truncate time\n date = hooks(eras[i].since).startOf('day');\n eras[i].since = date.valueOf();\n break;\n }\n\n switch (typeof eras[i].until) {\n case 'undefined':\n eras[i].until = +Infinity;\n break;\n case 'string':\n // truncate time\n date = hooks(eras[i].until).startOf('day').valueOf();\n eras[i].until = date.valueOf();\n break;\n }\n }\n return eras;\n }\n\n function localeErasParse(eraName, format, strict) {\n var i,\n l,\n eras = this.eras(),\n name,\n abbr,\n narrow;\n eraName = eraName.toUpperCase();\n\n for (i = 0, l = eras.length; i < l; ++i) {\n name = eras[i].name.toUpperCase();\n abbr = eras[i].abbr.toUpperCase();\n narrow = eras[i].narrow.toUpperCase();\n\n if (strict) {\n switch (format) {\n case 'N':\n case 'NN':\n case 'NNN':\n if (abbr === eraName) {\n return eras[i];\n }\n break;\n\n case 'NNNN':\n if (name === eraName) {\n return eras[i];\n }\n break;\n\n case 'NNNNN':\n if (narrow === eraName) {\n return eras[i];\n }\n break;\n }\n } else if ([name, abbr, narrow].indexOf(eraName) >= 0) {\n return eras[i];\n }\n }\n }\n\n function localeErasConvertYear(era, year) {\n var dir = era.since <= era.until ? +1 : -1;\n if (year === undefined) {\n return hooks(era.since).year();\n } else {\n return hooks(era.since).year() + (year - era.offset) * dir;\n }\n }\n\n function getEraName() {\n var i,\n l,\n val,\n eras = this.localeData().eras();\n for (i = 0, l = eras.length; i < l; ++i) {\n // truncate time\n val = this.clone().startOf('day').valueOf();\n\n if (eras[i].since <= val && val <= eras[i].until) {\n return eras[i].name;\n }\n if (eras[i].until <= val && val <= eras[i].since) {\n return eras[i].name;\n }\n }\n\n return '';\n }\n\n function getEraNarrow() {\n var i,\n l,\n val,\n eras = this.localeData().eras();\n for (i = 0, l = eras.length; i < l; ++i) {\n // truncate time\n val = this.clone().startOf('day').valueOf();\n\n if (eras[i].since <= val && val <= eras[i].until) {\n return eras[i].narrow;\n }\n if (eras[i].until <= val && val <= eras[i].since) {\n return eras[i].narrow;\n }\n }\n\n return '';\n }\n\n function getEraAbbr() {\n var i,\n l,\n val,\n eras = this.localeData().eras();\n for (i = 0, l = eras.length; i < l; ++i) {\n // truncate time\n val = this.clone().startOf('day').valueOf();\n\n if (eras[i].since <= val && val <= eras[i].until) {\n return eras[i].abbr;\n }\n if (eras[i].until <= val && val <= eras[i].since) {\n return eras[i].abbr;\n }\n }\n\n return '';\n }\n\n function getEraYear() {\n var i,\n l,\n dir,\n val,\n eras = this.localeData().eras();\n for (i = 0, l = eras.length; i < l; ++i) {\n dir = eras[i].since <= eras[i].until ? +1 : -1;\n\n // truncate time\n val = this.clone().startOf('day').valueOf();\n\n if (\n (eras[i].since <= val && val <= eras[i].until) ||\n (eras[i].until <= val && val <= eras[i].since)\n ) {\n return (\n (this.year() - hooks(eras[i].since).year()) * dir +\n eras[i].offset\n );\n }\n }\n\n return this.year();\n }\n\n function erasNameRegex(isStrict) {\n if (!hasOwnProp(this, '_erasNameRegex')) {\n computeErasParse.call(this);\n }\n return isStrict ? this._erasNameRegex : this._erasRegex;\n }\n\n function erasAbbrRegex(isStrict) {\n if (!hasOwnProp(this, '_erasAbbrRegex')) {\n computeErasParse.call(this);\n }\n return isStrict ? this._erasAbbrRegex : this._erasRegex;\n }\n\n function erasNarrowRegex(isStrict) {\n if (!hasOwnProp(this, '_erasNarrowRegex')) {\n computeErasParse.call(this);\n }\n return isStrict ? this._erasNarrowRegex : this._erasRegex;\n }\n\n function matchEraAbbr(isStrict, locale) {\n return locale.erasAbbrRegex(isStrict);\n }\n\n function matchEraName(isStrict, locale) {\n return locale.erasNameRegex(isStrict);\n }\n\n function matchEraNarrow(isStrict, locale) {\n return locale.erasNarrowRegex(isStrict);\n }\n\n function matchEraYearOrdinal(isStrict, locale) {\n return locale._eraYearOrdinalRegex || matchUnsigned;\n }\n\n function computeErasParse() {\n var abbrPieces = [],\n namePieces = [],\n narrowPieces = [],\n mixedPieces = [],\n i,\n l,\n eras = this.eras();\n\n for (i = 0, l = eras.length; i < l; ++i) {\n namePieces.push(regexEscape(eras[i].name));\n abbrPieces.push(regexEscape(eras[i].abbr));\n narrowPieces.push(regexEscape(eras[i].narrow));\n\n mixedPieces.push(regexEscape(eras[i].name));\n mixedPieces.push(regexEscape(eras[i].abbr));\n mixedPieces.push(regexEscape(eras[i].narrow));\n }\n\n this._erasRegex = new RegExp('^(' + mixedPieces.join('|') + ')', 'i');\n this._erasNameRegex = new RegExp('^(' + namePieces.join('|') + ')', 'i');\n this._erasAbbrRegex = new RegExp('^(' + abbrPieces.join('|') + ')', 'i');\n this._erasNarrowRegex = new RegExp(\n '^(' + narrowPieces.join('|') + ')',\n 'i'\n );\n }\n\n // FORMATTING\n\n addFormatToken(0, ['gg', 2], 0, function () {\n return this.weekYear() % 100;\n });\n\n addFormatToken(0, ['GG', 2], 0, function () {\n return this.isoWeekYear() % 100;\n });\n\n function addWeekYearFormatToken(token, getter) {\n addFormatToken(0, [token, token.length], 0, getter);\n }\n\n addWeekYearFormatToken('gggg', 'weekYear');\n addWeekYearFormatToken('ggggg', 'weekYear');\n addWeekYearFormatToken('GGGG', 'isoWeekYear');\n addWeekYearFormatToken('GGGGG', 'isoWeekYear');\n\n // ALIASES\n\n addUnitAlias('weekYear', 'gg');\n addUnitAlias('isoWeekYear', 'GG');\n\n // PRIORITY\n\n addUnitPriority('weekYear', 1);\n addUnitPriority('isoWeekYear', 1);\n\n // PARSING\n\n addRegexToken('G', matchSigned);\n addRegexToken('g', matchSigned);\n addRegexToken('GG', match1to2, match2);\n addRegexToken('gg', match1to2, match2);\n addRegexToken('GGGG', match1to4, match4);\n addRegexToken('gggg', match1to4, match4);\n addRegexToken('GGGGG', match1to6, match6);\n addRegexToken('ggggg', match1to6, match6);\n\n addWeekParseToken(\n ['gggg', 'ggggg', 'GGGG', 'GGGGG'],\n function (input, week, config, token) {\n week[token.substr(0, 2)] = toInt(input);\n }\n );\n\n addWeekParseToken(['gg', 'GG'], function (input, week, config, token) {\n week[token] = hooks.parseTwoDigitYear(input);\n });\n\n // MOMENTS\n\n function getSetWeekYear(input) {\n return getSetWeekYearHelper.call(\n this,\n input,\n this.week(),\n this.weekday(),\n this.localeData()._week.dow,\n this.localeData()._week.doy\n );\n }\n\n function getSetISOWeekYear(input) {\n return getSetWeekYearHelper.call(\n this,\n input,\n this.isoWeek(),\n this.isoWeekday(),\n 1,\n 4\n );\n }\n\n function getISOWeeksInYear() {\n return weeksInYear(this.year(), 1, 4);\n }\n\n function getISOWeeksInISOWeekYear() {\n return weeksInYear(this.isoWeekYear(), 1, 4);\n }\n\n function getWeeksInYear() {\n var weekInfo = this.localeData()._week;\n return weeksInYear(this.year(), weekInfo.dow, weekInfo.doy);\n }\n\n function getWeeksInWeekYear() {\n var weekInfo = this.localeData()._week;\n return weeksInYear(this.weekYear(), weekInfo.dow, weekInfo.doy);\n }\n\n function getSetWeekYearHelper(input, week, weekday, dow, doy) {\n var weeksTarget;\n if (input == null) {\n return weekOfYear(this, dow, doy).year;\n } else {\n weeksTarget = weeksInYear(input, dow, doy);\n if (week > weeksTarget) {\n week = weeksTarget;\n }\n return setWeekAll.call(this, input, week, weekday, dow, doy);\n }\n }\n\n function setWeekAll(weekYear, week, weekday, dow, doy) {\n var dayOfYearData = dayOfYearFromWeeks(weekYear, week, weekday, dow, doy),\n date = createUTCDate(dayOfYearData.year, 0, dayOfYearData.dayOfYear);\n\n this.year(date.getUTCFullYear());\n this.month(date.getUTCMonth());\n this.date(date.getUTCDate());\n return this;\n }\n\n // FORMATTING\n\n addFormatToken('Q', 0, 'Qo', 'quarter');\n\n // ALIASES\n\n addUnitAlias('quarter', 'Q');\n\n // PRIORITY\n\n addUnitPriority('quarter', 7);\n\n // PARSING\n\n addRegexToken('Q', match1);\n addParseToken('Q', function (input, array) {\n array[MONTH] = (toInt(input) - 1) * 3;\n });\n\n // MOMENTS\n\n function getSetQuarter(input) {\n return input == null\n ? Math.ceil((this.month() + 1) / 3)\n : this.month((input - 1) * 3 + (this.month() % 3));\n }\n\n // FORMATTING\n\n addFormatToken('D', ['DD', 2], 'Do', 'date');\n\n // ALIASES\n\n addUnitAlias('date', 'D');\n\n // PRIORITY\n addUnitPriority('date', 9);\n\n // PARSING\n\n addRegexToken('D', match1to2);\n addRegexToken('DD', match1to2, match2);\n addRegexToken('Do', function (isStrict, locale) {\n // TODO: Remove \"ordinalParse\" fallback in next major release.\n return isStrict\n ? locale._dayOfMonthOrdinalParse || locale._ordinalParse\n : locale._dayOfMonthOrdinalParseLenient;\n });\n\n addParseToken(['D', 'DD'], DATE);\n addParseToken('Do', function (input, array) {\n array[DATE] = toInt(input.match(match1to2)[0]);\n });\n\n // MOMENTS\n\n var getSetDayOfMonth = makeGetSet('Date', true);\n\n // FORMATTING\n\n addFormatToken('DDD', ['DDDD', 3], 'DDDo', 'dayOfYear');\n\n // ALIASES\n\n addUnitAlias('dayOfYear', 'DDD');\n\n // PRIORITY\n addUnitPriority('dayOfYear', 4);\n\n // PARSING\n\n addRegexToken('DDD', match1to3);\n addRegexToken('DDDD', match3);\n addParseToken(['DDD', 'DDDD'], function (input, array, config) {\n config._dayOfYear = toInt(input);\n });\n\n // HELPERS\n\n // MOMENTS\n\n function getSetDayOfYear(input) {\n var dayOfYear =\n Math.round(\n (this.clone().startOf('day') - this.clone().startOf('year')) / 864e5\n ) + 1;\n return input == null ? dayOfYear : this.add(input - dayOfYear, 'd');\n }\n\n // FORMATTING\n\n addFormatToken('m', ['mm', 2], 0, 'minute');\n\n // ALIASES\n\n addUnitAlias('minute', 'm');\n\n // PRIORITY\n\n addUnitPriority('minute', 14);\n\n // PARSING\n\n addRegexToken('m', match1to2);\n addRegexToken('mm', match1to2, match2);\n addParseToken(['m', 'mm'], MINUTE);\n\n // MOMENTS\n\n var getSetMinute = makeGetSet('Minutes', false);\n\n // FORMATTING\n\n addFormatToken('s', ['ss', 2], 0, 'second');\n\n // ALIASES\n\n addUnitAlias('second', 's');\n\n // PRIORITY\n\n addUnitPriority('second', 15);\n\n // PARSING\n\n addRegexToken('s', match1to2);\n addRegexToken('ss', match1to2, match2);\n addParseToken(['s', 'ss'], SECOND);\n\n // MOMENTS\n\n var getSetSecond = makeGetSet('Seconds', false);\n\n // FORMATTING\n\n addFormatToken('S', 0, 0, function () {\n return ~~(this.millisecond() / 100);\n });\n\n addFormatToken(0, ['SS', 2], 0, function () {\n return ~~(this.millisecond() / 10);\n });\n\n addFormatToken(0, ['SSS', 3], 0, 'millisecond');\n addFormatToken(0, ['SSSS', 4], 0, function () {\n return this.millisecond() * 10;\n });\n addFormatToken(0, ['SSSSS', 5], 0, function () {\n return this.millisecond() * 100;\n });\n addFormatToken(0, ['SSSSSS', 6], 0, function () {\n return this.millisecond() * 1000;\n });\n addFormatToken(0, ['SSSSSSS', 7], 0, function () {\n return this.millisecond() * 10000;\n });\n addFormatToken(0, ['SSSSSSSS', 8], 0, function () {\n return this.millisecond() * 100000;\n });\n addFormatToken(0, ['SSSSSSSSS', 9], 0, function () {\n return this.millisecond() * 1000000;\n });\n\n // ALIASES\n\n addUnitAlias('millisecond', 'ms');\n\n // PRIORITY\n\n addUnitPriority('millisecond', 16);\n\n // PARSING\n\n addRegexToken('S', match1to3, match1);\n addRegexToken('SS', match1to3, match2);\n addRegexToken('SSS', match1to3, match3);\n\n var token, getSetMillisecond;\n for (token = 'SSSS'; token.length <= 9; token += 'S') {\n addRegexToken(token, matchUnsigned);\n }\n\n function parseMs(input, array) {\n array[MILLISECOND] = toInt(('0.' + input) * 1000);\n }\n\n for (token = 'S'; token.length <= 9; token += 'S') {\n addParseToken(token, parseMs);\n }\n\n getSetMillisecond = makeGetSet('Milliseconds', false);\n\n // FORMATTING\n\n addFormatToken('z', 0, 0, 'zoneAbbr');\n addFormatToken('zz', 0, 0, 'zoneName');\n\n // MOMENTS\n\n function getZoneAbbr() {\n return this._isUTC ? 'UTC' : '';\n }\n\n function getZoneName() {\n return this._isUTC ? 'Coordinated Universal Time' : '';\n }\n\n var proto = Moment.prototype;\n\n proto.add = add;\n proto.calendar = calendar$1;\n proto.clone = clone;\n proto.diff = diff;\n proto.endOf = endOf;\n proto.format = format;\n proto.from = from;\n proto.fromNow = fromNow;\n proto.to = to;\n proto.toNow = toNow;\n proto.get = stringGet;\n proto.invalidAt = invalidAt;\n proto.isAfter = isAfter;\n proto.isBefore = isBefore;\n proto.isBetween = isBetween;\n proto.isSame = isSame;\n proto.isSameOrAfter = isSameOrAfter;\n proto.isSameOrBefore = isSameOrBefore;\n proto.isValid = isValid$2;\n proto.lang = lang;\n proto.locale = locale;\n proto.localeData = localeData;\n proto.max = prototypeMax;\n proto.min = prototypeMin;\n proto.parsingFlags = parsingFlags;\n proto.set = stringSet;\n proto.startOf = startOf;\n proto.subtract = subtract;\n proto.toArray = toArray;\n proto.toObject = toObject;\n proto.toDate = toDate;\n proto.toISOString = toISOString;\n proto.inspect = inspect;\n if (typeof Symbol !== 'undefined' && Symbol.for != null) {\n proto[Symbol.for('nodejs.util.inspect.custom')] = function () {\n return 'Moment<' + this.format() + '>';\n };\n }\n proto.toJSON = toJSON;\n proto.toString = toString;\n proto.unix = unix;\n proto.valueOf = valueOf;\n proto.creationData = creationData;\n proto.eraName = getEraName;\n proto.eraNarrow = getEraNarrow;\n proto.eraAbbr = getEraAbbr;\n proto.eraYear = getEraYear;\n proto.year = getSetYear;\n proto.isLeapYear = getIsLeapYear;\n proto.weekYear = getSetWeekYear;\n proto.isoWeekYear = getSetISOWeekYear;\n proto.quarter = proto.quarters = getSetQuarter;\n proto.month = getSetMonth;\n proto.daysInMonth = getDaysInMonth;\n proto.week = proto.weeks = getSetWeek;\n proto.isoWeek = proto.isoWeeks = getSetISOWeek;\n proto.weeksInYear = getWeeksInYear;\n proto.weeksInWeekYear = getWeeksInWeekYear;\n proto.isoWeeksInYear = getISOWeeksInYear;\n proto.isoWeeksInISOWeekYear = getISOWeeksInISOWeekYear;\n proto.date = getSetDayOfMonth;\n proto.day = proto.days = getSetDayOfWeek;\n proto.weekday = getSetLocaleDayOfWeek;\n proto.isoWeekday = getSetISODayOfWeek;\n proto.dayOfYear = getSetDayOfYear;\n proto.hour = proto.hours = getSetHour;\n proto.minute = proto.minutes = getSetMinute;\n proto.second = proto.seconds = getSetSecond;\n proto.millisecond = proto.milliseconds = getSetMillisecond;\n proto.utcOffset = getSetOffset;\n proto.utc = setOffsetToUTC;\n proto.local = setOffsetToLocal;\n proto.parseZone = setOffsetToParsedOffset;\n proto.hasAlignedHourOffset = hasAlignedHourOffset;\n proto.isDST = isDaylightSavingTime;\n proto.isLocal = isLocal;\n proto.isUtcOffset = isUtcOffset;\n proto.isUtc = isUtc;\n proto.isUTC = isUtc;\n proto.zoneAbbr = getZoneAbbr;\n proto.zoneName = getZoneName;\n proto.dates = deprecate(\n 'dates accessor is deprecated. Use date instead.',\n getSetDayOfMonth\n );\n proto.months = deprecate(\n 'months accessor is deprecated. Use month instead',\n getSetMonth\n );\n proto.years = deprecate(\n 'years accessor is deprecated. Use year instead',\n getSetYear\n );\n proto.zone = deprecate(\n 'moment().zone is deprecated, use moment().utcOffset instead. http://momentjs.com/guides/#/warnings/zone/',\n getSetZone\n );\n proto.isDSTShifted = deprecate(\n 'isDSTShifted is deprecated. See http://momentjs.com/guides/#/warnings/dst-shifted/ for more information',\n isDaylightSavingTimeShifted\n );\n\n function createUnix(input) {\n return createLocal(input * 1000);\n }\n\n function createInZone() {\n return createLocal.apply(null, arguments).parseZone();\n }\n\n function preParsePostFormat(string) {\n return string;\n }\n\n var proto$1 = Locale.prototype;\n\n proto$1.calendar = calendar;\n proto$1.longDateFormat = longDateFormat;\n proto$1.invalidDate = invalidDate;\n proto$1.ordinal = ordinal;\n proto$1.preparse = preParsePostFormat;\n proto$1.postformat = preParsePostFormat;\n proto$1.relativeTime = relativeTime;\n proto$1.pastFuture = pastFuture;\n proto$1.set = set;\n proto$1.eras = localeEras;\n proto$1.erasParse = localeErasParse;\n proto$1.erasConvertYear = localeErasConvertYear;\n proto$1.erasAbbrRegex = erasAbbrRegex;\n proto$1.erasNameRegex = erasNameRegex;\n proto$1.erasNarrowRegex = erasNarrowRegex;\n\n proto$1.months = localeMonths;\n proto$1.monthsShort = localeMonthsShort;\n proto$1.monthsParse = localeMonthsParse;\n proto$1.monthsRegex = monthsRegex;\n proto$1.monthsShortRegex = monthsShortRegex;\n proto$1.week = localeWeek;\n proto$1.firstDayOfYear = localeFirstDayOfYear;\n proto$1.firstDayOfWeek = localeFirstDayOfWeek;\n\n proto$1.weekdays = localeWeekdays;\n proto$1.weekdaysMin = localeWeekdaysMin;\n proto$1.weekdaysShort = localeWeekdaysShort;\n proto$1.weekdaysParse = localeWeekdaysParse;\n\n proto$1.weekdaysRegex = weekdaysRegex;\n proto$1.weekdaysShortRegex = weekdaysShortRegex;\n proto$1.weekdaysMinRegex = weekdaysMinRegex;\n\n proto$1.isPM = localeIsPM;\n proto$1.meridiem = localeMeridiem;\n\n function get$1(format, index, field, setter) {\n var locale = getLocale(),\n utc = createUTC().set(setter, index);\n return locale[field](utc, format);\n }\n\n function listMonthsImpl(format, index, field) {\n if (isNumber(format)) {\n index = format;\n format = undefined;\n }\n\n format = format || '';\n\n if (index != null) {\n return get$1(format, index, field, 'month');\n }\n\n var i,\n out = [];\n for (i = 0; i < 12; i++) {\n out[i] = get$1(format, i, field, 'month');\n }\n return out;\n }\n\n // ()\n // (5)\n // (fmt, 5)\n // (fmt)\n // (true)\n // (true, 5)\n // (true, fmt, 5)\n // (true, fmt)\n function listWeekdaysImpl(localeSorted, format, index, field) {\n if (typeof localeSorted === 'boolean') {\n if (isNumber(format)) {\n index = format;\n format = undefined;\n }\n\n format = format || '';\n } else {\n format = localeSorted;\n index = format;\n localeSorted = false;\n\n if (isNumber(format)) {\n index = format;\n format = undefined;\n }\n\n format = format || '';\n }\n\n var locale = getLocale(),\n shift = localeSorted ? locale._week.dow : 0,\n i,\n out = [];\n\n if (index != null) {\n return get$1(format, (index + shift) % 7, field, 'day');\n }\n\n for (i = 0; i < 7; i++) {\n out[i] = get$1(format, (i + shift) % 7, field, 'day');\n }\n return out;\n }\n\n function listMonths(format, index) {\n return listMonthsImpl(format, index, 'months');\n }\n\n function listMonthsShort(format, index) {\n return listMonthsImpl(format, index, 'monthsShort');\n }\n\n function listWeekdays(localeSorted, format, index) {\n return listWeekdaysImpl(localeSorted, format, index, 'weekdays');\n }\n\n function listWeekdaysShort(localeSorted, format, index) {\n return listWeekdaysImpl(localeSorted, format, index, 'weekdaysShort');\n }\n\n function listWeekdaysMin(localeSorted, format, index) {\n return listWeekdaysImpl(localeSorted, format, index, 'weekdaysMin');\n }\n\n getSetGlobalLocale('en', {\n eras: [\n {\n since: '0001-01-01',\n until: +Infinity,\n offset: 1,\n name: 'Anno Domini',\n narrow: 'AD',\n abbr: 'AD',\n },\n {\n since: '0000-12-31',\n until: -Infinity,\n offset: 1,\n name: 'Before Christ',\n narrow: 'BC',\n abbr: 'BC',\n },\n ],\n dayOfMonthOrdinalParse: /\\d{1,2}(th|st|nd|rd)/,\n ordinal: function (number) {\n var b = number % 10,\n output =\n toInt((number % 100) / 10) === 1\n ? 'th'\n : b === 1\n ? 'st'\n : b === 2\n ? 'nd'\n : b === 3\n ? 'rd'\n : 'th';\n return number + output;\n },\n });\n\n // Side effect imports\n\n hooks.lang = deprecate(\n 'moment.lang is deprecated. Use moment.locale instead.',\n getSetGlobalLocale\n );\n hooks.langData = deprecate(\n 'moment.langData is deprecated. Use moment.localeData instead.',\n getLocale\n );\n\n var mathAbs = Math.abs;\n\n function abs() {\n var data = this._data;\n\n this._milliseconds = mathAbs(this._milliseconds);\n this._days = mathAbs(this._days);\n this._months = mathAbs(this._months);\n\n data.milliseconds = mathAbs(data.milliseconds);\n data.seconds = mathAbs(data.seconds);\n data.minutes = mathAbs(data.minutes);\n data.hours = mathAbs(data.hours);\n data.months = mathAbs(data.months);\n data.years = mathAbs(data.years);\n\n return this;\n }\n\n function addSubtract$1(duration, input, value, direction) {\n var other = createDuration(input, value);\n\n duration._milliseconds += direction * other._milliseconds;\n duration._days += direction * other._days;\n duration._months += direction * other._months;\n\n return duration._bubble();\n }\n\n // supports only 2.0-style add(1, 's') or add(duration)\n function add$1(input, value) {\n return addSubtract$1(this, input, value, 1);\n }\n\n // supports only 2.0-style subtract(1, 's') or subtract(duration)\n function subtract$1(input, value) {\n return addSubtract$1(this, input, value, -1);\n }\n\n function absCeil(number) {\n if (number < 0) {\n return Math.floor(number);\n } else {\n return Math.ceil(number);\n }\n }\n\n function bubble() {\n var milliseconds = this._milliseconds,\n days = this._days,\n months = this._months,\n data = this._data,\n seconds,\n minutes,\n hours,\n years,\n monthsFromDays;\n\n // if we have a mix of positive and negative values, bubble down first\n // check: https://github.com/moment/moment/issues/2166\n if (\n !(\n (milliseconds >= 0 && days >= 0 && months >= 0) ||\n (milliseconds <= 0 && days <= 0 && months <= 0)\n )\n ) {\n milliseconds += absCeil(monthsToDays(months) + days) * 864e5;\n days = 0;\n months = 0;\n }\n\n // The following code bubbles up values, see the tests for\n // examples of what that means.\n data.milliseconds = milliseconds % 1000;\n\n seconds = absFloor(milliseconds / 1000);\n data.seconds = seconds % 60;\n\n minutes = absFloor(seconds / 60);\n data.minutes = minutes % 60;\n\n hours = absFloor(minutes / 60);\n data.hours = hours % 24;\n\n days += absFloor(hours / 24);\n\n // convert days to months\n monthsFromDays = absFloor(daysToMonths(days));\n months += monthsFromDays;\n days -= absCeil(monthsToDays(monthsFromDays));\n\n // 12 months -> 1 year\n years = absFloor(months / 12);\n months %= 12;\n\n data.days = days;\n data.months = months;\n data.years = years;\n\n return this;\n }\n\n function daysToMonths(days) {\n // 400 years have 146097 days (taking into account leap year rules)\n // 400 years have 12 months === 4800\n return (days * 4800) / 146097;\n }\n\n function monthsToDays(months) {\n // the reverse of daysToMonths\n return (months * 146097) / 4800;\n }\n\n function as(units) {\n if (!this.isValid()) {\n return NaN;\n }\n var days,\n months,\n milliseconds = this._milliseconds;\n\n units = normalizeUnits(units);\n\n if (units === 'month' || units === 'quarter' || units === 'year') {\n days = this._days + milliseconds / 864e5;\n months = this._months + daysToMonths(days);\n switch (units) {\n case 'month':\n return months;\n case 'quarter':\n return months / 3;\n case 'year':\n return months / 12;\n }\n } else {\n // handle milliseconds separately because of floating point math errors (issue #1867)\n days = this._days + Math.round(monthsToDays(this._months));\n switch (units) {\n case 'week':\n return days / 7 + milliseconds / 6048e5;\n case 'day':\n return days + milliseconds / 864e5;\n case 'hour':\n return days * 24 + milliseconds / 36e5;\n case 'minute':\n return days * 1440 + milliseconds / 6e4;\n case 'second':\n return days * 86400 + milliseconds / 1000;\n // Math.floor prevents floating point math errors here\n case 'millisecond':\n return Math.floor(days * 864e5) + milliseconds;\n default:\n throw new Error('Unknown unit ' + units);\n }\n }\n }\n\n // TODO: Use this.as('ms')?\n function valueOf$1() {\n if (!this.isValid()) {\n return NaN;\n }\n return (\n this._milliseconds +\n this._days * 864e5 +\n (this._months % 12) * 2592e6 +\n toInt(this._months / 12) * 31536e6\n );\n }\n\n function makeAs(alias) {\n return function () {\n return this.as(alias);\n };\n }\n\n var asMilliseconds = makeAs('ms'),\n asSeconds = makeAs('s'),\n asMinutes = makeAs('m'),\n asHours = makeAs('h'),\n asDays = makeAs('d'),\n asWeeks = makeAs('w'),\n asMonths = makeAs('M'),\n asQuarters = makeAs('Q'),\n asYears = makeAs('y');\n\n function clone$1() {\n return createDuration(this);\n }\n\n function get$2(units) {\n units = normalizeUnits(units);\n return this.isValid() ? this[units + 's']() : NaN;\n }\n\n function makeGetter(name) {\n return function () {\n return this.isValid() ? this._data[name] : NaN;\n };\n }\n\n var milliseconds = makeGetter('milliseconds'),\n seconds = makeGetter('seconds'),\n minutes = makeGetter('minutes'),\n hours = makeGetter('hours'),\n days = makeGetter('days'),\n months = makeGetter('months'),\n years = makeGetter('years');\n\n function weeks() {\n return absFloor(this.days() / 7);\n }\n\n var round = Math.round,\n thresholds = {\n ss: 44, // a few seconds to seconds\n s: 45, // seconds to minute\n m: 45, // minutes to hour\n h: 22, // hours to day\n d: 26, // days to month/week\n w: null, // weeks to month\n M: 11, // months to year\n };\n\n // helper function for moment.fn.from, moment.fn.fromNow, and moment.duration.fn.humanize\n function substituteTimeAgo(string, number, withoutSuffix, isFuture, locale) {\n return locale.relativeTime(number || 1, !!withoutSuffix, string, isFuture);\n }\n\n function relativeTime$1(posNegDuration, withoutSuffix, thresholds, locale) {\n var duration = createDuration(posNegDuration).abs(),\n seconds = round(duration.as('s')),\n minutes = round(duration.as('m')),\n hours = round(duration.as('h')),\n days = round(duration.as('d')),\n months = round(duration.as('M')),\n weeks = round(duration.as('w')),\n years = round(duration.as('y')),\n a =\n (seconds <= thresholds.ss && ['s', seconds]) ||\n (seconds < thresholds.s && ['ss', seconds]) ||\n (minutes <= 1 && ['m']) ||\n (minutes < thresholds.m && ['mm', minutes]) ||\n (hours <= 1 && ['h']) ||\n (hours < thresholds.h && ['hh', hours]) ||\n (days <= 1 && ['d']) ||\n (days < thresholds.d && ['dd', days]);\n\n if (thresholds.w != null) {\n a =\n a ||\n (weeks <= 1 && ['w']) ||\n (weeks < thresholds.w && ['ww', weeks]);\n }\n a = a ||\n (months <= 1 && ['M']) ||\n (months < thresholds.M && ['MM', months]) ||\n (years <= 1 && ['y']) || ['yy', years];\n\n a[2] = withoutSuffix;\n a[3] = +posNegDuration > 0;\n a[4] = locale;\n return substituteTimeAgo.apply(null, a);\n }\n\n // This function allows you to set the rounding function for relative time strings\n function getSetRelativeTimeRounding(roundingFunction) {\n if (roundingFunction === undefined) {\n return round;\n }\n if (typeof roundingFunction === 'function') {\n round = roundingFunction;\n return true;\n }\n return false;\n }\n\n // This function allows you to set a threshold for relative time strings\n function getSetRelativeTimeThreshold(threshold, limit) {\n if (thresholds[threshold] === undefined) {\n return false;\n }\n if (limit === undefined) {\n return thresholds[threshold];\n }\n thresholds[threshold] = limit;\n if (threshold === 's') {\n thresholds.ss = limit - 1;\n }\n return true;\n }\n\n function humanize(argWithSuffix, argThresholds) {\n if (!this.isValid()) {\n return this.localeData().invalidDate();\n }\n\n var withSuffix = false,\n th = thresholds,\n locale,\n output;\n\n if (typeof argWithSuffix === 'object') {\n argThresholds = argWithSuffix;\n argWithSuffix = false;\n }\n if (typeof argWithSuffix === 'boolean') {\n withSuffix = argWithSuffix;\n }\n if (typeof argThresholds === 'object') {\n th = Object.assign({}, thresholds, argThresholds);\n if (argThresholds.s != null && argThresholds.ss == null) {\n th.ss = argThresholds.s - 1;\n }\n }\n\n locale = this.localeData();\n output = relativeTime$1(this, !withSuffix, th, locale);\n\n if (withSuffix) {\n output = locale.pastFuture(+this, output);\n }\n\n return locale.postformat(output);\n }\n\n var abs$1 = Math.abs;\n\n function sign(x) {\n return (x > 0) - (x < 0) || +x;\n }\n\n function toISOString$1() {\n // for ISO strings we do not use the normal bubbling rules:\n // * milliseconds bubble up until they become hours\n // * days do not bubble at all\n // * months bubble up until they become years\n // This is because there is no context-free conversion between hours and days\n // (think of clock changes)\n // and also not between days and months (28-31 days per month)\n if (!this.isValid()) {\n return this.localeData().invalidDate();\n }\n\n var seconds = abs$1(this._milliseconds) / 1000,\n days = abs$1(this._days),\n months = abs$1(this._months),\n minutes,\n hours,\n years,\n s,\n total = this.asSeconds(),\n totalSign,\n ymSign,\n daysSign,\n hmsSign;\n\n if (!total) {\n // this is the same as C#'s (Noda) and python (isodate)...\n // but not other JS (goog.date)\n return 'P0D';\n }\n\n // 3600 seconds -> 60 minutes -> 1 hour\n minutes = absFloor(seconds / 60);\n hours = absFloor(minutes / 60);\n seconds %= 60;\n minutes %= 60;\n\n // 12 months -> 1 year\n years = absFloor(months / 12);\n months %= 12;\n\n // inspired by https://github.com/dordille/moment-isoduration/blob/master/moment.isoduration.js\n s = seconds ? seconds.toFixed(3).replace(/\\.?0+$/, '') : '';\n\n totalSign = total < 0 ? '-' : '';\n ymSign = sign(this._months) !== sign(total) ? '-' : '';\n daysSign = sign(this._days) !== sign(total) ? '-' : '';\n hmsSign = sign(this._milliseconds) !== sign(total) ? '-' : '';\n\n return (\n totalSign +\n 'P' +\n (years ? ymSign + years + 'Y' : '') +\n (months ? ymSign + months + 'M' : '') +\n (days ? daysSign + days + 'D' : '') +\n (hours || minutes || seconds ? 'T' : '') +\n (hours ? hmsSign + hours + 'H' : '') +\n (minutes ? hmsSign + minutes + 'M' : '') +\n (seconds ? hmsSign + s + 'S' : '')\n );\n }\n\n var proto$2 = Duration.prototype;\n\n proto$2.isValid = isValid$1;\n proto$2.abs = abs;\n proto$2.add = add$1;\n proto$2.subtract = subtract$1;\n proto$2.as = as;\n proto$2.asMilliseconds = asMilliseconds;\n proto$2.asSeconds = asSeconds;\n proto$2.asMinutes = asMinutes;\n proto$2.asHours = asHours;\n proto$2.asDays = asDays;\n proto$2.asWeeks = asWeeks;\n proto$2.asMonths = asMonths;\n proto$2.asQuarters = asQuarters;\n proto$2.asYears = asYears;\n proto$2.valueOf = valueOf$1;\n proto$2._bubble = bubble;\n proto$2.clone = clone$1;\n proto$2.get = get$2;\n proto$2.milliseconds = milliseconds;\n proto$2.seconds = seconds;\n proto$2.minutes = minutes;\n proto$2.hours = hours;\n proto$2.days = days;\n proto$2.weeks = weeks;\n proto$2.months = months;\n proto$2.years = years;\n proto$2.humanize = humanize;\n proto$2.toISOString = toISOString$1;\n proto$2.toString = toISOString$1;\n proto$2.toJSON = toISOString$1;\n proto$2.locale = locale;\n proto$2.localeData = localeData;\n\n proto$2.toIsoString = deprecate(\n 'toIsoString() is deprecated. Please use toISOString() instead (notice the capitals)',\n toISOString$1\n );\n proto$2.lang = lang;\n\n // FORMATTING\n\n addFormatToken('X', 0, 0, 'unix');\n addFormatToken('x', 0, 0, 'valueOf');\n\n // PARSING\n\n addRegexToken('x', matchSigned);\n addRegexToken('X', matchTimestamp);\n addParseToken('X', function (input, array, config) {\n config._d = new Date(parseFloat(input) * 1000);\n });\n addParseToken('x', function (input, array, config) {\n config._d = new Date(toInt(input));\n });\n\n //! moment.js\n\n hooks.version = '2.29.4';\n\n setHookCallback(createLocal);\n\n hooks.fn = proto;\n hooks.min = min;\n hooks.max = max;\n hooks.now = now;\n hooks.utc = createUTC;\n hooks.unix = createUnix;\n hooks.months = listMonths;\n hooks.isDate = isDate;\n hooks.locale = getSetGlobalLocale;\n hooks.invalid = createInvalid;\n hooks.duration = createDuration;\n hooks.isMoment = isMoment;\n hooks.weekdays = listWeekdays;\n hooks.parseZone = createInZone;\n hooks.localeData = getLocale;\n hooks.isDuration = isDuration;\n hooks.monthsShort = listMonthsShort;\n hooks.weekdaysMin = listWeekdaysMin;\n hooks.defineLocale = defineLocale;\n hooks.updateLocale = updateLocale;\n hooks.locales = listLocales;\n hooks.weekdaysShort = listWeekdaysShort;\n hooks.normalizeUnits = normalizeUnits;\n hooks.relativeTimeRounding = getSetRelativeTimeRounding;\n hooks.relativeTimeThreshold = getSetRelativeTimeThreshold;\n hooks.calendarFormat = getCalendarFormat;\n hooks.prototype = proto;\n\n // currently HTML5 input type only supports 24-hour formats\n hooks.HTML5_FMT = {\n DATETIME_LOCAL: 'YYYY-MM-DDTHH:mm', // <input type=\"datetime-local\" />\n DATETIME_LOCAL_SECONDS: 'YYYY-MM-DDTHH:mm:ss', // <input type=\"datetime-local\" step=\"1\" />\n DATETIME_LOCAL_MS: 'YYYY-MM-DDTHH:mm:ss.SSS', // <input type=\"datetime-local\" step=\"0.001\" />\n DATE: 'YYYY-MM-DD', // <input type=\"date\" />\n TIME: 'HH:mm', // <input type=\"time\" />\n TIME_SECONDS: 'HH:mm:ss', // <input type=\"time\" step=\"1\" />\n TIME_MS: 'HH:mm:ss.SSS', // <input type=\"time\" step=\"0.001\" />\n WEEK: 'GGGG-[W]WW', // <input type=\"week\" />\n MONTH: 'YYYY-MM', // <input type=\"month\" />\n };\n\n return hooks;\n\n})));\n","export const BUTTON_STYLE_BASE_OVERRIDES = {\n fontSize: \"16px\",\n fontWeight: 400,\n lineHeight: \"165%\",\n}\n","import datetimeFmt from \"@planningcenter/datetime-fmt\"\nimport moment from \"moment\"\n\nimport colors from \"../../../../colors\"\nimport { BUTTON_STYLE_BASE_OVERRIDES } from \"../constants\"\n\nexport const noop = () => {}\n\n// until we can use Array.prototype.findLast\nexport const findLast = <T>(\n xs: T[],\n p: (x: T, i: number, xs: T[]) => boolean\n): T | undefined => {\n for (let i = xs.length - 1; i >= 0; i--) {\n if (p(xs[i], i, xs)) return xs[i]\n }\n\n return undefined\n}\n\nexport const getPrimaryButtonStyleOverrides = ({\n disabled,\n spinner,\n}: { disabled?: boolean; spinner?: boolean } = {}) => {\n const base = {\n ...BUTTON_STYLE_BASE_OVERRIDES,\n backgroundColor: colors.interaction55,\n color: spinner ? \"transparent\" : \"surface\",\n spinner: spinner ? { color: colors.interaction55 } : undefined,\n }\n\n if (disabled)\n return {\n ...base,\n backgroundColor: colors.lightNeutral81,\n spinner: spinner ? { color: colors.lightNeutral81 } : undefined,\n }\n\n return {\n ...base,\n active: { backgroundColor: colors.interaction45 },\n focus: { backgroundColor: colors.interaction55 },\n hover: { backgroundColor: colors.interaction50 },\n }\n}\n\nexport const formatDate = (date: Date): string => {\n const now = moment()\n\n const isToday = now.isSame(date, \"day\")\n const isThisWeek = now.isSame(date, \"week\")\n const isThisYear = now.isSame(date, \"year\")\n\n if (isToday) return datetimeFmt.time(date)\n if (isThisWeek) return datetimeFmt.date(date, { style: \"relative\" })\n if (isThisYear) return datetimeFmt.date(date, { style: \"abbreviated\" })\n\n return datetimeFmt.date(date, { style: \"short\", year: true })\n}\n","import React from \"react\"\nimport { useChatContext } from \"stream-chat-react\"\nimport type { Channel, FormatMessageResponse } from \"stream-chat\"\n\nimport { findLast } from \"../utils\"\n\nconst MARK_READ = \"notification.mark_read\"\nconst MARK_UNREAD = \"notification.mark_unread\"\n\nconst EVENTS = [MARK_READ, MARK_UNREAD]\n\ninterface ChannelUnread {\n isUnread: boolean\n isUnreadable: boolean\n markRead: () => void\n markUnread: () => void\n unreadCount: number\n}\n\nexport const useChannelUnread = (\n channel: Channel,\n unread: number\n): ChannelUnread => {\n const { client } = useChatContext()\n\n const [unreadCount, setUnreadCount] = React.useState(unread)\n\n React.useEffect(() => {\n setUnreadCount(unread)\n }, [unread])\n\n React.useEffect(() => {\n const updateUnread = (event) => {\n if (event.cid !== channel.cid) return\n if (event.user?.id !== client.user?.id) return\n\n const count = event.type === MARK_READ ? 0 : channel.countUnread()\n\n setUnreadCount(count)\n }\n\n EVENTS.forEach((event) => client.on(event, updateUnread))\n\n return () => EVENTS.forEach((event) => client.off(event, updateUnread))\n }, [])\n\n const lastReadMessage = React.useMemo(\n () =>\n findLast(\n channel.state.latestMessages,\n (msg: FormatMessageResponse) => msg.user?.id !== client.userID\n ),\n [unreadCount]\n )\n\n const isUnreadable = Boolean(lastReadMessage?.id)\n\n return {\n isUnread: Boolean(unreadCount),\n isUnreadable,\n markRead: () => channel.markRead(),\n markUnread: () =>\n isUnreadable && channel.markUnread({ message_id: lastReadMessage.id }),\n unreadCount,\n }\n}\n","import { useContext } from \"react\"\n\nimport type { ChatContextValue } from \"../chat_context\"\nimport { ChatContext } from \"../chat_context\"\n\nexport const useChat = (): ChatContextValue => {\n const context = useContext(ChatContext)\n if (!context) {\n throw new Error(\"useChat must be used within a ChatProvider\")\n }\n return context\n}\n","import { useContext } from \"react\"\n\nimport { ChatApiContext } from \"../chat_api_context\"\n\nexport const useChatApi = () => useContext(ChatApiContext)\n","import pcoUrl, { Environment } from \"@planningcenter/url\"\nimport React from \"react\"\n\nimport apiRequest, { railsCsrfFetch } from \"../../../../api_request\"\nimport { useChatApi } from \"./use_chat_api\"\n\nexport type ConnectedPerson = {\n id: string,\n organization_id: string\n organization_name: string\n unread_count: number\n}\n\ntype UseChatConnectedPeopleValue = {\n loading: boolean\n people: ConnectedPerson[] | null,\n switchPerson: Function\n}\n\nconst LOADING = null\n\nexport const useChatConnectedPeople = (): UseChatConnectedPeopleValue => {\n const [people, setPeople] = React.useState<ConnectedPerson[] | null>(LOADING);\n const loading = people === LOADING\n\n const api = useChatApi()\n\n React.useEffect(() => {\n api.chat\n .get(\"me/connected_people\")\n .then(people => setPeople(people))\n }, [])\n\n return { loading, people, switchPerson }\n}\n\nexport const switchPerson = (toId: string, returnPath: string, env: Environment) => {\n apiRequest(\n railsCsrfFetch,\n `${pcoUrl(env)(\"api\")}/login/v2/me/switch_connected_person`,\n {\n data: {\n data: {\n attributes: {\n id: toId,\n return_path: returnPath,\n },\n },\n },\n method: \"POST\",\n }\n ).then(({ json }) => {\n window.location = json.meta.redirect_to\n })\n}\n","import React, { useCallback } from \"react\"\n\nexport interface ServicesFilterValues {\n plan_id: number | null\n teams: {\n service_type_id: number\n team_id: number\n }[]\n}\nexport const SERVICES_INITIAL_VALUES: ServicesFilterValues = {\n plan_id: null,\n teams: [],\n}\n\nexport interface GroupsFilterValues {\n group: {\n id: number\n name: string\n }\n}\n\nexport interface FilterValues {\n Groups?: GroupsFilterValues\n Services: ServicesFilterValues\n // add apps as needed\n}\n\nexport type FilterUpdateFn<T> = (prevState: T) => T\n\nexport type SetFilterValuesFn = <K extends keyof FilterValues>(\n args: SetFilterValuesArgs<K>\n) => void\n\nexport type SetFilterValuesArgs<K extends keyof FilterValues> = {\n appName: K\n values: FilterValues[K] | FilterUpdateFn<FilterValues[K]>\n}\n\n// TODO: consider using the AppName type out of channel_metas.tsx when #331 is merged\n// https://github.com/planningcenter/topbar/pull/331/files\nconst INITIAL_VALUES = { Services: SERVICES_INITIAL_VALUES }\n\nexport const useChatFilter = () => {\n const [filterValues, _setFilterValuesInner] =\n React.useState<FilterValues>(INITIAL_VALUES)\n\n const setFilterValues: SetFilterValuesFn = useCallback(\n ({ appName, values }) => {\n _setFilterValuesInner((prevState) => ({\n ...prevState,\n [appName]:\n typeof values === \"function\" ? values(prevState[appName]) : values,\n }))\n },\n []\n )\n\n return { filterValues, setFilterValues }\n}\n","import pcURL from \"@planningcenter/url\"\nimport React from \"react\"\n\nimport apiRequest, {\n defaultFetch,\n railsCsrfFetch,\n} from \"../../../../api_request\"\nimport {\n useJoltChannelSubscription,\n useJoltEffect,\n} from \"../../../../hooks/jolt\"\nimport { noop } from \"../utils\"\n\ntype Token = string\n\ntype ChatStreamUser = {\n api_key: string\n tokenProvider(): Promise<Token>\n unread: boolean\n}\n\nexport const useChatStreamUser = ({\n enableJoltLogging,\n env,\n userId,\n isEnabled,\n joltPromise,\n onConnectionFailure = noop,\n}) => {\n const [streamUser, setStreamUser] = React.useState<ChatStreamUser | null>(null)\n\n const chatJoltChannel = useJoltChannelSubscription({\n channelName: `chat.people.${userId}`,\n enableJoltLogging,\n enabled: isEnabled,\n env,\n fetchSubscribeToken: async (cid) => {\n const subscribeUrl = `${pcURL(env)(\"api\")}/chat/v2/me/jolt_subscribe`\n return apiRequest(railsCsrfFetch, subscribeUrl, {\n data: { data: { attributes: { cid } } },\n method: \"POST\",\n }).then(({ json }) => json.data.id)\n },\n joltPromise,\n })\n\n const fetchStreamUser = async ({ fields }) => {\n const url = `${pcURL(env)(\"api\")}/chat/v2/me/stream_user`\n const query = `?context=linked_accounts&fields[StreamUser]=${fields.join(',')}`\n const { json } = await apiRequest(defaultFetch, `${url}${query}`)\n\n return json.data\n }\n\n const setupStreamUser = () =>\n fetchStreamUser({ fields: ['api_key', 'token', 'unread'] })\n .then(({ id, attributes }) => {\n const { token, ...attrs } = attributes\n\n if (token) {\n setStreamUser((prev) => ({\n id,\n ...prev,\n ...attrs,\n tokenProvider: async (): Promise<Token> => {\n const { attributes } = await fetchStreamUser({ fields: ['token'] })\n\n return attributes.token\n },\n }))\n } else {\n onConnectionFailure()\n setStreamUser(null)\n }\n })\n .catch(noop)\n\n useJoltEffect(\n isEnabled ? chatJoltChannel : undefined,\n \"STREAM_USER_UPDATED\",\n setupStreamUser\n )\n\n React.useEffect(() => {\n if (!isEnabled) return\n\n setupStreamUser()\n }, [isEnabled])\n\n return streamUser\n}\n","import { Heading } from \"@planningcenter/tapestry-react\"\nimport React from \"react\"\n\nexport const SUBHEADING_STYLES = {\n fontSize: \"16px\",\n fontWeight: 600,\n lineHeight: \"165%\",\n}\n\nexport const Subheading = ({ children }) => (\n <Heading level={2} {...SUBHEADING_STYLES}>\n {children}\n </Heading>\n)\n","import { StackView } from \"@planningcenter/tapestry-react\"\nimport React from \"react\"\n\nimport { Subheading } from \"../ui/subheading\"\n\nexport const Section = ({ children, title }) => {\n return (\n <StackView spacing={1}>\n <Subheading>{title}</Subheading>\n <>{children}</>\n </StackView>\n )\n}\n","import { Badge, WrapView } from \"@planningcenter/tapestry-react\"\nimport React from \"react\"\n\nimport type {\n AppChatGroups,\n AppsChatGroups,\n ChatGroup,\n} from \"./hooks/use_chat_groups\"\nimport { Section } from \"./section\"\n\nconst AppGroups = {\n Services: ({ groups }: { groups: AppChatGroups }) => {\n const teams = [\"Team\", \"PlanTeam\"].reduce(\n (acc, type) => (groups[type] ? [...acc, ...groups[type]] : acc),\n [] as ChatGroup[]\n )\n\n return (\n <Section title=\"Teams\">\n <WrapView spacing={1}>\n {teams.map((team) => (\n <Badge key={team.source_identifier} size=\"sm\">\n {team.name}\n </Badge>\n ))}\n </WrapView>\n </Section>\n )\n },\n}\n\nexport const Groups = ({ groups }: { groups: AppsChatGroups }) => {\n return (\n <>\n {Object.entries(groups).reduce((acc, [appName, appGroups]) => {\n const Component = AppGroups[appName]\n\n if (!Component) return acc\n\n return [...acc, <Component key={appName} groups={appGroups} />]\n }, [] as React.ReactElement[])}\n </>\n )\n}\n","import React from \"react\"\nimport type { Channel, ChannelMembership, User } from \"stream-chat\"\n\nimport { useChatApi } from \"../../../hooks\"\nimport { noop } from \"../../../utils\"\n\nexport type ChatUser = ChatMember & User\n\nexport type ChatMember = {\n badges: Record<string, string>[]\n child: boolean\n image: string\n stream_member_id: string\n}\n\nconst PCO_DELETED = { badges: [] }\n\nexport const useChatMembers = (channel: Channel): ChatUser[] => {\n const [members, setMembers] = React.useState<Record<string, ChatMember>>({})\n\n const pcoDeletedMembers = React.useMemo(() => {\n if (!channel) return {}\n return Object.values(channel.state.members).reduce(\n (acc, member) =>\n member.user.pco_deleted\n ? { ...acc, [member.user.id]: PCO_DELETED }\n : acc,\n {}\n )\n }, [channel])\n\n const api = useChatApi()\n\n React.useEffect(() => {\n if (!channel) return\n\n api.chat\n .get(`me/conversations/${channel.id}/members`)\n .then((members) =>\n members.reduce(\n (acc, member: ChatMember) => ({\n ...acc,\n [member.stream_member_id]: member,\n }),\n {}\n )\n )\n .then((members) => ({ ...pcoDeletedMembers, ...members }))\n .then(setMembers)\n .catch(noop)\n }, [channel])\n\n return Object.values(channel.state.members).reduce<ChatUser[]>(\n (acc: [], member: ChannelMembership) =>\n member.user && members[member.user.id]\n ? [...acc, { ...member.user, ...members[member.user.id] }]\n : acc,\n []\n )\n}\n","import { Avatar as TapestryAvatar } from \"@planningcenter/tapestry-react\"\nimport React from \"react\"\nimport { Avatar as StreamAvatar } from \"stream-chat-react\"\n\nimport { ChatUser } from \"../channel_details_view/hooks/use_chat_members\"\nimport { Person } from \"../services/hooks/use_chat_people\"\nimport { ListItemPerson } from \"./person\"\n\nconst TAPESTRY_AVATAR_SIZE = {\n lg: 48,\n md: 36,\n sm: 24,\n}\n\nconst isChatUser = (person: ListItemPerson): person is ChatUser =>\n (person as ChatUser).image !== undefined\n\nconst isPerson = (person: ListItemPerson): person is Person =>\n (person as Person).avatar !== undefined\n\nconst Avatar = ({\n person,\n size = \"md\",\n}: {\n person: ListItemPerson\n size?: \"sm\" | \"md\" | \"lg\"\n}) => {\n if (isPerson(person)) {\n return <TapestryAvatar source={person.avatar} size={size} />\n }\n\n if (isChatUser(person)) {\n return (\n <StreamAvatar\n image={person.image}\n name={person.name}\n size={TAPESTRY_AVATAR_SIZE[size]}\n />\n )\n }\n\n return null\n}\n\nexport { Avatar }\n","import {\n Badge,\n Box,\n Icon,\n StackView,\n Text,\n} from \"@planningcenter/tapestry-react\"\nimport React from \"react\"\n\nimport colors from \"../../../../../colors\"\nimport { ChatUser } from \"../channel_details_view/hooks/use_chat_members\"\nimport { Person } from \"../services/hooks/use_chat_people\"\nimport { Avatar } from \"./avatar\"\n\ntype ListItemPerson = Person | ChatUser\n\nconst Person = ({ person }: { person: ListItemPerson }) => {\n const Comp = person.child ? Child : Adult\n return <Comp person={person} />\n}\n\nconst Adult = ({ person }: { person: ListItemPerson }) => (\n <StackView alignment=\"center\" axis=\"horizontal\" spacing={1}>\n <Avatar person={person} size=\"lg\" />\n <StackView alignment=\"start\" spacing={0.25}>\n <Text truncate>{person.name}</Text>\n {person.badges.length > 0 && (\n <StackView alignment=\"center\" axis=\"horizontal\" spacing={0.5}>\n {person.badges.map(({ title }) => (\n <Badge key={title} size=\"xs\">\n {title}\n </Badge>\n ))}\n </StackView>\n )}\n </StackView>\n </StackView>\n)\n\nconst Child = ({ person }: { person: ListItemPerson }) => (\n <StackView alignment=\"center\" axis=\"horizontal\" spacing={1}>\n <Box opacity={0.5}>\n <Avatar person={person} size=\"lg\" />\n </Box>\n <StackView>\n <Text color=\"foreground\" opacity={0.75} truncate>\n {person.name}\n </Text>\n <StackView alignment=\"center\" axis=\"horizontal\" spacing={0.5}>\n <Icon name=\"general.shieldExclamation\" color={colors.warning49} />\n <Text color={colors.warning20} size={5}>\n Not eligible to chat\n </Text>\n </StackView>\n </StackView>\n </StackView>\n)\n\nexport { type ListItemPerson, Person }\n","import {\n Button,\n Collapse,\n GridView,\n Icon,\n StackView,\n Text,\n} from \"@planningcenter/tapestry-react\"\nimport React, { useState } from \"react\"\n\nimport colors from \"../../../../colors\"\nimport { type ListItemPerson, Avatar } from \"./person_list_item\"\n\nconst COLUMNS = \"18px 1fr auto\"\n\nexport const ChildNotice = ({\n childPeople,\n}: {\n childPeople: ListItemPerson[]\n}) => {\n const [open, setOpen] = useState(false)\n\n const childCount = childPeople.length\n const childCountLabel = childCount === 1 ? \"member\" : \"members\"\n\n const summary = `${childCount} ${childCountLabel} under age 13`\n const explanation = `Members under age 13 cannot chat. They will not see conversations or receive notifications.`\n\n return (\n <StackView\n background={colors.warning94}\n marginBottom={0.5}\n padding={1}\n radius={4}\n >\n <GridView alignment=\"start\" columns={COLUMNS} spacing={1}>\n <Icon\n color={colors.warning49}\n marginTop=\"1px\"\n name=\"general.shieldExclamation\"\n size=\"lg\"\n />\n <Text grow={1} color=\"foreground\" size={4}>\n {open ? explanation : summary}\n </Text>\n <Button\n aria-label={open ? \"Hide explanation\" : \"Show explanation\"}\n icon={{\n name: open ? \"general.upCaret\" : \"general.downCaret\",\n size: \"md\",\n }}\n onClick={() => setOpen(!open)}\n size=\"xs\"\n theme=\"warning\"\n tooltip={open ? \"Hide explanation\" : \"Show explanation\"}\n variant=\"naked\"\n />\n </GridView>\n\n <Collapse open={open}>\n <GridView alignment=\"start\" columns={COLUMNS} spacing={1}>\n <StackView gridColumnStart={2} paddingTop={1} spacing={1}>\n {childPeople.map((person) => (\n <StackView\n alignment=\"center\"\n axis=\"horizontal\"\n key={person.id}\n spacing={1}\n >\n <Avatar person={person} size=\"sm\" />\n <Text color=\"foreground\" size={4} weight={500}>\n {person.name}\n </Text>\n </StackView>\n ))}\n </StackView>\n </GridView>\n </Collapse>\n </StackView>\n )\n}\n","import { StackView } from \"@planningcenter/tapestry-react\"\nimport React from \"react\"\n\nimport { ChildNotice } from \"../child_notice\"\nimport { Person } from \"../person_list_item\"\nimport { ChatUser } from \"./hooks/use_chat_members\"\nimport { Section } from \"./section\"\n\ninterface PeopleProps {\n people: ChatUser[]\n}\n\nexport const People = ({ people }: PeopleProps) => {\n const childPeople = people.filter((p) => p.child)\n const someChildPeople = childPeople.length > 0\n\n return (\n <Section title=\"People\">\n <StackView spacing={1.5}>\n {someChildPeople && <ChildNotice childPeople={childPeople} />}\n {people.map((person) => (\n <Person key={person.id} person={person} />\n ))}\n </StackView>\n </Section>\n )\n}\n","import {\n Box,\n Button,\n Collapse,\n StackView,\n Text,\n ToggleSwitch,\n} from \"@planningcenter/tapestry-react\"\nimport React from \"react\"\n\nimport { useChannelMute, useChat, useChatApi } from \"../../hooks\"\nimport { noop } from \"../../utils\"\nimport { Section } from \"./section\"\n\nconst MuteChannel = ({ channel }) => {\n const muted = useChannelMute(channel)\n\n return (\n <StackView axis=\"horizontal\" width=\"100%\">\n <Text as=\"label\" display=\"flex\" grow={1}>\n Mute\n <StackView grow={1} />\n <ToggleSwitch\n isChecked={muted}\n ariaLabel=\"Mute Channel\"\n onClick={() => muted ? channel.unmute() : channel.mute()}\n />\n </Text>\n </StackView>\n )\n}\n\nconst RemoveChannel = ({ channel }) => {\n const [isRemoveHot, setRemoveHot] = React.useState(false)\n const [isRemoving, setRemoving] = React.useState(false)\n const { switchToChannelListView } = useChat()\n\n const api = useChatApi()\n\n return (\n <Box>\n {!isRemoveHot && (\n <Button\n onClick={() => setRemoveHot(true)}\n paddingHorizontal={0}\n paddingVertical={0}\n theme={false}\n >\n <Text color=\"error\">Delete conversation</Text>\n </Button>\n )}\n <Collapse open={isRemoveHot}>\n <StackView\n backgroundColor=\"error-lightest\"\n padding={2}\n radius={4}\n spacing={1}\n >\n <Text size={4}>\n Deleting this conversation will remove it for everyone. This cannot\n be undone. Are you sure?\n </Text>\n <StackView\n distribution=\"end\"\n alignment=\"end\"\n axis=\"horizontal\"\n spacing={1}\n >\n <Button\n fontWeight={400}\n onClick={() => setRemoveHot(false)}\n size=\"sm\"\n theme=\"dark\"\n variant=\"naked\"\n >\n Cancel\n </Button>\n <Button\n disabled={isRemoving}\n fontWeight={400}\n onMouseDown={(e) => e.preventDefault()}\n onClick={() => {\n setRemoving(true)\n api.chat\n .delete(`me/conversations/${channel.id}`)\n .then(switchToChannelListView)\n .catch(noop)\n }}\n size=\"sm\"\n theme=\"error\"\n title=\"Yes, delete\"\n spinner={isRemoving}\n />\n </StackView>\n </StackView>\n </Collapse>\n </Box>\n )\n}\n\nexport const Settings = ({ channel, isRemovable }) => (\n <Section title=\"Settings\">\n <StackView spacing={1}>\n <MuteChannel channel={channel} />\n {isRemovable && <RemoveChannel channel={channel} />}\n </StackView>\n </Section>\n)\n","import { Input } from \"@planningcenter/tapestry-react\"\nimport React from \"react\"\nimport type { Channel } from \"stream-chat\"\n\nimport { useChatApi } from \"../../hooks\"\nimport { noop } from \"../../utils\"\nimport { Section } from \"./section\"\n\nexport const Title = ({\n channel,\n isEditable,\n}: {\n channel: Channel\n isEditable: boolean\n}) => {\n const [title, setTitle] = React.useState(channel.data.name)\n const api = useChatApi()\n\n return (\n <Section title=\"Title\">\n <Input\n size=\"lg\"\n value={title}\n maxLength={255}\n disabled={!isEditable}\n onChange={(e) => setTitle(e.target.value)}\n onBlur={() => {\n if (title === channel.data.name) return\n\n api.chat\n .patch(`me/conversations/${channel.id}`, { title })\n .catch(noop)\n }}\n onKeyDown={(e) =>\n e.key === \"Enter\" && (e.target as HTMLInputElement).blur()\n }\n />\n </Section>\n )\n}\n","import { Button, StackView } from \"@planningcenter/tapestry-react\"\nimport React from \"react\"\nimport type { Channel } from \"stream-chat\"\nimport { useChatContext } from \"stream-chat-react\"\n\nimport { default as themeColors } from \"../../../../../colors\"\nimport { DrawerHeading, ScrollContainer } from \"../../../../components\"\nimport { useChat } from \"../../hooks\"\nimport type { StreamChatGenerics } from \"../../types\"\nimport { Groups } from \"./groups\"\nimport { useChatGroups, useChatMemberAbility, useChatMembers } from \"./hooks\"\nimport { People } from \"./people\"\nimport { Settings } from \"./settings\"\nimport { Title } from \"./title\"\n\nconst Details = ({ channel }: { channel: Channel }) => {\n const chatGroups = useChatGroups(channel)\n const chatMembers = useChatMembers(channel)\n const chatMemberAbility = useChatMemberAbility(channel)\n\n return (\n <ScrollContainer>\n <StackView padding={2} spacing={4} grow={1}>\n <Title channel={channel} isEditable={chatMemberAbility.canUpdate} />\n <Settings channel={channel} isRemovable={chatMemberAbility.canDelete} />\n {Object.keys(chatGroups).length > 0 && <Groups groups={chatGroups} />}\n <People people={chatMembers} />\n </StackView>\n </ScrollContainer>\n )\n}\n\nexport const ChannelDetailsView = () => {\n const { channel } = useChatContext<StreamChatGenerics>()\n const { isChannelDetailsViewActive, switchToChannelView } = useChat()\n\n if (!(channel && isChannelDetailsViewActive)) return null\n\n return (\n <>\n <StackView\n alignment=\"center\"\n axis=\"horizontal\"\n spacing={1}\n padding={2}\n paddingTop={1}\n >\n <Button\n aria-label=\"Switch to chat list\"\n color={themeColors.lightNeutral12}\n icon=\"general.leftChevron\"\n onClick={switchToChannelView}\n size=\"sm\"\n title=\"Back to chat list\"\n variant=\"naked\"\n />\n <DrawerHeading truncate>Conversation details</DrawerHeading>\n </StackView>\n <Details channel={channel} />\n </>\n )\n}\n","import React from \"react\"\nimport type { Channel } from \"stream-chat\"\n\nimport { useChatApi } from \"../../../hooks\"\nimport { noop } from '../../../utils'\n\ntype AppName = \"Services\" | \"Chat\"\ntype SourceType = string\n\nexport type ChatGroup = {\n name: string | null,\n source_app_name: AppName,\n source_identifier: string\n source_type: SourceType\n}\n\nexport type AppChatGroups = Record<SourceType, ChatGroup[]>\n\nexport type AppsChatGroups = {\n [N in AppName]?: AppChatGroups\n}\n\nexport const useChatGroups = (channel: Channel): AppsChatGroups => {\n const [groups, setGroups] = React.useState<ChatGroup[]>([])\n\n const api = useChatApi()\n\n React.useEffect(() => {\n if (!channel) return\n\n api.chat\n .get(`me/conversations/${channel.id}/groups`)\n .then(setGroups)\n .catch(noop)\n }, [channel])\n\n return groups.reduce((acc, group: ChatGroup) => {\n acc[group.source_app_name] ||= {}\n acc[group.source_app_name][group.source_type] ||= []\n acc[group.source_app_name][group.source_type].push(group)\n\n return acc\n }, {} as AppsChatGroups)\n}\n","import React from 'react'\nimport type { Channel } from 'stream-chat';\n\nimport { useChatApi } from \"../../../hooks\"\n\nexport const useChatMemberAbility = (channel: Channel) => {\n const api = useChatApi()\n const [ability, setAbility] = React.useState({\n canDelete: false,\n canUpdate: false,\n })\n\n React.useEffect(() => {\n api.chat\n .get(`/me/conversations/${channel.id}/member_ability`)\n .then((data) => setAbility({\n canDelete: data.can_delete,\n canUpdate: data.can_update,\n }))\n }, [channel])\n\n return ability\n}\n","import { Badge, Text } from \"@planningcenter/tapestry-react\"\nimport React from \"react\"\n\nexport const BetaBadge = () => (\n <Badge color=\"hsla(221, 89%, 93%, 1)\" radius=\"pill\" size=\"xs\">\n <Text color=\"hsla(221, 91%, 55%, 1)\">Beta</Text>\n </Badge>\n)\n","import { Heading, StackView } from \"@planningcenter/tapestry-react\"\nimport React from \"react\"\n\nexport const ChannelListBlankState = () => (\n <StackView\n alignment=\"center\"\n distribution=\"center\"\n padding={4}\n paddingTop=\"54px\"\n width=\"100%\"\n >\n <ChannelListBlankStateIcon />\n <Heading color=\"foreground\" fontWeight={500} marginTop={1} size={3}>\n No conversations\n </Heading>\n </StackView>\n)\n\nconst ChannelListBlankStateIcon = () => (\n <svg\n width=\"162\"\n height=\"124\"\n viewBox=\"0 0 162 124\"\n fill=\"none\"\n xmlns=\"http://www.w3.org/2000/svg\"\n >\n <path\n d=\"M157.354 67.5522C151.241 85.6769 138.257 101.123 124.335 110.111C110.102 119.278 94.9458 121.54 77.5441 117.715C60.3357 113.846 43.3207 105.974 29.2803 98.519C15.344 90.6768 4.35267 83.5043 1.63086 72.2247C-1.04633 61.2576 4.81374 46.0644 18.8987 31.0943C32.835 16.3773 54.9962 2.71679 81.3665 0.469802C107.543 -2.16409 131.594 6.57091 145.381 19.3088C159.526 32.1211 163.437 49.5613 157.369 67.5522H157.354Z\"\n fill=\"#EDF6FB\"\n />\n <g opacity=\"0.2\">\n <path\n opacity=\"0.2\"\n d=\"M102.204 121.658C88.8481 124.173 75.9678 121.851 62.6562 114.947C47.0244 106.747 32.642 94.7534 20.9962 83.9054C9.55863 72.7299 0.798274 62.9533 1.08087 51.3463C1.25935 43.147 6.37575 33.9656 15.85 25.4092\"\n stroke=\"#BAC7D3\"\n strokeWidth=\"1.48\"\n strokeMiterlimit=\"10\"\n />\n <path\n opacity=\"0.2\"\n d=\"M152.714 87.1641C143.909 100.408 130.985 110.631 117.792 116.628\"\n stroke=\"#BAC7D3\"\n strokeWidth=\"1.48\"\n strokeMiterlimit=\"10\"\n />\n <path\n opacity=\"0.2\"\n d=\"M36.5986 11.6C53.108 3.53464 74.4809 -1.27187 96.6421 2.6864C122.611 6.91253 143.582 21.5701 153.607 37.4478C160.761 48.5191 162.62 60.4683 159.63 72.0009\"\n stroke=\"#BAC7D3\"\n strokeWidth=\"1.48\"\n strokeMiterlimit=\"10\"\n />\n </g>\n <path\n d=\"M108.125 25.5668H52.4657C49.4438 25.4274 46.4893 26.4961 44.2438 28.5407C41.9982 30.5854 40.6427 33.441 40.4717 36.4876V72.233C40.6427 75.2796 41.9982 78.1352 44.2438 80.1799C46.4893 82.2245 49.4438 83.2931 52.4657 83.1538H64.7654L80.2729 96.7441L95.7804 83.1538H108.125C111.147 83.2931 114.102 82.2245 116.347 80.1799C118.593 78.1352 119.948 75.2796 120.119 72.233V36.4876C119.948 33.441 118.593 30.5854 116.347 28.5407C114.102 26.4961 111.147 25.4274 108.125 25.5668Z\"\n fill=\"#48A5E5\"\n />\n <path\n d=\"M64.8701 59.3043C62.3848 59.3043 60.3701 57.2886 60.3701 54.8021C60.3701 52.3155 62.3848 50.2998 64.8701 50.2998C67.3554 50.2998 69.3701 52.3155 69.3701 54.8021C69.3701 57.2886 67.3554 59.3043 64.8701 59.3043Z\"\n fill=\"#EEF5FD\"\n />\n <path\n d=\"M79.9258 59.3043C77.4405 59.3043 75.4258 57.2886 75.4258 54.8021C75.4258 52.3155 77.4405 50.2998 79.9258 50.2998C82.4111 50.2998 84.4258 52.3155 84.4258 54.8021C84.4258 57.2886 82.4111 59.3043 79.9258 59.3043Z\"\n fill=\"#EEF5FD\"\n />\n <path\n d=\"M95.0615 59.3043C92.5762 59.3043 90.5615 57.2886 90.5615 54.8021C90.5615 52.3155 92.5762 50.2998 95.0615 50.2998C97.5468 50.2998 99.5615 52.3155 99.5615 54.8021C99.5615 57.2886 97.5468 59.3043 95.0615 59.3043Z\"\n fill=\"#EEF5FD\"\n />\n <path\n d=\"M124.007 65.7374H96.4523C94.9563 65.6685 93.4937 66.1975 92.382 67.2097C91.2703 68.2219 90.5993 69.6355 90.5146 71.1438V88.8395C90.5993 90.3477 91.2703 91.7614 92.382 92.7736C93.4937 93.7858 94.9563 94.3148 96.4523 94.2458H102.541L110.218 100.974L117.895 94.2458H124.007C125.503 94.3148 126.965 93.7858 128.077 92.7736C129.188 91.7614 129.859 90.3477 129.944 88.8395V71.1438C129.859 69.6355 129.188 68.2219 128.077 67.2097C126.965 66.1975 125.503 65.6685 124.007 65.7374Z\"\n fill=\"#79CAF2\"\n />\n <path\n d=\"M102.594 82.4391C101.363 82.4391 100.366 81.4412 100.366 80.2103C100.366 78.9793 101.363 77.9814 102.594 77.9814C103.824 77.9814 104.821 78.9793 104.821 80.2103C104.821 81.4412 103.824 82.4391 102.594 82.4391Z\"\n fill=\"#EEF5FD\"\n />\n <path\n d=\"M110.047 82.4391C108.816 82.4391 107.819 81.4412 107.819 80.2103C107.819 78.9793 108.816 77.9814 110.047 77.9814C111.277 77.9814 112.274 78.9793 112.274 80.2103C112.274 81.4412 111.277 82.4391 110.047 82.4391Z\"\n fill=\"#EEF5FD\"\n />\n <path\n d=\"M117.54 82.4391C116.31 82.4391 115.312 81.4412 115.312 80.2103C115.312 78.9793 116.31 77.9814 117.54 77.9814C118.77 77.9814 119.768 78.9793 119.768 80.2103C119.768 81.4412 118.77 82.4391 117.54 82.4391Z\"\n fill=\"#EEF5FD\"\n />\n </svg>\n)\n","import {\n Icon,\n Menu,\n Select,\n Spinner,\n StackView,\n Text,\n} from \"@planningcenter/tapestry-react\"\nimport { Environment } from \"@planningcenter/url\"\nimport React, { useEffect, useState } from \"react\"\n\nimport colors from \"../../../../../colors\"\nimport { IndicatorDot } from \"../../../../components\"\nimport { useChatConnectedPeople } from \"../../hooks\"\nimport type { ConnectedPerson } from \"../../hooks/use_chat_connected_people\"\n\ntype LinkedAccountSelectProps = {\n appName: string\n currentPersonId: number\n env: Environment\n}\n\nexport const LinkedAccountSelect = ({\n appName,\n env,\n currentPersonId,\n}: LinkedAccountSelectProps) => {\n const { people, loading, switchPerson } = useChatConnectedPeople()\n const [connectedPeople, setConnectedPeople] = useState(people)\n const [selected, setSelected] = useState<ConnectedPerson | null>(null)\n const [switching, setSwitching] = useState(false)\n const anyConnectedUnread = connectedPeople?.some(\n (p) => p.id !== `${currentPersonId}` && p.unread_count\n )\n\n useEffect(() => {\n if (people) {\n const sortedByOrgName = people.sort((a, b) =>\n a.organization_name.localeCompare(b.organization_name)\n )\n setConnectedPeople(sortedByOrgName)\n const currentPerson = people.find(\n (person) => person.id === `${currentPersonId}`\n )\n setSelected(currentPerson)\n }\n }, [people])\n\n return (\n <StackView paddingHorizontal={2}>\n <Select\n emptyValue=\"Linked Accounts\"\n disabled={switching}\n matchWidths={true}\n onChange={({ value }) => {\n const person = connectedPeople.find((p) => p.id === value)\n setSelected(person)\n if (person.id !== `${currentPersonId}`) {\n setSwitching(true)\n switchPerson(person.id, `${appName}/`, env)\n }\n }}\n value={selected?.id}\n renderValue={() => (\n <StackView\n alignment=\"center\"\n axis=\"horizontal\"\n distribution=\"space-between\"\n spacing={1}\n >\n {selected.organization_name}\n {anyConnectedUnread && !switching && (\n <IndicatorDot right={3.5} top={1.25} />\n )}\n {switching && (\n <Spinner\n key=\"loader\"\n position=\"absolute\"\n height={1.5}\n width={1.5}\n zIndex={6}\n right={3.5}\n top={1.25}\n />\n )}\n </StackView>\n )}\n >\n <SwitchAccountsWarning />\n {connectedPeople?.map((connectedPerson) => (\n <Select.Option value={connectedPerson.id} key={connectedPerson.id}>\n <StackView\n alignment=\"center\"\n axis=\"horizontal\"\n distribution=\"space-between\"\n spacing={1}\n >\n {connectedPerson.organization_name}\n {connectedPerson.unread_count > 0 && (\n <IndicatorDot right={1.5} top={1.25} />\n )}\n </StackView>\n </Select.Option>\n ))}\n {loading && <LoadingIndicator />}\n </Select>\n </StackView>\n )\n}\n\nconst LoadingIndicator = () => (\n <Menu.Item\n alignment=\"center\"\n distribution=\"center\"\n paddingBottom={2}\n paddingTop={2}\n >\n <Spinner />\n </Menu.Item>\n)\n\nconst SwitchAccountsWarning = () => (\n <StackView\n axis=\"horizontal\"\n backgroundColor={colors.interaction97}\n marginBottom={0.5}\n marginHorizontal={1.25}\n marginTop={1}\n padding={1}\n radius={4}\n spacing={1}\n >\n <Icon\n color={colors.interaction66}\n marginTop=\"3px\"\n name=\"general.outlinedExclamationCircle\"\n />\n <Text size={5}>\n Make sure any changes outside of chat are saved before switching accounts.\n </Text>\n </StackView>\n)\n","import { Icon, StackView, Text } from \"@planningcenter/tapestry-react\"\nimport React from \"react\"\n\nexport const LoadingErrorIndicator = () => (\n <StackView alignment=\"center\" spacing={2} padding={2} paddingTop=\"10%\">\n <Icon name=\"general.exclamationTriangle\" color=\"warning\" size=\"xl\" />\n <Text color=\"foregroundSecondary\" align=\"center\">\n An error occured while connecting to the chat, please try again.\n </Text>\n </StackView>\n)\n","import { Button, Divider, StackView } from \"@planningcenter/tapestry-react\"\nimport React, { PropsWithChildren } from \"react\"\nimport { ChannelListMessengerProps } from \"stream-chat-react\"\n\nimport { ScrollContainer } from \"../../../../components\"\nimport { useChat, useChatAppGrants } from \"../../hooks\"\nimport { getPrimaryButtonStyleOverrides } from \"../../utils\"\nimport { LoadingErrorIndicator } from \"./loading_error_indicator\"\n\nexport const List = (props: PropsWithChildren<ChannelListMessengerProps>) => {\n const { children, error = null, loading } = props\n const { switchToNewChatShortcutsView } = useChat()\n const chatAppGrants = useChatAppGrants()\n const displayNewConversationButton =\n chatAppGrants.canCreateChat(\"Services\") ||\n chatAppGrants.canCreateChat(\"Groups\")\n\n if (error) return <LoadingErrorIndicator />\n if (loading) return null\n\n return (\n <StackView grow={1} shrink={1}>\n <ScrollContainer>{children}</ScrollContainer>\n <Divider />\n <StackView padding={2} alignment=\"stretch\">\n {displayNewConversationButton && (\n <Button\n aria-label=\"Switch to new conversation\"\n onClick={switchToNewChatShortcutsView}\n {...getPrimaryButtonStyleOverrides()}\n >\n New conversation\n </Button>\n )}\n </StackView>\n </StackView>\n )\n}\n","import React from \"react\"\n\nimport { useChatApi } from \"./use_chat_api\"\n\ntype AppName = \"Services\" | \"Groups\"\n\ntype AppGrant = {\n app_name: AppName\n create_conversations: boolean\n}\n\ntype AppGrantMap = {\n [P in AppName]?: AppGrant\n}\n\ninterface ChatAppGrants {\n canCreateChat: (appName: AppName) => boolean\n}\n\nexport const useChatAppGrants = (): ChatAppGrants => {\n const [appGrants, setAppGrants] = React.useState<AppGrantMap>({})\n\n const api = useChatApi()\n\n React.useEffect(() => {\n api.chat\n .get(\"me/app_grants\")\n .then((grants: AppGrant[]) =>\n grants.reduce((acc, grant) => ({ ...acc, [grant.app_name]: grant }), {})\n )\n .then(setAppGrants)\n }, [])\n\n return {\n canCreateChat: (appName) =>\n appGrants[appName] && appGrants[appName].create_conversations,\n }\n}\n","import { Group, StackView, Text, Tooltip } from \"@planningcenter/tapestry-react\"\nimport React from \"react\"\nimport type { Channel } from \"stream-chat\"\n\nimport { ColorAppIcon } from \"../../../../color_app_icon\"\nimport { default as themeColors } from \"../../../../colors\"\n\ntype AppName = \"Groups\" | \"Services\" | null\n\nconst PcoAppNames = {\n groups: \"Groups\",\n services: \"Services\",\n}\n\ninterface GroupsAppMetaComponentProps {\n names?: string[]\n}\ninterface ServicesAppMetaComponentProps {\n dates?: string\n}\n\ntype ChannelMetaProps = {\n appName: AppName\n channel: Channel\n}\n\nconst ChannelMeta = ({ appName, channel }: ChannelMetaProps) => {\n let resourceType: \"Plan\" | \"Team\" | \"Group\" | undefined\n let resourceId: string | undefined\n\n switch (appName) {\n case \"Groups\": {\n const metadata = channel.data[appName] as GroupsAppMetaComponentProps\n resourceType = \"Group\"\n if (metadata?.names?.length) {\n resourceId = metadata.names?.join(\", \")\n }\n break\n }\n case \"Services\": {\n const metadata = channel.data[appName] as ServicesAppMetaComponentProps\n resourceType = metadata?.dates ? \"Plan\" : \"Team\"\n if (metadata?.dates) {\n resourceId = metadata.dates\n }\n break\n }\n }\n\n return (\n <Group radius={4} spacing=\"0.25px\" className=\"channel-meta\" maxWidth=\"100%\">\n <StackView\n alignment=\"center\"\n axis=\"horizontal\"\n backgroundColor={themeColors.lightNeutral95}\n borderColor={themeColors.lightNeutral95}\n borderWidth={1}\n distribution=\"center\"\n padding={0.5}\n paddingHorizontal={1}\n spacing={0.5}\n >\n <ColorAppIcon appName={appName} size={15} />\n <Text lineHeight=\"13px\" size={5} weight={500}>\n {resourceType}\n </Text>\n </StackView>\n {resourceId && (\n <StackView\n alignment=\"center\"\n borderColor={themeColors.lightNeutral95}\n borderLeftWidth={0}\n borderWidth={1}\n distribution=\"center\"\n padding={0.5}\n paddingHorizontal={1}\n shrink={1}\n >\n <Tooltip title={resourceId} openDelay={800}>\n <Text\n color=\"foregroundSecondary\"\n lineHeight=\"13px\"\n size={5}\n truncate\n maxWidth=\"100%\"\n >\n {resourceId}\n </Text>\n </Tooltip>\n </StackView>\n )}\n </Group>\n )\n}\n\nexport const ChannelMetas = ({ channel }) => {\n if (!channel?.data?.pco_apps) return null\n\n const metas: JSX.Element[] = channel.data.pco_apps.map((pco_app: string) => (\n <ChannelMeta\n key={pco_app}\n appName={PcoAppNames[pco_app]}\n channel={channel}\n />\n ))\n\n return (\n <StackView axis=\"horizontal\" maxWidth=\"calc(100% + 24px)\">\n {metas}\n </StackView>\n )\n}\n","import React from \"react\"\nimport type { ChannelMemberResponse } from \"stream-chat\"\nimport { Avatar as SCAvatar } from \"stream-chat-react\"\n\nconst getImage = (member) => member.user?.image\n\nconst Avatar = ({ member, size = 40 }) => <SCAvatar image={getImage(member)} shape=\"square\" size={size}/>\n\n// based off of https://github.com/GetStream/website-react-examples/blob/master/social-messenger-ts/src/components/AvatarGroup/AvatarGroup.tsx\nexport const AvatarGroup = ({\n members,\n}: {\n members: ChannelMemberResponse[]\n}) => {\n let content = null\n\n if (members.length === 1) {\n content = <Avatar member={members[0]} />\n }\n\n if (members.length === 2) {\n content = (\n <>\n <div>\n <Avatar member={members[0]} />\n </div>\n <div style={{ marginLeft: \"-20px\" }}>\n <Avatar member={members[1]} />\n </div>\n </>\n )\n }\n\n if (members.length === 3) {\n content = (\n <>\n <div>\n <Avatar member={members[0]} />\n </div>\n <div style={{ marginLeft: \"-20px\" }}>\n <Avatar member={members[1]} size={20} />\n <Avatar member={members[2]} size={20} />\n </div>\n </>\n )\n }\n\n if (members.length >= 4) {\n content = (\n <>\n <div>\n <Avatar\n member={members[members.length - 4]}\n size={20}\n />\n <Avatar\n member={members[members.length - 3]}\n size={20}\n />\n </div>\n <div>\n <Avatar\n member={members[members.length - 2]}\n size={20}\n />\n <Avatar\n member={members[members.length - 1]}\n size={20}\n />\n </div>\n </>\n )\n }\n\n return <div className=\"str-chat__avatar-group\">{content}</div>\n}\n\nexport default AvatarGroup\n","import {\n Badge,\n Box,\n Dropdown,\n GridView,\n Heading,\n Icon,\n StackView,\n Text,\n} from \"@planningcenter/tapestry-react\"\nimport React from \"react\"\nimport { Channel } from \"stream-chat\"\nimport { StreamMessage, useChatContext } from \"stream-chat-react\"\n\nimport colors from \"../../../../../colors\"\nimport { useChannelMute, useChannelUnread, useChat } from \"../../hooks\"\nimport { formatDate } from \"../../utils\"\nimport { ChannelMetas } from \"../channel_metas\"\nimport AvatarGroup from \"./avatar_group\"\n\nconst getTimeStamp = (channel: Channel): string | null => {\n const lastMessageCreatedAt = channel.state?.last_message_at\n const conversationCreatedAt = channel.data?.created_at as\n | string\n | Date\n | undefined\n\n if (!lastMessageCreatedAt && !conversationCreatedAt) return null\n\n const date = new Date(lastMessageCreatedAt || conversationCreatedAt)\n\n if (isNaN(date.getTime())) return null\n\n return formatDate(date)\n}\n\nconst getLastMessagePreview = (lastMessage: StreamMessage) => {\n if (!lastMessage) return \"Empty conversation\"\n\n const from = lastMessage.user?.name\n const text = lastMessage.deleted_at ? \"Message deleted\" : lastMessage.text\n\n const attachmentCount = lastMessage.attachments?.length\n const attachmentString =\n attachmentCount === 1 ? \"1 attachment\" : `${attachmentCount} attachments`\n\n const messagePreview = text || attachmentString\n\n return `${from}: ${messagePreview}`\n}\n\nconst UnreadBadge = ({ unread }) => {\n if (unread < 1) return null\n\n const clampedValue = unread <= 99 ? unread.toString() : \"99+\"\n\n return (\n <Badge\n title={clampedValue}\n size=\"xs\"\n color={colors.interaction66}\n radius=\"pill\"\n minWidth={3}\n />\n )\n}\n\nexport const Preview = ({ channel, lastMessage, setActiveChannel, unread }) => {\n const { client } = useChatContext()\n\n const {\n setActionsOpenForChannel,\n actionsOpenForChannel,\n switchToChannelView,\n } = useChat()\n\n const muted = useChannelMute(channel)\n\n const { isUnread, isUnreadable, markRead, markUnread, unreadCount } =\n useChannelUnread(channel, unread)\n\n const channelActionsOpen = actionsOpenForChannel === channel.id\n\n const handleChannelClick = (\n e: React.MouseEvent<HTMLDivElement> | React.KeyboardEvent<HTMLDivElement>\n ) => {\n const target = e.target as HTMLElement\n if (target.getAttribute(\"data-type\") !== \"actions-dropdown\") {\n setActiveChannel(channel)\n switchToChannelView()\n }\n }\n\n const handleChannelKeyDown = (event: React.KeyboardEvent<HTMLDivElement>) => {\n if (event.key === \"Enter\" || event.key === \" \") {\n handleChannelClick(event)\n }\n }\n\n const members = Object.values(channel.state.members).filter(\n ({ user }) => user.id !== client.userID\n )\n\n const displayTitle = channel.data.name\n\n return (\n <GridView\n alignment=\"start\"\n aria-label={`Select Channel: ${displayTitle || \"\"}`}\n backgroundColor={channelActionsOpen ? \"surfaceTertiary\" : \"surface\"}\n borderBottomColor=\"separatorTertiary\"\n borderBottomWidth={1}\n columns=\"auto 1fr auto\"\n cursor=\"pointer\"\n css={{\n \"&:hover\": {\n \".actions-dropdown\": { visibility: \"visible\" },\n \".channel-meta > *\": { borderColor: colors.lightNeutral88 },\n backgroundColor: \"surfaceTertiary\",\n },\n \"@media (hover: none)\": {\n \".actions-dropdown\": { visibility: \"visible\" },\n },\n }}\n minHeight={10}\n onClick={handleChannelClick}\n onKeyDown={handleChannelKeyDown}\n padding={1}\n paddingHorizontal={2}\n radius={0}\n role=\"button\"\n spacing={1}\n tabIndex={0}\n width=\"100%\"\n >\n <AvatarGroup members={members} />\n <StackView height=\"100%\" alignment=\"start\" paddingRight={1}>\n <Heading level={4} maxWidth=\"100%\" truncate weight={500}>\n {displayTitle}\n </Heading>\n <Text\n color=\"foregroundSecondary\"\n css={{\n WebkitBoxOrient: \"vertical\",\n WebkitLineClamp: \"2\",\n display: \"-webkit-box\",\n overflow: \"hidden\",\n textOverflow: \"ellipsis\",\n }}\n lineHeight=\"1.35\"\n maxWidth=\"100%\"\n size={4}\n textAlign=\"left\"\n >\n {getLastMessagePreview(lastMessage)}\n </Text>\n <StackView basis={0.5} grow={1} />\n <ChannelMetas channel={channel} />\n </StackView>\n <StackView alignment=\"end\" minWidth={6} height=\"100%\">\n <Text color=\"foregroundSecondary\" size={5}>\n {getTimeStamp(channel)}\n </Text>\n <StackView alignment=\"end\" alignSelf=\"stretch\" grow={1}>\n {muted ? (\n <Icon name=\"general.bellMuted\" />\n ) : (\n <UnreadBadge unread={unreadCount} />\n )}\n </StackView>\n <Box onClick={(e) => e.stopPropagation()}>\n <Dropdown\n alignSelf=\"end\"\n className=\"actions-dropdown\"\n data-type=\"actions-dropdown\"\n icon={{\n name: \"people.importProgress\",\n size: \"lg\",\n }}\n radius=\"circle\"\n iconRight={null}\n lockScrollWhileOpen={true}\n onClose={() => setActionsOpenForChannel(null)}\n onOpen={() => setActionsOpenForChannel(channel.id)}\n placement=\"top-end\"\n popoverProps={{ offset: 4, shouldFlip: true }}\n right=\"1.5px\"\n size=\"xs\"\n theme=\"dark\"\n title=\"Chat actions\"\n variant=\"naked\"\n visibility={channelActionsOpen ? \"visible\" : \"hidden\"}\n >\n <Dropdown.Item\n disabled={!(isUnread || isUnreadable)}\n onSelect={isUnread ? markRead : markUnread}\n >\n {`Mark ${isUnread ? \"read\" : \"unread\"}`}\n </Dropdown.Item>\n <Dropdown.Item\n onSelect={() => (muted ? channel.unmute() : channel.mute())}\n >\n {muted ? \"Unmute\" : \"Mute\"}\n </Dropdown.Item>\n </Dropdown>\n </Box>\n </StackView>\n </GridView>\n )\n}\n","import { Spinner, StackView } from \"@planningcenter/tapestry-react\"\nimport React, { useCallback } from \"react\"\nimport {\n ChannelList,\n ChannelListProps,\n InfiniteScroll,\n} from \"stream-chat-react\"\n\nimport useStore from \"../../../../../hooks/use_store\"\nimport { DrawerHeader, DrawerHeading } from \"../../../../components\"\nimport { useChannelsLoading } from \"../../hooks\"\nimport { BetaBadge } from \"../beta_badge\"\nimport { ChannelListBlankState } from \"./channel_list_blank_state\"\nimport { LinkedAccountSelect } from \"./linked_account_select\"\nimport { List } from \"./list\"\nimport { Preview } from \"./preview\"\n\ntype FilterType = ChannelListProps[\"filters\"]\n\nexport const ChannelListView = ({\n client,\n closeDrawer,\n env,\n appName,\n currentPersonId,\n}) => {\n const channelsLoading = useChannelsLoading()\n const { hasConnectedPeople } = useStore()\n\n // Updating these filters might require changes in `handlePotentialChannelAddingEvent`\n const filters: FilterType = {\n $or: [\n { last_message_at: { $exists: true } },\n { created_by_id: client.userID },\n ],\n members: { $in: [client.userID] },\n type: \"messaging\",\n }\n\n // If the above `filters` change we may need to update this logic as well.\n const handlePotentialChannelAddingEvent = useCallback(\n async (setChannels, event) => {\n const eventChannel = event.channel\n\n if (!eventChannel?.id) return\n\n // Ensures empty conversations added by a different user are still hidden across event changes.\n const channelHasMessages = Boolean(eventChannel.last_message_at)\n\n if (!channelHasMessages) return\n\n try {\n const newChannel = client.channel(eventChannel.type, eventChannel.id)\n await newChannel.watch()\n setChannels((channels) => [newChannel, ...channels])\n } catch (error) {\n console.error(error)\n }\n },\n [client.userID]\n )\n\n return (\n <>\n <DrawerHeader closeDrawer={closeDrawer}>\n <StackView axis=\"horizontal\" alignment=\"center\" spacing={1}>\n <DrawerHeading>Chat</DrawerHeading>\n <BetaBadge />\n {channelsLoading && (\n <Spinner\n color=\"hsl(0 0% 62%)\"\n thickness={2}\n trackColor=\"hsl(0 0% 97%)\"\n />\n )}\n </StackView>\n </DrawerHeader>\n <StackView spacing={2} grow={1}>\n {hasConnectedPeople && (\n <LinkedAccountSelect\n env={env}\n appName={appName}\n currentPersonId={currentPersonId}\n />\n )}\n <ChannelList\n setActiveChannelOnMount={false}\n EmptyStateIndicator={ChannelListBlankState}\n filters={filters}\n onMessageNew={handlePotentialChannelAddingEvent}\n onAddedToChannel={handlePotentialChannelAddingEvent}\n List={List}\n // Infinite scroll implementation details may need to be revisited once we have real data to work with.\n // https://getstream.io/chat/docs/sdk/react/guides/channel-list-infinite-scroll/#what-to-take-into-consideration\n Paginator={InfiniteScroll}\n Preview={Preview}\n />\n </StackView>\n </>\n )\n}\n","import { useEffect, useState } from \"react\"\nimport { useChatContext } from \"stream-chat-react\"\n\nconst LOADED = null\n\n// returns a loading boolean for the ChannelList channels query.\n// State is considered to be loading if the query is in any state beside LOADED.\nexport const useChannelsLoading = (): boolean => {\n const [loading, setLoading] = useState(true)\n const { channelsQueryState } = useChatContext(\"ChannelList\")\n const { queryInProgress: queryState } = channelsQueryState\n\n useEffect(() => {\n setLoading(queryState != LOADED)\n }, [queryState])\n\n return loading\n}\n","import { Icon, StackView, Text } from \"@planningcenter/tapestry-react\"\nimport React from \"react\"\n\nimport { default as themeColors } from \"../../../../../colors\"\n\nexport const CustomEmptyStateIndicator = () => (\n <StackView alignment=\"center\" distribution=\"center\" height=\"100%\" spacing={1}>\n <Icon\n color={themeColors.lightNeutral81}\n name=\"general.outlinedTextMessage\"\n size=\"64px\"\n />\n <Text color=\"foregroundTertiary\">No conversation</Text>\n </StackView>\n)\n","import { Button, StackView } from \"@planningcenter/tapestry-react\"\nimport React from \"react\"\n\nimport { default as themeColors } from \"../../../../../colors\"\nimport { DrawerHeading } from \"../../../../components\"\nimport { ChannelMetas } from \"../channel_metas\"\nimport { useMessageListScrollShadows } from \"./hooks/use_message_list_scroll_shadows\"\n\nexport const InjectableCustomHeader = ({\n channel,\n closeDrawer,\n setOverflowBottom,\n setOverflowTop,\n switchToChannelDetailsView,\n switchToChannelListView,\n title,\n}) => {\n const { headerRef } = useMessageListScrollShadows({\n setOverflowBottom,\n setOverflowTop,\n })\n\n return (\n <CustomHeader\n channel={channel}\n closeDrawer={closeDrawer}\n innerRef={headerRef}\n switchToChannelDetailsView={switchToChannelDetailsView}\n switchToChannelListView={switchToChannelListView}\n title={title}\n />\n )\n}\n\nexport const CustomHeader = ({\n channel,\n closeDrawer,\n switchToChannelDetailsView,\n switchToChannelListView,\n title,\n innerRef = null,\n}) => {\n return (\n <StackView\n axis=\"horizontal\"\n backgroundColor=\"surface\"\n innerRef={innerRef}\n left={0}\n padding={2}\n paddingTop={1}\n position=\"absolute\"\n right={0}\n spacing={1}\n top={0}\n zIndex={5}\n >\n <Button\n alignSelf=\"baseline\"\n aria-label=\"Switch to chat list\"\n icon={{\n color: themeColors.lightNeutral12,\n name: \"general.leftChevron\",\n }}\n marginTop={0.25}\n onClick={switchToChannelListView}\n size=\"md\"\n title=\"Back to chat list\"\n variant=\"naked\"\n />\n <StackView shrink={1}>\n <DrawerHeading truncate>{title}</DrawerHeading>\n <ChannelMetas channel={channel} />\n </StackView>\n <StackView\n alignment=\"start\"\n axis=\"horizontal\"\n marginLeft=\"auto\"\n spacing={0.25}\n >\n <Button\n aria-label=\"Switch to conversation details\"\n icon={{\n color: themeColors.lightNeutral12,\n name: \"general.cog\",\n }}\n onClick={switchToChannelDetailsView}\n size=\"md\"\n title=\"Conversation details\"\n variant=\"naked\"\n />\n <Button\n aria-label=\"Close drawer\"\n icon={{\n color: themeColors.lightNeutral12,\n name: \"general.x\",\n }}\n onClick={closeDrawer}\n size=\"md\"\n title=\"Close drawer\"\n variant=\"naked\"\n />\n </StackView>\n </StackView>\n )\n}\n","import { useEffect, useRef } from \"react\"\nimport { useMessageListContext } from \"stream-chat-react\"\n\nexport const useMessageListScrollShadows = ({\n setOverflowBottom,\n setOverflowTop,\n}) => {\n const { listElement, scrollToBottom } = useMessageListContext()\n const headerRef = useRef(null)\n\n // setup resize observer to show/hide scroll shadows\n useEffect(() => {\n const handleResize = () => {\n if (listElement) {\n const hasOverflowBottom =\n listElement.scrollHeight - listElement.clientHeight >\n listElement.scrollTop + 1\n\n setOverflowBottom(hasOverflowBottom)\n }\n }\n\n const resizeObserver = new ResizeObserver(handleResize)\n resizeObserver.observe(listElement)\n\n return () => resizeObserver.unobserve(listElement)\n }, [listElement, setOverflowBottom])\n\n // evaluate if scroll shadows are needed initially\n useEffect(() => {\n const { scrollTop, scrollHeight, clientHeight } = listElement\n setOverflowTop(scrollTop > 0)\n setOverflowBottom(scrollHeight - clientHeight > scrollTop + 1)\n\n const headerHeight = headerRef?.current?.offsetHeight\n listElement.style.marginTop = `${headerHeight}px`\n\n scrollToBottom()\n }, [listElement])\n\n // setup scroll event listener to show/hide scroll shadows\n useEffect(() => {\n const handleScroll = () => {\n const { scrollTop, scrollHeight, clientHeight } = listElement\n setOverflowTop(scrollTop > 0)\n setOverflowBottom(scrollHeight - clientHeight > scrollTop + 1)\n }\n\n listElement.addEventListener(\"scroll\", handleScroll)\n return () => listElement.removeEventListener(\"scroll\", handleScroll)\n }, [listElement, setOverflowTop, setOverflowBottom])\n\n return { headerRef }\n}\n","import { Icon, StackView, Text, Tooltip } from \"@planningcenter/tapestry-react\"\nimport { top } from \"@popperjs/core\"\nimport React from \"react\"\nimport {\n getReadByTooltipText,\n mapToUserNameOrId,\n MessageStatus,\n useChatContext,\n useMessageContext,\n useTranslationContext,\n} from \"stream-chat-react\"\n\nconst SHARED_TOOLTIP_PROPS = {\n placement: top,\n popoverProps: {\n backgroundColor: \"surface\",\n color: \"foreground\",\n elevation: 2,\n offset: 0,\n paddingHorizontal: 1,\n paddingVertical: 1,\n radius: 6,\n },\n}\n\nconst SHARED_LAYOUT_PROPS = {\n alignment: StackView.CENTER,\n axis: StackView.HORIZONTAL,\n distribution: StackView.CENTER,\n marginRight: 0.5,\n padding: 0.5,\n spacing: 0.5,\n}\n\nexport const CustomMessageStatus = () => {\n return (\n <MessageStatus\n MessageReadStatus={CustomMessageReadStatus}\n MessageDeliveredStatus={CustomMessageDeliveredStatus}\n />\n )\n}\n\nconst CustomMessageDeliveredStatus = () => {\n return (\n <Tooltip title=\"Delivered\" {...SHARED_TOOLTIP_PROPS}>\n <StackView {...SHARED_LAYOUT_PROPS}>\n <Icon name=\"general.check\" />\n </StackView>\n </Tooltip>\n )\n}\n\nconst CustomMessageReadStatus = () => {\n const { client } = useChatContext()\n const { readBy } = useMessageContext(\"MessageStatus\")\n const { t } = useTranslationContext(\"MessageStatus\")\n\n const tooltipTitle = getReadByTooltipText(\n readBy,\n t,\n client,\n mapToUserNameOrId\n )\n\n const justReadByMe = readBy?.length === 1 && readBy[0].id === client.user?.id\n const deliveredAndRead = !!(readBy?.length && !justReadByMe)\n\n const readersWithoutOwnUser = deliveredAndRead\n ? readBy.filter((item) => item.id !== client.user?.id)\n : []\n\n const readByCount = readersWithoutOwnUser.length\n\n return (\n <Tooltip title={tooltipTitle} {...SHARED_TOOLTIP_PROPS}>\n <StackView {...SHARED_LAYOUT_PROPS}>\n <Text size={5} color=\"foregroundSecondary\" shrink={0} userSelect=\"none\">\n {readByCount}\n </Text>\n <Icon name=\"general.checkDouble\" size=\"lg\" />\n </StackView>\n </Tooltip>\n )\n}\n","export var top = 'top';\nexport var bottom = 'bottom';\nexport var right = 'right';\nexport var left = 'left';\nexport var auto = 'auto';\nexport var basePlacements = [top, bottom, right, left];\nexport var start = 'start';\nexport var end = 'end';\nexport var clippingParents = 'clippingParents';\nexport var viewport = 'viewport';\nexport var popper = 'popper';\nexport var reference = 'reference';\nexport var variationPlacements = /*#__PURE__*/basePlacements.reduce(function (acc, placement) {\n return acc.concat([placement + \"-\" + start, placement + \"-\" + end]);\n}, []);\nexport var placements = /*#__PURE__*/[].concat(basePlacements, [auto]).reduce(function (acc, placement) {\n return acc.concat([placement, placement + \"-\" + start, placement + \"-\" + end]);\n}, []); // modifiers that need to read the DOM\n\nexport var beforeRead = 'beforeRead';\nexport var read = 'read';\nexport var afterRead = 'afterRead'; // pure-logic modifiers\n\nexport var beforeMain = 'beforeMain';\nexport var main = 'main';\nexport var afterMain = 'afterMain'; // modifier with the purpose to write to the DOM (or write into a framework state)\n\nexport var beforeWrite = 'beforeWrite';\nexport var write = 'write';\nexport var afterWrite = 'afterWrite';\nexport var modifierPhases = [beforeRead, read, afterRead, beforeMain, main, afterMain, beforeWrite, write, afterWrite];","import React from \"react\"\n\nexport const customReactionOptions = [\n {\n Component: () => <>❤️</>,\n name: \"Love\",\n type: \"heart\",\n },\n {\n Component: () => <>🙏</>,\n name: \"Pray\",\n type: \"pray\",\n },\n {\n Component: () => <>😂</>,\n name: \"Laughing\",\n type: \"laughing\",\n },\n {\n Component: () => <>👍</>,\n name: \"Thumbs up\",\n type: \"+1\",\n },\n {\n Component: () => <>👎</>,\n name: \"Thumbs down\",\n type: \"-1\",\n },\n]\n","import data from \"@emoji-mart/data\"\nimport { init, SearchIndex } from \"emoji-mart\"\n\ninit({ data })\n\nexport const emojiSearchIndex = SearchIndex\n","import {\n Box,\n Button,\n GridView,\n Icon,\n StackView,\n Text,\n} from \"@planningcenter/tapestry-react\"\nimport { nanoid } from \"nanoid\"\nimport React, { useEffect, useRef, useState } from \"react\"\nimport { useDropzone } from \"react-dropzone\"\nimport { UploadButton } from \"react-file-utils\"\nimport {\n AttachmentPreviewList,\n ChatAutoComplete,\n useChannelStateContext,\n useMessageInputContext,\n} from \"stream-chat-react\"\nimport { EmojiPicker } from \"stream-chat-react/emojis\"\n\nimport colors from \"../../../../../colors\"\nimport { getPrimaryButtonStyleOverrides } from \"../../utils\"\n\nexport const MessageInput = () => {\n const {\n handleSubmit,\n isUploadEnabled,\n maxFilesLeft,\n numberOfUploads,\n text,\n uploadNewFiles,\n } = useMessageInputContext()\n const [focused, setFocused] = useState(false)\n\n const { multipleUploads } = useChannelStateContext()\n\n const { getRootProps, isDragActive, isDragReject } = useDropzone({\n disabled: !isUploadEnabled || maxFilesLeft === 0,\n multiple: multipleUploads,\n noClick: true,\n onDrop: uploadNewFiles,\n })\n\n const { isChildOfModal, ref } = useIsChildOfModal()\n const wrapInputRef = useAutoFocus()\n const disabled = !numberOfUploads && !text.length\n\n return (\n <GridView\n alignment=\"end\"\n borderColor=\"separatorTertiary\"\n borderTopWidth={isChildOfModal ? 0 : 1}\n columns=\"auto 1fr auto\"\n innerRef={ref}\n padding={2}\n spacing={1}\n >\n <FileUploadUI\n isUploadEnabled={isUploadEnabled}\n maxFilesLeft={maxFilesLeft}\n multipleUploads={multipleUploads}\n uploadNewFiles={uploadNewFiles}\n />\n <StackView\n {...getRootProps({\n borderColor: \"separatorTertiary\",\n borderWidth: 1,\n className: isChildOfModal ? \"is-modal-child\" : \"\",\n outline: focused ? colors.interaction66 : \"none\",\n outlineOffset: 1,\n outlineStyle: focused ? \"solid\" : \"none\",\n position: \"relative\",\n radius: 8,\n refKey: \"innerRef\",\n })}\n >\n {isDragActive && <DropzoneUI isDragReject={isDragReject} />}\n {isUploadEnabled && !!numberOfUploads && <AttachmentPreviewList />}\n <StackView\n alignment=\"end\"\n axis=\"horizontal\"\n position=\"relative\"\n spacing={0.5}\n >\n <Box grow={1} innerRef={wrapInputRef}>\n <ChatAutoComplete\n placeholder=\"Send a message\"\n onFocus={() => setFocused(true)}\n onBlur={(e) => e.type === \"blur\" && setFocused(false)}\n />\n </Box>\n <Box marginBottom={1.25} marginRight={1}>\n <EmojiPicker\n pickerProps={{ previewPosition: \"none\", theme: \"light\" }}\n />\n </Box>\n </StackView>\n </StackView>\n <Button\n className=\"focus-visible\"\n disabled={disabled}\n icon={{\n color: \"surface\",\n name: \"general.upArrow\",\n }}\n marginBottom=\"10px\"\n onClick={handleSubmit}\n radius=\"circle\"\n size=\"sm\"\n title={isChildOfModal ? \"Save\" : \"Send\"}\n tabIndex={0}\n {...getPrimaryButtonStyleOverrides({ disabled })}\n />\n </GridView>\n )\n}\n\nconst FileUploadUI = ({\n isUploadEnabled,\n maxFilesLeft,\n multipleUploads,\n uploadNewFiles,\n}) => {\n const id = React.useMemo(() => nanoid(), [])\n const inputEl = document.getElementById(id)\n\n const handleKeyDown = (event) => {\n if (inputEl && (event.key === \"Enter\" || event.key === \" \")) {\n event.preventDefault()\n inputEl.click()\n }\n }\n return (\n <Box marginBottom={1.5}>\n <label\n htmlFor={id}\n tabIndex={0}\n onKeyDown={handleKeyDown}\n className=\"str-chat__file-label\"\n >\n <Icon\n color={colors.lightNeutral45}\n css={{\n \"&:active\": { fill: colors.lightNeutral12 },\n \"&:hover\": { fill: colors.lightNeutral24 },\n }}\n cursor=\"pointer\"\n name=\"general.paperclip\"\n size=\"20px\"\n />\n </label>\n <UploadButton\n aria-label=\"File upload\"\n className=\"str-chat__file-input\"\n disabled={!isUploadEnabled || maxFilesLeft === 0}\n id={id}\n multiple={multipleUploads}\n onFileChange={uploadNewFiles}\n />\n </Box>\n )\n}\n\nconst DropzoneUI = ({ isDragReject }) => (\n <StackView\n alignment=\"center\"\n backgroundColor=\"surfaceTertiary\"\n borderColor={isDragReject ? \"error-dark\" : \"success-darker\"}\n borderRadius={8}\n borderStyle=\"dashed\"\n borderWidth={1}\n bottom={0}\n distribution=\"center\"\n left={0}\n position=\"absolute\"\n right={0}\n top={0}\n zIndex={10}\n >\n <Text\n color={isDragReject ? \"error-dark\" : \"success-darker\"}\n size={4}\n weight={600}\n >\n {isDragReject\n ? \"Some of the files will not be accepted\"\n : \"Drop your files here\"}\n </Text>\n </StackView>\n)\n\nconst useIsChildOfModal = () => {\n const [isChildOfModal, setIsChildOfModal] = useState(false)\n const ref = useRef(null)\n\n useEffect(() => {\n const modal = document.querySelector(\".str-chat__modal\")\n setIsChildOfModal(modal?.contains(ref.current))\n }, [])\n\n return { isChildOfModal, ref }\n}\n\nconst useAutoFocus = () => {\n const wrapInputRef = React.useRef(null)\n\n useEffect(() => {\n if (wrapInputRef.current) {\n const input = wrapInputRef.current?.querySelector(\"textarea\")\n input?.focus()\n input?.setSelectionRange(input?.value?.length, input?.value?.length)\n }\n }, [])\n\n return wrapInputRef\n}\n","import { Box, StackView } from \"@planningcenter/tapestry-react\"\nimport React, { Fragment, useEffect, useState } from \"react\"\nimport { logChatPromiseExecution } from \"stream-chat\"\nimport {\n Channel,\n MessageInput as StreamMessageInput,\n MessageList,\n useChatContext,\n Window,\n} from \"stream-chat-react\"\n\nimport { INDICATOR_STYLES } from \"../../../../components/scroll_container\"\nimport { useChat } from \"../../hooks\"\nimport { noop } from \"../../utils\"\nimport { CustomEmptyStateIndicator } from \"./custom_empty_state_indicator\"\nimport { CustomHeader, InjectableCustomHeader } from \"./custom_header\"\nimport { CustomMessageStatus } from \"./custom_message_status\"\nimport { customReactionOptions } from \"./custom_reaction_options\"\nimport { emojiSearchIndex } from \"./emoji_data\"\nimport { MessageInput } from \"./message_input\"\n\nexport const ChannelView = () => {\n const { client, channel } = useChatContext()\n const {\n closeDrawer,\n isChannelViewActive,\n switchToChannelDetailsView,\n switchToChannelListView,\n } = useChat()\n const title = channel?.data?.name || \"Channel name\"\n\n const [, updateCount] = useState(0)\n\n const [overflowTop, setOverflowTop] = useState(false)\n const [overflowBottom, setOverflowBottom] = useState(false)\n\n // force a render when the channel gets updated\n useEffect(() => {\n if (!channel) return noop\n\n const handleUpdate = (event) => {\n const isUpdated = channel && channel.cid === event.cid\n isUpdated && updateCount((c) => c + 1)\n }\n\n client.on(\"channel.updated\", handleUpdate)\n return () => client.off(\"channel.updated\", handleUpdate)\n }, [channel?.cid])\n\n const hasMessages = !!channel?.data?.last_message_at\n\n const sharedProps = {\n channel,\n closeDrawer,\n switchToChannelDetailsView,\n switchToChannelListView,\n title,\n }\n\n const scrollProps = {\n overflowBottom,\n overflowTop,\n setOverflowBottom,\n setOverflowTop,\n }\n\n return (\n <StackView grow={1} shrink={1}>\n <Channel\n Input={MessageInput}\n EditMessageInput={MessageInput}\n emojiSearchIndex={emojiSearchIndex}\n EmptyStateIndicator={CustomEmptyStateIndicator}\n reactionOptions={customReactionOptions}\n doMarkReadRequest={(channel) =>\n isChannelViewActive &&\n logChatPromiseExecution(channel.markRead(), \"mark read\")\n }\n MessageStatus={CustomMessageStatus}\n >\n <Window>\n {hasMessages ? (\n <WithMessages {...sharedProps} {...scrollProps} />\n ) : (\n <NoMessages {...sharedProps} />\n )}\n <Box position=\"relative\">\n {overflowBottom && (\n <Box\n {...INDICATOR_STYLES.bottom}\n bottom=\"unset\"\n height={1}\n left={-1}\n pointerEvents=\"none\"\n position=\"absolute\"\n right={-1}\n role=\"presentation\"\n top={-1}\n zIndex={10}\n />\n )}\n <StreamMessageInput disableMentions={true} grow={true} />\n </Box>\n </Window>\n </Channel>\n </StackView>\n )\n}\n\nconst WithMessages = ({\n channel,\n closeDrawer,\n overflowTop,\n setOverflowBottom,\n setOverflowTop,\n switchToChannelDetailsView,\n switchToChannelListView,\n title,\n}) => (\n <MessageList\n head={\n <Fragment key=\"custom-head\">\n <InjectableCustomHeader\n channel={channel}\n closeDrawer={closeDrawer}\n setOverflowBottom={setOverflowBottom}\n setOverflowTop={setOverflowTop}\n switchToChannelDetailsView={switchToChannelDetailsView}\n switchToChannelListView={switchToChannelListView}\n title={title}\n />\n {overflowTop && (\n <Box\n {...INDICATOR_STYLES.top}\n height={1}\n left={-1}\n pointerEvents=\"none\"\n position=\"absolute\"\n right={-1}\n role=\"presentation\"\n top=\"unset\"\n zIndex={10}\n />\n )}\n </Fragment>\n }\n messageActions={[\"edit\", \"delete\", \"react\"]}\n />\n)\n\nconst NoMessages = ({\n channel,\n closeDrawer,\n switchToChannelDetailsView,\n switchToChannelListView,\n title,\n}) => (\n <>\n <CustomHeader\n channel={channel}\n closeDrawer={closeDrawer}\n switchToChannelDetailsView={switchToChannelDetailsView}\n switchToChannelListView={switchToChannelListView}\n title={title}\n />\n <MessageList messageActions={[\"edit\", \"delete\", \"react\"]} />\n </>\n)\n","import { useSyncExternalStore } from \"use-sync-external-store/shim\"\nimport { createStore } from \"../../store\"\nimport { shallowCompare } from \"../../utils\"\n\ntype PCOMeta = {\n resource?: string\n}\n\nfunction parseValue(element: HTMLMetaElement) {\n const datatype = element.getAttribute(\"datatype\")\n switch (datatype) {\n case \"boolean\":\n return element.content === \"true\" || element.content === \"1\"\n default:\n return element.content\n }\n}\n\nfunction getAllPcoMeta(): PCOMeta {\n const elements = document.head.querySelectorAll<HTMLMetaElement>(\n `meta[property^=\"pco:\"]`\n )\n const meta = {}\n\n elements.forEach((e) => {\n const property = e.getAttribute(\"property\")\n\n meta[property.substring(\"pco:\".length)] = parseValue(e)\n })\n\n return meta\n}\n\nconst store = createStore(getAllPcoMeta())\n\nconst observer = new MutationObserver(() => {\n const prevState = store.getState()\n const nextState = getAllPcoMeta()\n\n if (!shallowCompare(prevState, nextState)) store.setState(nextState)\n})\n\nlet hasTriggeredObserve = false\n\nfunction observe() {\n if (hasTriggeredObserve) return\n\n hasTriggeredObserve = true\n observer.observe(document.head, {\n attributes: true,\n childList: true,\n subtree: true,\n })\n}\n\nexport function usePcoMeta() {\n observe()\n\n return useSyncExternalStore(store.subscribe, () =>\n store.getState()\n ) as PCOMeta\n}\n","import React, { useState } from \"react\"\nimport {\n Box,\n Button,\n Icon,\n Spinner,\n StackView,\n Text,\n} from \"@planningcenter/tapestry-react\"\n\nimport { useChat } from \"../../hooks\"\nimport { Subheading } from \"../ui/subheading\"\nimport { Group, useMyGroups } from \"./hooks/use_my_groups\"\n\nexport const GroupsShortcuts = ({ isActive }: { isActive: boolean }) => {\n const { isLoading, isError, groups } = useMyGroups(isActive)\n const { setFilterValues, switchToNewGroupsChatView } = useChat()\n const [showAll, setShowAll] = useState(false)\n\n const filteredGroups = groups.filter((group) => group.canCreateConversation)\n const MAX_VISIBLE_GROUPS = 5\n const visibleGroups = filteredGroups.slice(\n 0,\n showAll ? undefined : MAX_VISIBLE_GROUPS\n )\n const hasGroupsWithoutChatPermission = groups.length !== filteredGroups.length\n const displayGroupsWithoutChatPermissionDisclaimer =\n hasGroupsWithoutChatPermission &&\n (showAll || filteredGroups.length <= MAX_VISIBLE_GROUPS)\n\n return (\n <StackView>\n <StackView\n axis=\"horizontal\"\n padding={2}\n paddingBottom={1}\n alignment=\"center\"\n spacing={1}\n >\n <Subheading>My groups</Subheading>\n {isLoading && <Spinner size=\"xs\" />}\n </StackView>\n {groups.length === 0 && !isError ? (\n <BlankState />\n ) : (\n <StackView spacing={1.5}>\n <StackView>\n {visibleGroups.map(\n ({\n id,\n name,\n headerImage: { thumbnail },\n membershipsCount,\n }: Group) => (\n <Button\n alignment=\"start\"\n aria-label={`Select ${name}`}\n axis=\"vertical\"\n borderBottomColor=\"separatorTertiary\"\n borderBottomStyle=\"solid\"\n borderBottomWidth={1}\n hover={{ backgroundColor: \"surfaceSecondary\" }}\n key={id}\n paddingHorizontal={2}\n paddingVertical={1}\n spacing={0.25}\n textAlign=\"left\"\n theme={false}\n onClick={() => {\n setFilterValues({\n appName: \"Groups\",\n values: {\n group: { id, name },\n },\n })\n switchToNewGroupsChatView()\n }}\n >\n <StackView axis=\"horizontal\" spacing={1}>\n <img\n alt=\"\"\n src={thumbnail}\n style={{\n borderRadius: \"4px\",\n height: 40,\n width: 75,\n objectFit: \"cover\",\n }}\n />\n <StackView distribution=\"start\" maxWidth=\"250px\">\n <Text lineHeight=\"1.3\" weight={500} truncate>\n {name}\n </Text>\n <Text lineHeight=\"1.3\" weight={300}>\n {membershipsCount}{\" \"}\n {membershipsCount === 1 ? \"member\" : \"members\"}\n </Text>\n </StackView>\n </StackView>\n </Button>\n )\n )}\n </StackView>\n\n {displayGroupsWithoutChatPermissionDisclaimer && (\n <HasGroupsWithoutChatPermission />\n )}\n\n {filteredGroups.length > MAX_VISIBLE_GROUPS && (\n <ToggleGroups\n showAll={showAll}\n onClick={() => setShowAll(!showAll)}\n />\n )}\n\n {isError && <Error />}\n </StackView>\n )}\n </StackView>\n )\n}\n\nconst Error = () => (\n <Box\n backgroundColor=\"error-lighter\"\n marginHorizontal={2}\n padding={2}\n radius={3}\n >\n <StackView axis=\"horizontal\" spacing={1}>\n <Icon name=\"general.exclamationTriangle\" color=\"error\" marginTop={0.5} />\n <Text size={4}>\n There was an issue loading your groups, please refresh and try again.\n </Text>\n </StackView>\n </Box>\n)\n\nconst BlankState = () => (\n <StackView\n axis=\"vertical\"\n alignment=\"center\"\n distribution=\"center\"\n height={20}\n padding={2}\n >\n <Text align=\"center\" color=\"foregroundSecondary\">\n Join a group with chat enabled and permissions to start a new\n conversation.\n </Text>\n </StackView>\n)\n\nconst HasGroupsWithoutChatPermission = () => (\n <StackView alignment=\"center\" distribution=\"center\" paddingHorizontal={2}>\n <Text lineHeight=\"1.3\" size={5}>\n *You have additional groups without chat enabled or permissions to start a\n new conversation.\n </Text>\n </StackView>\n)\n\nconst ToggleGroups = ({\n onClick,\n showAll,\n}: {\n onClick: () => void\n showAll: boolean\n}) => (\n <Button\n variant=\"outline\"\n size=\"sm\"\n onClick={onClick}\n marginLeft=\"auto\"\n marginRight=\"auto\"\n marginBottom={2}\n >\n <Icon\n name={showAll ? \"general.upCaret\" : \"general.downCaret\"}\n size=\"lg\"\n paddingRight={1}\n />\n <Text>View {showAll ? \"fewer\" : \"more\"} groups</Text>\n </Button>\n)\n","import pcURL from \"@planningcenter/url\"\nimport { useCallback, useEffect, useState } from \"react\"\n\nimport apiRequest, { defaultFetch } from \"../../../../../../api_request\"\nimport { usePcoMeta } from \"../../../../../hooks/use_pco_meta\"\n\nexport type Group = {\n id: number\n name: string\n headerImage: { thumbnail: string }\n membershipsCount: number\n canCreateConversation: boolean\n}\n\ninterface Result {\n id: number\n attributes: {\n name: string\n header_image: { thumbnail: string }\n memberships_count: number\n can_create_conversation: boolean\n }\n}\n\nexport function useMyGroups(shouldRunInitialLoad: boolean): {\n groups: Group[]\n hasMore: boolean\n isError: boolean\n isLoading: boolean\n loadMore: () => void\n} {\n const pcoMeta = usePcoMeta()\n const url = `${pcURL(pcoMeta[\"rails-env\"])(\"api\")}/groups/v2/me/groups`\n const params = new URLSearchParams({\n \"fields[Group]\":\n \"name,header_image,memberships_count,can_create_conversation\",\n per_page: \"100\",\n })\n const [nextLink, setNextLink] = useState<string | null>(`${url}?${params}`)\n const [groups, setGroups] = useState<Group[]>([])\n const [isLoading, setIsLoading] = useState(false)\n const [isError, setIsError] = useState<boolean>(false)\n const hasMore = Boolean(nextLink)\n\n const loadGroups = useCallback(() => {\n if (!hasMore) return\n\n setIsLoading(true)\n apiRequest(defaultFetch, nextLink)\n .then(({ json }) => {\n const results = json.data.map(\n (result: Result): Group => ({\n id: result.id,\n name: result.attributes.name,\n headerImage: result.attributes.header_image,\n membershipsCount: result.attributes.memberships_count,\n canCreateConversation: result.attributes.can_create_conversation,\n })\n )\n setGroups((prev) => [...prev, ...results])\n setNextLink(json.links.next || null)\n })\n .catch(() => setIsError(true))\n .finally(() => setIsLoading(false))\n }, [nextLink])\n\n useEffect(() => {\n if (!shouldRunInitialLoad) return\n\n loadGroups()\n }, [shouldRunInitialLoad])\n\n return { groups, hasMore, isError, isLoading, loadMore: loadGroups }\n}\n","import {\n Box,\n Icon,\n Spinner,\n StackView,\n Text,\n} from \"@planningcenter/tapestry-react\"\nimport React from \"react\"\n\nimport { ScrollContainer } from \"../../../../components\"\nimport { ChildNotice } from \"../child_notice\"\nimport { Person } from \"../person_list_item\"\nimport { Subheading } from \"../ui/subheading\"\nimport { useNewGroupChatPeople } from \"./hooks/use_new_group_chat_people\"\n\nexport function People({ groupId }: { groupId: number }) {\n const { isLoading, isError, people, hasMore, totalCount } =\n useNewGroupChatPeople(groupId)\n\n const somePeople = people.length > 0\n const childPeople = people.filter((p) => p.child)\n const someChildPeople = childPeople.length > 0\n\n let title: string\n switch (totalCount) {\n case null:\n case 0:\n title = \"Members\"\n break\n case 1:\n title = \"1 member\"\n break\n default:\n title = `${totalCount} members`\n }\n\n return (\n <>\n <StackView alignment=\"center\" axis=\"horizontal\" spacing={1}>\n <Subheading>{title}</Subheading>\n {isLoading && <Spinner size=\"sm\" />}\n </StackView>\n {isError && <Error />}\n {somePeople && (\n <>\n {someChildPeople && <ChildNotice childPeople={childPeople} />}\n <ScrollContainer>\n <StackView paddingBottom={2} spacing={1.5}>\n {people.map((person) => (\n <Person key={person.id} person={person} />\n ))}\n {hasMore && (\n <Text color=\"foregroundSecondary\">\n and {totalCount - people.length} more...\n </Text>\n )}\n </StackView>\n </ScrollContainer>\n </>\n )}\n </>\n )\n}\n\nconst Error = () => (\n <Box backgroundColor=\"error-lighter\" marginBottom={2} padding={2} radius={3}>\n <StackView axis=\"horizontal\" spacing={1}>\n <Icon name=\"general.exclamationTriangle\" color=\"error\" marginTop={0.5} />\n <Text size={4}>\n There was an issue loading group members, please refresh and try again.\n </Text>\n </StackView>\n </Box>\n)\n","import pcURL from \"@planningcenter/url\"\nimport { useEffect, useState } from \"react\"\n\nimport apiRequest, { defaultFetch } from \"../../../../../../api_request\"\nimport { usePcoMeta } from \"../../../../../hooks/use_pco_meta\"\nimport { ListItemPerson } from \"../../person_list_item\"\n\ninterface Result {\n attributes: { role: string }\n relationships: { person: { data: { id: number } } }\n}\n\ninterface Include {\n id: number\n type: string\n}\n\nexport function useNewGroupChatPeople(groupId: number): {\n hasMore: boolean | null\n isError: boolean\n isLoading: boolean\n people: ListItemPerson[]\n totalCount: number | null\n} {\n const pcoMeta = usePcoMeta()\n const url = `${pcURL(pcoMeta[\"rails-env\"])(\n \"api\"\n )}/groups/v2/me/groups/${groupId}/memberships`\n const params = new URLSearchParams({\n \"fields[Membership]\": \"person,role\",\n \"fields[Person]\": \"avatar_url,child,first_name,last_name\",\n include: \"person\",\n per_page: \"50\",\n })\n const [isLoading, setIsLoading] = useState<boolean>(false)\n const [isError, setIsError] = useState<boolean>(false)\n const [people, setPeople] = useState<ListItemPerson[]>([])\n const [totalCount, setTotalCount] = useState<number | null>(null)\n const hasMore = totalCount === null ? null : totalCount > people.length\n\n const loadMembers = () => {\n setIsLoading(true)\n apiRequest(defaultFetch, `${url}?${params}`)\n .then(({ json }) => {\n const results = json.data.map((result: Result): ListItemPerson => {\n const person = json.included.find(\n (i: Include) =>\n i.type === \"Person\" &&\n i.id === result.relationships.person.data.id\n )\n\n const badges = []\n if (result.attributes.role === \"leader\") {\n badges.push({ title: \"Leader\" })\n }\n if (person.id === pcoMeta[\"current-person-id\"]) {\n badges.push({ title: \"Conversation owner\" })\n }\n\n return {\n avatar: person.attributes.avatar_url,\n badges: badges,\n child: person.attributes.child,\n id: person.id,\n name: `${person.attributes.first_name} ${person.attributes.last_name}`,\n source: [],\n }\n })\n setPeople((prev) => [...prev, ...results])\n setTotalCount(json.meta.total_count)\n })\n .catch(() => setIsError(true))\n .finally(() => setIsLoading(false))\n }\n\n useEffect(() => {\n loadMembers()\n }, [])\n\n return { hasMore, isError, isLoading, people, totalCount }\n}\n","import {\n Button,\n Spinner,\n StackView,\n Text,\n} from \"@planningcenter/tapestry-react\"\nimport React, { useEffect, useState } from \"react\"\n\nimport { Subheading } from \"../ui/subheading\"\nimport { useServicesChatShortcuts } from \"./hooks/use_services_chat_shortcuts\"\n\nconst DEFAULT_SHORTCUT_COUNT = 4\n\nexport const ServicesChatShortcuts = ({\n isActive,\n setFilterValues,\n switchToNewServicesChatView,\n}) => {\n const [showAll, setSetshowAll] = useState(false)\n const { loading, serviceTypeTeams } = useServicesChatShortcuts(isActive)\n\n useEffect(() => {\n if (!isActive) setSetshowAll(false)\n }, [])\n\n const hasMore = serviceTypeTeams.length > DEFAULT_SHORTCUT_COUNT\n\n return (\n <StackView>\n <StackView\n alignment=\"center\"\n axis=\"horizontal\"\n distribution=\"space-between\"\n paddingBottom={1}\n paddingHorizontal={2}\n spacing={1}\n >\n <StackView alignment=\"center\" axis=\"horizontal\" spacing={1}>\n <Subheading>Teams I lead</Subheading>\n {loading && <Spinner size=\"xs\" />}\n </StackView>\n <Button\n icon=\"general.search\"\n marginLeft=\"auto\"\n onClick={switchToNewServicesChatView}\n size=\"sm\"\n title=\"Search all teams\"\n tooltip=\"Search all teams\"\n variant=\"outline\"\n />\n </StackView>\n {serviceTypeTeams.length === 0 ? (\n <NoTeams onClick={switchToNewServicesChatView} />\n ) : (\n <StackView spacing={1.5} paddingBottom={1}>\n <StackView>\n {serviceTypeTeams\n .slice(0, showAll ? undefined : DEFAULT_SHORTCUT_COUNT)\n .map(({ id, name, teams }) => (\n <Button\n alignment=\"start\"\n aria-label={`Select ${name} teams I lead`}\n axis=\"vertical\"\n borderBottomColor=\"separatorTertiary\"\n borderBottomStyle=\"solid\"\n borderBottomWidth={1}\n hover={{ backgroundColor: \"surfaceSecondary\" }}\n key={id}\n paddingHorizontal={2}\n paddingVertical={1}\n spacing={0.25}\n textAlign=\"left\"\n theme={false}\n onClick={() => {\n setFilterValues({\n appName: \"Services\",\n values: {\n plan_id: null,\n teams: teams.map(\n (team: { id: number; name: string }) => ({\n service_type_id: id,\n team_id: team.id,\n })\n ),\n },\n })\n switchToNewServicesChatView()\n }}\n >\n <Text weight={500}>{name}</Text>\n <Text color=\"foregroundSecondary\">\n {teams.map((team) => team.name).join(\", \")}\n </Text>\n </Button>\n ))}\n </StackView>\n {hasMore && (\n <StackView alignment=\"center\">\n <Button\n fontWeight={400}\n iconLeft={{\n name: showAll ? \"general.upCaret\" : \"general.downCaret\",\n }}\n onClick={() => setSetshowAll(!showAll)}\n size=\"xs\"\n title={showAll ? \"Less teams\" : \"Show all teams I lead\"}\n variant=\"outline\"\n />\n </StackView>\n )}\n </StackView>\n )}\n </StackView>\n )\n}\n\nconst NoTeams = ({ onClick }) => (\n <StackView\n alignment=\"center\"\n axis=\"vertical\"\n distribution=\"center\"\n height={20}\n padding={2}\n spacing={1}\n >\n <Text color=\"foregroundSecondary\">You don't lead any teams.</Text>\n <Button fontWeight={400} onClick={onClick} size=\"sm\" variant=\"outline\">\n Browse teams\n </Button>\n </StackView>\n)\n","import { useEffect, useMemo, useState } from \"react\"\n\nimport { useChatApi } from \"../../../hooks\"\n\ntype ServiceTypeTeamData = {\n service_type: {\n id: number\n name: string\n }\n team: {\n id: number\n name: string\n }\n}[]\n\ntype ServiceTypeTeams = {\n id: number\n name: string\n teams: {\n id: number\n name: string\n }[]\n}\n\nexport const useServicesChatShortcuts = (\n isActive: boolean\n): {\n loading: boolean\n serviceTypeTeams: ServiceTypeTeams[]\n} => {\n const [data, setData] = useState<ServiceTypeTeamData>([])\n const [loading, setLoading] = useState(false)\n\n const api = useChatApi()\n\n useEffect(() => {\n if (!isActive) return\n\n setLoading(true)\n api.services\n .get(\"chat\", { fields: { Chat: \"teams_i_lead\" } })\n .then(({ teams_i_lead }) => {\n const data: ServiceTypeTeamData = teams_i_lead.map(\n ({ value, service_type_name, team_name }) => ({\n service_type: {\n id: value.service_type_id,\n name: service_type_name,\n },\n team: {\n id: value.team_id,\n name: team_name,\n },\n })\n )\n setData(data)\n })\n .finally(() => setLoading(false))\n }, [isActive])\n\n const serviceTypeTeams = useMemo(() => {\n return data.reduce(\n (acc: ServiceTypeTeams[], { service_type, team }: any) => {\n let serviceTypeEntry = acc.find((entry) => entry.id === service_type.id)\n\n if (!serviceTypeEntry) {\n serviceTypeEntry = {\n id: service_type.id,\n name: service_type.name,\n teams: [],\n }\n acc.push(serviceTypeEntry)\n }\n\n serviceTypeEntry.teams.push(team)\n return acc\n },\n []\n )\n }, [data])\n\n return { loading, serviceTypeTeams }\n}\n","import { Button, StackView } from \"@planningcenter/tapestry-react\"\nimport React from \"react\"\n\nimport { default as themeColors } from \"../../../../colors\"\nimport { DrawerHeading, ScrollContainer } from \"../../../components\"\nimport { useChat } from \"../hooks\"\nimport { GroupsShortcuts } from \"./groups\"\nimport { ServicesChatShortcuts } from \"./services/service_chat_shortcuts\"\n\nexport const NewChatShortcutsView = () => {\n const {\n isNewChatShortcutsViewActive,\n setFilterValues,\n switchToNewServicesChatView,\n switchToChannelListView,\n } = useChat()\n\n return (\n <>\n <StackView\n alignment=\"center\"\n axis=\"horizontal\"\n spacing={1}\n padding={2}\n paddingTop={1}\n >\n <Button\n icon={{\n color: themeColors.lightNeutral12,\n name: \"general.leftChevron\",\n }}\n marginTop={0.25}\n onClick={switchToChannelListView}\n size=\"md\"\n title=\"Back to to conversation list\"\n tooltip=\"Back to conversations list\"\n variant=\"naked\"\n />\n <DrawerHeading>New conversation</DrawerHeading>\n </StackView>\n <ScrollContainer>\n <ServicesChatShortcuts\n isActive={isNewChatShortcutsViewActive}\n setFilterValues={setFilterValues}\n switchToNewServicesChatView={switchToNewServicesChatView}\n />\n <GroupsShortcuts isActive={isNewChatShortcutsViewActive} />\n </ScrollContainer>\n </>\n )\n}\n","import {\n Button,\n Divider,\n StackView,\n Text,\n} from \"@planningcenter/tapestry-react\"\nimport React from \"react\"\n\nimport { getPrimaryButtonStyleOverrides } from \"../../utils\"\n\nexport const NewChatViewFooter = ({\n text,\n buttonDisabled,\n showSpinner,\n onButtonClick,\n}: {\n buttonDisabled: boolean\n onButtonClick: () => void\n showSpinner: boolean\n text: string\n}) => (\n <>\n <Divider />\n <StackView grow={0} marginHorizontal=\"auto\" padding={2} spacing={2}>\n <Text align=\"center\" size={5} color=\"foregroundSecondary\">\n {text}\n </Text>\n\n <Button\n aria-label=\"Start conversation\"\n disabled={buttonDisabled}\n onClick={onButtonClick}\n {...getPrimaryButtonStyleOverrides({\n disabled: buttonDisabled,\n spinner: showSpinner,\n })}\n >\n Start conversation\n </Button>\n </StackView>\n </>\n)\n","import { Button, StackView } from \"@planningcenter/tapestry-react\"\nimport React from \"react\"\n\nimport { default as themeColors } from \"../../../../../colors\"\nimport { DrawerHeading } from \"../../../../components\"\nimport { useChat } from \"../../hooks\"\n\nexport const NewChatViewHeader = () => {\n const { switchToNewChatShortcutsView } = useChat()\n\n return (\n <StackView\n alignment=\"center\"\n axis=\"horizontal\"\n spacing={1}\n padding={2}\n paddingTop={1}\n >\n <Button\n icon={{\n color: themeColors.lightNeutral12,\n name: \"general.leftChevron\",\n }}\n marginTop={0.25}\n onClick={switchToNewChatShortcutsView}\n size=\"md\"\n title=\"Back to to new conversation shortcuts\"\n tooltip=\"Back to to new conversation shortcuts\"\n variant=\"naked\"\n />\n <DrawerHeading>New conversation</DrawerHeading>\n </StackView>\n )\n}\n","import {\n Box,\n Divider,\n Icon,\n Input,\n StackView,\n Text,\n} from \"@planningcenter/tapestry-react\"\nimport React, { useState } from \"react\"\n\nimport { ColorAppIcon } from \"../../../../color_app_icon\"\nimport { useChat, useChatApi } from \"../hooks\"\nimport { People } from \"./groups\"\nimport { NewChatViewFooter, NewChatViewHeader } from \"./new_chat_view\"\n\nexport const NewGroupsChatView = () => {\n const [title, setTitle] = useState(\"\")\n const [isCreating, setIsCreating] = useState(false)\n const [isError, setIsError] = useState(false)\n const api = useChatApi()\n const { filterValues, findAndSwitchToChannel } = useChat()\n const group = filterValues?.Groups?.group\n\n if (!group) return null\n\n const createConversation = () => {\n setIsCreating(true)\n return api.groups\n .post(`me/groups/${group.id}/chat_conversation_payload`, { title })\n .then(({ value: payload }: { value: string }) =>\n api.chat.post(\"me/conversations\", { payload })\n )\n .catch(() => setIsError(true))\n .finally(() => setIsCreating(false))\n }\n\n return (\n <>\n <NewChatViewHeader />\n <StackView grow={1}>\n <StackView spacing={2} padding={2} paddingTop={0}>\n <StackView axis=\"horizontal\" alignment=\"center\" spacing={1}>\n <Text weight={600}>To:</Text>\n <ColorAppIcon appName=\"Groups\" />\n <Text wrap={false} truncate>\n {group.name}\n </Text>\n </StackView>\n <StackView spacing={1}>\n <Input.InputLabel controls=\"title\">Title</Input.InputLabel>\n <Input\n id=\"title\"\n placeholder=\"Topic of conversation... (required)\"\n required\n onChange={(e) => setTitle(e.target.value)}\n />\n </StackView>\n </StackView>\n <Divider />\n <StackView grow={1} padding={2} paddingBottom={0} spacing={1}>\n <People groupId={group.id} />\n </StackView>\n </StackView>\n {isError && <Error />}\n <NewChatViewFooter\n text=\"Conversation will be automatically updated if any people are added or removed from the group.\"\n showSpinner={isCreating}\n buttonDisabled={title.trim().length === 0}\n onButtonClick={() =>\n createConversation()\n .then(findAndSwitchToChannel)\n .then(() => setTitle(\"\"))\n }\n />\n </>\n )\n}\n\nconst Error = () => (\n <Box\n backgroundColor=\"error-lighter\"\n marginHorizontal={2}\n marginBottom={2}\n padding={2}\n radius={3}\n >\n <StackView axis=\"horizontal\" spacing={1}>\n <Icon name=\"general.exclamationTriangle\" color=\"error\" marginTop={0.5} />\n <Text size={4}>\n There was an issue starting the conversation, please try again.\n </Text>\n </StackView>\n </Box>\n)\n","export const NEW_SERVICES_CHAT_FOOTER_TEXT =\n \"Conversation will be automatically updated if any people are added or removed from a team.\"\n","import { Spinner, StackView, Text } from \"@planningcenter/tapestry-react\"\nimport React from \"react\"\n\nimport { ScrollContainer } from \"../../../../components\"\nimport { ChildNotice } from \"../child_notice\"\nimport { NewChatViewFooter } from \"../new_chat_view\"\nimport { Person } from \"../person_list_item\"\nimport { Subheading } from \"../ui/subheading\"\nimport { NEW_SERVICES_CHAT_FOOTER_TEXT } from \"./constants\"\nimport { useChatPeople } from \"./hooks\"\n\nexport const People = ({ filter }) => {\n const { people, createChat, isCreating, isFetching } = useChatPeople(filter)\n\n const somePeople = people.length > 0\n const peopleCount = people.length\n const childPeople = people.filter((p) => p.child)\n const someChildPeople = childPeople.length > 0\n\n let title: string\n switch (peopleCount) {\n case 0:\n title = \"People selected\"\n break\n case 1:\n title = \"1 person selected\"\n break\n default:\n title = `${peopleCount} people selected`\n }\n\n return (\n <StackView grow={1}>\n <StackView grow={1} padding={2} paddingBottom={0} spacing={1}>\n <StackView alignment=\"center\" axis=\"horizontal\" spacing={1}>\n <Subheading>{title}</Subheading>\n {isFetching && <Spinner size=\"sm\" />}\n </StackView>\n {somePeople ? (\n <>\n {someChildPeople && <ChildNotice childPeople={childPeople} />}\n <ScrollContainer>\n <StackView paddingBottom={2} spacing={1.5}>\n {people.map((person) => (\n <Person key={person.id} person={person} />\n ))}\n </StackView>\n </ScrollContainer>\n </>\n ) : (\n <StackView alignment=\"center\" grow={1} maxHeight={18}>\n <Text color=\"foregroundSecondary\">No Results</Text>\n </StackView>\n )}\n </StackView>\n <NewChatViewFooter\n text={NEW_SERVICES_CHAT_FOOTER_TEXT}\n showSpinner={isCreating}\n buttonDisabled={!somePeople}\n onButtonClick={createChat}\n />\n </StackView>\n )\n}\n","import { useEffect, useMemo, useRef,useState } from \"react\"\n\nimport { useChat, useChatApi } from \"../../../hooks\"\n\ninterface Source {\n id: number,\n type: string\n}\n\nexport interface Person {\n avatar: string | null\n badges: Record<string, string>[]\n child: boolean\n id: number\n name: string\n source: Source[]\n}\n\ninterface FilterParams {\n plan_id?: number,\n team_id: Array<number>\n}\n\ntype PeopleCache = {\n [key: string]: Person[]\n}\n\ninterface ChatPeople {\n createChat: () => void,\n isCreating: boolean,\n isFetching: boolean,\n people: Person[]\n}\n\nexport const useChatPeople = (filter): ChatPeople => {\n const [people, setPeople] = useState([])\n const [isCreating, setCreating] = useState(false)\n const [isFetching, setFetching] = useState(false)\n const cache = useRef<PeopleCache>({})\n\n const { findAndSwitchToChannel } = useChat()\n const api = useChatApi()\n\n const filterParams = useMemo(() => {\n const params: FilterParams = {\n team_id: filter.teams.map(({ team_id }) => team_id).sort(),\n }\n\n if (filter.plan_id) {\n params.plan_id = filter.plan_id\n }\n\n return params\n }, [filter])\n\n useEffect(() => {\n const getPeople = async (params) => {\n const key = JSON.stringify(params)\n const people =\n cache.current[key] ||\n (await fetchPeople(params).then((data) => data.people))\n\n cache.current[key] = people\n\n setPeople(people)\n }\n\n const fetchPeople = async (params) => {\n setFetching(true)\n const result = await api.services.get(\"chat\", {\n fields: { Chat: \"people\" },\n ...params,\n })\n setFetching(false)\n\n return result\n }\n\n getPeople(filterParams)\n }, [filterParams])\n\n return {\n createChat: async () => {\n setCreating(true)\n const { payload } = await api.services.get(\"chat\", {\n fields: { Chat: \"payload\" },\n ...filterParams,\n })\n api.chat.post(\"me/conversations\", { payload }).then(findAndSwitchToChannel)\n },\n isCreating,\n isFetching,\n people,\n }\n}\n","import {\n Icon,\n Select,\n Spinner,\n StackView,\n Text,\n ToggleSwitch,\n} from \"@planningcenter/tapestry-react\"\nimport React, { useEffect, useMemo, useState } from \"react\"\n\nimport { useChatApi } from \"../../hooks\"\nimport { ServicesFilterValues } from \"../../hooks/use_chat_filter\"\nimport { Subheading } from \"../ui/subheading\"\nimport { ServicesFilterProps } from \"./services_chat_options\"\n\nconst toSelectOptions = ({ value, name }) => ({ label: name, value })\n\nexport const Plans = ({ onChange, isActive, values }: ServicesFilterProps) => {\n const [options, setOptions] = useState({})\n const [isEnabled, setEnabled] = useState(false)\n const [fetchingCount, setFetchingCount] = useState(0)\n const api = useChatApi()\n\n const isFetchable = isActive && isEnabled\n const isInvalid = !isActive && values.teams.length > 0\n\n useEffect(() => {\n if (isActive) return\n\n setEnabled(false)\n }, [isActive])\n\n useEffect(() => {\n if (!isFetchable) return\n\n values.teams.forEach(({ team_id }) => {\n if (options[team_id]) return\n\n setFetchingCount((c) => c + 1)\n\n api.services\n .get(\"chat\", { fields: { Chat: \"plans\" }, team_id })\n .then(({ plans }) => {\n setOptions((prevOptions) => ({ ...prevOptions, [team_id]: plans }))\n setFetchingCount((c) => c - 1)\n })\n })\n }, [values.teams, isFetchable])\n\n const availableOptions = useMemo(() => {\n const uniqOptions = values.teams.reduce(\n (acc, { team_id }) =>\n options[team_id]\n ? {\n ...acc,\n ...options[team_id].reduce(\n (obj, option) => ({\n ...obj,\n [option.value]: option,\n }),\n {}\n ),\n }\n : acc,\n {}\n )\n\n return Object.values(uniqOptions).map(toSelectOptions)\n }, [values.teams, options])\n\n return (\n <StackView spacing={1}>\n <StackView axis=\"horizontal\" alignItems=\"center\" spacing={1}>\n <StackView\n alignItems=\"center\"\n axis=\"horizontal\"\n marginRight=\"auto\"\n spacing={1}\n >\n <Subheading>Filter by plan</Subheading>\n {fetchingCount > 0 && <Spinner size=\"xs\" />}\n </StackView>\n <ToggleSwitch\n ariaLabel=\"Filter by plan\"\n disabled={!isActive}\n isChecked={isEnabled}\n onClick={() => {\n setEnabled((e) => !e)\n onChange({\n appName: \"Services\",\n values: (prev: ServicesFilterValues) => ({\n ...prev,\n plan_id: null,\n }),\n })\n }}\n />\n </StackView>\n {isEnabled ? (\n <Select\n id=\"filter-by-plan-select\"\n value={values.plan_id}\n defaultValue={null}\n emptyValue={\n availableOptions.length ? \"Choose a plan\" : \"No plans available\"\n }\n disabled={availableOptions.length < 1}\n options={availableOptions}\n onChange={({ value }) =>\n onChange({\n appName: \"Services\",\n values: (prev: ServicesFilterValues) => ({\n ...prev,\n plan_id: value,\n }),\n })\n }\n />\n ) : isInvalid ? (\n <StackView\n axis=\"horizontal\"\n alignItems=\"center\"\n spacing={2}\n padding={2}\n >\n <Icon\n color=\"foregroundSecondary\"\n name=\"general.exclamationTriangle\"\n size=\"lg\"\n />\n <Text size={5} color=\"foregroundSecondary\">\n Plan filtering is not possible using teams from multiple service\n types. Try choosing teams above with only one service type.\n </Text>\n </StackView>\n ) : null}\n </StackView>\n )\n}\n","export default function _extends() {\n _extends = Object.assign ? Object.assign.bind() : function (target) {\n for (var i = 1; i < arguments.length; i++) {\n var source = arguments[i];\n for (var key in source) {\n if (Object.prototype.hasOwnProperty.call(source, key)) {\n target[key] = source[key];\n }\n }\n }\n return target;\n };\n return _extends.apply(this, arguments);\n}","var characterMap = {\r\n\t\"À\": \"A\",\r\n\t\"Á\": \"A\",\r\n\t\"Â\": \"A\",\r\n\t\"Ã\": \"A\",\r\n\t\"Ä\": \"A\",\r\n\t\"Å\": \"A\",\r\n\t\"Ấ\": \"A\",\r\n\t\"Ắ\": \"A\",\r\n\t\"Ẳ\": \"A\",\r\n\t\"Ẵ\": \"A\",\r\n\t\"Ặ\": \"A\",\r\n\t\"Æ\": \"AE\",\r\n\t\"Ầ\": \"A\",\r\n\t\"Ằ\": \"A\",\r\n\t\"Ȃ\": \"A\",\r\n\t\"Ç\": \"C\",\r\n\t\"Ḉ\": \"C\",\r\n\t\"È\": \"E\",\r\n\t\"É\": \"E\",\r\n\t\"Ê\": \"E\",\r\n\t\"Ë\": \"E\",\r\n\t\"Ế\": \"E\",\r\n\t\"Ḗ\": \"E\",\r\n\t\"Ề\": \"E\",\r\n\t\"Ḕ\": \"E\",\r\n\t\"Ḝ\": \"E\",\r\n\t\"Ȇ\": \"E\",\r\n\t\"Ì\": \"I\",\r\n\t\"Í\": \"I\",\r\n\t\"Î\": \"I\",\r\n\t\"Ï\": \"I\",\r\n\t\"Ḯ\": \"I\",\r\n\t\"Ȋ\": \"I\",\r\n\t\"Ð\": \"D\",\r\n\t\"Ñ\": \"N\",\r\n\t\"Ò\": \"O\",\r\n\t\"Ó\": \"O\",\r\n\t\"Ô\": \"O\",\r\n\t\"Õ\": \"O\",\r\n\t\"Ö\": \"O\",\r\n\t\"Ø\": \"O\",\r\n\t\"Ố\": \"O\",\r\n\t\"Ṍ\": \"O\",\r\n\t\"Ṓ\": \"O\",\r\n\t\"Ȏ\": \"O\",\r\n\t\"Ù\": \"U\",\r\n\t\"Ú\": \"U\",\r\n\t\"Û\": \"U\",\r\n\t\"Ü\": \"U\",\r\n\t\"Ý\": \"Y\",\r\n\t\"à\": \"a\",\r\n\t\"á\": \"a\",\r\n\t\"â\": \"a\",\r\n\t\"ã\": \"a\",\r\n\t\"ä\": \"a\",\r\n\t\"å\": \"a\",\r\n\t\"ấ\": \"a\",\r\n\t\"ắ\": \"a\",\r\n\t\"ẳ\": \"a\",\r\n\t\"ẵ\": \"a\",\r\n\t\"ặ\": \"a\",\r\n\t\"æ\": \"ae\",\r\n\t\"ầ\": \"a\",\r\n\t\"ằ\": \"a\",\r\n\t\"ȃ\": \"a\",\r\n\t\"ç\": \"c\",\r\n\t\"ḉ\": \"c\",\r\n\t\"è\": \"e\",\r\n\t\"é\": \"e\",\r\n\t\"ê\": \"e\",\r\n\t\"ë\": \"e\",\r\n\t\"ế\": \"e\",\r\n\t\"ḗ\": \"e\",\r\n\t\"ề\": \"e\",\r\n\t\"ḕ\": \"e\",\r\n\t\"ḝ\": \"e\",\r\n\t\"ȇ\": \"e\",\r\n\t\"ì\": \"i\",\r\n\t\"í\": \"i\",\r\n\t\"î\": \"i\",\r\n\t\"ï\": \"i\",\r\n\t\"ḯ\": \"i\",\r\n\t\"ȋ\": \"i\",\r\n\t\"ð\": \"d\",\r\n\t\"ñ\": \"n\",\r\n\t\"ò\": \"o\",\r\n\t\"ó\": \"o\",\r\n\t\"ô\": \"o\",\r\n\t\"õ\": \"o\",\r\n\t\"ö\": \"o\",\r\n\t\"ø\": \"o\",\r\n\t\"ố\": \"o\",\r\n\t\"ṍ\": \"o\",\r\n\t\"ṓ\": \"o\",\r\n\t\"ȏ\": \"o\",\r\n\t\"ù\": \"u\",\r\n\t\"ú\": \"u\",\r\n\t\"û\": \"u\",\r\n\t\"ü\": \"u\",\r\n\t\"ý\": \"y\",\r\n\t\"ÿ\": \"y\",\r\n\t\"Ā\": \"A\",\r\n\t\"ā\": \"a\",\r\n\t\"Ă\": \"A\",\r\n\t\"ă\": \"a\",\r\n\t\"Ą\": \"A\",\r\n\t\"ą\": \"a\",\r\n\t\"Ć\": \"C\",\r\n\t\"ć\": \"c\",\r\n\t\"Ĉ\": \"C\",\r\n\t\"ĉ\": \"c\",\r\n\t\"Ċ\": \"C\",\r\n\t\"ċ\": \"c\",\r\n\t\"Č\": \"C\",\r\n\t\"č\": \"c\",\r\n\t\"C̆\": \"C\",\r\n\t\"c̆\": \"c\",\r\n\t\"Ď\": \"D\",\r\n\t\"ď\": \"d\",\r\n\t\"Đ\": \"D\",\r\n\t\"đ\": \"d\",\r\n\t\"Ē\": \"E\",\r\n\t\"ē\": \"e\",\r\n\t\"Ĕ\": \"E\",\r\n\t\"ĕ\": \"e\",\r\n\t\"Ė\": \"E\",\r\n\t\"ė\": \"e\",\r\n\t\"Ę\": \"E\",\r\n\t\"ę\": \"e\",\r\n\t\"Ě\": \"E\",\r\n\t\"ě\": \"e\",\r\n\t\"Ĝ\": \"G\",\r\n\t\"Ǵ\": \"G\",\r\n\t\"ĝ\": \"g\",\r\n\t\"ǵ\": \"g\",\r\n\t\"Ğ\": \"G\",\r\n\t\"ğ\": \"g\",\r\n\t\"Ġ\": \"G\",\r\n\t\"ġ\": \"g\",\r\n\t\"Ģ\": \"G\",\r\n\t\"ģ\": \"g\",\r\n\t\"Ĥ\": \"H\",\r\n\t\"ĥ\": \"h\",\r\n\t\"Ħ\": \"H\",\r\n\t\"ħ\": \"h\",\r\n\t\"Ḫ\": \"H\",\r\n\t\"ḫ\": \"h\",\r\n\t\"Ĩ\": \"I\",\r\n\t\"ĩ\": \"i\",\r\n\t\"Ī\": \"I\",\r\n\t\"ī\": \"i\",\r\n\t\"Ĭ\": \"I\",\r\n\t\"ĭ\": \"i\",\r\n\t\"Į\": \"I\",\r\n\t\"į\": \"i\",\r\n\t\"İ\": \"I\",\r\n\t\"ı\": \"i\",\r\n\t\"IJ\": \"IJ\",\r\n\t\"ij\": \"ij\",\r\n\t\"Ĵ\": \"J\",\r\n\t\"ĵ\": \"j\",\r\n\t\"Ķ\": \"K\",\r\n\t\"ķ\": \"k\",\r\n\t\"Ḱ\": \"K\",\r\n\t\"ḱ\": \"k\",\r\n\t\"K̆\": \"K\",\r\n\t\"k̆\": \"k\",\r\n\t\"Ĺ\": \"L\",\r\n\t\"ĺ\": \"l\",\r\n\t\"Ļ\": \"L\",\r\n\t\"ļ\": \"l\",\r\n\t\"Ľ\": \"L\",\r\n\t\"ľ\": \"l\",\r\n\t\"Ŀ\": \"L\",\r\n\t\"ŀ\": \"l\",\r\n\t\"Ł\": \"l\",\r\n\t\"ł\": \"l\",\r\n\t\"Ḿ\": \"M\",\r\n\t\"ḿ\": \"m\",\r\n\t\"M̆\": \"M\",\r\n\t\"m̆\": \"m\",\r\n\t\"Ń\": \"N\",\r\n\t\"ń\": \"n\",\r\n\t\"Ņ\": \"N\",\r\n\t\"ņ\": \"n\",\r\n\t\"Ň\": \"N\",\r\n\t\"ň\": \"n\",\r\n\t\"ʼn\": \"n\",\r\n\t\"N̆\": \"N\",\r\n\t\"n̆\": \"n\",\r\n\t\"Ō\": \"O\",\r\n\t\"ō\": \"o\",\r\n\t\"Ŏ\": \"O\",\r\n\t\"ŏ\": \"o\",\r\n\t\"Ő\": \"O\",\r\n\t\"ő\": \"o\",\r\n\t\"Œ\": \"OE\",\r\n\t\"œ\": \"oe\",\r\n\t\"P̆\": \"P\",\r\n\t\"p̆\": \"p\",\r\n\t\"Ŕ\": \"R\",\r\n\t\"ŕ\": \"r\",\r\n\t\"Ŗ\": \"R\",\r\n\t\"ŗ\": \"r\",\r\n\t\"Ř\": \"R\",\r\n\t\"ř\": \"r\",\r\n\t\"R̆\": \"R\",\r\n\t\"r̆\": \"r\",\r\n\t\"Ȓ\": \"R\",\r\n\t\"ȓ\": \"r\",\r\n\t\"Ś\": \"S\",\r\n\t\"ś\": \"s\",\r\n\t\"Ŝ\": \"S\",\r\n\t\"ŝ\": \"s\",\r\n\t\"Ş\": \"S\",\r\n\t\"Ș\": \"S\",\r\n\t\"ș\": \"s\",\r\n\t\"ş\": \"s\",\r\n\t\"Š\": \"S\",\r\n\t\"š\": \"s\",\r\n\t\"Ţ\": \"T\",\r\n\t\"ţ\": \"t\",\r\n\t\"ț\": \"t\",\r\n\t\"Ț\": \"T\",\r\n\t\"Ť\": \"T\",\r\n\t\"ť\": \"t\",\r\n\t\"Ŧ\": \"T\",\r\n\t\"ŧ\": \"t\",\r\n\t\"T̆\": \"T\",\r\n\t\"t̆\": \"t\",\r\n\t\"Ũ\": \"U\",\r\n\t\"ũ\": \"u\",\r\n\t\"Ū\": \"U\",\r\n\t\"ū\": \"u\",\r\n\t\"Ŭ\": \"U\",\r\n\t\"ŭ\": \"u\",\r\n\t\"Ů\": \"U\",\r\n\t\"ů\": \"u\",\r\n\t\"Ű\": \"U\",\r\n\t\"ű\": \"u\",\r\n\t\"Ų\": \"U\",\r\n\t\"ų\": \"u\",\r\n\t\"Ȗ\": \"U\",\r\n\t\"ȗ\": \"u\",\r\n\t\"V̆\": \"V\",\r\n\t\"v̆\": \"v\",\r\n\t\"Ŵ\": \"W\",\r\n\t\"ŵ\": \"w\",\r\n\t\"Ẃ\": \"W\",\r\n\t\"ẃ\": \"w\",\r\n\t\"X̆\": \"X\",\r\n\t\"x̆\": \"x\",\r\n\t\"Ŷ\": \"Y\",\r\n\t\"ŷ\": \"y\",\r\n\t\"Ÿ\": \"Y\",\r\n\t\"Y̆\": \"Y\",\r\n\t\"y̆\": \"y\",\r\n\t\"Ź\": \"Z\",\r\n\t\"ź\": \"z\",\r\n\t\"Ż\": \"Z\",\r\n\t\"ż\": \"z\",\r\n\t\"Ž\": \"Z\",\r\n\t\"ž\": \"z\",\r\n\t\"ſ\": \"s\",\r\n\t\"ƒ\": \"f\",\r\n\t\"Ơ\": \"O\",\r\n\t\"ơ\": \"o\",\r\n\t\"Ư\": \"U\",\r\n\t\"ư\": \"u\",\r\n\t\"Ǎ\": \"A\",\r\n\t\"ǎ\": \"a\",\r\n\t\"Ǐ\": \"I\",\r\n\t\"ǐ\": \"i\",\r\n\t\"Ǒ\": \"O\",\r\n\t\"ǒ\": \"o\",\r\n\t\"Ǔ\": \"U\",\r\n\t\"ǔ\": \"u\",\r\n\t\"Ǖ\": \"U\",\r\n\t\"ǖ\": \"u\",\r\n\t\"Ǘ\": \"U\",\r\n\t\"ǘ\": \"u\",\r\n\t\"Ǚ\": \"U\",\r\n\t\"ǚ\": \"u\",\r\n\t\"Ǜ\": \"U\",\r\n\t\"ǜ\": \"u\",\r\n\t\"Ứ\": \"U\",\r\n\t\"ứ\": \"u\",\r\n\t\"Ṹ\": \"U\",\r\n\t\"ṹ\": \"u\",\r\n\t\"Ǻ\": \"A\",\r\n\t\"ǻ\": \"a\",\r\n\t\"Ǽ\": \"AE\",\r\n\t\"ǽ\": \"ae\",\r\n\t\"Ǿ\": \"O\",\r\n\t\"ǿ\": \"o\",\r\n\t\"Þ\": \"TH\",\r\n\t\"þ\": \"th\",\r\n\t\"Ṕ\": \"P\",\r\n\t\"ṕ\": \"p\",\r\n\t\"Ṥ\": \"S\",\r\n\t\"ṥ\": \"s\",\r\n\t\"X́\": \"X\",\r\n\t\"x́\": \"x\",\r\n\t\"Ѓ\": \"Г\",\r\n\t\"ѓ\": \"г\",\r\n\t\"Ќ\": \"К\",\r\n\t\"ќ\": \"к\",\r\n\t\"A̋\": \"A\",\r\n\t\"a̋\": \"a\",\r\n\t\"E̋\": \"E\",\r\n\t\"e̋\": \"e\",\r\n\t\"I̋\": \"I\",\r\n\t\"i̋\": \"i\",\r\n\t\"Ǹ\": \"N\",\r\n\t\"ǹ\": \"n\",\r\n\t\"Ồ\": \"O\",\r\n\t\"ồ\": \"o\",\r\n\t\"Ṑ\": \"O\",\r\n\t\"ṑ\": \"o\",\r\n\t\"Ừ\": \"U\",\r\n\t\"ừ\": \"u\",\r\n\t\"Ẁ\": \"W\",\r\n\t\"ẁ\": \"w\",\r\n\t\"Ỳ\": \"Y\",\r\n\t\"ỳ\": \"y\",\r\n\t\"Ȁ\": \"A\",\r\n\t\"ȁ\": \"a\",\r\n\t\"Ȅ\": \"E\",\r\n\t\"ȅ\": \"e\",\r\n\t\"Ȉ\": \"I\",\r\n\t\"ȉ\": \"i\",\r\n\t\"Ȍ\": \"O\",\r\n\t\"ȍ\": \"o\",\r\n\t\"Ȑ\": \"R\",\r\n\t\"ȑ\": \"r\",\r\n\t\"Ȕ\": \"U\",\r\n\t\"ȕ\": \"u\",\r\n\t\"B̌\": \"B\",\r\n\t\"b̌\": \"b\",\r\n\t\"Č̣\": \"C\",\r\n\t\"č̣\": \"c\",\r\n\t\"Ê̌\": \"E\",\r\n\t\"ê̌\": \"e\",\r\n\t\"F̌\": \"F\",\r\n\t\"f̌\": \"f\",\r\n\t\"Ǧ\": \"G\",\r\n\t\"ǧ\": \"g\",\r\n\t\"Ȟ\": \"H\",\r\n\t\"ȟ\": \"h\",\r\n\t\"J̌\": \"J\",\r\n\t\"ǰ\": \"j\",\r\n\t\"Ǩ\": \"K\",\r\n\t\"ǩ\": \"k\",\r\n\t\"M̌\": \"M\",\r\n\t\"m̌\": \"m\",\r\n\t\"P̌\": \"P\",\r\n\t\"p̌\": \"p\",\r\n\t\"Q̌\": \"Q\",\r\n\t\"q̌\": \"q\",\r\n\t\"Ř̩\": \"R\",\r\n\t\"ř̩\": \"r\",\r\n\t\"Ṧ\": \"S\",\r\n\t\"ṧ\": \"s\",\r\n\t\"V̌\": \"V\",\r\n\t\"v̌\": \"v\",\r\n\t\"W̌\": \"W\",\r\n\t\"w̌\": \"w\",\r\n\t\"X̌\": \"X\",\r\n\t\"x̌\": \"x\",\r\n\t\"Y̌\": \"Y\",\r\n\t\"y̌\": \"y\",\r\n\t\"A̧\": \"A\",\r\n\t\"a̧\": \"a\",\r\n\t\"B̧\": \"B\",\r\n\t\"b̧\": \"b\",\r\n\t\"Ḑ\": \"D\",\r\n\t\"ḑ\": \"d\",\r\n\t\"Ȩ\": \"E\",\r\n\t\"ȩ\": \"e\",\r\n\t\"Ɛ̧\": \"E\",\r\n\t\"ɛ̧\": \"e\",\r\n\t\"Ḩ\": \"H\",\r\n\t\"ḩ\": \"h\",\r\n\t\"I̧\": \"I\",\r\n\t\"i̧\": \"i\",\r\n\t\"Ɨ̧\": \"I\",\r\n\t\"ɨ̧\": \"i\",\r\n\t\"M̧\": \"M\",\r\n\t\"m̧\": \"m\",\r\n\t\"O̧\": \"O\",\r\n\t\"o̧\": \"o\",\r\n\t\"Q̧\": \"Q\",\r\n\t\"q̧\": \"q\",\r\n\t\"U̧\": \"U\",\r\n\t\"u̧\": \"u\",\r\n\t\"X̧\": \"X\",\r\n\t\"x̧\": \"x\",\r\n\t\"Z̧\": \"Z\",\r\n\t\"z̧\": \"z\",\r\n};\r\n\r\nvar chars = Object.keys(characterMap).join('|');\r\nvar allAccents = new RegExp(chars, 'g');\r\nvar firstAccent = new RegExp(chars, '');\r\n\r\nvar removeAccents = function(string) {\t\r\n\treturn string.replace(allAccents, function(match) {\r\n\t\treturn characterMap[match];\r\n\t});\r\n};\r\n\r\nvar hasAccents = function(string) {\r\n\treturn !!string.match(firstAccent);\r\n};\r\n\r\nmodule.exports = removeAccents;\r\nmodule.exports.has = hasAccents;\r\nmodule.exports.remove = removeAccents;\r\n","import _extends from '@babel/runtime/helpers/esm/extends';\nimport removeAccents from 'remove-accents';\n\nvar rankings = {\n CASE_SENSITIVE_EQUAL: 7,\n EQUAL: 6,\n STARTS_WITH: 5,\n WORD_STARTS_WITH: 4,\n CONTAINS: 3,\n ACRONYM: 2,\n MATCHES: 1,\n NO_MATCH: 0\n};\nmatchSorter.rankings = rankings;\n\nvar defaultBaseSortFn = function defaultBaseSortFn(a, b) {\n return String(a.rankedValue).localeCompare(String(b.rankedValue));\n};\n/**\n * Takes an array of items and a value and returns a new array with the items that match the given value\n * @param {Array} items - the items to sort\n * @param {String} value - the value to use for ranking\n * @param {Object} options - Some options to configure the sorter\n * @return {Array} - the new sorted array\n */\n\n\nfunction matchSorter(items, value, options) {\n if (options === void 0) {\n options = {};\n }\n\n var _options = options,\n keys = _options.keys,\n _options$threshold = _options.threshold,\n threshold = _options$threshold === void 0 ? rankings.MATCHES : _options$threshold,\n _options$baseSort = _options.baseSort,\n baseSort = _options$baseSort === void 0 ? defaultBaseSortFn : _options$baseSort,\n _options$sorter = _options.sorter,\n sorter = _options$sorter === void 0 ? function (matchedItems) {\n return matchedItems.sort(function (a, b) {\n return sortRankedValues(a, b, baseSort);\n });\n } : _options$sorter;\n var matchedItems = items.reduce(reduceItemsToRanked, []);\n return sorter(matchedItems).map(function (_ref) {\n var item = _ref.item;\n return item;\n });\n\n function reduceItemsToRanked(matches, item, index) {\n var rankingInfo = getHighestRanking(item, keys, value, options);\n var rank = rankingInfo.rank,\n _rankingInfo$keyThres = rankingInfo.keyThreshold,\n keyThreshold = _rankingInfo$keyThres === void 0 ? threshold : _rankingInfo$keyThres;\n\n if (rank >= keyThreshold) {\n matches.push(_extends({}, rankingInfo, {\n item: item,\n index: index\n }));\n }\n\n return matches;\n }\n}\n/**\n * Gets the highest ranking for value for the given item based on its values for the given keys\n * @param {*} item - the item to rank\n * @param {Array} keys - the keys to get values from the item for the ranking\n * @param {String} value - the value to rank against\n * @param {Object} options - options to control the ranking\n * @return {{rank: Number, keyIndex: Number, keyThreshold: Number}} - the highest ranking\n */\n\n\nfunction getHighestRanking(item, keys, value, options) {\n if (!keys) {\n // if keys is not specified, then we assume the item given is ready to be matched\n var stringItem = item;\n return {\n // ends up being duplicate of 'item' in matches but consistent\n rankedValue: stringItem,\n rank: getMatchRanking(stringItem, value, options),\n keyIndex: -1,\n keyThreshold: options.threshold\n };\n }\n\n var valuesToRank = getAllValuesToRank(item, keys);\n return valuesToRank.reduce(function (_ref2, _ref3, i) {\n var rank = _ref2.rank,\n rankedValue = _ref2.rankedValue,\n keyIndex = _ref2.keyIndex,\n keyThreshold = _ref2.keyThreshold;\n var itemValue = _ref3.itemValue,\n attributes = _ref3.attributes;\n var newRank = getMatchRanking(itemValue, value, options);\n var newRankedValue = rankedValue;\n var minRanking = attributes.minRanking,\n maxRanking = attributes.maxRanking,\n threshold = attributes.threshold;\n\n if (newRank < minRanking && newRank >= rankings.MATCHES) {\n newRank = minRanking;\n } else if (newRank > maxRanking) {\n newRank = maxRanking;\n }\n\n if (newRank > rank) {\n rank = newRank;\n keyIndex = i;\n keyThreshold = threshold;\n newRankedValue = itemValue;\n }\n\n return {\n rankedValue: newRankedValue,\n rank: rank,\n keyIndex: keyIndex,\n keyThreshold: keyThreshold\n };\n }, {\n rankedValue: item,\n rank: rankings.NO_MATCH,\n keyIndex: -1,\n keyThreshold: options.threshold\n });\n}\n/**\n * Gives a rankings score based on how well the two strings match.\n * @param {String} testString - the string to test against\n * @param {String} stringToRank - the string to rank\n * @param {Object} options - options for the match (like keepDiacritics for comparison)\n * @returns {Number} the ranking for how well stringToRank matches testString\n */\n\n\nfunction getMatchRanking(testString, stringToRank, options) {\n testString = prepareValueForComparison(testString, options);\n stringToRank = prepareValueForComparison(stringToRank, options); // too long\n\n if (stringToRank.length > testString.length) {\n return rankings.NO_MATCH;\n } // case sensitive equals\n\n\n if (testString === stringToRank) {\n return rankings.CASE_SENSITIVE_EQUAL;\n } // Lower casing before further comparison\n\n\n testString = testString.toLowerCase();\n stringToRank = stringToRank.toLowerCase(); // case insensitive equals\n\n if (testString === stringToRank) {\n return rankings.EQUAL;\n } // starts with\n\n\n if (testString.startsWith(stringToRank)) {\n return rankings.STARTS_WITH;\n } // word starts with\n\n\n if (testString.includes(\" \" + stringToRank)) {\n return rankings.WORD_STARTS_WITH;\n } // contains\n\n\n if (testString.includes(stringToRank)) {\n return rankings.CONTAINS;\n } else if (stringToRank.length === 1) {\n // If the only character in the given stringToRank\n // isn't even contained in the testString, then\n // it's definitely not a match.\n return rankings.NO_MATCH;\n } // acronym\n\n\n if (getAcronym(testString).includes(stringToRank)) {\n return rankings.ACRONYM;\n } // will return a number between rankings.MATCHES and\n // rankings.MATCHES + 1 depending on how close of a match it is.\n\n\n return getClosenessRanking(testString, stringToRank);\n}\n/**\n * Generates an acronym for a string.\n *\n * @param {String} string the string for which to produce the acronym\n * @returns {String} the acronym\n */\n\n\nfunction getAcronym(string) {\n var acronym = '';\n var wordsInString = string.split(' ');\n wordsInString.forEach(function (wordInString) {\n var splitByHyphenWords = wordInString.split('-');\n splitByHyphenWords.forEach(function (splitByHyphenWord) {\n acronym += splitByHyphenWord.substr(0, 1);\n });\n });\n return acronym;\n}\n/**\n * Returns a score based on how spread apart the\n * characters from the stringToRank are within the testString.\n * A number close to rankings.MATCHES represents a loose match. A number close\n * to rankings.MATCHES + 1 represents a tighter match.\n * @param {String} testString - the string to test against\n * @param {String} stringToRank - the string to rank\n * @returns {Number} the number between rankings.MATCHES and\n * rankings.MATCHES + 1 for how well stringToRank matches testString\n */\n\n\nfunction getClosenessRanking(testString, stringToRank) {\n var matchingInOrderCharCount = 0;\n var charNumber = 0;\n\n function findMatchingCharacter(matchChar, string, index) {\n for (var j = index, J = string.length; j < J; j++) {\n var stringChar = string[j];\n\n if (stringChar === matchChar) {\n matchingInOrderCharCount += 1;\n return j + 1;\n }\n }\n\n return -1;\n }\n\n function getRanking(spread) {\n var spreadPercentage = 1 / spread;\n var inOrderPercentage = matchingInOrderCharCount / stringToRank.length;\n var ranking = rankings.MATCHES + inOrderPercentage * spreadPercentage;\n return ranking;\n }\n\n var firstIndex = findMatchingCharacter(stringToRank[0], testString, 0);\n\n if (firstIndex < 0) {\n return rankings.NO_MATCH;\n }\n\n charNumber = firstIndex;\n\n for (var i = 1, I = stringToRank.length; i < I; i++) {\n var matchChar = stringToRank[i];\n charNumber = findMatchingCharacter(matchChar, testString, charNumber);\n var found = charNumber > -1;\n\n if (!found) {\n return rankings.NO_MATCH;\n }\n }\n\n var spread = charNumber - firstIndex;\n return getRanking(spread);\n}\n/**\n * Sorts items that have a rank, index, and keyIndex\n * @param {Object} a - the first item to sort\n * @param {Object} b - the second item to sort\n * @return {Number} -1 if a should come first, 1 if b should come first, 0 if equal\n */\n\n\nfunction sortRankedValues(a, b, baseSort) {\n var aFirst = -1;\n var bFirst = 1;\n var aRank = a.rank,\n aKeyIndex = a.keyIndex;\n var bRank = b.rank,\n bKeyIndex = b.keyIndex;\n var same = aRank === bRank;\n\n if (same) {\n if (aKeyIndex === bKeyIndex) {\n // use the base sort function as a tie-breaker\n return baseSort(a, b);\n } else {\n return aKeyIndex < bKeyIndex ? aFirst : bFirst;\n }\n } else {\n return aRank > bRank ? aFirst : bFirst;\n }\n}\n/**\n * Prepares value for comparison by stringifying it, removing diacritics (if specified)\n * @param {String} value - the value to clean\n * @param {Object} options - {keepDiacritics: whether to remove diacritics}\n * @return {String} the prepared value\n */\n\n\nfunction prepareValueForComparison(value, _ref4) {\n var keepDiacritics = _ref4.keepDiacritics;\n // value might not actually be a string at this point (we don't get to choose)\n // so part of preparing the value for comparison is ensure that it is a string\n value = \"\" + value; // toString\n\n if (!keepDiacritics) {\n value = removeAccents(value);\n }\n\n return value;\n}\n/**\n * Gets value for key in item at arbitrarily nested keypath\n * @param {Object} item - the item\n * @param {Object|Function} key - the potentially nested keypath or property callback\n * @return {Array} - an array containing the value(s) at the nested keypath\n */\n\n\nfunction getItemValues(item, key) {\n if (typeof key === 'object') {\n key = key.key;\n }\n\n var value;\n\n if (typeof key === 'function') {\n value = key(item);\n } else if (item == null) {\n value = null;\n } else if (Object.hasOwnProperty.call(item, key)) {\n value = item[key];\n } else if (key.includes('.')) {\n // eslint-disable-next-line @typescript-eslint/no-unsafe-call\n return getNestedValues(key, item);\n } else {\n value = null;\n } // because `value` can also be undefined\n\n\n if (value == null) {\n return [];\n }\n\n if (Array.isArray(value)) {\n return value;\n }\n\n return [String(value)];\n}\n/**\n * Given path: \"foo.bar.baz\"\n * And item: {foo: {bar: {baz: 'buzz'}}}\n * -> 'buzz'\n * @param path a dot-separated set of keys\n * @param item the item to get the value from\n */\n\n\nfunction getNestedValues(path, item) {\n var keys = path.split('.');\n var values = [item];\n\n for (var i = 0, I = keys.length; i < I; i++) {\n var nestedKey = keys[i];\n var nestedValues = [];\n\n for (var j = 0, J = values.length; j < J; j++) {\n var nestedItem = values[j];\n if (nestedItem == null) continue;\n\n if (Object.hasOwnProperty.call(nestedItem, nestedKey)) {\n var nestedValue = nestedItem[nestedKey];\n\n if (nestedValue != null) {\n nestedValues.push(nestedValue);\n }\n } else if (nestedKey === '*') {\n // ensure that values is an array\n nestedValues = nestedValues.concat(nestedItem);\n }\n }\n\n values = nestedValues;\n }\n\n if (Array.isArray(values[0])) {\n // keep allowing the implicit wildcard for an array of strings at the end of\n // the path; don't use `.flat()` because that's not available in node.js v10\n var result = [];\n return result.concat.apply(result, values);\n } // Based on our logic it should be an array of strings by now...\n // assuming the user's path terminated in strings\n\n\n return values;\n}\n/**\n * Gets all the values for the given keys in the given item and returns an array of those values\n * @param item - the item from which the values will be retrieved\n * @param keys - the keys to use to retrieve the values\n * @return objects with {itemValue, attributes}\n */\n\n\nfunction getAllValuesToRank(item, keys) {\n var allValues = [];\n\n for (var j = 0, J = keys.length; j < J; j++) {\n var key = keys[j];\n var attributes = getKeyAttributes(key);\n var itemValues = getItemValues(item, key);\n\n for (var i = 0, I = itemValues.length; i < I; i++) {\n allValues.push({\n itemValue: itemValues[i],\n attributes: attributes\n });\n }\n }\n\n return allValues;\n}\n\nvar defaultKeyAttributes = {\n maxRanking: Infinity,\n minRanking: -Infinity\n};\n/**\n * Gets all the attributes for the given key\n * @param key - the key from which the attributes will be retrieved\n * @return object containing the key's attributes\n */\n\nfunction getKeyAttributes(key) {\n if (typeof key === 'string') {\n return defaultKeyAttributes;\n }\n\n return _extends({}, defaultKeyAttributes, key);\n}\n/*\neslint\n no-continue: \"off\",\n*/\n\nexport { defaultBaseSortFn, matchSorter, rankings };\n","import { matchSorter } from \"match-sorter\"\n\nimport { TeamOptionGroups, TeamOptions } from \"../types\"\n\nconst teamOptionSort = (a, b) => {\n const [x, aService, aTeam] = a.order\n const [y, bService, bTeam] = b.order\n\n return x - y || aService.localeCompare(bService) || aTeam.localeCompare(bTeam)\n}\n\nexport const groupTeamOptions = (\n options: TeamOptions,\n searchTerm: string\n): TeamOptionGroups =>\n matchSorter(options, searchTerm, {\n keys: [\"name\"],\n threshold: matchSorter.rankings.CONTAINS,\n })\n .sort(teamOptionSort)\n .reduce((acc, option) => {\n acc[option.group] ||= []\n acc[option.group].push(option)\n return acc\n }, {})\n","import {\n Badge,\n Button,\n Combobox,\n Icon,\n Input,\n Menu,\n Spinner,\n StackView,\n Text,\n WrapView,\n} from \"@planningcenter/tapestry-react\"\nimport React, { useEffect, useRef, useState } from \"react\"\n\nimport { ServicesFilterValues } from \"../../hooks/use_chat_filter\"\nimport { SUBHEADING_STYLES } from \"../ui/subheading\"\nimport { useTeamOptions } from \"./hooks\"\nimport { ServicesFilterProps } from \"./services_chat_options\"\nimport { groupTeamOptions } from \"./utils\"\n\nconst SELECT_ALL_LIMIT = 10\n\nconst getGroupDisplayName = (groupName: string) =>\n groupName\n .split(\"_\")\n .map((word, i) => {\n if (word.toLowerCase() === \"i\") return \"I\"\n return i === 0\n ? word.charAt(0).toUpperCase() + word.slice(1).toLowerCase()\n : word.toLowerCase()\n })\n .join(\" \")\n\nexport const Teams = ({ values, onChange, isActive }: ServicesFilterProps) => {\n const [searchTerm, setSearchTerm] = useState(\"\")\n const [selected, unselected, isLoading] = useTeamOptions(values, isActive)\n\n const ref = useRef<typeof Combobox.Popover>()\n\n let index = 0\n\n const isSelectAll = { teams_i_lead: true }\n\n const unselectedGroups = groupTeamOptions(unselected, searchTerm)\n\n // temp cleanup since switch view seems to be rendering everything not just what is visible\n useEffect(() => {\n if (!isActive) {\n setSearchTerm(\"\")\n }\n }, [isActive])\n\n const groups = Object.entries(unselectedGroups)\n\n return (\n <StackView spacing={1}>\n <StackView axis=\"horizontal\" alignItems=\"center\" spacing={1}>\n <Input.InputLabel controls=\"teams\" {...SUBHEADING_STYLES}>\n Teams\n </Input.InputLabel>\n {isLoading && <Spinner size=\"xs\" />}\n </StackView>\n <StackView spacing={1}>\n {selected.length > 0 && (\n <WrapView spacing={1}>\n {selected.map((option) => (\n <Badge\n key={option.value.team_id}\n renderRight={\n <Button\n title=\"remove\"\n icon={{ name: \"general.x\", size: \"xs\" }}\n theme=\"naked\"\n onClick={() =>\n onChange({\n appName: \"Services\",\n values: (prev: ServicesFilterValues) => ({\n ...prev,\n teams: prev.teams.filter(\n ({ team_id }) => team_id !== option.value.team_id\n ),\n }),\n })\n }\n />\n }\n size=\"sm\"\n title={option.name}\n />\n ))}\n </WrapView>\n )}\n <Combobox.Popover\n ref={ref}\n id=\"teams\"\n openOnFocus={true}\n closeOnSelect={true}\n onClear={() => setSearchTerm(\"\")}\n onChange={(e) => setSearchTerm(e.target.value)}\n onSelect={({ value }) =>\n onChange({\n appName: \"Services\",\n values: (prev: ServicesFilterValues) => ({\n ...prev,\n teams: [...prev.teams, value],\n }),\n })\n }\n placeholder=\"Search teams\"\n renderLeft={<Icon name=\"general.search\" />}\n value={searchTerm}\n >\n {groups.length ? (\n groups.map(([groupName, groupOptions], idx) => {\n const groupDisplayName = getGroupDisplayName(groupName)\n const items = groupOptions.map((option) => (\n <Combobox.Item key={index} index={index++} value={option}>\n <Text truncate>{option.name}</Text>\n </Combobox.Item>\n ))\n\n const tooManyOptionsForSelectAll =\n groupOptions.length > SELECT_ALL_LIMIT\n\n return Object.keys(unselectedGroups).length > 1 ? (\n <StackView key={groupName} marginTop={idx > 0 ? 1.5 : 0}>\n <StackView axis=\"horizontal\">\n <Menu.Item>\n <Text weight={600}>{groupDisplayName}</Text>\n </Menu.Item>\n {isSelectAll[groupName] && (\n <StackView padding={1} marginLeft=\"auto\">\n <Button\n disabled={tooManyOptionsForSelectAll}\n fontWeight={400}\n onClick={(e) => {\n onChange({\n appName: \"Services\",\n values: (prev) => ({\n ...prev,\n teams: [\n ...prev.teams,\n ...groupOptions.map((option) => option.value),\n ],\n }),\n })\n ref.current && ref.current.handleBlur(e)\n }}\n size={\"xs\" as never}\n theme=\"primary\"\n title=\"Select all\"\n tooltip={{\n popoverProps: { zIndex: 10000 },\n title: tooManyOptionsForSelectAll\n ? `Disabled when options would exceed ${SELECT_ALL_LIMIT}`\n : `select all in \"${groupDisplayName}\"`,\n }}\n variant=\"naked\"\n />\n </StackView>\n )}\n </StackView>\n {items}\n </StackView>\n ) : (\n items\n )\n })\n ) : (\n <Menu.Item>\n <Text>\n No matching teams for:{\" \"}\n <Text as=\"span\" inline italic>\n {`\"${searchTerm}\"`}\n </Text>\n </Text>\n </Menu.Item>\n )}\n </Combobox.Popover>\n </StackView>\n </StackView>\n )\n}\n","import { useEffect, useState } from \"react\"\n\nimport { useChatApi } from \"../../../hooks\"\nimport { TeamOptions } from \"../types\"\n\nexport const useTeamOptions = (\n values,\n isActive\n): [TeamOptions, TeamOptions, Boolean] => {\n const [options, setOptions] = useState([])\n const [isLoading, setLoading] = useState(false)\n\n const api = useChatApi()\n\n useEffect(() => {\n if (!isActive) return\n\n setLoading(true)\n\n api.services\n .get(\"chat\", { fields: { Chat: \"teams\" } })\n .then(({ teams }) => setOptions(teams))\n .finally(() => setLoading(false))\n }, [isActive])\n\n const [selected, unselected] = options.reduce(\n (acc, option) => {\n const isSelected = values.teams.some(\n ({ team_id }) => team_id === option.value.team_id\n )\n acc[isSelected ? 0 : 1].push(option)\n\n return acc\n },\n [[], []]\n )\n\n return [selected, unselected, isLoading]\n}\n","import { StackView, Text } from \"@planningcenter/tapestry-react\"\nimport React from \"react\"\n\nimport { Subheading } from \"../ui/subheading\"\n\nexport const PeopleBlankState = () => (\n <StackView grow={1}>\n <StackView alignItems=\"center\" axis=\"horizontal\" padding={2} spacing={1}>\n <Subheading>People selected</Subheading>\n </StackView>\n <StackView alignment=\"center\" grow={1} maxHeight={18} padding={2}>\n <Text color=\"foreground\" align=\"center\" size={4}>\n Search teams above to add people to the chat.\n </Text>\n </StackView>\n </StackView>\n)\n","import { Divider, StackView } from \"@planningcenter/tapestry-react\"\nimport React from \"react\"\n\nimport {\n ServicesFilterValues,\n SetFilterValuesFn,\n} from \"../../hooks/use_chat_filter\"\nimport { noop } from \"../../utils\"\nimport { NewChatViewFooter } from \"../new_chat_view\"\nimport { People, Plans, Teams } from \".\"\nimport { NEW_SERVICES_CHAT_FOOTER_TEXT } from \"./constants\"\nimport { useServicesChatFilter } from \"./hooks\"\nimport { PeopleBlankState } from \"./people_blank_state\"\n\nexport interface ServicesFilterProps {\n isActive: boolean\n onChange: SetFilterValuesFn\n values: ServicesFilterValues\n}\n\nexport const ServicesChatOptions = ({ isActive }) => {\n const { filterValues, setFilterValues, isFiltering, isPlansActive } =\n useServicesChatFilter(isActive)\n\n return (\n <StackView grow={1}>\n <StackView spacing={2} padding={2} paddingTop={0}>\n <Teams\n values={filterValues}\n onChange={setFilterValues}\n isActive={isActive}\n />\n <Plans\n values={filterValues}\n onChange={setFilterValues}\n isActive={isPlansActive}\n />\n </StackView>\n <Divider />\n {isFiltering ? (\n <People filter={filterValues} />\n ) : (\n <>\n <PeopleBlankState />\n <NewChatViewFooter\n text={NEW_SERVICES_CHAT_FOOTER_TEXT}\n buttonDisabled={true}\n showSpinner={false}\n onButtonClick={noop}\n />\n </>\n )}\n </StackView>\n )\n}\n","import { useEffect, useMemo } from \"react\"\n\nimport { useChat } from \"../../../hooks\"\nimport {\n SERVICES_INITIAL_VALUES,\n ServicesFilterValues,\n} from \"../../../hooks/use_chat_filter\"\n\nexport const useServicesChatFilter = (isActive: boolean) => {\n const { filterValues, setFilterValues } = useChat()\n const { Services } = filterValues\n\n useEffect(() => {\n setFilterValues({\n appName: \"Services\",\n values: isActive\n ? (prev: ServicesFilterValues) => prev\n : SERVICES_INITIAL_VALUES,\n })\n }, [isActive])\n\n const isPlansActive = useMemo(() => {\n const [first, ...rest] = Services.teams\n return (\n Boolean(first) &&\n rest.every(\n ({ service_type_id }) => service_type_id === first.service_type_id\n )\n )\n }, [Services.teams])\n\n useEffect(() => {\n if (isPlansActive) return\n\n setFilterValues({\n appName: \"Services\",\n values: (prev) => ({ ...prev, plan_id: null }),\n })\n }, [isPlansActive])\n\n const isFiltering = Services.teams.length > 0\n\n return { filterValues: Services, isFiltering, isPlansActive, setFilterValues }\n}\n","import React from \"react\"\n\nimport { useChat } from \"../hooks\"\nimport { NewChatViewHeader } from \"./new_chat_view\"\nimport { ServicesChatOptions } from \"./services/services_chat_options\"\n\nexport const NewServicesChatView = () => {\n const { isNewServicesChatViewActive } = useChat()\n\n return (\n <>\n <NewChatViewHeader />\n <ServicesChatOptions isActive={isNewServicesChatViewActive} />\n </>\n )\n}\n","import { Spinner, StackView } from \"@planningcenter/tapestry-react\"\nimport React, { useEffect } from \"react\"\nimport { Chat as StreamChat, useChatContext } from \"stream-chat-react\"\n\nimport { DrawerHeader, DrawerHeading, SwitchView } from \"../../components\"\nimport { ToolbarTool, ToolbarToolProps } from \"../../types\"\nimport { ChatApiProvider } from \"./chat_api_context\"\nimport { ChatProvider } from \"./chat_context\"\nimport {\n ChannelDetailsView,\n ChannelListView,\n ChannelView,\n NewChatShortcutsView,\n NewServicesChatView,\n NewGroupsChatView,\n} from \"./components\"\nimport { BetaBadge } from \"./components/beta_badge\"\nimport { useChatFilter, useClient } from \"./hooks\"\n\nconst ChatController = ({ closeDrawer, children }) => {\n const { client, channel, setActiveChannel } = useChatContext()\n const { filterValues, setFilterValues } = useChatFilter()\n\n const [actionsOpenForChannel, setActionsOpenForChannel] =\n React.useState(false)\n const [activeIndex, setActiveIndex] = React.useState(0)\n\n const switchToChannelListView = () => setActiveIndex(0)\n const switchToNewChatShortcutsView = () => setActiveIndex(1)\n const switchToNewServicesChatView = () => setActiveIndex(2)\n const switchToNewGroupsChatView = () => setActiveIndex(3)\n const switchToChannelView = () => setActiveIndex(4)\n const switchToChannelDetailsView = () => setActiveIndex(5)\n\n const findAndSwitchToChannel = async ({ stream_channel_id: id }) => {\n const [channel] = await client.queryChannels({ id: { $eq: id } })\n\n if (!channel) return\n\n setActiveChannel(channel)\n switchToChannelView()\n }\n\n const isChannelListViewActive = activeIndex === 0\n const isNewChatShortcutsViewActive = activeIndex === 1\n const isNewServicesChatViewActive = activeIndex === 2\n const isNewGroupsChatViewActive = activeIndex === 3\n const isChannelViewActive = activeIndex === 4\n const isChannelDetailsViewActive = activeIndex === 5\n\n useEffect(() => {\n if (isChannelListViewActive && channel) {\n setActiveChannel(null)\n }\n }, [channel, isChannelListViewActive])\n\n return (\n <ChatProvider\n value={{\n actionsOpenForChannel,\n closeDrawer,\n filterValues,\n findAndSwitchToChannel,\n isChannelDetailsViewActive,\n isChannelViewActive,\n isNewChatShortcutsViewActive,\n isNewServicesChatViewActive,\n isNewGroupsChatViewActive,\n setActionsOpenForChannel,\n setFilterValues,\n switchToChannelDetailsView,\n switchToChannelListView,\n switchToChannelView,\n switchToNewChatShortcutsView,\n switchToNewServicesChatView,\n switchToNewGroupsChatView,\n }}\n >\n <SwitchView activeIndex={activeIndex}>{children}</SwitchView>\n </ChatProvider>\n )\n}\n\nconst ChatTool = ({\n appName,\n closeDrawer,\n env,\n chatStreamUser,\n userId: currentPersonId,\n}: ToolbarToolProps & { chatStreamUser: any }) => {\n const chatClient = useClient(chatStreamUser)\n\n return chatClient ? (\n <ChatComponent\n chatClient={chatClient}\n closeDrawer={closeDrawer}\n env={env}\n appName={appName}\n currentPersonId={currentPersonId}\n />\n ) : (\n <DrawerHeader closeDrawer={closeDrawer}>\n <StackView alignment=\"center\" axis=\"horizontal\" spacing={1}>\n <DrawerHeading>Chat</DrawerHeading>\n <BetaBadge />\n <Spinner\n color=\"hsl(0 0% 62%)\"\n thickness={2}\n trackColor=\"hsl(0 0% 97%)\"\n />\n </StackView>\n </DrawerHeader>\n )\n}\n\nconst ChatComponent = ({\n chatClient,\n closeDrawer,\n env,\n appName,\n currentPersonId,\n}) => {\n return (\n <StreamChat client={chatClient} theme=\"str-chat__theme-light\">\n <ChatApiProvider env={env}>\n <ChatController closeDrawer={closeDrawer}>\n <ChannelListView\n closeDrawer={closeDrawer}\n client={chatClient}\n env={env}\n appName={appName}\n currentPersonId={currentPersonId}\n />\n <NewChatShortcutsView />\n <NewServicesChatView />\n <NewGroupsChatView />\n <ChannelView />\n <ChannelDetailsView />\n </ChatController>\n </ChatApiProvider>\n </StreamChat>\n )\n}\n\nconst Chat: ToolbarTool = {\n component: ChatTool,\n icons: {\n active: \"general.textMessage\",\n static: \"general.outlinedTextMessage\",\n },\n name: \"Chat\",\n}\n\nexport { Chat }\n","import React from \"react\"\nimport { StreamChat } from \"stream-chat\"\n\nimport { StreamChatGenerics } from '../types'\nimport { noop } from \"../utils\"\n\nexport const useClient = streamUser => {\n const [chatClient, setChatClient] = React.useState<StreamChat<StreamChatGenerics> | null>(null)\n\n React.useEffect(() => {\n if (!streamUser) return noop\n\n // prevents application from setting stale client (user changed, for example)\n let didUserConnectInterrupt = false\n\n const client = new StreamChat<StreamChatGenerics>(streamUser.api_key)\n\n const connectionPromise = client\n .connectUser({ id: streamUser.id }, streamUser.tokenProvider)\n .then(() => {\n if (!didUserConnectInterrupt) setChatClient(client)\n })\n\n return () => {\n didUserConnectInterrupt = true\n setChatClient(null)\n // wait for connection to finish before initiating closing sequence\n connectionPromise\n .then(() => client.disconnectUser())\n .then(() => {\n console.log(\"connection closed\")\n })\n }\n }, [streamUser?.id, streamUser?.api_key])\n\n return chatClient\n}\n","import {\n Combobox,\n Divider,\n Icon,\n Logo,\n StackView,\n Text,\n} from \"@planningcenter/tapestry-react\"\nimport React from \"react\"\nimport { useHits, useSearchBox } from \"react-instantsearch\"\n\ntype Hit = {\n body_safe: string\n category: {\n id: string\n title: string\n }\n comments_disabled: boolean\n created_at_iso: string\n edited_at: number\n edited_at_iso: string\n id: string\n label_names: string[]\n locale: {\n locale: string\n name: string\n rtl: boolean\n }\n objectID: string\n outdated: boolean\n position: number\n promoted: boolean\n section: {\n full_path: string\n id: string\n title: string\n user_segment: string\n }\n title: string\n updated_at: number\n updated_at_iso: string\n user_segment: string\n vote_sum: number\n}\n\nconst handleSearchSelect = (hit: Hit, indexName: string) => {\n const appName = indexName.split(\"_\")[1]\n const zendeskUrl = `https://${appName}.zendesk.com/hc/${hit.locale.locale}/articles/${hit.id}`\n\n const newTab = window.open(zendeskUrl, \"_blank\")\n if (newTab) {\n newTab.focus()\n }\n}\n\nconst HeadingIcon = ({\n sectionName,\n currentAppName,\n}: {\n currentAppName: string\n sectionName: string\n}) => {\n const lowerCaseSectionName = sectionName.toLowerCase()\n if (\n lowerCaseSectionName === \"account information\" ||\n lowerCaseSectionName === \"recent updates\"\n ) {\n return (\n <Icon\n name={\n lowerCaseSectionName === \"account information\"\n ? \"general.cogPerson\"\n : \"general.outlinedGenericFile\"\n }\n color=\"foregroundSecondary\"\n />\n )\n } else if (currentAppName === \"Accounts\") {\n return <Icon name=\"general.cog\" color=\"foregroundSecondary\" />\n } else {\n return (\n <StackView width={2} height={2}>\n <Logo\n name={\n currentAppName\n .toLowerCase()\n .replace(/[\\s]/, \"-\") as keyof typeof Logo\n }\n size=\"sm\"\n theme=\"color\"\n markOnly={true}\n />\n </StackView>\n )\n }\n}\n\nconst HitResult = ({ hit, index }: { hit: Hit; index: number }) => {\n return (\n <Combobox.Item\n key={hit.objectID}\n index={index}\n value={hit}\n paddingVertical={1}\n >\n <Text color=\"neutralDarker\" size={4} whiteSpace=\"normal\">\n {hit.title}\n </Text>\n </Combobox.Item>\n )\n}\n\nexport const CustomSearchBox = ({\n currentAppName,\n indexName,\n}: {\n currentAppName: string\n indexName: string\n}) => {\n const { query, refine: setQuery } = useSearchBox()\n const { hits, results } = useHits()\n const groups = results?.hits.reduce(\n (acc: { [key: string]: any[] }, hit: any) => {\n const key = hit.category.title\n if (!acc[key]) {\n acc[key] = []\n }\n acc[key].push(hit)\n return acc\n },\n {}\n )\n let resultIndex = 0\n\n return (\n <StackView id=\"helpdesk-search\" position=\"relative\">\n <Combobox.Popover\n renderTo=\"#helpdesk-search\"\n popoverProps={{ zIndex: 2 }}\n placeholder=\"Search our documentation\"\n value={query}\n renderRight={<Icon name=\"general.search\" />}\n onChange={(e) => setQuery(e.target.value)}\n onSelect={(selectedValue) => handleSearchSelect(selectedValue, indexName)}\n placement=\"bottom-start\"\n >\n {!hits.length && (\n <>\n <StackView\n axis=\"horizontal\"\n alignment=\"center\"\n paddingHorizontal={2}\n paddingVertical={1}\n >\n <Text color=\"neutralDarker\" size={4} whiteSpace=\"normal\">\n No results match your search\n </Text>\n </StackView>\n </>\n )}\n {groups &&\n Object.keys(groups).map((key) => {\n const hits = groups[key]\n return (\n <React.Fragment key={key}>\n {resultIndex > 0 && <Divider margin={1} />}\n <StackView\n axis=\"horizontal\"\n alignment=\"center\"\n spacing={0.5}\n paddingHorizontal={2}\n paddingVertical={1}\n >\n <HeadingIcon\n currentAppName={currentAppName}\n sectionName={key}\n />\n <Text size={5} color=\"foregroundSecondary\" fontWeight={500}>\n {key}\n </Text>\n </StackView>\n {hits.map((hit) => (\n <HitResult key={hit.objectID} hit={hit} index={resultIndex++} />\n ))}\n </React.Fragment>\n )\n })}\n </Combobox.Popover>\n </StackView>\n )\n}\n","import algoliasearch from \"algoliasearch\"\nimport React from \"react\"\nimport {\n Configure,\n InstantSearch\n} from \"react-instantsearch\"\n\nimport useStore from \"../../../../hooks/use_store\"\nimport { CustomSearchBox } from \"./CustomSearchBox\"\n\nexport const DocumentationSearch = ({\n indexName,\n currentAppName,\n}: {\n currentAppName: string,\n indexName: string\n}) => {\n const {\n algoliaSearchAuth: { algoliaApplicationId, algoliaSearchOnlyApiKey },\n } = useStore<{\n algoliaSearchAuth: {\n algoliaApplicationId: string\n algoliaSearchOnlyApiKey: string\n }\n }>()\n\n const searchClient = algoliasearch(\n algoliaApplicationId,\n algoliaSearchOnlyApiKey\n )\n\n return (\n <InstantSearch indexName={indexName} searchClient={searchClient}>\n <Configure hitsPerPage={5} />\n <CustomSearchBox currentAppName={currentAppName} indexName={indexName} />\n </InstantSearch>\n )\n}\n","import {\n components,\n UiExtensionFirstPartyComponent,\n} from \"@planningcenter/add-ons\"\nimport pcoUrl from \"@planningcenter/url\"\nimport React from \"react\"\nimport { InlineWidget as CalendlyWidget } from \"react-calendly\"\n\nimport {\n DrawerHeader,\n DrawerHeading,\n ScrollContainer,\n SwitchView,\n} from \"../../components\"\nimport { ToolbarTool, ToolbarToolProps } from \"../../types\"\nimport { DocumentationSearch } from \"./components/DocumentationSearch\"\n\nconst { LoadingIndicator, StackView } = components\n\nfunction HelpdeskComponent({\n appName,\n closeDrawer,\n env,\n helpdeskConfig,\n}: ToolbarToolProps) {\n const source = `${pcoUrl(env)(\n \"helpdesk\" as any\n )}/addons/toolbar.helpdesk.help`\n\n return (\n <UiExtensionFirstPartyComponent\n grow={1}\n display=\"flex\"\n extensionId=\"11\"\n url={source}\n loadingFallback={\n <StackView flex={1} axis=\"vertical\">\n <DrawerHeader closeDrawer={closeDrawer}>\n <StackView axis=\"horizontal\" spacing={1}>\n <DrawerHeading>Help and support</DrawerHeading>\n <LoadingIndicator />\n </StackView>\n </DrawerHeader>\n </StackView>\n }\n additionalComponents={{\n // @ts-expect-error TODO: Relax type specification in add-ons-js to not require children\n CalendlyWidget,\n // @ts-expect-error TODO: Relax type specification in add-ons-js to not require children\n DocumentationSearch,\n DrawerHeader,\n DrawerHeading,\n ScrollContainer,\n SwitchView,\n }}\n args={{\n appName,\n closeDrawer,\n currentPageParams: location.search,\n helpdeskConfig,\n }}\n />\n )\n}\n\nconst Helpdesk: ToolbarTool = {\n component: HelpdeskComponent,\n icons: {\n active: \"general.questionCircle\",\n static: \"general.outlinedQuestionCircle\",\n },\n name: \"Helpdesk\",\n}\n\nexport { Helpdesk }\n","import React from \"react\"\n\nimport colors from \"../colors\"\n\nconst Eyebrow = ({\n dark,\n style,\n ...props\n}: {\n children?: React.ReactNode\n dark: boolean\n style?: object\n}) => (\n <div\n style={{\n color: dark ? colors.lightNeutral62 : colors.lightNeutral24,\n fontSize: \"12px\",\n fontWeight: 400,\n textTransform: \"uppercase\",\n ...style,\n }}\n {...props}\n />\n)\n\nexport default Eyebrow\n","import datetimeFmt from \"@planningcenter/datetime-fmt\"\nimport { Dropdown } from \"@planningcenter/tapestry-react\"\nimport React from \"react\"\n\nimport colors from \"../colors\"\nimport useHover from \"../hooks/use_hover\"\nimport useStore from \"../hooks/use_store\"\nimport { Notification } from \"../interfaces\"\nimport { fontFamily } from \"../styles\"\nimport Eyebrow from \"./eyebrow\"\nimport HoverableListItem from \"./hoverable_list_item\"\n\nconst MarkReadDot = ({\n isRead = false,\n onClick,\n}: {\n isRead?: boolean\n onClick: any\n}) => {\n const hoverRef = React.useRef(null)\n const isHover = useHover(hoverRef)\n\n return (\n <div\n ref={hoverRef}\n style={{\n alignItems: \"center\",\n display: \"flex\",\n height: \"12px\",\n justifyContent: \"center\",\n width: \"12px\",\n }}\n {...{ onClick }}\n >\n <svg height=\"12\" viewBox=\"0 0 12 12\" width=\"12\">\n <title>unread dot</title>\n <circle\n cx=\"6\"\n cy=\"6\"\n fill={isHover ? colors.interaction66 : colors.lightNeutral81}\n r=\"6\"\n style={{ transition: \"all 0.2s\" }}\n />\n <circle cx=\"6\" cy=\"6\" fill={colors.lightNeutral100} r=\"5\" />\n {!isRead && <circle cx=\"6\" cy=\"6\" r=\"4\" fill={colors.interaction66} />}\n </svg>\n </div>\n )\n}\n\nconst NotificationItem = ({\n mobile = false,\n isLast,\n onCreateTask,\n onMarkAsRead = async () => Promise.resolve({}),\n onToggleRead,\n showBottomBorder,\n notification,\n}: {\n isLast?: boolean\n mobile?: boolean\n notification: Notification\n onCreateTask: (notification: Notification) => Promise<any>\n onMarkAsRead?: (notification: Notification) => Promise<any>\n onToggleRead: any\n showBottomBorder?: boolean\n}) => {\n const { appName, createdAt, isRead, link, title } = notification\n const { organizationTimeZone, notificationsContextMenu } = useStore()\n\n const [isActive, setIsActive] = React.useState(false)\n\n const appColors = {\n Calendar: \"9 61% 50%\",\n \"Check-Ins\": \"283 22% 48%\",\n Giving: \"43 88% 64%\",\n Groups: \"17 96% 62%\",\n People: \"220 74% 57%\",\n Publishing: \"220 12% 31%\",\n Registrations: \"175 36% 43%\",\n Services: \"88 45% 41%\",\n }\n\n const handleDotClick = (e) => {\n e.preventDefault()\n e.stopPropagation()\n onToggleRead()\n }\n\n const handleClick = async (_e) => {\n setIsActive(true)\n await onMarkAsRead(notification)\n window.location.href = link\n }\n\n const datetimeFmtOptions = { style: \"relative\" } as {\n style?: string\n timeZone?: string\n }\n if (organizationTimeZone) {\n datetimeFmtOptions.timeZone = organizationTimeZone\n }\n\n return (\n <HoverableListItem\n active={isActive}\n data-turbolinks={false}\n href={link}\n onClick={handleClick}\n style={{\n alignItems: \"flex-start\",\n borderBottom:\n showBottomBorder || !isLast\n ? `1px solid ${\n mobile ? colors.lightNeutral24 : colors.lightNeutral93\n }`\n : \"none\",\n cursor: \"pointer\",\n display: \"flex\",\n overflow: \"hidden\",\n padding: \"12px 16px\",\n textDecoration: \"none\",\n verticalAlign: \"middle\",\n ...fontFamily,\n }}\n >\n <div\n style={{\n display: \"flex\",\n flexDirection: \"column\",\n flexGrow: 1,\n justifyContent: \"center\",\n }}\n >\n <div\n style={{\n alignItems: \"center\",\n borderLeft: `4px solid hsl(${appColors[appName] || \"0 0% 81%\"} / ${\n isRead ? \"40%\" : \"100%\"\n }`,\n display: \"flex\",\n marginBottom: \"10px\",\n paddingLeft: \"8px\",\n }}\n >\n <div style={{ flexGrow: 1, marginRight: \"16px\" }}>\n <Eyebrow\n dark={mobile}\n style={{ marginBottom: \"6px\", userSelect: \"none\" }}\n >\n {appName}\n </Eyebrow>\n <h1\n style={{\n color: mobile ? colors.lightNeutral88 : colors.darkNeutral12,\n fontSize: \"16px\",\n fontWeight: 500,\n lineHeight: \"1.3em\",\n margin: 0,\n userSelect: \"none\",\n }}\n >\n {title}\n </h1>\n </div>\n {!mobile && !notificationsContextMenu && (\n <MarkReadDot onClick={handleDotClick} {...{ isRead }} />\n )}\n\n {!mobile && notificationsContextMenu && (\n <Dropdown\n icon={{ name: \"general.threeDots\" }}\n title=\"More options\"\n variant=\"naked\"\n iconRight={null}\n placement=\"bottom-end\"\n onClick={(e) => {\n e.stopPropagation()\n }}\n >\n <Dropdown.Item\n onClick={(e: MouseEvent) => {\n e.preventDefault()\n e.stopPropagation()\n onToggleRead()\n }}\n >\n Mark {isRead ? \"unread\" : \"as read\"}\n </Dropdown.Item>\n {notification.taskUrl ? (\n <Dropdown.Item\n onClick={(e: MouseEvent) => {\n e.preventDefault()\n e.stopPropagation()\n window.location.href = notification.taskUrl\n }}\n >\n Open task\n </Dropdown.Item>\n ) : (\n <Dropdown.Item\n onClick={(e: MouseEvent) => {\n e.preventDefault()\n e.stopPropagation()\n onCreateTask(notification)\n }}\n >\n Create task\n </Dropdown.Item>\n )}\n </Dropdown>\n )}\n </div>\n <div\n style={{\n color: mobile ? colors.lightNeutral62 : colors.lightNeutral24,\n fontSize: \"12px\",\n paddingLeft: \"12px\",\n userSelect: \"none\",\n }}\n >\n {datetimeFmt.datetime(createdAt, datetimeFmtOptions)}\n </div>\n </div>\n </HoverableListItem>\n )\n}\n\nexport default NotificationItem\n","import { RefObject, useEffect, useState } from \"react\"\n\nfunction useHover<T extends HTMLElement = HTMLElement>(\n elementRef: RefObject<T>\n): boolean {\n const [value, setValue] = useState<boolean>(false)\n\n const handleMouseEnter = () => setValue(true)\n const handleMouseLeave = () => setValue(false)\n\n useEffect(() => {\n const node = elementRef?.current\n if (!node) return undefined\n\n node.addEventListener(\"mouseenter\", handleMouseEnter)\n node.addEventListener(\"mouseleave\", handleMouseLeave)\n\n return () => {\n node.removeEventListener(\"mouseenter\", handleMouseEnter)\n node.removeEventListener(\"mouseleave\", handleMouseLeave)\n }\n }, [elementRef])\n\n return value\n}\n\nexport default useHover\n","import { Heading, StackView, Text } from \"@planningcenter/tapestry-react\"\nimport React from \"react\"\n\nimport { BlankStateIcon } from \"../symbols\"\n\nconst NotificationsMenuBlankState = ({\n context,\n dark = false,\n description,\n title = \"No notifications\",\n}: {\n context?: string\n dark?: boolean\n description: string\n style?: object\n title?: string\n}) => (\n <StackView alignment=\"center\" distribution=\"center\" padding={4}>\n <BlankStateIcon id={context} {...{ dark }} />\n <Heading\n color={dark ? \"#fafafa\" : \"#3d3d3d\"}\n fontWeight={500}\n marginTop={1}\n size={3}\n >\n {title}\n </Heading>\n <Text align=\"center\" color={dark ? \"#fafafa\" : \"#3d3d3d\"} size={4}>\n {description}\n </Text>\n </StackView>\n)\n\nexport default NotificationsMenuBlankState\n","import { JoltSubscription } from \"@planningcenter/jolt-client/dist/types/JoltSubscription\"\nimport pcoUrl, * as PCO_URL from \"@planningcenter/url\"\nimport React, { useCallback } from \"react\"\n\nimport apiRequest, { defaultFetch, railsCsrfFetch } from \"../api_request\"\nimport {\n JoltMessage,\n JoltMessageNotificationDataPayload,\n Notification,\n} from \"../interfaces\"\nimport { useJoltEffect } from \"./jolt\"\n\nconst notificationsOrganizer = (\n notifications: Notification[]\n): { read: Notification[]; unread: Notification[] } => {\n const { read, unread } = [...notifications]\n .sort((a: Notification, b: Notification) => {\n return a.createdAt < b.createdAt ? 1 : -1\n })\n .reduce(\n (acc, notification) => {\n return notification.isRead\n ? { ...acc, read: [...acc.read, notification] }\n : { ...acc, unread: [...acc.unread, notification] }\n },\n { read: [], unread: [] }\n )\n return { read, unread }\n}\n\nconst buildNotificationFromApiResponse = (resp, json): Notification => {\n const findInIncluded = ({ type, id }, included) => {\n return included.find((i) => {\n return i.type === type && i.id === id\n })\n }\n\n const appName: string = findInIncluded(\n resp.relationships.app.data,\n json.included\n )?.attributes?.name\n\n // There is technically the possibility that there are multiple web payloads\n // returned from the API endpoint. However, at this point I'm not sure in\n // which situations that would be the case. For v1 of this feature, we'll\n // assume that there is only one web payload we need to worry about and it is\n // the first in the array that is returned.\n const notificationData = JSON.parse(\n findInIncluded(\n {\n id: resp?.relationships?.web_payloads?.data[0]?.id,\n type: \"Payload\",\n },\n json.included\n )?.attributes?.content\n )\n\n return {\n appName,\n createdAt: new Date(resp.attributes.created_at),\n id: resp.id,\n isRead: resp.attributes.read_at?.length > 0,\n link: notificationData?.link,\n title: notificationData?.title,\n }\n}\n\nexport type NotificationsHookProps = {\n enabled?: boolean\n env: PCO_URL.Environment\n joltChannel: JoltSubscription\n}\n\nconst useNotifications = ({\n enabled,\n env,\n joltChannel,\n}: NotificationsHookProps): {\n handleCreateTask: (notification: Notification) => Promise<any>\n handleMarkAllAsRead: () => any\n handleMarkAsRead: (notification: Notification) => Promise<any>\n handleToggleRead: (notification: Notification) => Promise<any>\n hasError: boolean\n isLoading: boolean\n read: Notification[]\n unread: Notification[]\n} => {\n const [notifications, setNotifications]: [\n Notification[],\n React.Dispatch<React.SetStateAction<Notification[]>>\n ] = React.useState([])\n\n const [isLoading, setIsLoading] = React.useState(true)\n const [hasError, setHasError] = React.useState(false)\n const { read, unread } = notificationsOrganizer(notifications)\n\n const fetchNotifications = () => {\n try {\n setHasError(false)\n apiRequest(\n defaultFetch,\n `${window.location.origin}/~api/notifications/v2/me/notifications?include=app,web_payloads&per_page=100&order=read_at,-created_at`\n ).then(({ json }) => {\n const notifications = json.data.map((resp) =>\n buildNotificationFromApiResponse(resp, json)\n )\n\n setIsLoading(false)\n setNotifications(notifications)\n })\n } catch (exception) {\n setHasError(true)\n console.error(\n \"topbar encountered error when fetching all notifications\",\n exception\n )\n }\n }\n\n React.useEffect(() => {\n if (enabled) {\n fetchNotifications()\n }\n }, [enabled])\n\n const fetchNotification = async (id: string) => {\n try {\n setHasError(false)\n return apiRequest(\n defaultFetch,\n `${window.location.origin}/~api/notifications/v2/me/notifications/${id}?include=app,web_payloads`\n ).then(({ json }) => json)\n } catch (exception) {\n setHasError(true)\n console.error(\n \"topbar encountered error when fetching a single notification\",\n exception\n )\n }\n }\n\n const extractPayloadFromJoltMessage = (\n notification: JoltMessage\n ): JoltMessageNotificationDataPayload => {\n if (typeof notification.data === \"string\") {\n return JSON.parse(notification.data)\n } else {\n return notification.data as JoltMessageNotificationDataPayload\n }\n }\n\n const updateStateFromJoltMessage = React.useCallback(\n (message: JoltMessage) => {\n try {\n const joltMessageNotificationDataPayload =\n extractPayloadFromJoltMessage(message)\n\n fetchNotification(joltMessageNotificationDataPayload.data.id).then(\n (resp) => {\n const notification = buildNotificationFromApiResponse(\n resp.data,\n resp\n )\n\n setNotifications((notifications) => [\n ...notifications.filter(\n (candidate) => candidate.id !== notification.id\n ),\n notification,\n ])\n }\n )\n } catch (exception) {\n console.error(\n \"topbar encountered error when updating state from jolt message\",\n exception\n )\n }\n },\n [\n buildNotificationFromApiResponse,\n extractPayloadFromJoltMessage,\n fetchNotifications,\n read,\n setNotifications,\n unread,\n ]\n )\n\n const removeNotification = React.useCallback(\n (message: JoltMessage) => {\n const joltMessageNotificationDataPayload =\n extractPayloadFromJoltMessage(message)\n const newNotifications = notifications.filter(\n (candidate) =>\n candidate.id !== joltMessageNotificationDataPayload.data.id\n )\n setNotifications(newNotifications)\n },\n [extractPayloadFromJoltMessage, notifications, setNotifications]\n )\n\n useJoltEffect(\n enabled ? joltChannel : undefined,\n \"notifications.v2.events.notification.created\",\n updateStateFromJoltMessage\n )\n\n useJoltEffect(\n enabled ? joltChannel : undefined,\n \"notifications.v2.events.notification.updated\",\n updateStateFromJoltMessage\n )\n\n useJoltEffect(\n enabled ? joltChannel : undefined,\n \"notifications.v2.events.notification.destroyed\",\n removeNotification\n )\n\n const markAsReadOrUnread = async (\n notificationIds: string[],\n readOrUnread: \"read\" | \"unread\"\n ) => {\n const included = notificationIds.reduce(\n (acc, id: string) => [\n ...acc,\n {\n attributes: { action: readOrUnread },\n id,\n type: \"graph_notification\",\n },\n ],\n []\n )\n\n return apiRequest(\n railsCsrfFetch,\n `${pcoUrl(env)(\"api\")}/notifications/v2/me/bulk_update`,\n {\n data: {\n data: {\n attributes: {},\n relationships: {\n notifications: {\n data: {\n source: \"/included/graph_notification/*\",\n },\n },\n },\n type: \"BulkUpdate\",\n },\n included,\n },\n method: \"POST\",\n }\n ).then((e) => {\n if (!e.ok) {\n // TODO: show an alert or something?\n\n setIsLoading(false)\n setHasError(true)\n // Rollback any optimistic UI updates\n setNotifications((notifications) =>\n notifications.map((n) =>\n notificationIds.includes(n.id) ? { ...n, isRead: !n.isRead } : n\n )\n )\n }\n })\n }\n\n const handleCreateTask = useCallback(async (notification: Notification) => {\n return apiRequest(\n railsCsrfFetch,\n `${pcoUrl(env)(\"api\")}/home/v2/me/task_lists/inbox/tasks`,\n {\n data: {\n data: {\n attributes: {\n description: notification.link\n ? `<a href=\"${notification.link}\">Link</a>`\n : undefined,\n title: notification.title,\n },\n },\n },\n method: \"POST\",\n }\n ).then((e) => {\n if (e.ok) {\n setNotifications((notifications) =>\n notifications.map((n) =>\n notification.id === n.id\n ? { ...n, taskUrl: e.json.data.links.html }\n : n\n )\n )\n }\n })\n }, [])\n\n const handleToggleRead = async (notification: Notification) => {\n const action = notification.isRead ? \"unread\" : \"read\"\n\n // optimistic UI update\n setNotifications((notifications) =>\n notifications.map((n) =>\n notification.id == n.id ? { ...n, isRead: action === \"read\" } : n\n )\n )\n\n return markAsReadOrUnread([notification.id], action)\n }\n\n const handleMarkAsRead = async (notification: Notification) => {\n return markAsReadOrUnread([notification.id], \"read\")\n }\n\n const handleMarkAllAsRead = () => {\n const unreadIds = unread.map((n) => n.id)\n\n // optimistic UI update\n setNotifications((notifications) =>\n notifications.map((n) =>\n unreadIds.includes(n.id) ? { ...n, isRead: true } : n\n )\n )\n\n markAsReadOrUnread(\n unread.map((u: Notification) => u.id),\n \"read\"\n )\n }\n\n return {\n handleCreateTask,\n handleMarkAllAsRead,\n handleMarkAsRead,\n handleToggleRead,\n hasError,\n isLoading,\n read,\n unread,\n }\n}\n\nexport default useNotifications\n","import { Heading, Spinner, StackView } from \"@planningcenter/tapestry-react\"\nimport React from \"react\"\nimport { Transition, TransitionGroup } from \"react-transition-group\"\n\nimport { default as themeColors } from \"../../colors\"\nimport NotificationItem from \"../../components/notification_item\"\nimport NotificationsMenuBlankState from \"../../components/notifications_menu_blank_state\"\nimport useNotifications from \"../../hooks/use_notifications\"\nimport { Notification } from \"../../interfaces\"\nimport store from \"../../store\"\nimport { ExclamationTriangle } from \"../../symbols\"\nimport { DrawerHeader, DrawerHeading, ScrollContainer } from \"../components\"\nimport { ToolbarTool, ToolbarToolProps } from \"../types\"\n\nconst SectionHeaderButton = ({\n disabled,\n onClick,\n title,\n ...props\n}: {\n disabled?: boolean\n onClick: any\n title: string\n}) => (\n <StackView\n color={disabled ? themeColors.lightNeutral62 : themeColors.interaction66}\n cursor={disabled ? \"default\" : \"pointer\"}\n fontSize={5}\n fontWeight={600}\n userSelect=\"none\"\n onClick={!disabled && onClick}\n {...props}\n >\n {title}\n </StackView>\n)\n\nconst SectionHeaderTitle = ({\n ...props\n}: {\n children?: React.ReactNode\n padding?: number\n}) => (\n <Heading\n color={themeColors.lightNeutral12}\n lineHeight={2}\n size={5}\n textTransform=\"uppercase\"\n userSelect=\"none\"\n {...props}\n />\n)\n\nfunction NotificationsComponent({ closeDrawer }: ToolbarToolProps) {\n const [showRead, setShowRead] = React.useState(false)\n\n const duration = 300\n\n const defaultStyle = { transition: `opacity ${duration}ms ease-in-out` }\n\n const transitionStyles = {\n entered: { opacity: 1 },\n entering: { opacity: 0.2 },\n }\n\n const { env, enabled, joltChannel } = store.getState()[\"notifications\"]\n\n const {\n handleCreateTask,\n handleMarkAllAsRead,\n handleMarkAsRead,\n handleToggleRead,\n hasError,\n isLoading,\n read,\n unread,\n } = useNotifications({ enabled, env, joltChannel })\n\n return (\n <>\n <DrawerHeader closeDrawer={closeDrawer}>\n <StackView spacing={0.5}>\n <StackView alignment=\"center\" axis=\"horizontal\" spacing={1}>\n <DrawerHeading>Notifications</DrawerHeading>\n {isLoading && (\n <Spinner\n color=\"hsl(0 0% 62%)\"\n thickness={2}\n trackColor=\"hsl(0 0% 97%)\"\n />\n )}\n {hasError && (\n <ExclamationTriangle fill=\"hsl(8 60% 47%)\" size={16} />\n )}\n </StackView>\n {read.length > 0 && (\n <SectionHeaderButton\n onClick={() => setShowRead((showRead) => !showRead)}\n title={`${showRead ? \"Hide\" : \"Show\"} read`}\n />\n )}\n </StackView>\n </DrawerHeader>\n <ScrollContainer>\n <StackView alignment=\"stretch\" spacing={2}>\n <div\n style={{\n boxSizing: \"border-box\",\n display: \"flex\",\n flexDirection: \"column\",\n justifyContent: \"space-between\",\n margin: 0,\n padding: \"4px 0\",\n }}\n >\n {!isLoading && unread.length === 0 && (\n <NotificationsMenuBlankState\n context=\"toolbar\"\n description={`When you have ${\n read.length > 0 ? \"unread \" : \"\"\n }notifications they will show up here.`}\n {...(read.length > 0 && { title: \"No unread notifications\" })}\n />\n )}\n {unread.length > 0 && (\n <StackView\n axis=\"horizontal\"\n alignment=\"center\"\n distribution=\"space-between\"\n padding={2}\n >\n <SectionHeaderTitle>Unread</SectionHeaderTitle>\n {unread.length > 0 && (\n <SectionHeaderButton\n onClick={() => handleMarkAllAsRead()}\n title={`Mark ${unread.length} as read`}\n />\n )}\n </StackView>\n )}\n <TransitionGroup exit={false}>\n {unread.map((notification: Notification, idx) => (\n <Transition key={notification.id} timeout={0}>\n {(state) => (\n <div\n style={{\n ...defaultStyle,\n ...transitionStyles[state],\n }}\n >\n <NotificationItem\n isLast={unread.length === idx + 1}\n key={notification.id}\n onMarkAsRead={handleMarkAsRead}\n onToggleRead={() => handleToggleRead(notification)}\n onCreateTask={handleCreateTask}\n showBottomBorder={read.length > 0}\n {...{ notification }}\n />\n </div>\n )}\n </Transition>\n ))}\n </TransitionGroup>\n {read.length > 0 && showRead && (\n <>\n <SectionHeaderTitle padding={2}>Read</SectionHeaderTitle>\n <TransitionGroup exit={false}>\n {read.map((notification: Notification) => (\n <Transition key={notification.id} timeout={0}>\n {(state) => (\n <div\n style={{\n ...defaultStyle,\n ...transitionStyles[state],\n }}\n >\n <div style={{ opacity: 0.6 }}>\n <NotificationItem\n key={notification.id}\n onToggleRead={() =>\n handleToggleRead(notification)\n }\n onCreateTask={handleCreateTask}\n showBottomBorder\n {...{ notification }}\n />\n </div>\n </div>\n )}\n </Transition>\n ))}\n </TransitionGroup>\n </>\n )}\n </div>\n </StackView>\n </ScrollContainer>\n </>\n )\n}\n\nconst Notifications: ToolbarTool = {\n component: NotificationsComponent,\n icons: {\n active: \"toolbar.notification\",\n static: \"toolbar.notificationO\",\n },\n name: \"Notifications\",\n}\n\nexport { Notifications }\n","import {\n components,\n UiExtensionFirstPartyComponent,\n} from \"@planningcenter/add-ons\"\nimport { Badge, StackView as TRStackView } from \"@planningcenter/tapestry-react\"\nimport pcoUrl from \"@planningcenter/url\"\nimport React, { useCallback, useState } from \"react\"\n\nimport apiRequest, { railsCsrfFetch } from \"../../api_request\"\nimport { useJoltChannelSubscription, useJoltEffect } from \"../../hooks/jolt\"\nimport { JoltMessage } from \"../../interfaces\"\nimport {\n DrawerHeader,\n DrawerHeading,\n ScrollContainer,\n SwitchView,\n} from \"../components\"\nimport { usePcoMeta } from \"../hooks/use_pco_meta\"\nimport { ToolbarTool, ToolbarToolProps } from \"../types\"\n\nconst { LoadingIndicator, StackView } = components\n\nfunction NavLinkWithBadge({\n children,\n badge,\n onClick,\n ...rest\n}: {\n badge: React.ComponentProps<typeof Badge> | null\n children: React.ReactNode\n onClick: () => unknown\n}) {\n return (\n <TRStackView\n as=\"button\"\n axis=\"horizontal\"\n distribution=\"space-between\"\n alignment=\"center\"\n paddingBottom={0.75}\n onClick={() => onClick()}\n spacing={1}\n {...rest}\n >\n {children}\n {badge && <Badge size=\"sm\" fontWeight=\"600\" {...badge} />}\n </TRStackView>\n )\n}\n\ntype JoltChannelRequest = {\n channelName: string\n subscribeUrl: string\n}\n\nfunction TasksComponent({\n closeDrawer,\n enableJoltLogging,\n env,\n isOpen,\n joltPromise,\n onReceiveWorker,\n openDrawer,\n currentPath,\n onChangePath,\n}: ToolbarToolProps & { onReceiveWorker: (worker: Worker) => void }) {\n const pcoMeta = usePcoMeta()\n const source = `${pcoUrl(env)(\"home\" as any)}/addons/toolbar.tasks.list.js`\n\n const [latestJoltMessage, setLatestJoltMessage] = useState<\n JoltMessage & { timestamp: number }\n >()\n const [requestedJoltChannel, setRequestedJoltChannel] =\n useState<JoltChannelRequest>()\n\n const joltChannel = useJoltChannelSubscription({\n channelName: requestedJoltChannel?.channelName,\n enableJoltLogging,\n enabled: !!requestedJoltChannel,\n env,\n fetchSubscribeToken: async (connection_id) => {\n const subscribeUrl = requestedJoltChannel.subscribeUrl\n\n const response = await apiRequest(railsCsrfFetch, subscribeUrl, {\n data: { data: { attributes: { connection_id } } },\n method: \"POST\",\n })\n\n return response.json.data.id\n },\n joltPromise,\n })\n\n const handleJoltMessage = useCallback((message: JoltMessage) => {\n setLatestJoltMessage({ ...message, timestamp: new Date().getTime() })\n }, [])\n\n useJoltEffect(joltChannel, \"\", handleJoltMessage)\n\n const pendoTrackEvent = useCallback((event: string, properties = {}) => {\n if (!window?.pendo) {\n return console.warn(\"`window.pendo` is undefined\")\n }\n window.pendo.track(event, properties)\n }, [])\n\n return (\n <UiExtensionFirstPartyComponent\n grow={1}\n display=\"flex\"\n extensionId=\"2\"\n url={source}\n onReceiveWorker={onReceiveWorker}\n loadingFallback={\n <StackView flex={1} axis=\"vertical\">\n <DrawerHeader closeDrawer={closeDrawer}>\n <StackView axis=\"horizontal\" spacing={1}>\n <DrawerHeading>To do</DrawerHeading>\n <LoadingIndicator />\n </StackView>\n </DrawerHeader>\n </StackView>\n }\n additionalComponents={{\n DrawerHeader,\n DrawerHeading,\n NavLinkWithBadge,\n ScrollContainer,\n SwitchView,\n }}\n args={{\n closeDrawer,\n currentPath,\n isOpen,\n latestJoltMessage,\n onChangePath,\n openDrawer,\n pcoMeta,\n requestJoltChannel: setRequestedJoltChannel,\n trackPendo: pendoTrackEvent,\n }}\n />\n )\n}\n\nconst Tasks: ToolbarTool = {\n component: TasksComponent,\n icons: {\n active: \"toolbar.checklist\",\n static: \"toolbar.checklistO\",\n },\n name: \"Tasks\",\n}\n\nexport { Tasks }\n","import { UiExtensionDataContext } from \"@planningcenter/add-ons\"\nimport Jolt from \"@planningcenter/jolt-client\"\nimport {\n Avatar,\n Box,\n Button,\n Divider,\n Icon,\n StackView,\n ThemeProvider,\n} from \"@planningcenter/tapestry-react\"\nimport pcoUrl, { Environment } from \"@planningcenter/url\"\nimport React, { useCallback } from \"react\"\n\nimport { default as themeColors } from \"../colors\"\nimport getLoginProfilePath from \"../get_login_profile_path\"\nimport { useJSONCookie } from \"../hooks/use_cookie\"\nimport { useFragmentRouting } from \"../hooks/use_fragment_routing\"\nimport useMediaQuery from \"../hooks/use_media_query\"\nimport useStore from \"../hooks/use_store\"\nimport { topbarTheme } from \"../theme\"\nimport { shallowCompare } from \"../utils\"\nimport {\n Drawer,\n IndicatorDot,\n UserProfile as OriginalUserProfile,\n} from \"./components\"\nimport { ActionType, useToolbarReducer } from \"./hooks\"\nimport { Chat, Helpdesk, Notifications, Tasks } from \"./tools\"\nimport { useChatStreamUser } from \"./tools/chat/hooks\"\nimport { HelpdeskConfig, ToolbarTool, ToolbarToolProps } from \"./types\"\n\nconst TOOLBAR_WIDTH = 48\nconst DRAWER_WIDTH = 360\nconst DURATION = 100\nconst NAVBAR_HEIGHT = 52\n\ntype ToolbarProps = {\n appName: string\n autoMountTool?: string\n enableJoltLogging?: boolean\n env: Environment\n helpdeskConfig?: HelpdeskConfig\n linkToProfile?: boolean\n onReceiveTasksWorker?: (worker: Worker) => void\n userAvatarPath: string\n userName: string\n}\n\nconst TOOLS_MAP: Record<string, ToolbarTool> = {\n Chat,\n Notifications,\n Tasks,\n}\n\nconst toolsRouteMap = Object.fromEntries(Object.entries(TOOLS_MAP).map(([k, v]) => [k.toLowerCase(), v]))\n\nfunction toolIsRoutable(tool: { name: string }) {\n return tool.name.toLowerCase() in toolsRouteMap\n}\n\nexport function Toolbar({\n appName,\n autoMountTool,\n enableJoltLogging,\n env,\n helpdeskConfig = {},\n linkToProfile = true,\n userAvatarPath,\n userName,\n onReceiveTasksWorker,\n}: ToolbarProps): JSX.Element {\n const [toolbarFragmentRoute, onChangeToolbarFragmentRoute, clearRoute] = useFragmentRouting()\n const [toolStateCookie, setToolStateCookie] = useJSONCookie(\n \"topbarToolbarToolState\"\n )\n const autoMountedTool = autoMountTool ? TOOLS_MAP[autoMountTool] : null\n const [state, dispatch] = useToolbarReducer({\n currentContent: autoMountedTool,\n })\n const { currentContent, open } = state\n const mounted = !!currentContent\n const { indicatorVisible, joltPromise, chatEnabled, userId } = useStore<{\n chatEnabled: boolean\n indicatorVisible: object\n joltPromise: () => Promise<Jolt | void>\n userId: string\n }>()\n\n React.useEffect(() => {\n if (open) {\n document.body.style.overflow = \"hidden\"\n window.scrollTo(0, 0)\n } else {\n document.body.style.overflow = \"auto\"\n }\n }, [open])\n\n React.useEffect(() => {\n window.openHelpdesk = () => handleToolOnClick(Helpdesk)\n\n return () => {\n delete window.openHelpdesk\n }\n }, [Helpdesk])\n\n const loginSettingsUrl = getLoginProfilePath({\n appName: appName.replace(/[\\s-]/, \"\"),\n env: env,\n userId: userId,\n })\n const logoutUrl = `${pcoUrl(env)(\"login\")}/logout`\n const profileUrl = `/people/AC${userId}`\n\n const HelpDeskTool = Helpdesk as ToolbarTool\n const helpdeskOnClick = !!helpdeskConfig?.onClick\n ? helpdeskConfig.onClick\n : () => toggleDrawer(HelpDeskTool)\n\n const setToolAndOpenDrawer = useCallback((content: ToolbarTool | typeof UserProfile) => {\n dispatch({ payload: { content }, type: ActionType.mount })\n setTimeout(() => dispatch({ type: ActionType.open }))\n }, [])\n\n const openDrawer = useCallback(\n (content: ToolbarTool | typeof UserProfile) => {\n if (toolIsRoutable(content)) {\n onChangeToolbarFragmentRoute(content.name.toLowerCase(), toolStateCookie[content.name.toLowerCase()])\n } else {\n clearRoute()\n setToolAndOpenDrawer(content)\n }\n },\n [onChangeToolbarFragmentRoute, clearRoute, setToolAndOpenDrawer, toolStateCookie]\n )\n\n const closeDrawer = useCallback(() => {\n dispatch({ type: ActionType.close })\n clearRoute()\n setTimeout(() => dispatch({ type: ActionType.unmount }), DURATION)\n }, [clearRoute])\n\n React.useEffect(() => {\n if (!toolbarFragmentRoute) return\n\n const nextState = {\n ...toolStateCookie,\n [toolbarFragmentRoute.tool]: toolbarFragmentRoute.path,\n }\n\n if (!shallowCompare(nextState, toolStateCookie)) {\n setToolStateCookie(nextState)\n }\n }, [toolbarFragmentRoute, toolStateCookie])\n\n React.useEffect(() => {\n if (\n toolbarFragmentRoute?.tool &&\n (currentContent !== toolsRouteMap[toolbarFragmentRoute.tool] || !open)\n ) {\n setToolAndOpenDrawer(toolsRouteMap[toolbarFragmentRoute.tool])\n }\n }, [setToolAndOpenDrawer, toolbarFragmentRoute?.tool, currentContent, open])\n\n\n const toggleDrawer = (content: ToolbarTool | typeof UserProfile) => {\n if (!open) {\n return openDrawer(content)\n }\n\n return currentContent?.name === content.name\n ? closeDrawer()\n : openDrawer(content)\n }\n\n const chatStreamUser = useChatStreamUser({\n enableJoltLogging,\n env,\n isEnabled: Boolean(userId && chatEnabled),\n joltPromise,\n onConnectionFailure: () => currentContent === Chat && closeDrawer(),\n userId,\n })\n\n const TOOLS = [Notifications, Tasks, chatStreamUser && Chat].filter(\n Boolean\n ) as ToolbarTool[]\n\n const UserProfile: Omit<ToolbarTool, \"icons\"> = {\n component: () =>\n OriginalUserProfile({\n closeDrawer,\n linkToProfile,\n loginSettingsUrl,\n logoutUrl,\n profileUrl,\n userAvatarPath,\n }),\n name: \"Profile\",\n }\n\n const isMobile = useMediaQuery(\"(max-width: 599px)\")\n\n const [visibleWindowHeight, setVisibleWindowHeight] = React.useState(0)\n\n React.useLayoutEffect(() => {\n const handleResize = () => {\n setVisibleWindowHeight(window.innerHeight)\n }\n\n window.addEventListener(\"resize\", handleResize)\n\n return () => window.removeEventListener(\"resize\", handleResize)\n }, [])\n\n const handleToolOnClick = (tool: ToolbarTool) => {\n openDrawer(tool)\n document\n .getElementById(`toolbarDrawer${tool.name}`)\n ?.scrollTo({ behavior: \"smooth\", top: 0 })\n }\n\n const toolSpecificProps = {\n Chat: { chatStreamUser },\n Tasks: { onReceiveWorker: onReceiveTasksWorker },\n }\n\n const onChangePath = useCallback((path: string) => {\n onChangeToolbarFragmentRoute(currentContent?.name.toLowerCase(), path)\n }, [currentContent?.name])\n\n const currentToolProps: ToolbarToolProps = {\n appName,\n closeDrawer,\n currentPath: toolbarFragmentRoute?.path,\n env,\n helpdeskConfig,\n isOpen: open,\n joltPromise,\n onChangePath,\n openDrawer: () => currentContent && openDrawer(currentContent),\n userId,\n ...(currentContent ? toolSpecificProps[currentContent.name] : {}),\n }\n\n const indicatorState = {\n ...indicatorVisible,\n Chat: chatStreamUser?.unread,\n }\n\n return (\n <ThemeProvider theme={topbarTheme}>\n <UiExtensionDataContext>\n {isMobile ? (\n <>\n <StackView\n left={0}\n position=\"absolute\"\n right={0}\n pointerEvents=\"none\"\n style={{ minHeight: visibleWindowHeight }}\n top={0}\n zIndex={10001}\n >\n <StackView\n alignItems=\"start\"\n axis=\"horizontal\"\n backgroundColor=\"white\"\n borderTopColor=\"separatorTertiary\"\n borderTopWidth={1}\n bottom={0}\n distribution=\"fill\"\n height={`calc(${NAVBAR_HEIGHT}px + env(safe-area-inset-bottom))`}\n left={0}\n position=\"fixed\"\n pointerEvents=\"auto\"\n right={0}\n >\n <StackView alignment=\"center\" flex=\"1\" position=\"relative\">\n <Button\n css={{ WebkitTapHighlightColor: \"transparent\" }}\n color={\n !open\n ? themeColors.lightNeutral24\n : themeColors.lightNeutral62\n }\n hover={{ color: themeColors.lightNeutral24 }}\n icon={{\n name: open\n ? \"toolbar.planningCenterO\"\n : \"toolbar.planningCenter\",\n size: \"20px\",\n }}\n onClick={() => closeDrawer()}\n padding={2}\n theme={false}\n title={`Home`}\n />\n </StackView>\n {[HelpDeskTool, ...TOOLS].map((tool) => (\n <StackView\n alignment=\"center\"\n flex=\"1\"\n key={tool.name}\n position=\"relative\"\n >\n <Button\n id={`toolbar-${tool.name.toLowerCase()}`}\n aria-label={`${tool.name}`}\n color={\n open && currentContent === tool\n ? themeColors.lightNeutral24\n : themeColors.lightNeutral62\n }\n css={{ WebkitTapHighlightColor: \"transparent\" }}\n hover={{ color: themeColors.lightNeutral24 }}\n key={tool.name}\n onClick={() => handleToolOnClick(tool)}\n paddingHorizontal={2}\n paddingVertical={2}\n theme={false}\n >\n <Box position=\"relative\">\n {indicatorState[tool.name] && (\n <IndicatorDot right={-0.5} top={-0.5} />\n )}\n <Icon\n name={\n open && currentContent === tool\n ? tool.icons.active\n : tool.icons.static\n }\n size=\"20px\"\n />\n </Box>\n </Button>\n </StackView>\n ))}\n </StackView>\n </StackView>\n {mounted && (\n <Drawer\n id={`toolbarDrawer${currentContent.name}`}\n bottom={`${NAVBAR_HEIGHT}px`}\n height={open ? `calc(100% - ${NAVBAR_HEIGHT}px)` : \"0px\"}\n overflow=\"auto\"\n position=\"absolute\"\n >\n <currentContent.component {...currentToolProps} />\n </Drawer>\n )}\n </>\n ) : (\n <StackView\n height=\"100vh\"\n position=\"absolute\"\n right={0}\n width={\n open\n ? `calc(${DRAWER_WIDTH}px + ${TOOLBAR_WIDTH}px)`\n : `${TOOLBAR_WIDTH}px`\n }\n transition={`all ${DURATION}ms ease-in-out`}\n >\n <StackView\n backgroundColor=\"surface\"\n borderLeftColor=\"separatorTertiary\"\n borderLeftWidth={1}\n grow={1}\n paddingVertical={1}\n spacing={<Divider margin={1.5} />}\n zIndex={2}\n position=\"absolute\"\n right={0}\n height=\"100%\"\n width={`${TOOLBAR_WIDTH}px`}\n >\n <StackView\n alignment=\"center\"\n data-pendo=\"toolbar-profile-support-wrapper\"\n spacing={2}\n >\n <Button\n data-pendo=\"toolbar-profile\"\n onClick={() => toggleDrawer(UserProfile)}\n radius={0}\n theme={false}\n >\n <Avatar\n alt={`${userName}'s avatar`}\n hover={{ outlineColor: themeColors.lightNeutral62 }}\n outlineColor={\n open && mounted && currentContent.name == \"Profile\"\n ? themeColors.lightNeutral62\n : \"transparent\"\n }\n outlineOffset=\"2px\"\n outlineStyle=\"solid\"\n outlineWidth=\"2px\"\n size=\"sm\"\n source={userAvatarPath}\n />\n </Button>\n <Tool\n currentContent={currentContent}\n indicatorState={indicatorState}\n key={HelpDeskTool.name}\n onClick={helpdeskOnClick}\n open={open}\n tool={HelpDeskTool}\n />\n </StackView>\n <StackView alignment=\"center\" spacing={2}>\n {TOOLS.map((tool) => (\n <Tool\n currentContent={currentContent}\n indicatorState={indicatorState}\n key={tool.name}\n onClick={() => toggleDrawer(tool)}\n open={open}\n tool={tool}\n />\n ))}\n </StackView>\n </StackView>\n {mounted && (\n <Drawer\n hasShadow\n id={`toolbarDrawer${currentContent.name}`}\n width={`${DRAWER_WIDTH}px`}\n >\n <currentContent.component {...currentToolProps} />\n </Drawer>\n )}\n </StackView>\n )}\n </UiExtensionDataContext>\n </ThemeProvider>\n )\n}\n\ntype ToolProps = {\n currentContent: ToolbarTool | undefined\n indicatorState: { [key: string]: boolean }\n onClick: () => void\n open: boolean\n tool: ToolbarTool\n}\n\nconst Tool = ({\n currentContent,\n indicatorState,\n onClick,\n open,\n tool,\n}: ToolProps) => (\n <Box\n data-pendo={`toolbar-${tool.name.toLowerCase()}`}\n key={tool.name}\n position=\"relative\"\n >\n {indicatorState[tool.name] && <IndicatorDot right={0.25} top={0.25} />}\n <Button\n id={`toolbar-${tool.name.toLowerCase()}`}\n color={\n open && currentContent === tool\n ? themeColors.lightNeutral24\n : themeColors.lightNeutral62\n }\n hover={{\n color: themeColors.lightNeutral24,\n }}\n icon={{\n name:\n open && currentContent === tool\n ? tool.icons.active\n : tool.icons.static,\n size: \"20px\",\n }}\n key={tool.name}\n onClick={onClick}\n title={`Open ${tool.name} drawer`}\n theme={false}\n />\n </Box>\n)\n","import { useCallback, useEffect, useMemo, useState } from \"react\"\n\nfunction useFragmentKey(key: string) {\n const regex = useMemo(() => new RegExp(`${key}=([^&]+)`), [key])\n\n const getFragment = useCallback((hash: string) => {\n const match = hash.match(regex)\n\n return match ? match[1] : null\n }, [regex])\n\n const [value, setValue] = useState(() => getFragment(location.hash))\n\n const updateFragment = useCallback((hash: string) => {\n setValue(getFragment(hash))\n }, [])\n\n useEffect(() => {\n function onHashChange() {\n updateFragment(location.hash)\n }\n window.addEventListener('hashchange', onHashChange)\n\n return () => window.removeEventListener('hashchange', onHashChange)\n }, [updateFragment])\n\n return [value, updateFragment] as const\n}\n\nexport function useFragmentRouting() {\n const key = \"toolbar\"\n const [toolbarFragment, updateFragment] = useFragmentKey(key)\n\n const onChangeRoute = useCallback((tool: string, path: string = \"\") => {\n const nextHash = `#${key}=${tool}/${path}`\n history.replaceState(undefined, undefined, nextHash)\n updateFragment(nextHash)\n }, [updateFragment])\n\n const route = useMemo(() => {\n if (toolbarFragment) {\n const [tool, ...rest] = toolbarFragment.split('/')\n\n return { path: rest.join('/'), tool }\n } else {\n return null\n }\n }, [toolbarFragment])\n\n const clearRoute = useCallback(() => {\n history.replaceState(undefined, undefined, \"#\")\n updateFragment(\"\")\n }, [])\n\n return [route, onChangeRoute, clearRoute] as const\n}\n","import {\n Avatar,\n Button,\n Divider,\n GridView,\n Heading,\n Icon,\n Link,\n StackView,\n Text,\n} from \"@planningcenter/tapestry-react\"\nimport React from \"react\"\n\nimport { default as themeColors } from \"../../colors\"\nimport { remove } from \"../../connected_people_provider\"\nimport useStore from \"../../hooks/use_store\"\n\nconst requestClearConnectedPeopleCache = () => remove()\n\ninterface Props {\n closeDrawer: () => void\n linkToProfile: boolean\n loginSettingsUrl: string\n logoutUrl: string\n profileUrl: string\n userAvatarPath: string\n}\n\nexport function UserProfile({\n closeDrawer,\n linkToProfile,\n loginSettingsUrl,\n logoutUrl,\n profileUrl,\n userAvatarPath,\n}: Props) {\n const { mfaConfigured, mfaEnabled, name } = useStore()\n\n return (\n <StackView axis=\"vertical\" spacing={<Divider />}>\n <GridView\n columns=\"auto 1fr auto\"\n alignment=\"start\"\n spacing={2}\n padding={2}\n paddingTop={1}\n width=\"100%\"\n >\n <Avatar source={userAvatarPath} size=\"md\" />\n <StackView axis=\"vertical\" spacing={1} grow={0} shrink={1}>\n <Heading\n level={3}\n size={1}\n weight={600}\n paddingTop={0.5}\n color={themeColors.lightNeutral12}\n >\n {name}\n </Heading>\n {linkToProfile && (\n <Link\n to={profileUrl}\n style={{ color: themeColors.lightNeutral45 }}\n size={3}\n >\n My profile\n </Link>\n )}\n {mfaEnabled && (\n <>\n <Link\n to={loginSettingsUrl}\n style={{ color: themeColors.lightNeutral45 }}\n size={3}\n >\n My login settings\n </Link>\n <StackView\n axis=\"horizontal\"\n alignment=\"center\"\n spacing={0.5}\n width=\"100%\"\n >\n <Icon\n name={mfaConfigured ? \"general.lock\" : \"general.unlock\"}\n size=\"sm\"\n color={\n mfaConfigured ? themeColors.success25 : themeColors.danger45\n }\n />\n <Text\n size={5}\n weight={400}\n color={themeColors.lightNeutral62}\n wrap={true}\n >\n Two-step verification {mfaConfigured ? \"active\" : \"inactive\"}\n </Text>\n </StackView>\n </>\n )}\n </StackView>\n <Button\n icon={{\n fill: themeColors.lightNeutral24,\n name: \"general.x\",\n size: \"md\",\n }}\n onClick={closeDrawer}\n title=\"Close\"\n variant=\"naked\"\n theme={false}\n hover={{\n backgroundColor: themeColors.lightNeutral95,\n }}\n />\n </GridView>\n <form method=\"POST\" action={logoutUrl}>\n <Button\n data-turbolinks={false}\n onClick={() => {\n requestClearConnectedPeopleCache()\n return\n }}\n style={{ padding: 0 }}\n theme={false}\n type=\"submit\"\n width=\"100%\"\n >\n <StackView\n distribution=\"space-between\"\n alignment=\"center\"\n axis=\"horizontal\"\n grow={1}\n paddingHorizontal={3}\n paddingVertical={2}\n >\n <Text color={themeColors.lightNeutral45} size={3}>\n Log out\n </Text>\n <Icon name=\"general.intoBox\" fill={themeColors.lightNeutral45} />\n </StackView>\n </Button>\n </form>\n </StackView>\n )\n}\n","import { useEffect, useState } from \"react\"\n\nfunction useMediaQuery(query: string): boolean {\n const getMatches = (query: string): boolean => {\n // Prevents SSR issues\n if (typeof window !== \"undefined\") {\n return window.matchMedia(query).matches\n }\n return false\n }\n\n const [matches, setMatches] = useState<boolean>(getMatches(query))\n\n function handleChange() {\n setMatches(getMatches(query))\n }\n\n useEffect(() => {\n const matchMedia = window.matchMedia(query)\n\n // Triggered at the first client-side load and if query changes\n handleChange()\n\n // Listen matchMedia\n if (matchMedia.addListener) {\n matchMedia.addListener(handleChange)\n } else {\n matchMedia.addEventListener(\"change\", handleChange)\n }\n\n return () => {\n if (matchMedia.removeListener) {\n matchMedia.removeListener(handleChange)\n } else {\n matchMedia.removeEventListener(\"change\", handleChange)\n }\n }\n }, [query])\n\n return matches\n}\n\nexport default useMediaQuery\n"],"names":["_excluded","defaultFetch","url","options","fetch","_extends","credentials","mode","railsCsrfFetch","_ref","headers","rest","_objectWithoutPropertiesLoose","_window$Rails","_window","window","Rails","csrfToken","_document$querySelect","document","querySelector","getAttribute","apiRequest","method","data","Accept","redirect","body","JSON","stringify","then","response","json","ok","catch","e","console","warn","useJoltChannelSubscription","channelName","enableJoltLogging","enabled","env","wssEndpoint","fetchSubscribeToken","joltPromise","Promise","resolve","joltChannel","setJoltChannel","React","useState","joltInstance","setJoltInstance","usingIndependentJoltInstance","setUsingIndependentJoltInstance","subscribeToJoltChannel","useCallback","async","jolt","j","fetchSubscribeTokenFn","_channel","cid","Jolt","wssUrl","fetchAuthTokenFn","location","origin","attributes","id","logToConsole","channel","subscriptions","find","s","subscribe","pcoUrl","useEffect","pcoPageExpiredHandler","event","_window$pcoPageExpire","hasOwnProperty","PCOPageExpiredCurrentPersonACID","pcoPageExpired","currentPersonACID","disconnect","addEventListener","removeEventListener","useJoltEffect","channelSubscription","eventName","callback","bind","unbind","HSLtoHSLA","hsl","a","hslArray","replace","split","debounce","func","wait","timeout","args","context","this","clearTimeout","setTimeout","later","apply","shallowCompare","b","Object","keys","length","entries","every","key","value","useLocalStorage","initialValue","storedValue","setStoredValue","item","localStorage","getItem","parse","error","localStorageRepresentation","setItem","dropKey","removeItem","noop","createStore","initialState","currentState","listeners","Set","getState","setState","newState","forEach","listener","add","delete","store","AppsProvider","configuredFetch","formatter","mapApps","render","userId","_topbarResponse$data","_topbarResponse$data$","_topbarResponse$data2","_topbarResponse$data3","_topbarResponse$data4","_topbarResponse$data5","_topbarResponse$data6","_topbarResponse$data7","_topbarResponse$data8","_topbarResponse$data9","_topbarResponse$data10","_topbarResponse$data11","_topbarResponse$data12","_topbarResponse$data13","_topbarResponse$data14","_topbarResponse$data15","_topbarResponse$data16","_topbarResponse$data17","_topbarResponse$data18","_topbarResponse$data19","_topbarResponse$data20","topbarResponse","useTopbarAPI","localResp","setLocalResp","resp","setResp","apps","hasConnectedPeople","has_connected_people","mfaEnabled","features","includes","notificationsContextMenu","mfaConfigured","mfa_configured","name","notificationsEnabled","notificationsDisabled","organizationTimeZone","org_time_zone","chatEnabled","algoliaSearchAuth","algoliaApplicationId","algolia_application_identifier","algoliaSearchOnlyApiKey","algolia_search_key","notificationsJoltChannel","subscribeUrl","notificationsHasUnread","useNotificationsHasUnread","fetchHasUnread","useDebounce","fn","t","useMemo","unread","undefined","state","indicatorVisible","Notifications","notifications","remove","_resp$data","_resp$data$attributes","ConnectedPeopleProvider","Component","constructor","props","super","connectedPeople","unlink","meta","redirect_to","switch","toId","returnPath","return_path","componentDidMount","defaultProps","PointBreak","width","innerWidth","setWindowWidth","componentWillUnmount","breakpointString","DisplaySwitch","breakpoint","smallBreakpoints","indexOf","smallTopbar","notSmallTopbar","Accounts","color","createElement","fill","d","Squircle","MonoAppIcon","appName","colors","style","size","platformProps","xmlns","height","viewBox","role","display","AppSymbols","base0","MonoAppName","MonoAppText","slightBackgroundTransition","transition","fontFamily","IEFlex1","flex","_excluded2","_excluded5","_excluded7","_excluded8","_excluded9","Bell","dot","dotFill","bellPath","stroke","cx","cy","r","mask","x","y","BlankStateIcon","_ref2","dark","nativeProps","clipPath","opacity","DisclosureChevronIcon","_ref5","base3","points","ExclamationTriangle","_ref7","Spyglass","_ref8","X","_ref9","Unbutton","WebkitAppearance","appearance","backgroundColor","border","cursor","outline","padding","AppsButton","displayIconOnly","expanded","onClick","down","setDown","entered","setEntered","onMouseDown","onMouseEnter","onMouseLeave","onMouseUp","alignItems","base1","base2","paddingLeft","paddingRight","whiteSpace","Fragment","fontSize","fontWeight","marginLeft","margin","x1","y1","x2","y2","gradientUnits","offset","stopColor","gradientTransform","xlinkHref","transform","ColorAppIcon","ColorAppSquircles","getAppsSwitchProductPath","productName","_window$location","_window$location$path","basePath","toLowerCase","referer","pathname","toString","params","URLSearchParams","append","HoverableListItem","active","component","C","Outsider","container","handleOutsideClick","contains","target","stopPropagation","preventDefault","onOutsideClick","_this$props","cleanup","ref","c","PopupRoot","alignSelf","position","Popup","background","borderRadius","boxShadow","overflow","AppsMenu","toggle","visible","accountsProduct","homeProduct","restProducts","filter","sort","localeCompare","listItemProps","verticalAlign","marginTop","visibility","minWidth","href","borderBottom","marginRight","map","i","isFirst","isLast","paddingBottom","paddingTop","borderTop","textDecoration","lineHeight","appsMenuFormatter","sortByAttribute","attr","arr","slice","reduce","acc","connectedPeopleMenuFormatter","useStore","selector","useSyncExternalStore","StyledRoot","children","className","MozOsxFontSmoothing","WebkitFontSmoothing","danger43","danger45","danger47","danger93","danger97","darkNeutral07","darkNeutral12","darkNeutral15","darkNeutral17","darkNeutral19","darkNeutral24","darkNeutral32","darkNeutral50","darkNeutral68","darkNeutral88","darkNeutral98","interaction45","interaction50","interaction55","interaction66","interaction91","interaction93","interaction97","lightNeutral12","lightNeutral24","lightNeutral45","lightNeutral62","lightNeutral81","lightNeutral88","lightNeutral93","lightNeutral95","lightNeutral97","lightNeutral98","lightNeutral100","success23","success25","success27","success91","success97","warning20","warning49","warning55","warning63","warning94","warning97","UserMenu","requestClearAppsCache","requestClearConnectedPeopleCache","requestSwitchConnectedPerson","requestUnlinkConnectedPeople","setUserMenuVisible","userMenuVisible","logoutUrl","maxHeight","maxWidth","right","textTransform","textAlign","listStyleType","person","textOverflow","organization_name","ThemeProvider","Divider","action","Button","hover","themeColors","theme","type","StackView","distribution","alignment","axis","grow","paddingHorizontal","paddingVertical","spacing","Text","Icon","Hoverable","innerRef","UserMenuTrigger","orgName","requestConnectedPeopleFetch","showOrgName","text","Topbar","appsMenuVisible","setAppsMenuVisible","routesVisible","setRoutesVisible","requestAppsFetch","routes","search","hideRoutes","showRoutes","useDummyNotifications","Route","Provider","announcements","initialAnnouncements","dismissAnnouncements","newAnnouncements","pcURL","obj","ownProps","resArray","Array","entry","StyledAnnouncement","justifyContent","StyleProvider","_this$props2","join","trim","PlatformAnnouncements","actions","Boolean","announcement","renderItem","StyledDismissButton","_objectDestructuringEmpty","borderWidth","XSymbol","DissmissibleAnnouncement","dangerouslySetInnerHTML","__html","html","ProductAnnouncement","_event","dismissed","updateDismissed","_excluded3","boxSizing","Avatar","incomingUrl","backgroundImage","backgroundPosition","backgroundSize","ClientStorage","update","forceUpdate","AccountSettingsLink","accountsName","CloseMenuButton","getLoginProfilePath","MFAStatus","isActive","statusColor","marginBottom","generateColorScale","designSystem","topbarTheme","baseColor","icons","churchCenter","general","people","toolbar","UserProfileMenu","linkToProfile","userAvatarPath","userName","shrink","weight","truncate","Link","as","underline","icon","variant","title","HeadingUppercase","List","dividerColor","Item","UserMenuAppLockup","originalAppName","_activeRoute$","_activeRoute$$props","routesMenuVisible","setRoutesMenuVisible","productSwitcherVisible","setProductSwitcherVisible","appColors","activeRoute","CurrentRouteComponent","currentRouteComponent","currentRouteText","borderColor","left","top","LocalStorageProvider","MozUserSelect","WebkitTapHighlightColor","WebkitUserSelect","bottom","msUserSelect","userSelect","forcePropagation","borderRight","flexDirection","WebkitOverflowScrolling","overflowY","charAt","toUpperCase","defaultCookieConfig","domain","host","cookieConfigString","Drawer","hasShadow","elevation","open","zIndex","DrawerHeader","closeDrawer","Box","DrawerHeading","Heading","letterSpacing","level","IndicatorDot","pointerEvents","radius","INDICATOR_STYLES","ScrollContainer","overflowTop","setOverflowTop","overflowBottom","setOverflowBottom","containerRef","useRef","bottomEdgeRef","topEdgeRef","handleResize","current","scrollHeight","clientHeight","scrollTop","root","threshold","bottomObserver","IntersectionObserver","isIntersecting","topObserver","bottomTarget","topTarget","observe","resizeObserver","ResizeObserver","unobserve","OverflowIndicator","edge","basis","css","overscrollBehavior","SwitchView","activeIndex","childCount","Children","count","validatedIndex","view","index","inView","ActionType","currentContent","reducer","mount","payload","content","unmount","close","ChatApiContext","createContext","buildResponse","flat","head","tail","relationships","buildRelationships","isArray","buildApi","app","path","get","fields","query","patch","post","ChatApiProvider","chat","services","groups","ChatContext","ChatProvider","useChannelMute","client","useChatContext","muted","setMuteStatus","muteStatus","updateMuteState","on","off","module","exports","hookCallback","some","hooks","arguments","input","prototype","call","isObject","hasOwnProp","isObjectEmpty","getOwnPropertyNames","k","isUndefined","isNumber","isDate","Date","res","arrLen","push","extend","valueOf","createUTC","format","locale","strict","createLocalOrUTC","utc","getParsingFlags","m","_pf","empty","unusedTokens","unusedInput","charsLeftOver","nullInput","invalidEra","invalidMonth","invalidFormat","userInvalidated","iso","parsedDateParts","era","meridiem","rfc2822","weekdayMismatch","isValid","_isValid","flags","parsedParts","isNowValid","isNaN","_d","getTime","invalidWeekday","_strict","bigHour","isFrozen","createInvalid","NaN","fun","len","momentProperties","updateInProgress","copyConfig","to","from","prop","val","momentPropertiesLen","_isAMomentObject","_i","_f","_l","_tzm","_isUTC","_offset","_locale","Moment","config","updateOffset","isMoment","msg","suppressDeprecationWarnings","deprecate","firstTime","deprecationHandler","arg","argLen","Error","stack","deprecations","deprecateSimple","isFunction","Function","mergeConfigs","parentConfig","childConfig","Locale","set","zeroFill","number","targetLength","forceSign","absNumber","Math","abs","pow","max","substr","formattingTokens","localFormattingTokens","formatFunctions","formatTokenFunctions","addFormatToken","token","padded","ordinal","localeData","formatMoment","expandFormat","array","match","mom","output","makeFormatFunction","invalidDate","replaceLongDateFormatTokens","longDateFormat","lastIndex","test","aliases","addUnitAlias","unit","shorthand","lowerCase","normalizeUnits","units","normalizeObjectUnits","inputObject","normalizedProp","normalizedInput","priorities","addUnitPriority","priority","isLeapYear","year","absFloor","ceil","floor","toInt","argumentForCoercion","coercedNumber","isFinite","makeGetSet","keepTime","set$1","month","date","daysInMonth","regexes","match1","match2","match3","match4","match6","match1to2","match3to4","match5to6","match1to3","match1to4","match1to6","matchUnsigned","matchSigned","matchOffset","matchShortOffset","matchWord","addRegexToken","regex","strictRegex","isStrict","getParseRegexForToken","RegExp","regexEscape","matched","p1","p2","p3","p4","tokens","addParseToken","tokenLen","addWeekParseToken","_w","addTimeToArrayFromToken","_a","YEAR","MONTH","DATE","HOUR","MINUTE","SECOND","MILLISECOND","WEEK","WEEKDAY","modMonth","o","monthsShort","months","monthsShortRegex","monthsRegex","monthsParse","defaultLocaleMonths","defaultLocaleMonthsShort","MONTHS_IN_FORMAT","defaultMonthsShortRegex","defaultMonthsRegex","handleStrictParse","monthName","ii","llc","toLocaleLowerCase","_monthsParse","_longMonthsParse","_shortMonthsParse","setMonth","dayOfMonth","min","getSetMonth","computeMonthsParse","cmpLenRev","shortPieces","longPieces","mixedPieces","_monthsRegex","_monthsShortRegex","_monthsStrictRegex","_monthsShortStrictRegex","daysInYear","parseTwoDigitYear","parseInt","getSetYear","createDate","h","M","ms","getFullYear","setFullYear","createUTCDate","UTC","getUTCFullYear","setUTCFullYear","firstWeekOffset","dow","doy","fwd","getUTCDay","dayOfYearFromWeeks","week","weekday","resYear","resDayOfYear","dayOfYear","weekOfYear","resWeek","weekOffset","weeksInYear","weekOffsetNext","shiftWeekdays","ws","n","concat","weekdaysMin","weekdaysShort","weekdays","weekdaysMinRegex","weekdaysShortRegex","weekdaysRegex","weekdaysParse","defaultLocaleWeekdays","defaultLocaleWeekdaysShort","defaultLocaleWeekdaysMin","defaultWeekdaysRegex","defaultWeekdaysShortRegex","defaultWeekdaysMinRegex","handleStrictParse$1","weekdayName","_weekdaysParse","_shortWeekdaysParse","_minWeekdaysParse","day","computeWeekdaysParse","minp","shortp","longp","minPieces","_weekdaysRegex","_weekdaysShortRegex","_weekdaysMinRegex","_weekdaysStrictRegex","_weekdaysShortStrictRegex","_weekdaysMinStrictRegex","hFormat","hours","lowercase","minutes","matchMeridiem","_meridiemParse","seconds","kInput","_isPm","isPM","_meridiem","pos","pos1","pos2","globalLocale","getSetHour","baseConfig","calendar","sameDay","nextDay","nextWeek","lastDay","lastWeek","sameElse","LTS","LT","L","LL","LLL","LLLL","dayOfMonthOrdinalParse","relativeTime","future","past","ss","mm","hh","dd","w","ww","MM","yy","meridiemParse","locales","localeFamilies","commonPrefix","arr1","arr2","minl","normalizeLocale","loadLocale","oldLocale","isLocaleNameSane","_abbr","aliasedRequire","getSetGlobalLocale","values","getLocale","defineLocale","abbr","_config","parentLocale","names","next","chooseLocale","checkOverflow","_overflowDayOfYear","_overflowWeeks","_overflowWeekday","extendedIsoRegex","basicIsoRegex","tzRegex","isoDates","isoTimes","aspNetJsonRegex","obsOffsets","UT","GMT","EDT","EST","CDT","CST","MDT","MST","PDT","PST","configFromISO","l","allowTime","dateFormat","timeFormat","tzFormat","string","exec","isoDatesLen","isoTimesLen","configFromStringAndFormat","configFromRFC2822","parsedArray","monthStr","dayStr","hourStr","minuteStr","secondStr","result","yearStr","weekdayStr","parsedInput","getDay","checkWeekday","obsOffset","militaryOffset","numOffset","hm","calculateOffset","setUTCMinutes","getUTCMinutes","defaults","configFromArray","currentDate","expectedWeekday","yearToUse","nowValue","now","_useUTC","getUTCMonth","getUTCDate","getMonth","getDate","currentDateArray","weekYear","temp","weekdayOverflow","curWeek","GG","W","E","createLocal","_week","gg","_dayOfYear","dayOfYearFromWeekInfo","_nextDay","ISO_8601","RFC_2822","skipped","stringLength","totalParsedInputLength","hour","isPm","meridiemHour","meridiemFixWrap","erasConvertYear","prepareConfig","preparse","tempConfig","bestMoment","scoreToBeat","currentScore","validFormatFound","bestFormatIsValid","configfLen","score","configFromStringAndArray","createFromInputFallback","configFromString","minute","second","millisecond","configFromObject","configFromInput","isUTC","prototypeMin","other","prototypeMax","pickBy","moments","ordering","Duration","duration","years","quarters","quarter","weeks","isoWeek","days","milliseconds","unitHasDecimal","orderLen","parseFloat","isDurationValid","_milliseconds","_days","_months","_data","_bubble","isDuration","absRound","round","separator","utcOffset","sign","offsetFromString","chunkOffset","matcher","parts","matches","cloneWithOffset","model","diff","clone","setTime","local","getDateOffset","getTimezoneOffset","isUtc","aspNetRegex","isoRegex","createDuration","ret","diffRes","base","parseIso","isBefore","positiveMomentsDifference","inp","isAfter","createAdder","direction","period","tmp","addSubtract","isAdding","invalid","subtract","isString","String","monthDiff","wholeMonthDiff","anchor","newLocaleData","defaultFormat","defaultFormatUtc","lang","MS_PER_SECOND","MS_PER_MINUTE","MS_PER_HOUR","MS_PER_400_YEARS","mod$1","dividend","divisor","localStartOfDate","utcStartOfDate","matchEraAbbr","erasAbbrRegex","computeErasParse","abbrPieces","namePieces","narrowPieces","eras","narrow","_erasRegex","_erasNameRegex","_erasAbbrRegex","_erasNarrowRegex","addWeekYearFormatToken","getter","getSetWeekYearHelper","weeksTarget","setWeekAll","dayOfYearData","erasNameRegex","erasNarrowRegex","erasParse","_eraYearOrdinalRegex","eraYearOrdinalParse","isoWeekYear","_dayOfMonthOrdinalParse","_ordinalParse","_dayOfMonthOrdinalParseLenient","getSetDayOfMonth","getSetMinute","getSetMillisecond","getSetSecond","parseMs","proto","preParsePostFormat","time","formats","arrayTest","dataTypeTest","isNumberOrStringArray","objectTest","propertyTest","properties","propertyLen","isMomentInputObject","isCalendarSpec","sod","startOf","calendarFormat","asFloat","that","zoneDelta","endOf","startOfDate","isoWeekday","inputString","postformat","withoutSuffix","humanize","fromNow","toNow","invalidAt","localInput","isBetween","inclusivity","localFrom","localTo","isSame","inputMs","isSameOrAfter","isSameOrBefore","parsingFlags","prioritized","unitsObj","u","getPrioritizedUnits","prioritizedLen","toArray","toObject","toDate","toISOString","keepOffset","inspect","prefix","zone","isLocal","Symbol","for","toJSON","unix","creationData","eraName","since","until","eraNarrow","eraAbbr","eraYear","dir","isoWeeks","weekInfo","weeksInWeekYear","isoWeeksInYear","isoWeeksInISOWeekYear","parseWeekday","parseIsoWeekday","keepLocalTime","keepMinutes","localAdjust","_changeInProgress","parseZone","tZone","hasAlignedHourOffset","isDST","isUtcOffset","zoneAbbr","zoneName","dates","isDSTShifted","_isDSTShifted","array1","array2","dontConvert","lengthDiff","diffs","compareArrays","proto$1","get$1","field","setter","listMonthsImpl","out","listWeekdaysImpl","localeSorted","shift","_calendar","_longDateFormat","formatUpper","tok","_invalidDate","_ordinal","isFuture","_relativeTime","pastFuture","source","_eras","isFormat","_monthsShort","_monthsParseExact","firstDayOfYear","firstDayOfWeek","_weekdays","_weekdaysMin","_weekdaysShort","_weekdaysParseExact","_fullWeekdaysParse","isLower","Infinity","langData","mathAbs","addSubtract$1","absCeil","daysToMonths","monthsToDays","makeAs","alias","asMilliseconds","asSeconds","asMinutes","asHours","asDays","asWeeks","asMonths","asQuarters","asYears","makeGetter","thresholds","substituteTimeAgo","abs$1","toISOString$1","totalSign","ymSign","daysSign","hmsSign","total","toFixed","proto$2","monthsFromDays","argWithSuffix","argThresholds","withSuffix","th","assign","posNegDuration","relativeTime$1","toIsoString","version","updateLocale","tmpLocale","relativeTimeRounding","roundingFunction","relativeTimeThreshold","limit","myMoment","HTML5_FMT","DATETIME_LOCAL","DATETIME_LOCAL_SECONDS","DATETIME_LOCAL_MS","TIME","TIME_SECONDS","TIME_MS","factory","BUTTON_STYLE_BASE_OVERRIDES","getPrimaryButtonStyleOverrides","disabled","spinner","focus","MARK_READ","EVENTS","useChat","useContext","useChatApi","useChatConnectedPeople","setPeople","loading","api","switchPerson","SERVICES_INITIAL_VALUES","plan_id","teams","INITIAL_VALUES","Services","SUBHEADING_STYLES","Subheading","Section","AppGroups","WrapView","team","Badge","source_identifier","Groups","appGroups","PCO_DELETED","badges","TAPESTRY_AVATAR_SIZE","lg","md","sm","avatar","isPerson","TapestryAvatar","image","isChatUser","StreamAvatar","Person","child","Child","Adult","COLUMNS","ChildNotice","childPeople","setOpen","summary","GridView","columns","tooltip","Collapse","gridColumnStart","People","p","MuteChannel","ToggleSwitch","isChecked","ariaLabel","unmute","mute","RemoveChannel","isRemoveHot","setRemoveHot","isRemoving","setRemoving","switchToChannelListView","Settings","isRemovable","Title","isEditable","setTitle","Input","maxLength","onChange","onBlur","onKeyDown","blur","Details","chatGroups","setGroups","group","_group$source_app_nam","_acc$group$source_app","_group$source_type","source_app_name","source_type","useChatGroups","chatMembers","members","setMembers","pcoDeletedMembers","member","user","pco_deleted","stream_member_id","useChatMembers","chatMemberAbility","ability","setAbility","canDelete","canUpdate","can_delete","can_update","useChatMemberAbility","ChannelDetailsView","isChannelDetailsViewActive","switchToChannelView","BetaBadge","ChannelListBlankState","ChannelListBlankStateIcon","strokeWidth","strokeMiterlimit","LinkedAccountSelect","currentPersonId","setConnectedPeople","selected","setSelected","switching","setSwitching","anyConnectedUnread","unread_count","sortedByOrgName","currentPerson","Select","emptyValue","matchWidths","renderValue","Spinner","SwitchAccountsWarning","connectedPerson","Option","LoadingIndicator","Menu","marginHorizontal","LoadingErrorIndicator","align","switchToNewChatShortcutsView","chatAppGrants","useChatAppGrants","appGrants","setAppGrants","grants","grant","app_name","canCreateChat","create_conversations","displayNewConversationButton","PcoAppNames","ChannelMeta","resourceType","resourceId","_metadata$names","metadata","_metadata$names2","Group","borderLeftWidth","Tooltip","openDelay","ChannelMetas","_channel$data","pco_apps","metas","pco_app","getImage","_member$user","SCAvatar","shape","AvatarGroup","UnreadBadge","clampedValue","Preview","lastMessage","setActiveChannel","setActionsOpenForChannel","actionsOpenForChannel","isUnread","isUnreadable","markRead","markUnread","unreadCount","useChannelUnread","setUnreadCount","updateUnread","_event$user","_client$user","countUnread","lastReadMessage","findLast","xs","_msg$user","userID","latestMessages","message_id","channelActionsOpen","handleChannelClick","displayTitle","borderBottomColor","borderBottomWidth","minHeight","tabIndex","WebkitBoxOrient","WebkitLineClamp","_lastMessage$user","_lastMessage$attachme","attachmentCount","attachments","deleted_at","getLastMessagePreview","_channel$state","lastMessageCreatedAt","last_message_at","conversationCreatedAt","created_at","moment","isToday","isThisWeek","isThisYear","datetimeFmt","formatDate","getTimeStamp","Dropdown","iconRight","lockScrollWhileOpen","onClose","onOpen","placement","popoverProps","shouldFlip","onSelect","ChannelListView","channelsLoading","useChannelsLoading","setLoading","channelsQueryState","queryInProgress","queryState","filters","$or","$exists","created_by_id","$in","handlePotentialChannelAddingEvent","setChannels","eventChannel","newChannel","watch","channels","thickness","trackColor","ChannelList","setActiveChannelOnMount","EmptyStateIndicator","onMessageNew","onAddedToChannel","Paginator","InfiniteScroll","CustomEmptyStateIndicator","InjectableCustomHeader","switchToChannelDetailsView","headerRef","useMessageListScrollShadows","listElement","scrollToBottom","useMessageListContext","_headerRef$current","headerHeight","offsetHeight","handleScroll","CustomHeader","SHARED_TOOLTIP_PROPS","SHARED_LAYOUT_PROPS","CENTER","HORIZONTAL","CustomMessageStatus","MessageStatus","MessageReadStatus","CustomMessageReadStatus","MessageDeliveredStatus","CustomMessageDeliveredStatus","readBy","useMessageContext","useTranslationContext","tooltipTitle","getReadByTooltipText","mapToUserNameOrId","justReadByMe","readByCount","_client$user2","customReactionOptions","init","emojiSearchIndex","SearchIndex","MessageInput","handleSubmit","isUploadEnabled","maxFilesLeft","numberOfUploads","uploadNewFiles","useMessageInputContext","focused","setFocused","multipleUploads","useChannelStateContext","getRootProps","isDragActive","isDragReject","useDropzone","multiple","noClick","onDrop","isChildOfModal","useIsChildOfModal","wrapInputRef","useAutoFocus","borderTopWidth","FileUploadUI","outlineOffset","outlineStyle","refKey","DropzoneUI","AttachmentPreviewList","ChatAutoComplete","placeholder","onFocus","EmojiPicker","pickerProps","previewPosition","nanoid","inputEl","getElementById","htmlFor","click","UploadButton","onFileChange","borderStyle","setIsChildOfModal","modal","_wrapInputRef$current","_input$value","_input$value2","setSelectionRange","ChannelView","_channel$data2","isChannelViewActive","updateCount","handleUpdate","hasMessages","sharedProps","Channel","EditMessageInput","reactionOptions","doMarkReadRequest","logChatPromiseExecution","Window","WithMessages","NoMessages","StreamMessageInput","disableMentions","MessageList","messageActions","getAllPcoMeta","elements","querySelectorAll","property","element","substring","observer","MutationObserver","prevState","nextState","hasTriggeredObserve","usePcoMeta","childList","subtree","GroupsShortcuts","isLoading","isError","shouldRunInitialLoad","pcoMeta","per_page","nextLink","setNextLink","setIsLoading","setIsError","hasMore","loadGroups","results","headerImage","header_image","membershipsCount","memberships_count","canCreateConversation","can_create_conversation","prev","links","finally","loadMore","useMyGroups","setFilterValues","switchToNewGroupsChatView","showAll","setShowAll","filteredGroups","visibleGroups","displayGroupsWithoutChatPermissionDisclaimer","thumbnail","borderBottomStyle","alt","src","objectFit","HasGroupsWithoutChatPermission","ToggleGroups","BlankState","groupId","totalCount","include","setTotalCount","included","avatar_url","first_name","last_name","total_count","useNewGroupChatPeople","somePeople","someChildPeople","ServicesChatShortcuts","switchToNewServicesChatView","setSetshowAll","serviceTypeTeams","setData","Chat","teams_i_lead","service_type_name","team_name","service_type","service_type_id","team_id","serviceTypeEntry","useServicesChatShortcuts","NoTeams","iconLeft","NewChatShortcutsView","isNewChatShortcutsViewActive","NewChatViewFooter","buttonDisabled","showSpinner","onButtonClick","NewChatViewHeader","NewGroupsChatView","_filterValues$Groups","isCreating","setIsCreating","filterValues","findAndSwitchToChannel","wrap","InputLabel","controls","required","NEW_SERVICES_CHAT_FOOTER_TEXT","createChat","isFetching","setCreating","setFetching","cache","filterParams","fetchPeople","getPeople","useChatPeople","peopleCount","toSelectOptions","label","Plans","setOptions","isEnabled","setEnabled","fetchingCount","setFetchingCount","isFetchable","isInvalid","plans","prevOptions","availableOptions","uniqOptions","option","defaultValue","characterMap","chars","allAccents","firstAccent","removeAccents","removeAccents_1","rankings","CASE_SENSITIVE_EQUAL","EQUAL","STARTS_WITH","WORD_STARTS_WITH","CONTAINS","ACRONYM","MATCHES","NO_MATCH","matchSorter","defaultBaseSortFn","rankedValue","items","_options$threshold","_options$baseSort","baseSort","_options$sorter","sorter","matchedItems","aRank","rank","aKeyIndex","keyIndex","bRank","bKeyIndex","sortRankedValues","rankingInfo","getMatchRanking","keyThreshold","valuesToRank","allValues","J","getKeyAttributes","itemValues","getItemValues","I","itemValue","getAllValuesToRank","_ref3","newRank","newRankedValue","minRanking","maxRanking","getHighestRanking","_rankingInfo$keyThres","testString","stringToRank","prepareValueForComparison","startsWith","acronym","wordInString","splitByHyphenWord","matchingInOrderCharCount","charNumber","findMatchingCharacter","matchChar","firstIndex","getClosenessRanking","_ref4","keepDiacritics","nestedKey","nestedValues","nestedItem","nestedValue","getNestedValues","defaultKeyAttributes","teamOptionSort","aService","aTeam","order","bService","bTeam","Teams","searchTerm","setSearchTerm","unselected","useTeamOptions","isSelectAll","unselectedGroups","groupTeamOptions","_option$group","renderRight","Combobox","Popover","openOnFocus","closeOnSelect","onClear","renderLeft","groupName","groupOptions","idx","groupDisplayName","word","getGroupDisplayName","tooManyOptionsForSelectAll","handleBlur","inline","italic","PeopleBlankState","ServicesChatOptions","isFiltering","isPlansActive","first","useServicesChatFilter","NewServicesChatView","isNewServicesChatViewActive","ChatController","useChatFilter","_setFilterValuesInner","setActiveIndex","isChannelListViewActive","isNewGroupsChatViewActive","stream_channel_id","queryChannels","$eq","ChatComponent","chatClient","StreamChat","ChatTool","chatStreamUser","streamUser","setChatClient","didUserConnectInterrupt","api_key","connectionPromise","connectUser","tokenProvider","disconnectUser","log","useClient","static","HeadingIcon","sectionName","currentAppName","lowerCaseSectionName","Logo","markOnly","HitResult","hit","objectID","CustomSearchBox","indexName","refine","setQuery","useSearchBox","hits","useHits","category","resultIndex","renderTo","selectedValue","handleSearchSelect","newTab","DocumentationSearch","searchClient","algoliasearch","InstantSearch","Configure","hitsPerPage","components","Helpdesk","helpdeskConfig","UiExtensionFirstPartyComponent","extensionId","loadingFallback","additionalComponents","CalendlyWidget","currentPageParams","Eyebrow","MarkReadDot","isRead","hoverRef","isHover","elementRef","setValue","handleMouseEnter","handleMouseLeave","node","useHover","NotificationItem","mobile","onCreateTask","onMarkAsRead","onToggleRead","showBottomBorder","notification","createdAt","link","setIsActive","datetimeFmtOptions","timeZone","flexGrow","borderLeft","Calendar","Giving","Publishing","Registrations","taskUrl","datetime","NotificationsMenuBlankState","description","buildNotificationFromApiResponse","_findInIncluded","_findInIncluded$attri","_findInIncluded2","_findInIncluded2$attr","_resp$relationships","_resp$relationships$w","_resp$relationships$w2","_resp$attributes$read","findInIncluded","notificationData","web_payloads","read_at","SectionHeaderButton","SectionHeaderTitle","showRead","setShowRead","defaultStyle","transitionStyles","entering","handleCreateTask","handleMarkAllAsRead","handleMarkAsRead","handleToggleRead","hasError","read","useNotifications","setNotifications","setHasError","notificationsOrganizer","fetchNotifications","exception","extractPayloadFromJoltMessage","updateStateFromJoltMessage","message","fetchNotification","candidate","removeNotification","joltMessageNotificationDataPayload","newNotifications","markAsReadOrUnread","notificationIds","readOrUnread","unreadIds","TransitionGroup","exit","Transition","NavLinkWithBadge","badge","TRStackView","Tasks","isOpen","onReceiveWorker","openDrawer","currentPath","onChangePath","latestJoltMessage","setLatestJoltMessage","requestedJoltChannel","setRequestedJoltChannel","connection_id","handleJoltMessage","timestamp","pendoTrackEvent","pendo","track","requestJoltChannel","trackPendo","TOOLS_MAP","toolsRouteMap","fromEntries","v","Toolbar","autoMountTool","onReceiveTasksWorker","toolbarFragmentRoute","onChangeToolbarFragmentRoute","clearRoute","toolbarFragment","updateFragment","getFragment","hash","onHashChange","useFragmentKey","onChangeRoute","tool","nextHash","history","replaceState","useFragmentRouting","toolStateCookie","setToolStateCookie","cookie","setCookie","cookieState","setCookieState","decodeURIComponent","readCookie","newValue","encodeURIComponent","useCookie","_unused","useJSONCookie","autoMountedTool","dispatch","useReducer","mounted","scrollTo","openHelpdesk","handleToolOnClick","loginSettingsUrl","profileUrl","HelpDeskTool","helpdeskOnClick","toggleDrawer","setToolAndOpenDrawer","useChatStreamUser","onConnectionFailure","setStreamUser","chatJoltChannel","fetchStreamUser","setupStreamUser","attrs","TOOLS","UserProfile","OriginalUserProfile","isMobile","getMatches","matchMedia","setMatches","handleChange","addListener","removeListener","useMediaQuery","visibleWindowHeight","setVisibleWindowHeight","useLayoutEffect","innerHeight","_document$getElementB","behavior","toolSpecificProps","currentToolProps","indicatorState","UiExtensionDataContext","borderTopColor","borderLeftColor","outlineColor","outlineWidth","Tool"],"mappings":"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,IACL,EAAK,IACL,EAAK,IACL,EAAK,IACL,EAAK,IACL,EAAK,IACL,EAAK,IACL,EAAK,IACL,EAAK,IACL,EAAK,IACL,EAAK,IACL,GAAM,IACN,GAAM,IACN,EAAK,IACL,EAAK,IACL,EAAK,IACL,EAAK,IACL,EAAK,IACL,EAAK,IACL,EAAK,IACL,EAAK,IACL,EAAK,IACL,EAAK,IACL,EAAK,IACL,EAAK,IACL,EAAK,IACL,EAAK,IACL,EAAK,IACL,EAAK,IACL,EAAK,IACL,EAAK,IACL,EAAK,IACL,EAAK,IACL,EAAK,IACL,EAAK,IACL,EAAK,IACL,EAAK,IACL,EAAK,IACL,EAAK,IACL,EAAK,IACL,EAAK,IACL,EAAK,IACL,EAAK,IACL,EAAK,IACL,EAAK,IACL,EAAK,IACL,EAAK,IACL,EAAK,IACL,EAAK,IACL,EAAK,IACL,EAAK,IACL,EAAK,IACL,EAAK,IACL,EAAK,KACL,EAAK,KACL,EAAK,IACL,EAAK,IACL,EAAK,IACL,EAAK,IACL,EAAK,IACL,EAAK,IACL,GAAM,IACN,GAAM,IACN,EAAK,IACL,EAAK,IACL,EAAK,IACL,EAAK,IACL,EAAK,IACL,EAAK,IACL,EAAK,IACL,EAAK,IACL,EAAK,IACL,EAAK,IACL,EAAK,IACL,EAAK,IACL,GAAM,IACN,GAAM,IACN,EAAK,IACL,EAAK,IACL,EAAK,IACL,EAAK,IACL,EAAK,IACL,EAAK,IACL,EAAK,IACL,GAAM,IACN,GAAM,IACN,EAAK,IACL,EAAK,IACL,EAAK,IACL,EAAK,IACL,EAAK,IACL,EAAK,IACL,EAAK,KACL,EAAK,KACL,GAAM,IACN,GAAM,IACN,EAAK,IACL,EAAK,IACL,EAAK,IACL,EAAK,IACL,EAAK,IACL,EAAK,IACL,GAAM,IACN,GAAM,IACN,EAAK,IACL,EAAK,IACL,EAAK,IACL,EAAK,IACL,EAAK,IACL,EAAK,IACL,EAAK,IACL,EAAK,IACL,EAAK,IACL,EAAK,IACL,EAAK,IACL,EAAK,IACL,EAAK,IACL,EAAK,IACL,EAAK,IACL,EAAK,IACL,EAAK,IACL,EAAK,IACL,EAAK,IACL,EAAK,IACL,GAAM,IACN,GAAM,IACN,EAAK,IACL,EAAK,IACL,EAAK,IACL,EAAK,IACL,EAAK,IACL,EAAK,IACL,EAAK,IACL,EAAK,IACL,EAAK,IACL,EAAK,IACL,EAAK,IACL,EAAK,IACL,EAAK,IACL,EAAK,IACL,GAAM,IACN,GAAM,IACN,EAAK,IACL,EAAK,IACL,EAAK,IACL,EAAK,IACL,GAAM,IACN,GAAM,IACN,EAAK,IACL,EAAK,IACL,EAAK,IACL,GAAM,IACN,GAAM,IACN,EAAK,IACL,EAAK,IACL,EAAK,IACL,EAAK,IACL,EAAK,IACL,EAAK,IACL,EAAK,IACL,EAAK,IACL,EAAK,IACL,EAAK,IACL,EAAK,IACL,EAAK,IACL,EAAK,IACL,EAAK,IACL,EAAK,IACL,EAAK,IACL,EAAK,IACL,EAAK,IACL,EAAK,IACL,EAAK,IACL,EAAK,IACL,EAAK,IACL,EAAK,IACL,EAAK,IACL,EAAK,IACL,EAAK,IACL,EAAK,IACL,EAAK,IACL,EAAK,IACL,EAAK,IACL,EAAK,IACL,EAAK,IACL,EAAK,IACL,EAAK,IACL,EAAK,KACL,EAAK,KACL,EAAK,IACL,EAAK,IACL,EAAK,KACL,EAAK,KACL,EAAK,IACL,EAAK,IACL,EAAK,IACL,EAAK,IACL,GAAM,IACN,GAAM,IACN,EAAK,IACL,EAAK,IACL,EAAK,IACL,EAAK,IACL,GAAM,IACN,GAAM,IACN,GAAM,IACN,GAAM,IACN,GAAM,IACN,GAAM,IACN,EAAK,IACL,EAAK,IACL,EAAK,IACL,EAAK,IACL,EAAK,IACL,EAAK,IACL,EAAK,IACL,EAAK,IACL,EAAK,IACL,EAAK,IACL,EAAK,IACL,EAAK,IACL,EAAK,IACL,EAAK,IACL,EAAK,IACL,EAAK,IACL,EAAK,IACL,EAAK,IACL,EAAK,IACL,EAAK,IACL,EAAK,IACL,EAAK,IACL,EAAK,IACL,EAAK,IACL,GAAM,IACN,GAAM,IACN,GAAM,IACN,GAAM,IACN,GAAM,IACN,GAAM,IACN,GAAM,IACN,GAAM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"}