counseling-schema 0.1.0

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 (45) hide show
  1. package/dist/appointment.schema.d.ts +144 -0
  2. package/dist/appointment.schema.d.ts.map +1 -0
  3. package/dist/appointment.schema.js +42 -0
  4. package/dist/appointment.schema.js.map +1 -0
  5. package/dist/chat.schema.d.ts +24 -0
  6. package/dist/chat.schema.d.ts.map +1 -0
  7. package/dist/chat.schema.js +22 -0
  8. package/dist/chat.schema.js.map +1 -0
  9. package/dist/clinic-profile.schema.d.ts +346 -0
  10. package/dist/clinic-profile.schema.d.ts.map +1 -0
  11. package/dist/clinic-profile.schema.js +64 -0
  12. package/dist/clinic-profile.schema.js.map +1 -0
  13. package/dist/counselor-profile.schema.d.ts +326 -0
  14. package/dist/counselor-profile.schema.d.ts.map +1 -0
  15. package/dist/counselor-profile.schema.js +56 -0
  16. package/dist/counselor-profile.schema.js.map +1 -0
  17. package/dist/enquiry.schema.d.ts +40 -0
  18. package/dist/enquiry.schema.d.ts.map +1 -0
  19. package/dist/enquiry.schema.js +21 -0
  20. package/dist/enquiry.schema.js.map +1 -0
  21. package/dist/enums.d.ts +52 -0
  22. package/dist/enums.d.ts.map +1 -0
  23. package/dist/enums.js +131 -0
  24. package/dist/enums.js.map +1 -0
  25. package/dist/index.d.ts +11 -0
  26. package/dist/index.d.ts.map +1 -0
  27. package/dist/index.js +21 -0
  28. package/dist/index.js.map +1 -0
  29. package/dist/review.schema.d.ts +34 -0
  30. package/dist/review.schema.d.ts.map +1 -0
  31. package/dist/review.schema.js +18 -0
  32. package/dist/review.schema.js.map +1 -0
  33. package/dist/search.schema.d.ts +149 -0
  34. package/dist/search.schema.d.ts.map +1 -0
  35. package/dist/search.schema.js +33 -0
  36. package/dist/search.schema.js.map +1 -0
  37. package/dist/specializations.d.ts +33 -0
  38. package/dist/specializations.d.ts.map +1 -0
  39. package/dist/specializations.js +163 -0
  40. package/dist/specializations.js.map +1 -0
  41. package/dist/subscription.schema.d.ts +10 -0
  42. package/dist/subscription.schema.d.ts.map +1 -0
  43. package/dist/subscription.schema.js +7 -0
  44. package/dist/subscription.schema.js.map +1 -0
  45. package/package.json +34 -0
@@ -0,0 +1,64 @@
1
+ import { z } from "zod";
2
+ import { APPROACH, FACILITY, REVENUE_MODEL } from "./enums.js";
3
+ import { COUNSELING_CATEGORY, ALL_ISSUES } from "./specializations.js";
4
+ // ─── Sub-schemas ─────────────────────────────────────────────────────
5
+ const specializationSchema = z.object({
6
+ category: z.enum(COUNSELING_CATEGORY),
7
+ issues: z.array(z.enum(ALL_ISSUES)).min(1).max(15),
8
+ });
9
+ const practitionerSchema = z.object({
10
+ name: z.string().trim().min(1).max(100),
11
+ qualifications: z.array(z.string().trim().max(200)).max(5).optional(),
12
+ specializations: z.array(z.string().trim().max(100)).max(10).optional(),
13
+ experienceYears: z.number().int().min(0).max(50).optional(),
14
+ });
15
+ const availabilitySlotSchema = z.object({
16
+ startTime: z.string().regex(/^\d{2}:\d{2}$/, "Must be HH:mm format"),
17
+ endTime: z.string().regex(/^\d{2}:\d{2}$/, "Must be HH:mm format"),
18
+ });
19
+ const availabilitySchema = z.object({
20
+ dayOfWeek: z.number().int().min(0).max(6),
21
+ slots: z.array(availabilitySlotSchema).min(1).max(10),
22
+ });
23
+ const geoJsonPointSchema = z.object({
24
+ type: z.literal("Point"),
25
+ coordinates: z.tuple([
26
+ z.number().min(-180).max(180),
27
+ z.number().min(-90).max(90),
28
+ ]),
29
+ });
30
+ // ─── Create ──────────────────────────────────────────────────────────
31
+ export const createClinicProfileSchema = z.object({
32
+ clinicName: z.string().trim().min(3).max(200),
33
+ headline: z.string().trim().min(10).max(200),
34
+ description: z.string().trim().min(20).max(3000),
35
+ photos: z.array(z.string().url()).min(1).max(10),
36
+ logo: z.string().url().optional(),
37
+ specializations: z.array(specializationSchema).min(1).max(12),
38
+ approaches: z.array(z.enum(APPROACH)).max(10).optional(),
39
+ practitioners: z.array(practitionerSchema).max(50).optional(),
40
+ practitionerCount: z.number().int().min(1).max(500),
41
+ yearEstablished: z.number().int().min(1900).max(2030).optional(),
42
+ facilities: z.array(z.enum(FACILITY)).optional(),
43
+ languages: z.array(z.string().trim().min(1).max(50)).min(1).max(10),
44
+ bookingFee: z.number().int().min(100).max(5_000_000), // paise
45
+ feeRangeMin: z.number().int().min(100).max(10_000_000), // paise — consultation fee range
46
+ feeRangeMax: z.number().int().min(100).max(50_000_000), // paise
47
+ revenueModel: z.enum(REVENUE_MODEL).default("commission"),
48
+ availability: z.array(availabilitySchema).min(1).max(7),
49
+ location: geoJsonPointSchema,
50
+ locality: z.string().trim().max(200),
51
+ address: z.string().trim().max(500),
52
+ city: z.string().trim().max(100),
53
+ state: z.string().trim().max(100).optional(),
54
+ operatingHours: z.object({
55
+ open: z.string().regex(/^\d{2}:\d{2}$/),
56
+ close: z.string().regex(/^\d{2}:\d{2}$/),
57
+ }).optional(),
58
+ }).refine((data) => data.feeRangeMin <= data.feeRangeMax, {
59
+ message: "Minimum fee must be less than or equal to maximum fee",
60
+ path: ["feeRangeMin"],
61
+ });
62
+ // ─── Update ──────────────────────────────────────────────────────────
63
+ export const updateClinicProfileSchema = createClinicProfileSchema.partial();
64
+ //# sourceMappingURL=clinic-profile.schema.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"clinic-profile.schema.js","sourceRoot":"","sources":["../src/clinic-profile.schema.ts"],"names":[],"mappings":"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","sourcesContent":["import { z } from \"zod\";\nimport { APPROACH, FACILITY, REVENUE_MODEL } from \"./enums.js\";\nimport { COUNSELING_CATEGORY, ALL_ISSUES } from \"./specializations.js\";\n\n// ─── Sub-schemas ─────────────────────────────────────────────────────\n\nconst specializationSchema = z.object({\n category: z.enum(COUNSELING_CATEGORY),\n issues: z.array(z.enum(ALL_ISSUES)).min(1).max(15),\n});\n\nconst practitionerSchema = z.object({\n name: z.string().trim().min(1).max(100),\n qualifications: z.array(z.string().trim().max(200)).max(5).optional(),\n specializations: z.array(z.string().trim().max(100)).max(10).optional(),\n experienceYears: z.number().int().min(0).max(50).optional(),\n});\n\nconst availabilitySlotSchema = z.object({\n startTime: z.string().regex(/^\\d{2}:\\d{2}$/, \"Must be HH:mm format\"),\n endTime: z.string().regex(/^\\d{2}:\\d{2}$/, \"Must be HH:mm format\"),\n});\n\nconst availabilitySchema = z.object({\n dayOfWeek: z.number().int().min(0).max(6),\n slots: z.array(availabilitySlotSchema).min(1).max(10),\n});\n\nconst geoJsonPointSchema = z.object({\n type: z.literal(\"Point\"),\n coordinates: z.tuple([\n z.number().min(-180).max(180),\n z.number().min(-90).max(90),\n ]),\n});\n\n// ─── Create ──────────────────────────────────────────────────────────\n\nexport const createClinicProfileSchema = z.object({\n clinicName: z.string().trim().min(3).max(200),\n headline: z.string().trim().min(10).max(200),\n description: z.string().trim().min(20).max(3000),\n photos: z.array(z.string().url()).min(1).max(10),\n logo: z.string().url().optional(),\n\n specializations: z.array(specializationSchema).min(1).max(12),\n approaches: z.array(z.enum(APPROACH)).max(10).optional(),\n\n practitioners: z.array(practitionerSchema).max(50).optional(),\n practitionerCount: z.number().int().min(1).max(500),\n yearEstablished: z.number().int().min(1900).max(2030).optional(),\n\n facilities: z.array(z.enum(FACILITY)).optional(),\n languages: z.array(z.string().trim().min(1).max(50)).min(1).max(10),\n\n bookingFee: z.number().int().min(100).max(5_000_000), // paise\n feeRangeMin: z.number().int().min(100).max(10_000_000), // paise — consultation fee range\n feeRangeMax: z.number().int().min(100).max(50_000_000), // paise\n revenueModel: z.enum(REVENUE_MODEL).default(\"commission\"),\n\n availability: z.array(availabilitySchema).min(1).max(7),\n\n location: geoJsonPointSchema,\n locality: z.string().trim().max(200),\n address: z.string().trim().max(500),\n city: z.string().trim().max(100),\n state: z.string().trim().max(100).optional(),\n\n operatingHours: z.object({\n open: z.string().regex(/^\\d{2}:\\d{2}$/),\n close: z.string().regex(/^\\d{2}:\\d{2}$/),\n }).optional(),\n}).refine((data) => data.feeRangeMin <= data.feeRangeMax, {\n message: \"Minimum fee must be less than or equal to maximum fee\",\n path: [\"feeRangeMin\"],\n});\n\nexport type CreateClinicProfileInput = z.infer<typeof createClinicProfileSchema>;\n\n// ─── Update ──────────────────────────────────────────────────────────\n\nexport const updateClinicProfileSchema = createClinicProfileSchema.partial();\nexport type UpdateClinicProfileInput = z.infer<typeof updateClinicProfileSchema>;\n"]}
@@ -0,0 +1,326 @@
1
+ import { z } from "zod";
2
+ export declare const createCounselorProfileSchema: z.ZodObject<{
3
+ displayName: z.ZodString;
4
+ headline: z.ZodString;
5
+ bio: z.ZodString;
6
+ photos: z.ZodArray<z.ZodString>;
7
+ specializations: z.ZodArray<z.ZodObject<{
8
+ category: z.ZodEnum<{
9
+ mental_health: "mental_health";
10
+ neurodiversity: "neurodiversity";
11
+ relationship: "relationship";
12
+ family: "family";
13
+ career: "career";
14
+ child_adolescent: "child_adolescent";
15
+ addiction: "addiction";
16
+ sexual_health: "sexual_health";
17
+ trauma: "trauma";
18
+ wellness: "wellness";
19
+ corporate: "corporate";
20
+ legal: "legal";
21
+ }>;
22
+ issues: z.ZodArray<z.ZodEnum<{
23
+ harassment: "harassment";
24
+ anxiety: "anxiety";
25
+ depression: "depression";
26
+ stress: "stress";
27
+ ocd: "ocd";
28
+ ptsd: "ptsd";
29
+ bipolar: "bipolar";
30
+ schizophrenia: "schizophrenia";
31
+ grief: "grief";
32
+ anger_management: "anger_management";
33
+ panic_disorder: "panic_disorder";
34
+ phobias: "phobias";
35
+ eating_disorders: "eating_disorders";
36
+ adhd: "adhd";
37
+ autism_asd: "autism_asd";
38
+ dyslexia: "dyslexia";
39
+ sensory_processing: "sensory_processing";
40
+ giftedness: "giftedness";
41
+ tourettes: "tourettes";
42
+ dyscalculia: "dyscalculia";
43
+ learning_disabilities: "learning_disabilities";
44
+ marriage_counseling: "marriage_counseling";
45
+ couple_therapy: "couple_therapy";
46
+ pre_marital: "pre_marital";
47
+ divorce_separation: "divorce_separation";
48
+ infidelity: "infidelity";
49
+ communication_issues: "communication_issues";
50
+ long_distance: "long_distance";
51
+ parenting: "parenting";
52
+ co_parenting: "co_parenting";
53
+ family_conflict: "family_conflict";
54
+ blended_families: "blended_families";
55
+ elder_care_stress: "elder_care_stress";
56
+ sibling_issues: "sibling_issues";
57
+ adoption: "adoption";
58
+ career_change: "career_change";
59
+ job_stress: "job_stress";
60
+ burnout: "burnout";
61
+ work_life_balance: "work_life_balance";
62
+ interview_anxiety: "interview_anxiety";
63
+ leadership_coaching: "leadership_coaching";
64
+ workplace_conflict: "workplace_conflict";
65
+ behavioral_issues: "behavioral_issues";
66
+ school_anxiety: "school_anxiety";
67
+ bullying: "bullying";
68
+ teen_depression: "teen_depression";
69
+ identity_issues: "identity_issues";
70
+ academic_pressure: "academic_pressure";
71
+ screen_addiction: "screen_addiction";
72
+ substance_abuse: "substance_abuse";
73
+ alcohol: "alcohol";
74
+ gambling: "gambling";
75
+ internet_gaming: "internet_gaming";
76
+ smoking: "smoking";
77
+ pornography: "pornography";
78
+ shopping: "shopping";
79
+ sexual_dysfunction: "sexual_dysfunction";
80
+ gender_identity: "gender_identity";
81
+ lgbtq_support: "lgbtq_support";
82
+ intimacy_issues: "intimacy_issues";
83
+ abuse_survivors: "abuse_survivors";
84
+ domestic_violence: "domestic_violence";
85
+ childhood_trauma: "childhood_trauma";
86
+ accident_recovery: "accident_recovery";
87
+ war_conflict: "war_conflict";
88
+ natural_disaster: "natural_disaster";
89
+ stress_management: "stress_management";
90
+ mindfulness: "mindfulness";
91
+ sleep_issues: "sleep_issues";
92
+ self_esteem: "self_esteem";
93
+ life_transitions: "life_transitions";
94
+ expat_adjustment: "expat_adjustment";
95
+ retirement: "retirement";
96
+ eap_counseling: "eap_counseling";
97
+ executive_coaching: "executive_coaching";
98
+ team_dynamics: "team_dynamics";
99
+ diversity_inclusion: "diversity_inclusion";
100
+ pre_litigation_counseling: "pre_litigation_counseling";
101
+ mediation: "mediation";
102
+ custody_counseling: "custody_counseling";
103
+ victim_advocacy: "victim_advocacy";
104
+ }>>;
105
+ }, z.core.$strip>>;
106
+ approaches: z.ZodArray<z.ZodEnum<{
107
+ CBT: "CBT";
108
+ DBT: "DBT";
109
+ Psychodynamic: "Psychodynamic";
110
+ Humanistic: "Humanistic";
111
+ Person_Centered: "Person_Centered";
112
+ Solution_Focused: "Solution_Focused";
113
+ EMDR: "EMDR";
114
+ Art_Therapy: "Art_Therapy";
115
+ Play_Therapy: "Play_Therapy";
116
+ Mindfulness_Based: "Mindfulness_Based";
117
+ Narrative_Therapy: "Narrative_Therapy";
118
+ Family_Systems: "Family_Systems";
119
+ Gestalt: "Gestalt";
120
+ ACT: "ACT";
121
+ Motivational_Interviewing: "Motivational_Interviewing";
122
+ Eclectic: "Eclectic";
123
+ }>>;
124
+ qualifications: z.ZodArray<z.ZodObject<{
125
+ type: z.ZodString;
126
+ institution: z.ZodString;
127
+ year: z.ZodOptional<z.ZodNumber>;
128
+ registrationNumber: z.ZodOptional<z.ZodString>;
129
+ }, z.core.$strip>>;
130
+ experienceYears: z.ZodNumber;
131
+ languages: z.ZodArray<z.ZodString>;
132
+ bookingFee: z.ZodNumber;
133
+ consultationFee: z.ZodNumber;
134
+ sessionDurationMinutes: z.ZodPipe<z.ZodEnum<{
135
+ [x: string]: string;
136
+ }>, z.ZodTransform<number, string>>;
137
+ freeFirstSession: z.ZodDefault<z.ZodBoolean>;
138
+ revenueModel: z.ZodDefault<z.ZodEnum<{
139
+ commission: "commission";
140
+ subscription: "subscription";
141
+ }>>;
142
+ availability: z.ZodArray<z.ZodObject<{
143
+ dayOfWeek: z.ZodNumber;
144
+ slots: z.ZodArray<z.ZodObject<{
145
+ startTime: z.ZodString;
146
+ endTime: z.ZodString;
147
+ }, z.core.$strip>>;
148
+ }, z.core.$strip>>;
149
+ location: z.ZodObject<{
150
+ type: z.ZodLiteral<"Point">;
151
+ coordinates: z.ZodTuple<[z.ZodNumber, z.ZodNumber], null>;
152
+ }, z.core.$strip>;
153
+ locality: z.ZodString;
154
+ city: z.ZodString;
155
+ state: z.ZodOptional<z.ZodString>;
156
+ radiusKm: z.ZodDefault<z.ZodNumber>;
157
+ genderPreference: z.ZodOptional<z.ZodEnum<{
158
+ male: "male";
159
+ female: "female";
160
+ any: "any";
161
+ }>>;
162
+ }, z.core.$strip>;
163
+ export type CreateCounselorProfileInput = z.infer<typeof createCounselorProfileSchema>;
164
+ export declare const updateCounselorProfileSchema: z.ZodObject<{
165
+ displayName: z.ZodOptional<z.ZodString>;
166
+ headline: z.ZodOptional<z.ZodString>;
167
+ bio: z.ZodOptional<z.ZodString>;
168
+ photos: z.ZodOptional<z.ZodArray<z.ZodString>>;
169
+ specializations: z.ZodOptional<z.ZodArray<z.ZodObject<{
170
+ category: z.ZodEnum<{
171
+ mental_health: "mental_health";
172
+ neurodiversity: "neurodiversity";
173
+ relationship: "relationship";
174
+ family: "family";
175
+ career: "career";
176
+ child_adolescent: "child_adolescent";
177
+ addiction: "addiction";
178
+ sexual_health: "sexual_health";
179
+ trauma: "trauma";
180
+ wellness: "wellness";
181
+ corporate: "corporate";
182
+ legal: "legal";
183
+ }>;
184
+ issues: z.ZodArray<z.ZodEnum<{
185
+ harassment: "harassment";
186
+ anxiety: "anxiety";
187
+ depression: "depression";
188
+ stress: "stress";
189
+ ocd: "ocd";
190
+ ptsd: "ptsd";
191
+ bipolar: "bipolar";
192
+ schizophrenia: "schizophrenia";
193
+ grief: "grief";
194
+ anger_management: "anger_management";
195
+ panic_disorder: "panic_disorder";
196
+ phobias: "phobias";
197
+ eating_disorders: "eating_disorders";
198
+ adhd: "adhd";
199
+ autism_asd: "autism_asd";
200
+ dyslexia: "dyslexia";
201
+ sensory_processing: "sensory_processing";
202
+ giftedness: "giftedness";
203
+ tourettes: "tourettes";
204
+ dyscalculia: "dyscalculia";
205
+ learning_disabilities: "learning_disabilities";
206
+ marriage_counseling: "marriage_counseling";
207
+ couple_therapy: "couple_therapy";
208
+ pre_marital: "pre_marital";
209
+ divorce_separation: "divorce_separation";
210
+ infidelity: "infidelity";
211
+ communication_issues: "communication_issues";
212
+ long_distance: "long_distance";
213
+ parenting: "parenting";
214
+ co_parenting: "co_parenting";
215
+ family_conflict: "family_conflict";
216
+ blended_families: "blended_families";
217
+ elder_care_stress: "elder_care_stress";
218
+ sibling_issues: "sibling_issues";
219
+ adoption: "adoption";
220
+ career_change: "career_change";
221
+ job_stress: "job_stress";
222
+ burnout: "burnout";
223
+ work_life_balance: "work_life_balance";
224
+ interview_anxiety: "interview_anxiety";
225
+ leadership_coaching: "leadership_coaching";
226
+ workplace_conflict: "workplace_conflict";
227
+ behavioral_issues: "behavioral_issues";
228
+ school_anxiety: "school_anxiety";
229
+ bullying: "bullying";
230
+ teen_depression: "teen_depression";
231
+ identity_issues: "identity_issues";
232
+ academic_pressure: "academic_pressure";
233
+ screen_addiction: "screen_addiction";
234
+ substance_abuse: "substance_abuse";
235
+ alcohol: "alcohol";
236
+ gambling: "gambling";
237
+ internet_gaming: "internet_gaming";
238
+ smoking: "smoking";
239
+ pornography: "pornography";
240
+ shopping: "shopping";
241
+ sexual_dysfunction: "sexual_dysfunction";
242
+ gender_identity: "gender_identity";
243
+ lgbtq_support: "lgbtq_support";
244
+ intimacy_issues: "intimacy_issues";
245
+ abuse_survivors: "abuse_survivors";
246
+ domestic_violence: "domestic_violence";
247
+ childhood_trauma: "childhood_trauma";
248
+ accident_recovery: "accident_recovery";
249
+ war_conflict: "war_conflict";
250
+ natural_disaster: "natural_disaster";
251
+ stress_management: "stress_management";
252
+ mindfulness: "mindfulness";
253
+ sleep_issues: "sleep_issues";
254
+ self_esteem: "self_esteem";
255
+ life_transitions: "life_transitions";
256
+ expat_adjustment: "expat_adjustment";
257
+ retirement: "retirement";
258
+ eap_counseling: "eap_counseling";
259
+ executive_coaching: "executive_coaching";
260
+ team_dynamics: "team_dynamics";
261
+ diversity_inclusion: "diversity_inclusion";
262
+ pre_litigation_counseling: "pre_litigation_counseling";
263
+ mediation: "mediation";
264
+ custody_counseling: "custody_counseling";
265
+ victim_advocacy: "victim_advocacy";
266
+ }>>;
267
+ }, z.core.$strip>>>;
268
+ approaches: z.ZodOptional<z.ZodArray<z.ZodEnum<{
269
+ CBT: "CBT";
270
+ DBT: "DBT";
271
+ Psychodynamic: "Psychodynamic";
272
+ Humanistic: "Humanistic";
273
+ Person_Centered: "Person_Centered";
274
+ Solution_Focused: "Solution_Focused";
275
+ EMDR: "EMDR";
276
+ Art_Therapy: "Art_Therapy";
277
+ Play_Therapy: "Play_Therapy";
278
+ Mindfulness_Based: "Mindfulness_Based";
279
+ Narrative_Therapy: "Narrative_Therapy";
280
+ Family_Systems: "Family_Systems";
281
+ Gestalt: "Gestalt";
282
+ ACT: "ACT";
283
+ Motivational_Interviewing: "Motivational_Interviewing";
284
+ Eclectic: "Eclectic";
285
+ }>>>;
286
+ qualifications: z.ZodOptional<z.ZodArray<z.ZodObject<{
287
+ type: z.ZodString;
288
+ institution: z.ZodString;
289
+ year: z.ZodOptional<z.ZodNumber>;
290
+ registrationNumber: z.ZodOptional<z.ZodString>;
291
+ }, z.core.$strip>>>;
292
+ experienceYears: z.ZodOptional<z.ZodNumber>;
293
+ languages: z.ZodOptional<z.ZodArray<z.ZodString>>;
294
+ bookingFee: z.ZodOptional<z.ZodNumber>;
295
+ consultationFee: z.ZodOptional<z.ZodNumber>;
296
+ sessionDurationMinutes: z.ZodOptional<z.ZodPipe<z.ZodEnum<{
297
+ [x: string]: string;
298
+ }>, z.ZodTransform<number, string>>>;
299
+ freeFirstSession: z.ZodOptional<z.ZodDefault<z.ZodBoolean>>;
300
+ revenueModel: z.ZodOptional<z.ZodDefault<z.ZodEnum<{
301
+ commission: "commission";
302
+ subscription: "subscription";
303
+ }>>>;
304
+ availability: z.ZodOptional<z.ZodArray<z.ZodObject<{
305
+ dayOfWeek: z.ZodNumber;
306
+ slots: z.ZodArray<z.ZodObject<{
307
+ startTime: z.ZodString;
308
+ endTime: z.ZodString;
309
+ }, z.core.$strip>>;
310
+ }, z.core.$strip>>>;
311
+ location: z.ZodOptional<z.ZodObject<{
312
+ type: z.ZodLiteral<"Point">;
313
+ coordinates: z.ZodTuple<[z.ZodNumber, z.ZodNumber], null>;
314
+ }, z.core.$strip>>;
315
+ locality: z.ZodOptional<z.ZodString>;
316
+ city: z.ZodOptional<z.ZodString>;
317
+ state: z.ZodOptional<z.ZodOptional<z.ZodString>>;
318
+ radiusKm: z.ZodOptional<z.ZodDefault<z.ZodNumber>>;
319
+ genderPreference: z.ZodOptional<z.ZodOptional<z.ZodEnum<{
320
+ male: "male";
321
+ female: "female";
322
+ any: "any";
323
+ }>>>;
324
+ }, z.core.$strip>;
325
+ export type UpdateCounselorProfileInput = z.infer<typeof updateCounselorProfileSchema>;
326
+ //# sourceMappingURL=counselor-profile.schema.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"counselor-profile.schema.d.ts","sourceRoot":"","sources":["../src/counselor-profile.schema.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AAsCxB,eAAO,MAAM,4BAA4B;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;iBA8BvC,CAAC;AAEH,MAAM,MAAM,2BAA2B,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,4BAA4B,CAAC,CAAC;AAIvF,eAAO,MAAM,4BAA4B;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;iBAAyC,CAAC;AACnF,MAAM,MAAM,2BAA2B,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,4BAA4B,CAAC,CAAC"}
@@ -0,0 +1,56 @@
1
+ import { z } from "zod";
2
+ import { APPROACH, GENDER_PREFERENCE, REVENUE_MODEL, SESSION_DURATION } from "./enums.js";
3
+ import { COUNSELING_CATEGORY, ALL_ISSUES } from "./specializations.js";
4
+ // ─── Sub-schemas ─────────────────────────────────────────────────────
5
+ const qualificationSchema = z.object({
6
+ type: z.string().trim().min(1).max(100),
7
+ institution: z.string().trim().min(1).max(200),
8
+ year: z.number().int().min(1960).max(2030).optional(),
9
+ registrationNumber: z.string().trim().max(50).optional(),
10
+ });
11
+ const specializationSchema = z.object({
12
+ category: z.enum(COUNSELING_CATEGORY),
13
+ issues: z.array(z.enum(ALL_ISSUES)).min(1).max(15),
14
+ });
15
+ const availabilitySlotSchema = z.object({
16
+ startTime: z.string().regex(/^\d{2}:\d{2}$/, "Must be HH:mm format"),
17
+ endTime: z.string().regex(/^\d{2}:\d{2}$/, "Must be HH:mm format"),
18
+ });
19
+ const availabilitySchema = z.object({
20
+ dayOfWeek: z.number().int().min(0).max(6), // 0 = Sunday
21
+ slots: z.array(availabilitySlotSchema).min(1).max(10),
22
+ });
23
+ const geoJsonPointSchema = z.object({
24
+ type: z.literal("Point"),
25
+ coordinates: z.tuple([
26
+ z.number().min(-180).max(180), // longitude
27
+ z.number().min(-90).max(90), // latitude
28
+ ]),
29
+ });
30
+ // ─── Create ──────────────────────────────────────────────────────────
31
+ export const createCounselorProfileSchema = z.object({
32
+ displayName: z.string().trim().min(2).max(100),
33
+ headline: z.string().trim().min(10).max(200),
34
+ bio: z.string().trim().min(20).max(3000),
35
+ photos: z.array(z.string().url()).min(1).max(5),
36
+ specializations: z.array(specializationSchema).min(1).max(12),
37
+ approaches: z.array(z.enum(APPROACH)).min(1).max(10),
38
+ qualifications: z.array(qualificationSchema).min(1).max(10),
39
+ experienceYears: z.number().int().min(0).max(50),
40
+ languages: z.array(z.string().trim().min(1).max(50)).min(1).max(10),
41
+ bookingFee: z.number().int().min(100).max(5_000_000), // paise (Rs 1 - Rs 50,000)
42
+ consultationFee: z.number().int().min(100).max(50_000_000), // paise (Rs 1 - Rs 5,00,000)
43
+ sessionDurationMinutes: z.enum(SESSION_DURATION.map(String)).transform(Number),
44
+ freeFirstSession: z.boolean().default(false),
45
+ revenueModel: z.enum(REVENUE_MODEL).default("commission"),
46
+ availability: z.array(availabilitySchema).min(1).max(7),
47
+ location: geoJsonPointSchema,
48
+ locality: z.string().trim().max(200),
49
+ city: z.string().trim().max(100),
50
+ state: z.string().trim().max(100).optional(),
51
+ radiusKm: z.number().min(1).max(50).default(5),
52
+ genderPreference: z.enum(GENDER_PREFERENCE).optional(),
53
+ });
54
+ // ─── Update ──────────────────────────────────────────────────────────
55
+ export const updateCounselorProfileSchema = createCounselorProfileSchema.partial();
56
+ //# sourceMappingURL=counselor-profile.schema.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"counselor-profile.schema.js","sourceRoot":"","sources":["../src/counselor-profile.schema.ts"],"names":[],"mappings":"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","sourcesContent":["import { z } from \"zod\";\nimport { APPROACH, GENDER_PREFERENCE, REVENUE_MODEL, SESSION_DURATION } from \"./enums.js\";\nimport { COUNSELING_CATEGORY, ALL_ISSUES } from \"./specializations.js\";\n\n// ─── Sub-schemas ─────────────────────────────────────────────────────\n\nconst qualificationSchema = z.object({\n type: z.string().trim().min(1).max(100),\n institution: z.string().trim().min(1).max(200),\n year: z.number().int().min(1960).max(2030).optional(),\n registrationNumber: z.string().trim().max(50).optional(),\n});\n\nconst specializationSchema = z.object({\n category: z.enum(COUNSELING_CATEGORY),\n issues: z.array(z.enum(ALL_ISSUES)).min(1).max(15),\n});\n\nconst availabilitySlotSchema = z.object({\n startTime: z.string().regex(/^\\d{2}:\\d{2}$/, \"Must be HH:mm format\"),\n endTime: z.string().regex(/^\\d{2}:\\d{2}$/, \"Must be HH:mm format\"),\n});\n\nconst availabilitySchema = z.object({\n dayOfWeek: z.number().int().min(0).max(6), // 0 = Sunday\n slots: z.array(availabilitySlotSchema).min(1).max(10),\n});\n\nconst geoJsonPointSchema = z.object({\n type: z.literal(\"Point\"),\n coordinates: z.tuple([\n z.number().min(-180).max(180), // longitude\n z.number().min(-90).max(90), // latitude\n ]),\n});\n\n// ─── Create ──────────────────────────────────────────────────────────\n\nexport const createCounselorProfileSchema = z.object({\n displayName: z.string().trim().min(2).max(100),\n headline: z.string().trim().min(10).max(200),\n bio: z.string().trim().min(20).max(3000),\n photos: z.array(z.string().url()).min(1).max(5),\n\n specializations: z.array(specializationSchema).min(1).max(12),\n approaches: z.array(z.enum(APPROACH)).min(1).max(10),\n\n qualifications: z.array(qualificationSchema).min(1).max(10),\n experienceYears: z.number().int().min(0).max(50),\n languages: z.array(z.string().trim().min(1).max(50)).min(1).max(10),\n\n bookingFee: z.number().int().min(100).max(5_000_000), // paise (Rs 1 - Rs 50,000)\n consultationFee: z.number().int().min(100).max(50_000_000), // paise (Rs 1 - Rs 5,00,000)\n sessionDurationMinutes: z.enum(\n SESSION_DURATION.map(String) as [string, ...string[]],\n ).transform(Number),\n freeFirstSession: z.boolean().default(false),\n revenueModel: z.enum(REVENUE_MODEL).default(\"commission\"),\n\n availability: z.array(availabilitySchema).min(1).max(7),\n\n location: geoJsonPointSchema,\n locality: z.string().trim().max(200),\n city: z.string().trim().max(100),\n state: z.string().trim().max(100).optional(),\n radiusKm: z.number().min(1).max(50).default(5),\n\n genderPreference: z.enum(GENDER_PREFERENCE).optional(),\n});\n\nexport type CreateCounselorProfileInput = z.infer<typeof createCounselorProfileSchema>;\n\n// ─── Update ──────────────────────────────────────────────────────────\n\nexport const updateCounselorProfileSchema = createCounselorProfileSchema.partial();\nexport type UpdateCounselorProfileInput = z.infer<typeof updateCounselorProfileSchema>;\n"]}
@@ -0,0 +1,40 @@
1
+ import { z } from "zod";
2
+ export declare const createEnquirySchema: z.ZodObject<{
3
+ providerId: z.ZodString;
4
+ providerType: z.ZodEnum<{
5
+ counselor: "counselor";
6
+ clinic: "clinic";
7
+ }>;
8
+ message: z.ZodString;
9
+ specialization: z.ZodOptional<z.ZodEnum<{
10
+ mental_health: "mental_health";
11
+ neurodiversity: "neurodiversity";
12
+ relationship: "relationship";
13
+ family: "family";
14
+ career: "career";
15
+ child_adolescent: "child_adolescent";
16
+ addiction: "addiction";
17
+ sexual_health: "sexual_health";
18
+ trauma: "trauma";
19
+ wellness: "wellness";
20
+ corporate: "corporate";
21
+ legal: "legal";
22
+ }>>;
23
+ }, z.core.$strip>;
24
+ export type CreateEnquiryInput = z.infer<typeof createEnquirySchema>;
25
+ export declare const respondEnquirySchema: z.ZodObject<{
26
+ response: z.ZodString;
27
+ }, z.core.$strip>;
28
+ export type RespondEnquiryInput = z.infer<typeof respondEnquirySchema>;
29
+ export declare const enquiryListQuerySchema: z.ZodObject<{
30
+ page: z.ZodDefault<z.ZodCoercedNumber<unknown>>;
31
+ limit: z.ZodDefault<z.ZodCoercedNumber<unknown>>;
32
+ status: z.ZodOptional<z.ZodEnum<{
33
+ pending: "pending";
34
+ responded: "responded";
35
+ converted: "converted";
36
+ expired: "expired";
37
+ }>>;
38
+ }, z.core.$strip>;
39
+ export type EnquiryListQuery = z.infer<typeof enquiryListQuerySchema>;
40
+ //# sourceMappingURL=enquiry.schema.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"enquiry.schema.d.ts","sourceRoot":"","sources":["../src/enquiry.schema.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AAMxB,eAAO,MAAM,mBAAmB;;;;;;;;;;;;;;;;;;;;;iBAK9B,CAAC;AAEH,MAAM,MAAM,kBAAkB,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,mBAAmB,CAAC,CAAC;AAIrE,eAAO,MAAM,oBAAoB;;iBAE/B,CAAC;AAEH,MAAM,MAAM,mBAAmB,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,oBAAoB,CAAC,CAAC;AAIvE,eAAO,MAAM,sBAAsB;;;;;;;;;iBAIjC,CAAC;AAEH,MAAM,MAAM,gBAAgB,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,sBAAsB,CAAC,CAAC"}
@@ -0,0 +1,21 @@
1
+ import { z } from "zod";
2
+ import { PROVIDER_TYPE, ENQUIRY_STATUS } from "./enums.js";
3
+ import { COUNSELING_CATEGORY } from "./specializations.js";
4
+ // ─── Create ──────────────────────────────────────────────────────────
5
+ export const createEnquirySchema = z.object({
6
+ providerId: z.string().min(1),
7
+ providerType: z.enum(PROVIDER_TYPE),
8
+ message: z.string().trim().min(5).max(500),
9
+ specialization: z.enum(COUNSELING_CATEGORY).optional(),
10
+ });
11
+ // ─── Respond ─────────────────────────────────────────────────────────
12
+ export const respondEnquirySchema = z.object({
13
+ response: z.string().trim().min(5).max(1000),
14
+ });
15
+ // ─── Query ───────────────────────────────────────────────────────────
16
+ export const enquiryListQuerySchema = z.object({
17
+ page: z.coerce.number().int().min(1).default(1),
18
+ limit: z.coerce.number().int().min(1).max(50).default(20),
19
+ status: z.enum(ENQUIRY_STATUS).optional(),
20
+ });
21
+ //# sourceMappingURL=enquiry.schema.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"enquiry.schema.js","sourceRoot":"","sources":["../src/enquiry.schema.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AACxB,OAAO,EAAE,aAAa,EAAE,cAAc,EAAE,MAAM,YAAY,CAAC;AAC3D,OAAO,EAAE,mBAAmB,EAAE,MAAM,sBAAsB,CAAC;AAE3D,wEAAwE;AAExE,MAAM,CAAC,MAAM,mBAAmB,GAAG,CAAC,CAAC,MAAM,CAAC;IAC1C,UAAU,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,GAAG,CAAC,CAAC,CAAC;IAC7B,YAAY,EAAE,CAAC,CAAC,IAAI,CAAC,aAAa,CAAC;IACnC,OAAO,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,IAAI,EAAE,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,GAAG,CAAC;IAC1C,cAAc,EAAE,CAAC,CAAC,IAAI,CAAC,mBAAmB,CAAC,CAAC,QAAQ,EAAE;CACvD,CAAC,CAAC;AAIH,wEAAwE;AAExE,MAAM,CAAC,MAAM,oBAAoB,GAAG,CAAC,CAAC,MAAM,CAAC;IAC3C,QAAQ,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,IAAI,EAAE,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,IAAI,CAAC;CAC7C,CAAC,CAAC;AAIH,wEAAwE;AAExE,MAAM,CAAC,MAAM,sBAAsB,GAAG,CAAC,CAAC,MAAM,CAAC;IAC7C,IAAI,EAAE,CAAC,CAAC,MAAM,CAAC,MAAM,EAAE,CAAC,GAAG,EAAE,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC;IAC/C,KAAK,EAAE,CAAC,CAAC,MAAM,CAAC,MAAM,EAAE,CAAC,GAAG,EAAE,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC,OAAO,CAAC,EAAE,CAAC;IACzD,MAAM,EAAE,CAAC,CAAC,IAAI,CAAC,cAAc,CAAC,CAAC,QAAQ,EAAE;CAC1C,CAAC,CAAC","sourcesContent":["import { z } from \"zod\";\nimport { PROVIDER_TYPE, ENQUIRY_STATUS } from \"./enums.js\";\nimport { COUNSELING_CATEGORY } from \"./specializations.js\";\n\n// ─── Create ──────────────────────────────────────────────────────────\n\nexport const createEnquirySchema = z.object({\n providerId: z.string().min(1),\n providerType: z.enum(PROVIDER_TYPE),\n message: z.string().trim().min(5).max(500),\n specialization: z.enum(COUNSELING_CATEGORY).optional(),\n});\n\nexport type CreateEnquiryInput = z.infer<typeof createEnquirySchema>;\n\n// ─── Respond ─────────────────────────────────────────────────────────\n\nexport const respondEnquirySchema = z.object({\n response: z.string().trim().min(5).max(1000),\n});\n\nexport type RespondEnquiryInput = z.infer<typeof respondEnquirySchema>;\n\n// ─── Query ───────────────────────────────────────────────────────────\n\nexport const enquiryListQuerySchema = z.object({\n page: z.coerce.number().int().min(1).default(1),\n limit: z.coerce.number().int().min(1).max(50).default(20),\n status: z.enum(ENQUIRY_STATUS).optional(),\n});\n\nexport type EnquiryListQuery = z.infer<typeof enquiryListQuerySchema>;\n"]}
@@ -0,0 +1,52 @@
1
+ /** Provider type — individual counselor or counseling clinic. */
2
+ export declare const PROVIDER_TYPE: readonly ["counselor", "clinic"];
3
+ export type ProviderType = (typeof PROVIDER_TYPE)[number];
4
+ /** Session mode — how counseling is conducted. Phase 1: in_person only. */
5
+ export declare const SESSION_MODE: readonly ["in_person"];
6
+ export type SessionMode = (typeof SESSION_MODE)[number];
7
+ /** Revenue model — how the platform earns from the provider. */
8
+ export declare const REVENUE_MODEL: readonly ["commission", "subscription"];
9
+ export type RevenueModel = (typeof REVENUE_MODEL)[number];
10
+ /** Appointment lifecycle status. */
11
+ export declare const APPOINTMENT_STATUS: readonly ["upcoming", "completed", "cancelled", "no_show", "rescheduled"];
12
+ export type AppointmentStatus = (typeof APPOINTMENT_STATUS)[number];
13
+ /** Payment status for appointment booking fee. */
14
+ export declare const PAYMENT_STATUS: readonly ["pending", "paid", "refunded"];
15
+ export type PaymentStatus = (typeof PAYMENT_STATUS)[number];
16
+ /** Pre-booking enquiry status. */
17
+ export declare const ENQUIRY_STATUS: readonly ["pending", "responded", "converted", "expired"];
18
+ export type EnquiryStatus = (typeof ENQUIRY_STATUS)[number];
19
+ /** Counselor/clinic profile status. */
20
+ export declare const COUNSELOR_STATUS: readonly ["active", "inactive", "suspended", "banned"];
21
+ export type CounselorStatus = (typeof COUNSELOR_STATUS)[number];
22
+ /** Platform subscription plans for providers. */
23
+ export declare const SUBSCRIPTION_PLAN: readonly ["monthly", "quarterly", "yearly"];
24
+ export type SubscriptionPlan = (typeof SUBSCRIPTION_PLAN)[number];
25
+ /** Subscription status. */
26
+ export declare const SUBSCRIPTION_STATUS: readonly ["active", "expired", "cancelled"];
27
+ export type SubscriptionStatus = (typeof SUBSCRIPTION_STATUS)[number];
28
+ /** Professional qualification types. */
29
+ export declare const QUALIFICATION_TYPE: readonly ["PhD_Psychology", "PsyD", "MD_Psychiatry", "MSW", "MA_Psychology", "MA_Counseling", "M_Phil_Clinical_Psychology", "PGDGC", "Certified_Life_Coach", "Certified_NLP_Practitioner", "RCI_Licensed", "BACP_Accredited", "APA_Licensed", "B_Ed_Special_Education", "Other"];
30
+ export type QualificationType = (typeof QUALIFICATION_TYPE)[number];
31
+ /** Therapeutic approaches / methodologies. */
32
+ export declare const APPROACH: readonly ["CBT", "DBT", "Psychodynamic", "Humanistic", "Person_Centered", "Solution_Focused", "EMDR", "Art_Therapy", "Play_Therapy", "Mindfulness_Based", "Narrative_Therapy", "Family_Systems", "Gestalt", "ACT", "Motivational_Interviewing", "Eclectic"];
33
+ export type Approach = (typeof APPROACH)[number];
34
+ /** Clinic facilities. */
35
+ export declare const FACILITY: readonly ["waiting_room", "play_area", "wheelchair_accessible", "parking", "wifi", "private_rooms", "group_room", "cctv", "ac", "garden_area"];
36
+ export type Facility = (typeof FACILITY)[number];
37
+ /** Review tags — quick sentiment labels from clients. */
38
+ export declare const REVIEW_TAG: readonly ["empathetic", "good_listener", "practical_advice", "professional", "patient", "non_judgmental", "knowledgeable", "punctual", "flexible", "supportive", "warm", "insightful"];
39
+ export type ReviewTag = (typeof REVIEW_TAG)[number];
40
+ /** Reasons to report a provider. */
41
+ export declare const REPORT_REASON: readonly ["unprofessional_conduct", "fake_credentials", "harassment", "no_show", "overcharging", "spam", "other"];
42
+ export type ReportReason = (typeof REPORT_REASON)[number];
43
+ /** Gender preference for counselor. */
44
+ export declare const GENDER_PREFERENCE: readonly ["male", "female", "any"];
45
+ export type GenderPreference = (typeof GENDER_PREFERENCE)[number];
46
+ /** Sort options for search. */
47
+ export declare const SEARCH_SORT_BY: readonly ["distance", "rating", "fee_low", "fee_high", "experience", "newest"];
48
+ export type SearchSortBy = (typeof SEARCH_SORT_BY)[number];
49
+ /** Session duration options in minutes. */
50
+ export declare const SESSION_DURATION: readonly [30, 45, 60, 90];
51
+ export type SessionDuration = (typeof SESSION_DURATION)[number];
52
+ //# sourceMappingURL=enums.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"enums.d.ts","sourceRoot":"","sources":["../src/enums.ts"],"names":[],"mappings":"AAAA,iEAAiE;AACjE,eAAO,MAAM,aAAa,kCAAmC,CAAC;AAC9D,MAAM,MAAM,YAAY,GAAG,CAAC,OAAO,aAAa,CAAC,CAAC,MAAM,CAAC,CAAC;AAE1D,2EAA2E;AAC3E,eAAO,MAAM,YAAY,wBAAyB,CAAC;AACnD,MAAM,MAAM,WAAW,GAAG,CAAC,OAAO,YAAY,CAAC,CAAC,MAAM,CAAC,CAAC;AAExD,gEAAgE;AAChE,eAAO,MAAM,aAAa,yCAA0C,CAAC;AACrE,MAAM,MAAM,YAAY,GAAG,CAAC,OAAO,aAAa,CAAC,CAAC,MAAM,CAAC,CAAC;AAE1D,oCAAoC;AACpC,eAAO,MAAM,kBAAkB,2EAMrB,CAAC;AACX,MAAM,MAAM,iBAAiB,GAAG,CAAC,OAAO,kBAAkB,CAAC,CAAC,MAAM,CAAC,CAAC;AAEpE,kDAAkD;AAClD,eAAO,MAAM,cAAc,0CAA2C,CAAC;AACvE,MAAM,MAAM,aAAa,GAAG,CAAC,OAAO,cAAc,CAAC,CAAC,MAAM,CAAC,CAAC;AAE5D,kCAAkC;AAClC,eAAO,MAAM,cAAc,2DAKjB,CAAC;AACX,MAAM,MAAM,aAAa,GAAG,CAAC,OAAO,cAAc,CAAC,CAAC,MAAM,CAAC,CAAC;AAE5D,uCAAuC;AACvC,eAAO,MAAM,gBAAgB,wDAKnB,CAAC;AACX,MAAM,MAAM,eAAe,GAAG,CAAC,OAAO,gBAAgB,CAAC,CAAC,MAAM,CAAC,CAAC;AAEhE,iDAAiD;AACjD,eAAO,MAAM,iBAAiB,6CAIpB,CAAC;AACX,MAAM,MAAM,gBAAgB,GAAG,CAAC,OAAO,iBAAiB,CAAC,CAAC,MAAM,CAAC,CAAC;AAElE,2BAA2B;AAC3B,eAAO,MAAM,mBAAmB,6CAItB,CAAC;AACX,MAAM,MAAM,kBAAkB,GAAG,CAAC,OAAO,mBAAmB,CAAC,CAAC,MAAM,CAAC,CAAC;AAEtE,wCAAwC;AACxC,eAAO,MAAM,kBAAkB,kRAgBrB,CAAC;AACX,MAAM,MAAM,iBAAiB,GAAG,CAAC,OAAO,kBAAkB,CAAC,CAAC,MAAM,CAAC,CAAC;AAEpE,8CAA8C;AAC9C,eAAO,MAAM,QAAQ,6PAiBX,CAAC;AACX,MAAM,MAAM,QAAQ,GAAG,CAAC,OAAO,QAAQ,CAAC,CAAC,MAAM,CAAC,CAAC;AAEjD,yBAAyB;AACzB,eAAO,MAAM,QAAQ,gJAWX,CAAC;AACX,MAAM,MAAM,QAAQ,GAAG,CAAC,OAAO,QAAQ,CAAC,CAAC,MAAM,CAAC,CAAC;AAEjD,yDAAyD;AACzD,eAAO,MAAM,UAAU,wLAab,CAAC;AACX,MAAM,MAAM,SAAS,GAAG,CAAC,OAAO,UAAU,CAAC,CAAC,MAAM,CAAC,CAAC;AAEpD,oCAAoC;AACpC,eAAO,MAAM,aAAa,mHAQhB,CAAC;AACX,MAAM,MAAM,YAAY,GAAG,CAAC,OAAO,aAAa,CAAC,CAAC,MAAM,CAAC,CAAC;AAE1D,uCAAuC;AACvC,eAAO,MAAM,iBAAiB,oCAAqC,CAAC;AACpE,MAAM,MAAM,gBAAgB,GAAG,CAAC,OAAO,iBAAiB,CAAC,CAAC,MAAM,CAAC,CAAC;AAElE,+BAA+B;AAC/B,eAAO,MAAM,cAAc,gFAOjB,CAAC;AACX,MAAM,MAAM,YAAY,GAAG,CAAC,OAAO,cAAc,CAAC,CAAC,MAAM,CAAC,CAAC;AAE3D,2CAA2C;AAC3C,eAAO,MAAM,gBAAgB,2BAA4B,CAAC;AAC1D,MAAM,MAAM,eAAe,GAAG,CAAC,OAAO,gBAAgB,CAAC,CAAC,MAAM,CAAC,CAAC"}