{ "version": 3, "sources": ["../../../../../../internal/esbuild/entrypoints/modern/proposals.ts", "sentry-debug-id-stub:_sentry-debug-id-injection-stub?sentry-module-id=5ccd1e37-6294-42bf-9ab6-5b62d086daff", "../../../../../../internal/esbuild/entrypoints/modern/proposals.ts", "../../../../../../owl-nest/ulule/features/proposals/src/index.tsx", "../../../../../../owl-nest/ulule/features/proposals/src/App.tsx", "../../../../../../owl-nest/ulule/features/proposals/src/Layout/index.tsx", "../../../../../../owl-nest/ulule/features/proposals/src/Layout/Header.tsx", "../../../../../../owl-nest/ulule/features/proposals/src/UFE.ts", "../../../../../../owl-nest/ulule/features/proposals/src/Layout/ArrowDecorationSvg.tsx", "../../../../../../owl-nest/ulule/features/proposals/src/Layout/PreCreateHeader.tsx", "../../../../../../owl-nest/ulule/features/proposals/src/Layout/Aside.tsx", "../../../../../../owl-nest/ulule/features/proposals/src/Layout/Footer.tsx", "../../../../../../owl-nest/ulule/features/proposals/src/components/Carousel.tsx", "../../../../../../owl-nest/ulule/features/proposals/src/components/ImageMedia.tsx", "../../../../../../owl-nest/ulule/features/proposals/src/data/carousel.ts", "../../../../../../owl-nest/ulule/features/proposals/src/Layout/WideFooter.tsx", "../../../../../../owl-nest/ulule/features/proposals/src/components/CommentCarousel.tsx", "../../../../../../owl-nest/ulule/features/proposals/src/components/CommentCard.tsx", "../../../../../../owl-nest/ulule/features/proposals/src/data/comments.ts", "../../../../../../owl-nest/ulule/features/proposals/src/Layout/Services.tsx", "../../../../../../owl-nest/common/duvet/src/PopHeading.tsx", "../../../../../../owl-nest/common/duvet/src/MediaStackWithPath.tsx", "../../../../../../owl-nest/common/duvet/src/HorizontalMedia.tsx", "../../../../../../owl-nest/ulule/features/proposals/src/views/Duplicate/index.tsx", "../../../../../../owl-nest/ulule/features/proposals/src/hooks/useDuplicate.ts", "../../../../../../owl-nest/ulule/features/proposals/src/hooks/useProposalForm.ts", "../../../../../../owl-nest/ulule/features/proposals/src/hooks/useProposal.ts", "../../../../../../owl-nest/ulule/features/proposals/src/views/FormCreate/index.tsx", "../../../../../../owl-nest/ulule/features/proposals/src/views/FormCreate/Section.tsx", "../../../../../../owl-nest/ulule/features/proposals/src/views/FormCreate/DescriptionField.tsx", "../../../../../../owl-nest/ulule/features/proposals/src/views/FormCreate/GoalField.tsx", "../../../../../../owl-nest/ulule/features/proposals/src/views/FormCreate/types.ts", "../../../../../../owl-nest/ulule/features/proposals/src/views/FormCreate/rangeLabels.tsx", "../../../../../../owl-nest/ulule/features/proposals/src/views/FormCreate/RewardTypeField.tsx", "../../../../../../owl-nest/ulule/features/proposals/src/views/FormCreate/LegalEntityField.tsx", "../../../../../../owl-nest/ulule/features/proposals/src/views/FormCreate/LinksField.tsx", "../../../../../../owl-nest/ulule/features/proposals/src/views/FormCreate/createSocialLink.ts", "../../../../../../owl-nest/ulule/features/proposals/src/views/FormCreate/PhoneField.tsx", "../../../../../../owl-nest/ulule/features/proposals/src/views/FormCreate/EmailField.tsx", "../../../../../../owl-nest/ulule/features/proposals/src/views/FormCreate/SocialLinkModal.tsx", "../../../../../../owl-nest/ulule/features/proposals/src/views/FormCreate/LocationModal.tsx", "../../../../../../owl-nest/ulule/features/proposals/src/views/FormCreate/CommunityField.tsx", "../../../../../../owl-nest/ulule/features/proposals/src/views/PreCreate/index.tsx", "../../../../../../owl-nest/ulule/features/proposals/src/Layout/PreCreateInfo.tsx", "../../../../../../owl-nest/ulule/features/proposals/src/icons/illustrations.tsx", "../../../../../../owl-nest/ulule/features/proposals/src/views/Loading/index.tsx", "../../../../../../owl-nest/ulule/features/proposals/src/views/Loading/Progress.tsx", "../../../../../../owl-nest/ulule/features/proposals/src/views/Loading/useLoadingProgress.ts", "../../../../../../owl-nest/ulule/features/proposals/src/views/Loading/PollState.tsx", "../../../../../../owl-nest/ulule/features/proposals/src/views/Loading/LinkState.tsx", "../../../../../../owl-nest/ulule/features/proposals/src/views/Loading/DoneState.tsx", "../../../../../../owl-nest/ulule/features/proposals/src/views/Loading/DuplicateState.tsx", "../../../../../../owl-nest/ulule/features/proposals/src/views/Loading/StaffDuplicateState.tsx", "../../../../../../owl-nest/ulule/features/proposals/src/views/Loading/Connect.tsx", "../../../../../../owl-nest/ulule/features/proposals/src/views/Refused.tsx", "../../../../../../owl-nest/ulule/features/proposals/src/views/StaffDuplicate.tsx"], "sourcesContent": ["\n import \"_sentry-debug-id-injection-stub\";\n import * as OriginalModule from \"./internal/esbuild/entrypoints/modern/proposals.ts\";\n export default OriginalModule.default;\n export * from \"./internal/esbuild/entrypoints/modern/proposals.ts\";", "!function(){try{var e=\"undefined\"!=typeof window?window:\"undefined\"!=typeof global?global:\"undefined\"!=typeof globalThis?globalThis:\"undefined\"!=typeof self?self:{};var n=(new e.Error).stack;n&&(e._sentryDebugIds=e._sentryDebugIds||{},e._sentryDebugIds[n]=\"d8be157e-4fbe-45f2-a55b-b09d104588b6\",e._sentryDebugIdIdentifier=\"sentry-dbid-d8be157e-4fbe-45f2-a55b-b09d104588b6\");}catch(e){}}();", "import '@owl-nest/proposals'\n", "import * as React from 'react'\nimport * as ReactDOM from 'react-dom/client'\n\nimport { initializeLocalization } from '@owl-nest/localize'\nimport * as logger from '@owl-nest/logger'\nimport { Header } from '@ulule/header'\nimport * as layout from '@owl-nest/layout'\nimport * as env from '@owl-nest/config'\n\nimport { App } from './App'\n\nfunction renderHeader(): void {\n const headerContainer = document.querySelector('#react-ulule-header')\n\n if (headerContainer) {\n const headerRoot = ReactDOM.createRoot(headerContainer)\n headerRoot.render(
)\n } else {\n logger.err('Header container is missing')\n }\n}\n\nfunction renderFooter(): void {\n const userConfig = env.getUserConfig()\n const footerContainer = document.querySelector('#react-ulule-footer')\n\n if (footerContainer) {\n const footerRoot = ReactDOM.createRoot(footerContainer)\n footerRoot.render()\n } else {\n logger.err('Footer container is missing')\n }\n}\n\nasync function mount(): Promise {\n await env.initUserConfig()\n const userConfig = env.getUserConfig()\n\n await initializeLocalization(userConfig.lang, env.LOCALE_FILES[userConfig.lang])\n\n const appContainer = document.querySelector('#js-app-proposal')\n\n if (appContainer) {\n const appRoot = ReactDOM.createRoot(appContainer)\n appRoot.render()\n }\n\n renderHeader()\n renderFooter()\n}\n\nmount().catch(console.log)\n", "import * as React from 'react'\nimport { Route, Routes, BrowserRouter, useLocation, Outlet, Navigate } from 'react-router'\nimport { FormLayout, PreCreateLayout } from './Layout'\nimport { Duplicate } from './views/Duplicate'\nimport * as env from '@owl-nest/config'\nimport * as shadow from '@owl-nest/shadow'\n\nimport { FormCreate } from './views/FormCreate'\nimport { PreCreate } from './views/PreCreate'\nimport { Loading } from './views/Loading'\nimport { Refused } from './views/Refused'\nimport { StaffDuplicate } from './views/StaffDuplicate'\n\nfunction DefaultFormLayout({}) {\n return (\n \n \n \n \n \n )\n}\n\nfunction DefaultPreCreateLayout({}) {\n const userConfig = env.useUserEnv()\n\n if (userConfig.lang === 'fr') {\n return (\n \n \n \n \n \n )\n } else return \n}\n\nexport function App() {\n return (\n \n \n \n }>\n } />\n \n\n }>\n } />\n } />\n } />\n } />\n } />\n \n \n \n \n )\n}\n\ntype BackToTopProps = { children: React.ReactNode }\n\nfunction BackToTop({ children }: BackToTopProps) {\n const location = useLocation()\n\n React.useEffect(() => {\n window.scrollTo(0, 0)\n }, [location])\n\n return <>{children}\n}\n", "import * as React from 'react'\nimport { styled } from 'next-yak'\nimport { useDramaticallyInefficientGlobalCss, css } from '@owl-nest/yak/extra-runtime'\n\nimport * as plume from '@ulule/owl-kit-components/next'\n\nimport { Header } from './Header'\nimport { PreCreateHeader } from './PreCreateHeader'\nimport { Aside } from './Aside'\nimport { Footer } from './Footer'\nimport { WideFooter } from './WideFooter'\nimport { Services } from './Services'\n\nexport type LayoutProps = {\n children: React.ReactNode\n}\n\nexport function PreCreateLayout({ children }: LayoutProps): React.ReactElement {\n return (\n <>\n \n \n \n <>{children}\n \n\n \n\n \n \n \n\n \n \n )\n}\n\nexport function FormLayout({ children }: LayoutProps): React.ReactElement {\n return (\n <>\n \n \n \n {children}\n \n \n \n )\n}\n\nfunction GlobalStyle() {\n useDramaticallyInefficientGlobalCss(css`\n body {\n background-color: ${plume.COLORS.PRIMARY_SAND_100};\n }\n `)\n\n return <>\n}\n\n// Form layout\nconst GridBase = styled.section`\n max-width: 1221px;\n margin: 30px auto 0;\n padding: 58px 16px 0 16px;\n`\n\nconst FormGrid = styled(GridBase)`\n @media screen and ${plume.BREAKPOINTS.LAPTOP} {\n margin-top: 60px;\n display: grid;\n grid-template:\n 'header .' auto\n 'main aside' auto;\n }\n`\n\nconst GridHeader = styled(Header)`\n grid-area: header;\n margin-bottom: 32px;\n\n @media screen and ${plume.BREAKPOINTS.TABLET} {\n margin-left: 56px;\n }\n`\n\nconst GridMain = styled.div`\n grid-area: main;\n padding: 24px 16px;\n background-color: ${plume.COLORS.PRIMARY_GREY_000};\n margin: 0 -16px;\n\n @media screen and ${plume.BREAKPOINTS.TABLET} {\n border-radius: 8px;\n padding: 40px 56px 30px 56px;\n display: flex;\n margin: 0;\n margin-bottom: 50px;\n }\n\n @media screen and ${plume.BREAKPOINTS.LAPTOP} {\n padding-left: 20px;\n padding-right: 20px;\n }\n\n @media screen and ${plume.BREAKPOINTS.LAPTOP_L} {\n padding-left: 56px;\n padding-right: 56px;\n }\n`\n\nconst GridAside = styled(Aside)`\n grid-area: aside;\n margin: 50px auto 0;\n max-width: 400px;\n\n @media screen and ${plume.BREAKPOINTS.LAPTOP} {\n margin: 0 0 0 60px;\n }\n\n @media screen and ${plume.BREAKPOINTS.LAPTOP_L} {\n max-width: 450px;\n }\n`\n\n// Precreate page layout\nconst PreCreateWrapper = styled.section`\n margin: 30px auto 0;\n padding: 58px 16px 40px 16px;\n background: linear-gradient(to bottom, ${plume.COLORS.PRIMARY_SAND_100} 30%, ${plume.COLORS.PRIMARY_GREY_000} 30%);\n\n @media screen and ${plume.BREAKPOINTS.TABLET} {\n background: linear-gradient(to bottom, ${plume.COLORS.PRIMARY_SAND_100} 22%, ${plume.COLORS.PRIMARY_GREY_000} 22%);\n }\n\n @media screen and ${plume.BREAKPOINTS.LAPTOP} {\n background: linear-gradient(to bottom, ${plume.COLORS.PRIMARY_SAND_100} 38%, ${plume.COLORS.PRIMARY_GREY_000} 38%);\n margin-top: 60px;\n display: flex;\n flex-direction: column;\n }\n`\n\nconst PreCreateHeaderBlock = styled(PreCreateHeader)`\n margin-bottom: 0px;\n\n @media screen and ${plume.BREAKPOINTS.TABLET} {\n margin-left: 56px;\n margin-bottom: 40px;\n }\n`\n\nconst FooterWrapper = styled.section`\n background-color: ${plume.COLORS.PRIMARY_GREY_000};\n margin: 0 auto;\n padding: 58px 16px 50px 16px;\n`\n\nconst FooterBlock = styled(Footer)`\n display: none;\n margin: 0 auto;\n max-width: 973px;\n padding: 0 124px;\n\n @media screen and ${plume.BREAKPOINTS.TABLET} {\n display: block;\n }\n\n @media screen and ${plume.BREAKPOINTS.LAPTOP_L} {\n padding: 0;\n }\n`\n\nconst WideFooterBlock = styled(WideFooter)`\n display: none;\n\n @media screen and ${plume.BREAKPOINTS.TABLET} {\n display: flex;\n flex-direction: column;\n align-items: center;\n }\n`\n\nconst ServicesBlock = styled(Services)``\n", "import * as React from 'react'\nimport { styled } from 'next-yak'\n\nimport { t, tc } from '@owl-nest/localize'\nimport * as plume from '@ulule/owl-kit-components/next'\nimport * as service from '@owl-nest/services'\nimport type { PolymorphicComponent, YakComponentOf } from '@owl-nest/yak/extra-runtime'\nimport * as UFE from '../UFE'\nimport { QueryStatus, data } from '@owl-nest/hooks'\nimport { ArrowDecorationSvg } from './ArrowDecorationSvg'\n\ntype HeaderProps = React.HTMLAttributes\n\nfunction HeaderComponent(props: HeaderProps): React.ReactElement {\n const usePartner = service.partner.usePartner(UFE.AFFILIATION_ID)\n const partner = data(usePartner.response)\n const isPartnerDefault = partner?.is_default\n const partnerLogo = partner?.logo?.versions?.full?.url\n\n React.useEffect(() => {\n if (usePartner.response.status === QueryStatus.PRISTINE) {\n usePartner.query()\n }\n }, [usePartner.response.status])\n\n return (\n
\n \n {tc('Get started [emphasis: on Ulule]', { emphasis: <Emphasis /> })}\n <ArrowDecoration />\n \n \n \n {t('Take a few minutes to describe it so that we can guide you as well as possible.')}\n \n {!isPartnerDefault && partnerLogo && (\n \n {t('In partnership with')}\n \n \n )}\n
\n )\n}\n\nconst Emphasis = styled.em`\n color: ${plume.COLORS.PRIMARY_BLUE_500};\n font-style: normal;\n display: block;\n`\n\nconst Title = styled(plume.styles.heading.XL)`\n position: relative;\n\n ${Emphasis} {\n white-space: pre;\n }\n\n @media screen and ${plume.BREAKPOINTS.TABLET} {\n ${plume.styles.heading.styles.XXL};\n }\n` as YakComponentOf>\n\nconst Subtitle = styled(plume.styles.heading.XXS)`\n position: relative;\n\n ${plume.glyphs.decoration.Quote} {\n position: absolute;\n height: 14px;\n left: -22px;\n top: -5px;\n }\n\n @media screen and ${plume.BREAKPOINTS.TABLET} {\n ${plume.glyphs.decoration.Quote} {\n left: -28px;\n }\n }\n`\n\nconst PartnerLabel = styled(plume.styles.heading.XXXXXXS)`\n color: ${plume.COLORS.TEXT_SECONDARY};\n margin: 0 16px 0 0;\n text-transform: uppercase;\n`\n\nconst PartnerLogo = styled.img`\n max-width: 65px;\n max-height: 65px;\n`\n\nconst PartnerBlock = styled.div`\n display: flex;\n align-items: end;\n`\n\nconst ArrowDecoration = styled(ArrowDecorationSvg)`\n position: absolute;\n transform: rotate(15deg);\n left: -80px;\n height: 170px;\n top: 120px;\n display: none;\n\n @media screen and ${plume.BREAKPOINTS.TABLET} {\n display: block;\n }\n`\n\nexport const Header = styled(HeaderComponent)`\n display: grid;\n grid-template: 'title title' auto 'subtitle subtitle' auto 'partner partner' auto / 1fr auto;\n\n ${Title} {\n grid-area: title;\n margin-bottom: 30px;\n }\n\n ${Subtitle} {\n grid-area: subtitle;\n max-width: 480px;\n }\n\n ${PartnerBlock} {\n grid-area: partner;\n justify-self: end;\n }\n\n @media screen and ${plume.BREAKPOINTS.TABLET} {\n grid-template: 'title title' auto 'subtitle partner' auto / 1fr auto;\n }\n`\n", "import * as api from '@owl-nest/api-client/latest'\nimport { lens } from '@owl-nest/config'\nimport { type SrcSet } from './components/ImageMedia'\n\nexport type Country = { content: string; flag: string; prefix: number; value: string }\n\ntype Window = {\n UFE: {\n assets: {\n defaultProjectPicture: string\n rocket: string\n fire: string\n spaceBackground: string\n }\n flags: {}\n gtmKey?: string\n urls: {\n join: string\n }\n user: (api.AuthenticatedUser & { is_authenticated: true }) | { is_authenticated: false }\n }\n PROPOSAL_DATA: {\n extraData: { affiliation_id?: number; partner_id: number }\n images: Record\n islands: Record\n countries: Country[]\n currencies: { content: string; value: string }[]\n }\n}\n\nconst windowLens = lens()\n\nexport const FLAGS = windowLens.get('UFE').get('flags').value(globalThis)\n\nexport const URLS = windowLens.get('UFE').get('urls').value(globalThis, { trust: true })\n\nexport const PROPOSAL_IMAGES = windowLens.get('PROPOSAL_DATA').get('images').value(globalThis, { trust: true })\n\nexport const ISLANDS = windowLens.get('PROPOSAL_DATA').get('islands').value(globalThis, { trust: true })\n\nexport const CURRENCIES = windowLens.get('PROPOSAL_DATA').get('currencies').value(globalThis, { trust: true })\n\nexport const USER = windowLens.get('UFE').get('user').value(globalThis, { trust: true })\n\nexport const GTM_KEY = windowLens.get('UFE').get('gtmKey').value(globalThis, { forgive: true })\n\nexport const AFFILIATION_ID = windowLens\n .get('PROPOSAL_DATA')\n .get('extraData')\n .get('affiliation_id')\n .value(globalThis, { forgive: true, silent: true })\n\nexport const PARTNER_ID = windowLens\n .get('PROPOSAL_DATA')\n .get('extraData')\n .get('partner_id')\n .value(globalThis, { trust: true })\n\nexport const ROCKET_IMAGE = windowLens.get('UFE').get('assets').get('rocket').value(globalThis, { trust: true })\n\nexport const FIRE_IMAGE = windowLens.get('UFE').get('assets').get('fire').value(globalThis, { trust: true })\n\nexport const SPACE_BACKGROUND_IMAGE = windowLens\n .get('UFE')\n .get('assets')\n .get('spaceBackground')\n .value(globalThis, { trust: true })\n", "import * as React from 'react'\nimport * as plume from '@ulule/owl-kit-components/next'\n\nexport function ArrowDecorationSvg({ className, style }: { className?: string; style?: React.CSSProperties }) {\n return (\n \n \n \n \n )\n}\n", "import * as React from 'react'\nimport { styled } from 'next-yak'\n\nimport * as plume from '@ulule/owl-kit-components/next'\nimport * as service from '@owl-nest/services'\nimport type { PolymorphicComponent, YakComponentOf } from '@owl-nest/yak/extra-runtime'\nimport * as UFE from '../UFE'\nimport { QueryStatus, data } from '@owl-nest/hooks'\nimport { ArrowDecorationSvg } from './ArrowDecorationSvg'\n\ntype PreCreateHeaderProps = React.HTMLAttributes\n\nfunction PreCreateHeaderComponent(props: PreCreateHeaderProps): React.ReactElement {\n const usePartner = service.partner.usePartner(UFE.AFFILIATION_ID)\n const partner = data(usePartner.response)\n const isPartnerDefault = partner?.is_default\n const partnerLogo = partner?.logo?.versions?.full?.url\n\n React.useEffect(() => {\n if (usePartner.response.status === QueryStatus.PRISTINE) {\n usePartner.query()\n }\n }, [usePartner.response.status])\n\n return (\n \n \n Lancer une collecte,\n <br /> c'est <Emphasis>simple</Emphasis> et c'est <Emphasis>gratuit</Emphasis>\n \n \n \n Commission de 8% uniquement sur les collectes réussies.\n
\n Meilleur taux de succès au monde !\n \n
\n {!isPartnerDefault && partnerLogo && (\n \n In partnership with\n \n \n )}\n
\n )\n}\n\nconst Wrapper = styled.div`\n display: flex;\n flex-direction: column;\n align-items: center;\n`\n\nconst Emphasis = styled.em`\n color: ${plume.COLORS.PRIMARY_BLUE_500};\n font-style: normal;\n`\n\nconst Title = styled(plume.styles.heading.XL)`\n position: relative;\n text-align: center;\n\n ${Emphasis} {\n white-space: pre;\n }\n\n @media screen and ${plume.BREAKPOINTS.LAPTOP} {\n ${plume.styles.heading.styles.XXL};\n }\n` as YakComponentOf>\n\nconst Subtitle = styled(plume.styles.heading.S)`\n position: relative;\n text-align: center;\n margin: 0 auto;\n\n ${plume.glyphs.decoration.Quote} {\n position: absolute;\n height: 14px;\n left: -22px;\n top: -5px;\n }\n\n @media screen and ${plume.BREAKPOINTS.TABLET} {\n ${plume.glyphs.decoration.Quote} {\n left: -28px;\n }\n }\n`\n\nconst PartnerLabel = styled(plume.styles.heading.XXXXXXS)`\n color: ${plume.COLORS.TEXT_SECONDARY};\n margin: 0 16px 0 0;\n text-transform: uppercase;\n`\n\nconst PartnerLogo = styled.img`\n max-width: 65px;\n max-height: 65px;\n`\n\nconst PartnerBlock = styled.div`\n display: flex;\n align-items: end;\n`\n\nconst ArrowDecoration = styled(ArrowDecorationSvg)`\n position: absolute;\n left: -40px;\n height: 250px;\n top: 113px;\n display: none;\n\n @media screen and ${plume.BREAKPOINTS.TABLET} {\n display: block;\n left: -80px;\n height: 150px;\n top: 30px;\n }\n\n @media screen and ${plume.BREAKPOINTS.LAPTOP} {\n left: -210px;\n height: 230px;\n top: -45px;\n }\n`\n\nexport const PreCreateHeader = styled(PreCreateHeaderComponent)`\n ${Title} {\n margin-bottom: 40px;\n }\n\n ${Subtitle} {\n max-width: 690px;\n }\n\n ${PartnerBlock} {\n justify-self: end;\n }\n`\n", "import * as React from 'react'\nimport { styled } from 'next-yak'\n\nimport { t, tp } from '@owl-nest/localize'\nimport * as plume from '@ulule/owl-kit-components/next'\nimport * as env from '@owl-nest/config'\nimport type { PolymorphicComponent, YakComponentOf } from '@owl-nest/yak/extra-runtime'\nimport * as models from '@owl-nest/models'\n\ntype AsideProps = React.HTMLAttributes\n\nfunction AsideComponent(props: AsideProps): React.ReactElement {\n const userConfig = env.useUserEnv()\n\n return (\n
\n \n \n \n {tp('Coaching', 'Proposal sidebar')}\n \n {t('Our team advises you throughout your fundraising process.')}\n \n \n {userConfig.lang === 'fr' && (\n \n \n Rejoignez la communauté\n \n Échangez avec d’autres makers, participez aux webinaires et profitez de nombreux bons plans.\n \n \n )}\n \n \n \n {t('%(percent)s success rate', {\n percent: '79%',\n })}\n \n \n {t('8 out of 10 projects meet and often exceed their goal!')}\n \n \n \n
\n )\n}\n\nconst ReasonList = styled.ul`\n margin: 0;\n padding: 0;\n`\n\nconst ReasonItem = styled.li`\n list-style: none;\n display: grid;\n grid-template: 'illustration title' auto 'illustration description' auto/120px 1fr;\n margin: 0 10px 38px 10px;\n\n ${plume.illustrations.Illustration} {\n grid-area: illustration;\n }\n\n ${plume.styles.heading.S} {\n grid-area: title;\n }\n\n ${plume.styles.copy.M.light} {\n grid-area: description;\n margin-top: 4px;\n }\n`\n\nexport const Aside = styled(AsideComponent)``\n", "import * as React from 'react'\nimport { styled } from 'next-yak'\n\nimport * as plume from '@ulule/owl-kit-components/next'\n\nimport { Carousel } from '../components/Carousel'\nimport { items } from '../data/carousel'\n\ntype FooterProps = React.HTMLAttributes\n\nfunction FooterComponent(props: FooterProps): React.ReactElement {\n return (\n
\n Ils & elles l'ont fait\n \n
\n )\n}\n\nexport const Footer = styled(FooterComponent)``\n", "import * as React from 'react'\nimport { styled, css } from 'next-yak'\nimport { useInView } from 'react-intersection-observer'\n\nimport * as plume from '@ulule/owl-kit-components/next'\n\nimport { ImageMedia, type SrcSet } from '../components/ImageMedia'\nimport { useTimeout } from '@owl-nest/hooks'\nimport * as utils from '@owl-nest/utils'\n\ntype CarouselItem = {\n img: SrcSet\n linkProject: string\n name: string\n place: string\n project: string\n text: string\n}\n\ntype CarouselProps = {\n items: CarouselItem[]\n random: boolean\n}\n\nexport function Carousel({ items, random }: CarouselProps): React.ReactElement {\n const [indexActive, setindexActive] = React.useState(0)\n const stableItems = React.useMemo(() => (random ? utils.array.shuffle(items) : items), [random, items])\n\n const stableUpdateIndex = React.useCallback(() => {\n setindexActive((indexActive + 1) % stableItems.length)\n }, [stableItems, indexActive])\n\n useTimeout(stableUpdateIndex, 9000)\n\n const [ref, inView] = useInView({\n triggerOnce: true,\n })\n\n return (\n \n {stableItems.map((item, i) => {\n return (\n \n \n
\n {item.text}\n \n {item.name}{' '}\n \n {item.project}\n \n \n {item.place}\n\n \n {stableItems.map((item, i) => {\n return setindexActive(i)} />\n })}\n \n
\n
\n )\n })}\n
\n )\n}\n\nconst CarouselImage = styled(ImageMedia)<{ $inView: boolean }>`\n margin-bottom: 26px;\n width: 100%;\n\n transition: opacity 300ms;\n opacity: ${({ $inView }) => ($inView ? 1 : 0)};\n\n @media screen and ${plume.BREAKPOINTS.TABLET} {\n width: 354px;\n height: 100%;\n margin-right: 77px;\n }\n`\n\nconst CarouselItems = styled.div`\n position: relative;\n\n @media screen and ${plume.BREAKPOINTS.TABLET} {\n margin-top: 53px;\n }\n`\n\nconst CarouselItem = styled.div<{ $active: boolean }>`\n transition: 1s ease-out;\n top: 0;\n left: 0;\n\n ${({ $active }) => {\n if ($active) {\n return css`\n opacity: 1;\n z-index: 1;\n position: relative;\n `\n }\n return css`\n opacity: 0;\n z-index: -1;\n position: absolute;\n `\n }}\n\n @media screen and ${plume.BREAKPOINTS.TABLET} {\n justify-content: space-between;\n display: flex;\n }\n`\n\nconst CarouselName = styled(plume.styles.heading.XXS)`\n margin-bottom: 3px;\n`\n\nconst CarouselPlace = styled(plume.styles.heading.XXXXXS)``\n\nconst CarouselRegularText = styled(plume.styles.copy.L.light)`\n margin-bottom: 40px;\n\n // HACK: irregular font size, but nothing matches in the DS\n @media screen and ${plume.BREAKPOINTS.LAPTOP} {\n font-size: ${() => utils.styles.rem(26)};\n line-height: 42px;\n }\n`\n\nconst CarouselSteps = styled.div`\n display: flex;\n margin-top: 27px;\n`\n\nconst CarouselStep = styled.div<{ $active: boolean }>`\n height: 10px;\n width: 10px;\n background-color: ${({ $active }) =>\n $active ? `${plume.COLORS.PRIMARY_RED_500}` : `${plume.COLORS.PRIMARY_SAND_200}`};\n border-radius: 100%;\n margin: 0px 4px;\n cursor: pointer;\n`\n", "import * as React from 'react'\n\nexport type SrcSet = { '1x': string; '2x': string; '3x': string }\n\ntype ImageMediaProps = Omit, 'src' | 'srcSet'> & {\n srcset: SrcSet\n}\n\nexport const ImageMedia = React.forwardRef(function ImageMedia(\n { srcset, className },\n ref,\n) {\n return (\n \"\"\n )\n})\n", "import * as UFE from '../UFE'\n\nconst { celia, david, lolo, maliki, noob, theo } = UFE.PROPOSAL_IMAGES\n\nexport const items = [\n {\n img: celia,\n linkProject: '/umai-natural/',\n name: 'C\u00E9lia, ',\n place: 'Montargis, France',\n project: 'Uma\u00EF',\n text: 'Ulule c\u2019est surtout une belle communaut\u00E9 et beaucoup d\u2019entraide, une aide pr\u00E9cieuse, quand, en tant que jeune entreprise on ne sait pas toujours par o\u00F9 commencer !',\n },\n {\n img: david,\n linkProject: '/les-miraculeux/',\n name: 'David,',\n place: 'Paris, France',\n project: 'Les Miraculeux',\n text: '\u00C0 la seconde o\u00F9 tu cliques sur \"Publier ma page\" ce qui \u00E9tait un projet devient une entreprise. C\\'est un moment incroyable dont je me souviendrai toujours. Ulule a \u00E9t\u00E9 une v\u00E9ritable rampe de lancement pour les Miraculeux.',\n },\n {\n img: theo,\n linkProject: '/petit-dejeuner-snooze/',\n name: 'Th\u00E9o,',\n place: 'Paris, FRANCE',\n project: 'Snooze',\n text: \"L'accompagnement quotidien de l'\u00E9quipe Ulule et son implication ont \u00E9t\u00E9 primordiaux dans la r\u00E9ussite de notre campagne. Ulule reste aujourd'hui la meilleure chose qui soit arriv\u00E9e dans la vie de Snooze.\",\n },\n {\n img: lolo,\n linkProject: '/lolo-paris/',\n name: 'Oc\u00E9ane & M\u00E9lissa,',\n place: 'Bordeaux, FRANCE',\n project: 'Lolo',\n text: \"Avec Ulule, nous avons b\u00E9n\u00E9fici\u00E9 d'un coaching de qualit\u00E9 avant et pendant notre campagne, et nous avons rejoint une communaut\u00E9 de porteurs de projet passionn\u00E9s !\",\n },\n {\n img: maliki,\n linkProject: '/maliki-officiel/#/projects/online/',\n name: '',\n place: 'Bretagne, France',\n project: 'Maliki',\n text: \"Gr\u00E2ce \u00E0 Ulule, nous publions nos livres en circuit court et sommes compl\u00E8tement autonomes. Nous pouvons d\u00E9bloquer les fonds n\u00E9cessaires pour des projets incroyables ! C'est beaucoup de travail, mais l'ind\u00E9pendance est tellement gratifiante ! On ne remerciera jamais assez nos lecteur\",\n },\n {\n img: noob,\n linkProject: '/noob-le-jeu-video/',\n name: '',\n place: 'Toulon, France',\n project: 'Noob',\n text: \"Noob est un monde de l'imaginaire atypique fond\u00E9 sur deux principes : une ind\u00E9pendance en termes de cr\u00E9ativit\u00E9 et une proximit\u00E9 avec sa communaut\u00E9. \u00C0 ce titre, Ulule est tr\u00E8s vite apparu comme \u00E9tant l'espace id\u00E9al pour donner corps \u00E0 nos projets transm\u00E9dia.\",\n },\n]\n", "import * as React from 'react'\nimport { styled } from 'next-yak'\nimport { useNavigate } from 'react-router'\n\nimport * as plume from '@ulule/owl-kit-components/next'\n\nimport { CommentCarousel } from '../components/CommentCarousel'\nimport { COMMENTS_DATA } from '../data/comments'\n\ntype WideFooterProps = { className?: string }\n\nfunction WideFooterComponent({ className }: WideFooterProps) {\n const navigate = useNavigate()\n\n return (\n
\n Lancer un projet sur Ulule : témoignages\n \n {\n navigate('/form')\n }}\n >\n Je lance ma collecte\n \n
\n )\n}\n\nexport const WideFooter = styled(WideFooterComponent)`\n padding: 48px 0;\n\n ${plume.styles.heading.L} {\n margin: 0 0 48px;\n text-align: center;\n color: ${plume.COLORS.PRIMARY_BLUE_700};\n }\n\n ${plume.ButtonAsLink} {\n margin-top: 24px;\n }\n`\n", "import * as React from 'react'\nimport { styled, keyframes } from 'next-yak'\n\nimport * as plume from '@ulule/owl-kit-components/next'\n\nimport { CommentCard } from './CommentCard'\n\nexport type Comment = { icon: string; name: string; title: string; comment: string; rating: number }\n\ntype CommentCarouselProps = { comments: Comment[] }\n\nexport function CommentCarousel({ comments }: CommentCarouselProps) {\n return (\n \n \n {comments.map((comment, idx) => (\n \n ))}\n \n \n {comments.map((comment, idx) => (\n \n ))}\n \n \n )\n}\n\nconst slide = keyframes`\n from {\n transform: translateX(0%);\n }\n to {\n transform: translateX(-100%);\n }\n`\n\nconst CommentsSlider = styled.div`\n display: flex;\n\n // Add white space at the end of slider mobile\n &:after {\n content: '';\n display: block;\n padding-left: 10px;\n }\n\n @media screen and ${plume.BREAKPOINTS.LAPTOP} {\n animation: ${slide} 60s linear infinite;\n\n &:after {\n display: none;\n }\n }\n`\n\nconst CommentsSliderLaptop = styled(CommentsSlider)`\n display: none;\n\n @media screen and ${plume.BREAKPOINTS.LAPTOP} {\n display: flex;\n }\n`\n\nconst CommentsContainer = styled.div`\n width: 100%;\n height: 340px;\n margin: auto;\n overflow-x: auto;\n position: relative;\n\n @media screen and ${plume.BREAKPOINTS.LAPTOP} {\n width: 100%;\n overflow: hidden;\n align-items: center;\n display: flex;\n\n &:hover {\n ${CommentsSlider} {\n animation-play-state: paused;\n }\n }\n }\n`\n", "import * as React from 'react'\nimport { styled } from 'next-yak'\n\nimport { BREAKPOINTS, COLORS, glyphs, styles as S } from '@ulule/owl-kit-components/next'\n\ntype Comment = {\n icon: string\n name: string\n title: string\n comment: string\n rating: number\n}\n\ntype CommentCardProps = { info: Comment }\n\nfunction CommentCardComponent({\n info: { icon, name, title, comment, rating },\n}: CommentCardProps): React.ReactElement {\n return (\n \n \n \n {name}\n \n \n \"\"\n \n \n {Array.from(Array(rating)).map((_, idx) => (\n \n ))}\n \n \n {title}\n {comment}\n \n )\n}\n\nexport const CommentCard = styled(CommentCardComponent)``\n\nconst CommentContainer = styled.div`\n width: 306px;\n min-width: 306px;\n min-height: 276px;\n border: 1px solid ${COLORS.PRIMARY_SAND_200};\n background-color: ${COLORS.PRIMARY_GREY_000};\n display: flex;\n flex-direction: column;\n align-items: flex-start;\n padding: 24px;\n margin: 0 12px;\n position: relative;\n\n ${S.heading.XS} {\n margin-top: 10px;\n margin-bottom: 24px;\n }\n\n @media screen and ${BREAKPOINTS.TABLET} {\n min-width: 385px;\n min-height: 280px;\n }\n`\n\nconst User = styled.div`\n display: grid;\n align-items: center;\n grid-template-areas:\n 'img name'\n 'img rating';\n`\n\nconst UserName = styled.div`\n grid-area: name;\n`\n\nconst Icon = styled.div`\n grid-area: img;\n width: 52px;\n height: 52px;\n display: flex;\n align-items: center;\n justify-content: center;\n margin-right: 16px;\n\n > img {\n width: 100%;\n border-radius: 50%;\n }\n`\n\nconst Rating = styled.div`\n display: flex;\n grid-area: rating;\n\n svg {\n fill: ${COLORS.COMPLEMENTARY_YELLOW};\n }\n\n > * {\n transform: scale(0.9);\n width: 18px;\n }\n`\n", "import { type Comment } from '../components/CommentCarousel'\n\nexport const COMMENTS_DATA: Comment[] = [\n {\n icon: 'https://img.ulule.com/display/103972c1fe4d42ffae78e4394f92996a325f8462/thumbnail/180x180/avatars/2021/03/22/signature.K1FE3slKWu.jpg',\n name: 'Antoine B.',\n title: 'Excellement bien pass\u00E9',\n comment:\n \"Ma campagne s'est excellement bien pass\u00E9e. Les \u00E9quipes Ulule sont r\u00E9actives et de bon conseils pour mener \u00E0 bien vos projets.\",\n rating: 5,\n },\n {\n icon: 'https://s3-eu-west-1.amazonaws.com/com.ulule.assets/site/build/img/avatars/avatar-purple.png',\n name: 'Audrey R.',\n title: 'A d\u00E9pass\u00E9 toutes mes attentes',\n comment:\n \"En deux jours, vous avez la possibilit\u00E9 de suivre une formation compl\u00E8te sur le crowdfunding. J'avais d\u00E9j\u00E0 assist\u00E9 \u00E0 une conf\u00E9rence dessus mais cela n'a rien \u00E0 voir avec la formation. Il faut vous lancer dedans \u00E0 fond pour en tirer de super b\u00E9n\u00E9fices pour votre projet !\",\n rating: 5,\n },\n {\n icon: 'https://img.ulule.com/display/10b1b17bf20ba4c5ee6a053483c4d6ace35b5d95/thumbnail/180x180/avatars/2020/11/16/moderato_020920_def-04.KtQRJA5X9u.jpg',\n name: 'Moderato',\n title: 'Parti de rien',\n comment:\n \"Parti de rien pour construire une super campagne qui a cartonn\u00E9 avec un super soutien de toute l'\u00E9quipe sur tous les plans pour lancer, animer et en faire un succ\u00E8s !\",\n rating: 5,\n },\n {\n icon: 'https://img.ulule.com/display/73d6015dd80f766b41df97c360149a182d44b1e6/thumbnail/180x180/avatars/2021/10/06/logo-rond-cotele.Q81HvDCDi3.jpg',\n name: 'C\u00F4tel\u00E9 P.',\n title: 'Plateforme de crowdfunding remarquable',\n comment:\n \"Plateforme de crowdfunding remarquable ! L'accompagnement est juste parfait, la facilit\u00E9 d'utilisation et de navigation rendent la plateforme tr\u00E8s agr\u00E9able \u00E0 utiliser ! Bravo \u00E0 toute l'\u00E9quipe qui travaille dur pour ce si beau r\u00E9sultat !\",\n rating: 5,\n },\n {\n icon: 'https://img.ulule.com/display/3bd5188faaa919b711dec4328907e52f77e390a7/thumbnail/180x180/avatars/2018/07/02/laureferrandis.193104.jpg',\n name: 'Laure F.',\n title: \"Bien entour\u00E9e par l'\u00E9quipe d'Ulule\",\n comment:\n \"Bien entour\u00E9e par l'\u00E9quipe d'Ulule pour construire mon projet, j'ai pu le mener \u00E0 bien en toute confiance.\",\n rating: 5,\n },\n {\n icon: 'https://img.ulule.com/display/7e88b91a13746200242b4c725b462855173203b3/thumbnail/180x180/avatars/2016/06/13/solenne-21.145541.145556.jpg',\n name: 'Fabrique O.',\n title: 'Une plateforme de projets au top',\n comment:\n 'Une plateforme de projets au top ! Accompagnement, r\u00E9activit\u00E9, clart\u00E9 : tout est parfait pour porter son projet dans les meilleures conditions.',\n rating: 5,\n },\n {\n icon: 'https://s3-eu-west-1.amazonaws.com/com.ulule.assets/site/build/img/avatars/avatar-purple.png',\n name: 'Ali\u00E9norDm',\n title: 'Super pour soutenir des projets',\n comment:\n \"Plateforme bien con\u00E7ue pour soutenir des projets, avec les paliers, les sections news, commentaires, etc. Sur tous les projets que j'ai soutenus, un seul n'a toujours pas abouti (enregistrement d'album musical) et je ne pense pas qu'Ulule puisse intervenir.\",\n rating: 5,\n },\n {\n icon: 'https://img.ulule.com/display/b92e086d7f899a9c63b4a2327b5f4661743b0075/thumbnail/180x180/avatars/2013/04/16/corinneprose.jpg',\n name: 'corinneprose',\n title: 'La meilleure plateforme de crowdfunding !',\n comment: \"Toujours d'excellents projets auxquels je suis ravie de participer !\",\n rating: 5,\n },\n {\n icon: 'https://img.ulule.com/display/cab159a11475a3531a37b627ebea82d068e251e4/thumbnail/180x180/avatars/2015/11/15/matthiassabani.113055.jpg',\n name: 'Matthias S.',\n title: \"Des projets d'avenir\",\n comment:\n \"Un site permettant de financer des activit\u00E9s et des projets d'aujourd'hui comme ceux de demain. O\u00F9 comment assister \u00E0 la naissance et au suivi des sorties de demain.\",\n rating: 5,\n },\n {\n icon: 'https://s3-eu-west-1.amazonaws.com/com.ulule.assets/site/build/img/avatars/avatar-blue.png',\n name: 'Corinne S.',\n title: 'Des projets innovants',\n comment: 'La plateforme permet de contribuer pour des projets originaux et \u00E9thiques',\n rating: 5,\n },\n {\n icon: 'https://s3-eu-west-1.amazonaws.com/com.ulule.assets/site/build/img/avatars/avatar-blue.png',\n name: 'Claudine A.',\n title: 'Un petit rayon de soleil',\n comment:\n \"Quand je re\u00E7ois un mail d'Ulule, vite je l'ouvre ! C'est un petit rayon de soleil. On y decouvre des nouveaut\u00E9s qui vont dans le sens actuel du bien-\u00EAtre pour nous et pour la soci\u00E9t\u00E9. Ulule a toujours de beaux projets dont le financement participatif d\u00E9passe largement l'objectif annonc\u00E9. Bravo \u00E0 la jeune \u00E9quipe.\",\n rating: 5,\n },\n {\n icon: 'https://img.ulule.com/display/5bc276a9307c16e26e07f51aaaeb038ea82c0dac/thumbnail/180x180/avatars/2018/02/27/odeporte.152043.152051.png',\n name: 'Olivier D.',\n title: 'Vive la bd avec Ulule',\n comment:\n \"J'aime la bd d\u00E9dicac\u00E9e et avec Ulule je compl\u00E8te ma collection personnelle avec des oeuvres d'arts magnifiques et pleins de cadeaux sur le th\u00E8me de mes nouveaux h\u00E9ros ! Sans compter sur les auteurs tous plus sympathiques les uns que les autres... j'en ai rencontr\u00E9 certains sur des salons et festivals ces derni\u00E8res ann\u00E9es. \u00C0 tous un grand MERCI !!\",\n rating: 5,\n },\n {\n icon: 'https://img.ulule.com/display/f454a16cb8f8a20207ab6f5a2f183714023206de/thumbnail/180x180/avatars/2020/11/19/photo-de-profil.YeCEQqTT51.png',\n name: 'Laetitia G.',\n title: 'G\u00E9nial',\n comment:\n \"Le principe m\u00EAme d'Ulule est g\u00E9nial et j'adore parcourir les diff\u00E9rentes cat\u00E9gories \u00E0 la recherche d'un beau projet qui me fera de l'oeil. J'ai d\u00E9j\u00E0 fait de tr\u00E8s belles d\u00E9couvertes ici. Continuez comme \u00E7a !\",\n rating: 5,\n },\n]\n", "import * as React from 'react'\nimport { styled } from 'next-yak'\n\nimport * as plume from '@ulule/owl-kit-components/next'\n\nimport * as UFE from '../UFE'\nimport { PopHeading } from '@ulule/duvet/PopHeading.tsx'\nimport { MediaStackWithPath } from '@ulule/duvet/MediaStackWithPath.tsx'\nimport { useNavigate } from 'react-router'\n\ntype ServicesProps = {\n className?: string\n}\n\nfunction ServicesComponent({ className }: ServicesProps): React.ReactElement {\n const navigate = useNavigate()\n\n const listItems = [\n {\n title: (\n \n Se lancer en crowdfunding = 💰 + 👀 + 🚀\n \n ),\n description:\n 'Une campagne de financement participatif, ce n’est pas seulement une question d’argent : c’est aussi un moyen puissant de tester un marché, de faire connaître son projet, de mobiliser ses proches ou sa communauté. Plus de 50 000 projets ont ainsi vu le jour sur Ulule !',\n image: {\n src: UFE.PROPOSAL_IMAGES.launch['1x'],\n srcSet: `${UFE.PROPOSAL_IMAGES.launch['2x']} 2x, ${UFE.PROPOSAL_IMAGES.launch['3x']} 3x`,\n },\n },\n {\n title: (\n \n Être accompagné\n \n ),\n description: (\n <>\n TOUS les projets sont accompagnés individuellement sur Ulule. Vous pourrez aussi accéder à Ulule Connect, une\n communauté d’entraide qui rassemble des milliers de makers. En bonus : des centaines de webinaires et de tutos\n pour vous aider à progresser dans votre projet\n \n ),\n image: {\n src: UFE.PROPOSAL_IMAGES.learning['1x'],\n srcSet: `${UFE.PROPOSAL_IMAGES.learning['2x']} 2x, ${UFE.PROPOSAL_IMAGES.learning['3x']} 3x`,\n },\n },\n {\n title: (\n \n Trouver des partenaires pour votre projet\n \n ),\n description: (\n <>\n Sur Ulule, de nombreuses entreprises organisent{' '}\n \n des appels à projets\n {' '}\n pour aider les créateurs et les entrepreneurs à se développer sur différentes thématiques. Ulule Connect\n propose par ailleurs des centaines de bon plans et de réductions sur tous les services essentiels aux makers.\n \n ),\n image: {\n src: UFE.PROPOSAL_IMAGES.partners['1x'],\n srcSet: `${UFE.PROPOSAL_IMAGES.partners['2x']} 2x, ${UFE.PROPOSAL_IMAGES.partners['3x']} 3x`,\n },\n },\n ]\n\n return (\n
\n \n Leader du crowdfunding\n \n\n De bonnes raisons de vous lancer sur Ulule\n\n \n\n {\n navigate('/form')\n }}\n >\n Je lance ma collecte\n \n
\n )\n}\n\nconst Description = styled(plume.styles.copy.S.regular)`\n margin: 24px auto 50px;\n max-width: 587px;\n text-align: center;\n\n @media screen and ${plume.BREAKPOINTS.TABLET} {\n text-align: center;\n }\n`\n\nexport const Services = styled(ServicesComponent)`\n padding: 37px 16px 16px;\n\n ${plume.ButtonAsLink} {\n text-align: center;\n display: block;\n margin: 30px 0;\n }\n\n @media screen and ${plume.BREAKPOINTS.TABLET} {\n padding: 37px 16px;\n\n ${plume.ButtonAsLink} {\n margin: 30px 0 0 0;\n }\n }\n\n @media screen and ${plume.BREAKPOINTS.LAPTOP} {\n padding: 65px 0px 54px;\n }\n`\n", "import * as React from 'react'\nimport { styled } from 'next-yak'\n\nimport * as plume from '@ulule/owl-kit-components/next'\n\ntype PopHeadingProps = {\n asDesktop?: plume.styles.heading.Size\n children: React.ReactNode\n className?: string\n color?: string\n kind: plume.styles.heading.Size\n titleLevel?: 'h1' | 'h2' | 'h3' | 'h4'\n}\n\nfunction PopHeadingComponent({ className, kind, children, color, asDesktop, titleLevel }: PopHeadingProps) {\n const Title = plume.styles.heading[kind]\n\n return (\n \n <Pop width={26} color={color} />\n {children}\n \n )\n}\n\nconst Pop = styled((props: React.SVGAttributes): React.ReactElement => {\n return (\n \n \n \n )\n})`\n // yak does not give a class to non exported styled-component with no css.\n // this is an issue because this component is used as a selector later in the file\n // to fix this we need to add a bogus css rule to force yak to generate a class\n // see : https://github.com/DigitecGalaxus/next-yak/issues/373\n --bogus-style: 0;\n`\n\nexport const PopHeading = styled(PopHeadingComponent)`\n position: relative;\n width: fit-content;\n margin: 0 auto;\n text-align: center;\n\n br {\n display: none;\n }\n\n ${plume.Link} {\n font-weight: inherit;\n }\n\n ${Pop} {\n display: none;\n left: -6px;\n position: relative;\n scale: 0.5;\n top: -16px;\n }\n\n @media screen and ${plume.BREAKPOINTS.MOBILE_L} {\n ${Pop} {\n display: inline;\n scale: 0.75;\n }\n }\n\n @media screen and ${plume.BREAKPOINTS.TABLET} {\n max-width: 100%;\n\n br {\n display: initial;\n }\n }\n\n @media screen and ${plume.BREAKPOINTS.LAPTOP} {\n ${Pop} {\n left: -10px;\n scale: 1;\n top: -30px;\n }\n }\n`\n", "import * as React from 'react'\nimport { styled } from 'next-yak'\n\nimport * as plume from '@ulule/owl-kit-components/next'\n\nimport { HorizontalMedia, Image, Content } from './HorizontalMedia'\n\ntype MediaStackTihPathProps = {\n listItems: {\n description: React.JSX.Element | React.ReactNode\n image: {\n src: string\n srcSet?: string | null\n alt?: string | null\n }\n title: React.JSX.Element | React.ReactNode\n }[]\n}\n\nexport function MediaStackWithPath({ listItems }: MediaStackTihPathProps): React.ReactElement {\n return (\n
\n \n {listItems?.map(({ description, image, title }, index) => {\n if (index % 2 === 1) {\n return (\n \n {index !== listItems.length - 1 && }\n \n {index !== listItems.length - 1 && }\n \n )\n } else {\n return (\n \n )\n }\n })}\n \n
\n )\n}\n\nconst Section = styled.section`\n margin: auto auto 48px;\n max-width: 930px;\n position: relative;\n\n ${Image} {\n z-index: 1;\n position: relative;\n border-radius: 16px;\n }\n\n @media screen and ${plume.BREAKPOINTS.TABLET} {\n ${Image} {\n max-width: 339px;\n max-height: 226px;\n }\n\n ${Content} {\n max-width: 400px;\n }\n }\n`\n\nconst Relative = styled.div`\n position: relative;\n`\n\nconst List = styled.ul`\n display: flex;\n flex-direction: column;\n list-style: none;\n margin: 0 auto;\n max-width: 800px;\n padding: 0 16px;\n\n @media screen and ${plume.BREAKPOINTS.TABLET} {\n padding: 0;\n }\n`\n\nconst LeftPath = styled((props: React.SVGAttributes) => {\n return (\n \n \n \n )\n})`\n display: none;\n\n @media screen and ${plume.BREAKPOINTS.LAPTOP} {\n display: block;\n position: absolute;\n right: -119px;\n top: 80px;\n }\n`\n\nconst RightPath = styled((props: React.SVGAttributes) => {\n return (\n \n \n \n )\n})`\n display: none;\n\n @media screen and ${plume.BREAKPOINTS.LAPTOP} {\n display: block;\n position: absolute;\n left: -168px;\n top: -50px;\n }\n`\n", "import * as React from 'react'\nimport { styled, css } from 'next-yak'\n\nimport * as plume from '@ulule/owl-kit-components/next'\n\ntype HorizontalMediaProps = {\n className?: string\n description: React.JSX.Element | React.ReactNode\n image: {\n src: string\n srcSet?: string | null\n alt?: string | null\n }\n title: React.JSX.Element | React.ReactNode\n backgroundColor: string\n reverse?: boolean\n}\n\nfunction HorizontalMediaComponent({\n backgroundColor,\n className,\n description,\n image,\n reverse = false,\n title,\n}: HorizontalMediaProps) {\n return (\n \n \n {title}\n\n \n\n {description}\n \n\n \"\"\n \n )\n}\nexport const HorizontalMedia = styled(HorizontalMediaComponent)``\n\nexport const Image = styled(plume.Picture)`\n flex: none;\n margin-bottom: 32px;\n\n @media screen and ${plume.BREAKPOINTS.TABLET} {\n margin: auto 50px auto 0px;\n }\n`\n\nexport const Content = styled.div`\n color: ${plume.COLORS.TEXT_PRIMARY};\n line-height: 22px;\n font-size: 14px;\n`\n\nconst Line = styled.div<{ $backgroundColor: string }>`\n background-color: ${({ $backgroundColor }) => $backgroundColor};\n height: 7px;\n margin: 24px 0;\n width: 53px;\n`\n\nconst Wrapper = styled.li<{ $reverse: boolean }>`\n display: flex;\n flex-direction: column-reverse;\n margin-bottom: 56px;\n\n @media screen and ${plume.BREAKPOINTS.TABLET} {\n ${({ $reverse }) => {\n if ($reverse) {\n return css`\n flex-direction: row;\n justify-content: space-between;\n\n ${Image} {\n margin-left: 50px;\n margin-right: 0;\n }\n `\n } else {\n return css`\n flex-direction: row-reverse;\n justify-content: space-between;\n `\n }\n }}\n }\n`\n", "import * as React from 'react'\nimport { useNavigate } from 'react-router'\nimport { styled } from 'next-yak'\n\nimport * as plume from '@ulule/owl-kit-components/next'\nimport { CardTypeSelector } from '@ulule/duvet/CardTypeSelector.tsx'\nimport * as api from '@owl-nest/api-client/latest'\nimport * as models from '@owl-nest/models'\nimport * as hooks from '@owl-nest/hooks'\nimport * as service from '@owl-nest/services'\nimport { t, tnc } from '@owl-nest/localize'\n\nimport { useDuplicate } from '../../hooks/useDuplicate'\nimport { useProposalForm } from '../../hooks/useProposalForm'\nimport * as UFE from '../../UFE'\nimport { useProposal } from '../../hooks/useProposal'\n\nexport function Duplicate(): React.ReactElement {\n const duplicate = useDuplicate()\n const partner = hooks.data(service.partner.usePartner(UFE.AFFILIATION_ID).response)\n const { token, create } = useProposalForm()\n const proposalQuery = useProposal(token)\n const navigate = useNavigate()\n\n if (duplicate === undefined) {\n return \n }\n\n const projectName = models.project.name(duplicate)\n const partnerName = partner?.name\n\n const needModeration = duplicate.answer_code === api.ProjectAnswerCode.NEED_MODERATION\n const hasCurrentPartner = (duplicate.partnerships ?? []).some(\n (partnership) => partnership.partner.id === UFE.PARTNER_ID,\n )\n const acceptedSamePartner = duplicate.answer_code === api.ProjectAnswerCode.ACCEPTED && hasCurrentPartner\n const acceptedDifferentPartner = duplicate.answer_code === api.ProjectAnswerCode.ACCEPTED && !hasCurrentPartner\n\n return (\n \n {t('You already have an ongoing project!')}\n \n {needModeration && t('This project is awaiting moderation, a Ulule coach will contact you soon.')}\n {acceptedSamePartner &&\n partnerName &&\n projectName &&\n tnc(\n 'You are already participating in %(partner)s with this project.',\n 'You are already participating in %(partner)s with your project %(title)s.',\n projectName ? 2 : 1,\n {\n partner: partnerName,\n title: projectName,\n },\n )}\n {acceptedDifferentPartner &&\n partnerName &&\n projectName &&\n tnc(\n 'If you want to participate in %(partner)s with this project, contact your coach.',\n 'If you want to participate in %(partner)s with your project %(title)s, contact your coach.',\n projectName ? 2 : 1,\n {\n partner: partnerName,\n title: projectName,\n },\n )}\n \n goToProject(duplicate)}\n rates={{}}\n project={duplicate}\n targetCurrency=\"\"\n projectTranslation={{\n addToMyList: '',\n backed: '',\n backerCount: '',\n comingSoon: models.project.comingSoonLabel(duplicate, true),\n created: '',\n finished: '',\n highlights: '',\n listed: '',\n shortCountdown: '',\n progressInfo: '',\n status: models.project.getStatus(duplicate),\n }}\n />\n {acceptedDifferentPartner ? (\n goToDiscussion(duplicate)}>{t('Contact my coach')}\n ) : (\n goToProject(duplicate)}>{t('See my project')}\n )}\n \n {t('Confirm creation of a new project')}\n \n \n )\n\n async function createProposal(): Promise {\n // if the proposal does not already exists (we arrived to Duplicate screen\n // right before submitting the form) we create it and navigate to Loading\n // screen\n if (token === undefined) {\n const response = await create()\n response.next((proposal) => navigate(`/${proposal.token}/loading`, { replace: true }))\n }\n // if the proposal already exists (we arrived to Duplicate screen from\n // Loading screen right after connecting) we link the proposal to the user\n // (since we are guaranteed to be loggedin)\n else {\n await proposalQuery.update({}, { withToken: true })\n navigate(`/${token}/loading`, { replace: true })\n }\n }\n\n async function goToDiscussion(project: api.Project): Promise {\n await proposalQuery.refuse()\n location.href = `/projects/${project?.id}/discussion`\n }\n\n async function goToProject(project: api.Project): Promise {\n await proposalQuery.refuse()\n location.href = project.absolute_url\n }\n}\n\nconst Wrapper = styled.div`\n align-items: center;\n display: flex;\n flex-direction: column;\n width: 100%;\n\n > ${plume.styles.copy.M.light} {\n margin: 14px 0 28px 0;\n }\n\n > ${plume.styles.heading.M}, > ${plume.styles.copy.M.light} {\n text-align: center;\n }\n\n > ${plume.Button} {\n margin: 30px 0 17px 0;\n }\n\n ${plume.MembershipProjectCard} {\n height: 271px;\n width: 311px;\n }\n`\n", "import * as service from '@owl-nest/services'\nimport * as hooks from '@owl-nest/hooks'\nimport * as api from '@owl-nest/api-client/latest'\n\nimport * as UFE from '../UFE'\n\nexport function useDuplicate(): api.Project<'answer_code' | 'partnerships'> | undefined {\n const user = service.user.useAuthenticatedUser({\n extraFields: ['projects', 'projects.answer_code', 'projects.partnerships'],\n })\n\n const { response } = service.partner.usePartner(UFE.AFFILIATION_ID)\n const partner = hooks.data(response)\n\n if (user !== undefined) {\n const hasPartner = partner?.id !== undefined\n const isPartnerDefault = partner?.is_default ?? false\n\n const duplicate = (user.projects ?? []).find((project) => {\n return (\n project.answer_code === 'need-moderation' ||\n (hasPartner &&\n !isPartnerDefault &&\n !([api.ProjectStatus.ONLINE, api.ProjectStatus.REFUSED] as api.ProjectStatus[]).includes(project.status) &&\n project.answer_code === 'accepted')\n )\n })\n\n return duplicate\n }\n\n return undefined\n}\n", "import * as jotai from 'jotai'\n\nimport * as hooks from '@owl-nest/hooks'\nimport * as api from '@owl-nest/api-client/latest'\nimport * as service from '@owl-nest/services'\nimport { Either } from '@owl-nest/monad'\nimport * as shadow from '@owl-nest/shadow'\nimport * as env from '@owl-nest/config'\nimport * as utils from '@owl-nest/utils'\n\nimport * as UFE from '../UFE'\nimport { setInitialProposal, useProposal } from './useProposal'\n\nexport type Form = {\n description: string\n projectType?: api.ProposalTypeNumber\n goal?: { min?: number; max?: number }\n rewardType?: api.RewardType\n legalEntity?: api.LegalEntity\n links: {\n list: api.Link[]\n url: string\n noSocial: boolean\n }\n communityRange?: { min?: number; max?: number }\n phone: { number: string; country?: string }\n email: string\n location: {\n country?: string\n currency?: string\n }\n}\n\nconst PROPOSAL_FORM_ATOM = jotai.atom<{ form: Form; token?: string } | undefined>(undefined)\n\nexport function useProposalForm() {\n const store = jotai.useStore()\n const user = service.user.useAuthenticatedUser()\n const userConfig = env.useUserEnv()\n const [value, setValue] = jotai.useAtom(PROPOSAL_FORM_ATOM)\n const proposalQuery = useProposal(value?.token, { withToken: user !== undefined })\n const currentProposal = hooks.data(proposalQuery.response)\n const tracking = shadow.useTracking()\n\n return { values: value?.form, token: value?.token, persist, create }\n\n function persist(form: Form) {\n setValue((state) => ({ ...state, form }))\n }\n\n async function create(form: Form | undefined = value?.form): Promise> {\n if (form === undefined) {\n throw Error(\"Can't create a proposal with an empty form\")\n }\n\n const phoneNumber = utils.phone.normalizePhoneNumber(\n form.phone.number,\n form.phone.country as utils.phone.CountryCode,\n )\n\n if (currentProposal !== undefined && currentProposal.token === value?.token) {\n const response = await proposalQuery.update(\n {\n country: form.location.country ?? env.USER_COUNTRY,\n currency: form.location.currency,\n description: form.description,\n email: form.email,\n goal_range: form.goal,\n lang: userConfig.lang,\n legal_entity_type: form.legalEntity,\n link_ids: form.links.list.map((link) => link.id),\n phone_number: phoneNumber,\n rewards_type: form.rewardType,\n },\n { withToken: user !== undefined },\n )\n\n if (response.status === hooks.QueryStatus.SUCCESS) {\n return Either.right(response.data)\n }\n }\n\n const proposal = await service.proposal.createProposal(\n {\n auto_validation: true,\n community_range: form.communityRange,\n country: form.location.country ?? env.USER_COUNTRY,\n currency: form.location.currency,\n description: form.description,\n email: form.email,\n goal_range: form.goal,\n lang: userConfig.lang,\n legal_entity_type: form.legalEntity,\n link_ids: form.links.list.map((link) => link.id),\n partner_id: UFE.PARTNER_ID,\n phone_number: phoneNumber,\n rewards_type: form.rewardType,\n switch_okpal_to_donation: true,\n type: Number(form.projectType) as api.ProposalTypeNumber,\n },\n { user },\n )\n\n return proposal.next((proposal) => {\n setValue((value) => {\n if (value !== undefined) {\n return { ...value, token: proposal.token }\n }\n })\n setInitialProposal(store, proposal, user)\n\n tracking.track({\n event: shadow.EVENT_TYPE.GENERIC,\n eventCategory: shadow.CATEGORY.PROJECT_PROPOSAL_TRACKING,\n eventAction: 'step1',\n })\n\n return proposal\n })\n }\n}\n", "import * as jotai from 'jotai'\n\nimport * as service from '@owl-nest/services'\nimport * as api from '@owl-nest/api-client/latest'\n\nconst EXTRA_FIELDS = ['links'] as ['links']\n\nexport function setInitialProposal(\n store: ReturnType,\n proposal: api.Proposal,\n user?: api.AuthenticatedUser,\n): void {\n return service.proposal.setInitialProposal(store, proposal, user, EXTRA_FIELDS)\n}\n\nexport function useProposal(\n token?: string,\n config: Omit, 'extraFields'> = {},\n): service.proposal.UseProposal<(typeof EXTRA_FIELDS)[number]> {\n const useProposal = service.proposal.useProposal(token, Object.assign({}, config, { extraFields: EXTRA_FIELDS }))\n\n return { ...useProposal, query, update }\n\n function query(config: Omit, 'extraFields'> = {}) {\n return useProposal.query(Object.assign({}, config, { extraFields: EXTRA_FIELDS }))\n }\n\n function update(\n patch: api.UpdateProposal,\n config: Omit, 'extraFields'> = {},\n ) {\n return useProposal.update(patch, Object.assign({}, config, { extraFields: EXTRA_FIELDS }))\n }\n}\n", "import * as React from 'react'\nimport * as formik from 'formik'\nimport { styled } from 'next-yak'\nimport { useNavigate } from 'react-router'\n\nimport * as plume from '@ulule/owl-kit-components/next'\nimport { t, tc } from '@owl-nest/localize'\nimport * as geolocation from '@owl-nest/geolocation'\nimport * as shadow from '@owl-nest/shadow'\nimport { scroll } from '@owl-nest/utils'\nimport * as hooks from '@owl-nest/hooks'\nimport * as service from '@owl-nest/services'\nimport * as env from '@owl-nest/config'\n\nimport { Section, SectionContent } from './Section'\nimport * as UFE from '../../UFE'\nimport { DescriptionField } from './DescriptionField'\nimport { GoalField } from './GoalField'\nimport { RewardTypeField } from './RewardTypeField'\nimport { LegalEntityField } from './LegalEntityField'\nimport { LinksField, Link } from './LinksField'\nimport { PhoneField } from './PhoneField'\nimport { EmailField } from './EmailField'\nimport { SocialLinkModal } from './SocialLinkModal'\nimport { LocationModal } from './LocationModal'\nimport { validationSchema } from './types'\nimport { goalRangeLabel } from './rangeLabels'\nimport { createSocialLink } from './createSocialLink'\nimport { useDuplicate } from '../../hooks/useDuplicate'\nimport { type Form, useProposalForm } from '../../hooks/useProposalForm'\nimport { CommunityField } from './CommunityField'\n\nexport function FormCreate() {\n const fix = geolocation.useFix()\n const navigate = useNavigate()\n const duplicate = useDuplicate()\n const proposalForm = useProposalForm()\n const userConfig = env.useUserEnv()\n\n const [isLocationModalOpen, setIsLocationModalOpen] = React.useState(false)\n const [isSocialLinkModalOpen, setIsSocialLinkModalOpen] = React.useState(false)\n const [isFullDisclaimerOpen, setIsFullDisclaimerOpen] = React.useState(false)\n\n const tracker = shadow.useFormTracking(\n shadow.CATEGORY.PROJECT_FORM,\n {\n description: { value: 'formPitch', error: 'formPitchError' },\n legalEntity: { value: 'formOwner', error: 'formOwnerError' },\n goal: { value: 'formAmount', error: 'formAmountError' },\n links: { value: 'formSocial', error: 'formSocialError' },\n rewardType: { value: 'formReward', error: 'formRewardError' },\n email: { value: 'formContactEmail', error: 'formContactEmailError' },\n phone: { value: 'formContactTel', error: 'formContactTelError' },\n },\n UFE.GTM_KEY,\n )\n\n const isMobile = plume.utils.isMobile()\n\n React.useEffect(() => {\n // hide Zendesk widget button if the modal is open in mobile version\n const zE = window?.zE\n if (!zE) return\n\n const hideZendesk = isLocationModalOpen && isMobile\n zE('webWidget', hideZendesk ? 'hide' : 'show')\n }, [isLocationModalOpen, isMobile])\n\n if (fix.status === hooks.Status.LOADING) {\n return \n }\n\n return (\n \n {(formikBag) => {\n const user = service.user.useAuthenticatedUser()\n React.useEffect(() => {\n if (user !== undefined && formikBag.values.email === '') {\n formikBag.setFieldValue('email', user.email)\n }\n }, [user, formikBag.values.email])\n\n const needLocation =\n formikBag.values.location.country === undefined || formikBag.values.location.currency === undefined\n\n useAfterSubmit(() => {\n if (!formikBag.isValid) {\n tracker.pushErrorEvent('projectFormError', formikBag.errors)\n }\n }, formikBag)\n\n hooks.useScrollToFirstError(formikBag)\n\n hooks.useBeforeUnload(() => {\n if (isFormDirty(formikBag, user !== undefined)) {\n return t('You have unsaved changes.Are you sure you want to discard them ?')\n }\n })\n\n return (\n <>\n \n \n \n \n \n \n\n \n \n \n \n \n \n \n\n
\n {t('Start on Ulule')}\n\n \n {t('Your project will be associated with the country of %(country)s and the currency %(currency)s.', {\n country:\n env.COUNTRIES.find((country) => country.code === formikBag.values.location.country)?.label() ??\n 'N/A',\n currency: formikBag.values.location.currency ?? 'N/A',\n })}{' '}\n setIsLocationModalOpen(true)}>\n {t('Change country and/or currency.')}\n \n .\n \n \n {t(\n 'Ulule collects your data to manage your user account, allow hosting and administration of fundraising campaigns, marketing and user relationship actions, as well as fight against fraud, money laundering and terror financing. You have rights over this data.',\n )}{' '}\n setIsFullDisclaimerOpen(true)} $open={isFullDisclaimerOpen}>\n {t('Read all treatments, rights and recommendations.')}\n \n \n \n {tc(\n `Depending on the purpose of each treatment, you have certain rights (right of opposition, right of access to your data, right to rectify and erase your data, right to define the fate of your data after your death). To exercise these rights, write to privacy@ulule.com or ULULE SAS, %(ululePostalAddress)s or, for certain rights, go directly to your account. For more details: [link: Ulule Privacy Policy].\n [br][br]IMPORTANT: By describing your project, you could:\n [br]- reveal information about you, sometimes sensitive or very personal (religious or philosophical convictions, sexual orientation, political opinions, state of health, etc.). If your project proposal is accepted, this information will automatically be included in your project page and you can modify it before launch of the fundraising campaign. But once your project is published, this information will become public and accessible to everyone. Ulule therefore invites you to be careful when describing your project to protect your privacy ;\n [br]- communicate information about third parties (your employees, someone whom your project aims to help, etc.). The processing of these data must be done in compliance with laws and regulations. You must verify that you have the right to communicate this data to Ulule and the public (for example by having the written agreement of these third parties) and communicate to them the information on the processing of their data by Ulule contained in [link: Ulule Privacy Policy].`,\n {\n ululePostalAddress: t('10 rue de Penthièvre, 75008 Paris, France'),\n br:
,\n link: (\n \n ),\n },\n )}\n
\n
\n
\n\n {\n tracker.pushFormEvent({ eventLabel: 'add', eventAction: 'alert_social_links' })\n setIsSocialLinkModalOpen(false)\n scroll.scrollToHashWithOffset('#socialLinks', { offset: parseInt(plume.SIZES.HEADER_HEIGHT) })\n }}\n onDismiss={() => {\n tracker.pushFormEvent({ eventLabel: 'submit', eventAction: 'alert_social_links' })\n formikBag.setFieldValue('links.noSocial', true)\n setIsSocialLinkModalOpen(false)\n formikBag.submitForm()\n }}\n />\n\n setIsLocationModalOpen(false)}\n />\n \n )\n }}\n \n )\n\n async function handleSubmit(values: Form, formikBag: formik.FormikHelpers
) {\n // create the link for any value left in the url field (the user might\n // have forgotten to click the \"add\" button)\n if (values.links.url.length !== 0) {\n const response = await createSocialLink(values.links.url)\n response.next((link) => values.links.list.push(link))\n formikBag.setFieldValue('links.url', '')\n }\n\n const hasLinks = values.links.list.length > 0\n const hasAtLeastOneCrawlableLink = hasLinks && values.links.list.find((link) => link.crawlable)\n\n if (values.links.noSocial === false && !hasAtLeastOneCrawlableLink) {\n setIsSocialLinkModalOpen(true)\n tracker.pushFormEvent({\n eventLabel: 'display',\n eventAction: 'alert_social_links',\n })\n return\n }\n\n tracker.pushFormEvent({\n eventLabel: `${values.legalEntity} - ${\n goalRangeLabel(values.goal ?? {}, values.location.currency ?? userConfig.currency).label\n } - ${hasLinks ? 'link' : 'not on social media'} - ${values.rewardType}`,\n eventAction: 'submit',\n eventCallback: async () => {\n // save the form content for futur use (if the user hit previous)\n proposalForm.persist(values)\n\n if (duplicate) {\n navigate(`/current/duplicate`)\n } else {\n const proposal = await proposalForm.create(values)\n\n proposal.caseOf({\n left: (failure) => {\n //TODO: handle post proposal error\n },\n right: (proposal) => {\n navigate(`/${proposal.token}/loading`)\n },\n })\n }\n },\n })\n }\n}\n\nfunction getLocation(fix?: geolocation.GeolocationFix) {\n if (fix === undefined) {\n return {}\n }\n\n const supportedCountry = env.COUNTRIES.find((country) => country.code === fix.country_code)\n\n // We now support 2 currencies only: CAD for Canada and EUR for ROW\n if (supportedCountry !== undefined) {\n return { country: supportedCountry.code, currency: supportedCountry.code === 'CA' ? 'CAD' : 'EUR' }\n }\n\n // if fix.country_code is not found in UFE.COUNTRIES, maybe it's an island of a country\n for (const [country, islandCodes] of Object.entries(UFE.ISLANDS)) {\n if (islandCodes.includes(fix.country_code)) {\n return { country, currency: 'EUR' }\n }\n }\n\n return {}\n}\n\nfunction useAfterSubmit(effect: React.EffectCallback, formikBag: formik.FormikProps): void {\n const wasSubmitting = hooks.usePrevious(formikBag.isSubmitting)\n\n React.useEffect(() => {\n // right after submit is done\n if (wasSubmitting && !formikBag.isSubmitting) {\n return effect()\n }\n }, [formikBag.isSubmitting])\n}\n\nfunction isFormDirty(formikBag: formik.FormikProps, isAuthentifiedUser: boolean): boolean {\n const hasChanged =\n formikBag.values.description !== formikBag.initialValues.description ||\n formikBag.values.goal !== formikBag.initialValues.goal ||\n formikBag.values.rewardType !== formikBag.initialValues.rewardType ||\n formikBag.values.legalEntity !== formikBag.initialValues.legalEntity ||\n formikBag.values.phone.number !== formikBag.initialValues.phone.number ||\n formikBag.values.phone.country !== formikBag.initialValues.phone.country ||\n formikBag.values.goal !== formikBag.initialValues.goal ||\n formikBag.values.links.list.length !== formikBag.initialValues.links.list.length\n\n return isAuthentifiedUser ? hasChanged : hasChanged || formikBag.values.email !== formikBag.initialValues.email\n}\n\nconst FormWrapper = styled.form`\n @media screen and ${plume.BREAKPOINTS.TABLET} {\n margin-right: 34px;\n }\n\n @media screen and ${plume.BREAKPOINTS.LAPTOP} {\n margin-right: 10px;\n }\n\n @media screen and ${plume.BREAKPOINTS.LAPTOP_L} {\n margin-right: 34px;\n }\n\n ${plume.SelectField} {\n margin-top: 22px;\n z-index: 2;\n position: relative;\n\n ${plume.Select} {\n max-width: 326px;\n }\n }\n`\n\nconst ToggleableSmallText = styled(plume.styles.copy.XS.regular)<{ $open?: boolean }>`\n display: ${({ $open }) => ($open ? 'block' : 'none')};\n`\n\nconst Footer = styled.div`\n @media screen and ${plume.BREAKPOINTS.TABLET} {\n margin-left: 68px;\n }\n\n @media screen and ${plume.BREAKPOINTS.LAPTOP} {\n margin-left: 8px;\n }\n\n @media screen and ${plume.BREAKPOINTS.LAPTOP_L} {\n margin-left: 68px;\n }\n\n ${plume.Button} {\n margin-bottom: 16px;\n }\n\n ${plume.styles.copy.XS.regular} {\n color: ${plume.COLORS.TEXT_TERTIARY};\n margin-bottom: 16px;\n\n ${plume.LinkAsButton} {\n padding: 0;\n font-size: inherit;\n }\n }\n`\n\nconst TermsButton = styled(plume.LinkAsButton)<{ $open: boolean }>`\n display: ${({ $open }) => ($open ? 'none' : 'inline')};\n`\n\nconst BaseSection = styled(Section)`\n ${plume.styles.field.Title} {\n margin-bottom: 16px;\n }\n\n ${plume.CheckboxField} {\n ${plume.styles.field.Title} {\n // HACK: since field groups and fields share the same style for their title,\n // it is impossible to simply change the title of group fields without\n // changing field titles. Earlier in the code we overloaded the style\n // plume.styles.field.Title because we want the \"top\" title of field to be\n // bigger. So we want the title of text fields, select fields, radio group\n // and checkbox group to be bigger, but not the title of radio field and\n // checkbox field.\n // Therefore for those two specific fields we have again to override the title\n // to set the styles back to the initial value.\n // Since this issue is caused by an architectural issue in some components\n // of the DS that should be fixed, the fix here is barebone and not really\n // maintenable on design (hurry and fix the underlying issue before the\n // technical debt blow in your face!)\n // 2024 edit: yup, just like he ^ said! Good luck next time! No but seriously,\n // we will take time to properly fix this.\n ${plume.styles.copy.styles.S.regular};\n margin-bottom: 0;\n }\n }\n\n ${plume.RadioField} {\n ${plume.styles.field.Title} {\n margin-bottom: 0;\n }\n }\n\n ${plume.Field} {\n width: 100%;\n }\n`\n\nconst UserSection = styled(BaseSection)`\n ${Link}:last-child, ${plume.CheckboxField} {\n margin-bottom: 50px;\n }\n\n ${plume.CheckboxField} {\n margin-top: -4px;\n }\n\n ${SectionContent} {\n overflow: visible;\n }\n\n ${SectionContent} > ${plume.PhoneField}, ${SectionContent} > ${plume.TextField} {\n margin-top: 32px;\n }\n\n ${plume.SmallRadioList} {\n ${plume.Field} {\n width: auto;\n }\n\n flex-wrap: wrap;\n @media screen and ${plume.BREAKPOINTS.TABLET} {\n flex-wrap: nowrap;\n }\n }\n`\n\nconst ProjectSection = styled(BaseSection)`\n ${plume.RadioGroupField} {\n margin-top: 22px;\n\n ${plume.BigRadioList}:has(> :last-child:nth-child(2)) {\n @media screen and ${plume.BREAKPOINTS.TABLET} {\n display: flex;\n flex-direction: row;\n gap: 8px;\n }\n }\n\n ${plume.BigRadioList}:has(> :last-child:nth-child(4)) {\n @media screen and ${plume.BREAKPOINTS.TABLET} {\n display: grid;\n grid-gap: 24px;\n grid-template: 1fr 1fr/1fr 1fr;\n }\n }\n\n ${plume.RadioField} {\n display: flex;\n width: 100%;\n\n &:not(:last-child) {\n margin-bottom: 16px;\n }\n\n @media screen and ${plume.BREAKPOINTS.TABLET} {\n &:not(:last-child) {\n margin-bottom: 0;\n }\n }\n\n ${plume.styles.field.Title}, ${plume.styles.field.Description} {\n margin-right: 60px;\n\n @media screen and ${plume.BREAKPOINTS.TABLET} {\n margin-right: 0;\n }\n }\n\n ${plume.illustrations.Illustration} {\n display: block;\n margin-bottom: 9px;\n position: absolute;\n right: 10px;\n top: 50%;\n transform: translateY(-50%);\n\n @media screen and ${plume.BREAKPOINTS.TABLET} {\n position: static;\n transform: none;\n }\n }\n }\n }\n`\n", "import * as React from 'react'\nimport { styled, css } from 'next-yak'\n\nimport * as plume from '@ulule/owl-kit-components/next'\n\nimport * as UFE from '../../UFE'\n\ntype SectionProps = {\n children: React.ReactNode\n} & React.HTMLAttributes\n\nfunction SectionComponent({ children, ...props }: SectionProps): React.ReactElement {\n return (\n
\n {children}\n
\n )\n}\n\nconst SectionIndex = styled(plume.styles.heading.M)`\n color: ${plume.COLORS.PRIMARY_BLUE_500};\n background: ${plume.COLORS.PRIMARY_BLUE_200};\n border-radius: 50%;\n align-self: center;\n height: 45px;\n width: 45px;\n display: flex;\n justify-content: center;\n align-items: baseline;\n margin-right: 16px;\n line-height: 39px; // vertical center hack for font\n font-weight: 900; // HACK: irregular font manipulation\n`\n\nconst SectionTitle = styled(plume.styles.heading.M)`\n // yak does not give a class to non exported styled-component with no css.\n // this is an issue because this component is used as a selector later in the file\n // to fix this we need to add a bogus css rule to force yak to generate a class\n // see : https://github.com/DigitecGalaxus/next-yak/issues/373\n --bogus-style: 0;\n`\n\nexport const SectionContent = styled.div`\n padding-top: 27px;\n padding-bottom: 30px;\n\n @media screen and ${plume.BREAKPOINTS.TABLET} {\n padding: 0 0 30px 68px;\n }\n\n @media screen and ${plume.BREAKPOINTS.LAPTOP} {\n padding-left: 10px;\n }\n\n @media screen and ${plume.BREAKPOINTS.LAPTOP_L} {\n padding-left: 68px;\n }\n`\n\nexport const Section = styled(SectionComponent)`\n display: grid;\n grid-template: 'index title' auto 'content content' auto / min-content 1fr;\n\n ${SectionIndex} {\n grid-area: index;\n }\n\n ${SectionTitle} {\n grid-area: title;\n align-self: center;\n }\n\n ${SectionContent} {\n grid-area: content;\n overflow: hidden;\n }\n`\n", "import * as React from 'react'\nimport * as formik from 'formik'\n\nimport * as plume from '@ulule/owl-kit-components/next'\nimport * as shadow from '@owl-nest/shadow'\nimport { t } from '@owl-nest/localize'\n\nimport { type TrackedFields } from './types'\nimport { type Form } from '../../hooks/useProposalForm'\n\nimport * as UFE from '../../UFE'\n\ntype DescriptionFieldProps = {\n tracker: shadow.FormTracker\n}\n\nexport function DescriptionField({ tracker }: DescriptionFieldProps) {\n return (\n \n {({ field, meta }: formik.FieldProps) => {\n return (\n {\n tracker.description.markFilled()\n field.onChange(event)\n }}\n error={meta.touched && meta.error}\n />\n )\n }}\n \n )\n}\n", "import * as React from 'react'\nimport * as formik from 'formik'\nimport { css, styled } from 'next-yak'\n\nimport * as api from '@owl-nest/api-client/latest'\nimport * as plume from '@ulule/owl-kit-components/next'\nimport * as shadow from '@owl-nest/shadow'\nimport { t, tp } from '@owl-nest/localize'\n\nimport { type TrackedFields, GOAL_RANGES } from './types'\nimport { goalRangeLabel } from './rangeLabels'\nimport { type Form } from '../../hooks/useProposalForm'\n\ntype GoalFieldProps = {\n tracker: shadow.FormTracker\n}\n\nexport function GoalField({ tracker }: GoalFieldProps) {\n return (\n <>\n \n {({ field, meta }: formik.FieldProps) => {\n return (\n \n \n \n {tp('Monthly', 'Project launch form')}\n {t('New!')}\n \n }\n {...onChangeAndValue(api.ProposalTypeNumber.MEMBERSHIP, field.value)}\n />\n \n )\n\n function onChangeAndValue(value: any, fieldValue: any) {\n return {\n onChange: (event: React.ChangeEvent) => {\n field.onChange(event)\n },\n value,\n checked: String(value) === fieldValue,\n }\n }\n }}\n \n\n \n {({ field, meta, form }: formik.FieldProps) => {\n const selectedIndex = getSelectedIndex(field.value)\n\n return (\n \n \n )\n\n function getSelectedIndex(fieldValue: Form['goal']) {\n return String(\n GOAL_RANGES.findIndex((range) => {\n return JSON.stringify(range) === JSON.stringify(fieldValue || {})\n }),\n )\n }\n}\n\nconst GoalSelectField = styled(plume.SelectField)<{ hidden?: boolean }>`\n ${({ hidden = true }) => {\n if (hidden) {\n return css`\n display: none;\n `\n }\n }};\n`\n\nconst RadioLabelWithFlag = styled.span`\n align-items: center;\n display: inline-flex;\n gap: 10px;\n\n ${plume.Tag} {\n margin-bottom: -2px;\n }\n`\n", "import * as api from '@owl-nest/api-client/latest'\nimport { t } from '@owl-nest/localize'\nimport * as yup from '@owl-nest/validators'\n\nimport * as phone from 'libphonenumber-js'\n\nexport const COMMUNITY_SIZE_RANGES = [\n { max: 200 },\n { min: 200, max: 1000 },\n { min: 1000, max: 10000 },\n { min: 10000, max: 50000 },\n { min: 50000, max: 100000 },\n { min: 100000 },\n]\n\nexport const GOAL_RANGES = [\n { max: 3500 },\n { min: 3500, max: 8000 },\n { min: 8000, max: 15000 },\n { min: 15000, max: 30000 },\n { min: 30000 },\n {},\n { min: -1 },\n]\n\nexport const validationSchema = yup.lazy((values) =>\n yup.object({\n description: yup.string().max(1000).required(),\n projectType: yup.number().oneOf([api.ProposalTypeNumber.MEMBERSHIP, api.ProposalTypeNumber.PROJECT]).required(),\n goal: yup.mixed().when('projectType', {\n is: api.ProposalTypeNumber.PROJECT,\n then: (schema) => schema.required(),\n otherwise: (schema) => schema,\n }),\n rewardType: yup\n .string()\n .oneOf([api.RewardType.CONCRETE, api.RewardType.NONE, api.RewardType.SYMBOLIC, api.RewardType.UNDEFINED])\n .required(),\n legalEntity: yup\n .string()\n .oneOf([api.LegalEntity.ASSOCIATION, api.LegalEntity.BUSINESS, api.LegalEntity.PERSONAL])\n .required(),\n links: yup\n .object({\n url: yup.url().max(200, ({ max }) =>\n t('This URL is too long, please limit it to a maximum of %(len)d characters', {\n len: max,\n }),\n ),\n })\n .required(),\n phone: yup.object({\n number: yup.phone({ country: values?.phone?.country as phone.CountryCode }).required(),\n }),\n email: yup.email().required(),\n location: yup\n .object({\n country: yup.string().required(),\n currency: yup.string().required(),\n })\n .required(),\n }),\n)\n\nexport const trackedFields = {\n description: { value: 'formPitch', error: 'formPitchError' },\n legalEntity: { value: 'formOwner', error: 'formOwnerError' },\n goal: { value: 'formAmount', error: 'formAmountError' },\n links: { value: 'formSocial', error: 'formSocialError' },\n rewardType: { value: 'formReward', error: 'formRewardError' },\n email: { value: 'formContactEmail', error: 'formContactEmailError' },\n phone: { value: 'formContactTel', error: 'formContactTelError' },\n} as const\n\nexport type TrackedFields = typeof trackedFields\n", "import * as React from 'react'\n\nimport * as plume from '@ulule/owl-kit-components/next'\nimport * as utils from '@owl-nest/utils'\nimport { t, tc } from '@owl-nest/localize'\nimport * as env from '@owl-nest/config'\n\nexport function communityRangeLabel(range: { min?: number; max?: number }) {\n const maximum = range.max ? utils.text.numberToLocaleString(range.max) : undefined\n const minimum = range.min ? utils.text.numberToLocaleString(range.min) : undefined\n\n if (minimum !== undefined && maximum !== undefined) {\n return {\n label: t('Between %(minAmount)s and %(maxAmount)s', { minAmount: minimum, maxAmount: maximum }),\n content: tc('Between [minAmount] and [maxAmount]', {\n minAmount: ,\n maxAmount: ,\n }),\n }\n }\n\n if (maximum !== undefined) {\n return {\n label: t('Less than %(maxAmount)s', { maxAmount: maximum }),\n content: tc('Less than [maxAmount]', { maxAmount: }),\n }\n }\n\n if (minimum !== undefined) {\n return {\n label: t('More than %(minAmount)s', { minAmount: minimum }),\n content: tc('More than [minAmount]', { minAmount: }),\n }\n }\n\n return { label: t('I don\u2019t know'), content: t('I don\u2019t know') }\n}\n\nexport function goalRangeLabel(range: { min?: number; max?: number }, currency: string) {\n const minAmount = plume.accounting.localeMoney(range.min, {\n currency: currency,\n lang: env.getUserConfig().lang,\n })\n\n const maxAmount = plume.accounting.localeMoney(range.max, {\n currency: currency,\n lang: env.getUserConfig().lang,\n })\n\n if (range.min !== undefined && range.max !== undefined) {\n return {\n label: t('Between %(minAmount)s and %(maxAmount)s', { minAmount, maxAmount }),\n content: tc('Between [minAmount] and [maxAmount]', {\n minAmount: ,\n maxAmount: ,\n }),\n }\n }\n\n if (range.max !== undefined) {\n return {\n label: t('Less than %(maxAmount)s', { maxAmount }),\n content: tc('Less than [maxAmount]', { maxAmount: }),\n }\n }\n\n if (range.min !== undefined) {\n if (range.min === -1) {\n return {\n label: t('I don\u2019t have a minimum'),\n content: t('I don\u2019t have a minimum'),\n }\n }\n\n return {\n label: t('More than %(minAmount)s', { minAmount }),\n content: tc('More than [minAmount]', { minAmount: }),\n }\n }\n\n return { label: t('I don\u2019t know'), content: t('I don\u2019t know') }\n}\n", "import * as React from 'react'\nimport * as formik from 'formik'\n\nimport * as api from '@owl-nest/api-client/latest'\nimport * as plume from '@ulule/owl-kit-components/next'\nimport * as shadow from '@owl-nest/shadow'\nimport { t } from '@owl-nest/localize'\n\nimport { type TrackedFields } from './types'\nimport { type Form } from '../../hooks/useProposalForm'\n\ntype RewardTypeProps = {\n tracker: shadow.FormTracker\n}\n\nexport function RewardTypeField({ tracker }: RewardTypeProps) {\n return (\n \n {({ field, meta }: formik.FieldProps) => {\n return (\n \n \n \n {t('Material rewards')}\n \n }\n description={t('An item, a product, a service, pre-sales, an experience, etc')}\n />\n \n \n {t('Mainly symbolic rewards')}\n \n }\n description={t('Thanks, goodies, small gifts, etc.')}\n />\n \n \n {t('No rewards')}\n \n }\n description={t('I only want donations (with or without tax exemption)')}\n />\n \n \n {t('I\u2019m not sure yet')}\n \n }\n description={t('If eligible, our team will help you find the project-type that works best for you')}\n />\n \n )\n\n function onChangeAndValue(value: any, fieldValue: any) {\n return {\n onChange: (event: React.ChangeEvent) => {\n tracker.rewardType.setValue(value)\n field.onChange(event)\n },\n value,\n checked: value === fieldValue,\n }\n }\n }}\n \n )\n}\n", "import * as React from 'react'\nimport * as formik from 'formik'\n\nimport * as plume from '@ulule/owl-kit-components/next'\nimport * as shadow from '@owl-nest/shadow'\nimport { t } from '@owl-nest/localize'\nimport * as api from '@owl-nest/api-client/latest'\n\nimport { type TrackedFields } from './types'\nimport { type Form } from '../../hooks/useProposalForm'\n\ntype LegalEntityFieldProps = {\n tracker: shadow.FormTracker\n}\n\nexport function LegalEntityField({ tracker }: LegalEntityFieldProps) {\n return (\n \n {({ field, meta }: formik.FieldProps) => {\n return (\n \n \n \n \n \n )\n function onChangeAndValue(value: any, fieldValue: any) {\n return {\n onChange: (event: React.ChangeEvent) => {\n tracker.legalEntity.setValue(value)\n field.onChange(event)\n },\n value,\n checked: value === fieldValue,\n }\n }\n }}\n \n )\n}\n", "import * as React from 'react'\nimport * as formik from 'formik'\nimport { styled } from 'next-yak'\n\nimport * as plume from '@ulule/owl-kit-components/next'\nimport * as shadow from '@owl-nest/shadow'\nimport * as api from '@owl-nest/api-client/latest'\nimport * as yup from '@owl-nest/validators'\nimport { t } from '@owl-nest/localize'\n\nimport { type TrackedFields, validationSchema } from './types'\nimport { createSocialLink } from './createSocialLink'\nimport { type Form } from '../../hooks/useProposalForm'\n\ntype LinksFieldProps = {\n tracker: shadow.FormTracker\n}\n\nexport function LinksField({ tracker }: LinksFieldProps) {\n return (\n \n {({ form, ...arrayHelpers }: formik.FieldArrayRenderProps) => {\n return (\n <>\n arrayHelpers.push(link)} />\n\n {(form.values as Form).links.list.map((link, index) => {\n return (\n \n \n \n {link.url}\n \n {\n arrayHelpers.remove(index)\n }}\n >\n \n \n \n )\n })}\n\n {(form.values as Form).links.list.length === 0 && (\n \n {({ field, form }: formik.FieldProps) => {\n return (\n {\n if (event.currentTarget.checked) {\n tracker.links.setValue('not on social media')\n } else {\n tracker.links.markEmpty()\n }\n form.setFieldValue(field.name, event.currentTarget.checked)\n }}\n onBlur={field.onBlur}\n />\n )\n }}\n \n )}\n \n )\n }}\n \n )\n}\n\ntype LinksUrlField = {\n tracker: shadow.FormTracker\n onAddLink: (link: api.Link) => void\n}\n\nfunction AddLinkField({ tracker, onAddLink }: LinksUrlField) {\n return (\n \n {({ field, meta, form }: formik.FieldProps) => {\n const disabledAddLink = Boolean(meta.touched && meta.error)\n\n return (\n \n {t('Social media and website links')}\n {\n if (event.key === 'Enter') {\n addLink()\n }\n }}\n error={meta.touched && meta.error}\n {...field}\n onChange={(event) => {\n // Using `setFieldError` to reset the error onChange to avoid\n // locking out the user. If the user input an invalid url and\n // add it, because of the `addLink` function, the field becomes\n // invalid. When the field is invalid, the button is disabled,\n // so the user can't add the fixed link that would pass the\n // field to valid.\n //\n // The fix is to reset the error on change. That way, after the\n // error is displayed, on the first keystroke the user makes to\n // correct the url, the field turns valid again, enabling the\n // add button\n form.setFieldError(field.name, '')\n field.onChange(event)\n }}\n />\n \n {t('Add')}\n \n \n )\n\n async function validate(): Promise {\n try {\n await (yup.reach(validationSchema, 'links.url') as any).validate(field.value)\n } catch (error: unknown) {\n if (error instanceof yup.ValidationError) {\n return error.errors[0]\n }\n }\n return undefined\n }\n\n async function addLink(): Promise {\n if (disabledAddLink) {\n return\n }\n\n const error = await validate()\n\n if (error !== undefined) {\n form.setFieldError('links.url', error)\n return\n }\n\n const response = await createSocialLink(field.value)\n response.next((link) => {\n tracker.links.setValue('link')\n form.setFieldValue(field.name, '')\n form.setFieldValue('links.noSocial', false)\n onAddLink(link)\n })\n }\n }}\n \n )\n}\n\nconst LineField = styled.div`\n margin-top: 32px;\n display: grid;\n grid-template: 'title title' auto 'field button' 1fr/1fr max-content;\n\n & > ${plume.styles.field.Title} {\n grid-area: title;\n }\n\n ${plume.TextField} {\n margin-top: 0;\n grid-area: field;\n }\n\n ${plume.Button} {\n grid-area: button;\n margin-left: 10px;\n }\n`\n\nexport const Link = styled.div`\n display: flex;\n align-items: center;\n background-color: ${plume.COLORS.SECONDARY_GREY_400};\n margin-top: 14px;\n padding: 10px;\n\n ${plume.Link} {\n ${plume.styles.copy.styles.S.regular};\n flex: 1;\n margin: 0px 15px;\n text-overflow: ellipsis;\n overflow: hidden;\n white-space: nowrap;\n }\n\n ${plume.glyphs.stroke.Link} {\n color: ${plume.COLORS.TEXT_LINK};\n flex: 0 0 auto;\n }\n\n ${plume.glyphs.stroke.Trash} {\n color: ${plume.COLORS.TEXT_TERTIARY};\n }\n\n ${plume.styles.button.UnstyledButton} {\n line-height: 15px;\n flex: 0 0 auto;\n }\n`\n", "import * as service from '@owl-nest/services'\n\nexport async function createSocialLink(url: string) {\n return await service.link.createLink(toValidUrl(url))\n}\n\nfunction toValidUrl(url: string): string {\n if (url && !url.match(/^((https?):)\\/\\//i)) {\n return `https://${url}`\n }\n return url\n}\n", "import * as React from 'react'\nimport * as formik from 'formik'\n\nimport * as plume from '@ulule/owl-kit-components/next'\nimport * as shadow from '@owl-nest/shadow'\nimport { t } from '@owl-nest/localize'\nimport * as env from '@owl-nest/config'\n\nimport { type TrackedFields } from './types'\nimport { type Form } from '../../hooks/useProposalForm'\n\ntype PhoneFieldProps = {\n tracker: shadow.FormTracker\n}\n\nexport function PhoneField({ tracker }: PhoneFieldProps) {\n return (\n \n {({ field, meta, form }: formik.FieldProps) => {\n return (\n {\n form.setFieldValue('phone', value)\n tracker.phone.markFilled()\n }}\n countries={env.COUNTRIES}\n value={field.value}\n error={meta.touched && (meta.error as any)?.number}\n />\n )\n }}\n \n )\n}\n", "import * as React from 'react'\nimport * as formik from 'formik'\n\nimport * as plume from '@ulule/owl-kit-components/next'\nimport * as shadow from '@owl-nest/shadow'\nimport { t } from '@owl-nest/localize'\n\nimport { type TrackedFields } from './types'\nimport { type Form } from '../../hooks/useProposalForm'\n\ntype EmailFieldProps = {\n disabled: boolean\n tracker: shadow.FormTracker\n}\n\nexport function EmailField({ tracker, disabled }: EmailFieldProps) {\n return (\n \n {({ field, meta }: formik.FieldProps) => {\n return (\n {\n tracker.email.markFilled()\n field.onChange(event)\n }}\n error={meta.touched && meta.error}\n />\n )\n }}\n \n )\n}\n", "import * as React from 'react'\nimport { styled } from 'next-yak'\n\nimport { t } from '@owl-nest/localize'\nimport * as plume from '@ulule/owl-kit-components/next'\n\ntype SocialLinkModalProps = {\n className?: string\n open: boolean\n onAddLink: () => void\n onDismiss: () => void\n}\n\nfunction SocialLinkModalComponent({\n className,\n open,\n onAddLink,\n onDismiss,\n}: SocialLinkModalProps): React.ReactElement {\n return (\n }\n buttons={[\n {\n type: 'button',\n props: {\n onClick: onAddLink,\n children: t('Add a social network'),\n },\n },\n {\n type: 'linkAsButton',\n props: {\n onClick: onDismiss,\n kind: 'secondary',\n children: t('Submit without social network'),\n },\n },\n ]}\n >\n {t('Do you have social networks related to your project?')}\n \n {t('Share any web link related to your project that could help us coach you.')}\n \n \n )\n}\n\nexport const SocialLinkModal = styled(SocialLinkModalComponent)`\n ${plume.styles.modal.Body} {\n display: flex;\n flex-direction: column;\n }\n\n ${plume.styles.heading.S} {\n text-align: center;\n margin: 15px;\n }\n\n ${plume.styles.copy.S.regular} {\n text-align: center;\n margin-bottom: 15px;\n }\n\n @media screen and ${plume.BREAKPOINTS.TABLET} {\n ${plume.styles.modal.Wrapper} {\n max-width: 450px;\n }\n }\n`\n", "import * as React from 'react'\nimport * as formik from 'formik'\nimport { styled } from 'next-yak'\n\nimport * as plume from '@ulule/owl-kit-components/next'\nimport * as yup from '@owl-nest/validators'\nimport { t } from '@owl-nest/localize'\nimport * as env from '@owl-nest/config'\n\nimport * as UFE from '../../UFE'\nimport { validationSchema } from './types'\nimport { type Form } from '../../hooks/useProposalForm'\n\ntype LocationModalProps = {\n className?: string\n open: boolean\n needLocation: boolean\n onClose: () => void\n}\n\nfunction LocationModalComponent({ className, open, needLocation, onClose }: LocationModalProps) {\n return (\n \n \n {({ field, form }: formik.FieldProps) => {\n return (\n {\n form.setFieldValue(field.name, values)\n onClose()\n }}\n validationSchema={yup.reach(validationSchema, 'location')}\n validateOnBlur={false}\n validateOnChange={false}\n >\n {(formikBag) => {\n return (\n <>\n {t('Change country and/or currency.')}\n\n \n {({ field, meta, form }: formik.FieldProps) => {\n return (\n {\n form.setFieldValue(field.name, selected[0].value)\n }}\n error={meta.touched && meta.error}\n height={180}\n >\n {env.COUNTRIES.map((country) => {\n return (\n \n {country.label()}\n \n )\n })}\n \n )\n }}\n \n\n \n {({ field, meta, form }: formik.FieldProps) => {\n return (\n {\n form.setFieldValue(field.name, selected[0].value)\n }}\n error={meta.touched && meta.error}\n height={180}\n >\n {UFE.CURRENCIES.map((currency) => {\n return (\n \n {currency.content}\n \n )\n })}\n \n )\n }}\n \n\n \n {t('Save')}\n \n {!needLocation && (\n \n {t('Cancel')}\n \n )}\n \n )\n }}\n \n )\n }}\n \n \n )\n}\n\nconst SelectField = styled(plume.SelectField)<{ $index: number }>`\n z-index: ${({ $index }) => $index};\n`\n\nexport const LocationModal = styled(LocationModalComponent)`\n ${plume.styles.modal.Body} {\n display: flex;\n flex-direction: column;\n }\n\n ${plume.styles.heading.S} {\n text-align: center;\n margin-bottom: 16px;\n }\n\n ${plume.SelectField} {\n margin-bottom: 16px;\n }\n\n ${plume.Button} {\n margin-top: 28px;\n position: static;\n }\n\n @media screen and ${plume.BREAKPOINTS.LAPTOP} {\n ${plume.styles.modal.Body} {\n padding-left: 105px;\n padding-right: 105px;\n display: flex;\n flex-direction: column;\n }\n }\n`\n", "import * as React from 'react'\nimport * as formik from 'formik'\n\nimport * as plume from '@ulule/owl-kit-components/next'\nimport { t } from '@owl-nest/localize'\n\nimport { type Form } from '../../hooks/useProposalForm'\nimport { communityRangeLabel } from './rangeLabels'\n\nimport { COMMUNITY_SIZE_RANGES } from './types'\n\nexport function CommunityField() {\n return (\n \n {({ field, form, meta }: formik.FieldProps) => {\n const selectedIndex = getSelectedIndex(field.value)\n\n return (\n {\n const selectedRange = COMMUNITY_SIZE_RANGES[Number(selected[0].value)]\n form.setFieldValue(field.name, selectedRange)\n }}\n placeholder={t('Select an option')}\n selected={[selectedIndex]}\n nativeOnMobile\n >\n {COMMUNITY_SIZE_RANGES.map((range, index) => {\n const { content, label } = communityRangeLabel(range)\n return (\n \n {content}\n \n )\n })}\n \n )\n }}\n \n )\n\n function getSelectedIndex(fieldValue: Form['communityRange']) {\n return String(\n COMMUNITY_SIZE_RANGES.findIndex((range) => {\n return JSON.stringify(range) === JSON.stringify(fieldValue || {})\n }),\n )\n }\n}\n", "import * as React from 'react'\nimport { styled } from 'next-yak'\nimport { useNavigate } from 'react-router'\n\nimport * as plume from '@ulule/owl-kit-components/next'\nimport { Trustpilot } from '@ulule/duvet/Trustpilot.tsx'\nimport { PreCreateInfo } from '../../Layout/PreCreateInfo'\n\nexport function PreCreate() {\n const navigate = useNavigate()\n\n return (\n \n \n \n {\n navigate('/form')\n }}\n >\n Je lance ma collecte\n \n \n \n\n \n\n \n\n {\n navigate('/form')\n }}\n >\n Je lance ma collecte\n \n \n )\n}\n\nconst UluleConnectWrapper = styled.div`\n align-items: center;\n box-shadow: ${plume.EFFECTS.SHADOW_1};\n background-color: #ffffff;\n border-radius: 8px;\n display: flex;\n\n padding: 24px;\n width: max-content;\n`\n\nconst Wrapper = styled.div`\n display: flex;\n flex-direction: column;\n align-items: center;\n`\n\nconst ButtonsWrapper = styled.div`\n padding: 24px 16px;\n margin: 0 -16px;\n align-items: center;\n justify-content: center;\n display: flex;\n flex-direction: column;\n\n @media screen and ${plume.BREAKPOINTS.TABLET} {\n border-radius: 8px;\n padding: 0px 56px 36px 56px;\n margin: 0;\n flex-direction: row;\n }\n`\n", "import * as React from 'react'\nimport { styled } from 'next-yak'\n\nimport * as plume from '@ulule/owl-kit-components/next'\n\nimport { PopHeading } from '@ulule/duvet/PopHeading.tsx'\nimport { BlueCirclePeople, BlueCoin, BlueEgg } from '../icons/illustrations'\n\ntype PreCreateInfoProps = {\n className?: string\n}\n\nfunction PreCreateInfoComponent({ className }: PreCreateInfoProps): React.ReactElement {\n return (\n
\n \n 3 modes de collecte\n \n\n \n \n \n \n \n Collecte avec contreparties\n \n \n Une durée fixe, un objectif, un momentum. Parfait pour les préventes et les nouveaux projets.\n \n \n \n \n \n \n \n Collecte\n
\n de dons\n
\n \n Pas de contreparties, pas de durée fixe, juste des dons ponctuels ou mensuels. Idéal pour les causes.\n \n
\n
\n \n \n \n \n Collecte par abonnements\n \n \n {`Financez votre activité avec des abonnements mensuels. Impec' pour les streamers, podcasteurs, youtubers etc.`}\n \n \n \n
\n
\n )\n}\n\nexport const PreCreateInfo = styled(PreCreateInfoComponent)`\n align-items: center;\n display: flex;\n flex-direction: column;\n gap: 40px;\n padding: 68px 16px 16px;\n width: 100%;\n\n @media screen and ${plume.BREAKPOINTS.TABLET} {\n padding: 36px 16px;\n }\n\n @media screen and ${plume.BREAKPOINTS.LAPTOP} {\n padding: 68px 0px 52px;\n }\n`\n\nconst CollectionTypeTexts = styled.div`\n display: flex;\n flex-direction: column;\n gap: 12px;\n width: 100%;\n\n ${plume.styles.heading.S}, ${plume.styles.heading.L}, ${plume.styles.copy.S.regular} {\n text-align: center;\n margin: 0;\n }\n`\n\nconst CollectionTypeCard = styled.div`\n display: flex;\n flex: 1;\n flex-direction: column;\n align-items: center;\n gap: 24px;\n width: 280px;\n\n ${BlueEgg},${BlueCoin},${BlueCirclePeople} {\n height: 60px;\n }\n`\n\nconst CollectionTypesGrid = styled.div`\n display: flex;\n flex-direction: column;\n gap: 60px;\n\n @media screen and ${plume.BREAKPOINTS.LAPTOP} {\n flex-direction: row;\n gap: 20px;\n }\n`\n", "import * as React from 'react'\nimport { styled } from 'next-yak'\n\nexport const BlueEgg = styled(function BlueEgg(props: React.SVGAttributes) {\n return (\n \n \n \n \n )\n})``\n\nexport const BlueCoin = styled(function BlueCoin(props: React.SVGAttributes) {\n return (\n \n \n \n \n \n \n \n \n \n \n )\n})``\n\nexport const BlueCirclePeople = styled(function BlueCirclePeople(props: React.SVGAttributes) {\n return (\n \n \n \n \n \n \n \n )\n})``\n", "import * as React from 'react'\nimport { useParams } from 'react-router'\n\nimport * as service from '@owl-nest/services'\nimport * as model from '@owl-nest/models'\nimport * as api from '@owl-nest/api-client/latest'\nimport * as hooks from '@owl-nest/hooks'\n\nimport { useDuplicate } from '../../hooks/useDuplicate'\nimport { Progress } from './Progress'\nimport { PollState } from './PollState'\nimport { LinkState } from './LinkState'\nimport { DoneState } from './DoneState'\nimport { DuplicateState } from './DuplicateState'\nimport { StaffDuplicateState } from './StaffDuplicateState'\nimport { Connect } from './Connect'\nimport { useProposal } from '../../hooks/useProposal'\n\nexport function Loading(): React.ReactElement {\n const params = useParams<{ token: string }>()\n const workflow = useWorkflow(params.token)\n\n switch (workflow.status) {\n case 'poll':\n return (\n \n \n \n )\n case 'connect':\n return \n case 'staff-duplicate':\n return (\n \n \n \n )\n case 'duplicate':\n return (\n \n \n \n )\n case 'link':\n return (\n \n \n \n )\n case 'done':\n return (\n \n \n \n )\n }\n\n return \n}\n\ntype Workflow =\n | { status: 'failure' }\n | { status: 'poll' }\n | { status: 'connect'; proposal: api.Proposal }\n | { status: 'done'; proposal: api.Proposal }\n | { status: 'staff-duplicate'; proposal: api.Proposal }\n | { status: 'duplicate'; proposal: api.Proposal }\n | { status: 'link' }\n\nfunction useWorkflow(token?: string): Workflow {\n const auth = service.user.useAuth()\n const duplicate = useDuplicate()\n\n const proposalQuery = useProposal(token, { withToken: service.user.isLoggedIn(auth) })\n\n if (proposalQuery.response.status === hooks.QueryStatus.FAILURE) {\n // TODO handle error\n return { status: 'failure' }\n }\n\n const proposal = hooks.data(proposalQuery.response)\n\n if (proposal === undefined || !model.proposal.isReady(proposal)) {\n return { status: 'poll' }\n }\n\n if (!model.proposal.isInvalid(proposal) && model.proposal.isPending(proposal)) {\n if (!service.user.isLoggedIn(auth)) {\n return { status: 'connect', proposal }\n }\n\n if (auth.user.is_staff && auth.user.email !== proposal.email) {\n return { status: 'staff-duplicate', proposal }\n }\n\n if (duplicate !== undefined) {\n return { status: 'duplicate', proposal }\n }\n\n return { status: 'link' }\n }\n\n return { status: 'done', proposal }\n}\n", "import * as React from 'react'\nimport { styled, keyframes } from 'next-yak'\n\nimport { t, tc } from '@owl-nest/localize'\nimport * as plume from '@ulule/owl-kit-components/next'\n\nimport { useProgress, PROGRESS_TRANSITION_DURATION } from './useLoadingProgress'\nimport * as UFE from '../../UFE'\n\nexport function Progress(): React.ReactElement {\n const { progress } = useProgress()\n return (\n \n \n \n \n \n \n \n {tc('[highligted: Project] under study', { highligted: })}\n \n \n \n \n {t('A successful project last between 30 and 40 days maximum!')}\n \n \n \n )\n}\n\nconst Highligted = styled.span`\n background-color: ${plume.COLORS.SECONDARY_GREEN_500};\n color: ${plume.COLORS.PRIMARY_GREY_000};\n padding: 0 3px;\n`\n\nconst ProgressBar = styled.div<{ $progress: number }>`\n background-color: ${plume.COLORS.PRIMARY_GREY_500};\n border-radius: 2px;\n height: 8px;\n overflow: hidden;\n position: relative;\n width: 100%;\n\n &::after {\n background-color: ${plume.COLORS.SECONDARY_GREEN_500};\n border-radius: 2px;\n content: '';\n position: absolute;\n top: 0;\n left: 0;\n height: 100%;\n width: ${(props) => props.$progress}%;\n transition: width ${PROGRESS_TRANSITION_DURATION}ms;\n }\n`\n\nconst ProgressStatus = styled.div`\n display: grid;\n grid-template: 'title title' 'progress progress' 'icon advice' / min-content auto;\n\n ${plume.styles.heading.M} {\n grid-area: title;\n }\n ${ProgressBar} {\n grid-area: progress;\n margin: 16px 0;\n }\n ${plume.glyphs.fill.CheckCircle} {\n grid-area: icon;\n height: 26px;\n margin-right: 12px;\n color: ${plume.COLORS.SECONDARY_GREEN_500};\n }\n ${plume.styles.heading.XXS} {\n grid-area: advice;\n }\n`\n\nconst fire = keyframes`\n from {\n transform: scale(1);\n }\n 50% {\n transform: scale(1.2);\n }\n to {\n transform: scale(1);\n }\n`\n\nconst Fire = styled.img`\n animation: ${fire} 0.5s linear infinite;\n transform-origin: top center;\n position: absolute;\n bottom: 0;\n left: 32px;\n width: 56px;\n`\n\nconst Rocket = styled.img`\n position: absolute;\n left: 0;\n top: 0;\n width: 120px;\n`\n\nconst rocket = keyframes`\n from {\n transform: translateY(0);\n }\n 50% {\n transform: translateY(-20px);\n }\n to {\n transform: translateY(0);\n }\n`\n\nconst RocketContainer = styled.div`\n animation: ${rocket} 3s ease-in-out infinite;\n position: relative;\n width: 120px;\n height: 260px;\n margin: 20px;\n\n @media screen and ${plume.BREAKPOINTS.TABLET} {\n margin-right: 75px;\n }\n`\n\nconst spaceBackground = keyframes`\n from {\n background-position-y: 0;\n }\n to {\n background-position-y: 587px;\n }\n`\n\nconst Wrapper = styled.div`\n animation: ${spaceBackground} 5s linear infinite;\n background-image: ${() => `url('${UFE.SPACE_BACKGROUND_IMAGE}')`};\n background-position: center;\n background-repeat-y: repeat;\n\n display: grid;\n grid-template: 'illustration' 'status';\n align-items: center;\n justify-items: center;\n\n ${RocketContainer} {\n grid-area: illustration;\n }\n\n ${ProgressStatus} {\n grid-area: status;\n }\n\n @media screen and ${plume.BREAKPOINTS.TABLET} {\n grid-template: 'illustration status';\n\n ${ProgressStatus} {\n margin-top: 30px;\n }\n }\n`\n", "import * as jotai from 'jotai'\n\nconst PROGRESS_ATOM = jotai.atom(0)\n\nexport const PROGRESS_TRANSITION_DURATION = 500\n\nexport function useProgress(): { progress: number; increment: () => Promise; finish: () => Promise } {\n const [progress, setProgress] = jotai.useAtom(PROGRESS_ATOM)\n\n return { progress, increment, finish }\n\n async function increment(weight = getWeight(progress)): Promise {\n setProgress((progress) => {\n if (progress >= 1) {\n return 1\n }\n if (progress < 0) {\n return 0\n }\n\n const maxIncrement = 1 - progress\n const clampedWeight = Math.min(Math.max(weight, 0), 1)\n const jitter = 0.8 + 0.4 * Math.random()\n const increment = maxIncrement * clampedWeight * jitter\n\n return progress + increment\n })\n\n await new Promise((res) => setTimeout(res, PROGRESS_TRANSITION_DURATION))\n }\n\n async function finish(): Promise {\n setProgress(1)\n\n await new Promise((res) => setTimeout(res, PROGRESS_TRANSITION_DURATION))\n }\n\n function getWeight(progress: number): number {\n return 0.1 + Math.pow(progress, 4) * 0.4\n }\n}\n", "import * as React from 'react'\n\nimport * as service from '@owl-nest/services'\nimport * as hooks from '@owl-nest/hooks'\nimport * as shadow from '@owl-nest/shadow'\n\nimport { useProgress } from './useLoadingProgress'\nimport { useProposal } from '../../hooks/useProposal'\n\ntype PollStateProps = {\n token?: string\n children?: React.ReactNode\n}\n\nconst LOCALSTORAGE_NAMESPACE = 'ul_track_proposal'\nconst LOCALSTORAGE_LIFETIME = 1000 * 60 * 60 * 24 // 24h\n\nexport function PollState({ token, children }: PollStateProps): React.ReactElement {\n const user = service.user.useAuthenticatedUser()\n const proposalQuery = useProposal(token, { withToken: user !== undefined })\n const { increment } = useProgress()\n const tracking = shadow.useTracking()\n\n React.useEffect(() => {\n const proposal = proposalQuery.response.data\n if (proposal === undefined) {\n return\n }\n\n const trackedProposal = localStorage.getItem(`${LOCALSTORAGE_NAMESPACE}.${proposal.id}`)\n\n if (trackedProposal) {\n return\n }\n\n tracking.track({\n event: shadow.EVENT_TYPE.GENERIC,\n eventCategory: shadow.CATEGORY.PROJECT_PROPOSAL_TRACKING,\n eventAction: 'Done',\n eventLabel: proposal.id,\n ululeUserId: user?.id,\n })\n\n localStorage.setItem(`${LOCALSTORAGE_NAMESPACE}.${proposal.id}`, 'true')\n }, [proposalQuery.response.status])\n\n hooks.useTimeout(() => {\n proposalQuery.query()\n increment()\n }, 3000)\n\n return <>{children}\n}\n", "import * as React from 'react'\n\nimport * as service from '@owl-nest/services'\n\nimport { useProgress } from './useLoadingProgress'\nimport { useProposal } from '../../hooks/useProposal'\n\ntype LinkStateProps = { token?: string; children?: React.ReactNode }\n\nexport function LinkState({ token, children }: LinkStateProps): React.ReactElement {\n const auth = service.user.useAuth()\n const proposalQuery = useProposal(token, { withToken: service.user.isLoggedIn(auth) })\n const { increment } = useProgress()\n\n React.useEffect(() => {\n proposalQuery.update({}, { withToken: true })\n increment()\n }, [])\n\n return <>{children}\n}\n", "import * as React from 'react'\nimport { useNavigate } from 'react-router'\n\nimport * as model from '@owl-nest/models'\nimport * as api from '@owl-nest/api-client/latest'\n\nimport { useProgress } from './useLoadingProgress'\n\ntype DoneStateProps = { proposal: api.Proposal; children?: React.ReactNode }\n\nexport function DoneState({ proposal, children }: DoneStateProps): React.ReactElement {\n const navigate = useNavigate()\n const { finish } = useProgress()\n\n React.useEffect(() => {\n finish().then(() => {\n if (model.proposal.isInvalid(proposal) || proposal.project === null) {\n if (proposal.answer_code === api.ProposalAnswerCode.INVALID_OKPAL) {\n navigate(`/${proposal.token}/okpal`, { replace: true })\n } else {\n navigate(`/${proposal.token}/refused`, { replace: true })\n }\n } else {\n location.href = proposal.project.absolute_url\n }\n })\n }, [])\n\n return <>{children}\n}\n", "import * as React from 'react'\nimport { useNavigate } from 'react-router'\n\nimport * as api from '@owl-nest/api-client/latest'\n\ntype DuplicateStateProps = { proposal: api.Proposal; children?: React.ReactNode }\n\nexport function DuplicateState({ proposal, children }: DuplicateStateProps): React.ReactElement {\n const navigate = useNavigate()\n\n React.useEffect(() => {\n navigate(`/${proposal.token}/duplicate`, { replace: true })\n }, [])\n\n return <>{children}\n}\n", "import * as React from 'react'\nimport { useNavigate } from 'react-router'\n\nimport * as api from '@owl-nest/api-client/latest'\n\ntype StaffDuplicateStateProps = { proposal: api.Proposal; children?: React.ReactNode }\n\nexport function StaffDuplicateState({\n proposal,\n children,\n}: StaffDuplicateStateProps): React.ReactElement {\n const navigate = useNavigate()\n\n React.useEffect(() => {\n navigate(`/${proposal.token}/staff-duplicate`, { replace: true })\n }, [])\n\n return <>{children}\n}\n", "import * as React from 'react'\nimport { styled } from 'next-yak'\n\nimport { t } from '@owl-nest/localize'\nimport * as plume from '@ulule/owl-kit-components/next'\nimport { Connect as RealConnect } from '@owl-nest/connect'\nimport * as connectStyles from '@owl-nest/connect/src/styles'\nimport * as service from '@owl-nest/services'\nimport * as api from '@owl-nest/api-client/latest'\n\ntype ConnectProps = { proposal: api.Proposal }\n\nexport function Connect({ proposal }: ConnectProps): React.ReactElement {\n const auth = service.user.useAuth()\n\n const [hasIdentified, setHasIdentified] = React.useState(false)\n React.useEffect(() => {\n if (hasIdentified) {\n return\n }\n if (auth.type === 'unknown') {\n auth.identify('email', proposal.email)\n setHasIdentified(true)\n }\n if (auth.type === 'known' || auth.type === 'existing' || auth.type === 'new') {\n auth.forget()\n }\n }, [auth.type])\n\n return (\n \n {t('Connect to continue')}\n \n \n )\n}\n\nconst Wrapper = styled.div`\n width: 100%;\n display: flex;\n flex-direction: column;\n justify-content: center;\n align-items: center;\n\n ${plume.styles.heading.M} {\n text-align: center;\n margin-bottom: 40px;\n }\n\n ${connectStyles.Wrapper} {\n width: 100%;\n max-width: 500px;\n }\n`\n", "import * as React from 'react'\nimport { useNavigate } from 'react-router'\nimport { styled } from 'next-yak'\n\nimport * as plume from '@ulule/owl-kit-components/next'\nimport { t } from '@owl-nest/localize'\n\nexport function Refused() {\n const navigate = useNavigate()\n\n return (\n \n \n \n {t('Your project does not qualify on Ulule')}\n \n {t(\n 'Thanks for submitting your project on Ulule. Unfortunately, we won’t be able to pursue with your request on our platform because your country is not yet supported by Ulule.',\n )}\n \n \n {t('Contact us')}\n \n navigate('/')}>\n {t('Back to form')}\n \n \n \n )\n}\n\nconst Wrapper = styled.div`\n display: flex;\n flex-direction: row;\n padding: 40px 0;\n`\n\nconst Content = styled.div`\n margin-left: 32px;\n\n ${plume.styles.heading.M} {\n margin-bottom: 17px;\n }\n\n ${plume.styles.copy.M.light} {\n margin-bottom: 50px;\n }\n`\n", "import * as React from 'react'\nimport { useNavigate, useParams } from 'react-router'\nimport { styled } from 'next-yak'\n\nimport * as plume from '@ulule/owl-kit-components/next'\nimport * as hooks from '@owl-nest/hooks'\nimport { t } from '@owl-nest/localize'\n\nimport { useProposal } from '../hooks/useProposal'\n\nexport function StaffDuplicate(): React.ReactElement {\n const params = useParams<{ token: string }>()\n const proposalQuery = useProposal(params.token, { withToken: true })\n const proposal = hooks.data(proposalQuery.response)\n const navigate = useNavigate()\n\n if (proposal === undefined) {\n return \n }\n\n return (\n \n \n {t(\"The email in the proposal is %(email)s, it's not yours!\", {\n email: proposal.email,\n })}\n \n \n {t(\n \"You're seeing this screen because you're a staff member. Are you sure you want to link this proposal to your account?\",\n )}\n \n \n {t('Confirm creation of a new project')}\n \n \n )\n\n async function createProposal(): Promise {\n if (params.token !== undefined) {\n await proposalQuery.update({}, { withToken: true })\n navigate(`/${params.token}/loading`, { replace: true })\n }\n }\n}\n\nconst Wrapper = styled.div`\n display: flex;\n flex-direction: column;\n align-items: center;\n justify-content: center;\n\n ${plume.styles.copy.M.light} {\n margin: 14px 0 28px 0;\n }\n\n ${plume.styles.heading.M}, ${plume.styles.copy.M.light} {\n text-align: center;\n }\n\n ${plume.Button} {\n margin: 30px 0 17px 0;\n }\n`\n"], "mappings": "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", "names": ["init_define_process_env", "init_sentry_injection_stub", "init_define_process_env", "init_sentry_injection_stub", "n", "init_define_process_env", "init_sentry_injection_stub", "init_define_process_env", "init_sentry_injection_stub", "React", "ReactDOM", "init_define_process_env", "init_sentry_injection_stub", "React", "init_define_process_env", "init_sentry_injection_stub", "React", "init_define_process_env", "init_sentry_injection_stub", "React", "init_define_process_env", "init_sentry_injection_stub", "windowLens", "lens", "FLAGS", "URLS", "PROPOSAL_IMAGES", "ISLANDS", "CURRENCIES", "USER", "GTM_KEY", "AFFILIATION_ID", "PARTNER_ID", "ROCKET_IMAGE", "FIRE_IMAGE", "SPACE_BACKGROUND_IMAGE", "init_define_process_env", "init_sentry_injection_stub", "React", "ArrowDecorationSvg", "className", "style", "colors_exports", "HeaderComponent", "props", "usePartner", "partner", "AFFILIATION_ID", "data", "response", "isPartnerDefault", "is_default", "partnerLogo", "logo", "versions", "full", "url", "React", "useEffect", "status", "QueryStatus", "PRISTINE", "query", "div", "Title", "as", "tc", "emphasis", "Emphasis", "ArrowDecoration", "Subtitle", "glyphs", "decoration", "Quote", "t", "PartnerBlock", "PartnerLabel", "PartnerLogo", "alt", "name", "src", "styled", "styles", "heading", "XL", "XXS", "XXXXXXS", "ArrowDecorationSvg", "Header", "init_define_process_env", "init_sentry_injection_stub", "React", "PreCreateHeaderComponent", "props", "usePartner", "partner", "AFFILIATION_ID", "data", "response", "isPartnerDefault", "is_default", "partnerLogo", "logo", "versions", "full", "url", "React", "useEffect", "status", "QueryStatus", "PRISTINE", "query", "Wrapper", "Title", "as", "br", "Emphasis", "Subtitle", "glyphs", "decoration", "Quote", "strong", "ArrowDecoration", "PartnerBlock", "PartnerLabel", "PartnerLogo", "alt", "name", "src", "styled", "styles", "heading", "XL", "S", "XXXXXXS", "ArrowDecorationSvg", "PreCreateHeader", "init_define_process_env", "init_sentry_injection_stub", "React", "AsideComponent", "props", "userConfig", "useUserEnv", "div", "ReasonList", "ReasonItem", "illustrations", "twoToned", "SpeechBubbles", "size", "styles", "heading", "S", "as", "tp", "copy", "M", "light", "t", "lang", "Users", "Crown", "percent", "styled", "Aside", "init_define_process_env", "init_sentry_injection_stub", "React", "init_define_process_env", "init_sentry_injection_stub", "React", "init_define_process_env", "init_sentry_injection_stub", "React", "ImageMedia", "srcset", "className", "ref", "Carousel", "items", "random", "indexActive", "setindexActive", "useState", "stableItems", "useMemo", "array", "shuffle", "stableUpdateIndex", "useCallback", "length", "useTimeout", "ref", "inView", "useInView", "triggerOnce", "CarouselItems", "map", "item", "i", "CarouselItem", "key", "$active", "CarouselImage", "$inView", "srcset", "img", "div", "CarouselRegularText", "text", "CarouselName", "name", "Link", "tinted", "href", "linkProject", "project", "CarouselPlace", "place", "CarouselSteps", "CarouselStep", "onClick", "styled", "ImageMedia", "css", "styles", "heading", "XXS", "XXXXXS", "copy", "L", "light", "rem", "COLORS", "PRIMARY_RED_500", "PRIMARY_SAND_200", "init_define_process_env", "init_sentry_injection_stub", "celia", "david", "lolo", "maliki", "noob", "theo", "PROPOSAL_IMAGES", "items", "FooterComponent", "props", "div", "styles", "heading", "XL", "Carousel", "items", "random", "Footer", "styled", "init_define_process_env", "init_sentry_injection_stub", "React", "init_define_process_env", "init_sentry_injection_stub", "React", "init_define_process_env", "init_sentry_injection_stub", "React", "CommentCardComponent", "info", "icon", "name", "title", "comment", "rating", "CommentContainer", "User", "UserName", "S", "copy", "M", "light", "Icon", "img", "alt", "src", "Rating", "Array", "from", "map", "_", "idx", "glyphs", "fill", "Star", "key", "heading", "XS", "CommentCard", "styled", "CommentCarousel", "comments", "CommentsContainer", "CommentsSlider", "map", "comment", "idx", "CommentCard", "key", "info", "CommentsSliderLaptop", "CommentsSlider", "styled", "CommentsSliderLaptop", "CommentsContainer", "init_define_process_env", "init_sentry_injection_stub", "COMMENTS_DATA", "WideFooterComponent", "className", "navigate", "useNavigate", "div", "styles", "heading", "L", "CommentCarousel", "comments", "COMMENTS_DATA", "ButtonAsLink", "color", "onClick", "WideFooter", "styled", "init_define_process_env", "init_sentry_injection_stub", "React", "init_define_process_env", "init_sentry_injection_stub", "React", "PopHeadingComponent", "className", "kind", "children", "color", "asDesktop", "titleLevel", "Title", "styles", "heading", "as", "Pop", "width", "styled", "props", "svg", "xmlns", "viewBox", "fill", "path", "COLORS", "PRIMARY_BLUE_500", "d", "PopHeading", "init_define_process_env", "init_sentry_injection_stub", "React", "init_define_process_env", "init_sentry_injection_stub", "React", "HorizontalMediaComponent", "backgroundColor", "className", "description", "image", "reverse", "title", "Wrapper", "$reverse", "Content", "Line", "$backgroundColor", "Image", "alt", "src", "srcSet", "HorizontalMedia", "styled", "Picture", "css", "MediaStackWithPath", "listItems", "Section", "List", "map", "description", "image", "title", "index", "Relative", "key", "length", "LeftPath", "HorizontalMedia", "backgroundColor", "COLORS", "TEXT_RED", "PRIMARY_BLUE_500", "SECONDARY_MINT_700", "RightPath", "reverse", "styled", "props", "svg", "xmlns", "width", "height", "fill", "path", "stroke", "PRIMARY_GREY_900", "d", "strokeWidth", "strokeLinecap", "strokeDasharray", "ServicesComponent", "className", "navigate", "useNavigate", "listItems", "title", "styles", "heading", "S", "asDesktop", "as", "description", "image", "src", "PROPOSAL_IMAGES", "launch", "srcSet", "learning", "Link", "underlined", "href", "target", "partners", "div", "PopHeading", "kind", "Description", "MediaStackWithPath", "ButtonAsLink", "color", "onClick", "styled", "copy", "regular", "Services", "PreCreateLayout", "children", "PreCreateWrapper", "GlobalStyle", "PreCreateHeaderBlock", "ServicesBlock", "FooterWrapper", "FooterBlock", "WideFooterBlock", "FormLayout", "FormGrid", "GridHeader", "GridMain", "GridAside", "useDramaticallyInefficientGlobalCss", "css", "COLORS", "PRIMARY_SAND_100", "GridBase", "styled", "Header", "Aside", "PreCreateHeader", "Footer", "WideFooter", "Services", "init_define_process_env", "init_sentry_injection_stub", "React", "init_define_process_env", "init_sentry_injection_stub", "useDuplicate", "user", "user_exports", "response", "partner_exports", "AFFILIATION_ID", "partner", "data", "hasPartner", "isPartnerDefault", "project", "ProjectStatus", "init_define_process_env", "init_sentry_injection_stub", "init_define_process_env", "init_sentry_injection_stub", "EXTRA_FIELDS", "setInitialProposal", "store", "proposal", "user", "proposal_exports", "useProposal", "token", "config", "query", "update", "patch", "PROPOSAL_FORM_ATOM", "atom", "useProposalForm", "store", "useStore", "user", "user_exports", "userConfig", "useUserEnv", "value", "setValue", "useAtom", "proposalQuery", "useProposal", "currentProposal", "data", "tracking", "useTracking", "persist", "create", "form", "state", "phoneNumber", "phone_exports", "response", "USER_COUNTRY", "link", "QueryStatus", "Either", "proposal_exports", "PARTNER_ID", "proposal", "setInitialProposal", "EVENT_TYPE", "CATEGORY", "Duplicate", "duplicate", "useDuplicate", "partner", "data", "usePartner", "AFFILIATION_ID", "response", "token", "create", "useProposalForm", "proposalQuery", "useProposal", "navigate", "useNavigate", "undefined", "Spinner", "projectName", "project", "name", "partnerName", "needModeration", "answer_code", "ProjectAnswerCode", "NEED_MODERATION", "hasCurrentPartner", "partnerships", "some", "partnership", "id", "PARTNER_ID", "acceptedSamePartner", "ACCEPTED", "acceptedDifferentPartner", "Wrapper", "styles", "heading", "M", "t", "copy", "light", "tnc", "title", "CardTypeSelector", "avatar", "USER", "versions", "url", "cardType", "overrideIsProjectOnline", "onClick", "goToProject", "rates", "targetCurrency", "projectTranslation", "addToMyList", "backed", "backerCount", "comingSoon", "comingSoonLabel", "created", "finished", "highlights", "listed", "shortCountdown", "progressInfo", "status", "getStatus", "Button", "goToDiscussion", "LinkAsButton", "kind", "createProposal", "next", "proposal", "replace", "update", "withToken", "refuse", "location", "href", "absolute_url", "styled", "init_define_process_env", "init_sentry_injection_stub", "React", "init_define_process_env", "init_sentry_injection_stub", "React", "SectionComponent", "children", "props", "section", "SectionContent", "SectionContent", "styled", "Section", "SectionComponent", "init_define_process_env", "init_sentry_injection_stub", "React", "DescriptionField", "tracker", "Field", "field", "meta", "TextAreaField", "t", "event", "init_define_process_env", "init_sentry_injection_stub", "React", "init_define_process_env", "init_sentry_injection_stub", "COMMUNITY_SIZE_RANGES", "GOAL_RANGES", "validationSchema", "create", "values", "create$3", "create$6", "create$5", "ProposalTypeNumber", "create$8", "schema", "RewardType", "LegalEntity", "url", "max", "t", "phone", "email", "init_define_process_env", "init_sentry_injection_stub", "React", "communityRangeLabel", "range", "maximum", "text_exports", "minimum", "t", "tc", "goalRangeLabel", "currency", "minAmount", "accounting_exports", "getUserConfig", "maxAmount", "Money", "GoalField", "tracker", "Field", "name", "field", "meta", "RadioGroupField", "error", "touched", "label", "t", "type", "RadioField", "onChangeAndValue", "ProposalTypeNumber", "PROJECT", "value", "RadioLabelWithFlag", "tp", "Tag", "color", "MEMBERSHIP", "fieldValue", "onChange", "event", "checked", "String", "form", "selectedIndex", "getSelectedIndex", "GoalSelectField", "hidden", "values", "projectType", "placeholder", "selected", "goal", "setValue", "selectedRange", "GOAL_RANGES", "Number", "setFieldValue", "nativeOnMobile", "map", "range", "index", "content", "goalRangeLabel", "location", "currency", "Option", "native", "key", "findIndex", "JSON", "stringify", "styled", "SelectField", "css", "init_define_process_env", "init_sentry_injection_stub", "React", "RewardTypeField", "tracker", "Field", "field", "meta", "RadioGroupField", "t", "RadioField", "onChangeAndValue", "RewardType", "illustrations_exports", "value", "fieldValue", "event", "init_define_process_env", "init_sentry_injection_stub", "React", "LegalEntityField", "tracker", "Field", "field", "meta", "RadioGroupField", "t", "RadioField", "onChangeAndValue", "LegalEntity", "value", "fieldValue", "event", "init_define_process_env", "init_sentry_injection_stub", "React", "init_define_process_env", "init_sentry_injection_stub", "createSocialLink", "url", "link_exports", "toValidUrl", "LinksField", "tracker", "FieldArray", "name", "form", "arrayHelpers", "AddLinkField", "onAddLink", "link", "push", "values", "links", "list", "map", "index", "Link", "key", "id", "glyphs", "stroke", "size", "href", "url", "target", "rel", "styles", "button", "UnstyledButton", "type", "onClick", "remove", "Trash", "length", "Field", "field", "CheckboxField", "label", "t", "checked", "value", "onChange", "event", "currentTarget", "setValue", "markEmpty", "setFieldValue", "onBlur", "meta", "disabledAddLink", "Boolean", "touched", "error", "LineField", "Title", "TextField", "maxLength", "placeholder", "onKeyPress", "addLink", "setFieldError", "Button", "disabled", "validate", "reach", "validationSchema", "ValidationError", "errors", "undefined", "createSocialLink", "next", "styled", "init_define_process_env", "init_sentry_injection_stub", "React", "PhoneField", "tracker", "Field", "field", "meta", "form", "t", "value", "COUNTRIES", "init_define_process_env", "init_sentry_injection_stub", "React", "EmailField", "tracker", "disabled", "Field", "field", "meta", "TextField", "t", "event", "init_define_process_env", "init_sentry_injection_stub", "React", "SocialLinkModalComponent", "className", "open", "onAddLink", "onDismiss", "ModalWithIcon", "closable", "onClose", "icon", "illustrations", "twoToned", "SpeechBubbles", "size", "noBackground", "buttons", "type", "props", "onClick", "children", "t", "kind", "styles", "heading", "S", "copy", "regular", "SocialLinkModal", "styled", "init_define_process_env", "init_sentry_injection_stub", "React", "LocationModalComponent", "className", "open", "needLocation", "onClose", "Modal", "lockScroll", "closable", "Field", "name", "field", "form", "Formik", "initialValues", "country", "undefined", "currency", "value", "onSubmit", "values", "setFieldValue", "validationSchema", "reach", "validateOnBlur", "validateOnChange", "formikBag", "styles", "heading", "S", "t", "meta", "SelectField", "$index", "label", "placeholder", "selected", "onChange", "error", "touched", "height", "COUNTRIES", "map", "Option", "key", "code", "CURRENCIES", "content", "Button", "type", "onClick", "submitForm", "LinkAsButton", "kind", "styled", "LocationModal", "init_define_process_env", "init_sentry_injection_stub", "React", "CommunityField", "Field", "field", "form", "meta", "selectedIndex", "getSelectedIndex", "SelectField", "t", "selected", "selectedRange", "COMMUNITY_SIZE_RANGES", "range", "index", "content", "label", "communityRangeLabel", "Option", "fieldValue", "FormCreate", "fix", "useFix", "navigate", "useNavigate", "duplicate", "useDuplicate", "proposalForm", "useProposalForm", "userConfig", "useUserEnv", "isLocationModalOpen", "setIsLocationModalOpen", "useState", "isSocialLinkModalOpen", "setIsSocialLinkModalOpen", "isFullDisclaimerOpen", "setIsFullDisclaimerOpen", "tracker", "useFormTracking", "CATEGORY", "PROJECT_FORM", "description", "value", "error", "legalEntity", "goal", "links", "rewardType", "email", "phone", "GTM_KEY", "isMobile", "utils", "useEffect", "zE", "window", "status", "Status", "LOADING", "Spinner", "Formik", "onSubmit", "handleSubmit", "initialValues", "values", "projectType", "undefined", "list", "url", "noSocial", "number", "country", "country_code", "communityRange", "location", "getLocation", "validationSchema", "validateOnChange", "validateOnBlur", "formikBag", "user", "useAuthenticatedUser", "setFieldValue", "needLocation", "currency", "useAfterSubmit", "isValid", "pushErrorEvent", "errors", "useScrollToFirstError", "useBeforeUnload", "isFormDirty", "t", "FormWrapper", "ProjectSection", "DescriptionField", "GoalField", "RewardTypeField", "UserSection", "LegalEntityField", "LinksField", "CommunityField", "PhoneField", "EmailField", "disabled", "Footer", "Button", "type", "styles", "copy", "XS", "regular", "COUNTRIES", "find", "code", "label", "LinkAsButton", "onClick", "TermsButton", "$open", "ToggleableSmallText", "tc", "ululePostalAddress", "br", "link", "Link", "kind", "href", "PRIVACY_URL", "target", "rel", "SocialLinkModal", "open", "onAddLink", "pushFormEvent", "eventLabel", "eventAction", "scroll", "scrollToHashWithOffset", "offset", "parseInt", "SIZES", "HEADER_HEIGHT", "onDismiss", "submitForm", "LocationModal", "onClose", "length", "createSocialLink", "next", "push", "hasLinks", "hasAtLeastOneCrawlableLink", "crawlable", "goalRangeLabel", "eventCallback", "persist", "create", "caseOf", "left", "failure", "right", "proposal", "token", "supportedCountry", "islandCodes", "Object", "entries", "ISLANDS", "includes", "effect", "wasSubmitting", "usePrevious", "isSubmitting", "isAuthentifiedUser", "hasChanged", "styled", "BaseSection", "Section", "init_define_process_env", "init_sentry_injection_stub", "React", "init_define_process_env", "init_sentry_injection_stub", "React", "init_define_process_env", "init_sentry_injection_stub", "React", "BlueEgg", "styled", "props", "svg", "xmlns", "fill", "viewBox", "path", "d", "BlueCoin", "g", "BlueCirclePeople", "stroke", "stroke-linecap", "stroke-width", "fill-rule", "clip-rule", "PreCreateInfoComponent", "className", "div", "PopHeading", "kind", "asDesktop", "CollectionTypesGrid", "CollectionTypeCard", "BlueEgg", "CollectionTypeTexts", "styles", "heading", "S", "as", "copy", "regular", "BlueCoin", "br", "BlueCirclePeople", "PreCreateInfo", "styled", "PreCreate", "navigate", "useNavigate", "Wrapper", "ButtonsWrapper", "UluleConnectWrapper", "ButtonAsLink", "color", "onClick", "Trustpilot", "PreCreateInfo", "styled", "init_define_process_env", "init_sentry_injection_stub", "React", "init_define_process_env", "init_sentry_injection_stub", "React", "init_define_process_env", "init_sentry_injection_stub", "PROGRESS_ATOM", "atom", "PROGRESS_TRANSITION_DURATION", "useProgress", "progress", "setProgress", "useAtom", "increment", "finish", "weight", "getWeight", "maxIncrement", "clampedWeight", "jitter", "res", "Progress", "progress", "useProgress", "Wrapper", "RocketContainer", "Fire", "src", "FIRE_IMAGE", "Rocket", "ROCKET_IMAGE", "ProgressStatus", "styles", "heading", "M", "tc", "highligted", "Highligted", "ProgressBar", "$progress", "glyphs", "fill", "CheckCircle", "size", "XXS", "t", "styled", "props", "Fire", "styled", "Rocket", "RocketContainer", "styled", "Wrapper", "styled", "SPACE_BACKGROUND_IMAGE", "init_define_process_env", "init_sentry_injection_stub", "React", "LOCALSTORAGE_NAMESPACE", "LOCALSTORAGE_LIFETIME", "PollState", "token", "children", "user", "user_exports", "proposalQuery", "useProposal", "increment", "useProgress", "tracking", "useTracking", "proposal", "EVENT_TYPE", "CATEGORY", "useTimeout", "init_define_process_env", "init_sentry_injection_stub", "React", "LinkState", "token", "children", "auth", "user_exports", "proposalQuery", "useProposal", "increment", "useProgress", "init_define_process_env", "init_sentry_injection_stub", "React", "DoneState", "proposal", "children", "navigate", "useNavigate", "finish", "useProgress", "proposal_exports", "ProposalAnswerCode", "init_define_process_env", "init_sentry_injection_stub", "React", "DuplicateState", "proposal", "children", "navigate", "useNavigate", "init_define_process_env", "init_sentry_injection_stub", "React", "StaffDuplicateState", "proposal", "children", "navigate", "useNavigate", "init_define_process_env", "init_sentry_injection_stub", "React", "Connect", "proposal", "auth", "user", "useAuth", "hasIdentified", "setHasIdentified", "useState", "React", "useEffect", "type", "identify", "email", "forget", "Wrapper", "styles", "heading", "M", "t", "RealConnect", "styled", "Loading", "params", "useParams", "workflow", "useWorkflow", "PollState", "Progress", "Connect", "StaffDuplicateState", "DuplicateState", "LinkState", "DoneState", "token", "auth", "user_exports", "duplicate", "useDuplicate", "proposalQuery", "useProposal", "QueryStatus", "proposal", "data", "proposal_exports", "init_define_process_env", "init_sentry_injection_stub", "React", "Refused", "navigate", "useNavigate", "Wrapper", "illustrations", "twoToned", "WarningSign", "size", "Content", "styles", "heading", "M", "t", "copy", "light", "Button", "as", "kind", "href", "LinkAsButton", "onClick", "styled", "init_define_process_env", "init_sentry_injection_stub", "React", "StaffDuplicate", "params", "useParams", "proposalQuery", "useProposal", "token", "withToken", "proposal", "data", "response", "navigate", "useNavigate", "undefined", "Spinner", "Wrapper", "styles", "heading", "M", "t", "email", "copy", "light", "LinkAsButton", "kind", "onClick", "createProposal", "update", "replace", "styled", "DefaultFormLayout", "FormLayout", "BackToTop", "Outlet", "DefaultPreCreateLayout", "useUserEnv", "PreCreateLayout", "Navigate", "App", "plausible_exports", "BrowserRouter", "Routes", "Route", "PreCreate", "FormCreate", "Duplicate", "StaffDuplicate", "Loading", "Refused", "children", "location", "useLocation", "renderHeader", "headerContainer", "Header", "err", "renderFooter", "userConfig", "getUserConfig", "footerContainer", "Footer", "getNavSectionList", "mount", "initUserConfig", "initializeLocalization", "LOCALE_FILES", "appContainer", "App", "proposals_default"] }