@mohasinac/appkit 4.18.0 → 4.20.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 (29) hide show
  1. package/dist/_internal/client/features/lottery/LotteryAdminEditView.js +3 -1
  2. package/dist/_internal/client/features/lottery/LotteryPullForm.js +3 -1
  3. package/dist/_internal/shared/features/lottery/config-form.d.ts +58 -0
  4. package/dist/_internal/shared/features/lottery/config-form.js +71 -0
  5. package/dist/client.d.ts +3 -0
  6. package/dist/client.js +3 -0
  7. package/dist/features/account/schemas/index.d.ts +23 -0
  8. package/dist/features/account/schemas/index.js +21 -0
  9. package/dist/features/admin/components/AdminSiteSettingsView.js +8 -6
  10. package/dist/features/admin/components/AdminUserEditorView.js +14 -12
  11. package/dist/features/admin/schemas/admin-user-form.d.ts +82 -0
  12. package/dist/features/admin/schemas/admin-user-form.js +102 -0
  13. package/dist/features/admin/schemas/site-settings-form.d.ts +309 -0
  14. package/dist/features/admin/schemas/site-settings-form.js +159 -0
  15. package/dist/features/auctions/components/PlaceBidFormClient.js +3 -2
  16. package/dist/features/seller/components/SellerProductShell.js +107 -71
  17. package/dist/features/seller/components/SellerShippingView.js +21 -18
  18. package/dist/features/seller/components/SellerStorefrontView.js +21 -19
  19. package/dist/features/shell/FormShell.d.ts +4 -4
  20. package/dist/features/shell/FormShell.js +1 -1
  21. package/dist/features/shell/index.d.ts +0 -2
  22. package/dist/features/shell/index.js +0 -1
  23. package/dist/features/tester/seed-data/tester-checklist-seed-data.js +24 -0
  24. package/dist/features/whatsapp-bot/components/SellerWhatsAppSettingsView.js +4 -2
  25. package/dist/index.d.ts +3 -2
  26. package/dist/index.js +5 -3
  27. package/dist/schemas/registry.d.ts +682 -0
  28. package/dist/schemas/registry.js +22 -0
  29. package/package.json +1 -1
@@ -6,6 +6,8 @@ import { useQueryClient } from "@tanstack/react-query";
6
6
  import { Avatar, Button, ConfirmDeleteModal, Div, Form, FormActions, Heading, Input, Row, Select, SideDrawer, Span, Stack, StackedViewShell, Text, Textarea, Toggle, useToast } from "../../../ui";
7
7
  import { apiClient } from "../../../http";
8
8
  import { ADMIN_ENDPOINTS } from "../../../constants/api-endpoints";
9
+ import { adminUserUpdateSchema } from "../schemas/admin-user-form";
10
+ import { FormErrorSummary } from "../../../ui/forms/FormErrorSummary";
9
11
  const ROLE_OPTIONS = [
10
12
  { label: "User (buyer)", value: "user" },
11
13
  { label: "Seller", value: "seller" },
@@ -237,18 +239,18 @@ export function AdminUserEditorView({ open, onClose, userId, displayName, photoU
237
239
  const renderAdminNotesSection = () => (_jsx(Textarea, { label: "Admin notes (optional)", value: adminNotes, onChange: (e) => setAdminNotes(e.target.value), rows: 3, placeholder: "Internal notes about this user\u2026" }));
238
240
  const renderActionsSection = () => (_jsxs(FormActions, { align: "right", children: [_jsx(Button, { type: "button", variant: "danger", onClick: () => setDeleteOpen(true), disabled: !userId, children: "Delete user" }), _jsx(Button, { type: "button", variant: "secondary", onClick: onClose, children: "Cancel" }), _jsx(Button, { type: "submit", isLoading: saveMutation.isPending, disabled: !userId || saveMutation.isPending, children: "Save changes" })] }));
239
241
  const renderModerationSection = () => (_jsxs(Stack, { border: "default", as: "section", gap: "sm", className: "border-t", padding: "t-md", children: [_jsx(Heading, { level: 3, className: "mb-3", color: "muted", size: "sm", weight: "semibold", children: "Moderation" }), _jsx(HardBanPanel, { userId: userId, isHardBanned: isHardBanned, currentHardBanReason: currentHardBanReason, showHardBanForm: showHardBanForm, setShowHardBanForm: setShowHardBanForm, hardBanReasonInput: hardBanReasonInput, setHardBanReasonInput: setHardBanReasonInput, hardBanPending: hardBanMutation.isPending, unbanPending: unbanMutation.isPending, onHardBan: (reason) => hardBanMutation.mutate(reason), onUnban: () => unbanMutation.mutate() }), _jsx(SoftBanPanel, { userId: userId, softBans: softBans, showAddSoftBan: showAddSoftBan, setShowAddSoftBan: setShowAddSoftBan, softBanAction: softBanAction, setSoftBanAction: setSoftBanAction, softBanReason: softBanReason, setSoftBanReason: setSoftBanReason, softBanExpiry: softBanExpiry, setSoftBanExpiry: setSoftBanExpiry, softBanPending: softBanMutation.isPending, liftPending: liftSoftBanMutation.isPending, onAddSoftBan: (payload) => softBanMutation.mutate(payload), onLiftSoftBan: (action) => liftSoftBanMutation.mutate(action) })] }));
240
- return (_jsxs(_Fragment, { children: [_jsx(SideDrawer, { isOpen: open, onClose: onClose, title: displayName ? `Manage: ${displayName}` : "Manage User", children: _jsx(Form, { onSubmit: (e) => {
242
+ return (_jsxs(_Fragment, { children: [_jsx(SideDrawer, { isOpen: open, onClose: onClose, title: displayName ? `Manage: ${displayName}` : "Manage User", children: _jsxs(Form, { schema: adminUserUpdateSchema, onSubmit: (e) => {
241
243
  e.preventDefault();
242
244
  saveMutation.mutate();
243
- }, padding: "md", children: _jsx(StackedViewShell, { portal: "admin", className: "space-y-4", sections: [
244
- renderAvatarHeader,
245
- renderInfoCard,
246
- renderRoleSection,
247
- renderEmailVerifiedSection,
248
- renderIsTesterSection,
249
- renderProfileSection,
250
- renderAdminNotesSection,
251
- renderActionsSection,
252
- renderModerationSection,
253
- ] }) }) }), _jsx(ConfirmDeleteModal, { isOpen: deleteOpen, onClose: () => setDeleteOpen(false), onConfirm: () => deleteMutation.mutate(), isDeleting: deleteMutation.isPending, title: `Delete ${displayName ?? "user"}?`, message: "This action cannot be undone. The user's account and all associated data will be permanently removed.", confirmText: "Delete user", variant: "danger" })] }));
245
+ }, padding: "md", children: [_jsx(FormErrorSummary, {}), _jsx(StackedViewShell, { portal: "admin", className: "space-y-4", sections: [
246
+ renderAvatarHeader,
247
+ renderInfoCard,
248
+ renderRoleSection,
249
+ renderEmailVerifiedSection,
250
+ renderIsTesterSection,
251
+ renderProfileSection,
252
+ renderAdminNotesSection,
253
+ renderActionsSection,
254
+ renderModerationSection,
255
+ ] })] }) }), _jsx(ConfirmDeleteModal, { isOpen: deleteOpen, onClose: () => setDeleteOpen(false), onConfirm: () => deleteMutation.mutate(), isDeleting: deleteMutation.isPending, title: `Delete ${displayName ?? "user"}?`, message: "This action cannot be undone. The user's account and all associated data will be permanently removed.", confirmText: "Delete user", variant: "danger" })] }));
254
256
  }
@@ -0,0 +1,82 @@
1
+ import { z } from "zod";
2
+ export declare const adminUserUpdateSchema: z.ZodObject<{
3
+ displayName: z.ZodOptional<z.ZodString>;
4
+ phoneNumber: z.ZodUnion<[z.ZodOptional<z.ZodString>, z.ZodLiteral<"">]>;
5
+ isTester: z.ZodOptional<z.ZodBoolean>;
6
+ canTestAdmin: z.ZodOptional<z.ZodBoolean>;
7
+ adminNotes: z.ZodOptional<z.ZodString>;
8
+ publicProfile: z.ZodOptional<z.ZodRecord<z.ZodString, z.ZodType<import("../../..").FirestoreValue, z.ZodTypeDef, import("../../..").FirestoreValue>>>;
9
+ }, "strip", z.ZodTypeAny, {
10
+ displayName?: string | undefined;
11
+ adminNotes?: string | undefined;
12
+ phoneNumber?: string | undefined;
13
+ isTester?: boolean | undefined;
14
+ canTestAdmin?: boolean | undefined;
15
+ publicProfile?: Record<string, import("../../..").FirestoreValue> | undefined;
16
+ }, {
17
+ displayName?: string | undefined;
18
+ adminNotes?: string | undefined;
19
+ phoneNumber?: string | undefined;
20
+ isTester?: boolean | undefined;
21
+ canTestAdmin?: boolean | undefined;
22
+ publicProfile?: Record<string, import("../../..").FirestoreValue> | undefined;
23
+ }>;
24
+ export type AdminUserUpdateValues = z.infer<typeof adminUserUpdateSchema>;
25
+ /**
26
+ * A store's WhatsApp Business connection.
27
+ *
28
+ * `accessToken` is optional because the form shows a masked placeholder and
29
+ * only sends the field when the seller types a NEW value — so "absent" means
30
+ * "unchanged", not "clear it". The `.min(20)` therefore applies only to a real
31
+ * replacement, and is there because a truncated token fails silently at sync
32
+ * time rather than on save.
33
+ */
34
+ export declare const whatsappSettingsSchema: z.ZodObject<{
35
+ catalogSyncEnabled: z.ZodBoolean;
36
+ phoneNumber: z.ZodUnion<[z.ZodOptional<z.ZodString>, z.ZodLiteral<"">]>;
37
+ wabaId: z.ZodUnion<[z.ZodOptional<z.ZodString>, z.ZodLiteral<"">]>;
38
+ catalogId: z.ZodUnion<[z.ZodOptional<z.ZodString>, z.ZodLiteral<"">]>;
39
+ accessToken: z.ZodUnion<[z.ZodOptional<z.ZodString>, z.ZodLiteral<"">]>;
40
+ }, "strip", z.ZodTypeAny, {
41
+ catalogSyncEnabled: boolean;
42
+ phoneNumber?: string | undefined;
43
+ accessToken?: string | undefined;
44
+ wabaId?: string | undefined;
45
+ catalogId?: string | undefined;
46
+ }, {
47
+ catalogSyncEnabled: boolean;
48
+ phoneNumber?: string | undefined;
49
+ accessToken?: string | undefined;
50
+ wabaId?: string | undefined;
51
+ catalogId?: string | undefined;
52
+ }>;
53
+ export type WhatsappSettingsValues = z.infer<typeof whatsappSettingsSchema>;
54
+ /**
55
+ * A buyer's lottery entry.
56
+ *
57
+ * `purchasedItemNumber` was `parseInt(itemNumber, 10)` — `NaN` for anything
58
+ * non-numeric — and `paymentTime` was `new Date(...)`, which yields
59
+ * `Invalid Date` and then throws on `.toISOString()`. Both are coerced and
60
+ * checked here so the failure is an inline message rather than a crash or a
61
+ * `NaN` written to the entry.
62
+ */
63
+ export declare const lotteryPullSchema: z.ZodObject<{
64
+ sourceType: z.ZodEnum<["event", "product"]>;
65
+ transactionId: z.ZodString;
66
+ paymentTime: z.ZodEffects<z.ZodString, string, string>;
67
+ purchasedItemNumber: z.ZodNumber;
68
+ userPhone: z.ZodUnion<[z.ZodOptional<z.ZodString>, z.ZodLiteral<"">]>;
69
+ }, "strip", z.ZodTypeAny, {
70
+ transactionId: string;
71
+ sourceType: "event" | "product";
72
+ paymentTime: string;
73
+ purchasedItemNumber: number;
74
+ userPhone?: string | undefined;
75
+ }, {
76
+ transactionId: string;
77
+ sourceType: "event" | "product";
78
+ paymentTime: string;
79
+ purchasedItemNumber: number;
80
+ userPhone?: string | undefined;
81
+ }>;
82
+ export type LotteryPullValues = z.infer<typeof lotteryPullSchema>;
@@ -0,0 +1,102 @@
1
+ /*
2
+ * WHY: Three more forms, each writing something with a blast radius.
3
+ *
4
+ * `AdminUserEditorView` edits another person's account — `displayName`
5
+ * and `phoneNumber` are PII, encrypted at rest, and neither was checked.
6
+ * `isTester`/`canTestAdmin` are the flags Recurrent Root Cause #38 was
7
+ * about: the list endpoint dropped them, the editor defaulted them to
8
+ * false, and saving any unrelated field silently stripped a real
9
+ * tester's access.
10
+ *
11
+ * `SellerWhatsAppSettingsView` writes `accessToken` — a live Meta
12
+ * credential — plus the WABA and catalog ids the sync runs against. A
13
+ * malformed id there fails at sync time, hours later, with no obvious
14
+ * cause.
15
+ *
16
+ * `LotteryPullForm` is a buyer-facing entry: a transaction id, a payment
17
+ * time and an item number, all parsed with a bare `parseInt` and a `new
18
+ * Date(...)` that yields `Invalid Date` on anything unparseable.
19
+ *
20
+ * EXPORTS:
21
+ * adminUserUpdateSchema, whatsappSettingsSchema, lotteryPullSchema,
22
+ * and their inferred value types
23
+ *
24
+ * @tag domain:admin,whatsapp,lottery
25
+ * @tag layer:schema
26
+ * @tag pattern:none
27
+ * @tag access:isomorphic
28
+ * @tag consumers:AdminUserEditorView,SellerWhatsAppSettingsView,LotteryPullForm
29
+ * @tag sideEffects:none
30
+ */
31
+ import { z } from "zod";
32
+ import { annotate } from "../../shell/field-ui-meta";
33
+ import { firestoreValueSchema } from "../../../schemas/firestore-value";
34
+ const PHONE_RE = /^(\+?91[-\s]?)?[6-9]\d{9}$/;
35
+ export const adminUserUpdateSchema = z.object({
36
+ displayName: annotate(z.string().trim().min(1).max(120).optional(), {
37
+ section: "profile", sectionLabel: "Profile", sectionRequired: true, quick: true, order: 1, row: "pair",
38
+ }),
39
+ phoneNumber: annotate(z.string().trim().regex(PHONE_RE, "Enter a 10-digit Indian mobile number.").optional().or(z.literal("")), { section: "profile", order: 2, row: "pair" }),
40
+ /*
41
+ * The tester flags. Kept OPTIONAL rather than defaulted, deliberately: a
42
+ * PATCH that omits them must leave them alone. Defaulting either to `false`
43
+ * here would reproduce Root Cause #38 in the schema layer — the editor
44
+ * already did exactly that from the list row.
45
+ */
46
+ isTester: annotate(z.boolean().optional(), {
47
+ section: "access", sectionLabel: "Access", order: 1, row: "quarter",
48
+ }),
49
+ canTestAdmin: annotate(z.boolean().optional(), {
50
+ section: "access", order: 2, row: "quarter",
51
+ }),
52
+ adminNotes: annotate(z.string().trim().max(2000).optional(), {
53
+ section: "access", order: 3, row: "full", kind: "textarea",
54
+ help: "Internal only — never shown to the user.",
55
+ }),
56
+ // Open: the public profile carries per-user social links and bio fields that
57
+ // are added over time, and a closed shape would strip a newly-added one.
58
+ publicProfile: annotate(z.record(firestoreValueSchema).optional(), {
59
+ section: "access", order: 4, row: "full", kind: "list",
60
+ }),
61
+ });
62
+ /**
63
+ * A store's WhatsApp Business connection.
64
+ *
65
+ * `accessToken` is optional because the form shows a masked placeholder and
66
+ * only sends the field when the seller types a NEW value — so "absent" means
67
+ * "unchanged", not "clear it". The `.min(20)` therefore applies only to a real
68
+ * replacement, and is there because a truncated token fails silently at sync
69
+ * time rather than on save.
70
+ */
71
+ export const whatsappSettingsSchema = z.object({
72
+ catalogSyncEnabled: annotate(z.boolean(), {
73
+ section: "sync", sectionLabel: "Catalog sync", sectionRequired: true, quick: true, order: 1, row: "quarter",
74
+ }),
75
+ phoneNumber: annotate(z.string().trim().regex(PHONE_RE, "Enter the 10-digit WhatsApp Business number.").optional().or(z.literal("")), { section: "connection", sectionLabel: "Connection", order: 1, row: "pair" }),
76
+ // Meta ids are numeric strings; a pasted URL or a stray space is the usual
77
+ // mistake and produces a sync that never runs.
78
+ wabaId: annotate(z.string().trim().regex(/^\d{5,32}$/, "A WABA ID is a numeric id, not a URL.").optional().or(z.literal("")), { section: "connection", order: 2, row: "pair" }),
79
+ catalogId: annotate(z.string().trim().regex(/^\d{5,32}$/, "A catalog ID is a numeric id, not a URL.").optional().or(z.literal("")), { section: "connection", order: 3, row: "pair" }),
80
+ accessToken: annotate(z.string().trim().min(20, "That access token looks truncated.").optional().or(z.literal("")), { section: "connection", order: 4, row: "full", help: "Leave blank to keep the current token." }),
81
+ });
82
+ /**
83
+ * A buyer's lottery entry.
84
+ *
85
+ * `purchasedItemNumber` was `parseInt(itemNumber, 10)` — `NaN` for anything
86
+ * non-numeric — and `paymentTime` was `new Date(...)`, which yields
87
+ * `Invalid Date` and then throws on `.toISOString()`. Both are coerced and
88
+ * checked here so the failure is an inline message rather than a crash or a
89
+ * `NaN` written to the entry.
90
+ */
91
+ export const lotteryPullSchema = z.object({
92
+ sourceType: annotate(z.enum(["event", "product"]), {
93
+ section: "entry", sectionLabel: "Entry", sectionRequired: true, quick: true, order: 1, row: "pair",
94
+ }),
95
+ transactionId: annotate(z.string().trim().min(4, "Enter the payment reference from your app.").max(120), { section: "entry", quick: true, order: 2, row: "pair" }),
96
+ paymentTime: annotate(z.string().trim().min(1, "When did you pay?").refine((v) => !Number.isNaN(Date.parse(v)), "That isn't a valid date and time."), { section: "entry", quick: true, order: 3, row: "pair", kind: "date" }),
97
+ purchasedItemNumber: annotate(z.coerce
98
+ .number({ invalid_type_error: "Enter the slot number you bought." })
99
+ .int("A slot number is a whole number.")
100
+ .min(1, "Slot numbers start at 1."), { section: "entry", quick: true, order: 4, row: "pair", kind: "number" }),
101
+ userPhone: annotate(z.string().trim().regex(PHONE_RE, "Enter a 10-digit Indian mobile number.").optional().or(z.literal("")), { section: "entry", order: 5, row: "pair" }),
102
+ });
@@ -0,0 +1,309 @@
1
+ import { z } from "zod";
2
+ export declare const siteSettingsFormSchema: z.ZodObject<{
3
+ announcementBar: z.ZodOptional<z.ZodObject<{
4
+ message: z.ZodOptional<z.ZodString>;
5
+ enabled: z.ZodOptional<z.ZodBoolean>;
6
+ link: z.ZodUnion<[z.ZodOptional<z.ZodString>, z.ZodLiteral<"">]>;
7
+ }, "passthrough", z.ZodTypeAny, z.objectOutputType<{
8
+ message: z.ZodOptional<z.ZodString>;
9
+ enabled: z.ZodOptional<z.ZodBoolean>;
10
+ link: z.ZodUnion<[z.ZodOptional<z.ZodString>, z.ZodLiteral<"">]>;
11
+ }, z.ZodTypeAny, "passthrough">, z.objectInputType<{
12
+ message: z.ZodOptional<z.ZodString>;
13
+ enabled: z.ZodOptional<z.ZodBoolean>;
14
+ link: z.ZodUnion<[z.ZodOptional<z.ZodString>, z.ZodLiteral<"">]>;
15
+ }, z.ZodTypeAny, "passthrough">>>;
16
+ contact: z.ZodOptional<z.ZodObject<{
17
+ email: z.ZodUnion<[z.ZodOptional<z.ZodString>, z.ZodLiteral<"">]>;
18
+ supportEmail: z.ZodUnion<[z.ZodOptional<z.ZodString>, z.ZodLiteral<"">]>;
19
+ phone: z.ZodOptional<z.ZodString>;
20
+ }, "passthrough", z.ZodTypeAny, z.objectOutputType<{
21
+ email: z.ZodUnion<[z.ZodOptional<z.ZodString>, z.ZodLiteral<"">]>;
22
+ supportEmail: z.ZodUnion<[z.ZodOptional<z.ZodString>, z.ZodLiteral<"">]>;
23
+ phone: z.ZodOptional<z.ZodString>;
24
+ }, z.ZodTypeAny, "passthrough">, z.objectInputType<{
25
+ email: z.ZodUnion<[z.ZodOptional<z.ZodString>, z.ZodLiteral<"">]>;
26
+ supportEmail: z.ZodUnion<[z.ZodOptional<z.ZodString>, z.ZodLiteral<"">]>;
27
+ phone: z.ZodOptional<z.ZodString>;
28
+ }, z.ZodTypeAny, "passthrough">>>;
29
+ commissions: z.ZodOptional<z.ZodObject<{
30
+ platformFeePercent: z.ZodOptional<z.ZodNumber>;
31
+ gatewayFeePercent: z.ZodOptional<z.ZodNumber>;
32
+ platformFeeMax: z.ZodOptional<z.ZodNumber>;
33
+ minPayoutAmount: z.ZodOptional<z.ZodNumber>;
34
+ payoutHoldDays: z.ZodOptional<z.ZodNumber>;
35
+ codHandlingFee: z.ZodOptional<z.ZodNumber>;
36
+ codDepositPercent: z.ZodOptional<z.ZodNumber>;
37
+ }, "passthrough", z.ZodTypeAny, z.objectOutputType<{
38
+ platformFeePercent: z.ZodOptional<z.ZodNumber>;
39
+ gatewayFeePercent: z.ZodOptional<z.ZodNumber>;
40
+ platformFeeMax: z.ZodOptional<z.ZodNumber>;
41
+ minPayoutAmount: z.ZodOptional<z.ZodNumber>;
42
+ payoutHoldDays: z.ZodOptional<z.ZodNumber>;
43
+ codHandlingFee: z.ZodOptional<z.ZodNumber>;
44
+ codDepositPercent: z.ZodOptional<z.ZodNumber>;
45
+ }, z.ZodTypeAny, "passthrough">, z.objectInputType<{
46
+ platformFeePercent: z.ZodOptional<z.ZodNumber>;
47
+ gatewayFeePercent: z.ZodOptional<z.ZodNumber>;
48
+ platformFeeMax: z.ZodOptional<z.ZodNumber>;
49
+ minPayoutAmount: z.ZodOptional<z.ZodNumber>;
50
+ payoutHoldDays: z.ZodOptional<z.ZodNumber>;
51
+ codHandlingFee: z.ZodOptional<z.ZodNumber>;
52
+ codDepositPercent: z.ZodOptional<z.ZodNumber>;
53
+ }, z.ZodTypeAny, "passthrough">>>;
54
+ laborRate: z.ZodOptional<z.ZodObject<{
55
+ hourlyRate: z.ZodOptional<z.ZodNumber>;
56
+ }, "passthrough", z.ZodTypeAny, z.objectOutputType<{
57
+ hourlyRate: z.ZodOptional<z.ZodNumber>;
58
+ }, z.ZodTypeAny, "passthrough">, z.objectInputType<{
59
+ hourlyRate: z.ZodOptional<z.ZodNumber>;
60
+ }, z.ZodTypeAny, "passthrough">>>;
61
+ emi: z.ZodOptional<z.ZodObject<{
62
+ surchargePercent: z.ZodOptional<z.ZodNumber>;
63
+ surchargeSellerSharePercent: z.ZodOptional<z.ZodNumber>;
64
+ minOrderAmount: z.ZodOptional<z.ZodNumber>;
65
+ }, "passthrough", z.ZodTypeAny, z.objectOutputType<{
66
+ surchargePercent: z.ZodOptional<z.ZodNumber>;
67
+ surchargeSellerSharePercent: z.ZodOptional<z.ZodNumber>;
68
+ minOrderAmount: z.ZodOptional<z.ZodNumber>;
69
+ }, z.ZodTypeAny, "passthrough">, z.objectInputType<{
70
+ surchargePercent: z.ZodOptional<z.ZodNumber>;
71
+ surchargeSellerSharePercent: z.ZodOptional<z.ZodNumber>;
72
+ minOrderAmount: z.ZodOptional<z.ZodNumber>;
73
+ }, z.ZodTypeAny, "passthrough">>>;
74
+ gst: z.ZodOptional<z.ZodObject<{
75
+ gstin: z.ZodUnion<[z.ZodOptional<z.ZodString>, z.ZodLiteral<"">]>;
76
+ ratePercent: z.ZodOptional<z.ZodNumber>;
77
+ }, "passthrough", z.ZodTypeAny, z.objectOutputType<{
78
+ gstin: z.ZodUnion<[z.ZodOptional<z.ZodString>, z.ZodLiteral<"">]>;
79
+ ratePercent: z.ZodOptional<z.ZodNumber>;
80
+ }, z.ZodTypeAny, "passthrough">, z.objectInputType<{
81
+ gstin: z.ZodUnion<[z.ZodOptional<z.ZodString>, z.ZodLiteral<"">]>;
82
+ ratePercent: z.ZodOptional<z.ZodNumber>;
83
+ }, z.ZodTypeAny, "passthrough">>>;
84
+ auctionConfig: z.ZodOptional<z.ZodObject<{
85
+ minBidIncrement: z.ZodOptional<z.ZodNumber>;
86
+ extensionMinutes: z.ZodOptional<z.ZodNumber>;
87
+ }, "passthrough", z.ZodTypeAny, z.objectOutputType<{
88
+ minBidIncrement: z.ZodOptional<z.ZodNumber>;
89
+ extensionMinutes: z.ZodOptional<z.ZodNumber>;
90
+ }, z.ZodTypeAny, "passthrough">, z.objectInputType<{
91
+ minBidIncrement: z.ZodOptional<z.ZodNumber>;
92
+ extensionMinutes: z.ZodOptional<z.ZodNumber>;
93
+ }, z.ZodTypeAny, "passthrough">>>;
94
+ seo: z.ZodOptional<z.ZodObject<{
95
+ title: z.ZodOptional<z.ZodString>;
96
+ description: z.ZodOptional<z.ZodString>;
97
+ }, "passthrough", z.ZodTypeAny, z.objectOutputType<{
98
+ title: z.ZodOptional<z.ZodString>;
99
+ description: z.ZodOptional<z.ZodString>;
100
+ }, z.ZodTypeAny, "passthrough">, z.objectInputType<{
101
+ title: z.ZodOptional<z.ZodString>;
102
+ description: z.ZodOptional<z.ZodString>;
103
+ }, z.ZodTypeAny, "passthrough">>>;
104
+ }, "passthrough", z.ZodTypeAny, z.objectOutputType<{
105
+ announcementBar: z.ZodOptional<z.ZodObject<{
106
+ message: z.ZodOptional<z.ZodString>;
107
+ enabled: z.ZodOptional<z.ZodBoolean>;
108
+ link: z.ZodUnion<[z.ZodOptional<z.ZodString>, z.ZodLiteral<"">]>;
109
+ }, "passthrough", z.ZodTypeAny, z.objectOutputType<{
110
+ message: z.ZodOptional<z.ZodString>;
111
+ enabled: z.ZodOptional<z.ZodBoolean>;
112
+ link: z.ZodUnion<[z.ZodOptional<z.ZodString>, z.ZodLiteral<"">]>;
113
+ }, z.ZodTypeAny, "passthrough">, z.objectInputType<{
114
+ message: z.ZodOptional<z.ZodString>;
115
+ enabled: z.ZodOptional<z.ZodBoolean>;
116
+ link: z.ZodUnion<[z.ZodOptional<z.ZodString>, z.ZodLiteral<"">]>;
117
+ }, z.ZodTypeAny, "passthrough">>>;
118
+ contact: z.ZodOptional<z.ZodObject<{
119
+ email: z.ZodUnion<[z.ZodOptional<z.ZodString>, z.ZodLiteral<"">]>;
120
+ supportEmail: z.ZodUnion<[z.ZodOptional<z.ZodString>, z.ZodLiteral<"">]>;
121
+ phone: z.ZodOptional<z.ZodString>;
122
+ }, "passthrough", z.ZodTypeAny, z.objectOutputType<{
123
+ email: z.ZodUnion<[z.ZodOptional<z.ZodString>, z.ZodLiteral<"">]>;
124
+ supportEmail: z.ZodUnion<[z.ZodOptional<z.ZodString>, z.ZodLiteral<"">]>;
125
+ phone: z.ZodOptional<z.ZodString>;
126
+ }, z.ZodTypeAny, "passthrough">, z.objectInputType<{
127
+ email: z.ZodUnion<[z.ZodOptional<z.ZodString>, z.ZodLiteral<"">]>;
128
+ supportEmail: z.ZodUnion<[z.ZodOptional<z.ZodString>, z.ZodLiteral<"">]>;
129
+ phone: z.ZodOptional<z.ZodString>;
130
+ }, z.ZodTypeAny, "passthrough">>>;
131
+ commissions: z.ZodOptional<z.ZodObject<{
132
+ platformFeePercent: z.ZodOptional<z.ZodNumber>;
133
+ gatewayFeePercent: z.ZodOptional<z.ZodNumber>;
134
+ platformFeeMax: z.ZodOptional<z.ZodNumber>;
135
+ minPayoutAmount: z.ZodOptional<z.ZodNumber>;
136
+ payoutHoldDays: z.ZodOptional<z.ZodNumber>;
137
+ codHandlingFee: z.ZodOptional<z.ZodNumber>;
138
+ codDepositPercent: z.ZodOptional<z.ZodNumber>;
139
+ }, "passthrough", z.ZodTypeAny, z.objectOutputType<{
140
+ platformFeePercent: z.ZodOptional<z.ZodNumber>;
141
+ gatewayFeePercent: z.ZodOptional<z.ZodNumber>;
142
+ platformFeeMax: z.ZodOptional<z.ZodNumber>;
143
+ minPayoutAmount: z.ZodOptional<z.ZodNumber>;
144
+ payoutHoldDays: z.ZodOptional<z.ZodNumber>;
145
+ codHandlingFee: z.ZodOptional<z.ZodNumber>;
146
+ codDepositPercent: z.ZodOptional<z.ZodNumber>;
147
+ }, z.ZodTypeAny, "passthrough">, z.objectInputType<{
148
+ platformFeePercent: z.ZodOptional<z.ZodNumber>;
149
+ gatewayFeePercent: z.ZodOptional<z.ZodNumber>;
150
+ platformFeeMax: z.ZodOptional<z.ZodNumber>;
151
+ minPayoutAmount: z.ZodOptional<z.ZodNumber>;
152
+ payoutHoldDays: z.ZodOptional<z.ZodNumber>;
153
+ codHandlingFee: z.ZodOptional<z.ZodNumber>;
154
+ codDepositPercent: z.ZodOptional<z.ZodNumber>;
155
+ }, z.ZodTypeAny, "passthrough">>>;
156
+ laborRate: z.ZodOptional<z.ZodObject<{
157
+ hourlyRate: z.ZodOptional<z.ZodNumber>;
158
+ }, "passthrough", z.ZodTypeAny, z.objectOutputType<{
159
+ hourlyRate: z.ZodOptional<z.ZodNumber>;
160
+ }, z.ZodTypeAny, "passthrough">, z.objectInputType<{
161
+ hourlyRate: z.ZodOptional<z.ZodNumber>;
162
+ }, z.ZodTypeAny, "passthrough">>>;
163
+ emi: z.ZodOptional<z.ZodObject<{
164
+ surchargePercent: z.ZodOptional<z.ZodNumber>;
165
+ surchargeSellerSharePercent: z.ZodOptional<z.ZodNumber>;
166
+ minOrderAmount: z.ZodOptional<z.ZodNumber>;
167
+ }, "passthrough", z.ZodTypeAny, z.objectOutputType<{
168
+ surchargePercent: z.ZodOptional<z.ZodNumber>;
169
+ surchargeSellerSharePercent: z.ZodOptional<z.ZodNumber>;
170
+ minOrderAmount: z.ZodOptional<z.ZodNumber>;
171
+ }, z.ZodTypeAny, "passthrough">, z.objectInputType<{
172
+ surchargePercent: z.ZodOptional<z.ZodNumber>;
173
+ surchargeSellerSharePercent: z.ZodOptional<z.ZodNumber>;
174
+ minOrderAmount: z.ZodOptional<z.ZodNumber>;
175
+ }, z.ZodTypeAny, "passthrough">>>;
176
+ gst: z.ZodOptional<z.ZodObject<{
177
+ gstin: z.ZodUnion<[z.ZodOptional<z.ZodString>, z.ZodLiteral<"">]>;
178
+ ratePercent: z.ZodOptional<z.ZodNumber>;
179
+ }, "passthrough", z.ZodTypeAny, z.objectOutputType<{
180
+ gstin: z.ZodUnion<[z.ZodOptional<z.ZodString>, z.ZodLiteral<"">]>;
181
+ ratePercent: z.ZodOptional<z.ZodNumber>;
182
+ }, z.ZodTypeAny, "passthrough">, z.objectInputType<{
183
+ gstin: z.ZodUnion<[z.ZodOptional<z.ZodString>, z.ZodLiteral<"">]>;
184
+ ratePercent: z.ZodOptional<z.ZodNumber>;
185
+ }, z.ZodTypeAny, "passthrough">>>;
186
+ auctionConfig: z.ZodOptional<z.ZodObject<{
187
+ minBidIncrement: z.ZodOptional<z.ZodNumber>;
188
+ extensionMinutes: z.ZodOptional<z.ZodNumber>;
189
+ }, "passthrough", z.ZodTypeAny, z.objectOutputType<{
190
+ minBidIncrement: z.ZodOptional<z.ZodNumber>;
191
+ extensionMinutes: z.ZodOptional<z.ZodNumber>;
192
+ }, z.ZodTypeAny, "passthrough">, z.objectInputType<{
193
+ minBidIncrement: z.ZodOptional<z.ZodNumber>;
194
+ extensionMinutes: z.ZodOptional<z.ZodNumber>;
195
+ }, z.ZodTypeAny, "passthrough">>>;
196
+ seo: z.ZodOptional<z.ZodObject<{
197
+ title: z.ZodOptional<z.ZodString>;
198
+ description: z.ZodOptional<z.ZodString>;
199
+ }, "passthrough", z.ZodTypeAny, z.objectOutputType<{
200
+ title: z.ZodOptional<z.ZodString>;
201
+ description: z.ZodOptional<z.ZodString>;
202
+ }, z.ZodTypeAny, "passthrough">, z.objectInputType<{
203
+ title: z.ZodOptional<z.ZodString>;
204
+ description: z.ZodOptional<z.ZodString>;
205
+ }, z.ZodTypeAny, "passthrough">>>;
206
+ }, z.ZodTypeAny, "passthrough">, z.objectInputType<{
207
+ announcementBar: z.ZodOptional<z.ZodObject<{
208
+ message: z.ZodOptional<z.ZodString>;
209
+ enabled: z.ZodOptional<z.ZodBoolean>;
210
+ link: z.ZodUnion<[z.ZodOptional<z.ZodString>, z.ZodLiteral<"">]>;
211
+ }, "passthrough", z.ZodTypeAny, z.objectOutputType<{
212
+ message: z.ZodOptional<z.ZodString>;
213
+ enabled: z.ZodOptional<z.ZodBoolean>;
214
+ link: z.ZodUnion<[z.ZodOptional<z.ZodString>, z.ZodLiteral<"">]>;
215
+ }, z.ZodTypeAny, "passthrough">, z.objectInputType<{
216
+ message: z.ZodOptional<z.ZodString>;
217
+ enabled: z.ZodOptional<z.ZodBoolean>;
218
+ link: z.ZodUnion<[z.ZodOptional<z.ZodString>, z.ZodLiteral<"">]>;
219
+ }, z.ZodTypeAny, "passthrough">>>;
220
+ contact: z.ZodOptional<z.ZodObject<{
221
+ email: z.ZodUnion<[z.ZodOptional<z.ZodString>, z.ZodLiteral<"">]>;
222
+ supportEmail: z.ZodUnion<[z.ZodOptional<z.ZodString>, z.ZodLiteral<"">]>;
223
+ phone: z.ZodOptional<z.ZodString>;
224
+ }, "passthrough", z.ZodTypeAny, z.objectOutputType<{
225
+ email: z.ZodUnion<[z.ZodOptional<z.ZodString>, z.ZodLiteral<"">]>;
226
+ supportEmail: z.ZodUnion<[z.ZodOptional<z.ZodString>, z.ZodLiteral<"">]>;
227
+ phone: z.ZodOptional<z.ZodString>;
228
+ }, z.ZodTypeAny, "passthrough">, z.objectInputType<{
229
+ email: z.ZodUnion<[z.ZodOptional<z.ZodString>, z.ZodLiteral<"">]>;
230
+ supportEmail: z.ZodUnion<[z.ZodOptional<z.ZodString>, z.ZodLiteral<"">]>;
231
+ phone: z.ZodOptional<z.ZodString>;
232
+ }, z.ZodTypeAny, "passthrough">>>;
233
+ commissions: z.ZodOptional<z.ZodObject<{
234
+ platformFeePercent: z.ZodOptional<z.ZodNumber>;
235
+ gatewayFeePercent: z.ZodOptional<z.ZodNumber>;
236
+ platformFeeMax: z.ZodOptional<z.ZodNumber>;
237
+ minPayoutAmount: z.ZodOptional<z.ZodNumber>;
238
+ payoutHoldDays: z.ZodOptional<z.ZodNumber>;
239
+ codHandlingFee: z.ZodOptional<z.ZodNumber>;
240
+ codDepositPercent: z.ZodOptional<z.ZodNumber>;
241
+ }, "passthrough", z.ZodTypeAny, z.objectOutputType<{
242
+ platformFeePercent: z.ZodOptional<z.ZodNumber>;
243
+ gatewayFeePercent: z.ZodOptional<z.ZodNumber>;
244
+ platformFeeMax: z.ZodOptional<z.ZodNumber>;
245
+ minPayoutAmount: z.ZodOptional<z.ZodNumber>;
246
+ payoutHoldDays: z.ZodOptional<z.ZodNumber>;
247
+ codHandlingFee: z.ZodOptional<z.ZodNumber>;
248
+ codDepositPercent: z.ZodOptional<z.ZodNumber>;
249
+ }, z.ZodTypeAny, "passthrough">, z.objectInputType<{
250
+ platformFeePercent: z.ZodOptional<z.ZodNumber>;
251
+ gatewayFeePercent: z.ZodOptional<z.ZodNumber>;
252
+ platformFeeMax: z.ZodOptional<z.ZodNumber>;
253
+ minPayoutAmount: z.ZodOptional<z.ZodNumber>;
254
+ payoutHoldDays: z.ZodOptional<z.ZodNumber>;
255
+ codHandlingFee: z.ZodOptional<z.ZodNumber>;
256
+ codDepositPercent: z.ZodOptional<z.ZodNumber>;
257
+ }, z.ZodTypeAny, "passthrough">>>;
258
+ laborRate: z.ZodOptional<z.ZodObject<{
259
+ hourlyRate: z.ZodOptional<z.ZodNumber>;
260
+ }, "passthrough", z.ZodTypeAny, z.objectOutputType<{
261
+ hourlyRate: z.ZodOptional<z.ZodNumber>;
262
+ }, z.ZodTypeAny, "passthrough">, z.objectInputType<{
263
+ hourlyRate: z.ZodOptional<z.ZodNumber>;
264
+ }, z.ZodTypeAny, "passthrough">>>;
265
+ emi: z.ZodOptional<z.ZodObject<{
266
+ surchargePercent: z.ZodOptional<z.ZodNumber>;
267
+ surchargeSellerSharePercent: z.ZodOptional<z.ZodNumber>;
268
+ minOrderAmount: z.ZodOptional<z.ZodNumber>;
269
+ }, "passthrough", z.ZodTypeAny, z.objectOutputType<{
270
+ surchargePercent: z.ZodOptional<z.ZodNumber>;
271
+ surchargeSellerSharePercent: z.ZodOptional<z.ZodNumber>;
272
+ minOrderAmount: z.ZodOptional<z.ZodNumber>;
273
+ }, z.ZodTypeAny, "passthrough">, z.objectInputType<{
274
+ surchargePercent: z.ZodOptional<z.ZodNumber>;
275
+ surchargeSellerSharePercent: z.ZodOptional<z.ZodNumber>;
276
+ minOrderAmount: z.ZodOptional<z.ZodNumber>;
277
+ }, z.ZodTypeAny, "passthrough">>>;
278
+ gst: z.ZodOptional<z.ZodObject<{
279
+ gstin: z.ZodUnion<[z.ZodOptional<z.ZodString>, z.ZodLiteral<"">]>;
280
+ ratePercent: z.ZodOptional<z.ZodNumber>;
281
+ }, "passthrough", z.ZodTypeAny, z.objectOutputType<{
282
+ gstin: z.ZodUnion<[z.ZodOptional<z.ZodString>, z.ZodLiteral<"">]>;
283
+ ratePercent: z.ZodOptional<z.ZodNumber>;
284
+ }, z.ZodTypeAny, "passthrough">, z.objectInputType<{
285
+ gstin: z.ZodUnion<[z.ZodOptional<z.ZodString>, z.ZodLiteral<"">]>;
286
+ ratePercent: z.ZodOptional<z.ZodNumber>;
287
+ }, z.ZodTypeAny, "passthrough">>>;
288
+ auctionConfig: z.ZodOptional<z.ZodObject<{
289
+ minBidIncrement: z.ZodOptional<z.ZodNumber>;
290
+ extensionMinutes: z.ZodOptional<z.ZodNumber>;
291
+ }, "passthrough", z.ZodTypeAny, z.objectOutputType<{
292
+ minBidIncrement: z.ZodOptional<z.ZodNumber>;
293
+ extensionMinutes: z.ZodOptional<z.ZodNumber>;
294
+ }, z.ZodTypeAny, "passthrough">, z.objectInputType<{
295
+ minBidIncrement: z.ZodOptional<z.ZodNumber>;
296
+ extensionMinutes: z.ZodOptional<z.ZodNumber>;
297
+ }, z.ZodTypeAny, "passthrough">>>;
298
+ seo: z.ZodOptional<z.ZodObject<{
299
+ title: z.ZodOptional<z.ZodString>;
300
+ description: z.ZodOptional<z.ZodString>;
301
+ }, "passthrough", z.ZodTypeAny, z.objectOutputType<{
302
+ title: z.ZodOptional<z.ZodString>;
303
+ description: z.ZodOptional<z.ZodString>;
304
+ }, z.ZodTypeAny, "passthrough">, z.objectInputType<{
305
+ title: z.ZodOptional<z.ZodString>;
306
+ description: z.ZodOptional<z.ZodString>;
307
+ }, z.ZodTypeAny, "passthrough">>>;
308
+ }, z.ZodTypeAny, "passthrough">>;
309
+ export type SiteSettingsFormValues = z.infer<typeof siteSettingsFormSchema>;