your-ai-workflow-firebase-os 2.0.2 → 2.0.3

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.
Files changed (180) hide show
  1. package/dist/AccessNotice-BZ5Gt1nP.js +40 -0
  2. package/dist/AccessNotice-CN7kc70o.cjs +1 -0
  3. package/dist/{AddressField-B2YBRXcx.js → AddressField-9Sqn8TvC.js} +3 -3
  4. package/dist/{AddressField-BBv8NGX8.cjs → AddressField-B7wtV8yA.cjs} +1 -1
  5. package/dist/Assets-DBMwZ3bN.cjs +1 -0
  6. package/dist/Assets-DT-NU_WO.js +296 -0
  7. package/dist/Attachments-Bl9_dfsu.js +46 -0
  8. package/dist/Attachments-UVK9SRXf.cjs +1 -0
  9. package/dist/Billing-0RIHayHy.cjs +1 -0
  10. package/dist/Billing-FNE2r3_d.js +379 -0
  11. package/dist/BookingCalendar-BP5kiv3d.cjs +1 -0
  12. package/dist/BookingCalendar-DZ2fEFja.js +309 -0
  13. package/dist/Button-4lzOE31p.js +48 -0
  14. package/dist/Button-5DlB2MCi.cjs +1 -0
  15. package/dist/CalendarView-BimoXy_k.cjs +1 -0
  16. package/dist/CalendarView-D-ykjpvI.js +664 -0
  17. package/dist/ConfirmModal-Di9GR-vV.cjs +1 -0
  18. package/dist/ConfirmModal-gKQEpd4d.js +113 -0
  19. package/dist/ContactPopup-BXnHrRwl.js +1114 -0
  20. package/dist/ContactPopup-lxmRMoIa.cjs +1 -0
  21. package/dist/CopyLink-BpEQWmfI.cjs +1 -0
  22. package/dist/CopyLink-CBAVfcm1.js +43 -0
  23. package/dist/DashboardNav-CXa_ci-_.cjs +1 -0
  24. package/dist/DashboardNav-Dmn7PVSp.js +886 -0
  25. package/dist/EmailAdmin-CjN_rvxT.js +318 -0
  26. package/dist/EmailAdmin-lAEBdY1s.cjs +1 -0
  27. package/dist/EventCard-46EquygT.cjs +1 -0
  28. package/dist/EventCard-B6xD-mk3.js +97 -0
  29. package/dist/FileViewerPopup-CX-J75TM.js +1283 -0
  30. package/dist/FileViewerPopup-D8-MmIoS.cjs +3 -0
  31. package/dist/FormNote-BivRNA3J.js +50 -0
  32. package/dist/FormNote-BtdTGpml.cjs +1 -0
  33. package/dist/FormsAdmin-B5PBCG2W.js +812 -0
  34. package/dist/FormsAdmin-BQCULvi5.cjs +1 -0
  35. package/dist/Inbox-BPk2ZkE5.js +779 -0
  36. package/dist/Inbox-DNrcBx0o.cjs +3 -0
  37. package/dist/Loader-Bu89fsbB.cjs +1 -0
  38. package/dist/Loader-D4gwgBOq.js +32 -0
  39. package/dist/ManagePlanButton-B0dwqZBd.cjs +1 -0
  40. package/dist/ManagePlanButton-BSrOHYze.js +29 -0
  41. package/dist/MyBookings-6qr0GgzO.cjs +1 -0
  42. package/dist/MyBookings-BQjGM2LQ.js +113 -0
  43. package/dist/PageTitle-CZhgmmDT.cjs +3 -0
  44. package/dist/PageTitle-D93YCiN8.js +1606 -0
  45. package/dist/PagesAdmin-BcHIcqM5.cjs +34 -0
  46. package/dist/PagesAdmin-D69P9nRb.js +5802 -0
  47. package/dist/PagesAdmin-DNwZOKjA.cjs +1 -0
  48. package/dist/PagesAdmin-HUITEcHx.js +3 -0
  49. package/dist/PaymentsAdmin-C2iCI9qC.js +1291 -0
  50. package/dist/PaymentsAdmin-CoXi2vCm.cjs +2 -0
  51. package/dist/{PhoneInputField-B3P_vUDW.cjs → PhoneInputField-BEwYZMB7.cjs} +1 -1
  52. package/dist/{PhoneInputField-D3wWs-M8.js → PhoneInputField-BG0L2djE.js} +2 -2
  53. package/dist/PhoneInputField-DfOtCIH_.js +2 -0
  54. package/dist/{PhoneInputField-CdNTvWXQ.cjs → PhoneInputField-jhWvto8C.cjs} +1 -1
  55. package/dist/Popup-DHYGFl2-.cjs +1 -0
  56. package/dist/Popup-xROLytgr.js +142 -0
  57. package/dist/ProviderMark-BBfaM5Yl.js +52 -0
  58. package/dist/ProviderMark-xLkUN3Fx.cjs +1 -0
  59. package/dist/PublishApp-Bm-6r3Td.js +595 -0
  60. package/dist/PublishApp-D4XJUkJa.cjs +2 -0
  61. package/dist/Said-CoC15awL.js +94 -0
  62. package/dist/Said-IqCNofdh.cjs +1 -0
  63. package/dist/ScheduleAdmin-BKfQkrR8.js +1853 -0
  64. package/dist/ScheduleAdmin-DwK36GAZ.cjs +1 -0
  65. package/dist/SchedulePicker--urIH2Eb.js +112 -0
  66. package/dist/SchedulePicker-nmqzUnUH.cjs +1 -0
  67. package/dist/Setup-CHLgd-ag.js +849 -0
  68. package/dist/Setup-CaDranTm.cjs +1374 -0
  69. package/dist/SetupPayments-CVIwh1eQ.js +411 -0
  70. package/dist/SetupPayments-HNXWA25X.cjs +1 -0
  71. package/dist/SignInAdmin-C94-A-0w.cjs +4 -0
  72. package/dist/SignInAdmin-Yxgv_8U4.js +766 -0
  73. package/dist/SupportBar-CDT0HwdP.cjs +1 -0
  74. package/dist/SupportBar-CN_JGC-9.js +117 -0
  75. package/dist/SystemTabContent-L3vGGF3P.cjs +1 -0
  76. package/dist/SystemTabContent-QdxxLILE.js +35 -0
  77. package/dist/TemplateDrive-DV8zNjYe.cjs +1 -0
  78. package/dist/TemplateDrive-NJY_AAvV.js +1197 -0
  79. package/dist/ThemeAdmin-BzFjJkLg.js +269 -0
  80. package/dist/ThemeAdmin-DVnPNxe7.cjs +1 -0
  81. package/dist/ThemeAdmin-DY7Vc4Sj.cjs +3 -0
  82. package/dist/ThemeAdmin-DnC-D2N3.js +2 -0
  83. package/dist/{ContactPopup-Dsg2ntq3.js → TimeZoneField-DkI1Bkcz.js} +3191 -5322
  84. package/dist/TimeZoneField-qs7NPR30.cjs +12 -0
  85. package/dist/TransactionsAdmin-BsZ-oQWi.js +582 -0
  86. package/dist/TransactionsAdmin-CTSTiPld.cjs +1 -0
  87. package/dist/Trouble-9es_AI4F.cjs +1 -0
  88. package/dist/Trouble-oWt9fMsm.js +164 -0
  89. package/dist/Users-CTitWXyd.cjs +1 -0
  90. package/dist/Users-DJjQTWJF.js +1207 -0
  91. package/dist/aiModels-DIP9fn8T.cjs +1 -0
  92. package/dist/{aiModels-BHlEfuRJ.js → aiModels-DnDhNGup.js} +29 -61
  93. package/dist/arrivalRoads-BJ-35vkk.js +228 -0
  94. package/dist/arrivalRoads-qoU-B4jt.cjs +4 -0
  95. package/dist/{bake-BWG3y-15.cjs → bake-n2wyFw0B.cjs} +1 -1
  96. package/dist/{bake-BtYOG1Du.js → bake-naZeMu98.js} +1 -1
  97. package/dist/bookingPages-C7a3srPG.js +102 -0
  98. package/dist/bookingPages-DvbFbD9X.cjs +1 -0
  99. package/dist/components/CustomSelect.d.ts +7 -1
  100. package/dist/components/RegistrationFields.d.ts +6 -1
  101. package/dist/components/Reveal.d.ts +12 -0
  102. package/dist/components/ScrollToTop.d.ts +4 -0
  103. package/dist/contentFallback-C9MZjdq7.cjs +1 -0
  104. package/dist/contentFallback-CEDY0Pwp.js +96 -0
  105. package/dist/contentKey-Bwry4lDa.js +13 -0
  106. package/dist/contentKey-DJGYYnAE.cjs +1 -0
  107. package/dist/email-BfnZnMwD.cjs +1 -0
  108. package/dist/email-Ddj8Dlu6.js +58 -0
  109. package/dist/{fileBytes-BdwaFKRy.cjs → fileBytes-BJPaiX9Y.cjs} +1 -1
  110. package/dist/{fileBytes-DuW2K-H_.js → fileBytes-bjgvCfWu.js} +2 -2
  111. package/dist/forms-Bvx9HTM6.js +75 -0
  112. package/dist/forms-CmNeTETW.cjs +1 -0
  113. package/dist/lib/ThemeContext.d.ts +0 -14
  114. package/dist/lib/bareImgWatch.d.ts +6 -1
  115. package/dist/lib/localEdits.d.ts +2 -0
  116. package/dist/lib/paymentProducts.d.ts +8 -0
  117. package/dist/lib/payments.d.ts +11 -1
  118. package/dist/notices-B7iIrIEg.js +29 -0
  119. package/dist/notices-upMg8UVh.cjs +1 -0
  120. package/dist/openOnArrival-Buwqb86D.cjs +1 -0
  121. package/dist/openOnArrival-S2K6v-lB.js +35 -0
  122. package/dist/pageFiles--Ih60ITP.js +45 -0
  123. package/dist/pageFiles-UtBmlOcD.cjs +1 -0
  124. package/dist/pages/PagesAdmin.d.ts +69 -0
  125. package/dist/people-2jZE_pdI.js +102 -0
  126. package/dist/people-BpVvIr9-.cjs +1 -0
  127. package/dist/personName-CFw3pxuu.js +18 -0
  128. package/dist/personName-CbzN_i57.cjs +1 -0
  129. package/dist/publishSteps-C1cDFzzB.js +88 -0
  130. package/dist/publishSteps-SSm8afDw.cjs +1 -0
  131. package/dist/recordLock-DHVvI9bP.js +61 -0
  132. package/dist/recordLock-DWeIxiwh.cjs +1 -0
  133. package/dist/recordsKey-B7QrxdeU.cjs +1 -0
  134. package/dist/recordsKey-D5-wC0Aw.js +141 -0
  135. package/dist/registrationFields-CLeR2lQJ.js +181 -0
  136. package/dist/registrationFields-v4pOoRdn.cjs +1 -0
  137. package/dist/renderer.cjs.js +1 -1
  138. package/dist/renderer.es.js +1 -1
  139. package/dist/roles-D6VaHWfV.js +147 -0
  140. package/dist/roles-DQUFFBQe.cjs +1 -0
  141. package/dist/scheduleData-ATN8w5hI.js +727 -0
  142. package/dist/scheduleData-Cltj0ABZ.cjs +1 -0
  143. package/dist/server.cjs.js +6 -6
  144. package/dist/server.es.js +716 -715
  145. package/dist/serviceStatus-TQyZO_Y_.cjs +1 -0
  146. package/dist/serviceStatus-vS8AI7SZ.js +125 -0
  147. package/dist/tabAudience-BqpN6dsR.cjs +1 -0
  148. package/dist/tabAudience-CRyMvv0v.js +34 -0
  149. package/dist/transactions-BqMQDRx3.js +343 -0
  150. package/dist/transactions-CufFrdAM.cjs +1 -0
  151. package/dist/useIsPhone-BVGx_X3e.js +13 -0
  152. package/dist/useIsPhone-o63tNneA.cjs +1 -0
  153. package/dist/{validate-DzSJWuyL.js → validate-CmC_tLK-.js} +433 -351
  154. package/dist/validate-DZMwqSrb.cjs +103 -0
  155. package/dist/vite/validate.d.ts +14 -0
  156. package/dist/vite.cjs.js +1 -1
  157. package/dist/vite.es.js +1 -1
  158. package/dist/your-ai-workflow-firebase-os.cjs.js +15 -1431
  159. package/dist/your-ai-workflow-firebase-os.css +1 -1
  160. package/dist/your-ai-workflow-firebase-os.es.js +8200 -32421
  161. package/package.json +1 -1
  162. package/src/index.css +122 -2
  163. package/dist/ContactPopup-IwBm-eqz.cjs +0 -12
  164. package/dist/PhoneInputField-CVamkTJg.js +0 -2
  165. package/dist/aiModels-BIhoTNH0.cjs +0 -1
  166. package/dist/validate-e48WXJdP.cjs +0 -103
  167. /package/dist/{address-DI1YaCI4.cjs → address-Bsb8COq2.cjs} +0 -0
  168. /package/dist/{address-Ca1h_UZX.js → address-C2bHNxJU.js} +0 -0
  169. /package/dist/{dist-BkUiTtIb.js → dist-DUPvBnOA.js} +0 -0
  170. /package/dist/{dist-BLGlDv1e.cjs → dist-E4jTFPs7.cjs} +0 -0
  171. /package/dist/{lucide-react-BYniZ3lQ.cjs → lucide-react-BwV6L6Is.cjs} +0 -0
  172. /package/dist/{lucide-react-ehRy1vqS.js → lucide-react-CA7GD7Nv.js} +0 -0
  173. /package/dist/{mediaKind-dk396a03.cjs → mediaKind-D0MWyv6b.cjs} +0 -0
  174. /package/dist/{mediaKind-De2Cx_kB.js → mediaKind-DmKMsjeY.js} +0 -0
  175. /package/dist/{pdf-u73U7-6s.js → pdf-DRXcPGkr.js} +0 -0
  176. /package/dist/{pdf-B24jYmSf.cjs → pdf-jLjjhvjp.cjs} +0 -0
  177. /package/dist/{pdf.worker.min-BPOWx2_9.js → pdf.worker.min-CfKZezeM.js} +0 -0
  178. /package/dist/{pdf.worker.min-BvhEiZFe.cjs → pdf.worker.min-bLgNWd7w.cjs} +0 -0
  179. /package/dist/{verifiedAccount-C1iCxopN.js → verifiedAccount-DRbRFJ6H.js} +0 -0
  180. /package/dist/{verifiedAccount-D3OeaOBo.cjs → verifiedAccount-DScyKk96.cjs} +0 -0
@@ -0,0 +1 @@
1
+ require(`./chunk-CiTBaPhY.cjs`);const e=require(`./forms-CmNeTETW.cjs`),t=require(`./PageTitle-CZhgmmDT.cjs`),n=require(`./TimeZoneField-qs7NPR30.cjs`),r=require(`./DashboardNav-CXa_ci-_.cjs`),i=require(`./lucide-react-BwV6L6Is.cjs`),a=require(`./ContactPopup-lxmRMoIa.cjs`),o=require(`./scheduleData-Cltj0ABZ.cjs`),s=require(`./ConfirmModal-Di9GR-vV.cjs`),c=require(`./AccessNotice-CN7kc70o.cjs`),l=require(`./SupportBar-CDT0HwdP.cjs`),u=require(`./useIsPhone-o63tNneA.cjs`),d=require(`./SchedulePicker-nmqzUnUH.cjs`);let f=require(`react`),p=require(`react/jsx-runtime`),m=require(`firebase/firestore`),ee=require(`react-router-dom`);var h=new Set([`contact`,`support`]),g=[{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`}],_={value:`schedule`,label:`A time to book`},v={age:`Age`},y=e=>[...g,_].find(t=>t.value===e)?.label||v[e||``]||`Short text`,b=(e,t=!1)=>{let n=t||e===`schedule`?[...g,_]:g;return n.some(t=>t.value===e)||!e?n:[...n,{value:e,label:y(e)}]},x=(e,t)=>{let r=n.wn(e).map(e=>{let r=t.find(t=>t.id===e);return r?n.pn(r):``}).filter(Boolean);return r.length?r.join(`, `):`nothing picked yet`},S={public:`Anyone`,private:`Signed-in users`},C=e=>(e||``).toLowerCase().trim().replace(/[^a-z0-9]+/g,`_`).replace(/^_+|_+$/g,``),w=(e,t)=>{if(!t.includes(e))return e;let n=2;for(;t.includes(`${e}_${n}`);)n++;return`${e}_${n}`},te=(e,t,n)=>{if(!(!e.name||e.name===C(e.label||``)))return e.name;let r=C(t);return r?w(r,n.filter(t=>t!==e).map(e=>e.name)):``},T=()=>({name:``,type:`text`,label:``,placeholder:``,required:!1}),ne={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 E({choices:e,onChange:t}){return(0,p.jsx)(n.i,{label:`Choices`,hint:`The options people pick from.`,children:(0,p.jsxs)(`div`,{className:`flex flex-col gap-2`,children:[e.length===0&&(0,p.jsx)(`span`,{className:`text-[12px] text-foreground/40 font-medium px-1`,children:`No choices yet — add the first one.`}),e.map((r,a)=>(0,p.jsxs)(`div`,{className:`flex items-center gap-2`,children:[(0,p.jsx)(`input`,{type:`text`,value:r,"aria-label":`Choice ${a+1}`,placeholder:`e.g. Under 1,000`,onChange:n=>t(e.map((e,t)=>t===a?n.target.value:e)),className:n.c}),(0,p.jsx)(n.o,{icon:i.o,tone:`danger`,title:`Remove choice ${a+1}`,onClick:()=>t(e.filter((e,t)=>t!==a)),children:`Remove`})]},a)),(0,p.jsx)(`div`,{children:(0,p.jsx)(n.o,{icon:i.G,onClick:()=>t([...e,``]),children:`Add choice`})})]})})}function D(){let{userRole:g}=n.dr(),_=(0,ee.useNavigate)(),v=n.Na(),y=()=>{let t=(typeof window<`u`?window.__FBOS_FORMS__:null)||{},n={...e.t,contact:v?.defaultConfigs?.contactForm||e.t.contact,support:v?.defaultConfigs?.supportForm||e.t.support};for(let[e,r]of Object.entries(t))n[e]=r;return n},[C,w]=(0,f.useState)(()=>{try{if(typeof window<`u`){let e=localStorage.getItem(`fbos_swr_forms`);if(e)return JSON.parse(e)}let t={...e.t,contact:v?.defaultConfigs?.contactForm||e.t.contact,support:v?.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{}}}),[D,O]=(0,f.useState)(()=>!(typeof window<`u`&&localStorage.getItem(`fbos_swr_forms`))),[k,A]=(0,f.useState)({}),[j,M]=(0,f.useState)(null),[N,re]=(0,f.useState)(new Set),P=u.n(),{schedules:F}=o._(),[I,L]=(0,f.useState)({}),R=(0,f.useRef)(null),[z,B]=(0,f.useState)(null),[ie,V]=(0,f.useState)(!1),[H,U]=(0,f.useState)({}),W=(0,f.useRef)({}),G=(e,t)=>{W.current={...W.current,[e]:t},U(W.current)};(0,f.useEffect)(()=>{K()},[]);let K=async()=>{try{O(!0);let e=await(0,m.getDocs)((0,m.collection)(n.ka,`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)}}),re(r);for(let t of[`pubForm`,`userForm`])e.docs.some(e=>e.id===t)&&(0,m.deleteDoc)((0,m.doc)(n.ka,`sys_forms`,t)).catch(()=>{});let i=y();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{O(!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}),A(e=>({...e,[i]:!0}));try{await(0,m.setDoc)((0,m.doc)(n.ka,`sys_forms`,i),r),await(0,m.deleteDoc)((0,m.doc)(n.ka,`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(()=>{A(e=>({...e,[i]:!1}))},500)}}else{w(t=>({...t,[e]:r})),A(t=>({...t,[e]:!0}));try{await(0,m.setDoc)((0,m.doc)(n.ka,`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(()=>{A(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}),ae=async e=>{if(!h.has(e)){V(!0);try{await(0,m.deleteDoc)((0,m.doc)(n.ka,`sys_forms`,e)),w(t=>{let n={...t};return delete n[e],n}),_(`/forms`)}catch(e){console.error(`Failed to delete form`,e)}finally{V(!1),B(null)}}},oe=async e=>{if(!N.has(e)){B(null);return}V(!0);let t=(typeof window<`u`?window.__FBOS_FORMS__:null)||{},r=h.has(e)||!!t[e]||!!v?.defaultConfigs?.[e]||!!v?.defaultConfigs?.[`${e}Form`];try{r?(A(t=>({...t,[e]:!0})),await(0,m.deleteDoc)((0,m.doc)(n.ka,`sys_forms`,e)),localStorage.removeItem(`fbos_form_${e}`),localStorage.removeItem(`fbos_custom_form_${e}`),await K(),setTimeout(()=>A(t=>({...t,[e]:!1})),500)):await q(e,y().contact||y().support)}catch(e){console.error(`Reset failed:`,e)}finally{V(!1),B(null)}};if(g!==`admin`)return(0,p.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,p.jsx)(c.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]),se=(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,p.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,p.jsxs)(`div`,{className:`flex items-center justify-between gap-2 flex-wrap`,children:[(0,p.jsxs)(`span`,{className:`text-[13px] font-bold text-foreground`,children:[`Question `,a+1,r.type===`schedule`&&(0,p.jsxs)(`span`,{className:`font-medium text-foreground/50`,children:[` · A time to book — `,x(r,F)]})]}),(0,p.jsxs)(`div`,{className:`flex items-center gap-1.5`,children:[(0,p.jsx)(n.o,{icon:i._n,disabled:a===0,title:`Move up`,onClick:()=>l(-1),children:`Up`}),(0,p.jsx)(n.o,{icon:i.xn,disabled:a===o.length-1,title:`Move down`,onClick:()=>l(1),children:`Down`}),(0,p.jsx)(n.o,{icon:i.C,tone:`danger`,title:`Remove question ${a+1}`,onClick:()=>Z(e,t,o.filter((e,t)=>t!==a)),children:`Remove`})]})]}),(0,p.jsx)(n.x,{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:te(r,e,o)},!1),onBlur:()=>X(e)}),(0,p.jsx)(n._,{label:`Kind of answer`,hint:`Sets the box people type into and what counts as a valid answer.`,value:r.type||`text`,options:b(r.type,F.length>0),allowEmpty:!1,onChange:c}),(0,p.jsx)(n.C,{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,p.jsx)(E,{choices:r.options||[],onChange:e=>s({options:e},!0)}),r.type===`schedule`&&(0,p.jsxs)(p.Fragment,{children:[(0,p.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:n.wn(r).length?void 0:`Pick at least one schedule`,children:(0,p.jsx)(d.t,{schedules:F,selected:n.wn(r),onPick:e=>{s({schedules:n.in(n.wn(r),e,F)},!0)}})}),n.On(F.filter(e=>n.wn(r).includes(e.id)))&&(0,p.jsx)(n._,{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:n.Cn(r),options:n.N,allowEmpty:!1,onChange:e=>s({party:n.Cn({party:e}),together:e===`all`},!0)}),(0,p.jsx)(n._,{label:`How should the booking look?`,value:r.look||`compact`,options:n.j,allowEmpty:!1,onChange:e=>s({look:e===`calendar`?`calendar`:`compact`},!0)})]}),r.type===`file`&&(0,p.jsx)(n.x,{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,p.jsx)(n.x,{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,p.jsx)(n.x,{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)},ce=(e,t)=>{let r=H[e]||t,a=h.has(e),o=r.formType||`public`,s=r.fields||[],c=N.has(e);return(0,p.jsxs)(`div`,{className:`flex flex-col gap-4`,children:[(0,p.jsxs)(n.h,{icon:i.x,title:`Basics`,description:`What people see at the top of this form and on its button.`,children:[(0,p.jsx)(n.x,{label:`Form name`,hint:`The heading at the top of the form.`,value:r.title||``,placeholder:`e.g. Get in touch`,onChange:t=>J(e,r,{title:t}),onBlur:()=>X(e)}),(0,p.jsx)(n.x,{label:`Button text`,hint:`The words on the button that sends the form.`,value:r.buttonName||r.submitText||``,placeholder:`e.g. Send message`,onChange:t=>J(e,r,{buttonName:t,submitText:t}),onBlur:()=>X(e)})]}),(0,p.jsx)(n.h,{icon:i.h,title:`Who it is for`,description:`Who can fill this in, and where their answers land.`,children:(0,p.jsx)(n._,{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,r,{formType:t})})}),(0,p.jsx)(n.h,{icon:i.P,title:`After sending`,description:`What happens the moment someone sends this form.`,children:(0,p.jsx)(n.x,{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:r.redirectTo||``,placeholder:`/pricing`,onChange:t=>J(e,r,{redirectTo:t}),onBlur:()=>X(e)})}),(0,p.jsxs)(n.h,{icon:i.gt,title:`Questions`,description:`Everything this form asks for, in the order people answer it.`,actions:({open:t})=>(0,p.jsx)(n.o,{icon:i.G,compact:!0,title:`Add a question`,onClick:()=>{t(),Z(e,r,[...s,T()])},children:`Add question`}),children:[s.length===0?(0,p.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)=>se(e,r,t,n,s)),s.length>0&&(0,p.jsx)(`div`,{className:`flex justify-start`,children:(0,p.jsx)(n.o,{icon:i.G,onClick:()=>Z(e,r,[...s,T()]),children:`Add question`})})]}),(c||!a)&&(0,p.jsxs)(`div`,{className:`flex flex-wrap items-center gap-2 pt-1`,children:[c&&(0,p.jsx)(n.o,{icon:i.L,tone:`danger`,compact:!0,title:`Reset this form`,onClick:()=>B({kind:`reset`,id:e}),children:`Reset this form`}),!a&&(0,p.jsx)(n.o,{icon:i.C,tone:`danger`,compact:!0,title:`Delete this form`,onClick:()=>B({kind:`delete`,id:e}),children:`Delete this form`})]})]})};return(0,p.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,p.jsx)(n.sr.div,{initial:{opacity:0,y:20},animate:{opacity:1,y:0},className:`mb-6 flex items-center justify-between`,children:(0,p.jsxs)(`div`,{children:[(0,p.jsx)(t.t,{children:`Forms`}),(0,p.jsxs)(`div`,{className:`flex items-center gap-2 text-foreground/40 font-bold uppercase tracking-[0.2em] text-[11px]`,children:[(0,p.jsx)(`span`,{className:`w-8 h-[1px] bg-foreground/10`}),`/forms`,$?`/${$}`:``]})]})}),(0,p.jsxs)(`div`,{className:`flex flex-col gap-6 flex-1 pb-16`,children:[(0,p.jsx)(r.t,{}),(0,p.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,p.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,p.jsxs)(`div`,{className:`min-w-0`,children:[(0,p.jsx)(`h2`,{className:`text-lg md:text-xl font-bold text-foreground tracking-tight leading-tight md:leading-7`,children:`Your forms`}),(0,p.jsxs)(`p`,{className:`text-[12.5px] md:text-[14px] font-medium text-foreground/60 mt-1 md:mt-2 leading-relaxed`,children:[(0,p.jsx)(`span`,{className:`md:hidden`,children:`Look a form over and touch it up. Answers arrive in your Inbox.`}),(0,p.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,p.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&&!D?(0,p.jsx)(`div`,{className:`flex flex-col gap-4`,children:(0,p.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,p.jsx)(i.V,{className:`w-6 h-6 text-foreground/40`}),(0,p.jsx)(`p`,{className:`text-[13px] font-bold text-foreground/60`,children:`You have no forms yet.`}),(0,p.jsx)(`p`,{className:`text-[12.5px] text-foreground/55 font-medium leading-relaxed text-center max-w-md`,children:ne.firstForm})]})}):(0,p.jsxs)(`div`,{className:`flex flex-col gap-4`,children:[(0,p.jsx)(n.cr,{children:Object.entries(C).map(([e,t])=>{let r=H[e]||t,a=I[e],o=k[e],s=(r.fields||[]).length;return(0,p.jsxs)(n.sr.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,d.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 ${a?`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,p.jsxs)(`div`,{className:`flex flex-row justify-between w-full gap-2 ${P?`items-start`:`items-center`}`,children:[(0,p.jsxs)(`div`,{className:`flex flex-col gap-1 min-w-0 flex-1 pr-2 sm:pr-4`,children:[(0,p.jsxs)(`div`,{className:`flex items-center gap-2`,children:[(0,p.jsx)(`h3`,{className:`text-[14px] font-bold text-foreground break-words ml-1 leading-snug`,children:r.title||`Untitled form`}),o&&(0,p.jsx)(i.ht,{className:`w-3 h-3 animate-spin text-accent ml-2 shrink-0`})]}),(0,p.jsxs)(`div`,{className:`flex items-center gap-2 mt-1.5 ml-1`,children:[(0,p.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,p.jsx)(`span`,{className:`w-1.5 h-1.5 rounded-full shrink-0 ${r.formType===`private`?`bg-blue-500`:`bg-emerald-500`}`}),S[r.formType||`public`]]}),(0,p.jsx)(`span`,{className:`max-sm:hidden text-[11px] font-medium text-foreground/45`,children:s===1?`1 question`:`${s} questions`})]})]}),P?(0,p.jsxs)(`div`,{className:`flex items-center gap-0.5 shrink-0 -mt-0.5 -mr-1.5`,children:[(0,p.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,p.jsx)(i.Bt,{className:`w-4 h-4`})}),(0,p.jsx)(`button`,{type:`button`,title:a?`Close this form`:`Open this form`,"aria-label":a?`Close this form`:`Open this form`,"aria-expanded":a,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,p.jsx)(i.on,{className:`w-4 h-4 transition-transform duration-300 ${a?`rotate-180`:``}`})})]}):(0,p.jsxs)(`div`,{className:`flex items-center gap-1 shrink-0`,children:[(0,p.jsx)(n.o,{icon:i.Bt,title:`Preview this form`,onClick:e=>{e.stopPropagation(),M(r)},children:`Preview`}),(0,p.jsx)(`button`,{type:`button`,title:a?`Close this form`:`Open this form`,"aria-label":a?`Close this form`:`Open this form`,"aria-expanded":a,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,p.jsx)(i.on,{className:`w-4 h-4 transition-transform duration-300 ${a?`rotate-180`:``}`})})]})]}),(0,p.jsx)(n.cr,{children:a&&(0,p.jsx)(n.sr.div,{initial:{height:0,opacity:0},animate:{height:`auto`,opacity:1},exit:{height:0,opacity:0},transition:n.T,className:`overflow-hidden mt-4 pt-4 border-t border-[var(--panel-border)]/50`,onClick:e=>e.stopPropagation(),children:ce(e,t)})})]},t._uiKey||e)})}),D&&(0,p.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,p.jsx)(i.ht,{className:`w-4 h-4 animate-spin text-accent`}),(0,p.jsx)(`span`,{className:`text-[12px] font-bold text-foreground/50 tracking-wider uppercase select-none`,children:`Loading your forms`})]})]})})]})]}),(0,p.jsx)(s.t,{isOpen:!!z,onCancel:()=>B(null),onConfirm:()=>{z&&(z.kind===`delete`?ae(z.id):oe(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:ie}),j&&(0,p.jsx)(a.t,{formConfig:j,onClose:()=>M(null)}),(0,p.jsx)(l.t,{})]})}exports.FormsAdmin=D;