@oneclick.dev/cms-core-modules 0.0.122 → 0.0.124

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 (162) hide show
  1. package/dist/{ContentEditor-CoJjsV-m.js → ContentEditor-BcIUumah.js} +63 -59
  2. package/dist/{ContentEditor-DIwqplfB.mjs → ContentEditor-DX1bTQKs.mjs} +27894 -26319
  3. package/dist/{Detail-Dk8E6_uF.mjs → Detail-B7pe808q.mjs} +15 -14
  4. package/dist/Detail-BESGmY7z.js +1 -0
  5. package/dist/{Detail-Cn9Bk0u0.mjs → Detail-B_Q7Qkuz.mjs} +26 -25
  6. package/dist/Detail-CNiLIEh9.js +1 -0
  7. package/dist/{Detail-B_scnidb.mjs → Detail-DNxAzeCs.mjs} +35 -34
  8. package/dist/Detail-t3tOcy3X.js +1 -0
  9. package/dist/Editor-D4evcdhv.mjs +768 -0
  10. package/dist/Editor-gLLtuJbY.js +1 -0
  11. package/dist/FormStatusBadge.vue_vue_type_script_setup_true_lang-BjKpsqT9.js +1 -0
  12. package/dist/FormStatusBadge.vue_vue_type_script_setup_true_lang-D5v5AhLe.mjs +76 -0
  13. package/dist/Knowledge-B66vxz--.js +1 -0
  14. package/dist/Knowledge-BnMTTuJ7.mjs +742 -0
  15. package/dist/{NewReservationDialog.vue_vue_type_script_setup_true_lang-bZidw6RT.mjs → NewReservationDialog.vue_vue_type_script_setup_true_lang-8I_Z9cD_.mjs} +530 -530
  16. package/dist/NewReservationDialog.vue_vue_type_script_setup_true_lang-BVE_uURZ.js +1 -0
  17. package/dist/OrderDetailDialog.vue_vue_type_script_setup_true_lang-BdFa-xNf.mjs +3566 -0
  18. package/dist/OrderDetailDialog.vue_vue_type_script_setup_true_lang-DzPOadcU.js +925 -0
  19. package/dist/Overview-BE4uYPx0.mjs +745 -0
  20. package/dist/Overview-CQRpFhbJ.mjs +286 -0
  21. package/dist/Overview-CTs7sX4d.js +1 -0
  22. package/dist/Overview-Cj89XXKN.js +1 -0
  23. package/dist/Overview-D_c18mbR.mjs +248 -0
  24. package/dist/Overview-g4Rcj245.js +1 -0
  25. package/dist/TableCalculationWidget-CkQPrVUd.js +59 -0
  26. package/dist/TableCalculationWidget-CrqcLGfU.mjs +254 -0
  27. package/dist/TableDataWidget-7qvC3Egd.js +1 -0
  28. package/dist/TableDataWidget-DMTSoGRO.mjs +121 -0
  29. package/dist/TableOverviewCard-AFq-puJs.js +1 -0
  30. package/dist/TableOverviewCard-Ci0d4o4w.mjs +391 -0
  31. package/dist/TableResultView.vue_vue_type_script_setup_true_lang-CBn-Oxl9.mjs +534 -0
  32. package/dist/TableResultView.vue_vue_type_script_setup_true_lang-C_Lv-SmJ.js +1 -0
  33. package/dist/TableRowActionCard-BhdnnPaq.mjs +266 -0
  34. package/dist/TableRowActionCard-IzB6tNN-.js +1 -0
  35. package/dist/TableView-6mdrL3zx.js +4 -0
  36. package/dist/TableView-Du5nOE6R.mjs +8228 -0
  37. package/dist/Test-CzmOmi53.mjs +447 -0
  38. package/dist/Test-USDtNFY1.js +1 -0
  39. package/dist/UserDetail-DpUL3mhk.mjs +1483 -0
  40. package/dist/UserDetail-KRIfxaYd.js +1 -0
  41. package/dist/{agenda-BCKDYOeF.mjs → agenda-DWdbWUbb.mjs} +10 -9
  42. package/dist/agenda-r9Gl85GL.js +1 -0
  43. package/dist/cms-core-modules.css +1 -1
  44. package/dist/dateRangePresets-B-l5b_wR.mjs +48 -0
  45. package/dist/dateRangePresets-CPWqst_x.js +1 -0
  46. package/dist/fuse-Deb-Iq39.mjs +1473 -0
  47. package/dist/fuse-_CGUd5Zq.js +1 -0
  48. package/dist/{index-DU3Ib10Z.mjs → index-B_qaX29C.mjs} +7 -6
  49. package/dist/index-CQuN5rKx.js +1 -0
  50. package/dist/index-CnDGeInm.js +1 -0
  51. package/dist/index-CqDTc5Ig.mjs +20 -0
  52. package/dist/index-CyvvAdt4.js +1 -0
  53. package/dist/index-DIRD7t5_.mjs +20 -0
  54. package/dist/index-OJuBYR60.mjs +57 -0
  55. package/dist/{index-Bk3yLv_G.js → index-yHLT6gaZ.js} +3 -3
  56. package/dist/index.cjs.js +1 -1
  57. package/dist/index.mjs +671 -118
  58. package/dist/{orders-CElKNc1v.mjs → orders-BfTLIm7U.mjs} +10 -9
  59. package/dist/orders-DUa2PVoa.js +1 -0
  60. package/dist/reports-ChCsd1Gk.mjs +1107 -0
  61. package/dist/reports-DmJPm8uP.js +158 -0
  62. package/dist/row-item-C1dUyimV.mjs +204 -0
  63. package/dist/row-item-Cyo3m3MZ.js +1 -0
  64. package/dist/server-handlers.cjs.js +1 -1
  65. package/dist/server-handlers.mjs +1764 -605
  66. package/dist/src/appointments/components/edit/EventDialog/BookingsList.vue.d.ts +9 -3
  67. package/dist/src/appointments/components/edit/EventDialog/OrderDetailDialog.vue.d.ts +2 -0
  68. package/dist/src/appointments/components/edit/EventDialog/ReservationDetailDialog.vue.d.ts +4 -2
  69. package/dist/src/appointments/components/edit/dashboard/BookingsList.vue.d.ts +9 -3
  70. package/dist/src/appointments/pages/edit/orders.vue.d.ts +9 -3
  71. package/dist/src/appointments/pages/edit/reports.vue.d.ts +229 -1
  72. package/dist/src/contentManager/components/content-editor/tiptap-extensions/Container.d.ts +1 -1
  73. package/dist/src/contentManager/components/content-editor/tiptap-extensions/Row.d.ts +7 -0
  74. package/dist/src/contentManager/components/content-editor/tiptap-extensions/Stack.d.ts +7 -0
  75. package/dist/src/contentManager/components/content-editor/tiptap-extensions/helpers/resizeHistory.d.ts +9 -0
  76. package/dist/src/contentManager/components/content-editor/tiptap-menus/ElementEditorMenu.vue.d.ts +3 -1
  77. package/dist/src/firebaseAuthManager/components/DeleteUserDialog.vue.d.ts +25 -0
  78. package/dist/src/firebaseAuthManager/components/ReasonActionDialog.vue.d.ts +23 -0
  79. package/dist/src/firebaseAuthManager/components/UserStatusBadge.vue.d.ts +5 -0
  80. package/dist/src/firebaseAuthManager/config.d.ts +151 -0
  81. package/dist/src/firebaseAuthManager/index.d.ts +163 -0
  82. package/dist/src/firebaseAuthManager/index.vue.d.ts +14 -0
  83. package/dist/src/firebaseAuthManager/metadata.d.ts +2 -0
  84. package/dist/src/firebaseAuthManager/pages/Overview.vue.d.ts +2 -0
  85. package/dist/src/firebaseAuthManager/pages/UserDetail.vue.d.ts +2 -0
  86. package/dist/src/firebaseAuthManager/permissions.d.ts +5 -0
  87. package/dist/src/firebaseAuthManager/routes.d.ts +5 -0
  88. package/dist/src/firebaseAuthManager/server.d.ts +162 -0
  89. package/dist/src/firebaseAuthManager/types.d.ts +84 -0
  90. package/dist/src/formBuilder/components/FormPreviewDialog.vue.d.ts +12 -0
  91. package/dist/src/formBuilder/components/FormStatusBadge.vue.d.ts +9 -0
  92. package/dist/src/formBuilder/config.d.ts +31 -0
  93. package/dist/src/formBuilder/index.d.ts +44 -0
  94. package/dist/src/formBuilder/index.vue.d.ts +14 -0
  95. package/dist/src/formBuilder/lib/forms.d.ts +11 -0
  96. package/dist/src/formBuilder/metadata.d.ts +2 -0
  97. package/dist/src/formBuilder/pages/Editor.vue.d.ts +2 -0
  98. package/dist/src/formBuilder/pages/Overview.vue.d.ts +2 -0
  99. package/dist/src/formBuilder/permissions.d.ts +5 -0
  100. package/dist/src/formBuilder/routes.d.ts +5 -0
  101. package/dist/src/formBuilder/server.d.ts +87 -0
  102. package/dist/src/formBuilder/tools.d.ts +1 -0
  103. package/dist/src/formBuilder/types.d.ts +46 -0
  104. package/dist/src/helpbot/composables/useHelpbotApi.d.ts +18 -0
  105. package/dist/src/helpbot/config.d.ts +17 -0
  106. package/dist/src/helpbot/index.d.ts +29 -0
  107. package/dist/src/helpbot/index.vue.d.ts +2 -0
  108. package/dist/src/helpbot/metadata.d.ts +2 -0
  109. package/dist/src/helpbot/pages/Knowledge.vue.d.ts +4 -0
  110. package/dist/src/helpbot/pages/Overview.vue.d.ts +2 -0
  111. package/dist/src/helpbot/pages/Test.vue.d.ts +4 -0
  112. package/dist/src/helpbot/permissions.d.ts +5 -0
  113. package/dist/src/helpbot/routes.d.ts +5 -0
  114. package/dist/src/helpbot/types.d.ts +42 -0
  115. package/dist/src/index.d.ts +3 -0
  116. package/dist/src/server-handlers.d.ts +2 -0
  117. package/dist/src/table/chat-components/TableCalculationWidget.vue.d.ts +15 -0
  118. package/dist/src/table/chat-components/TableDataWidget.vue.d.ts +15 -0
  119. package/dist/src/table/chat-components/TableOverviewCard.vue.d.ts +61 -0
  120. package/dist/src/table/chat-components/TableResultView.vue.d.ts +48 -0
  121. package/dist/src/table/chat-components/TableRowActionCard.vue.d.ts +15 -0
  122. package/dist/src/table/components/filters/DialogTableFilterOptionItem.vue.d.ts +16 -0
  123. package/dist/src/table/components/filters/NumberComparisonFilter.vue.d.ts +12 -0
  124. package/dist/src/table/components/filters/NumberComparisonFilterSettings.vue.d.ts +12 -0
  125. package/dist/src/table/components/filters/NumberRangeFilter.vue.d.ts +12 -0
  126. package/dist/src/table/components/filters/NumberRangeFilterSettings.vue.d.ts +12 -0
  127. package/dist/src/table/components/filters/filter-utils.d.ts +14 -0
  128. package/dist/src/table/composables/useTableAgentTools.d.ts +33 -0
  129. package/dist/src/table/index.d.ts +339 -0
  130. package/dist/src/table/tool-sandbox.d.ts +13 -0
  131. package/dist/src/table/tool-utils.d.ts +11 -0
  132. package/dist/src/table/tools.d.ts +333 -1
  133. package/dist/src/table/types.d.ts +79 -0
  134. package/dist/tool-sandbox-DdkMLkDK.mjs +182 -0
  135. package/dist/tool-sandbox-DoF1PsyS.js +115 -0
  136. package/dist/types-9N-DKxNj.mjs +250 -0
  137. package/dist/types-BMraG1kN.js +1 -0
  138. package/dist/types-Cem0vPo_.js +1 -0
  139. package/dist/types-ibC3-e1N.mjs +2630 -0
  140. package/dist/useHelpbotApi-BIIungOh.js +1 -0
  141. package/dist/useHelpbotApi-HC9JSiSn.mjs +229 -0
  142. package/dist/useTableAgentTools-D5mzGf3A.js +1 -0
  143. package/dist/useTableAgentTools-DcN3kYRL.mjs +131 -0
  144. package/dist/vee-validate-zod-BQElPD0m.js +1 -0
  145. package/dist/vee-validate-zod-CN16K2x9.mjs +1780 -0
  146. package/package.json +17 -17
  147. package/src/formBuilder/tools.ts +1 -0
  148. package/src/table/tools.ts +304 -1
  149. package/dist/Detail-BCUUNWvp.js +0 -1
  150. package/dist/Detail-DGg_xXZc.js +0 -1
  151. package/dist/Detail-Sc2qZdxj.js +0 -1
  152. package/dist/NewReservationDialog.vue_vue_type_script_setup_true_lang-BdZbcubW.js +0 -1
  153. package/dist/OrderDetailDialog.vue_vue_type_script_setup_true_lang-BYSeUW_V.js +0 -925
  154. package/dist/OrderDetailDialog.vue_vue_type_script_setup_true_lang-DwAUYR8p.mjs +0 -5021
  155. package/dist/TableView-Ctnep-Qu.mjs +0 -6247
  156. package/dist/TableView-DJqyJL9L.js +0 -4
  157. package/dist/agenda-B54F8cEr.js +0 -1
  158. package/dist/orders-BMosTk6r.js +0 -1
  159. package/dist/reports-BQT_GZzU.js +0 -158
  160. package/dist/reports-DksZCTOw.mjs +0 -837
  161. package/dist/vee-validate-zod-SjDT8X35.mjs +0 -4404
  162. package/dist/vee-validate-zod-VCmLnrtQ.js +0 -1
@@ -0,0 +1,1483 @@
1
+ import { defineComponent as Ye, ref as h, computed as b, watch as Dt, resolveComponent as u, openBlock as n, createBlock as d, withCtx as l, createVNode as t, createTextVNode as o, createElementVNode as s, toDisplayString as p, unref as r, withKeys as Rt, withModifiers as Qe, createElementBlock as g, createCommentVNode as c, reactive as je, onMounted as Mt, Fragment as L, normalizeClass as It, renderList as Oe } from "vue";
2
+ import { t as E } from "./index-RLz1QPrf.mjs";
3
+ import { AlertTriangle as We, Loader2 as Ze, Trash2 as et, ShieldAlert as be, ArrowLeft as Ke, ShieldCheck as Tt, ShieldX as Et, Ellipsis as zt, KeyRound as Ge, Fingerprint as He, AlertCircle as ne, RefreshCw as Pt, Clipboard as $t, UserRound as Bt, Plus as qe, Check as Lt, Save as Je } from "lucide-vue-next";
4
+ import { useModule as jt, useModuleApi as Ot, useModuleRoute as Wt, useModulePermissions as Kt, useModuleBreadcrumbs as Gt } from "@oneclick.dev/cms-kit";
5
+ import { h as Ht, p as qt, g as Jt, _ as Xe, a as Xt, b as Fe, c as Yt, u as ye, d as ge, f as Qt, e as Se, m as Zt } from "./types-9N-DKxNj.mjs";
6
+ const el = { class: "break-all font-mono" }, tl = { class: "space-y-4 py-5" }, ll = { class: "space-y-2" }, sl = { class: "space-y-2" }, al = { class: "break-all font-mono text-foreground" }, ol = {
7
+ key: 0,
8
+ class: "text-xs text-destructive"
9
+ }, il = /* @__PURE__ */ Ye({
10
+ __name: "DeleteUserDialog",
11
+ props: {
12
+ open: { type: Boolean },
13
+ uid: {},
14
+ email: { default: null },
15
+ busy: { type: Boolean, default: !1 },
16
+ error: { default: "" }
17
+ },
18
+ emits: ["update:open", "confirm"],
19
+ setup(A, { emit: le }) {
20
+ const H = A, _ = le, C = h(""), z = h(""), j = b(() => z.value === H.uid), F = b(() => j.value && C.value.trim().length >= 3 && !H.busy);
21
+ Dt(() => H.open, (P) => {
22
+ P && (C.value = "", z.value = "");
23
+ });
24
+ function a() {
25
+ H.busy || _("update:open", !1);
26
+ }
27
+ function q() {
28
+ F.value && _("confirm", {
29
+ reason: C.value.trim(),
30
+ confirmation: z.value
31
+ });
32
+ }
33
+ return (P, v) => {
34
+ const J = u("ResponsiveModalTitle"), se = u("ResponsiveModalDescription"), ae = u("ResponsiveModalHeader"), D = u("AlertTitle"), w = u("AlertDescription"), O = u("Alert"), S = u("Label"), X = u("Textarea"), Y = u("Input"), W = u("Button"), K = u("ResponsiveModalFooter"), m = u("ResponsiveModalScrollContent"), x = u("ResponsiveModal");
35
+ return n(), d(x, {
36
+ open: A.open,
37
+ "onUpdate:open": v[2] || (v[2] = (R) => _("update:open", R))
38
+ }, {
39
+ default: l(() => [
40
+ t(m, { class: "sm:max-w-lg" }, {
41
+ default: l(() => [
42
+ t(ae, null, {
43
+ default: l(() => [
44
+ t(J, null, {
45
+ default: l(() => [...v[3] || (v[3] = [
46
+ o("Delete Firebase Authentication user", -1)
47
+ ])]),
48
+ _: 1
49
+ }),
50
+ t(se, { class: "break-words" }, {
51
+ default: l(() => [
52
+ v[4] || (v[4] = o(" This permanently removes the sign-in identity for ", -1)),
53
+ s("span", el, p(A.email || A.uid), 1),
54
+ v[5] || (v[5] = o(". ", -1))
55
+ ]),
56
+ _: 1
57
+ })
58
+ ]),
59
+ _: 1
60
+ }),
61
+ s("div", tl, [
62
+ t(O, { variant: "destructive" }, {
63
+ default: l(() => [
64
+ t(r(We)),
65
+ t(D, null, {
66
+ default: l(() => [...v[6] || (v[6] = [
67
+ o("The linked Firestore profile will be kept", -1)
68
+ ])]),
69
+ _: 1
70
+ }),
71
+ t(w, null, {
72
+ default: l(() => [...v[7] || (v[7] = [
73
+ o(" This action deletes only the Firebase Authentication user. Profile documents, subcollections, and related application data are not removed. With profile linking enabled, this module blocks custom-UID reuse when it finds the retained profile. ", -1)
74
+ ])]),
75
+ _: 1
76
+ })
77
+ ]),
78
+ _: 1
79
+ }),
80
+ s("div", ll, [
81
+ t(S, { for: "firebase-delete-reason" }, {
82
+ default: l(() => [...v[8] || (v[8] = [
83
+ o("Reason", -1)
84
+ ])]),
85
+ _: 1
86
+ }),
87
+ t(X, {
88
+ id: "firebase-delete-reason",
89
+ modelValue: C.value,
90
+ "onUpdate:modelValue": v[0] || (v[0] = (R) => C.value = R),
91
+ rows: "3",
92
+ maxlength: "500",
93
+ placeholder: "Why must this authentication user be deleted?",
94
+ disabled: A.busy
95
+ }, null, 8, ["modelValue", "disabled"]),
96
+ v[9] || (v[9] = s("p", { class: "text-xs text-muted-foreground" }, "At least 3 characters; required for the Studio activity record.", -1))
97
+ ]),
98
+ s("div", sl, [
99
+ t(S, {
100
+ for: "firebase-delete-confirmation",
101
+ class: "block break-words leading-5"
102
+ }, {
103
+ default: l(() => [
104
+ v[10] || (v[10] = o(" Type the exact UID ", -1)),
105
+ s("span", al, p(A.uid), 1),
106
+ v[11] || (v[11] = o(" to confirm ", -1))
107
+ ]),
108
+ _: 1
109
+ }),
110
+ t(Y, {
111
+ id: "firebase-delete-confirmation",
112
+ modelValue: z.value,
113
+ "onUpdate:modelValue": v[1] || (v[1] = (R) => z.value = R),
114
+ autocomplete: "off",
115
+ placeholder: A.uid,
116
+ disabled: A.busy,
117
+ onKeydown: Rt(Qe(q, ["prevent"]), ["enter"])
118
+ }, null, 8, ["modelValue", "placeholder", "disabled", "onKeydown"]),
119
+ z.value && !j.value ? (n(), g("p", ol, " Enter the exact Firebase UID. ")) : c("", !0)
120
+ ]),
121
+ A.error ? (n(), d(O, {
122
+ key: 0,
123
+ variant: "destructive"
124
+ }, {
125
+ default: l(() => [
126
+ t(r(We)),
127
+ t(D, null, {
128
+ default: l(() => [...v[12] || (v[12] = [
129
+ o("Deletion failed", -1)
130
+ ])]),
131
+ _: 1
132
+ }),
133
+ t(w, null, {
134
+ default: l(() => [
135
+ o(p(A.error), 1)
136
+ ]),
137
+ _: 1
138
+ })
139
+ ]),
140
+ _: 1
141
+ })) : c("", !0)
142
+ ]),
143
+ t(K, { class: "gap-2 sm:justify-end" }, {
144
+ default: l(() => [
145
+ t(W, {
146
+ variant: "outline",
147
+ disabled: A.busy,
148
+ onClick: a
149
+ }, {
150
+ default: l(() => [...v[13] || (v[13] = [
151
+ o("Cancel", -1)
152
+ ])]),
153
+ _: 1
154
+ }, 8, ["disabled"]),
155
+ t(W, {
156
+ variant: "destructive",
157
+ disabled: !F.value,
158
+ onClick: q
159
+ }, {
160
+ default: l(() => [
161
+ A.busy ? (n(), d(r(Ze), {
162
+ key: 0,
163
+ class: "size-4 animate-spin"
164
+ })) : (n(), d(r(et), {
165
+ key: 1,
166
+ class: "size-4"
167
+ })),
168
+ o(" " + p(A.busy ? "Deleting…" : "Delete Auth user"), 1)
169
+ ]),
170
+ _: 1
171
+ }, 8, ["disabled"])
172
+ ]),
173
+ _: 1
174
+ })
175
+ ]),
176
+ _: 1
177
+ })
178
+ ]),
179
+ _: 1
180
+ }, 8, ["open"]);
181
+ };
182
+ }
183
+ }), nl = { class: "mx-auto flex w-full max-w-6xl flex-1 flex-col px-4 py-6 pb-28 sm:px-6 sm:py-10 lg:px-8" }, rl = {
184
+ key: 0,
185
+ class: "flex min-h-96 items-center justify-center rounded-xl border border-dashed p-8"
186
+ }, ul = { class: "max-w-md text-center" }, dl = { class: "mx-auto flex size-11 items-center justify-center rounded-full bg-muted" }, ml = { class: "mt-4 font-semibold" }, fl = { class: "flex flex-col gap-5 sm:flex-row sm:items-start sm:justify-between" }, pl = { class: "flex min-w-0 items-start gap-3" }, vl = { class: "min-w-0" }, cl = { class: "flex flex-wrap items-center gap-2" }, bl = { class: "truncate text-2xl font-semibold tracking-tight sm:text-3xl" }, yl = { class: "mt-1 truncate text-sm text-muted-foreground" }, gl = {
187
+ key: 0,
188
+ class: "flex w-full flex-wrap gap-2 sm:w-auto sm:justify-end"
189
+ }, xl = {
190
+ key: 2,
191
+ class: "mt-8 grid gap-5 @4xl:grid-cols-[minmax(0,2fr)_minmax(18rem,1fr)]"
192
+ }, kl = { class: "space-y-5" }, _l = { class: "space-y-5" }, wl = { class: "grid gap-5 @4xl:grid-cols-[minmax(0,2fr)_minmax(18rem,1fr)]" }, hl = { class: "space-y-5" }, Cl = { class: "space-y-2 sm:col-span-2" }, Vl = { class: "space-y-2 sm:col-span-2" }, Al = { class: "space-y-2" }, Nl = { class: "space-y-2" }, Fl = { class: "space-y-2 sm:col-span-2" }, Sl = { class: "space-y-2" }, Ul = {
193
+ key: 0,
194
+ class: "grid gap-5 sm:grid-cols-2"
195
+ }, Dl = { class: "space-y-2 sm:col-span-2" }, Rl = { class: "space-y-2" }, Ml = { class: "space-y-2" }, Il = {
196
+ key: 1,
197
+ class: "grid gap-4 sm:grid-cols-2"
198
+ }, Tl = { class: "rounded-lg border p-4 sm:col-span-2" }, El = { class: "mt-1 break-words text-sm font-medium" }, zl = { class: "rounded-lg border p-4" }, Pl = { class: "mt-1 break-words text-sm font-medium" }, $l = { class: "rounded-lg border p-4" }, Bl = { class: "mt-1 break-words text-sm font-medium" }, Ll = {
199
+ key: 3,
200
+ class: "flex items-start justify-between gap-4 rounded-lg border p-4"
201
+ }, jl = {
202
+ key: 4,
203
+ class: "space-y-2 border-t pt-5"
204
+ }, Ol = { class: "rounded-lg border p-4" }, Wl = { class: "text-xs text-muted-foreground" }, Kl = { class: "mt-1 break-words text-sm font-medium" }, Gl = { class: "rounded-lg border p-4" }, Hl = { class: "text-xs text-muted-foreground" }, ql = { class: "mt-1 break-words text-sm font-medium" }, Jl = { class: "rounded-lg border p-4" }, Xl = { class: "text-xs text-muted-foreground" }, Yl = { class: "mt-1 break-words text-sm font-medium" }, Ql = { class: "rounded-lg border p-4" }, Zl = { class: "text-xs text-muted-foreground" }, es = { class: "mt-1 break-words text-sm font-medium" }, ts = { class: "space-y-5" }, ls = { class: "flex items-start justify-between gap-4 rounded-lg border p-4" }, ss = { class: "flex items-start justify-between gap-4 rounded-lg border p-4" }, as = {
205
+ key: 0,
206
+ class: "flex cursor-pointer items-start gap-3 rounded-lg border p-4"
207
+ }, os = { class: "flex items-center justify-between gap-3" }, is = {
208
+ key: 0,
209
+ class: "flex items-center justify-between gap-3"
210
+ }, ns = { class: "flex items-center justify-between gap-3" }, rs = { class: "text-sm font-medium" }, us = { class: "mt-2 flex flex-wrap gap-1.5" }, ds = {
211
+ key: 0,
212
+ class: "text-sm text-muted-foreground"
213
+ }, ms = { class: "space-y-3 text-sm" }, fs = { class: "mt-1" }, ps = { class: "mt-1" }, vs = { class: "mt-1" }, cs = {
214
+ key: 1,
215
+ class: "grid gap-2 border-t pt-4"
216
+ }, bs = {
217
+ key: 0,
218
+ class: "space-y-2"
219
+ }, ys = {
220
+ key: 1,
221
+ class: "sticky bottom-4 z-20 mt-6 flex items-center justify-between gap-4 rounded-xl border bg-background/90 p-3 shadow-lg backdrop-blur"
222
+ }, gs = { class: "hidden text-sm text-muted-foreground sm:block" }, xe = "none", Cs = /* @__PURE__ */ Ye({
223
+ __name: "UserDetail",
224
+ setup(A) {
225
+ function le(i) {
226
+ return i === null ? xe : `role:${JSON.stringify(i)}`;
227
+ }
228
+ function H(i) {
229
+ if (i === xe || !i.startsWith("role:")) return null;
230
+ try {
231
+ const e = JSON.parse(i.slice(5));
232
+ return typeof e == "string" ? e : null;
233
+ } catch {
234
+ return null;
235
+ }
236
+ }
237
+ const { config: _ } = jt(), C = Ot(), { params: z, navigateTo: j } = Wt(), { hasPermission: F } = Kt(), a = h(null), q = h(!1), P = h(""), v = h(!1), J = h(""), se = h(""), ae = h(""), D = h(""), w = h(null), O = h(!1), S = h(""), X = h(!1), Y = h(!1), W = h(""), K = h(xe), m = je({
238
+ email: "",
239
+ password: "",
240
+ uid: "",
241
+ displayName: "",
242
+ phoneNumber: "",
243
+ emailVerified: !1,
244
+ disabled: !1,
245
+ createProfile: !1
246
+ }), x = je({
247
+ displayName: "",
248
+ email: "",
249
+ phoneNumber: "",
250
+ emailVerified: !1
251
+ }), R = b(() => String(z.value?.uid || "")), y = b(() => R.value.length === 0), ke = b(() => {
252
+ if (y.value) return "";
253
+ try {
254
+ return Ht(R.value);
255
+ } catch {
256
+ return "";
257
+ }
258
+ }), _e = b(() => F("view-auth-users")), U = b(() => F("view-auth-user-pii")), tt = b(() => F("create-auth-users")), oe = b(() => F("edit-auth-users") && U.value), lt = b(() => F("manage-auth-status")), re = b(() => F("manage-auth-sessions")), ue = b(() => F("manage-auth-mfa")), Ue = b(() => F("manage-auth-roles")), De = b(() => F("manage-auth-profiles")), st = b(() => F("delete-auth-users")), at = b(() => y.value ? tt.value : _e.value), we = b(() => !!(_.linkFirestoreProfiles && De.value));
259
+ m.createProfile = we.value;
260
+ const ot = b(() => qt(_.roleOptions)), Re = b(() => {
261
+ const i = [...ot.value];
262
+ return a.value?.role && !i.includes(a.value.role) && i.unshift(a.value.role), i;
263
+ }), it = b(() => !!(_.manageRoleClaim && _.roleClaimKey)), he = b(() => y.value ? "New Firebase user" : a.value ? U.value ? a.value.displayName || a.value.email || a.value.phoneNumber || "Unnamed user" : `User ${a.value.uid.slice(0, 8)}` : ke.value), Me = b(() => a.value ? U.value && (a.value.email || a.value.phoneNumber) || a.value.uid : ke.value), Ce = b(() => x.displayName.trim() || null), ie = b(() => x.phoneNumber.trim() || null), G = b(() => x.email.trim()), de = b(() => !a.value || y.value ? !1 : Ce.value !== (a.value.displayName || null) || G.value !== (a.value.email || "") || ie.value !== (a.value.phoneNumber || null) || x.emailVerified !== a.value.emailVerified), Ve = b(() => m.email.trim() ? /^\S+@\S+\.\S+$/.test(m.email.trim()) ? m.password.length < 8 ? "Password must contain at least 8 characters." : m.uid && m.uid !== m.uid.trim() ? "Custom UID may not begin or end with whitespace." : m.uid.length > 128 ? "Custom UID may not exceed 128 characters." : m.phoneNumber.trim() && !/^\+[1-9]\d{6,14}$/.test(m.phoneNumber.trim()) ? "Phone number must use E.164 format, for example +32470000000." : "" : "Enter a valid email address." : "Email is required."), Ae = b(() => a.value ? a.value.email && !G.value ? "An existing email address cannot be cleared here." : G.value && !/^\S+@\S+\.\S+$/.test(G.value) ? "Enter a valid email address." : ie.value && !/^\+[1-9]\d{6,14}$/.test(ie.value) ? "Phone number must use E.164 format, for example +32470000000." : x.emailVerified && !G.value ? "An email address is required before it can be marked verified." : "" : ""), Ie = b(() => v.value ? !0 : y.value ? !!Ve.value : !oe.value || !de.value || !!Ae.value || D.value.trim().length < 3);
264
+ Gt(() => [
265
+ { text: y.value ? "New Firebase user" : he.value }
266
+ ]);
267
+ function me(i) {
268
+ a.value = i, x.displayName = i.displayName || "", x.email = i.email || "", x.phoneNumber = i.phoneNumber || "", x.emailVerified = i.emailVerified, K.value = le(i.role);
269
+ }
270
+ function fe(i) {
271
+ Zt(i) && (se.value = "The account change completed, but Studio could not confirm that its activity entry was recorded.", E.warning("Action completed without a confirmed activity entry"));
272
+ }
273
+ function nt(i) {
274
+ !("user" in i) || !i.profileError || (ae.value = i.profileError, E.warning("User created, but the linked profile failed"));
275
+ }
276
+ async function Te() {
277
+ if (!(y.value || !_e.value)) {
278
+ if (!ke.value) {
279
+ P.value = "This Firebase user link is invalid.";
280
+ return;
281
+ }
282
+ q.value = !0, P.value = "";
283
+ try {
284
+ const i = await C.get(`/users/${R.value}`);
285
+ me(ye(i));
286
+ } catch (i) {
287
+ P.value = ge(i, "This Firebase Authentication user could not be loaded.");
288
+ } finally {
289
+ q.value = !1;
290
+ }
291
+ }
292
+ }
293
+ function rt() {
294
+ if (!a.value) throw new Error("No user is loaded.");
295
+ const i = { reason: D.value.trim() };
296
+ return Ce.value !== (a.value.displayName || null) && (i.displayName = Ce.value), G.value !== (a.value.email || "") && (i.email = G.value), ie.value !== (a.value.phoneNumber || null) && (i.phoneNumber = ie.value), x.emailVerified !== a.value.emailVerified && (i.emailVerified = x.emailVerified), i;
297
+ }
298
+ async function ut() {
299
+ if (!Ie.value) {
300
+ v.value = !0, J.value = "";
301
+ try {
302
+ if (y.value) {
303
+ const i = {
304
+ email: m.email.trim(),
305
+ password: m.password,
306
+ emailVerified: m.emailVerified,
307
+ disabled: m.disabled,
308
+ createProfile: !!(we.value && m.createProfile)
309
+ };
310
+ m.uid && (i.uid = m.uid), m.displayName.trim() && (i.displayName = m.displayName.trim()), m.phoneNumber.trim() && (i.phoneNumber = m.phoneNumber.trim());
311
+ const e = await C.post("/users", { body: i }), k = ye(e);
312
+ me(k), m.password = "", E.success("Firebase user created"), fe(e), nt(e), j(Qt(k.uid));
313
+ } else if (a.value) {
314
+ const i = await C.patch(
315
+ `/users/${Se(a.value.uid)}`,
316
+ { body: rt() }
317
+ );
318
+ me(ye(i)), D.value = "", E.success("User identity updated"), fe(i);
319
+ }
320
+ } catch (i) {
321
+ J.value = ge(i, y.value ? "The Firebase user could not be created." : "The Firebase identity could not be updated.");
322
+ } finally {
323
+ v.value = !1;
324
+ }
325
+ }
326
+ }
327
+ async function dt() {
328
+ if (a.value)
329
+ try {
330
+ await navigator.clipboard.writeText(a.value.uid), E.success("UID copied");
331
+ } catch {
332
+ E.error("UID could not be copied");
333
+ }
334
+ }
335
+ function mt() {
336
+ if (!a.value) return;
337
+ const i = a.value.disabled;
338
+ w.value = {
339
+ kind: "status",
340
+ disabled: !i,
341
+ title: i ? "Restore sign-in" : "Suspend sign-in",
342
+ description: i ? "This user will be allowed to authenticate with the connected Firebase project again." : "This user will no longer be able to sign in or refresh their Firebase session.",
343
+ confirmLabel: i ? "Restore sign-in" : "Suspend sign-in",
344
+ destructive: !i
345
+ }, S.value = "";
346
+ }
347
+ function Ee() {
348
+ w.value = {
349
+ kind: "sessions",
350
+ title: "Revoke all sessions",
351
+ description: "All Firebase refresh tokens will be revoked. Existing ID tokens can remain valid until they expire unless the connected app checks revocation.",
352
+ confirmLabel: "Revoke sessions",
353
+ destructive: !0
354
+ }, S.value = "";
355
+ }
356
+ function ze() {
357
+ w.value = {
358
+ kind: "mfa",
359
+ title: "Reset multi-factor authentication",
360
+ description: "Every enrolled second factor will be removed. The user must enroll MFA again in the connected application.",
361
+ confirmLabel: "Reset MFA",
362
+ destructive: !0
363
+ }, S.value = "";
364
+ }
365
+ function ft() {
366
+ const i = H(K.value);
367
+ w.value = {
368
+ kind: "role",
369
+ role: i,
370
+ title: i ? `Assign ${i} role` : "Remove role claim",
371
+ description: i ? `The ${_.roleClaimKey} custom claim will be changed to “${i}”. Existing sessions may not see the change until their token refreshes.` : `The ${_.roleClaimKey} custom claim will be removed. Existing sessions may not see the change until their token refreshes.`,
372
+ confirmLabel: i ? "Change role" : "Remove role",
373
+ destructive: !i
374
+ }, S.value = "";
375
+ }
376
+ function pt() {
377
+ w.value = {
378
+ kind: "profile",
379
+ title: "Create linked Firestore profile",
380
+ description: `A new document will be created in ${_.profileCollection || "the configured profile collection"} using this Firebase UID. Existing data is never overwritten.`,
381
+ confirmLabel: "Create profile"
382
+ }, S.value = "";
383
+ }
384
+ function Pe(i) {
385
+ i || (w.value = null, S.value = "");
386
+ }
387
+ async function vt(i) {
388
+ if (!w.value || !a.value || O.value) return;
389
+ const e = w.value, k = Se(a.value.uid);
390
+ O.value = !0, S.value = "";
391
+ try {
392
+ let V;
393
+ e.kind === "status" ? V = await C.post(`/users/${k}/status`, {
394
+ body: { disabled: !!e.disabled, reason: i }
395
+ }) : e.kind === "sessions" ? V = await C.post(`/users/${k}/revoke-sessions`, { body: { reason: i } }) : e.kind === "mfa" ? V = await C.post(`/users/${k}/reset-mfa`, { body: { reason: i } }) : e.kind === "role" ? V = await C.post(`/users/${k}/role`, { body: { role: e.role ?? null, reason: i } }) : V = await C.post(`/users/${k}/profile`, { body: { reason: i } }), me(ye(V));
396
+ const pe = {
397
+ status: a.value.disabled ? "Sign-in suspended" : "Sign-in restored",
398
+ sessions: "Sessions revoked",
399
+ mfa: "Multi-factor authentication reset",
400
+ role: "Role claim updated",
401
+ profile: "user" in V && V.profileCreated === !1 ? "Linked profile already exists; state refreshed" : "Linked profile created"
402
+ };
403
+ e.kind === "profile" && "user" in V && V.profileCreated === !1 ? E.info(pe[e.kind]) : E.success(pe[e.kind]), fe(V), Pe(!1);
404
+ } catch (V) {
405
+ S.value = ge(V, "The account action could not be completed.");
406
+ } finally {
407
+ O.value = !1;
408
+ }
409
+ }
410
+ function ct() {
411
+ W.value = "", X.value = !0;
412
+ }
413
+ async function bt(i) {
414
+ if (!(!a.value || Y.value)) {
415
+ Y.value = !0, W.value = "";
416
+ try {
417
+ const e = await C.del(
418
+ `/users/${Se(a.value.uid)}`,
419
+ { body: i }
420
+ );
421
+ E.success("Firebase Authentication user deleted"), fe(e), X.value = !1, j("");
422
+ } catch (e) {
423
+ W.value = ge(e, "The Firebase Authentication user could not be deleted.");
424
+ } finally {
425
+ Y.value = !1;
426
+ }
427
+ }
428
+ }
429
+ return Mt(() => {
430
+ !y.value && _e.value && Te();
431
+ }), (i, e) => {
432
+ const k = u("Button"), V = u("AvatarImage"), pe = u("AvatarFallback"), yt = u("Avatar"), gt = u("DropdownMenuTrigger"), $e = u("DropdownMenuItem"), xt = u("DropdownMenuContent"), kt = u("DropdownMenu"), M = u("AlertTitle"), I = u("AlertDescription"), T = u("Alert"), ve = u("Skeleton"), Q = u("CardTitle"), Z = u("CardDescription"), ee = u("CardHeader"), N = u("Label"), $ = u("Input"), B = u("CardContent"), _t = u("InputGroupInput"), wt = u("InputGroupButton"), ht = u("InputGroupAddon"), Ct = u("InputGroup"), Ne = u("Switch"), Vt = u("Textarea"), te = u("Card"), ce = u("Badge"), At = u("Checkbox"), Be = u("Separator"), Nt = u("SelectValue"), Ft = u("SelectTrigger"), Le = u("SelectItem"), St = u("SelectContent"), Ut = u("Select");
433
+ return n(), g("main", nl, [
434
+ at.value ? (n(), g(L, { key: 1 }, [
435
+ s("header", fl, [
436
+ s("div", pl, [
437
+ t(k, {
438
+ variant: "ghost",
439
+ size: "icon",
440
+ class: "mt-0.5 shrink-0",
441
+ "aria-label": "Back to Firebase users",
442
+ onClick: e[1] || (e[1] = (f) => r(j)(""))
443
+ }, {
444
+ default: l(() => [
445
+ t(r(Ke), { class: "size-4" })
446
+ ]),
447
+ _: 1
448
+ }),
449
+ a.value && !y.value ? (n(), d(yt, {
450
+ key: 0,
451
+ class: "size-11 shrink-0"
452
+ }, {
453
+ default: l(() => [
454
+ U.value && a.value.photoURL ? (n(), d(V, {
455
+ key: 0,
456
+ src: a.value.photoURL,
457
+ alt: he.value
458
+ }, null, 8, ["src", "alt"])) : c("", !0),
459
+ t(pe, null, {
460
+ default: l(() => [
461
+ o(p(U.value ? r(Jt)(a.value) : "U"), 1)
462
+ ]),
463
+ _: 1
464
+ })
465
+ ]),
466
+ _: 1
467
+ })) : c("", !0),
468
+ s("div", vl, [
469
+ s("div", cl, [
470
+ s("h1", bl, p(he.value), 1),
471
+ a.value && !y.value ? (n(), d(Xe, {
472
+ key: 0,
473
+ disabled: a.value.disabled
474
+ }, null, 8, ["disabled"])) : c("", !0)
475
+ ]),
476
+ s("p", yl, p(y.value ? "Create an Authentication identity and optional linked profile." : Me.value), 1)
477
+ ])
478
+ ]),
479
+ a.value && !y.value ? (n(), g("div", gl, [
480
+ lt.value ? (n(), d(k, {
481
+ key: 0,
482
+ variant: a.value.disabled ? "default" : "outline",
483
+ class: "flex-1 sm:flex-none",
484
+ onClick: mt
485
+ }, {
486
+ default: l(() => [
487
+ a.value.disabled ? (n(), d(r(Tt), {
488
+ key: 0,
489
+ class: "size-4"
490
+ })) : (n(), d(r(Et), {
491
+ key: 1,
492
+ class: "size-4"
493
+ })),
494
+ o(" " + p(a.value.disabled ? "Restore sign-in" : "Suspend sign-in"), 1)
495
+ ]),
496
+ _: 1
497
+ }, 8, ["variant"])) : c("", !0),
498
+ re.value || ue.value && a.value.mfaFactorCount > 0 ? (n(), d(kt, { key: 1 }, {
499
+ default: l(() => [
500
+ t(gt, { "as-child": "" }, {
501
+ default: l(() => [
502
+ t(k, {
503
+ variant: "outline",
504
+ size: "icon",
505
+ "aria-label": "More account actions"
506
+ }, {
507
+ default: l(() => [
508
+ t(r(zt), { class: "size-4" })
509
+ ]),
510
+ _: 1
511
+ })
512
+ ]),
513
+ _: 1
514
+ }),
515
+ t(xt, {
516
+ align: "end",
517
+ class: "w-60"
518
+ }, {
519
+ default: l(() => [
520
+ re.value ? (n(), d($e, {
521
+ key: 0,
522
+ onClick: Ee
523
+ }, {
524
+ default: l(() => [
525
+ t(r(Ge), { class: "size-4" }),
526
+ e[19] || (e[19] = o(" Revoke sessions ", -1))
527
+ ]),
528
+ _: 1
529
+ })) : c("", !0),
530
+ ue.value && a.value.mfaFactorCount > 0 ? (n(), d($e, {
531
+ key: 1,
532
+ variant: "destructive",
533
+ onClick: ze
534
+ }, {
535
+ default: l(() => [
536
+ t(r(He), { class: "size-4" }),
537
+ e[20] || (e[20] = o(" Reset MFA ", -1))
538
+ ]),
539
+ _: 1
540
+ })) : c("", !0)
541
+ ]),
542
+ _: 1
543
+ })
544
+ ]),
545
+ _: 1
546
+ })) : c("", !0)
547
+ ])) : c("", !0)
548
+ ]),
549
+ se.value ? (n(), d(T, {
550
+ key: 0,
551
+ class: "mt-6 border-amber-400/60 bg-amber-50 dark:border-amber-800/70 dark:bg-amber-950/30"
552
+ }, {
553
+ default: l(() => [
554
+ t(r(be)),
555
+ t(M, null, {
556
+ default: l(() => [...e[21] || (e[21] = [
557
+ o("Activity entry confirmation missing", -1)
558
+ ])]),
559
+ _: 1
560
+ }),
561
+ t(I, null, {
562
+ default: l(() => [
563
+ o(p(se.value), 1)
564
+ ]),
565
+ _: 1
566
+ })
567
+ ]),
568
+ _: 1
569
+ })) : c("", !0),
570
+ ae.value ? (n(), d(T, {
571
+ key: 1,
572
+ class: "mt-6 border-amber-400/60 bg-amber-50 dark:border-amber-800/70 dark:bg-amber-950/30"
573
+ }, {
574
+ default: l(() => [
575
+ t(r(ne)),
576
+ t(M, null, {
577
+ default: l(() => [...e[22] || (e[22] = [
578
+ o("Linked profile was not created", -1)
579
+ ])]),
580
+ _: 1
581
+ }),
582
+ t(I, null, {
583
+ default: l(() => [
584
+ o(p(ae.value), 1)
585
+ ]),
586
+ _: 1
587
+ })
588
+ ]),
589
+ _: 1
590
+ })) : c("", !0),
591
+ q.value ? (n(), g("section", xl, [
592
+ s("div", kl, [
593
+ t(ve, { class: "h-96 w-full rounded-xl" }),
594
+ t(ve, { class: "h-64 w-full rounded-xl" })
595
+ ]),
596
+ s("div", _l, [
597
+ t(ve, { class: "h-72 w-full rounded-xl" }),
598
+ t(ve, { class: "h-56 w-full rounded-xl" })
599
+ ])
600
+ ])) : P.value ? (n(), d(T, {
601
+ key: 3,
602
+ variant: "destructive",
603
+ class: "mt-8"
604
+ }, {
605
+ default: l(() => [
606
+ t(r(ne)),
607
+ t(M, null, {
608
+ default: l(() => [...e[23] || (e[23] = [
609
+ o("Could not load this user", -1)
610
+ ])]),
611
+ _: 1
612
+ }),
613
+ t(I, { class: "flex flex-col items-start gap-3 sm:flex-row sm:items-center sm:justify-between" }, {
614
+ default: l(() => [
615
+ s("span", null, p(P.value), 1),
616
+ t(k, {
617
+ variant: "outline",
618
+ size: "sm",
619
+ onClick: Te
620
+ }, {
621
+ default: l(() => [
622
+ t(r(Pt), { class: "size-4" }),
623
+ e[24] || (e[24] = o(" Try again ", -1))
624
+ ]),
625
+ _: 1
626
+ })
627
+ ]),
628
+ _: 1
629
+ })
630
+ ]),
631
+ _: 1
632
+ })) : y.value || a.value ? (n(), g("form", {
633
+ key: 4,
634
+ id: "firebase-auth-user-form",
635
+ class: "mt-8",
636
+ onSubmit: Qe(ut, ["prevent"])
637
+ }, [
638
+ s("div", wl, [
639
+ s("div", hl, [
640
+ t(te, null, {
641
+ default: l(() => [
642
+ t(ee, null, {
643
+ default: l(() => [
644
+ t(Q, null, {
645
+ default: l(() => [...e[25] || (e[25] = [
646
+ o("Identity", -1)
647
+ ])]),
648
+ _: 1
649
+ }),
650
+ t(Z, null, {
651
+ default: l(() => [
652
+ o(p(y.value ? "Create the primary Firebase Authentication record." : "Authentication-owned identity fields."), 1)
653
+ ]),
654
+ _: 1
655
+ })
656
+ ]),
657
+ _: 1
658
+ }),
659
+ y.value ? (n(), d(B, {
660
+ key: 0,
661
+ class: "grid gap-5 sm:grid-cols-2"
662
+ }, {
663
+ default: l(() => [
664
+ s("div", Cl, [
665
+ t(N, { for: "firebase-create-email" }, {
666
+ default: l(() => [...e[26] || (e[26] = [
667
+ o("Email", -1)
668
+ ])]),
669
+ _: 1
670
+ }),
671
+ t($, {
672
+ id: "firebase-create-email",
673
+ modelValue: m.email,
674
+ "onUpdate:modelValue": e[2] || (e[2] = (f) => m.email = f),
675
+ type: "email",
676
+ autocomplete: "off",
677
+ placeholder: "user@example.com",
678
+ required: ""
679
+ }, null, 8, ["modelValue"])
680
+ ]),
681
+ s("div", Vl, [
682
+ t(N, { for: "firebase-create-password" }, {
683
+ default: l(() => [...e[27] || (e[27] = [
684
+ o("Initial password", -1)
685
+ ])]),
686
+ _: 1
687
+ }),
688
+ t($, {
689
+ id: "firebase-create-password",
690
+ modelValue: m.password,
691
+ "onUpdate:modelValue": e[3] || (e[3] = (f) => m.password = f),
692
+ type: "password",
693
+ autocomplete: "new-password",
694
+ minlength: "8",
695
+ required: ""
696
+ }, null, 8, ["modelValue"]),
697
+ e[28] || (e[28] = s("p", { class: "text-xs text-muted-foreground" }, "At least 8 characters. It is submitted through Studio’s server to Firebase and is not returned in the response.", -1))
698
+ ]),
699
+ s("div", Al, [
700
+ t(N, { for: "firebase-create-name" }, {
701
+ default: l(() => [...e[29] || (e[29] = [
702
+ o("Display name", -1)
703
+ ])]),
704
+ _: 1
705
+ }),
706
+ t($, {
707
+ id: "firebase-create-name",
708
+ modelValue: m.displayName,
709
+ "onUpdate:modelValue": e[4] || (e[4] = (f) => m.displayName = f),
710
+ autocomplete: "off",
711
+ placeholder: "Optional"
712
+ }, null, 8, ["modelValue"])
713
+ ]),
714
+ s("div", Nl, [
715
+ t(N, { for: "firebase-create-phone" }, {
716
+ default: l(() => [...e[30] || (e[30] = [
717
+ o("Phone number", -1)
718
+ ])]),
719
+ _: 1
720
+ }),
721
+ t($, {
722
+ id: "firebase-create-phone",
723
+ modelValue: m.phoneNumber,
724
+ "onUpdate:modelValue": e[5] || (e[5] = (f) => m.phoneNumber = f),
725
+ type: "tel",
726
+ autocomplete: "off",
727
+ placeholder: "+32470000000"
728
+ }, null, 8, ["modelValue"])
729
+ ]),
730
+ s("div", Fl, [
731
+ t(N, { for: "firebase-create-uid" }, {
732
+ default: l(() => [...e[31] || (e[31] = [
733
+ o("Custom UID", -1)
734
+ ])]),
735
+ _: 1
736
+ }),
737
+ t($, {
738
+ id: "firebase-create-uid",
739
+ modelValue: m.uid,
740
+ "onUpdate:modelValue": e[6] || (e[6] = (f) => m.uid = f),
741
+ class: "font-mono",
742
+ autocomplete: "off",
743
+ placeholder: "Optional; Firebase generates one when blank"
744
+ }, null, 8, ["modelValue"]),
745
+ e[32] || (e[32] = s("p", { class: "text-xs leading-5 text-muted-foreground" }, " Preserved exactly. With profile linking enabled, this module blocks the UID when it finds an existing linked profile. ", -1))
746
+ ])
747
+ ]),
748
+ _: 1
749
+ })) : a.value ? (n(), d(B, {
750
+ key: 1,
751
+ class: "space-y-5"
752
+ }, {
753
+ default: l(() => [
754
+ s("div", Sl, [
755
+ t(N, { for: "firebase-user-uid" }, {
756
+ default: l(() => [...e[33] || (e[33] = [
757
+ o("Firebase UID", -1)
758
+ ])]),
759
+ _: 1
760
+ }),
761
+ t(Ct, null, {
762
+ default: l(() => [
763
+ t(_t, {
764
+ id: "firebase-user-uid",
765
+ "model-value": a.value.uid,
766
+ class: "font-mono",
767
+ readonly: ""
768
+ }, null, 8, ["model-value"]),
769
+ t(ht, { align: "inline-end" }, {
770
+ default: l(() => [
771
+ t(wt, {
772
+ type: "button",
773
+ size: "icon-xs",
774
+ "aria-label": "Copy Firebase UID",
775
+ onClick: dt
776
+ }, {
777
+ default: l(() => [
778
+ t(r($t), { class: "size-3.5" })
779
+ ]),
780
+ _: 1
781
+ })
782
+ ]),
783
+ _: 1
784
+ })
785
+ ]),
786
+ _: 1
787
+ })
788
+ ]),
789
+ oe.value ? (n(), g("div", Ul, [
790
+ s("div", Dl, [
791
+ t(N, { for: "firebase-edit-name" }, {
792
+ default: l(() => [...e[34] || (e[34] = [
793
+ o("Display name", -1)
794
+ ])]),
795
+ _: 1
796
+ }),
797
+ t($, {
798
+ id: "firebase-edit-name",
799
+ modelValue: x.displayName,
800
+ "onUpdate:modelValue": e[7] || (e[7] = (f) => x.displayName = f),
801
+ placeholder: "No display name"
802
+ }, null, 8, ["modelValue"])
803
+ ]),
804
+ s("div", Rl, [
805
+ t(N, { for: "firebase-edit-email" }, {
806
+ default: l(() => [...e[35] || (e[35] = [
807
+ o("Email", -1)
808
+ ])]),
809
+ _: 1
810
+ }),
811
+ t($, {
812
+ id: "firebase-edit-email",
813
+ modelValue: x.email,
814
+ "onUpdate:modelValue": e[8] || (e[8] = (f) => x.email = f),
815
+ type: "email",
816
+ placeholder: "No email"
817
+ }, null, 8, ["modelValue"])
818
+ ]),
819
+ s("div", Ml, [
820
+ t(N, { for: "firebase-edit-phone" }, {
821
+ default: l(() => [...e[36] || (e[36] = [
822
+ o("Phone number", -1)
823
+ ])]),
824
+ _: 1
825
+ }),
826
+ t($, {
827
+ id: "firebase-edit-phone",
828
+ modelValue: x.phoneNumber,
829
+ "onUpdate:modelValue": e[9] || (e[9] = (f) => x.phoneNumber = f),
830
+ type: "tel",
831
+ placeholder: "No phone number"
832
+ }, null, 8, ["modelValue"])
833
+ ])
834
+ ])) : U.value ? (n(), g("dl", Il, [
835
+ s("div", Tl, [
836
+ e[37] || (e[37] = s("dt", { class: "text-xs text-muted-foreground" }, "Display name", -1)),
837
+ s("dd", El, p(a.value.displayName || "—"), 1)
838
+ ]),
839
+ s("div", zl, [
840
+ e[38] || (e[38] = s("dt", { class: "text-xs text-muted-foreground" }, "Email", -1)),
841
+ s("dd", Pl, p(a.value.email || "—"), 1)
842
+ ]),
843
+ s("div", $l, [
844
+ e[39] || (e[39] = s("dt", { class: "text-xs text-muted-foreground" }, "Phone number", -1)),
845
+ s("dd", Bl, p(a.value.phoneNumber || "—"), 1)
846
+ ])
847
+ ])) : (n(), d(T, { key: 2 }, {
848
+ default: l(() => [
849
+ t(r(be)),
850
+ t(M, null, {
851
+ default: l(() => [...e[40] || (e[40] = [
852
+ o("Personal data is hidden", -1)
853
+ ])]),
854
+ _: 1
855
+ }),
856
+ t(I, null, {
857
+ default: l(() => [...e[41] || (e[41] = [
858
+ o("Ask for the View user personal data permission to see or edit identity fields.", -1)
859
+ ])]),
860
+ _: 1
861
+ })
862
+ ]),
863
+ _: 1
864
+ })),
865
+ oe.value ? (n(), g("div", Ll, [
866
+ s("div", null, [
867
+ t(N, { for: "firebase-edit-verified" }, {
868
+ default: l(() => [...e[42] || (e[42] = [
869
+ o("Email verified", -1)
870
+ ])]),
871
+ _: 1
872
+ }),
873
+ e[43] || (e[43] = s("p", { class: "mt-1 text-xs leading-5 text-muted-foreground" }, " Turning this on asserts email ownership without the user completing a verification flow. ", -1))
874
+ ]),
875
+ t(Ne, {
876
+ id: "firebase-edit-verified",
877
+ modelValue: x.emailVerified,
878
+ "onUpdate:modelValue": e[10] || (e[10] = (f) => x.emailVerified = f),
879
+ disabled: !x.email.trim()
880
+ }, null, 8, ["modelValue", "disabled"])
881
+ ])) : c("", !0),
882
+ oe.value && de.value ? (n(), g("div", jl, [
883
+ t(N, { for: "firebase-edit-reason" }, {
884
+ default: l(() => [...e[44] || (e[44] = [
885
+ o("Reason for identity changes", -1)
886
+ ])]),
887
+ _: 1
888
+ }),
889
+ t(Vt, {
890
+ id: "firebase-edit-reason",
891
+ modelValue: D.value,
892
+ "onUpdate:modelValue": e[11] || (e[11] = (f) => D.value = f),
893
+ rows: "3",
894
+ maxlength: "500",
895
+ placeholder: "Why is this identity being changed?"
896
+ }, null, 8, ["modelValue"]),
897
+ e[45] || (e[45] = s("p", { class: "text-xs text-muted-foreground" }, "At least 3 characters; required for the Studio activity record.", -1))
898
+ ])) : c("", !0)
899
+ ]),
900
+ _: 1
901
+ })) : c("", !0)
902
+ ]),
903
+ _: 1
904
+ }),
905
+ r(_).linkFirestoreProfiles && !y.value && a.value ? (n(), d(te, { key: 0 }, {
906
+ default: l(() => [
907
+ t(ee, null, {
908
+ default: l(() => [
909
+ t(Q, { class: "flex flex-wrap items-center gap-2" }, {
910
+ default: l(() => [
911
+ e[46] || (e[46] = o(" Linked Firestore profile ", -1)),
912
+ t(ce, {
913
+ variant: "outline",
914
+ class: It(a.value.profile?.enabled && a.value.profile.exists ? "border-emerald-400/60 text-emerald-700 dark:text-emerald-300" : a.value.profile?.enabled ? "border-amber-400/60 text-amber-700 dark:text-amber-300" : "text-muted-foreground")
915
+ }, {
916
+ default: l(() => [
917
+ o(p(a.value.profile?.enabled ? a.value.profile.exists ? "Linked" : "Missing" : "Unavailable"), 1)
918
+ ]),
919
+ _: 1
920
+ }, 8, ["class"])
921
+ ]),
922
+ _: 1
923
+ }),
924
+ t(Z, null, {
925
+ default: l(() => [
926
+ e[47] || (e[47] = o(" Read-only mapped fields from ", -1)),
927
+ s("code", null, p(r(_).profileCollection || "users"), 1),
928
+ e[48] || (e[48] = o(". Unknown fields remain untouched. ", -1))
929
+ ]),
930
+ _: 1
931
+ })
932
+ ]),
933
+ _: 1
934
+ }),
935
+ a.value.profile?.exists ? (n(), d(B, {
936
+ key: 0,
937
+ class: "grid gap-4 sm:grid-cols-2"
938
+ }, {
939
+ default: l(() => [
940
+ s("div", Ol, [
941
+ s("p", Wl, p(r(_).profileNameField || "Name"), 1),
942
+ s("p", Kl, p(U.value ? a.value.profile.name || "—" : "Hidden"), 1)
943
+ ]),
944
+ s("div", Gl, [
945
+ s("p", Hl, p(r(_).profileEmailField || "Email"), 1),
946
+ s("p", ql, p(U.value ? a.value.profile.email || "—" : "Hidden"), 1)
947
+ ]),
948
+ s("div", Jl, [
949
+ s("p", Xl, p(r(_).profileRoleField || "Role"), 1),
950
+ s("p", Yl, p(U.value ? a.value.profile.role || "—" : "Hidden"), 1)
951
+ ]),
952
+ s("div", Ql, [
953
+ s("p", Zl, p(r(_).profileStatusField || "Status"), 1),
954
+ s("p", es, p(U.value ? a.value.profile.status || "—" : "Hidden"), 1)
955
+ ])
956
+ ]),
957
+ _: 1
958
+ })) : (n(), d(B, {
959
+ key: 1,
960
+ class: "flex flex-col items-start gap-4"
961
+ }, {
962
+ default: l(() => [
963
+ a.value.profile?.enabled ? (n(), d(T, { key: 0 }, {
964
+ default: l(() => [
965
+ t(r(Bt)),
966
+ t(M, null, {
967
+ default: l(() => [...e[49] || (e[49] = [
968
+ o("No linked profile exists", -1)
969
+ ])]),
970
+ _: 1
971
+ }),
972
+ t(I, null, {
973
+ default: l(() => [...e[50] || (e[50] = [
974
+ o(" Creating one writes only the configured mapped fields and never overwrites an existing document. ", -1)
975
+ ])]),
976
+ _: 1
977
+ })
978
+ ]),
979
+ _: 1
980
+ })) : (n(), d(T, {
981
+ key: 1,
982
+ variant: "destructive"
983
+ }, {
984
+ default: l(() => [
985
+ t(r(ne)),
986
+ t(M, null, {
987
+ default: l(() => [...e[51] || (e[51] = [
988
+ o("Profile lookup is unavailable", -1)
989
+ ])]),
990
+ _: 1
991
+ }),
992
+ t(I, null, {
993
+ default: l(() => [...e[52] || (e[52] = [
994
+ o("Review this module’s Firestore profile mapping and Firebase permissions.", -1)
995
+ ])]),
996
+ _: 1
997
+ })
998
+ ]),
999
+ _: 1
1000
+ })),
1001
+ De.value && a.value.profile?.enabled ? (n(), d(k, {
1002
+ key: 2,
1003
+ variant: "outline",
1004
+ type: "button",
1005
+ onClick: pt
1006
+ }, {
1007
+ default: l(() => [
1008
+ t(r(qe), { class: "size-4" }),
1009
+ e[53] || (e[53] = o(" Create linked profile ", -1))
1010
+ ]),
1011
+ _: 1
1012
+ })) : c("", !0)
1013
+ ]),
1014
+ _: 1
1015
+ }))
1016
+ ]),
1017
+ _: 1
1018
+ })) : c("", !0),
1019
+ J.value ? (n(), d(T, {
1020
+ key: 1,
1021
+ variant: "destructive"
1022
+ }, {
1023
+ default: l(() => [
1024
+ t(r(ne)),
1025
+ t(M, null, {
1026
+ default: l(() => [
1027
+ o(p(y.value ? "User creation failed" : "Identity update failed"), 1)
1028
+ ]),
1029
+ _: 1
1030
+ }),
1031
+ t(I, null, {
1032
+ default: l(() => [
1033
+ o(p(J.value), 1)
1034
+ ]),
1035
+ _: 1
1036
+ })
1037
+ ]),
1038
+ _: 1
1039
+ })) : c("", !0)
1040
+ ]),
1041
+ s("aside", ts, [
1042
+ y.value ? (n(), d(te, { key: 0 }, {
1043
+ default: l(() => [
1044
+ t(ee, null, {
1045
+ default: l(() => [
1046
+ t(Q, null, {
1047
+ default: l(() => [...e[54] || (e[54] = [
1048
+ o("Initial access", -1)
1049
+ ])]),
1050
+ _: 1
1051
+ }),
1052
+ t(Z, null, {
1053
+ default: l(() => [...e[55] || (e[55] = [
1054
+ o("Choose the account state at creation time.", -1)
1055
+ ])]),
1056
+ _: 1
1057
+ })
1058
+ ]),
1059
+ _: 1
1060
+ }),
1061
+ t(B, { class: "space-y-4" }, {
1062
+ default: l(() => [
1063
+ s("div", ls, [
1064
+ s("div", null, [
1065
+ t(N, { for: "firebase-create-verified" }, {
1066
+ default: l(() => [...e[56] || (e[56] = [
1067
+ o("Email verified", -1)
1068
+ ])]),
1069
+ _: 1
1070
+ }),
1071
+ e[57] || (e[57] = s("p", { class: "mt-1 text-xs leading-5 text-muted-foreground" }, "Keep off unless ownership was verified elsewhere.", -1))
1072
+ ]),
1073
+ t(Ne, {
1074
+ id: "firebase-create-verified",
1075
+ modelValue: m.emailVerified,
1076
+ "onUpdate:modelValue": e[12] || (e[12] = (f) => m.emailVerified = f)
1077
+ }, null, 8, ["modelValue"])
1078
+ ]),
1079
+ s("div", ss, [
1080
+ s("div", null, [
1081
+ t(N, { for: "firebase-create-disabled" }, {
1082
+ default: l(() => [...e[58] || (e[58] = [
1083
+ o("Start suspended", -1)
1084
+ ])]),
1085
+ _: 1
1086
+ }),
1087
+ e[59] || (e[59] = s("p", { class: "mt-1 text-xs leading-5 text-muted-foreground" }, "The identity is created but cannot sign in.", -1))
1088
+ ]),
1089
+ t(Ne, {
1090
+ id: "firebase-create-disabled",
1091
+ modelValue: m.disabled,
1092
+ "onUpdate:modelValue": e[13] || (e[13] = (f) => m.disabled = f)
1093
+ }, null, 8, ["modelValue"])
1094
+ ]),
1095
+ we.value ? (n(), g("label", as, [
1096
+ t(At, {
1097
+ modelValue: m.createProfile,
1098
+ "onUpdate:modelValue": e[14] || (e[14] = (f) => m.createProfile = f),
1099
+ class: "mt-0.5"
1100
+ }, null, 8, ["modelValue"]),
1101
+ e[60] || (e[60] = s("span", null, [
1102
+ s("span", { class: "block text-sm font-medium" }, "Create linked profile"),
1103
+ s("span", { class: "mt-1 block text-xs leading-5 text-muted-foreground" }, "Create the configured Firestore profile after Auth succeeds.")
1104
+ ], -1))
1105
+ ])) : c("", !0)
1106
+ ]),
1107
+ _: 1
1108
+ })
1109
+ ]),
1110
+ _: 1
1111
+ })) : a.value ? (n(), g(L, { key: 1 }, [
1112
+ t(te, null, {
1113
+ default: l(() => [
1114
+ t(ee, null, {
1115
+ default: l(() => [
1116
+ t(Q, null, {
1117
+ default: l(() => [...e[61] || (e[61] = [
1118
+ o("Access & security", -1)
1119
+ ])]),
1120
+ _: 1
1121
+ }),
1122
+ t(Z, null, {
1123
+ default: l(() => [...e[62] || (e[62] = [
1124
+ o("Authentication state and recent Firebase metadata.", -1)
1125
+ ])]),
1126
+ _: 1
1127
+ })
1128
+ ]),
1129
+ _: 1
1130
+ }),
1131
+ t(B, { class: "space-y-4" }, {
1132
+ default: l(() => [
1133
+ s("div", os, [
1134
+ e[63] || (e[63] = s("span", { class: "text-sm text-muted-foreground" }, "Access", -1)),
1135
+ t(Xe, {
1136
+ disabled: a.value.disabled
1137
+ }, null, 8, ["disabled"])
1138
+ ]),
1139
+ U.value ? (n(), g("div", is, [
1140
+ e[66] || (e[66] = s("span", { class: "text-sm text-muted-foreground" }, "Email", -1)),
1141
+ a.value.emailVerified ? (n(), d(ce, {
1142
+ key: 0,
1143
+ variant: "outline",
1144
+ class: "gap-1 text-emerald-700 dark:text-emerald-300"
1145
+ }, {
1146
+ default: l(() => [
1147
+ t(r(Lt), { class: "size-3" }),
1148
+ e[64] || (e[64] = o(" Verified ", -1))
1149
+ ]),
1150
+ _: 1
1151
+ })) : (n(), d(ce, {
1152
+ key: 1,
1153
+ variant: "outline"
1154
+ }, {
1155
+ default: l(() => [...e[65] || (e[65] = [
1156
+ o("Unverified", -1)
1157
+ ])]),
1158
+ _: 1
1159
+ }))
1160
+ ])) : c("", !0),
1161
+ s("div", ns, [
1162
+ e[67] || (e[67] = s("span", { class: "text-sm text-muted-foreground" }, "MFA factors", -1)),
1163
+ s("span", rs, p(a.value.mfaFactorCount), 1)
1164
+ ]),
1165
+ t(Be),
1166
+ s("div", null, [
1167
+ e[68] || (e[68] = s("p", { class: "text-xs text-muted-foreground" }, "Providers", -1)),
1168
+ s("div", us, [
1169
+ (n(!0), g(L, null, Oe(a.value.providers, (f) => (n(), d(ce, {
1170
+ key: f,
1171
+ variant: "secondary"
1172
+ }, {
1173
+ default: l(() => [
1174
+ o(p(r(Xt)(f)), 1)
1175
+ ]),
1176
+ _: 2
1177
+ }, 1024))), 128)),
1178
+ a.value.providers.length === 0 ? (n(), g("span", ds, "None reported")) : c("", !0)
1179
+ ])
1180
+ ]),
1181
+ t(Be),
1182
+ s("dl", ms, [
1183
+ s("div", null, [
1184
+ e[69] || (e[69] = s("dt", { class: "text-xs text-muted-foreground" }, "Created", -1)),
1185
+ s("dd", fs, p(r(Fe)(a.value.createdAt)), 1)
1186
+ ]),
1187
+ s("div", null, [
1188
+ e[70] || (e[70] = s("dt", { class: "text-xs text-muted-foreground" }, "Last sign-in", -1)),
1189
+ s("dd", ps, p(r(Fe)(a.value.lastSignInAt)), 1)
1190
+ ]),
1191
+ s("div", null, [
1192
+ e[71] || (e[71] = s("dt", { class: "text-xs text-muted-foreground" }, "Last token refresh", -1)),
1193
+ s("dd", vs, p(r(Fe)(a.value.lastRefreshAt)), 1)
1194
+ ])
1195
+ ]),
1196
+ re.value || ue.value && a.value.mfaFactorCount > 0 ? (n(), g("div", cs, [
1197
+ re.value ? (n(), d(k, {
1198
+ key: 0,
1199
+ type: "button",
1200
+ variant: "outline",
1201
+ class: "justify-start",
1202
+ onClick: Ee
1203
+ }, {
1204
+ default: l(() => [
1205
+ t(r(Ge), { class: "size-4" }),
1206
+ e[72] || (e[72] = o(" Revoke sessions ", -1))
1207
+ ]),
1208
+ _: 1
1209
+ })) : c("", !0),
1210
+ ue.value && a.value.mfaFactorCount > 0 ? (n(), d(k, {
1211
+ key: 1,
1212
+ type: "button",
1213
+ variant: "outline",
1214
+ class: "justify-start text-destructive hover:text-destructive",
1215
+ onClick: ze
1216
+ }, {
1217
+ default: l(() => [
1218
+ t(r(He), { class: "size-4" }),
1219
+ e[73] || (e[73] = o(" Reset MFA ", -1))
1220
+ ]),
1221
+ _: 1
1222
+ })) : c("", !0)
1223
+ ])) : c("", !0)
1224
+ ]),
1225
+ _: 1
1226
+ })
1227
+ ]),
1228
+ _: 1
1229
+ }),
1230
+ it.value ? (n(), d(te, { key: 0 }, {
1231
+ default: l(() => [
1232
+ t(ee, null, {
1233
+ default: l(() => [
1234
+ t(Q, null, {
1235
+ default: l(() => [...e[74] || (e[74] = [
1236
+ o("Role claim", -1)
1237
+ ])]),
1238
+ _: 1
1239
+ }),
1240
+ t(Z, null, {
1241
+ default: l(() => [
1242
+ e[75] || (e[75] = o("Configured claim key: ", -1)),
1243
+ s("code", null, p(r(_).roleClaimKey), 1)
1244
+ ]),
1245
+ _: 1
1246
+ })
1247
+ ]),
1248
+ _: 1
1249
+ }),
1250
+ t(B, { class: "space-y-4" }, {
1251
+ default: l(() => [
1252
+ Re.value.length > 0 ? (n(), g("div", bs, [
1253
+ t(N, { for: "firebase-user-role" }, {
1254
+ default: l(() => [...e[76] || (e[76] = [
1255
+ o("Role", -1)
1256
+ ])]),
1257
+ _: 1
1258
+ }),
1259
+ t(Ut, {
1260
+ modelValue: K.value,
1261
+ "onUpdate:modelValue": e[15] || (e[15] = (f) => K.value = f),
1262
+ disabled: !Ue.value
1263
+ }, {
1264
+ default: l(() => [
1265
+ t(Ft, { id: "firebase-user-role" }, {
1266
+ default: l(() => [
1267
+ t(Nt, { placeholder: "No role" })
1268
+ ]),
1269
+ _: 1
1270
+ }),
1271
+ t(St, null, {
1272
+ default: l(() => [
1273
+ t(Le, { value: xe }, {
1274
+ default: l(() => [...e[77] || (e[77] = [
1275
+ o("No role", -1)
1276
+ ])]),
1277
+ _: 1
1278
+ }),
1279
+ (n(!0), g(L, null, Oe(Re.value, (f) => (n(), d(Le, {
1280
+ key: f,
1281
+ value: le(f)
1282
+ }, {
1283
+ default: l(() => [
1284
+ o(p(f), 1)
1285
+ ]),
1286
+ _: 2
1287
+ }, 1032, ["value"]))), 128))
1288
+ ]),
1289
+ _: 1
1290
+ })
1291
+ ]),
1292
+ _: 1
1293
+ }, 8, ["modelValue", "disabled"]),
1294
+ Ue.value ? (n(), d(k, {
1295
+ key: 0,
1296
+ type: "button",
1297
+ variant: "outline",
1298
+ class: "w-full",
1299
+ disabled: K.value === le(a.value.role),
1300
+ onClick: ft
1301
+ }, {
1302
+ default: l(() => [
1303
+ t(r(Je), { class: "size-4" }),
1304
+ e[78] || (e[78] = o(" Change role ", -1))
1305
+ ]),
1306
+ _: 1
1307
+ }, 8, ["disabled"])) : c("", !0)
1308
+ ])) : (n(), d(T, { key: 1 }, {
1309
+ default: l(() => [
1310
+ t(r(be)),
1311
+ t(M, null, {
1312
+ default: l(() => [...e[79] || (e[79] = [
1313
+ o("No allowed roles configured", -1)
1314
+ ])]),
1315
+ _: 1
1316
+ }),
1317
+ t(I, null, {
1318
+ default: l(() => [...e[80] || (e[80] = [
1319
+ o("Add comma-separated role values in this module’s settings before assigning claims.", -1)
1320
+ ])]),
1321
+ _: 1
1322
+ })
1323
+ ]),
1324
+ _: 1
1325
+ }))
1326
+ ]),
1327
+ _: 1
1328
+ })
1329
+ ]),
1330
+ _: 1
1331
+ })) : c("", !0),
1332
+ st.value ? (n(), d(te, {
1333
+ key: 1,
1334
+ class: "border-destructive/30"
1335
+ }, {
1336
+ default: l(() => [
1337
+ t(ee, null, {
1338
+ default: l(() => [
1339
+ t(Q, { class: "text-destructive" }, {
1340
+ default: l(() => [...e[81] || (e[81] = [
1341
+ o("Danger zone", -1)
1342
+ ])]),
1343
+ _: 1
1344
+ }),
1345
+ t(Z, null, {
1346
+ default: l(() => [...e[82] || (e[82] = [
1347
+ o("Deletion permanently removes only the Authentication identity.", -1)
1348
+ ])]),
1349
+ _: 1
1350
+ })
1351
+ ]),
1352
+ _: 1
1353
+ }),
1354
+ t(B, null, {
1355
+ default: l(() => [
1356
+ t(k, {
1357
+ type: "button",
1358
+ variant: "destructive",
1359
+ class: "w-full",
1360
+ onClick: ct
1361
+ }, {
1362
+ default: l(() => [
1363
+ t(r(et), { class: "size-4" }),
1364
+ e[83] || (e[83] = o(" Delete Auth user ", -1))
1365
+ ]),
1366
+ _: 1
1367
+ })
1368
+ ]),
1369
+ _: 1
1370
+ })
1371
+ ]),
1372
+ _: 1
1373
+ })) : c("", !0)
1374
+ ], 64)) : c("", !0)
1375
+ ])
1376
+ ]),
1377
+ (y.value ? Ve.value : Ae.value) ? (n(), d(T, {
1378
+ key: 0,
1379
+ variant: "destructive",
1380
+ class: "mt-5"
1381
+ }, {
1382
+ default: l(() => [
1383
+ t(r(ne)),
1384
+ t(M, null, {
1385
+ default: l(() => [...e[84] || (e[84] = [
1386
+ o("Review the identity form", -1)
1387
+ ])]),
1388
+ _: 1
1389
+ }),
1390
+ t(I, null, {
1391
+ default: l(() => [
1392
+ o(p(y.value ? Ve.value : Ae.value), 1)
1393
+ ]),
1394
+ _: 1
1395
+ })
1396
+ ]),
1397
+ _: 1
1398
+ })) : c("", !0),
1399
+ y.value || oe.value ? (n(), g("div", ys, [
1400
+ s("p", gs, [
1401
+ y.value ? (n(), g(L, { key: 0 }, [
1402
+ o("Create one Firebase Authentication identity.")
1403
+ ], 64)) : de.value && !D.value.trim() ? (n(), g(L, { key: 1 }, [
1404
+ o("Add a reason before saving identity changes.")
1405
+ ], 64)) : de.value ? (n(), g(L, { key: 2 }, [
1406
+ o("Unsaved identity changes")
1407
+ ], 64)) : (n(), g(L, { key: 3 }, [
1408
+ o("No identity changes")
1409
+ ], 64))
1410
+ ]),
1411
+ t(k, {
1412
+ type: "submit",
1413
+ form: "firebase-auth-user-form",
1414
+ class: "ml-auto",
1415
+ disabled: Ie.value
1416
+ }, {
1417
+ default: l(() => [
1418
+ v.value ? (n(), d(r(Ze), {
1419
+ key: 0,
1420
+ class: "size-4 animate-spin"
1421
+ })) : y.value ? (n(), d(r(qe), {
1422
+ key: 1,
1423
+ class: "size-4"
1424
+ })) : (n(), d(r(Je), {
1425
+ key: 2,
1426
+ class: "size-4"
1427
+ })),
1428
+ o(" " + p(v.value ? y.value ? "Creating…" : "Saving…" : y.value ? "Create user" : "Save identity"), 1)
1429
+ ]),
1430
+ _: 1
1431
+ }, 8, ["disabled"])
1432
+ ])) : c("", !0)
1433
+ ], 32)) : c("", !0)
1434
+ ], 64)) : (n(), g("section", rl, [
1435
+ s("div", ul, [
1436
+ s("div", dl, [
1437
+ t(r(be), { class: "size-5 text-muted-foreground" })
1438
+ ]),
1439
+ s("h1", ml, "You cannot " + p(y.value ? "create Firebase users" : "view this Firebase user"), 1),
1440
+ e[18] || (e[18] = s("p", { class: "mt-1 text-sm leading-6 text-muted-foreground" }, " Ask a project administrator for the required module permission. ", -1)),
1441
+ t(k, {
1442
+ variant: "outline",
1443
+ class: "mt-5",
1444
+ onClick: e[0] || (e[0] = (f) => r(j)(""))
1445
+ }, {
1446
+ default: l(() => [
1447
+ t(r(Ke), { class: "size-4" }),
1448
+ e[17] || (e[17] = o(" Back to users ", -1))
1449
+ ]),
1450
+ _: 1
1451
+ })
1452
+ ])
1453
+ ])),
1454
+ w.value && a.value ? (n(), d(Yt, {
1455
+ key: 2,
1456
+ open: !!w.value,
1457
+ title: w.value.title,
1458
+ description: w.value.description,
1459
+ "confirm-label": w.value.confirmLabel,
1460
+ subject: Me.value,
1461
+ destructive: w.value.destructive,
1462
+ busy: O.value,
1463
+ error: S.value,
1464
+ "onUpdate:open": Pe,
1465
+ onConfirm: vt
1466
+ }, null, 8, ["open", "title", "description", "confirm-label", "subject", "destructive", "busy", "error"])) : c("", !0),
1467
+ a.value ? (n(), d(il, {
1468
+ key: 3,
1469
+ open: X.value,
1470
+ "onUpdate:open": e[16] || (e[16] = (f) => X.value = f),
1471
+ uid: a.value.uid,
1472
+ email: U.value ? a.value.email : null,
1473
+ busy: Y.value,
1474
+ error: W.value,
1475
+ onConfirm: bt
1476
+ }, null, 8, ["open", "uid", "email", "busy", "error"])) : c("", !0)
1477
+ ]);
1478
+ };
1479
+ }
1480
+ });
1481
+ export {
1482
+ Cs as default
1483
+ };