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,181 @@
1
+ import { Pr as e, Zr as t } from "./TimeZoneField-DkI1Bkcz.js";
2
+ import { v as n } from "./verifiedAccount-DRbRFJ6H.js";
3
+ import { i as r, r as i, u as a } from "./address-C2bHNxJU.js";
4
+ var o = "member", s = "finishedAt", c = [
5
+ "text",
6
+ "email",
7
+ "tel",
8
+ "number",
9
+ "date",
10
+ "textarea",
11
+ "select",
12
+ "checkbox",
13
+ "address"
14
+ ], l = new Set([
15
+ "uid",
16
+ "id",
17
+ "email",
18
+ "displayName",
19
+ "avatar",
20
+ "photoURL",
21
+ "createdAt",
22
+ "lastLoginAt",
23
+ "role",
24
+ "inactive",
25
+ "removed",
26
+ "planUntil",
27
+ "planPass",
28
+ "requestedRole",
29
+ "requestedRoleAt",
30
+ s,
31
+ "phoneClaim"
32
+ ]), u = (e) => typeof e == "string" && /^[a-zA-Z][a-zA-Z0-9_]{0,39}$/.test(e) && !l.has(e), d = (e) => c.includes(e);
33
+ function f(e) {
34
+ if (!e || typeof e != "object") return null;
35
+ let t = String(e.key ?? e.name ?? "").trim();
36
+ if (!u(t)) return null;
37
+ let n = d(e.type) ? e.type : "text", r = String(e.label ?? "").trim() || t, i = Array.isArray(e.options) ? e.options.map((e) => String(e ?? "").trim()).filter(Boolean) : [], a = n === "select" && i.length === 0 ? "text" : n;
38
+ return {
39
+ key: t,
40
+ label: r,
41
+ type: a,
42
+ required: e.required === !0,
43
+ editable: e.editable !== !1,
44
+ ...a === "select" ? { options: i } : {},
45
+ ...typeof e.placeholder == "string" && e.placeholder.trim() ? { placeholder: e.placeholder.trim() } : {}
46
+ };
47
+ }
48
+ function p(e) {
49
+ let t = Array.isArray(e) ? e : Array.isArray(e?.fields) ? e.fields : [], n = [];
50
+ for (let e of t) {
51
+ let t = f(e);
52
+ t && !n.some((e) => e.key === t.key) && n.push(t);
53
+ }
54
+ return n;
55
+ }
56
+ function m() {
57
+ let e = (typeof window < "u" ? window.__FBOS_REGISTRATION__ : null) || {}, t = {};
58
+ for (let n of Object.keys(e)) {
59
+ let r = p(e[n]);
60
+ r.length && (t[String(n).toLowerCase()] = r);
61
+ }
62
+ return t;
63
+ }
64
+ var h = (e) => e === "member" || e === "internal" || n(e);
65
+ function g(e, t = m()) {
66
+ let n = String(e ?? "").trim().toLowerCase();
67
+ return h(n) && t[n]?.length ? n : o;
68
+ }
69
+ var _ = (e, t, n = m()) => n[g(t?.perRole ? e : "member", n)] || [];
70
+ function v(t, n) {
71
+ if (!n?.perRole) return o;
72
+ let r = e(t)?.role, i = String(t?.role ?? "").trim().toLowerCase(), a = m();
73
+ for (let e of [r, i]) if (e && h(e) && a[e]?.length) return e;
74
+ return o;
75
+ }
76
+ var y = (e, t) => _(v(e, t), t);
77
+ function b(e, t) {
78
+ let n = e?.[t.key];
79
+ return t.type === "checkbox" ? n === !0 : typeof n == "number" ? Number.isFinite(n) : typeof n == "string" ? n.trim() !== "" : !1;
80
+ }
81
+ function x(e, t) {
82
+ let n = e?.[t.key];
83
+ return t.type === "checkbox" ? n === !0 ? "Yes" : "No" : typeof n == "number" ? String(n) : typeof n == "string" ? n.trim() : "";
84
+ }
85
+ var S = (e, t) => !t.editable && b(e, t), C = (e, t) => e.filter((e) => e.required && !b(t, e));
86
+ function w(e) {
87
+ if (!e || e.removed === !0) return [];
88
+ let t = [];
89
+ return String(e.displayName ?? "").trim() || t.push("name"), String(e.email ?? "").trim() || t.push("email"), t;
90
+ }
91
+ var T = (e) => typeof e?.finishedAt == "string" && e.finishedAt.trim() !== "", E = (e = Date.now()) => ({ [s]: new Date(e).toISOString() });
92
+ function D(e, t, n) {
93
+ if (!e || e.removed === !0) return !1;
94
+ if (w(e).length > 0) return !0;
95
+ if (String(t ?? "").trim().toLowerCase() === "admin") return !1;
96
+ let r = y(e, n);
97
+ return C(r, e).length > 0 ? !0 : r.length > 0 && !T(e);
98
+ }
99
+ var O = "firebase-os:finish-not-now";
100
+ function k(e) {
101
+ if (e) try {
102
+ sessionStorage.setItem(`${O}:${e}`, "1");
103
+ } catch {}
104
+ }
105
+ function A(e) {
106
+ if (!e) return !1;
107
+ try {
108
+ return sessionStorage.getItem(`${O}:${e}`) === "1";
109
+ } catch {
110
+ return !1;
111
+ }
112
+ }
113
+ var j = (e, t, n, r) => D(e, t, n) ? w(e).length > 0 ? !0 : !(n?.skippable && A(r)) : !1, M = (e, t, n, r) => D(e, t, n) && A(r) && w(e).length === 0;
114
+ function N(e, t) {
115
+ let n = e.type === "checkbox" ? t === !0 : typeof t == "string" ? t.trim() !== "" : t != null && t !== "";
116
+ return e.required && !n ? e.type === "checkbox" ? `Please tick "${e.label}".` : `Please fill in ${e.label}.` : n ? e.type === "email" && !/^[^@\s]+@[^@\s.]+\.[^@\s]+$/.test(String(t).trim()) ? `${e.label} does not look like an email address.` : e.type === "number" && !Number.isFinite(Number(String(t).trim())) ? `${e.label} has to be a number.` : "" : "";
117
+ }
118
+ function P(e, t) {
119
+ let n = {};
120
+ for (let r of e) {
121
+ let e = N(r, t[r.key]);
122
+ e && (n[r.key] = e);
123
+ }
124
+ return n;
125
+ }
126
+ function F(e, t, n = null) {
127
+ let o = {};
128
+ for (let s of e) {
129
+ if (S(n, s)) continue;
130
+ if (s.type === "address") {
131
+ let e = i(s.key, a(r(s.key, t)));
132
+ if (e[s.key]) {
133
+ Object.assign(o, e);
134
+ continue;
135
+ }
136
+ for (let [t, r] of Object.entries(e)) t in (n || {}) && (o[t] = r);
137
+ continue;
138
+ }
139
+ let e = t[s.key];
140
+ if (e === void 0) continue;
141
+ if (s.type === "checkbox") {
142
+ let t = e === !0;
143
+ (t || s.key in (n || {})) && (o[s.key] = t);
144
+ continue;
145
+ }
146
+ let c = typeof e == "string" ? e.trim() : String(e ?? "").trim();
147
+ if (!c) {
148
+ s.key in (n || {}) && (o[s.key] = "");
149
+ continue;
150
+ }
151
+ if (s.type === "number") {
152
+ let e = Number(c);
153
+ o[s.key] = Number.isFinite(e) ? e : c;
154
+ continue;
155
+ }
156
+ o[s.key] = c;
157
+ }
158
+ return o;
159
+ }
160
+ function I(e, t) {
161
+ let n = {};
162
+ for (let a of e) {
163
+ let e = t?.[a.key];
164
+ if (a.type === "address") {
165
+ Object.assign(n, i(a.key, r(a.key, t || {})));
166
+ continue;
167
+ }
168
+ a.type === "checkbox" ? n[a.key] = e === !0 : typeof e == "number" ? n[a.key] = String(e) : n[a.key] = typeof e == "string" ? e : "";
169
+ }
170
+ return n;
171
+ }
172
+ var L = "registered";
173
+ function R(e, t = Date.now()) {
174
+ let n = Date.parse(String(e?.createdAt ?? ""));
175
+ if (!Number.isFinite(n)) return !1;
176
+ let r = t - n;
177
+ return r < 36e5 && r > -36e5;
178
+ }
179
+ var z = (e, n) => e ? `Finish registering as ${t(e.role, n)}` : "Finish registration", B = (e) => `${String(e || "member").toLowerCase()}Registration.config.ts`, V = (e) => `${String(e || "member").toLowerCase()}RegistrationConfig`, H = (e, t) => e === "member" ? "anybody who registers as an ordinary member" : e === "internal" ? `somebody registering as one of ${t}` : `somebody registering as ${/^[aeiou]/i.test(t) ? "an" : "a"} ${t}`;
180
+ //#endregion
181
+ export { H as C, k as S, D as _, x as a, B as b, y as c, j as d, b as f, w as g, C as h, P as i, z as l, R as m, L as n, I as o, S as p, N as r, F as s, o as t, E as u, M as v, v as x, V as y };
@@ -0,0 +1 @@
1
+ const e=require(`./TimeZoneField-qs7NPR30.cjs`),t=require(`./verifiedAccount-DScyKk96.cjs`),n=require(`./address-Bsb8COq2.cjs`);var r=`member`,i=`finishedAt`,a=[`text`,`email`,`tel`,`number`,`date`,`textarea`,`select`,`checkbox`,`address`],o=new Set([`uid`,`id`,`email`,`displayName`,`avatar`,`photoURL`,`createdAt`,`lastLoginAt`,`role`,`inactive`,`removed`,`planUntil`,`planPass`,`requestedRole`,`requestedRoleAt`,i,`phoneClaim`]),s=e=>typeof e==`string`&&/^[a-zA-Z][a-zA-Z0-9_]{0,39}$/.test(e)&&!o.has(e),c=e=>a.includes(e);function l(e){if(!e||typeof e!=`object`)return null;let t=String(e.key??e.name??``).trim();if(!s(t))return null;let n=c(e.type)?e.type:`text`,r=String(e.label??``).trim()||t,i=Array.isArray(e.options)?e.options.map(e=>String(e??``).trim()).filter(Boolean):[],a=n===`select`&&i.length===0?`text`:n;return{key:t,label:r,type:a,required:e.required===!0,editable:e.editable!==!1,...a===`select`?{options:i}:{},...typeof e.placeholder==`string`&&e.placeholder.trim()?{placeholder:e.placeholder.trim()}:{}}}function u(e){let t=Array.isArray(e)?e:Array.isArray(e?.fields)?e.fields:[],n=[];for(let e of t){let t=l(e);t&&!n.some(e=>e.key===t.key)&&n.push(t)}return n}function d(){let e=(typeof window<`u`?window.__FBOS_REGISTRATION__:null)||{},t={};for(let n of Object.keys(e)){let r=u(e[n]);r.length&&(t[String(n).toLowerCase()]=r)}return t}var f=e=>e===`member`||e===`internal`||t.v(e);function p(e,t=d()){let n=String(e??``).trim().toLowerCase();return f(n)&&t[n]?.length?n:r}var m=(e,t,n=d())=>n[p(t?.perRole?e:`member`,n)]||[];function h(t,n){if(!n?.perRole)return r;let i=e.Pr(t)?.role,a=String(t?.role??``).trim().toLowerCase(),o=d();for(let e of[i,a])if(e&&f(e)&&o[e]?.length)return e;return r}var g=(e,t)=>m(h(e,t),t);function _(e,t){let n=e?.[t.key];return t.type===`checkbox`?n===!0:typeof n==`number`?Number.isFinite(n):typeof n==`string`?n.trim()!==``:!1}function v(e,t){let n=e?.[t.key];return t.type===`checkbox`?n===!0?`Yes`:`No`:typeof n==`number`?String(n):typeof n==`string`?n.trim():``}var y=(e,t)=>!t.editable&&_(e,t),b=(e,t)=>e.filter(e=>e.required&&!_(t,e));function x(e){if(!e||e.removed===!0)return[];let t=[];return String(e.displayName??``).trim()||t.push(`name`),String(e.email??``).trim()||t.push(`email`),t}var S=e=>typeof e?.finishedAt==`string`&&e.finishedAt.trim()!==``,C=(e=Date.now())=>({[i]:new Date(e).toISOString()});function w(e,t,n){if(!e||e.removed===!0)return!1;if(x(e).length>0)return!0;if(String(t??``).trim().toLowerCase()===`admin`)return!1;let r=g(e,n);return b(r,e).length>0?!0:r.length>0&&!S(e)}var T=`firebase-os:finish-not-now`;function E(e){if(e)try{sessionStorage.setItem(`${T}:${e}`,`1`)}catch{}}function D(e){if(!e)return!1;try{return sessionStorage.getItem(`${T}:${e}`)===`1`}catch{return!1}}var O=(e,t,n,r)=>w(e,t,n)?x(e).length>0?!0:!(n?.skippable&&D(r)):!1,k=(e,t,n,r)=>w(e,t,n)&&D(r)&&x(e).length===0;function A(e,t){let n=e.type===`checkbox`?t===!0:typeof t==`string`?t.trim()!==``:t!=null&&t!==``;return e.required&&!n?e.type===`checkbox`?`Please tick "${e.label}".`:`Please fill in ${e.label}.`:n?e.type===`email`&&!/^[^@\s]+@[^@\s.]+\.[^@\s]+$/.test(String(t).trim())?`${e.label} does not look like an email address.`:e.type===`number`&&!Number.isFinite(Number(String(t).trim()))?`${e.label} has to be a number.`:``:``}function j(e,t){let n={};for(let r of e){let e=A(r,t[r.key]);e&&(n[r.key]=e)}return n}function M(e,t,r=null){let i={};for(let a of e){if(y(r,a))continue;if(a.type===`address`){let e=n.r(a.key,n.u(n.i(a.key,t)));if(e[a.key]){Object.assign(i,e);continue}for(let[t,n]of Object.entries(e))t in(r||{})&&(i[t]=n);continue}let e=t[a.key];if(e===void 0)continue;if(a.type===`checkbox`){let t=e===!0;(t||a.key in(r||{}))&&(i[a.key]=t);continue}let o=typeof e==`string`?e.trim():String(e??``).trim();if(!o){a.key in(r||{})&&(i[a.key]=``);continue}if(a.type===`number`){let e=Number(o);i[a.key]=Number.isFinite(e)?e:o;continue}i[a.key]=o}return i}function N(e,t){let r={};for(let i of e){let e=t?.[i.key];if(i.type===`address`){Object.assign(r,n.r(i.key,n.i(i.key,t||{})));continue}i.type===`checkbox`?r[i.key]=e===!0:typeof e==`number`?r[i.key]=String(e):r[i.key]=typeof e==`string`?e:``}return r}var P=`registered`;function F(e,t=Date.now()){let n=Date.parse(String(e?.createdAt??``));if(!Number.isFinite(n))return!1;let r=t-n;return r<36e5&&r>-36e5}var I=(t,n)=>t?`Finish registering as ${e.Zr(t.role,n)}`:`Finish registration`,L=e=>`${String(e||`member`).toLowerCase()}Registration.config.ts`,R=e=>`${String(e||`member`).toLowerCase()}RegistrationConfig`,z=(e,t)=>e===`member`?`anybody who registers as an ordinary member`:e===`internal`?`somebody registering as one of ${t}`:`somebody registering as ${/^[aeiou]/i.test(t)?`an`:`a`} ${t}`;Object.defineProperty(exports,`C`,{enumerable:!0,get:function(){return z}}),Object.defineProperty(exports,`S`,{enumerable:!0,get:function(){return E}}),Object.defineProperty(exports,`_`,{enumerable:!0,get:function(){return w}}),Object.defineProperty(exports,`a`,{enumerable:!0,get:function(){return v}}),Object.defineProperty(exports,`b`,{enumerable:!0,get:function(){return L}}),Object.defineProperty(exports,`c`,{enumerable:!0,get:function(){return g}}),Object.defineProperty(exports,`d`,{enumerable:!0,get:function(){return O}}),Object.defineProperty(exports,`f`,{enumerable:!0,get:function(){return _}}),Object.defineProperty(exports,`g`,{enumerable:!0,get:function(){return x}}),Object.defineProperty(exports,`h`,{enumerable:!0,get:function(){return b}}),Object.defineProperty(exports,`i`,{enumerable:!0,get:function(){return j}}),Object.defineProperty(exports,`l`,{enumerable:!0,get:function(){return I}}),Object.defineProperty(exports,`m`,{enumerable:!0,get:function(){return F}}),Object.defineProperty(exports,`n`,{enumerable:!0,get:function(){return P}}),Object.defineProperty(exports,`o`,{enumerable:!0,get:function(){return N}}),Object.defineProperty(exports,`p`,{enumerable:!0,get:function(){return y}}),Object.defineProperty(exports,`r`,{enumerable:!0,get:function(){return A}}),Object.defineProperty(exports,`s`,{enumerable:!0,get:function(){return M}}),Object.defineProperty(exports,`t`,{enumerable:!0,get:function(){return r}}),Object.defineProperty(exports,`u`,{enumerable:!0,get:function(){return C}}),Object.defineProperty(exports,`v`,{enumerable:!0,get:function(){return k}}),Object.defineProperty(exports,`x`,{enumerable:!0,get:function(){return h}}),Object.defineProperty(exports,`y`,{enumerable:!0,get:function(){return R}});
@@ -1 +1 @@
1
- Object.defineProperty(exports,Symbol.toStringTag,{value:`Module`}),require(`./chunk-CiTBaPhY.cjs`);const e=require(`./ContactPopup-IwBm-eqz.cjs`);exports.ContactPopup=e.t;
1
+ Object.defineProperty(exports,Symbol.toStringTag,{value:`Module`}),require(`./chunk-CiTBaPhY.cjs`);const e=require(`./ContactPopup-lxmRMoIa.cjs`);exports.ContactPopup=e.t;
@@ -1,2 +1,2 @@
1
- import { t as e } from "./ContactPopup-Dsg2ntq3.js";
1
+ import { t as e } from "./ContactPopup-BXnHrRwl.js";
2
2
  export { e as ContactPopup };
@@ -0,0 +1,147 @@
1
+ import { u as e } from "./PageTitle-D93YCiN8.js";
2
+ import { Ei as t, _a as n, ca as r, da as i, fa as a, ga as o, ha as s, ka as c, la as l, ma as u, pa as d, sa as f, va as p, vi as m } from "./TimeZoneField-DkI1Bkcz.js";
3
+ import { p as h } from "./DashboardNav-Dmn7PVSp.js";
4
+ import { D as g, O as _, c as v, o as y, v as b } from "./verifiedAccount-DRbRFJ6H.js";
5
+ import { useEffect as x, useState as S } from "react";
6
+ import { collection as C, deleteDoc as w, doc as T, getDocs as E, onSnapshot as D, query as O, setDoc as k, updateDoc as A, where as j } from "firebase/firestore";
7
+ //#region src/lib/roleIcon.ts
8
+ var M = new Set([
9
+ "users",
10
+ "users-round",
11
+ "user",
12
+ "user-round",
13
+ "circle-user",
14
+ "contact-round"
15
+ ]), N = /* @__PURE__ */ new Map(), P = (t) => {
16
+ let n = String(t || "").trim();
17
+ if (!n) return "";
18
+ if (!N.has(n)) {
19
+ let t = e(n, 8, void 0, !1);
20
+ N.set(n, t.find((e) => !M.has(e)) || t[0] || "");
21
+ }
22
+ return N.get(n) || "";
23
+ }, F = (e, t = u()) => String(t.find((t) => t.id === e)?.icon || "").trim() || (d(e) ? a(e) || f[e] : P(s(e, t)) || "id-card"), I = "sys_roles", L = (e, t) => ({
24
+ id: e,
25
+ name: String(t?.name || e),
26
+ ...String(t?.icon || "").trim() ? { icon: String(t.icon).trim() } : {},
27
+ ...typeof t?.createdAt == "number" ? { createdAt: t.createdAt } : {},
28
+ ...Array.isArray(t?.sees) ? { sees: t.sees.filter((e) => typeof e == "string" && !!e) } : {}
29
+ }), R = (e, t) => e.name.localeCompare(t.name);
30
+ function z(e, t = u()) {
31
+ let n = String(e || "").trim();
32
+ if (!n) return "Type a name for the role first — Client, say, or Supplier.";
33
+ let r = _(n);
34
+ if (r.length < 2 || !/^[a-z]/.test(r)) return "Use a name with at least two letters in it.";
35
+ if (y.has(r) || !b(r)) return `${n} is a word the app already uses. Pick another.`;
36
+ if (t.some((e) => e.id === r)) return `You already have a role called ${t.find((e) => e.id === r).name}.`;
37
+ let a = i(t).find((e) => e.name.trim().toLowerCase() === n.toLowerCase());
38
+ return a ? `You already have a role called ${a.name}.` : "";
39
+ }
40
+ async function B(e) {
41
+ let t = String(e || "").trim().slice(0, 48), n = {
42
+ id: _(t),
43
+ name: t,
44
+ createdAt: Date.now()
45
+ };
46
+ return await k(T(c, I, n.id), {
47
+ name: n.name,
48
+ createdAt: n.createdAt
49
+ }), n;
50
+ }
51
+ async function V(e, t) {
52
+ let n = String(t || "").trim().slice(0, 48);
53
+ if (n) {
54
+ if (d(e)) {
55
+ if (n === l[e]) {
56
+ if (a(e)) {
57
+ await k(T(c, I, e), {
58
+ name: "",
59
+ builtIn: !0
60
+ }, { merge: !0 });
61
+ return;
62
+ }
63
+ await w(T(c, I, e)).catch(() => {});
64
+ return;
65
+ }
66
+ await k(T(c, I, e), {
67
+ name: n,
68
+ builtIn: !0
69
+ }, { merge: !0 });
70
+ return;
71
+ }
72
+ b(e) && await k(T(c, I, e), { name: n }, { merge: !0 });
73
+ }
74
+ }
75
+ async function H(e, t) {
76
+ let n = String(t || "").trim();
77
+ !d(e) && !b(e) || await k(T(c, I, e), {
78
+ icon: n,
79
+ ...d(e) ? { builtIn: !0 } : {}
80
+ }, { merge: !0 });
81
+ }
82
+ function U(e, t, n = u()) {
83
+ let r = String(t || "").trim();
84
+ if (!r) return "A role needs a name.";
85
+ let a = i(n).find((t) => t.id !== e && t.name.trim().toLowerCase() === r.toLowerCase());
86
+ return a ? `You already have a role called ${a.name}.` : "";
87
+ }
88
+ var W = (e, t) => (Array.isArray(e?.plans) ? e.plans : []).filter((e) => e?.roleId === t);
89
+ async function G(e) {
90
+ let n = {
91
+ people: [],
92
+ pages: [],
93
+ plans: []
94
+ };
95
+ return b(e) ? ((await E(O(C(c, "user_profiles"), j("role", "==", e)))).forEach((e) => n.people.push(e.id)), (await E(C(c, "sys_tabs"))).forEach((t) => {
96
+ v(t.data()?.roles).includes(e) && n.pages.push(t.id);
97
+ }), (await E(C(c, t))).forEach((t) => {
98
+ if (t.id !== "_settings") for (let r of W(t.data(), e)) n.plans.push(String(r?.name || "").trim() || "A plan");
99
+ }), n) : n;
100
+ }
101
+ async function K(e) {
102
+ if (!b(e)) return;
103
+ let n = await E(O(C(c, "user_profiles"), j("role", "==", e)));
104
+ for (let e of n.docs) await A(T(c, "user_profiles", e.id), {
105
+ role: g("free"),
106
+ ...m()
107
+ });
108
+ let r = await E(C(c, t));
109
+ for (let n of r.docs) {
110
+ if (n.id === "_settings" || !W(n.data(), e).length) continue;
111
+ let r = n.data().plans.map((t) => t?.roleId === e ? {
112
+ ...t,
113
+ roleId: ""
114
+ } : t);
115
+ await k(T(c, t, n.id), { plans: r }, { merge: !0 });
116
+ }
117
+ let i = await E(C(c, "sys_tabs"));
118
+ for (let t of i.docs) {
119
+ let n = v(t.data()?.roles);
120
+ if (!n.includes(e)) continue;
121
+ let r = n.filter((t) => t !== e);
122
+ await k(T(c, "sys_tabs", t.id), { roles: r.length ? r : ["user"] }, { merge: !0 });
123
+ }
124
+ await h(e), await w(T(c, I, e));
125
+ }
126
+ function q() {
127
+ let [e, t] = S(() => u());
128
+ return x(() => D(C(c, I), (e) => {
129
+ let r = [], i = {}, a = {};
130
+ e.forEach((e) => {
131
+ if (d(e.id)) {
132
+ let t = String(e.data()?.name || "").trim();
133
+ t && (i[e.id] = t);
134
+ let n = String(e.data()?.icon || "").trim();
135
+ n && (a[e.id] = n);
136
+ return;
137
+ }
138
+ b(e.id) && r.push(L(e.id, e.data()));
139
+ }), r.sort(R), p(i), o(a), n(r), t(r);
140
+ }, () => {}), []), e;
141
+ }
142
+ var J = (e = u()) => r.map((t) => ({
143
+ id: t,
144
+ name: s(t, e)
145
+ }));
146
+ //#endregion
147
+ export { V as a, H as c, U as i, q as l, B as n, z as o, K as r, G as s, J as t, F as u };
@@ -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(`./verifiedAccount-DScyKk96.cjs`);let i=require(`react`),a=require(`firebase/firestore`);var o=new Set([`users`,`users-round`,`user`,`user-round`,`circle-user`,`contact-round`]),s=new Map,c=t=>{let n=String(t||``).trim();if(!n)return``;if(!s.has(n)){let t=e.u(n,8,void 0,!1);s.set(n,t.find(e=>!o.has(e))||t[0]||``)}return s.get(n)||``},l=(e,n=t.ma())=>String(n.find(t=>t.id===e)?.icon||``).trim()||(t.pa(e)?t.fa(e)||t.sa[e]:c(t.ha(e,n))||`id-card`),u=`sys_roles`,d=(e,t)=>({id:e,name:String(t?.name||e),...String(t?.icon||``).trim()?{icon:String(t.icon).trim()}:{},...typeof t?.createdAt==`number`?{createdAt:t.createdAt}:{},...Array.isArray(t?.sees)?{sees:t.sees.filter(e=>typeof e==`string`&&!!e)}:{}}),f=(e,t)=>e.name.localeCompare(t.name);function p(e,n=t.ma()){let i=String(e||``).trim();if(!i)return`Type a name for the role first — Client, say, or Supplier.`;let a=r.O(i);if(a.length<2||!/^[a-z]/.test(a))return`Use a name with at least two letters in it.`;if(r.o.has(a)||!r.v(a))return`${i} is a word the app already uses. Pick another.`;if(n.some(e=>e.id===a))return`You already have a role called ${n.find(e=>e.id===a).name}.`;let o=t.da(n).find(e=>e.name.trim().toLowerCase()===i.toLowerCase());return o?`You already have a role called ${o.name}.`:``}async function m(e){let n=String(e||``).trim().slice(0,48),i={id:r.O(n),name:n,createdAt:Date.now()};return await(0,a.setDoc)((0,a.doc)(t.ka,u,i.id),{name:i.name,createdAt:i.createdAt}),i}async function h(e,n){let i=String(n||``).trim().slice(0,48);if(i){if(t.pa(e)){if(i===t.la[e]){if(t.fa(e)){await(0,a.setDoc)((0,a.doc)(t.ka,u,e),{name:``,builtIn:!0},{merge:!0});return}await(0,a.deleteDoc)((0,a.doc)(t.ka,u,e)).catch(()=>{});return}await(0,a.setDoc)((0,a.doc)(t.ka,u,e),{name:i,builtIn:!0},{merge:!0});return}r.v(e)&&await(0,a.setDoc)((0,a.doc)(t.ka,u,e),{name:i},{merge:!0})}}async function g(e,n){let i=String(n||``).trim();!t.pa(e)&&!r.v(e)||await(0,a.setDoc)((0,a.doc)(t.ka,u,e),{icon:i,...t.pa(e)?{builtIn:!0}:{}},{merge:!0})}function _(e,n,r=t.ma()){let i=String(n||``).trim();if(!i)return`A role needs a name.`;let a=t.da(r).find(t=>t.id!==e&&t.name.trim().toLowerCase()===i.toLowerCase());return a?`You already have a role called ${a.name}.`:``}var v=(e,t)=>(Array.isArray(e?.plans)?e.plans:[]).filter(e=>e?.roleId===t);async function y(e){let n={people:[],pages:[],plans:[]};return r.v(e)?((await(0,a.getDocs)((0,a.query)((0,a.collection)(t.ka,`user_profiles`),(0,a.where)(`role`,`==`,e)))).forEach(e=>n.people.push(e.id)),(await(0,a.getDocs)((0,a.collection)(t.ka,`sys_tabs`))).forEach(t=>{r.c(t.data()?.roles).includes(e)&&n.pages.push(t.id)}),(await(0,a.getDocs)((0,a.collection)(t.ka,t.Ei))).forEach(t=>{if(t.id!==`_settings`)for(let r of v(t.data(),e))n.plans.push(String(r?.name||``).trim()||`A plan`)}),n):n}async function b(e){if(!r.v(e))return;let i=await(0,a.getDocs)((0,a.query)((0,a.collection)(t.ka,`user_profiles`),(0,a.where)(`role`,`==`,e)));for(let e of i.docs)await(0,a.updateDoc)((0,a.doc)(t.ka,`user_profiles`,e.id),{role:r.D(`free`),...t.vi()});let o=await(0,a.getDocs)((0,a.collection)(t.ka,t.Ei));for(let n of o.docs){if(n.id===`_settings`||!v(n.data(),e).length)continue;let r=n.data().plans.map(t=>t?.roleId===e?{...t,roleId:``}:t);await(0,a.setDoc)((0,a.doc)(t.ka,t.Ei,n.id),{plans:r},{merge:!0})}let s=await(0,a.getDocs)((0,a.collection)(t.ka,`sys_tabs`));for(let n of s.docs){let i=r.c(n.data()?.roles);if(!i.includes(e))continue;let o=i.filter(t=>t!==e);await(0,a.setDoc)((0,a.doc)(t.ka,`sys_tabs`,n.id),{roles:o.length?o:[`user`]},{merge:!0})}await n.p(e),await(0,a.deleteDoc)((0,a.doc)(t.ka,u,e))}function x(){let[e,n]=(0,i.useState)(()=>t.ma());return(0,i.useEffect)(()=>(0,a.onSnapshot)((0,a.collection)(t.ka,u),e=>{let i=[],a={},o={};e.forEach(e=>{if(t.pa(e.id)){let t=String(e.data()?.name||``).trim();t&&(a[e.id]=t);let n=String(e.data()?.icon||``).trim();n&&(o[e.id]=n);return}r.v(e.id)&&i.push(d(e.id,e.data()))}),i.sort(f),t.va(a),t.ga(o),t._a(i),n(i)},()=>{}),[]),e}var S=(e=t.ma())=>t.ca.map(n=>({id:n,name:t.ha(n,e)}));Object.defineProperty(exports,`a`,{enumerable:!0,get:function(){return h}}),Object.defineProperty(exports,`c`,{enumerable:!0,get:function(){return g}}),Object.defineProperty(exports,`i`,{enumerable:!0,get:function(){return _}}),Object.defineProperty(exports,`l`,{enumerable:!0,get:function(){return x}}),Object.defineProperty(exports,`n`,{enumerable:!0,get:function(){return m}}),Object.defineProperty(exports,`o`,{enumerable:!0,get:function(){return p}}),Object.defineProperty(exports,`r`,{enumerable:!0,get:function(){return b}}),Object.defineProperty(exports,`s`,{enumerable:!0,get:function(){return y}}),Object.defineProperty(exports,`t`,{enumerable:!0,get:function(){return S}}),Object.defineProperty(exports,`u`,{enumerable:!0,get:function(){return l}});