your-ai-workflow-firebase-os 2.0.8 → 2.0.10
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/{Assets-Dd_96avv.js → Assets-BKXpQmMS.js} +5 -5
- package/dist/{Assets-CBBNIHrw.cjs → Assets-DoZlHuud.cjs} +1 -1
- package/dist/{Attachments-C6QrTcNt.cjs → Attachments-BMuQ0CD4.cjs} +1 -1
- package/dist/{Attachments-YyjQmhBx.js → Attachments-Co1UkdWB.js} +2 -2
- package/dist/{Billing-BZafAizg.js → Billing-A6rwfQRT.js} +4 -4
- package/dist/{Billing-B6f49cGH.cjs → Billing-CBxVy-CG.cjs} +1 -1
- package/dist/{BookingCalendar-DYsA71vl.cjs → BookingCalendar-BcvJiyaq.cjs} +1 -1
- package/dist/{BookingCalendar-_xoRa2tL.js → BookingCalendar-Bej__mIs.js} +1 -1
- package/dist/{Button-DSldWACF.js → Button-BGN6q7lY.js} +1 -1
- package/dist/{Button-PyTaaoyu.cjs → Button-Ccy4wFZ1.cjs} +1 -1
- package/dist/{ConfirmModal-CQ73WYUg.cjs → ConfirmModal-BUNtss4a.cjs} +1 -1
- package/dist/{ConfirmModal-C1dM-bzk.js → ConfirmModal-BW9e6Y7d.js} +3 -3
- package/dist/{ContactPopup-D5Hh0bfE.cjs → ContactPopup-D8aSSlmS.cjs} +1 -1
- package/dist/{ContactPopup-CL4AMwK9.js → ContactPopup-Fs7wzrOX.js} +7 -7
- package/dist/{CopyLink-BnYpVy6H.cjs → CopyLink-D6QTWSoK.cjs} +1 -1
- package/dist/{CopyLink-rLr_5eNM.js → CopyLink-kROJG9Qf.js} +2 -2
- package/dist/{DashboardNav-DOl9gJuu.cjs → DashboardNav-Bc619nqn.cjs} +1 -1
- package/dist/{DashboardNav-B0G943ux.js → DashboardNav-CxS3Qnl-.js} +3 -3
- package/dist/{EmailAdmin-humrSTzI.js → EmailAdmin-DbWK_5Kw.js} +9 -9
- package/dist/{EmailAdmin-CWHMMybh.cjs → EmailAdmin-sa9C5jOw.cjs} +1 -1
- package/dist/{EventCard-6eCfvOA-.cjs → EventCard-D57elnQo.cjs} +1 -1
- package/dist/{EventCard-CrPswwyG.js → EventCard-DnoR91KN.js} +2 -2
- package/dist/{FileViewerPopup-DQmhXMSg.cjs → FileViewerPopup-CkLUYCNo.cjs} +1 -1
- package/dist/{FileViewerPopup-Dnl3td2o.js → FileViewerPopup-gqhRT22v.js} +2 -2
- package/dist/{FormNote-BWGLs9lx.js → FormNote-DJ9HBokL.js} +1 -1
- package/dist/{FormNote-CX2rSBDB.cjs → FormNote-DP0GK9ya.cjs} +1 -1
- package/dist/{FormsAdmin-Tg20B0iA.cjs → FormsAdmin-Ck7ssCHd.cjs} +1 -1
- package/dist/{FormsAdmin-CHwmKnYU.js → FormsAdmin-DOes2Ajy.js} +9 -9
- package/dist/{Inbox-BPwIiThg.cjs → Inbox-ChBLxjCi.cjs} +1 -1
- package/dist/{Inbox-Cgq4MALU.js → Inbox-CyteB2LL.js} +9 -9
- package/dist/{Loader-DP_dL5qC.js → Loader-CVoz1Zf0.js} +1 -1
- package/dist/{Loader-p3eNQDUU.cjs → Loader-QHqQsXLr.cjs} +1 -1
- package/dist/{ManagePlanButton-BRW7Sevd.cjs → ManagePlanButton-Buwfs2bU.cjs} +1 -1
- package/dist/{ManagePlanButton-CNLCxK-o.js → ManagePlanButton-CE4uyh_7.js} +2 -2
- package/dist/{MyBookings-BC5sn_fE.cjs → MyBookings-B424zfVj.cjs} +1 -1
- package/dist/{MyBookings-C_pqsSEk.js → MyBookings-DLQefkDS.js} +7 -7
- package/dist/{PageTitle-BWmE74WQ.cjs → PageTitle-BL50s4qY.cjs} +1 -1
- package/dist/{PageTitle-DFGW71q8.js → PageTitle-CkZriz8K.js} +2 -2
- package/dist/{PagesAdmin-BZZ3by92.cjs → PagesAdmin-1U73GM_o.cjs} +1 -1
- package/dist/PagesAdmin-8smM_SDx.cjs +1 -0
- package/dist/{PagesAdmin-jjnDLYmF.js → PagesAdmin-CORR24DJ.js} +21 -21
- package/dist/PagesAdmin-hhVAwuuy.js +3 -0
- package/dist/{PaymentsAdmin-DeBMmFFo.js → PaymentsAdmin-CoaSATtY.js} +15 -15
- package/dist/{PaymentsAdmin-CI0zXraR.cjs → PaymentsAdmin-DdP5FeXc.cjs} +1 -1
- package/dist/{Popup-DmPEk98h.js → Popup-Bi63lzoS.js} +1 -1
- package/dist/{Popup-nq7YNM4N.cjs → Popup-COnHpbrY.cjs} +1 -1
- package/dist/{ProviderMark-DJ5mYjYn.cjs → ProviderMark-BCQRu5Gs.cjs} +1 -1
- package/dist/{ProviderMark-CAeOnBsB.js → ProviderMark-Celkjuth.js} +1 -1
- package/dist/{PublishApp-DI96gX9b.cjs → PublishApp-CYHX36oo.cjs} +1 -1
- package/dist/{PublishApp-mMMwf_in.js → PublishApp-Dagc4TYm.js} +7 -7
- package/dist/{Said-DAD7Ctp_.js → Said-BvSRaEfZ.js} +1 -1
- package/dist/{Said-DlJOjNMN.cjs → Said-W3KFi5uX.cjs} +1 -1
- package/dist/{ScheduleAdmin-C4W8Ls0D.js → ScheduleAdmin-D8siv7ZQ.js} +14 -14
- package/dist/{ScheduleAdmin-dWj_N_tf.cjs → ScheduleAdmin-ohFzK-5E.cjs} +1 -1
- package/dist/{SchedulePicker-CwKId9JF.cjs → SchedulePicker-BpPGI5VZ.cjs} +1 -1
- package/dist/{SchedulePicker-BOSJEcfL.js → SchedulePicker-sZIZec9L.js} +2 -2
- package/dist/{Setup-NOvtplUS.js → Setup-DOGI-_8f.js} +3 -3
- package/dist/{Setup-DcZzh6Xd.cjs → Setup-DiFnnzdd.cjs} +1 -1
- package/dist/{SetupPayments-CZ0KqXdR.cjs → SetupPayments-BLq0W5DU.cjs} +1 -1
- package/dist/{SetupPayments-DrXK0LQa.js → SetupPayments-ICqCoZeQ.js} +5 -5
- package/dist/{SignInAdmin-Cb65ChHL.js → SignInAdmin-CQzPqUui.js} +9 -9
- package/dist/{SignInAdmin-CwIUAJrv.cjs → SignInAdmin-JnhCefKY.cjs} +1 -1
- package/dist/{SupportBar-528kXe-Z.js → SupportBar-0nIiQp-_.js} +108 -107
- package/dist/SupportBar-DR52UpBq.cjs +1 -0
- package/dist/{SystemTabContent-EegzTuLd.cjs → SystemTabContent-BWhRHoXx.cjs} +1 -1
- package/dist/{SystemTabContent-C4azXKMs.js → SystemTabContent-CMyT7mDN.js} +2 -2
- package/dist/{TemplateDrive-CfPXKMKX.js → TemplateDrive-6aV9Hmh3.js} +10 -10
- package/dist/{TemplateDrive-XDRPkxIj.cjs → TemplateDrive-ElNPzwv3.cjs} +1 -1
- package/dist/ThemeAdmin-B4CIxIjh.cjs +1 -0
- package/dist/ThemeAdmin-B9VnH5xH.js +2 -0
- package/dist/{ThemeAdmin-BrEozdpZ.cjs → ThemeAdmin-BhaTfgKX.cjs} +1 -1
- package/dist/{ThemeAdmin-XLbC9fX7.js → ThemeAdmin-C_8phTKX.js} +6 -6
- package/dist/TimeZoneField-Ckn1pKAL.cjs +11 -0
- package/dist/{TimeZoneField-Dv389mAe.js → TimeZoneField-oIMwb5_X.js} +119 -107
- package/dist/{TransactionsAdmin-DgsG629u.cjs → TransactionsAdmin-BiV8VgD0.cjs} +1 -1
- package/dist/{TransactionsAdmin-X-NjI4NB.js → TransactionsAdmin-DAENRmVO.js} +11 -11
- package/dist/{Trouble-qjWYeKzC.js → Trouble-CtFq7tjk.js} +1 -1
- package/dist/{Trouble-DokPNHQZ.cjs → Trouble-KQZyf6aY.cjs} +1 -1
- package/dist/{Users-BEjl_Vjc.cjs → Users-Ayu_S4cd.cjs} +1 -1
- package/dist/{Users-BUGb7-Kz.js → Users-CNRVFf3-.js} +15 -15
- package/dist/{VideoPlayer-BVOkrJBR.cjs → VideoPlayer-CggwpVXH.cjs} +1 -1
- package/dist/{VideoPlayer-DB0oz6lM.js → VideoPlayer-QI1Jc3bS.js} +1 -1
- package/dist/{appIcons-CUXAX_gJ.js → appIcons-DfjKL0tw.js} +761 -735
- package/dist/appIcons-Xjk-LuQ5.cjs +130 -0
- package/dist/{arrivalRoads-CD7pt03E.cjs → arrivalRoads-1OeHArA0.cjs} +0 -0
- package/dist/{arrivalRoads-BZk39p8Z.js → arrivalRoads-BZ4SWRAw.js} +0 -0
- package/dist/{bookingPages-BxqkyZ-M.js → bookingPages-BFSY3Riv.js} +1 -1
- package/dist/{bookingPages-2fn9xPiA.cjs → bookingPages-Dx1ViiwW.cjs} +1 -1
- package/dist/components/TutorialVideo.d.ts +3 -1
- package/dist/{contentFallback-C6xLwXTs.js → contentFallback-BGGpI1Ts.js} +2 -2
- package/dist/{contentFallback-DLm_iHo9.cjs → contentFallback-DVCrIUvK.cjs} +1 -1
- package/dist/{email-DxxovRtf.js → email-PBHbXXgR.js} +1 -1
- package/dist/{email-DD48BP42.cjs → email-Sya6gl4F.cjs} +1 -1
- package/dist/index.d.ts +1 -0
- package/dist/lib/basket.d.ts +29 -9
- package/dist/lib/recordPrice.d.ts +1 -1
- package/dist/{notices-Cwon5Q0Y.cjs → notices-CKm9-Pqt.cjs} +1 -1
- package/dist/{notices-C4yqYzBw.js → notices-CysS7BLF.js} +1 -1
- package/dist/{ownerMail-CGmDk7aP.cjs → ownerMail-BS9SjJ2u.cjs} +1 -1
- package/dist/{ownerMail-Chzy5Ehy.js → ownerMail-DepG5-Qw.js} +2 -2
- package/dist/{pageFiles-BClshvXs.cjs → pageFiles-Cn0YQ4Ur.cjs} +1 -1
- package/dist/{pageFiles-D-GYqRgZ.js → pageFiles-ZFPSCDZz.js} +1 -1
- package/dist/{paidInFull-KuStok9_.cjs → paidInFull-CZywIs-V.cjs} +1 -1
- package/dist/{paidInFull-D14Eh0QV.js → paidInFull-mBOh9iwN.js} +1 -1
- package/dist/{paidSessions-QXv7SHeb.cjs → paidSessions-BK9qlIyL.cjs} +1 -1
- package/dist/{paidSessions-Cr_93LGa.js → paidSessions-C9392hZH.js} +7 -7
- package/dist/{people-D8nPPMlM.cjs → people-BwWVVLfy.cjs} +1 -1
- package/dist/{people-sk2DcHPi.js → people-Wk2opW4G.js} +1 -1
- package/dist/{publishSteps-DB1Hxr6H.js → publishSteps-Cf5pSB_H.js} +1 -1
- package/dist/{publishSteps-CaZRpC3C.cjs → publishSteps-DvWlF0p_.cjs} +1 -1
- package/dist/{recordLock-Dnz61J-_.js → recordLock-CMOiezNC.js} +1 -1
- package/dist/{recordLock-CLUp3QNh.cjs → recordLock-CiulizO1.cjs} +1 -1
- package/dist/{recordsKey-R5BjLoGQ.cjs → recordsKey-B3lWGd8C.cjs} +1 -1
- package/dist/{recordsKey-DHJJWWOo.js → recordsKey-CJL-dAYF.js} +2 -2
- package/dist/{registrationFields-COv8jW4n.cjs → registrationFields-DHHTptcl.cjs} +1 -1
- package/dist/{registrationFields-CeTZSerx.js → registrationFields-DdHoMPAQ.js} +1 -1
- package/dist/renderer.cjs.js +1 -1
- package/dist/renderer.es.js +1 -1
- package/dist/{roles-5juCr5sY.cjs → roles-BmnoAilb.cjs} +1 -1
- package/dist/{roles-hzcMnn_M.js → roles-D3T8p-hA.js} +3 -3
- package/dist/{scheduleData-BpkfnBjP.cjs → scheduleData-BXjNXVHY.cjs} +1 -1
- package/dist/{scheduleData-BLCUm84s.js → scheduleData-DR6A-Q7Z.js} +1 -1
- package/dist/server.cjs.js +1 -1
- package/dist/server.es.js +1 -1
- package/dist/{serviceStatus-5sk8MPjW.js → serviceStatus-C9izcuQz.js} +2 -2
- package/dist/{serviceStatus-1pGLLilF.cjs → serviceStatus-Cde96_OO.cjs} +1 -1
- package/dist/{serviceSwitches-BWnZBooS.js → serviceSwitches-CZHwvVfP.js} +1 -1
- package/dist/{serviceSwitches-Do_pkFCu.cjs → serviceSwitches-mhJbQBrV.cjs} +1 -1
- package/dist/vite.cjs.js +1 -1
- package/dist/vite.es.js +1 -1
- package/dist/your-ai-workflow-firebase-os.cjs.js +13 -13
- package/dist/your-ai-workflow-firebase-os.css +1 -1
- package/dist/your-ai-workflow-firebase-os.es.js +2258 -2221
- package/package.json +1 -1
- package/scripts/postinstall.js +2 -1
- package/src/index.css +41 -6
- package/src/pages/Home.tsx +11 -14
- package/dist/PagesAdmin-B-XopEi9.js +0 -3
- package/dist/PagesAdmin-nL5ZltFn.cjs +0 -1
- package/dist/SupportBar-CNVXSYwT.cjs +0 -1
- package/dist/ThemeAdmin-CwCiTp2I.js +0 -2
- package/dist/ThemeAdmin-Db5edTYj.cjs +0 -1
- package/dist/TimeZoneField-zR8N2Fj0.cjs +0 -11
- package/dist/appIcons-BNovDw6_.cjs +0 -130
|
@@ -1 +1 @@
|
|
|
1
|
-
const e=require(`./chunk-CiTBaPhY.cjs`),t=require(`./PageTitle-BWmE74WQ.cjs`),n=require(`./TimeZoneField-zR8N2Fj0.cjs`),r=require(`./schedule-BAea6q8_.cjs`),i=require(`./chevron-down-lyDK1rfL.cjs`),a=require(`./scheduleData-BpkfnBjP.cjs`),o=require(`./tabAudience-2fJAN1aD.cjs`);let s=require(`react`);s=e.a(s,1);let c=require(`react/jsx-runtime`),l=require(`firebase/firestore`),u=require(`react-router-dom`);var d=typeof window<`u`?s.useLayoutEffect:s.useEffect,f=(0,s.createContext)(void 0),p=`'Inter', system-ui, sans-serif`,m=e=>e.trim().replace(/\s+/g,`+`);function h(e,t){let n=[[`--display-family`,String(t?.display||``).trim()],[`--body-family`,String(t?.body||``).trim()]];for(let[t,r]of n){if(!r){e.style.removeProperty(t);continue}let n=`theme-font-${m(r).toLowerCase().replace(/[^a-z0-9+]/g,``)}`;if(typeof document<`u`&&!document.getElementById(n)){let e=document.createElement(`link`);e.id=n,e.rel=`stylesheet`,e.href=`https://fonts.googleapis.com/css2?family=${m(r)}:wght@300;400;500;600;700;800&display=swap`,document.head.appendChild(e)}e.style.setProperty(t,`'${r.replace(/'/g,``)}', ${p}`)}}var g=e=>{let t=e?.defaultTheme;return t!==`light`&&t!==`dark`||e?.showThemeToggle?null:t},_={get(e){try{return localStorage.getItem(e)}catch{return null}},set(e,t){try{localStorage.setItem(e,t)}catch{}},drop(e){try{localStorage.removeItem(e)}catch{}}};function v({children:e,scopeSelector:r}){let i=n.mi(),a=(0,s.useMemo)(()=>i?.themeConfig||t.b,[i?.themeConfig]),o=g(a),l=!!a.showThemeToggle;(0,s.useEffect)(()=>{try{localStorage.removeItem(`theme_config_cache`),localStorage.removeItem(`theme_saved_cache`)}catch{}console.info(`Your AI Firebase ${t.y} · colours from theme.config.ts`)},[]);let[u,p]=(0,s.useState)(()=>{if(o)return o;if(typeof window>`u`)return a.defaultTheme||`system`;let e=_.get(`theme-mode`),t=_.get(`last-seen-default-theme`);return a.defaultTheme&&a.defaultTheme!==t?(_.set(`last-seen-default-theme`,a.defaultTheme),_.drop(`theme-mode`),a.defaultTheme):e||a.defaultTheme||`system`}),[m,v]=(0,s.useState)(()=>{if(o)return o;if(typeof window>`u`)return a.defaultTheme===`light`?`light`:`dark`;let e=_.get(`theme-mode`),t=_.get(`last-seen-default-theme`),n=e||a.defaultTheme||`system`;return a.defaultTheme&&a.defaultTheme!==t&&(n=a.defaultTheme),n===`system`?window.matchMedia(`(prefers-color-scheme: light)`).matches?`light`:`dark`:n});return(0,s.useEffect)(()=>{let e=a.defaultTheme;e&&(o&&p(o),e!==_.get(`last-seen-default-theme`)&&(_.set(`last-seen-default-theme`,e),_.drop(`theme-mode`),p(e)))},[a.defaultTheme,o]),(0,s.useEffect)(()=>{let e=e=>{u===`system`&&v(e.matches?`light`:`dark`)},t=window.matchMedia(`(prefers-color-scheme: light)`);return u===`system`?(v(t.matches?`light`:`dark`),t.addEventListener(`change`,e)):v(u),()=>t.removeEventListener(`change`,e)},[u]),d(()=>{let e=(r?document.querySelector(r):document.documentElement)||document.documentElement,t=m===`dark`?a.colors.dark:a.colors.light;e.style.setProperty(`--bg-color`,t.background),e.style.setProperty(`--bg-secondary-color`,t.backgroundSecondary||t.background),e.style.setProperty(`--fg-color`,t.foreground),e.style.setProperty(`--accent-color`,t.accent);let n=m===`dark`;e.style.setProperty(`--panel-bg`,t.panelBg||`color-mix(in srgb, ${t.accent} ${n?`5%`:`4%`}, transparent)`),e.style.setProperty(`--panel-border`,t.panelBorder||`color-mix(in srgb, ${t.accent} 15%, transparent)`);let i=(e,t,n)=>{if(!e||e.length===0)return t||`transparent`;if(e.length===1)return e[0];let r=e.map((t,n)=>`${t} ${Math.round(n/(e.length-1)*100)}%`).join(`, `);return n===`conic`?`conic-gradient(from 180deg at 50% 100%, ${r})`:`linear-gradient(135deg, ${r})`},o=`linear-gradient(135deg, color-mix(in oklab, ${t.accent} ${n?`70%`:`78%`}, black) 0%, ${t.accent} 100%)`,s=`linear-gradient(135deg, color-mix(in oklab, ${t.accent} ${n?`80%`:`85%`}, black) 0%, color-mix(in oklab, ${t.accent} 72%, white) 100%)`;e.style.setProperty(`--button-bg`,i(t.buttonGradient,o,t.buttonGradientShape)),e.style.setProperty(`--button-fg`,t.buttonText||`#ffffff`),e.style.setProperty(`--button-hover-bg`,i(t.buttonHoverGradient||t.buttonGradient,s,t.buttonGradientShape)),e.style.setProperty(`--text-gradient`,i(t.textGradient,`linear-gradient(135deg, ${t.foreground} 0%, ${t.accent} 100%)`)),e.style.setProperty(`--glow-color`,t.glowColor||`color-mix(in srgb, ${t.accent} ${n?`40%`:`30%`}, transparent)`),e.style.setProperty(`--notification-icon-color`,t.notificationIconColor||t.accent);let c=t.secondaryButton?.bg||(m===`dark`?`rgba(255, 255, 255, 0.05)`:`rgba(0, 0, 0, 0.03)`),l=t.secondaryButton?.border||(m===`dark`?`rgba(255, 255, 255, 0.1)`:`rgba(0, 0, 0, 0.06)`),d=t.secondaryButton?.text||t.foreground;if(e.style.setProperty(`--btn-sec-bg`,c),e.style.setProperty(`--btn-sec-border`,l),e.style.setProperty(`--btn-sec-text`,d),e.style.setProperty(`--selection-bg`,t.selectionBg||`color-mix(in srgb, var(--accent-color) 40%, transparent)`),e.style.setProperty(`--selection-text`,t.selectionText||`#ffffff`),e.setAttribute(`data-theme`,m),_.set(`theme-mode`,u),a.cornerRounding===`custom`&&a.cornerRadii?(e.style.setProperty(`--btn-radius`,`${parseFloat(String(a.cornerRadii.buttonRadius))||0}rem`),e.style.setProperty(`--card-radius`,`${parseFloat(String(a.cornerRadii.cardRadius))||0}rem`),e.style.setProperty(`--input-radius`,`${parseFloat(String(a.cornerRadii.inputRadius))||0}rem`),e.style.setProperty(`--modal-radius`,`${parseFloat(String(a.cornerRadii.modalRadius))||0}rem`)):(e.style.setProperty(`--btn-radius`,`0.75rem`),e.style.setProperty(`--card-radius`,`1.5rem`),e.style.setProperty(`--input-radius`,`0.75rem`),e.style.setProperty(`--modal-radius`,`1.5rem`)),!document.getElementById(`inter-font`)){let e=document.createElement(`link`);e.id=`inter-font`,e.rel=`stylesheet`,e.href=`https://fonts.googleapis.com/css2?family=Inter:wght@300;400;500;600;700;800;900&display=swap`,document.head.appendChild(e)}h(e,a.fonts),e.style.fontSize=`16px`,e.style.setProperty(`--weight-h1`,`800`),e.style.setProperty(`--weight-h2`,`700`),e.style.setProperty(`--weight-h3`,`700`),e.style.setProperty(`--leading-normal`,`1.5`);let f=document.querySelector(`link[rel*='icon']`);f||(f=document.createElement(`link`),f.rel=`icon`,document.head.appendChild(f)),a.faviconUrl&&(f.href=a.faviconUrl),a.appName&&(document.title=a.appName)},[m,u,a]),(0,c.jsx)(f.Provider,{value:{theme:m,setTheme:e=>{o||p(e)},toggleTheme:()=>{o||p(m===`light`?`dark`:`light`)},isSystem:u===`system`,setIsSystem:e=>{o||p(e?`system`:m)},config:a,activeConfig:a,canSwitchTheme:l},children:e})}var y=()=>{let e=(0,s.useContext)(f);if(!e)throw Error(`useTheme must be used within ThemeProvider`);return e},b={name:`credit-card`,size:24,node:[[`rect`,{width:`20`,height:`14`,x:`2`,y:`5`,rx:`2`,key:`ynyp8z`}],[`line`,{x1:`2`,x2:`22`,y1:`10`,y2:`10`,key:`1b3vmo`}],[`path`,{d:`M6 14h2`,key:`mk7k0u`}]]};b.node;var x=i.n(b),S={name:`ellipsis-vertical`,size:24,node:[[`circle`,{cx:`12`,cy:`12`,r:`1`,key:`41hilf`}],[`circle`,{cx:`12`,cy:`5`,r:`1`,key:`gxeob9`}],[`circle`,{cx:`12`,cy:`19`,r:`1`,key:`lyex9k`}]],aliases:[`more-vertical`]};S.node;var ee=i.n(S),C={name:`fingerprint-pattern`,size:24,node:[[`path`,{d:`M12 10a2 2 0 0 0-2 2c0 1.02-.1 2.51-.26 4`,key:`1nerag`}],[`path`,{d:`M14 13.12c0 2.38 0 6.38-1 8.88`,key:`o46ks0`}],[`path`,{d:`M17.29 21.02c.12-.6.43-2.3.5-3.02`,key:`ptglia`}],[`path`,{d:`M2 12a10 10 0 0 1 18-6`,key:`ydlgp0`}],[`path`,{d:`M2 16h.01`,key:`1gqxmh`}],[`path`,{d:`M21.8 16c.2-2 .131-5.354 0-6`,key:`drycrb`}],[`path`,{d:`M5 19.5C5.5 18 6 15 6 12a6 6 0 0 1 .34-2`,key:`1tidbn`}],[`path`,{d:`M8.65 22c.21-.66.45-1.32.57-2`,key:`13wd9y`}],[`path`,{d:`M9 6.8a6 6 0 0 1 9 5.2v2`,key:`1fr1j5`}]],aliases:[`fingerprint`]};C.node;var w=i.n(C),T={name:`hard-drive`,size:24,node:[[`path`,{d:`M10 16h.01`,key:`1bzywj`}],[`path`,{d:`M2.212 11.577a2 2 0 0 0-.212.896V18a2 2 0 0 0 2 2h16a2 2 0 0 0 2-2v-5.527a2 2 0 0 0-.212-.896L18.55 5.11A2 2 0 0 0 16.76 4H7.24a2 2 0 0 0-1.79 1.11z`,key:`18tbho`}],[`path`,{d:`M21.946 12.013H2.054`,key:`zqlbp7`}],[`path`,{d:`M6 16h.01`,key:`1pmjb7`}]]};T.node;var te=i.n(T),ne={name:`inbox`,size:24,node:[[`polyline`,{points:`22 12 16 12 14 15 10 15 8 12 2 12`,key:`o97t9d`}],[`path`,{d:`M5.45 5.11 2 12v6a2 2 0 0 0 2 2h16a2 2 0 0 0 2-2v-6l-3.45-6.89A2 2 0 0 0 16.76 4H7.24a2 2 0 0 0-1.79 1.11z`,key:`oot6mr`}]]};ne.node;var E=i.n(ne),D={name:`nfc`,size:24,node:[[`path`,{d:`M6 8.32a7.43 7.43 0 0 1 0 7.36`,key:`9iaqei`}],[`path`,{d:`M9.46 6.21a11.76 11.76 0 0 1 0 11.58`,key:`1yha7l`}],[`path`,{d:`M12.91 4.1a15.91 15.91 0 0 1 .01 15.8`,key:`4iu2gk`}],[`path`,{d:`M16.37 2a20.16 20.16 0 0 1 0 20`,key:`sap9u2`}]]};D.node;var O=i.n(D),k={name:`palette`,size:24,node:[[`path`,{d:`M12 22a1 1 0 0 1 0-20 10 9 0 0 1 10 9 5 5 0 0 1-5 5h-2.25a1.75 1.75 0 0 0-1.4 2.8l.3.4a1.75 1.75 0 0 1-1.4 2.8z`,key:`e79jfc`}],[`circle`,{cx:`13.5`,cy:`6.5`,r:`.5`,fill:`currentColor`,key:`1okk4w`}],[`circle`,{cx:`17.5`,cy:`10.5`,r:`.5`,fill:`currentColor`,key:`f64h9f`}],[`circle`,{cx:`6.5`,cy:`12.5`,r:`.5`,fill:`currentColor`,key:`qy21gx`}],[`circle`,{cx:`8.5`,cy:`7.5`,r:`.5`,fill:`currentColor`,key:`fotxhn`}]]};k.node;var A=i.n(k),j={name:`rectangle-ellipsis`,size:24,node:[[`rect`,{width:`20`,height:`12`,x:`2`,y:`6`,rx:`2`,key:`9lu3g6`}],[`path`,{d:`M12 12h.01`,key:`1mp3jc`}],[`path`,{d:`M17 12h.01`,key:`1m0b6t`}],[`path`,{d:`M7 12h.01`,key:`eqddd0`}]],aliases:[`form-input`]};j.node;var M=i.n(j),N={name:`rocket`,size:24,node:[[`path`,{d:`M12 15v5s3.03-.55 4-2c1.08-1.62 0-5 0-5`,key:`qeys4`}],[`path`,{d:`M4.5 16.5c-1.5 1.26-2 5-2 5s3.74-.5 5-2c.71-.84.7-2.13-.09-2.91a2.18 2.18 0 0 0-2.91-.09`,key:`u4xsad`}],[`path`,{d:`M9 12a22 22 0 0 1 2-3.95A12.88 12.88 0 0 1 22 2c0 2.72-.78 7.5-6 11a22.4 22.4 0 0 1-4 2z`,key:`676m9`}],[`path`,{d:`M9 12H4s.55-3.03 2-4c1.62-1.08 5 .05 5 .05`,key:`92ym6u`}]]};N.node;var re=i.n(N),P={name:`rotate-cw-fading-clock`,size:24,node:[[`path`,{d:`M12 3a9.75 9.75 0 0 1 6.74 2.74`,key:`1k3kxf`}],[`path`,{d:`M18.74 5.74 21 8`,key:`1eb40o`}],[`path`,{d:`M21 8V3`,key:`1et280`}],[`path`,{d:`M7.5 19.794c-6-3.464-6-12.124 0-15.588`,key:`19r0lp`}],[`path`,{d:`M7.5 4.206A9 9 0 0 1 12 3`,key:`s8r11`}],[`path`,{d:`M12 7v5l4 2`,key:`1fdv2h`}],[`path`,{d:`M14 20.775A9 9 0 0 1 12 21`,key:`184rgu`}],[`path`,{d:`M19 17.656a9 9 0 0 1-1.5 1.456`,key:`7qgp6l`}],[`path`,{d:`M21 12a9 9 0 0 1-.228 2`,key:`1h378y`}],[`path`,{d:`M21 8h-5`,key:`k0yzmk`}]]};P.node;var ie=i.n(P),ae={name:`users`,size:24,node:[[`path`,{d:`M16 21v-2a4 4 0 0 0-4-4H6a4 4 0 0 0-4 4v2`,key:`1yyitq`}],[`path`,{d:`M16 3.128a4 4 0 0 1 0 7.744`,key:`16gr8j`}],[`path`,{d:`M22 21v-2a4 4 0 0 0-3-3.87`,key:`kshegd`}],[`circle`,{cx:`9`,cy:`7`,r:`4`,key:`nufk8`}]]};ae.node;var oe=i.n(ae);function se(){return(typeof window<`u`?window.__FBOS_PAGES__:null)||{}}function ce(e=se()){let t=new Set,n=[];for(let[r,i]of Object.entries(e))!i||t.has(i)||(t.add(i),n.push([r,i]));return n}var F=e=>e?.inMenu===!1,le=(e,t,n)=>{let r=e.find(e=>e.id===t);return r?r.hidden===!0:F(n)},I=`sys_groups`,ue=`fbos_groups`,de=(e,t)=>({id:e,name:String(t?.name||e),roles:r._n(t?.roles),...typeof t?.createdAt==`number`?{createdAt:t.createdAt}:{}}),fe=(e,t)=>e.name.localeCompare(t.name),pe=()=>{try{let e=localStorage.getItem(ue),t=e?JSON.parse(e):null;return Array.isArray(t)?t.filter(e=>r.On(e?.id)).map(e=>de(e.id,e)):null}catch{return null}},L=null,R=null,z=null,B=e=>{L=e,R?.forEach(t=>t(e))};function me(e){let t=!R;return R||=new Set,R.add(e),t?z=(0,l.onSnapshot)((0,l.collection)(n.ui,I),e=>{let t=[];e.forEach(e=>{r.On(e.id)&&t.push(de(e.id,e.data()))}),t.sort(fe);try{localStorage.setItem(ue,JSON.stringify(t))}catch{}B({groups:t,live:!0})},()=>B({groups:L?.groups??pe()??[],live:!0})):L?.live&&e(L),()=>{R?.delete(e),!R?.size&&(z?.(),z=null,R=null)}}function V(){let[e,t]=(0,s.useState)(()=>{if(L)return L;let e=pe();return e?{groups:e,live:!1}:null});return(0,s.useEffect)(()=>me(t),[]),{groups:e?.groups??[],loaded:!!e,live:!!e?.live}}function he(e,t,n=``){let i=String(e||``).trim();if(!i)return`Type a name for the group first — Sales, say, or North branch.`;if(!r.On(r.Ln(i)))return`Use a name with at least two letters in it.`;let a=t.find(e=>e.id!==n&&(e.name.trim().toLowerCase()===i.toLowerCase()||!n&&e.id===r.Ln(i)));return a?`You already have a group called ${a.name}.`:``}async function ge(e){let t=String(e||``).trim().slice(0,48),i={id:r.Ln(t),name:t,roles:[],createdAt:Date.now()};return await(0,l.setDoc)((0,l.doc)(n.ui,I,i.id),{name:i.name,roles:[],createdAt:i.createdAt}),i}async function _e(e,t){let i=String(t||``).trim().slice(0,48);!i||!r.On(e)||await(0,l.setDoc)((0,l.doc)(n.ui,I,e),{name:i},{merge:!0})}async function ve(e,t){if(!r.On(e))return;let i=r._n(t),a=L;L&&B({...L,groups:L.groups.map(t=>t.id===e?{...t,roles:i}:t)});try{await(0,l.setDoc)((0,l.doc)(n.ui,I,e),{roles:i},{merge:!0})}catch(e){throw a&&B(a),e}}async function ye(e){let t=[];return r.On(e)&&(await(0,l.getDocs)((0,l.collection)(n.ui,`sys_tabs`))).forEach(n=>{r.Nn(n.data())===e&&t.push(n.id)}),t}async function be(e){if(r.On(e)){for(let t of await ye(e))await(0,l.setDoc)((0,l.doc)(n.ui,`sys_tabs`,t),{group:``},{merge:!0});await(0,l.deleteDoc)((0,l.doc)(n.ui,I,e))}}async function xe(e){let t=await(0,l.getDocs)((0,l.collection)(n.ui,I));for(let i of t.docs){let t=r._n(i.data()?.roles);t.includes(e)&&await(0,l.setDoc)((0,l.doc)(n.ui,I,i.id),{roles:t.filter(t=>t!==e)},{merge:!0})}}var H={collection:`sys_configs`,doc:`tab_icons`},Se=`fbos_tab_icons`,Ce=e=>{let t={};if(e&&typeof e==`object`)for(let[n,r]of Object.entries(e)){let e=typeof r==`string`?r.trim():``;e&&(t[n]=e)}return t},U=()=>{try{let e=localStorage.getItem(Se);return e?Ce(JSON.parse(e)):null}catch{return null}},W=null,G=null,we=null,K=e=>{W=e,G?.forEach(t=>t(e))};function Te(e){let t=!G;return G||=new Set,G.add(e),t?we=(0,l.onSnapshot)((0,l.doc)(n.ui,H.collection,H.doc),e=>{let t=Ce(e.exists()?e.data():{});try{localStorage.setItem(Se,JSON.stringify(t))}catch{}K(t)},()=>K(W??U()??{})):W&&e(W),()=>{G?.delete(e),!G?.size&&(we?.(),we=null,G=null)}}function Ee(){let[e,t]=(0,s.useState)(()=>W??U()??{});return(0,s.useEffect)(()=>Te(t),[]),e}async function De(e,t){let r=String(t||``).trim(),i=W,a={...W??U()??{}};r?a[e]=r:delete a[e],K(a);try{await(0,l.setDoc)((0,l.doc)(n.ui,H.collection,H.doc),{[e]:r},{merge:!0})}catch(e){throw i&&K(i),e}}var Oe={drive:`assets`,submissions:`inbox`,requests:`inbox`},ke=new Set([`setup`]),Ae=e=>{let t=(e||[]).map(e=>typeof e==`string`?{id:e,hidden:!1}:{id:String(e.id),hidden:!!e.hidden}).map(e=>({...e,id:Oe[e.id]||e.id})).filter(e=>!ke.has(e.id));return t.filter((e,n)=>t.findIndex(t=>t.id===e.id)===n)},je=[{id:`inbox`,hidden:!1},{id:`users`,hidden:!1},{id:`signin`,hidden:!1},{id:`pages`,hidden:!1},{id:`mybookings`,hidden:!1},{id:`billing`,hidden:!1},{id:`payments`,hidden:!1},{id:`transactions`,hidden:!1},{id:`email`,hidden:!1},{id:`schedule`,hidden:!1},{id:`forms`,hidden:!1},{id:`theme`,hidden:!1},{id:`assets`,hidden:!1},{id:`publish`,hidden:!1}],Me=/^#(?:[0-9a-f]{3}|[0-9a-f]{6}|[0-9a-f]{8})$/i,q=e=>{let t=String(e??``).trim();return Me.test(t)?t:``};function Ne(e,t){let n=String(e??``).trim();if(!n||/^data:/i.test(n))return``;try{let e=new URL(n,t||void 0);return/^https?:$/.test(e.protocol)?e.href:``}catch{return``}}function Pe(e,t){let n=e?.colors?.light||{},r=Array.isArray(n.buttonGradient)?n.buttonGradient.map(q).filter(Boolean).slice(0,2):[];return{appName:String(e?.appName||``).replace(/\s+/g,` `).trim().slice(0,60),logoUrl:Ne(e?.logoUrl,t),appUrl:Ne(t,``),accent:q(n.accent),foreground:q(n.foreground),buttonText:q(n.buttonText),buttonGradient:r,panelBg:q(n.panelBg),panelBorder:q(n.panelBorder)}}function Fe(e){return{appName:String(e?.appName||``),logoUrl:String(e?.logoUrl||``),appUrl:String(e?.appUrl||``),accent:String(e?.accent||``),foreground:String(e?.foreground||``),buttonText:String(e?.buttonText||``),buttonGradient:Array.isArray(e?.buttonGradient)?e.buttonGradient.map(String):[],panelBg:String(e?.panelBg||``),panelBorder:String(e?.panelBorder||``)}}var Ie=``,Le=e=>/^https?:\/\/(localhost|127\.0\.0\.1)(:\d+)?$/i.test(e);function Re(){let e=null;try{e=y().activeConfig}catch{e=null}let t=!!n.Ft()?.isAdmin,r=typeof window<`u`?window.location.origin:``,i=e&&t?JSON.stringify(Pe(e,r)):``;(0,s.useEffect)(()=>{if(!i||!n.ui||i===Ie)return;let e=!1;return(async()=>{try{let t=(0,l.doc)(n.ui,`sys_configs`,`emailBrand`),a=await(0,l.getDoc)(t);if(e)return;let o=a.exists()?Fe(a.data()):null,s=JSON.parse(i);Le(r)&&o?.appUrl&&(s.appUrl=o.appUrl),(!o||JSON.stringify(o)!==JSON.stringify(s))&&await(0,l.setDoc)(t,s),Ie=i}catch{}})(),()=>{e=!0}},[i])}function ze(e,t,n,r){let i=0,a=!0;for(let r=0;r<e.length;r++)if(i+=e[r]+(r>0?n:0),i>t){a=!1;break}if(a)return e.length;let o=0,s=0;for(let i=0;i<e.length;i++){let a=o+e[i]+(i>0?n:0);if(a+r>t)break;o=a,s++}return Math.max(s,1)}function Be({count:e,listKey:t,shown:n,gap:r,moreButtonWidth:i}){let a=(0,s.useRef)(null),o=(0,s.useRef)(null),[c,l]=(0,s.useState)(null);return(0,s.useLayoutEffect)(()=>{if(!n)return;let s=!0,c=0,u=()=>{let n=a.current,c=o.current;if(!s||!n||!c)return;let u=window.getComputedStyle(n),d=n.clientWidth-(parseFloat(u.paddingLeft)||0)-(parseFloat(u.paddingRight)||0);if(d<=0)return;let f=c.querySelectorAll(`[data-measure]`);if(f.length!==e)return;let p=parseFloat(u.columnGap);l({listKey:t,count:ze(Array.from(f,e=>e.offsetWidth),d,Number.isFinite(p)?p:r,i)})},d=()=>{cancelAnimationFrame(c),c=requestAnimationFrame(u)};u(),document.fonts?.ready.then(d).catch(()=>{});let f=typeof ResizeObserver>`u`?null:new ResizeObserver(d);return f&&a.current&&f.observe(a.current),()=>{s=!1,cancelAnimationFrame(c),f?.disconnect()}},[e,t,n,r,i]),{rowRef:a,measureRef:o,visible:c&&c.listKey===t?Math.min(c.count,e):e}}var Ve=`fbos_tab_access`,He=()=>{try{let e=localStorage.getItem(Ve),t=e?JSON.parse(e):null;return t&&typeof t==`object`?t:null}catch{return null}},J=null,Y=null,Ue=null,X=e=>{J=e,Y?.forEach(t=>t(e))};function We(e){let t=!Y;return Y||=new Set,Y.add(e),t?Ue=(0,l.onSnapshot)((0,l.doc)(n.ui,o.t.collection,o.t.doc),e=>{let t=e.exists()?e.data():{};try{localStorage.setItem(Ve,JSON.stringify(t))}catch{}X({access:t,live:!0})},()=>X({access:J?.access??He()??{},live:!0})):J?.live&&e(J),()=>{Y?.delete(e),!Y?.size&&(Ue?.(),Ue=null,Y=null)}}function Ge(){let[e,t]=(0,s.useState)(()=>{if(J)return J;let e=He();return e?{access:e,live:!1}:null});return(0,s.useEffect)(()=>We(t),[]),{access:e?.access??{},loaded:!!e,live:!!e?.live}}function Ke(e){let{access:t,loaded:n,live:r}=Ge();return{audience:o.o(t,e),loaded:n,live:r}}async function qe(e,t){let r=J,i=o.n(t);X({access:{...J?.access??He()??{},[e]:i},live:J?.live??!1});try{await(0,l.setDoc)((0,l.doc)(n.ui,o.t.collection,o.t.doc),{[e]:i},{merge:!0})}catch(e){throw r&&X(r),e}}var Z=r.Bn(`admin`),Q={inbox:{path:`/inbox`,label:`Inbox`,icon:E,roles:Z},users:{path:`/users`,label:`Users`,icon:oe,roles:Z},signin:{path:`/sign-in`,label:`Sign in`,icon:w,roles:Z},pages:{path:`/pages`,label:`Pages`,icon:t.g,roles:Z},mybookings:{path:`/my-bookings`,label:`My bookings`,icon:a.W,roles:r.Bn(`user`)},billing:{path:`/billing`,label:`Billing`,icon:O,roles:r.Bn(`user`)},payments:{path:`/payments`,label:`Payments`,icon:x,roles:Z},transactions:{path:`/transactions`,label:`Transactions`,icon:O,roles:Z},email:{path:`/email`,label:`Email`,icon:t.h,roles:Z},schedule:{path:`/schedule`,label:`Schedule`,icon:ie,roles:r.Bn(`internal`)},forms:{path:`/forms`,label:`Forms`,icon:M,roles:Z},theme:{path:`/theme`,label:`Theme`,icon:A,roles:Z},assets:{path:`/assets`,label:`Assets`,icon:te,roles:Z},publish:{path:`/publish`,label:`Publish App`,icon:re,roles:Z}},Je=e=>{let t=e=>e.id in Q;return[...e.filter(e=>!t(e)),...e.filter(t)]};function $(e){try{let t=localStorage.getItem(e);return t?JSON.parse(t):null}catch{return null}}function Ye(){let[e,t]=(0,s.useState)(()=>$(`fbos_nav_tabs`)??{}),[r,i]=(0,s.useState)(()=>{let e=$(`fbos_nav_order`);return Array.isArray(e)?Ae(e):je}),[a,o]=(0,s.useState)(()=>$(`fbos_nav_tabs`)!==null),[c,u]=(0,s.useState)(()=>$(`fbos_nav_order`)!==null);return(0,s.useEffect)(()=>{let e=(0,l.onSnapshot)((0,l.collection)(n.ui,`sys_tabs`),e=>{let n={};e.forEach(e=>{n[e.id]=e.data()}),t(n),o(!0);try{localStorage.setItem(`fbos_nav_tabs`,JSON.stringify(n))}catch{}},()=>{o(!0)}),r=(0,l.onSnapshot)((0,l.doc)(n.ui,`sys_configs`,`tab_order`),e=>{let t=e.exists()&&Array.isArray(e.data().order)?Ae(e.data().order):je;i(t),u(!0);try{localStorage.setItem(`fbos_nav_order`,JSON.stringify(t))}catch{}},()=>{u(!0)}),a=setTimeout(()=>{o(!0),u(!0)},3e3);return()=>{e(),r(),clearTimeout(a)}},[]),{tabOverrides:e,tabOrder:r,loaded:a&&c}}function Xe({tabOverrides:e,tabOrder:n,hasBooking:i=!1,hasBought:a=!1,paymentsOn:s=!1,tabIcons:c={},tabAccess:l}){let u={};Object.entries(Q).forEach(([e,n])=>{e===`schedule`||e===`mybookings`||e===`mybookings`&&!i||e===`billing`&&!a||e===`transactions`&&!s||(u[e]={id:e,...n,icon:t.p(c[e])??n.icon},o.r(e)&&(u[e].roles=o.c(o.o(l,e))))});let d={...e};for(let[t,n]of ce())n.isPublic||(d[t]={...n.config,...e[t]});for(let[t,n]of Object.entries(e)){let r=String(n?.fileId||``);r&&r!==t&&!e[r]&&(F(d[r])&&d[t]?.inMenu===void 0&&(d[t]={...d[t],inMenu:!1}),delete d[r])}Object.entries(d).forEach(([e,n])=>{let i=u[e],a=t.p(n?.iconName)??i?.icon??t.g,o=i?.roles??Z;n?.pageType&&!Q[e]&&(o=r.Gn(n));let s=n?.route?n.route.startsWith(`/`)?n.route:`/`+n.route:i?.path??`/`+e,c=n?.tabName||n?.pageTitle||n?.pageName||i?.label||e,l=Q[e]?``:r.Nn(n);u[e]={id:e,path:s,label:c,icon:a,roles:o,group:l}});let f=[],p=new Set;n.forEach(e=>{e.hidden||p.has(e.id)||u[e.id]&&(f.push(u[e.id]),p.add(e.id))});let m=[],h=[];return Object.keys(u).forEach(e=>{if(p.has(e))return;let t=n.find(t=>t.id===e);t?.hidden||!t&&F(d[e])||(e in d&&!t?m.push(u[e]):h.push(u[e]))}),m.length>0&&f.unshift(...m),h.length>0&&f.push(...h),Je(f)}function Ze(e,t,n,i){return r.Un(e.roles,r.Kn(t,n))?e.group?!i.live&&!i.groups.some(t=>t.id===e.group)?!1:r.Fn(t,{group:e.group},i.groups):!0:!1}function Qe(){let{user:e,userRole:t}=n.Ft(),{tabOverrides:r,tabOrder:i,loaded:a}=Ye(),o=V();return a?Xe({tabOverrides:r,tabOrder:i}).filter(e=>!(e.id in Q)).filter(n=>Ze(n,t,!!e,o)):[]}function $e({customTabs:e=[]}){let{pathname:r}=(0,u.useLocation)(),{user:i,userRole:o,roleResolved:l}=n.Ft();Re();let d=a.b(``,``).bookings.length>0,f=n.zn(),[p]=(0,s.useState)(()=>$(`fbos_nav_payments`)===!0),m=f.loading?p:f.configured;(0,s.useEffect)(()=>{if(!f.loading)try{localStorage.setItem(`fbos_nav_payments`,JSON.stringify(f.configured))}catch{}},[f.loading,f.configured]);let h=i?.uid||``,g=n.Ln(h),[_]=(0,s.useState)(()=>{let e=$(`fbos_nav_billing`);return!!h&&e?.uid===h&&e?.bought===!0}),v=g.loading?_:g.bought;(0,s.useEffect)(()=>{if(!(g.loading||!h))try{localStorage.setItem(`fbos_nav_billing`,JSON.stringify({uid:h,bought:g.bought}))}catch{}},[g.loading,g.bought,h]);let y=Ge(),b=Ee(),x=V(),[S,C]=(0,s.useState)(!1),w=(0,s.useRef)(null),{tabOverrides:T,tabOrder:te,loaded:ne}=Ye(),E=l!==!1&≠(0,s.useEffect)(()=>{function e(e){w.current&&!w.current.contains(e.target)&&C(!1)}return document.addEventListener(`mousedown`,e),()=>document.removeEventListener(`mousedown`,e)},[]);let D=[...Xe({tabOverrides:T,tabOrder:te,hasBooking:d,hasBought:v,paymentsOn:m,tabIcons:b,tabAccess:y.access}),...e.map(e=>({...e,id:e.path}))].filter(e=>Ze(e,o,!!i,x)),O=D.some(e=>t.f(e.icon));(0,s.useEffect)(()=>{O&&t.m()},[O]);let{rowRef:k,measureRef:A,visible:j}=Be({count:D.length,listKey:D.map(e=>e.id+e.label).join(`|`),shown:E&&D.length>0,gap:40,moreButtonWidth:52}),M=D.slice(0,j),N=D.slice(j),re=D.map(e=>e.path).filter(e=>{let t=e.replace(/\/+$/,``);return r===e||t!==``&&r.startsWith(t+`/`)}).sort((e,t)=>t.length-e.length)[0],P=e=>e.path===re,ie=N.some(e=>P(e));return E?D.length===0?null:(0,c.jsxs)(c.Fragment,{children:[(0,c.jsx)(`div`,{ref:A,"aria-hidden":`true`,className:`flex items-center gap-5 md:gap-10 whitespace-nowrap px-1`,style:{position:`fixed`,top:-9999,left:0,visibility:`hidden`,pointerEvents:`none`},children:D.map((e,t)=>{let n=e.icon;return(0,c.jsxs)(`span`,{"data-measure":!0,className:`flex items-center gap-2 text-[13px] md:text-[14.5px] font-semibold shrink-0 pb-2.5 md:pb-3`,children:[(0,c.jsx)(n,{className:`w-4 h-4 md:w-[18px] md:h-[18px]`}),e.label]},t)})}),(0,c.jsxs)(`div`,{ref:k,className:`w-full flex items-center gap-5 md:gap-10 mb-5 border-b border-[var(--panel-border)] px-1 whitespace-nowrap relative`,children:[M.map(e=>{let t=P(e),n=e.icon;return(0,c.jsxs)(u.Link,{to:e.path||`/`,className:`flex items-center gap-2 text-[13px] md:text-[14.5px] font-semibold transition-all duration-300 pb-2.5 md:pb-3 -mb-[1px] border-b-2 shrink-0 ${t?`text-accent border-accent`:`text-foreground/50 hover:text-foreground/80 border-transparent`}`,children:[(0,c.jsx)(n,{className:`w-4 h-4 md:w-[18px] md:h-[18px]`}),e.label]},e.path||e.id)}),N.length>0&&(0,c.jsxs)(`div`,{className:`relative shrink-0 ml-auto`,ref:w,children:[(0,c.jsx)(`button`,{onClick:()=>C(!S),className:`flex items-center justify-center transition-all duration-300 pb-2.5 md:pb-3 -mb-[1px] border-b-2 cursor-pointer ${ie?`text-accent border-accent`:`text-foreground/50 hover:text-foreground/80 border-transparent`}`,title:`More items`,children:(0,c.jsx)(ee,{className:`w-[18px] h-[18px] md:w-5 md:h-5`})}),(0,c.jsx)(n.rt,{children:S&&(0,c.jsx)(n.nt.div,{initial:{opacity:0,y:10},animate:{opacity:1,y:0},exit:{opacity:0,y:10},className:`absolute top-[100%] right-0 mt-2 min-w-[200px] glass-popover border border-[var(--panel-border)] rounded-2xl z-50 flex flex-col py-2 overflow-hidden`,children:N.map(e=>{let t=P(e),n=e.icon;return(0,c.jsxs)(u.Link,{to:e.path||`/`,onClick:()=>C(!1),className:`flex items-center gap-3 px-5 py-3 text-[14px] font-medium transition-colors ${t?`text-accent bg-accent/5`:`text-foreground/70 hover:text-foreground hover:bg-foreground/5`}`,children:[(0,c.jsx)(n,{className:`w-4 h-4`}),e.label]},e.path||e.id)})})})]})]})]}):(0,c.jsx)(`div`,{className:`w-full flex items-center gap-5 md:gap-10 mb-5 border-b border-[var(--panel-border)] px-1 whitespace-nowrap relative`,children:[56,72,64].map((e,t)=>(0,c.jsxs)(`span`,{className:`flex items-center gap-2 pb-2.5 md:pb-3 h-[30px] md:h-[33px] shrink-0`,"aria-hidden":`true`,children:[(0,c.jsx)(`span`,{className:`w-4 h-4 md:w-[18px] md:h-[18px] rounded-md bg-foreground/5 animate-pulse`}),(0,c.jsx)(`span`,{className:`h-3.5 rounded bg-foreground/5 animate-pulse`,style:{width:e}})]},t))})}Object.defineProperty(exports,`A`,{enumerable:!0,get:function(){return w}}),Object.defineProperty(exports,`C`,{enumerable:!0,get:function(){return ie}}),Object.defineProperty(exports,`D`,{enumerable:!0,get:function(){return O}}),Object.defineProperty(exports,`E`,{enumerable:!0,get:function(){return A}}),Object.defineProperty(exports,`M`,{enumerable:!0,get:function(){return v}}),Object.defineProperty(exports,`N`,{enumerable:!0,get:function(){return y}}),Object.defineProperty(exports,`O`,{enumerable:!0,get:function(){return E}}),Object.defineProperty(exports,`S`,{enumerable:!0,get:function(){return oe}}),Object.defineProperty(exports,`T`,{enumerable:!0,get:function(){return M}}),Object.defineProperty(exports,`_`,{enumerable:!0,get:function(){return ye}}),Object.defineProperty(exports,`a`,{enumerable:!0,get:function(){return Ge}}),Object.defineProperty(exports,`b`,{enumerable:!0,get:function(){return le}}),Object.defineProperty(exports,`c`,{enumerable:!0,get:function(){return Ae}}),Object.defineProperty(exports,`d`,{enumerable:!0,get:function(){return ge}}),Object.defineProperty(exports,`f`,{enumerable:!0,get:function(){return be}}),Object.defineProperty(exports,`g`,{enumerable:!0,get:function(){return ve}}),Object.defineProperty(exports,`h`,{enumerable:!0,get:function(){return _e}}),Object.defineProperty(exports,`i`,{enumerable:!0,get:function(){return qe}}),Object.defineProperty(exports,`j`,{enumerable:!0,get:function(){return x}}),Object.defineProperty(exports,`k`,{enumerable:!0,get:function(){return te}}),Object.defineProperty(exports,`l`,{enumerable:!0,get:function(){return De}}),Object.defineProperty(exports,`m`,{enumerable:!0,get:function(){return he}}),Object.defineProperty(exports,`n`,{enumerable:!0,get:function(){return Q}}),Object.defineProperty(exports,`o`,{enumerable:!0,get:function(){return Ke}}),Object.defineProperty(exports,`p`,{enumerable:!0,get:function(){return xe}}),Object.defineProperty(exports,`r`,{enumerable:!0,get:function(){return Qe}}),Object.defineProperty(exports,`s`,{enumerable:!0,get:function(){return Be}}),Object.defineProperty(exports,`t`,{enumerable:!0,get:function(){return $e}}),Object.defineProperty(exports,`u`,{enumerable:!0,get:function(){return Ee}}),Object.defineProperty(exports,`v`,{enumerable:!0,get:function(){return V}}),Object.defineProperty(exports,`w`,{enumerable:!0,get:function(){return re}}),Object.defineProperty(exports,`x`,{enumerable:!0,get:function(){return ce}}),Object.defineProperty(exports,`y`,{enumerable:!0,get:function(){return F}});
|
|
1
|
+
const e=require(`./chunk-CiTBaPhY.cjs`),t=require(`./PageTitle-BL50s4qY.cjs`),n=require(`./TimeZoneField-Ckn1pKAL.cjs`),r=require(`./schedule-BAea6q8_.cjs`),i=require(`./chevron-down-lyDK1rfL.cjs`),a=require(`./scheduleData-BXjNXVHY.cjs`),o=require(`./tabAudience-2fJAN1aD.cjs`);let s=require(`react`);s=e.a(s,1);let c=require(`react/jsx-runtime`),l=require(`firebase/firestore`),u=require(`react-router-dom`);var d=typeof window<`u`?s.useLayoutEffect:s.useEffect,f=(0,s.createContext)(void 0),p=`'Inter', system-ui, sans-serif`,m=e=>e.trim().replace(/\s+/g,`+`);function h(e,t){let n=[[`--display-family`,String(t?.display||``).trim()],[`--body-family`,String(t?.body||``).trim()]];for(let[t,r]of n){if(!r){e.style.removeProperty(t);continue}let n=`theme-font-${m(r).toLowerCase().replace(/[^a-z0-9+]/g,``)}`;if(typeof document<`u`&&!document.getElementById(n)){let e=document.createElement(`link`);e.id=n,e.rel=`stylesheet`,e.href=`https://fonts.googleapis.com/css2?family=${m(r)}:wght@300;400;500;600;700;800&display=swap`,document.head.appendChild(e)}e.style.setProperty(t,`'${r.replace(/'/g,``)}', ${p}`)}}var g=e=>{let t=e?.defaultTheme;return t!==`light`&&t!==`dark`||e?.showThemeToggle?null:t},_={get(e){try{return localStorage.getItem(e)}catch{return null}},set(e,t){try{localStorage.setItem(e,t)}catch{}},drop(e){try{localStorage.removeItem(e)}catch{}}};function v({children:e,scopeSelector:r}){let i=n.mi(),a=(0,s.useMemo)(()=>i?.themeConfig||t.b,[i?.themeConfig]),o=g(a),l=!!a.showThemeToggle;(0,s.useEffect)(()=>{try{localStorage.removeItem(`theme_config_cache`),localStorage.removeItem(`theme_saved_cache`)}catch{}console.info(`Your AI Firebase ${t.y} · colours from theme.config.ts`)},[]);let[u,p]=(0,s.useState)(()=>{if(o)return o;if(typeof window>`u`)return a.defaultTheme||`system`;let e=_.get(`theme-mode`),t=_.get(`last-seen-default-theme`);return a.defaultTheme&&a.defaultTheme!==t?(_.set(`last-seen-default-theme`,a.defaultTheme),_.drop(`theme-mode`),a.defaultTheme):e||a.defaultTheme||`system`}),[m,v]=(0,s.useState)(()=>{if(o)return o;if(typeof window>`u`)return a.defaultTheme===`light`?`light`:`dark`;let e=_.get(`theme-mode`),t=_.get(`last-seen-default-theme`),n=e||a.defaultTheme||`system`;return a.defaultTheme&&a.defaultTheme!==t&&(n=a.defaultTheme),n===`system`?window.matchMedia(`(prefers-color-scheme: light)`).matches?`light`:`dark`:n});return(0,s.useEffect)(()=>{let e=a.defaultTheme;e&&(o&&p(o),e!==_.get(`last-seen-default-theme`)&&(_.set(`last-seen-default-theme`,e),_.drop(`theme-mode`),p(e)))},[a.defaultTheme,o]),(0,s.useEffect)(()=>{let e=e=>{u===`system`&&v(e.matches?`light`:`dark`)},t=window.matchMedia(`(prefers-color-scheme: light)`);return u===`system`?(v(t.matches?`light`:`dark`),t.addEventListener(`change`,e)):v(u),()=>t.removeEventListener(`change`,e)},[u]),d(()=>{let e=(r?document.querySelector(r):document.documentElement)||document.documentElement,t=m===`dark`?a.colors.dark:a.colors.light;e.style.setProperty(`--bg-color`,t.background),e.style.setProperty(`--bg-secondary-color`,t.backgroundSecondary||t.background),e.style.setProperty(`--fg-color`,t.foreground),e.style.setProperty(`--accent-color`,t.accent);let n=m===`dark`;e.style.setProperty(`--panel-bg`,t.panelBg||`color-mix(in srgb, ${t.accent} ${n?`5%`:`4%`}, transparent)`),e.style.setProperty(`--panel-border`,t.panelBorder||`color-mix(in srgb, ${t.accent} 15%, transparent)`);let i=(e,t,n)=>{if(!e||e.length===0)return t||`transparent`;if(e.length===1)return e[0];let r=e.map((t,n)=>`${t} ${Math.round(n/(e.length-1)*100)}%`).join(`, `);return n===`conic`?`conic-gradient(from 180deg at 50% 100%, ${r})`:`linear-gradient(135deg, ${r})`},o=`linear-gradient(135deg, color-mix(in oklab, ${t.accent} ${n?`70%`:`78%`}, black) 0%, ${t.accent} 100%)`,s=`linear-gradient(135deg, color-mix(in oklab, ${t.accent} ${n?`80%`:`85%`}, black) 0%, color-mix(in oklab, ${t.accent} 72%, white) 100%)`;e.style.setProperty(`--button-bg`,i(t.buttonGradient,o,t.buttonGradientShape)),e.style.setProperty(`--button-fg`,t.buttonText||`#ffffff`),e.style.setProperty(`--button-hover-bg`,i(t.buttonHoverGradient||t.buttonGradient,s,t.buttonGradientShape)),e.style.setProperty(`--text-gradient`,i(t.textGradient,`linear-gradient(135deg, ${t.foreground} 0%, ${t.accent} 100%)`)),e.style.setProperty(`--glow-color`,t.glowColor||`color-mix(in srgb, ${t.accent} ${n?`40%`:`30%`}, transparent)`),e.style.setProperty(`--notification-icon-color`,t.notificationIconColor||t.accent);let c=t.secondaryButton?.bg||(m===`dark`?`rgba(255, 255, 255, 0.05)`:`rgba(0, 0, 0, 0.03)`),l=t.secondaryButton?.border||(m===`dark`?`rgba(255, 255, 255, 0.1)`:`rgba(0, 0, 0, 0.06)`),d=t.secondaryButton?.text||t.foreground;if(e.style.setProperty(`--btn-sec-bg`,c),e.style.setProperty(`--btn-sec-border`,l),e.style.setProperty(`--btn-sec-text`,d),e.style.setProperty(`--selection-bg`,t.selectionBg||`color-mix(in srgb, var(--accent-color) 40%, transparent)`),e.style.setProperty(`--selection-text`,t.selectionText||`#ffffff`),e.setAttribute(`data-theme`,m),_.set(`theme-mode`,u),a.cornerRounding===`custom`&&a.cornerRadii?(e.style.setProperty(`--btn-radius`,`${parseFloat(String(a.cornerRadii.buttonRadius))||0}rem`),e.style.setProperty(`--card-radius`,`${parseFloat(String(a.cornerRadii.cardRadius))||0}rem`),e.style.setProperty(`--input-radius`,`${parseFloat(String(a.cornerRadii.inputRadius))||0}rem`),e.style.setProperty(`--modal-radius`,`${parseFloat(String(a.cornerRadii.modalRadius))||0}rem`)):(e.style.setProperty(`--btn-radius`,`0.75rem`),e.style.setProperty(`--card-radius`,`1.5rem`),e.style.setProperty(`--input-radius`,`0.75rem`),e.style.setProperty(`--modal-radius`,`1.5rem`)),!document.getElementById(`inter-font`)){let e=document.createElement(`link`);e.id=`inter-font`,e.rel=`stylesheet`,e.href=`https://fonts.googleapis.com/css2?family=Inter:wght@300;400;500;600;700;800;900&display=swap`,document.head.appendChild(e)}h(e,a.fonts),e.style.fontSize=`16px`,e.style.setProperty(`--weight-h1`,`800`),e.style.setProperty(`--weight-h2`,`700`),e.style.setProperty(`--weight-h3`,`700`),e.style.setProperty(`--leading-normal`,`1.5`);let f=document.querySelector(`link[rel*='icon']`);f||(f=document.createElement(`link`),f.rel=`icon`,document.head.appendChild(f)),a.faviconUrl&&(f.href=a.faviconUrl),a.appName&&(document.title=a.appName)},[m,u,a]),(0,c.jsx)(f.Provider,{value:{theme:m,setTheme:e=>{o||p(e)},toggleTheme:()=>{o||p(m===`light`?`dark`:`light`)},isSystem:u===`system`,setIsSystem:e=>{o||p(e?`system`:m)},config:a,activeConfig:a,canSwitchTheme:l},children:e})}var y=()=>{let e=(0,s.useContext)(f);if(!e)throw Error(`useTheme must be used within ThemeProvider`);return e},b={name:`credit-card`,size:24,node:[[`rect`,{width:`20`,height:`14`,x:`2`,y:`5`,rx:`2`,key:`ynyp8z`}],[`line`,{x1:`2`,x2:`22`,y1:`10`,y2:`10`,key:`1b3vmo`}],[`path`,{d:`M6 14h2`,key:`mk7k0u`}]]};b.node;var x=i.n(b),S={name:`ellipsis-vertical`,size:24,node:[[`circle`,{cx:`12`,cy:`12`,r:`1`,key:`41hilf`}],[`circle`,{cx:`12`,cy:`5`,r:`1`,key:`gxeob9`}],[`circle`,{cx:`12`,cy:`19`,r:`1`,key:`lyex9k`}]],aliases:[`more-vertical`]};S.node;var ee=i.n(S),C={name:`fingerprint-pattern`,size:24,node:[[`path`,{d:`M12 10a2 2 0 0 0-2 2c0 1.02-.1 2.51-.26 4`,key:`1nerag`}],[`path`,{d:`M14 13.12c0 2.38 0 6.38-1 8.88`,key:`o46ks0`}],[`path`,{d:`M17.29 21.02c.12-.6.43-2.3.5-3.02`,key:`ptglia`}],[`path`,{d:`M2 12a10 10 0 0 1 18-6`,key:`ydlgp0`}],[`path`,{d:`M2 16h.01`,key:`1gqxmh`}],[`path`,{d:`M21.8 16c.2-2 .131-5.354 0-6`,key:`drycrb`}],[`path`,{d:`M5 19.5C5.5 18 6 15 6 12a6 6 0 0 1 .34-2`,key:`1tidbn`}],[`path`,{d:`M8.65 22c.21-.66.45-1.32.57-2`,key:`13wd9y`}],[`path`,{d:`M9 6.8a6 6 0 0 1 9 5.2v2`,key:`1fr1j5`}]],aliases:[`fingerprint`]};C.node;var w=i.n(C),T={name:`hard-drive`,size:24,node:[[`path`,{d:`M10 16h.01`,key:`1bzywj`}],[`path`,{d:`M2.212 11.577a2 2 0 0 0-.212.896V18a2 2 0 0 0 2 2h16a2 2 0 0 0 2-2v-5.527a2 2 0 0 0-.212-.896L18.55 5.11A2 2 0 0 0 16.76 4H7.24a2 2 0 0 0-1.79 1.11z`,key:`18tbho`}],[`path`,{d:`M21.946 12.013H2.054`,key:`zqlbp7`}],[`path`,{d:`M6 16h.01`,key:`1pmjb7`}]]};T.node;var te=i.n(T),ne={name:`inbox`,size:24,node:[[`polyline`,{points:`22 12 16 12 14 15 10 15 8 12 2 12`,key:`o97t9d`}],[`path`,{d:`M5.45 5.11 2 12v6a2 2 0 0 0 2 2h16a2 2 0 0 0 2-2v-6l-3.45-6.89A2 2 0 0 0 16.76 4H7.24a2 2 0 0 0-1.79 1.11z`,key:`oot6mr`}]]};ne.node;var E=i.n(ne),D={name:`nfc`,size:24,node:[[`path`,{d:`M6 8.32a7.43 7.43 0 0 1 0 7.36`,key:`9iaqei`}],[`path`,{d:`M9.46 6.21a11.76 11.76 0 0 1 0 11.58`,key:`1yha7l`}],[`path`,{d:`M12.91 4.1a15.91 15.91 0 0 1 .01 15.8`,key:`4iu2gk`}],[`path`,{d:`M16.37 2a20.16 20.16 0 0 1 0 20`,key:`sap9u2`}]]};D.node;var O=i.n(D),k={name:`palette`,size:24,node:[[`path`,{d:`M12 22a1 1 0 0 1 0-20 10 9 0 0 1 10 9 5 5 0 0 1-5 5h-2.25a1.75 1.75 0 0 0-1.4 2.8l.3.4a1.75 1.75 0 0 1-1.4 2.8z`,key:`e79jfc`}],[`circle`,{cx:`13.5`,cy:`6.5`,r:`.5`,fill:`currentColor`,key:`1okk4w`}],[`circle`,{cx:`17.5`,cy:`10.5`,r:`.5`,fill:`currentColor`,key:`f64h9f`}],[`circle`,{cx:`6.5`,cy:`12.5`,r:`.5`,fill:`currentColor`,key:`qy21gx`}],[`circle`,{cx:`8.5`,cy:`7.5`,r:`.5`,fill:`currentColor`,key:`fotxhn`}]]};k.node;var A=i.n(k),j={name:`rectangle-ellipsis`,size:24,node:[[`rect`,{width:`20`,height:`12`,x:`2`,y:`6`,rx:`2`,key:`9lu3g6`}],[`path`,{d:`M12 12h.01`,key:`1mp3jc`}],[`path`,{d:`M17 12h.01`,key:`1m0b6t`}],[`path`,{d:`M7 12h.01`,key:`eqddd0`}]],aliases:[`form-input`]};j.node;var M=i.n(j),N={name:`rocket`,size:24,node:[[`path`,{d:`M12 15v5s3.03-.55 4-2c1.08-1.62 0-5 0-5`,key:`qeys4`}],[`path`,{d:`M4.5 16.5c-1.5 1.26-2 5-2 5s3.74-.5 5-2c.71-.84.7-2.13-.09-2.91a2.18 2.18 0 0 0-2.91-.09`,key:`u4xsad`}],[`path`,{d:`M9 12a22 22 0 0 1 2-3.95A12.88 12.88 0 0 1 22 2c0 2.72-.78 7.5-6 11a22.4 22.4 0 0 1-4 2z`,key:`676m9`}],[`path`,{d:`M9 12H4s.55-3.03 2-4c1.62-1.08 5 .05 5 .05`,key:`92ym6u`}]]};N.node;var re=i.n(N),P={name:`rotate-cw-fading-clock`,size:24,node:[[`path`,{d:`M12 3a9.75 9.75 0 0 1 6.74 2.74`,key:`1k3kxf`}],[`path`,{d:`M18.74 5.74 21 8`,key:`1eb40o`}],[`path`,{d:`M21 8V3`,key:`1et280`}],[`path`,{d:`M7.5 19.794c-6-3.464-6-12.124 0-15.588`,key:`19r0lp`}],[`path`,{d:`M7.5 4.206A9 9 0 0 1 12 3`,key:`s8r11`}],[`path`,{d:`M12 7v5l4 2`,key:`1fdv2h`}],[`path`,{d:`M14 20.775A9 9 0 0 1 12 21`,key:`184rgu`}],[`path`,{d:`M19 17.656a9 9 0 0 1-1.5 1.456`,key:`7qgp6l`}],[`path`,{d:`M21 12a9 9 0 0 1-.228 2`,key:`1h378y`}],[`path`,{d:`M21 8h-5`,key:`k0yzmk`}]]};P.node;var ie=i.n(P),ae={name:`users`,size:24,node:[[`path`,{d:`M16 21v-2a4 4 0 0 0-4-4H6a4 4 0 0 0-4 4v2`,key:`1yyitq`}],[`path`,{d:`M16 3.128a4 4 0 0 1 0 7.744`,key:`16gr8j`}],[`path`,{d:`M22 21v-2a4 4 0 0 0-3-3.87`,key:`kshegd`}],[`circle`,{cx:`9`,cy:`7`,r:`4`,key:`nufk8`}]]};ae.node;var oe=i.n(ae);function se(){return(typeof window<`u`?window.__FBOS_PAGES__:null)||{}}function ce(e=se()){let t=new Set,n=[];for(let[r,i]of Object.entries(e))!i||t.has(i)||(t.add(i),n.push([r,i]));return n}var F=e=>e?.inMenu===!1,le=(e,t,n)=>{let r=e.find(e=>e.id===t);return r?r.hidden===!0:F(n)},I=`sys_groups`,ue=`fbos_groups`,de=(e,t)=>({id:e,name:String(t?.name||e),roles:r._n(t?.roles),...typeof t?.createdAt==`number`?{createdAt:t.createdAt}:{}}),fe=(e,t)=>e.name.localeCompare(t.name),pe=()=>{try{let e=localStorage.getItem(ue),t=e?JSON.parse(e):null;return Array.isArray(t)?t.filter(e=>r.On(e?.id)).map(e=>de(e.id,e)):null}catch{return null}},L=null,R=null,z=null,B=e=>{L=e,R?.forEach(t=>t(e))};function me(e){let t=!R;return R||=new Set,R.add(e),t?z=(0,l.onSnapshot)((0,l.collection)(n.ui,I),e=>{let t=[];e.forEach(e=>{r.On(e.id)&&t.push(de(e.id,e.data()))}),t.sort(fe);try{localStorage.setItem(ue,JSON.stringify(t))}catch{}B({groups:t,live:!0})},()=>B({groups:L?.groups??pe()??[],live:!0})):L?.live&&e(L),()=>{R?.delete(e),!R?.size&&(z?.(),z=null,R=null)}}function V(){let[e,t]=(0,s.useState)(()=>{if(L)return L;let e=pe();return e?{groups:e,live:!1}:null});return(0,s.useEffect)(()=>me(t),[]),{groups:e?.groups??[],loaded:!!e,live:!!e?.live}}function he(e,t,n=``){let i=String(e||``).trim();if(!i)return`Type a name for the group first — Sales, say, or North branch.`;if(!r.On(r.Ln(i)))return`Use a name with at least two letters in it.`;let a=t.find(e=>e.id!==n&&(e.name.trim().toLowerCase()===i.toLowerCase()||!n&&e.id===r.Ln(i)));return a?`You already have a group called ${a.name}.`:``}async function ge(e){let t=String(e||``).trim().slice(0,48),i={id:r.Ln(t),name:t,roles:[],createdAt:Date.now()};return await(0,l.setDoc)((0,l.doc)(n.ui,I,i.id),{name:i.name,roles:[],createdAt:i.createdAt}),i}async function _e(e,t){let i=String(t||``).trim().slice(0,48);!i||!r.On(e)||await(0,l.setDoc)((0,l.doc)(n.ui,I,e),{name:i},{merge:!0})}async function ve(e,t){if(!r.On(e))return;let i=r._n(t),a=L;L&&B({...L,groups:L.groups.map(t=>t.id===e?{...t,roles:i}:t)});try{await(0,l.setDoc)((0,l.doc)(n.ui,I,e),{roles:i},{merge:!0})}catch(e){throw a&&B(a),e}}async function ye(e){let t=[];return r.On(e)&&(await(0,l.getDocs)((0,l.collection)(n.ui,`sys_tabs`))).forEach(n=>{r.Nn(n.data())===e&&t.push(n.id)}),t}async function be(e){if(r.On(e)){for(let t of await ye(e))await(0,l.setDoc)((0,l.doc)(n.ui,`sys_tabs`,t),{group:``},{merge:!0});await(0,l.deleteDoc)((0,l.doc)(n.ui,I,e))}}async function xe(e){let t=await(0,l.getDocs)((0,l.collection)(n.ui,I));for(let i of t.docs){let t=r._n(i.data()?.roles);t.includes(e)&&await(0,l.setDoc)((0,l.doc)(n.ui,I,i.id),{roles:t.filter(t=>t!==e)},{merge:!0})}}var H={collection:`sys_configs`,doc:`tab_icons`},Se=`fbos_tab_icons`,Ce=e=>{let t={};if(e&&typeof e==`object`)for(let[n,r]of Object.entries(e)){let e=typeof r==`string`?r.trim():``;e&&(t[n]=e)}return t},U=()=>{try{let e=localStorage.getItem(Se);return e?Ce(JSON.parse(e)):null}catch{return null}},W=null,G=null,we=null,K=e=>{W=e,G?.forEach(t=>t(e))};function Te(e){let t=!G;return G||=new Set,G.add(e),t?we=(0,l.onSnapshot)((0,l.doc)(n.ui,H.collection,H.doc),e=>{let t=Ce(e.exists()?e.data():{});try{localStorage.setItem(Se,JSON.stringify(t))}catch{}K(t)},()=>K(W??U()??{})):W&&e(W),()=>{G?.delete(e),!G?.size&&(we?.(),we=null,G=null)}}function Ee(){let[e,t]=(0,s.useState)(()=>W??U()??{});return(0,s.useEffect)(()=>Te(t),[]),e}async function De(e,t){let r=String(t||``).trim(),i=W,a={...W??U()??{}};r?a[e]=r:delete a[e],K(a);try{await(0,l.setDoc)((0,l.doc)(n.ui,H.collection,H.doc),{[e]:r},{merge:!0})}catch(e){throw i&&K(i),e}}var Oe={drive:`assets`,submissions:`inbox`,requests:`inbox`},ke=new Set([`setup`]),Ae=e=>{let t=(e||[]).map(e=>typeof e==`string`?{id:e,hidden:!1}:{id:String(e.id),hidden:!!e.hidden}).map(e=>({...e,id:Oe[e.id]||e.id})).filter(e=>!ke.has(e.id));return t.filter((e,n)=>t.findIndex(t=>t.id===e.id)===n)},je=[{id:`inbox`,hidden:!1},{id:`users`,hidden:!1},{id:`signin`,hidden:!1},{id:`pages`,hidden:!1},{id:`mybookings`,hidden:!1},{id:`billing`,hidden:!1},{id:`payments`,hidden:!1},{id:`transactions`,hidden:!1},{id:`email`,hidden:!1},{id:`schedule`,hidden:!1},{id:`forms`,hidden:!1},{id:`theme`,hidden:!1},{id:`assets`,hidden:!1},{id:`publish`,hidden:!1}],Me=/^#(?:[0-9a-f]{3}|[0-9a-f]{6}|[0-9a-f]{8})$/i,q=e=>{let t=String(e??``).trim();return Me.test(t)?t:``};function Ne(e,t){let n=String(e??``).trim();if(!n||/^data:/i.test(n))return``;try{let e=new URL(n,t||void 0);return/^https?:$/.test(e.protocol)?e.href:``}catch{return``}}function Pe(e,t){let n=e?.colors?.light||{},r=Array.isArray(n.buttonGradient)?n.buttonGradient.map(q).filter(Boolean).slice(0,2):[];return{appName:String(e?.appName||``).replace(/\s+/g,` `).trim().slice(0,60),logoUrl:Ne(e?.logoUrl,t),appUrl:Ne(t,``),accent:q(n.accent),foreground:q(n.foreground),buttonText:q(n.buttonText),buttonGradient:r,panelBg:q(n.panelBg),panelBorder:q(n.panelBorder)}}function Fe(e){return{appName:String(e?.appName||``),logoUrl:String(e?.logoUrl||``),appUrl:String(e?.appUrl||``),accent:String(e?.accent||``),foreground:String(e?.foreground||``),buttonText:String(e?.buttonText||``),buttonGradient:Array.isArray(e?.buttonGradient)?e.buttonGradient.map(String):[],panelBg:String(e?.panelBg||``),panelBorder:String(e?.panelBorder||``)}}var Ie=``,Le=e=>/^https?:\/\/(localhost|127\.0\.0\.1)(:\d+)?$/i.test(e);function Re(){let e=null;try{e=y().activeConfig}catch{e=null}let t=!!n.Ft()?.isAdmin,r=typeof window<`u`?window.location.origin:``,i=e&&t?JSON.stringify(Pe(e,r)):``;(0,s.useEffect)(()=>{if(!i||!n.ui||i===Ie)return;let e=!1;return(async()=>{try{let t=(0,l.doc)(n.ui,`sys_configs`,`emailBrand`),a=await(0,l.getDoc)(t);if(e)return;let o=a.exists()?Fe(a.data()):null,s=JSON.parse(i);Le(r)&&o?.appUrl&&(s.appUrl=o.appUrl),(!o||JSON.stringify(o)!==JSON.stringify(s))&&await(0,l.setDoc)(t,s),Ie=i}catch{}})(),()=>{e=!0}},[i])}function ze(e,t,n,r){let i=0,a=!0;for(let r=0;r<e.length;r++)if(i+=e[r]+(r>0?n:0),i>t){a=!1;break}if(a)return e.length;let o=0,s=0;for(let i=0;i<e.length;i++){let a=o+e[i]+(i>0?n:0);if(a+r>t)break;o=a,s++}return Math.max(s,1)}function Be({count:e,listKey:t,shown:n,gap:r,moreButtonWidth:i}){let a=(0,s.useRef)(null),o=(0,s.useRef)(null),[c,l]=(0,s.useState)(null);return(0,s.useLayoutEffect)(()=>{if(!n)return;let s=!0,c=0,u=()=>{let n=a.current,c=o.current;if(!s||!n||!c)return;let u=window.getComputedStyle(n),d=n.clientWidth-(parseFloat(u.paddingLeft)||0)-(parseFloat(u.paddingRight)||0);if(d<=0)return;let f=c.querySelectorAll(`[data-measure]`);if(f.length!==e)return;let p=parseFloat(u.columnGap);l({listKey:t,count:ze(Array.from(f,e=>e.offsetWidth),d,Number.isFinite(p)?p:r,i)})},d=()=>{cancelAnimationFrame(c),c=requestAnimationFrame(u)};u(),document.fonts?.ready.then(d).catch(()=>{});let f=typeof ResizeObserver>`u`?null:new ResizeObserver(d);return f&&a.current&&f.observe(a.current),()=>{s=!1,cancelAnimationFrame(c),f?.disconnect()}},[e,t,n,r,i]),{rowRef:a,measureRef:o,visible:c&&c.listKey===t?Math.min(c.count,e):e}}var Ve=`fbos_tab_access`,He=()=>{try{let e=localStorage.getItem(Ve),t=e?JSON.parse(e):null;return t&&typeof t==`object`?t:null}catch{return null}},J=null,Y=null,Ue=null,X=e=>{J=e,Y?.forEach(t=>t(e))};function We(e){let t=!Y;return Y||=new Set,Y.add(e),t?Ue=(0,l.onSnapshot)((0,l.doc)(n.ui,o.t.collection,o.t.doc),e=>{let t=e.exists()?e.data():{};try{localStorage.setItem(Ve,JSON.stringify(t))}catch{}X({access:t,live:!0})},()=>X({access:J?.access??He()??{},live:!0})):J?.live&&e(J),()=>{Y?.delete(e),!Y?.size&&(Ue?.(),Ue=null,Y=null)}}function Ge(){let[e,t]=(0,s.useState)(()=>{if(J)return J;let e=He();return e?{access:e,live:!1}:null});return(0,s.useEffect)(()=>We(t),[]),{access:e?.access??{},loaded:!!e,live:!!e?.live}}function Ke(e){let{access:t,loaded:n,live:r}=Ge();return{audience:o.o(t,e),loaded:n,live:r}}async function qe(e,t){let r=J,i=o.n(t);X({access:{...J?.access??He()??{},[e]:i},live:J?.live??!1});try{await(0,l.setDoc)((0,l.doc)(n.ui,o.t.collection,o.t.doc),{[e]:i},{merge:!0})}catch(e){throw r&&X(r),e}}var Z=r.Bn(`admin`),Q={inbox:{path:`/inbox`,label:`Inbox`,icon:E,roles:Z},users:{path:`/users`,label:`Users`,icon:oe,roles:Z},signin:{path:`/sign-in`,label:`Sign in`,icon:w,roles:Z},pages:{path:`/pages`,label:`Pages`,icon:t.g,roles:Z},mybookings:{path:`/my-bookings`,label:`My bookings`,icon:a.W,roles:r.Bn(`user`)},billing:{path:`/billing`,label:`Billing`,icon:O,roles:r.Bn(`user`)},payments:{path:`/payments`,label:`Payments`,icon:x,roles:Z},transactions:{path:`/transactions`,label:`Transactions`,icon:O,roles:Z},email:{path:`/email`,label:`Email`,icon:t.h,roles:Z},schedule:{path:`/schedule`,label:`Schedule`,icon:ie,roles:r.Bn(`internal`)},forms:{path:`/forms`,label:`Forms`,icon:M,roles:Z},theme:{path:`/theme`,label:`Theme`,icon:A,roles:Z},assets:{path:`/assets`,label:`Assets`,icon:te,roles:Z},publish:{path:`/publish`,label:`Publish App`,icon:re,roles:Z}},Je=e=>{let t=e=>e.id in Q;return[...e.filter(e=>!t(e)),...e.filter(t)]};function $(e){try{let t=localStorage.getItem(e);return t?JSON.parse(t):null}catch{return null}}function Ye(){let[e,t]=(0,s.useState)(()=>$(`fbos_nav_tabs`)??{}),[r,i]=(0,s.useState)(()=>{let e=$(`fbos_nav_order`);return Array.isArray(e)?Ae(e):je}),[a,o]=(0,s.useState)(()=>$(`fbos_nav_tabs`)!==null),[c,u]=(0,s.useState)(()=>$(`fbos_nav_order`)!==null);return(0,s.useEffect)(()=>{let e=(0,l.onSnapshot)((0,l.collection)(n.ui,`sys_tabs`),e=>{let n={};e.forEach(e=>{n[e.id]=e.data()}),t(n),o(!0);try{localStorage.setItem(`fbos_nav_tabs`,JSON.stringify(n))}catch{}},()=>{o(!0)}),r=(0,l.onSnapshot)((0,l.doc)(n.ui,`sys_configs`,`tab_order`),e=>{let t=e.exists()&&Array.isArray(e.data().order)?Ae(e.data().order):je;i(t),u(!0);try{localStorage.setItem(`fbos_nav_order`,JSON.stringify(t))}catch{}},()=>{u(!0)}),a=setTimeout(()=>{o(!0),u(!0)},3e3);return()=>{e(),r(),clearTimeout(a)}},[]),{tabOverrides:e,tabOrder:r,loaded:a&&c}}function Xe({tabOverrides:e,tabOrder:n,hasBooking:i=!1,hasBought:a=!1,paymentsOn:s=!1,tabIcons:c={},tabAccess:l}){let u={};Object.entries(Q).forEach(([e,n])=>{e===`schedule`||e===`mybookings`||e===`mybookings`&&!i||e===`billing`&&!a||e===`transactions`&&!s||(u[e]={id:e,...n,icon:t.p(c[e])??n.icon},o.r(e)&&(u[e].roles=o.c(o.o(l,e))))});let d={...e};for(let[t,n]of ce())n.isPublic||(d[t]={...n.config,...e[t]});for(let[t,n]of Object.entries(e)){let r=String(n?.fileId||``);r&&r!==t&&!e[r]&&(F(d[r])&&d[t]?.inMenu===void 0&&(d[t]={...d[t],inMenu:!1}),delete d[r])}Object.entries(d).forEach(([e,n])=>{let i=u[e],a=t.p(n?.iconName)??i?.icon??t.g,o=i?.roles??Z;n?.pageType&&!Q[e]&&(o=r.Gn(n));let s=n?.route?n.route.startsWith(`/`)?n.route:`/`+n.route:i?.path??`/`+e,c=n?.tabName||n?.pageTitle||n?.pageName||i?.label||e,l=Q[e]?``:r.Nn(n);u[e]={id:e,path:s,label:c,icon:a,roles:o,group:l}});let f=[],p=new Set;n.forEach(e=>{e.hidden||p.has(e.id)||u[e.id]&&(f.push(u[e.id]),p.add(e.id))});let m=[],h=[];return Object.keys(u).forEach(e=>{if(p.has(e))return;let t=n.find(t=>t.id===e);t?.hidden||!t&&F(d[e])||(e in d&&!t?m.push(u[e]):h.push(u[e]))}),m.length>0&&f.unshift(...m),h.length>0&&f.push(...h),Je(f)}function Ze(e,t,n,i){return r.Un(e.roles,r.Kn(t,n))?e.group?!i.live&&!i.groups.some(t=>t.id===e.group)?!1:r.Fn(t,{group:e.group},i.groups):!0:!1}function Qe(){let{user:e,userRole:t}=n.Ft(),{tabOverrides:r,tabOrder:i,loaded:a}=Ye(),o=V();return a?Xe({tabOverrides:r,tabOrder:i}).filter(e=>!(e.id in Q)).filter(n=>Ze(n,t,!!e,o)):[]}function $e({customTabs:e=[]}){let{pathname:r}=(0,u.useLocation)(),{user:i,userRole:o,roleResolved:l}=n.Ft();Re();let d=a.b(``,``).bookings.length>0,f=n.zn(),[p]=(0,s.useState)(()=>$(`fbos_nav_payments`)===!0),m=f.loading?p:f.configured;(0,s.useEffect)(()=>{if(!f.loading)try{localStorage.setItem(`fbos_nav_payments`,JSON.stringify(f.configured))}catch{}},[f.loading,f.configured]);let h=i?.uid||``,g=n.Ln(h),[_]=(0,s.useState)(()=>{let e=$(`fbos_nav_billing`);return!!h&&e?.uid===h&&e?.bought===!0}),v=g.loading?_:g.bought;(0,s.useEffect)(()=>{if(!(g.loading||!h))try{localStorage.setItem(`fbos_nav_billing`,JSON.stringify({uid:h,bought:g.bought}))}catch{}},[g.loading,g.bought,h]);let y=Ge(),b=Ee(),x=V(),[S,C]=(0,s.useState)(!1),w=(0,s.useRef)(null),{tabOverrides:T,tabOrder:te,loaded:ne}=Ye(),E=l!==!1&≠(0,s.useEffect)(()=>{function e(e){w.current&&!w.current.contains(e.target)&&C(!1)}return document.addEventListener(`mousedown`,e),()=>document.removeEventListener(`mousedown`,e)},[]);let D=[...Xe({tabOverrides:T,tabOrder:te,hasBooking:d,hasBought:v,paymentsOn:m,tabIcons:b,tabAccess:y.access}),...e.map(e=>({...e,id:e.path}))].filter(e=>Ze(e,o,!!i,x)),O=D.some(e=>t.f(e.icon));(0,s.useEffect)(()=>{O&&t.m()},[O]);let{rowRef:k,measureRef:A,visible:j}=Be({count:D.length,listKey:D.map(e=>e.id+e.label).join(`|`),shown:E&&D.length>0,gap:40,moreButtonWidth:52}),M=D.slice(0,j),N=D.slice(j),re=D.map(e=>e.path).filter(e=>{let t=e.replace(/\/+$/,``);return r===e||t!==``&&r.startsWith(t+`/`)}).sort((e,t)=>t.length-e.length)[0],P=e=>e.path===re,ie=N.some(e=>P(e));return E?D.length===0?null:(0,c.jsxs)(c.Fragment,{children:[(0,c.jsx)(`div`,{ref:A,"aria-hidden":`true`,className:`flex items-center gap-5 md:gap-10 whitespace-nowrap px-1`,style:{position:`fixed`,top:-9999,left:0,visibility:`hidden`,pointerEvents:`none`},children:D.map((e,t)=>{let n=e.icon;return(0,c.jsxs)(`span`,{"data-measure":!0,className:`flex items-center gap-2 text-[13px] md:text-[14.5px] font-semibold shrink-0 pb-2.5 md:pb-3`,children:[(0,c.jsx)(n,{className:`w-4 h-4 md:w-[18px] md:h-[18px]`}),e.label]},t)})}),(0,c.jsxs)(`div`,{ref:k,className:`w-full flex items-center gap-5 md:gap-10 mb-5 border-b border-[var(--panel-border)] px-1 whitespace-nowrap relative`,children:[M.map(e=>{let t=P(e),n=e.icon;return(0,c.jsxs)(u.Link,{to:e.path||`/`,className:`flex items-center gap-2 text-[13px] md:text-[14.5px] font-semibold transition-all duration-300 pb-2.5 md:pb-3 -mb-[1px] border-b-2 shrink-0 ${t?`text-accent border-accent`:`text-foreground/50 hover:text-foreground/80 border-transparent`}`,children:[(0,c.jsx)(n,{className:`w-4 h-4 md:w-[18px] md:h-[18px]`}),e.label]},e.path||e.id)}),N.length>0&&(0,c.jsxs)(`div`,{className:`relative shrink-0 ml-auto`,ref:w,children:[(0,c.jsx)(`button`,{onClick:()=>C(!S),className:`flex items-center justify-center transition-all duration-300 pb-2.5 md:pb-3 -mb-[1px] border-b-2 cursor-pointer ${ie?`text-accent border-accent`:`text-foreground/50 hover:text-foreground/80 border-transparent`}`,title:`More items`,children:(0,c.jsx)(ee,{className:`w-[18px] h-[18px] md:w-5 md:h-5`})}),(0,c.jsx)(n.rt,{children:S&&(0,c.jsx)(n.nt.div,{initial:{opacity:0,y:10},animate:{opacity:1,y:0},exit:{opacity:0,y:10},className:`absolute top-[100%] right-0 mt-2 min-w-[200px] glass-popover border border-[var(--panel-border)] rounded-2xl z-50 flex flex-col py-2 overflow-hidden`,children:N.map(e=>{let t=P(e),n=e.icon;return(0,c.jsxs)(u.Link,{to:e.path||`/`,onClick:()=>C(!1),className:`flex items-center gap-3 px-5 py-3 text-[14px] font-medium transition-colors ${t?`text-accent bg-accent/5`:`text-foreground/70 hover:text-foreground hover:bg-foreground/5`}`,children:[(0,c.jsx)(n,{className:`w-4 h-4`}),e.label]},e.path||e.id)})})})]})]})]}):(0,c.jsx)(`div`,{className:`w-full flex items-center gap-5 md:gap-10 mb-5 border-b border-[var(--panel-border)] px-1 whitespace-nowrap relative`,children:[56,72,64].map((e,t)=>(0,c.jsxs)(`span`,{className:`flex items-center gap-2 pb-2.5 md:pb-3 h-[30px] md:h-[33px] shrink-0`,"aria-hidden":`true`,children:[(0,c.jsx)(`span`,{className:`w-4 h-4 md:w-[18px] md:h-[18px] rounded-md bg-foreground/5 animate-pulse`}),(0,c.jsx)(`span`,{className:`h-3.5 rounded bg-foreground/5 animate-pulse`,style:{width:e}})]},t))})}Object.defineProperty(exports,`A`,{enumerable:!0,get:function(){return w}}),Object.defineProperty(exports,`C`,{enumerable:!0,get:function(){return ie}}),Object.defineProperty(exports,`D`,{enumerable:!0,get:function(){return O}}),Object.defineProperty(exports,`E`,{enumerable:!0,get:function(){return A}}),Object.defineProperty(exports,`M`,{enumerable:!0,get:function(){return v}}),Object.defineProperty(exports,`N`,{enumerable:!0,get:function(){return y}}),Object.defineProperty(exports,`O`,{enumerable:!0,get:function(){return E}}),Object.defineProperty(exports,`S`,{enumerable:!0,get:function(){return oe}}),Object.defineProperty(exports,`T`,{enumerable:!0,get:function(){return M}}),Object.defineProperty(exports,`_`,{enumerable:!0,get:function(){return ye}}),Object.defineProperty(exports,`a`,{enumerable:!0,get:function(){return Ge}}),Object.defineProperty(exports,`b`,{enumerable:!0,get:function(){return le}}),Object.defineProperty(exports,`c`,{enumerable:!0,get:function(){return Ae}}),Object.defineProperty(exports,`d`,{enumerable:!0,get:function(){return ge}}),Object.defineProperty(exports,`f`,{enumerable:!0,get:function(){return be}}),Object.defineProperty(exports,`g`,{enumerable:!0,get:function(){return ve}}),Object.defineProperty(exports,`h`,{enumerable:!0,get:function(){return _e}}),Object.defineProperty(exports,`i`,{enumerable:!0,get:function(){return qe}}),Object.defineProperty(exports,`j`,{enumerable:!0,get:function(){return x}}),Object.defineProperty(exports,`k`,{enumerable:!0,get:function(){return te}}),Object.defineProperty(exports,`l`,{enumerable:!0,get:function(){return De}}),Object.defineProperty(exports,`m`,{enumerable:!0,get:function(){return he}}),Object.defineProperty(exports,`n`,{enumerable:!0,get:function(){return Q}}),Object.defineProperty(exports,`o`,{enumerable:!0,get:function(){return Ke}}),Object.defineProperty(exports,`p`,{enumerable:!0,get:function(){return xe}}),Object.defineProperty(exports,`r`,{enumerable:!0,get:function(){return Qe}}),Object.defineProperty(exports,`s`,{enumerable:!0,get:function(){return Be}}),Object.defineProperty(exports,`t`,{enumerable:!0,get:function(){return $e}}),Object.defineProperty(exports,`u`,{enumerable:!0,get:function(){return Ee}}),Object.defineProperty(exports,`v`,{enumerable:!0,get:function(){return V}}),Object.defineProperty(exports,`w`,{enumerable:!0,get:function(){return re}}),Object.defineProperty(exports,`x`,{enumerable:!0,get:function(){return ce}}),Object.defineProperty(exports,`y`,{enumerable:!0,get:function(){return F}});
|
|
@@ -1,8 +1,8 @@
|
|
|
1
|
-
import { b as e, f as t, g as n, h as r, m as i, p as a, y as o } from "./PageTitle-
|
|
2
|
-
import { Ft as s, Ln as c, mi as l, nt as u, rt as d, ui as f, zn as p } from "./TimeZoneField-
|
|
1
|
+
import { b as e, f as t, g as n, h as r, m as i, p as a, y as o } from "./PageTitle-CkZriz8K.js";
|
|
2
|
+
import { Ft as s, Ln as c, mi as l, nt as u, rt as d, ui as f, zn as p } from "./TimeZoneField-oIMwb5_X.js";
|
|
3
3
|
import { Bn as m, Fn as ee, Gn as h, Kn as g, Ln as _, Nn as te, On as v, Un as ne, _n as y } from "./schedule-C13m_kiO.js";
|
|
4
4
|
import { n as b } from "./chevron-down--LwXEv9w.js";
|
|
5
|
-
import { W as x, b as re } from "./scheduleData-
|
|
5
|
+
import { W as x, b as re } from "./scheduleData-DR6A-Q7Z.js";
|
|
6
6
|
import { c as S, n as ie, o as ae, r as oe, t as C } from "./tabAudience-DJ6H5Uth.js";
|
|
7
7
|
import { createContext as w, useContext as T, useEffect as E, useLayoutEffect as D, useMemo as se, useRef as ce, useState as O } from "react";
|
|
8
8
|
import { Fragment as le, jsx as k, jsxs as A } from "react/jsx-runtime";
|
|
@@ -1,19 +1,19 @@
|
|
|
1
|
-
import { _ as e, h as t, t as n } from "./PageTitle-
|
|
2
|
-
import { At as r, Dt as i, Ot as a, S as o, _ as s, a as c, b as l, g as u, h as d, li as f, m as p, nt as m, o as h, s as g, ui as _, v } from "./TimeZoneField-
|
|
3
|
-
import { t as y } from "./DashboardNav-
|
|
4
|
-
import { a as ee } from "./Trouble-
|
|
1
|
+
import { _ as e, h as t, t as n } from "./PageTitle-CkZriz8K.js";
|
|
2
|
+
import { At as r, Dt as i, Ot as a, S as o, _ as s, a as c, b as l, g as u, h as d, li as f, m as p, nt as m, o as h, s as g, ui as _, v } from "./TimeZoneField-oIMwb5_X.js";
|
|
3
|
+
import { t as y } from "./DashboardNav-CxS3Qnl-.js";
|
|
4
|
+
import { a as ee } from "./Trouble-CtFq7tjk.js";
|
|
5
5
|
import { n as b } from "./chevron-down--LwXEv9w.js";
|
|
6
6
|
import { t as x } from "./arrow-right-C6OLl8Zh.js";
|
|
7
7
|
import { n as S, t as C } from "./mail-check-DlwCj48-.js";
|
|
8
|
-
import { t as w } from "./SupportBar-
|
|
8
|
+
import { t as w } from "./SupportBar-0nIiQp-_.js";
|
|
9
9
|
import { r as T } from "./x-hax8aKt8.js";
|
|
10
10
|
import { t as E } from "./plus-BKrt0Qx5.js";
|
|
11
11
|
import { t as te } from "./power-BrOGO3tj.js";
|
|
12
12
|
import { t as D } from "./send-D-Vm6vU4.js";
|
|
13
|
-
import { n as O, r as k, t as A } from "./serviceSwitches-
|
|
14
|
-
import { n as ne } from "./serviceStatus-
|
|
15
|
-
import { t as j } from "./ownerMail-
|
|
16
|
-
import { ConnectCard as M, EmailSetupSteps as N } from "./SetupPayments-
|
|
13
|
+
import { n as O, r as k, t as A } from "./serviceSwitches-CZHwvVfP.js";
|
|
14
|
+
import { n as ne } from "./serviceStatus-C9izcuQz.js";
|
|
15
|
+
import { t as j } from "./ownerMail-DepG5-Qw.js";
|
|
16
|
+
import { ConnectCard as M, EmailSetupSteps as N } from "./SetupPayments-ICqCoZeQ.js";
|
|
17
17
|
import { useCallback as P, useEffect as F, useRef as re, useState as I } from "react";
|
|
18
18
|
import { Fragment as L, jsx as R, jsxs as z } from "react/jsx-runtime";
|
|
19
19
|
import { doc as B, onSnapshot as V, setDoc as H } from "firebase/firestore";
|
|
@@ -1 +1 @@
|
|
|
1
|
-
require(`./chunk-CiTBaPhY.cjs`);const e=require(`./PageTitle-BWmE74WQ.cjs`),t=require(`./TimeZoneField-zR8N2Fj0.cjs`),n=require(`./DashboardNav-DOl9gJuu.cjs`),r=require(`./Trouble-DokPNHQZ.cjs`),i=require(`./chevron-down-lyDK1rfL.cjs`),a=require(`./arrow-right-CGvbxks5.cjs`),o=require(`./mail-check-D_LNQw3l.cjs`),s=require(`./SupportBar-CNVXSYwT.cjs`),c=require(`./x-Ci8c5p6T.cjs`),l=require(`./plus-zsWFCu4F.cjs`),u=require(`./power-Bs_nchQG.cjs`),d=require(`./send-CWJXtO05.cjs`),f=require(`./serviceSwitches-Do_pkFCu.cjs`),p=require(`./serviceStatus-1pGLLilF.cjs`),m=require(`./ownerMail-CGmDk7aP.cjs`),h=require(`./SetupPayments-CZ0KqXdR.cjs`);let g=require(`react`),_=require(`react/jsx-runtime`),v=require(`firebase/firestore`),y=require(`react-router-dom`);var b={name:`at-sign`,size:24,node:[[`circle`,{cx:`12`,cy:`12`,r:`4`,key:`4exip2`}],[`path`,{d:`M16 8v5a3 3 0 0 0 6 0v-1a10 10 0 1 0-4 8`,key:`7n84p3`}]]};b.node;var x=i.n(b),S={name:`bell-ring`,size:24,node:[[`path`,{d:`M10.268 21a2 2 0 0 0 3.464 0`,key:`vwvbt9`}],[`path`,{d:`M22 8c0-2.3-.8-4.3-2-6`,key:`5bb3ad`}],[`path`,{d:`M3.262 15.326A1 1 0 0 0 4 17h16a1 1 0 0 0 .74-1.673C19.41 13.956 18 12.499 18 8A6 6 0 0 0 6 8c0 4.499-1.411 5.956-2.738 7.326`,key:`11g9vi`}],[`path`,{d:`M4 2C2.8 3.7 2 5.7 2 8`,key:`tap9e0`}]]};S.node;var C=i.n(S),w={name:`key-round`,size:24,node:[[`path`,{d:`M2.586 17.414A2 2 0 0 0 2 18.828V21a1 1 0 0 0 1 1h3a1 1 0 0 0 1-1v-1a1 1 0 0 1 1-1h1a1 1 0 0 0 1-1v-1a1 1 0 0 1 1-1h.172a2 2 0 0 0 1.414-.586l.814-.814a6.5 6.5 0 1 0-4-4z`,key:`1s6t7t`}],[`circle`,{cx:`16.5`,cy:`7.5`,r:`.5`,fill:`currentColor`,key:`w0ekpg`}]]};w.node;var T=i.n(w),E={name:`receipt`,size:24,node:[[`path`,{d:`M12 17V7`,key:`pyj7ub`}],[`path`,{d:`M16 8h-6a2 2 0 0 0 0 4h4a2 2 0 0 1 0 4H8`,key:`1elt7d`}],[`path`,{d:`M4 3a1 1 0 0 1 1-1 1.3 1.3 0 0 1 .7.2l.933.6a1.3 1.3 0 0 0 1.4 0l.934-.6a1.3 1.3 0 0 1 1.4 0l.933.6a1.3 1.3 0 0 0 1.4 0l.933-.6a1.3 1.3 0 0 1 1.4 0l.934.6a1.3 1.3 0 0 0 1.4 0l.933-.6A1.3 1.3 0 0 1 19 2a1 1 0 0 1 1 1v18a1 1 0 0 1-1 1 1.3 1.3 0 0 1-.7-.2l-.933-.6a1.3 1.3 0 0 0-1.4 0l-.934.6a1.3 1.3 0 0 1-1.4 0l-.933-.6a1.3 1.3 0 0 0-1.4 0l-.933.6a1.3 1.3 0 0 1-1.4 0l-.934-.6a1.3 1.3 0 0 0-1.4 0l-.933.6a1.3 1.3 0 0 1-.7.2 1 1 0 0 1-1-1z`,key:`ycz6yz`}]]};E.node;var D=i.n(E),O={name:`sparkles`,size:24,node:[[`path`,{d:`M11.017 2.814a1 1 0 0 1 1.966 0l1.051 5.558a2 2 0 0 0 1.594 1.594l5.558 1.051a1 1 0 0 1 0 1.966l-5.558 1.051a2 2 0 0 0-1.594 1.594l-1.051 5.558a1 1 0 0 1-1.966 0l-1.051-5.558a2 2 0 0 0-1.594-1.594l-5.558-1.051a1 1 0 0 1 0-1.966l5.558-1.051a2 2 0 0 0 1.594-1.594z`,key:`1s2grr`}],[`path`,{d:`M20 2v4`,key:`1rf3ol`}],[`path`,{d:`M22 4h-4`,key:`gwowj6`}],[`circle`,{cx:`4`,cy:`20`,r:`2`,key:`6kqj1y`}]],aliases:[`stars`]};O.node;var k=i.n(O);function A({trailing:e,onSent:n}){let[r,i]=(0,g.useState)(`idle`),[a,o]=(0,g.useState)(``);return(0,_.jsxs)(`div`,{className:`flex flex-col gap-1.5`,children:[(0,_.jsxs)(`div`,{className:`flex items-center gap-2.5 flex-wrap`,children:[(0,_.jsx)(t.o,{icon:x,busy:r===`sending`,onClick:async()=>{i(`sending`),o(``);try{let e=await t.li?.currentUser?.getIdToken().catch(()=>null),r=await fetch(`/api/email/test`,{method:`POST`,headers:{"Content-Type":`application/json`,...e?{Authorization:`Bearer ${e}`}:{}},body:`{}`}),a=await r.json().catch(()=>({}));r.ok&&a?.ok?(i(`sent`),o(String(a.message||`Sent. If it is not there within a minute, look in spam.`)),n?.(typeof a.from==`string`&&a.from.trim()?a.from:null)):(i(`failed`),o(String(a?.error||`That test could not be sent. Try again in a moment.`)))}catch{i(`failed`),o(`The server could not be reached. Try again in a moment.`)}},title:`Sends the test email to your own address`,children:`Send yourself a test email`}),e]}),r===`sent`&&(0,_.jsx)(t.h,{children:a}),r===`failed`&&(0,_.jsxs)(t.h,{tone:`error`,children:[`It did not send. `,a]})]})}var{collection:j,doc:M}=f.t.email;function N(){let[e,n]=(0,g.useState)({loading:!0,testedFrom:null});return(0,g.useEffect)(()=>(0,v.onSnapshot)((0,v.doc)(t.ui,j,M),e=>{let t=e.exists()?e.data()?.testedFrom:null;n({loading:!1,testedFrom:typeof t==`string`&&t.trim()?t:null})},()=>n({loading:!1,testedFrom:null})),[]),{loading:e.loading,testedFrom:e.testedFrom,mark:async e=>{if(e.trim()){n({loading:!1,testedFrom:e});try{await(0,v.setDoc)((0,v.doc)(t.ui,j,M),{testedFrom:e},{merge:!0})}catch(e){console.error(`Could not remember the test send`,e)}}}}}var P=1e4,F=30;function I(e){return e===`verified`?{state:`saved`,label:`Verified`}:e===`pending`?{state:`saving`,label:`Checking`}:e===`failed`||e===`partially_failed`||e===`temporary_failure`?{state:`error`,label:`Not verified yet`}:e===`partially_verified`?{state:`saving`,label:`Nearly there`}:{state:`off`,label:`Records to add`}}function L(e){return e===`verified`?{state:`saved`,label:`Found`}:e===`pending`?{state:`saving`,label:`Checking`}:e===`failed`||e===`temporary_failure`?{state:`error`,label:`Not found yet`}:null}var R=e=>e===`pending`||e===`partially_verified`;async function z(e,n={}){let r=await t.li?.currentUser?.getIdToken().catch(()=>null),i=await fetch(e,{method:n.method||`GET`,headers:{"Content-Type":`application/json`,...r?{Authorization:`Bearer ${r}`}:{}},...n.body===void 0?{}:{body:JSON.stringify(n.body)}}),a=await i.json().catch(()=>({}));return{ok:i.ok,body:a}}var{collection:B,doc:V}=f.t.email,H=e=>(0,v.setDoc)((0,v.doc)(t.ui,B,V),e,{merge:!0}),U=`The server could not be reached. Try again in a moment.`;function W({text:n,what:r}){let[i,a]=(0,g.useState)(!1);return(0,_.jsxs)(`button`,{type:`button`,title:`Copy the ${r}`,"aria-label":i?`Copied`:`Copy`,onClick:()=>{navigator.clipboard?.writeText(n),a(!0),setTimeout(()=>a(!1),2e3)},className:`${t.a} max-sm:w-8 max-sm:px-0 max-sm:gap-0 self-start`,children:[i?(0,_.jsx)(t.At,{className:`w-3.5 h-3.5 shrink-0 text-accent`}):(0,_.jsx)(e._,{className:`w-3.5 h-3.5 shrink-0`}),(0,_.jsx)(`span`,{className:`max-sm:hidden`,children:i?`Copied`:`Copy`})]})}function G({record:e}){let n=L(e.status);return(0,_.jsxs)(`div`,{className:`flex flex-col gap-2.5 px-4 py-3.5 border-b border-[var(--panel-border)]/40 last:border-0 min-w-0`,children:[(0,_.jsxs)(`div`,{className:`flex items-center gap-2 min-w-0`,children:[(0,_.jsx)(`span`,{className:`inline-flex items-center h-6 px-2 rounded-lg bg-accent/10 text-accent text-[11.5px] font-extrabold tracking-wide shrink-0`,children:e.type}),(0,_.jsx)(`span`,{className:`text-[12.5px] font-semibold text-foreground/60 truncate flex-1 min-w-0`,children:e.type===`MX`&&e.priority!==null?`Priority ${e.priority}`:e.record}),n&&(0,_.jsx)(t._,{state:n.state,label:n.label})]}),(0,_.jsxs)(`div`,{className:`grid grid-cols-[minmax(0,1fr)_auto] items-start gap-x-2.5 gap-y-2.5`,children:[(0,_.jsxs)(`div`,{className:`flex flex-col gap-0.5 min-w-0`,children:[(0,_.jsx)(`span`,{className:`text-[11.5px] font-semibold text-foreground/40`,children:`Name`}),(0,_.jsx)(`code`,{className:`text-[12.5px] font-semibold text-foreground break-all`,children:e.name}),(0,_.jsxs)(`span`,{className:t.s,children:[`In full, where your domain company asks for it:`,` `,(0,_.jsx)(`code`,{className:`break-all`,children:e.fullName})]})]}),(0,_.jsxs)(`div`,{className:`flex flex-col gap-1`,children:[(0,_.jsx)(W,{text:e.name,what:`name`}),(0,_.jsx)(W,{text:e.fullName,what:`name in full`})]}),(0,_.jsxs)(`div`,{className:`flex flex-col gap-0.5 min-w-0`,children:[(0,_.jsx)(`span`,{className:`text-[11.5px] font-semibold text-foreground/40`,children:`Value`}),(0,_.jsx)(`code`,{className:`text-[12px] text-foreground/80 break-all line-clamp-3`,children:e.value})]}),(0,_.jsx)(W,{text:e.value,what:`value`})]})]})}function K({keyState:e,from:n,onChanged:i,askEvery:a=P}){let[o,s]=(0,g.useState)(null),[c,u]=(0,g.useState)(!1),[d,f]=(0,g.useState)(``),[p,m]=(0,g.useState)(``),[h,v]=(0,g.useState)(``),[y,b]=(0,g.useState)(!1),[x,S]=(0,g.useState)(0),[C,w]=(0,g.useState)(!1),[T,E]=(0,g.useState)(``),[D,O]=(0,g.useState)(``),k=(0,g.useRef)(!0);(0,g.useEffect)(()=>(k.current=!0,()=>{k.current=!1}),[]);let A=(0,g.useCallback)(async()=>{try{let{ok:e,body:t}=await z(`/api/email/domain`);if(!k.current)return;e?s(t?.domain||null):v(String(t?.error||U))}catch{k.current&&v(U)}finally{k.current&&u(!0)}},[]);(0,g.useEffect)(()=>{e===`works`?A():u(!0)},[e,A]);let j=o?.status||``,M=j===`verified`;(0,g.useEffect)(()=>{if(!R(j)||x>=F)return;let e=setTimeout(()=>{S(e=>e+1),A()},a);return()=>clearTimeout(e)},[j,x,A,a]);let N=(0,g.useRef)(null);(0,g.useEffect)(()=>{c&&(N.current===!1&&M&&i(),N.current=M)},[M,c,i]);let L=async()=>{m(`add`),v(``),b(!1);try{let{ok:e,body:t}=await z(`/api/email/domain`,{method:`POST`,body:{domain:d}});if(!e||!t?.domain){v(String(t?.error||U)),b(t?.cause===`taken`||t?.cause===`other`||t?.cause===`sending-only`);return}await H({domain:t.domain.name}),s(t.domain),S(0),i()}catch{v(`Your domain could not be saved. Check that you are signed in as an admin.`)}finally{m(``)}},B=async()=>{m(`verify`),v(``);try{let{ok:e,body:t}=await z(`/api/email/domain/verify`,{method:`POST`});!e||!t?.domain?v(String(t?.error||U)):(s(t.domain),S(0))}catch{v(U)}finally{m(``)}},V=async()=>{m(`other`),v(``),b(!1);try{await H({domain:``}),s(null),f(``),S(0),i()}catch{v(`Your domain could not be changed. Check that you are signed in as an admin.`)}finally{m(``)}},W=async e=>{m(`from`),v(``);try{await H({from:e}),w(!1),i()}catch{v(`The address could not be saved. Check that you are signed in as an admin.`)}finally{m(``)}};if(e===`sending-only`)return(0,_.jsxs)(t.m,{icon:t.Dt,title:`Your domain`,description:`Your key can only send email.`,actions:(0,_.jsx)(t._,{state:`off`,label:`Needs Full access`}),children:[(0,_.jsxs)(t.h,{children:[`Your key was made with sending access only, so your app cannot add your domain for you. Either make a new key in Resend with `,(0,_.jsx)(`strong`,{children:`Full access`}),` and paste it as RESEND_KEY, or add your domain on Resend’s own Domains page and type the address your mail should go out as here.`]}),(0,_.jsxs)(`a`,{href:`https://resend.com/domains`,target:`_blank`,rel:`noreferrer`,className:`inline-flex items-center gap-1.5 px-1 text-[12px] font-bold text-accent hover:underline w-fit`,children:[`Open Domains in Resend`,(0,_.jsx)(t.Ot,{className:`w-3 h-3`})]}),(0,_.jsxs)(`div`,{className:`flex flex-col sm:flex-row sm:items-end gap-2.5`,children:[(0,_.jsx)(`div`,{className:`flex-1 min-w-0`,children:(0,_.jsx)(t.b,{label:`The address your mail goes out as`,value:D,onChange:O,placeholder:`hello@yourbusiness.com`,hint:`It has to be at a domain Resend shows as verified.`})}),(0,_.jsx)(t.o,{icon:t.At,busy:p===`from`,disabled:!/^[^\s@]+@[^\s@]+\.[^\s@]+$/.test(D.trim()),onClick:()=>W(D.trim()),className:`sm:mb-[1.35rem]`,children:`Save`})]}),h&&(0,_.jsx)(t.h,{tone:`error`,children:h})]});if(e!==`works`)return null;let K=o?I(j):{state:`off`,label:`Not added yet`},q=j===`failed`||j===`partially_failed`||j===`temporary_failure`,J=R(j)&&x>=F;return(0,_.jsxs)(t.m,{icon:t.Dt,title:`Your domain`,description:o?M?`${o.name} is verified. Your email reaches anybody.`:`Three records to add where you bought ${o.name}.`:`Until it is verified, email reaches only you.`,actions:(0,_.jsx)(`span`,{className:`max-sm:hidden`,children:c?(0,_.jsx)(t._,{state:K.state,label:K.label}):(0,_.jsx)(t._,{state:`saving`,label:`Checking`})}),defaultOpen:!0,children:[c?o?M?(0,_.jsxs)(_.Fragment,{children:[C?(0,_.jsxs)(`div`,{className:`flex flex-col sm:flex-row sm:items-end gap-2.5`,children:[(0,_.jsx)(`div`,{className:`flex-1 min-w-0`,children:(0,_.jsx)(t.b,{label:`Your mail goes out as`,value:T,onChange:e=>E(e.replace(/[\s@]/g,``)),placeholder:`hello`,hint:`Then @${o.name}`})}),(0,_.jsx)(t.o,{icon:t.At,busy:p===`from`,disabled:!T.trim(),onClick:()=>W(`${T.trim().toLowerCase()}@${o.name}`),className:`sm:mb-[1.35rem]`,children:`Save`})]}):(0,_.jsxs)(`p`,{className:`px-1 text-[13px] text-foreground/70`,children:[`Your mail goes out as `,(0,_.jsx)(`span`,{className:`font-bold text-foreground`,children:n||`hello@${o.name}`}),`.`,` `,(0,_.jsx)(`button`,{type:`button`,onClick:()=>{E(String(n||``).split(`@`)[0]||`hello`),w(!0)},className:`text-accent font-bold hover:underline cursor-pointer`,children:`Change`})]}),(0,_.jsxs)(`details`,{className:`px-1`,children:[(0,_.jsx)(`summary`,{className:`text-[12px] font-semibold text-foreground/45 hover:text-accent cursor-pointer select-none`,children:`The records that verified it`}),(0,_.jsx)(`div`,{className:`mt-3 glass-panel border border-[var(--panel-border)] rounded-2xl overflow-hidden bg-background`,children:o.records.map(e=>(0,_.jsx)(G,{record:e},`${e.type}:${e.fullName}`))})]})]}):(0,_.jsxs)(_.Fragment,{children:[(0,_.jsxs)(t.h,{children:[`Add these `,o.records.length===3?`three`:o.records.length,` records where you bought`,` `,o.name,`, in its DNS settings. They sit beside what is there already and do not change where your own email arrives. Copy each one exactly.`]}),(0,_.jsx)(`div`,{className:`glass-panel border border-[var(--panel-border)] rounded-2xl overflow-hidden bg-background`,children:o.records.map(e=>(0,_.jsx)(G,{record:e},`${e.type}:${e.fullName}`))}),q||J?(0,_.jsxs)(`div`,{className:`flex flex-col gap-2`,children:[(0,_.jsx)(t.h,{children:`Resend could not find every record yet. A new record can take from a few minutes to a few hours to show. Check each one above was copied exactly, then check again.`}),(0,_.jsx)(t.o,{icon:r.a,busy:p===`verify`,onClick:B,className:`self-start`,children:`Check again`})]}):R(j)?(0,_.jsx)(t.h,{children:`Resend is checking your records. This screen shows the answer when it comes.`}):(0,_.jsx)(t.o,{icon:t.At,busy:p===`verify`,onClick:B,className:`self-start`,children:`I have added them`}),(0,_.jsxs)(`p`,{className:`px-1 text-[12px] text-foreground/45`,children:[`Not the right domain?`,` `,(0,_.jsx)(`button`,{type:`button`,onClick:V,disabled:!!p,className:`text-accent font-bold hover:underline cursor-pointer disabled:opacity-50`,children:`Use a different domain`})]})]}):(0,_.jsx)(_.Fragment,{children:(0,_.jsxs)(`div`,{className:`flex flex-col sm:flex-row sm:items-end gap-2.5`,children:[(0,_.jsx)(`div`,{className:`flex-1 min-w-0`,children:(0,_.jsx)(t.b,{label:`Your domain`,value:d,onChange:f,placeholder:`yourbusiness.com`,hint:`The part after www. No domain yet? Buy one from any domain company, then come back.`})}),(0,_.jsx)(t.o,{icon:l.t,busy:p===`add`,disabled:!d.trim(),onClick:L,className:`sm:mb-[1.35rem]`,children:`Add`})]})}):null,h&&(0,_.jsxs)(`div`,{className:`flex flex-col gap-1.5`,children:[(0,_.jsx)(t.h,{tone:`error`,children:h}),y&&(0,_.jsxs)(`a`,{href:`https://resend.com/domains`,target:`_blank`,rel:`noreferrer`,className:`inline-flex items-center gap-1.5 px-1 text-[12px] font-bold text-accent hover:underline w-fit`,children:[`Open Domains in Resend`,(0,_.jsx)(t.Ot,{className:`w-3 h-3`})]})]})]})}var q=e=>[{title:`Receipts and sale alerts`,body:`Each payment emails the buyer a receipt and tells you what sold.`,icon:D,where:{label:`Payment emails, above`}},{title:`Hear about each form entry`,body:`Someone sends a form on one of your pages, and it comes to you by email.`,icon:o.n,where:{path:`/pages`,label:`Pages screen`}},{title:`Confirm to the people who write in`,body:`Whoever sends a form gets a note that it arrived, with your words in it.`,icon:o.t,where:{path:`/pages`,label:`Pages screen`}},{title:`Notifications by email`,body:`A page that rings the bell can send the same news by email.`,icon:C,where:{path:`/pages`,label:`Pages screen`}},{title:`Write to anyone from your app`,body:`A page for your team can write to any address, from ${e}.`,icon:d.t,where:{path:`/pages`,label:`Pages screen`}}],J=e=>e?{description:`Every page you told to send email does. Switch it off to stop all of it at once.`,chip:{state:`saved`,label:`On`}}:{description:`Nothing sends. Your pages keep their settings and wait for this to come back on.`,chip:{state:`off`,label:`Off`}},Y=5e3,X=e=>{let t=new Date(e),n=t.toLocaleTimeString([],{hour:`2-digit`,minute:`2-digit`});return t.toDateString()===new Date().toDateString()?n:`${t.toLocaleDateString([],{day:`numeric`,month:`short`})}, ${n}`};function Z({from:e}){return(0,_.jsx)(`div`,{className:`flex flex-col divide-y divide-[var(--panel-border)]/60 rounded-2xl border border-[var(--panel-border)]/60`,children:q(e).map(e=>{let t=e.icon,n=`max-sm:hidden sm:inline-flex row-start-1 row-span-2 col-start-3 self-center justify-self-end items-center gap-1.5 text-[11.5px] font-semibold text-foreground/45 whitespace-nowrap`;return(0,_.jsxs)(`div`,{className:`grid grid-cols-[auto_minmax(0,1fr)] sm:grid-cols-[auto_minmax(0,1fr)_auto] items-center gap-x-3 sm:gap-x-3.5 gap-y-0.5 px-4 py-3`,children:[(0,_.jsx)(`div`,{className:`row-start-1 row-span-2 col-start-1 self-center w-9 h-9 rounded-xl flex items-center justify-center shrink-0 border border-[var(--panel-border)]/50 bg-accent/10 text-accent`,children:(0,_.jsx)(t,{className:`w-4 h-4`})}),(0,_.jsx)(`span`,{className:`row-start-1 col-start-2 min-w-0 text-[13px] font-bold text-foreground leading-tight self-end`,children:e.title}),(0,_.jsx)(`span`,{className:`row-start-2 col-start-2 min-w-0 text-[12px] text-foreground/50 font-normal leading-snug self-start`,children:e.body}),e.where.path?(0,_.jsxs)(y.Link,{to:e.where.path,className:`${n} hover:text-accent transition-colors`,children:[e.where.label,(0,_.jsx)(a.t,{className:`w-3 h-3`})]}):(0,_.jsx)(`span`,{className:n,children:e.where.label})]},e.title)})})}function Q(){return(0,_.jsx)(t.m,{icon:e.h,title:`Waiting for your app`,description:`Asking again every few seconds.`,actions:(0,_.jsx)(t._,{state:`saving`,label:`Checking`}),collapsible:!1,children:(0,_.jsx)(t.h,{children:`Your app’s server is not answering yet. After you press Apply in AI Studio it starts again, which takes a few seconds. This screen asks again on its own and fills in the moment it answers.`})})}function $({refusal:e}){return(0,_.jsxs)(`div`,{className:`rounded-2xl border border-[var(--panel-border)]/60 bg-foreground/[0.02] px-4 py-3 flex flex-col gap-1`,children:[(0,_.jsxs)(`span`,{className:`text-[12.5px] font-bold text-foreground/80`,children:[`The last email that could not go: to `,e.to,`, `,X(e.at)]}),(0,_.jsx)(`span`,{className:`text-[12.5px] text-foreground/60 leading-relaxed`,children:e.reason})]})}function ee({status:e,owner:n,ownerError:r,choose:i}){let a=N(),s=n?.count??e.ownerCount,c=!e.senderVerified;return(0,_.jsxs)(t.m,{icon:o.t,title:`Your mail`,description:n?.me?`Sales and form alerts come to ${n.me}.`:s?`Where sales and form alerts go.`:`Sales and form alerts have nowhere to go yet.`,actions:(0,_.jsx)(`span`,{className:`max-sm:hidden`,children:(0,_.jsx)(t._,{state:s?`saved`:`off`,label:s?`Reaches ${s} address${s===1?``:`es`}`:`Nowhere yet`})}),children:[c&&(0,_.jsxs)(t.h,{children:[(0,_.jsx)(`span`,{className:`font-bold text-foreground/70`,children:`Right now your email reaches only you.`}),` It goes out from Resend’s practice address, `,e.from,`, which delivers only to the address you made your Resend account with: a test to yourself arrives when that is the address you sign in with here, your admins get nothing yet, and neither does a customer. Verify your domain above to reach anybody.`]}),(0,_.jsx)(t.g,{label:`Who hears about sales and form entries`,value:n?.who??`admins`,onChange:e=>i(e===`me`?`me`:`admins`),options:[{value:`admins`,label:`Me and all my admins`},{value:`me`,label:`Only me`}],allowEmpty:!1,hint:`Your admins are found for you: nobody has to type an address. When a customer presses Reply, it comes to you.`}),n&&!n.me&&(0,_.jsx)(t.h,{children:`Your account has no email address, so only your admins hear. Add one to your profile to hear too.`}),r&&(0,_.jsx)(t.h,{tone:`error`,children:r}),(0,_.jsx)(A,{onSent:e=>{e&&a.mark(e)},trailing:(0,_.jsxs)(`a`,{href:`https://resend.com/emails`,target:`_blank`,rel:`noreferrer`,className:`inline-flex items-center gap-1.5 text-[12px] font-bold text-accent hover:underline`,children:[`See everything sent, in Resend`,(0,_.jsx)(t.Ot,{className:`w-3 h-3`})]})}),e.lastRefusal&&(0,_.jsx)($,{refusal:e.lastRefusal})]})}function te({status:e,sending:n,ownerCount:r}){let i=f.n(),[a,o]=(0,g.useState)(``),s=async(e,t)=>o(await i.set(e,t)||``),c=n?e.senderVerified?``:`Customers get these once your domain is verified.`:`Email is switched off above.`,l=n?r?``:`Your own mail has nowhere to go yet.`:`Email is switched off above.`;return(0,_.jsxs)(t.m,{icon:D,title:`Payment emails`,description:`For every payment in your app, one pair of switches.`,children:[(0,_.jsx)(t.S,{label:`Email buyers a receipt`,hint:c||`In your app’s look, with what they bought and a link to Stripe’s own receipt.`,enabled:i.receipts,onChange:e=>s(`receipts`,e),disabled:i.loading||!!c}),(0,_.jsx)(t.S,{label:`Email me each sale`,hint:l||`What sold and who bought it, with a button to your Transactions.`,enabled:i.saleAlerts,onChange:e=>s(`saleAlerts`,e),disabled:i.loading||!!l}),a&&(0,_.jsx)(t.h,{tone:`error`,children:a})]})}function ne(){let{status:r,error:i,reread:o}=p.n(0,!0),l=f.r(`email`),[d,v]=(0,g.useState)(``),[y,b]=(0,g.useState)(!1),[x,S]=(0,g.useState)(!1),[C,w]=(0,g.useState)(null),[E,D]=(0,g.useState)(``);(0,g.useEffect)(()=>{if(!i)return;let e=setInterval(()=>{o()},Y);return()=>clearInterval(e)},[i,o]);let O=!!i&&!r?.configured,A=()=>{b(!1),o().then(()=>S(!0))},j=!!r?.configured&&r?.key!==`refused`;(0,g.useEffect)(()=>{if(!j)return;let e=!0;return m.t().then(({state:t,error:n})=>{e&&(t&&w(t),D(n||``))}),()=>{e=!1}},[j]);let M=(0,g.useCallback)(async e=>{w(t=>t&&{...t,who:e});let{state:t,error:n}=await m.t(e);t&&w(t),D(n||``)},[]),N=(0,g.useCallback)(()=>{o()},[o]),P=J(l.on);return(0,_.jsxs)(`main`,{className:`flex-1 w-full max-w-7xl mx-auto p-4 pt-2 md:p-8 md:pt-4 z-10 flex flex-col min-h-screen`,children:[(0,_.jsxs)(t.nt.div,{initial:{opacity:0,y:20},animate:{opacity:1,y:0},className:`mb-6`,children:[(0,_.jsx)(e.t,{children:`Email`}),(0,_.jsxs)(`div`,{className:`flex items-center gap-2 text-foreground/40 font-bold uppercase tracking-[0.2em] text-[11px]`,children:[(0,_.jsx)(`span`,{className:`w-8 h-[1px] bg-foreground/10`}),`/email`]})]}),(0,_.jsxs)(`div`,{className:`flex flex-col gap-6 flex-1 pb-16`,children:[(0,_.jsx)(n.t,{}),(0,_.jsx)(`div`,{className:`glass-panel border border-[var(--panel-border)] rounded-3xl p-4 sm:p-5 md:p-8 shadow-2xl relative bg-background flex flex-col fbos-tab-fill min-h-[600px]`,children:!r||O?O?(0,_.jsx)(Q,{}):(0,_.jsx)(`div`,{className:`flex items-center justify-center flex-1 text-foreground/40 py-16`,children:(0,_.jsx)(c.r,{className:`w-6 h-6 animate-spin text-accent`})}):r.configured?(0,_.jsxs)(`div`,{className:`flex flex-col gap-4`,children:[(0,_.jsx)(t.v,{icon:u.t,title:`Send email`,description:P.description,chip:P.chip,enabled:l.loading?null:l.on,onChange:async e=>v(await l.set(e)||``),children:d?(0,_.jsx)(t.h,{tone:`error`,children:d}):null}),r.key===`refused`?(0,_.jsxs)(t.m,{icon:T,title:`Your key`,description:`Resend did not accept it.`,actions:(0,_.jsx)(t._,{state:`error`,label:`Key refused`}),collapsible:!1,children:[(0,_.jsx)(t.h,{children:`Resend did not accept the key in RESEND_KEY: it was mistyped, deleted in Resend, or made for another account. Make a new one with Full access and paste it in its place.`}),y?(0,_.jsx)(h.EmailSetupSteps,{onConfirm:A}):(0,_.jsxs)(`button`,{type:`button`,onClick:()=>b(!0),className:`inline-flex items-center gap-1.5 w-fit h-9 px-4 rounded-[var(--btn-radius,0.75rem)] text-[12.5px] font-bold border border-accent/40 bg-accent/10 text-accent hover:bg-accent/15 transition-all active:scale-[0.98] cursor-pointer`,children:[`Show me how`,(0,_.jsx)(a.t,{className:`w-3.5 h-3.5`})]})]}):(0,_.jsxs)(_.Fragment,{children:[(0,_.jsx)(K,{keyState:r.key,from:r.from,onChanged:N}),(0,_.jsx)(ee,{status:r,owner:C,ownerError:E,choose:M}),(0,_.jsx)(te,{status:r,sending:l.on,ownerCount:C?.count??r.ownerCount}),(0,_.jsx)(t.m,{icon:k,title:`What you can do with email`,description:`Payment emails are switched on here; form emails and notifications on each page’s row.`,children:(0,_.jsx)(Z,{from:r.from||``})})]})]}):(0,_.jsx)(h.ConnectCard,{icon:e.h,title:`Connect email`,description:`This app is not sending email yet.`,stepsDescription:`Two steps: a Resend account with its key, then that one key pasted.`,button:`Set up email`,secret:`RESEND_KEY`,open:y,onOpen:()=>b(!0),confirmed:x,steps:(0,_.jsx)(h.EmailSetupSteps,{onConfirm:A}),children:(0,_.jsx)(t.h,{children:`Email runs through Resend, and connecting it is one pasted key, the way payments are. Then you add your domain right here, and this screen fills itself: who your email reaches, and where your own mail goes.`})})})]}),(0,_.jsx)(s.t,{})]})}exports.EmailAdmin=ne;
|
|
1
|
+
require(`./chunk-CiTBaPhY.cjs`);const e=require(`./PageTitle-BL50s4qY.cjs`),t=require(`./TimeZoneField-Ckn1pKAL.cjs`),n=require(`./DashboardNav-Bc619nqn.cjs`),r=require(`./Trouble-KQZyf6aY.cjs`),i=require(`./chevron-down-lyDK1rfL.cjs`),a=require(`./arrow-right-CGvbxks5.cjs`),o=require(`./mail-check-D_LNQw3l.cjs`),s=require(`./SupportBar-DR52UpBq.cjs`),c=require(`./x-Ci8c5p6T.cjs`),l=require(`./plus-zsWFCu4F.cjs`),u=require(`./power-Bs_nchQG.cjs`),d=require(`./send-CWJXtO05.cjs`),f=require(`./serviceSwitches-mhJbQBrV.cjs`),p=require(`./serviceStatus-Cde96_OO.cjs`),m=require(`./ownerMail-BS9SjJ2u.cjs`),h=require(`./SetupPayments-BLq0W5DU.cjs`);let g=require(`react`),_=require(`react/jsx-runtime`),v=require(`firebase/firestore`),y=require(`react-router-dom`);var b={name:`at-sign`,size:24,node:[[`circle`,{cx:`12`,cy:`12`,r:`4`,key:`4exip2`}],[`path`,{d:`M16 8v5a3 3 0 0 0 6 0v-1a10 10 0 1 0-4 8`,key:`7n84p3`}]]};b.node;var x=i.n(b),S={name:`bell-ring`,size:24,node:[[`path`,{d:`M10.268 21a2 2 0 0 0 3.464 0`,key:`vwvbt9`}],[`path`,{d:`M22 8c0-2.3-.8-4.3-2-6`,key:`5bb3ad`}],[`path`,{d:`M3.262 15.326A1 1 0 0 0 4 17h16a1 1 0 0 0 .74-1.673C19.41 13.956 18 12.499 18 8A6 6 0 0 0 6 8c0 4.499-1.411 5.956-2.738 7.326`,key:`11g9vi`}],[`path`,{d:`M4 2C2.8 3.7 2 5.7 2 8`,key:`tap9e0`}]]};S.node;var C=i.n(S),w={name:`key-round`,size:24,node:[[`path`,{d:`M2.586 17.414A2 2 0 0 0 2 18.828V21a1 1 0 0 0 1 1h3a1 1 0 0 0 1-1v-1a1 1 0 0 1 1-1h1a1 1 0 0 0 1-1v-1a1 1 0 0 1 1-1h.172a2 2 0 0 0 1.414-.586l.814-.814a6.5 6.5 0 1 0-4-4z`,key:`1s6t7t`}],[`circle`,{cx:`16.5`,cy:`7.5`,r:`.5`,fill:`currentColor`,key:`w0ekpg`}]]};w.node;var T=i.n(w),E={name:`receipt`,size:24,node:[[`path`,{d:`M12 17V7`,key:`pyj7ub`}],[`path`,{d:`M16 8h-6a2 2 0 0 0 0 4h4a2 2 0 0 1 0 4H8`,key:`1elt7d`}],[`path`,{d:`M4 3a1 1 0 0 1 1-1 1.3 1.3 0 0 1 .7.2l.933.6a1.3 1.3 0 0 0 1.4 0l.934-.6a1.3 1.3 0 0 1 1.4 0l.933.6a1.3 1.3 0 0 0 1.4 0l.933-.6a1.3 1.3 0 0 1 1.4 0l.934.6a1.3 1.3 0 0 0 1.4 0l.933-.6A1.3 1.3 0 0 1 19 2a1 1 0 0 1 1 1v18a1 1 0 0 1-1 1 1.3 1.3 0 0 1-.7-.2l-.933-.6a1.3 1.3 0 0 0-1.4 0l-.934.6a1.3 1.3 0 0 1-1.4 0l-.933-.6a1.3 1.3 0 0 0-1.4 0l-.933.6a1.3 1.3 0 0 1-1.4 0l-.934-.6a1.3 1.3 0 0 0-1.4 0l-.933.6a1.3 1.3 0 0 1-.7.2 1 1 0 0 1-1-1z`,key:`ycz6yz`}]]};E.node;var D=i.n(E),O={name:`sparkles`,size:24,node:[[`path`,{d:`M11.017 2.814a1 1 0 0 1 1.966 0l1.051 5.558a2 2 0 0 0 1.594 1.594l5.558 1.051a1 1 0 0 1 0 1.966l-5.558 1.051a2 2 0 0 0-1.594 1.594l-1.051 5.558a1 1 0 0 1-1.966 0l-1.051-5.558a2 2 0 0 0-1.594-1.594l-5.558-1.051a1 1 0 0 1 0-1.966l5.558-1.051a2 2 0 0 0 1.594-1.594z`,key:`1s2grr`}],[`path`,{d:`M20 2v4`,key:`1rf3ol`}],[`path`,{d:`M22 4h-4`,key:`gwowj6`}],[`circle`,{cx:`4`,cy:`20`,r:`2`,key:`6kqj1y`}]],aliases:[`stars`]};O.node;var k=i.n(O);function A({trailing:e,onSent:n}){let[r,i]=(0,g.useState)(`idle`),[a,o]=(0,g.useState)(``);return(0,_.jsxs)(`div`,{className:`flex flex-col gap-1.5`,children:[(0,_.jsxs)(`div`,{className:`flex items-center gap-2.5 flex-wrap`,children:[(0,_.jsx)(t.o,{icon:x,busy:r===`sending`,onClick:async()=>{i(`sending`),o(``);try{let e=await t.li?.currentUser?.getIdToken().catch(()=>null),r=await fetch(`/api/email/test`,{method:`POST`,headers:{"Content-Type":`application/json`,...e?{Authorization:`Bearer ${e}`}:{}},body:`{}`}),a=await r.json().catch(()=>({}));r.ok&&a?.ok?(i(`sent`),o(String(a.message||`Sent. If it is not there within a minute, look in spam.`)),n?.(typeof a.from==`string`&&a.from.trim()?a.from:null)):(i(`failed`),o(String(a?.error||`That test could not be sent. Try again in a moment.`)))}catch{i(`failed`),o(`The server could not be reached. Try again in a moment.`)}},title:`Sends the test email to your own address`,children:`Send yourself a test email`}),e]}),r===`sent`&&(0,_.jsx)(t.h,{children:a}),r===`failed`&&(0,_.jsxs)(t.h,{tone:`error`,children:[`It did not send. `,a]})]})}var{collection:j,doc:M}=f.t.email;function N(){let[e,n]=(0,g.useState)({loading:!0,testedFrom:null});return(0,g.useEffect)(()=>(0,v.onSnapshot)((0,v.doc)(t.ui,j,M),e=>{let t=e.exists()?e.data()?.testedFrom:null;n({loading:!1,testedFrom:typeof t==`string`&&t.trim()?t:null})},()=>n({loading:!1,testedFrom:null})),[]),{loading:e.loading,testedFrom:e.testedFrom,mark:async e=>{if(e.trim()){n({loading:!1,testedFrom:e});try{await(0,v.setDoc)((0,v.doc)(t.ui,j,M),{testedFrom:e},{merge:!0})}catch(e){console.error(`Could not remember the test send`,e)}}}}}var P=1e4,F=30;function I(e){return e===`verified`?{state:`saved`,label:`Verified`}:e===`pending`?{state:`saving`,label:`Checking`}:e===`failed`||e===`partially_failed`||e===`temporary_failure`?{state:`error`,label:`Not verified yet`}:e===`partially_verified`?{state:`saving`,label:`Nearly there`}:{state:`off`,label:`Records to add`}}function L(e){return e===`verified`?{state:`saved`,label:`Found`}:e===`pending`?{state:`saving`,label:`Checking`}:e===`failed`||e===`temporary_failure`?{state:`error`,label:`Not found yet`}:null}var R=e=>e===`pending`||e===`partially_verified`;async function z(e,n={}){let r=await t.li?.currentUser?.getIdToken().catch(()=>null),i=await fetch(e,{method:n.method||`GET`,headers:{"Content-Type":`application/json`,...r?{Authorization:`Bearer ${r}`}:{}},...n.body===void 0?{}:{body:JSON.stringify(n.body)}}),a=await i.json().catch(()=>({}));return{ok:i.ok,body:a}}var{collection:B,doc:V}=f.t.email,H=e=>(0,v.setDoc)((0,v.doc)(t.ui,B,V),e,{merge:!0}),U=`The server could not be reached. Try again in a moment.`;function W({text:n,what:r}){let[i,a]=(0,g.useState)(!1);return(0,_.jsxs)(`button`,{type:`button`,title:`Copy the ${r}`,"aria-label":i?`Copied`:`Copy`,onClick:()=>{navigator.clipboard?.writeText(n),a(!0),setTimeout(()=>a(!1),2e3)},className:`${t.a} max-sm:w-8 max-sm:px-0 max-sm:gap-0 self-start`,children:[i?(0,_.jsx)(t.At,{className:`w-3.5 h-3.5 shrink-0 text-accent`}):(0,_.jsx)(e._,{className:`w-3.5 h-3.5 shrink-0`}),(0,_.jsx)(`span`,{className:`max-sm:hidden`,children:i?`Copied`:`Copy`})]})}function G({record:e}){let n=L(e.status);return(0,_.jsxs)(`div`,{className:`flex flex-col gap-2.5 px-4 py-3.5 border-b border-[var(--panel-border)]/40 last:border-0 min-w-0`,children:[(0,_.jsxs)(`div`,{className:`flex items-center gap-2 min-w-0`,children:[(0,_.jsx)(`span`,{className:`inline-flex items-center h-6 px-2 rounded-lg bg-accent/10 text-accent text-[11.5px] font-extrabold tracking-wide shrink-0`,children:e.type}),(0,_.jsx)(`span`,{className:`text-[12.5px] font-semibold text-foreground/60 truncate flex-1 min-w-0`,children:e.type===`MX`&&e.priority!==null?`Priority ${e.priority}`:e.record}),n&&(0,_.jsx)(t._,{state:n.state,label:n.label})]}),(0,_.jsxs)(`div`,{className:`grid grid-cols-[minmax(0,1fr)_auto] items-start gap-x-2.5 gap-y-2.5`,children:[(0,_.jsxs)(`div`,{className:`flex flex-col gap-0.5 min-w-0`,children:[(0,_.jsx)(`span`,{className:`text-[11.5px] font-semibold text-foreground/40`,children:`Name`}),(0,_.jsx)(`code`,{className:`text-[12.5px] font-semibold text-foreground break-all`,children:e.name}),(0,_.jsxs)(`span`,{className:t.s,children:[`In full, where your domain company asks for it:`,` `,(0,_.jsx)(`code`,{className:`break-all`,children:e.fullName})]})]}),(0,_.jsxs)(`div`,{className:`flex flex-col gap-1`,children:[(0,_.jsx)(W,{text:e.name,what:`name`}),(0,_.jsx)(W,{text:e.fullName,what:`name in full`})]}),(0,_.jsxs)(`div`,{className:`flex flex-col gap-0.5 min-w-0`,children:[(0,_.jsx)(`span`,{className:`text-[11.5px] font-semibold text-foreground/40`,children:`Value`}),(0,_.jsx)(`code`,{className:`text-[12px] text-foreground/80 break-all line-clamp-3`,children:e.value})]}),(0,_.jsx)(W,{text:e.value,what:`value`})]})]})}function K({keyState:e,from:n,onChanged:i,askEvery:a=P}){let[o,s]=(0,g.useState)(null),[c,u]=(0,g.useState)(!1),[d,f]=(0,g.useState)(``),[p,m]=(0,g.useState)(``),[h,v]=(0,g.useState)(``),[y,b]=(0,g.useState)(!1),[x,S]=(0,g.useState)(0),[C,w]=(0,g.useState)(!1),[T,E]=(0,g.useState)(``),[D,O]=(0,g.useState)(``),k=(0,g.useRef)(!0);(0,g.useEffect)(()=>(k.current=!0,()=>{k.current=!1}),[]);let A=(0,g.useCallback)(async()=>{try{let{ok:e,body:t}=await z(`/api/email/domain`);if(!k.current)return;e?s(t?.domain||null):v(String(t?.error||U))}catch{k.current&&v(U)}finally{k.current&&u(!0)}},[]);(0,g.useEffect)(()=>{e===`works`?A():u(!0)},[e,A]);let j=o?.status||``,M=j===`verified`;(0,g.useEffect)(()=>{if(!R(j)||x>=F)return;let e=setTimeout(()=>{S(e=>e+1),A()},a);return()=>clearTimeout(e)},[j,x,A,a]);let N=(0,g.useRef)(null);(0,g.useEffect)(()=>{c&&(N.current===!1&&M&&i(),N.current=M)},[M,c,i]);let L=async()=>{m(`add`),v(``),b(!1);try{let{ok:e,body:t}=await z(`/api/email/domain`,{method:`POST`,body:{domain:d}});if(!e||!t?.domain){v(String(t?.error||U)),b(t?.cause===`taken`||t?.cause===`other`||t?.cause===`sending-only`);return}await H({domain:t.domain.name}),s(t.domain),S(0),i()}catch{v(`Your domain could not be saved. Check that you are signed in as an admin.`)}finally{m(``)}},B=async()=>{m(`verify`),v(``);try{let{ok:e,body:t}=await z(`/api/email/domain/verify`,{method:`POST`});!e||!t?.domain?v(String(t?.error||U)):(s(t.domain),S(0))}catch{v(U)}finally{m(``)}},V=async()=>{m(`other`),v(``),b(!1);try{await H({domain:``}),s(null),f(``),S(0),i()}catch{v(`Your domain could not be changed. Check that you are signed in as an admin.`)}finally{m(``)}},W=async e=>{m(`from`),v(``);try{await H({from:e}),w(!1),i()}catch{v(`The address could not be saved. Check that you are signed in as an admin.`)}finally{m(``)}};if(e===`sending-only`)return(0,_.jsxs)(t.m,{icon:t.Dt,title:`Your domain`,description:`Your key can only send email.`,actions:(0,_.jsx)(t._,{state:`off`,label:`Needs Full access`}),children:[(0,_.jsxs)(t.h,{children:[`Your key was made with sending access only, so your app cannot add your domain for you. Either make a new key in Resend with `,(0,_.jsx)(`strong`,{children:`Full access`}),` and paste it as RESEND_KEY, or add your domain on Resend’s own Domains page and type the address your mail should go out as here.`]}),(0,_.jsxs)(`a`,{href:`https://resend.com/domains`,target:`_blank`,rel:`noreferrer`,className:`inline-flex items-center gap-1.5 px-1 text-[12px] font-bold text-accent hover:underline w-fit`,children:[`Open Domains in Resend`,(0,_.jsx)(t.Ot,{className:`w-3 h-3`})]}),(0,_.jsxs)(`div`,{className:`flex flex-col sm:flex-row sm:items-end gap-2.5`,children:[(0,_.jsx)(`div`,{className:`flex-1 min-w-0`,children:(0,_.jsx)(t.b,{label:`The address your mail goes out as`,value:D,onChange:O,placeholder:`hello@yourbusiness.com`,hint:`It has to be at a domain Resend shows as verified.`})}),(0,_.jsx)(t.o,{icon:t.At,busy:p===`from`,disabled:!/^[^\s@]+@[^\s@]+\.[^\s@]+$/.test(D.trim()),onClick:()=>W(D.trim()),className:`sm:mb-[1.35rem]`,children:`Save`})]}),h&&(0,_.jsx)(t.h,{tone:`error`,children:h})]});if(e!==`works`)return null;let K=o?I(j):{state:`off`,label:`Not added yet`},q=j===`failed`||j===`partially_failed`||j===`temporary_failure`,J=R(j)&&x>=F;return(0,_.jsxs)(t.m,{icon:t.Dt,title:`Your domain`,description:o?M?`${o.name} is verified. Your email reaches anybody.`:`Three records to add where you bought ${o.name}.`:`Until it is verified, email reaches only you.`,actions:(0,_.jsx)(`span`,{className:`max-sm:hidden`,children:c?(0,_.jsx)(t._,{state:K.state,label:K.label}):(0,_.jsx)(t._,{state:`saving`,label:`Checking`})}),defaultOpen:!0,children:[c?o?M?(0,_.jsxs)(_.Fragment,{children:[C?(0,_.jsxs)(`div`,{className:`flex flex-col sm:flex-row sm:items-end gap-2.5`,children:[(0,_.jsx)(`div`,{className:`flex-1 min-w-0`,children:(0,_.jsx)(t.b,{label:`Your mail goes out as`,value:T,onChange:e=>E(e.replace(/[\s@]/g,``)),placeholder:`hello`,hint:`Then @${o.name}`})}),(0,_.jsx)(t.o,{icon:t.At,busy:p===`from`,disabled:!T.trim(),onClick:()=>W(`${T.trim().toLowerCase()}@${o.name}`),className:`sm:mb-[1.35rem]`,children:`Save`})]}):(0,_.jsxs)(`p`,{className:`px-1 text-[13px] text-foreground/70`,children:[`Your mail goes out as `,(0,_.jsx)(`span`,{className:`font-bold text-foreground`,children:n||`hello@${o.name}`}),`.`,` `,(0,_.jsx)(`button`,{type:`button`,onClick:()=>{E(String(n||``).split(`@`)[0]||`hello`),w(!0)},className:`text-accent font-bold hover:underline cursor-pointer`,children:`Change`})]}),(0,_.jsxs)(`details`,{className:`px-1`,children:[(0,_.jsx)(`summary`,{className:`text-[12px] font-semibold text-foreground/45 hover:text-accent cursor-pointer select-none`,children:`The records that verified it`}),(0,_.jsx)(`div`,{className:`mt-3 glass-panel border border-[var(--panel-border)] rounded-2xl overflow-hidden bg-background`,children:o.records.map(e=>(0,_.jsx)(G,{record:e},`${e.type}:${e.fullName}`))})]})]}):(0,_.jsxs)(_.Fragment,{children:[(0,_.jsxs)(t.h,{children:[`Add these `,o.records.length===3?`three`:o.records.length,` records where you bought`,` `,o.name,`, in its DNS settings. They sit beside what is there already and do not change where your own email arrives. Copy each one exactly.`]}),(0,_.jsx)(`div`,{className:`glass-panel border border-[var(--panel-border)] rounded-2xl overflow-hidden bg-background`,children:o.records.map(e=>(0,_.jsx)(G,{record:e},`${e.type}:${e.fullName}`))}),q||J?(0,_.jsxs)(`div`,{className:`flex flex-col gap-2`,children:[(0,_.jsx)(t.h,{children:`Resend could not find every record yet. A new record can take from a few minutes to a few hours to show. Check each one above was copied exactly, then check again.`}),(0,_.jsx)(t.o,{icon:r.a,busy:p===`verify`,onClick:B,className:`self-start`,children:`Check again`})]}):R(j)?(0,_.jsx)(t.h,{children:`Resend is checking your records. This screen shows the answer when it comes.`}):(0,_.jsx)(t.o,{icon:t.At,busy:p===`verify`,onClick:B,className:`self-start`,children:`I have added them`}),(0,_.jsxs)(`p`,{className:`px-1 text-[12px] text-foreground/45`,children:[`Not the right domain?`,` `,(0,_.jsx)(`button`,{type:`button`,onClick:V,disabled:!!p,className:`text-accent font-bold hover:underline cursor-pointer disabled:opacity-50`,children:`Use a different domain`})]})]}):(0,_.jsx)(_.Fragment,{children:(0,_.jsxs)(`div`,{className:`flex flex-col sm:flex-row sm:items-end gap-2.5`,children:[(0,_.jsx)(`div`,{className:`flex-1 min-w-0`,children:(0,_.jsx)(t.b,{label:`Your domain`,value:d,onChange:f,placeholder:`yourbusiness.com`,hint:`The part after www. No domain yet? Buy one from any domain company, then come back.`})}),(0,_.jsx)(t.o,{icon:l.t,busy:p===`add`,disabled:!d.trim(),onClick:L,className:`sm:mb-[1.35rem]`,children:`Add`})]})}):null,h&&(0,_.jsxs)(`div`,{className:`flex flex-col gap-1.5`,children:[(0,_.jsx)(t.h,{tone:`error`,children:h}),y&&(0,_.jsxs)(`a`,{href:`https://resend.com/domains`,target:`_blank`,rel:`noreferrer`,className:`inline-flex items-center gap-1.5 px-1 text-[12px] font-bold text-accent hover:underline w-fit`,children:[`Open Domains in Resend`,(0,_.jsx)(t.Ot,{className:`w-3 h-3`})]})]})]})}var q=e=>[{title:`Receipts and sale alerts`,body:`Each payment emails the buyer a receipt and tells you what sold.`,icon:D,where:{label:`Payment emails, above`}},{title:`Hear about each form entry`,body:`Someone sends a form on one of your pages, and it comes to you by email.`,icon:o.n,where:{path:`/pages`,label:`Pages screen`}},{title:`Confirm to the people who write in`,body:`Whoever sends a form gets a note that it arrived, with your words in it.`,icon:o.t,where:{path:`/pages`,label:`Pages screen`}},{title:`Notifications by email`,body:`A page that rings the bell can send the same news by email.`,icon:C,where:{path:`/pages`,label:`Pages screen`}},{title:`Write to anyone from your app`,body:`A page for your team can write to any address, from ${e}.`,icon:d.t,where:{path:`/pages`,label:`Pages screen`}}],J=e=>e?{description:`Every page you told to send email does. Switch it off to stop all of it at once.`,chip:{state:`saved`,label:`On`}}:{description:`Nothing sends. Your pages keep their settings and wait for this to come back on.`,chip:{state:`off`,label:`Off`}},Y=5e3,X=e=>{let t=new Date(e),n=t.toLocaleTimeString([],{hour:`2-digit`,minute:`2-digit`});return t.toDateString()===new Date().toDateString()?n:`${t.toLocaleDateString([],{day:`numeric`,month:`short`})}, ${n}`};function Z({from:e}){return(0,_.jsx)(`div`,{className:`flex flex-col divide-y divide-[var(--panel-border)]/60 rounded-2xl border border-[var(--panel-border)]/60`,children:q(e).map(e=>{let t=e.icon,n=`max-sm:hidden sm:inline-flex row-start-1 row-span-2 col-start-3 self-center justify-self-end items-center gap-1.5 text-[11.5px] font-semibold text-foreground/45 whitespace-nowrap`;return(0,_.jsxs)(`div`,{className:`grid grid-cols-[auto_minmax(0,1fr)] sm:grid-cols-[auto_minmax(0,1fr)_auto] items-center gap-x-3 sm:gap-x-3.5 gap-y-0.5 px-4 py-3`,children:[(0,_.jsx)(`div`,{className:`row-start-1 row-span-2 col-start-1 self-center w-9 h-9 rounded-xl flex items-center justify-center shrink-0 border border-[var(--panel-border)]/50 bg-accent/10 text-accent`,children:(0,_.jsx)(t,{className:`w-4 h-4`})}),(0,_.jsx)(`span`,{className:`row-start-1 col-start-2 min-w-0 text-[13px] font-bold text-foreground leading-tight self-end`,children:e.title}),(0,_.jsx)(`span`,{className:`row-start-2 col-start-2 min-w-0 text-[12px] text-foreground/50 font-normal leading-snug self-start`,children:e.body}),e.where.path?(0,_.jsxs)(y.Link,{to:e.where.path,className:`${n} hover:text-accent transition-colors`,children:[e.where.label,(0,_.jsx)(a.t,{className:`w-3 h-3`})]}):(0,_.jsx)(`span`,{className:n,children:e.where.label})]},e.title)})})}function Q(){return(0,_.jsx)(t.m,{icon:e.h,title:`Waiting for your app`,description:`Asking again every few seconds.`,actions:(0,_.jsx)(t._,{state:`saving`,label:`Checking`}),collapsible:!1,children:(0,_.jsx)(t.h,{children:`Your app’s server is not answering yet. After you press Apply in AI Studio it starts again, which takes a few seconds. This screen asks again on its own and fills in the moment it answers.`})})}function $({refusal:e}){return(0,_.jsxs)(`div`,{className:`rounded-2xl border border-[var(--panel-border)]/60 bg-foreground/[0.02] px-4 py-3 flex flex-col gap-1`,children:[(0,_.jsxs)(`span`,{className:`text-[12.5px] font-bold text-foreground/80`,children:[`The last email that could not go: to `,e.to,`, `,X(e.at)]}),(0,_.jsx)(`span`,{className:`text-[12.5px] text-foreground/60 leading-relaxed`,children:e.reason})]})}function ee({status:e,owner:n,ownerError:r,choose:i}){let a=N(),s=n?.count??e.ownerCount,c=!e.senderVerified;return(0,_.jsxs)(t.m,{icon:o.t,title:`Your mail`,description:n?.me?`Sales and form alerts come to ${n.me}.`:s?`Where sales and form alerts go.`:`Sales and form alerts have nowhere to go yet.`,actions:(0,_.jsx)(`span`,{className:`max-sm:hidden`,children:(0,_.jsx)(t._,{state:s?`saved`:`off`,label:s?`Reaches ${s} address${s===1?``:`es`}`:`Nowhere yet`})}),children:[c&&(0,_.jsxs)(t.h,{children:[(0,_.jsx)(`span`,{className:`font-bold text-foreground/70`,children:`Right now your email reaches only you.`}),` It goes out from Resend’s practice address, `,e.from,`, which delivers only to the address you made your Resend account with: a test to yourself arrives when that is the address you sign in with here, your admins get nothing yet, and neither does a customer. Verify your domain above to reach anybody.`]}),(0,_.jsx)(t.g,{label:`Who hears about sales and form entries`,value:n?.who??`admins`,onChange:e=>i(e===`me`?`me`:`admins`),options:[{value:`admins`,label:`Me and all my admins`},{value:`me`,label:`Only me`}],allowEmpty:!1,hint:`Your admins are found for you: nobody has to type an address. When a customer presses Reply, it comes to you.`}),n&&!n.me&&(0,_.jsx)(t.h,{children:`Your account has no email address, so only your admins hear. Add one to your profile to hear too.`}),r&&(0,_.jsx)(t.h,{tone:`error`,children:r}),(0,_.jsx)(A,{onSent:e=>{e&&a.mark(e)},trailing:(0,_.jsxs)(`a`,{href:`https://resend.com/emails`,target:`_blank`,rel:`noreferrer`,className:`inline-flex items-center gap-1.5 text-[12px] font-bold text-accent hover:underline`,children:[`See everything sent, in Resend`,(0,_.jsx)(t.Ot,{className:`w-3 h-3`})]})}),e.lastRefusal&&(0,_.jsx)($,{refusal:e.lastRefusal})]})}function te({status:e,sending:n,ownerCount:r}){let i=f.n(),[a,o]=(0,g.useState)(``),s=async(e,t)=>o(await i.set(e,t)||``),c=n?e.senderVerified?``:`Customers get these once your domain is verified.`:`Email is switched off above.`,l=n?r?``:`Your own mail has nowhere to go yet.`:`Email is switched off above.`;return(0,_.jsxs)(t.m,{icon:D,title:`Payment emails`,description:`For every payment in your app, one pair of switches.`,children:[(0,_.jsx)(t.S,{label:`Email buyers a receipt`,hint:c||`In your app’s look, with what they bought and a link to Stripe’s own receipt.`,enabled:i.receipts,onChange:e=>s(`receipts`,e),disabled:i.loading||!!c}),(0,_.jsx)(t.S,{label:`Email me each sale`,hint:l||`What sold and who bought it, with a button to your Transactions.`,enabled:i.saleAlerts,onChange:e=>s(`saleAlerts`,e),disabled:i.loading||!!l}),a&&(0,_.jsx)(t.h,{tone:`error`,children:a})]})}function ne(){let{status:r,error:i,reread:o}=p.n(0,!0),l=f.r(`email`),[d,v]=(0,g.useState)(``),[y,b]=(0,g.useState)(!1),[x,S]=(0,g.useState)(!1),[C,w]=(0,g.useState)(null),[E,D]=(0,g.useState)(``);(0,g.useEffect)(()=>{if(!i)return;let e=setInterval(()=>{o()},Y);return()=>clearInterval(e)},[i,o]);let O=!!i&&!r?.configured,A=()=>{b(!1),o().then(()=>S(!0))},j=!!r?.configured&&r?.key!==`refused`;(0,g.useEffect)(()=>{if(!j)return;let e=!0;return m.t().then(({state:t,error:n})=>{e&&(t&&w(t),D(n||``))}),()=>{e=!1}},[j]);let M=(0,g.useCallback)(async e=>{w(t=>t&&{...t,who:e});let{state:t,error:n}=await m.t(e);t&&w(t),D(n||``)},[]),N=(0,g.useCallback)(()=>{o()},[o]),P=J(l.on);return(0,_.jsxs)(`main`,{className:`flex-1 w-full max-w-7xl mx-auto p-4 pt-2 md:p-8 md:pt-4 z-10 flex flex-col min-h-screen`,children:[(0,_.jsxs)(t.nt.div,{initial:{opacity:0,y:20},animate:{opacity:1,y:0},className:`mb-6`,children:[(0,_.jsx)(e.t,{children:`Email`}),(0,_.jsxs)(`div`,{className:`flex items-center gap-2 text-foreground/40 font-bold uppercase tracking-[0.2em] text-[11px]`,children:[(0,_.jsx)(`span`,{className:`w-8 h-[1px] bg-foreground/10`}),`/email`]})]}),(0,_.jsxs)(`div`,{className:`flex flex-col gap-6 flex-1 pb-16`,children:[(0,_.jsx)(n.t,{}),(0,_.jsx)(`div`,{className:`glass-panel border border-[var(--panel-border)] rounded-3xl p-4 sm:p-5 md:p-8 shadow-2xl relative bg-background flex flex-col fbos-tab-fill min-h-[600px]`,children:!r||O?O?(0,_.jsx)(Q,{}):(0,_.jsx)(`div`,{className:`flex items-center justify-center flex-1 text-foreground/40 py-16`,children:(0,_.jsx)(c.r,{className:`w-6 h-6 animate-spin text-accent`})}):r.configured?(0,_.jsxs)(`div`,{className:`flex flex-col gap-4`,children:[(0,_.jsx)(t.v,{icon:u.t,title:`Send email`,description:P.description,chip:P.chip,enabled:l.loading?null:l.on,onChange:async e=>v(await l.set(e)||``),children:d?(0,_.jsx)(t.h,{tone:`error`,children:d}):null}),r.key===`refused`?(0,_.jsxs)(t.m,{icon:T,title:`Your key`,description:`Resend did not accept it.`,actions:(0,_.jsx)(t._,{state:`error`,label:`Key refused`}),collapsible:!1,children:[(0,_.jsx)(t.h,{children:`Resend did not accept the key in RESEND_KEY: it was mistyped, deleted in Resend, or made for another account. Make a new one with Full access and paste it in its place.`}),y?(0,_.jsx)(h.EmailSetupSteps,{onConfirm:A}):(0,_.jsxs)(`button`,{type:`button`,onClick:()=>b(!0),className:`inline-flex items-center gap-1.5 w-fit h-9 px-4 rounded-[var(--btn-radius,0.75rem)] text-[12.5px] font-bold border border-accent/40 bg-accent/10 text-accent hover:bg-accent/15 transition-all active:scale-[0.98] cursor-pointer`,children:[`Show me how`,(0,_.jsx)(a.t,{className:`w-3.5 h-3.5`})]})]}):(0,_.jsxs)(_.Fragment,{children:[(0,_.jsx)(K,{keyState:r.key,from:r.from,onChanged:N}),(0,_.jsx)(ee,{status:r,owner:C,ownerError:E,choose:M}),(0,_.jsx)(te,{status:r,sending:l.on,ownerCount:C?.count??r.ownerCount}),(0,_.jsx)(t.m,{icon:k,title:`What you can do with email`,description:`Payment emails are switched on here; form emails and notifications on each page’s row.`,children:(0,_.jsx)(Z,{from:r.from||``})})]})]}):(0,_.jsx)(h.ConnectCard,{icon:e.h,title:`Connect email`,description:`This app is not sending email yet.`,stepsDescription:`Two steps: a Resend account with its key, then that one key pasted.`,button:`Set up email`,secret:`RESEND_KEY`,open:y,onOpen:()=>b(!0),confirmed:x,steps:(0,_.jsx)(h.EmailSetupSteps,{onConfirm:A}),children:(0,_.jsx)(t.h,{children:`Email runs through Resend, and connecting it is one pasted key, the way payments are. Then you add your domain right here, and this screen fills itself: who your email reaches, and where your own mail goes.`})})})]}),(0,_.jsx)(s.t,{})]})}exports.EmailAdmin=ne;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
require(`./chunk-CiTBaPhY.cjs`),require(`./PageTitle-
|
|
1
|
+
require(`./chunk-CiTBaPhY.cjs`),require(`./PageTitle-BL50s4qY.cjs`);const e=require(`./TimeZoneField-Ckn1pKAL.cjs`),t=require(`./schedule-BAea6q8_.cjs`),n=require(`./chevron-down-lyDK1rfL.cjs`);let r=require(`react/jsx-runtime`);var i={name:`calendar-x-2`,size:24,node:[[`path`,{d:`M16 2v3`,key:`otl347`}],[`path`,{d:`m17 16 5 5`,key:`1a37d9`}],[`path`,{d:`m17 21 5-5`,key:`1b797a`}],[`path`,{d:`M21 12V5a2 2 0 00-2-2H5a2 2 0 00-2 2v14a2 2 0 002 2h8`,key:`14ws7l`}],[`path`,{d:`M3 9h18`,key:`1pudct`}],[`path`,{d:`M8 2v3`,key:`1ioesn`}]]};i.node;var a=n.n(i),o=(e,n=`host`)=>e.heldOnly?`Held time`:n===`booker`?e.scheduleName.trim()||`A meeting`:t.it(e),s=(e,t=`host`)=>e.heldOnly?`Held with no booking behind it`:e.own?`Your own event`:t===`booker`?e.memberName.trim()?`With ${e.memberName.trim()}`:`Booked`:e.scheduleName||e.email||`Booked`,c=(e,n=`host`)=>n===`booker`&&!e.heldOnly?t.B(e):o(e,n),l=e=>!e.pending||e.cancelled||e.own||e.heldOnly?``:e.partySize>1?`${e.partyAccepted} of ${e.partySize}`:`Pending`;function u({value:e,onChange:n}){return(0,r.jsx)(`div`,{className:`flex items-center gap-2 flex-wrap`,children:t.f.map(i=>{let a=i.value===e;return(0,r.jsx)(`button`,{type:`button`,title:i.label,"aria-label":i.label,"aria-pressed":a,onClick:()=>n(i.value),className:`w-8 h-8 rounded-full transition-all cursor-pointer active:scale-95 flex items-center justify-center ${i.value?`border-2`:`border-2 border-dashed`} ${a?`scale-105`:`hover:scale-105`}`,style:{background:t.at(i.value,a?55:30),borderColor:a?t.rt(i.value):t.at(i.value,40)},children:a&&(0,r.jsx)(`span`,{className:`w-2 h-2 rounded-full`,style:{background:t.rt(i.value)}})},i.value||`theme`)})})}function d({className:e=``}){return(0,r.jsx)(`span`,{className:`inline-flex items-center h-[18px] px-1.5 rounded-md shrink-0 border border-red-500/25 bg-red-500/10 text-[10px] font-bold uppercase tracking-[0.08em] text-red-500/90 ${e}`,children:`Cancelled`})}function f({label:e=`Pending`,className:t=``}){return(0,r.jsx)(`span`,{title:`Waiting to be accepted`,className:`inline-flex items-center h-[18px] px-1.5 rounded-md shrink-0 border border-amber-500/25 bg-amber-500/10 text-[10px] font-bold uppercase tracking-[0.08em] text-amber-600 dark:text-amber-400 ${t}`,children:e})}function p({className:e=``}){return(0,r.jsx)(`span`,{title:`Held with nothing booked`,className:`inline-flex items-center h-[18px] px-1.5 rounded-md shrink-0 border border-[var(--panel-border)] bg-foreground/[0.04] text-[10px] font-bold uppercase tracking-[0.08em] text-foreground/45 ${e}`,children:`Held`})}function m({booking:n,zone:i,chip:a,withMember:c=!1,side:u=`host`,onOpen:m,now:h}){let g=n.end<(h?h():new Date).toISOString(),_=n.cancelled,v=l(n),y=n.color;return(0,r.jsxs)(`button`,{type:`button`,onClick:m,"aria-label":`${t.st(new Date(n.start),i)} — ${o(n,u)}${_?` (cancelled)`:``}`,className:`group relative w-full text-left rounded-2xl border overflow-hidden flex items-stretch gap-2.5 p-2.5 transition-all cursor-pointer active:scale-[0.99] ${g&&!_?`opacity-60`:``} ${_||n.heldOnly?`border-dashed border-[var(--panel-border)]/60 bg-foreground/[0.02]`:``}`,style:_||n.heldOnly?void 0:{background:t.at(y,7),borderColor:t.at(y,26)},children:[(0,r.jsx)(`span`,{"aria-hidden":!0,className:`w-1 rounded-full shrink-0 ${_||n.heldOnly?`bg-foreground/15`:``}`,style:_||n.heldOnly?void 0:{background:t.at(y,85)}}),(0,r.jsx)(`span`,{"aria-hidden":!0,className:`absolute inset-0 bg-foreground/0 group-hover:bg-foreground/[0.04] transition-colors`}),(0,r.jsxs)(`span`,{className:`relative flex-1 min-w-0 flex flex-col gap-0.5 py-0.5`,children:[(0,r.jsxs)(`span`,{className:`flex items-baseline gap-2 min-w-0`,children:[(0,r.jsx)(`span`,{className:`text-[12.5px] font-bold tabular-nums shrink-0 ${_?`text-foreground/45 line-through`:`text-foreground`}`,children:t.st(new Date(n.start),i)}),(0,r.jsx)(`span`,{className:`text-[12.5px] font-semibold truncate ${_?`text-foreground/45 line-through`:`text-foreground/80`}`,children:o(n,u)})]}),(0,r.jsxs)(`span`,{className:`flex items-center justify-between gap-2 min-w-0`,children:[(0,r.jsx)(`span`,{className:`text-[11.5px] font-medium text-foreground/45 truncate`,children:c&&n.memberName?`${n.memberName} · ${s(n,u)}`:s(n,u)}),_?(0,r.jsx)(d,{}):n.heldOnly?(0,r.jsx)(p,{}):v?(0,r.jsx)(f,{label:v}):a&&(0,r.jsx)(e._,{state:a.state,label:a.label})]})]})]})}Object.defineProperty(exports,`a`,{enumerable:!0,get:function(){return o}}),Object.defineProperty(exports,`c`,{enumerable:!0,get:function(){return a}}),Object.defineProperty(exports,`i`,{enumerable:!0,get:function(){return f}}),Object.defineProperty(exports,`n`,{enumerable:!0,get:function(){return u}}),Object.defineProperty(exports,`o`,{enumerable:!0,get:function(){return c}}),Object.defineProperty(exports,`r`,{enumerable:!0,get:function(){return m}}),Object.defineProperty(exports,`s`,{enumerable:!0,get:function(){return l}}),Object.defineProperty(exports,`t`,{enumerable:!0,get:function(){return d}});
|
|
@@ -1,5 +1,5 @@
|
|
|
1
|
-
import "./PageTitle-
|
|
2
|
-
import { _ as e } from "./TimeZoneField-
|
|
1
|
+
import "./PageTitle-CkZriz8K.js";
|
|
2
|
+
import { _ as e } from "./TimeZoneField-oIMwb5_X.js";
|
|
3
3
|
import { B as t, at as n, f as r, it as i, rt as a, st as o } from "./schedule-C13m_kiO.js";
|
|
4
4
|
import { n as s } from "./chevron-down--LwXEv9w.js";
|
|
5
5
|
import { jsx as c, jsxs as l } from "react/jsx-runtime";
|
|
@@ -1,3 +1,3 @@
|
|
|
1
|
-
const e=require(`./chunk-CiTBaPhY.cjs`),t=require(`./TimeZoneField-
|
|
1
|
+
const e=require(`./chunk-CiTBaPhY.cjs`),t=require(`./TimeZoneField-Ckn1pKAL.cjs`),n=require(`./chevron-down-lyDK1rfL.cjs`),r=require(`./chevron-left-DHTPst5Z.cjs`),i=require(`./VideoPlayer-CggwpVXH.cjs`),a=require(`./link-2-C7A-6PW6.cjs`),o=require(`./x-Ci8c5p6T.cjs`),s=require(`./lock-xMnTQLRt.cjs`),c=require(`./trash-D-CpYHCs.cjs`),l=require(`./mediaKind-ButDya5f.cjs`),u=require(`./fileBytes-BLDZ-2kj.cjs`);let d=require(`react`);d=e.a(d,1);let f=require(`react/jsx-runtime`),p=require(`react-dom`);var m={name:`download`,size:24,node:[[`path`,{d:`M12 15V3`,key:`m9g1x1`}],[`path`,{d:`M21 15v4a2 2 0 0 1-2 2H5a2 2 0 0 1-2-2v-4`,key:`ih7n3h`}],[`path`,{d:`m7 10 5 5 5-5`,key:`brsn70`}]]};m.node;var h=n.n(m),g={name:`expand`,size:24,node:[[`path`,{d:`m15 15 6 6`,key:`1s409w`}],[`path`,{d:`m15 9 6-6`,key:`ko1vev`}],[`path`,{d:`M21 16v5h-5`,key:`1ck2sf`}],[`path`,{d:`M21 8V3h-5`,key:`1qoq8a`}],[`path`,{d:`M3 16v5h5`,key:`1t08am`}],[`path`,{d:`m3 21 6-6`,key:`wwnumi`}],[`path`,{d:`M3 8V3h5`,key:`1ln10m`}],[`path`,{d:`M9 9 3 3`,key:`v551iv`}]]};g.node;var _=n.n(g),v={name:`file-code`,size:24,node:[[`path`,{d:`M6 22a2 2 0 0 1-2-2V4a2 2 0 0 1 2-2h8a2.4 2.4 0 0 1 1.704.706l3.588 3.588A2.4 2.4 0 0 1 20 8v12a2 2 0 0 1-2 2z`,key:`1oefj6`}],[`path`,{d:`M14 2v5a1 1 0 0 0 1 1h5`,key:`wfsgrz`}],[`path`,{d:`M10 12.5 8 15l2 2.5`,key:`1tg20x`}],[`path`,{d:`m14 12.5 2 2.5-2 2.5`,key:`yinavb`}]]};v.node;var y=n.n(v),b={name:`file-spreadsheet`,size:24,node:[[`path`,{d:`M6 22a2 2 0 0 1-2-2V4a2 2 0 0 1 2-2h8a2.4 2.4 0 0 1 1.704.706l3.588 3.588A2.4 2.4 0 0 1 20 8v12a2 2 0 0 1-2 2z`,key:`1oefj6`}],[`path`,{d:`M14 2v5a1 1 0 0 0 1 1h5`,key:`wfsgrz`}],[`path`,{d:`M8 13h2`,key:`yr2amv`}],[`path`,{d:`M14 13h2`,key:`un5t4a`}],[`path`,{d:`M8 17h2`,key:`2yhykz`}],[`path`,{d:`M14 17h2`,key:`10kma7`}]]};b.node;var x=n.n(b),S={name:`file-text`,size:24,node:[[`path`,{d:`M6 22a2 2 0 0 1-2-2V4a2 2 0 0 1 2-2h8a2.4 2.4 0 0 1 1.704.706l3.588 3.588A2.4 2.4 0 0 1 20 8v12a2 2 0 0 1-2 2z`,key:`1oefj6`}],[`path`,{d:`M14 2v5a1 1 0 0 0 1 1h5`,key:`wfsgrz`}],[`path`,{d:`M10 9H8`,key:`b1mrlr`}],[`path`,{d:`M16 13H8`,key:`t4e002`}],[`path`,{d:`M16 17H8`,key:`z1uh3a`}]]};S.node;var C=n.n(S),w={name:`file`,size:24,node:[[`path`,{d:`M6 22a2 2 0 0 1-2-2V4a2 2 0 0 1 2-2h8a2.4 2.4 0 0 1 1.704.706l3.588 3.588A2.4 2.4 0 0 1 20 8v12a2 2 0 0 1-2 2z`,key:`1oefj6`}],[`path`,{d:`M14 2v5a1 1 0 0 0 1 1h5`,key:`wfsgrz`}]]};w.node;var T=n.n(w),E={name:`image`,size:24,node:[[`rect`,{width:`18`,height:`18`,x:`3`,y:`3`,rx:`2`,ry:`2`,key:`1m3agn`}],[`circle`,{cx:`9`,cy:`9`,r:`2`,key:`af1f0g`}],[`path`,{d:`m21 15-3.086-3.086a2 2 0 0 0-2.828 0L6 21`,key:`1xmnt7`}]]};E.node;var D=n.n(E),O={name:`music`,size:24,node:[[`path`,{d:`M9 18V5l12-2v13`,key:`1jmyc2`}],[`circle`,{cx:`6`,cy:`18`,r:`3`,key:`fqmcym`}],[`circle`,{cx:`18`,cy:`16`,r:`3`,key:`1hluhg`}]]};O.node;var ee=n.n(O),te={name:`pen`,size:24,node:[[`path`,{d:`M21.174 6.812a1 1 0 0 0-3.986-3.987L3.842 16.174a2 2 0 0 0-.5.83l-1.321 4.352a.5.5 0 0 0 .623.622l4.353-1.32a2 2 0 0 0 .83-.497z`,key:`1a8usu`}]],aliases:[`edit-2`]};te.node;var ne=n.n(te),k={name:`presentation`,size:24,node:[[`path`,{d:`M2 3h20`,key:`91anmk`}],[`path`,{d:`M21 3v11a2 2 0 0 1-2 2H5a2 2 0 0 1-2-2V3`,key:`2k9sn8`}],[`path`,{d:`m7 21 5-5 5 5`,key:`bip4we`}]]};k.node;var re=n.n(k),A={name:`shrink`,size:24,node:[[`path`,{d:`m15 15 6 6m-6-6v4.8m0-4.8h4.8`,key:`17vawe`}],[`path`,{d:`M9 19.8V15m0 0H4.2M9 15l-6 6`,key:`chjx8e`}],[`path`,{d:`M15 4.2V9m0 0h4.8M15 9l6-6`,key:`lav6yq`}],[`path`,{d:`M9 4.2V9m0 0H4.2M9 9 3 3`,key:`1pxi2q`}]]};A.node;var ie=n.n(A),j={name:`undo-2`,size:24,node:[[`path`,{d:`M9 14 4 9l5-5`,key:`102s5s`}],[`path`,{d:`M4 9h10.5a5.5 5.5 0 0 1 5.5 5.5a5.5 5.5 0 0 1-5.5 5.5H11`,key:`f3b9sd`}]]};j.node;var ae=n.n(j),M={name:`zoom-out`,size:24,node:[[`circle`,{cx:`11`,cy:`11`,r:`8`,key:`4ej97u`}],[`line`,{x1:`21`,x2:`16.65`,y1:`21`,y2:`16.65`,key:`13gj7c`}],[`line`,{x1:`8`,x2:`14`,y1:`11`,y2:`11`,key:`durymu`}]]};M.node;var oe=n.n(M),N={name:`zoom-in`,size:24,node:[[`circle`,{cx:`11`,cy:`11`,r:`8`,key:`4ej97u`}],[`line`,{x1:`21`,x2:`16.65`,y1:`21`,y2:`16.65`,key:`13gj7c`}],[`line`,{x1:`11`,x2:`11`,y1:`8`,y2:`14`,key:`1vmskp`}],[`line`,{x1:`8`,x2:`14`,y1:`11`,y2:`11`,key:`durymu`}]]};N.node;var se=n.n(N),P=new Set([`csv`,`tsv`,`xls`,`xlsx`,`ods`,`numbers`]),ce=new Set([`ppt`,`pptx`,`odp`,`key`]),F=new Set([`json`,`xml`,`yml`,`yaml`,`log`,`ics`]);function I({kind:e,name:t=``,className:n=`w-4 h-4`}){let r=l.o(t);return(0,f.jsx)(e===`image`?D:e===`video`?i.i:e===`audio`?ee:e===`link`?a.t:P.has(r)?x:ce.has(r)?re:F.has(r)?y:e===`file`?T:C,{className:n,"aria-hidden":!0})}var L=`shrink-0 flex items-center justify-center rounded-xl bg-gradient-to-br from-accent/25 via-accent/10 to-transparent border border-accent/30 text-accent`,le=16,R=980;function z({doc:e,index:t,cssW:n,cssH:r,root:i,strokes:a,drawing:s,ink:c,onStroke:l}){let p=(0,d.useRef)(null),m=(0,d.useRef)(null),[h,g]=(0,d.useState)(t<2),[_,v]=(0,d.useState)(0);return(0,d.useEffect)(()=>{let e=p.current;if(!e||typeof IntersectionObserver>`u`)return;let t=new IntersectionObserver(([e])=>{g(e.isIntersecting),!e.isIntersecting&&m.current&&m.current.width&&(m.current.width=0,m.current.height=0,v(0))},{root:i,rootMargin:`1500px 0px`});return t.observe(e),()=>t.disconnect()},[i]),(0,d.useEffect)(()=>{if(!h||!n||Math.abs(_-n)<.5)return;let r=!1,i=null,a=window.setTimeout(async()=>{try{let a=await e.getPage(t+1);if(r)return;let o=Math.min(window.devicePixelRatio||1,2),s=a.getViewport({scale:1}),c=a.getViewport({scale:n/s.width*o}),l=document.createElement(`canvas`);l.width=Math.ceil(c.width),l.height=Math.ceil(c.height),i=a.render({canvas:l,viewport:c}),await i.promise;let u=m.current;if(r||!u)return;u.width=l.width,u.height=l.height,u.getContext(`2d`)?.drawImage(l,0,0),v(n)}catch{}},_?140:0);return()=>{r=!0,window.clearTimeout(a),i?.cancel()}},[h,n,e,t,_]),(0,f.jsxs)(`div`,{ref:p,"data-page":t+1,className:`relative shrink-0 bg-white rounded-[3px] ring-1 ring-black/5 shadow-[0_1px_3px_rgba(0,0,0,0.12),0_12px_32px_-16px_rgba(0,0,0,0.35)]`,style:{width:n,height:r},children:[(0,f.jsx)(`canvas`,{ref:m,className:`absolute inset-0 w-full h-full rounded-[3px]`,"aria-label":`Page ${t+1}`,role:`img`}),!_&&(0,f.jsx)(`div`,{className:`absolute inset-0 flex items-center justify-center`,children:(0,f.jsx)(o.r,{className:`w-5 h-5 text-black/20 animate-spin`})}),(0,f.jsx)(u.i,{strokes:a,active:s,ink:c,onStroke:e=>l(t,e)})]})}var ue=(0,d.forwardRef)(function({data:e,zoom:t,drawing:n,ink:r,strokes:i,onStroke:a,onReady:s,onPage:c,onFail:l},p){let m=(0,d.useRef)(null),[h,g]=(0,d.useState)(null),[_,v]=(0,d.useState)([]),[y,b]=(0,d.useState)(0),[x,S]=(0,d.useState)(null),C=(0,d.useRef)({onReady:s,onPage:c,onFail:l});(0,d.useEffect)(()=>{C.current={onReady:s,onPage:c,onFail:l}});let w=(0,d.useRef)(0);(0,d.useEffect)(()=>{let t=!1,n=null;return(async()=>{let r=await u.r(),i=new Uint8Array(await e.arrayBuffer()),a=r.getDocument({data:i});n=a;let o=await a.promise;if(t)return;let s=await Promise.all(Array.from({length:o.numPages},(e,t)=>o.getPage(t+1)));t||(v(s.map(e=>{let t=e.getViewport({scale:1});return{w:t.width,h:t.height}})),g(o),C.current.onReady(o.numPages))})().catch(e=>{t||C.current.onFail(e?.name===`PasswordException`?`locked`:`broken`)}),()=>{t=!0,n?.destroy()}},[e]),(0,d.useLayoutEffect)(()=>{let e=m.current;if(!e)return;S(e);let t=()=>b(e.clientWidth);if(t(),typeof ResizeObserver>`u`)return;let n=new ResizeObserver(t);return n.observe(e),()=>n.disconnect()},[]);let T=_.reduce((e,t)=>Math.max(e,t.w),0)||612,E=y<640?12:32,D=Math.max(120,Math.min(y-E*2,R))/T*t,O=(0,d.useRef)(D);return(0,d.useLayoutEffect)(()=>{let e=m.current,t=O.current;if(O.current=D,!e||!t||t===D)return;let n=D/t;e.scrollTop=(e.scrollTop+e.clientHeight/2)*n-e.clientHeight/2,e.scrollLeft=(e.scrollLeft+e.clientWidth/2)*n-e.clientWidth/2},[D]),(0,d.useEffect)(()=>()=>cancelAnimationFrame(w.current),[]),(0,d.useImperativeHandle)(p,()=>({goTo:e=>{let t=m.current,n=t?.querySelector(`[data-page="${e}"]`);t&&n&&t.scrollTo({top:n.offsetTop-le,behavior:`smooth`})}}),[]),(0,f.jsx)(`div`,{ref:m,onScroll:()=>{cancelAnimationFrame(w.current),w.current=requestAnimationFrame(()=>{let e=m.current;if(!e)return;let t=e.scrollTop+e.clientHeight*.35,n=1;for(let r of Array.from(e.querySelectorAll(`[data-page]`)))if(r.offsetTop<=t)n=Number(r.dataset.page);else break;C.current.onPage(n)})},className:`absolute inset-0 overflow-auto overscroll-contain`,children:h?(0,f.jsx)(`div`,{className:`relative w-max min-w-full flex flex-col items-center`,style:{gap:le,padding:`${E/2+4}px ${E}px ${E+56}px`},children:_.map((e,t)=>(0,f.jsx)(z,{doc:h,index:t,cssW:e.w*D,cssH:e.h*D,root:x,strokes:i[t]||[],drawing:n,ink:r,onStroke:a},t))}):(0,f.jsx)(`div`,{className:`absolute inset-0 flex items-center justify-center`,children:(0,f.jsx)(o.r,{className:`w-6 h-6 text-accent animate-spin`})})})}),B=[.5,.75,1,1.25,1.5,2,3],V=`h-9 min-w-9 px-2 shrink-0 rounded-xl flex items-center justify-center gap-1.5 text-[12.5px] font-semibold text-foreground/65 hover:text-foreground hover:bg-foreground/[0.06] transition-colors cursor-pointer disabled:opacity-35 disabled:pointer-events-none outline-none focus-visible:ring-2 focus-visible:ring-accent/50`,de=`items-center h-9 shrink-0 rounded-xl border border-[var(--panel-border)] bg-[var(--panel-bg)] px-0.5`,H=`w-8 h-8 rounded-lg flex items-center justify-center text-foreground/60 hover:text-foreground hover:bg-foreground/[0.06] transition-colors cursor-pointer disabled:opacity-30 disabled:pointer-events-none`,U=new Set([`json`,`xml`,`yml`,`yaml`,`log`,`ics`]),W=4e5;function G(e,t=`,`){let n=[],r=[],i=``,a=!1;for(let o=0;o<e.length;o++){let s=e[o];if(a){s===`"`?e[o+1]===`"`?(i+=`"`,o++):a=!1:i+=s;continue}s===`"`?a=!0:s===t?(r.push(i),i=``):s===`
|
|
2
2
|
`||s===`\r`?(s===`\r`&&e[o+1]===`
|
|
3
3
|
`&&o++,r.push(i),n.push(r),r=[],i=``):i+=s}return(i||r.length)&&(r.push(i),n.push(r)),n}var fe=(e,t)=>{let n=e.lastIndexOf(`.`);return`${n>0?e.slice(0,n):e} (with drawing).${t===`pdf`?`pdf`:`png`}`};function K(){return(0,f.jsx)(`div`,{className:`absolute inset-0 flex items-center justify-center`,children:(0,f.jsx)(o.r,{className:`w-6 h-6 text-accent animate-spin`})})}function pe({src:e,alt:t,zoom:n,drawing:r,ink:i,strokes:a,onStroke:o,onSize:s}){let c=(0,d.useRef)(null),l=(0,d.useRef)(null),[p,m]=(0,d.useState)({w:0,h:0}),[h,g]=(0,d.useState)(null),[_,v]=(0,d.useState)(!1);(0,d.useLayoutEffect)(()=>{let e=c.current;if(!e)return;let t=()=>{let t=e.clientWidth<640?24:48;m({w:Math.max(0,e.clientWidth-t),h:Math.max(0,e.clientHeight-t)})};if(t(),typeof ResizeObserver>`u`)return;let n=new ResizeObserver(t);return n.observe(e),()=>n.disconnect()},[]);let y=h&&p.w&&p.h?Math.min(p.w/h.w,p.h/h.h,1):0,b=h?h.w*y*n:0,x=h?h.h*y*n:0,S=!r&&n>1;return(0,f.jsxs)(`div`,{ref:c,className:`absolute inset-0 overflow-auto overscroll-contain flex p-3 sm:p-6 ${S?`cursor-grab active:cursor-grabbing`:``}`,onPointerDown:e=>{!S||e.button>0||!c.current||(l.current={x:e.clientX,y:e.clientY,left:c.current.scrollLeft,top:c.current.scrollTop},e.currentTarget.setPointerCapture(e.pointerId))},onPointerMove:e=>{let t=l.current;!t||!c.current||(c.current.scrollLeft=t.left-(e.clientX-t.x),c.current.scrollTop=t.top-(e.clientY-t.y))},onPointerUp:()=>{l.current=null},onPointerCancel:()=>{l.current=null},children:[_?(0,f.jsx)(`p`,{className:`m-auto text-[13px] font-medium text-foreground/50`,children:`This picture could not be shown.`}):(0,f.jsxs)(`div`,{className:`relative m-auto shrink-0 rounded-lg overflow-hidden shadow-lg`,style:h?{width:b,height:x}:{width:0,height:0},children:[(0,f.jsx)(`img`,{src:e,alt:t,draggable:!1,"data-fbos-own":!0,onLoad:e=>{let t={w:e.currentTarget.naturalWidth||800,h:e.currentTarget.naturalHeight||600};g(t),s(t.w,t.h)},onError:()=>v(!0),className:`absolute inset-0 w-full h-full select-none`}),h&&(0,f.jsx)(u.i,{strokes:a,active:r,ink:i,onStroke:o})]}),!h&&!_&&(0,f.jsx)(K,{})]})}function me({blob:e,name:t}){let[n,r]=(0,d.useState)(null);if((0,d.useEffect)(()=>{let t=!1;return e.text().then(e=>{t||r(e)},()=>{t||r(``)}),()=>{t=!0}},[e]),n===null)return(0,f.jsx)(K,{});let i=l.o(t),a=n.length>W,o=a?n.slice(0,W):n,s=a&&(0,f.jsx)(`p`,{className:`px-4 sm:px-8 pb-8 text-[12px] font-medium text-foreground/45`,children:`The rest of this file is too long to show here — download it to read it all.`});if(i===`csv`||i===`tsv`){let[e,...t]=G(o,i===`tsv`?` `:`,`).slice(0,2e3);return(0,f.jsxs)(`div`,{className:`absolute inset-0 overflow-auto`,children:[(0,f.jsxs)(`table`,{className:`min-w-full text-[12.5px] border-separate border-spacing-0`,children:[e&&(0,f.jsx)(`thead`,{className:`sticky top-0 z-10`,children:(0,f.jsx)(`tr`,{children:e.map((e,t)=>(0,f.jsx)(`th`,{className:`px-3 py-2 text-left font-bold text-foreground bg-[var(--panel-bg)] backdrop-blur-md border-b border-[var(--panel-border)] whitespace-nowrap`,children:e},t))})}),(0,f.jsx)(`tbody`,{children:t.map((e,t)=>(0,f.jsx)(`tr`,{className:`hover:bg-foreground/[0.03]`,children:e.map((e,t)=>(0,f.jsx)(`td`,{className:`px-3 py-1.5 text-foreground/80 border-b border-[var(--panel-border)]/50 whitespace-nowrap`,children:e},t))},t))})]}),s]})}let c=o;if(i===`json`)try{c=JSON.stringify(JSON.parse(o),null,2)}catch{}return(0,f.jsxs)(`div`,{className:`absolute inset-0 overflow-auto`,children:[(0,f.jsx)(`pre`,{className:`m-0 mx-auto max-w-4xl p-4 sm:p-8 whitespace-pre-wrap break-words text-foreground/85 leading-relaxed ${U.has(i)?`font-mono text-[12.5px]`:`font-sans text-[14px]`}`,children:c}),s]})}function he({src:e,type:t,title:n}){let r=(0,d.useRef)(null),[a,o]=(0,d.useState)(16/9),[s,c]=(0,d.useState)({w:0,h:0});(0,d.useLayoutEffect)(()=>{let e=r.current;if(!e)return;let t=()=>c({w:e.clientWidth,h:e.clientHeight});if(t(),typeof ResizeObserver>`u`)return;let n=new ResizeObserver(t);return n.observe(e),()=>n.disconnect()},[]);let l=s.w&&s.h?Math.min(s.w,s.h*a):0;return(0,f.jsx)(`div`,{className:`absolute inset-0 p-3 sm:p-6`,children:(0,f.jsx)(`div`,{ref:r,className:`w-full h-full flex items-center justify-center`,children:(0,f.jsx)(`div`,{style:l?{width:l}:{width:`100%`},children:(0,f.jsx)(i.t,{src:e,type:t,title:n,aspect:String(a),onRatio:o})})})})}function ge({kind:e,title:n,src:r,onDownload:i,busy:a,canDownload:s}){let c=l.o(n)||l.o(r),u=e===`link`?`This is a link to another website.`:e===`document`?`${c?`A ${c.toUpperCase()} file`:`This file`} opens in its own app — download it to read it.`:`This kind of file cannot be shown here. Download it to open it.`;return(0,f.jsx)(`div`,{className:`absolute inset-0 overflow-auto flex p-6`,children:(0,f.jsxs)(`div`,{className:`m-auto flex flex-col items-center text-center max-w-sm gap-3`,children:[(0,f.jsx)(`span`,{className:`${L} w-16 h-16 rounded-2xl`,children:(0,f.jsx)(I,{kind:e,name:n||r,className:`w-7 h-7`})}),(0,f.jsx)(`p`,{className:`text-[16px] font-bold text-foreground break-all`,children:n}),(0,f.jsx)(`p`,{className:`text-[13px] text-foreground/55 leading-relaxed`,children:u}),e===`link`?(0,f.jsxs)(`a`,{href:r,target:`_blank`,rel:`noopener noreferrer`,className:`btn-primary inline-flex items-center gap-2 px-5 py-2.5 rounded-xl text-[13px] font-bold mt-1`,children:[(0,f.jsx)(t.Ot,{className:`w-4 h-4`}),` Open it`]}):s?(0,f.jsxs)(`button`,{type:`button`,onClick:i,disabled:a,className:`btn-primary inline-flex items-center gap-2 px-5 py-2.5 rounded-xl text-[13px] font-bold mt-1 cursor-pointer`,children:[a?(0,f.jsx)(o.r,{className:`w-4 h-4 animate-spin`}):(0,f.jsx)(h,{className:`w-4 h-4`}),` Download`]}):null]})})}function _e({src:e,name:n,type:a,height:p,className:m=``,draw:g=!0,download:v=!0,actions:y,onClose:b}){let x=l.u(e,a),S=n||l.s(e),C=x===`pdf`||x===`text`,w=(0,d.useRef)(null),T=(0,d.useRef)(null),E=(0,d.useRef)(null),[D,O]=(0,d.useState)(null),[ee,te]=(0,d.useState)(!1),[k,re]=(0,d.useState)(0),[A,j]=(0,d.useState)(1),[M,N]=(0,d.useState)(`1`),[P,ce]=(0,d.useState)(null),[F,le]=(0,d.useState)(null),[R,z]=(0,d.useState)(1),[U,W]=(0,d.useState)(!1),[G,_e]=(0,d.useState)(`black`),[q,J]=(0,d.useState)({}),[ve,ye]=(0,d.useState)([]),[be,xe]=(0,d.useState)(!1),[Y,Se]=(0,d.useState)(!1);(0,d.useEffect)(()=>{if(!C)return;let t=!1;return u.t(e).then(e=>{t||O(e)},()=>{t||te(!0)}),()=>{t=!0}},[e,C]),(0,d.useEffect)(()=>{let e=()=>Se(!!w.current&&document.fullscreenElement===w.current);return document.addEventListener(`fullscreenchange`,e),()=>document.removeEventListener(`fullscreenchange`,e)},[]);let Ce=x===`pdf`&&!!D&&!ee&&!P,X=Ce&&k>0||x===`image`&&!!F,we=g&&X,Z=ve.length>0,Q=(0,d.useCallback)(e=>{z(t=>{let n=B.findIndex(e=>e>=t-.001);return B[Math.min(B.length-1,Math.max(0,(n<0?2:n)+e))]??t})},[]);(0,d.useEffect)(()=>{let e=T.current;if(!e||!X)return;let t=e=>{!e.ctrlKey&&!e.metaKey||(e.preventDefault(),Q(e.deltaY<0?1:-1))};return e.addEventListener(`wheel`,t,{passive:!1}),()=>e.removeEventListener(`wheel`,t)},[X,Q]);let Te=(e,t)=>{J(n=>({...n,[e]:[...n[e]||[],t]})),ye(t=>[...t,e])},Ee=()=>{let e=ve[ve.length-1];e!==void 0&&(J(t=>({...t,[e]:(t[e]||[]).slice(0,-1)})),ye(e=>e.slice(0,-1)))},De=()=>{J({}),ye([])},$=e=>{let t=Math.min(k,Math.max(1,Math.round(e)||1));j(t),N(String(t)),E.current?.goTo(t)},Oe=async()=>{xe(!0);try{if(Z&&(x===`pdf`||x===`image`)){let{bakePdf:t,bakeImage:n}=await Promise.resolve().then(()=>require(`./bake-CcvYygDF.cjs`));u.n(x===`pdf`&&D?await t(D,q):await n(e,q[0]||[]),fe(S,x))}else x===`video`||x===`audio`||x===`link`?window.open(e,`_blank`,`noopener,noreferrer`):u.n(D||await u.t(e),S)}catch{window.open(e,`_blank`,`noopener,noreferrer`)}xe(!1)},ke=()=>{document.fullscreenElement?document.exitFullscreen().catch(()=>{}):w.current?.requestFullscreen?.().catch(()=>{})},Ae=e=>{if(!e.target.closest(`input, textarea, [role="slider"], .fbos-video`)){if(e.key===`Escape`&&U){e.preventDefault(),W(!1);return}!X||e.metaKey||e.ctrlKey||(e.key===`+`||e.key===`=`?(e.preventDefault(),Q(1)):e.key===`-`?(e.preventDefault(),Q(-1)):e.key===`0`&&(e.preventDefault(),z(1)))}},je=[l.t[x],k?`${k} page${k===1?``:`s`}`:``,F?`${F.w} × ${F.h}`:``].filter(Boolean).join(` · `),Me;return Me=x===`image`?(0,f.jsx)(pe,{src:e,alt:S,zoom:R,drawing:U,ink:G,strokes:q[0]||[],onStroke:e=>Te(0,e),onSize:(e,t)=>le({w:e,h:t})}):x===`video`||x===`audio`?x===`audio`?(0,f.jsx)(`div`,{className:`absolute inset-0 flex p-6`,children:(0,f.jsx)(`div`,{className:`m-auto w-full max-w-lg`,children:(0,f.jsx)(i.t,{src:e,type:a,title:S})})}):(0,f.jsx)(he,{src:e,type:a,title:S}):C&&ee?(0,f.jsx)(`iframe`,{src:e,title:S,className:`absolute inset-0 w-full h-full border-0 bg-white`}):x===`pdf`&&P?(0,f.jsx)(`div`,{className:`absolute inset-0 flex p-6`,children:(0,f.jsxs)(`div`,{className:`m-auto flex flex-col items-center text-center gap-3 max-w-sm`,children:[(0,f.jsx)(`span`,{className:`${L} w-14 h-14 rounded-2xl`,children:P===`locked`?(0,f.jsx)(s.t,{className:`w-6 h-6`}):(0,f.jsx)(I,{kind:`pdf`,className:`w-6 h-6`})}),(0,f.jsx)(`p`,{className:`text-[14px] font-semibold text-foreground`,children:P===`locked`?`This PDF is locked with a password.`:`This PDF could not be opened here.`}),(0,f.jsx)(`p`,{className:`text-[13px] text-foreground/55`,children:`Download it to open it on your own device.`})]})}):x===`pdf`?D?(0,f.jsx)(ue,{ref:E,data:D,zoom:R,drawing:U,ink:G,strokes:q,onStroke:Te,onReady:e=>re(e),onPage:e=>{j(e),N(String(e))},onFail:ce}):(0,f.jsx)(K,{}):x===`text`?D?(0,f.jsx)(me,{blob:D,name:l.o(S)?S:l.s(e)}):(0,f.jsx)(K,{}):(0,f.jsx)(ge,{kind:x,title:S,src:e,onDownload:Oe,busy:be,canDownload:v}),(0,f.jsxs)(`div`,{ref:w,tabIndex:-1,onKeyDown:Ae,className:`fbos-file-viewer relative flex flex-col w-full overflow-hidden bg-background border border-[var(--panel-border)] shadow-2xl outline-none ${Y?``:`rounded-2xl sm:rounded-3xl`} ${m}`,style:{height:Y?`100vh`:p??`min(80vh, 760px)`},children:[(0,f.jsx)(`div`,{"aria-hidden":!0,className:`pointer-events-none absolute top-0 inset-x-0 h-[2px] z-20 bg-gradient-to-r from-transparent via-accent/60 to-transparent`}),(0,f.jsxs)(`div`,{className:`relative z-10 shrink-0 flex items-center gap-1.5 sm:gap-2 h-14 px-2.5 sm:px-3.5 border-b border-[var(--panel-border)]/60 bg-background/85 backdrop-blur-md`,children:[(0,f.jsx)(`span`,{className:`max-sm:hidden shrink-0`,children:(0,f.jsx)(`span`,{className:`${L} w-9 h-9`,children:(0,f.jsx)(I,{kind:x,name:S})})}),(0,f.jsxs)(`div`,{className:`flex flex-col min-w-0 flex-1 mr-1`,children:[(0,f.jsx)(`span`,{className:`text-[13.5px] sm:text-[14px] font-bold text-foreground truncate leading-tight`,title:S,children:S}),(0,f.jsx)(`span`,{className:`text-[11px] sm:text-[11.5px] font-medium text-foreground/45 truncate leading-tight mt-0.5`,children:je})]}),Ce&&k>1&&(0,f.jsxs)(`div`,{className:`${de} inline-flex`,children:[(0,f.jsx)(`span`,{className:`max-sm:hidden`,children:(0,f.jsx)(`button`,{type:`button`,className:H,onClick:()=>$(A-1),disabled:A<=1,"aria-label":`Previous page`,children:(0,f.jsx)(r.t,{className:`w-4 h-4`})})}),(0,f.jsxs)(`span`,{className:`flex items-center gap-1 px-1.5 text-[12.5px] font-semibold text-foreground/70 tabular-nums`,children:[(0,f.jsx)(`input`,{value:M,onChange:e=>N(e.target.value.replace(/\D/g,``)),onBlur:()=>$(Number(M)),onKeyDown:e=>{e.key===`Enter`&&$(Number(M))},"aria-label":`Page`,inputMode:`numeric`,className:`no-glow w-7 h-7 text-center rounded-md bg-transparent outline-none focus:bg-foreground/[0.06] text-foreground`}),(0,f.jsxs)(`span`,{className:`text-foreground/40`,children:[`/ `,k]})]}),(0,f.jsx)(`span`,{className:`max-sm:hidden`,children:(0,f.jsx)(`button`,{type:`button`,className:H,onClick:()=>$(A+1),disabled:A>=k,"aria-label":`Next page`,children:(0,f.jsx)(t.kt,{className:`w-4 h-4`})})})]}),X&&(0,f.jsxs)(`div`,{className:`${de} max-sm:hidden sm:inline-flex`,children:[(0,f.jsx)(`button`,{type:`button`,className:H,onClick:()=>Q(-1),disabled:R<=B[0],"aria-label":`Zoom out`,children:(0,f.jsx)(oe,{className:`w-4 h-4`})}),(0,f.jsxs)(`button`,{type:`button`,onClick:()=>z(1),title:`Fit to the window`,className:`min-w-[48px] h-8 px-1 rounded-lg text-[12px] font-semibold text-foreground/70 tabular-nums hover:bg-foreground/[0.06] cursor-pointer`,children:[Math.round(R*100),`%`]}),(0,f.jsx)(`button`,{type:`button`,className:H,onClick:()=>Q(1),disabled:R>=B[B.length-1],"aria-label":`Zoom in`,children:(0,f.jsx)(se,{className:`w-4 h-4`})})]}),we&&(0,f.jsxs)(`button`,{type:`button`,onClick:()=>W(e=>!e),"aria-pressed":U,title:U?`Stop drawing`:`Draw on it`,className:`${V} ${U?`!text-accent bg-accent/10 hover:bg-accent/15`:``}`,children:[(0,f.jsx)(ne,{className:`w-4 h-4`}),(0,f.jsx)(`span`,{className:`max-md:hidden`,children:`Draw`})]}),v&&x!==`link`&&(0,f.jsxs)(`button`,{type:`button`,onClick:Oe,disabled:be,title:Z?`Download with your drawing`:`Download`,className:V,children:[be?(0,f.jsx)(o.r,{className:`w-4 h-4 animate-spin`}):(0,f.jsx)(h,{className:`w-4 h-4`}),(0,f.jsx)(`span`,{className:`max-md:hidden`,children:`Download`})]}),!b&&typeof document<`u`&&document.fullscreenEnabled&&(0,f.jsx)(`span`,{className:`max-sm:hidden`,children:(0,f.jsx)(`button`,{type:`button`,onClick:ke,"aria-label":Y?`Leave full screen`:`Full screen`,className:V,children:Y?(0,f.jsx)(ie,{className:`w-4 h-4`}):(0,f.jsx)(_,{className:`w-4 h-4`})})}),y,b&&(0,f.jsxs)(f.Fragment,{children:[(0,f.jsx)(`span`,{"aria-hidden":!0,className:`w-px h-6 bg-[var(--panel-border)] mx-0.5`}),(0,f.jsx)(`button`,{type:`button`,onClick:b,"aria-label":`Close`,className:V,children:(0,f.jsx)(o.t,{className:`w-[18px] h-[18px]`})})]})]}),(0,f.jsxs)(`div`,{ref:T,className:`relative flex-1 min-h-0 bg-foreground/[0.035]`,children:[Me,U&&(0,f.jsxs)(`div`,{className:`absolute bottom-4 left-1/2 -translate-x-1/2 z-20 flex items-center gap-0.5 p-1.5 rounded-full border border-[var(--panel-border)] bg-background shadow-2xl dark:bg-[color-mix(in_srgb,var(--accent-color)_9%,var(--bg-color))] dark:border-accent/30`,children:[(0,f.jsx)(`span`,{"aria-hidden":!0,className:`pointer-events-none absolute top-0 inset-x-4 h-px bg-gradient-to-r from-transparent via-accent/60 to-transparent`}),u.a.map(e=>(0,f.jsx)(`button`,{type:`button`,onClick:()=>_e(e.id),"aria-label":e.label,"aria-pressed":G===e.id,title:e.label,className:`w-8 h-8 rounded-full flex items-center justify-center cursor-pointer transition-colors ${G===e.id?`bg-foreground/[0.08]`:`hover:bg-foreground/5`}`,children:(0,f.jsx)(`span`,{className:`block ${e.id===`marker`?`w-5 h-2.5 rounded-sm`:`w-4 h-4 rounded-full`} border border-foreground/25 ring-2 ring-offset-2 ring-offset-background ${G===e.id?`ring-accent`:`ring-transparent`}`,style:{background:e.color,opacity:e.id===`marker`?.85:1}})},e.id)),(0,f.jsx)(`span`,{"aria-hidden":!0,className:`w-px h-5 bg-[var(--panel-border)] mx-1`}),(0,f.jsx)(`button`,{type:`button`,onClick:Ee,disabled:!Z,"aria-label":`Undo`,title:`Undo`,className:`${V} !h-8 !min-w-8 !rounded-full`,children:(0,f.jsx)(ae,{className:`w-4 h-4`})}),(0,f.jsx)(`button`,{type:`button`,onClick:De,disabled:!Z,"aria-label":`Clear the drawing`,title:`Clear the drawing`,className:`${V} !h-8 !min-w-8 !rounded-full hover:!text-red-500`,children:(0,f.jsx)(c.t,{className:`w-4 h-4`})}),(0,f.jsx)(`button`,{type:`button`,onClick:()=>W(!1),className:`btn-primary ml-1 h-8 px-3.5 rounded-full text-[12.5px] font-bold cursor-pointer`,children:`Done`})]})]})]})}function q(e){return(0,f.jsx)(_e,{...e},e.src)}function J({open:e,onClose:n,...r}){return(0,d.useEffect)(()=>{if(!e)return;let t=e=>{e.key===`Escape`&&!e.defaultPrevented&&n()};window.addEventListener(`keydown`,t);let r=document.body.style.overflow;return document.body.style.overflow=`hidden`,()=>{window.removeEventListener(`keydown`,t),document.body.style.overflow=r}},[e,n]),typeof document>`u`?null:(0,p.createPortal)((0,f.jsx)(t.rt,{children:e&&r.src&&(0,f.jsxs)(`div`,{role:`dialog`,"aria-modal":`true`,"aria-label":r.name||l.s(r.src),className:`fixed inset-0 z-[9999] flex items-center justify-center p-2 sm:p-4 md:p-8`,children:[(0,f.jsx)(t.nt.div,{onClick:n,initial:{opacity:0},animate:{opacity:1},exit:{opacity:0},className:`absolute inset-0 bg-background/80 backdrop-blur-xl cursor-pointer`}),(0,f.jsx)(t.nt.div,{initial:{opacity:0,scale:.97,y:8},animate:{opacity:1,scale:1,y:0},exit:{opacity:0,scale:.97,y:8},transition:{duration:.18},className:`relative z-10 w-full max-w-6xl h-full max-h-[min(92vh,1000px)]`,children:(0,f.jsx)(q,{...r,onClose:n,height:`100%`})})]})}),document.body)}Object.defineProperty(exports,`a`,{enumerable:!0,get:function(){return se}}),Object.defineProperty(exports,`c`,{enumerable:!0,get:function(){return D}}),Object.defineProperty(exports,`d`,{enumerable:!0,get:function(){return h}}),Object.defineProperty(exports,`i`,{enumerable:!0,get:function(){return I}}),Object.defineProperty(exports,`l`,{enumerable:!0,get:function(){return T}}),Object.defineProperty(exports,`n`,{enumerable:!0,get:function(){return q}}),Object.defineProperty(exports,`o`,{enumerable:!0,get:function(){return oe}}),Object.defineProperty(exports,`r`,{enumerable:!0,get:function(){return L}}),Object.defineProperty(exports,`s`,{enumerable:!0,get:function(){return ne}}),Object.defineProperty(exports,`t`,{enumerable:!0,get:function(){return J}}),Object.defineProperty(exports,`u`,{enumerable:!0,get:function(){return C}});
|
|
@@ -1,8 +1,8 @@
|
|
|
1
1
|
import { o as e, s as t, t as n, u as r } from "./mediaKind-BtaMpGy8.js";
|
|
2
|
-
import { Ot as i, kt as a, nt as o, rt as s } from "./TimeZoneField-
|
|
2
|
+
import { Ot as i, kt as a, nt as o, rt as s } from "./TimeZoneField-oIMwb5_X.js";
|
|
3
3
|
import { n as c } from "./chevron-down--LwXEv9w.js";
|
|
4
4
|
import { t as l } from "./chevron-left-By8iIdje.js";
|
|
5
|
-
import { i as u, t as d } from "./VideoPlayer-
|
|
5
|
+
import { i as u, t as d } from "./VideoPlayer-QI1Jc3bS.js";
|
|
6
6
|
import { t as f } from "./link-2-CtDUJiNU.js";
|
|
7
7
|
import { r as p, t as m } from "./x-hax8aKt8.js";
|
|
8
8
|
import { t as h } from "./lock-CeHdSreq.js";
|
|
@@ -1 +1 @@
|
|
|
1
|
-
const e=require(`./chunk-CiTBaPhY.cjs`),t=require(`./TimeZoneField-
|
|
1
|
+
const e=require(`./chunk-CiTBaPhY.cjs`),t=require(`./TimeZoneField-Ckn1pKAL.cjs`),n=require(`./chevron-down-lyDK1rfL.cjs`),r=require(`./x-Ci8c5p6T.cjs`);let i=require(`react`);i=e.a(i,1);let a=require(`react/jsx-runtime`);var o={name:`info`,size:24,node:[[`circle`,{cx:`12`,cy:`12`,r:`10`,key:`1mglay`}],[`path`,{d:`M12 16v-4`,key:`1dtifu`}],[`path`,{d:`M12 8h.01`,key:`e9boi3`}]]};o.node;var s=n.n(o),c={error:{Icon:r.t,tint:`bg-red-500/12 text-red-500`},done:{Icon:t.At,tint:`bg-emerald-500/12 text-emerald-500`},note:{Icon:s,tint:`bg-amber-500/12 text-amber-600 dark:text-amber-400`}};function l({tone:e=`error`,children:n,className:r=``}){let{Icon:i,tint:o}=c[e];return(0,a.jsxs)(t.nt.div,{role:e===`error`?`alert`:`status`,initial:{opacity:0,y:-4},animate:{opacity:1,y:0},transition:{duration:.25,ease:`easeOut`},className:`flex items-start gap-2.5 rounded-2xl border border-[var(--panel-border)] bg-foreground/[0.035] px-3.5 py-3 text-left ${r}`,children:[(0,a.jsx)(`span`,{className:`mt-[1px] w-[18px] h-[18px] rounded-full flex items-center justify-center shrink-0 ${o}`,children:(0,a.jsx)(i,{className:`w-[11px] h-[11px]`,strokeWidth:3})}),(0,a.jsx)(`div`,{className:`min-w-0 text-[13px] sm:text-[13.5px] font-medium text-foreground/75 leading-[1.55] [&_a]:text-accent [&_a]:font-bold [&_a]:no-underline hover:[&_a]:underline`,children:n})]})}Object.defineProperty(exports,`t`,{enumerable:!0,get:function(){return l}});
|
|
@@ -1 +1 @@
|
|
|
1
|
-
require(`./chunk-CiTBaPhY.cjs`);const e=require(`./forms-CmNeTETW.cjs`),t=require(`./PageTitle-BWmE74WQ.cjs`),n=require(`./TimeZoneField-zR8N2Fj0.cjs`),r=require(`./DashboardNav-DOl9gJuu.cjs`),i=require(`./schedule-BAea6q8_.cjs`),a=require(`./chevron-down-lyDK1rfL.cjs`),o=require(`./scheduleData-BpkfnBjP.cjs`),s=require(`./ContactPopup-D5Hh0bfE.cjs`),c=require(`./SupportBar-CNVXSYwT.cjs`),l=require(`./eye-DU2g57PD.cjs`),u=require(`./VideoPlayer-BVOkrJBR.cjs`),d=require(`./x-Ci8c5p6T.cjs`),f=require(`./plus-zsWFCu4F.cjs`),ee=require(`./send-CWJXtO05.cjs`),p=require(`./trash-D-CpYHCs.cjs`),te=require(`./ConfirmModal-CQ73WYUg.cjs`),ne=require(`./AccessNotice-BClqr7A9.cjs`),re=require(`./useIsPhone-CoiQVcCo.cjs`),m=require(`./SchedulePicker-CwKId9JF.cjs`);let h=require(`react`),g=require(`react/jsx-runtime`),_=require(`firebase/firestore`),ie=require(`react-router-dom`);var v={name:`list-checks`,size:24,node:[[`path`,{d:`M13 5h8`,key:`a7qcls`}],[`path`,{d:`M13 12h8`,key:`h98zly`}],[`path`,{d:`M13 19h8`,key:`c3s6r1`}],[`path`,{d:`m3 17 2 2 4-4`,key:`1jhpwq`}],[`path`,{d:`m3 7 2 2 4-4`,key:`1obspn`}]]};v.node;var ae=a.n(v),y={name:`type`,size:24,node:[[`path`,{d:`M12 4v16`,key:`1654pz`}],[`path`,{d:`M4 7V5a1 1 0 0 1 1-1h14a1 1 0 0 1 1 1v2`,key:`e0r10z`}],[`path`,{d:`M9 20h6`,key:`s66wpe`}]]};y.node;var oe=a.n(y),b=e=>String(e&&typeof e==`object`?e.label??e.value??``:e??``),x=(e,t)=>e&&typeof e==`object`?{...e,label:t}:t,S=new Set([`contact`,`support`]),C=[{value:`text`,label:`Short text`},{value:`textarea`,label:`Long text`},{value:`email`,label:`Email`},{value:`tel`,label:`Phone`},{value:`address`,label:`Address`},{value:`number`,label:`Number`},{value:`date`,label:`Date`},{value:`currency`,label:`Money`},{value:`checkbox`,label:`Yes-no`},{value:`select`,label:`Choose one`},{value:`file`,label:`File upload`}],w={value:`schedule`,label:`A time to book`},T={age:`Age`},E=e=>[...C,w].find(t=>t.value===e)?.label||T[e||``]||`Short text`,se=(e,t=!1)=>{let n=t||e===`schedule`?[...C,w]:C;return n.some(t=>t.value===e)||!e?n:[...n,{value:e,label:E(e)}]},ce=(e,t)=>{let n=i.en(e).map(e=>{let n=t.find(t=>t.id===e);return n?i.Vt(n):``}).filter(Boolean);return n.length?n.join(`, `):`nothing picked yet`},le={public:`Anyone`,private:`Signed-in users`},D=e=>(e||``).toLowerCase().trim().replace(/[^a-z0-9]+/g,`_`).replace(/^_+|_+$/g,``),O=(e,t)=>{if(!t.includes(e))return e;let n=2;for(;t.includes(`${e}_${n}`);)n++;return`${e}_${n}`},ue=(e,t,n)=>{if(!(!e.name||e.name===D(e.label||``)))return e.name;let r=D(t);return r?O(r,n.filter(t=>t!==e).map(e=>e.name)):``},k=()=>({name:``,type:`text`,label:``,placeholder:``,required:!1}),de={firstForm:`Forms are made with their pages — add a page on the Pages screen and pick A new form made for this page. Every form then shows up here.`};function A({choices:e,onChange:t}){return(0,g.jsx)(n.i,{label:`Choices`,hint:`The options people pick from.`,children:(0,g.jsxs)(`div`,{className:`flex flex-col gap-2`,children:[e.length===0&&(0,g.jsx)(`span`,{className:`text-[12px] text-foreground/40 font-medium px-1`,children:`No choices yet — add the first one.`}),e.map((r,i)=>(0,g.jsxs)(`div`,{className:`flex items-center gap-2`,children:[(0,g.jsx)(`input`,{type:`text`,value:b(r),"aria-label":`Choice ${i+1}`,placeholder:`e.g. Under 1,000`,onChange:n=>t(e.map((e,t)=>t===i?x(e,n.target.value):e)),className:n.c}),(0,g.jsx)(n.o,{icon:d.t,tone:`danger`,title:`Remove choice ${i+1}`,onClick:()=>t(e.filter((e,t)=>t!==i)),children:`Remove`})]},i)),(0,g.jsx)(`div`,{children:(0,g.jsx)(n.o,{icon:f.t,onClick:()=>t([...e,``]),children:`Add choice`})})]})})}function j(){let{userRole:v}=n.Ft(),y=(0,ie.useNavigate)(),b=n.mi(),x=()=>{let t=(typeof window<`u`?window.__FBOS_FORMS__:null)||{},n={...e.t,contact:b?.defaultConfigs?.contactForm||e.t.contact,support:b?.defaultConfigs?.supportForm||e.t.support};for(let[e,r]of Object.entries(t))n[e]=r;return n},[C,w]=(0,h.useState)(()=>{try{if(typeof window<`u`){let e=localStorage.getItem(`fbos_swr_forms`);if(e)return JSON.parse(e)}let t={...e.t,contact:b?.defaultConfigs?.contactForm||e.t.contact,support:b?.defaultConfigs?.supportForm||e.t.support},n=(typeof window<`u`?window.__FBOS_FORMS__:null)||{};for(let[e,r]of Object.entries(n))t[e]=r;let r={};for(let[e,n]of Object.entries(t)){let t=JSON.parse(JSON.stringify(n));t._uiKey=Math.random().toString(36).substring(7),r[e]=t}return r}catch{return{}}}),[T,E]=(0,h.useState)(()=>!(typeof window<`u`&&localStorage.getItem(`fbos_swr_forms`))),[D,O]=(0,h.useState)({}),[j,M]=(0,h.useState)(null),[N,fe]=(0,h.useState)(new Set),P=re.n(),{schedules:F}=o.y(),[I,L]=(0,h.useState)({}),R=(0,h.useRef)(null),[z,B]=(0,h.useState)(null),[pe,V]=(0,h.useState)(!1),[H,U]=(0,h.useState)({}),W=(0,h.useRef)({}),G=(e,t)=>{W.current={...W.current,[e]:t},U(W.current)};(0,h.useEffect)(()=>{K()},[]);let K=async()=>{try{E(!0);let e=await(0,_.getDocs)((0,_.collection)(n.ui,`sys_forms`)),t={},r=new Set;e.forEach(e=>{if(e.id!==`pubForm`&&e.id!==`userForm`){let n=e.data();n._uiKey=C[e.id]?._uiKey||n._uiKey||Math.random().toString(36).substring(7),t[e.id]=n,r.add(e.id)}}),fe(r);for(let t of[`pubForm`,`userForm`])e.docs.some(e=>e.id===t)&&(0,_.deleteDoc)((0,_.doc)(n.ui,`sys_forms`,t)).catch(()=>{});let i=x();for(let[e,n]of Object.entries(i))if(!t[e]){let r={...n};r._uiKey=C[e]?._uiKey||Math.random().toString(36).substring(7),t[e]=r}else if(t[e]._uiKey=C[e]?._uiKey||t[e]._uiKey||Math.random().toString(36).substring(7),!t[e].fields||t[e].fields.length===0){let n=i[e];t[e].fields=n.fields||[]}let a={};for(let e of Object.keys(i))t[e]&&(a[e]=t[e]);for(let e of Object.keys(t))a[e]||(a[e]=t[e]);let o=window.location.pathname.split(`/forms/`)[1]?.split(`/`)[0];o&&a[o]&&L(e=>({...e,[o]:!0}));let s=(e,t)=>{let n=e=>{if(!e)return``;let{_uiKey:t,...n}=e;return JSON.stringify(n)};return!!e&&!!t&&n(e)===n(t)},c={};for(let[e,t]of Object.entries(W.current))s(C[e],a[e])&&(c[e]=t);W.current=c,U(c),w(a);try{localStorage.setItem(`fbos_swr_forms`,JSON.stringify(a))}catch{}}catch(e){console.error(`Failed to load forms:`,e)}finally{E(!1)}},q=async(e,t)=>{let r={...t};C[e]?._uiKey&&(r._uiKey=C[e]._uiKey),delete r.submitPage,e===`contact`?(r.systemName=`contact`,r.formType=`public`):e===`support`&&(r.systemName=`support`,r.formType=`private`);let i=r.systemName||e;if(i!==e&&i.trim()!==``){w(t=>{let n={};for(let a of Object.keys(t))a===e?n[i]=r:n[a]=t[a];return n}),I[e]&&L(t=>{let n={};for(let r of Object.keys(t))r===e?n[i]=t[r]:n[r]=t[r];return n}),O(e=>({...e,[i]:!0}));try{await(0,_.setDoc)((0,_.doc)(n.ui,`sys_forms`,i),r),await(0,_.deleteDoc)((0,_.doc)(n.ui,`sys_forms`,e)),localStorage.setItem(`fbos_custom_form_${i}`,`true`),localStorage.removeItem(`fbos_custom_form_${e}`),localStorage.setItem(`fbos_form_${i}`,JSON.stringify(r)),localStorage.removeItem(`fbos_form_${e}`)}catch(e){console.error(`Failed to migrate form map ID:`,e)}finally{setTimeout(()=>{O(e=>({...e,[i]:!1}))},500)}}else{w(t=>({...t,[e]:r})),O(t=>({...t,[e]:!0}));try{await(0,_.setDoc)((0,_.doc)(n.ui,`sys_forms`,e),r),localStorage.setItem(`fbos_custom_form_${e}`,`true`),localStorage.setItem(`fbos_form_${e}`,JSON.stringify(r))}catch(e){console.error(`Failed to save form:`,e)}finally{setTimeout(()=>{O(t=>({...t,[e]:!1}))},500)}}},J=(e,t,n)=>G(e,{...t,...n}),Y=(e,t,n)=>{let r={...t,...n};G(e,r),q(e,r)},X=e=>{let t=W.current[e];t&&q(e,t)},Z=(e,t,n)=>Y(e,t,{fields:n}),me=async e=>{if(!S.has(e)){V(!0);try{await(0,_.deleteDoc)((0,_.doc)(n.ui,`sys_forms`,e)),w(t=>{let n={...t};return delete n[e],n}),y(`/forms`)}catch(e){console.error(`Failed to delete form`,e)}finally{V(!1),B(null)}}},he=async e=>{if(!N.has(e)){B(null);return}V(!0);let t=(typeof window<`u`?window.__FBOS_FORMS__:null)||{},r=S.has(e)||!!t[e]||!!b?.defaultConfigs?.[e]||!!b?.defaultConfigs?.[`${e}Form`];try{r?(O(t=>({...t,[e]:!0})),await(0,_.deleteDoc)((0,_.doc)(n.ui,`sys_forms`,e)),localStorage.removeItem(`fbos_form_${e}`),localStorage.removeItem(`fbos_custom_form_${e}`),await K(),setTimeout(()=>O(t=>({...t,[e]:!1})),500)):await q(e,x().contact||x().support)}catch(e){console.error(`Reset failed:`,e)}finally{V(!1),B(null)}};if(v!==`admin`)return(0,g.jsx)(`main`,{className:`flex-1 w-full max-w-7xl mx-auto p-4 pt-2 md:p-8 md:pt-4 z-10 flex flex-col min-h-screen`,children:(0,g.jsx)(ne.i,{})});let Q=e=>{L(t=>{let n={...t,[e]:!t[e]};if(n[e])window.history.replaceState(null,``,`/forms/${e}`);else{let e=Object.keys(n).filter(e=>n[e]);e.length>0?window.history.replaceState(null,``,`/forms/${e[0]}`):window.history.replaceState(null,``,`/forms`)}return n})},$=Object.keys(I).find(e=>I[e]),ge=(e,t,r,a,o)=>{let s=(n,r)=>{let i=o.map((e,t)=>t===a?{...e,...n}:e);r?Z(e,t,i):J(e,t,{fields:i})},c=n=>{let i=n===`schedule`?{type:n,look:`compact`,schedules:[]}:n===`select`?{type:n,options:r.options||[]}:{type:n};Z(e,t,o.map((e,t)=>{if(t!==a)return e;let r={...e,...i};return n!==`schedule`&&(delete r.members,delete r.schedules,delete r.look,delete r.together),r}))},l=n=>{let r=a+n;if(r<0||r>=o.length)return;let i=[...o];[i[a],i[r]]=[i[r],i[a]],Z(e,t,i)},u=r.type!==`checkbox`&&r.type!==`select`&&r.type!==`date`&&r.type!==`file`&&r.type!==`schedule`;return(0,g.jsxs)(`div`,{className:`rounded-2xl border border-[var(--panel-border)] bg-[var(--panel-bg)] p-4 sm:p-5 flex flex-col gap-5`,children:[(0,g.jsxs)(`div`,{className:`flex items-center justify-between gap-2 flex-wrap`,children:[(0,g.jsxs)(`span`,{className:`text-[13px] font-bold text-foreground`,children:[`Question `,a+1,r.type===`schedule`&&(0,g.jsxs)(`span`,{className:`font-medium text-foreground/50`,children:[` · A time to book — `,ce(r,F)]})]}),(0,g.jsxs)(`div`,{className:`flex items-center gap-1.5`,children:[(0,g.jsx)(n.o,{icon:n.jt,disabled:a===0,title:`Move up`,onClick:()=>l(-1),children:`Up`}),(0,g.jsx)(n.o,{icon:n.Mt,disabled:a===o.length-1,title:`Move down`,onClick:()=>l(1),children:`Down`}),(0,g.jsx)(n.o,{icon:p.t,tone:`danger`,title:`Remove question ${a+1}`,onClick:()=>Z(e,t,o.filter((e,t)=>t!==a)),children:`Remove`})]})]}),(0,g.jsx)(n.b,{label:`Question`,hint:`What you are asking for, in the words the person will read.`,value:r.label||``,placeholder:`e.g. What is your budget?`,onChange:e=>s({label:e,name:ue(r,e,o)},!1),onBlur:()=>X(e)}),(0,g.jsx)(n.g,{label:`Kind of answer`,hint:`Sets the box people type into and what counts as a valid answer.`,value:r.type||`text`,options:se(r.type,!1),allowEmpty:!1,onChange:c}),(0,g.jsx)(n.S,{label:`Required`,hint:`On means the form cannot be sent until this is answered.`,hintWideOnly:!0,enabled:!!r.required,onChange:e=>s({required:e},!0)}),r.type===`select`&&(0,g.jsx)(A,{choices:r.options||[],onChange:e=>s({options:e},!0)}),r.type===`schedule`&&(0,g.jsxs)(g.Fragment,{children:[(0,g.jsx)(n.i,{label:`What can be booked`,hint:`Pick a schedule from the Schedule screen — one per person. Visitors see the free times in their own time zone; nobody can take a time twice.`,error:i.en(r).length?void 0:`Pick at least one schedule`,children:(0,g.jsx)(m.t,{schedules:F,selected:i.en(r),onPick:e=>{s({schedules:i.Mt(i.en(r),e,F)},!0)}})}),i.an(F.filter(e=>i.en(r).includes(e.id)))&&(0,g.jsx)(n.g,{label:`Who is the booking with?`,hint:`One of them: the visitor picks a person, then one of that person's own times. All of them: only the times every one of them is free are offered, and one booking goes in all their calendars. Both: the visitor chooses.`,value:i.$t(r),options:i.a,allowEmpty:!1,onChange:e=>s({party:i.$t({party:e}),together:e===`all`},!0)}),(0,g.jsx)(n.g,{label:`How should the booking look?`,value:r.look||`compact`,options:i.r,allowEmpty:!1,onChange:e=>s({look:e===`calendar`?`calendar`:`compact`},!0)})]}),r.type===`file`&&(0,g.jsx)(n.b,{label:`Words on the upload box`,hint:`What the box says before anything is picked. People can attach several files. Leave it empty for “Attach files”.`,value:r.placeholder||``,placeholder:`Attach files`,onChange:e=>s({placeholder:e},!1),onBlur:()=>X(e)}),r.type===`currency`&&(0,g.jsx)(n.b,{label:`Currency symbol`,hint:`Shown inside the box, before the amount.`,value:r.currencySymbol||``,placeholder:`$`,onChange:e=>s({currencySymbol:e},!1),onBlur:()=>X(e)}),u&&(0,g.jsx)(n.b,{label:`Example answer`,hint:`Faint grey text inside the box, to show people what you expect.`,value:r.placeholder||``,placeholder:`e.g. jane@example.com`,onChange:e=>s({placeholder:e},!1),onBlur:()=>X(e)})]},a)},_e=(e,t)=>{let i=H[e]||t,a=S.has(e),o=i.formType||`public`,s=i.fields||[],c=N.has(e);return(0,g.jsxs)(`div`,{className:`flex flex-col gap-4`,children:[(0,g.jsxs)(n.m,{icon:oe,title:`Basics`,description:`What people see at the top of this form and on its button.`,children:[(0,g.jsx)(n.b,{label:`Form name`,hint:`The heading at the top of the form.`,value:i.title||``,placeholder:`e.g. Get in touch`,onChange:t=>J(e,i,{title:t}),onBlur:()=>X(e)}),(0,g.jsx)(n.b,{label:`Button text`,hint:`The words on the button that sends the form.`,value:i.buttonName||i.submitText||``,placeholder:`e.g. Send message`,onChange:t=>J(e,i,{buttonName:t,submitText:t}),onBlur:()=>X(e)})]}),(0,g.jsx)(n.m,{icon:r.S,title:`Who it is for`,description:`Who can fill this in, and where their answers land.`,children:(0,g.jsx)(n.g,{label:`Who it is for`,hint:`Who can fill this in follows the page this form was made for, so it cannot change here. Changing it after answers arrive would file new answers under the wrong list in your Inbox.`,value:o,allowEmpty:!1,disabled:!0,options:[{value:`public`,label:`Anyone`},{value:`private`,label:`Signed-in users`}],onChange:t=>Y(e,i,{formType:t})})}),(0,g.jsx)(n.m,{icon:ee.t,title:`After sending`,description:`What happens the moment someone sends this form.`,children:(0,g.jsx)(n.b,{label:`Where to send them next`,hint:`Leave this empty to show a thank-you message instead. Or give a web address, like /pricing, to take them there.`,value:i.redirectTo||``,placeholder:`/pricing`,onChange:t=>J(e,i,{redirectTo:t}),onBlur:()=>X(e)})}),(0,g.jsxs)(n.m,{icon:ae,title:`Questions`,description:`Everything this form asks for, in the order people answer it.`,actions:({open:t})=>(0,g.jsx)(n.o,{icon:f.t,compact:!0,title:`Add a question`,onClick:()=>{t(),Z(e,i,[...s,k()])},children:`Add question`}),children:[s.length===0?(0,g.jsx)(`p`,{className:`text-[12.5px] text-foreground/55 font-medium leading-relaxed`,children:`No questions yet. Add the first one with the button above.`}):s.map((t,n)=>ge(e,i,t,n,s)),s.length>0&&(0,g.jsx)(`div`,{className:`flex justify-start`,children:(0,g.jsx)(n.o,{icon:f.t,onClick:()=>Z(e,i,[...s,k()]),children:`Add question`})})]}),(c||!a)&&(0,g.jsxs)(`div`,{className:`flex flex-wrap items-center gap-2 pt-1`,children:[c&&(0,g.jsx)(n.o,{icon:u.n,tone:`danger`,compact:!0,title:`Reset this form`,onClick:()=>B({kind:`reset`,id:e}),children:`Reset this form`}),!a&&(0,g.jsx)(n.o,{icon:p.t,tone:`danger`,compact:!0,title:`Delete this form`,onClick:()=>B({kind:`delete`,id:e}),children:`Delete this form`})]})]})};return(0,g.jsxs)(`main`,{className:`flex-1 w-full max-w-7xl mx-auto p-4 pt-2 md:p-8 md:pt-4 z-10 flex flex-col min-h-screen`,children:[(0,g.jsx)(n.nt.div,{initial:{opacity:0,y:20},animate:{opacity:1,y:0},className:`mb-6 flex items-center justify-between`,children:(0,g.jsxs)(`div`,{children:[(0,g.jsx)(t.t,{children:`Forms`}),(0,g.jsxs)(`div`,{className:`flex items-center gap-2 text-foreground/40 font-bold uppercase tracking-[0.2em] text-[11px]`,children:[(0,g.jsx)(`span`,{className:`w-8 h-[1px] bg-foreground/10`}),`/forms`,$?`/${$}`:``]})]})}),(0,g.jsxs)(`div`,{className:`flex flex-col gap-6 flex-1 pb-16`,children:[(0,g.jsx)(r.t,{}),(0,g.jsxs)(`div`,{className:`flex flex-col glass-panel border-y sm:border border-[var(--panel-border)] rounded-none sm:rounded-3xl overflow-hidden flex-1 fbos-tab-fill shadow-2xl bg-background -mx-4 sm:mx-0`,children:[(0,g.jsx)(`div`,{className:`flex items-start justify-between gap-3 sm:gap-6 mb-4 pb-4 md:mb-4 md:pb-5 border-b border-[var(--panel-border)]/50 relative z-10 shrink-0 px-4 pt-5 sm:px-6 sm:pt-6 md:px-10 md:pt-8 bg-background/50`,children:(0,g.jsxs)(`div`,{className:`min-w-0`,children:[(0,g.jsx)(`h2`,{className:`text-lg md:text-xl font-bold text-foreground tracking-tight leading-tight md:leading-7`,children:`Your forms`}),(0,g.jsxs)(`p`,{className:`text-[12.5px] md:text-[14px] font-medium text-foreground/60 mt-1 md:mt-2 leading-relaxed`,children:[(0,g.jsx)(`span`,{className:`md:hidden`,children:`Look a form over and touch it up. Answers arrive in your Inbox.`}),(0,g.jsx)(`span`,{className:`max-md:hidden`,children:`Look a form over and touch it up — its name, button text and questions. New forms are made on the Pages screen, with their page. Answers arrive in your Inbox.`})]})]})}),(0,g.jsx)(`div`,{className:`p-4 sm:p-6 md:px-8 md:pb-8 md:pt-3 flex flex-col gap-4 overflow-y-auto`,children:Object.keys(C).length===0&&!T?(0,g.jsx)(`div`,{className:`flex flex-col gap-4`,children:(0,g.jsxs)(`div`,{className:`flex flex-col items-center justify-center gap-3 p-10 glass-panel rounded-3xl border border-[var(--panel-border)] border-dashed`,children:[(0,g.jsx)(r.T,{className:`w-6 h-6 text-foreground/40`}),(0,g.jsx)(`p`,{className:`text-[13px] font-bold text-foreground/60`,children:`You have no forms yet.`}),(0,g.jsx)(`p`,{className:`text-[12.5px] text-foreground/55 font-medium leading-relaxed text-center max-w-md`,children:de.firstForm})]})}):(0,g.jsxs)(`div`,{className:`flex flex-col gap-4`,children:[(0,g.jsx)(n.rt,{children:Object.entries(C).map(([e,t])=>{let r=H[e]||t,i=I[e],o=D[e],s=(r.fields||[]).length;return(0,g.jsxs)(n.nt.div,{initial:{opacity:0,y:12},animate:{opacity:1,y:0},exit:{opacity:0,y:-12},transition:{duration:.35,ease:`easeOut`},onMouseDown:e=>{R.current={x:e.clientX,y:e.clientY}},onClick:t=>{let n=R.current;R.current=null,m.n(t,n)&&Q(e)},className:`group flex flex-col p-3 px-4 glass-panel border transition-all rounded-2xl hover:shadow-sm cursor-pointer hover:border-accent/40 ${i?`border-[var(--panel-border)] bg-background/50`:`border-transparent hover:border-[var(--panel-border)]`} flex-shrink-0 ${r.enabled===!1?`opacity-40 grayscale bg-foreground/[0.01] border-[var(--panel-border)]/50`:``}`,children:[(0,g.jsxs)(`div`,{className:`flex flex-row justify-between w-full gap-2 ${P?`items-start`:`items-center`}`,children:[(0,g.jsxs)(`div`,{className:`flex flex-col gap-1 min-w-0 flex-1 pr-2 sm:pr-4`,children:[(0,g.jsxs)(`div`,{className:`flex items-center gap-2`,children:[(0,g.jsx)(`h3`,{className:`text-[14px] font-bold text-foreground break-words ml-1 leading-snug`,children:r.title||`Untitled form`}),o&&(0,g.jsx)(d.r,{className:`w-3 h-3 animate-spin text-accent ml-2 shrink-0`})]}),(0,g.jsxs)(`div`,{className:`flex items-center gap-2 mt-1.5 ml-1`,children:[(0,g.jsxs)(`span`,{className:`inline-flex items-center gap-1.5 text-[11px] font-semibold px-2.5 py-[3px] rounded-full border shrink-0 ${r.formType===`private`?`text-blue-500 border-blue-500/25 bg-blue-500/[0.07]`:`text-emerald-500 border-emerald-500/25 bg-emerald-500/[0.07]`}`,children:[(0,g.jsx)(`span`,{className:`w-1.5 h-1.5 rounded-full shrink-0 ${r.formType===`private`?`bg-blue-500`:`bg-emerald-500`}`}),le[r.formType||`public`]]}),(0,g.jsx)(`span`,{className:`max-sm:hidden text-[11px] font-medium text-foreground/45`,children:s===1?`1 question`:`${s} questions`})]})]}),P?(0,g.jsxs)(`div`,{className:`flex items-center gap-0.5 shrink-0 -mt-0.5 -mr-1.5`,children:[(0,g.jsx)(`button`,{type:`button`,title:`Preview this form`,"aria-label":`Preview this form`,onClick:e=>{e.stopPropagation(),M(r)},className:`w-8 h-8 flex items-center justify-center rounded-lg text-foreground/40 hover:text-accent hover:bg-foreground/5 transition-colors cursor-pointer`,children:(0,g.jsx)(l.t,{className:`w-4 h-4`})}),(0,g.jsx)(`button`,{type:`button`,title:i?`Close this form`:`Open this form`,"aria-label":i?`Close this form`:`Open this form`,"aria-expanded":i,onClick:t=>{t.stopPropagation(),Q(e)},className:`w-8 h-8 flex items-center justify-center rounded-lg text-foreground/40 hover:text-accent hover:bg-foreground/5 transition-colors cursor-pointer`,children:(0,g.jsx)(a.t,{className:`w-4 h-4 transition-transform duration-300 ${i?`rotate-180`:``}`})})]}):(0,g.jsxs)(`div`,{className:`flex items-center gap-1 shrink-0`,children:[(0,g.jsx)(n.o,{icon:l.t,title:`Preview this form`,onClick:e=>{e.stopPropagation(),M(r)},children:`Preview`}),(0,g.jsx)(`button`,{type:`button`,title:i?`Close this form`:`Open this form`,"aria-label":i?`Close this form`:`Open this form`,"aria-expanded":i,onClick:t=>{t.stopPropagation(),Q(e)},className:`w-9 h-9 flex items-center justify-center rounded-[var(--btn-radius,0.75rem)] text-foreground/40 hover:text-accent hover:bg-foreground/[0.06] transition-colors cursor-pointer`,children:(0,g.jsx)(a.t,{className:`w-4 h-4 transition-transform duration-300 ${i?`rotate-180`:``}`})})]})]}),(0,g.jsx)(n.rt,{children:i&&(0,g.jsx)(n.nt.div,{initial:{height:0,opacity:0},animate:{height:`auto`,opacity:1},exit:{height:0,opacity:0},transition:n.w,className:`overflow-hidden mt-4 pt-4 border-t border-[var(--panel-border)]/50`,onClick:e=>e.stopPropagation(),children:_e(e,t)})})]},t._uiKey||e)})}),T&&(0,g.jsxs)(`div`,{className:`flex items-center justify-center gap-3 p-6 glass-panel rounded-2xl border border-[var(--panel-border)]/40 bg-foreground/[0.01] mt-2 animate-pulse`,children:[(0,g.jsx)(d.r,{className:`w-4 h-4 animate-spin text-accent`}),(0,g.jsx)(`span`,{className:`text-[12px] font-bold text-foreground/50 tracking-wider uppercase select-none`,children:`Loading your forms`})]})]})})]})]}),(0,g.jsx)(te.t,{isOpen:!!z,onCancel:()=>B(null),onConfirm:()=>{z&&(z.kind===`delete`?me(z.id):he(z.id))},title:z?.kind===`reset`?`Reset this form`:`Delete this form`,message:z?.kind===`reset`?`Undo every change made to ${C[z.id]?.title||z.id} and put it back the way it shipped. Answers already collected are kept.`:`Permanently delete ${z?C[z.id]?.title||z.id:``}. This cannot be undone. Answers already collected are kept.`,confirmText:z?.kind===`reset`?`Reset form`:`Delete form`,isProcessing:pe}),j&&(0,g.jsx)(s.t,{formConfig:j,onClose:()=>M(null)}),(0,g.jsx)(c.t,{})]})}exports.FormsAdmin=j;
|
|
1
|
+
require(`./chunk-CiTBaPhY.cjs`);const e=require(`./forms-CmNeTETW.cjs`),t=require(`./PageTitle-BL50s4qY.cjs`),n=require(`./TimeZoneField-Ckn1pKAL.cjs`),r=require(`./DashboardNav-Bc619nqn.cjs`),i=require(`./schedule-BAea6q8_.cjs`),a=require(`./chevron-down-lyDK1rfL.cjs`),o=require(`./scheduleData-BXjNXVHY.cjs`),s=require(`./ContactPopup-D8aSSlmS.cjs`),c=require(`./SupportBar-DR52UpBq.cjs`),l=require(`./eye-DU2g57PD.cjs`),u=require(`./VideoPlayer-CggwpVXH.cjs`),d=require(`./x-Ci8c5p6T.cjs`),f=require(`./plus-zsWFCu4F.cjs`),ee=require(`./send-CWJXtO05.cjs`),p=require(`./trash-D-CpYHCs.cjs`),te=require(`./ConfirmModal-BUNtss4a.cjs`),ne=require(`./AccessNotice-BClqr7A9.cjs`),re=require(`./useIsPhone-CoiQVcCo.cjs`),m=require(`./SchedulePicker-BpPGI5VZ.cjs`);let h=require(`react`),g=require(`react/jsx-runtime`),_=require(`firebase/firestore`),ie=require(`react-router-dom`);var v={name:`list-checks`,size:24,node:[[`path`,{d:`M13 5h8`,key:`a7qcls`}],[`path`,{d:`M13 12h8`,key:`h98zly`}],[`path`,{d:`M13 19h8`,key:`c3s6r1`}],[`path`,{d:`m3 17 2 2 4-4`,key:`1jhpwq`}],[`path`,{d:`m3 7 2 2 4-4`,key:`1obspn`}]]};v.node;var ae=a.n(v),y={name:`type`,size:24,node:[[`path`,{d:`M12 4v16`,key:`1654pz`}],[`path`,{d:`M4 7V5a1 1 0 0 1 1-1h14a1 1 0 0 1 1 1v2`,key:`e0r10z`}],[`path`,{d:`M9 20h6`,key:`s66wpe`}]]};y.node;var oe=a.n(y),b=e=>String(e&&typeof e==`object`?e.label??e.value??``:e??``),x=(e,t)=>e&&typeof e==`object`?{...e,label:t}:t,S=new Set([`contact`,`support`]),C=[{value:`text`,label:`Short text`},{value:`textarea`,label:`Long text`},{value:`email`,label:`Email`},{value:`tel`,label:`Phone`},{value:`address`,label:`Address`},{value:`number`,label:`Number`},{value:`date`,label:`Date`},{value:`currency`,label:`Money`},{value:`checkbox`,label:`Yes-no`},{value:`select`,label:`Choose one`},{value:`file`,label:`File upload`}],w={value:`schedule`,label:`A time to book`},T={age:`Age`},E=e=>[...C,w].find(t=>t.value===e)?.label||T[e||``]||`Short text`,se=(e,t=!1)=>{let n=t||e===`schedule`?[...C,w]:C;return n.some(t=>t.value===e)||!e?n:[...n,{value:e,label:E(e)}]},ce=(e,t)=>{let n=i.en(e).map(e=>{let n=t.find(t=>t.id===e);return n?i.Vt(n):``}).filter(Boolean);return n.length?n.join(`, `):`nothing picked yet`},le={public:`Anyone`,private:`Signed-in users`},D=e=>(e||``).toLowerCase().trim().replace(/[^a-z0-9]+/g,`_`).replace(/^_+|_+$/g,``),O=(e,t)=>{if(!t.includes(e))return e;let n=2;for(;t.includes(`${e}_${n}`);)n++;return`${e}_${n}`},ue=(e,t,n)=>{if(!(!e.name||e.name===D(e.label||``)))return e.name;let r=D(t);return r?O(r,n.filter(t=>t!==e).map(e=>e.name)):``},k=()=>({name:``,type:`text`,label:``,placeholder:``,required:!1}),de={firstForm:`Forms are made with their pages — add a page on the Pages screen and pick A new form made for this page. Every form then shows up here.`};function A({choices:e,onChange:t}){return(0,g.jsx)(n.i,{label:`Choices`,hint:`The options people pick from.`,children:(0,g.jsxs)(`div`,{className:`flex flex-col gap-2`,children:[e.length===0&&(0,g.jsx)(`span`,{className:`text-[12px] text-foreground/40 font-medium px-1`,children:`No choices yet — add the first one.`}),e.map((r,i)=>(0,g.jsxs)(`div`,{className:`flex items-center gap-2`,children:[(0,g.jsx)(`input`,{type:`text`,value:b(r),"aria-label":`Choice ${i+1}`,placeholder:`e.g. Under 1,000`,onChange:n=>t(e.map((e,t)=>t===i?x(e,n.target.value):e)),className:n.c}),(0,g.jsx)(n.o,{icon:d.t,tone:`danger`,title:`Remove choice ${i+1}`,onClick:()=>t(e.filter((e,t)=>t!==i)),children:`Remove`})]},i)),(0,g.jsx)(`div`,{children:(0,g.jsx)(n.o,{icon:f.t,onClick:()=>t([...e,``]),children:`Add choice`})})]})})}function j(){let{userRole:v}=n.Ft(),y=(0,ie.useNavigate)(),b=n.mi(),x=()=>{let t=(typeof window<`u`?window.__FBOS_FORMS__:null)||{},n={...e.t,contact:b?.defaultConfigs?.contactForm||e.t.contact,support:b?.defaultConfigs?.supportForm||e.t.support};for(let[e,r]of Object.entries(t))n[e]=r;return n},[C,w]=(0,h.useState)(()=>{try{if(typeof window<`u`){let e=localStorage.getItem(`fbos_swr_forms`);if(e)return JSON.parse(e)}let t={...e.t,contact:b?.defaultConfigs?.contactForm||e.t.contact,support:b?.defaultConfigs?.supportForm||e.t.support},n=(typeof window<`u`?window.__FBOS_FORMS__:null)||{};for(let[e,r]of Object.entries(n))t[e]=r;let r={};for(let[e,n]of Object.entries(t)){let t=JSON.parse(JSON.stringify(n));t._uiKey=Math.random().toString(36).substring(7),r[e]=t}return r}catch{return{}}}),[T,E]=(0,h.useState)(()=>!(typeof window<`u`&&localStorage.getItem(`fbos_swr_forms`))),[D,O]=(0,h.useState)({}),[j,M]=(0,h.useState)(null),[N,fe]=(0,h.useState)(new Set),P=re.n(),{schedules:F}=o.y(),[I,L]=(0,h.useState)({}),R=(0,h.useRef)(null),[z,B]=(0,h.useState)(null),[pe,V]=(0,h.useState)(!1),[H,U]=(0,h.useState)({}),W=(0,h.useRef)({}),G=(e,t)=>{W.current={...W.current,[e]:t},U(W.current)};(0,h.useEffect)(()=>{K()},[]);let K=async()=>{try{E(!0);let e=await(0,_.getDocs)((0,_.collection)(n.ui,`sys_forms`)),t={},r=new Set;e.forEach(e=>{if(e.id!==`pubForm`&&e.id!==`userForm`){let n=e.data();n._uiKey=C[e.id]?._uiKey||n._uiKey||Math.random().toString(36).substring(7),t[e.id]=n,r.add(e.id)}}),fe(r);for(let t of[`pubForm`,`userForm`])e.docs.some(e=>e.id===t)&&(0,_.deleteDoc)((0,_.doc)(n.ui,`sys_forms`,t)).catch(()=>{});let i=x();for(let[e,n]of Object.entries(i))if(!t[e]){let r={...n};r._uiKey=C[e]?._uiKey||Math.random().toString(36).substring(7),t[e]=r}else if(t[e]._uiKey=C[e]?._uiKey||t[e]._uiKey||Math.random().toString(36).substring(7),!t[e].fields||t[e].fields.length===0){let n=i[e];t[e].fields=n.fields||[]}let a={};for(let e of Object.keys(i))t[e]&&(a[e]=t[e]);for(let e of Object.keys(t))a[e]||(a[e]=t[e]);let o=window.location.pathname.split(`/forms/`)[1]?.split(`/`)[0];o&&a[o]&&L(e=>({...e,[o]:!0}));let s=(e,t)=>{let n=e=>{if(!e)return``;let{_uiKey:t,...n}=e;return JSON.stringify(n)};return!!e&&!!t&&n(e)===n(t)},c={};for(let[e,t]of Object.entries(W.current))s(C[e],a[e])&&(c[e]=t);W.current=c,U(c),w(a);try{localStorage.setItem(`fbos_swr_forms`,JSON.stringify(a))}catch{}}catch(e){console.error(`Failed to load forms:`,e)}finally{E(!1)}},q=async(e,t)=>{let r={...t};C[e]?._uiKey&&(r._uiKey=C[e]._uiKey),delete r.submitPage,e===`contact`?(r.systemName=`contact`,r.formType=`public`):e===`support`&&(r.systemName=`support`,r.formType=`private`);let i=r.systemName||e;if(i!==e&&i.trim()!==``){w(t=>{let n={};for(let a of Object.keys(t))a===e?n[i]=r:n[a]=t[a];return n}),I[e]&&L(t=>{let n={};for(let r of Object.keys(t))r===e?n[i]=t[r]:n[r]=t[r];return n}),O(e=>({...e,[i]:!0}));try{await(0,_.setDoc)((0,_.doc)(n.ui,`sys_forms`,i),r),await(0,_.deleteDoc)((0,_.doc)(n.ui,`sys_forms`,e)),localStorage.setItem(`fbos_custom_form_${i}`,`true`),localStorage.removeItem(`fbos_custom_form_${e}`),localStorage.setItem(`fbos_form_${i}`,JSON.stringify(r)),localStorage.removeItem(`fbos_form_${e}`)}catch(e){console.error(`Failed to migrate form map ID:`,e)}finally{setTimeout(()=>{O(e=>({...e,[i]:!1}))},500)}}else{w(t=>({...t,[e]:r})),O(t=>({...t,[e]:!0}));try{await(0,_.setDoc)((0,_.doc)(n.ui,`sys_forms`,e),r),localStorage.setItem(`fbos_custom_form_${e}`,`true`),localStorage.setItem(`fbos_form_${e}`,JSON.stringify(r))}catch(e){console.error(`Failed to save form:`,e)}finally{setTimeout(()=>{O(t=>({...t,[e]:!1}))},500)}}},J=(e,t,n)=>G(e,{...t,...n}),Y=(e,t,n)=>{let r={...t,...n};G(e,r),q(e,r)},X=e=>{let t=W.current[e];t&&q(e,t)},Z=(e,t,n)=>Y(e,t,{fields:n}),me=async e=>{if(!S.has(e)){V(!0);try{await(0,_.deleteDoc)((0,_.doc)(n.ui,`sys_forms`,e)),w(t=>{let n={...t};return delete n[e],n}),y(`/forms`)}catch(e){console.error(`Failed to delete form`,e)}finally{V(!1),B(null)}}},he=async e=>{if(!N.has(e)){B(null);return}V(!0);let t=(typeof window<`u`?window.__FBOS_FORMS__:null)||{},r=S.has(e)||!!t[e]||!!b?.defaultConfigs?.[e]||!!b?.defaultConfigs?.[`${e}Form`];try{r?(O(t=>({...t,[e]:!0})),await(0,_.deleteDoc)((0,_.doc)(n.ui,`sys_forms`,e)),localStorage.removeItem(`fbos_form_${e}`),localStorage.removeItem(`fbos_custom_form_${e}`),await K(),setTimeout(()=>O(t=>({...t,[e]:!1})),500)):await q(e,x().contact||x().support)}catch(e){console.error(`Reset failed:`,e)}finally{V(!1),B(null)}};if(v!==`admin`)return(0,g.jsx)(`main`,{className:`flex-1 w-full max-w-7xl mx-auto p-4 pt-2 md:p-8 md:pt-4 z-10 flex flex-col min-h-screen`,children:(0,g.jsx)(ne.i,{})});let Q=e=>{L(t=>{let n={...t,[e]:!t[e]};if(n[e])window.history.replaceState(null,``,`/forms/${e}`);else{let e=Object.keys(n).filter(e=>n[e]);e.length>0?window.history.replaceState(null,``,`/forms/${e[0]}`):window.history.replaceState(null,``,`/forms`)}return n})},$=Object.keys(I).find(e=>I[e]),ge=(e,t,r,a,o)=>{let s=(n,r)=>{let i=o.map((e,t)=>t===a?{...e,...n}:e);r?Z(e,t,i):J(e,t,{fields:i})},c=n=>{let i=n===`schedule`?{type:n,look:`compact`,schedules:[]}:n===`select`?{type:n,options:r.options||[]}:{type:n};Z(e,t,o.map((e,t)=>{if(t!==a)return e;let r={...e,...i};return n!==`schedule`&&(delete r.members,delete r.schedules,delete r.look,delete r.together),r}))},l=n=>{let r=a+n;if(r<0||r>=o.length)return;let i=[...o];[i[a],i[r]]=[i[r],i[a]],Z(e,t,i)},u=r.type!==`checkbox`&&r.type!==`select`&&r.type!==`date`&&r.type!==`file`&&r.type!==`schedule`;return(0,g.jsxs)(`div`,{className:`rounded-2xl border border-[var(--panel-border)] bg-[var(--panel-bg)] p-4 sm:p-5 flex flex-col gap-5`,children:[(0,g.jsxs)(`div`,{className:`flex items-center justify-between gap-2 flex-wrap`,children:[(0,g.jsxs)(`span`,{className:`text-[13px] font-bold text-foreground`,children:[`Question `,a+1,r.type===`schedule`&&(0,g.jsxs)(`span`,{className:`font-medium text-foreground/50`,children:[` · A time to book — `,ce(r,F)]})]}),(0,g.jsxs)(`div`,{className:`flex items-center gap-1.5`,children:[(0,g.jsx)(n.o,{icon:n.jt,disabled:a===0,title:`Move up`,onClick:()=>l(-1),children:`Up`}),(0,g.jsx)(n.o,{icon:n.Mt,disabled:a===o.length-1,title:`Move down`,onClick:()=>l(1),children:`Down`}),(0,g.jsx)(n.o,{icon:p.t,tone:`danger`,title:`Remove question ${a+1}`,onClick:()=>Z(e,t,o.filter((e,t)=>t!==a)),children:`Remove`})]})]}),(0,g.jsx)(n.b,{label:`Question`,hint:`What you are asking for, in the words the person will read.`,value:r.label||``,placeholder:`e.g. What is your budget?`,onChange:e=>s({label:e,name:ue(r,e,o)},!1),onBlur:()=>X(e)}),(0,g.jsx)(n.g,{label:`Kind of answer`,hint:`Sets the box people type into and what counts as a valid answer.`,value:r.type||`text`,options:se(r.type,!1),allowEmpty:!1,onChange:c}),(0,g.jsx)(n.S,{label:`Required`,hint:`On means the form cannot be sent until this is answered.`,hintWideOnly:!0,enabled:!!r.required,onChange:e=>s({required:e},!0)}),r.type===`select`&&(0,g.jsx)(A,{choices:r.options||[],onChange:e=>s({options:e},!0)}),r.type===`schedule`&&(0,g.jsxs)(g.Fragment,{children:[(0,g.jsx)(n.i,{label:`What can be booked`,hint:`Pick a schedule from the Schedule screen — one per person. Visitors see the free times in their own time zone; nobody can take a time twice.`,error:i.en(r).length?void 0:`Pick at least one schedule`,children:(0,g.jsx)(m.t,{schedules:F,selected:i.en(r),onPick:e=>{s({schedules:i.Mt(i.en(r),e,F)},!0)}})}),i.an(F.filter(e=>i.en(r).includes(e.id)))&&(0,g.jsx)(n.g,{label:`Who is the booking with?`,hint:`One of them: the visitor picks a person, then one of that person's own times. All of them: only the times every one of them is free are offered, and one booking goes in all their calendars. Both: the visitor chooses.`,value:i.$t(r),options:i.a,allowEmpty:!1,onChange:e=>s({party:i.$t({party:e}),together:e===`all`},!0)}),(0,g.jsx)(n.g,{label:`How should the booking look?`,value:r.look||`compact`,options:i.r,allowEmpty:!1,onChange:e=>s({look:e===`calendar`?`calendar`:`compact`},!0)})]}),r.type===`file`&&(0,g.jsx)(n.b,{label:`Words on the upload box`,hint:`What the box says before anything is picked. People can attach several files. Leave it empty for “Attach files”.`,value:r.placeholder||``,placeholder:`Attach files`,onChange:e=>s({placeholder:e},!1),onBlur:()=>X(e)}),r.type===`currency`&&(0,g.jsx)(n.b,{label:`Currency symbol`,hint:`Shown inside the box, before the amount.`,value:r.currencySymbol||``,placeholder:`$`,onChange:e=>s({currencySymbol:e},!1),onBlur:()=>X(e)}),u&&(0,g.jsx)(n.b,{label:`Example answer`,hint:`Faint grey text inside the box, to show people what you expect.`,value:r.placeholder||``,placeholder:`e.g. jane@example.com`,onChange:e=>s({placeholder:e},!1),onBlur:()=>X(e)})]},a)},_e=(e,t)=>{let i=H[e]||t,a=S.has(e),o=i.formType||`public`,s=i.fields||[],c=N.has(e);return(0,g.jsxs)(`div`,{className:`flex flex-col gap-4`,children:[(0,g.jsxs)(n.m,{icon:oe,title:`Basics`,description:`What people see at the top of this form and on its button.`,children:[(0,g.jsx)(n.b,{label:`Form name`,hint:`The heading at the top of the form.`,value:i.title||``,placeholder:`e.g. Get in touch`,onChange:t=>J(e,i,{title:t}),onBlur:()=>X(e)}),(0,g.jsx)(n.b,{label:`Button text`,hint:`The words on the button that sends the form.`,value:i.buttonName||i.submitText||``,placeholder:`e.g. Send message`,onChange:t=>J(e,i,{buttonName:t,submitText:t}),onBlur:()=>X(e)})]}),(0,g.jsx)(n.m,{icon:r.S,title:`Who it is for`,description:`Who can fill this in, and where their answers land.`,children:(0,g.jsx)(n.g,{label:`Who it is for`,hint:`Who can fill this in follows the page this form was made for, so it cannot change here. Changing it after answers arrive would file new answers under the wrong list in your Inbox.`,value:o,allowEmpty:!1,disabled:!0,options:[{value:`public`,label:`Anyone`},{value:`private`,label:`Signed-in users`}],onChange:t=>Y(e,i,{formType:t})})}),(0,g.jsx)(n.m,{icon:ee.t,title:`After sending`,description:`What happens the moment someone sends this form.`,children:(0,g.jsx)(n.b,{label:`Where to send them next`,hint:`Leave this empty to show a thank-you message instead. Or give a web address, like /pricing, to take them there.`,value:i.redirectTo||``,placeholder:`/pricing`,onChange:t=>J(e,i,{redirectTo:t}),onBlur:()=>X(e)})}),(0,g.jsxs)(n.m,{icon:ae,title:`Questions`,description:`Everything this form asks for, in the order people answer it.`,actions:({open:t})=>(0,g.jsx)(n.o,{icon:f.t,compact:!0,title:`Add a question`,onClick:()=>{t(),Z(e,i,[...s,k()])},children:`Add question`}),children:[s.length===0?(0,g.jsx)(`p`,{className:`text-[12.5px] text-foreground/55 font-medium leading-relaxed`,children:`No questions yet. Add the first one with the button above.`}):s.map((t,n)=>ge(e,i,t,n,s)),s.length>0&&(0,g.jsx)(`div`,{className:`flex justify-start`,children:(0,g.jsx)(n.o,{icon:f.t,onClick:()=>Z(e,i,[...s,k()]),children:`Add question`})})]}),(c||!a)&&(0,g.jsxs)(`div`,{className:`flex flex-wrap items-center gap-2 pt-1`,children:[c&&(0,g.jsx)(n.o,{icon:u.n,tone:`danger`,compact:!0,title:`Reset this form`,onClick:()=>B({kind:`reset`,id:e}),children:`Reset this form`}),!a&&(0,g.jsx)(n.o,{icon:p.t,tone:`danger`,compact:!0,title:`Delete this form`,onClick:()=>B({kind:`delete`,id:e}),children:`Delete this form`})]})]})};return(0,g.jsxs)(`main`,{className:`flex-1 w-full max-w-7xl mx-auto p-4 pt-2 md:p-8 md:pt-4 z-10 flex flex-col min-h-screen`,children:[(0,g.jsx)(n.nt.div,{initial:{opacity:0,y:20},animate:{opacity:1,y:0},className:`mb-6 flex items-center justify-between`,children:(0,g.jsxs)(`div`,{children:[(0,g.jsx)(t.t,{children:`Forms`}),(0,g.jsxs)(`div`,{className:`flex items-center gap-2 text-foreground/40 font-bold uppercase tracking-[0.2em] text-[11px]`,children:[(0,g.jsx)(`span`,{className:`w-8 h-[1px] bg-foreground/10`}),`/forms`,$?`/${$}`:``]})]})}),(0,g.jsxs)(`div`,{className:`flex flex-col gap-6 flex-1 pb-16`,children:[(0,g.jsx)(r.t,{}),(0,g.jsxs)(`div`,{className:`flex flex-col glass-panel border-y sm:border border-[var(--panel-border)] rounded-none sm:rounded-3xl overflow-hidden flex-1 fbos-tab-fill shadow-2xl bg-background -mx-4 sm:mx-0`,children:[(0,g.jsx)(`div`,{className:`flex items-start justify-between gap-3 sm:gap-6 mb-4 pb-4 md:mb-4 md:pb-5 border-b border-[var(--panel-border)]/50 relative z-10 shrink-0 px-4 pt-5 sm:px-6 sm:pt-6 md:px-10 md:pt-8 bg-background/50`,children:(0,g.jsxs)(`div`,{className:`min-w-0`,children:[(0,g.jsx)(`h2`,{className:`text-lg md:text-xl font-bold text-foreground tracking-tight leading-tight md:leading-7`,children:`Your forms`}),(0,g.jsxs)(`p`,{className:`text-[12.5px] md:text-[14px] font-medium text-foreground/60 mt-1 md:mt-2 leading-relaxed`,children:[(0,g.jsx)(`span`,{className:`md:hidden`,children:`Look a form over and touch it up. Answers arrive in your Inbox.`}),(0,g.jsx)(`span`,{className:`max-md:hidden`,children:`Look a form over and touch it up — its name, button text and questions. New forms are made on the Pages screen, with their page. Answers arrive in your Inbox.`})]})]})}),(0,g.jsx)(`div`,{className:`p-4 sm:p-6 md:px-8 md:pb-8 md:pt-3 flex flex-col gap-4 overflow-y-auto`,children:Object.keys(C).length===0&&!T?(0,g.jsx)(`div`,{className:`flex flex-col gap-4`,children:(0,g.jsxs)(`div`,{className:`flex flex-col items-center justify-center gap-3 p-10 glass-panel rounded-3xl border border-[var(--panel-border)] border-dashed`,children:[(0,g.jsx)(r.T,{className:`w-6 h-6 text-foreground/40`}),(0,g.jsx)(`p`,{className:`text-[13px] font-bold text-foreground/60`,children:`You have no forms yet.`}),(0,g.jsx)(`p`,{className:`text-[12.5px] text-foreground/55 font-medium leading-relaxed text-center max-w-md`,children:de.firstForm})]})}):(0,g.jsxs)(`div`,{className:`flex flex-col gap-4`,children:[(0,g.jsx)(n.rt,{children:Object.entries(C).map(([e,t])=>{let r=H[e]||t,i=I[e],o=D[e],s=(r.fields||[]).length;return(0,g.jsxs)(n.nt.div,{initial:{opacity:0,y:12},animate:{opacity:1,y:0},exit:{opacity:0,y:-12},transition:{duration:.35,ease:`easeOut`},onMouseDown:e=>{R.current={x:e.clientX,y:e.clientY}},onClick:t=>{let n=R.current;R.current=null,m.n(t,n)&&Q(e)},className:`group flex flex-col p-3 px-4 glass-panel border transition-all rounded-2xl hover:shadow-sm cursor-pointer hover:border-accent/40 ${i?`border-[var(--panel-border)] bg-background/50`:`border-transparent hover:border-[var(--panel-border)]`} flex-shrink-0 ${r.enabled===!1?`opacity-40 grayscale bg-foreground/[0.01] border-[var(--panel-border)]/50`:``}`,children:[(0,g.jsxs)(`div`,{className:`flex flex-row justify-between w-full gap-2 ${P?`items-start`:`items-center`}`,children:[(0,g.jsxs)(`div`,{className:`flex flex-col gap-1 min-w-0 flex-1 pr-2 sm:pr-4`,children:[(0,g.jsxs)(`div`,{className:`flex items-center gap-2`,children:[(0,g.jsx)(`h3`,{className:`text-[14px] font-bold text-foreground break-words ml-1 leading-snug`,children:r.title||`Untitled form`}),o&&(0,g.jsx)(d.r,{className:`w-3 h-3 animate-spin text-accent ml-2 shrink-0`})]}),(0,g.jsxs)(`div`,{className:`flex items-center gap-2 mt-1.5 ml-1`,children:[(0,g.jsxs)(`span`,{className:`inline-flex items-center gap-1.5 text-[11px] font-semibold px-2.5 py-[3px] rounded-full border shrink-0 ${r.formType===`private`?`text-blue-500 border-blue-500/25 bg-blue-500/[0.07]`:`text-emerald-500 border-emerald-500/25 bg-emerald-500/[0.07]`}`,children:[(0,g.jsx)(`span`,{className:`w-1.5 h-1.5 rounded-full shrink-0 ${r.formType===`private`?`bg-blue-500`:`bg-emerald-500`}`}),le[r.formType||`public`]]}),(0,g.jsx)(`span`,{className:`max-sm:hidden text-[11px] font-medium text-foreground/45`,children:s===1?`1 question`:`${s} questions`})]})]}),P?(0,g.jsxs)(`div`,{className:`flex items-center gap-0.5 shrink-0 -mt-0.5 -mr-1.5`,children:[(0,g.jsx)(`button`,{type:`button`,title:`Preview this form`,"aria-label":`Preview this form`,onClick:e=>{e.stopPropagation(),M(r)},className:`w-8 h-8 flex items-center justify-center rounded-lg text-foreground/40 hover:text-accent hover:bg-foreground/5 transition-colors cursor-pointer`,children:(0,g.jsx)(l.t,{className:`w-4 h-4`})}),(0,g.jsx)(`button`,{type:`button`,title:i?`Close this form`:`Open this form`,"aria-label":i?`Close this form`:`Open this form`,"aria-expanded":i,onClick:t=>{t.stopPropagation(),Q(e)},className:`w-8 h-8 flex items-center justify-center rounded-lg text-foreground/40 hover:text-accent hover:bg-foreground/5 transition-colors cursor-pointer`,children:(0,g.jsx)(a.t,{className:`w-4 h-4 transition-transform duration-300 ${i?`rotate-180`:``}`})})]}):(0,g.jsxs)(`div`,{className:`flex items-center gap-1 shrink-0`,children:[(0,g.jsx)(n.o,{icon:l.t,title:`Preview this form`,onClick:e=>{e.stopPropagation(),M(r)},children:`Preview`}),(0,g.jsx)(`button`,{type:`button`,title:i?`Close this form`:`Open this form`,"aria-label":i?`Close this form`:`Open this form`,"aria-expanded":i,onClick:t=>{t.stopPropagation(),Q(e)},className:`w-9 h-9 flex items-center justify-center rounded-[var(--btn-radius,0.75rem)] text-foreground/40 hover:text-accent hover:bg-foreground/[0.06] transition-colors cursor-pointer`,children:(0,g.jsx)(a.t,{className:`w-4 h-4 transition-transform duration-300 ${i?`rotate-180`:``}`})})]})]}),(0,g.jsx)(n.rt,{children:i&&(0,g.jsx)(n.nt.div,{initial:{height:0,opacity:0},animate:{height:`auto`,opacity:1},exit:{height:0,opacity:0},transition:n.w,className:`overflow-hidden mt-4 pt-4 border-t border-[var(--panel-border)]/50`,onClick:e=>e.stopPropagation(),children:_e(e,t)})})]},t._uiKey||e)})}),T&&(0,g.jsxs)(`div`,{className:`flex items-center justify-center gap-3 p-6 glass-panel rounded-2xl border border-[var(--panel-border)]/40 bg-foreground/[0.01] mt-2 animate-pulse`,children:[(0,g.jsx)(d.r,{className:`w-4 h-4 animate-spin text-accent`}),(0,g.jsx)(`span`,{className:`text-[12px] font-bold text-foreground/50 tracking-wider uppercase select-none`,children:`Loading your forms`})]})]})})]})]}),(0,g.jsx)(te.t,{isOpen:!!z,onCancel:()=>B(null),onConfirm:()=>{z&&(z.kind===`delete`?me(z.id):he(z.id))},title:z?.kind===`reset`?`Reset this form`:`Delete this form`,message:z?.kind===`reset`?`Undo every change made to ${C[z.id]?.title||z.id} and put it back the way it shipped. Answers already collected are kept.`:`Permanently delete ${z?C[z.id]?.title||z.id:``}. This cannot be undone. Answers already collected are kept.`,confirmText:z?.kind===`reset`?`Reset form`:`Delete form`,isProcessing:pe}),j&&(0,g.jsx)(s.t,{formConfig:j,onClose:()=>M(null)}),(0,g.jsx)(c.t,{})]})}exports.FormsAdmin=j;
|