-
Notifications
You must be signed in to change notification settings - Fork 0
/
component---src-pages-index-jsx-54b2f20435f45214cceb.js.map
1 lines (1 loc) · 213 KB
/
component---src-pages-index-jsx-54b2f20435f45214cceb.js.map
1
{"version":3,"sources":["webpack:///./node_modules/@stripe/stripe-js/dist/stripe.esm.js","webpack:///./src/components/Footer/OrgFooter.jsx","webpack:///./src/components/Header/OrgHeader.jsx","webpack:///./src/layouts/org/index.jsx","webpack:///./src/utils/constants.js","webpack:///./src/components/Suggestions/Suggestion.jsx","webpack:///./src/views/Feedback.jsx","webpack:///./src/utils/plans.js","webpack:///./src/views/Home.jsx","webpack:///./src/views/Settings.jsx","webpack:///./src/views/Team.jsx","webpack:///./src/components/Suggestions/New.jsx","webpack:///./src/components/Suggestions/Overview.jsx","webpack:///./src/views/Suggestions.jsx","webpack:///./src/pages/index.jsx","webpack:///./node_modules/@stripe/react-stripe-js/dist/react-stripe.umd.js","webpack:///./src/components/Input.jsx","webpack:///./src/components/Dialog/ConfirmDialog.jsx","webpack:///./src/utils/permissions.js","webpack:///./src/images/avatar-default.png"],"names":["_toConsumableArray","arr","Array","isArray","i","arr2","length","_arrayWithoutHoles","iter","Symbol","iterator","Object","prototype","toString","call","from","_iterableToArray","TypeError","_nonIterableSpread","V3_URL","V3_URL_REGEX","EXISTING_SCRIPT_MESSAGE","stripePromise","loadScript","params","Promise","resolve","reject","window","Stripe","console","warn","script","scripts","document","querySelectorAll","concat","test","src","findScript","queryString","advancedFraudSignals","createElement","headOrBody","head","body","Error","appendChild","injectScript","addEventListener","error","initStripe","maybeStripe","args","stripe","apply","_registerWrapper","name","version","registerWrapper","stripePromise$1","then","loadCalled","err","AbstractFooter","css","isActive","path","isBrowser","location","pathname","endsWith","slice","startsWith","HeaderLink","children","to","color","padding","code","icon","permissions","AbstractHeader","alt","height","width","Logo","User","Permission","OWNER","ADMIN","Container","style","minHeight","display","flexDirection","justifyContent","alignItems","connect","state","me","global","org","dispatch","updateMe","updateOrg","title","description","image","React","useState","undefined","success","setSuccess","useEffect","profile","sessions","token","split","filter","fetch","process","headers","Accept","Authorization","res","ok","json","statusText","catch","e","Helmet","visible","size","Status","id","details","author","createdAt","closedAt","upvotes","downvotes","upvoted","downvoted","handleStatus","handleVote","handleDelete","authenticated","toLocaleString","marginBottom","fontSize","fontWeight","textTransform","map","item","key","marginRight","textAlign","transition","cursor","borderRadius","backgroundColor","onClick","marginLeft","github","avatarDefault","processing","setProcessing","feedback","setFeedback","confirmMessage","setConfirmMessage","_id","Suggestion","includes","user","Date","status","method","JSON","stringify","updatedFeedback","vote","Loader","ConfirmDialog","message","okHandler","navigate","cancelHandler","plans","price","available","benefits","unlimited","unavailable","prev","Plan","plan","minWidth","margin","boxShadow","opacity","benefit","Bubble","top","left","position","Math","random","transform","DummyFeedback","closed","DummyApp","bubble","scroll","behavior","PlanSelector","planId","portalMessage","handleClick","find","ActionButton","disabled","animation","keyframes","useStripe","elements","useElements","codeSuccess","setCodeSuccess","codeMessage","setCodeMessage","orgSuccess","setOrgSuccess","orgMessage","setOrgMessage","customerSuccess","setCustomerSuccess","customerMessage","setCustomerMessage","paymentSuccess","setPaymentSuccess","paymentMessage","setPaymentMessage","discordWebhookSuccess","setDiscordWebhookSuccess","discordWebhookMessage","setDiscordWebhookMessage","orgCode","setOrgCode","setName","setIcon","email","setEmail","address","setAddress","discordWebhookID","setDiscordWebhookID","discordWebhookToken","setDiscordWebhookToken","updateAddress","value","manageSubscription","stripeCustomerId","customer","invoice_settings","default_payment_method","priceId","session","href","url","notifications","discord","Input","pretext","host","placeholder","setValue","maxLength","pattern","required","employee","amount","orgDoc","enabled","toggleHandler","subscriptions","data","line1","city","postal_code","country","options","countries","selectKey","selectValue","base","fontFamily","iconColor","invalid","createPaymentMethod","type","card","getElement","CardElement","paymentMethodResult","paymentMethodId","paymentMethod","addMemberSuccess","setAddMemberSuccess","addMemberMessage","setAddMemberMessage","members","setMembers","memberEmail","setMemberEmail","log","member","memberId","m","onCreate","setTitle","setDetails","onChange","target","rows","nextPage","setNextPage","more","setMore","loadMore","newFeedback","updateVote","f","index","splice","New","onMouseOver","onFocus","_len","arguments","_key","loadStripe","Home","Suggestions","Team","Settings","exports","_typeof","obj","constructor","_objectWithoutProperties","source","excluded","sourceKeys","keys","indexOf","_objectWithoutPropertiesLoose","getOwnPropertySymbols","sourceSymbolKeys","propertyIsEnumerable","_slicedToArray","_arrayWithHoles","_arr","_n","_d","_e","_s","_i","next","done","push","_iterableToArrayLimit","_nonIterableRest","emptyFunction","emptyFunctionWithReset","hasOwnProperty","resetWarningCache","propTypes","fn","module","createCommonjsModule","shim","props","propName","componentName","propFullName","secret","getShim","isRequired","ReactPropTypes","array","bool","func","number","object","string","symbol","any","arrayOf","element","elementType","instanceOf","node","objectOf","oneOf","oneOfType","shape","exact","checkPropTypes","PropTypes","factoryWithThrowingShims","isUnknownObject","raw","isEqual","right","leftArray","leftPlainObject","leftKeys","rightKeys","keySet","allKeys","l","r","every","usePrevious","ref","useRef","current","validateStripe","createToken","confirmCardPayment","parseStripeProp","isPromise","tag","ElementsContext","createContext","displayName","useElementsContextWithUseCase","useCaseMessage","ctx","useCase","parseElementsContext","useContext","ElementsConsumer","_ref2","useCallbackReference","cb","extractUpdateableOptions","paymentRequest","noop","createElementComponent","isServer","str","charAt","toUpperCase","Element","className","_ref","_ref$options","_ref$onBlur","onBlur","_ref$onFocus","_ref$onReady","onReady","_ref$onChange","_ref$onEscape","onEscape","_ref$onClick","elementRef","domNode","callOnReady","callOnBlur","callOnFocus","callOnClick","callOnChange","callOnEscape","useLayoutEffect","create","mount","on","prevOptions","updateableOptions","update","destroy","__elementType","AuBankAccountElement","CardNumberElement","CardExpiryElement","CardCvcElement","FpxBankElement","IbanElement","IdealBankElement","PaymentRequestButtonElement","Elements","rawStripeProp","_final","isMounted","parsed","useMemo","_React$useState2","setContext","prevStripe","anyStripe","Provider","defineProperty","factory","Toggle","checked","BaseDropdown","rest","option","pointerEvents","AbstractInput","Text","URL","Email","Dropdown","Button","text","handler","primary","okText","cancelText","overlay","dialog","MEMBER","AUTHOR"],"mappings":"mjJAAA,SAASA,EAAmBC,GAC1B,OAGF,SAA4BA,GAC1B,GAAIC,MAAMC,QAAQF,GAAM,CACtB,IAAK,IAAIG,EAAI,EAAGC,EAAO,IAAIH,MAAMD,EAAIK,QAASF,EAAIH,EAAIK,OAAQF,IAC5DC,EAAKD,GAAKH,EAAIG,GAGhB,OAAOC,GATFE,CAAmBN,IAa5B,SAA0BO,GACxB,GAAIC,OAAOC,YAAYC,OAAOH,IAAkD,uBAAzCG,OAAOC,UAAUC,SAASC,KAAKN,GAAgC,OAAON,MAAMa,KAAKP,GAdtFQ,CAAiBf,IAiBrD,WACE,MAAM,IAAIgB,UAAU,mDAlBuCC,GAqB7D,IAAIC,EAAS,2BACTC,EAAe,4CACfC,EAA0B,mJA2C1BC,EAAgB,KAEhBC,EAAa,SAAoBC,GAEnC,OAAsB,OAAlBF,EACKA,EAGTA,EAAgB,IAAIG,SAAQ,SAAUC,EAASC,GAC7C,GAAsB,oBAAXC,OAWX,GAJIA,OAAOC,QAAUL,GACnBM,QAAQC,KAAKV,GAGXO,OAAOC,OACTH,EAAQE,OAAOC,aAIjB,IACE,IAAIG,EAnEO,WAGf,IAFA,IAAIC,EAAUC,SAASC,iBAAiB,gBAAiBC,OAAOjB,EAAQ,OAE/Df,EAAI,EAAGA,EAAI6B,EAAQ3B,OAAQF,IAAK,CACvC,IAAI4B,EAASC,EAAQ7B,GAErB,GAAKgB,EAAaiB,KAAKL,EAAOM,KAI9B,OAAON,EAGT,OAAO,KAsDUO,GAETP,GAAUR,EACZM,QAAQC,KAAKV,GACHW,IACVA,EAxDW,SAAsBR,GACvC,IAAIgB,EAAchB,IAAWA,EAAOiB,qBAAuB,8BAAgC,GACvFT,EAASE,SAASQ,cAAc,UACpCV,EAAOM,IAAM,GAAGF,OAAOjB,GAAQiB,OAAOI,GACtC,IAAIG,EAAaT,SAASU,MAAQV,SAASW,KAE3C,IAAKF,EACH,MAAM,IAAIG,MAAM,+EAIlB,OADAH,EAAWI,YAAYf,GAChBA,EA6CQgB,CAAaxB,IAGxBQ,EAAOiB,iBAAiB,QAAQ,WAC1BrB,OAAOC,OACTH,EAAQE,OAAOC,QAEfF,EAAO,IAAImB,MAAM,+BAGrBd,EAAOiB,iBAAiB,SAAS,WAC/BtB,EAAO,IAAImB,MAAM,gCAEnB,MAAOI,GAEP,YADAvB,EAAOuB,QAjCPxB,EAAQ,UAwCVyB,EAAa,SAAoBC,EAAaC,GAChD,GAAoB,OAAhBD,EACF,OAAO,KAGT,IAAIE,EAASF,EAAYG,WAAM,EAAQvD,EAAmBqD,IAE1D,OAtEoB,SAAyBC,GACxCA,GAAWA,EAAOE,kBAIvBF,EAAOE,iBAAiB,CACtBC,KAAM,YACNC,QAAS,UA8DXC,CAAgBL,GACTA,GAILM,EAAkBnC,QAAQC,UAAUmC,MAAK,WAC3C,OAAOtC,EAAW,SAEhBuC,GAAa,EACjBF,EAAuB,OAAE,SAAUG,GAC5BD,GACHhC,QAAQC,KAAKgC,MAIjB,I,qHCxIe,oBACX,YAACC,EAAA,EAAD,KACI,uBACI,sCADJ,IAGI,oBAAMC,IAAG,GAAT,W,wECANC,EAAW,SAACC,GACd,GAAKC,cAAL,CACA,IAAMC,EAAWzC,OAAOyC,SAASC,SAASC,SAAS,KAAO3C,OAAOyC,SAASC,SAASE,MAAM,GAAI,GAAK5C,OAAOyC,SAASC,SAElH,OADAH,EAAOA,EAAKI,SAAS,KAAOJ,EAAKK,MAAM,GAAI,GAAKL,EACzCE,EAASI,WAAWN,KAGzBO,EAAa,SAAC,GAAD,IAAGC,EAAH,EAAGA,SAAUC,EAAb,EAAaA,GAAb,OACf,YAAC,IAAD,CACIA,GAAKA,EACLX,IAAG,YAAE,CACDY,MAAOX,EAASU,GAAM,eAAiB,OACvCE,QAAS,MAGXH,I,2hBAIK,kBAAGI,EAAH,EAAGA,KAAMtB,EAAT,EAASA,KAAMuB,EAAf,EAAeA,KAAMC,EAArB,EAAqBA,YAArB,OACX,8BACI,YAACC,EAAA,EAAD,KAEQH,EACI,YAAC,IAAD,CACIH,GAAK,IAAMG,EACXd,IAAG,GAMCe,EACI,mBACIG,IAAI,OACJ7C,IAAM0C,EACNI,OAAS,GACTC,MAAQ,GACRpB,IAAG,IAKP,KAGJR,EACI,mBAAKQ,IAAG,GAGFR,GAEN,MAGZ,YAAC,IAAD,CACImB,GAAG,IACHX,IAAG,GAOH,YAACqB,EAAA,EAAD,OAIZ,YAACC,EAAA,EAAD,OAIAR,EACI,mBAAKd,IAAG,GAGJ,mBAAKA,IAAG,GAaJ,YAAC,EAAD,CAAYW,GAAK,IAAMG,EAAO,aAA9B,YAIIE,EACI,YAAC,EAAD,CAAYL,GAAK,IAAMG,EAAO,SAA9B,QAGA,KAGJE,IAAgBO,IAAWC,OAASR,IAAgBO,IAAWE,MAC3D,YAAC,EAAD,CAAYd,GAAK,IAAMG,EAAO,aAA9B,YAGA,OAIhB,O,oCCvGVY,G,UAAY,SAAC,GAAD,IAAGhB,EAAH,EAAGA,SAAH,OACd,mBAAKiB,MAAO,CACRC,UAAW,OACXC,QAAS,OACTC,cAAe,SACfC,eAAgB,SAChBC,WAAY,WAEVtB,K,qVAmHKuB,eACX,SAAAC,GAAK,MAAK,CAAEC,GAAID,EAAME,OAAOD,GAAIE,IAAKH,EAAME,OAAOC,QACnD,SAAAC,GAAQ,MAAK,CAAEC,SAAU,SAAAJ,GAAE,OAAIG,EAASC,YAASJ,KAAMK,UAAW,SAAAH,GAAG,OAAIC,EAASE,YAAUH,QAFjFJ,EA/GG,SAAC,GAA2E,IAAzEvB,EAAwE,EAAxEA,SAAUyB,EAA8D,EAA9DA,GAAII,EAA0D,EAA1DA,SAAUF,EAAgD,EAAhDA,IAAKG,EAA2C,EAA3CA,UAAWC,EAAgC,EAAhCA,MAAOC,EAAyB,EAAzBA,YAAaC,EAAY,EAAZA,MAAY,EACzDC,IAAMC,cAASC,GAAvCC,EADiF,KACxEC,EADwE,KAyCzF,OAtCAJ,IAAMK,WAAU,WACZ,IAAMC,EAAUC,IAAyBA,KAUzC,GARIhB,GAAMA,EAAGiB,OAELF,GAAWA,EAAQE,OACnBb,EAASW,KAKbA,IAAWA,EAAQE,OAAWjB,GAAMA,EAAGiB,QAEtCjD,cAAL,CAEA,IAAMW,EAAOnD,OAAOyC,SAASC,SAASgD,MAAM,KAAKC,QAAO,SAAApD,GAAI,OAAIA,KAAM,GAkBtE,OAhBAvC,OAAO4F,MAAMC,0CAAsC1C,EAAM,CACrD2C,QAAS,CACLC,OAAQ,mBACRC,cAAexB,EAAGiB,SAEvBxD,MAAK,SAAAgE,GACJ,GAAIA,EAAIC,GAAI,OAAOD,EAAIE,OACvB,MAAM,IAAIjF,MAAM+E,EAAIG,eACrBnE,MAAK,SAAAyC,GACJW,GAAW,GACXR,EAAUH,MACX2B,OAAM,SAACC,GACNpG,QAAQoB,MAAMgF,GACdjB,GAAW,MAGR,WACHR,EAAU,QAEf,CAAEL,EAAII,EAAUC,IAGf,uBACI,YAAC0B,EAAA,EAAD,CACIzB,MAAQA,GAASJ,EAAI7C,KACrBkD,YAAcA,EACdC,MAAQA,GAASN,EAAItB,OAEzB,YAAC,EAAD,CACID,KAAOuB,EAAIvB,KACXtB,KAAO6C,EAAI7C,KACXuB,KAAOsB,EAAItB,KACXC,YAAcqB,EAAIrB,eAGN,IAAZ+B,EACIV,EAAIrB,aAAeqB,EAAI8B,QACnB,oBACInE,IAAG,GASDU,GAEN,YAAC,EAAD,KACI,wDACA,mBAAKV,IAAG,GAAR,mCACA,mBAAKA,IAAG,GAGJ,YAAC,IAAD,CAAMW,GAAKR,cAAc,mBAAqBxC,OAAOyC,SAASC,SAAW,cACrE,yDAMJ,IAAZ0C,EACI,YAAC,EAAD,KACI,qDACA,mBAAK/C,IAAG,GAGJ,YAAC,IAAD,CAAMW,GAAG,KACL,yDAMZ,YAAC,EAAD,KACI,uBACI,YAAC,IAAD,CAAayD,KAAO,MAExB,mBAAKpE,IAAG,GAAR,mBAOhB,YAAC,EAAD,U,gDC7HCqE,EACH,EADGA,GAEF,E,+9CCDI,eAAqK,EAAlKC,GAAmK,IAA/J7B,EAA8J,EAA9JA,MAAO8B,EAAuJ,EAAvJA,QAASC,EAA8I,EAA9IA,OAAQC,EAAsI,EAAtIA,UAAWC,EAA2H,EAA3HA,SAAUC,EAAiH,EAAjHA,QAASC,EAAwG,EAAxGA,UAAWC,EAA6F,EAA7FA,QAASC,EAAoF,EAApFA,UAAW9D,EAAyE,EAAzEA,YAAa+D,EAA4D,EAA5DA,aAAcC,EAA8C,EAA9CA,WAAYC,EAAkC,EAAlCA,aAAcC,EAAoB,EAApBA,cAC5J,OACI,uBACI,mBACIlF,IAAG,IAWH,mBACIA,IAAG,IAKDyC,GAGN,mBACIA,MAAQiC,EAAW,aAAeA,EAASS,iBAAmB,KAC9DnF,IAAG,YAAE,CACD6B,QAAS,OACTuD,aAAc,GACdC,SAAU,OACVC,WAAY,IACZ1E,MAAO8D,EAAW,aAAe,cACjCa,cAAe,eAGjBb,EAAW,SAAW,QAIxBH,GAAWA,EAAQlI,OACf,mBACI2D,IAAG,IAMCuE,EAAQlB,MAAM,MAAMmC,KAAI,SAACC,EAAMC,GAAP,OACpB,oBAAMA,IAAMA,GACND,EACF,4BAKhB,MAIZ,mBAAKzF,IAAG,IAOJ,mBAAKA,IAAG,IAIJ,mBACIA,IAAG,YAAE,CACDa,QAAS,EACT8E,YAAa,EACb9D,QAAS,OACTG,WAAY,SACZD,eAAgB,SAChB6D,UAAW,SACXhF,MAAOiE,EAAU,eAAiB,UAClCgB,WAAY,gHACZC,OAAQZ,EAAgB,UAAY,cACpC,SAAU,CACNa,aAAc,EACdC,gBAAiB,0BACjBpF,MAAO,kBAGfqF,QAAU,kBAAMf,EAA0BF,EAAVH,EAAqB,EAAgB,GAAK,OAE1E,YAAC,IAAD,OAEJ,mBAAK7E,IAAG,KAGD2E,GAAW,IAAMC,GAAa,IAErC,mBACI5E,IAAG,YAAE,CACDa,QAAS,EACTqF,WAAY,EACZrE,QAAS,OACTG,WAAY,SACZD,eAAgB,SAChB6D,UAAW,SACXhF,MAAOkE,EAAY,aAAe,UAClCe,WAAY,gHACZC,OAAQZ,EAAgB,UAAY,cACpC,SAAU,CACNa,aAAc,EACdC,gBAAiB,0BACjBpF,MAAO,gBAGfqF,QAAU,kBAAMf,EAA4BF,EAAZF,EAAuB,GAAiB,GAAK,OAE7E,YAAC,IAAD,QAKJ9D,EACI,mBAAKhB,IAAG,IAIJ,mBACIA,IAAG,YAAE,CACDa,QAAS,EACTgB,QAAS,OACTG,WAAY,SACZ8D,OAAQ,UACRD,WAAY,gHACZ,SAAU,CACNE,aAAc,EACdC,gBAAiB,0BACjBpF,MAAO8D,EAAW,eAAiB,mBAG3CuB,QAAU,kBAAiBlB,EAAXL,EAAwBL,EAA4BA,MAGhEK,EACI,YAAC,IAAD,MACA,YAAC,IAAD,MAER,oBAAM1E,IAAG,IAED0E,EACI,SACA,UAKhB,mBACI1E,IAAG,GAYHiG,QAAUhB,GAEV,YAAC,IAAD,MACA,oBAAMjF,IAAG,IAAT,YAKR,MAIZ,mBAAKA,IAAG,IAKJ,mBAAKA,IAAG,IAIJ,mBACIkB,IAAI,SACJ7C,IACImG,GAAUA,EAAO2B,OACb,4CAA8C3B,EAAO2B,OAAS,YAC9DC,KAERhF,MAAQ,GACRD,OAAS,GACTnB,IAAG,KAKP,mBAAKA,IAAG,IAIJ,mBAAKA,IAAG,IAAR,aAMA,uBACMwE,EAASA,EAAOhF,KAAO,eAMrC,mBAAKQ,IAAG,IAKJ,mBAAKA,IAAG,IAAR,aAMA,uBAAOyE,EAAUU,sB,uLC7DtBlD,gBACX,SAAAC,GAAK,MAAK,CAAEC,GAAID,EAAME,OAAOD,GAAIE,IAAKH,EAAME,OAAOC,OACnD,KAFWJ,EAvKE,SAAC,GAAqB,IAAnBqC,EAAkB,EAAlBA,GAAInC,EAAc,EAAdA,GAAIE,EAAU,EAAVA,IAAU,EACIO,IAAMC,UAAS,GAA7CwD,EAD0B,KACdC,EADc,OAEF1D,IAAMC,cAASC,GAAvCC,EAF0B,KAEjBC,EAFiB,OAIAJ,IAAMC,SAAS,IAAzC0D,EAJ0B,KAIhBC,EAJgB,OAKY5D,IAAMC,SAAS,IAArD4D,EAL0B,KAKVC,EALU,KAOlC9D,IAAMK,WAAU,WACPZ,GAAQA,EAAIsE,KAEZxG,eAELxC,OAAO4F,MAAMC,qCAAiCnB,EAAIsE,IAAM,aAAerC,EAAI,CACvEb,QAAS,CACLC,OAAQ,mBACRC,cAAexB,EAAGiB,SAEvBxD,MAAK,SAAAgE,GACJ,GAAIA,EAAIC,GAAI,OAAOD,EAAIE,OACvB,MAAM,IAAIjF,MAAM+E,EAAIG,eACrBnE,MAAK,SAAA2G,GACJvD,GAAW,GACXwD,EAAYD,MACbvC,OAAM,SAACC,GACNpG,QAAQoB,MAAMgF,GACdjB,GAAW,QAEhB,CAAEsB,EAAInC,EAAGiB,MAAOf,IA4FnB,OACI,mBAAKrC,IAAG,IAKJ,YAACkE,EAAA,EAAD,CACIzB,MAAQ8D,EAAS9D,MAAQ,cACzBC,YAAc6D,EAAShC,WAGX,IAAZxB,EACI,YAAC6D,GAAD,CACIlB,IAAMa,EAASI,IACfrC,GAAKiC,EAASI,IACdlE,MAAQ8D,EAAS9D,MACjB8B,QAAUgC,EAAShC,QACnBI,QAAU4B,EAAS5B,SAAW4B,EAAS5B,mBAAmB1I,OAASsK,EAAS5B,QAAQtI,OACpFuI,UAAY2B,EAAS3B,WAAa2B,EAAS3B,qBAAqB3I,OAASsK,EAAS3B,UAAUvI,OAC5FwI,QAAU1C,GAAMA,EAAGmC,IAAMiC,EAAS5B,SAAW4B,EAAS5B,mBAAmB1I,OAASsK,EAAS5B,QAAQkC,SAAS1E,EAAGmC,GAAG1H,YAClHkI,UAAY3C,GAAMA,EAAGmC,IAAMiC,EAAS3B,WAAa2B,EAAS3B,qBAAqB3I,OAASsK,EAAS3B,UAAUiC,SAAS1E,EAAGmC,GAAG1H,YAC1H4H,OAAS+B,EAASO,KAClBrC,UAAY,IAAIsC,KAAKR,EAAS9B,WAC9BC,SAAW6B,EAAS7B,SAAW,IAAIqC,KAAKR,EAAS7B,UAAY,KAC7D1D,YAAcuF,EAASvF,YACvB+D,aAnHC,SAACiC,GACdX,IAEJC,GAAc,GAETnG,eAELxC,OAAO4F,MAAMC,qCAAiCnB,EAAIsE,IAAM,aAAerC,EAAK,UAAW,CACnF2C,OAAQ,QACRxD,QAAS,CACL,OAAU,mBACV,eAAgB,mBAChB,cAAiBtB,EAAGiB,OAExBxE,KAAMsI,KAAKC,UAAU,CACjBH,aAELpH,MAAK,SAAAgE,GACJ,GAAIA,EAAIC,GAAI,OAAOD,EAAIE,OACvB,MAAM,IAAIjF,MAAM+E,EAAIG,eACrBnE,MAAK,SAAAwH,GACJZ,EAAY,OAAD,UACJD,EACAa,IAEPd,GAAc,MACftC,OAAM,SAACC,GACNpG,QAAQoB,MAAMgF,GACdqC,GAAc,QAwFFrB,aAAe,kBAAMyB,EAAkB,yEACvC1B,WArFD,SAACqC,GACZhB,IAEJC,GAAc,GAETnG,eAELxC,OAAO4F,MAAMC,qCAAiCnB,EAAIsE,IAAM,aAAerC,EAAK,kBAAmB,CAC3F2C,OAAQ,QACRxD,QAAS,CACL,OAAU,mBACV,eAAgB,mBAChB,cAAiBtB,EAAGiB,OAExBxE,KAAMsI,KAAKC,UAAU,CACjBE,WAELzH,MAAK,SAAAgE,GACJ,GAAIA,EAAIC,GAAI,OAAOD,EAAIE,OACvB,MAAM,IAAIjF,MAAM+E,EAAIG,eACrBnE,MAAK,SAAAwH,GACJZ,EAAY,OAAD,UACJD,EACAa,IAEPd,GAAc,MACftC,OAAM,SAACC,GACNpG,QAAQoB,MAAMgF,GACdqC,GAAc,QA0DFpB,cAAgB/C,GAAMA,EAAGiB,SAEjB,IAAZL,EACI,mBAAK/C,IAAG,IAAR,+DACA,mBAAKA,IAAG,IAA2B,YAACsH,EAAA,EAAD,OAG3Cb,EACI,YAACc,EAAA,EAAD,CACI9E,MAAM,kBACN+E,QAAUf,EACVgB,UAjEG,WACfpB,IAEJC,GAAc,GACdI,EAAkB,IAEbvG,eAELxC,OAAO4F,MAAMC,qCAAiCnB,EAAIsE,IAAM,aAAerC,EAAI,CACvE2C,OAAQ,SACRxD,QAAS,CACL,OAAU,mBACV,cAAiBtB,EAAGiB,SAEzBxD,MAAK,SAAAgE,GACJ,GAAIA,EAAIC,GAAI,OAAOD,EAAIE,OACvB,MAAM,IAAIjF,MAAM+E,EAAIG,eACrBnE,MAAK,WACJ0G,GAAc,GACdoB,YAAS,IAAMrF,EAAIvB,KAAO,gBAC3BkD,OAAM,SAACC,GACNpG,QAAQoB,MAAMgF,GACdqC,GAAc,QA4CFqB,cAAgB,kBAAMjB,EAAkB,OAE5C,S,aC3KdkB,GAAQ,CACV,CACItD,GAAId,+BAAoBhD,WAAW,oBAAsB,iCAAmC,iCAC5FhB,KAAM,OACNkD,YAAa,iEACbmF,MAAO,EACPC,WAAW,EACXC,SAAU,CACNC,UAAW,GACXF,UAAW,CACP,gBACA,CAAE,qBAAsB,wCACxB,CAAE,2BAA4B,oEAC9B,qBAEJG,YAAa,KAGrB,CACI3D,GAAId,+BAAoBhD,WAAW,oBAAsB,iCAAmC,iCAC5FhB,KAAM,QACNkD,YAAa,4DACbmF,MAAO,EACPC,WAAW,EACXC,SAAU,CACNG,KAAM,OACNF,UAAW,CACP,mBAEJF,UAAW,CACP,kBACA,CAAE,oBAAqB,iEACvB,CAAE,sBAAuB,qEACzB,CAAE,qBAAsB,mEACxB,CAAE,2BAA4B,iDAElCG,YAAa,KAGrB,CACI3D,GAAId,+BAAoBhD,WAAW,oBAAsB,iCAAmC,iCAC5FhB,KAAM,WACNkD,YAAa,iEACbmF,MAAO,GACPC,WAAW,EACXC,SAAU,CACNG,KAAM,QACNF,UAAW,GAEXF,UAAW,CACP,kBACA,kBACA,sBACA,qBACA,oBAEJG,YAAa,KAGrB,CACI3D,GAAId,+BAAoBhD,WAAW,oBAAsB,iCAAmC,iCAC5FhB,KAAM,UACNkD,YAAa,oEACbmF,MAAO,GACPC,WAAW,EACXC,SAAU,CACNG,KAAM,WACNF,UAAW,GAEXF,UAAW,CACP,mBACA,mBACA,sBACA,uBACA,iBAEJG,YAAa,M,svBCpEnBE,GAAO,SAAC,GAAD,IAAMC,EAAN,2BACT,mBAAKpI,IAAG,YAAE,CACNoB,MAAO,IACPiH,SAAU,IACVC,OAAQ,GACRzG,QAAS,OACTC,cAAe,SACfC,eAAgB,gBAChBgE,aAAc,EACdC,gBAAiB,0BACjBuC,UAAWH,EAAKN,UAAY,4BAA8B,6BAE1D,mBAAK9H,IAAG,YAAE,CACNmB,OAAQ,IACRN,QAAS,GACTmF,gBAAiB,0BACjBD,aAAc,EACdyC,QAASJ,EAAKN,UAAY,EAAI,MAE9B,mBAAK9H,IAAG,IAIFoI,EAAK5I,MAEX,mBAAKQ,IAAG,IAIFoI,EAAK1F,cAIf,mBAAK1C,IAAG,YAAE,CACNa,QAAS,GACTwE,SAAU,OACVmD,QAASJ,EAAKN,UAAY,EAAI,MAG1BM,EAAKL,SAASG,KACV,mBAAKlI,IAAG,IAKJ,YAAC,IAAD,CAAaA,IAAG,KAChB,wCAAqBoI,EAAKL,SAASG,OAEvC,KAGJE,EAAKL,SAASC,UACVI,EAAKL,SAASC,UAAUxC,KAAI,SAACiD,EAAStM,GAAV,OACxB,mBAAKuJ,IAAMvJ,EAAIsG,OAASgG,aAAmBxM,MAAQwM,EAAQ,GAAKA,GAASjI,WAAW,KAAO,cAAgB,GAAKR,IAAG,YAAE,CACjH6B,QAAS,OACTuD,aAAc,EACdQ,UAAW,OACX4C,SAAUC,aAAmBxM,MAAQwM,EAAQ,GAAKA,GAASjI,WAAW,KAAO,GAAK,KAElF,YAAC,IAAD,CAAeR,IAAG,KAClB,wBAAQyI,aAAmBxM,MAAQwM,EAAQ,GAAKA,GAASjI,WAAW,MAAQiI,aAAmBxM,MAAQwM,EAAQ,GAAKA,GAASlI,MAAM,GAAMkI,aAAmBxM,MAAQwM,EAAQ,GAAKA,OAGzL,KAGJL,EAAKL,SAASD,UACVM,EAAKL,SAASD,UAAUtC,KAAI,SAACiD,EAAStM,GAAV,OACxB,mBAAKuJ,IAAMvJ,EAAIsG,OAASgG,aAAmBxM,MAAQwM,EAAQ,GAAKA,GAASjI,WAAW,KAAO,cAAgB,GAAKR,IAAG,YAAE,CACjH6B,QAAS,OACTuD,aAAc,EACdQ,UAAW,OACX4C,SAAUC,aAAmBxM,MAAQwM,EAAQ,GAAKA,GAASjI,WAAW,KAAO,GAAK,KAElF,YAAC,IAAD,CAASR,IAAG,KACZ,wBACOyI,aAAmBxM,MAAQwM,EAAQ,GAAKA,GAASjI,WAAW,MAAQiI,aAAmBxM,MAAQwM,EAAQ,GAAKA,GAASlI,MAAM,GAAMkI,aAAmBxM,MAAQwM,EAAQ,GAAKA,EAExKA,aAAmBxM,OAASwM,EAAQpM,OAAS,EACzC,YAAC,IAAD,CAA+B2D,IAAG,GAA2CyC,MAAQgG,EAAQ,KAC7F,UAKpB,KAGJL,EAAKL,SAASE,YACVG,EAAKL,SAASE,YAAYzC,KAAI,SAACiD,EAAStM,GAAV,OAC1B,mBAAKuJ,IAAMvJ,EAAIsG,OAASgG,aAAmBxM,MAAQwM,EAAQ,GAAKA,GAASjI,WAAW,KAAO,cAAgB,GAAKR,IAAG,YAAE,CACjH6B,QAAS,OACTuD,aAAc,EACdQ,UAAW,OACX4C,SAAUC,aAAmBxM,MAAQwM,EAAQ,GAAKA,GAASjI,WAAW,KAAO,GAAK,KAElF,YAAC,IAAD,CAAKR,IAAG,KACR,wBAAQyI,aAAmBxM,MAAQwM,EAAQ,GAAKA,GAASjI,WAAW,MAAQiI,aAAmBxM,MAAQwM,EAAQ,GAAKA,GAASlI,MAAM,GAAMkI,aAAmBxM,MAAQwM,EAAQ,GAAKA,OAGzL,MAIZ,mBAAKzI,IAAG,IAUAoI,EAAKN,UACc,IAAfM,EAAKP,MACD,OACA,IAAMO,EAAKP,MAAQ,SACvB,iBAMda,GAAS,SAAC,GAAD,QAAGtE,YAAH,MAAU,GAAV,MAAcuE,WAAd,MAAoB,EAApB,MAAuBC,YAAvB,MAA8B,EAA9B,SACX,mBAAK5I,IAAG,YAAE,CACN2I,MACAC,OACAC,SAAU,WACVhI,QAASuD,EACT2B,aAAc+C,KAAKC,SAAW,GAAM,MAAQ,EAC5CC,UAAWF,KAAKC,SAAW,GAAM,iBAAmB,kBACpD/C,gBAAiB,oB,2aAInBiD,GAAgB,SAAC,GAAD,IAAGC,EAAH,EAAGA,OAAH,OAClB,mBAAKlJ,IAAG,IAGJ,mBAAKA,IAAG,KAOR,mBAAKA,IAAG,YAAE,CACNoB,MAAO,IACPgE,aAAc,EACdvE,QAAS,EACTkF,aAAc,EACdC,gBAAiBkD,EAAS,aAAe,kBAE7C,mBAAKlJ,IAAG,KAOR,mBAAKA,IAAG,O,8oCAUVmJ,GAAW,kBACb,mBAAKnJ,IAAG,IAOJ,mBACIA,IAAG,GAqBHiG,QAAU,kBAAMyB,YAAS,WAtB7B,oBA2BA,mBAAK1H,IAAG,IAIJ,YAAC,GAAD,MACA,YAAC,GAAD,CAAekJ,QAAS,IACxB,YAAC,GAAD,MACA,YAAC,GAAD,OAGJ,mBAAKlJ,IAAG,IAOJ,mBAAKA,IAAG,KAOR,mBAAKA,IAAG,KAOR,mBAAKA,IAAG,Q,suCAWL,cAWX,OACI,mBAAKA,IAAG,IAKJ,mBAAKA,IAAG,IAhBA,CACZ,CAAEoE,KAAM,EAAGuE,IAAK,MAAOC,KAAM,OAC7B,CAAExE,KAAM,EAAGuE,IAAK,MAAOC,KAAM,QAC7B,CAAExE,KAAM,EAAGuE,IAAK,MAAOC,KAAM,OAC7B,CAAExE,KAAM,EAAGuE,IAAK,MAAOC,KAAM,OAC7B,CAAExE,KAAM,EAAGuE,IAAK,EAAGC,KAAM,GACzB,CAAExE,KAAM,EAAGuE,IAAK,MAAOC,KAAM,QAC7B,CAAExE,KAAM,GAAIuE,IAAK,MAAOC,KAAM,QAqBVpD,KAAI,SAAC4D,EAAQjN,GAAT,OACR,YAAC,GAAD,CAAQiI,KAAOgF,EAAOhF,KAAOuE,IAAMS,EAAOT,IAAMC,KAAOQ,EAAOR,UAGtE,mBAAK5I,IAAG,IAAR,4CAQA,mBAAKA,IAAG,IAAR,sOAOA,mBAAKA,IAAG,IAIJ,sBACIA,IAAG,GAQHiG,QAAU,kBAAM9F,cAAcxC,OAAO0L,OAAO,CACxCV,IAAK,IACLW,SAAU,WACT,KAZT,aAmBR,YAAC,GAAD,MAEA,mBAAKtJ,IAAG,IAIJ,mBAAKA,IAAG,IAAR,SAMA,mBAAKA,IAAG,IAAR,sGAMA,mBAAKA,IAAG,IAQA4H,GAAMpC,KAAI,SAAA4C,GAAI,OACV,YAAC,GAAD,cAAM1C,IAAM0C,EAAK9D,IAAU8D,QAIvC,mBAAKpI,IAAG,IAAR,yNAO0N,YAAC,IAAD,CAAMW,GAAG,YAAT,cAP1N,KASA,uBACI,mBAAKX,IAAG,IAAR,yBAOA,mBAAKA,IAAG,IAGJ,sBACIA,IAAG,GAQHiG,QAAU,kBAAMyB,YAAS,gBAT7B,oB,k3BC1WlB6B,GAAe,SAAC,GAA4C,IFiEjDjF,EEjEOkF,EAAyC,EAAzCA,OAAQC,EAAiC,EAAjCA,cAAeC,EAAkB,EAAlBA,YACrCtB,EAAOoB,GFgEAlF,EEhEiBkF,EFiEvB5B,GAAM+B,MAAK,SAAAvB,GAAI,OAAIA,EAAK9D,KAAOA,MEjEEsD,GAAM,GAE9C,OACI,mBAAK5H,IAAG,IAKJ,mBACIA,IAAG,IAWH,mBAAKA,IAAG,IACFoI,EAAK5I,MAEX,mBAAKQ,IAAG,IAKJ,wBAAM,oBAAMA,IAAG,IAAT,IAAmCoI,EAAKP,OAA9C,aAEJ,mBAAK7H,IAAG,IAIFoI,EAAK1F,cAIf,mBACI1C,IAAG,YAAE,CACDoB,MAAO,OACPP,QAAS,GACTgB,QAAS,eACTmE,gBAAiB,0BACjBD,aAAc,EACdV,SAAU,OACVkD,UAAW,OACXC,QAASiB,EAAgB,GAAK,EAC9B5D,WAAY,qHACZC,OAAQ2D,EAAgB,cAAgB,UACxC,SAAU,CACNlB,UAAWkB,EAAgB,OAAS,gDACpCzD,gBAAiByD,EAAgB,0BAA4B,6BAGrExD,QAAUwD,EAAgB,aAAWC,GAErC,mBAAK1J,IAAG,IAAR,eAMA,mBAAKA,IAAG,YAAE,CACNsI,OAAQ,SACR1H,MAAO6I,EAAgB,aAAe,cACtC5D,WAAY,sDAEV4D,GAAiB,qBAEvB,mBAAKzJ,IAAG,IAAR,+F,8XAWV4J,GAAe,SAAC,GAAD,IAAGpK,EAAH,EAAGA,KAAMuD,EAAT,EAASA,QAASyE,EAAlB,EAAkBA,QAASnB,EAA3B,EAA2BA,WAAYwD,EAAvC,EAAuCA,SAAUH,EAAjD,EAAiDA,YAAjD,OACjB,mBAAK1J,IAAG,SAImB,IAAZ+C,GAA4BsD,EAU/B,KATA,mBAAKrG,IAAG,KAEY,IAAZ+C,EACI,mBAAK/C,IAAG,IAA+BwH,IAC3B,IAAZzE,EACI,mBAAK/C,IAAG,IAA6BwH,GACrC,MAMxB,sBACIqC,SAAWxD,GAAcwD,EACzB7J,IAAG,GAWHiG,QAAUyD,GAGNrD,EACI,YAAC,KAAD,CACIrG,IAAG,YAAE,CACD8J,UAAcC,YAAU,CACpBjN,KAAM,CACFkM,UAAW,gBAEfrI,GAAI,CACAqI,UAAW,oBALV,2BAUjBxJ,K,mtFAuxBLyC,gBACX,SAAAC,GAAK,MAAK,CAAEC,GAAID,EAAME,OAAOD,GAAIE,IAAKH,EAAME,OAAOC,QACnD,SAAAC,GAAQ,MAAK,CAAEE,UAAW,SAAAH,GAAG,OAAIC,EAASE,YAAUH,QAFzCJ,EAjxBM,SAAC,GAAiC,EAA/BnB,KAAgC,IAA1BqB,EAAyB,EAAzBA,GAAIE,EAAqB,EAArBA,IAAKG,EAAgB,EAAhBA,UAC7BnD,EAAS2K,sBACTC,EAAWC,wBAFkC,EAIbtH,IAAMC,UAAS,GAA7CwD,EAJ2C,KAI/BC,EAJ+B,OAKL1D,IAAMC,SAAS,IAArD4D,EAL2C,KAK3BC,EAL2B,OAOX9D,IAAMC,cAASC,GAA/CqH,EAP2C,KAO9BC,EAP8B,OAQXxH,IAAMC,cAASC,GAA/CuH,EAR2C,KAQ9BC,EAR8B,OASb1H,IAAMC,cAASC,GAA7CyH,EAT2C,KAS/BC,EAT+B,OAUb5H,IAAMC,cAASC,GAA7C2H,EAV2C,KAU/BC,EAV+B,OAWH9H,IAAMC,cAASC,GAAvD6H,EAX2C,KAW1BC,EAX0B,OAYHhI,IAAMC,cAASC,GAAvD+H,EAZ2C,KAY1BC,EAZ0B,OAaLlI,IAAMC,cAASC,GAArDiI,EAb2C,KAa3BC,EAb2B,OAcLpI,IAAMC,cAASC,GAArDmI,EAd2C,KAc3BC,EAd2B,OAeStI,IAAMC,cAASC,GAAnEqI,EAf2C,KAepBC,EAfoB,OAgBSxI,IAAMC,cAASC,GAAnEuI,EAhB2C,KAgBpBC,EAhBoB,OAkBnB1I,IAAMC,SAAS,IAAvC0I,EAlB2C,KAkBlCC,EAlBkC,QAmBzB5I,IAAMC,SAAS,IAAjCrD,GAnB2C,MAmBrCiM,GAnBqC,SAoBzB7I,IAAMC,SAAS,IAAjC9B,GApB2C,MAoBrC2K,GApBqC,SAqBvB9I,IAAMC,SAAS,IAAnC8I,GArB2C,MAqBpCC,GArBoC,SAsBnBhJ,IAAMC,SAAS,IAAvCgJ,GAtB2C,MAsBlCC,GAtBkC,SAuBDlJ,IAAMC,SAAS,IAAzDkJ,GAvB2C,MAuBzBC,GAvByB,SAwBKpJ,IAAMC,SAAS,IAA/DoJ,GAxB2C,MAwBtBC,GAxBsB,MA8F7CC,GAAgB,SAACzG,EAAK0G,GAAW,IAAD,EAClCN,GAAW,OAAD,UACHD,KADG,MAELnG,GAAM0G,EAFD,MAgPRC,GAAqB,WACjBhK,GAAOA,EAAIiK,kBAAoBjK,EAAIkK,UAAYlK,EAAIkK,SAASC,kBAAoBnK,EAAIkK,SAASC,iBAAiBC,wBAE/GtM,eAELxC,OAAO4F,MAAMC,qCAAiCnB,EAAIsE,IAAM,gBAAiB,CACrEM,OAAQ,OACRxD,QAAS,CACL,OAAU,mBACV,eAAgB,mBAChB,cAAiBtB,EAAGiB,OAExBxE,KAAMsI,KAAKC,UAAU,CACjBuF,QAAS9E,GAAM,GAAGtD,OAEvB1E,MAAK,SAAAgE,GACJ,GAAIA,EAAIC,GAAI,OAAOD,EAAIE,OACvB,MAAM,IAAIjF,MAAM+E,EAAIG,eACrBnE,MAAK,SAAA+M,GACJrG,GAAc,GACd3I,OAAOyC,SAASwM,KAAOD,EAAQE,OAChC7I,OAAM,SAACC,GACNpG,QAAQoB,MAAMgF,GACdqC,GAAc,OAsDtB,OApBA1D,IAAMK,WAAU,WACRZ,EAAIrB,cAAgBO,IAAWC,OAASa,EAAIrB,cAAgBO,IAAWE,OACvE+J,EAAWnJ,EAAIvB,MACf2K,GAAQpJ,EAAI7C,MACZkM,GAAQrJ,EAAItB,MAAQ,IAEhBsB,EAAIkK,WACJX,GAASvJ,EAAIkK,SAASZ,OACtBG,GAAWzJ,EAAIkK,SAASV,UAGxBxJ,EAAIyK,eAAiBzK,EAAIyK,cAAcC,UACvCf,GAAoB3J,EAAIyK,cAAcC,QAAQzI,IAC9C4H,GAAuB7J,EAAIyK,cAAcC,QAAQ3J,SAGrDsE,YAAS,IAAMrF,EAAIvB,QAExB,CAAEuB,IAGD,mBAAKrC,IAAG,IAOJ,YAACkE,EAAA,EAAD,CACIzB,MAAQJ,EAAI7C,KAAO,gBAEvB,mBAAKQ,IAAG,IAAR,YAEA,mBAAKA,IAAG,IAAR,wBACA,mBAAKA,IAAG,IAAR,yDACA,mBAAKA,IAAG,IACJ,uBACI,YAACgN,GAAA,EAAD,CACIvK,MAAM,OACNC,YAAY,4CACZuK,QAAU,oBAAMjN,IAAG,IAAiCG,cAAcxC,OAAOyC,SAAS8M,KAAO,IAAM,KAC/FC,YAAY,YACZf,MAAQb,EACR6B,SA3VI,SAACtM,GACjB,gCAAgC1C,KAAK0C,IACrC0K,EAAW1K,IA0VCuM,UAAY,GACZC,QAAQ,4BACRC,UAAW,EACX1D,WAAaxH,EAAImL,UAAanL,EAAI+F,MAAQ/F,EAAI+F,KAAKqF,WAItDpL,EAAImL,UAAanL,EAAI+F,MAAQ/F,EAAI+F,KAAKqF,OACnCpL,EAAIvB,OAASyK,EACT,mBAAKvL,IAAG,IAAR,oLAGA,KACJ,mBAAKA,IAAG,IAAR,+DAMZ,YAAC,GAAD,CACIR,KAAO,cACPuD,QAAUoH,EACV3C,QAAU6C,EACVhE,WAAaA,EACbwD,UAAY0B,GAAWlJ,EAAIvB,OAASyK,EACpC7B,YA3Ua,WACrB,IAAIrD,EAAJ,CAGA,GAAIkF,EAAQlP,OAAS,GAAKkP,EAAQlP,OAAS,GAGvC,OAFA+N,GAAe,QACfE,EAAe,uDAGnB,IAAK,4BAA4BlM,KAAKmN,GAGlC,OAFAnB,GAAe,QACfE,EAAe,qGAInBhE,GAAc,GAETnG,eAELxC,OAAO4F,MAAMC,qCAAiCnB,EAAIsE,IAAM,QAAS,CAC7DM,OAAQ,QACRxD,QAAS,CACL,OAAU,mBACV,eAAgB,mBAChB,cAAiBtB,EAAGiB,OAExBxE,KAAMsI,KAAKC,UAAU,CACjBrG,KAAMyK,MAEX3L,MAAK,SAAAgE,GACJ,GAAIA,EAAIC,GAAI,OAAOD,EAAIE,OACvB,MAAM,IAAIjF,MAAM+E,EAAIG,eACrBnE,MAAK,SAAA8N,GACJlL,EAAU,OAAD,UACFH,EACAqL,IAEPtD,GAAe,GACfE,EAAe,+CACfhE,GAAc,GACdoB,YAAS,IAAMgG,EAAO5M,KAAO,gBAC9BkD,OAAM,SAACC,GACNpG,QAAQoB,MAAMgF,GACdmG,GAAe,GACfE,EAAe,2CAA6CrG,EAAI,yEAChEqC,GAAc,UAiSd,mBAAKtG,IAAG,IACJ,uBACI,YAACgN,GAAA,EAAD,CACIvK,MAAM,OACNC,YAAY,6CACZyK,YAAY,YACZf,MAAQ5M,GACR4N,SAAW3B,GACX4B,UAAY,GACZE,UAAW,IAEf,YAACP,GAAA,EAAD,CACIvK,MAAM,OACNC,YAAY,uDACZyK,YAAY,sCACZf,MAAQrL,GACRqM,SAAW1B,GACX4B,QAAQ,aACRD,UAAY,SAKxB,YAAC,GAAD,CACI7N,KAAO,eACPuD,QAAUwH,EACV/C,QAAUiD,EACVpE,WAAaA,EACbwD,UAAYrK,IAASA,KAAS6C,EAAI7C,QAASuB,IAAOA,KAASsB,EAAItB,MAC/D2I,YA1TS,WACjB,IAAIrD,EAAJ,CAEA,GAAI7G,GAAKnD,OAAS,GAAKmD,GAAKnD,OAAS,GAGjC,OAFAmO,GAAc,QACdE,EAAc,qDAGlB,GAAI3J,IAAQA,GAAK1E,OAAS,KAGtB,OAFAmO,GAAc,QACdE,EAAc,2DAGlB,GAAI3J,KAAS,kLAAkL3C,KAAK2C,IAGhM,OAFAyJ,GAAc,QACdE,EAAc,kGAIlBpE,GAAc,GAETnG,eAELxC,OAAO4F,MAAMC,qCAAiCnB,EAAIsE,IAAK,CACnDM,OAAQ,QACRxD,QAAS,CACL,OAAU,mBACV,eAAgB,mBAChB,cAAiBtB,EAAGiB,OAExBxE,KAAMsI,KAAKC,UAAU,CACjB3H,QACAuB,YAELnB,MAAK,SAAAgE,GACJ,GAAIA,EAAIC,GAAI,OAAOD,EAAIE,OACvB,MAAM,IAAIjF,MAAM+E,EAAIG,eACrBnE,MAAK,SAAA8N,GACJlL,EAAU,OAAD,UACFH,EACAqL,IAEPlD,GAAc,GACdE,EAAc,gDACdpE,GAAc,MACftC,OAAM,SAACC,GACNpG,QAAQoB,MAAMgF,GACduG,GAAc,GACdE,EAAc,gHACdpE,GAAc,UA4Qd,mBAAKtG,IAAG,IAOJ,uBACI,mBAAKA,IAAG,IAAR,UACA,mBAAKA,IAAG,YAAE,CAAEY,MAAQyB,EAAImL,UAAanL,EAAI+F,MAAQ/F,EAAI+F,KAAKqF,OAAW,WAAa,gBAAiBpI,SAAU,UAEpGhD,EAAImL,UAAanL,EAAI+F,MAAQ/F,EAAI+F,KAAKqF,OACnCpL,EAAI8B,QACA,oCACA,uDACJ,2DAIhB,YAAC6I,GAAA,EAAD,CACIW,QAAUtL,EAAI8B,QACdyJ,cAhaS,WACjBvH,IAEJC,GAAc,GAETnG,eAELxC,OAAO4F,MAAMC,qCAAiCnB,EAAIsE,IAAM,cAAe,CACnEM,OAAQ,QACRxD,QAAS,CACL,OAAU,mBACV,eAAgB,mBAChB,cAAiBtB,EAAGiB,SAEzBxD,MAAK,SAAAgE,GACJ,GAAIA,EAAIC,GAAI,OAAOD,EAAIE,OACvB,MAAM,IAAIjF,MAAM+E,EAAIG,eACrBnE,MAAK,SAAA8N,GACJlL,EAAU,OAAD,UACFH,EACAqL,IAEPpH,GAAc,MACftC,OAAM,SAACC,GACNpG,QAAQoB,MAAMgF,GACdqC,GAAc,QAwYNuD,WAAaxH,EAAImL,UAAanL,EAAI+F,MAAQ/F,EAAI+F,KAAKqF,WAI3D,mBAAKzN,IAAG,IAAR,uBACA,mBAAKA,IAAG,IAAR,sNAEKqC,EAAImL,UAAanL,EAAI+F,MAAQ/F,EAAI+F,KAAKqF,OACnC,8BACI,mBAAKzN,IAAG,IACJ,uBACI,YAACgN,GAAA,EAAD,CACIvK,MAAM,aACNC,YAAY,yDACZyK,YAAY,0BACZf,MAAQL,GACRqB,SAAWpB,GACXqB,UAAY,GACZC,QAAQ,WAEZ,YAACN,GAAA,EAAD,CACIvK,MAAM,gBACNC,YAAY,4DACZyK,YAAY,4EACZf,MAAQH,GACRmB,SAAWlB,GACXoB,QAAQ,sBAKpB,YAAC,GAAD,CACI9N,KACI6C,EAAIyK,eAAiBzK,EAAIyK,cAAcC,SAAW1K,EAAIyK,cAAcC,QAAQzI,IAAMjC,EAAIyK,cAAcC,QAAQ3J,OAAS2I,KAAqB1J,EAAIyK,cAAcC,QAAQzI,IAAM2H,KAAwB5J,EAAIyK,cAAcC,QAAQ3J,MACxN,mBACA,mBAERL,QAAUoI,EACV3D,QAAU6D,EACVhF,WAAaA,EACbwD,UAAYkC,KAAqBE,GACjCvC,YACIrH,EAAIyK,eAAiBzK,EAAIyK,cAAcC,SAAW1K,EAAIyK,cAAcC,QAAQzI,IAAMjC,EAAIyK,cAAcC,QAAQ3J,OAAS2I,KAAqB1J,EAAIyK,cAAcC,QAAQzI,IAAM2H,KAAwB5J,EAAIyK,cAAcC,QAAQ3J,MAthB7N,WACnBiD,IAEJC,GAAc,GAETnG,eAELxC,OAAO4F,MAAMC,qCAAiCnB,EAAIsE,IAAM,yBAA0B,CAC9EM,OAAQ,OACRxD,QAAS,CACL,OAAU,mBACV,eAAgB,mBAChB,cAAiBtB,EAAGiB,SAEzBxD,MAAK,SAAAgE,GACJ,GAAIA,EAAIC,GAAI,OAAOD,EAAIE,OACvB,MAAM,IAAIjF,MAAM+E,EAAIG,eACrBnE,MAAK,WACJ0G,GAAc,MACftC,OAAM,SAACC,GACNpG,QAAQoB,MAAMgF,GACdqC,GAAc,QAIO,WACrBD,IAEJC,GAAc,GAETnG,eAELxC,OAAO4F,MAAMC,qCAAiCnB,EAAIsE,IAAM,oBAAqB,CACzEM,OAAQ,MACRxD,QAAS,CACL,OAAU,mBACV,eAAgB,mBAChB,cAAiBtB,EAAGiB,OAExBxE,KAAMsI,KAAKC,UAAU,CACjB7C,GAAIyH,GACJ3I,MAAO6I,OAEZrM,MAAK,SAAAgE,GACJ,GAAIA,EAAIC,GAAI,OAAOD,EAAIE,OACvB,MAAM,IAAIjF,MAAM+E,EAAIG,eACrBnE,MAAK,SAAA8N,GACJlL,EAAU,OAAD,UACFH,EACAqL,IAEPtC,GAAyB,GACzBE,EAAyB,yCACzBhF,GAAc,MACftC,OAAM,SAACC,GACNpG,QAAQoB,MAAMgF,GACdmH,GAAyB,GACzBE,EAAyB,mIACzBhF,GAAc,WAkeN,mBAAKtG,IAAG,IAAR,4DAMR,mBAAKA,IAAG,IAAR,qBACA,mBAAKA,IAAG,IAAR,2JACA,mBAAKA,IAAG,IACJ,YAAC,GAAD,CACIwJ,OAASnH,GAAOA,EAAIiK,kBAAoBjK,EAAIkK,UAAYlK,EAAIkK,SAASsB,eAAiBxL,EAAIkK,SAASsB,cAAcC,KAAKzR,QAAUgG,EAAIkK,SAASsB,cAAcC,KAAK,GAAG1F,MAAQ/F,EAAIkK,SAASsB,cAAcC,KAAK,GAAG1F,KAAK9D,GACnNmF,cACIpH,GAAOA,EAAIiK,kBAAoBjK,EAAIkK,SAC/BlK,EAAIkK,SAASC,kBAAoBnK,EAAIkK,SAASC,iBAAiBC,uBAC3D,KACA,6EACJ,uEAER/C,YAAc2C,MAItB,mBAAKrM,IAAG,IAAR,mBACA,mBAAKA,IAAG,IAAR,sJAGA,mBAAKA,IAAG,IACJ,uBACI,YAACgN,GAAA,EAAD,CACIvK,MAAM,gBACNC,YAAY,qCACZyK,YAAY,2BACZf,MAAQT,GACRyB,SAAWxB,GACXyB,UAAY,IACZC,QAAQ,kDACRC,UAAW,IAEf,YAACP,GAAA,EAAD,CACIvK,MAAM,UACN0K,YAAY,mCACZf,MAAQP,GAAQkC,MAChBX,SAAW,SAAChB,GAAD,OAAWD,GAAc,QAASC,IAC7CiB,UAAY,IACZE,UAAW,IAEf,YAACP,GAAA,EAAD,CACIvK,MAAM,OACN0K,YAAY,4CACZf,MAAQP,GAAQmC,KAChBZ,SAAW,SAAChB,GAAD,OAAWD,GAAc,OAAQC,IAC5CiB,UAAY,GACZE,UAAW,IAEf,YAACP,GAAA,EAAD,CACIvK,MAAM,QACN0K,YAAY,sCACZf,MAAQP,GAAQ3J,MAChBkL,SAAW,SAAChB,GAAD,OAAWD,GAAc,QAASC,IAC7CiB,UAAY,GACZE,UAAW,IAEf,YAACP,GAAA,EAAD,CACIvK,MAAM,cACN0K,YAAY,sBACZf,MAAQP,GAAQoC,YAChBb,SAAW,SAAChB,GAAD,OAAWD,GAAc,cAAeC,IACnDiB,UAAY,EACZE,UAAW,IAEf,YAACP,GAAA,EAAD,CACIvK,MAAM,UACN0K,YAAY,UACZf,MAAQP,GAAQqC,QAChBd,SAAW,SAAChB,GAAD,OAAWD,GAAc,UAAWC,IAC/C+B,QAAUC,GACVC,UAAU,QACVC,YAAY,MACZf,UAAW,MAKvB,YAAC,GAAD,CACI/N,KAAO,uBACPuD,QAAU4H,EACVnD,QAAUqD,EACVxE,WAAaA,EACbwD,UAAY8B,KAAUE,GACtBnC,YAvaW,WACnB,IAAIrD,EAAJ,CAEA,IAAK,oDAAoDjI,KAAKuN,IAG1D,OAFAf,GAAmB,QACnBE,EAAmB,gDAGvB,KAAKe,IAAYA,GAAQkC,OAAUlC,GAAQmC,MAASnC,GAAQ3J,OAAU2J,GAAQoC,aAAgBpC,GAAQqC,SAGlG,OAFAtD,GAAmB,QACnBE,EAAmB,qCAIvBxE,GAAc,GACdwE,OAAmBhI,GAEd3C,eAELxC,OAAO4F,MAAMC,qCAAiCnB,EAAIsE,IAAM,YAAa,CACjEM,OAAQ,QACRxD,QAAS,CACL,OAAU,mBACV,eAAgB,mBAChB,cAAiBtB,EAAGiB,OAExBxE,KAAMsI,KAAKC,UAAU,CACjBwE,SACAE,eAELjM,MAAK,SAAAgE,GACJ,GAAIA,EAAIC,GAAI,OAAOD,EAAIE,OACvB,MAAM,IAAIjF,MAAM+E,EAAIG,eACrBnE,MAAK,SAAA2M,GACJ3B,GAAmB,GACnBE,EAAmB,2CACnBtI,EAAU,OAAD,UACFH,EADE,CAELiK,iBAAkBC,EAASjI,GAC3BiI,cAEJjG,GAAc,MACftC,OAAM,SAACC,GACNpG,QAAQoB,MAAMgF,GACd2G,GAAmB,GACnBE,EAAmB,kIACnBxE,GAAc,UA6XVjE,GAAOA,EAAIiK,kBAAoBjK,EAAIkK,SAC/B,8BACI,mBAAKvM,IAAG,IAAR,mBACA,mBAAKA,IAAG,IAAR,wNAGA,mBAAKA,IAAG,IACJ,uBAESqC,EAAIkK,SAASC,kBAAqBnK,EAAIkK,SAASC,iBAAiBC,uBAwC7D,mBAAKzM,IAAG,IAAR,0HAvCA,mBAAKA,IAAG,IAaJ,mBAAKA,IAAG,IAAR,QASA,YAAC,cAAD,CAAamO,QAAS,CAClBxM,MAAO,CACC4M,KAAM,CACFC,WAAY,YACZ5N,MAAO,UACP6N,UAAW,UACX,gBAAiB,CACb7N,MAAO,YAGf8N,QAAS,CACL9N,MAAO,UACP6N,UAAW,kBAgB/C,mBAAKzO,IAAG,IAMCqC,EAAIkK,SAASC,kBAAqBnK,EAAIkK,SAASC,iBAAiBC,uBAS7D,KARA,YAAC,GAAD,CACIjN,KAAO,sBACPuD,QAAUgI,EACVvD,QAAUyD,EACV5E,WAAaA,EACbwD,UAAY8B,KAAUE,GACtBnC,YAlcR,WACnBrK,GAAW4K,IACZ5D,IAEJC,GAAc,GAETnG,eAELd,EAAOsP,oBAAoB,CACvBC,KAAM,OACNC,KAAM5E,EAAS6E,WAAWC,iBAC3BnP,MAAK,SAAAoP,GACAA,EAAoB/P,OAAS+P,EAAoB/P,MAAMuI,SACvDwD,GAAkB,GAClBE,EAAkB8D,EAAoB/P,MAAMuI,SAC5ClB,GAAc,IAEd3I,OAAO4F,MAAMC,qCAAiCnB,EAAIsE,IAAM,kBAAmB,CACvEM,OAAQ,QACRxD,QAAS,CACL,OAAU,mBACV,eAAgB,mBAChB,cAAiBtB,EAAGiB,OAExBxE,KAAMsI,KAAKC,UAAU,CACjB8H,gBAAiBD,EAAoBE,cAAc5K,OAExD1E,MAAK,SAAAgE,GACJ,GAAIA,EAAIC,GAAI,OAAOD,EAAIE,OACvB,MAAM,IAAIjF,MAAM+E,EAAIG,eACrBnE,MAAK,SAAA2M,GACJvB,GAAkB,GAClBE,EAAkB,0CAClB1I,EAAU,OAAD,UACFH,EADE,CAELkK,cAEJjG,GAAc,MACftC,OAAM,SAACC,GACNpG,QAAQoB,MAAMgF,GACd+G,GAAkB,GAClBE,EAAkB,4HAClB5E,GAAc,SAGvBtC,OAAM,SAACC,GACNpG,QAAQoB,MAAMgF,GACd+G,GAAkB,GAClBE,EAAkB,4HAClB5E,GAAc,WAsZE,YAAC,GAAD,CACI9G,KAAO,yBACP6G,WAAaA,EACbwD,WAAaxH,GAAOA,EAAIiK,kBAAoBjK,EAAIkK,UAAYlK,EAAIkK,SAASC,kBAAoBnK,EAAIkK,SAASC,iBAAiBC,wBAC3H/C,YA3XC,WACzB2C,UA8XY,KAGR,mBAAKrM,IAAG,IAOJ,mBAAKA,IAAG,IAAR,eACA,mBAAKA,IAAG,IAAR,0OACA,mBAAKA,IAAG,IACJ,sBACIA,IAAG,GAKHiG,QAAU,kBAAMS,EAAkB,uCAAyCrE,EAAI7C,KAAO,0CAN1F,UAQa6C,EAAI7C,QAMrBiH,EACI,YAACc,EAAA,EAAD,CACI9E,MAAQ,UAAYJ,EAAI7C,KACxBgI,QAAUf,EACVgB,UA1ZF,WACVpB,IAEJC,GAAc,GACdI,EAAkB,IAEbvG,eAELxC,OAAO4F,MAAMC,qCAAiCnB,EAAIsE,IAAK,CACnDM,OAAQ,SACRxD,QAAS,CACL,OAAU,mBACV,cAAiBtB,EAAGiB,SAEzBxD,MAAK,SAAAgE,GACJ,GAAIA,EAAIC,GAAI,OAAOD,EAAIE,OACvB,MAAM,IAAIjF,MAAM+E,EAAIG,eACrBnE,MAAK,WACJ0G,GAAc,GACdoB,YAAS,eACV1D,OAAM,SAACC,GACNpG,QAAQoB,MAAMgF,GACdqC,GAAc,QAqYFqB,cAAgB,kBAAMjB,EAAkB,OAE5C,S,2YCt5BdkD,GAAe,SAAC,GAAD,IAAGpK,EAAH,EAAGA,KAAMuD,EAAT,EAASA,QAASyE,EAAlB,EAAkBA,QAASnB,EAA3B,EAA2BA,WAAYwD,EAAvC,EAAuCA,SAAUH,EAAjD,EAAiDA,YAAjD,OACjB,mBAAK1J,IAAG,SAImB,IAAZ+C,GAA4BsD,EAU/B,KATA,mBAAKrG,IAAG,KAEY,IAAZ+C,EACI,mBAAK/C,IAAG,IAA+BwH,IAC3B,IAAZzE,EACI,mBAAK/C,IAAG,IAA6BwH,GACrC,MAMxB,sBACIqC,SAAWxD,GAAcwD,EACzB7J,IAAG,GAWHiG,QAAUyD,GAGNrD,EACI,YAAC,KAAD,CACIrG,IAAG,YAAE,CACD8J,UAAcC,YAAU,CACpBjN,KAAM,CACFkM,UAAW,gBAEfrI,GAAI,CACAqI,UAAW,oBALV,2BAUjBxJ,K,6jCAmMLyC,gBACX,SAAAC,GAAK,MAAK,CAAEC,GAAID,EAAME,OAAOD,GAAIE,IAAKH,EAAME,OAAOC,OACnD,KAFWJ,EA7LE,SAAC,GAAsB,EAApBnB,KAAqB,IAAfqB,EAAc,EAAdA,GAAIE,EAAU,EAAVA,IAAU,EACEO,IAAMC,UAAS,GAA7CwD,EAD4B,KAChBC,EADgB,OAGc1D,IAAMC,cAASC,GAAzDqM,EAH4B,KAGVC,EAHU,OAIcxM,IAAMC,cAASC,GAAzDuM,EAJ4B,KAIVC,EAJU,OAMJ1M,IAAMC,SAAS,IAAvC0M,EAN4B,KAMnBC,EANmB,OAOI5M,IAAMC,SAAS,IAA/C4M,EAP4B,KAOfC,EAPe,KAmGpC,OArBA9M,IAAMK,WAAU,WACRZ,EAAIrB,cAAgBO,IAAWC,OAASa,EAAIrB,cAAgBO,IAAWE,MACvE9D,OAAO4F,MAAMC,qCAAiCnB,EAAIsE,IAAM,WAAY,CAChElD,QAAS,CACLC,OAAQ,mBACRC,cAAexB,EAAGiB,SAEvBxD,MAAK,SAAAgE,GACJ,GAAIA,EAAIC,GAAI,OAAOD,EAAIE,OACvB,MAAM,IAAIjF,MAAM+E,EAAIG,eACrBnE,MAAK,SAAA2P,GACJ1R,QAAQ8R,IAAIJ,GACZC,EAAWD,MACZvL,OAAM,SAACC,GACNpG,QAAQoB,MAAMgF,MAGlByD,YAAS,IAAMrF,EAAIvB,QAExB,CAAEuB,EAAKF,EAAGiB,QAGT,mBAAKpD,IAAG,IAOJ,YAACkE,EAAA,EAAD,CACIzB,MAAQJ,EAAI7C,KAAO,gBAEvB,mBAAKQ,IAAG,IAAR,QAGA,mBAAKA,IAAG,IAAR,eACA,mBAAKA,IAAG,IAAR,4IACA,mBAAKA,IAAG,IAECqC,EAAImL,UAAanL,EAAI+F,MAAQ/F,EAAI+F,KAAKqF,QAAU,IAC7C,uBACI,YAACT,GAAA,EAAD,CACIvK,MAAM,QACNC,YAAY,mEACZyK,YAAY,yBACZf,MAAQqD,EACRrC,SAAWsC,IAGf,YAAC,GAAD,CACIlQ,KAAO,aACPuD,QAAUoM,EACV3H,QAAU6H,EACVhJ,WAAaA,EACbwD,UAAY4F,EACZ/F,YA5HN,WAClB,IAAIrD,EAGJ,MAAK,oDAAoDjI,KAAKqR,QAMzDtP,gBAELmG,GAAc,GAEd3I,OAAO4F,MAAMC,qCAAiCnB,EAAIsE,IAAM,WAAY,CAChEM,OAAQ,MACRxD,QAAS,CACL,OAAU,mBACV,eAAgB,mBAChB,cAAiBtB,EAAGiB,OAExBxE,KAAMsI,KAAKC,UAAU,CACjBwE,MAAO8D,MAEZ7P,MAAK,SAAAgE,GACJ,GAAIA,EAAIC,GAAI,OAAOD,EAAIE,OACvB,MAAM,IAAIjF,MAAM+E,EAAIG,eACrBnE,MAAK,SAAAgQ,GACJJ,EAAW,GAAD,oBACHD,GADG,CAENK,KAEJR,GAAoB,GACpBE,EAAoB,sBAAwBM,EAAO9I,KAAKtH,KAAO,iBAC/D8G,GAAc,MACftC,OAAM,SAACC,GACNpG,QAAQoB,MAAMgF,GACdmL,GAAoB,GACpBE,EAAoB,iBAAmBG,EAAc,kEACrDnJ,GAAc,SAlCd8I,GAAoB,QACpBE,EAAoB,wCAyHR,mBAAKtP,IAAG,IAAR,yDAIZ,mBAAKA,IAAG,IAAR,WACA,mBAAKA,IAAG,IAAR,SAC+B,IAAnBuP,EAAQlT,OAAe,KAAO,MAD1C,IACoDkT,EAAQlT,OAD5D,QAC8F,IAAnBkT,EAAQlT,OAAe,GAAK,IADvG,iBAGA,mBAAK2D,IAAG,IAEAuP,GAAWA,EAAQlT,OACfkT,EAAQ/J,KAAI,SAAAoK,GAAM,OACd,mBAAK5P,IAAG,IASJ,mBAAKA,IAAG,IAGF4P,EAAO9I,KAAKtH,MAElB,mBAAKQ,IAAG,IAGJ,YAAC,IAAD,CACIyC,MAAM,gBACN2B,KAAO,GACPpE,IAAG,GASHiG,QAAU,kBA7HpB4J,EA6H2CD,EAAOjJ,SA5HpEN,GAEClG,gBAELmG,GAAc,GAEd3I,OAAO4F,MAAMC,qCAAiCnB,EAAIsE,IAAM,YAAckJ,EAAU,CAC5E5I,OAAQ,SACRxD,QAAS,CACL,OAAU,mBACV,eAAgB,mBAChB,cAAiBtB,EAAGiB,SAEzBxD,MAAK,SAAAgE,GACJ,GAAIA,EAAIC,GAAI,OAAOD,EAAIE,OACvB,MAAM,IAAIjF,MAAM+E,EAAIG,eACrBnE,MAAK,SAAAgQ,GACJJ,EAAWD,EAAQjM,QAAO,SAAAwM,GAAC,OAAIA,EAAEnJ,MAAQiJ,EAAOjJ,QAChDL,GAAc,MACftC,OAAM,SAACC,GACNpG,QAAQoB,MAAMgF,GACdqC,GAAc,QAtBG,IAACuJ,UAkIN,U,moCCrFT5N,gBACX,SAAAC,GAAK,MAAK,CAAEC,GAAID,EAAME,OAAOD,GAAIE,IAAKH,EAAME,OAAOC,OACnD,KAFWJ,EA3JK,SAAC,GAA2B,IAAzBE,EAAwB,EAAxBA,GAAIE,EAAoB,EAApBA,IAAK0N,EAAe,EAAfA,SAAe,EACLnN,IAAMC,cAASC,GAA7CuD,EADmC,KACvBC,EADuB,OAGf1D,IAAMC,SAAS,IAAnCJ,EAHmC,KAG5BuN,EAH4B,OAIXpN,IAAMC,SAAS,IAAvC0B,EAJmC,KAI1B0L,EAJ0B,KAsC3C,OACI,mBAAKjQ,IAAG,IAQJ,mBAAKA,IAAG,IAMJ,mBAAKA,IAAG,IAAR,SASA,qBACI4O,KAAK,OACLzB,YAAY,2BACZf,MAAQ3J,EACR4K,UAAY,IACZrN,IAAG,GASHkQ,SAAW,SAACjM,GAAD,OAAO+L,EAAS/L,EAAEkM,OAAO/D,WAI5C,mBAAKpM,IAAG,IAMJ,mBAAKA,IAAG,IAAR,WASA,wBACI4O,KAAK,OACLzB,YAAY,4BACZiD,KAAO,EACPhE,MAAQ7H,EACR8I,UAAY,KACZrN,IAAG,GAOHkQ,SAAW,SAACjM,GAAD,OAAOgM,EAAWhM,EAAEkM,OAAO/D,WAI9C,uBACI,sBACIvC,WAAa1H,GAAMA,EAAGiB,OAASX,GAAS8B,GACxCvE,IAAG,GAcHiG,QA3HO,WACbxD,GAAS8B,IAEf+B,GAAc,GAETnG,eAELxC,OAAO4F,MAAMC,qCAAiCnB,EAAIsE,IAAM,YAAa,CACjEM,OAAQ,OACRxD,QAAS,CACL,OAAU,mBACV,eAAgB,mBAChB,cAAiBtB,EAAGiB,OAExBxE,KAAMsI,KAAKC,UAAU,CACjB1E,QACA8B,cAEL3E,MAAK,SAAAgE,GACJ,GAAIA,EAAIC,GAAI,OAAOD,EAAIE,OACvB,MAAM,IAAIjF,MAAM+E,EAAIG,eACrBnE,MAAK,SAAA2G,GACJD,GAAc,GACd0J,EAAS,IACTC,EAAW,IACXF,EAASxJ,MACVvC,OAAM,SAACC,GACNpG,QAAQoB,MAAMgF,GACdqC,GAAc,SAkGFD,EACI,YAAC,KAAD,CACIrG,IAAG,YAAE,CACD8J,UAAcC,YAAU,CACpBjN,KAAM,CACFkM,UAAW,gBAEfrI,GAAI,CACAqI,UAAW,oBALV,2BAUjB7G,GAAMA,EAAGiB,MACL,gBACA,sB,ilBCtJjB,mBAAGtC,EAAH,EAAGA,KAAMwD,EAAT,EAASA,GAAI7B,EAAb,EAAaA,MAAO8B,EAApB,EAAoBA,QAASI,EAA7B,EAA6BA,QAASC,EAAtC,EAAsCA,UAAWC,EAAjD,EAAiDA,QAASC,EAA1D,EAA0DA,UAAWJ,EAArE,EAAqEA,SAAUM,EAA/E,EAA+EA,WAAYE,EAA3F,EAA2FA,cAA3F,OACX,mBAAKlF,IAAG,IASJ,mBAAKA,IAAG,IAKJ,mBACIA,IAAG,YAAE,CACD6B,QAAS,OACTG,WAAY,SACZD,eAAgB,SAChB6D,UAAW,SACXhF,MAAOiE,EAAU,eAAiB,UAClCgB,WAAY,mDACZC,OAAQZ,EAAgB,UAAY,cACpC,SAAU,CACNtE,MAAO,kBAGfqF,QAAU,kBAAMf,EAA0BF,EAAVH,EAAqB,EAAgB,GAAK,OAE1E,YAAC,IAAD,OAEJ,mBAAK7E,IAAG,KAID2E,GAAW,IAAMC,GAAa,IAErC,mBACI5E,IAAG,YAAE,CACD6B,QAAS,OACTG,WAAY,SACZD,eAAgB,SAChB6D,UAAW,SACXhF,MAAOkE,EAAY,aAAe,UAClCe,WAAY,mDACZC,OAAQZ,EAAgB,UAAY,cACpC,SAAU,CACNtE,MAAO,gBAGfqF,QAAU,kBAAMf,EAA4BF,EAAZF,EAAuB,GAAiB,GAAK,OAE7E,YAAC,IAAD,QAIR,YAAC,IAAD,CACInE,GAAK,IAAMG,EAAO,aAAewD,EACjCtE,IAAG,IASH,mBAAKA,IAAG,IAIFyC,GAGN,mBAAKzC,IAAG,YAAE,CACNoF,aAAc,GACdC,SAAU,OACVC,WAAY,IACZC,cAAe,YACf3E,MAAO8D,EAAW,aAAe,iBAE/BA,EAAW,SAAW,QAIxBH,GAAWA,EAAQlI,OACf,mBAAK2D,IAAG,IAIFuE,EAAQlI,OAAS,IAAMkI,EAAQhE,MAAM,EAAG,KAAO,MAAQgE,GAE7D,Q,i6BC8GLtC,gBACX,SAAAC,GAAK,MAAK,CAAEC,GAAID,EAAME,OAAOD,GAAIE,IAAKH,EAAME,OAAOC,OACnD,KAFWJ,EAtME,SAAC,GAAiB,IAAfE,EAAc,EAAdA,GAAIE,EAAU,EAAVA,IAAU,EACQO,IAAMC,UAAS,GAA7CwD,EADsB,KACVC,EADU,OAEE1D,IAAMC,cAASC,GAAvCC,EAFsB,KAEbC,EAFa,OAGIJ,IAAMC,SAAS,GAAzCwN,EAHsB,KAGZC,EAHY,OAIJ1N,IAAMC,UAAS,GAAjC0N,EAJsB,KAIhBC,EAJgB,OAMI5N,IAAMC,SAAS,IAAzC0D,EANsB,KAMZC,EANY,KAQ9B5D,IAAMK,WAAU,WACPZ,GAAQA,EAAIsE,KAEZxG,eAELxC,OAAO4F,MAAMC,qCAAiCnB,EAAIsE,IAAM,YAAa,CACjElD,QAAS,CACLC,OAAQ,mBACRC,cAAexB,EAAGiB,SAEvBxD,MAAK,SAAAgE,GACJ,GAAIA,EAAIC,GAAI,OAAOD,EAAIE,OACvB,MAAM,IAAIjF,MAAM+E,EAAIG,eACrBnE,MAAK,SAAA2G,GACJvD,GAAW,GACXwD,EAAYD,MACbvC,OAAM,SAACC,GACNpG,QAAQoB,MAAMgF,GACdjB,GAAW,QAEhB,CAAEb,EAAGiB,MAAOf,IAEf,IAAMoO,EAAW,WACRF,IAELC,OAAQ1N,GAEH3C,eAELxC,OAAO4F,MAAMC,qCAAiCnB,EAAIsE,IAAM,kBAAoB0J,EAAU,CAClF5M,QAAS,CACLC,OAAQ,mBACRC,cAAexB,EAAGiB,SAEvBxD,MAAK,SAAAgE,GACJ,GAAIA,EAAIC,GAAI,OAAOD,EAAIE,OACvB,MAAM,IAAIjF,MAAM+E,EAAIG,eACrBnE,MAAK,SAAA8Q,GACuB,KAAvBA,EAAYrU,OACZmU,GAAQ,GAERA,GAAQ,GAEZF,EAAYD,EAAW,GACvB7J,EAAYD,EAASpI,OAAOuS,OAC7B1M,OAAM,SAACC,GACNpG,QAAQoB,MAAMgF,GACduM,GAAQ,QAUVG,EAAa,SAACC,EAAGvJ,GACfhB,IAEJC,GAAc,GAETnG,eAELxC,OAAO4F,MAAMC,qCAAiCnB,EAAIsE,IAAM,aAAeiK,EAAEjK,IAAM,QAAS,CACpFM,OAAQ,QACRxD,QAAS,CACL,OAAU,mBACV,eAAgB,mBAChB,cAAiBtB,EAAGiB,OAExBxE,KAAMsI,KAAKC,UAAU,CACjBE,WAELzH,MAAK,SAAAgE,GACJ,GAAIA,EAAIC,GAAI,OAAOD,EAAIE,OACvB,MAAM,IAAIjF,MAAM+E,EAAIG,eACrBnE,MAAK,SAAAwH,GACJ,IAAMsJ,EAAcnK,EACdsK,EAAQH,EAAY/G,MAAK,SAAAiH,GAAC,OAAIA,EAAEjK,MAAQS,EAAgBT,OAC9D+J,EAAYI,OAAOD,EAAO,EAAGzJ,GAE7Bd,GAAc,GACdE,EAAYkK,MACb1M,OAAM,SAACC,GACNpG,QAAQoB,MAAMgF,GACdqC,GAAc,QAItB,OACI,mBAAKtG,IAAG,IAKJ,mBAAKA,IAAG,IAIJ,YAAC+Q,GAAD,CAAehB,SAjDJ,SAACW,GACfA,GAELlK,EAAY,CAAEkK,GAAH,oBAAmBnK,SAiD1B,mBAAKvG,IAAG,KAKY,IAAZ+C,EACI,8BAEQwD,EAASlK,OACLkK,EAASf,KAAI,SAAAe,GAAQ,OACjB,YAAC,GAAD,CACIb,IAAMa,EAASI,IACf7F,KAAOuB,EAAIvB,KACXwD,GAAKiC,EAASI,IACdlE,MAAQ8D,EAAS9D,MACjB8B,QAAUgC,EAAShC,QACnBI,QAAU4B,EAAS5B,SAAW4B,EAAS5B,mBAAmB1I,OAASsK,EAAS5B,QAAQtI,OACpFuI,UAAY2B,EAAS3B,WAAa2B,EAAS3B,qBAAqB3I,OAASsK,EAAS3B,UAAUvI,OAC5FwI,QAAU1C,GAAMA,EAAGmC,IAAMiC,EAAS5B,SAAW4B,EAAS5B,mBAAmB1I,OAASsK,EAAS5B,QAAQkC,SAAS1E,EAAGmC,GAAG1H,YAClHkI,UAAY3C,GAAMA,EAAGmC,IAAMiC,EAAS3B,WAAa2B,EAAS3B,qBAAqB3I,OAASsK,EAAS3B,UAAUiC,SAAS1E,EAAGmC,GAAG1H,YAC1H8H,SAAW6B,EAAS7B,SACpBM,WAAa,SAAAqC,GAAI,OAAIsJ,EAAWpK,EAAUc,IAC1CnC,cAAgB/C,GAAMA,EAAGiB,WAGjC,mBAAKpD,IAAG,IAAR,6EAUA,IAAZ+C,EACI,mBAAK/C,IAAG,IAAR,+DACA,mBAAKA,IAAG,IAA4B,YAACsH,EAAA,EAAD,OAI5Cf,EAASlK,SAAmB,IAATkU,EACf,mBACIvQ,IAAG,GAmBHgR,YAAcP,EACdQ,QAAUR,GAEV,mBAAKzQ,IAAG,KAIS,IAATuQ,EACI,YACA,WAGZ,YAAC,IAAD,CACIvQ,IAAG,MAKX,UC1LlB3C,Gd8HW,WACf,IAAK,IAAI6T,EAAOC,UAAU9U,OAAQ+C,EAAO,IAAInD,MAAMiV,GAAOE,EAAO,EAAGA,EAAOF,EAAME,IAC/EhS,EAAKgS,GAAQD,UAAUC,GAIzB,OADAvR,GAAa,EACNF,EAAgBC,MAAK,SAAUT,GACpC,OAAOD,EAAWC,EAAaC,McrIbiS,CAAW7N,8CAElB,4BACX,YAAC,SAAD,KACI,YAAC,IAAD,CAAetD,KAAK,KAChB,YAACoR,GAAD,CAAUpR,KAAK,OAGnB,YAAC,EAAD,CAAWA,KAAK,UACZ,YAACqR,GAAD,CAAiBrR,KAAK,MACtB,YAACqR,GAAD,CAAiBrR,KAAK,cACtB,YAAC,GAAD,CAAcA,KAAK,kBACnB,YAACsR,GAAD,CAAUtR,KAAK,UACf,YAAC,WAAD,CAAUb,OAAShC,GAAgB6C,KAAK,aACpC,YAACuR,GAAD,CAAcvR,KAAK,W,sBC1B1B,SAAUwR,EAAS9O,GAC1B,aAIA,SAAS+O,EAAQC,GAaf,OATED,EADoB,mBAAXnV,QAAoD,iBAApBA,OAAOC,SACtC,SAAiBmV,GACzB,cAAcA,GAGN,SAAiBA,GACzB,OAAOA,GAAyB,mBAAXpV,QAAyBoV,EAAIC,cAAgBrV,QAAUoV,IAAQpV,OAAOG,UAAY,gBAAkBiV,IAI9GA,GAkBjB,SAASE,EAAyBC,EAAQC,GACxC,GAAc,MAAVD,EAAgB,MAAO,GAE3B,IAEIrM,EAAKvJ,EAFLgU,EAlBN,SAAuC4B,EAAQC,GAC7C,GAAc,MAAVD,EAAgB,MAAO,GAC3B,IAEIrM,EAAKvJ,EAFLgU,EAAS,GACT8B,EAAavV,OAAOwV,KAAKH,GAG7B,IAAK5V,EAAI,EAAGA,EAAI8V,EAAW5V,OAAQF,IACjCuJ,EAAMuM,EAAW9V,GACb6V,EAASG,QAAQzM,IAAQ,IAC7ByK,EAAOzK,GAAOqM,EAAOrM,IAGvB,OAAOyK,EAMMiC,CAA8BL,EAAQC,GAInD,GAAItV,OAAO2V,sBAAuB,CAChC,IAAIC,EAAmB5V,OAAO2V,sBAAsBN,GAEpD,IAAK5V,EAAI,EAAGA,EAAImW,EAAiBjW,OAAQF,IACvCuJ,EAAM4M,EAAiBnW,GACnB6V,EAASG,QAAQzM,IAAQ,GACxBhJ,OAAOC,UAAU4V,qBAAqB1V,KAAKkV,EAAQrM,KACxDyK,EAAOzK,GAAOqM,EAAOrM,IAIzB,OAAOyK,EAGT,SAASqC,EAAexW,EAAKG,GAC3B,OAGF,SAAyBH,GACvB,GAAIC,MAAMC,QAAQF,GAAM,OAAOA,EAJxByW,CAAgBzW,IAOzB,SAA+BA,EAAKG,GAClC,GAAMK,OAAOC,YAAYC,OAAOV,IAAgD,uBAAxCU,OAAOC,UAAUC,SAASC,KAAKb,GAAvE,CAIA,IAAI0W,EAAO,GACPC,GAAK,EACLC,GAAK,EACLC,OAAK/P,EAET,IACE,IAAK,IAAiCgQ,EAA7BC,EAAK/W,EAAIQ,OAAOC,cAAmBkW,GAAMG,EAAKC,EAAGC,QAAQC,QAChEP,EAAKQ,KAAKJ,EAAG1G,QAETjQ,GAAKuW,EAAKrW,SAAWF,GAH8CwW,GAAK,IAK9E,MAAO7S,GACP8S,GAAK,EACLC,EAAK/S,EACL,QACA,IACO6S,GAAsB,MAAhBI,EAAW,QAAWA,EAAW,SAC5C,QACA,GAAIH,EAAI,MAAMC,GAIlB,OAAOH,GAlCwBS,CAAsBnX,EAAKG,IAqC5D,WACE,MAAM,IAAIa,UAAU,wDAtC4CoW,GAyDlE,SAASC,KAET,SAASC,KAlHT1Q,EAAQA,GAASA,EAAM2Q,eAAe,WAAa3Q,EAAe,QAAIA,EAoHtE0Q,EAAuBE,kBAAoBH,EAE3C,IA6CII,EAnEJ,SAA8BC,EAAIC,GAChC,OAEGD,EAFIC,EAAS,CACdjC,QAAS,IACGiC,EAAOjC,SAAUiC,EAAOjC,QAgExBkC,EAAqB,SAAUD,GAU3CA,EAAOjC,QAvDoB,WAC7B,SAASmC,EAAKC,EAAOC,EAAUC,EAAe5T,EAAU6T,EAAcC,GACpE,GAXuB,iDAWnBA,EAAJ,CAKA,IAAIpU,EAAM,IAAIjB,MAAM,mLAEpB,MADAiB,EAAIN,KAAO,sBACLM,GAKR,SAASqU,IACP,OAAON,EAHTA,EAAKO,WAAaP,EAOlB,IAAIQ,EAAiB,CACnBC,MAAOT,EACPU,KAAMV,EACNW,KAAMX,EACNY,OAAQZ,EACRa,OAAQb,EACRc,OAAQd,EACRe,OAAQf,EACRgB,IAAKhB,EACLiB,QAASX,EACTY,QAASlB,EACTmB,YAAanB,EACboB,WAAYd,EACZe,KAAMrB,EACNsB,SAAUhB,EACViB,MAAOjB,EACPkB,UAAWlB,EACXmB,MAAOnB,EACPoB,MAAOpB,EACPqB,eAAgBlC,EAChBE,kBAAmBH,GAGrB,OADAgB,EAAeoB,UAAYpB,EACpBA,EAaYqB,MAIjBC,EAAkB,SAAyBC,GAC7C,OAAe,OAARA,GAAiC,WAAjBjE,EAAQiE,IAgB7BC,EAAU,SAASA,EAAQjN,EAAMkN,GACnC,IAAKH,EAAgB/M,KAAU+M,EAAgBG,GAC7C,OAAOlN,IAASkN,EAGlB,IAAIC,EAAY9Z,MAAMC,QAAQ0M,GAE9B,GAAImN,IADa9Z,MAAMC,QAAQ4Z,GACD,OAAO,EACrC,IAAIE,EAViB,oBAUCtZ,OAAOC,UAAUC,SAASC,KAAK+L,GAErD,GAAIoN,KAZiB,oBAWEtZ,OAAOC,UAAUC,SAASC,KAAKiZ,IACZ,OAAO,EACjD,IAAKE,IAAoBD,EAAW,OAAO,EAC3C,IAAIE,EAAWvZ,OAAOwV,KAAKtJ,GACvBsN,EAAYxZ,OAAOwV,KAAK4D,GAC5B,GAAIG,EAAS5Z,SAAW6Z,EAAU7Z,OAAQ,OAAO,EAGjD,IAFA,IAAI8Z,EAAS,GAEJha,EAAI,EAAGA,EAAI8Z,EAAS5Z,OAAQF,GAAK,EACxCga,EAAOF,EAAS9Z,KAAM,EAGxB,IAAK,IAAI4W,EAAK,EAAGA,EAAKmD,EAAU7Z,OAAQ0W,GAAM,EAC5CoD,EAAOD,EAAUnD,KAAO,EAG1B,IAAIqD,EAAU1Z,OAAOwV,KAAKiE,GAE1B,GAAIC,EAAQ/Z,SAAW4Z,EAAS5Z,OAC9B,OAAO,EAGT,IAAIga,EAAIzN,EACJ0N,EAAIR,EAMR,OAAOM,EAAQG,OAJJ,SAAc7Q,GACvB,OAAOmQ,EAAQQ,EAAE3Q,GAAM4Q,EAAE5Q,QAMzB8Q,EAAc,SAAqBpK,GACrC,IAAIqK,EAAM7T,EAAM8T,OAAOtK,GAIvB,OAHAxJ,EAAMK,WAAU,WACdwT,EAAIE,QAAUvK,IACb,CAACA,IACGqK,EAAIE,SAOTC,EAAiB,SAAwBzX,GAC3C,GAAoB,OAAhBA,GA3DGwW,EADwBC,EA4DMzW,IA3DkB,mBAAjByW,EAAI3L,UAAsD,mBAApB2L,EAAIiB,aAAiE,mBAA5BjB,EAAIjH,qBAAwE,mBAA3BiH,EAAIkB,mBA4DxK,OAAO3X,EA7DI,IAAkByW,EAgE/B,MAAM,IAAI/W,MATe,uMAYvBkY,EAAkB,SAAyBnB,GAC7C,GA3Ec,SAAmBA,GACjC,OAAOD,EAAgBC,IAA4B,mBAAbA,EAAIhW,KA0EtCoX,CAAUpB,GACZ,MAAO,CACLqB,IAAK,QACL5Z,cAAeG,QAAQC,QAAQmY,GAAKhW,KAAKgX,IAI7C,IAAIvX,EAASuX,EAAehB,GAE5B,OAAe,OAAXvW,EACK,CACL4X,IAAK,SAIF,CACLA,IAAK,OACL5X,OAAQA,IAIR6X,EAAkBtU,EAAMuU,cAAc,MAC1CD,EAAgBE,YAAc,kBAE9B,IAqGIC,EAAgC,SAAuCC,GAEzE,OAvGyB,SAA8BC,EAAKC,GAC5D,IAAKD,EACH,MAAM,IAAI1Y,MAAM,+EAA+EV,OAAOqZ,EAAS,gCAGjH,OAAOD,EAkGAE,CADG7U,EAAM8U,WAAWR,GACMI,IA6B/BK,EAAmB,SAA0BC,GAI/C,OAAOlX,EAHQkX,EAAMlX,UACX2W,EAA8B,+BAK1CM,EAAiBlE,UAAY,CAC3B/S,SAAU+S,EAAUe,KAAKJ,YAG3B,IAAIyD,EAAuB,SAA8BC,GACvD,IAAIrB,EAAM7T,EAAM8T,OAAOoB,GAIvB,OAHAlV,EAAMK,WAAU,WACdwT,EAAIE,QAAUmB,IACb,CAACA,IACG,WACDrB,EAAIE,SACNF,EAAIE,QAAQrX,MAAMmX,EAAKtF,aAKzB4G,EAA2B,SAAkC5J,GAC/D,OAAKwH,EAAgBxH,IAIbA,EAAQ6J,eACLlG,EAAyB3D,EAAS,CAAC,oBAJrC,IASP8J,EAAO,aAMPC,EAAyB,SAAgCtJ,EAAMuJ,GACjE,IALqCC,EAKjChB,EAAc,GAAGjZ,QALgBia,EAKGxJ,GAJ7ByJ,OAAO,GAAGC,cAAgBF,EAAI7X,MAAM,GAIA,WA0F3CgY,EAAUJ,EAXM,SAAuBrE,GAEzCuD,EAA8B,WAAWlZ,OAAOiZ,EAAa,MAC7D,IAAI9S,EAAKwP,EAAMxP,GACXkU,EAAY1E,EAAM0E,UACtB,OAAO5V,EAAMnE,cAAc,MAAO,CAChC6F,GAAIA,EACJkU,UAAWA,KApFK,SAAuBC,GACzC,IAAInU,EAAKmU,EAAKnU,GACVkU,EAAYC,EAAKD,UACjBE,EAAeD,EAAKtK,QACpBA,OAA2B,IAAjBuK,EAA0B,GAAKA,EACzCC,EAAcF,EAAKG,OACnBA,OAAyB,IAAhBD,EAAyBV,EAAOU,EACzCE,EAAeJ,EAAKxH,QACpBA,OAA2B,IAAjB4H,EAA0BZ,EAAOY,EAC3CC,EAAeL,EAAKM,QACpBA,OAA2B,IAAjBD,EAA0Bb,EAAOa,EAC3CE,EAAgBP,EAAKvI,SACrBA,OAA6B,IAAlB8I,EAA2Bf,EAAOe,EAC7CC,EAAgBR,EAAKS,SACrBA,OAA6B,IAAlBD,EAA2BhB,EAAOgB,EAC7CE,EAAeV,EAAKxS,QACpBA,OAA2B,IAAjBkT,EAA0BlB,EAAOkB,EAG3ClP,EADwBoN,EAA8B,WAAWlZ,OAAOiZ,EAAa,MACpDnN,SAEjCmP,EAAaxW,EAAM8T,OAAO,MAC1B2C,EAAUzW,EAAM8T,OAAO,MACvB4C,EAAczB,EAAqBkB,GACnCQ,EAAa1B,EAAqBe,GAClCY,EAAc3B,EAAqB5G,GACnCwI,EAAc5B,EAAqB5R,GACnCyT,EAAe7B,EAAqB3H,GACpCyJ,EAAe9B,EAAqBqB,GACxCtW,EAAMgX,iBAAgB,WACpB,GAA0B,MAAtBR,EAAWzC,SAAmB1M,GAA+B,MAAnBoP,EAAQ1C,QAAiB,CACrE,IAAI5B,EAAU9K,EAAS4P,OAAOjL,EAAMT,GACpCiL,EAAWzC,QAAU5B,EACrBA,EAAQ+E,MAAMT,EAAQ1C,SACtB5B,EAAQgF,GAAG,SAAS,WAClB,OAAOT,EAAYvE,MAErBA,EAAQgF,GAAG,SAAUL,GACrB3E,EAAQgF,GAAG,OAAQR,GACnBxE,EAAQgF,GAAG,QAASP,GACpBzE,EAAQgF,GAAG,SAAUJ,GAIrB5E,EAAQgF,GAAG,QAASN,OAGxB,IAAIO,EAAcpX,EAAM8T,OAAOvI,GAsB/B,OArBAvL,EAAMK,WAAU,WACV+W,EAAYrD,SAAWqD,EAAYrD,QAAQqB,iBAAmB7J,EAAQ6J,gBACxEna,QAAQC,KAAK,mFAGf,IAAImc,EAAoBlC,EAAyB5J,GAEH,IAA1CzR,OAAOwV,KAAK+H,GAAmB5d,QAAiBwZ,EAAQoE,EAAmBlC,EAAyBiC,EAAYrD,WAC9GyC,EAAWzC,UACbyC,EAAWzC,QAAQuD,OAAOD,GAC1BD,EAAYrD,QAAUxI,KAGzB,CAACA,IACJvL,EAAMK,WAAU,WACd,OAAO,WACDmW,EAAWzC,SACbyC,EAAWzC,QAAQwD,aAGtB,IACIvX,EAAMnE,cAAc,MAAO,CAChC6F,GAAIA,EACJkU,UAAWA,EACX/B,IAAK4C,KA6BT,OAZAd,EAAQ9E,UAAY,CAClBnP,GAAImP,EAAUkB,OACd6D,UAAW/E,EAAUkB,OACrBzE,SAAUuD,EAAUe,KACpBoE,OAAQnF,EAAUe,KAClBvD,QAASwC,EAAUe,KACnBuE,QAAStF,EAAUe,KACnBvO,QAASwN,EAAUe,KACnBrG,QAASsF,EAAUiB,QAErB6D,EAAQnB,YAAcA,EACtBmB,EAAQ6B,cAAgBxL,EACjB2J,GAGLJ,EAA6B,oBAAXxa,OAQlB0c,EAAuBnC,EAAuB,gBAAiBC,GAK/DpJ,EAAcmJ,EAAuB,OAAQC,GAK7CmC,EAAoBpC,EAAuB,aAAcC,GAKzDoC,EAAoBrC,EAAuB,aAAcC,GAKzDqC,EAAiBtC,EAAuB,UAAWC,GAKnDsC,EAAiBvC,EAAuB,UAAWC,GAKnDuC,EAAcxC,EAAuB,OAAQC,GAK7CwC,EAAmBzC,EAAuB,YAAaC,GAKvDyC,EAA8B1C,EAAuB,uBAAwBC,GACjFzG,EAAQ2I,qBAAuBA,EAC/B3I,EAAQ8I,eAAiBA,EACzB9I,EAAQ3C,YAAcA,EACtB2C,EAAQ6I,kBAAoBA,EAC5B7I,EAAQ4I,kBAAoBA,EAC5B5I,EAAQmJ,SA1TO,SAAkBpC,GAC/B,IAAIqC,EAAgBrC,EAAKpZ,OACrB8O,EAAUsK,EAAKtK,QACfzN,EAAW+X,EAAK/X,SAEhBqa,EAASnY,EAAM8T,QAAO,GAEtBsE,EAAYpY,EAAM8T,QAAO,GACzBuE,EAASrY,EAAMsY,SAAQ,WACzB,OAAOnE,EAAgB+D,KACtB,CAACA,IAQAK,EAAmB3I,EAND5P,EAAMC,UAAS,WACnC,MAAO,CACLxD,OAAQ,KACR4K,SAAU,SAGyC,GACnDsN,EAAM4D,EAAiB,GACvBC,EAAaD,EAAiB,GAE9BE,EAAa7E,EAAYsE,GACzBd,EAAcxD,EAAYrI,GAsD9B,OApDmB,OAAfkN,IACEA,IAAeP,GACjBjd,QAAQC,KAAK,8FAGV+X,EAAQ1H,EAAS6L,IACpBnc,QAAQC,KAAK,+GAIZid,EAAOpE,UACS,SAAfsE,EAAOhE,MACT8D,EAAOpE,SAAU,EACjByE,EAAW,CACT/b,OAAQ4b,EAAO5b,OACf4K,SAAUgR,EAAO5b,OAAO4K,SAASkE,MAIlB,UAAf8M,EAAOhE,MACT8D,EAAOpE,SAAU,EACjBsE,EAAO5d,cAAcuC,MAAK,SAAUP,GAC9BA,GAAU2b,EAAUrE,SAItByE,EAAW,CACT/b,OAAQA,EACR4K,SAAU5K,EAAO4K,SAASkE,UAOpCvL,EAAMK,WAAU,WACd,OAAO,WACL+X,EAAUrE,SAAU,KAErB,IACH/T,EAAMK,WAAU,WACd,IAAIqY,EAAY/D,EAAIlY,OAEfic,GAAcA,EAAU/b,kBAI7B+b,EAAU/b,iBAAiB,CACzBC,KAAM,kBACNC,QAAS,YAEV,CAAC8X,EAAIlY,SACDuD,EAAMnE,cAAcyY,EAAgBqE,SAAU,CACnDnP,MAAOmL,GACN7W,IA4OLgR,EAAQiG,iBAAmBA,EAC3BjG,EAAQ+I,eAAiBA,EACzB/I,EAAQgJ,YAAcA,EACtBhJ,EAAQiJ,iBAAmBA,EAC3BjJ,EAAQkJ,4BAA8BA,EACtClJ,EAAQxH,YArOU,WAIhB,OAH4BmN,EAA8B,uBACrBpN,UAoOvCyH,EAAQ1H,UA3NQ,WAId,OAH6BqN,EAA8B,qBACvBhY,QA0NtC3C,OAAO8e,eAAe9J,EAAS,aAAc,CAC3CtF,OAAO,IAlnBsDqP,CAAQ/J,EAAS,EAAQ,U,qUCE7EgK,EAAS,SAAC,GAAD,IAAG/N,EAAH,EAAGA,QAASC,EAAZ,EAAYA,cAAe/D,EAA3B,EAA2BA,SAA3B,OAClB,qBAAO7J,IAAG,YAAE,CACR6B,QAAS,OACTG,WAAY,SACZwG,QAASqB,EAAW,GAAK,KAEzB,mBAAK7J,IAAG,YAAE,CACNoB,MAAO,GACPD,OAAQ,GACRN,QAAS,EACTgB,QAAS,OACTE,eAAgB,SAChBgE,aAAc,GACdC,gBAAiB2H,EAAU,eAAiB,0BAC5CpF,UAAW,+BACX1C,WAAY,uDACZC,OAAQ+D,EAAW,cAAgB,UACnC,SAAU,CACN7D,gBAAiB2H,EAAU,UAAY,2BAE3C,gBAAiB,CACb3H,gBAAiB2H,EAAU,UAAY,8BAG3C,mBAAK3N,IAAG,YAAE,CACNoB,MAAO,GACPD,OAAQ,GACR4E,aAAc,GACdC,gBAAiB,eACjBuC,UAAW,yBACXS,UAAW2E,EAAU,mBAAqB,oBAC1C9H,WAAY,2GAGpB,qBACIgE,SAAWA,EACX8R,QAAUhO,EACViB,KAAK,WACL5O,IAAG,EAGHkQ,SAAWtC,M,oZAKVgO,EAAe,SAAC,GAAD,IAAGzN,EAAH,EAAGA,QAASE,EAAZ,EAAYA,UAAWC,EAAvB,EAAuBA,YAAalC,EAApC,EAAoCA,MAAOgB,EAA3C,EAA2CA,SAAUD,EAArD,EAAqDA,YAAgB0O,EAArE,6FACxB,mBAAK7b,IAAG,GAMJ,kCACIoM,MAAQA,GAAgB,gBACxBpM,IAAG,EAeHkQ,SAAW,SAAAjM,GAAC,OAAImJ,EAASnJ,EAAEkM,OAAO/D,SAC7ByP,GAEL,sBACIzP,MAAM,gBACNvC,UAAW,EACX7J,IAAG,GAKDmN,GAAe,UAIjBzQ,OAAOwV,KAAK/D,GAAS3I,KAAI,SAAAsW,GAAM,OAC3B,sBACIpW,IAAMoW,EACN1P,MAAwB,QAAhBkC,EAAwBwN,EAAyB,aAAhBxN,EAA6BwN,EAAS,KAAO3N,EAAQ2N,GAAU,IAAM3N,EAAQ2N,GACtH9b,IAAG,GAIa,UAAdqO,EAAwBF,EAAQ2N,GAAwB,aAAdzN,EAA2ByN,EAAS,KAAO3N,EAAQ2N,GAAU,IAAMA,OAM/H,YAAC,IAAD,CAAgB9b,IAAG,YAAE,CACjBkG,YAAa,GACb6V,cAAe,a,u0BAKrBC,EAAgB,SAAC,GAAD,IAAGpN,EAAH,EAAGA,KAAMnM,EAAT,EAASA,MAAOC,EAAhB,EAAgBA,YAAauK,EAA7B,EAA6BA,QAASE,EAAtC,EAAsCA,YAAaf,EAAnD,EAAmDA,MAAOgB,EAA1D,EAA0DA,SAAayO,EAAvE,gGAClB,mBAAK7b,IAAG,GAaJ,mBAAKA,IAAG,GAOFyC,GAEN,mBAAKzC,IAAG,GAMF0C,GAEN,mBAAK1C,IAAG,GAMAiN,EACI,mBAAKjN,IAAG,GAIFiN,GAEN,KAER,iCACI2B,KAAOA,EACPzB,YAAcA,EACdf,MAAQA,EACRpM,IAAG,EAcHkQ,SAAW,SAAAjM,GAAC,OAAImJ,EAASnJ,EAAEkM,OAAO/D,SAC7ByP,OAMRI,EAAO,SAACnI,GAAD,OAChB,YAACkI,EAAD,aACIpN,KAAK,QACAkF,KAIAoI,EAAM,SAACpI,GAAD,OACf,YAACkI,EAAD,aACIpN,KAAK,OACAkF,KAIAqI,EAAQ,SAACrI,GAAD,OACjB,YAACkI,EAAD,aACIpN,KAAK,SACAkF,K,4pBAWAsI,EAAW,SAAC,GAAD,IAAG3Z,EAAH,EAAGA,MAAOC,EAAV,EAAUA,YAAauK,EAAvB,EAAuBA,QAASE,EAAhC,EAAgCA,YAAgB0O,EAAhD,sEACpB,mBAAK7b,IAAG,GAaJ,mBAAKA,IAAG,GAOFyC,GAEN,mBAAKzC,IAAG,GAMF0C,GAEN,mBAAK1C,IAAG,GAMAiN,EACI,mBAAKjN,IAAG,GAIFiN,GAEN,KAER,YAAC2O,EAAD,aACIzO,YAAcA,GACT0O,Q,mFC9PfQ,EAAS,SAAC,GAAD,IAAGC,EAAH,EAAGA,KAAMC,EAAT,EAASA,QAASC,EAAlB,EAAkBA,QAAlB,OACX,mBACIxc,IAAG,YAAE,CACDa,QAAS,YACTkF,aAAcyW,EAAU,EAAI,EAC5BnX,SAAU,OACVC,WAAY,IACZU,gBAAiBwW,EAAU,0BAA4B,OACvD5b,MAAO,YACPiF,WAAY,4CACZC,OAAQ,UACR,SAAU,CACNlF,MAAO,kBAGfqF,QAAUsW,GAERD,I,q3BAIK,gBAAuE,IAApE7Z,EAAmE,EAAnEA,MAAO+E,EAA4D,EAA5DA,QAASiV,EAAmD,EAAnDA,OAAQhV,EAA2C,EAA3CA,UAAWiV,EAAgC,EAAhCA,WAAY/U,EAAoB,EAApBA,cACvDgV,EAAU/Z,IAAM8T,OAAO,MACvBkG,EAASha,IAAM8T,OAAO,MAO5B,OALA9T,IAAMK,WAAU,WACZ0Z,EAAQhG,QAAQhV,MAAM6G,QAAU,EAChCoU,EAAOjG,QAAQhV,MAAMqH,UAAY,aAClC,IAGC,mBACIyN,IAAMkG,EACNhb,MAAO,CACH6G,QAAS,GAEbxI,IAAG,GAmBH,mBACIyW,IAAMmG,EACNjb,MAAO,CACHqH,UAAW,cAEfhJ,IAAG,GAQH,mBAAKA,IAAG,GAGJ,mBAAKA,IAAG,GAKFyC,GAEN,uBAAO+E,IAEX,mBAAKxH,IAAG,GAUJ,YAACqc,EAAD,CAAQC,KAAOI,GAAc,KAAOH,QAAU5U,IAC9C,YAAC0U,EAAD,CAAQC,KAAOG,GAAU,MAAQF,QAAU9U,EAAY+U,SAAU,S,oCC7FrF,kCAAO,IAAMjb,EAAa,CACtBC,MAAO,EACPC,MAAO,EACPob,OAAQ,EACRC,OAAQ,I,mBCJZnJ,EAAOjC,QAAU","file":"component---src-pages-index-jsx-54b2f20435f45214cceb.js","sourcesContent":["function _toConsumableArray(arr) {\n return _arrayWithoutHoles(arr) || _iterableToArray(arr) || _nonIterableSpread();\n}\n\nfunction _arrayWithoutHoles(arr) {\n if (Array.isArray(arr)) {\n for (var i = 0, arr2 = new Array(arr.length); i < arr.length; i++) {\n arr2[i] = arr[i];\n }\n\n return arr2;\n }\n}\n\nfunction _iterableToArray(iter) {\n if (Symbol.iterator in Object(iter) || Object.prototype.toString.call(iter) === \"[object Arguments]\") return Array.from(iter);\n}\n\nfunction _nonIterableSpread() {\n throw new TypeError(\"Invalid attempt to spread non-iterable instance\");\n}\n\nvar V3_URL = 'https://js.stripe.com/v3';\nvar V3_URL_REGEX = /^https:\\/\\/js\\.stripe\\.com\\/v3\\/?(\\?.*)?$/;\nvar EXISTING_SCRIPT_MESSAGE = 'loadStripe.setLoadParameters was called but an existing Stripe.js script already exists in the document; existing script parameters will be used';\n\nvar findScript = function findScript() {\n var scripts = document.querySelectorAll(\"script[src^=\\\"\".concat(V3_URL, \"\\\"]\"));\n\n for (var i = 0; i < scripts.length; i++) {\n var script = scripts[i];\n\n if (!V3_URL_REGEX.test(script.src)) {\n continue;\n }\n\n return script;\n }\n\n return null;\n};\n\nvar injectScript = function injectScript(params) {\n var queryString = params && !params.advancedFraudSignals ? '?advancedFraudSignals=false' : '';\n var script = document.createElement('script');\n script.src = \"\".concat(V3_URL).concat(queryString);\n var headOrBody = document.head || document.body;\n\n if (!headOrBody) {\n throw new Error('Expected document.body not to be null. Stripe.js requires a <body> element.');\n }\n\n headOrBody.appendChild(script);\n return script;\n};\n\nvar registerWrapper = function registerWrapper(stripe) {\n if (!stripe || !stripe._registerWrapper) {\n return;\n }\n\n stripe._registerWrapper({\n name: 'stripe-js',\n version: \"1.8.0\"\n });\n};\n\nvar stripePromise = null;\n\nvar loadScript = function loadScript(params) {\n // Ensure that we only attempt to load Stripe.js at most once\n if (stripePromise !== null) {\n return stripePromise;\n }\n\n stripePromise = new Promise(function (resolve, reject) {\n if (typeof window === 'undefined') {\n // Resolve to null when imported server side. This makes the module\n // safe to import in an isomorphic code base.\n resolve(null);\n return;\n }\n\n if (window.Stripe && params) {\n console.warn(EXISTING_SCRIPT_MESSAGE);\n }\n\n if (window.Stripe) {\n resolve(window.Stripe);\n return;\n }\n\n try {\n var script = findScript();\n\n if (script && params) {\n console.warn(EXISTING_SCRIPT_MESSAGE);\n } else if (!script) {\n script = injectScript(params);\n }\n\n script.addEventListener('load', function () {\n if (window.Stripe) {\n resolve(window.Stripe);\n } else {\n reject(new Error('Stripe.js not available'));\n }\n });\n script.addEventListener('error', function () {\n reject(new Error('Failed to load Stripe.js'));\n });\n } catch (error) {\n reject(error);\n return;\n }\n });\n return stripePromise;\n};\n\nvar initStripe = function initStripe(maybeStripe, args) {\n if (maybeStripe === null) {\n return null;\n }\n\n var stripe = maybeStripe.apply(void 0, _toConsumableArray(args));\n registerWrapper(stripe);\n return stripe;\n}; // own script injection.\n\n\nvar stripePromise$1 = Promise.resolve().then(function () {\n return loadScript(null);\n});\nvar loadCalled = false;\nstripePromise$1[\"catch\"](function (err) {\n if (!loadCalled) {\n console.warn(err);\n }\n});\n\nvar loadStripe = function loadStripe() {\n for (var _len = arguments.length, args = new Array(_len), _key = 0; _key < _len; _key++) {\n args[_key] = arguments[_key];\n }\n\n loadCalled = true;\n return stripePromise$1.then(function (maybeStripe) {\n return initStripe(maybeStripe, args);\n });\n};\n\nexport { loadStripe };","import React from \"react\";\n\nimport AbstractFooter from \"./AbstractFooter\";\n\nexport default () => (\n <AbstractFooter>\n <div>\n <span>Powered by</span>\n \n <span css={{ fontWeight: 500 }}>glee</span>\n </div>\n </AbstractFooter>\n);\n","import React from \"react\";\nimport { Link } from \"gatsby\";\n\nimport AbstractHeader from \"./AbstractHeader\";\nimport User from \"../User\";\nimport Logo from \"../Logo\";\nimport isBrowser from \"../../utils/isBrowser\";\nimport { Permission } from \"../../utils/permissions\";\n\nconst isActive = (path) => {\n if (!isBrowser()) return;\n const location = window.location.pathname.endsWith(\"/\") ? window.location.pathname.slice(0, -1) : window.location.pathname;\n path = path.endsWith(\"/\") ? path.slice(0, -1) : path;\n return location.startsWith(path);\n};\n\nconst HeaderLink = ({ children, to }) => (\n <Link\n to={ to }\n css={{\n color: isActive(to) ? \"var(--green)\" : \"grey\",\n padding: 15,\n }}\n >\n { children }\n </Link>\n);\n\nexport default ({ code, name, icon, permissions }) => (\n <>\n <AbstractHeader>\n {\n code\n ? <Link\n to={ \"/\" + code }\n css={{\n display: \"flex\",\n alignItems: \"center\",\n }}\n >\n {\n icon\n ? <img\n alt=\"Logo\"\n src={ icon }\n height={ 64 }\n width={ 64 }\n css={{\n padding: 15,\n height: \"100%\",\n }}\n />\n : null\n }\n {\n name\n ? <div css={{\n fontWeight: 500,\n }}>\n { name }\n </div>\n : null\n }\n </Link>\n : <Link\n to=\"/\"\n css={{\n height: \"100%\",\n padding: 15,\n display: \"flex\",\n alignItems: \"center\",\n }}\n >\n <Logo />\n </Link>\n }\n\n <User />\n </AbstractHeader>\n\n {\n code\n ? <div css={{\n borderBottom: \"1px solid rgba(200, 200, 200, .2)\",\n }}>\n <div css={{\n padding: \"0 15px\",\n height: \"100%\",\n maxWidth: 1000,\n margin: \"0 auto\",\n display: \"flex\",\n alignItems: \"center\",\n fontSize: \".8em\",\n textTransform: \"uppercase\",\n fontWeight: 500,\n overflowX: \"auto\",\n backgroundColor: \"var(--dark)\",\n }}>\n <HeaderLink to={ \"/\" + code + \"/feedback\" }>\n Feedback\n </HeaderLink>\n {\n permissions\n ? <HeaderLink to={ \"/\" + code + \"/team\" }>\n Team\n </HeaderLink>\n : null\n }\n {\n permissions === Permission.OWNER || permissions === Permission.ADMIN\n ? <HeaderLink to={ \"/\" + code + \"/settings\" }>\n Settings\n </HeaderLink>\n : null\n }\n </div>\n </div>\n : null\n }\n </>\n);\n","import React from \"react\";\nimport { connect } from \"react-redux\";\nimport { Link } from \"gatsby\";\nimport { GiProcessor } from \"react-icons/gi\";\n\nimport Footer from \"../../components/Footer/OrgFooter\";\nimport Header from \"../../components/Header/OrgHeader\";\nimport Helmet from \"../../components/Helmet\";\nimport { updateMe, updateOrg } from \"../../state/global\";\nimport * as sessions from \"../../utils/sessions\";\nimport isBrowser from \"../../utils/isBrowser\";\n\nimport \"../base.css\";\n\nconst Container = ({ children }) => (\n <div style={{\n minHeight: \"50vh\",\n display: \"flex\",\n flexDirection: \"column\",\n justifyContent: \"center\",\n alignItems: \"center\",\n }}>\n { children }\n </div>\n);\n\nconst OrgLayout = ({ children, me, updateMe, org, updateOrg, title, description, image }) => {\n const [ success, setSuccess ] = React.useState(undefined);\n\n React.useEffect(() => {\n const profile = sessions.getSessionValue(sessions.PROFILE_KEY);\n\n if (me && me.token) {\n } else {\n if (profile && profile.token) {\n updateMe(profile);\n } else {\n }\n }\n\n if (profile && profile.token && !(me && me.token)) return;\n\n if (!isBrowser()) return;\n\n const code = window.location.pathname.split(\"/\").filter(path => path)[0];\n\n window.fetch(process.env.API_URL + \"/orgs/code/\" + code, {\n headers: {\n Accept: \"application/json\",\n Authorization: me.token,\n },\n }).then(res => {\n if (res.ok) return res.json();\n throw new Error(res.statusText);\n }).then(org => {\n setSuccess(true);\n updateOrg(org);\n }).catch((e) => {\n console.error(e);\n setSuccess(false);\n });\n\n return () => {\n updateOrg({});\n };\n }, [ me, updateMe, updateOrg ]);\n\n return (\n <div>\n <Helmet\n title={ title || org.name }\n description={ description }\n image={ image || org.icon }\n />\n <Header\n code={ org.code }\n name={ org.name }\n icon={ org.icon }\n permissions={ org.permissions }\n />\n {\n success === true\n ? org.permissions || org.visible\n ? <main\n css={{\n margin: \"0 auto\",\n padding: 15,\n display: \"flex\",\n flexDirection: \"column\",\n minHeight: \"calc(100vh)\",\n maxWidth: 1000,\n }}\n >\n { children }\n </main>\n : <Container>\n <div>Shh! This is a private place.</div>\n <div css={{ marginTop: 5, color: \"lightgrey\", fontSize: \".9em\" }}>You're not supposed to be here.</div>\n <div css={{\n marginTop: 20,\n }}>\n <Link to={ isBrowser() ? \"/authorize?path=\" + window.location.pathname : \"/authorize\" }>\n <button>\n But, I'm a member here!\n </button>\n </Link>\n </div>\n </Container>\n : success === false\n ? <Container>\n <div>There's nothing here, yet.</div>\n <div css={{\n marginTop: 20,\n }}>\n <Link to=\"/\">\n <button>\n Build something amazing!\n </button>\n </Link>\n </div>\n </Container>\n : <Container>\n <div>\n <GiProcessor size={ 48 } />\n </div>\n <div css={{\n marginTop: 20,\n }}>\n Crunching Data\n </div>\n </Container>\n }\n <Footer />\n </div>\n );\n};\n\nexport default connect(\n state => ({ me: state.global.me, org: state.global.org }),\n dispatch => ({ updateMe: me => dispatch(updateMe(me)), updateOrg: org => dispatch(updateOrg(org)) }),\n)(OrgLayout);\n","export const Permission = {\n OWNER: 1 << 0,\n ADMIN: 1 << 1,\n MEMBER: 1 << 2,\n AUTHOR: 1 << 3,\n};\n\nexport const Status = {\n OPEN: 1,\n CLOSE: 2,\n};\n","import React from \"react\";\nimport { IoIosArrowUp, IoIosArrowDown } from \"react-icons/io\";\nimport { FiTrash2, FiRepeat, FiXCircle } from \"react-icons/fi\";\n\nimport { Status } from \"../../utils/constants\";\n\nimport avatarDefault from \"../../images/avatar-default.png\";\n\nexport default ({ id, title, details, author, createdAt, closedAt, upvotes, downvotes, upvoted, downvoted, permissions, handleStatus, handleVote, handleDelete, authenticated }) => {\n return (\n <div>\n <div\n css={{\n width: \"100%\",\n padding: 15,\n marginBottom: 25,\n display: \"flex\",\n flexDirection: \"column\",\n backgroundColor: \"rgba(100, 100, 100, .1)\",\n borderRadius: 5,\n border: \"1px solid rgba(100, 100, 100, .3)\",\n }}\n >\n <div\n css={{\n fontWeight: 500,\n marginBottom: 10,\n }}\n >\n { title }\n </div>\n\n <div\n title={ closedAt ? \"Closed on \" + closedAt.toLocaleString() : null }\n css={{\n display: \"flex\",\n marginBottom: 10,\n fontSize: \".8em\",\n fontWeight: 500,\n color: closedAt ? \"var(--red)\" : \"var(--blue)\",\n textTransform: \"uppercase\",\n }}\n >\n { closedAt ? \"Closed\" : \"Open\" }\n </div>\n\n {\n details && details.length\n ? <div\n css={{\n color: \"lightgrey\",\n fontSize: \".9em\",\n }}\n >\n {\n details.split('\\n').map((item, key) =>\n <span key={ key }>\n { item }\n <br/>\n </span>\n )\n }\n </div>\n : null\n }\n </div>\n\n <div css={{\n marginBottom: 25,\n display: \"flex\",\n flexWrap: \"wrap\",\n justifyContent: \"space-between\",\n fontSize: \".9em\",\n }}>\n <div css={{\n display: \"flex\",\n alignItems: \"center\",\n }}>\n <div\n css={{\n padding: 5,\n marginRight: 5,\n display: \"flex\",\n alignItems: \"center\",\n justifyContent: \"center\",\n textAlign: \"center\",\n color: upvoted ? \"var(--green)\" : \"inherit\",\n transition: \"background-color var(--transition-default-time) ease-in-out, color var(--transition-default-time) ease-in-out\",\n cursor: authenticated ? \"pointer\" : \"not-allowed\",\n \":hover\": {\n borderRadius: 3,\n backgroundColor: \"rgba(100, 100, 100, .2)\",\n color: \"var(--green)\",\n },\n }}\n onClick={ () => authenticated ? upvoted ? handleVote(0) : handleVote(1) : null }\n >\n <IoIosArrowUp />\n </div>\n <div css={{\n textAlign: \"center\",\n }}>\n { (upvotes || 0) - (downvotes || 0) }\n </div>\n <div\n css={{\n padding: 5,\n marginLeft: 5,\n display: \"flex\",\n alignItems: \"center\",\n justifyContent: \"center\",\n textAlign: \"center\",\n color: downvoted ? \"var(--red)\" : \"inherit\",\n transition: \"background-color var(--transition-default-time) ease-in-out, color var(--transition-default-time) ease-in-out\",\n cursor: authenticated ? \"pointer\" : \"not-allowed\",\n \":hover\": {\n borderRadius: 3,\n backgroundColor: \"rgba(100, 100, 100, .2)\",\n color: \"var(--red)\",\n },\n }}\n onClick={ () => authenticated ? downvoted ? handleVote(0) : handleVote(-1) : null }\n >\n <IoIosArrowDown />\n </div>\n </div>\n\n {\n permissions\n ? <div css={{\n display: \"flex\",\n alignItems: \"center\",\n }}>\n <div\n css={{\n padding: 5,\n display: \"flex\",\n alignItems: \"center\",\n cursor: \"pointer\",\n transition: \"background-color var(--transition-default-time) ease-in-out, color var(--transition-default-time) ease-in-out\",\n \":hover\": {\n borderRadius: 3,\n backgroundColor: \"rgba(100, 100, 100, .2)\",\n color: closedAt ? \"var(--green)\" : \"var(--orange)\",\n },\n }}\n onClick={ () => closedAt ? handleStatus(Status.OPEN) : handleStatus(Status.CLOSE) }\n >\n {\n closedAt\n ? <FiRepeat />\n : <FiXCircle />\n }\n <span css={{ marginLeft: 5 }}>\n {\n closedAt\n ? \"Reopen\"\n : \"Close\"\n }\n </span>\n </div>\n\n <div\n css={{\n padding: 5,\n display: \"flex\",\n alignItems: \"center\",\n cursor: \"pointer\",\n transition: \"background-color var(--transition-default-time) ease-in-out, color var(--transition-default-time) ease-in-out\",\n \":hover\": {\n borderRadius: 3,\n backgroundColor: \"rgba(100, 100, 100, .2)\",\n color: \"var(--red)\",\n },\n }}\n onClick={ handleDelete }\n >\n <FiTrash2 />\n <span css={{ marginLeft: 5 }}>\n Delete\n </span>\n </div>\n </div>\n : null\n }\n </div>\n\n <div css={{\n display: \"flex\",\n alignItems: \"center\",\n justifyContent: \"space-between\",\n }}>\n <div css={{\n display: \"flex\",\n alignItems: \"center\",\n }}>\n <img\n alt=\"Avatar\"\n src={\n author && author.github\n ? \"https://avatars2.githubusercontent.com/u/\" + author.github + \"?size=128\"\n : avatarDefault\n }\n width={ 42 }\n height={ 42 }\n css={{\n marginRight: 15,\n borderRadius: 3,\n }}\n />\n <div css={{\n color: \"lightgrey\",\n fontSize: \".8em\",\n }}>\n <div css={{\n color: \"darkgrey\",\n fontSize: \".8em\",\n }}>\n Posted by\n </div>\n <div>\n { author ? author.name : \"Anonymous\" }\n </div>\n </div>\n </div>\n\n\n <div css={{\n textAlign: \"right\",\n color: \"lightgrey\",\n fontSize: \".8em\",\n }}>\n <div css={{\n color: \"darkgrey\",\n fontSize: \".8em\",\n }}>\n Posted on\n </div>\n <div>{ createdAt.toLocaleString() }</div>\n </div>\n </div>\n </div>\n );\n};\n","import React from \"react\";\nimport { connect } from \"react-redux\";\nimport { navigate } from \"gatsby\";\n\nimport Helmet from \"../components/Helmet\";\nimport ConfirmDialog from \"../components/Dialog/ConfirmDialog\";\nimport Loader from \"../components/Loader\";\nimport Suggestion from \"../components/Suggestions/Suggestion\";\nimport isBrowser from \"../utils/isBrowser\";\n\nconst Feedback = ({ id, me, org }) => {\n const [ processing, setProcessing ] = React.useState(false);\n const [ success, setSuccess ] = React.useState(undefined);\n\n const [ feedback, setFeedback ] = React.useState({});\n const [ confirmMessage, setConfirmMessage ] = React.useState(\"\");\n\n React.useEffect(() => {\n if (!org || !org._id) return;\n\n if (!isBrowser()) return;\n\n window.fetch(process.env.API_URL + \"/orgs/\" + org._id + \"/feedback/\" + id, {\n headers: {\n Accept: \"application/json\",\n Authorization: me.token,\n },\n }).then(res => {\n if (res.ok) return res.json();\n throw new Error(res.statusText);\n }).then(feedback => {\n setSuccess(true);\n setFeedback(feedback);\n }).catch((e) => {\n console.error(e);\n setSuccess(false);\n });\n }, [ id, me.token, org ]);\n\n const updateStatus = (status) => {\n if (processing) return;\n\n setProcessing(true);\n\n if (!isBrowser()) return;\n\n window.fetch(process.env.API_URL + \"/orgs/\" + org._id + \"/feedback/\" + id + \"/status\", {\n method: \"PATCH\",\n headers: {\n \"Accept\": \"application/json\",\n \"Content-Type\": \"application/json\",\n \"Authorization\": me.token,\n },\n body: JSON.stringify({\n status,\n }),\n }).then(res => {\n if (res.ok) return res.json();\n throw new Error(res.statusText);\n }).then(updatedFeedback => {\n setFeedback({\n ...feedback,\n ...updatedFeedback,\n });\n setProcessing(false);\n }).catch((e) => {\n console.error(e);\n setProcessing(false);\n });\n };\n\n const updateVote = (vote) => {\n if (processing) return;\n\n setProcessing(true);\n\n if (!isBrowser()) return;\n\n window.fetch(process.env.API_URL + \"/orgs/\" + org._id + \"/feedback/\" + id + \"/vote?user=true\", {\n method: \"PATCH\",\n headers: {\n \"Accept\": \"application/json\",\n \"Content-Type\": \"application/json\",\n \"Authorization\": me.token,\n },\n body: JSON.stringify({\n vote,\n }),\n }).then(res => {\n if (res.ok) return res.json();\n throw new Error(res.statusText);\n }).then(updatedFeedback => {\n setFeedback({\n ...feedback,\n ...updatedFeedback,\n });\n setProcessing(false);\n }).catch((e) => {\n console.error(e);\n setProcessing(false);\n });\n };\n\n const deleteFeedback = () => {\n if (processing) return;\n\n setProcessing(true);\n setConfirmMessage(\"\");\n\n if (!isBrowser()) return;\n\n window.fetch(process.env.API_URL + \"/orgs/\" + org._id + \"/feedback/\" + id, {\n method: \"DELETE\",\n headers: {\n \"Accept\": \"application/json\",\n \"Authorization\": me.token,\n },\n }).then(res => {\n if (res.ok) return res.json();\n throw new Error(res.statusText);\n }).then(() => {\n setProcessing(false);\n navigate(\"/\" + org.code + \"/feedback\");\n }).catch((e) => {\n console.error(e);\n setProcessing(false);\n });\n };\n\n return (\n <div css={{\n padding: 20,\n display: \"flex\",\n flexDirection: \"column\",\n }}>\n <Helmet\n title={ feedback.title + \" - Feedback\" }\n description={ feedback.details }\n />\n {\n success === true\n ? <Suggestion\n key={ feedback._id }\n id={ feedback._id }\n title={ feedback.title }\n details={ feedback.details }\n upvotes={ feedback.upvotes && feedback.upvotes instanceof Array && feedback.upvotes.length }\n downvotes={ feedback.downvotes && feedback.downvotes instanceof Array && feedback.downvotes.length }\n upvoted={ me && me.id && feedback.upvotes && feedback.upvotes instanceof Array && feedback.upvotes.includes(me.id.toString()) }\n downvoted={ me && me.id && feedback.downvotes && feedback.downvotes instanceof Array && feedback.downvotes.includes(me.id.toString()) }\n author={ feedback.user }\n createdAt={ new Date(feedback.createdAt) }\n closedAt={ feedback.closedAt ? new Date(feedback.closedAt) : null }\n permissions={ feedback.permissions }\n handleStatus={ updateStatus }\n handleDelete={ () => setConfirmMessage(\"Are you sure you want to delete this feedback? This can't be undone.\") }\n handleVote={ updateVote }\n authenticated={ me && me.token }\n />\n : success === false\n ? <div css={{ fontSize: \".8em\", color: \"darkgrey\" }}>Oh, crap! Our servers having some issues. Please try again.</div>\n : <div css={{ textAlign: \"center\" }}><Loader /></div>\n }\n {\n confirmMessage\n ? <ConfirmDialog\n title=\"Delete Feedback\"\n message={ confirmMessage }\n okHandler={ deleteFeedback }\n cancelHandler={ () => setConfirmMessage(\"\") }\n />\n : null\n }\n </div>\n );\n};\n\nexport default connect(\n state => ({ me: state.global.me, org: state.global.org }),\n null,\n)(Feedback);\n","const plans = [\n {\n id: process.env.API_URL.startsWith(\"http://localhost\") ? \"price_1Gz3DFKaJqjzvfOK80MiFjIp\" : \"price_1Gz2r4KaJqjzvfOKdnPFjgKr\",\n name: \"Free\",\n description: \"Ideal for experimenting with Glee and for small side projects.\",\n price: 0,\n available: true,\n benefits: {\n unlimited: [],\n available: [\n \"1 Team Member\",\n [ \"Private Visibility\", \"Organization is only visible to you.\" ],\n [ \"Random Organization Code\", \"A random unique code will be autogenerated for the organization.\" ],\n \"Community Support\",\n ],\n unavailable: [],\n },\n },\n {\n id: process.env.API_URL.startsWith(\"http://localhost\") ? \"price_1Gz3E7KaJqjzvfOK7m0wTqpe\" : \"price_1GuzVdKaJqjzvfOKxmYkak6w\",\n name: \"Hobby\",\n description: \"Perfect for small scale personal projects and hobby apps.\",\n price: 5,\n available: true,\n benefits: {\n prev: \"Free\",\n unlimited: [\n \"Unlimited Users\",\n ],\n available: [\n \"10 Team Members\",\n [ \"Public Visibility\", \"Change visibility of the organization so everyone can see it.\" ],\n [ \"Discord Integration\", \"Send notification to a Discord channel when a feedback is posted.\" ],\n [ \"~Slack Integration\", \"Send notification to a Slack channel when a feedback is posted.\" ],\n [ \"Custom Organization Code\", \"Set custom unique code for the organization.\" ],\n ],\n unavailable: [],\n },\n },\n {\n id: process.env.API_URL.startsWith(\"http://localhost\") ? \"price_1Gz3EhKaJqjzvfOKLTuplguI\" : \"price_1GuzV2KaJqjzvfOK8ucpT0nG\",\n name: \"Standard\",\n description: \"Enhanced features for powering your professional applications.\",\n price: 15,\n available: false,\n benefits: {\n prev: \"Hobby\",\n unlimited: [\n ],\n available: [\n \"50 Team Members\",\n \"Feedback Status\",\n \"Feedback Categories\",\n \"GitHub Integration\",\n \"Custom Subdomain\",\n ],\n unavailable: [],\n },\n },\n {\n id: process.env.API_URL.startsWith(\"http://localhost\") ? \"price_1Gz3FDKaJqjzvfOK1AjEZ9qM\" : \"price_1Gz2pZKaJqjzvfOKzus7NuCS\",\n name: \"Premium\",\n description: \"Superior features that're most important for your business needs.\",\n price: 30,\n available: false,\n benefits: {\n prev: \"Standard\",\n unlimited: [\n ],\n available: [\n \"100 Team Members\",\n \"Feedback Roadmap\",\n \"Webhook Integration\",\n \"Statistics Dashboard\",\n \"Custom Domain\",\n ],\n unavailable: [],\n },\n },\n];\n\nconst getPlan = (id) => {\n return plans.find(plan => plan.id === id);\n};\n\nexport {\n plans,\n getPlan,\n}\n","import React from \"react\";\nimport { Link, navigate } from \"gatsby\";\nimport { IoIosInfinite, IoIosInformationCircleOutline } from \"react-icons/io\";\nimport { FiArrowLeft, FiCheck, FiX } from \"react-icons/fi\";\n\nimport isBrowser from \"../utils/isBrowser\";\nimport { plans } from \"../utils/plans\";\n\nconst Plan = ({ ...plan }) => (\n <div css={{\n width: 250,\n minWidth: 250,\n margin: 25,\n display: \"flex\",\n flexDirection: \"column\",\n justifyContent: \"space-between\",\n borderRadius: 3,\n backgroundColor: \"rgba(100, 100, 100, .1)\",\n boxShadow: plan.available ? \"0px 10px 30px -10px black\" : \"0px 5px 15px -5px black\",\n }}>\n <div css={{\n height: 100,\n padding: 15,\n backgroundColor: \"rgba(100, 100, 100, .1)\",\n borderRadius: 3,\n opacity: plan.available ? 1 : .3,\n }}>\n <div css={{\n fontWeight: 500,\n marginBottom: 5,\n }}>\n { plan.name }\n </div>\n <div css={{\n fontSize: \".8em\",\n color: \"darkgrey\",\n }}>\n { plan.description }\n </div>\n </div>\n\n <div css={{\n padding: 25,\n fontSize: \".8em\",\n opacity: plan.available ? 1 : .3,\n }}>\n {\n plan.benefits.prev\n ? <div css={{\n display: \"flex\",\n marginBottom: 5,\n textAlign: \"left\",\n }}>\n <FiArrowLeft css={{ minWidth: 15, marginRight: 10, color: \"var(--green)\" }} />\n <div>Everything in { plan.benefits.prev }</div>\n </div>\n : null\n }\n {\n plan.benefits.unlimited\n ? plan.benefits.unlimited.map((benefit, i) =>\n <div key={ i } title={ (benefit instanceof Array ? benefit[0] : benefit).startsWith(\"~\") ? \"Coming Soon\" : \"\" } css={{\n display: \"flex\",\n marginBottom: 5,\n textAlign: \"left\",\n opacity: (benefit instanceof Array ? benefit[0] : benefit).startsWith(\"~\") ? .5 : 1,\n }}>\n <IoIosInfinite css={{ minWidth: 15, marginRight: 10, color: \"var(--blue)\" }} />\n <div>{ (benefit instanceof Array ? benefit[0] : benefit).startsWith(\"~\") ? (benefit instanceof Array ? benefit[0] : benefit).slice(1) : (benefit instanceof Array ? benefit[0] : benefit) }</div>\n </div>\n )\n : null\n }\n {\n plan.benefits.available\n ? plan.benefits.available.map((benefit, i) =>\n <div key={ i } title={ (benefit instanceof Array ? benefit[0] : benefit).startsWith(\"~\") ? \"Coming Soon\" : \"\" } css={{\n display: \"flex\",\n marginBottom: 5,\n textAlign: \"left\",\n opacity: (benefit instanceof Array ? benefit[0] : benefit).startsWith(\"~\") ? .5 : 1,\n }}>\n <FiCheck css={{ minWidth: 15, marginRight: 10, color: \"var(--green)\" }} />\n <div>\n { (benefit instanceof Array ? benefit[0] : benefit).startsWith(\"~\") ? (benefit instanceof Array ? benefit[0] : benefit).slice(1) : (benefit instanceof Array ? benefit[0] : benefit) }\n {\n benefit instanceof Array && benefit.length > 1\n ? <IoIosInformationCircleOutline css={{ marginLeft: 5, color: \"var(--blue)\" }} title={ benefit[1] } />\n : null\n }\n </div>\n </div>\n )\n : null\n }\n {\n plan.benefits.unavailable\n ? plan.benefits.unavailable.map((benefit, i) =>\n <div key={ i } title={ (benefit instanceof Array ? benefit[0] : benefit).startsWith(\"~\") ? \"Coming Soon\" : \"\" } css={{\n display: \"flex\",\n marginBottom: 5,\n textAlign: \"left\",\n opacity: (benefit instanceof Array ? benefit[0] : benefit).startsWith(\"~\") ? .5 : 1,\n }}>\n <FiX css={{ minWidth: 15, marginRight: 10, color: \"var(--red)\" }} />\n <div>{ (benefit instanceof Array ? benefit[0] : benefit).startsWith(\"~\") ? (benefit instanceof Array ? benefit[0] : benefit).slice(1) : (benefit instanceof Array ? benefit[0] : benefit) }</div>\n </div>\n )\n : null\n }\n </div>\n\n <div css={{\n padding: 20,\n fontSize: \".8em\",\n fontWeight: 500,\n fontFamily: \"monospace\",\n borderRadius: 3,\n backgroundColor: \"rgba(100, 100, 100, .1)\",\n color: \"var(--green)\",\n }}>\n {\n plan.available\n ? plan.price === 0\n ? \"Free\"\n : \"$\" + plan.price + \" / mo.\"\n : \"Coming Soon\"\n }\n </div>\n </div>\n);\n\nconst Bubble = ({ size = 10, top = 0, left = 0 }) => (\n <div css={{\n top,\n left,\n position: \"absolute\",\n padding: size,\n borderRadius: Math.random() > 0.5 ? \"50%\" : 0,\n transform: Math.random() > 0.5 ? \"rotateZ(30deg)\" : \"rotateZ(120deg)\",\n backgroundColor: \"var(--green)\",\n }} />\n);\n\nconst DummyFeedback = ({ closed }) => (\n <div css={{\n margin: 20,\n }}>\n <div css={{\n width: \"80%\",\n marginBottom: 5,\n padding: 8,\n borderRadius: 3,\n backgroundColor: \"rgba(200, 200, 200, .3)\",\n }} />\n <div css={{\n width: 100,\n marginBottom: 5,\n padding: 8,\n borderRadius: 3,\n backgroundColor: closed ? \"var(--red)\" : \"var(--blue)\",\n }} />\n <div css={{\n width: \"100%\",\n marginBottom: 5,\n padding: 8,\n borderRadius: 3,\n backgroundColor: \"rgba(200, 200, 200, .2)\",\n }} />\n <div css={{\n width: \"50%\",\n marginBottom: 5,\n padding: 8,\n borderRadius: 3,\n backgroundColor: \"rgba(200, 200, 200, .2)\",\n }} />\n </div>\n);\n\nconst DummyApp = () => (\n <div css={{\n position: \"relative\",\n display: \"flex\",\n borderRadius: 13,\n backgroundColor: \"rgba(100, 100, 100, .3)\",\n boxShadow: \"0px 15px 50px -10px black\",\n }}>\n <div\n css={{\n position: \"absolute\",\n top: \"50%\",\n left: \"50%\",\n transform: \"translateX(-50%) translateY(-50%)\",\n backgroundColor: \"var(--green)\",\n color: \"black\",\n padding: \"10px 20px\",\n borderRadius: \"50px\",\n fontWeight: 500,\n boxShadow: \"0px 0px 30px -10px rgba(0, 0, 0, 1)\",\n border: \"1px solid var(--green)\",\n cursor: \"pointer\",\n transition: \"border var(--transition-default-time) ease-out\",\n \":hover\": {\n border: \"3px solid var(--green)\",\n },\n \":active\": {\n border: \"2px solid var(--green)\",\n },\n }}\n onClick={ () => navigate(\"/glee\") }\n >\n See how it works\n </div>\n\n <div css={{\n flex: 2,\n margin: 30,\n }}>\n <DummyFeedback />\n <DummyFeedback closed={ true } />\n <DummyFeedback />\n <DummyFeedback />\n </div>\n\n <div css={{\n flex: 1,\n marginTop: 50,\n borderTopLeftRadius: 5,\n borderBottomRightRadius: 13,\n backgroundColor: \"rgba(100, 100, 100, .5)\",\n }}>\n <div css={{\n height: 30,\n margin: \"20px 20px 10px\",\n padding: 8,\n borderRadius: 3,\n backgroundColor: \"rgba(0, 0, 0, .5)\",\n }} />\n <div css={{\n height: 100,\n margin: \"10px 20px\",\n padding: 8,\n borderRadius: 3,\n backgroundColor: \"rgba(0, 0, 0, .5)\",\n }} />\n <div css={{\n height: 30,\n margin: \"10px 20px\",\n padding: 8,\n borderRadius: 3,\n backgroundColor: \"rgba(20, 20, 20, .5)\",\n }} />\n </div>\n </div>\n);\n\nexport default () => {\n const bubbles = [\n { size: 3, top: \"20%\", left: \"70%\" },\n { size: 3, top: \"90%\", left: \"-20%\" },\n { size: 6, top: \"40%\", left: \"10%\" },\n { size: 6, top: \"90%\", left: \"80%\" },\n { size: 9, top: 0, left: 0 },\n { size: 9, top: \"40%\", left: \"120%\" },\n { size: 13, top: \"80%\", left: \"30%\" },\n ];\n\n return (\n <div css={{\n padding: 20,\n display: \"flex\",\n flexDirection: \"column\",\n }}>\n <div css={{\n position: \"relative\",\n maxWidth: 720,\n minHeight: \"50vh\",\n margin: \"0 auto\",\n display: \"flex\",\n flexDirection: \"column\",\n alignItems: \"center\",\n justifyContent: \"center\",\n textAlign: \"center\",\n }}>\n {\n bubbles.map((bubble, i) =>\n <Bubble size={ bubble.size } top={ bubble.top } left={ bubble.left } />\n )\n }\n <div css={{\n fontSize: \"2.5em\",\n fontWeight: 700,\n marginBottom: 30,\n zIndex: 1,\n }}>\n Collect feedback and make great products\n </div>\n <div css={{\n zIndex: 1,\n }}>\n Whether you're a startup, a solo developer, an artist, a creator, or just a handful of friends\n building a great product or creating interesting content,\n Glee makes it easy to collect, track and manage feedback from your users.\n </div>\n <div css={{\n zIndex: 1,\n margin: \"30px 20px\",\n }}>\n <button\n css={{\n fontWeight: 500,\n backgroundColor: \"var(--green)\",\n boxShadow: \"0px 15px 50px -10px black\",\n \":active\": {\n filter: \"saturate(80%)\",\n },\n }}\n onClick={ () => isBrowser() ? window.scroll({\n top: 950,\n behavior: \"smooth\",\n }) : {} }\n >\n Dive in\n </button>\n </div>\n </div>\n\n <DummyApp />\n\n <div css={{\n marginTop: 100,\n textAlign: \"center\",\n }}>\n <div css={{\n fontSize: \"1.5em\",\n marginBottom: 15,\n }}>\n Plans\n </div>\n <div css={{\n marginBottom: 30,\n color: \"lightgrey\",\n }}>\n Compare the available plans and choose the right one for you. Get started for free, upgrade later.\n </div>\n <div css={{\n margin: \"50px 0\",\n display: \"flex\",\n backgroundColor: \"var(--dark)\",\n overflowX: \"auto\",\n scrollbarWidth: \"thin\",\n }}>\n {\n plans.map(plan =>\n <Plan key={ plan.id } { ...plan } />\n )\n }\n </div>\n <div css={{\n marginBottom: 100,\n color: \"darkgrey\",\n \"a\": {\n color: \"var(--green)\",\n },\n }}>\n When you upgrade your plan, changes are applied immediately. When you downgrade your plan, changes are applied at the end of your current billing cycle. If you've any further questions regarding this, feel free to <Link to=\"/contact\">contact us</Link>.\n </div>\n <div>\n <div css={{\n fontSize: \"1.3em\",\n fontWeight: 700,\n color: \"lightgrey\",\n }}>\n Are you ready for it?\n </div>\n <div css={{\n margin: 20,\n }}>\n <button\n css={{\n fontWeight: 500,\n backgroundColor: \"var(--green)\",\n boxShadow: \"0px 15px 50px -10px black\",\n \":active\": {\n filter: \"saturate(80%)\",\n },\n }}\n onClick={ () => navigate(\"/authorize\") }\n >\n Let's Start\n </button>\n </div>\n </div>\n </div>\n </div>\n );\n};\n","import React from \"react\";\nimport { connect } from \"react-redux\";\nimport { navigate } from \"gatsby\";\nimport { keyframes } from \"@emotion/core\";\nimport { RiLoader4Line } from \"react-icons/ri\";\nimport { CardElement, useElements, useStripe } from \"@stripe/react-stripe-js\";\n\nimport Helmet from \"../components/Helmet\";\nimport ConfirmDialog from \"../components/Dialog/ConfirmDialog\";\nimport * as Input from \"../components/Input\";\nimport { updateOrg } from \"../state/global\";\nimport isBrowser from \"../utils/isBrowser\";\nimport { Permission } from \"../utils/permissions\";\nimport { plans, getPlan } from \"../utils/plans\";\nimport countries from \"../data/countries.json\";\n\nconst PlanSelector = ({ planId, portalMessage, handleClick }) => {\n const plan = planId ? getPlan(planId) : plans[0];\n\n return (\n <div css={{\n display: \"grid\",\n gap: 15,\n gridTemplateColumns: \"repeat(auto-fill, minmax(345px, 1fr))\",\n }}>\n <div\n css={{\n width: \"100%\",\n padding: 15,\n display: \"inline-block\",\n backgroundColor: \"rgba(100, 100, 100, .25)\",\n borderRadius: 3,\n fontSize: \".8em\",\n boxShadow: \"0px 0px 0px 2px rgba(100, 100, 100, .8) inset\",\n transition: \"background-color var(--transition-default-time) ease-in-out, box-shadow var(--transition-default-time) ease-in-out\",\n }}\n >\n <div css={{ fontWeight: 500 }}>\n { plan.name }\n </div>\n <div css={{\n margin: \"10px 0\",\n color: \"var(--green)\",\n transition: \"color var(--transition-default-time) ease-in-out\",\n }}>\n <span><span css={{ fontWeight: 500 }}>${ plan.price }</span> / month</span>\n </div>\n <div css={{\n fontSize: \".9em\",\n color: \"lightgrey\",\n }}>\n { plan.description }\n </div>\n </div>\n\n <div\n css={{\n width: \"100%\",\n padding: 15,\n display: \"inline-block\",\n backgroundColor: \"rgba(100, 100, 100, .2)\",\n borderRadius: 3,\n fontSize: \".8em\",\n boxShadow: \"none\",\n opacity: portalMessage ? .8 : 1,\n transition: \"background-color var(--transition-default-time) ease-in-out, box-shadow var(--transition-default-time) ease-in-out\",\n cursor: portalMessage ? \"not-allowed\" : \"pointer\",\n \":hover\": {\n boxShadow: portalMessage ? \"none\" : \"0px 0px 0px 2px rgba(100, 100, 100, .8) inset\",\n backgroundColor: portalMessage ? \"rgba(100, 100, 100, .2)\" : \"rgba(100, 100, 100, .3)\",\n },\n }}\n onClick={ portalMessage ? () => {} : handleClick }\n >\n <div css={{\n marginBottom: 10,\n fontWeight: 500,\n }}>\n Change Plan\n </div>\n <div css={{\n margin: \"10px 0\",\n color: portalMessage ? \"var(--red)\" : \"var(--blue)\",\n transition: \"color var(--transition-default-time) ease-in-out\",\n }}>\n { portalMessage || \"Powered by Stripe\" }\n </div>\n <div css={{\n fontSize: \".9em\",\n color: \"lightgrey\",\n }}>\n Opens Stripe Portal where you can easily update subscription and manage payment methods.\n </div>\n </div>\n </div>\n );\n};\n\nconst ActionButton = ({ name, success, message, processing, disabled, handleClick }) => (\n <div css={{\n fontSize: \".8em\",\n }}>\n {\n typeof success !== \"undefined\" && !processing\n ? <div css={{ marginBottom: 15 }}>\n {\n success === true\n ? <div css={{ color: \"var(--green)\" }}>{ message }</div>\n : success === false\n ? <div css={{ color: \"var(--red)\" }}>{ message }</div>\n : null\n }\n </div>\n : null\n }\n\n <button\n disabled={ processing || disabled }\n css={{\n display: \"flex\",\n alignItems: \"center\",\n justifyContent: \"center\",\n fontSize: \"inherit\",\n \":disabled\": {\n color: \"var(--light)\",\n backgroundColor: \"rgba(100, 100, 100, .2)\",\n cursor: \"not-allowed\",\n },\n }}\n onClick={ handleClick }\n >\n {\n processing\n ? <RiLoader4Line\n css={{\n animation: `${keyframes({\n from: {\n transform: \"rotate(0deg)\",\n },\n to: {\n transform: \"rotate(360deg)\",\n },\n })} .8s linear infinite`,\n }}\n />\n : name\n }\n </button>\n </div>\n);\n\nconst SettingsView = ({ code, me, org, updateOrg }) => {\n const stripe = useStripe();\n const elements = useElements();\n\n const [ processing, setProcessing ] = React.useState(false);\n const [ confirmMessage, setConfirmMessage ] = React.useState(\"\");\n\n const [ codeSuccess, setCodeSuccess ] = React.useState(undefined);\n const [ codeMessage, setCodeMessage ] = React.useState(undefined);\n const [ orgSuccess, setOrgSuccess ] = React.useState(undefined);\n const [ orgMessage, setOrgMessage ] = React.useState(undefined);\n const [ customerSuccess, setCustomerSuccess ] = React.useState(undefined);\n const [ customerMessage, setCustomerMessage ] = React.useState(undefined);\n const [ paymentSuccess, setPaymentSuccess ] = React.useState(undefined);\n const [ paymentMessage, setPaymentMessage ] = React.useState(undefined);\n const [ discordWebhookSuccess, setDiscordWebhookSuccess ] = React.useState(undefined);\n const [ discordWebhookMessage, setDiscordWebhookMessage ] = React.useState(undefined);\n\n const [ orgCode, setOrgCode ] = React.useState(\"\");\n const [ name, setName ] = React.useState(\"\");\n const [ icon, setIcon ] = React.useState(\"\");\n const [ email, setEmail ] = React.useState(\"\");\n const [ address, setAddress ] = React.useState({});\n const [ discordWebhookID, setDiscordWebhookID ] = React.useState(\"\");\n const [ discordWebhookToken, setDiscordWebhookToken ] = React.useState(\"\");\n\n const testDiscordWebhook = () => {\n if (processing) return;\n\n setProcessing(true);\n\n if (!isBrowser()) return;\n\n window.fetch(process.env.API_URL + \"/orgs/\" + org._id + \"/webhooks/discord/test\", {\n method: \"POST\",\n headers: {\n \"Accept\": \"application/json\",\n \"Content-Type\": \"application/json\",\n \"Authorization\": me.token,\n },\n }).then(res => {\n if (res.ok) return res.json();\n throw new Error(res.statusText);\n }).then(() => {\n setProcessing(false);\n }).catch((e) => {\n console.error(e);\n setProcessing(false);\n });\n };\n\n const updateDiscordWebhook = () => {\n if (processing) return;\n\n setProcessing(true);\n\n if (!isBrowser()) return;\n\n window.fetch(process.env.API_URL + \"/orgs/\" + org._id + \"/webhooks/discord\", {\n method: \"PUT\",\n headers: {\n \"Accept\": \"application/json\",\n \"Content-Type\": \"application/json\",\n \"Authorization\": me.token,\n },\n body: JSON.stringify({\n id: discordWebhookID,\n token: discordWebhookToken,\n }),\n }).then(res => {\n if (res.ok) return res.json();\n throw new Error(res.statusText);\n }).then(orgDoc => {\n updateOrg({\n ...org,\n ...orgDoc,\n });\n setDiscordWebhookSuccess(true);\n setDiscordWebhookMessage(\"Successfully set the Discord Webhook.\");\n setProcessing(false);\n }).catch((e) => {\n console.error(e);\n setDiscordWebhookSuccess(false);\n setDiscordWebhookMessage(\"Unable to set the Discord Webhook. Make sure it's valid and try saving it again. If the issue persists, please contact support.\");\n setProcessing(false);\n });\n };\n\n const setValidOrgCode = (code) => {\n if (/^((?:[a-z])(?:[a-z0-9]+)?)?$/i.test(code)) {\n setOrgCode(code);\n }\n };\n\n const updateAddress = (key, value) => {\n setAddress({\n ...address,\n [key]: value,\n });\n };\n\n const toggleVisibility = () => {\n if (processing) return;\n\n setProcessing(true);\n\n if (!isBrowser()) return;\n\n window.fetch(process.env.API_URL + \"/orgs/\" + org._id + \"/visibility\", {\n method: \"PATCH\",\n headers: {\n \"Accept\": \"application/json\",\n \"Content-Type\": \"application/json\",\n \"Authorization\": me.token,\n },\n }).then(res => {\n if (res.ok) return res.json();\n throw new Error(res.statusText);\n }).then(orgDoc => {\n updateOrg({\n ...org,\n ...orgDoc,\n });\n setProcessing(false);\n }).catch((e) => {\n console.error(e);\n setProcessing(false);\n });\n };\n\n const updateOrgCodeDoc = () => {\n if (processing) return;\n\n // check validity of org code\n if (orgCode.length < 3 || orgCode.length > 16) {\n setCodeSuccess(false);\n setCodeMessage(\"Organization code should be within 3-16 characters.\");\n return;\n }\n if (!/^(?:[a-z])(?:[a-z0-9]+)$/i.test(orgCode)) {\n setCodeSuccess(false);\n setCodeMessage(\"Organization code should only contain alphanumeric characters, and should start with an alphabet.\");\n return;\n }\n\n setProcessing(true);\n\n if (!isBrowser()) return;\n\n window.fetch(process.env.API_URL + \"/orgs/\" + org._id + \"/code\", {\n method: \"PATCH\",\n headers: {\n \"Accept\": \"application/json\",\n \"Content-Type\": \"application/json\",\n \"Authorization\": me.token,\n },\n body: JSON.stringify({\n code: orgCode,\n }),\n }).then(res => {\n if (res.ok) return res.json();\n throw new Error(res.statusText);\n }).then(orgDoc => {\n updateOrg({\n ...org,\n ...orgDoc,\n });\n setCodeSuccess(true);\n setCodeMessage(\"Successfully changed the organization code.\");\n setProcessing(false);\n navigate(\"/\" + orgDoc.code + \"/settings\");\n }).catch((e) => {\n console.error(e);\n setCodeSuccess(false);\n setCodeMessage(\"Unable to change the organization code. \" + e + \". Try saving it again. If the issue persists, please contact support.\");\n setProcessing(false);\n });\n }\n\n const updateOrgDoc = () => {\n if (processing) return;\n\n if (name.length < 1 || name.length > 32) {\n setOrgSuccess(false);\n setOrgMessage(\"Organization name should be within 32 characters.\");\n return;\n }\n if (icon && icon.length > 2048) {\n setOrgSuccess(false);\n setOrgMessage(\"Organization icon URL should be within 2048 characters.\");\n return;\n }\n if (icon && !/^(((?:https:\\/\\/)(?:[-;:&=+$,\\w]+@)?[A-Za-z0-9.-]+|(?:www\\.|[-;:&=+$,\\w]+@)[A-Za-z0-9.-]+)((?:\\/[+~%/.\\w\\-_]*)?\\??(?:[-+=&;%@.\\w_]*)#?(?:[.!/\\\\\\w]*))?\\.(?:png|jpg|jpeg|bmp))$/i.test(icon)) {\n setOrgSuccess(false);\n setOrgMessage(\"Organization icon URL should be a valid URL to an image. Only PNG & JPEG images are supported.\");\n return;\n }\n\n setProcessing(true);\n\n if (!isBrowser()) return;\n\n window.fetch(process.env.API_URL + \"/orgs/\" + org._id, {\n method: \"PATCH\",\n headers: {\n \"Accept\": \"application/json\",\n \"Content-Type\": \"application/json\",\n \"Authorization\": me.token,\n },\n body: JSON.stringify({\n name,\n icon,\n }),\n }).then(res => {\n if (res.ok) return res.json();\n throw new Error(res.statusText);\n }).then(orgDoc => {\n updateOrg({\n ...org,\n ...orgDoc,\n });\n setOrgSuccess(true);\n setOrgMessage(\"Successfully saved the organization details.\");\n setProcessing(false);\n }).catch((e) => {\n console.error(e);\n setOrgSuccess(false);\n setOrgMessage(\"Unable to save the organization details. Try saving it again. If the issue persists, please contact support.\");\n setProcessing(false);\n });\n }\n\n const updateCustomer = () => {\n if (processing) return;\n\n if (!/^[a-zA-Z0-9_.+-]+@[a-zA-Z0-9-]+\\.[a-zA-Z0-9-.]+$/i.test(email)) {\n setCustomerSuccess(false);\n setCustomerMessage(\"The email address entered by you is invalid.\");\n return;\n }\n if (!address || !address.line1 || !address.city || !address.state || !address.postal_code || !address.country) {\n setCustomerSuccess(false);\n setCustomerMessage(\"Please enter the billing address.\");\n return;\n }\n\n setProcessing(true);\n setCustomerMessage(undefined);\n\n if (!isBrowser()) return;\n\n window.fetch(process.env.API_URL + \"/orgs/\" + org._id + \"/customer\", {\n method: \"PATCH\",\n headers: {\n \"Accept\": \"application/json\",\n \"Content-Type\": \"application/json\",\n \"Authorization\": me.token,\n },\n body: JSON.stringify({\n email,\n address,\n }),\n }).then(res => {\n if (res.ok) return res.json();\n throw new Error(res.statusText);\n }).then(customer => {\n setCustomerSuccess(true);\n setCustomerMessage(\"Successfully saved the billing details.\");\n updateOrg({\n ...org,\n stripeCustomerId: customer.id,\n customer,\n });\n setProcessing(false);\n }).catch((e) => {\n console.error(e);\n setCustomerSuccess(false);\n setCustomerMessage(\"Unable to save the billing details. Make sure the billing information is valid. If the issue persists, please contact support.\");\n setProcessing(false);\n });\n };\n\n const updatePaymentMethod = () => {\n if (!stripe || !elements) return;\n if (processing) return;\n\n setProcessing(true);\n\n if (!isBrowser()) return;\n\n stripe.createPaymentMethod({\n type: \"card\",\n card: elements.getElement(CardElement),\n }).then(paymentMethodResult => {\n if (paymentMethodResult.error && paymentMethodResult.error.message) {\n setPaymentSuccess(false);\n setPaymentMessage(paymentMethodResult.error.message);\n setProcessing(false);\n } else {\n window.fetch(process.env.API_URL + \"/orgs/\" + org._id + \"/payment-method\", {\n method: \"PATCH\",\n headers: {\n \"Accept\": \"application/json\",\n \"Content-Type\": \"application/json\",\n \"Authorization\": me.token,\n },\n body: JSON.stringify({\n paymentMethodId: paymentMethodResult.paymentMethod.id,\n }),\n }).then(res => {\n if (res.ok) return res.json();\n throw new Error(res.statusText);\n }).then(customer => {\n setPaymentSuccess(true);\n setPaymentMessage(\"Successfully saved the payment method.\");\n updateOrg({\n ...org,\n customer,\n });\n setProcessing(false);\n }).catch((e) => {\n console.error(e);\n setPaymentSuccess(false);\n setPaymentMessage(\"Unable to save the payment method. Make sure the payment method is valid. If the issue persists, please contact support.\");\n setProcessing(false);\n });\n }\n }).catch((e) => {\n console.error(e);\n setPaymentSuccess(false);\n setPaymentMessage(\"Unable to save the payment method. Make sure the payment method is valid. If the issue persists, please contact support.\");\n setProcessing(false);\n });\n };\n\n const manageSubscription = () => {\n if (!(org && org.stripeCustomerId && org.customer && org.customer.invoice_settings && org.customer.invoice_settings.default_payment_method)) return;\n\n if (!isBrowser()) return;\n\n window.fetch(process.env.API_URL + \"/orgs/\" + org._id + \"/subscription\", {\n method: \"POST\",\n headers: {\n \"Accept\": \"application/json\",\n \"Content-Type\": \"application/json\",\n \"Authorization\": me.token,\n },\n body: JSON.stringify({\n priceId: plans[0].id,\n }),\n }).then(res => {\n if (res.ok) return res.json();\n throw new Error(res.statusText);\n }).then(session => {\n setProcessing(false);\n window.location.href = session.url;\n }).catch((e) => {\n console.error(e);\n setProcessing(false);\n });\n };\n\n const managePaymentMethods = () => {\n manageSubscription();\n };\n\n const deleteOrg = () => {\n if (processing) return;\n\n setProcessing(true);\n setConfirmMessage(\"\");\n\n if (!isBrowser()) return;\n\n window.fetch(process.env.API_URL + \"/orgs/\" + org._id, {\n method: \"DELETE\",\n headers: {\n \"Accept\": \"application/json\",\n \"Authorization\": me.token,\n },\n }).then(res => {\n if (res.ok) return res.json();\n throw new Error(res.statusText);\n }).then(() => {\n setProcessing(false);\n navigate(\"/account\");\n }).catch((e) => {\n console.error(e);\n setProcessing(false);\n });\n };\n\n React.useEffect(() => {\n if (org.permissions === Permission.OWNER || org.permissions === Permission.ADMIN) {\n setOrgCode(org.code);\n setName(org.name);\n setIcon(org.icon || \"\");\n\n if (org.customer) {\n setEmail(org.customer.email);\n setAddress(org.customer.address);\n }\n\n if (org.notifications && org.notifications.discord) {\n setDiscordWebhookID(org.notifications.discord.id);\n setDiscordWebhookToken(org.notifications.discord.token);\n }\n } else {\n navigate(\"/\" + org.code);\n }\n }, [ org ]);\n\n return (\n <div css={{\n display: \"flex\",\n flexDirection: \"column\",\n width: \"100%\",\n maxWidth: 720,\n margin: \"0 auto\",\n }}>\n <Helmet\n title={ org.name + \" - Settings\" }\n />\n <div css={{ fontSize: \"1.2em\", margin: \"25px 0\" }}>Settings</div>\n\n <div css={{ color: \"lightgrey\", fontSize: \".9em\", marginBottom: 5 }}>Organization Details</div>\n <div css={{ color: \"darkgrey\", fontSize: \".8em\", marginBottom: 15 }}>Information required by us and stored on our servers.</div>\n <div css={{ width: \"100%\" }}>\n <div>\n <Input.Text\n title=\"Code\"\n description=\"A unique code to access your organization\"\n pretext={ <span css={{ fontFamily: \"monospace\" }}>{ isBrowser() ? window.location.host + \"/\" : \"/\" }</span> }\n placeholder=\"e.g. glee\"\n value={ orgCode }\n setValue={ setValidOrgCode }\n maxLength={ 16 }\n pattern=\"[a-zA-Z][a-zA-Z0-9]{2,15}\"\n required={ true }\n disabled={ !(org.employee || (org.plan && org.plan.amount)) }\n />\n </div>\n {\n (org.employee || (org.plan && org.plan.amount))\n ? org.code !== orgCode\n ? <div css={{ color: \"var(--red)\", marginBottom: 15, fontSize: \".8em\" }}>\n If you change your code your previous code will become invalidated. This will change the URL for your organization. Make sure to notify your users about this change beforehand.\n </div>\n : null\n : <div css={{ color: \"var(--orange)\", marginBottom: 15, fontSize: \".8em\" }}>\n Upgrade your subscription to set custom organization code.\n </div>\n }\n </div>\n\n <ActionButton\n name={ \"Update Code\" }\n success={ codeSuccess }\n message={ codeMessage }\n processing={ processing }\n disabled={ !orgCode || org.code === orgCode }\n handleClick={ updateOrgCodeDoc }\n />\n\n <div css={{ width: \"100%\", marginTop: 25 }}>\n <div>\n <Input.Text\n title=\"Name\"\n description=\"Publicly visible name of your organization\"\n placeholder=\"e.g. Glee\"\n value={ name }\n setValue={ setName }\n maxLength={ 32 }\n required={ true }\n />\n <Input.URL\n title=\"Icon\"\n description=\"An https URL to the logo or icon of the organization\"\n placeholder=\"e.g. https://github.com/gleeapp.png\"\n value={ icon }\n setValue={ setIcon }\n pattern=\"https://.*\"\n maxLength={ 2048 }\n />\n </div>\n </div>\n\n <ActionButton\n name={ \"Save Details\" }\n success={ orgSuccess }\n message={ orgMessage }\n processing={ processing }\n disabled={ !name || (name === org.name && (icon ? icon === org.icon : true)) }\n handleClick={ updateOrgDoc }\n />\n\n <div css={{\n width: \"100%\",\n display: \"flex\",\n alignItems: \"center\",\n justifyContent: \"space-between\",\n marginTop: 50,\n }}>\n <div>\n <div css={{ color: \"lightgrey\", fontSize: \".9em\", marginBottom: 5 }}>Public</div>\n <div css={{ color: (org.employee || (org.plan && org.plan.amount)) ? \"darkgrey\" : \"var(--orange)\", fontSize: \".8em\" }}>\n {\n (org.employee || (org.plan && org.plan.amount))\n ? org.visible\n ? \"Anyone can view the organization.\"\n : \"Only organization members can view the organization.\"\n : \"Upgrade your subscription to enable Public visibility.\"\n }\n </div>\n </div>\n <Input.Toggle\n enabled={ org.visible }\n toggleHandler={ toggleVisibility }\n disabled={ !(org.employee || (org.plan && org.plan.amount)) }\n />\n </div>\n\n <div css={{ color: \"lightgrey\", fontSize: \".9em\", marginBottom: 5, marginTop: 50 }}>Discord Integration</div>\n <div css={{ color: \"darkgrey\", fontSize: \".8em\", marginBottom: 15 }}>Connect to Discord Webhooks so that you can stay updated right within Discord. You'll receive a message in Discord when a new feedback is created, status of a feedback is changed, or when a feedback is deleted.</div>\n {\n (org.employee || (org.plan && org.plan.amount))\n ? <>\n <div css={{ width: \"100%\" }}>\n <div>\n <Input.Text\n title=\"Webhook ID\"\n description=\"ID of the webhook you created in your Discord channel.\"\n placeholder=\"e.g. 691109880475287592\"\n value={ discordWebhookID }\n setValue={ setDiscordWebhookID }\n maxLength={ 32 }\n pattern=\"[0-9]+\"\n />\n <Input.Text\n title=\"Webhook Token\"\n description=\"Token of the webhook you created in your Discord channel.\"\n placeholder=\"e.g. rgW6EeVmWPC5DL-iGJ2nHavc1vJvjjFEWWldIFj09jSwi6_fWNzEF9skpd909VgDcMZ5\"\n value={ discordWebhookToken }\n setValue={ setDiscordWebhookToken }\n pattern=\"[a-zA-Z-._0-9]+\"\n />\n </div>\n </div>\n\n <ActionButton\n name={\n org.notifications && org.notifications.discord && org.notifications.discord.id && org.notifications.discord.token && discordWebhookID === org.notifications.discord.id && discordWebhookToken === org.notifications.discord.token\n ? \"Test Integration\"\n : \"Save Integration\"\n }\n success={ discordWebhookSuccess }\n message={ discordWebhookMessage }\n processing={ processing }\n disabled={ !discordWebhookID || !discordWebhookToken }\n handleClick={\n org.notifications && org.notifications.discord && org.notifications.discord.id && org.notifications.discord.token && discordWebhookID === org.notifications.discord.id && discordWebhookToken === org.notifications.discord.token\n ? testDiscordWebhook\n : updateDiscordWebhook\n }\n />\n </>\n : <div css={{ color: \"var(--orange)\", fontSize: \".8em\" }}>\n Upgrade your subscription to enable Discord Integration.\n </div>\n }\n\n\n <div css={{ color: \"lightgrey\", fontSize: \".9em\", marginBottom: 5, marginTop: 50 }}>Subscription Plan</div>\n <div css={{ color: \"darkgrey\", fontSize: \".8em\", marginBottom: 15 }}>Select the plan suitable for your organization. Visit the Stripe Portal to upgrade your plan whenever you need it. Cancel anytime, no strings attached.</div>\n <div css={{ width: \"100%\" }}>\n <PlanSelector\n planId={ org && org.stripeCustomerId && org.customer && org.customer.subscriptions && org.customer.subscriptions.data.length && org.customer.subscriptions.data[0].plan && org.customer.subscriptions.data[0].plan.id }\n portalMessage={\n org && org.stripeCustomerId && org.customer\n ? org.customer.invoice_settings && org.customer.invoice_settings.default_payment_method\n ? null\n : \"Add a default payment method below before you can start your subscription.\"\n : \"Update billing details below before you can start your subscription.\"\n }\n handleClick={ manageSubscription }\n />\n </div>\n\n <div css={{ color: \"lightgrey\", fontSize: \".9em\", marginBottom: 5, marginTop: 50 }}>Billing Details</div>\n <div css={{ color: \"darkgrey\", fontSize: \".8em\", marginBottom: 15 }}>\n Billing information required by our payment partner Stripe and stored on their servers. Only required when you want to upgrade from the Free plan.\n </div>\n <div css={{ width: \"100%\" }}>\n <div>\n <Input.Email\n title=\"Billing Email\"\n description=\"We'll send receipts to this inbox.\"\n placeholder=\"e.g. [email protected]\"\n value={ email }\n setValue={ setEmail }\n maxLength={ 512 }\n pattern=\"[a-zA-Z0-9_.+-]+@[a-zA-Z0-9-]+\\.[a-zA-Z0-9-.]+\"\n required={ true }\n />\n <Input.Text\n title=\"Address\"\n placeholder=\"Street, PO Box, or company name.\"\n value={ address.line1 }\n setValue={ (value) => updateAddress(\"line1\", value) }\n maxLength={ 256 }\n required={ true }\n />\n <Input.Text\n title=\"City\"\n placeholder=\"City, district, suburb, town, or village.\"\n value={ address.city }\n setValue={ (value) => updateAddress(\"city\", value) }\n maxLength={ 64 }\n required={ true }\n />\n <Input.Text\n title=\"State\"\n placeholder=\"State, county, province, or region.\"\n value={ address.state }\n setValue={ (value) => updateAddress(\"state\", value) }\n maxLength={ 64 }\n required={ true }\n />\n <Input.Text\n title=\"Postal Code\"\n placeholder=\"ZIP or postal code.\"\n value={ address.postal_code }\n setValue={ (value) => updateAddress(\"postal_code\", value) }\n maxLength={ 8 }\n required={ true }\n />\n <Input.Dropdown\n title=\"Country\"\n placeholder=\"Country\"\n value={ address.country }\n setValue={ (value) => updateAddress(\"country\", value) }\n options={ countries }\n selectKey=\"value\"\n selectValue=\"key\"\n required={ true }\n />\n </div>\n </div>\n\n <ActionButton\n name={ \"Save Billing Details\" }\n success={ customerSuccess }\n message={ customerMessage }\n processing={ processing }\n disabled={ !email || !address }\n handleClick={ updateCustomer }\n />\n\n {\n org && org.stripeCustomerId && org.customer\n ? <>\n <div css={{ color: \"lightgrey\", fontSize: \".9em\", marginBottom: 5, marginTop: 50 }}>Payment Details</div>\n <div css={{ color: \"darkgrey\", fontSize: \".8em\", marginBottom: 15 }}>\n Payment method required by our payment partner Stripe. You can update the payment method, or add additional ones, in the Stripe Portal whenever you want. Only required when you want to upgrade from the Free plan.\n </div>\n <div css={{ width: \"100%\" }}>\n <div>\n {\n !org.customer.invoice_settings || !org.customer.invoice_settings.default_payment_method\n ? <div css={{\n marginBottom: 15,\n padding: 10,\n backgroundColor: \"rgba(100, 100, 100, .2)\",\n borderRadius: 3,\n transition: \"background-color var(--transition-default-time) ease-out\",\n \":hover\": {\n backgroundColor: \"rgba(100, 100, 100, .3)\",\n },\n \":focus-within\": {\n backgroundColor: \"rgba(100, 100, 100, .3)\",\n },\n }}>\n <div css={{\n marginBottom: 5,\n color: \"rgba(200, 200, 200, .5)\",\n fontSize: \".7em\",\n fontWeight: 500,\n textTransform: \"uppercase\",\n }}>\n Card\n </div>\n <CardElement options={{\n style: {\n base: {\n fontFamily: \"monospace\",\n color: \"#f0f0f0\",\n iconColor: \"#f0f0f0\",\n \"::placeholder\": {\n color: \"#c0c0c0\",\n },\n },\n invalid: {\n color: \"#ff453a\",\n iconColor: \"#ff453a\",\n },\n },\n }} />\n </div>\n : <div css={{\n marginBottom: 15,\n fontSize: \".9em\",\n color: \"var(--green)\",\n }}>\n A default payment method is set for your organization. You can visit the Stripe Portal to manage your payment methods.\n </div>\n }\n </div>\n </div>\n\n <div css={{\n display: \"flex\",\n flexWrap: \"wrap\",\n justifyContent: \"space-between\",\n }}>\n {\n !org.customer.invoice_settings || !org.customer.invoice_settings.default_payment_method\n ? <ActionButton\n name={ \"Save Payment Method\" }\n success={ paymentSuccess }\n message={ paymentMessage }\n processing={ processing }\n disabled={ !email || !address }\n handleClick={ updatePaymentMethod }\n />\n : null\n }\n\n <ActionButton\n name={ \"Manage Payment Methods\" }\n processing={ processing }\n disabled={ !(org && org.stripeCustomerId && org.customer && org.customer.invoice_settings && org.customer.invoice_settings.default_payment_method) }\n handleClick={ managePaymentMethods }\n />\n </div>\n </>\n : null\n }\n\n <div css={{\n marginTop: 50,\n padding: 15,\n border: \"2px solid var(--red)\",\n borderRadius: 3,\n backgroundColor: \"rgba(255, 69, 58, .1)\",\n }}>\n <div css={{ fontSize: \".9em\", marginBottom: 5 }}>Danger Zone</div>\n <div css={{ color: \"lightgrey\", fontSize: \".8em\", marginBottom: 15 }}>When you delete your organization, all active subscriptions will be cancelled, all your organization data will be deleted (including posts, comments, votes, members, billing information, and payment method). This cannot be undone.</div>\n <div css={{ width: \"100%\" }}>\n <button\n css={{\n fontSize: \".8em\",\n backgroundColor: \"var(--red)\",\n color: \"var(--light)\",\n }}\n onClick={ () => setConfirmMessage(\"Are you sure you want to delete the \" + org.name + \" organization? This can't be undone.\") }\n >\n Delete { org.name }\n </button>\n </div>\n </div>\n\n {\n confirmMessage\n ? <ConfirmDialog\n title={ \"Delete \" + org.name }\n message={ confirmMessage }\n okHandler={ deleteOrg }\n cancelHandler={ () => setConfirmMessage(\"\") }\n />\n : null\n }\n </div>\n );\n};\n\nexport default connect(\n state => ({ me: state.global.me, org: state.global.org }),\n dispatch => ({ updateOrg: org => dispatch(updateOrg(org)) }),\n)(SettingsView);\n","import React from \"react\";\nimport { connect } from \"react-redux\";\nimport { navigate } from \"gatsby\";\nimport { keyframes } from \"@emotion/core\";\nimport { RiLoader4Line } from \"react-icons/ri\";\nimport { IoIosClose } from \"react-icons/io\";\n\nimport Helmet from \"../components/Helmet\";\nimport * as Input from \"../components/Input\";\nimport isBrowser from \"../utils/isBrowser\";\nimport { Permission } from \"../utils/permissions\";\n\nconst ActionButton = ({ name, success, message, processing, disabled, handleClick }) => (\n <div css={{\n fontSize: \".8em\",\n }}>\n {\n typeof success !== \"undefined\" && !processing\n ? <div css={{ marginBottom: 15 }}>\n {\n success === true\n ? <div css={{ color: \"var(--green)\" }}>{ message }</div>\n : success === false\n ? <div css={{ color: \"var(--red)\" }}>{ message }</div>\n : null\n }\n </div>\n : null\n }\n\n <button\n disabled={ processing || disabled }\n css={{\n display: \"flex\",\n alignItems: \"center\",\n justifyContent: \"center\",\n fontSize: \"inherit\",\n \":disabled\": {\n color: \"var(--light)\",\n backgroundColor: \"rgba(100, 100, 100, .2)\",\n cursor: \"not-allowed\",\n },\n }}\n onClick={ handleClick }\n >\n {\n processing\n ? <RiLoader4Line\n css={{\n animation: `${keyframes({\n from: {\n transform: \"rotate(0deg)\",\n },\n to: {\n transform: \"rotate(360deg)\",\n },\n })} .8s linear infinite`,\n }}\n />\n : name\n }\n </button>\n </div>\n);\n\nconst TeamView = ({ code, me, org }) => {\n const [ processing, setProcessing ] = React.useState(false);\n\n const [ addMemberSuccess, setAddMemberSuccess ] = React.useState(undefined);\n const [ addMemberMessage, setAddMemberMessage ] = React.useState(undefined);\n\n const [ members, setMembers ] = React.useState([]);\n const [ memberEmail, setMemberEmail ] = React.useState(\"\");\n\n const addTeamMember = () => {\n if (processing) return;\n\n // check validity of email\n if (!/^[a-zA-Z0-9_.+-]+@[a-zA-Z0-9-]+\\.[a-zA-Z0-9-.]+$/i.test(memberEmail)) {\n setAddMemberSuccess(false);\n setAddMemberMessage(\"Please check the email address.\");\n return;\n }\n\n if (!isBrowser()) return;\n\n setProcessing(true);\n\n window.fetch(process.env.API_URL + \"/orgs/\" + org._id + \"/members\", {\n method: \"PUT\",\n headers: {\n \"Accept\": \"application/json\",\n \"Content-Type\": \"application/json\",\n \"Authorization\": me.token,\n },\n body: JSON.stringify({\n email: memberEmail,\n }),\n }).then(res => {\n if (res.ok) return res.json();\n throw new Error(res.statusText);\n }).then(member => {\n setMembers([\n ...members,\n member,\n ]);\n setAddMemberSuccess(true);\n setAddMemberMessage(\"Successfully added \" + member.user.name + \" to the team.\");\n setProcessing(false);\n }).catch((e) => {\n console.error(e);\n setAddMemberSuccess(false);\n setAddMemberMessage(\"Unable to add \" + memberEmail + \" to the team. Are you sure a Glee user exists with that email?\");\n setProcessing(false);\n });\n };\n\n const deleteTeamMember = (memberId) => {\n if (processing) return;\n\n if (!isBrowser()) return;\n\n setProcessing(true);\n\n window.fetch(process.env.API_URL + \"/orgs/\" + org._id + \"/members/\" + memberId, {\n method: \"DELETE\",\n headers: {\n \"Accept\": \"application/json\",\n \"Content-Type\": \"application/json\",\n \"Authorization\": me.token,\n },\n }).then(res => {\n if (res.ok) return res.json();\n throw new Error(res.statusText);\n }).then(member => {\n setMembers(members.filter(m => m._id !== member._id));\n setProcessing(false);\n }).catch((e) => {\n console.error(e);\n setProcessing(false);\n });\n };\n\n React.useEffect(() => {\n if (org.permissions === Permission.OWNER || org.permissions === Permission.ADMIN) {\n window.fetch(process.env.API_URL + \"/orgs/\" + org._id + \"/members\", {\n headers: {\n Accept: \"application/json\",\n Authorization: me.token,\n },\n }).then(res => {\n if (res.ok) return res.json();\n throw new Error(res.statusText);\n }).then(members => {\n console.log(members)\n setMembers(members);\n }).catch((e) => {\n console.error(e);\n });\n } else {\n navigate(\"/\" + org.code);\n }\n }, [ org, me.token ]);\n\n return (\n <div css={{\n display: \"flex\",\n flexDirection: \"column\",\n width: \"100%\",\n maxWidth: 720,\n margin: \"0 auto\",\n }}>\n <Helmet\n title={ org.name + \" - Settings\" }\n />\n <div css={{ fontSize: \"1.2em\", margin: \"25px 0\" }}>Team</div>\n\n\n <div css={{ color: \"lightgrey\", fontSize: \".9em\", marginBottom: 5 }}>Add Members</div>\n <div css={{ color: \"darkgrey\", fontSize: \".8em\", marginBottom: 15 }}>Add Glee users to to your organization. Members can manage feedback in your organization but won't have access to organization settings.</div>\n <div css={{ width: \"100%\" }}>\n {\n (org.employee || (org.plan && org.plan.amount >= 500))\n ? <div>\n <Input.Text\n title=\"Email\"\n description=\"If the email belongs to a Glee user, we'll add them to the team.\"\n placeholder=\"e.g. [email protected]\"\n value={ memberEmail }\n setValue={ setMemberEmail }\n />\n\n <ActionButton\n name={ \"Add Member\" }\n success={ addMemberSuccess }\n message={ addMemberMessage }\n processing={ processing }\n disabled={ !memberEmail }\n handleClick={ addTeamMember }\n />\n </div>\n : <div css={{ color: \"var(--orange)\", fontSize: \".8em\" }}>Upgrade your subscription to add users to your team.</div>\n }\n </div>\n\n <div css={{ color: \"lightgrey\", fontSize: \".9em\", marginBottom: 5, marginTop: 50 }}>Members</div>\n <div css={{ color: \"darkgrey\", fontSize: \".8em\" }}>\n There { members.length === 1 ? \"is\" : \"are\" } { members.length } user{ members.length === 1 ? \"\" : \"s\" } in the team.\n </div>\n <div css={{ marginTop: 15 }}>\n {\n members && members.length\n ? members.map(member =>\n <div css={{\n marginBottom: 10,\n padding: 10,\n display: \"flex\",\n justifyContent: \"space-between\",\n alignItems: \"center\",\n backgroundColor: \"rgba(100, 100, 100, .2)\",\n borderRadius: 3,\n }}>\n <div css={{\n fontSize: \".9em\",\n }}>\n { member.user.name }\n </div>\n <div css={{\n display: \"flex\",\n }}>\n <IoIosClose\n title=\"Remove Member\"\n size={ 20 }\n css={{\n color: \"var(--red)\",\n borderRadius: \"50%\",\n transition: \"background-color var(--transition-default-time) ease\",\n cursor: \"pointer\",\n \":hover\": {\n backgroundColor: \"rgba(255, 0, 0, .3)\",\n },\n }}\n onClick={ () => deleteTeamMember(member._id) }\n />\n </div>\n </div>\n )\n : null\n }\n </div>\n </div>\n );\n};\n\nexport default connect(\n state => ({ me: state.global.me, org: state.global.org }),\n null,\n)(TeamView);\n","import React from \"react\";\nimport { keyframes } from \"@emotion/core\";\nimport { RiLoader4Line } from \"react-icons/ri\";\nimport { connect } from \"react-redux\";\n\nimport isBrowser from \"../../utils/isBrowser\";\n\nconst NewFeedback = ({ me, org, onCreate }) => {\n const [ processing, setProcessing ] = React.useState(undefined);\n\n const [ title, setTitle ] = React.useState(\"\");\n const [ details, setDetails ] = React.useState(\"\");\n\n const createFeedback = () => {\n if (!(title && details)) return;\n\n setProcessing(true);\n\n if (!isBrowser()) return;\n\n window.fetch(process.env.API_URL + \"/orgs/\" + org._id + \"/feedback\", {\n method: \"POST\",\n headers: {\n \"Accept\": \"application/json\",\n \"Content-Type\": \"application/json\",\n \"Authorization\": me.token,\n },\n body: JSON.stringify({\n title,\n details,\n }),\n }).then(res => {\n if (res.ok) return res.json();\n throw new Error(res.statusText);\n }).then(feedback => {\n setProcessing(false);\n setTitle(\"\");\n setDetails(\"\");\n onCreate(feedback);\n }).catch((e) => {\n console.error(e);\n setProcessing(false);\n });\n };\n\n return (\n <div css={{\n top: 0,\n position: \"sticky\",\n display: \"flex\",\n flexDirection: \"column\",\n padding: 15,\n borderRadius: 3,\n }}>\n <div css={{\n marginBottom: 15,\n padding: 10,\n backgroundColor: \"rgba(100, 100, 100, .2)\",\n borderRadius: 3,\n }}>\n <div css={{\n marginBottom: 5,\n color: \"rgba(200, 200, 200, .5)\",\n fontSize: \".7em\",\n fontWeight: 500,\n textTransform: \"uppercase\",\n }}>\n Title\n </div>\n <input\n type=\"text\"\n placeholder=\"Short, descriptive title\"\n value={ title }\n maxLength={ 128 }\n css={{\n width: \"100%\",\n fontSize: \".8em\",\n backgroundColor: \"transparent\",\n border: \"none\",\n \":invalid\": {\n backgroundColor: \"var(--red)\",\n },\n }}\n onChange={ (e) => setTitle(e.target.value) }\n />\n </div>\n\n <div css={{\n marginBottom: 15,\n padding: 10,\n backgroundColor: \"rgba(100, 100, 100, .2)\",\n borderRadius: 3,\n }}>\n <div css={{\n marginBottom: 5,\n color: \"rgba(200, 200, 200, .5)\",\n fontSize: \".7em\",\n fontWeight: 500,\n textTransform: \"uppercase\",\n }}>\n Details\n </div>\n <textarea\n type=\"text\"\n placeholder=\"Any additional details...\"\n rows={ 5 }\n value={ details }\n maxLength={ 2048 }\n css={{\n width: \"100%\",\n resize: \"none\",\n fontSize: \".8em\",\n backgroundColor: \"#202020\",\n border: \"none\",\n }}\n onChange={ (e) => setDetails(e.target.value) }\n />\n </div>\n\n <div>\n <button\n disabled={ !(me && me.token && title && details) }\n css={{\n width: \"100%\",\n fontSize: \".8em\",\n color: \"var(--light)\",\n backgroundColor: \"rgba(100, 100, 100, .2)\",\n transition: \"background-color var(--transition-default-time) ease-out\",\n \":not(:disabled):hover\": {\n backgroundColor: \"rgba(100, 100, 100, .5)\",\n },\n \":disabled\": {\n color: \"darkgrey\",\n cursor: \"not-allowed\",\n },\n }}\n onClick={ createFeedback }\n >\n {\n processing\n ? <RiLoader4Line\n css={{\n animation: `${keyframes({\n from: {\n transform: \"rotate(0deg)\",\n },\n to: {\n transform: \"rotate(360deg)\",\n },\n })} .8s linear infinite`,\n }}\n />\n : me && me.token\n ? \"Create a Post\"\n : \"Login to Post\"\n }\n </button>\n </div>\n </div>\n );\n};\n\nexport default connect(\n state => ({ me: state.global.me, org: state.global.org }),\n null\n)(NewFeedback);\n","import React from \"react\";\nimport { Link } from \"gatsby\";\nimport { IoIosArrowUp, IoIosArrowDown } from \"react-icons/io\";\n\nexport default ({ code, id, title, details, upvotes, downvotes, upvoted, downvoted, closedAt, handleVote, authenticated }) => (\n <div css={{\n display: \"flex\",\n alignItems: \"flex-start\",\n transition: \"background-color var(--transition-default-time) ease-in-out\",\n \":hover\": {\n borderRadius: 3,\n backgroundColor: \"rgba(100, 100, 100, .05)\",\n },\n }}>\n <div css={{\n margin: 15,\n display: \"flex\",\n flexDirection: \"column\",\n }}>\n <div\n css={{\n display: \"flex\",\n alignItems: \"center\",\n justifyContent: \"center\",\n textAlign: \"center\",\n color: upvoted ? \"var(--green)\" : \"inherit\",\n transition: \"color var(--transition-default-time) ease-in-out\",\n cursor: authenticated ? \"pointer\" : \"not-allowed\",\n \":hover\": {\n color: \"var(--green)\",\n },\n }}\n onClick={ () => authenticated ? upvoted ? handleVote(0) : handleVote(1) : null }\n >\n <IoIosArrowUp />\n </div>\n <div css={{\n fontSize: \".9em\",\n textAlign: \"center\",\n }}>\n { (upvotes || 0) - (downvotes || 0) }\n </div>\n <div\n css={{\n display: \"flex\",\n alignItems: \"center\",\n justifyContent: \"center\",\n textAlign: \"center\",\n color: downvoted ? \"var(--red)\" : \"inherit\",\n transition: \"color var(--transition-default-time) ease-in-out\",\n cursor: authenticated ? \"pointer\" : \"not-allowed\",\n \":hover\": {\n color: \"var(--red)\",\n },\n }}\n onClick={ () => authenticated ? downvoted ? handleVote(0) : handleVote(-1) : null }\n >\n <IoIosArrowDown />\n </div>\n </div>\n\n <Link\n to={ \"/\" + code + \"/feedback/\" + id }\n css={{\n width: \"100%\",\n marginTop: 15,\n marginBottom: 15,\n display: \"flex\",\n flexDirection: \"column\",\n cursor: \"pointer\",\n }}\n >\n <div css={{\n fontWeight: 500,\n marginBottom: 10,\n }}>\n { title }\n </div>\n\n <div css={{\n marginBottom: 10,\n fontSize: \".8em\",\n fontWeight: 500,\n textTransform: \"uppercase\",\n color: closedAt ? \"var(--red)\" : \"var(--blue)\",\n }}>\n { closedAt ? \"Closed\" : \"Open\" }\n </div>\n\n {\n details && details.length\n ? <div css={{\n color: \"lightgrey\",\n fontSize: \".9em\",\n }}>\n { details.length > 256 ? details.slice(0, 256) + \"...\" : details }\n </div>\n : null\n }\n </Link>\n </div>\n);\n","import React from \"react\";\nimport { connect } from \"react-redux\";\nimport { FiArrowDown } from \"react-icons/fi\";\n\nimport Loader from \"../components/Loader\";\nimport NewSuggestion from \"../components/Suggestions/New\";\nimport SuggestionOverview from \"../components/Suggestions/Overview\";\nimport isBrowser from \"../utils/isBrowser\";\n\nconst Feedback = ({ me, org }) => {\n const [ processing, setProcessing ] = React.useState(false);\n const [ success, setSuccess ] = React.useState(undefined);\n const [ nextPage, setNextPage ] = React.useState(1);\n const [ more, setMore ] = React.useState(true);\n\n const [ feedback, setFeedback ] = React.useState([]);\n\n React.useEffect(() => {\n if (!org || !org._id) return;\n\n if (!isBrowser()) return;\n\n window.fetch(process.env.API_URL + \"/orgs/\" + org._id + \"/feedback\", {\n headers: {\n Accept: \"application/json\",\n Authorization: me.token,\n },\n }).then(res => {\n if (res.ok) return res.json();\n throw new Error(res.statusText);\n }).then(feedback => {\n setSuccess(true);\n setFeedback(feedback);\n }).catch((e) => {\n console.error(e);\n setSuccess(false);\n });\n }, [ me.token, org ]);\n\n const loadMore = () => {\n if (!more) return;\n\n setMore(undefined);\n\n if (!isBrowser()) return;\n\n window.fetch(process.env.API_URL + \"/orgs/\" + org._id + \"/feedback?page=\" + nextPage, {\n headers: {\n Accept: \"application/json\",\n Authorization: me.token,\n },\n }).then(res => {\n if (res.ok) return res.json();\n throw new Error(res.statusText);\n }).then(newFeedback => {\n if (newFeedback.length === 25) {\n setMore(true);\n } else {\n setMore(false);\n }\n setNextPage(nextPage + 1);\n setFeedback(feedback.concat(newFeedback));\n }).catch((e) => {\n console.error(e);\n setMore(true);\n });\n };\n\n const updateFeedback = (newFeedback) => {\n if (!newFeedback) return;\n\n setFeedback([ newFeedback, ...feedback ]);\n };\n\n const updateVote = (f, vote) => {\n if (processing) return;\n\n setProcessing(true);\n\n if (!isBrowser()) return;\n\n window.fetch(process.env.API_URL + \"/orgs/\" + org._id + \"/feedback/\" + f._id + \"/vote\", {\n method: \"PATCH\",\n headers: {\n \"Accept\": \"application/json\",\n \"Content-Type\": \"application/json\",\n \"Authorization\": me.token,\n },\n body: JSON.stringify({\n vote,\n }),\n }).then(res => {\n if (res.ok) return res.json();\n throw new Error(res.statusText);\n }).then(updatedFeedback => {\n const newFeedback = feedback;\n const index = newFeedback.find(f => f._id === updatedFeedback._id);\n newFeedback.splice(index, 1, updatedFeedback);\n\n setProcessing(false);\n setFeedback(newFeedback);\n }).catch((e) => {\n console.error(e);\n setProcessing(false);\n });\n }\n\n return (\n <div css={{\n display: \"flex\",\n flexWrap: \"wrap\",\n flexDirection: \"row-reverse\",\n }}>\n <div css={{\n flex: 1,\n minWidth: 250,\n }}>\n <NewSuggestion onCreate={ updateFeedback } />\n </div>\n\n <div css={{\n flex: 2,\n minWidth: 300,\n }}>\n {\n success === true\n ? <>\n {\n feedback.length\n ? feedback.map(feedback =>\n <SuggestionOverview\n key={ feedback._id }\n code={ org.code }\n id={ feedback._id }\n title={ feedback.title }\n details={ feedback.details }\n upvotes={ feedback.upvotes && feedback.upvotes instanceof Array && feedback.upvotes.length }\n downvotes={ feedback.downvotes && feedback.downvotes instanceof Array && feedback.downvotes.length }\n upvoted={ me && me.id && feedback.upvotes && feedback.upvotes instanceof Array && feedback.upvotes.includes(me.id.toString()) }\n downvoted={ me && me.id && feedback.downvotes && feedback.downvotes instanceof Array && feedback.downvotes.includes(me.id.toString()) }\n closedAt={ feedback.closedAt }\n handleVote={ vote => updateVote(feedback, vote) }\n authenticated={ me && me.token }\n />\n )\n : <div css={{\n display: \"flex\",\n alignItems: \"center\",\n color: \"darkgrey\",\n padding: 20,\n }}>\n It's so empty and cold over here! Create a post and it'll show up here.\n </div>\n }\n </>\n : success === false\n ? <div css={{ fontSize: \".8em\", color: \"darkgrey\", padding: 20 }}>Oh, crap! Our servers having some issues. Please try again.</div>\n : <div css={{ padding: \"10px 20px\" }}><Loader /></div>\n }\n\n {\n feedback.length && more !== false\n ? <div\n css={{\n padding: 25,\n display: \"flex\",\n flexDirection: \"column\",\n alignItems: \"center\",\n justifyContent: \"center\",\n color: \"grey\",\n transition: \"color var(--transition-default-time) ease, transform var(--transition-default-time) ease\",\n cursor: \"wait\",\n \":hover\": {\n color: \"var(--light)\",\n },\n \":hover div\": {\n transform: \"translateY(5px)\",\n },\n \":hover svg\": {\n transform: \"translateY(15px)\",\n },\n }}\n onMouseOver={ loadMore }\n onFocus={ loadMore }\n >\n <div css={{\n transition: \"transform var(--transition-default-time) ease-out\",\n }}>\n {\n more === true\n ? \"Load More\"\n : \"Loading\"\n }\n </div>\n <FiArrowDown\n css={{\n transition: \"transform var(--transition-default-time) ease-out\",\n }}\n />\n </div>\n : null\n }\n </div>\n </div>\n );\n};\n\nexport default connect(\n state => ({ me: state.global.me, org: state.global.org }),\n null,\n)(Feedback);\n","import React from \"react\";\nimport { Router } from \"@reach/router\";\nimport { Elements } from \"@stripe/react-stripe-js\";\nimport { loadStripe } from \"@stripe/stripe-js\";\n\nimport DefaultLayout from \"../layouts/default\";\nimport OrgLayout from \"../layouts/org\";\n\nimport FeedbackView from \"../views/Feedback\";\nimport HomeView from \"../views/Home\";\nimport SettingsView from \"../views/Settings\";\nimport TeamView from \"../views/Team\";\nimport SuggestionsView from \"../views/Suggestions\";\n\nconst stripePromise = loadStripe(process.env.STRIPE_PUBLISHABLE_KEY);\n\nexport default () => (\n <Router>\n <DefaultLayout path=\"/\">\n <HomeView path=\"/\" />\n </DefaultLayout>\n\n <OrgLayout path=\"/:code\">\n <SuggestionsView path=\"/\" />\n <SuggestionsView path=\"/feedback\" />\n <FeedbackView path=\"/feedback/:id\" />\n <TeamView path=\"/team\" />\n <Elements stripe={ stripePromise } path=\"/settings\">\n <SettingsView path=\"/\" />\n </Elements>\n </OrgLayout>\n </Router>\n);\n","(function (global, factory) {\n typeof exports === 'object' && typeof module !== 'undefined' ? factory(exports, require('react')) : typeof define === 'function' && define.amd ? define(['exports', 'react'], factory) : (global = global || self, factory(global.ReactStripe = {}, global.React));\n})(this, function (exports, React) {\n 'use strict';\n\n React = React && React.hasOwnProperty('default') ? React['default'] : React;\n\n function _typeof(obj) {\n \"@babel/helpers - typeof\";\n\n if (typeof Symbol === \"function\" && typeof Symbol.iterator === \"symbol\") {\n _typeof = function _typeof(obj) {\n return typeof obj;\n };\n } else {\n _typeof = function _typeof(obj) {\n return obj && typeof Symbol === \"function\" && obj.constructor === Symbol && obj !== Symbol.prototype ? \"symbol\" : typeof obj;\n };\n }\n\n return _typeof(obj);\n }\n\n function _objectWithoutPropertiesLoose(source, excluded) {\n if (source == null) return {};\n var target = {};\n var sourceKeys = Object.keys(source);\n var key, i;\n\n for (i = 0; i < sourceKeys.length; i++) {\n key = sourceKeys[i];\n if (excluded.indexOf(key) >= 0) continue;\n target[key] = source[key];\n }\n\n return target;\n }\n\n function _objectWithoutProperties(source, excluded) {\n if (source == null) return {};\n\n var target = _objectWithoutPropertiesLoose(source, excluded);\n\n var key, i;\n\n if (Object.getOwnPropertySymbols) {\n var sourceSymbolKeys = Object.getOwnPropertySymbols(source);\n\n for (i = 0; i < sourceSymbolKeys.length; i++) {\n key = sourceSymbolKeys[i];\n if (excluded.indexOf(key) >= 0) continue;\n if (!Object.prototype.propertyIsEnumerable.call(source, key)) continue;\n target[key] = source[key];\n }\n }\n\n return target;\n }\n\n function _slicedToArray(arr, i) {\n return _arrayWithHoles(arr) || _iterableToArrayLimit(arr, i) || _nonIterableRest();\n }\n\n function _arrayWithHoles(arr) {\n if (Array.isArray(arr)) return arr;\n }\n\n function _iterableToArrayLimit(arr, i) {\n if (!(Symbol.iterator in Object(arr) || Object.prototype.toString.call(arr) === \"[object Arguments]\")) {\n return;\n }\n\n var _arr = [];\n var _n = true;\n var _d = false;\n var _e = undefined;\n\n try {\n for (var _i = arr[Symbol.iterator](), _s; !(_n = (_s = _i.next()).done); _n = true) {\n _arr.push(_s.value);\n\n if (i && _arr.length === i) break;\n }\n } catch (err) {\n _d = true;\n _e = err;\n } finally {\n try {\n if (!_n && _i[\"return\"] != null) _i[\"return\"]();\n } finally {\n if (_d) throw _e;\n }\n }\n\n return _arr;\n }\n\n function _nonIterableRest() {\n throw new TypeError(\"Invalid attempt to destructure non-iterable instance\");\n }\n\n function createCommonjsModule(fn, module) {\n return module = {\n exports: {}\n }, fn(module, module.exports), module.exports;\n }\n /**\n * Copyright (c) 2013-present, Facebook, Inc.\n *\n * This source code is licensed under the MIT license found in the\n * LICENSE file in the root directory of this source tree.\n */\n\n\n var ReactPropTypesSecret = 'SECRET_DO_NOT_PASS_THIS_OR_YOU_WILL_BE_FIRED';\n var ReactPropTypesSecret_1 = ReactPropTypesSecret;\n\n function emptyFunction() {}\n\n function emptyFunctionWithReset() {}\n\n emptyFunctionWithReset.resetWarningCache = emptyFunction;\n\n var factoryWithThrowingShims = function factoryWithThrowingShims() {\n function shim(props, propName, componentName, location, propFullName, secret) {\n if (secret === ReactPropTypesSecret_1) {\n // It is still safe when called from React.\n return;\n }\n\n var err = new Error('Calling PropTypes validators directly is not supported by the `prop-types` package. ' + 'Use PropTypes.checkPropTypes() to call them. ' + 'Read more at http://fb.me/use-check-prop-types');\n err.name = 'Invariant Violation';\n throw err;\n }\n\n shim.isRequired = shim;\n\n function getShim() {\n return shim;\n } // Keep this list in sync with production version in `./factoryWithTypeCheckers.js`.\n\n\n var ReactPropTypes = {\n array: shim,\n bool: shim,\n func: shim,\n number: shim,\n object: shim,\n string: shim,\n symbol: shim,\n any: shim,\n arrayOf: getShim,\n element: shim,\n elementType: shim,\n instanceOf: getShim,\n node: shim,\n objectOf: getShim,\n oneOf: getShim,\n oneOfType: getShim,\n shape: getShim,\n exact: getShim,\n checkPropTypes: emptyFunctionWithReset,\n resetWarningCache: emptyFunction\n };\n ReactPropTypes.PropTypes = ReactPropTypes;\n return ReactPropTypes;\n };\n\n var propTypes = createCommonjsModule(function (module) {\n /**\n * Copyright (c) 2013-present, Facebook, Inc.\n *\n * This source code is licensed under the MIT license found in the\n * LICENSE file in the root directory of this source tree.\n */\n {\n // By explicitly using `prop-types` you are opting into new production behavior.\n // http://fb.me/prop-types-in-prod\n module.exports = factoryWithThrowingShims();\n }\n });\n\n var isUnknownObject = function isUnknownObject(raw) {\n return raw !== null && _typeof(raw) === 'object';\n };\n\n var isPromise = function isPromise(raw) {\n return isUnknownObject(raw) && typeof raw.then === 'function';\n }; // We are using types to enforce the `stripe` prop in this lib,\n // but in an untyped integration `stripe` could be anything, so we need\n // to do some sanity validation to prevent type errors.\n\n\n var isStripe = function isStripe(raw) {\n return isUnknownObject(raw) && typeof raw.elements === 'function' && typeof raw.createToken === 'function' && typeof raw.createPaymentMethod === 'function' && typeof raw.confirmCardPayment === 'function';\n };\n\n var PLAIN_OBJECT_STR = '[object Object]';\n\n var isEqual = function isEqual(left, right) {\n if (!isUnknownObject(left) || !isUnknownObject(right)) {\n return left === right;\n }\n\n var leftArray = Array.isArray(left);\n var rightArray = Array.isArray(right);\n if (leftArray !== rightArray) return false;\n var leftPlainObject = Object.prototype.toString.call(left) === PLAIN_OBJECT_STR;\n var rightPlainObject = Object.prototype.toString.call(right) === PLAIN_OBJECT_STR;\n if (leftPlainObject !== rightPlainObject) return false;\n if (!leftPlainObject && !leftArray) return false;\n var leftKeys = Object.keys(left);\n var rightKeys = Object.keys(right);\n if (leftKeys.length !== rightKeys.length) return false;\n var keySet = {};\n\n for (var i = 0; i < leftKeys.length; i += 1) {\n keySet[leftKeys[i]] = true;\n }\n\n for (var _i = 0; _i < rightKeys.length; _i += 1) {\n keySet[rightKeys[_i]] = true;\n }\n\n var allKeys = Object.keys(keySet);\n\n if (allKeys.length !== leftKeys.length) {\n return false;\n }\n\n var l = left;\n var r = right;\n\n var pred = function pred(key) {\n return isEqual(l[key], r[key]);\n };\n\n return allKeys.every(pred);\n };\n\n var usePrevious = function usePrevious(value) {\n var ref = React.useRef(value);\n React.useEffect(function () {\n ref.current = value;\n }, [value]);\n return ref.current;\n };\n\n var INVALID_STRIPE_ERROR = 'Invalid prop `stripe` supplied to `Elements`. We recommend using the `loadStripe` utility from `@stripe/stripe-js`. See https://stripe.com/docs/stripe-js/react#elements-props-stripe for details.'; // We are using types to enforce the `stripe` prop in this lib, but in a real\n // integration `stripe` could be anything, so we need to do some sanity\n // validation to prevent type errors.\n\n var validateStripe = function validateStripe(maybeStripe) {\n if (maybeStripe === null || isStripe(maybeStripe)) {\n return maybeStripe;\n }\n\n throw new Error(INVALID_STRIPE_ERROR);\n };\n\n var parseStripeProp = function parseStripeProp(raw) {\n if (isPromise(raw)) {\n return {\n tag: 'async',\n stripePromise: Promise.resolve(raw).then(validateStripe)\n };\n }\n\n var stripe = validateStripe(raw);\n\n if (stripe === null) {\n return {\n tag: 'empty'\n };\n }\n\n return {\n tag: 'sync',\n stripe: stripe\n };\n };\n\n var ElementsContext = React.createContext(null);\n ElementsContext.displayName = 'ElementsContext';\n\n var parseElementsContext = function parseElementsContext(ctx, useCase) {\n if (!ctx) {\n throw new Error(\"Could not find Elements context; You need to wrap the part of your app that \".concat(useCase, \" in an <Elements> provider.\"));\n }\n\n return ctx;\n };\n /**\n * The `Elements` provider allows you to use [Element components](https://stripe.com/docs/stripe-js/react#element-components) and access the [Stripe object](https://stripe.com/docs/js/initializing) in any nested component.\n * Render an `Elements` provider at the root of your React app so that it is available everywhere you need it.\n *\n * To use the `Elements` provider, call `loadStripe` from `@stripe/stripe-js` with your publishable key.\n * The `loadStripe` function will asynchronously load the Stripe.js script and initialize a `Stripe` object.\n * Pass the returned `Promise` to `Elements`.\n *\n * @docs https://stripe.com/docs/stripe-js/react#elements-provider\n */\n\n\n var Elements = function Elements(_ref) {\n var rawStripeProp = _ref.stripe,\n options = _ref.options,\n children = _ref.children;\n\n var _final = React.useRef(false);\n\n var isMounted = React.useRef(true);\n var parsed = React.useMemo(function () {\n return parseStripeProp(rawStripeProp);\n }, [rawStripeProp]);\n\n var _React$useState = React.useState(function () {\n return {\n stripe: null,\n elements: null\n };\n }),\n _React$useState2 = _slicedToArray(_React$useState, 2),\n ctx = _React$useState2[0],\n setContext = _React$useState2[1];\n\n var prevStripe = usePrevious(rawStripeProp);\n var prevOptions = usePrevious(options);\n\n if (prevStripe !== null) {\n if (prevStripe !== rawStripeProp) {\n console.warn('Unsupported prop change on Elements: You cannot change the `stripe` prop after setting it.');\n }\n\n if (!isEqual(options, prevOptions)) {\n console.warn('Unsupported prop change on Elements: You cannot change the `options` prop after setting the `stripe` prop.');\n }\n }\n\n if (!_final.current) {\n if (parsed.tag === 'sync') {\n _final.current = true;\n setContext({\n stripe: parsed.stripe,\n elements: parsed.stripe.elements(options)\n });\n }\n\n if (parsed.tag === 'async') {\n _final.current = true;\n parsed.stripePromise.then(function (stripe) {\n if (stripe && isMounted.current) {\n // Only update Elements context if the component is still mounted\n // and stripe is not null. We allow stripe to be null to make\n // handling SSR easier.\n setContext({\n stripe: stripe,\n elements: stripe.elements(options)\n });\n }\n });\n }\n }\n\n React.useEffect(function () {\n return function () {\n isMounted.current = false;\n };\n }, []);\n React.useEffect(function () {\n var anyStripe = ctx.stripe;\n\n if (!anyStripe || !anyStripe._registerWrapper) {\n return;\n }\n\n anyStripe._registerWrapper({\n name: 'react-stripe-js',\n version: \"1.1.2\"\n });\n }, [ctx.stripe]);\n return React.createElement(ElementsContext.Provider, {\n value: ctx\n }, children);\n };\n\n var useElementsContextWithUseCase = function useElementsContextWithUseCase(useCaseMessage) {\n var ctx = React.useContext(ElementsContext);\n return parseElementsContext(ctx, useCaseMessage);\n };\n /**\n * @docs https://stripe.com/docs/stripe-js/react#useelements-hook\n */\n\n\n var useElements = function useElements() {\n var _useElementsContextWi = useElementsContextWithUseCase('calls useElements()'),\n elements = _useElementsContextWi.elements;\n\n return elements;\n };\n /**\n * @docs https://stripe.com/docs/stripe-js/react#usestripe-hook\n */\n\n\n var useStripe = function useStripe() {\n var _useElementsContextWi2 = useElementsContextWithUseCase('calls useStripe()'),\n stripe = _useElementsContextWi2.stripe;\n\n return stripe;\n };\n /**\n * @docs https://stripe.com/docs/stripe-js/react#elements-consumer\n */\n\n\n var ElementsConsumer = function ElementsConsumer(_ref2) {\n var children = _ref2.children;\n var ctx = useElementsContextWithUseCase('mounts <ElementsConsumer>'); // Assert to satisfy the busted React.FC return type (it should be ReactNode)\n\n return children(ctx);\n };\n\n ElementsConsumer.propTypes = {\n children: propTypes.func.isRequired\n };\n\n var useCallbackReference = function useCallbackReference(cb) {\n var ref = React.useRef(cb);\n React.useEffect(function () {\n ref.current = cb;\n }, [cb]);\n return function () {\n if (ref.current) {\n ref.current.apply(ref, arguments);\n }\n };\n };\n\n var extractUpdateableOptions = function extractUpdateableOptions(options) {\n if (!isUnknownObject(options)) {\n return {};\n }\n\n var _ = options.paymentRequest,\n rest = _objectWithoutProperties(options, [\"paymentRequest\"]);\n\n return rest;\n };\n\n var noop = function noop() {};\n\n var capitalized = function capitalized(str) {\n return str.charAt(0).toUpperCase() + str.slice(1);\n };\n\n var createElementComponent = function createElementComponent(type, isServer) {\n var displayName = \"\".concat(capitalized(type), \"Element\");\n\n var ClientElement = function ClientElement(_ref) {\n var id = _ref.id,\n className = _ref.className,\n _ref$options = _ref.options,\n options = _ref$options === void 0 ? {} : _ref$options,\n _ref$onBlur = _ref.onBlur,\n onBlur = _ref$onBlur === void 0 ? noop : _ref$onBlur,\n _ref$onFocus = _ref.onFocus,\n onFocus = _ref$onFocus === void 0 ? noop : _ref$onFocus,\n _ref$onReady = _ref.onReady,\n onReady = _ref$onReady === void 0 ? noop : _ref$onReady,\n _ref$onChange = _ref.onChange,\n onChange = _ref$onChange === void 0 ? noop : _ref$onChange,\n _ref$onEscape = _ref.onEscape,\n onEscape = _ref$onEscape === void 0 ? noop : _ref$onEscape,\n _ref$onClick = _ref.onClick,\n onClick = _ref$onClick === void 0 ? noop : _ref$onClick;\n\n var _useElementsContextWi = useElementsContextWithUseCase(\"mounts <\".concat(displayName, \">\")),\n elements = _useElementsContextWi.elements;\n\n var elementRef = React.useRef(null);\n var domNode = React.useRef(null);\n var callOnReady = useCallbackReference(onReady);\n var callOnBlur = useCallbackReference(onBlur);\n var callOnFocus = useCallbackReference(onFocus);\n var callOnClick = useCallbackReference(onClick);\n var callOnChange = useCallbackReference(onChange);\n var callOnEscape = useCallbackReference(onEscape);\n React.useLayoutEffect(function () {\n if (elementRef.current == null && elements && domNode.current != null) {\n var element = elements.create(type, options);\n elementRef.current = element;\n element.mount(domNode.current);\n element.on('ready', function () {\n return callOnReady(element);\n });\n element.on('change', callOnChange);\n element.on('blur', callOnBlur);\n element.on('focus', callOnFocus);\n element.on('escape', callOnEscape); // Users can pass an an onClick prop on any Element component\n // just as they could listen for the `click` event on any Element,\n // but only the PaymentRequestButton will actually trigger the event.\n\n element.on('click', callOnClick);\n }\n });\n var prevOptions = React.useRef(options);\n React.useEffect(function () {\n if (prevOptions.current && prevOptions.current.paymentRequest !== options.paymentRequest) {\n console.warn('Unsupported prop change: options.paymentRequest is not a customizable property.');\n }\n\n var updateableOptions = extractUpdateableOptions(options);\n\n if (Object.keys(updateableOptions).length !== 0 && !isEqual(updateableOptions, extractUpdateableOptions(prevOptions.current))) {\n if (elementRef.current) {\n elementRef.current.update(updateableOptions);\n prevOptions.current = options;\n }\n }\n }, [options]);\n React.useEffect(function () {\n return function () {\n if (elementRef.current) {\n elementRef.current.destroy();\n }\n };\n }, []);\n return React.createElement(\"div\", {\n id: id,\n className: className,\n ref: domNode\n });\n }; // Only render the Element wrapper in a server environment.\n\n\n var ServerElement = function ServerElement(props) {\n // Validate that we are in the right context by calling useElementsContextWithUseCase.\n useElementsContextWithUseCase(\"mounts <\".concat(displayName, \">\"));\n var id = props.id,\n className = props.className;\n return React.createElement(\"div\", {\n id: id,\n className: className\n });\n };\n\n var Element = isServer ? ServerElement : ClientElement;\n Element.propTypes = {\n id: propTypes.string,\n className: propTypes.string,\n onChange: propTypes.func,\n onBlur: propTypes.func,\n onFocus: propTypes.func,\n onReady: propTypes.func,\n onClick: propTypes.func,\n options: propTypes.object\n };\n Element.displayName = displayName;\n Element.__elementType = type;\n return Element;\n };\n\n var isServer = typeof window === 'undefined';\n /**\n * Requires beta access:\n * Contact [Stripe support](https://support.stripe.com/) for more information.\n *\n * @docs https://stripe.com/docs/stripe-js/react#element-components\n */\n\n var AuBankAccountElement = createElementComponent('auBankAccount', isServer);\n /**\n * @docs https://stripe.com/docs/stripe-js/react#element-components\n */\n\n var CardElement = createElementComponent('card', isServer);\n /**\n * @docs https://stripe.com/docs/stripe-js/react#element-components\n */\n\n var CardNumberElement = createElementComponent('cardNumber', isServer);\n /**\n * @docs https://stripe.com/docs/stripe-js/react#element-components\n */\n\n var CardExpiryElement = createElementComponent('cardExpiry', isServer);\n /**\n * @docs https://stripe.com/docs/stripe-js/react#element-components\n */\n\n var CardCvcElement = createElementComponent('cardCvc', isServer);\n /**\n * @docs https://stripe.com/docs/stripe-js/react#element-components\n */\n\n var FpxBankElement = createElementComponent('fpxBank', isServer);\n /**\n * @docs https://stripe.com/docs/stripe-js/react#element-components\n */\n\n var IbanElement = createElementComponent('iban', isServer);\n /**\n * @docs https://stripe.com/docs/stripe-js/react#element-components\n */\n\n var IdealBankElement = createElementComponent('idealBank', isServer);\n /**\n * @docs https://stripe.com/docs/stripe-js/react#element-components\n */\n\n var PaymentRequestButtonElement = createElementComponent('paymentRequestButton', isServer);\n exports.AuBankAccountElement = AuBankAccountElement;\n exports.CardCvcElement = CardCvcElement;\n exports.CardElement = CardElement;\n exports.CardExpiryElement = CardExpiryElement;\n exports.CardNumberElement = CardNumberElement;\n exports.Elements = Elements;\n exports.ElementsConsumer = ElementsConsumer;\n exports.FpxBankElement = FpxBankElement;\n exports.IbanElement = IbanElement;\n exports.IdealBankElement = IdealBankElement;\n exports.PaymentRequestButtonElement = PaymentRequestButtonElement;\n exports.useElements = useElements;\n exports.useStripe = useStripe;\n Object.defineProperty(exports, '__esModule', {\n value: true\n });\n});","import React from \"react\";\nimport { IoIosArrowDown } from \"react-icons/io\";\n\nexport const Toggle = ({ enabled, toggleHandler, disabled }) => (\n <label css={{\n display: \"flex\",\n alignItems: \"center\",\n opacity: disabled ? .5 : 1,\n }}>\n <div css={{\n width: 45,\n height: 24,\n padding: 2,\n display: \"flex\",\n justifyContent: \"center\",\n borderRadius: 50,\n backgroundColor: enabled ? \"var(--green)\" : \"rgba(100, 100, 100, .2)\",\n boxShadow: \"0px 0px 3px -2px black inset\",\n transition: \"background-color var(--transition-default-time) ease\",\n cursor: disabled ? \"not-allowed\" : \"pointer\",\n \":hover\": {\n backgroundColor: enabled ? \"#34c759\" : \"rgba(100, 100, 100, .3)\",\n },\n \":focus-within\": {\n backgroundColor: enabled ? \"#34c759\" : \"rgba(100, 100, 100, .3)\",\n },\n }}>\n <div css={{\n width: 20,\n height: 20,\n borderRadius: 50,\n backgroundColor: \"var(--light)\",\n boxShadow: \"0px 0px 3px -2px black\",\n transform: enabled ? \"translateX(10px)\" : \"translateX(-10px)\",\n transition: \"transform var(--transition-default-time) ease, background-color var(--transition-default-time) ease\",\n }} />\n </div>\n <input\n disabled={ disabled }\n checked={ enabled }\n type=\"checkbox\"\n css={{\n appearance: \"none\",\n }}\n onChange={ toggleHandler }\n />\n </label>\n);\n\nexport const BaseDropdown = ({ options, selectKey, selectValue, value, setValue, placeholder, ...rest }) => (\n <div css={{\n width: \"100%\",\n display: \"flex\",\n alignItems: \"center\",\n }}>\n { /* eslint-disable-next-line jsx-a11y/no-onchange */ }\n <select\n value={ value ? value : \"--placeholder\" }\n css={{\n appearance: \"none\",\n flex: \"auto\",\n color: \"inherit\",\n backgroundColor: \"transparent\",\n border: \"none\",\n cursor: \"pointer\",\n paddingRight: 15,\n \":invalid\": {\n outline: 0,\n boxShadow: \"none\",\n border: \"none\",\n color: \"var(--red)\",\n },\n }}\n onChange={ e => setValue(e.target.value) }\n { ...rest }\n >\n <option\n value=\"--placeholder\"\n disabled={ true }\n css={{\n color: \"grey\",\n backgroundColor: \"var(--dark)\",\n }}\n >\n { placeholder || \"Select\" }\n </option>\n\n {\n Object.keys(options).map(option =>\n <option\n key={ option }\n value={ selectValue === \"key\" ? option : selectValue === \"keyvalue\" ? option + \" (\" + options[option] + \")\" : options[option] }\n css={{\n backgroundColor: \"var(--dark)\",\n }}\n >\n { selectKey === \"value\" ? options[option] : selectKey === \"keyvalue\" ? option + \" (\" + options[option] + \")\" : option }\n </option>\n )\n }\n </select>\n\n <IoIosArrowDown css={{\n marginLeft: -15,\n pointerEvents: \"none\",\n }} />\n </div>\n);\n\nconst AbstractInput = ({ type, title, description, pretext, placeholder, value, setValue, ...rest }) => (\n <div css={{\n marginBottom: 15,\n padding: 10,\n backgroundColor: \"rgba(100, 100, 100, .2)\",\n borderRadius: 3,\n transition: \"background-color var(--transition-default-time) ease-out\",\n \":hover\": {\n backgroundColor: \"rgba(100, 100, 100, .3)\",\n },\n \":focus-within\": {\n backgroundColor: \"rgba(100, 100, 100, .3)\",\n },\n }}>\n <div css={{\n marginBottom: 0,\n color: \"rgba(200, 200, 200, .5)\",\n fontSize: \".7em\",\n fontWeight: 500,\n textTransform: \"uppercase\",\n }}>\n { title }\n </div>\n <div css={{\n marginBottom: 5,\n color: \"rgba(200, 200, 200, .3)\",\n fontSize: \".6em\",\n fontWeight: 500,\n }}>\n { description }\n </div>\n <div css={{\n display: \"flex\",\n alignItems: \"center\",\n fontSize: \".8em\",\n }}>\n {\n pretext\n ? <div css={{\n marginRight: 5,\n color: \"lightgrey\",\n }}>\n { pretext }\n </div>\n : null\n }\n <input\n type={ type }\n placeholder={ placeholder }\n value={ value }\n css={{\n flex: \"auto\",\n backgroundColor: \"transparent\",\n border: \"none\",\n \":disabled\": {\n color: \"darkgrey\",\n },\n \":invalid\": {\n outline: 0,\n boxShadow: \"none\",\n border: \"none\",\n color: \"var(--red)\",\n },\n }}\n onChange={ e => setValue(e.target.value) }\n { ...rest }\n />\n </div>\n </div>\n);\n\nexport const Text = (props) => (\n <AbstractInput\n type=\"text\"\n { ...props }\n />\n);\n\nexport const URL = (props) => (\n <AbstractInput\n type=\"url\"\n { ...props }\n />\n);\n\nexport const Email = (props) => (\n <AbstractInput\n type=\"email\"\n { ...props }\n />\n);\n\nexport const Phone = (props) => (\n <AbstractInput\n type=\"tel\"\n { ...props }\n />\n);\n\nexport const Dropdown = ({ title, description, pretext, placeholder, ...rest }) => (\n <div css={{\n marginBottom: 15,\n padding: 10,\n backgroundColor: \"rgba(100, 100, 100, .2)\",\n borderRadius: 3,\n transition: \"background-color var(--transition-default-time) ease-out\",\n \":hover\": {\n backgroundColor: \"rgba(100, 100, 100, .3)\",\n },\n \":focus-within\": {\n backgroundColor: \"rgba(100, 100, 100, .3)\",\n },\n }}>\n <div css={{\n marginBottom: 0,\n color: \"rgba(200, 200, 200, .5)\",\n fontSize: \".7em\",\n fontWeight: 500,\n textTransform: \"uppercase\",\n }}>\n { title }\n </div>\n <div css={{\n marginBottom: 5,\n color: \"rgba(200, 200, 200, .3)\",\n fontSize: \".6em\",\n fontWeight: 500,\n }}>\n { description }\n </div>\n <div css={{\n display: \"flex\",\n alignItems: \"center\",\n fontSize: \".8em\",\n }}>\n {\n pretext\n ? <div css={{\n marginRight: 5,\n color: \"lightgrey\",\n }}>\n { pretext }\n </div>\n : null\n }\n <BaseDropdown\n placeholder={ placeholder }\n { ...rest }\n />\n </div>\n </div>\n);\n","import React from \"react\";\n\nconst Button = ({ text, handler, primary }) => (\n <div\n css={{\n padding: \"10px 20px\",\n borderRadius: primary ? 3 : 0,\n fontSize: \".8em\",\n fontWeight: 500,\n backgroundColor: primary ? \"rgba(100, 100, 100, .3)\" : \"none\",\n color: \"lightgrey\",\n transition: \"color var(--transition-default-time) ease\",\n cursor: \"pointer\",\n \":hover\": {\n color: \"var(--green)\",\n },\n }}\n onClick={ handler }\n >\n { text }\n </div>\n);\n\nexport default ({ title, message, okText, okHandler, cancelText, cancelHandler }) => {\n const overlay = React.useRef(null);\n const dialog = React.useRef(null);\n\n React.useEffect(() => {\n overlay.current.style.opacity = 1;\n dialog.current.style.transform = \"scale(1)\";\n }, []);\n\n return (\n <div\n ref={ overlay }\n style={{\n opacity: 0,\n }}\n css={{\n position: \"fixed\",\n top: 0,\n left: 0,\n height: \"100vh\",\n width: \"100vw\",\n backgroundColor: \"rgba(0, 0, 0, .8)\",\n zIndex: 42,\n display: \"flex\",\n justifyContent: \"center\",\n alignItems: \"center\",\n fontSize: \".9em\",\n transition: \"opacity var(--transition-default-time) ease\",\n \"@supports (backdrop-filter: blur())\": {\n backgroundColor: \"rgba(0, 0, 0, .5)\",\n backdropFilter: \"blur(15px)\",\n },\n }}\n >\n <div\n ref={ dialog }\n style={{\n transform: \"scale(0.5)\",\n }}\n css={{\n maxWidth: 400,\n borderRadius: 3,\n backgroundColor: \"rgba(35, 35, 35, 1)\",\n boxShadow: \"0px 15px 50px -10px black\",\n transition: \"transform var(--transition-default-time) ease\",\n }}\n >\n <div css={{\n padding: 20,\n }}>\n <div css={{\n marginBottom: 10,\n fontWeight: 600,\n textTransform: \"uppercase\",\n }}>\n { title }\n </div>\n <div>{ message }</div>\n </div>\n <div css={{\n padding: 15,\n marginTop: 15,\n display: \"flex\",\n flexWrap: \"wrap\",\n justifyContent: \"flex-end\",\n borderBottomLeftRadius: 3,\n borderBottomRightRadius: 3,\n backgroundColor: \"rgba(15, 15, 15, .8)\",\n }}>\n <Button text={ cancelText || \"No\" } handler={ cancelHandler } />\n <Button text={ okText || \"Yes\" } handler={ okHandler } primary={ true } />\n </div>\n </div>\n </div>\n );\n};\n","export const Permission = {\n OWNER: 1 << 0,\n ADMIN: 1 << 1,\n MEMBER: 1 << 2,\n AUTHOR: 1 << 3,\n};\n","module.exports = \"data:image/png;base64,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\""],"sourceRoot":""}