@burdenoff/microfe-proserviceworld 2026.509.101
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +12 -0
- package/dist/dev/main.d.ts +2 -0
- package/dist/dev/main.d.ts.map +1 -0
- package/dist/generated/global-operations.d.ts +2 -0
- package/dist/generated/global-operations.d.ts.map +1 -0
- package/dist/generated/global-types.d.ts +18199 -0
- package/dist/generated/global-types.d.ts.map +1 -0
- package/dist/generated/wspace-operations.d.ts +2 -0
- package/dist/generated/wspace-operations.d.ts.map +1 -0
- package/dist/generated/wspace-types.d.ts +43046 -0
- package/dist/generated/wspace-types.d.ts.map +1 -0
- package/dist/index.d.ts +2 -0
- package/dist/index.d.ts.map +1 -0
- package/dist/index.js +5 -0
- package/dist/proserviceworld/ProServiceWorldRoot.d.ts +5 -0
- package/dist/proserviceworld/ProServiceWorldRoot.d.ts.map +1 -0
- package/dist/proserviceworld/ProServiceWorldRoot.js +151 -0
- package/dist/proserviceworld/ProServiceWorldRoot.js.map +1 -0
- package/dist/proserviceworld/ProServiceWorldRoutes.d.ts +2 -0
- package/dist/proserviceworld/ProServiceWorldRoutes.d.ts.map +1 -0
- package/dist/proserviceworld/ProServiceWorldRoutes.js +91 -0
- package/dist/proserviceworld/ProServiceWorldRoutes.js.map +1 -0
- package/dist/proserviceworld/index.d.ts +5 -0
- package/dist/proserviceworld/index.d.ts.map +1 -0
- package/dist/proserviceworld/index.js +3 -0
- package/dist/proserviceworld/pages/AdminReportsPage.d.ts +2 -0
- package/dist/proserviceworld/pages/AdminReportsPage.d.ts.map +1 -0
- package/dist/proserviceworld/pages/AdminReportsPage.js +512 -0
- package/dist/proserviceworld/pages/AdminReportsPage.js.map +1 -0
- package/dist/proserviceworld/pages/AdminUsersPage.d.ts +2 -0
- package/dist/proserviceworld/pages/AdminUsersPage.d.ts.map +1 -0
- package/dist/proserviceworld/pages/AdminUsersPage.js +444 -0
- package/dist/proserviceworld/pages/AdminUsersPage.js.map +1 -0
- package/dist/proserviceworld/pages/AnalyticsPage.d.ts +2 -0
- package/dist/proserviceworld/pages/AnalyticsPage.d.ts.map +1 -0
- package/dist/proserviceworld/pages/AnalyticsPage.js +433 -0
- package/dist/proserviceworld/pages/AnalyticsPage.js.map +1 -0
- package/dist/proserviceworld/pages/BookingsPage.d.ts +2 -0
- package/dist/proserviceworld/pages/BookingsPage.d.ts.map +1 -0
- package/dist/proserviceworld/pages/BookingsPage.js +425 -0
- package/dist/proserviceworld/pages/BookingsPage.js.map +1 -0
- package/dist/proserviceworld/pages/DashboardPage.d.ts +2 -0
- package/dist/proserviceworld/pages/DashboardPage.d.ts.map +1 -0
- package/dist/proserviceworld/pages/DashboardPage.js +583 -0
- package/dist/proserviceworld/pages/DashboardPage.js.map +1 -0
- package/dist/proserviceworld/pages/DocumentsPage.d.ts +2 -0
- package/dist/proserviceworld/pages/DocumentsPage.d.ts.map +1 -0
- package/dist/proserviceworld/pages/DocumentsPage.js +494 -0
- package/dist/proserviceworld/pages/DocumentsPage.js.map +1 -0
- package/dist/proserviceworld/pages/MessagesPage.d.ts +2 -0
- package/dist/proserviceworld/pages/MessagesPage.d.ts.map +1 -0
- package/dist/proserviceworld/pages/MessagesPage.js +229 -0
- package/dist/proserviceworld/pages/MessagesPage.js.map +1 -0
- package/dist/proserviceworld/pages/PaymentsPage.d.ts +2 -0
- package/dist/proserviceworld/pages/PaymentsPage.d.ts.map +1 -0
- package/dist/proserviceworld/pages/PaymentsPage.js +479 -0
- package/dist/proserviceworld/pages/PaymentsPage.js.map +1 -0
- package/dist/proserviceworld/pages/ProjectsPage.d.ts +2 -0
- package/dist/proserviceworld/pages/ProjectsPage.d.ts.map +1 -0
- package/dist/proserviceworld/pages/ProjectsPage.js +547 -0
- package/dist/proserviceworld/pages/ProjectsPage.js.map +1 -0
- package/dist/proserviceworld/pages/ProviderDetailPage.d.ts +2 -0
- package/dist/proserviceworld/pages/ProviderDetailPage.d.ts.map +1 -0
- package/dist/proserviceworld/pages/ProviderDetailPage.js +464 -0
- package/dist/proserviceworld/pages/ProviderDetailPage.js.map +1 -0
- package/dist/proserviceworld/pages/ProvidersPage.d.ts +2 -0
- package/dist/proserviceworld/pages/ProvidersPage.d.ts.map +1 -0
- package/dist/proserviceworld/pages/ProvidersPage.js +342 -0
- package/dist/proserviceworld/pages/ProvidersPage.js.map +1 -0
- package/dist/proserviceworld/pages/ReviewsPage.d.ts +2 -0
- package/dist/proserviceworld/pages/ReviewsPage.d.ts.map +1 -0
- package/dist/proserviceworld/pages/ReviewsPage.js +339 -0
- package/dist/proserviceworld/pages/ReviewsPage.js.map +1 -0
- package/dist/proserviceworld/pages/ServiceDetailsPage.d.ts +2 -0
- package/dist/proserviceworld/pages/ServiceDetailsPage.d.ts.map +1 -0
- package/dist/proserviceworld/pages/ServiceDetailsPage.js +563 -0
- package/dist/proserviceworld/pages/ServiceDetailsPage.js.map +1 -0
- package/dist/proserviceworld/pages/ServicesPage.d.ts +2 -0
- package/dist/proserviceworld/pages/ServicesPage.d.ts.map +1 -0
- package/dist/proserviceworld/pages/ServicesPage.js +337 -0
- package/dist/proserviceworld/pages/ServicesPage.js.map +1 -0
- package/dist/proserviceworld/pages/VerificationPage.d.ts +2 -0
- package/dist/proserviceworld/pages/VerificationPage.d.ts.map +1 -0
- package/dist/proserviceworld/pages/VerificationPage.js +357 -0
- package/dist/proserviceworld/pages/VerificationPage.js.map +1 -0
- package/dist/proserviceworld/providers/ProServiceWorldProvider.d.ts +6 -0
- package/dist/proserviceworld/providers/ProServiceWorldProvider.d.ts.map +1 -0
- package/dist/proserviceworld/providers/ProServiceWorldProvider.js +27 -0
- package/dist/proserviceworld/providers/ProServiceWorldProvider.js.map +1 -0
- package/dist/proserviceworld/store/proserviceworldStore.d.ts +32 -0
- package/dist/proserviceworld/store/proserviceworldStore.d.ts.map +1 -0
- package/dist/proserviceworld/store/proserviceworldStore.js +2490 -0
- package/dist/proserviceworld/store/proserviceworldStore.js.map +1 -0
- package/dist/proserviceworld/types/index.d.ts +338 -0
- package/dist/proserviceworld/types/index.d.ts.map +1 -0
- package/dist/proserviceworld/utils/cn.d.ts +4 -0
- package/dist/proserviceworld/utils/cn.d.ts.map +1 -0
- package/dist/proserviceworld/utils/i18n.d.ts +6 -0
- package/dist/proserviceworld/utils/i18n.d.ts.map +1 -0
- package/dist/proserviceworld/utils/i18n.js +15 -0
- package/dist/proserviceworld/utils/i18n.js.map +1 -0
- package/dist/proserviceworld/utils/navigation.d.ts +2 -0
- package/dist/proserviceworld/utils/navigation.d.ts.map +1 -0
- package/dist/proserviceworld/utils/navigation.js +8 -0
- package/dist/proserviceworld/utils/navigation.js.map +1 -0
- package/package.json +107 -0
|
@@ -0,0 +1,357 @@
|
|
|
1
|
+
import { useProServiceWorldStore as e } from "../store/proserviceworldStore.js";
|
|
2
|
+
import { useState as t } from "react";
|
|
3
|
+
import { AlertTriangle as n, ArrowRight as r, Award as i, Building2 as a, CheckCircle2 as o, ChevronRight as s, Clock as c, FileSearch as l, Fingerprint as u, Mail as d, MapPin as f, Phone as p, Shield as m, Upload as h, XCircle as g } from "lucide-react";
|
|
4
|
+
import { Fragment as _, jsx as v, jsxs as y } from "react/jsx-runtime";
|
|
5
|
+
import { Badge as b, Button as x, Card as S, CardContent as C, CardHeader as w, CardTitle as T } from "@burdenoff/fe-libs/ui";
|
|
6
|
+
//#region src/proserviceworld/pages/VerificationPage.tsx
|
|
7
|
+
var E = {
|
|
8
|
+
completed: {
|
|
9
|
+
icon: o,
|
|
10
|
+
color: "text-green-600",
|
|
11
|
+
bgColor: "bg-green-100 dark:bg-green-950",
|
|
12
|
+
label: "Completed"
|
|
13
|
+
},
|
|
14
|
+
pending: {
|
|
15
|
+
icon: c,
|
|
16
|
+
color: "text-gray-400",
|
|
17
|
+
bgColor: "bg-gray-100 dark:bg-gray-800",
|
|
18
|
+
label: "Pending"
|
|
19
|
+
},
|
|
20
|
+
in_progress: {
|
|
21
|
+
icon: c,
|
|
22
|
+
color: "text-blue-600",
|
|
23
|
+
bgColor: "bg-blue-100 dark:bg-blue-950",
|
|
24
|
+
label: "In Progress"
|
|
25
|
+
},
|
|
26
|
+
failed: {
|
|
27
|
+
icon: g,
|
|
28
|
+
color: "text-red-600",
|
|
29
|
+
bgColor: "bg-red-100 dark:bg-red-950",
|
|
30
|
+
label: "Failed"
|
|
31
|
+
}
|
|
32
|
+
}, D = {
|
|
33
|
+
"Email Verification": d,
|
|
34
|
+
"Phone Verification": p,
|
|
35
|
+
"Identity Verification": u,
|
|
36
|
+
"Address Verification": f,
|
|
37
|
+
"Business Verification": a,
|
|
38
|
+
"Professional Verification": i,
|
|
39
|
+
"Background Check": l
|
|
40
|
+
};
|
|
41
|
+
function O() {
|
|
42
|
+
let { verificationSteps: i } = e(), [a, l] = t(null), u = i.filter((e) => e.status === "completed").length, d = i.length, f = i.filter((e) => e.required), p = f.filter((e) => e.status === "completed").length, g = Math.round(u / d * 100), O = a ? i.find((e) => e.id === a) : null;
|
|
43
|
+
return /* @__PURE__ */ y("div", {
|
|
44
|
+
className: "space-y-6 p-6",
|
|
45
|
+
children: [
|
|
46
|
+
/* @__PURE__ */ y("div", {
|
|
47
|
+
className: "flex flex-col gap-4 sm:flex-row sm:items-center sm:justify-between",
|
|
48
|
+
children: [/* @__PURE__ */ y("div", { children: [/* @__PURE__ */ v("h1", {
|
|
49
|
+
className: "text-2xl font-semibold",
|
|
50
|
+
children: "Verification"
|
|
51
|
+
}), /* @__PURE__ */ v("p", {
|
|
52
|
+
className: "text-sm text-muted-foreground",
|
|
53
|
+
children: "Complete verification steps to unlock full platform features and build trust."
|
|
54
|
+
})] }), /* @__PURE__ */ y(b, {
|
|
55
|
+
variant: g === 100 ? "default" : "secondary",
|
|
56
|
+
className: "text-sm",
|
|
57
|
+
children: [
|
|
58
|
+
/* @__PURE__ */ v(m, { className: "mr-2 h-4 w-4" }),
|
|
59
|
+
g,
|
|
60
|
+
"% Verified"
|
|
61
|
+
]
|
|
62
|
+
})]
|
|
63
|
+
}),
|
|
64
|
+
/* @__PURE__ */ v(S, { children: /* @__PURE__ */ v(C, {
|
|
65
|
+
className: "pt-6",
|
|
66
|
+
children: /* @__PURE__ */ y("div", {
|
|
67
|
+
className: "grid gap-6 sm:grid-cols-3",
|
|
68
|
+
children: [
|
|
69
|
+
/* @__PURE__ */ y("div", {
|
|
70
|
+
className: "space-y-2",
|
|
71
|
+
children: [
|
|
72
|
+
/* @__PURE__ */ v("p", {
|
|
73
|
+
className: "text-sm text-muted-foreground",
|
|
74
|
+
children: "Overall Progress"
|
|
75
|
+
}),
|
|
76
|
+
/* @__PURE__ */ y("p", {
|
|
77
|
+
className: "text-3xl font-bold",
|
|
78
|
+
children: [
|
|
79
|
+
u,
|
|
80
|
+
"/",
|
|
81
|
+
d
|
|
82
|
+
]
|
|
83
|
+
}),
|
|
84
|
+
/* @__PURE__ */ v("div", {
|
|
85
|
+
className: "h-3 overflow-hidden rounded-full bg-muted",
|
|
86
|
+
children: /* @__PURE__ */ v("div", {
|
|
87
|
+
className: "h-3 rounded-full bg-primary transition-all",
|
|
88
|
+
style: { width: `${g}%` }
|
|
89
|
+
})
|
|
90
|
+
})
|
|
91
|
+
]
|
|
92
|
+
}),
|
|
93
|
+
/* @__PURE__ */ y("div", {
|
|
94
|
+
className: "space-y-2",
|
|
95
|
+
children: [
|
|
96
|
+
/* @__PURE__ */ v("p", {
|
|
97
|
+
className: "text-sm text-muted-foreground",
|
|
98
|
+
children: "Required Steps"
|
|
99
|
+
}),
|
|
100
|
+
/* @__PURE__ */ y("p", {
|
|
101
|
+
className: "text-3xl font-bold",
|
|
102
|
+
children: [
|
|
103
|
+
p,
|
|
104
|
+
"/",
|
|
105
|
+
f.length
|
|
106
|
+
]
|
|
107
|
+
}),
|
|
108
|
+
/* @__PURE__ */ v("div", {
|
|
109
|
+
className: "h-3 overflow-hidden rounded-full bg-muted",
|
|
110
|
+
children: /* @__PURE__ */ v("div", {
|
|
111
|
+
className: "h-3 rounded-full bg-green-500 transition-all",
|
|
112
|
+
style: { width: `${f.length > 0 ? Math.round(p / f.length * 100) : 0}%` }
|
|
113
|
+
})
|
|
114
|
+
})
|
|
115
|
+
]
|
|
116
|
+
}),
|
|
117
|
+
/* @__PURE__ */ y("div", {
|
|
118
|
+
className: "space-y-2",
|
|
119
|
+
children: [
|
|
120
|
+
/* @__PURE__ */ v("p", {
|
|
121
|
+
className: "text-sm text-muted-foreground",
|
|
122
|
+
children: "Trust Level"
|
|
123
|
+
}),
|
|
124
|
+
/* @__PURE__ */ v("p", {
|
|
125
|
+
className: "text-3xl font-bold",
|
|
126
|
+
children: g >= 80 ? "High" : g >= 40 ? "Medium" : "Low"
|
|
127
|
+
}),
|
|
128
|
+
/* @__PURE__ */ v("div", {
|
|
129
|
+
className: "flex gap-1",
|
|
130
|
+
children: [
|
|
131
|
+
1,
|
|
132
|
+
2,
|
|
133
|
+
3,
|
|
134
|
+
4,
|
|
135
|
+
5
|
|
136
|
+
].map((e) => /* @__PURE__ */ v("div", { className: `h-3 flex-1 rounded-full ${e <= Math.ceil(g / 20) ? "bg-primary" : "bg-muted"}` }, e))
|
|
137
|
+
})
|
|
138
|
+
]
|
|
139
|
+
})
|
|
140
|
+
]
|
|
141
|
+
})
|
|
142
|
+
}) }),
|
|
143
|
+
/* @__PURE__ */ y("div", {
|
|
144
|
+
className: "grid gap-6 lg:grid-cols-3",
|
|
145
|
+
children: [/* @__PURE__ */ y("div", {
|
|
146
|
+
className: "space-y-3 lg:col-span-2",
|
|
147
|
+
children: [/* @__PURE__ */ v("h2", {
|
|
148
|
+
className: "text-sm font-medium text-muted-foreground",
|
|
149
|
+
children: "Verification Steps"
|
|
150
|
+
}), i.map((e, t) => {
|
|
151
|
+
let n = E[e.status], r = n.icon, o = D[e.title] ?? m;
|
|
152
|
+
return /* @__PURE__ */ y("div", {
|
|
153
|
+
className: "relative",
|
|
154
|
+
children: [t !== i.length - 1 && /* @__PURE__ */ v("div", { className: "absolute left-[23px] top-[52px] h-[calc(100%-16px)] w-0.5 bg-muted z-0" }), /* @__PURE__ */ v("button", {
|
|
155
|
+
onClick: () => l(a === e.id ? null : e.id),
|
|
156
|
+
className: `relative z-10 w-full rounded-lg border p-4 text-left transition-colors ${a === e.id ? "border-primary bg-primary/5" : "hover:bg-muted/50"} ${e.status === "completed" ? "opacity-80" : ""}`,
|
|
157
|
+
children: /* @__PURE__ */ y("div", {
|
|
158
|
+
className: "flex items-start gap-4",
|
|
159
|
+
children: [
|
|
160
|
+
/* @__PURE__ */ v("div", {
|
|
161
|
+
className: `shrink-0 rounded-full p-2 ${n.bgColor}`,
|
|
162
|
+
children: /* @__PURE__ */ v(o, { className: `h-5 w-5 ${n.color}` })
|
|
163
|
+
}),
|
|
164
|
+
/* @__PURE__ */ y("div", {
|
|
165
|
+
className: "min-w-0 flex-1",
|
|
166
|
+
children: [
|
|
167
|
+
/* @__PURE__ */ y("div", {
|
|
168
|
+
className: "flex items-center gap-2",
|
|
169
|
+
children: [/* @__PURE__ */ v("h3", {
|
|
170
|
+
className: `font-medium ${e.status === "completed" ? "line-through text-muted-foreground" : ""}`,
|
|
171
|
+
children: e.title
|
|
172
|
+
}), e.required && /* @__PURE__ */ v(b, {
|
|
173
|
+
variant: "destructive",
|
|
174
|
+
className: "text-xs",
|
|
175
|
+
children: "Required"
|
|
176
|
+
})]
|
|
177
|
+
}),
|
|
178
|
+
/* @__PURE__ */ v("p", {
|
|
179
|
+
className: "mt-0.5 text-sm text-muted-foreground",
|
|
180
|
+
children: e.description
|
|
181
|
+
}),
|
|
182
|
+
/* @__PURE__ */ y("div", {
|
|
183
|
+
className: "mt-2 flex items-center gap-3",
|
|
184
|
+
children: [/* @__PURE__ */ y("div", {
|
|
185
|
+
className: "flex items-center gap-1",
|
|
186
|
+
children: [/* @__PURE__ */ v(r, { className: `h-4 w-4 ${n.color}` }), /* @__PURE__ */ v("span", {
|
|
187
|
+
className: `text-xs font-medium ${n.color}`,
|
|
188
|
+
children: n.label
|
|
189
|
+
})]
|
|
190
|
+
}), e.completedAt && /* @__PURE__ */ y("span", {
|
|
191
|
+
className: "text-xs text-muted-foreground",
|
|
192
|
+
children: ["Completed on ", e.completedAt]
|
|
193
|
+
})]
|
|
194
|
+
})
|
|
195
|
+
]
|
|
196
|
+
}),
|
|
197
|
+
/* @__PURE__ */ v(s, { className: "h-5 w-5 shrink-0 text-muted-foreground" })
|
|
198
|
+
]
|
|
199
|
+
})
|
|
200
|
+
})]
|
|
201
|
+
}, e.id);
|
|
202
|
+
})]
|
|
203
|
+
}), /* @__PURE__ */ y("div", {
|
|
204
|
+
className: "space-y-4",
|
|
205
|
+
children: [O ? /* @__PURE__ */ y(S, { children: [/* @__PURE__ */ v(w, { children: /* @__PURE__ */ v(T, {
|
|
206
|
+
className: "text-base",
|
|
207
|
+
children: O.title
|
|
208
|
+
}) }), /* @__PURE__ */ y(C, {
|
|
209
|
+
className: "space-y-4",
|
|
210
|
+
children: [
|
|
211
|
+
/* @__PURE__ */ v("p", {
|
|
212
|
+
className: "text-sm text-muted-foreground",
|
|
213
|
+
children: O.description
|
|
214
|
+
}),
|
|
215
|
+
/* @__PURE__ */ v("div", {
|
|
216
|
+
className: "flex items-center gap-2",
|
|
217
|
+
children: (() => {
|
|
218
|
+
let e = E[O.status], t = e.icon;
|
|
219
|
+
return /* @__PURE__ */ y(_, { children: [/* @__PURE__ */ v(t, { className: `h-5 w-5 ${e.color}` }), /* @__PURE__ */ v("span", {
|
|
220
|
+
className: `font-medium ${e.color}`,
|
|
221
|
+
children: e.label
|
|
222
|
+
})] });
|
|
223
|
+
})()
|
|
224
|
+
}),
|
|
225
|
+
O.required && /* @__PURE__ */ y("div", {
|
|
226
|
+
className: "flex items-center gap-2 rounded-lg bg-red-50 p-3 dark:bg-red-950",
|
|
227
|
+
children: [/* @__PURE__ */ v(n, { className: "h-4 w-4 text-red-600" }), /* @__PURE__ */ v("span", {
|
|
228
|
+
className: "text-sm text-red-700 dark:text-red-400",
|
|
229
|
+
children: "This step is required for full platform access."
|
|
230
|
+
})]
|
|
231
|
+
}),
|
|
232
|
+
O.completedAt && /* @__PURE__ */ v("div", {
|
|
233
|
+
className: "rounded-lg bg-green-50 p-3 dark:bg-green-950",
|
|
234
|
+
children: /* @__PURE__ */ y("p", {
|
|
235
|
+
className: "text-sm text-green-700 dark:text-green-400",
|
|
236
|
+
children: ["Completed on ", O.completedAt]
|
|
237
|
+
})
|
|
238
|
+
}),
|
|
239
|
+
O.status === "pending" && /* @__PURE__ */ y("div", {
|
|
240
|
+
className: "space-y-3",
|
|
241
|
+
children: [
|
|
242
|
+
O.title === "Phone Verification" && /* @__PURE__ */ y("div", {
|
|
243
|
+
className: "space-y-2",
|
|
244
|
+
children: [/* @__PURE__ */ v("p", {
|
|
245
|
+
className: "text-sm font-medium",
|
|
246
|
+
children: "Enter your phone number"
|
|
247
|
+
}), /* @__PURE__ */ y("div", {
|
|
248
|
+
className: "flex gap-2",
|
|
249
|
+
children: [/* @__PURE__ */ v("input", {
|
|
250
|
+
type: "tel",
|
|
251
|
+
className: "flex-1 rounded border bg-background px-3 py-2 text-sm",
|
|
252
|
+
placeholder: "+1 (555) 000-0000"
|
|
253
|
+
}), /* @__PURE__ */ y(x, {
|
|
254
|
+
size: "sm",
|
|
255
|
+
children: ["Send Code ", /* @__PURE__ */ v(r, { className: "ml-2 h-4 w-4" })]
|
|
256
|
+
})]
|
|
257
|
+
})]
|
|
258
|
+
}),
|
|
259
|
+
O.title === "Identity Verification" && /* @__PURE__ */ y("div", {
|
|
260
|
+
className: "space-y-2",
|
|
261
|
+
children: [
|
|
262
|
+
/* @__PURE__ */ v("p", {
|
|
263
|
+
className: "text-sm font-medium",
|
|
264
|
+
children: "Upload a government-issued ID"
|
|
265
|
+
}),
|
|
266
|
+
/* @__PURE__ */ y("div", {
|
|
267
|
+
className: "flex flex-col items-center justify-center rounded-lg border-2 border-dashed p-6",
|
|
268
|
+
children: [
|
|
269
|
+
/* @__PURE__ */ v(h, { className: "h-8 w-8 text-muted-foreground" }),
|
|
270
|
+
/* @__PURE__ */ v("p", {
|
|
271
|
+
className: "mt-2 text-xs text-muted-foreground",
|
|
272
|
+
children: "Drag & drop or click to upload"
|
|
273
|
+
}),
|
|
274
|
+
/* @__PURE__ */ v("p", {
|
|
275
|
+
className: "text-xs text-muted-foreground",
|
|
276
|
+
children: "Passport, Driver's License, or National ID"
|
|
277
|
+
})
|
|
278
|
+
]
|
|
279
|
+
}),
|
|
280
|
+
/* @__PURE__ */ y(x, {
|
|
281
|
+
className: "w-full",
|
|
282
|
+
children: [/* @__PURE__ */ v(h, { className: "mr-2 h-4 w-4" }), " Upload Document"]
|
|
283
|
+
})
|
|
284
|
+
]
|
|
285
|
+
}),
|
|
286
|
+
O.title !== "Phone Verification" && O.title !== "Identity Verification" && /* @__PURE__ */ y(x, {
|
|
287
|
+
className: "w-full",
|
|
288
|
+
children: ["Start Verification ", /* @__PURE__ */ v(r, { className: "ml-2 h-4 w-4" })]
|
|
289
|
+
})
|
|
290
|
+
]
|
|
291
|
+
}),
|
|
292
|
+
O.status === "failed" && /* @__PURE__ */ v(x, {
|
|
293
|
+
variant: "destructive",
|
|
294
|
+
className: "w-full",
|
|
295
|
+
children: "Retry Verification"
|
|
296
|
+
})
|
|
297
|
+
]
|
|
298
|
+
})] }) : /* @__PURE__ */ v(S, { children: /* @__PURE__ */ y(C, {
|
|
299
|
+
className: "py-12 text-center",
|
|
300
|
+
children: [
|
|
301
|
+
/* @__PURE__ */ v(m, { className: "mx-auto h-10 w-10 text-muted-foreground/50" }),
|
|
302
|
+
/* @__PURE__ */ v("p", {
|
|
303
|
+
className: "mt-2 text-sm font-medium",
|
|
304
|
+
children: "Select a step"
|
|
305
|
+
}),
|
|
306
|
+
/* @__PURE__ */ v("p", {
|
|
307
|
+
className: "text-xs text-muted-foreground",
|
|
308
|
+
children: "Click on a verification step to see details and take action."
|
|
309
|
+
})
|
|
310
|
+
]
|
|
311
|
+
}) }), /* @__PURE__ */ y(S, { children: [/* @__PURE__ */ v(w, { children: /* @__PURE__ */ v(T, {
|
|
312
|
+
className: "text-base",
|
|
313
|
+
children: "Verification Benefits"
|
|
314
|
+
}) }), /* @__PURE__ */ v(C, {
|
|
315
|
+
className: "space-y-3",
|
|
316
|
+
children: [
|
|
317
|
+
{
|
|
318
|
+
label: "Higher search ranking",
|
|
319
|
+
unlockAt: 20
|
|
320
|
+
},
|
|
321
|
+
{
|
|
322
|
+
label: "Featured provider badge",
|
|
323
|
+
unlockAt: 40
|
|
324
|
+
},
|
|
325
|
+
{
|
|
326
|
+
label: "Priority support access",
|
|
327
|
+
unlockAt: 60
|
|
328
|
+
},
|
|
329
|
+
{
|
|
330
|
+
label: "Premium service listings",
|
|
331
|
+
unlockAt: 80
|
|
332
|
+
},
|
|
333
|
+
{
|
|
334
|
+
label: "Verified trust seal",
|
|
335
|
+
unlockAt: 100
|
|
336
|
+
}
|
|
337
|
+
].map((e) => /* @__PURE__ */ y("div", {
|
|
338
|
+
className: `flex items-center gap-2 rounded p-2 text-sm ${g >= e.unlockAt ? "text-foreground" : "text-muted-foreground"}`,
|
|
339
|
+
children: [
|
|
340
|
+
g >= e.unlockAt ? /* @__PURE__ */ v(o, { className: "h-4 w-4 text-green-500" }) : /* @__PURE__ */ v(c, { className: "h-4 w-4" }),
|
|
341
|
+
/* @__PURE__ */ v("span", { children: e.label }),
|
|
342
|
+
/* @__PURE__ */ y("span", {
|
|
343
|
+
className: "ml-auto text-xs",
|
|
344
|
+
children: [e.unlockAt, "%"]
|
|
345
|
+
})
|
|
346
|
+
]
|
|
347
|
+
}, e.label))
|
|
348
|
+
})] })]
|
|
349
|
+
})]
|
|
350
|
+
})
|
|
351
|
+
]
|
|
352
|
+
});
|
|
353
|
+
}
|
|
354
|
+
//#endregion
|
|
355
|
+
export { O as VerificationPage };
|
|
356
|
+
|
|
357
|
+
//# sourceMappingURL=VerificationPage.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"VerificationPage.js","names":[],"sources":["../../../src/proserviceworld/pages/VerificationPage.tsx"],"sourcesContent":["import { useState } from 'react';\nimport { Badge, Button, Card, CardContent, CardHeader, CardTitle } from '@burdenoff/fe-libs/ui';\nimport {\n CheckCircle2,\n Clock,\n AlertTriangle,\n XCircle,\n Shield,\n Mail,\n Phone,\n Fingerprint,\n MapPin,\n Building2,\n Award,\n FileSearch,\n ChevronRight,\n Upload,\n ArrowRight,\n} from 'lucide-react';\nimport { useProServiceWorldStore } from '../store/proserviceworldStore';\nimport type { VerificationStepStatus } from '../types';\n\nconst statusConfig: Record<\n VerificationStepStatus,\n { icon: typeof CheckCircle2; color: string; bgColor: string; label: string }\n> = {\n completed: {\n icon: CheckCircle2,\n color: 'text-green-600',\n bgColor: 'bg-green-100 dark:bg-green-950',\n label: 'Completed',\n },\n pending: {\n icon: Clock,\n color: 'text-gray-400',\n bgColor: 'bg-gray-100 dark:bg-gray-800',\n label: 'Pending',\n },\n in_progress: {\n icon: Clock,\n color: 'text-blue-600',\n bgColor: 'bg-blue-100 dark:bg-blue-950',\n label: 'In Progress',\n },\n failed: {\n icon: XCircle,\n color: 'text-red-600',\n bgColor: 'bg-red-100 dark:bg-red-950',\n label: 'Failed',\n },\n};\n\nconst stepIcons: Record<string, typeof Mail> = {\n 'Email Verification': Mail,\n 'Phone Verification': Phone,\n 'Identity Verification': Fingerprint,\n 'Address Verification': MapPin,\n 'Business Verification': Building2,\n 'Professional Verification': Award,\n 'Background Check': FileSearch,\n};\n\nexport function VerificationPage() {\n const { verificationSteps } = useProServiceWorldStore();\n const [selectedStepId, setSelectedStepId] = useState<string | null>(null);\n\n const completedCount = verificationSteps.filter((s) => s.status === 'completed').length;\n const totalSteps = verificationSteps.length;\n const requiredSteps = verificationSteps.filter((s) => s.required);\n const requiredCompleted = requiredSteps.filter((s) => s.status === 'completed').length;\n const progressPercent = Math.round((completedCount / totalSteps) * 100);\n\n const selectedStep = selectedStepId\n ? verificationSteps.find((s) => s.id === selectedStepId)\n : null;\n\n return (\n <div className=\"space-y-6 p-6\">\n {/* Header */}\n <div className=\"flex flex-col gap-4 sm:flex-row sm:items-center sm:justify-between\">\n <div>\n <h1 className=\"text-2xl font-semibold\">Verification</h1>\n <p className=\"text-sm text-muted-foreground\">\n Complete verification steps to unlock full platform features and build trust.\n </p>\n </div>\n <Badge variant={progressPercent === 100 ? 'default' : 'secondary'} className=\"text-sm\">\n <Shield className=\"mr-2 h-4 w-4\" />\n {progressPercent}% Verified\n </Badge>\n </div>\n\n {/* Overall progress */}\n <Card>\n <CardContent className=\"pt-6\">\n <div className=\"grid gap-6 sm:grid-cols-3\">\n <div className=\"space-y-2\">\n <p className=\"text-sm text-muted-foreground\">Overall Progress</p>\n <p className=\"text-3xl font-bold\">\n {completedCount}/{totalSteps}\n </p>\n <div className=\"h-3 overflow-hidden rounded-full bg-muted\">\n <div\n className=\"h-3 rounded-full bg-primary transition-all\"\n style={{ width: `${progressPercent}%` }}\n />\n </div>\n </div>\n <div className=\"space-y-2\">\n <p className=\"text-sm text-muted-foreground\">Required Steps</p>\n <p className=\"text-3xl font-bold\">\n {requiredCompleted}/{requiredSteps.length}\n </p>\n <div className=\"h-3 overflow-hidden rounded-full bg-muted\">\n <div\n className=\"h-3 rounded-full bg-green-500 transition-all\"\n style={{\n width: `${requiredSteps.length > 0 ? Math.round((requiredCompleted / requiredSteps.length) * 100) : 0}%`,\n }}\n />\n </div>\n </div>\n <div className=\"space-y-2\">\n <p className=\"text-sm text-muted-foreground\">Trust Level</p>\n <p className=\"text-3xl font-bold\">\n {progressPercent >= 80 ? 'High' : progressPercent >= 40 ? 'Medium' : 'Low'}\n </p>\n <div className=\"flex gap-1\">\n {[1, 2, 3, 4, 5].map((level) => (\n <div\n key={level}\n className={`h-3 flex-1 rounded-full ${\n level <= Math.ceil(progressPercent / 20) ? 'bg-primary' : 'bg-muted'\n }`}\n />\n ))}\n </div>\n </div>\n </div>\n </CardContent>\n </Card>\n\n <div className=\"grid gap-6 lg:grid-cols-3\">\n {/* Steps list */}\n <div className=\"space-y-3 lg:col-span-2\">\n <h2 className=\"text-sm font-medium text-muted-foreground\">Verification Steps</h2>\n {verificationSteps.map((step, idx) => {\n const cfg = statusConfig[step.status];\n const StatusIcon = cfg.icon;\n const StepIcon = stepIcons[step.title] ?? Shield;\n const isLast = idx === verificationSteps.length - 1;\n\n return (\n <div key={step.id} className=\"relative\">\n {/* Connector line */}\n {!isLast && (\n <div className=\"absolute left-[23px] top-[52px] h-[calc(100%-16px)] w-0.5 bg-muted z-0\" />\n )}\n\n <button\n onClick={() => setSelectedStepId(selectedStepId === step.id ? null : step.id)}\n className={`relative z-10 w-full rounded-lg border p-4 text-left transition-colors ${\n selectedStepId === step.id ? 'border-primary bg-primary/5' : 'hover:bg-muted/50'\n } ${step.status === 'completed' ? 'opacity-80' : ''}`}\n >\n <div className=\"flex items-start gap-4\">\n {/* Step icon */}\n <div className={`shrink-0 rounded-full p-2 ${cfg.bgColor}`}>\n <StepIcon className={`h-5 w-5 ${cfg.color}`} />\n </div>\n\n {/* Content */}\n <div className=\"min-w-0 flex-1\">\n <div className=\"flex items-center gap-2\">\n <h3\n className={`font-medium ${step.status === 'completed' ? 'line-through text-muted-foreground' : ''}`}\n >\n {step.title}\n </h3>\n {step.required && (\n <Badge variant=\"destructive\" className=\"text-xs\">\n Required\n </Badge>\n )}\n </div>\n <p className=\"mt-0.5 text-sm text-muted-foreground\">{step.description}</p>\n\n <div className=\"mt-2 flex items-center gap-3\">\n <div className=\"flex items-center gap-1\">\n <StatusIcon className={`h-4 w-4 ${cfg.color}`} />\n <span className={`text-xs font-medium ${cfg.color}`}>{cfg.label}</span>\n </div>\n {step.completedAt && (\n <span className=\"text-xs text-muted-foreground\">\n Completed on {step.completedAt}\n </span>\n )}\n </div>\n </div>\n\n <ChevronRight className=\"h-5 w-5 shrink-0 text-muted-foreground\" />\n </div>\n </button>\n </div>\n );\n })}\n </div>\n\n {/* Detail panel */}\n <div className=\"space-y-4\">\n {selectedStep ? (\n <Card>\n <CardHeader>\n <CardTitle className=\"text-base\">{selectedStep.title}</CardTitle>\n </CardHeader>\n <CardContent className=\"space-y-4\">\n <p className=\"text-sm text-muted-foreground\">{selectedStep.description}</p>\n\n <div className=\"flex items-center gap-2\">\n {(() => {\n const cfg = statusConfig[selectedStep.status];\n const Icon = cfg.icon;\n return (\n <>\n <Icon className={`h-5 w-5 ${cfg.color}`} />\n <span className={`font-medium ${cfg.color}`}>{cfg.label}</span>\n </>\n );\n })()}\n </div>\n\n {selectedStep.required && (\n <div className=\"flex items-center gap-2 rounded-lg bg-red-50 p-3 dark:bg-red-950\">\n <AlertTriangle className=\"h-4 w-4 text-red-600\" />\n <span className=\"text-sm text-red-700 dark:text-red-400\">\n This step is required for full platform access.\n </span>\n </div>\n )}\n\n {selectedStep.completedAt && (\n <div className=\"rounded-lg bg-green-50 p-3 dark:bg-green-950\">\n <p className=\"text-sm text-green-700 dark:text-green-400\">\n Completed on {selectedStep.completedAt}\n </p>\n </div>\n )}\n\n {selectedStep.status === 'pending' && (\n <div className=\"space-y-3\">\n {selectedStep.title === 'Phone Verification' && (\n <div className=\"space-y-2\">\n <p className=\"text-sm font-medium\">Enter your phone number</p>\n <div className=\"flex gap-2\">\n <input\n type=\"tel\"\n className=\"flex-1 rounded border bg-background px-3 py-2 text-sm\"\n placeholder=\"+1 (555) 000-0000\"\n />\n <Button size=\"sm\">\n Send Code <ArrowRight className=\"ml-2 h-4 w-4\" />\n </Button>\n </div>\n </div>\n )}\n {selectedStep.title === 'Identity Verification' && (\n <div className=\"space-y-2\">\n <p className=\"text-sm font-medium\">Upload a government-issued ID</p>\n <div className=\"flex flex-col items-center justify-center rounded-lg border-2 border-dashed p-6\">\n <Upload className=\"h-8 w-8 text-muted-foreground\" />\n <p className=\"mt-2 text-xs text-muted-foreground\">\n Drag & drop or click to upload\n </p>\n <p className=\"text-xs text-muted-foreground\">\n Passport, Driver's License, or National ID\n </p>\n </div>\n <Button className=\"w-full\">\n <Upload className=\"mr-2 h-4 w-4\" /> Upload Document\n </Button>\n </div>\n )}\n {selectedStep.title !== 'Phone Verification' &&\n selectedStep.title !== 'Identity Verification' && (\n <Button className=\"w-full\">\n Start Verification <ArrowRight className=\"ml-2 h-4 w-4\" />\n </Button>\n )}\n </div>\n )}\n\n {selectedStep.status === 'failed' && (\n <Button variant=\"destructive\" className=\"w-full\">\n Retry Verification\n </Button>\n )}\n </CardContent>\n </Card>\n ) : (\n <Card>\n <CardContent className=\"py-12 text-center\">\n <Shield className=\"mx-auto h-10 w-10 text-muted-foreground/50\" />\n <p className=\"mt-2 text-sm font-medium\">Select a step</p>\n <p className=\"text-xs text-muted-foreground\">\n Click on a verification step to see details and take action.\n </p>\n </CardContent>\n </Card>\n )}\n\n {/* Benefits card */}\n <Card>\n <CardHeader>\n <CardTitle className=\"text-base\">Verification Benefits</CardTitle>\n </CardHeader>\n <CardContent className=\"space-y-3\">\n {[\n { label: 'Higher search ranking', unlockAt: 20 },\n { label: 'Featured provider badge', unlockAt: 40 },\n { label: 'Priority support access', unlockAt: 60 },\n { label: 'Premium service listings', unlockAt: 80 },\n { label: 'Verified trust seal', unlockAt: 100 },\n ].map((benefit) => (\n <div\n key={benefit.label}\n className={`flex items-center gap-2 rounded p-2 text-sm ${\n progressPercent >= benefit.unlockAt\n ? 'text-foreground'\n : 'text-muted-foreground'\n }`}\n >\n {progressPercent >= benefit.unlockAt ? (\n <CheckCircle2 className=\"h-4 w-4 text-green-500\" />\n ) : (\n <Clock className=\"h-4 w-4\" />\n )}\n <span>{benefit.label}</span>\n <span className=\"ml-auto text-xs\">{benefit.unlockAt}%</span>\n </div>\n ))}\n </CardContent>\n </Card>\n </div>\n </div>\n </div>\n );\n}\n"],"mappings":"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"}
|
|
@@ -0,0 +1,6 @@
|
|
|
1
|
+
import { FC, PropsWithChildren } from 'react';
|
|
2
|
+
import { ProServiceWorldRootProps } from '../types';
|
|
3
|
+
|
|
4
|
+
export declare const useProServiceWorld: () => ProServiceWorldRootProps;
|
|
5
|
+
export declare const ProServiceWorldProvider: FC<PropsWithChildren<ProServiceWorldRootProps>>;
|
|
6
|
+
//# sourceMappingURL=ProServiceWorldProvider.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"ProServiceWorldProvider.d.ts","sourceRoot":"","sources":["../../../src/proserviceworld/providers/ProServiceWorldProvider.tsx"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,EAAE,EAAE,iBAAiB,EAAE,MAAM,OAAO,CAAC;AAInD,OAAO,KAAK,EAAE,wBAAwB,EAAE,MAAM,UAAU,CAAC;AAMzD,eAAO,MAAM,kBAAkB,gCAI9B,CAAC;AAEF,eAAO,MAAM,uBAAuB,EAAE,EAAE,CAAC,iBAAiB,CAAC,wBAAwB,CAAC,CAsBnF,CAAC"}
|
|
@@ -0,0 +1,27 @@
|
|
|
1
|
+
import { createContext as e, useContext as t, useMemo as n } from "react";
|
|
2
|
+
import { MemoryRouter as r } from "react-router-dom";
|
|
3
|
+
import { QueryClient as i, QueryClientProvider as a } from "@tanstack/react-query";
|
|
4
|
+
import { jsx as o } from "react/jsx-runtime";
|
|
5
|
+
//#region src/proserviceworld/providers/ProServiceWorldProvider.tsx
|
|
6
|
+
var s = e(null), c = () => {
|
|
7
|
+
let e = t(s);
|
|
8
|
+
if (!e) throw Error("useProServiceWorld must be used within ProServiceWorldProvider");
|
|
9
|
+
return e;
|
|
10
|
+
}, l = ({ children: e, ...t }) => {
|
|
11
|
+
let c = /* @__PURE__ */ o(a, {
|
|
12
|
+
client: n(() => new i({ defaultOptions: { queries: {
|
|
13
|
+
retry: 1,
|
|
14
|
+
refetchOnWindowFocus: !1,
|
|
15
|
+
staleTime: 300 * 1e3
|
|
16
|
+
} } }), []),
|
|
17
|
+
children: /* @__PURE__ */ o(s.Provider, {
|
|
18
|
+
value: t,
|
|
19
|
+
children: e
|
|
20
|
+
})
|
|
21
|
+
});
|
|
22
|
+
return t.basePath ? c : /* @__PURE__ */ o(r, { children: c });
|
|
23
|
+
};
|
|
24
|
+
//#endregion
|
|
25
|
+
export { l as ProServiceWorldProvider, c as useProServiceWorld };
|
|
26
|
+
|
|
27
|
+
//# sourceMappingURL=ProServiceWorldProvider.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"ProServiceWorldProvider.js","names":[],"sources":["../../../src/proserviceworld/providers/ProServiceWorldProvider.tsx"],"sourcesContent":["import type { FC, PropsWithChildren } from 'react';\nimport { createContext, useContext, useMemo } from 'react';\nimport { MemoryRouter } from 'react-router-dom';\nimport { QueryClient, QueryClientProvider } from '@tanstack/react-query';\nimport type { ProServiceWorldRootProps } from '../types';\n\ntype ProServiceWorldContextValue = ProServiceWorldRootProps;\n\nconst ProServiceWorldContext = createContext<ProServiceWorldContextValue | null>(null);\n\nexport const useProServiceWorld = () => {\n const context = useContext(ProServiceWorldContext);\n if (!context) throw new Error('useProServiceWorld must be used within ProServiceWorldProvider');\n return context;\n};\n\nexport const ProServiceWorldProvider: FC<PropsWithChildren<ProServiceWorldRootProps>> = ({\n children,\n ...props\n}) => {\n const queryClient = useMemo(\n () =>\n new QueryClient({\n defaultOptions: {\n queries: { retry: 1, refetchOnWindowFocus: false, staleTime: 5 * 60 * 1000 },\n },\n }),\n []\n );\n\n const content = (\n <QueryClientProvider client={queryClient}>\n <ProServiceWorldContext.Provider value={props}>{children}</ProServiceWorldContext.Provider>\n </QueryClientProvider>\n );\n\n if (props.basePath) return content;\n return <MemoryRouter>{content}</MemoryRouter>;\n};\n"],"mappings":";;;;;AAQA,IAAM,IAAyB,EAAkD,KAAK,EAEzE,UAA2B;CACtC,IAAM,IAAU,EAAW,EAAuB;AAClD,KAAI,CAAC,EAAS,OAAU,MAAM,iEAAiE;AAC/F,QAAO;GAGI,KAA4E,EACvF,aACA,GAAG,QACC;CAWJ,IAAM,IACJ,kBAAC,GAAD;EAAqB,QAXH,QAEhB,IAAI,EAAY,EACd,gBAAgB,EACd,SAAS;GAAE,OAAO;GAAG,sBAAsB;GAAO,WAAW,MAAS;GAAM,EAC7E,EACF,CAAC,EACJ,EAAE,CACH;YAIG,kBAAC,EAAuB,UAAxB;GAAiC,OAAO;GAAQ;GAA2C,CAAA;EACvE,CAAA;AAIxB,QADI,EAAM,WAAiB,IACpB,kBAAC,GAAD,EAAA,UAAe,GAAuB,CAAA"}
|
|
@@ -0,0 +1,32 @@
|
|
|
1
|
+
import { OverviewMetric, WorkItem, ServiceProvider, ProfessionalService, Booking, Review, PaymentTransaction, PaymentMethod, Invoice, Project, DocumentFile, DocumentFolder, Conversation, Notification, AnalyticsMetric, ChartDataPoint, GeographicData, VerificationStep, AdminUser, AdminReportMetric } from '../types';
|
|
2
|
+
|
|
3
|
+
interface ProServiceWorldState {
|
|
4
|
+
metrics: OverviewMetric[];
|
|
5
|
+
workItems: WorkItem[];
|
|
6
|
+
selectedView: string;
|
|
7
|
+
setSelectedView: (view: string) => void;
|
|
8
|
+
setWorkItems: (items: WorkItem[]) => void;
|
|
9
|
+
providers: ServiceProvider[];
|
|
10
|
+
services: ProfessionalService[];
|
|
11
|
+
bookings: Booking[];
|
|
12
|
+
reviews: Review[];
|
|
13
|
+
transactions: PaymentTransaction[];
|
|
14
|
+
paymentMethods: PaymentMethod[];
|
|
15
|
+
invoices: Invoice[];
|
|
16
|
+
projects: Project[];
|
|
17
|
+
documents: DocumentFile[];
|
|
18
|
+
folders: DocumentFolder[];
|
|
19
|
+
conversations: Conversation[];
|
|
20
|
+
notifications: Notification[];
|
|
21
|
+
analyticsMetrics: AnalyticsMetric[];
|
|
22
|
+
revenueData: ChartDataPoint[];
|
|
23
|
+
clientData: ChartDataPoint[];
|
|
24
|
+
servicePerformance: ChartDataPoint[];
|
|
25
|
+
geographicData: GeographicData[];
|
|
26
|
+
verificationSteps: VerificationStep[];
|
|
27
|
+
adminUsers: AdminUser[];
|
|
28
|
+
adminReportMetrics: AdminReportMetric[];
|
|
29
|
+
}
|
|
30
|
+
export declare const useProServiceWorldStore: import('zustand').UseBoundStore<import('zustand').StoreApi<ProServiceWorldState>>;
|
|
31
|
+
export {};
|
|
32
|
+
//# sourceMappingURL=proserviceworldStore.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"proserviceworldStore.d.ts","sourceRoot":"","sources":["../../../src/proserviceworld/store/proserviceworldStore.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EACV,cAAc,EACd,QAAQ,EACR,eAAe,EACf,mBAAmB,EACnB,OAAO,EACP,MAAM,EACN,kBAAkB,EAClB,aAAa,EACb,OAAO,EACP,OAAO,EACP,YAAY,EACZ,cAAc,EACd,YAAY,EACZ,YAAY,EACZ,eAAe,EACf,cAAc,EACd,cAAc,EACd,gBAAgB,EAChB,SAAS,EACT,iBAAiB,EAClB,MAAM,UAAU,CAAC;AAIlB,UAAU,oBAAoB;IAE5B,OAAO,EAAE,cAAc,EAAE,CAAC;IAC1B,SAAS,EAAE,QAAQ,EAAE,CAAC;IACtB,YAAY,EAAE,MAAM,CAAC;IACrB,eAAe,EAAE,CAAC,IAAI,EAAE,MAAM,KAAK,IAAI,CAAC;IACxC,YAAY,EAAE,CAAC,KAAK,EAAE,QAAQ,EAAE,KAAK,IAAI,CAAC;IAG1C,SAAS,EAAE,eAAe,EAAE,CAAC;IAG7B,QAAQ,EAAE,mBAAmB,EAAE,CAAC;IAGhC,QAAQ,EAAE,OAAO,EAAE,CAAC;IAGpB,OAAO,EAAE,MAAM,EAAE,CAAC;IAGlB,YAAY,EAAE,kBAAkB,EAAE,CAAC;IACnC,cAAc,EAAE,aAAa,EAAE,CAAC;IAChC,QAAQ,EAAE,OAAO,EAAE,CAAC;IAGpB,QAAQ,EAAE,OAAO,EAAE,CAAC;IAGpB,SAAS,EAAE,YAAY,EAAE,CAAC;IAC1B,OAAO,EAAE,cAAc,EAAE,CAAC;IAG1B,aAAa,EAAE,YAAY,EAAE,CAAC;IAG9B,aAAa,EAAE,YAAY,EAAE,CAAC;IAG9B,gBAAgB,EAAE,eAAe,EAAE,CAAC;IACpC,WAAW,EAAE,cAAc,EAAE,CAAC;IAC9B,UAAU,EAAE,cAAc,EAAE,CAAC;IAC7B,kBAAkB,EAAE,cAAc,EAAE,CAAC;IACrC,cAAc,EAAE,cAAc,EAAE,CAAC;IAGjC,iBAAiB,EAAE,gBAAgB,EAAE,CAAC;IAGtC,UAAU,EAAE,SAAS,EAAE,CAAC;IACxB,kBAAkB,EAAE,iBAAiB,EAAE,CAAC;CACzC;AAgiED,eAAO,MAAM,uBAAuB,mFAgIjC,CAAC"}
|