your-ai-workflow-firebase-os 2.0.1 → 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 (183) hide show
  1. package/dist/AccessNotice-BZ5Gt1nP.js +40 -0
  2. package/dist/AccessNotice-CN7kc70o.cjs +1 -0
  3. package/dist/{AddressField-R-HvndkG.js → AddressField-9Sqn8TvC.js} +3 -3
  4. package/dist/{AddressField-BkzFOo2t.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-BlYHb5e0.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-9J_YeJrb.js → TimeZoneField-DkI1Bkcz.js} +3382 -5513
  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-D0gLVNTL.cjs → bake-n2wyFw0B.cjs} +1 -1
  96. package/dist/{bake-OErV2MLy.js → bake-naZeMu98.js} +14 -14
  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/{dist-_zWHDDrc.js → dist-DUPvBnOA.js} +1 -1
  108. package/dist/email-BfnZnMwD.cjs +1 -0
  109. package/dist/email-Ddj8Dlu6.js +58 -0
  110. package/dist/{fileBytes-B0qxHYQL.cjs → fileBytes-BJPaiX9Y.cjs} +1 -1
  111. package/dist/{fileBytes-uhq3pGCS.js → fileBytes-bjgvCfWu.js} +2 -2
  112. package/dist/forms-Bvx9HTM6.js +75 -0
  113. package/dist/forms-CmNeTETW.cjs +1 -0
  114. package/dist/lib/ThemeContext.d.ts +0 -14
  115. package/dist/lib/bareImgWatch.d.ts +6 -1
  116. package/dist/lib/localEdits.d.ts +2 -0
  117. package/dist/lib/pageDesignLines.d.ts +1 -1
  118. package/dist/lib/paymentProducts.d.ts +8 -0
  119. package/dist/lib/payments.d.ts +11 -1
  120. package/dist/lib/people.d.ts +9 -0
  121. package/dist/lib/recordsKey.d.ts +24 -0
  122. package/dist/{lucide-react-DiyP8FA_.js → lucide-react-CA7GD7Nv.js} +8 -8
  123. package/dist/notices-B7iIrIEg.js +29 -0
  124. package/dist/notices-upMg8UVh.cjs +1 -0
  125. package/dist/openOnArrival-Buwqb86D.cjs +1 -0
  126. package/dist/openOnArrival-S2K6v-lB.js +35 -0
  127. package/dist/pageFiles--Ih60ITP.js +45 -0
  128. package/dist/pageFiles-UtBmlOcD.cjs +1 -0
  129. package/dist/pages/PagesAdmin.d.ts +69 -7
  130. package/dist/{pdf-DLuvpvHg.js → pdf-DRXcPGkr.js} +1 -1
  131. package/dist/{pdf.worker.min-C0gkd2Ec.js → pdf.worker.min-CfKZezeM.js} +1 -1
  132. package/dist/people-2jZE_pdI.js +102 -0
  133. package/dist/people-BpVvIr9-.cjs +1 -0
  134. package/dist/personName-CFw3pxuu.js +18 -0
  135. package/dist/personName-CbzN_i57.cjs +1 -0
  136. package/dist/publishSteps-C1cDFzzB.js +88 -0
  137. package/dist/publishSteps-SSm8afDw.cjs +1 -0
  138. package/dist/recordLock-DHVvI9bP.js +61 -0
  139. package/dist/recordLock-DWeIxiwh.cjs +1 -0
  140. package/dist/recordsKey-B7QrxdeU.cjs +1 -0
  141. package/dist/recordsKey-D5-wC0Aw.js +141 -0
  142. package/dist/registrationFields-CLeR2lQJ.js +181 -0
  143. package/dist/registrationFields-v4pOoRdn.cjs +1 -0
  144. package/dist/renderer.cjs.js +1 -1
  145. package/dist/renderer.es.js +1 -1
  146. package/dist/roles-D6VaHWfV.js +147 -0
  147. package/dist/roles-DQUFFBQe.cjs +1 -0
  148. package/dist/scheduleData-ATN8w5hI.js +727 -0
  149. package/dist/scheduleData-Cltj0ABZ.cjs +1 -0
  150. package/dist/server.cjs.js +6 -6
  151. package/dist/server.es.js +716 -715
  152. package/dist/serviceStatus-TQyZO_Y_.cjs +1 -0
  153. package/dist/serviceStatus-vS8AI7SZ.js +125 -0
  154. package/dist/tabAudience-BqpN6dsR.cjs +1 -0
  155. package/dist/tabAudience-CRyMvv0v.js +34 -0
  156. package/dist/transactions-BqMQDRx3.js +343 -0
  157. package/dist/transactions-CufFrdAM.cjs +1 -0
  158. package/dist/useIsPhone-BVGx_X3e.js +13 -0
  159. package/dist/useIsPhone-o63tNneA.cjs +1 -0
  160. package/dist/{validate-DzSJWuyL.js → validate-CmC_tLK-.js} +433 -351
  161. package/dist/validate-DZMwqSrb.cjs +103 -0
  162. package/dist/vite/validate.d.ts +14 -0
  163. package/dist/vite.cjs.js +1 -1
  164. package/dist/vite.es.js +1 -1
  165. package/dist/your-ai-workflow-firebase-os.cjs.js +15 -1431
  166. package/dist/your-ai-workflow-firebase-os.css +1 -1
  167. package/dist/your-ai-workflow-firebase-os.es.js +11695 -35911
  168. package/package.json +1 -1
  169. package/src/index.css +122 -2
  170. package/dist/ContactPopup-DF8qQCoY.cjs +0 -12
  171. package/dist/PhoneInputField-Btx07xvM.js +0 -2
  172. package/dist/aiModels-BIhoTNH0.cjs +0 -1
  173. package/dist/validate-e48WXJdP.cjs +0 -103
  174. /package/dist/{address-DI1YaCI4.cjs → address-Bsb8COq2.cjs} +0 -0
  175. /package/dist/{address-Ca1h_UZX.js → address-C2bHNxJU.js} +0 -0
  176. /package/dist/{dist-BLGlDv1e.cjs → dist-E4jTFPs7.cjs} +0 -0
  177. /package/dist/{lucide-react-BYniZ3lQ.cjs → lucide-react-BwV6L6Is.cjs} +0 -0
  178. /package/dist/{mediaKind-dk396a03.cjs → mediaKind-D0MWyv6b.cjs} +0 -0
  179. /package/dist/{mediaKind-De2Cx_kB.js → mediaKind-DmKMsjeY.js} +0 -0
  180. /package/dist/{pdf-CC5g01eC.cjs → pdf-jLjjhvjp.cjs} +0 -0
  181. /package/dist/{pdf.worker.min-pI_P-OCl.cjs → pdf.worker.min-bLgNWd7w.cjs} +0 -0
  182. /package/dist/{verifiedAccount-C1iCxopN.js → verifiedAccount-DRbRFJ6H.js} +0 -0
  183. /package/dist/{verifiedAccount-D3OeaOBo.cjs → verifiedAccount-DScyKk96.cjs} +0 -0
@@ -0,0 +1,40 @@
1
+ import "react";
2
+ import { jsx as e, jsxs as t } from "react/jsx-runtime";
3
+ import { Link as n } from "react-router-dom";
4
+ //#region src/components/AccessNotice.tsx
5
+ function r({ tone: n, title: r, message: i, action: a }) {
6
+ let o = n === "red" ? "border-red-500/20" : "border-amber-500/25", s = n === "red" ? "bg-red-500/5" : "bg-amber-500/5", c = n === "red" ? "text-red-500" : "text-amber-500";
7
+ return /* @__PURE__ */ e("div", {
8
+ className: "flex-1 flex flex-col items-center justify-center relative z-10 min-h-[60vh] fbos-fade-in",
9
+ children: /* @__PURE__ */ t("div", {
10
+ className: `glass-panel p-8 md:p-10 rounded-3xl border ${o} text-center shadow-xl max-w-sm w-full relative overflow-hidden`,
11
+ children: [
12
+ /* @__PURE__ */ e("div", { className: `absolute inset-0 ${s}` }),
13
+ /* @__PURE__ */ e("h2", {
14
+ className: `text-2xl font-black ${c} mb-3 relative z-10 tracking-tight`,
15
+ children: r
16
+ }),
17
+ /* @__PURE__ */ e("p", {
18
+ className: "text-[14px] text-foreground/70 font-medium leading-relaxed relative z-10 mb-6",
19
+ children: i
20
+ }),
21
+ /* @__PURE__ */ e("div", {
22
+ className: "relative z-10",
23
+ children: a
24
+ })
25
+ ]
26
+ })
27
+ });
28
+ }
29
+ var i = "w-full block py-2.5 bg-foreground/5 hover:bg-foreground/10 text-foreground text-[14px] font-bold rounded-xl transition-colors", a = "No access", o = "You do not have access to view this page. If you think you should, ask whoever runs this app.", s = () => /* @__PURE__ */ e(r, {
30
+ tone: "amber",
31
+ title: a,
32
+ message: o,
33
+ action: /* @__PURE__ */ e(n, {
34
+ to: "/dashboard",
35
+ className: i,
36
+ children: "Back to dashboard"
37
+ })
38
+ }), c = s, l = s;
39
+ //#endregion
40
+ export { i as a, s as i, l as n, c as r, r as t };
@@ -0,0 +1 @@
1
+ const e=require(`./chunk-CiTBaPhY.cjs`);let t=require(`react`);t=e.a(t,1);let n=require(`react/jsx-runtime`),r=require(`react-router-dom`);function i({tone:e,title:t,message:r,action:i}){let a=e===`red`?`border-red-500/20`:`border-amber-500/25`,o=e===`red`?`bg-red-500/5`:`bg-amber-500/5`,s=e===`red`?`text-red-500`:`text-amber-500`;return(0,n.jsx)(`div`,{className:`flex-1 flex flex-col items-center justify-center relative z-10 min-h-[60vh] fbos-fade-in`,children:(0,n.jsxs)(`div`,{className:`glass-panel p-8 md:p-10 rounded-3xl border ${a} text-center shadow-xl max-w-sm w-full relative overflow-hidden`,children:[(0,n.jsx)(`div`,{className:`absolute inset-0 ${o}`}),(0,n.jsx)(`h2`,{className:`text-2xl font-black ${s} mb-3 relative z-10 tracking-tight`,children:t}),(0,n.jsx)(`p`,{className:`text-[14px] text-foreground/70 font-medium leading-relaxed relative z-10 mb-6`,children:r}),(0,n.jsx)(`div`,{className:`relative z-10`,children:i})]})})}var a=`w-full block py-2.5 bg-foreground/5 hover:bg-foreground/10 text-foreground text-[14px] font-bold rounded-xl transition-colors`,o=`No access`,s=`You do not have access to view this page. If you think you should, ask whoever runs this app.`,c=()=>(0,n.jsx)(i,{tone:`amber`,title:o,message:s,action:(0,n.jsx)(r.Link,{to:`/dashboard`,className:a,children:`Back to dashboard`})}),l=c,u=c;Object.defineProperty(exports,`a`,{enumerable:!0,get:function(){return a}}),Object.defineProperty(exports,`i`,{enumerable:!0,get:function(){return c}}),Object.defineProperty(exports,`n`,{enumerable:!0,get:function(){return u}}),Object.defineProperty(exports,`r`,{enumerable:!0,get:function(){return l}}),Object.defineProperty(exports,`t`,{enumerable:!0,get:function(){return i}});
@@ -1,6 +1,6 @@
1
- import { F as e, ct as t, ht as n, o as r, on as i } from "./lucide-react-DiyP8FA_.js";
2
- import { o as a, t as o } from "./address-Ca1h_UZX.js";
3
- import { n as s, t as c } from "./dist-_zWHDDrc.js";
1
+ import { F as e, ct as t, ht as n, o as r, on as i } from "./lucide-react-CA7GD7Nv.js";
2
+ import { o as a, t as o } from "./address-C2bHNxJU.js";
3
+ import { n as s, t as c } from "./dist-DUPvBnOA.js";
4
4
  import { useEffect as l, useRef as u, useState as d } from "react";
5
5
  import { jsx as f, jsxs as p } from "react/jsx-runtime";
6
6
  //#region src/lib/countryList.ts
@@ -1 +1 @@
1
- require(`./chunk-CiTBaPhY.cjs`);const e=require(`./lucide-react-BYniZ3lQ.cjs`),t=require(`./address-DI1YaCI4.cjs`),n=require(`./dist-BLGlDv1e.cjs`);let r=require(`react`),i=require(`react/jsx-runtime`);var a=null;function o(){return a||(a=n.t.map(e=>{let t=n.n(e);return{iso2:t.iso2,name:t.name}}).sort((e,t)=>e.name.localeCompare(t.name)),a)}var s=e=>o().find(t=>t.iso2===String(e||``).toLowerCase())?.name||``,c={"united states of america":`us`,usa:`us`,"u.s.":`us`,"u.s.a.":`us`,uk:`gb`,"great britain":`gb`,england:`gb`,scotland:`gb`,wales:`gb`,"northern ireland":`gb`,"russian federation":`ru`,deutschland:`de`,españa:`es`,italia:`it`,brasil:`br`,"south korea":`kr`,"republic of korea":`kr`,"north korea":`kp`,czechia:`cz`,"czech republic":`cz`,"viet nam":`vn`,türkiye:`tr`,"the netherlands":`nl`,holland:`nl`,uae:`ae`,"united arab emirates":`ae`,"hong kong sar":`hk`,macau:`mo`,"ivory coast":`ci`,"côte d'ivoire":`ci`,eswatini:`sz`,"myanmar (burma)":`mm`,burma:`mm`};function l(e){let t=String(e||``).trim().toLowerCase();if(!t)return``;if(/^[a-z]{2}$/.test(t)&&o().some(e=>e.iso2===t))return t;if(c[t])return c[t];let n=o().find(e=>e.name.toLowerCase()===t);return n?n.iso2:o().find(e=>t.startsWith(e.name.toLowerCase())||e.name.toLowerCase().startsWith(t))?.iso2||``}function u(e){let t=l(e);return t?s(t):String(e||``).trim()}var d=`https://photon.komoot.io/api/`;function f(e){let t=(e.street||``).trim(),n=(e.housenumber||``).trim();return t?n?`${n} ${t}`:t:(e.name||``).trim()}var p=e=>(e.city||e.town||e.village||e.district||e.county||``).trim();function m(e,t){let n=e.properties;if(!n)return null;let r=f(n),i=p(n);if(!r&&!i)return null;let a=(n.state||``).trim(),o=(n.postcode||``).trim(),s=(n.country||``).trim(),c=[a,o].filter(Boolean).join(` `);return{id:`${n.osm_type||`x`}${n.osm_id??t}-${t}`,label:[r,i,c,s].filter(Boolean).join(`, `),street:r,city:i,region:a,postcode:o,country:s,countryCode:(n.countrycode||``).trim().toLowerCase()}}function h(e){let t=new Set;return e.filter(e=>{let n=e.label.toLowerCase();return t.has(n)?!1:(t.add(n),!0)})}async function g(e,t={}){let n=String(e||``).trim();if(n.length<3)return[];let r=`${d}?q=${encodeURIComponent(n)}&limit=${t.limit??6}`;try{let e=await fetch(r,{signal:t.signal});if(!e.ok)return[];let n=await e.json();return h((Array.isArray(n?.features)?n.features:[]).map(m).filter(e=>e!==null))}catch{return[]}}var _=`text-[13px] font-medium text-foreground/70 select-none mb-2`,v={borderRadius:`var(--input-radius, 0.75rem)`},y=`flex items-center h-12 w-full px-4 text-[15px] text-foreground transition-all duration-300 glass-panel`,b=`block h-12 w-full px-4 py-2 text-[15px] text-foreground transition-all duration-300 placeholder:text-foreground/40 focus:outline-none focus:border-accent glow-focus disabled:cursor-not-allowed disabled:opacity-50 glass-panel`,x=`flex-1 min-w-0 bg-transparent border-none outline-none shadow-none p-0 text-[15px] text-foreground placeholder:text-foreground/40 no-glow`;function S(e){let[t,n]=(0,r.useState)(!1),[i,a]=(0,r.useState)(!1),[o,s]=(0,r.useState)([]),[c,l]=(0,r.useState)(-1),u=(0,r.useRef)(!1),d=(0,r.useRef)(!1),f=(0,r.useRef)(null);return(0,r.useEffect)(()=>{if(u.current){u.current=!1;return}if(!d.current){s([]),a(!1),n(!1);return}let t=e.trim();if(t.length<3){s([]),a(!1),n(!1);return}let r=new AbortController;a(!0);let i=setTimeout(async()=>{let e=await g(t,{signal:r.signal});r.signal.aborted||(s(e),l(-1),a(!1),n(e.length>0))},250);return()=>{r.abort(),clearTimeout(i)}},[e]),(0,r.useEffect)(()=>{if(!t)return;let e=e=>{f.current?.contains(e.target)||n(!1)};return document.addEventListener(`pointerdown`,e,!0),()=>document.removeEventListener(`pointerdown`,e,!0)},[t]),{open:t,setOpen:n,busy:i,rows:o,active:c,setActive:l,boxRef:f,typed:d,take:e=>{u.current=!0,e(),n(!1),s([]),l(-1)},onKeyDown:(e,r)=>{if(e.key===`Escape`&&t){e.stopPropagation(),n(!1);return}!t||!o.length||(e.key===`ArrowDown`?(e.preventDefault(),l(e=>(e+1)%o.length)):e.key===`ArrowUp`?(e.preventDefault(),l(e=>(e<=0?o.length:e)-1)):e.key===`Enter`&&c>=0&&(e.preventDefault(),r(o[c])))}}}function C({label:t,value:n,disabled:a,onPick:s}){let[c,u]=(0,r.useState)(!1),[d,f]=(0,r.useState)(``),p=(0,r.useRef)(null),m=(0,r.useRef)(null);(0,r.useEffect)(()=>{if(!c){f(``);return}m.current?.focus();let e=e=>{p.current?.contains(e.target)||u(!1)};return document.addEventListener(`pointerdown`,e,!0),()=>document.removeEventListener(`pointerdown`,e,!0)},[c]);let h=d.trim().toLowerCase(),g=h?o().filter(e=>e.name.toLowerCase().includes(h)):o(),_=l(n);return(0,i.jsxs)(`div`,{className:`relative w-full`,ref:p,children:[(0,i.jsxs)(`button`,{type:`button`,disabled:a,onClick:()=>u(e=>!e),"aria-haspopup":`listbox`,"aria-expanded":c,"aria-label":t,className:`${y} justify-between gap-2 text-left cursor-pointer hover:border-accent/40 disabled:cursor-not-allowed disabled:opacity-50`,style:v,children:[(0,i.jsx)(`span`,{className:`truncate ${n?`text-foreground`:`text-foreground/40`}`,children:n||`Country`}),(0,i.jsx)(e.on,{className:`w-3.5 h-3.5 shrink-0 text-foreground/50 transition-transform duration-300 ${c?`rotate-180`:``}`})]}),c&&(0,i.jsxs)(`div`,{role:`listbox`,"aria-label":t,className:`absolute z-[999999] top-[calc(100%+8px)] left-0 w-full glass-popover overflow-hidden`,style:v,children:[(0,i.jsxs)(`div`,{className:`flex items-center gap-2 px-3 h-11 border-b border-[var(--panel-border)]/50`,children:[(0,i.jsx)(e.F,{className:`w-3.5 h-3.5 shrink-0 text-foreground/35`}),(0,i.jsx)(`input`,{ref:m,value:d,onChange:e=>f(e.target.value),onKeyDown:e=>{if(e.key===`Escape`){e.stopPropagation(),u(!1);return}e.key===`Enter`&&(e.preventDefault(),g[0]&&(s(g[0].name),u(!1)))},placeholder:`Search countries`,"aria-label":`Search countries`,autoComplete:`off`,className:`${x} text-[14px]`})]}),(0,i.jsxs)(`div`,{className:`max-h-56 overflow-y-auto no-scrollbar p-1`,children:[n&&!h&&(0,i.jsxs)(`div`,{role:`option`,"aria-selected":!1,onClick:()=>{s(``),u(!1)},className:`flex items-center gap-2.5 px-3 py-2.5 text-[13px] font-medium text-foreground/60 hover:bg-foreground/5 cursor-pointer`,style:{borderRadius:`calc(var(--input-radius, 0.75rem) - 0.25rem)`},children:[(0,i.jsx)(e.o,{className:`w-3.5 h-3.5 shrink-0 text-foreground/35`}),(0,i.jsx)(`span`,{className:`truncate`,children:`No country`})]}),g.map(e=>(0,i.jsx)(`div`,{role:`option`,"aria-selected":e.iso2===_,onClick:()=>{s(e.name),u(!1)},className:`flex items-center px-3 py-2.5 transition-colors font-medium text-[13px] cursor-pointer ${e.iso2===_?`bg-accent/10 text-accent font-bold`:`text-foreground/80 hover:bg-foreground/5 hover:text-foreground`}`,style:{borderRadius:`calc(var(--input-radius, 0.75rem) - 0.25rem)`},children:(0,i.jsx)(`span`,{className:`truncate`,children:e.name})},e.iso2)),g.length===0&&(0,i.jsx)(`div`,{className:`px-3 py-2.5 text-[13px] text-foreground/40`,children:`No match`})]})]})]})}function w({id:n,label:r,value:a,onChange:o,required:s=!1,disabled:c=!1,placeholder:d,error:f}){let p=S(a.street),m=t.o(l(a.country)),h=e=>o({...a,...e}),g=e=>p.take(()=>o({street:e.street,city:e.city,region:e.region,postcode:e.postcode,country:u(e.countryCode||e.country)||a.country})),w=(e,t,n,o,s)=>(0,i.jsx)(`div`,{className:o,children:(0,i.jsx)(`input`,{type:`text`,disabled:c,value:a[e],onChange:t=>h({[e]:t.target.value}),placeholder:n,"aria-label":`${r} — ${t}`,autoComplete:s,className:b,style:v})},e),T=m.postal?`col-span-1`:`col-span-2`,E=m.region?`col-span-1`:`col-span-2`,D=!!(a.country||a.city||a.region||a.postcode);return(0,i.jsxs)(`div`,{className:`flex flex-col w-full`,ref:p.boxRef,children:[(0,i.jsx)(`label`,{className:_,htmlFor:n,children:r}),(0,i.jsxs)(`div`,{className:`relative w-full`,children:[(0,i.jsxs)(`div`,{className:`${y} gap-2.5 focus-within:border-accent glow-focus ${f?`border-red-500/50`:``}`,style:v,children:[(0,i.jsx)(e.ct,{className:`w-4 h-4 shrink-0 text-foreground/40`}),(0,i.jsx)(`input`,{id:n,type:`text`,required:s,disabled:c,value:a.street,onChange:e=>{p.typed.current=!0,h({street:e.target.value})},onFocus:()=>{p.rows.length&&p.setOpen(!0)},onKeyDown:e=>p.onKeyDown(e,g),role:`combobox`,"aria-expanded":p.open,"aria-autocomplete":`list`,"aria-controls":`${n}-list`,placeholder:d||`Start typing your address`,autoComplete:`address-line1`,className:x}),p.busy&&(0,i.jsx)(e.ht,{className:`w-3.5 h-3.5 shrink-0 text-foreground/30 animate-spin`})]}),p.open&&(0,i.jsx)(`div`,{id:`${n}-list`,role:`listbox`,"aria-label":r,className:`absolute z-[999999] top-[calc(100%+8px)] left-0 w-full glass-popover overflow-hidden p-1`,style:v,children:p.rows.map((t,n)=>(0,i.jsxs)(`div`,{role:`option`,"aria-selected":n===p.active,onMouseEnter:()=>p.setActive(n),onClick:()=>g(t),className:`flex items-center gap-2.5 px-3 py-2.5 transition-colors text-[13px] font-medium cursor-pointer ${n===p.active?`bg-accent/10 text-accent`:`text-foreground/80 hover:bg-foreground/5`}`,style:{borderRadius:`calc(var(--input-radius, 0.75rem) - 0.25rem)`},children:[(0,i.jsx)(e.ct,{className:`w-3.5 h-3.5 shrink-0 text-foreground/35`}),(0,i.jsx)(`span`,{className:`truncate`,children:t.label})]},t.id))})]}),(0,i.jsx)(`div`,{className:`mt-2.5`,children:(0,i.jsx)(C,{label:`${r} — country`,value:a.country,disabled:c,onPick:e=>h({country:e})})}),D&&(0,i.jsxs)(`div`,{className:`grid grid-cols-2 gap-2.5 mt-2.5`,children:[w(`city`,`city`,t.t[m.locality],`col-span-2`,`address-level2`),m.region&&w(`region`,`region`,t.t[m.region],T,`address-level1`),m.postal&&w(`postcode`,`postcode`,t.t[m.postal],E,`postal-code`)]}),f&&(0,i.jsx)(`p`,{className:`text-[13px] text-red-500 font-medium mt-1.5`,children:f})]})}exports.AddressField=w,exports.default=w;
1
+ require(`./chunk-CiTBaPhY.cjs`);const e=require(`./lucide-react-BwV6L6Is.cjs`),t=require(`./address-Bsb8COq2.cjs`),n=require(`./dist-E4jTFPs7.cjs`);let r=require(`react`),i=require(`react/jsx-runtime`);var a=null;function o(){return a||(a=n.t.map(e=>{let t=n.n(e);return{iso2:t.iso2,name:t.name}}).sort((e,t)=>e.name.localeCompare(t.name)),a)}var s=e=>o().find(t=>t.iso2===String(e||``).toLowerCase())?.name||``,c={"united states of america":`us`,usa:`us`,"u.s.":`us`,"u.s.a.":`us`,uk:`gb`,"great britain":`gb`,england:`gb`,scotland:`gb`,wales:`gb`,"northern ireland":`gb`,"russian federation":`ru`,deutschland:`de`,españa:`es`,italia:`it`,brasil:`br`,"south korea":`kr`,"republic of korea":`kr`,"north korea":`kp`,czechia:`cz`,"czech republic":`cz`,"viet nam":`vn`,türkiye:`tr`,"the netherlands":`nl`,holland:`nl`,uae:`ae`,"united arab emirates":`ae`,"hong kong sar":`hk`,macau:`mo`,"ivory coast":`ci`,"côte d'ivoire":`ci`,eswatini:`sz`,"myanmar (burma)":`mm`,burma:`mm`};function l(e){let t=String(e||``).trim().toLowerCase();if(!t)return``;if(/^[a-z]{2}$/.test(t)&&o().some(e=>e.iso2===t))return t;if(c[t])return c[t];let n=o().find(e=>e.name.toLowerCase()===t);return n?n.iso2:o().find(e=>t.startsWith(e.name.toLowerCase())||e.name.toLowerCase().startsWith(t))?.iso2||``}function u(e){let t=l(e);return t?s(t):String(e||``).trim()}var d=`https://photon.komoot.io/api/`;function f(e){let t=(e.street||``).trim(),n=(e.housenumber||``).trim();return t?n?`${n} ${t}`:t:(e.name||``).trim()}var p=e=>(e.city||e.town||e.village||e.district||e.county||``).trim();function m(e,t){let n=e.properties;if(!n)return null;let r=f(n),i=p(n);if(!r&&!i)return null;let a=(n.state||``).trim(),o=(n.postcode||``).trim(),s=(n.country||``).trim(),c=[a,o].filter(Boolean).join(` `);return{id:`${n.osm_type||`x`}${n.osm_id??t}-${t}`,label:[r,i,c,s].filter(Boolean).join(`, `),street:r,city:i,region:a,postcode:o,country:s,countryCode:(n.countrycode||``).trim().toLowerCase()}}function h(e){let t=new Set;return e.filter(e=>{let n=e.label.toLowerCase();return t.has(n)?!1:(t.add(n),!0)})}async function g(e,t={}){let n=String(e||``).trim();if(n.length<3)return[];let r=`${d}?q=${encodeURIComponent(n)}&limit=${t.limit??6}`;try{let e=await fetch(r,{signal:t.signal});if(!e.ok)return[];let n=await e.json();return h((Array.isArray(n?.features)?n.features:[]).map(m).filter(e=>e!==null))}catch{return[]}}var _=`text-[13px] font-medium text-foreground/70 select-none mb-2`,v={borderRadius:`var(--input-radius, 0.75rem)`},y=`flex items-center h-12 w-full px-4 text-[15px] text-foreground transition-all duration-300 glass-panel`,b=`block h-12 w-full px-4 py-2 text-[15px] text-foreground transition-all duration-300 placeholder:text-foreground/40 focus:outline-none focus:border-accent glow-focus disabled:cursor-not-allowed disabled:opacity-50 glass-panel`,x=`flex-1 min-w-0 bg-transparent border-none outline-none shadow-none p-0 text-[15px] text-foreground placeholder:text-foreground/40 no-glow`;function S(e){let[t,n]=(0,r.useState)(!1),[i,a]=(0,r.useState)(!1),[o,s]=(0,r.useState)([]),[c,l]=(0,r.useState)(-1),u=(0,r.useRef)(!1),d=(0,r.useRef)(!1),f=(0,r.useRef)(null);return(0,r.useEffect)(()=>{if(u.current){u.current=!1;return}if(!d.current){s([]),a(!1),n(!1);return}let t=e.trim();if(t.length<3){s([]),a(!1),n(!1);return}let r=new AbortController;a(!0);let i=setTimeout(async()=>{let e=await g(t,{signal:r.signal});r.signal.aborted||(s(e),l(-1),a(!1),n(e.length>0))},250);return()=>{r.abort(),clearTimeout(i)}},[e]),(0,r.useEffect)(()=>{if(!t)return;let e=e=>{f.current?.contains(e.target)||n(!1)};return document.addEventListener(`pointerdown`,e,!0),()=>document.removeEventListener(`pointerdown`,e,!0)},[t]),{open:t,setOpen:n,busy:i,rows:o,active:c,setActive:l,boxRef:f,typed:d,take:e=>{u.current=!0,e(),n(!1),s([]),l(-1)},onKeyDown:(e,r)=>{if(e.key===`Escape`&&t){e.stopPropagation(),n(!1);return}!t||!o.length||(e.key===`ArrowDown`?(e.preventDefault(),l(e=>(e+1)%o.length)):e.key===`ArrowUp`?(e.preventDefault(),l(e=>(e<=0?o.length:e)-1)):e.key===`Enter`&&c>=0&&(e.preventDefault(),r(o[c])))}}}function C({label:t,value:n,disabled:a,onPick:s}){let[c,u]=(0,r.useState)(!1),[d,f]=(0,r.useState)(``),p=(0,r.useRef)(null),m=(0,r.useRef)(null);(0,r.useEffect)(()=>{if(!c){f(``);return}m.current?.focus();let e=e=>{p.current?.contains(e.target)||u(!1)};return document.addEventListener(`pointerdown`,e,!0),()=>document.removeEventListener(`pointerdown`,e,!0)},[c]);let h=d.trim().toLowerCase(),g=h?o().filter(e=>e.name.toLowerCase().includes(h)):o(),_=l(n);return(0,i.jsxs)(`div`,{className:`relative w-full`,ref:p,children:[(0,i.jsxs)(`button`,{type:`button`,disabled:a,onClick:()=>u(e=>!e),"aria-haspopup":`listbox`,"aria-expanded":c,"aria-label":t,className:`${y} justify-between gap-2 text-left cursor-pointer hover:border-accent/40 disabled:cursor-not-allowed disabled:opacity-50`,style:v,children:[(0,i.jsx)(`span`,{className:`truncate ${n?`text-foreground`:`text-foreground/40`}`,children:n||`Country`}),(0,i.jsx)(e.on,{className:`w-3.5 h-3.5 shrink-0 text-foreground/50 transition-transform duration-300 ${c?`rotate-180`:``}`})]}),c&&(0,i.jsxs)(`div`,{role:`listbox`,"aria-label":t,className:`absolute z-[999999] top-[calc(100%+8px)] left-0 w-full glass-popover overflow-hidden`,style:v,children:[(0,i.jsxs)(`div`,{className:`flex items-center gap-2 px-3 h-11 border-b border-[var(--panel-border)]/50`,children:[(0,i.jsx)(e.F,{className:`w-3.5 h-3.5 shrink-0 text-foreground/35`}),(0,i.jsx)(`input`,{ref:m,value:d,onChange:e=>f(e.target.value),onKeyDown:e=>{if(e.key===`Escape`){e.stopPropagation(),u(!1);return}e.key===`Enter`&&(e.preventDefault(),g[0]&&(s(g[0].name),u(!1)))},placeholder:`Search countries`,"aria-label":`Search countries`,autoComplete:`off`,className:`${x} text-[14px]`})]}),(0,i.jsxs)(`div`,{className:`max-h-56 overflow-y-auto no-scrollbar p-1`,children:[n&&!h&&(0,i.jsxs)(`div`,{role:`option`,"aria-selected":!1,onClick:()=>{s(``),u(!1)},className:`flex items-center gap-2.5 px-3 py-2.5 text-[13px] font-medium text-foreground/60 hover:bg-foreground/5 cursor-pointer`,style:{borderRadius:`calc(var(--input-radius, 0.75rem) - 0.25rem)`},children:[(0,i.jsx)(e.o,{className:`w-3.5 h-3.5 shrink-0 text-foreground/35`}),(0,i.jsx)(`span`,{className:`truncate`,children:`No country`})]}),g.map(e=>(0,i.jsx)(`div`,{role:`option`,"aria-selected":e.iso2===_,onClick:()=>{s(e.name),u(!1)},className:`flex items-center px-3 py-2.5 transition-colors font-medium text-[13px] cursor-pointer ${e.iso2===_?`bg-accent/10 text-accent font-bold`:`text-foreground/80 hover:bg-foreground/5 hover:text-foreground`}`,style:{borderRadius:`calc(var(--input-radius, 0.75rem) - 0.25rem)`},children:(0,i.jsx)(`span`,{className:`truncate`,children:e.name})},e.iso2)),g.length===0&&(0,i.jsx)(`div`,{className:`px-3 py-2.5 text-[13px] text-foreground/40`,children:`No match`})]})]})]})}function w({id:n,label:r,value:a,onChange:o,required:s=!1,disabled:c=!1,placeholder:d,error:f}){let p=S(a.street),m=t.o(l(a.country)),h=e=>o({...a,...e}),g=e=>p.take(()=>o({street:e.street,city:e.city,region:e.region,postcode:e.postcode,country:u(e.countryCode||e.country)||a.country})),w=(e,t,n,o,s)=>(0,i.jsx)(`div`,{className:o,children:(0,i.jsx)(`input`,{type:`text`,disabled:c,value:a[e],onChange:t=>h({[e]:t.target.value}),placeholder:n,"aria-label":`${r} — ${t}`,autoComplete:s,className:b,style:v})},e),T=m.postal?`col-span-1`:`col-span-2`,E=m.region?`col-span-1`:`col-span-2`,D=!!(a.country||a.city||a.region||a.postcode);return(0,i.jsxs)(`div`,{className:`flex flex-col w-full`,ref:p.boxRef,children:[(0,i.jsx)(`label`,{className:_,htmlFor:n,children:r}),(0,i.jsxs)(`div`,{className:`relative w-full`,children:[(0,i.jsxs)(`div`,{className:`${y} gap-2.5 focus-within:border-accent glow-focus ${f?`border-red-500/50`:``}`,style:v,children:[(0,i.jsx)(e.ct,{className:`w-4 h-4 shrink-0 text-foreground/40`}),(0,i.jsx)(`input`,{id:n,type:`text`,required:s,disabled:c,value:a.street,onChange:e=>{p.typed.current=!0,h({street:e.target.value})},onFocus:()=>{p.rows.length&&p.setOpen(!0)},onKeyDown:e=>p.onKeyDown(e,g),role:`combobox`,"aria-expanded":p.open,"aria-autocomplete":`list`,"aria-controls":`${n}-list`,placeholder:d||`Start typing your address`,autoComplete:`address-line1`,className:x}),p.busy&&(0,i.jsx)(e.ht,{className:`w-3.5 h-3.5 shrink-0 text-foreground/30 animate-spin`})]}),p.open&&(0,i.jsx)(`div`,{id:`${n}-list`,role:`listbox`,"aria-label":r,className:`absolute z-[999999] top-[calc(100%+8px)] left-0 w-full glass-popover overflow-hidden p-1`,style:v,children:p.rows.map((t,n)=>(0,i.jsxs)(`div`,{role:`option`,"aria-selected":n===p.active,onMouseEnter:()=>p.setActive(n),onClick:()=>g(t),className:`flex items-center gap-2.5 px-3 py-2.5 transition-colors text-[13px] font-medium cursor-pointer ${n===p.active?`bg-accent/10 text-accent`:`text-foreground/80 hover:bg-foreground/5`}`,style:{borderRadius:`calc(var(--input-radius, 0.75rem) - 0.25rem)`},children:[(0,i.jsx)(e.ct,{className:`w-3.5 h-3.5 shrink-0 text-foreground/35`}),(0,i.jsx)(`span`,{className:`truncate`,children:t.label})]},t.id))})]}),(0,i.jsx)(`div`,{className:`mt-2.5`,children:(0,i.jsx)(C,{label:`${r} — country`,value:a.country,disabled:c,onPick:e=>h({country:e})})}),D&&(0,i.jsxs)(`div`,{className:`grid grid-cols-2 gap-2.5 mt-2.5`,children:[w(`city`,`city`,t.t[m.locality],`col-span-2`,`address-level2`),m.region&&w(`region`,`region`,t.t[m.region],T,`address-level1`),m.postal&&w(`postcode`,`postcode`,t.t[m.postal],E,`postal-code`)]}),f&&(0,i.jsx)(`p`,{className:`text-[13px] text-red-500 font-medium mt-1.5`,children:f})]})}exports.AddressField=w,exports.default=w;
@@ -0,0 +1 @@
1
+ require(`./chunk-CiTBaPhY.cjs`),require(`./PageTitle-CZhgmmDT.cjs`);const e=require(`./TimeZoneField-qs7NPR30.cjs`),t=require(`./lucide-react-BwV6L6Is.cjs`),n=require(`./mediaKind-D0MWyv6b.cjs`),r=require(`./TemplateDrive-DV8zNjYe.cjs`),i=require(`./ConfirmModal-Di9GR-vV.cjs`),a=require(`./fileBytes-BJPaiX9Y.cjs`),o=require(`./SystemTabContent-L3vGGF3P.cjs`);let s=require(`react`),c=require(`react/jsx-runtime`),l=require(`firebase/firestore`),u=require(`firebase/storage`);var d=[`pub_files`,`pub_files/pages`,`pub_form_uploads/pages`],f=/^image\/(jpe?g|png|webp|avif)$/i;async function p(t){try{let r=await(0,u.listAll)((0,u.ref)(e.ja,t)),i=r.items.map(e=>e.fullPath).filter(e=>!n.u(e)),a=await Promise.all(r.prefixes.map(e=>p(e.fullPath)));return[...i,...a.flat()]}catch{return[]}}var m=t=>RegExp(`max-age=${e.Jn}`).test(String(t||``));async function h(t){try{return await(0,u.getMetadata)((0,u.ref)(e.ja,t)),!0}catch{return!1}}async function g(t,r){let i=``;try{let n=await(0,u.getMetadata)((0,u.ref)(e.ja,t));i=String(n.contentType||``),m(n.cacheControl)||(await(0,u.updateMetadata)((0,u.ref)(e.ja,t),{cacheControl:e.Yn(t).cacheControl,...n.customMetadata?{customMetadata:n.customMetadata}:{}}),r.headersFixed++)}catch{r.skipped++;return}if(!f.test(i))return;let o=[{path:n.f(t),make:n.p},{path:n.v(t),make:n.y}].filter(e=>e.path),s=[];for(let e of o)await h(e.path)||s.push(e);if(!s.length)return;let c;try{c=await a.t(await(0,u.getDownloadURL)((0,u.ref)(e.ja,t)))}catch{r.skipped++;return}let l=t.slice(t.lastIndexOf(`/`)+1),d=new File([c],l,{type:i||c.type});for(let t of s)try{let n=await t.make(d,l);if(!n)continue;await(0,u.uploadBytes)((0,u.ref)(e.ja,t.path),n,e.Yn(t.path)),r.companionsMade++}catch{}}async function _(e={}){let{onProgress:t,signal:n}=e,r={done:0,total:0,headersFixed:0,companionsMade:0,skipped:0},i=await Promise.all(d.map(p)),a=[...new Set(i.flat())];r.total=a.length,t?.({...r});let o=0;return await Promise.all(Array.from({length:Math.min(4,a.length)},async()=>{for(;o<a.length;){if(n?.aborted)return;let e=a[o++];await g(e,r),r.done++,t?.({...r})}})),{...r}}var v=[`mem_files`,`user_files`,`admin_files`],y=e=>!e.sourceTab;function b(){let[n,r]=(0,s.useState)(null),[a,o]=(0,s.useState)(!1),[d,f]=(0,s.useState)(!1),[p,m]=(0,s.useState)(``),[h,g]=(0,s.useState)(0);(0,s.useEffect)(()=>{let t=!1;return Promise.all(v.map(async t=>{try{return(await(0,l.getDocs)((0,l.collection)(e.ka,t))).docs.map(e=>({collectionName:t,id:e.id,...e.data()}))}catch{return[]}})).then(e=>{t||r(e.flat())}),()=>{t=!0}},[]);let _=async()=>{if(!n)return;f(!0),m(``);let t=0;for(let r of n)try{let t=r.storagePath||r.downloadURL;t&&y(r)&&await(0,u.deleteObject)((0,u.ref)(e.ja,t)).catch(()=>{}),await(0,l.deleteDoc)((0,l.doc)(e.ka,r.collectionName,r.id)),g(e=>e+1)}catch(e){t+=1,console.error(`Could not delete ${r.collectionName}/${r.id}:`,e)}t>0?(m(`${t} file${t===1?``:`s`} could not be deleted. Reload and try again.`),r((await Promise.all(v.map(async t=>{try{return(await(0,l.getDocs)((0,l.collection)(e.ka,t))).docs.map(e=>({collectionName:t,id:e.id,...e.data()}))}catch{return[]}}))).flat())):r([]),f(!1),o(!1)};if(!n||n.length===0)return null;let b=n.filter(y).length,x=v.map(e=>({name:e,n:n.filter(t=>t.collectionName===e).length})).filter(e=>e.n>0);return(0,c.jsxs)(c.Fragment,{children:[(0,c.jsxs)(e.sr.div,{initial:{opacity:0,y:10},animate:{opacity:1,y:0},className:`mt-6 glass-panel border border-amber-500/25 bg-amber-500/[0.03] rounded-2xl md:rounded-3xl p-4 md:p-8`,children:[(0,c.jsxs)(`h3`,{className:`text-[17px] font-bold text-foreground tracking-tight mb-2`,children:[n.length,` leftover record`,n.length===1?``:`s`,` from the old Drive`]}),(0,c.jsx)(`p`,{className:`text-[14px] text-foreground/60 leading-relaxed mb-3 max-w-2xl`,children:`Drive used to have Internal, User and Admin folders. They are gone — this page is the only built-in folder now, and each page you have built keeps its own files. Nothing reads these records any more.`}),(0,c.jsxs)(`p`,{className:`text-[14px] text-foreground/60 leading-relaxed mb-3 max-w-2xl`,children:[b>0?`${b} ${b===1?`was`:`were`} uploaded through the old Drive screen, so ${b===1?`its file is`:`their files are`} deleted too. `:``,n.length-b>0?`${n.length-b} belong to files a page still shows, so only the leftover record goes — the ${n.length-b===1?`file stays`:`files stay`} where ${n.length-b===1?`it is`:`they are`}.`:``]}),(0,c.jsx)(`p`,{className:`text-[13px] text-foreground/50 font-medium mb-5`,children:x.map(e=>`${e.n} in ${e.name}`).join(` · `)}),p&&(0,c.jsx)(`p`,{className:`text-[13px] font-medium text-red-400 bg-red-500/10 border border-red-500/20 rounded-xl p-3 mb-4`,children:p}),(0,c.jsxs)(`button`,{onClick:()=>o(!0),disabled:d,className:`inline-flex items-center gap-2 px-5 py-2.5 rounded-xl text-[13px] font-bold bg-red-500/10 hover:bg-red-500/20 text-red-500 border border-red-500/20 transition-colors disabled:opacity-50`,children:[d?(0,c.jsx)(t.ht,{className:`w-4 h-4 animate-spin`}):(0,c.jsx)(t.C,{className:`w-4 h-4`}),d?`Deleting ${h} of ${n.length}…`:`Clean up all ${n.length} permanently`]})]}),(0,c.jsx)(i.t,{isOpen:a,title:`Delete the old Drive files`,message:(0,c.jsxs)(c.Fragment,{children:[`This permanently deletes `,(0,c.jsxs)(`strong`,{className:`text-foreground`,children:[n.length,` leftover record`,n.length===1?``:`s`]}),` `,`from `,x.map(e=>e.name).join(`, `),b>0&&(0,c.jsxs)(c.Fragment,{children:[`, along with the `,(0,c.jsxs)(`strong`,{className:`text-foreground`,children:[b,` file`,b===1?``:`s`]}),` uploaded through the old Drive screen`]}),`. It cannot be undone, and it covers every user's uploads, not only your own. Files that a page still shows are left alone.`]}),onConfirm:_,onCancel:()=>o(!1),isProcessing:d,confirmText:`Yes, delete them`})]})}function x(){let[n,r]=(0,s.useState)(null),[i,a]=(0,s.useState)(!1),[o,l]=(0,s.useState)(``),u=(0,s.useRef)(null);return(0,s.useEffect)(()=>()=>u.current?.abort(),[]),(0,c.jsxs)(e.sr.div,{initial:{opacity:0,y:10},animate:{opacity:1,y:0},className:`mt-6 glass-panel border border-[var(--panel-border)] rounded-2xl md:rounded-3xl p-4 md:p-6`,children:[(0,c.jsxs)(`div`,{className:`flex items-center justify-between gap-3`,children:[(0,c.jsxs)(`div`,{className:`min-w-0`,children:[(0,c.jsx)(`h3`,{className:`text-[15px] font-bold text-foreground tracking-tight`,children:`Make pictures load faster`}),(0,c.jsx)(`p`,{className:`max-sm:hidden text-[13px] text-foreground/55 leading-relaxed mt-1 max-w-2xl`,children:`Pictures you added a while ago are still sent at full size every time somebody looks at them. This gives them the same light versions and the same settings everything you add now gets. Your pictures are not changed and nothing is deleted.`})]}),i?(0,c.jsxs)(`div`,{className:`flex items-center gap-2 shrink-0`,children:[(0,c.jsx)(`span`,{className:`text-[12.5px] font-semibold text-foreground/60 whitespace-nowrap`,children:n?`${n.done} of ${n.total}`:`Looking…`}),(0,c.jsx)(e.o,{icon:t.ht,onClick:()=>u.current?.abort(),compact:!0,children:`Stop`})]}):(0,c.jsx)(e.o,{icon:t.a,onClick:async()=>{let e=new AbortController;u.current=e,a(!0),l(``),r(null);try{let t=await _({signal:e.signal,onProgress:r}),n=[t.companionsMade>0?`${t.companionsMade} light version${t.companionsMade===1?``:`s`} made`:``,t.headersFixed>0?`${t.headersFixed} picture${t.headersFixed===1?``:`s`} set to stay in the browser`:``].filter(Boolean);l(e.signal.aborted?`Stopped. Nothing was lost — start again whenever you like.`:n.length?`Done — ${n.join(`, `)}.`:`Everything is already fast.`)}catch{l(`That did not finish. Nothing was changed by the part that stopped — try again.`)}a(!1),r(null),u.current=null},compact:!0,children:`Make them fast`})]}),o&&!i&&(0,c.jsx)(`p`,{className:`text-[13px] font-medium text-foreground/70 mt-3`,children:o})]})}function S(){let{isAdmin:t}=e.dr();return(0,c.jsx)(r.t,{title:`Assets`,subtitle:`/assets`,filesCollection:`pub_files`,config:{isAdmin:!0,pageId:`assets`},footer:t?(0,c.jsxs)(c.Fragment,{children:[(0,c.jsx)(x,{}),(0,c.jsx)(b,{})]}):null,addition:(0,c.jsx)(o.n,{tab:`assets`})})}exports.Assets=S;
@@ -0,0 +1,296 @@
1
+ import "./PageTitle-D93YCiN8.js";
2
+ import { Jn as e, Yn as t, dr as n, ja as r, ka as i, o as a, sr as o } from "./TimeZoneField-DkI1Bkcz.js";
3
+ import { C as s, a as c, ht as l } from "./lucide-react-CA7GD7Nv.js";
4
+ import { f as u, p as d, u as f, v as p, y as m } from "./mediaKind-DmKMsjeY.js";
5
+ import { t as h } from "./TemplateDrive-NJY_AAvV.js";
6
+ import { t as g } from "./ConfirmModal-gKQEpd4d.js";
7
+ import { t as _ } from "./fileBytes-bjgvCfWu.js";
8
+ import { n as v } from "./SystemTabContent-QdxxLILE.js";
9
+ import { useEffect as y, useRef as b, useState as x } from "react";
10
+ import { Fragment as S, jsx as C, jsxs as w } from "react/jsx-runtime";
11
+ import { collection as T, deleteDoc as E, doc as D, getDocs as O } from "firebase/firestore";
12
+ import { deleteObject as k, getDownloadURL as A, getMetadata as j, listAll as M, ref as N, updateMetadata as P, uploadBytes as F } from "firebase/storage";
13
+ //#region src/lib/pictureRefresh.ts
14
+ var I = [
15
+ "pub_files",
16
+ "pub_files/pages",
17
+ "pub_form_uploads/pages"
18
+ ], L = /^image\/(jpe?g|png|webp|avif)$/i;
19
+ async function R(e) {
20
+ try {
21
+ let t = await M(N(r, e)), n = t.items.map((e) => e.fullPath).filter((e) => !f(e)), i = await Promise.all(t.prefixes.map((e) => R(e.fullPath)));
22
+ return [...n, ...i.flat()];
23
+ } catch {
24
+ return [];
25
+ }
26
+ }
27
+ var z = (t) => RegExp(`max-age=${e}`).test(String(t || ""));
28
+ async function B(e) {
29
+ try {
30
+ return await j(N(r, e)), !0;
31
+ } catch {
32
+ return !1;
33
+ }
34
+ }
35
+ async function V(e, n) {
36
+ let i = "";
37
+ try {
38
+ let a = await j(N(r, e));
39
+ i = String(a.contentType || ""), z(a.cacheControl) || (await P(N(r, e), {
40
+ cacheControl: t(e).cacheControl,
41
+ ...a.customMetadata ? { customMetadata: a.customMetadata } : {}
42
+ }), n.headersFixed++);
43
+ } catch {
44
+ n.skipped++;
45
+ return;
46
+ }
47
+ if (!L.test(i)) return;
48
+ let a = [{
49
+ path: u(e),
50
+ make: d
51
+ }, {
52
+ path: p(e),
53
+ make: m
54
+ }].filter((e) => e.path), o = [];
55
+ for (let e of a) await B(e.path) || o.push(e);
56
+ if (!o.length) return;
57
+ let s;
58
+ try {
59
+ s = await _(await A(N(r, e)));
60
+ } catch {
61
+ n.skipped++;
62
+ return;
63
+ }
64
+ let c = e.slice(e.lastIndexOf("/") + 1), l = new File([s], c, { type: i || s.type });
65
+ for (let e of o) try {
66
+ let i = await e.make(l, c);
67
+ if (!i) continue;
68
+ await F(N(r, e.path), i, t(e.path)), n.companionsMade++;
69
+ } catch {}
70
+ }
71
+ async function H(e = {}) {
72
+ let { onProgress: t, signal: n } = e, r = {
73
+ done: 0,
74
+ total: 0,
75
+ headersFixed: 0,
76
+ companionsMade: 0,
77
+ skipped: 0
78
+ }, i = await Promise.all(I.map(R)), a = [...new Set(i.flat())];
79
+ r.total = a.length, t?.({ ...r });
80
+ let o = 0;
81
+ return await Promise.all(Array.from({ length: Math.min(4, a.length) }, async () => {
82
+ for (; o < a.length;) {
83
+ if (n?.aborted) return;
84
+ let e = a[o++];
85
+ await V(e, r), r.done++, t?.({ ...r });
86
+ }
87
+ })), { ...r };
88
+ }
89
+ //#endregion
90
+ //#region src/pages/Assets.tsx
91
+ var U = [
92
+ "mem_files",
93
+ "user_files",
94
+ "admin_files"
95
+ ], W = (e) => !e.sourceTab;
96
+ function G() {
97
+ let [e, t] = x(null), [n, a] = x(!1), [c, u] = x(!1), [d, f] = x(""), [p, m] = x(0);
98
+ y(() => {
99
+ let e = !1;
100
+ return Promise.all(U.map(async (e) => {
101
+ try {
102
+ return (await O(T(i, e))).docs.map((t) => ({
103
+ collectionName: e,
104
+ id: t.id,
105
+ ...t.data()
106
+ }));
107
+ } catch {
108
+ return [];
109
+ }
110
+ })).then((n) => {
111
+ e || t(n.flat());
112
+ }), () => {
113
+ e = !0;
114
+ };
115
+ }, []);
116
+ let h = async () => {
117
+ if (!e) return;
118
+ u(!0), f("");
119
+ let n = 0;
120
+ for (let t of e) try {
121
+ let e = t.storagePath || t.downloadURL;
122
+ e && W(t) && await k(N(r, e)).catch(() => {}), await E(D(i, t.collectionName, t.id)), m((e) => e + 1);
123
+ } catch (e) {
124
+ n += 1, console.error(`Could not delete ${t.collectionName}/${t.id}:`, e);
125
+ }
126
+ n > 0 ? (f(`${n} file${n === 1 ? "" : "s"} could not be deleted. Reload and try again.`), t((await Promise.all(U.map(async (e) => {
127
+ try {
128
+ return (await O(T(i, e))).docs.map((t) => ({
129
+ collectionName: e,
130
+ id: t.id,
131
+ ...t.data()
132
+ }));
133
+ } catch {
134
+ return [];
135
+ }
136
+ }))).flat())) : t([]), u(!1), a(!1);
137
+ };
138
+ if (!e || e.length === 0) return null;
139
+ let _ = e.filter(W).length, v = U.map((t) => ({
140
+ name: t,
141
+ n: e.filter((e) => e.collectionName === t).length
142
+ })).filter((e) => e.n > 0);
143
+ return /* @__PURE__ */ w(S, { children: [/* @__PURE__ */ w(o.div, {
144
+ initial: {
145
+ opacity: 0,
146
+ y: 10
147
+ },
148
+ animate: {
149
+ opacity: 1,
150
+ y: 0
151
+ },
152
+ className: "mt-6 glass-panel border border-amber-500/25 bg-amber-500/[0.03] rounded-2xl md:rounded-3xl p-4 md:p-8",
153
+ children: [
154
+ /* @__PURE__ */ w("h3", {
155
+ className: "text-[17px] font-bold text-foreground tracking-tight mb-2",
156
+ children: [
157
+ e.length,
158
+ " leftover record",
159
+ e.length === 1 ? "" : "s",
160
+ " from the old Drive"
161
+ ]
162
+ }),
163
+ /* @__PURE__ */ C("p", {
164
+ className: "text-[14px] text-foreground/60 leading-relaxed mb-3 max-w-2xl",
165
+ children: "Drive used to have Internal, User and Admin folders. They are gone — this page is the only built-in folder now, and each page you have built keeps its own files. Nothing reads these records any more."
166
+ }),
167
+ /* @__PURE__ */ w("p", {
168
+ className: "text-[14px] text-foreground/60 leading-relaxed mb-3 max-w-2xl",
169
+ children: [_ > 0 ? `${_} ${_ === 1 ? "was" : "were"} uploaded through the old Drive screen, so ${_ === 1 ? "its file is" : "their files are"} deleted too. ` : "", e.length - _ > 0 ? `${e.length - _} belong to files a page still shows, so only the leftover record goes — the ${e.length - _ === 1 ? "file stays" : "files stay"} where ${e.length - _ === 1 ? "it is" : "they are"}.` : ""]
170
+ }),
171
+ /* @__PURE__ */ C("p", {
172
+ className: "text-[13px] text-foreground/50 font-medium mb-5",
173
+ children: v.map((e) => `${e.n} in ${e.name}`).join(" · ")
174
+ }),
175
+ d && /* @__PURE__ */ C("p", {
176
+ className: "text-[13px] font-medium text-red-400 bg-red-500/10 border border-red-500/20 rounded-xl p-3 mb-4",
177
+ children: d
178
+ }),
179
+ /* @__PURE__ */ w("button", {
180
+ onClick: () => a(!0),
181
+ disabled: c,
182
+ className: "inline-flex items-center gap-2 px-5 py-2.5 rounded-xl text-[13px] font-bold bg-red-500/10 hover:bg-red-500/20 text-red-500 border border-red-500/20 transition-colors disabled:opacity-50",
183
+ children: [c ? /* @__PURE__ */ C(l, { className: "w-4 h-4 animate-spin" }) : /* @__PURE__ */ C(s, { className: "w-4 h-4" }), c ? `Deleting ${p} of ${e.length}…` : `Clean up all ${e.length} permanently`]
184
+ })
185
+ ]
186
+ }), /* @__PURE__ */ C(g, {
187
+ isOpen: n,
188
+ title: "Delete the old Drive files",
189
+ message: /* @__PURE__ */ w(S, { children: [
190
+ "This permanently deletes ",
191
+ /* @__PURE__ */ w("strong", {
192
+ className: "text-foreground",
193
+ children: [
194
+ e.length,
195
+ " leftover record",
196
+ e.length === 1 ? "" : "s"
197
+ ]
198
+ }),
199
+ " ",
200
+ "from ",
201
+ v.map((e) => e.name).join(", "),
202
+ _ > 0 && /* @__PURE__ */ w(S, { children: [
203
+ ", along with the ",
204
+ /* @__PURE__ */ w("strong", {
205
+ className: "text-foreground",
206
+ children: [
207
+ _,
208
+ " file",
209
+ _ === 1 ? "" : "s"
210
+ ]
211
+ }),
212
+ " uploaded through the old Drive screen"
213
+ ] }),
214
+ ". It cannot be undone, and it covers every user's uploads, not only your own. Files that a page still shows are left alone."
215
+ ] }),
216
+ onConfirm: h,
217
+ onCancel: () => a(!1),
218
+ isProcessing: c,
219
+ confirmText: "Yes, delete them"
220
+ })] });
221
+ }
222
+ function K() {
223
+ let [e, t] = x(null), [n, r] = x(!1), [i, s] = x(""), u = b(null);
224
+ return y(() => () => u.current?.abort(), []), /* @__PURE__ */ w(o.div, {
225
+ initial: {
226
+ opacity: 0,
227
+ y: 10
228
+ },
229
+ animate: {
230
+ opacity: 1,
231
+ y: 0
232
+ },
233
+ className: "mt-6 glass-panel border border-[var(--panel-border)] rounded-2xl md:rounded-3xl p-4 md:p-6",
234
+ children: [/* @__PURE__ */ w("div", {
235
+ className: "flex items-center justify-between gap-3",
236
+ children: [/* @__PURE__ */ w("div", {
237
+ className: "min-w-0",
238
+ children: [/* @__PURE__ */ C("h3", {
239
+ className: "text-[15px] font-bold text-foreground tracking-tight",
240
+ children: "Make pictures load faster"
241
+ }), /* @__PURE__ */ C("p", {
242
+ className: "max-sm:hidden text-[13px] text-foreground/55 leading-relaxed mt-1 max-w-2xl",
243
+ children: "Pictures you added a while ago are still sent at full size every time somebody looks at them. This gives them the same light versions and the same settings everything you add now gets. Your pictures are not changed and nothing is deleted."
244
+ })]
245
+ }), n ? /* @__PURE__ */ w("div", {
246
+ className: "flex items-center gap-2 shrink-0",
247
+ children: [/* @__PURE__ */ C("span", {
248
+ className: "text-[12.5px] font-semibold text-foreground/60 whitespace-nowrap",
249
+ children: e ? `${e.done} of ${e.total}` : "Looking…"
250
+ }), /* @__PURE__ */ C(a, {
251
+ icon: l,
252
+ onClick: () => u.current?.abort(),
253
+ compact: !0,
254
+ children: "Stop"
255
+ })]
256
+ }) : /* @__PURE__ */ C(a, {
257
+ icon: c,
258
+ onClick: async () => {
259
+ let e = new AbortController();
260
+ u.current = e, r(!0), s(""), t(null);
261
+ try {
262
+ let n = await H({
263
+ signal: e.signal,
264
+ onProgress: t
265
+ }), r = [n.companionsMade > 0 ? `${n.companionsMade} light version${n.companionsMade === 1 ? "" : "s"} made` : "", n.headersFixed > 0 ? `${n.headersFixed} picture${n.headersFixed === 1 ? "" : "s"} set to stay in the browser` : ""].filter(Boolean);
266
+ s(e.signal.aborted ? "Stopped. Nothing was lost — start again whenever you like." : r.length ? `Done — ${r.join(", ")}.` : "Everything is already fast.");
267
+ } catch {
268
+ s("That did not finish. Nothing was changed by the part that stopped — try again.");
269
+ }
270
+ r(!1), t(null), u.current = null;
271
+ },
272
+ compact: !0,
273
+ children: "Make them fast"
274
+ })]
275
+ }), i && !n && /* @__PURE__ */ C("p", {
276
+ className: "text-[13px] font-medium text-foreground/70 mt-3",
277
+ children: i
278
+ })]
279
+ });
280
+ }
281
+ function q() {
282
+ let { isAdmin: e } = n();
283
+ return /* @__PURE__ */ C(h, {
284
+ title: "Assets",
285
+ subtitle: "/assets",
286
+ filesCollection: "pub_files",
287
+ config: {
288
+ isAdmin: !0,
289
+ pageId: "assets"
290
+ },
291
+ footer: e ? /* @__PURE__ */ w(S, { children: [/* @__PURE__ */ C(K, {}), /* @__PURE__ */ C(G, {})] }) : null,
292
+ addition: /* @__PURE__ */ C(v, { tab: "assets" })
293
+ });
294
+ }
295
+ //#endregion
296
+ export { q as Assets };
@@ -0,0 +1,46 @@
1
+ import { Nn as e, Rn as t, zn as n } from "./TimeZoneField-DkI1Bkcz.js";
2
+ import { l as r } from "./mediaKind-DmKMsjeY.js";
3
+ import { i } from "./FileViewerPopup-CX-J75TM.js";
4
+ import { jsx as a, jsxs as o } from "react/jsx-runtime";
5
+ //#region src/components/media/Attachments.tsx
6
+ function s({ value: s, onOpen: c, className: l = "w-28 h-20" }) {
7
+ return /* @__PURE__ */ a("div", {
8
+ className: "flex flex-wrap gap-2",
9
+ children: n(s).map((n) => {
10
+ let s = t(n), u = r(n);
11
+ return /* @__PURE__ */ a("a", {
12
+ href: n,
13
+ target: "_blank",
14
+ rel: "noopener noreferrer",
15
+ "aria-label": s,
16
+ title: s,
17
+ onClick: (e) => {
18
+ e.metaKey || e.ctrlKey || e.shiftKey || e.button !== 0 || (e.preventDefault(), c({
19
+ src: n,
20
+ name: s
21
+ }));
22
+ },
23
+ className: "block rounded-xl outline-none focus-visible:ring-2 focus-visible:ring-accent/50 hover:opacity-90 active:scale-[0.99] transition",
24
+ children: u === "image" ? /* @__PURE__ */ a(e, {
25
+ src: n,
26
+ alt: s,
27
+ fit: "cover",
28
+ className: `${l} rounded-xl border border-[var(--panel-border)]`
29
+ }) : /* @__PURE__ */ o("span", {
30
+ className: `${l} rounded-xl border border-[var(--panel-border)] bg-foreground/[0.02] flex flex-col items-center justify-center gap-1.5 px-2`,
31
+ children: [/* @__PURE__ */ a(i, {
32
+ kind: u,
33
+ name: s,
34
+ className: "w-5 h-5 text-foreground/50"
35
+ }), /* @__PURE__ */ a("span", {
36
+ className: "max-w-full truncate text-[11.5px] text-foreground/60",
37
+ children: s
38
+ })]
39
+ })
40
+ }, n);
41
+ })
42
+ });
43
+ }
44
+ s.displayName = "Attachments";
45
+ //#endregion
46
+ export { s as t };
@@ -0,0 +1 @@
1
+ require(`./chunk-CiTBaPhY.cjs`);const e=require(`./TimeZoneField-qs7NPR30.cjs`),t=require(`./mediaKind-D0MWyv6b.cjs`),n=require(`./FileViewerPopup-D8-MmIoS.cjs`);let r=require(`react/jsx-runtime`);function i({value:i,onOpen:a,className:o=`w-28 h-20`}){return(0,r.jsx)(`div`,{className:`flex flex-wrap gap-2`,children:e.zn(i).map(i=>{let s=e.Rn(i),c=t.l(i);return(0,r.jsx)(`a`,{href:i,target:`_blank`,rel:`noopener noreferrer`,"aria-label":s,title:s,onClick:e=>{e.metaKey||e.ctrlKey||e.shiftKey||e.button!==0||(e.preventDefault(),a({src:i,name:s}))},className:`block rounded-xl outline-none focus-visible:ring-2 focus-visible:ring-accent/50 hover:opacity-90 active:scale-[0.99] transition`,children:c===`image`?(0,r.jsx)(e.Nn,{src:i,alt:s,fit:`cover`,className:`${o} rounded-xl border border-[var(--panel-border)]`}):(0,r.jsxs)(`span`,{className:`${o} rounded-xl border border-[var(--panel-border)] bg-foreground/[0.02] flex flex-col items-center justify-center gap-1.5 px-2`,children:[(0,r.jsx)(n.i,{kind:c,name:s,className:`w-5 h-5 text-foreground/50`}),(0,r.jsx)(`span`,{className:`max-w-full truncate text-[11.5px] text-foreground/60`,children:s})]})},i)})})}i.displayName=`Attachments`,Object.defineProperty(exports,`t`,{enumerable:!0,get:function(){return i}});
@@ -0,0 +1 @@
1
+ require(`./chunk-CiTBaPhY.cjs`);const e=require(`./PageTitle-CZhgmmDT.cjs`),t=require(`./TimeZoneField-qs7NPR30.cjs`),n=require(`./DashboardNav-CXa_ci-_.cjs`),r=require(`./lucide-react-BwV6L6Is.cjs`),i=require(`./transactions-CufFrdAM.cjs`),a=require(`./ManagePlanButton-B0dwqZBd.cjs`),o=require(`./openOnArrival-Buwqb86D.cjs`);let s=require(`react`),c=require(`react/jsx-runtime`),l=require(`react-router-dom`);function u(e){return e.status===`past_due`?{label:`Past due`,tone:`bad`}:e.active?{label:`Active`,tone:`good`}:{label:`Cancelled`,tone:`quiet`}}function d(e){return e.fullyRefunded?{label:`Refunded`,tone:`quiet`}:(e.amountRefunded||0)>0?{label:`Partly refunded`,tone:`good`}:e.paid?{label:`Paid`,tone:`good`}:{label:`Not paid`,tone:`quiet`}}function f(e){return!e.currentPeriodEnd||!e.active?``:e.cancelAtPeriodEnd?`Ends on ${v(e.currentPeriodEnd)}`:`Renews on ${v(e.currentPeriodEnd)}`}var p=e=>e.productName||e.description||`One-off payment`,m=e=>{if(/^and \d+ more$/i.test(e))return{words:e,price:``,quantity:0,more:!0};let t=e.lastIndexOf(` · `),n=t>0?e.slice(t+3).trim():``,r=/\d/.test(n),i=r?e.slice(0,t).trim():e,a=i.match(/^(\d+)\s*[×x]\s/);return{words:i,price:r?n:``,quantity:a?Number(a[1]):0,more:!1}};function h(e,t){let n=typeof e==`string`?e.trim():``;if(!n)return[];let r=i.c(n);return r&&typeof r==`object`?(Array.isArray(r)?r:[r]).filter(e=>!!e&&typeof e==`object`&&!Array.isArray(e)).map(e=>{let{words:n,price:r}=i.o(e,t),a=Number(e.quantity??e.qty);return{words:n,price:r,quantity:Number.isFinite(a)&&a>0?a:0,more:!1}}).filter(e=>e.words||e.price):n.split(`; `).map(e=>e.trim()).filter(Boolean).map(m)}function g(e){return!e.length||e.some(e=>e.more||!e.quantity)?null:e.reduce((e,t)=>e+t.quantity,0)}function _(e,t=h(e.items,e.currency)){let n=g(t),r=p(e),i=n&&n>1&&!/\bitems?\b/i.test(r)?`${n} items`:``;return[v(e.created),i].filter(Boolean).join(` · `)}var v=e=>e?new Date(e*1e3).toLocaleDateString(void 0,{day:`numeric`,month:`short`,year:`numeric`}):``,y=e=>e?new Date(e*1e3).toLocaleString(void 0,{day:`numeric`,month:`short`,year:`numeric`,hour:`numeric`,minute:`2-digit`}):``;function b(e){let t=[];return e.created&&t.push([e.paid?`Paid on`:`Date`,y(e.created)]),e.paidWith&&t.push([`Paid with`,e.paidWith]),(e.amountRefunded||0)>0&&t.push([`Refunded`,i.r(e.amountRefunded,e.currency)]),t}function x(e){let t=[];return e.amount!=null&&e.currency&&t.push([`Billing`,`${i.r(e.amount,e.currency)}${e.interval?` every ${e.interval}`:``}`]),f(e)&&t.push([e.cancelAtPeriodEnd?`Ends on`:`Renews on`,v(e.currentPeriodEnd)]),e.quantity>1&&t.push([`Seats`,String(e.quantity)]),e.status===`past_due`&&t.push([`Card`,`Stripe is retrying your card — update it under Manage plan.`]),t}var S=`grid grid-cols-[minmax(0,1fr)_auto_1rem] md:grid-cols-[minmax(0,1.5fr)_6.5rem_7rem_8.5rem_1rem] gap-x-3 md:gap-x-6 px-4 md:px-5`,C=`${S} items-center`;function w({chip:e,className:t=``}){let n=e.tone===`good`?`bg-emerald-500`:e.tone===`bad`?`bg-red-500`:`bg-foreground/25`;return(0,c.jsxs)(`span`,{className:`inline-flex items-center gap-2 text-[12.5px] font-medium text-foreground/60 leading-tight whitespace-nowrap ${t}`,children:[(0,c.jsx)(`span`,{"aria-hidden":`true`,className:`w-1.5 h-1.5 rounded-full shrink-0 ${n}`}),e.label]})}var T=`grid grid-cols-1 sm:grid-cols-2 lg:grid-cols-3 gap-x-8 gap-y-3`;function E({label:e,value:n}){return(0,c.jsxs)(`div`,{className:`min-w-0`,children:[(0,c.jsx)(`span`,{className:`${t.u} block leading-tight mb-0.5`,children:e}),(0,c.jsx)(`span`,{className:`block text-[13.5px] text-foreground/85 leading-snug break-words [overflow-wrap:anywhere]`,children:n})]})}function D({title:e,line:t,children:n}){return(0,c.jsxs)(`div`,{className:`flex items-center justify-between gap-3 flex-wrap px-1`,children:[(0,c.jsxs)(`div`,{className:`min-w-0`,children:[(0,c.jsx)(`p`,{className:`text-[14px] font-bold text-foreground leading-tight`,children:e}),(0,c.jsx)(`p`,{className:`text-[12px] font-medium text-foreground/45 leading-snug mt-0.5`,children:t})]}),n]})}function O({first:e,second:t}){return(0,c.jsxs)(`div`,{className:`max-md:hidden ${C} py-2.5 text-[11.5px] font-medium text-foreground/40`,children:[(0,c.jsx)(`span`,{children:e}),(0,c.jsx)(`span`,{children:t}),(0,c.jsx)(`span`,{children:`Status`}),(0,c.jsx)(`span`,{className:`text-right`,children:`Amount`}),(0,c.jsx)(`span`,{})]})}function k({lines:e}){return(0,c.jsxs)(`section`,{className:`flex flex-col gap-1.5`,children:[(0,c.jsx)(`h3`,{className:`px-4 md:px-5 ${t.u} block leading-tight mb-0.5`,children:`What you bought`}),e.map((e,t)=>(0,c.jsxs)(`div`,{className:`${S} items-baseline`,children:[(0,c.jsx)(`span`,{className:`md:col-span-3 min-w-0 leading-snug break-words [overflow-wrap:anywhere] ${e.more?`text-[13px] text-foreground/45`:`text-[13.5px] text-foreground/85`}`,children:e.words}),(0,c.jsx)(`span`,{className:`text-right text-[13.5px] text-foreground/85 tabular-nums whitespace-nowrap leading-snug`,children:e.price})]},t))]})}function A({rowKey:e,what:n,sub:i,when:a,amount:o,per:s,chip:l,bought:u=[],facts:d,receiptUrl:f,open:p,onToggle:m}){return(0,c.jsxs)(`div`,{"data-ledger-row":e,className:`scroll-mt-6 ${p?`bg-foreground/[0.02]`:``}`,children:[(0,c.jsxs)(`button`,{type:`button`,onClick:m,"aria-expanded":p,className:`w-full ${C} py-3 text-left cursor-pointer transition-colors hover:bg-foreground/[0.03]`,children:[(0,c.jsxs)(`span`,{className:`flex flex-col min-w-0 gap-0.5`,children:[(0,c.jsx)(`span`,{className:`text-[13.5px] font-bold text-foreground leading-tight truncate`,children:n}),(0,c.jsx)(`span`,{className:`md:hidden text-[12px] font-medium text-foreground/45 leading-tight truncate`,children:i})]}),(0,c.jsx)(`span`,{className:`max-md:hidden text-[12.5px] font-medium text-foreground/45 tabular-nums whitespace-nowrap truncate leading-tight`,children:a}),(0,c.jsx)(w,{chip:l,className:`max-md:hidden`}),(0,c.jsxs)(`span`,{className:`flex flex-col items-end gap-1 min-w-0`,children:[(0,c.jsxs)(`span`,{className:`text-[13.5px] font-semibold text-foreground tabular-nums whitespace-nowrap leading-tight`,children:[o||(0,c.jsx)(`span`,{className:`text-foreground/25 font-medium`,children:`—`}),o&&s&&(0,c.jsxs)(`span`,{className:`text-[12.5px] text-foreground/40 font-medium`,children:[` `,s]})]}),(0,c.jsx)(w,{chip:l,className:`md:hidden !text-[11.5px] !gap-1.5`})]}),(0,c.jsx)(r.on,{className:`w-4 h-4 text-foreground/35 shrink-0 justify-self-end transition-transform ${p?`rotate-180`:``}`})]}),(0,c.jsx)(t.cr,{initial:!1,children:p&&(0,c.jsx)(t.sr.div,{initial:{height:0,opacity:0},animate:{height:`auto`,opacity:1},exit:{height:0,opacity:0},transition:t.T,className:`overflow-hidden`,children:(0,c.jsxs)(`div`,{className:`pb-4 md:pb-5 flex flex-col gap-4`,children:[(0,c.jsx)(`div`,{className:`mx-4 md:mx-5 border-t border-[var(--panel-border)]/50`}),u.length>0&&(0,c.jsx)(k,{lines:u}),d.length>0&&(0,c.jsx)(`div`,{className:`px-4 md:px-5 ${T}`,children:d.map(([e,t])=>(0,c.jsx)(E,{label:e,value:t},e))}),f&&(0,c.jsx)(`div`,{className:`mx-4 md:mx-5 border-t border-[var(--panel-border)]/50 pt-3`,children:(0,c.jsxs)(`a`,{href:f,target:`_blank`,rel:`noopener noreferrer`,className:`inline-flex items-center gap-1.5 text-[12.5px] font-bold text-accent hover:underline`,children:[`Stripe receipt`,(0,c.jsx)(r.Ht,{className:`w-3.5 h-3.5`})]})})]})})})]})}function j({email:l,loading:m,subscriptions:g,payments:y,error:S,initialOpen:C=null,focus:w=null,onFocused:T}){let[E,k]=(0,s.useState)(C),j=e=>k(t=>t===e?null:e),M=!m&&!S&&g.length===0&&y.length===0;return o.t(w,!m&&!!w&&(y.some(e=>e.id===w)||g.some(e=>e.id===w)),k,T),(0,c.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,c.jsxs)(t.sr.div,{initial:{opacity:0,y:20},animate:{opacity:1,y:0},className:`mb-6`,children:[(0,c.jsx)(e.t,{children:`Billing`}),(0,c.jsxs)(`div`,{className:`flex items-center gap-2 text-foreground/40 font-bold uppercase tracking-[0.2em] text-[11px]`,children:[(0,c.jsx)(`span`,{className:`w-8 h-[1px] bg-foreground/10`}),`/billing`]})]}),(0,c.jsxs)(`div`,{className:`flex flex-col gap-6 flex-1 pb-16`,children:[(0,c.jsx)(n.t,{}),(0,c.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-[400px] gap-6`,children:m?(0,c.jsx)(`div`,{className:`flex items-center justify-center flex-1 text-foreground/40 py-16`,children:(0,c.jsx)(r.ht,{className:`w-6 h-6 animate-spin text-accent`})}):S?(0,c.jsx)(t.g,{tone:`error`,children:S}):M?(0,c.jsxs)(`div`,{className:`flex flex-col items-center justify-center flex-1 gap-3 py-16 text-center`,children:[(0,c.jsx)(r.tt,{className:`w-8 h-8 text-foreground/20`}),(0,c.jsxs)(`p`,{className:`text-[13px] font-medium text-foreground/50 max-w-md leading-relaxed`,children:[`Nothing has been bought on this account`,l?(0,c.jsxs)(c.Fragment,{children:[` — `,(0,c.jsx)(`span`,{className:`text-foreground/70`,children:l})]}):null,`. A payment made with a different email address at checkout lives with that email: sign in with the address you paid with to see it here.`]})]}):(0,c.jsxs)(c.Fragment,{children:[g.length>0&&(0,c.jsxs)(`div`,{className:`flex flex-col gap-3`,children:[(0,c.jsx)(D,{title:g.length===1?`Your plan`:`Your plans`,line:`Change card, switch or cancel on Stripe's own page.`,children:(0,c.jsx)(a.t,{variant:`secondary`,className:`h-9 px-3.5 text-[12.5px] font-semibold`})}),(0,c.jsxs)(`div`,{className:`rounded-2xl border border-[var(--panel-border)]/60 divide-y divide-[var(--panel-border)]/60 overflow-hidden`,children:[(0,c.jsx)(O,{first:`Plan`,second:`Renews`}),g.map(e=>{let t=u(e),n=f(e),r=e.amount!=null&&e.currency?i.r(e.amount,e.currency):``;return(0,c.jsx)(A,{rowKey:e.id,what:e.productName||`Subscription`,sub:n||t.label,when:n?v(e.currentPeriodEnd):`—`,amount:r,per:e.interval?`/ ${e.interval}`:``,chip:t,facts:x(e),open:E===e.id,onToggle:()=>j(e.id)},e.id)})]})]}),y.length>0&&(0,c.jsxs)(`div`,{className:`flex flex-col gap-3`,children:[(0,c.jsx)(D,{title:`Your payments`,line:`Every payment on this account, straight from Stripe.`}),(0,c.jsxs)(`div`,{className:`rounded-2xl border border-[var(--panel-border)]/60 divide-y divide-[var(--panel-border)]/60 overflow-hidden`,children:[(0,c.jsx)(O,{first:`What`,second:`When`}),y.map(e=>{let t=h(e.items,e.currency);return(0,c.jsx)(A,{rowKey:e.id,what:p(e),sub:_(e,t),when:v(e.created),amount:i.r(e.amount,e.currency),chip:d(e),bought:t,facts:b(e),receiptUrl:e.receiptUrl,open:E===e.id,onToggle:()=>j(e.id)},e.id)})]})]})]})})]})]})}function M(){let{user:e}=t.dr(),{loading:n,subscriptions:r,payments:i,error:a}=t.fi(),[o,s]=(0,l.useSearchParams)();return(0,c.jsx)(j,{email:e?.email||null,loading:n,subscriptions:r,payments:i,error:a,focus:o.get(`open`),onFocused:()=>s(e=>{let t=new URLSearchParams(e);return t.delete(`open`),t},{replace:!0})})}exports.Billing=M;