{"version":3,"file":"modern.proposals.Zpb4nz0f.js","names":["jotai.atom","setInitialProposal","useProposal","hooks.useSharedQuery","hooks.data","styled","keyframes","plume","jsx","_jsx","jsxs","_jsxs","GUIDE_URL","MCP_DOCUMENTATION_URL","AiAssistantSectionComponent","className","children","Content","Texts","NewTag","color","icon","glyphs","stroke","Star","size","Title","as","id","asDesktop","Emphasis","Lead","Button","href","target","rel","Developers","CodeBlock","styles","copy","S","regular","Link","kind","underlined","Illustration","LargeSparkle","SmallSparkle","Chat","ChatHeader","heading","XXXXXXS","StatusPill","UserMessage","AssistantMessage","Typing","SparkleSvg","viewBox","xmlns","d","blink","Tag","L","Message","AiAssistantSection","Content","plume.glyphs.stroke.Star","Title","Emphasis","plume.Button","plume.glyphs.stroke.CodeBlock","plume.Link","plume.styles.heading.XXXXXXS","plume.StatusPill","plume.Tag","plume.styles.heading.L","plume.COLORS.PRIMARY_GREY_900","plume.COLORS.PRIMARY_GREY_000","React","styled","t","tc","plume","service","UFE","QueryStatus","data","ArrowDecorationSvg","jsx","_jsx","jsxs","_jsxs","HeaderComponent","props","usePartner","partner","AFFILIATION_ID","response","isPartnerDefault","is_default","partnerLogo","logo","versions","full","url","useEffect","status","PRISTINE","query","children","Title","as","emphasis","Emphasis","ArrowDecoration","Subtitle","glyphs","decoration","Quote","PartnerBlock","PartnerLabel","PartnerLogo","alt","name","src","styles","heading","XL","XXS","XXXXXXS","Header","usePartner","service.partner.usePartner","UFE.AFFILIATION_ID","Title","Emphasis","ArrowDecoration","Subtitle","plume.glyphs.decoration.Quote","PartnerBlock","PartnerLabel","PartnerLogo","plume.styles.heading.XL","plume.styles.heading.XXS","plume.styles.heading.XXXXXXS","React","styled","plume","service","UFE","QueryStatus","data","ArrowDecorationSvg","jsx","_jsx","jsxs","_jsxs","PreCreateHeaderComponent","props","usePartner","partner","AFFILIATION_ID","response","isPartnerDefault","is_default","partnerLogo","logo","versions","full","url","useEffect","status","PRISTINE","query","Wrapper","children","Title","as","Emphasis","Subtitle","glyphs","decoration","Quote","ArrowDecoration","PartnerBlock","PartnerLabel","PartnerLogo","alt","name","src","styles","heading","XL","S","XXXXXXS","PreCreateHeader","usePartner","service.partner.usePartner","UFE.AFFILIATION_ID","Wrapper","plume.glyphs.decoration.Quote","plume.styles.heading.XL","plume.styles.heading.S","plume.styles.heading.XXXXXXS","styled","t","tp","plume","env","jsx","_jsx","jsxs","_jsxs","AsideComponent","props","userConfig","useUserEnv","children","ReasonList","ReasonItem","illustrations","twoToned","SpeechBubbles","size","styles","heading","S","as","copy","M","light","lang","Users","Crown","percent","Aside","env.useUserEnv","plume.illustrations.twoToned.SpeechBubbles","plume.styles.heading.S","plume.illustrations.twoToned.Users","plume.illustrations.twoToned.Crown","React","styled","css","useInView","plume","ImageMedia","useTimeout","utils","jsx","_jsx","jsxs","_jsxs","Carousel","items","random","indexActive","setindexActive","useState","stableItems","useMemo","array","shuffle","stableUpdateIndex","useCallback","length","ref","inView","triggerOnce","CarouselItems","children","map","item","i","CarouselItem","$active","CarouselImage","$inView","srcset","img","CarouselRegularText","text","CarouselName","name","Link","tinted","href","linkProject","project","CarouselPlace","place","CarouselSteps","CarouselStep","onClick","styles","heading","XXS","XXXXXS","copy","L","light","rem","COLORS","PRIMARY_RED_500","PRIMARY_SAND_200","utils.array.shuffle","plume.Link","plume.styles.heading.XXS","plume.styles.heading.XXXXXS","utils.styles.rem","plume.COLORS.PRIMARY_RED_500","plume.COLORS.PRIMARY_SAND_200","UFE.PROPOSAL_IMAGES","styled","plume","Carousel","items","jsx","_jsx","jsxs","_jsxs","FooterComponent","props","children","styles","heading","XL","random","Footer","plume.styles.heading.XL","Footer","styled","BREAKPOINTS","COLORS","glyphs","styles","S","jsx","_jsx","jsxs","_jsxs","CommentCardComponent","info","icon","name","title","comment","rating","CommentContainer","children","User","UserName","copy","M","light","Icon","alt","src","Rating","Array","from","map","_","idx","fill","Star","heading","XS","CommentCard","glyphs.fill.Star","S.heading.XS","styled","keyframes","plume","CommentCard","jsx","_jsx","jsxs","_jsxs","CommentCarousel","comments","CommentsContainer","children","CommentsSlider","map","comment","idx","info","CommentsSliderLaptop","slide","styled","useNavigate","plume","CommentCarousel","COMMENTS_DATA","jsx","_jsx","jsxs","_jsxs","WideFooterComponent","className","navigate","children","styles","heading","L","comments","ButtonAsLink","color","onClick","WideFooter","plume.styles.heading.L","plume.ButtonAsLink","styled","plume","jsx","_jsx","jsxs","_jsxs","PopHeadingComponent","className","kind","children","color","asDesktop","titleLevel","Title","styles","heading","as","Pop","width","props","xmlns","viewBox","fill","COLORS","PRIMARY_BLUE_500","d","PopHeading","plume.styles.heading","styled","css","plume","jsx","_jsx","jsxs","_jsxs","HorizontalMediaComponent","backgroundColor","className","description","image","reverse","title","Wrapper","$reverse","children","Content","Line","$backgroundColor","Image","alt","src","srcSet","HorizontalMedia","Picture","Wrapper","Content","plume.Picture","styled","plume","HorizontalMedia","Image","Content","jsx","_jsx","jsxs","_jsxs","MediaStackWithPath","listItems","Section","children","List","map","description","image","title","index","Relative","length","LeftPath","backgroundColor","COLORS","TEXT_RED","PRIMARY_BLUE_500","SECONDARY_MINT_700","RightPath","reverse","props","xmlns","width","height","fill","stroke","PRIMARY_GREY_900","d","strokeWidth","strokeLinecap","strokeDasharray","Section","plume.COLORS.TEXT_RED","plume.COLORS.PRIMARY_BLUE_500","plume.COLORS.SECONDARY_MINT_700","plume.COLORS.PRIMARY_GREY_900","styled","plume","UFE","PopHeading","MediaStackWithPath","useNavigate","jsx","_jsx","Fragment","_Fragment","jsxs","_jsxs","ServicesComponent","className","navigate","listItems","title","styles","heading","S","asDesktop","as","children","description","image","src","PROPOSAL_IMAGES","launch","srcSet","learning","Link","underlined","href","target","partners","kind","Description","ButtonAsLink","color","onClick","copy","regular","Services","plume.styles.heading.S","_Fragment","plume.Link","plume.ButtonAsLink","styled","useDramaticallyInefficientGlobalCss","css","plume","AiAssistantSection","Header","PreCreateHeader","Aside","Footer","WideFooter","Services","jsx","_jsx","Fragment","_Fragment","jsxs","_jsxs","PreCreateLayout","children","PreCreateWrapper","GlobalStyle","PreCreateHeaderBlock","ServicesBlock","FooterWrapper","FooterBlock","WideFooterBlock","FormLayout","FormGrid","GridHeader","GridMain","GridAside","COLORS","PRIMARY_SAND_100","GridBase","_Fragment","plume.COLORS.PRIMARY_SAND_100","Footer","service.user.useAuthenticatedUser","service.partner.usePartner","UFE.AFFILIATION_ID","hooks.data","service.proposal.setInitialProposal","service.proposal.useProposal","jotai.atom","jotai.useStore","service.user.useAuthenticatedUser","env.useUserEnv","jotai.useAtom","hooks.data","shadow.useTracking","utils.phone.normalizePhoneNumber","env.USER_COUNTRY","service.proposal.createProposal","UFE.PARTNER_ID","useNavigate","styled","plume","CardTypeSelector","api","models","hooks","service","t","tnc","useDuplicate","useProposalForm","UFE","useProposal","jsx","_jsx","jsxs","_jsxs","Duplicate","duplicate","partner","data","usePartner","AFFILIATION_ID","response","token","create","proposalQuery","navigate","undefined","Spinner","projectName","project","name","partnerName","needModeration","answer_code","ProjectAnswerCode","NEED_MODERATION","hasCurrentPartner","partnerships","some","partnership","id","PARTNER_ID","acceptedSamePartner","ACCEPTED","acceptedDifferentPartner","Wrapper","children","styles","heading","M","copy","light","title","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","hooks.data","service.partner.usePartner","UFE.AFFILIATION_ID","plume.Spinner","models.project.name","UFE.PARTNER_ID","Wrapper","plume.styles.heading.M","models.project.comingSoonLabel","models.project.getStatus","plume.Button","plume.LinkAsButton","styled","plume","jsx","_jsx","SectionComponent","children","props","SectionContent","SectionIndex","styles","heading","M","SectionTitle","Section","formik.Field","plume.TextAreaField","yup.lazy","yup.object","yup.string","yup.number","yup.mixed","yup.url","yup.phone","yup.email","utils.text.numberToLocaleString","plume.accounting.localeMoney","env.getUserConfig","plume.Money","formik","css","styled","api","plume","t","tp","GOAL_RANGES","goalRangeLabel","jsx","_jsx","jsxs","_jsxs","Fragment","_Fragment","GoalField","tracker","children","Field","name","field","meta","RadioGroupField","error","touched","label","type","RadioField","onChangeAndValue","ProposalTypeNumber","PROJECT","value","RadioLabelWithFlag","Tag","color","MEMBERSHIP","fieldValue","onChange","event","checked","String","form","selectedIndex","getSelectedIndex","GoalSelectField","hidden","values","projectType","placeholder","selected","goal","setValue","selectedRange","Number","setFieldValue","nativeOnMobile","map","range","index","content","location","currency","Option","native","findIndex","JSON","stringify","SelectField","_Fragment","formik.Field","plume.RadioGroupField","plume.RadioField","plume.Tag","plume.Option","plume.SelectField","formik.Field","plume.RadioGroupField","plume.RadioField","_Fragment","plume.illustrations.twoToned.BookAndStuff","plume.illustrations.twoToned.EnvelopeWithHeart","plume.illustrations.twoToned.Coins","plume.illustrations.twoToned.QuestionMark","formik.Field","plume.RadioGroupField","plume.RadioField","service.link.createLink","formik","styled","plume","yup","t","validationSchema","createSocialLink","jsx","_jsx","jsxs","_jsxs","Fragment","_Fragment","LinksField","tracker","FieldArray","name","children","form","arrayHelpers","AddLinkField","onAddLink","link","push","values","links","list","map","index","Link","glyphs","stroke","size","href","url","target","rel","styles","button","UnstyledButton","type","onClick","remove","Trash","id","length","Field","field","CheckboxField","label","checked","value","onChange","event","currentTarget","setValue","markEmpty","setFieldValue","onBlur","meta","disabledAddLink","Boolean","touched","error","LineField","Title","TextField","maxLength","placeholder","onKeyPress","key","addLink","setFieldError","Button","disabled","validate","reach","ValidationError","errors","undefined","response","next","formik.FieldArray","_Fragment","plume.glyphs.stroke.Link","plume.Link","plume.styles.button.UnstyledButton","plume.glyphs.stroke.Trash","formik.Field","plume.CheckboxField","plume.styles.field.Title","plume.TextField","plume.Button","yup.reach","yup.ValidationError","formik.Field","plume.PhoneField","env.COUNTRIES","formik.Field","plume.TextField","styled","t","plume","jsx","_jsx","jsxs","_jsxs","SocialLinkModalComponent","className","open","onAddLink","onDismiss","ModalWithIcon","closable","onClose","icon","illustrations","twoToned","SpeechBubbles","size","noBackground","buttons","type","props","onClick","children","kind","styles","heading","S","copy","regular","SocialLinkModal","plume.ModalWithIcon","plume.illustrations.twoToned.SpeechBubbles","plume.styles.heading.S","formik","styled","plume","yup","t","env","UFE","validationSchema","jsx","_jsx","Fragment","_Fragment","jsxs","_jsxs","LocationModalComponent","className","open","needLocation","onClose","Modal","lockScroll","closable","children","Field","name","field","form","Formik","initialValues","country","undefined","currency","value","onSubmit","values","setFieldValue","reach","validateOnBlur","validateOnChange","formikBag","styles","heading","S","meta","SelectField","$index","label","placeholder","selected","onChange","error","touched","height","COUNTRIES","map","Option","code","CURRENCIES","content","Button","type","onClick","submitForm","LinkAsButton","kind","LocationModal","plume.Modal","formik.Field","formik.Formik","yup.reach","_Fragment","plume.styles.heading.S","plume.Option","plume.Button","plume.LinkAsButton","plume.SelectField","formik.Field","plume.SelectField","plume.Option","React","formik","styled","useNavigate","plume","t","tc","geolocation","shadow","scroll","hooks","service","env","Section","SectionContent","UFE","DescriptionField","GoalField","RewardTypeField","LegalEntityField","LinksField","Link","PhoneField","EmailField","SocialLinkModal","LocationModal","validationSchema","goalRangeLabel","createSocialLink","useDuplicate","useProposalForm","CommunityField","jsx","_jsx","jsxs","_jsxs","Fragment","_Fragment","FormCreate","fix","useFix","navigate","duplicate","proposalForm","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","hideZendesk","status","Status","LOADING","Spinner","Formik","onSubmit","handleSubmit","initialValues","values","projectType","undefined","list","url","noSocial","number","country","country_code","communityRange","location","getLocation","validateOnChange","validateOnBlur","children","formikBag","user","useAuthenticatedUser","setFieldValue","needLocation","currency","useAfterSubmit","isValid","pushErrorEvent","errors","useScrollToFirstError","useBeforeUnload","isFormDirty","FormWrapper","ProjectSection","UserSection","disabled","Footer","Button","type","styles","copy","XS","regular","COUNTRIES","find","code","label","LinkAsButton","onClick","TermsButton","$open","ToggleableSmallText","ululePostalAddress","br","link","kind","href","PRIVACY_URL","target","rel","open","onAddLink","pushFormEvent","eventLabel","eventAction","scrollToHashWithOffset","offset","parseInt","SIZES","HEADER_HEIGHT","onDismiss","submitForm","onClose","length","response","next","push","hasLinks","hasAtLeastOneCrawlableLink","crawlable","eventCallback","persist","proposal","create","caseOf","left","failure","right","token","supportedCountry","islandCodes","Object","entries","ISLANDS","includes","effect","wasSubmitting","usePrevious","isSubmitting","isAuthentifiedUser","hasChanged","BaseSection","geolocation.useFix","env.useUserEnv","shadow.useFormTracking","UFE.GTM_KEY","isMobile","plume.utils.isMobile","plume.Spinner","formik.Formik","service.user.useAuthenticatedUser","_Fragment","plume.Button","plume.LinkAsButton","plume.Link","env.PRIVACY_URL","plume.SIZES.HEADER_HEIGHT","UFE.ISLANDS","hooks.usePrevious","styled","jsx","_jsx","jsxs","_jsxs","BlueEgg","props","xmlns","fill","viewBox","children","d","BlueCoin","BlueCirclePeople","stroke","styled","plume","PopHeading","BlueCirclePeople","BlueCoin","BlueEgg","jsx","_jsx","jsxs","_jsxs","PreCreateInfoComponent","className","children","kind","asDesktop","CollectionTypesGrid","CollectionTypeCard","CollectionTypeTexts","styles","heading","S","as","copy","regular","PreCreateInfo","plume.styles.heading.S","styled","useNavigate","plume","Trustpilot","PreCreateInfo","jsx","_jsx","jsxs","_jsxs","PreCreate","navigate","Wrapper","children","ButtonsWrapper","UluleConnectWrapper","ButtonAsLink","color","onClick","Wrapper","plume.ButtonAsLink","jotai.atom","jotai.useAtom","styled","keyframes","t","tc","plume","useProgress","PROGRESS_TRANSITION_DURATION","UFE","jsx","_jsx","jsxs","_jsxs","Progress","progress","Wrapper","children","RocketContainer","Fire","src","FIRE_IMAGE","Rocket","ROCKET_IMAGE","ProgressStatus","styles","heading","M","highligted","Highligted","ProgressBar","$progress","glyphs","fill","CheckCircle","size","XXS","props","fire","rocket","spaceBackground","SPACE_BACKGROUND_IMAGE","Wrapper","UFE.FIRE_IMAGE","UFE.ROCKET_IMAGE","plume.styles.heading.M","plume.glyphs.fill.CheckCircle","plume.styles.heading.XXS","UFE.SPACE_BACKGROUND_IMAGE","service.user.useAuthenticatedUser","shadow.useTracking","_Fragment","service.user.useAuth","service.user.isLoggedIn","_Fragment","model.proposal.isInvalid","_Fragment","_Fragment","_Fragment","React","styled","t","plume","Connect","RealConnect","connectStyles","service","jsx","_jsx","jsxs","_jsxs","proposal","auth","user","useAuth","hasIdentified","setHasIdentified","useState","useEffect","type","identify","email","forget","Wrapper","children","styles","heading","M","service.user.useAuth","Wrapper","plume.styles.heading.M","RealConnect","service.user.useAuth","service.user.isLoggedIn","hooks.data","model.proposal.isReady","model.proposal.isInvalid","model.proposal.isPending","useNavigate","styled","plume","t","jsx","_jsx","jsxs","_jsxs","Refused","navigate","Wrapper","children","illustrations","twoToned","WarningSign","size","Content","styles","heading","M","copy","light","Button","as","kind","href","LinkAsButton","onClick","Wrapper","plume.illustrations.twoToned.WarningSign","plume.styles.heading.M","plume.Button","plume.LinkAsButton","useNavigate","useParams","styled","plume","hooks","t","useProposal","jsx","_jsx","jsxs","_jsxs","StaffDuplicate","params","proposalQuery","token","withToken","proposal","data","response","navigate","undefined","Spinner","Wrapper","children","styles","heading","M","email","copy","light","LinkAsButton","kind","onClick","createProposal","update","replace","hooks.data","plume.Spinner","plume.styles.heading.M","plume.LinkAsButton","env.useUserEnv","shadow.plausible.TrackingProvider","_Fragment","Header","env.getUserConfig","layout.Footer","layout.getNavSectionList","env.initUserConfig","env.LOCALE_FILES","require_react","__toESM","tnc","Spinner","M","L","PRIMARY_RED_500","PRIVACY_URL","SECONDARY_MINT_700","PRIMARY_SAND_100","PRIMARY_SAND_200","PRIMARY_GREY_900","PRIMARY_BLUE_500","S","__yak_section","Star","Button","tp","__yak_em","__yak_li","LOCALE_FILES","t","css$1","__yak_ul","__yak_span","unitPostFix","styled","TEXT_RED","USER_COUNTRY","PRIMARY_GREY_000","__yak_form","XS","lens","err","css","CheckCircle","useDramaticallyInefficientGlobalCss","__yak_div","tc","localeMoney","__yak_img","UnstyledButton","initializeLocalization","require_client","Link$1","Star$1","Trash","CodeBlock","isMobile","Option","HEADER_HEIGHT","Money","reach","Title$3","create$6","create","Formik","ValidationError","Field","FieldArray","create$8","create$5","create$3","Modal","Quote","AwaitStatus","Trustpilot","Footer$2","WarningSign","QuestionMark","EnvelopeWithHeart","Users","Either","Coins","BookAndStuff","Crown","SpeechBubbles","Header$1","XL","XXXXXXS","heading_exports","S$1","L$1","XS$1","M$1","XXS","XXXXXS","Picture","CheckboxField","PhoneField$1","RadioField","RadioGroupField","TextAreaField","Link$2","CardTypeSelector","ButtonAsLink","LinkAsButton","Tag","useInView","StatusPill","ProposalAnswerCode","LegalEntity","RewardType","ProjectAnswerCode","ProjectStatus","getStatus","ProposalTypeNumber","ProposalStatus","comingSoonLabel","TextField","useFix","normalizePhoneNumber","url","phone","email","useUserEnv","initUserConfig","useStore","useAtom","getUserConfig","atom","COUNTRIES","api","scrollToHashWithOffset","usePrevious","rem","numberToLocaleString","Connect$1","SelectField$1","ModalWithIcon","EVENT_TYPE","safePusher","useTracking","CATEGORY","useBeforeUnload","isLoggedIn","useAuth","useAuthenticatedUser","data","useSharedQuery","QueryStatus","useLocation","useNavigate","useParams","Outlet","Routes","Route","Navigate","BrowserRouter","useScrollToFirstError","useTimeout","TrackingProvider","usePartner","getNavSectionList","shuffle","index","array","randomIndex","isPending","proposal","isInvalid","isReady","import_react","useFormTracking","trackingState","safePush","gtmContainerId","stateVariables","errorVariables","trackedFields","_","accumulator","value","error","key","setState","pushErrorEvent","messages","field","message","errors","pushFormEvent","event","formEvent","createLink","success","createProposal","user","payload","sucess","getProposal","extraFields","updateProposal","refuseProposal","SHARED_PROPOSAL_CACHE","setInitialProposal$1","store","cache","useProposal$1","sharedQuery","getResponse","id","config","query","token","update","currentData","response","patch","refuse","failure","mutate","import_client","import_jsx_runtime","require_jsx_runtime","GUIDE_URL","MCP_DOCUMENTATION_URL","AiAssistantSectionComponent","Content$2","Texts","NewTag","Title$2","Emphasis$2","Lead","Developers","Illustration","LargeSparkle","SmallSparkle","Chat","ChatHeader","UserMessage","AssistantMessage","Typing","SparkleSvg","Message","AiAssistantSection","windowLens","PROPOSAL_IMAGES","ISLANDS","CURRENCIES","USER","GTM_KEY","AFFILIATION_ID","PARTNER_ID","ROCKET_IMAGE","FIRE_IMAGE","SPACE_BACKGROUND_IMAGE","ArrowDecorationSvg","HeaderComponent","usePartner$2","partner","isPartnerDefault","partnerLogo","props","Title$1","Emphasis$1","ArrowDecoration$1","Subtitle$1","PartnerBlock$1","PartnerLabel$1","PartnerLogo$1","Header","PreCreateHeaderComponent","usePartner$1","Wrapper$7","Title","Emphasis","Subtitle","ArrowDecoration","PartnerBlock","PartnerLabel","PartnerLogo","PreCreateHeader","AsideComponent","userConfig","ReasonList","ReasonItem","Aside","ImageMedia","srcset","Carousel","indexActive","setindexActive","stableItems","random","items","stableUpdateIndex","ref","inView","CarouselItems","CarouselItem","i","CarouselImage","item","CarouselRegularText","CarouselName","CarouselPlace","CarouselSteps","CarouselStep","\"style\"","$active","celia","david","theo","lolo","maliki","noob","FooterComponent","Footer$1","CommentCardComponent","CommentContainer","User","UserName","name","Icon","icon","Rating","rating","idx","title","comment","CommentCard","CommentCarousel","CommentsContainer","CommentsSlider","comments","CommentsSliderLaptop","COMMENTS_DATA","WideFooterComponent","navigate","WideFooter","PopHeadingComponent","kind","titleLevel","Pop","children","PopHeading","HorizontalMediaComponent","Wrapper$6","reverse","Content$1","Line","backgroundColor","description","Image","image","HorizontalMedia","$backgroundColor","$reverse","MediaStackWithPath","Section$1","List","listItems","Relative","LeftPath","RightPath","ServicesComponent","Description","Services","PreCreateLayout","PreCreateWrapper","GlobalStyle","PreCreateHeaderBlock","ServicesBlock","FooterWrapper","FooterBlock","WideFooterBlock","FormLayout","FormGrid","GridHeader","GridMain","GridAside","useDuplicate","hasPartner","project","EXTRA_FIELDS","setInitialProposal","useProposal","PROPOSAL_FORM_ATOM","useProposalForm","setValue","proposalQuery","currentProposal","tracking","persist","state","form","phoneNumber","link","Duplicate","duplicate","projectName","partnerName","needModeration","hasCurrentPartner","partnership","acceptedSamePartner","acceptedDifferentPartner","Wrapper$5","goToProject","goToDiscussion","SectionComponent","SectionContent","Section","DescriptionField","tracker","meta","COMMUNITY_SIZE_RANGES","GOAL_RANGES","validationSchema","schema","max","values","communityRangeLabel","maximum","range","minimum","goalRangeLabel","minAmount","maxAmount","GoalField","onChangeAndValue","RadioLabelWithFlag","fieldValue","selectedIndex","getSelectedIndex","GoalSelectField","selected","selectedRange","content","hidden","RewardTypeField","LegalEntityField","createSocialLink","toValidUrl","LinksField","arrayHelpers","AddLinkField","Link","disabledAddLink","LineField","addLink","validate","onAddLink","PhoneField","EmailField","SocialLinkModalComponent","onDismiss","SocialLinkModal","LocationModalComponent","open","needLocation","onClose","SelectField","country","currency","formikBag","$index","LocationModal","CommunityField","FormCreate","fix","proposalForm","isLocationModalOpen","setIsLocationModalOpen","isSocialLinkModalOpen","setIsSocialLinkModalOpen","isFullDisclaimerOpen","setIsFullDisclaimerOpen","isMobile$1","zE","handleSubmit","getLocation","useAfterSubmit","isFormDirty","FormWrapper","ProjectSection","UserSection","Footer","TermsButton","ToggleableSmallText","hasLinks","hasAtLeastOneCrawlableLink","supportedCountry","islandCodes","wasSubmitting","effect","hasChanged","isAuthentifiedUser","$open","BaseSection","BlueEgg","BlueCoin","BlueCirclePeople","PreCreateInfoComponent","CollectionTypesGrid","CollectionTypeCard","CollectionTypeTexts","PreCreateInfo","PreCreate","Wrapper$4","ButtonsWrapper","UluleConnectWrapper","PROGRESS_ATOM","useProgress","progress","setProgress","increment","getWeight","maxIncrement","clampedWeight","weight","jitter","res","finish","Progress","Wrapper$3","RocketContainer","Fire","Rocket","ProgressStatus","Highligted","ProgressBar","LOCALSTORAGE_NAMESPACE","PollState","LinkState","auth","DoneState","DuplicateState","StaffDuplicateState","Connect","hasIdentified","setHasIdentified","Wrapper$2","Loading","params","workflow","useWorkflow","Refused","Wrapper$1","Content","StaffDuplicate","Wrapper","DefaultFormLayout","BackToTop","DefaultPreCreateLayout","App","location","renderHeader","headerContainer","renderFooter","footerContainer","mount","appContainer"],"sources":["../../../../../../owl-nest/common/utils/src/array.ts","../../../../../../owl-nest/common/models/src/proposal.ts","../../../../../../owl-nest/common/shadow/src/ga/useFormTracking.ts","../../../../../../owl-nest/common/services/src/link.ts","../../../../../../owl-nest/common/services/src/proposal.ts","../../../../../../owl-nest/ulule/features/proposals/src/Layout/AiAssistantSection.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/Header.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/components/ImageMedia.tsx","../../../../../../owl-nest/ulule/features/proposals/src/components/Carousel.tsx","../../../../../../owl-nest/ulule/features/proposals/src/data/carousel.ts","../../../../../../owl-nest/ulule/features/proposals/src/Layout/Footer.tsx","../../../../../../owl-nest/ulule/features/proposals/src/components/CommentCard.tsx","../../../../../../owl-nest/ulule/features/proposals/src/components/CommentCarousel.tsx","../../../../../../owl-nest/ulule/features/proposals/src/data/comments.ts","../../../../../../owl-nest/ulule/features/proposals/src/Layout/WideFooter.tsx","../../../../../../owl-nest/common/duvet/src/PopHeading.tsx","../../../../../../owl-nest/common/duvet/src/HorizontalMedia.tsx","../../../../../../owl-nest/common/duvet/src/MediaStackWithPath.tsx","../../../../../../owl-nest/ulule/features/proposals/src/Layout/Services.tsx","../../../../../../owl-nest/ulule/features/proposals/src/Layout/index.tsx","../../../../../../owl-nest/ulule/features/proposals/src/hooks/useDuplicate.ts","../../../../../../owl-nest/ulule/features/proposals/src/hooks/useProposal.ts","../../../../../../owl-nest/ulule/features/proposals/src/hooks/useProposalForm.ts","../../../../../../owl-nest/ulule/features/proposals/src/views/Duplicate/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/types.ts","../../../../../../owl-nest/ulule/features/proposals/src/views/FormCreate/rangeLabels.tsx","../../../../../../owl-nest/ulule/features/proposals/src/views/FormCreate/GoalField.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/createSocialLink.ts","../../../../../../owl-nest/ulule/features/proposals/src/views/FormCreate/LinksField.tsx","../../../../../../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/FormCreate/index.tsx","../../../../../../owl-nest/ulule/features/proposals/src/icons/illustrations.tsx","../../../../../../owl-nest/ulule/features/proposals/src/Layout/PreCreateInfo.tsx","../../../../../../owl-nest/ulule/features/proposals/src/views/PreCreate/index.tsx","../../../../../../owl-nest/ulule/features/proposals/src/views/Loading/useLoadingProgress.ts","../../../../../../owl-nest/ulule/features/proposals/src/views/Loading/Progress.tsx","../../../../../../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/Loading/index.tsx","../../../../../../owl-nest/ulule/features/proposals/src/views/Refused.tsx","../../../../../../owl-nest/ulule/features/proposals/src/views/StaffDuplicate.tsx","../../../../../../owl-nest/ulule/features/proposals/src/App.tsx","../../../../../../owl-nest/ulule/features/proposals/src/index.tsx"],"sourcesContent":["// https://en.wikipedia.org/wiki/Fisher%E2%80%93Yates_shuffle#The_modern_algorithm\nexport function shuffle(array: T[]): T[] {\n for (let index = array.length - 1; index > 0; index--) {\n const randomIndex = Math.floor(Math.random() * (index + 1))\n ;[array[index], array[randomIndex]] = [array[randomIndex], array[index]]\n }\n\n return array\n}\n\nexport function partition(array: T[], predicate: (item: T) => boolean): [T[], T[]] {\n return array.reduce<[T[], T[]]>(\n (accumulator, item) => {\n if (predicate(item)) {\n accumulator[0].push(item)\n } else {\n accumulator[1].push(item)\n }\n return accumulator\n },\n [[], []],\n )\n}\n","import * as api from '@owl-nest/api-client/latest'\n\nexport function isPending(proposal: api.Proposal): boolean {\n return proposal.status === api.ProposalStatus.PENDING\n}\n\nexport function isInvalid(proposal: api.Proposal): boolean {\n return (\n [api.ProposalAnswerCode.INVALID_COUNTRY, api.ProposalAnswerCode.INVALID_OKPAL] as api.ProposalAnswerCode[]\n ).includes(proposal.answer_code!)\n}\n\nexport function isReady(proposal: api.Proposal): boolean {\n return Boolean(proposal.answer_code) && (isInvalid(proposal) || Boolean(proposal.project) || isPending(proposal))\n}\n","import * as React from 'react'\nimport * as formik from 'formik'\n\nimport { safePusher } from './safePush'\nimport { CATEGORY, EVENT_TYPE, type GenericEvent } from './types'\n\nexport type TrackedFields = {\n [field: string]: {\n value: string\n error: string\n }\n}\n\ntype Setter = {\n setValue: (value: string) => void\n markFilled: () => void\n markEmpty: () => void\n}\n\ntype FieldSetters = {\n [K in keyof TRACKED_FIELDS]: Setter\n}\n\ntype FormEvent = Pick\n\nexport type FormTracker = FieldSetters & {\n pushErrorEvent(event: string, error: formik.FormikErrors): void\n pushFormEvent(formEvent: FormEvent): void\n}\n\nexport function useFormTracking(\n eventCategory: CATEGORY,\n trackedFields: TRACKED_FIELDS,\n gtmContainerId?: string | undefined,\n): FormTracker {\n // We don't keep the state in a state, because we don't need a rerender on\n // state update. We juste need a persistent object we can update.\n const trackingState = React.useRef>({})\n\n const safePush = React.useMemo(() => safePusher(gtmContainerId), [])\n\n // On mount, send the list of value/error for tracked field. On mount the form\n // is necessarly empty and without error\n React.useEffect(() => {\n const [stateVariables, errorVariables] = Object.entries(trackedFields).reduce<\n [Record, Record]\n >(\n (accumulator, [_, { value, error }]) => {\n const [stateVariables, errorVariables] = accumulator\n stateVariables[value] = 'empty'\n errorVariables[error] = 'none'\n return accumulator\n },\n [{}, {}],\n )\n\n // Naked push on datalayer. Not risky since we don't need to use any\n // callback. If ga is blocked and the push is simply a noop.\n window.dataLayer?.push(stateVariables)\n window.dataLayer?.push(errorVariables)\n }, [])\n\n const setters = (Object.keys(trackedFields) as (keyof TRACKED_FIELDS & string)[]).reduce<\n FieldSetters\n >((accumulator, key) => {\n accumulator[key] = {\n setValue: (value: string) => setState(key, value),\n markFilled: () => setState(key, 'filled'),\n markEmpty: () => setState(key, 'empty'),\n }\n\n return accumulator\n }, {} as any)\n\n return { ...setters, pushErrorEvent, pushFormEvent }\n\n function pushErrorEvent(event: string, errors: formik.FormikErrors): void {\n const messages: Record = {}\n for (const [field, message] of Object.entries(errors)) {\n if (message && trackedFields[field]) {\n messages[trackedFields[field].error] = String(message)\n }\n }\n if (Object.keys(messages).length !== 0) {\n window.dataLayer?.push({ event, ...messages })\n }\n }\n\n function pushFormEvent(formEvent: FormEvent): void {\n const event = {\n event: EVENT_TYPE.GENERIC,\n eventCategory,\n ...formEvent,\n } as GenericEvent\n\n if (event.eventCallback && !event.eventTimeout) {\n event.eventTimeout = 500\n }\n\n safePush(event)\n }\n\n function setState(field: string, value: string): void {\n // noop value has not changed\n if (trackingState.current[field] === value) {\n return\n }\n\n trackingState.current[field] = value\n window.dataLayer?.push({\n event: EVENT_TYPE.GENERIC,\n eventCategory,\n [trackedFields[field].value]: value,\n })\n }\n}\n","import * as api from '@owl-nest/api-client/latest'\n\nimport type { ApiResponse } from '@owl-nest/api-client'\n\nexport async function createLink(url: string): Promise> {\n const response = await api.api.post.link({\n body: { url },\n })\n\n return response.next((success) => success.body)\n}\n","import * as jotai from 'jotai'\n\nimport * as api from '@owl-nest/api-client/latest'\nimport * as hooks from '@owl-nest/hooks'\n\ntype CreateProposalConfig = {\n user?: api.AuthenticatedUser\n}\n\nexport async function createProposal(\n payload: api.CreateProposal | api.CreateAnonymousProposal,\n { user }: CreateProposalConfig = {},\n): Promise> {\n const response =\n user === undefined\n ? await api.api.post.proposals({\n body: payload,\n })\n : await api.api.post.userProposals({\n urlParams: { userId: String(user.id) },\n body: payload,\n withToken: true,\n })\n\n return response.next((sucess) => sucess.body)\n}\n\nexport type GetProposalConfig = {\n withToken?: boolean\n extraFields?: EXTRA_FIELDS[]\n}\n\nexport async function getProposal(\n token: string,\n { withToken, extraFields = [] }: GetProposalConfig = {},\n): Promise>> {\n const response = await api.api.get.proposal({\n urlParams: {\n token,\n },\n getParams: {\n extraFields: extraFields.join(','),\n },\n withToken,\n })\n\n return response.next((sucess) => sucess.body as api.Proposal)\n}\n\nexport type UpdateProposalConfig = {\n withToken?: boolean\n extraFields?: EXTRA_FIELDS[]\n}\n\nexport async function updateProposal(\n token: string,\n proposal: api.UpdateProposal,\n { withToken, extraFields = [] }: UpdateProposalConfig = {},\n): Promise>> {\n const response = await api.api.patch.proposal({\n urlParams: {\n token,\n },\n getParams: {\n extraFields: extraFields.join(','),\n },\n body: proposal,\n withToken,\n })\n\n return response.next((sucess) => sucess.body as api.Proposal)\n}\n\nexport async function refuseProposal(token: string) {\n const response = await api.api.post.proposalRefuse({\n urlParams: {\n token,\n },\n body: {\n answer: 'invalid-duplicate',\n answer_code: api.ProposalAnswerCode.INVALID_DUPLICATE,\n },\n })\n\n return response.next((sucess) => sucess.body)\n}\n\nconst SHARED_PROPOSAL_CACHE = jotai.atom>({})\n\nexport function setInitialProposal(\n store: ReturnType,\n proposal: api.Proposal,\n user?: api.AuthenticatedUser,\n extraFields: string[] = [],\n): void {\n store.set(SHARED_PROPOSAL_CACHE, (cache) => {\n cache[JSON.stringify({ token: proposal.token, withToken: user !== undefined, extraFields })] = {\n data: proposal,\n status: hooks.QueryStatus.SUCCESS,\n }\n return cache\n })\n}\n\nexport type UseProposal = {\n response: hooks.Response>\n query: (config?: GetProposalConfig) => Promise\n mutate: (proposal: api.Proposal) => void\n refuse: () => Promise\n update: (\n patch: api.UpdateProposal,\n config?: UpdateProposalConfig,\n ) => Promise>>\n}\n\nexport function useProposal(\n token?: string,\n config?: GetProposalConfig,\n): UseProposal {\n const sharedQuery = hooks.useSharedQuery(getProposal, {\n atom: SHARED_PROPOSAL_CACHE,\n id,\n })\n\n return { response: getResponse(), query, mutate, update, refuse }\n\n function id(token: string, config?: GetProposalConfig): string {\n return JSON.stringify({ token, withToken: config?.withToken, extraFields: config?.extraFields })\n }\n\n async function query(): Promise {\n if (token) {\n return sharedQuery.query(token, config)\n }\n }\n\n async function update(\n patch: Partial,\n config?: UpdateProposalConfig,\n ): Promise>> {\n if (token === undefined) {\n return { status: hooks.QueryStatus.PRISTINE }\n }\n\n // first, update the local cache\n sharedQuery.mutate([token, config], (response) => {\n const currentData = hooks.data(response)\n\n // if currently there is no data (because cache is empty, or there is no\n // data yet) the first mutation does not modify the cache\n if (currentData === undefined) {\n return response\n }\n\n // otherwise we update the data in cache with the patch that will be\n // sent to the api\n return { data: { ...currentData, ...patch }, status: hooks.QueryStatus.SUCCESS }\n })\n\n // then update on the api\n const response = await updateProposal(token, patch, config)\n\n // depending on the response, update the cache\n return response.caseOf>>({\n left: (failure) => {\n sharedQuery.mutate([token, config], { failure, status: hooks.QueryStatus.FAILURE })\n return { failure, status: hooks.QueryStatus.FAILURE }\n },\n right: (success) => {\n sharedQuery.mutate([token, config], { data: success, status: hooks.QueryStatus.SUCCESS })\n return { data: success, status: hooks.QueryStatus.SUCCESS }\n },\n })\n }\n\n async function refuse(): Promise {\n if (token === undefined) {\n return\n }\n\n const response = await refuseProposal(token)\n\n response.caseOf({\n left: async (failure) => {\n // if we get a 403, we tried to refuse a non anonymous proposal. This\n // error is expected, and should just be a noop\n if (failure.status === 403) {\n return\n }\n sharedQuery.mutate([token, config], { failure, status: hooks.QueryStatus.FAILURE })\n },\n right: async (success) => {\n sharedQuery.mutate([token, config], { data: success, status: hooks.QueryStatus.SUCCESS })\n },\n })\n }\n\n function mutate(proposal: api.Proposal): void {\n if (token) {\n return sharedQuery.mutate([token], { data: proposal, status: hooks.QueryStatus.SUCCESS })\n }\n }\n\n function getResponse(): hooks.Response> {\n if (token === undefined) {\n return { status: hooks.QueryStatus.PRISTINE }\n }\n\n const response = sharedQuery.cache[id(token, config)]\n\n if (response === undefined) {\n return { status: hooks.QueryStatus.PRISTINE }\n }\n\n return response as hooks.Response>\n }\n}\n","import * as React from 'react'\nimport { styled, keyframes } from 'next-yak'\n\nimport type { PolymorphicComponent, YakComponentOf } from '@owl-nest/yak/extra-runtime'\nimport * as plume from '@ulule/owl-kit-components/next'\n\nconst GUIDE_URL = 'https://outils.ulule.com/articles/lancer-collecte-ulule-assistant-ia-mcp-public'\nconst MCP_DOCUMENTATION_URL = 'https://developers.ulule.com/docs/mcp/'\n\nexport type AiAssistantSectionProps = { className?: string }\n\n// Copy mirrored for crawlers in src/ulule/templates/ulule/presale/create/home.html\nfunction AiAssistantSectionComponent({ className }: AiAssistantSectionProps) {\n return (\n
\n \n \n }>\n Nouveau\n \n\n \n Lancez votre collecte avec votre <Emphasis>assistant IA</Emphasis>\n \n\n \n Il est désormais possible de lancer une collecte Ulule via un assistant IA comme ChatGPT ou Claude, grâce au{' '}\n MCP Public Ulule.\n \n\n \n Lire le guide\n \n\n \n \n \n Vous êtes développeur ? Lire la{' '}\n \n documentation technique MCP Public Ulule\n \n \n \n \n\n \n \n \n \n \n Assistant IA\n Ulule connecté\n \n Aide-moi à lancer ma collecte sur Ulule 🚀\n \n Avec plaisir ! Parlez-moi de votre projet : que souhaitez-vous financer, et pour quel\n montant ?\n \n \n \n \n \n \n \n \n \n
\n )\n}\n\ntype SparkleSvgProps = { className?: string }\n\nfunction SparkleSvg({ className }: SparkleSvgProps) {\n return (\n \n \n \n )\n}\n\nconst blink = keyframes`\n 0%, 80%, 100% {\n opacity: 0.3;\n }\n 40% {\n opacity: 1;\n }\n`\n\nconst Content = styled.div`\n display: grid;\n gap: 48px;\n margin: 0 auto;\n max-width: 973px; /* HACK: matches the width of the \"Ils & elles l'ont fait\" block above, no DS container token */\n\n @media screen and ${plume.BREAKPOINTS.LAPTOP} {\n align-items: center;\n gap: 80px;\n grid-template-columns: 1fr 380px; /* HACK: fixed width of the decorative chat card, no DS token */\n }\n`\n\nconst Texts = styled.div`\n align-items: flex-start;\n display: flex;\n flex-direction: column;\n`\n\nconst NewTag = styled(plume.Tag)`\n margin-bottom: 16px;\n`\n\nconst Emphasis = styled.em`\n color: ${plume.COLORS.COMPLEMENTARY_YELLOW};\n font-style: normal;\n`\n\nconst Title = styled(plume.styles.heading.L)`\n color: ${plume.COLORS.PRIMARY_GREY_000};\n margin: 0 0 16px;\n` as YakComponentOf>\n\nconst Lead = styled(plume.styles.copy.S.regular)`\n color: ${plume.COLORS.PRIMARY_BLUE_100};\n margin: 0 0 32px;\n max-width: 520px; /* HACK: keeps the lead to two lines on desktop, no DS token */\n\n strong {\n color: ${plume.COLORS.PRIMARY_GREY_000};\n }\n`\n\nconst Developers = styled.div`\n align-items: flex-start;\n border-top: 1px dashed ${plume.COLORS.PRIMARY_BLUE_700};\n display: flex;\n gap: 12px;\n margin-top: 32px;\n padding-top: 24px;\n\n ${plume.styles.copy.S.regular} {\n color: ${plume.COLORS.PRIMARY_BLUE_100};\n }\n\n ${plume.glyphs.Icon} {\n color: ${plume.COLORS.COMPLEMENTARY_YELLOW};\n flex: none;\n }\n`\n\nconst Illustration = styled.div`\n display: none;\n position: relative;\n\n @media screen and ${plume.BREAKPOINTS.TABLET} {\n display: block;\n margin: 0 auto;\n max-width: 380px; /* HACK: fixed width of the decorative chat card, no DS token */\n width: 100%;\n }\n`\n\nconst LargeSparkle = styled(SparkleSvg)`\n fill: ${plume.COLORS.COMPLEMENTARY_YELLOW};\n height: 40px; /* HACK: decoration size and offsets tuned by eye, no DS token */\n position: absolute;\n right: -20px;\n top: -24px;\n width: 40px;\n z-index: ${plume.ZINDEX.ABOVE};\n`\n\nconst SmallSparkle = styled(SparkleSvg)`\n bottom: -12px;\n fill: ${plume.COLORS.PRIMARY_BLUE_500};\n height: 24px; /* HACK: decoration size and offsets tuned by eye, no DS token */\n left: -14px;\n position: absolute;\n width: 24px;\n z-index: ${plume.ZINDEX.ABOVE};\n`\n\nconst Chat = styled.div`\n background-color: ${plume.COLORS.PRIMARY_GREY_000};\n border-radius: 8px;\n box-shadow: ${plume.EFFECTS.SHADOW_5};\n display: flex;\n flex-direction: column;\n gap: 12px;\n padding: 16px 16px 20px;\n transform: rotate(-2deg); /* HACK: decorative tilt, no DS token */\n`\n\nconst ChatHeader = styled.div`\n align-items: center;\n border-bottom: 1px solid ${plume.COLORS.BORDER_PRIMARY};\n display: flex;\n justify-content: space-between;\n padding-bottom: 12px;\n\n ${plume.styles.heading.XXXXXXS} {\n color: ${plume.COLORS.TEXT_TERTIARY};\n text-transform: uppercase;\n }\n`\n\nconst Message = styled(plume.styles.copy.S.regular)`\n border-radius: 8px;\n max-width: 85%; /* HACK: leaves room for the opposite bubble's alignment, no DS token */\n padding: 8px 12px;\n`\n\nconst UserMessage = styled(Message)`\n align-self: flex-end;\n background-color: ${plume.COLORS.PRIMARY_BLUE_500};\n border-bottom-right-radius: 2px; /* HACK: chat bubble tail, no DS token */\n color: ${plume.COLORS.PRIMARY_GREY_000};\n`\n\nconst AssistantMessage = styled(Message)`\n align-self: flex-start;\n background-color: ${plume.COLORS.PRIMARY_SAND_100};\n border-bottom-left-radius: 2px; /* HACK: chat bubble tail, no DS token */\n color: ${plume.COLORS.TEXT_PRIMARY};\n`\n\nconst Typing = styled.div`\n align-self: flex-start;\n background-color: ${plume.COLORS.PRIMARY_SAND_100};\n border-radius: 8px;\n display: flex;\n gap: 4px;\n padding: 12px;\n\n span {\n animation: ${blink} 1.4s infinite ease-in-out;\n background-color: ${plume.COLORS.PRIMARY_SAND_500};\n border-radius: 50%;\n height: 6px; /* HACK: typing indicator dot, no DS token */\n width: 6px;\n }\n\n span:nth-child(2) {\n animation-delay: 0.2s;\n }\n\n span:nth-child(3) {\n animation-delay: 0.4s;\n }\n\n @media (prefers-reduced-motion: reduce) {\n span {\n animation: none;\n }\n }\n`\n\nexport const AiAssistantSection = styled(AiAssistantSectionComponent)`\n background-color: ${plume.COLORS.PRIMARY_BLUE_900};\n overflow: hidden;\n padding: 56px 16px;\n\n @media screen and ${plume.BREAKPOINTS.LAPTOP} {\n padding: 80px 16px;\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 { 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 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'\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 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 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élia, ',\n place: 'Montargis, France',\n project: 'Umaï',\n text: 'Ulule c’est surtout une belle communauté et beaucoup d’entraide, une aide précieuse, quand, en tant que jeune entreprise on ne sait pas toujours par où commencer !',\n },\n {\n img: david,\n linkProject: '/les-miraculeux/',\n name: 'David,',\n place: 'Paris, France',\n project: 'Les Miraculeux',\n text: 'À la seconde où tu cliques sur \"Publier ma page\" ce qui était un projet devient une entreprise. C\\'est un moment incroyable dont je me souviendrai toujours. Ulule a été une véritable rampe de lancement pour les Miraculeux.',\n },\n {\n img: theo,\n linkProject: '/petit-dejeuner-snooze/',\n name: 'Théo,',\n place: 'Paris, FRANCE',\n project: 'Snooze',\n text: \"L'accompagnement quotidien de l'équipe Ulule et son implication ont été primordiaux dans la réussite de notre campagne. Ulule reste aujourd'hui la meilleure chose qui soit arrivée dans la vie de Snooze.\",\n },\n {\n img: lolo,\n linkProject: '/lolo-paris/',\n name: 'Océane & Mélissa,',\n place: 'Bordeaux, FRANCE',\n project: 'Lolo',\n text: \"Avec Ulule, nous avons bénéficié d'un coaching de qualité avant et pendant notre campagne, et nous avons rejoint une communauté de porteurs de projet passionnés !\",\n },\n {\n img: maliki,\n linkProject: '/maliki-officiel/#/projects/online/',\n name: '',\n place: 'Bretagne, France',\n project: 'Maliki',\n text: \"Grâce à Ulule, nous publions nos livres en circuit court et sommes complètement autonomes. Nous pouvons débloquer les fonds nécessaires pour des projets incroyables ! C'est beaucoup de travail, mais l'indépendance 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é sur deux principes : une indépendance en termes de créativité et une proximité avec sa communauté. À ce titre, Ulule est très vite apparu comme étant l'espace idéal pour donner corps à nos projets transmédia.\",\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 { 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 } 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 * 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 { 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é',\n comment:\n \"Ma campagne s'est excellement bien passée. Les équipes Ulule sont réactives et de bon conseils pour mener à 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épassé toutes mes attentes',\n comment:\n \"En deux jours, vous avez la possibilité de suivre une formation complète sur le crowdfunding. J'avais déjà assisté à une conférence dessus mais cela n'a rien à voir avec la formation. Il faut vous lancer dedans à fond pour en tirer de super bénéfices 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é avec un super soutien de toute l'équipe sur tous les plans pour lancer, animer et en faire un succès !\",\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ôtelé P.',\n title: 'Plateforme de crowdfunding remarquable',\n comment:\n \"Plateforme de crowdfunding remarquable ! L'accompagnement est juste parfait, la facilité d'utilisation et de navigation rendent la plateforme très agréable à utiliser ! Bravo à toute l'équipe qui travaille dur pour ce si beau résultat !\",\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ée par l'équipe d'Ulule\",\n comment:\n \"Bien entourée par l'équipe d'Ulule pour construire mon projet, j'ai pu le mener à 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éactivité, clarté : 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énorDm',\n title: 'Super pour soutenir des projets',\n comment:\n \"Plateforme bien conçue 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és et des projets d'aujourd'hui comme ceux de demain. Où comment assister à 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 éthiques',\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çois un mail d'Ulule, vite je l'ouvre ! C'est un petit rayon de soleil. On y decouvre des nouveautés qui vont dans le sens actuel du bien-être pour nous et pour la société. Ulule a toujours de beaux projets dont le financement participatif dépasse largement l'objectif annoncé. Bravo à la jeune équipe.\",\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édicacée et avec Ulule je complète ma collection personnelle avec des oeuvres d'arts magnifiques et pleins de cadeaux sur le thème de mes nouveaux héros ! Sans compter sur les auteurs tous plus sympathiques les uns que les autres... j'en ai rencontré certains sur des salons et festivals ces dernières années. À 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énial',\n comment:\n \"Le principe même d'Ulule est génial et j'adore parcourir les différentes catégories à la recherche d'un beau projet qui me fera de l'oeil. J'ai déjà fait de très belles découvertes ici. Continuez comme ça !\",\n rating: 5,\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 } 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, 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 { 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 } 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'\nimport { useDramaticallyInefficientGlobalCss, css } from '@owl-nest/yak/extra-runtime'\n\nimport * as plume from '@ulule/owl-kit-components/next'\n\nimport { AiAssistantSection } from './AiAssistantSection'\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 )\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 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 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 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 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 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 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’t know'), content: t('I don’t 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’t have a minimum'),\n content: t('I don’t 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’t know'), content: t('I don’t know') }\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 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’m 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 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'\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 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 * 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 } 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 { 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'\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 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'\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 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 { 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 { 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","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 * 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"],"mappings":"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"}