import { z } from "zod";
import { isValidPhoneNumber } from "@open-mercato/shared/lib/phone";
import { COORDINATE_RANGES } from "@open-mercato/shared/lib/location/coordinates";
import { dictionaryEntrySortModeSchema } from "@open-mercato/core/modules/dictionaries/lib/entrySort";
const uuid = () => z.string().uuid();
const CUSTOMER_PHONE_INVALID_MESSAGE_KEY = "customers.people.form.primaryPhone.invalid";
const ACTIVITY_DATE_REQUIRED_MESSAGE_KEY = "customers.activities.errors.dateRequired";
const ACTIVITY_TIME_REQUIRED_MESSAGE_KEY = "customers.activities.errors.timeRequired";
const ACTIVITY_PHONE_REQUIRED_MESSAGE_KEY = "customers.activities.errors.phoneRequired";
const ACTIVITY_PHONE_INVALID_MESSAGE_KEY = "customers.activities.errors.phoneInvalid";
const emptyStringToNull = (value) => {
  if (typeof value !== "string") return value;
  const trimmed = value.trim();
  return trimmed.length ? trimmed : null;
};
const phoneSchema = z.preprocess(
  emptyStringToNull,
  z.string().trim().max(50).refine((val) => isValidPhoneNumber(val), { message: CUSTOMER_PHONE_INVALID_MESSAGE_KEY }).nullable().optional()
);
const clearableEmailSchema = z.preprocess(
  emptyStringToNull,
  z.string().email().max(320).nullable().optional()
);
const clearableUrlSchema = z.preprocess(
  emptyStringToNull,
  z.string().url().max(300).nullable().optional()
);
const clearableDomainSchema = z.preprocess(
  emptyStringToNull,
  z.string().trim().max(200).nullable().optional()
);
const clearableStringSchema = (max) => z.preprocess(emptyStringToNull, z.string().trim().max(max).nullable().optional());
const clearableRevenueSchema = z.preprocess(
  (value) => {
    if (typeof value === "string" && value.trim().length === 0) return null;
    return value;
  },
  z.coerce.number().min(0).nullable().optional()
);
const interactionPhoneNumberSchema = z.string().trim().max(50).optional().nullable();
const scopedSchema = z.object({
  organizationId: uuid(),
  tenantId: uuid()
});
const nextInteractionSchema = z.object({
  at: z.coerce.date(),
  name: z.string().trim().min(1).max(200),
  refId: z.string().trim().max(191).optional().nullable(),
  icon: z.string().trim().max(100).optional().nullable(),
  color: z.string().trim().regex(/^#([0-9a-fA-F]{6})$/).optional().nullable()
}).strict();
const displayNameSchema = z.string().trim().min(1).max(200);
const baseEntitySchema = {
  displayName: displayNameSchema,
  // Nullable so a blanked description on edit clears the column instead of being dropped. See #3050.
  description: clearableStringSchema(4e3),
  ownerUserId: uuid().optional(),
  primaryEmail: clearableEmailSchema,
  primaryPhone: phoneSchema,
  status: z.string().trim().max(100).optional(),
  lifecycleStage: z.string().trim().max(100).optional(),
  source: z.string().trim().max(150).optional(),
  temperature: z.string().trim().max(100).optional(),
  renewalQuarter: z.string().trim().max(100).optional(),
  isActive: z.boolean().optional(),
  nextInteraction: nextInteractionSchema.nullable().optional(),
  tags: z.array(uuid()).optional()
};
const personDetailsSchema = {
  preferredName: z.string().trim().max(120).optional(),
  jobTitle: z.string().trim().max(150).optional(),
  department: z.string().trim().max(150).optional(),
  seniority: z.string().trim().max(100).optional(),
  timezone: z.string().trim().max(120).optional(),
  linkedInUrl: clearableUrlSchema,
  twitterUrl: clearableUrlSchema,
  companyEntityId: uuid().nullable().optional()
};
const personFirstNameSchema = z.string().trim().min(1).max(120);
const personLastNameSchema = z.string().trim().min(1).max(120);
const companyDetailsSchema = {
  // Nullable so blanked values on edit clear the columns instead of being dropped. See #3050.
  legalName: clearableStringSchema(200),
  brandName: clearableStringSchema(200),
  domain: clearableDomainSchema,
  websiteUrl: clearableUrlSchema,
  industry: z.string().trim().max(150).optional(),
  sizeBucket: clearableStringSchema(100),
  annualRevenue: clearableRevenueSchema
};
const personCreateSchema = scopedSchema.extend({
  ...baseEntitySchema,
  displayName: displayNameSchema.optional(),
  firstName: personFirstNameSchema,
  lastName: personLastNameSchema,
  ...personDetailsSchema
});
const personUpdateSchema = z.object({
  id: uuid()
}).merge(
  scopedSchema.extend({
    ...baseEntitySchema,
    ...personDetailsSchema,
    firstName: personFirstNameSchema.optional(),
    lastName: personLastNameSchema.optional()
  }).partial()
);
const companyCreateSchema = scopedSchema.extend({
  ...baseEntitySchema,
  displayName: displayNameSchema,
  ...companyDetailsSchema
});
const companyUpdateSchema = z.object({
  id: uuid()
}).merge(companyCreateSchema.partial());
const dealCreateSchema = scopedSchema.extend({
  title: z.string().min(1).max(200),
  description: z.string().max(4e3).optional(),
  status: z.string().max(50).optional(),
  pipelineStage: z.string().max(100).optional(),
  pipelineId: uuid().optional(),
  pipelineStageId: uuid().optional(),
  valueAmount: z.coerce.number().min(0).optional(),
  valueCurrency: z.string().min(3).max(3).optional(),
  probability: z.number().min(0).max(100).optional(),
  expectedCloseAt: z.coerce.date().optional(),
  // Nullable: the bulk owner-update worker passes `null` to clear ownership.
  // Without `.nullable()`, dealUpdateSchema.parse({ ownerUserId: null }) throws
  // ZodError "expected string, received null" inside the queue worker (TC-CRM-069).
  ownerUserId: uuid().optional().nullable(),
  source: z.string().max(150).optional(),
  closureOutcome: z.enum(["won", "lost"]).optional(),
  lossReasonId: uuid().optional(),
  lossNotes: z.string().max(4e3).optional(),
  companyIds: z.array(uuid()).optional(),
  personIds: z.array(uuid()).optional()
});
const dealUpdateSchema = z.object({
  id: uuid()
}).merge(dealCreateSchema.partial());
const dealsBulkUpdateOwnerSchema = z.object({
  ids: z.array(uuid()).min(1).max(1e4),
  ownerUserId: uuid().nullable()
});
const dealsBulkUpdateStageSchema = z.object({
  ids: z.array(uuid()).min(1).max(1e4),
  pipelineStageId: uuid()
});
const dealsBulkUpdateResponseSchema = z.object({
  ok: z.boolean(),
  progressJobId: uuid().nullable(),
  message: z.string()
});
const activityCreateSchema = scopedSchema.extend({
  entityId: uuid(),
  activityType: z.string().min(1).max(100),
  subject: z.string().max(200).optional(),
  body: z.string().max(8e3).optional(),
  date: z.string().trim().min(1, ACTIVITY_DATE_REQUIRED_MESSAGE_KEY).optional(),
  time: z.string().trim().min(1, ACTIVITY_TIME_REQUIRED_MESSAGE_KEY).optional(),
  phoneNumber: interactionPhoneNumberSchema,
  occurredAt: z.coerce.date().optional(),
  dealId: uuid().optional(),
  authorUserId: uuid().optional(),
  appearanceIcon: z.string().trim().max(100).optional().nullable(),
  appearanceColor: z.string().trim().regex(/^#([0-9a-fA-F]{6})$/).optional().nullable()
});
const activityUpdateSchema = z.object({
  id: uuid()
}).merge(activityCreateSchema.partial());
const commentCreateSchema = scopedSchema.extend({
  entityId: uuid(),
  dealId: uuid().optional(),
  body: z.string().min(1).max(8e3),
  authorUserId: uuid().optional(),
  appearanceIcon: z.string().trim().max(100).optional().nullable(),
  appearanceColor: z.string().trim().regex(/^#([0-9a-fA-F]{6})$/).optional().nullable()
});
const commentUpdateSchema = z.object({
  id: uuid()
}).merge(commentCreateSchema.partial());
const addressCreateSchema = scopedSchema.extend({
  entityId: uuid(),
  name: z.string().max(150).optional(),
  purpose: z.string().max(150).optional(),
  companyName: z.string().max(200).optional(),
  addressLine1: z.string().min(1).max(300),
  addressLine2: z.string().max(300).optional(),
  buildingNumber: z.string().max(50).optional(),
  flatNumber: z.string().max(50).optional(),
  city: z.string().max(150).optional(),
  region: z.string().max(150).optional(),
  postalCode: z.string().max(30).optional(),
  country: z.string().max(150).optional(),
  latitude: z.coerce.number().min(COORDINATE_RANGES.latitude.min).max(COORDINATE_RANGES.latitude.max).nullable().optional(),
  longitude: z.coerce.number().min(COORDINATE_RANGES.longitude.min).max(COORDINATE_RANGES.longitude.max).nullable().optional(),
  isPrimary: z.boolean().optional()
});
const addressUpdateSchema = z.object({
  id: uuid()
}).merge(addressCreateSchema.partial());
const tagCreateSchema = scopedSchema.extend({
  slug: z.string().min(1).max(80).regex(/^[a-z0-9_-]+$/, "Slug must be lowercase and may contain dashes or underscores"),
  label: z.string().min(1).max(120),
  color: z.string().max(30).optional(),
  description: z.string().max(400).optional()
});
const tagUpdateSchema = z.object({
  id: uuid()
}).merge(tagCreateSchema.partial());
const KNOWN_DICTIONARY_KINDS = [
  "status",
  "source",
  "lifecycle_stage",
  "address_type",
  "activity_type",
  "deal_status",
  "pipeline_stage",
  "job_title",
  "industry",
  "temperature",
  "renewal_quarter",
  "person_company_role"
];
const CUSTOM_DICTIONARY_KIND_PATTERN = /^[a-z0-9]+(?:[-_][a-z0-9]+)*$/;
const dictionaryKindEnum = z.string().trim().refine(
  (value) => KNOWN_DICTIONARY_KINDS.includes(value) || CUSTOM_DICTIONARY_KIND_PATTERN.test(value),
  { message: "Unsupported dictionary kind" }
);
const dictionaryValueSchema = z.string().trim().min(1).max(150);
const dictionaryLabelSchema = z.string().trim().max(150);
const DICTIONARY_COLOR_TONES = ["success", "warning", "info", "error", "neutral", "brand", "pink"];
const dictionaryColorSchema = z.string().trim().regex(
  new RegExp(`^(#[0-9a-fA-F]{6}|${DICTIONARY_COLOR_TONES.join("|")})$`),
  "Color must be a six-digit hex code (e.g. #3366ff) or a semantic tone identifier"
);
const dictionaryIconSchema = z.string().trim().max(48);
const customerDictionaryEntryCreateSchema = scopedSchema.extend({
  kind: dictionaryKindEnum,
  value: dictionaryValueSchema,
  label: dictionaryLabelSchema.optional(),
  color: dictionaryColorSchema.nullable().optional(),
  icon: dictionaryIconSchema.nullable().optional()
});
const customerDictionaryEntryUpdateSchema = scopedSchema.extend({
  id: uuid(),
  kind: dictionaryKindEnum,
  value: dictionaryValueSchema.optional(),
  label: dictionaryLabelSchema.optional(),
  color: dictionaryColorSchema.nullable().optional(),
  icon: dictionaryIconSchema.nullable().optional()
}).refine(
  (payload) => payload.value !== void 0 || payload.label !== void 0 || payload.color !== void 0 || payload.icon !== void 0,
  {
    message: "Provide at least one field to update.",
    path: ["value"]
  }
);
const customerDictionaryEntryDeleteSchema = scopedSchema.extend({
  id: uuid(),
  kind: dictionaryKindEnum
});
const tagAssignmentSchema = scopedSchema.extend({
  tagId: uuid(),
  entityId: uuid()
});
const todoLinkCreateSchema = scopedSchema.extend({
  entityId: uuid(),
  todoId: uuid(),
  todoSource: z.string().min(1).max(120).default("customers:interaction"),
  createdByUserId: uuid().optional()
});
const todoLinkWithTodoCreateSchema = scopedSchema.extend({
  entityId: uuid(),
  title: z.string().min(1).max(200),
  isDone: z.boolean().optional(),
  is_done: z.boolean().optional(),
  todoSource: z.string().min(1).max(120).default("customers:interaction"),
  createdByUserId: uuid().optional(),
  todoCustom: z.record(z.string(), z.any()).optional(),
  custom: z.record(z.string(), z.any()).optional()
});
const interactionStatusValues = ["planned", "done", "canceled"];
const interactionParticipantSchema = z.object({
  userId: z.string().uuid(),
  name: z.string().trim().max(200).optional(),
  email: z.string().trim().max(320).optional(),
  status: z.string().trim().max(50).optional()
});
const interactionLinkedEntitySchema = z.object({
  id: z.string().uuid(),
  // 'resource' links calendar events to bookable resources (rooms, cars,
  // equipment) from the optional resources module (#3552).
  type: z.enum(["company", "deal", "offer", "resource"]),
  label: z.string().trim().max(500)
});
const interactionGuestPermissionsSchema = z.object({
  canInviteOthers: z.boolean().optional(),
  canModify: z.boolean().optional(),
  canSeeList: z.boolean().optional()
}).strict();
const interactionExtendedFields = {
  durationMinutes: z.number().int().min(0).optional().nullable(),
  location: z.string().trim().max(500).optional().nullable(),
  allDay: z.boolean().optional().nullable(),
  recurrenceRule: z.string().trim().max(500).optional().nullable(),
  recurrenceEnd: z.coerce.date().optional().nullable(),
  participants: z.array(interactionParticipantSchema).optional().nullable(),
  reminderMinutes: z.number().int().min(0).optional().nullable(),
  visibility: z.string().trim().max(50).optional().nullable(),
  linkedEntities: z.array(interactionLinkedEntitySchema).optional().nullable(),
  guestPermissions: interactionGuestPermissionsSchema.optional().nullable()
};
const interactionCreateBaseSchema = scopedSchema.extend({
  id: z.string().uuid().optional(),
  entityId: z.string().uuid(),
  interactionType: z.string().trim().min(1).max(100),
  title: z.string().trim().max(500).optional().nullable(),
  body: z.string().trim().max(1e4).optional().nullable(),
  // Lenient like `deal_status` (status: z.string().max(50)). The `interaction-statuses`
  // dictionary drives the UI dropdown; the API accepts any string <=50 chars so existing
  // rows, external writers, and the dispatch-crm MCP keep working. Open/terminal semantics
  // live in lib/interactionStatus.ts, not in this validator.
  status: z.string().max(50).optional().default("planned"),
  date: z.string().trim().min(1, ACTIVITY_DATE_REQUIRED_MESSAGE_KEY).optional(),
  time: z.string().trim().min(1, ACTIVITY_TIME_REQUIRED_MESSAGE_KEY).optional(),
  phoneNumber: interactionPhoneNumberSchema,
  scheduledAt: z.coerce.date().optional().nullable(),
  occurredAt: z.coerce.date().optional().nullable(),
  priority: z.number().int().min(0).max(100).optional().nullable(),
  authorUserId: z.string().uuid().optional().nullable(),
  ownerUserId: z.string().uuid().optional().nullable(),
  dealId: z.string().uuid().optional().nullable(),
  appearanceIcon: z.string().trim().max(100).optional().nullable(),
  appearanceColor: z.string().trim().regex(/^#([0-9a-fA-F]{6})$/).optional().nullable(),
  source: z.string().trim().max(100).optional().nullable(),
  ...interactionExtendedFields
});
function deriveScheduledAtFromDateTime(date, time) {
  if (!date || typeof date !== "string") return null;
  const trimmedDate = date.trim();
  if (!trimmedDate) return null;
  const trimmedTime = typeof time === "string" ? time.trim() : "";
  const iso = trimmedTime ? `${trimmedDate}T${trimmedTime}:00` : `${trimmedDate}T00:00:00`;
  const parsed = new Date(iso);
  return Number.isNaN(parsed.getTime()) ? null : parsed;
}
const interactionCreateSchema = interactionCreateBaseSchema.superRefine((value, ctx) => {
  if (value.interactionType === "call" && value.phoneNumber !== void 0 && value.phoneNumber !== null) {
    const phone = typeof value.phoneNumber === "string" ? value.phoneNumber.trim() : "";
    if (!phone) {
      ctx.addIssue({
        code: z.ZodIssueCode.custom,
        path: ["phoneNumber"],
        message: ACTIVITY_PHONE_REQUIRED_MESSAGE_KEY
      });
    } else if (!isValidPhoneNumber(phone)) {
      ctx.addIssue({
        code: z.ZodIssueCode.custom,
        path: ["phoneNumber"],
        message: ACTIVITY_PHONE_INVALID_MESSAGE_KEY
      });
    }
  }
}).transform((value) => {
  if (value.scheduledAt) return value;
  const derived = deriveScheduledAtFromDateTime(value.date, value.time);
  return derived ? { ...value, scheduledAt: derived } : value;
});
const interactionUpdateBaseSchema = z.object({
  id: z.string().uuid()
}).merge(
  scopedSchema.extend({
    interactionType: z.string().trim().min(1).max(100).optional(),
    title: z.string().trim().max(500).optional().nullable(),
    body: z.string().trim().max(1e4).optional().nullable(),
    status: z.string().max(50).optional(),
    date: z.string().trim().min(1, ACTIVITY_DATE_REQUIRED_MESSAGE_KEY).optional(),
    time: z.string().trim().min(1, ACTIVITY_TIME_REQUIRED_MESSAGE_KEY).optional(),
    phoneNumber: interactionPhoneNumberSchema,
    scheduledAt: z.coerce.date().optional().nullable(),
    occurredAt: z.coerce.date().optional().nullable(),
    priority: z.number().int().min(0).max(100).optional().nullable(),
    authorUserId: z.string().uuid().optional().nullable(),
    ownerUserId: z.string().uuid().optional().nullable(),
    dealId: z.string().uuid().optional().nullable(),
    appearanceIcon: z.string().trim().max(100).optional().nullable(),
    appearanceColor: z.string().trim().regex(/^#([0-9a-fA-F]{6})$/).optional().nullable(),
    pinned: z.boolean().optional(),
    ...interactionExtendedFields
  }).partial()
);
const interactionUpdateSchema = interactionUpdateBaseSchema.superRefine((value, ctx) => {
  if (value.interactionType === "call" && value.phoneNumber !== void 0) {
    const phone = typeof value.phoneNumber === "string" ? value.phoneNumber.trim() : "";
    if (!phone) {
      ctx.addIssue({
        code: z.ZodIssueCode.custom,
        path: ["phoneNumber"],
        message: ACTIVITY_PHONE_REQUIRED_MESSAGE_KEY
      });
    } else if (!isValidPhoneNumber(phone)) {
      ctx.addIssue({
        code: z.ZodIssueCode.custom,
        path: ["phoneNumber"],
        message: ACTIVITY_PHONE_INVALID_MESSAGE_KEY
      });
    }
  }
}).transform((value) => {
  if (value.scheduledAt !== void 0) return value;
  if (!value.date && !value.time) return value;
  const derived = deriveScheduledAtFromDateTime(value.date, value.time);
  return derived ? { ...value, scheduledAt: derived } : value;
});
const interactionCompleteSchema = z.object({
  id: z.string().uuid(),
  occurredAt: z.coerce.date().optional()
});
const interactionCancelSchema = z.object({
  id: z.string().uuid()
});
const customerAddressFormatSchema = z.enum(["line_first", "street_first"]);
const customerSettingsUpsertSchema = scopedSchema.extend({
  addressFormat: customerAddressFormatSchema
});
const customerStuckThresholdUpsertSchema = scopedSchema.extend({
  stuckThresholdDays: z.number().int().min(1).max(365)
});
const customerDictionarySortModesSchema = z.record(z.string(), dictionaryEntrySortModeSchema);
const customerDictionarySortModesUpsertSchema = scopedSchema.extend({
  dictionarySortModes: customerDictionarySortModesSchema
});
const pipelineCreateSchema = scopedSchema.extend({
  name: z.string().trim().min(1).max(200),
  isDefault: z.boolean().optional()
});
const pipelineUpdateSchema = z.object({
  id: uuid(),
  name: z.string().trim().min(1).max(200).optional(),
  isDefault: z.boolean().optional()
});
const pipelineDeleteSchema = z.object({
  id: uuid()
});
const pipelineStageCreateSchema = scopedSchema.extend({
  pipelineId: uuid(),
  label: z.string().trim().min(1).max(200),
  order: z.number().int().min(0).optional(),
  color: z.string().trim().max(20).nullish(),
  icon: z.string().trim().max(100).nullish()
});
const pipelineStageUpdateSchema = z.object({
  id: uuid(),
  label: z.string().trim().min(1).max(200).optional(),
  order: z.number().int().min(0).optional(),
  color: z.string().trim().max(20).nullish(),
  icon: z.string().trim().max(100).nullish()
});
const pipelineStageDeleteSchema = z.object({
  id: uuid()
});
const pipelineStageReorderSchema = scopedSchema.extend({
  stages: z.array(z.object({
    id: uuid(),
    order: z.number().int().min(0)
  })).min(1)
});
const entityRoleCreateSchema = scopedSchema.extend({
  entityType: z.enum(["company", "person"]),
  entityId: uuid(),
  roleType: z.string().trim().min(1).max(100),
  userId: uuid()
});
const entityRoleUpdateSchema = scopedSchema.extend({
  id: uuid(),
  userId: uuid()
});
const entityRoleDeleteSchema = scopedSchema.extend({
  id: uuid()
});
const updateKindSettingSchema = z.object({
  kind: z.string().trim().min(1).max(100),
  selectionMode: z.enum(["single", "multi"]).optional(),
  visibleInTags: z.boolean().optional(),
  sortOrder: z.number().int().min(0).optional()
});
const customerKindSettingsUpsertSchema = scopedSchema.extend({
  kind: z.string().trim().min(1).max(100),
  selectionMode: z.enum(["single", "multi"]).optional(),
  visibleInTags: z.boolean().optional(),
  sortOrder: z.number().int().min(0).optional()
});
const labelCreateSchema = z.object({
  label: z.string().trim().min(1).max(120),
  slug: z.string().trim().min(1).max(80).regex(/^[a-z0-9_-]+$/).optional()
});
const labelCreateCommandSchema = scopedSchema.extend({
  label: z.string().trim().min(1).max(120),
  slug: z.string().trim().min(1).max(80).regex(/^[a-z0-9_-]+$/),
  userId: uuid()
});
const labelAssignmentSchema = z.object({
  labelId: z.string().uuid(),
  entityId: z.string().uuid()
});
const labelAssignCommandSchema = scopedSchema.extend({
  labelId: uuid(),
  entityId: uuid()
});
const labelUnassignCommandSchema = scopedSchema.extend({
  labelId: uuid(),
  entityId: uuid()
});
const personCompanyLinkCreateSchema = scopedSchema.extend({
  personEntityId: uuid(),
  companyEntityId: uuid(),
  isPrimary: z.boolean().optional()
});
const personCompanyLinkUpdateSchema = scopedSchema.extend({
  linkId: uuid(),
  isPrimary: z.boolean()
});
const personCompanyLinkDeleteSchema = scopedSchema.extend({
  linkId: uuid()
});
export {
  ACTIVITY_DATE_REQUIRED_MESSAGE_KEY,
  ACTIVITY_PHONE_INVALID_MESSAGE_KEY,
  ACTIVITY_PHONE_REQUIRED_MESSAGE_KEY,
  ACTIVITY_TIME_REQUIRED_MESSAGE_KEY,
  CUSTOMER_PHONE_INVALID_MESSAGE_KEY,
  activityCreateSchema,
  activityUpdateSchema,
  addressCreateSchema,
  addressUpdateSchema,
  commentCreateSchema,
  commentUpdateSchema,
  companyCreateSchema,
  companyUpdateSchema,
  customerAddressFormatSchema,
  customerDictionaryEntryCreateSchema,
  customerDictionaryEntryDeleteSchema,
  customerDictionaryEntryUpdateSchema,
  customerDictionarySortModesSchema,
  customerDictionarySortModesUpsertSchema,
  customerKindSettingsUpsertSchema,
  customerSettingsUpsertSchema,
  customerStuckThresholdUpsertSchema,
  dealCreateSchema,
  dealUpdateSchema,
  dealsBulkUpdateOwnerSchema,
  dealsBulkUpdateResponseSchema,
  dealsBulkUpdateStageSchema,
  entityRoleCreateSchema,
  entityRoleDeleteSchema,
  entityRoleUpdateSchema,
  interactionCancelSchema,
  interactionCompleteSchema,
  interactionCreateSchema,
  interactionStatusValues,
  interactionUpdateSchema,
  labelAssignCommandSchema,
  labelAssignmentSchema,
  labelCreateCommandSchema,
  labelCreateSchema,
  labelUnassignCommandSchema,
  personCompanyLinkCreateSchema,
  personCompanyLinkDeleteSchema,
  personCompanyLinkUpdateSchema,
  personCreateSchema,
  personUpdateSchema,
  pipelineCreateSchema,
  pipelineDeleteSchema,
  pipelineStageCreateSchema,
  pipelineStageDeleteSchema,
  pipelineStageReorderSchema,
  pipelineStageUpdateSchema,
  pipelineUpdateSchema,
  tagAssignmentSchema,
  tagCreateSchema,
  tagUpdateSchema,
  todoLinkCreateSchema,
  todoLinkWithTodoCreateSchema,
  updateKindSettingSchema
};
//# sourceMappingURL=validators.js.map
