@rxdrag/website-lib-react 0.0.6 → 0.0.8

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 (78) hide show
  1. package/dist/ReactModalTrigger-9207e763.js.map +1 -1
  2. package/dist/components/ContactForm/ContactForm.d.ts +2 -1
  3. package/dist/components/Icon/index.d.ts +2 -1
  4. package/dist/forms.mjs +5 -3
  5. package/dist/forms.mjs.map +1 -1
  6. package/dist/ui.mjs.map +1 -1
  7. package/package.json +22 -23
  8. package/forms.ts +0 -1
  9. package/index.ts +0 -1
  10. package/media.ts +0 -1
  11. package/richtext.ts +0 -1
  12. package/src/components/Analytics/eventHandlers.ts +0 -173
  13. package/src/components/Analytics/index.tsx +0 -21
  14. package/src/components/Analytics/singleton.ts +0 -214
  15. package/src/components/Analytics/tracking.ts +0 -221
  16. package/src/components/Analytics/types.ts +0 -60
  17. package/src/components/Analytics/utils.ts +0 -95
  18. package/src/components/AttachmentIcon/index.tsx +0 -53
  19. package/src/components/BackgroundHlsVideoPlayer.tsx +0 -97
  20. package/src/components/BackgroundVideoPlayer.tsx +0 -32
  21. package/src/components/Bulletin.tsx +0 -30
  22. package/src/components/ContactForm/ContactForm.tsx +0 -290
  23. package/src/components/ContactForm/FileUpload2.tsx +0 -423
  24. package/src/components/ContactForm/Input.tsx +0 -48
  25. package/src/components/ContactForm/Input2.tsx +0 -59
  26. package/src/components/ContactForm/Submit.tsx +0 -48
  27. package/src/components/ContactForm/TelInput.tsx +0 -215
  28. package/src/components/ContactForm/TelInput2.tsx +0 -213
  29. package/src/components/ContactForm/Textarea.tsx +0 -48
  30. package/src/components/ContactForm/Textarea2.tsx +0 -89
  31. package/src/components/ContactForm/countryDialCodes.ts +0 -243
  32. package/src/components/ContactForm/factory.tsx +0 -60
  33. package/src/components/ContactForm/funcs.ts +0 -64
  34. package/src/components/ContactForm/hooks/useInlineLabelPadding.ts +0 -43
  35. package/src/components/ContactForm/hooks/useTelControl.ts +0 -81
  36. package/src/components/ContactForm/index.ts +0 -7
  37. package/src/components/ContactForm/types.ts +0 -68
  38. package/src/components/Icon/index.tsx +0 -20
  39. package/src/components/Medias/MainMedia.tsx +0 -257
  40. package/src/components/Medias/Thumbnail.tsx +0 -62
  41. package/src/components/Medias/VideoPlayer.tsx +0 -114
  42. package/src/components/Medias/index.tsx +0 -271
  43. package/src/components/ProductCard/ProductCard.tsx +0 -24
  44. package/src/components/ProductCard/ProductCta/index.tsx +0 -28
  45. package/src/components/ProductCard/ProductCta/style.css +0 -4
  46. package/src/components/ProductCard/ProductDescription/index.tsx +0 -13
  47. package/src/components/ProductCard/ProductDescription/style.css +0 -6
  48. package/src/components/ProductCard/ProductMedia/index.tsx +0 -35
  49. package/src/components/ProductCard/ProductMedia/style.css +0 -6
  50. package/src/components/ProductCard/ProductTitle/index.tsx +0 -7
  51. package/src/components/ProductCard/ProductTitle/style.css +0 -4
  52. package/src/components/ProductCard/ProductView.tsx +0 -36
  53. package/src/components/ProductCard/index.ts +0 -5
  54. package/src/components/ProductCard/useQueryProduct.ts +0 -32
  55. package/src/components/ReactModalTrigger.tsx +0 -28
  56. package/src/components/ReactVideoPlayer.tsx +0 -332
  57. package/src/components/RichTextOutline/index.tsx +0 -74
  58. package/src/components/RichTextOutline/parseOutline.ts +0 -63
  59. package/src/components/RichTextOutline/useAcitviedHeading.ts +0 -142
  60. package/src/components/RichTextOutline/useAnchorScroll.ts +0 -24
  61. package/src/components/Scroller.tsx +0 -39
  62. package/src/components/SearchInput.tsx +0 -21
  63. package/src/components/Share/index.tsx +0 -86
  64. package/src/components/Share/socials.tsx +0 -80
  65. package/src/components/Share//350/265/204/346/226/231.md +0 -7
  66. package/src/components/ToTop.tsx +0 -72
  67. package/src/components/VideoPlayIcon.tsx +0 -43
  68. package/src/components/all.ts +0 -25
  69. package/src/components/index.ts +0 -12
  70. package/src/forms.ts +0 -1
  71. package/src/index.ts +0 -1
  72. package/src/media.ts +0 -1
  73. package/src/richtext.ts +0 -1
  74. package/src/types/view-model.ts +0 -37
  75. package/src/ui.ts +0 -10
  76. package/src/video.ts +0 -2
  77. package/ui.ts +0 -1
  78. package/video.ts +0 -1
@@ -1 +1 @@
1
- {"version":3,"file":"forms.mjs","sources":["../src/components/ContactForm/Submit.tsx","../src/components/ContactForm/funcs.ts","../src/components/ContactForm/hooks/useInlineLabelPadding.ts","../src/components/ContactForm/FileUpload2.tsx","../src/components/ContactForm/Input.tsx","../src/components/ContactForm/Input2.tsx","../src/components/ContactForm/Textarea.tsx","../src/components/ContactForm/Textarea2.tsx","../src/components/ContactForm/countryDialCodes.ts","../src/components/ContactForm/hooks/useTelControl.ts","../src/components/ContactForm/TelInput.tsx","../src/components/ContactForm/TelInput2.tsx","../src/components/ContactForm/factory.tsx","../src/components/ContactForm/ContactForm.tsx"],"sourcesContent":["export type SubmitProps = {\n needClasses?: string;\n title: string;\n className?: string;\n rawHtml?: string;\n spinner?: React.ReactNode;\n submitting?: boolean;\n disabled?: boolean;\n onClick?: (e: React.MouseEvent) => void;\n};\n\nexport const Submit: React.FC<SubmitProps> = (props) => {\n const {\n title = \"Send Message\",\n className,\n spinner,\n submitting,\n disabled,\n onClick,\n rawHtml,\n needClasses,\n ...rest\n } = props;\n return (\n <>\n <button\n type=\"button\"\n className={className}\n disabled={disabled ?? submitting}\n onClick={onClick}\n {...rest}\n >\n {submitting && spinner}\n {rawHtml ? (\n <div\n style={{ display: \"contents\" }}\n dangerouslySetInnerHTML={{ __html: rawHtml }}\n />\n ) : (\n title\n )}\n </button>\n <span className=\"fixed -z-10 top-0 left-0 w-0 h-0 overflow-hidden opacity-0 pointer-events-none\">\n <span className={needClasses}></span>\n </span>\n </>\n );\n};\n","/**\n * 简单的加密函数,用于生成防机器人的加密字段\n * @param value 需要加密的值\n * @returns 加密后的字符串\n */\nexport const encrypt = (value: string, formSalt: string): string => {\n // 获取当前时间戳,精确到分钟级别(防止频繁变化)\n const timestamp = Math.floor(Date.now() / (60 * 1000));\n\n // 将时间戳与盐值和输入值组合\n const dataToEncrypt = `${formSalt}:${timestamp}:${value}`;\n\n // 使用简单的哈希算法\n let hash = 0;\n for (let i = 0; i < dataToEncrypt.length; i++) {\n const char = dataToEncrypt.charCodeAt(i);\n hash = (hash << 5) - hash + char;\n hash = hash & hash; // 转换为32位整数\n }\n\n // 转换为16进制字符串并添加时间戳信息\n return `${hash.toString(16)}_${timestamp}`;\n};\n\n/**\n * 验证加密字段是否有效\n * @param encryptedValue 加密后的字符串\n * @param originalValue 原始值(如蜜罐字段的值)\n * @param maxAgeMinutes 最大有效时间(分钟)\n * @returns 是否有效\n */\nexport const verifyEncryption = (\n formSalt: string,\n encryptedValue: string = \"\",\n originalValue: string = \"\",\n maxAgeMinutes: number = 30\n): boolean => {\n // 解析加密值\n const parts = encryptedValue.split(\"_\");\n if (parts.length !== 2) {\n return false; // 格式不正确\n }\n\n const [hashString, timestampString] = parts;\n const timestamp = parseInt(timestampString, 10);\n\n // 验证时间戳是否在有效期内\n const currentTimestamp = Math.floor(Date.now() / (60 * 1000));\n if (isNaN(timestamp) || currentTimestamp - timestamp > maxAgeMinutes) {\n return false; // 时间戳无效或已过期\n }\n\n // 重新计算哈希值\n const dataToEncrypt = `${formSalt}:${timestamp}:${originalValue}`;\n let hash = 0;\n for (let i = 0; i < dataToEncrypt.length; i++) {\n const char = dataToEncrypt.charCodeAt(i);\n hash = (hash << 5) - hash + char;\n hash = hash & hash;\n }\n\n // 比较哈希值\n return hashString === hash.toString(16);\n};\n","import { useEffect, useRef, useState } from \"react\";\n\n/**\n * 计算内联标签布局所需的 paddingLeft(= label 宽度 + 额外间距)\n * - 返回 labelRef 供 <label ref={labelRef} /> 绑定\n * - 返回 paddingLeft 用于内层输入/容器 style\n */\nexport function useInlineLabelPadding(extraSpace: number = 16) {\n const labelRef = useRef<HTMLLabelElement>(null);\n const [paddingLeft, setPaddingLeft] = useState<string>(\"3.5rem\");\n\n useEffect(() => {\n const labelEl = labelRef.current;\n if (!labelEl) return;\n\n let rafId = 0;\n const measure = () => {\n const width = labelEl.getBoundingClientRect().width;\n setPaddingLeft(`${width + extraSpace}px`);\n };\n\n measure();\n rafId = requestAnimationFrame(measure);\n\n if (typeof ResizeObserver === \"undefined\") {\n return () => {\n cancelAnimationFrame(rafId);\n };\n }\n\n const ro = new ResizeObserver(() => {\n measure();\n });\n ro.observe(labelEl);\n\n return () => {\n cancelAnimationFrame(rafId);\n ro.disconnect();\n };\n }, [extraSpace]);\n\n return { labelRef, paddingLeft } as const;\n}\n","import clsx from \"clsx\";\nimport { forwardRef, useRef, useState } from \"react\";\nimport { useInlineLabelPadding } from \"./hooks/useInlineLabelPadding\";\n\n/**\n * Simple encryption function for generating anti-bot encrypted fields\n */\nconst generateEncryption = (formSalt: string, value: string): string => {\n const timestamp = Math.floor(Date.now() / (60 * 1000));\n const dataToEncrypt = `${formSalt}:${timestamp}:${value}`;\n\n let hash = 0;\n for (let i = 0; i < dataToEncrypt.length; i++) {\n const char = dataToEncrypt.charCodeAt(i);\n hash = (hash << 5) - hash + char;\n hash = hash & hash;\n }\n\n return `${hash.toString(16)}_${timestamp}`;\n};\n\nexport type UploadedFile = {\n id: string;\n name: string;\n size: number;\n url: string; // OSS public URL\n};\n\nexport type FileUploadProps = {\n label: string;\n name: string;\n required?: boolean;\n className?: string;\n labelClassName?: string;\n inputClassName?: string;\n accept?: string;\n onChange?: (fileInfo: UploadedFile | null) => void;\n onUploadStateChange?: (isUploading: boolean) => void;\n error?: string;\n placeholder?: string;\n uploadingText?: string;\n selectedText?: string;\n formSalt?: string; // 加密盐\n maxSize?: number; // 最大文件大小(字节),默认 5MB\n};\n\nexport const FileUpload2 = forwardRef<HTMLInputElement, FileUploadProps>(\n (props, ref) => {\n const {\n label,\n name,\n required,\n className,\n labelClassName,\n inputClassName,\n accept = \"*/*\",\n onChange,\n onUploadStateChange,\n error,\n placeholder = \"Click to select file\",\n uploadingText = \"Uploading...\",\n selectedText = \"Selected: {name}\",\n formSalt = \"default-salt\",\n maxSize = 5 * 1024 * 1024,\n ...rest\n } = props;\n\n const [uploadedFile, setUploadedFile] = useState<UploadedFile | null>(null);\n const [isUploading, setIsUploading] = useState(false);\n const [uploadError, setUploadError] = useState<string>(\"\");\n const fileInputRef = useRef<HTMLInputElement>(null);\n const { labelRef, paddingLeft } = useInlineLabelPadding(16);\n const abortControllerRef = useRef<AbortController | null>(null);\n\n // Upload single file\n const uploadFile = async (\n file: File,\n signal: AbortSignal\n ): Promise<UploadedFile> => {\n // Validate file size\n if (file.size > maxSize) {\n throw new Error(\n `File ${file.name} exceeds maximum size limit of ${\n maxSize / 1024 / 1024\n }MB`\n );\n }\n\n // Generate encrypted field with honeypot value\n const honeypot = \"\";\n const encryptedField = generateEncryption(formSalt, honeypot);\n\n // 1. Get upload credentials\n const credentialsResponse = await fetch(\"/api/get-upload-credentials\", {\n method: \"POST\",\n headers: {\n \"Content-Type\": \"application/json\",\n },\n body: JSON.stringify({\n fileName: file.name,\n fileSize: file.size,\n fileType: file.type,\n mediaType: \"document\", // Request document type credentials (usually R2)\n encryptedField,\n honeypot,\n }),\n signal,\n });\n\n if (!credentialsResponse.ok) {\n const errorData = await credentialsResponse.json();\n throw new Error(\n errorData.message || \"Failed to get upload credentials\"\n );\n }\n\n const credentialsData = await credentialsResponse.json();\n\n if (!credentialsData.success) {\n throw new Error(\n credentialsData.message || \"Failed to get upload credentials\"\n );\n }\n\n // Extract upload information from response\n const { credentials, mediaType } = credentialsData;\n const uploadUrl = credentials?.uploadUrl;\n const platform = credentials?.platform;\n\n if (!uploadUrl) {\n throw new Error(\"Failed to get upload URL\");\n }\n\n // 2. Upload to cloud storage\n\n let uploadResponse: Response;\n\n // Use different upload methods based on platform type\n if (platform === \"cloudflare_images\") {\n // Cloudflare Images uses FormData + POST\n const formData = new FormData();\n formData.append(\"file\", file);\n\n uploadResponse = await fetch(uploadUrl, {\n method: \"POST\",\n body: formData,\n signal,\n });\n } else {\n // Other platforms use PUT (e.g., pre-signed URLs)\n uploadResponse = await fetch(uploadUrl, {\n method: \"PUT\",\n headers: {\n \"Content-Type\": file.type,\n },\n body: file,\n signal,\n });\n }\n\n if (!uploadResponse.ok) {\n throw new Error(\n `File upload failed: ${uploadResponse.status} ${uploadResponse.statusText}`\n );\n }\n\n // Get resource identifier after upload\n let resourceId: string;\n let publicUrl: string;\n\n if (platform === \"cloudflare_images\") {\n // Cloudflare Images returns JSON, extract result.id\n const uploadResult = await uploadResponse.json();\n resourceId = uploadResult?.result?.id || uploadUrl;\n // Construct Cloudflare Images public URL\n // Format: https://imagedelivery.net/{account_hash}/{image_id}/public\n const accountHash = uploadUrl.split(\"/\")[3]; // Extract from upload URL\n publicUrl = `https://imagedelivery.net/${accountHash}/${resourceId}/public`;\n } else if (platform === \"cloudflare_r2\") {\n // Cloudflare R2: uploadUrl is already the public URL (pre-signed or public bucket URL)\n resourceId = uploadUrl.split(\"/\").pop() || uploadUrl; // Extract filename from URL\n publicUrl = uploadUrl; // Use the upload URL as public URL\n } else {\n // Other platforms use uploadUrl as resource identifier\n resourceId = uploadUrl;\n publicUrl = uploadUrl;\n }\n\n // 3. Insert Media object into database\n const mediaPayload = {\n name: file.name,\n size: file.size,\n mimeType: file.type,\n mediaType,\n resourceUrl: resourceId,\n storageType: platform || \"cloudflare_images\",\n encryptedField,\n honeypot,\n };\n\n const createMediaResponse = await fetch(\"/api/create-media\", {\n method: \"POST\",\n headers: {\n \"Content-Type\": \"application/json\",\n },\n body: JSON.stringify(mediaPayload),\n signal,\n });\n\n if (!createMediaResponse.ok) {\n const errorData = await createMediaResponse.json();\n throw new Error(errorData.message || \"Failed to create Media object\");\n }\n\n const mediaData = await createMediaResponse.json();\n\n if (!mediaData.success) {\n throw new Error(mediaData.message || \"Failed to create Media object\");\n }\n\n // Return uploaded file information\n return {\n id: mediaData.mediaId,\n name: file.name,\n size: file.size,\n url: publicUrl, // Use public URL instead of resource ID\n };\n };\n\n const handleFileChange = async (e: React.ChangeEvent<HTMLInputElement>) => {\n const files = e.target.files;\n\n if (!files || files.length === 0) return;\n\n const file = files[0]; // Only take the first file\n\n // Create new AbortController\n const abortController = new AbortController();\n abortControllerRef.current = abortController;\n\n setIsUploading(true);\n onUploadStateChange?.(true); // 通知父组件开始上传\n setUploadError(\"\");\n\n try {\n // Validate file size\n if (file.size > maxSize) {\n throw new Error(\n `File ${file.name} exceeds ${maxSize / 1024 / 1024}MB limit`\n );\n }\n\n // Upload file\n const uploadedFileData = await uploadFile(file, abortController.signal);\n setUploadedFile(uploadedFileData);\n onChange?.(uploadedFileData); // Pass complete file info\n } catch (error) {\n // Don't show error if user cancelled\n if (error instanceof Error && error.name === \"AbortError\") {\n console.log(\"User cancelled upload\");\n } else {\n console.error(\"File upload failed:\", error);\n setUploadError(\n error instanceof Error ? error.message : \"File upload failed\"\n );\n }\n } finally {\n setIsUploading(false);\n onUploadStateChange?.(false); // 通知父组件上传结束\n abortControllerRef.current = null;\n // Clear input to allow re-selecting the same file\n if (fileInputRef.current) {\n fileInputRef.current.value = \"\";\n }\n }\n };\n\n const handleClick = () => {\n // Don't allow selection if uploading or file already exists\n if (isUploading || uploadedFile) return;\n fileInputRef.current?.click();\n };\n\n const handleRemoveFile = (e: React.MouseEvent) => {\n e.stopPropagation();\n setUploadedFile(null);\n onChange?.(null); // Pass null when file is removed\n setUploadError(\"\");\n };\n\n const handleCancelUpload = (e: React.MouseEvent) => {\n e.stopPropagation();\n if (abortControllerRef.current) {\n abortControllerRef.current.abort();\n }\n };\n\n const getDisplayText = () => {\n if (isUploading) return uploadingText;\n if (uploadedFile) {\n return selectedText.replace(\"{name}\", uploadedFile.name);\n }\n return placeholder;\n };\n\n return (\n <div\n ref={ref}\n className={clsx(\"relative w-full\", className)}\n {...rest}\n >\n <label\n ref={labelRef}\n htmlFor={name}\n className={clsx(\n \"absolute left-3 top-1/2 -translate-y-1/2 mt-1 opacity-70 text-sm pointer-events-none whitespace-nowrap z-10\",\n labelClassName\n )}\n >\n {label}\n </label>\n\n {/* Hidden file input */}\n <input\n ref={fileInputRef}\n type=\"file\"\n id={name}\n name={name}\n required={required}\n accept={accept}\n onChange={handleFileChange}\n disabled={!!uploadedFile}\n className=\"hidden\"\n />\n\n {/* Simulated input box upload area */}\n <div\n onClick={handleClick}\n className={clsx(\n \"w-full pr-3 py-2 border border-gray-300 rounded-md focus:outline-none focus:ring-2 focus:ring-primary-300 bg-transparent transition-colors duration-200 flex items-center justify-start min-h-[2.5rem]\",\n isUploading || uploadedFile\n ? \"cursor-not-allowed opacity-75\"\n : \"cursor-pointer hover:bg-white\",\n inputClassName\n )}\n style={{ paddingLeft }}\n >\n <span\n className={clsx(\n \"pl-6 text-sm font-medium flex-1 mr-4\",\n uploadedFile ? \"text-gray-900\" : \"text-gray-600\"\n )}\n >\n {getDisplayText()}\n </span>\n {isUploading ? (\n <button\n type=\"button\"\n onClick={handleCancelUpload}\n className=\"ml-2 p-1 hover:bg-gray-100 rounded-full transition-colors flex-shrink-0 flex items-center gap-1\"\n title=\"Cancel upload\"\n >\n <div className=\"animate-spin rounded-full h-4 w-4 border-t-2 border-b-2 border-primary-500\" />\n <svg\n className=\"w-3 h-3 text-gray-500\"\n fill=\"none\"\n stroke=\"currentColor\"\n viewBox=\"0 0 24 24\"\n >\n <path\n strokeLinecap=\"round\"\n strokeLinejoin=\"round\"\n strokeWidth={2}\n d=\"M6 18L18 6M6 6l12 12\"\n />\n </svg>\n </button>\n ) : uploadedFile ? (\n <button\n type=\"button\"\n onClick={handleRemoveFile}\n className=\"ml-2 p-1 hover:bg-red-100 rounded-full transition-colors flex-shrink-0\"\n title=\"Delete file\"\n >\n <svg\n className=\"w-4 h-4 text-red-500\"\n fill=\"none\"\n stroke=\"currentColor\"\n viewBox=\"0 0 24 24\"\n >\n <path\n strokeLinecap=\"round\"\n strokeLinejoin=\"round\"\n strokeWidth={2}\n d=\"M6 18L18 6M6 6l12 12\"\n />\n </svg>\n </button>\n ) : (\n <svg\n className=\"w-5 h-5 text-gray-400 flex-shrink-0\"\n fill=\"none\"\n stroke=\"currentColor\"\n viewBox=\"0 0 24 24\"\n >\n <path\n strokeLinecap=\"round\"\n strokeLinejoin=\"round\"\n strokeWidth={2}\n d=\"M4 16l4.586-4.586a2 2 0 012.828 0L16 16m-2-2l1.586-1.586a2 2 0 012.828 0L20 14m-6-6h.01M6 20h12a2 2 0 002-2V6a2 2 0 00-2-2H6a2 2 0 00-2 2v12a2 2 0 002 2z\"\n />\n </svg>\n )}\n </div>\n\n {/* Display error message */}\n {(error || uploadError) && (\n <p className=\"text-red-500 mt-1 text-sm\">{error || uploadError}</p>\n )}\n </div>\n );\n }\n);\n","import { forwardRef } from \"react\";\nimport { FieldConfig } from \"./types\";\n\nexport type InputProps = Omit<FieldConfig, \"feildStyle\"> & {\n requiredClassName?: string;\n value?: string;\n onChange?: (e: React.ChangeEvent<HTMLInputElement>) => void;\n error?: string;\n};\n\nexport const Input = forwardRef<HTMLInputElement, InputProps>((props, ref) => {\n const {\n label,\n name,\n required,\n requiredClassName,\n labelClassName,\n inputClassName,\n type,\n autoFocus,\n value,\n onChange,\n error,\n ...rest\n } = props;\n\n return (\n <div {...rest}>\n <label htmlFor={name} className={labelClassName}>\n {label}\n {required ? <span className={requiredClassName}>*</span> : \"\"}\n </label>\n <input\n ref={ref}\n type={type || \"text\"}\n id={name}\n name={name}\n required={required}\n className={inputClassName}\n autoComplete={name}\n autoFocus={autoFocus}\n value={value}\n onChange={onChange}\n />\n {error && <p className=\"text-red-500 mt-1\">{error}</p>}\n </div>\n );\n});\n","import clsx from \"clsx\";\nimport { forwardRef } from \"react\";\nimport { InputProps } from \"./Input\";\nimport { useInlineLabelPadding } from \"./hooks/useInlineLabelPadding\";\n\nexport const Input2 = forwardRef<HTMLInputElement, InputProps>((props, ref) => {\n const {\n label,\n name,\n required,\n requiredClassName,\n className,\n labelClassName,\n inputClassName,\n type = \"text\",\n autoFocus,\n value,\n placeholder,\n onChange,\n error,\n ...rest\n } = props;\n\n const { labelRef, paddingLeft } = useInlineLabelPadding(16);\n\n return (\n <div className={clsx(\"relative w-full\", className)} {...rest}>\n <label\n ref={labelRef}\n htmlFor={name}\n className={clsx(\n \"absolute left-3 top-1/2 -translate-y-1/2 mt-1 opacity-70 text-sm pointer-events-none whitespace-nowrap\",\n labelClassName\n )}\n >\n {label}\n {required ? <span className={requiredClassName}>*</span> : \"\"}\n </label>\n <input\n ref={ref}\n type={type}\n id={name}\n name={name}\n required={required}\n placeholder={placeholder}\n className={clsx(\n \"w-full pr-3 py-2 border border-gray-300 rounded-md focus:outline-none focus:ring-2 focus:ring-primary-300 bg-transparent focus:bg-white transition-colors duration-200\",\n inputClassName\n )}\n style={{ paddingLeft }}\n autoComplete={name}\n autoFocus={autoFocus}\n value={value}\n onChange={onChange}\n />\n {error && <p className=\"text-red-500 mt-1 text-sm\">{error}</p>}\n </div>\n );\n});\n","import { forwardRef } from \"react\";\nimport { FieldConfig } from \"./types\";\n\nexport type TextareaProps = Omit<FieldConfig, \"feildStyle\"> & {\n requiredClassName?: string;\n value?: string;\n onChange?: (e: React.ChangeEvent<HTMLTextAreaElement>) => void;\n error?: string;\n};\n\nexport const Textarea = forwardRef<HTMLTextAreaElement, TextareaProps>(\n (props, ref) => {\n const {\n label,\n name,\n required,\n requiredClassName,\n labelClassName,\n inputClassName,\n rows = 8,\n value,\n onChange,\n error,\n ...rest\n } = props;\n\n return (\n <div {...rest}>\n <label htmlFor={name} className={labelClassName}>\n {label}\n {required ? <span className={requiredClassName}>*</span> : \"\"}\n </label>\n <textarea\n ref={ref}\n id={name}\n name={name}\n required={required}\n className={inputClassName}\n rows={rows}\n value={value}\n onChange={onChange}\n autoComplete={name}\n />\n {error && <p className=\"text-red-500 mt-1\">{error}</p>}\n </div>\n );\n }\n);\n","import { forwardRef, useRef, useEffect, useState } from \"react\";\nimport { TextareaProps } from \"./Textarea\";\n\nexport const Textarea2 = forwardRef<HTMLTextAreaElement, TextareaProps>(\n (props, ref) => {\n const {\n label,\n name,\n required,\n requiredClassName,\n labelClassName,\n inputClassName,\n className,\n rows = 6,\n value,\n onChange,\n error,\n ...rest\n } = props;\n\n const [paddingTop, setPaddingTop] = useState(\"2.5rem\");\n const labelRef = useRef<HTMLLabelElement>(null);\n\n useEffect(() => {\n const labelEl = labelRef.current;\n if (!labelEl) return;\n\n let rafId = 0;\n const measure = () => {\n const height = labelEl.getBoundingClientRect().height;\n setPaddingTop(`${height + 12}px`);\n };\n\n measure();\n rafId = requestAnimationFrame(measure);\n\n if (typeof ResizeObserver === \"undefined\") {\n return () => {\n cancelAnimationFrame(rafId);\n };\n }\n\n const ro = new ResizeObserver(() => {\n measure();\n });\n ro.observe(labelEl);\n\n return () => {\n cancelAnimationFrame(rafId);\n ro.disconnect();\n };\n }, [label]);\n\n return (\n <div className={className} {...rest}>\n <div className=\"relative w-full\">\n <label\n ref={labelRef}\n htmlFor={name}\n className={`absolute left-3 top-2 opacity-70 text-sm pointer-events-none ${\n labelClassName || \"\"\n }`}\n >\n {label}\n {required ? <span className={requiredClassName}>*</span> : \"\"}\n </label>\n <textarea\n ref={ref}\n id={name}\n name={name}\n required={required}\n rows={rows}\n value={value}\n onChange={onChange}\n autoComplete={name}\n style={{ paddingTop }}\n className={`w-full px-3 pb-2 border border-gray-300 rounded-md shadow-sm focus:outline-none \n focus:ring-2 focus:ring-primary-300 focus:border-transparent resize-y bg-transparent focus:bg-white transition-colors duration-200 ${\n inputClassName || \"\"\n }`}\n />\n </div>\n {error && <p className=\"text-red-500 mt-1 text-sm\">{error}</p>}\n </div>\n );\n }\n);\n\nTextarea2.displayName = \"Textarea2\";\n","export type CountryDial = {\n code: string; // ISO 3166-1 alpha-2\n name: string; // English name\n region?: string; // Continent/region label\n dialCode: string; // +NN\n};\n\n// Note: Names follow common English naming used in international forms.\n// Region is a coarse grouping for search hints.\nexport const countries: CountryDial[] = [\n { code: \"AF\", name: \"Afghanistan\", region: \"Asia\", dialCode: \"+93\" },\n { code: \"AL\", name: \"Albania\", region: \"Europe\", dialCode: \"+355\" },\n { code: \"DZ\", name: \"Algeria\", region: \"Africa\", dialCode: \"+213\" },\n { code: \"AS\", name: \"American Samoa\", region: \"Oceania\", dialCode: \"+1\" },\n { code: \"AD\", name: \"Andorra\", region: \"Europe\", dialCode: \"+376\" },\n { code: \"AO\", name: \"Angola\", region: \"Africa\", dialCode: \"+244\" },\n { code: \"AI\", name: \"Anguilla\", region: \"North America\", dialCode: \"+1\" },\n { code: \"AG\", name: \"Antigua and Barbuda\", region: \"North America\", dialCode: \"+1\" },\n { code: \"AR\", name: \"Argentina\", region: \"South America\", dialCode: \"+54\" },\n { code: \"AM\", name: \"Armenia\", region: \"Asia\", dialCode: \"+374\" },\n { code: \"AW\", name: \"Aruba\", region: \"North America\", dialCode: \"+297\" },\n { code: \"AU\", name: \"Australia\", region: \"Oceania\", dialCode: \"+61\" },\n { code: \"AT\", name: \"Austria\", region: \"Europe\", dialCode: \"+43\" },\n { code: \"AZ\", name: \"Azerbaijan\", region: \"Asia\", dialCode: \"+994\" },\n { code: \"BS\", name: \"Bahamas\", region: \"North America\", dialCode: \"+1\" },\n { code: \"BH\", name: \"Bahrain\", region: \"Asia\", dialCode: \"+973\" },\n { code: \"BD\", name: \"Bangladesh\", region: \"Asia\", dialCode: \"+880\" },\n { code: \"BB\", name: \"Barbados\", region: \"North America\", dialCode: \"+1\" },\n { code: \"BY\", name: \"Belarus\", region: \"Europe\", dialCode: \"+375\" },\n { code: \"BE\", name: \"Belgium\", region: \"Europe\", dialCode: \"+32\" },\n { code: \"BZ\", name: \"Belize\", region: \"North America\", dialCode: \"+501\" },\n { code: \"BJ\", name: \"Benin\", region: \"Africa\", dialCode: \"+229\" },\n { code: \"BM\", name: \"Bermuda\", region: \"North America\", dialCode: \"+1\" },\n { code: \"BT\", name: \"Bhutan\", region: \"Asia\", dialCode: \"+975\" },\n { code: \"BO\", name: \"Bolivia\", region: \"South America\", dialCode: \"+591\" },\n { code: \"BA\", name: \"Bosnia and Herzegovina\", region: \"Europe\", dialCode: \"+387\" },\n { code: \"BW\", name: \"Botswana\", region: \"Africa\", dialCode: \"+267\" },\n { code: \"BR\", name: \"Brazil\", region: \"South America\", dialCode: \"+55\" },\n { code: \"VG\", name: \"British Virgin Islands\", region: \"North America\", dialCode: \"+1\" },\n { code: \"BN\", name: \"Brunei\", region: \"Asia\", dialCode: \"+673\" },\n { code: \"BG\", name: \"Bulgaria\", region: \"Europe\", dialCode: \"+359\" },\n { code: \"BF\", name: \"Burkina Faso\", region: \"Africa\", dialCode: \"+226\" },\n { code: \"BI\", name: \"Burundi\", region: \"Africa\", dialCode: \"+257\" },\n { code: \"KH\", name: \"Cambodia\", region: \"Asia\", dialCode: \"+855\" },\n { code: \"CM\", name: \"Cameroon\", region: \"Africa\", dialCode: \"+237\" },\n { code: \"CA\", name: \"Canada\", region: \"North America\", dialCode: \"+1\" },\n { code: \"CV\", name: \"Cape Verde\", region: \"Africa\", dialCode: \"+238\" },\n { code: \"KY\", name: \"Cayman Islands\", region: \"North America\", dialCode: \"+1\" },\n { code: \"CF\", name: \"Central African Republic\", region: \"Africa\", dialCode: \"+236\" },\n { code: \"TD\", name: \"Chad\", region: \"Africa\", dialCode: \"+235\" },\n { code: \"CL\", name: \"Chile\", region: \"South America\", dialCode: \"+56\" },\n { code: \"CN\", name: \"China\", region: \"Asia\", dialCode: \"+86\" },\n { code: \"HK\", name: \"Hong Kong, China\", region: \"Asia\", dialCode: \"+852\" },\n { code: \"MO\", name: \"Macao, China\", region: \"Asia\", dialCode: \"+853\" },\n { code: \"TW\", name: \"Taiwan, China\", region: \"Asia\", dialCode: \"+886\" },\n { code: \"CO\", name: \"Colombia\", region: \"South America\", dialCode: \"+57\" },\n { code: \"KM\", name: \"Comoros\", region: \"Africa\", dialCode: \"+269\" },\n { code: \"CG\", name: \"Congo\", region: \"Africa\", dialCode: \"+242\" },\n { code: \"CD\", name: \"Congo (DRC)\", region: \"Africa\", dialCode: \"+243\" },\n { code: \"CR\", name: \"Costa Rica\", region: \"North America\", dialCode: \"+506\" },\n { code: \"CI\", name: \"Côte d’Ivoire\", region: \"Africa\", dialCode: \"+225\" },\n { code: \"HR\", name: \"Croatia\", region: \"Europe\", dialCode: \"+385\" },\n { code: \"CU\", name: \"Cuba\", region: \"North America\", dialCode: \"+53\" },\n { code: \"CY\", name: \"Cyprus\", region: \"Europe\", dialCode: \"+357\" },\n { code: \"CZ\", name: \"Czechia\", region: \"Europe\", dialCode: \"+420\" },\n { code: \"DK\", name: \"Denmark\", region: \"Europe\", dialCode: \"+45\" },\n { code: \"DJ\", name: \"Djibouti\", region: \"Africa\", dialCode: \"+253\" },\n { code: \"DM\", name: \"Dominica\", region: \"North America\", dialCode: \"+1\" },\n { code: \"DO\", name: \"Dominican Republic\", region: \"North America\", dialCode: \"+1\" },\n { code: \"EC\", name: \"Ecuador\", region: \"South America\", dialCode: \"+593\" },\n { code: \"EG\", name: \"Egypt\", region: \"Africa\", dialCode: \"+20\" },\n { code: \"SV\", name: \"El Salvador\", region: \"North America\", dialCode: \"+503\" },\n { code: \"GQ\", name: \"Equatorial Guinea\", region: \"Africa\", dialCode: \"+240\" },\n { code: \"ER\", name: \"Eritrea\", region: \"Africa\", dialCode: \"+291\" },\n { code: \"EE\", name: \"Estonia\", region: \"Europe\", dialCode: \"+372\" },\n { code: \"SZ\", name: \"Eswatini\", region: \"Africa\", dialCode: \"+268\" },\n { code: \"ET\", name: \"Ethiopia\", region: \"Africa\", dialCode: \"+251\" },\n { code: \"FO\", name: \"Faroe Islands\", region: \"Europe\", dialCode: \"+298\" },\n { code: \"FJ\", name: \"Fiji\", region: \"Oceania\", dialCode: \"+679\" },\n { code: \"FI\", name: \"Finland\", region: \"Europe\", dialCode: \"+358\" },\n { code: \"FR\", name: \"France\", region: \"Europe\", dialCode: \"+33\" },\n { code: \"GF\", name: \"French Guiana\", region: \"South America\", dialCode: \"+594\" },\n { code: \"PF\", name: \"French Polynesia\", region: \"Oceania\", dialCode: \"+689\" },\n { code: \"GA\", name: \"Gabon\", region: \"Africa\", dialCode: \"+241\" },\n { code: \"GM\", name: \"Gambia\", region: \"Africa\", dialCode: \"+220\" },\n { code: \"GE\", name: \"Georgia\", region: \"Asia\", dialCode: \"+995\" },\n { code: \"DE\", name: \"Germany\", region: \"Europe\", dialCode: \"+49\" },\n { code: \"GH\", name: \"Ghana\", region: \"Africa\", dialCode: \"+233\" },\n { code: \"GI\", name: \"Gibraltar\", region: \"Europe\", dialCode: \"+350\" },\n { code: \"GR\", name: \"Greece\", region: \"Europe\", dialCode: \"+30\" },\n { code: \"GL\", name: \"Greenland\", region: \"North America\", dialCode: \"+299\" },\n { code: \"GD\", name: \"Grenada\", region: \"North America\", dialCode: \"+1\" },\n { code: \"GP\", name: \"Guadeloupe\", region: \"North America\", dialCode: \"+590\" },\n { code: \"GU\", name: \"Guam\", region: \"Oceania\", dialCode: \"+1\" },\n { code: \"GT\", name: \"Guatemala\", region: \"North America\", dialCode: \"+502\" },\n { code: \"GG\", name: \"Guernsey\", region: \"Europe\", dialCode: \"+44\" },\n { code: \"GN\", name: \"Guinea\", region: \"Africa\", dialCode: \"+224\" },\n { code: \"GW\", name: \"Guinea-Bissau\", region: \"Africa\", dialCode: \"+245\" },\n { code: \"GY\", name: \"Guyana\", region: \"South America\", dialCode: \"+592\" },\n { code: \"HT\", name: \"Haiti\", region: \"North America\", dialCode: \"+509\" },\n { code: \"HN\", name: \"Honduras\", region: \"North America\", dialCode: \"+504\" },\n { code: \"HU\", name: \"Hungary\", region: \"Europe\", dialCode: \"+36\" },\n { code: \"IS\", name: \"Iceland\", region: \"Europe\", dialCode: \"+354\" },\n { code: \"IN\", name: \"India\", region: \"Asia\", dialCode: \"+91\" },\n { code: \"ID\", name: \"Indonesia\", region: \"Asia\", dialCode: \"+62\" },\n { code: \"IR\", name: \"Iran\", region: \"Asia\", dialCode: \"+98\" },\n { code: \"IQ\", name: \"Iraq\", region: \"Asia\", dialCode: \"+964\" },\n { code: \"IE\", name: \"Ireland\", region: \"Europe\", dialCode: \"+353\" },\n { code: \"IM\", name: \"Isle of Man\", region: \"Europe\", dialCode: \"+44\" },\n { code: \"IL\", name: \"Israel\", region: \"Asia\", dialCode: \"+972\" },\n { code: \"IT\", name: \"Italy\", region: \"Europe\", dialCode: \"+39\" },\n { code: \"JM\", name: \"Jamaica\", region: \"North America\", dialCode: \"+1\" },\n { code: \"JP\", name: \"Japan\", region: \"Asia\", dialCode: \"+81\" },\n { code: \"JE\", name: \"Jersey\", region: \"Europe\", dialCode: \"+44\" },\n { code: \"JO\", name: \"Jordan\", region: \"Asia\", dialCode: \"+962\" },\n { code: \"KZ\", name: \"Kazakhstan\", region: \"Asia\", dialCode: \"+7\" },\n { code: \"KE\", name: \"Kenya\", region: \"Africa\", dialCode: \"+254\" },\n { code: \"KI\", name: \"Kiribati\", region: \"Oceania\", dialCode: \"+686\" },\n { code: \"XK\", name: \"Kosovo\", region: \"Europe\", dialCode: \"+383\" },\n { code: \"KW\", name: \"Kuwait\", region: \"Asia\", dialCode: \"+965\" },\n { code: \"KG\", name: \"Kyrgyzstan\", region: \"Asia\", dialCode: \"+996\" },\n { code: \"LA\", name: \"Laos\", region: \"Asia\", dialCode: \"+856\" },\n { code: \"LV\", name: \"Latvia\", region: \"Europe\", dialCode: \"+371\" },\n { code: \"LB\", name: \"Lebanon\", region: \"Asia\", dialCode: \"+961\" },\n { code: \"LS\", name: \"Lesotho\", region: \"Africa\", dialCode: \"+266\" },\n { code: \"LR\", name: \"Liberia\", region: \"Africa\", dialCode: \"+231\" },\n { code: \"LY\", name: \"Libya\", region: \"Africa\", dialCode: \"+218\" },\n { code: \"LI\", name: \"Liechtenstein\", region: \"Europe\", dialCode: \"+423\" },\n { code: \"LT\", name: \"Lithuania\", region: \"Europe\", dialCode: \"+370\" },\n { code: \"LU\", name: \"Luxembourg\", region: \"Europe\", dialCode: \"+352\" },\n { code: \"MG\", name: \"Madagascar\", region: \"Africa\", dialCode: \"+261\" },\n { code: \"MW\", name: \"Malawi\", region: \"Africa\", dialCode: \"+265\" },\n { code: \"MY\", name: \"Malaysia\", region: \"Asia\", dialCode: \"+60\" },\n { code: \"MV\", name: \"Maldives\", region: \"Asia\", dialCode: \"+960\" },\n { code: \"ML\", name: \"Mali\", region: \"Africa\", dialCode: \"+223\" },\n { code: \"MT\", name: \"Malta\", region: \"Europe\", dialCode: \"+356\" },\n { code: \"MH\", name: \"Marshall Islands\", region: \"Oceania\", dialCode: \"+692\" },\n { code: \"MQ\", name: \"Martinique\", region: \"North America\", dialCode: \"+596\" },\n { code: \"MR\", name: \"Mauritania\", region: \"Africa\", dialCode: \"+222\" },\n { code: \"MU\", name: \"Mauritius\", region: \"Africa\", dialCode: \"+230\" },\n { code: \"YT\", name: \"Mayotte\", region: \"Africa\", dialCode: \"+262\" },\n { code: \"MX\", name: \"Mexico\", region: \"North America\", dialCode: \"+52\" },\n { code: \"FM\", name: \"Micronesia\", region: \"Oceania\", dialCode: \"+691\" },\n { code: \"MD\", name: \"Moldova\", region: \"Europe\", dialCode: \"+373\" },\n { code: \"MC\", name: \"Monaco\", region: \"Europe\", dialCode: \"+377\" },\n { code: \"MN\", name: \"Mongolia\", region: \"Asia\", dialCode: \"+976\" },\n { code: \"ME\", name: \"Montenegro\", region: \"Europe\", dialCode: \"+382\" },\n { code: \"MS\", name: \"Montserrat\", region: \"North America\", dialCode: \"+1\" },\n { code: \"MA\", name: \"Morocco\", region: \"Africa\", dialCode: \"+212\" },\n { code: \"MZ\", name: \"Mozambique\", region: \"Africa\", dialCode: \"+258\" },\n { code: \"MM\", name: \"Myanmar\", region: \"Asia\", dialCode: \"+95\" },\n { code: \"NA\", name: \"Namibia\", region: \"Africa\", dialCode: \"+264\" },\n { code: \"NR\", name: \"Nauru\", region: \"Oceania\", dialCode: \"+674\" },\n { code: \"NP\", name: \"Nepal\", region: \"Asia\", dialCode: \"+977\" },\n { code: \"NL\", name: \"Netherlands\", region: \"Europe\", dialCode: \"+31\" },\n { code: \"NC\", name: \"New Caledonia\", region: \"Oceania\", dialCode: \"+687\" },\n { code: \"NZ\", name: \"New Zealand\", region: \"Oceania\", dialCode: \"+64\" },\n { code: \"NI\", name: \"Nicaragua\", region: \"North America\", dialCode: \"+505\" },\n { code: \"NE\", name: \"Niger\", region: \"Africa\", dialCode: \"+227\" },\n { code: \"NG\", name: \"Nigeria\", region: \"Africa\", dialCode: \"+234\" },\n { code: \"NU\", name: \"Niue\", region: \"Oceania\", dialCode: \"+683\" },\n { code: \"NF\", name: \"Norfolk Island\", region: \"Oceania\", dialCode: \"+672\" },\n { code: \"KP\", name: \"North Korea\", region: \"Asia\", dialCode: \"+850\" },\n { code: \"MK\", name: \"North Macedonia\", region: \"Europe\", dialCode: \"+389\" },\n { code: \"MP\", name: \"Northern Mariana Islands\", region: \"Oceania\", dialCode: \"+1\" },\n { code: \"NO\", name: \"Norway\", region: \"Europe\", dialCode: \"+47\" },\n { code: \"OM\", name: \"Oman\", region: \"Asia\", dialCode: \"+968\" },\n { code: \"PK\", name: \"Pakistan\", region: \"Asia\", dialCode: \"+92\" },\n { code: \"PW\", name: \"Palau\", region: \"Oceania\", dialCode: \"+680\" },\n { code: \"PS\", name: \"Palestine\", region: \"Asia\", dialCode: \"+970\" },\n { code: \"PA\", name: \"Panama\", region: \"North America\", dialCode: \"+507\" },\n { code: \"PG\", name: \"Papua New Guinea\", region: \"Oceania\", dialCode: \"+675\" },\n { code: \"PY\", name: \"Paraguay\", region: \"South America\", dialCode: \"+595\" },\n { code: \"PE\", name: \"Peru\", region: \"South America\", dialCode: \"+51\" },\n { code: \"PH\", name: \"Philippines\", region: \"Asia\", dialCode: \"+63\" },\n { code: \"PL\", name: \"Poland\", region: \"Europe\", dialCode: \"+48\" },\n { code: \"PT\", name: \"Portugal\", region: \"Europe\", dialCode: \"+351\" },\n { code: \"PR\", name: \"Puerto Rico\", region: \"North America\", dialCode: \"+1\" },\n { code: \"QA\", name: \"Qatar\", region: \"Asia\", dialCode: \"+974\" },\n { code: \"RE\", name: \"Réunion\", region: \"Africa\", dialCode: \"+262\" },\n { code: \"RO\", name: \"Romania\", region: \"Europe\", dialCode: \"+40\" },\n { code: \"RU\", name: \"Russia\", region: \"Europe\", dialCode: \"+7\" },\n { code: \"RW\", name: \"Rwanda\", region: \"Africa\", dialCode: \"+250\" },\n { code: \"BL\", name: \"Saint Barthélemy\", region: \"North America\", dialCode: \"+590\" },\n { code: \"KN\", name: \"Saint Kitts and Nevis\", region: \"North America\", dialCode: \"+1\" },\n { code: \"LC\", name: \"Saint Lucia\", region: \"North America\", dialCode: \"+1\" },\n { code: \"MF\", name: \"Saint Martin\", region: \"North America\", dialCode: \"+590\" },\n { code: \"PM\", name: \"Saint Pierre and Miquelon\", region: \"North America\", dialCode: \"+508\" },\n { code: \"VC\", name: \"Saint Vincent and the Grenadines\", region: \"North America\", dialCode: \"+1\" },\n { code: \"WS\", name: \"Samoa\", region: \"Oceania\", dialCode: \"+685\" },\n { code: \"SM\", name: \"San Marino\", region: \"Europe\", dialCode: \"+378\" },\n { code: \"ST\", name: \"São Tomé and Príncipe\", region: \"Africa\", dialCode: \"+239\" },\n { code: \"SA\", name: \"Saudi Arabia\", region: \"Asia\", dialCode: \"+966\" },\n { code: \"SN\", name: \"Senegal\", region: \"Africa\", dialCode: \"+221\" },\n { code: \"RS\", name: \"Serbia\", region: \"Europe\", dialCode: \"+381\" },\n { code: \"SC\", name: \"Seychelles\", region: \"Africa\", dialCode: \"+248\" },\n { code: \"SL\", name: \"Sierra Leone\", region: \"Africa\", dialCode: \"+232\" },\n { code: \"SG\", name: \"Singapore\", region: \"Asia\", dialCode: \"+65\" },\n { code: \"SX\", name: \"Sint Maarten\", region: \"North America\", dialCode: \"+1\" },\n { code: \"SK\", name: \"Slovakia\", region: \"Europe\", dialCode: \"+421\" },\n { code: \"SI\", name: \"Slovenia\", region: \"Europe\", dialCode: \"+386\" },\n { code: \"SB\", name: \"Solomon Islands\", region: \"Oceania\", dialCode: \"+677\" },\n { code: \"SO\", name: \"Somalia\", region: \"Africa\", dialCode: \"+252\" },\n { code: \"ZA\", name: \"South Africa\", region: \"Africa\", dialCode: \"+27\" },\n { code: \"KR\", name: \"South Korea\", region: \"Asia\", dialCode: \"+82\" },\n { code: \"SS\", name: \"South Sudan\", region: \"Africa\", dialCode: \"+211\" },\n { code: \"ES\", name: \"Spain\", region: \"Europe\", dialCode: \"+34\" },\n { code: \"LK\", name: \"Sri Lanka\", region: \"Asia\", dialCode: \"+94\" },\n { code: \"SD\", name: \"Sudan\", region: \"Africa\", dialCode: \"+249\" },\n { code: \"SR\", name: \"Suriname\", region: \"South America\", dialCode: \"+597\" },\n { code: \"SE\", name: \"Sweden\", region: \"Europe\", dialCode: \"+46\" },\n { code: \"CH\", name: \"Switzerland\", region: \"Europe\", dialCode: \"+41\" },\n { code: \"SY\", name: \"Syria\", region: \"Asia\", dialCode: \"+963\" },\n { code: \"TJ\", name: \"Tajikistan\", region: \"Asia\", dialCode: \"+992\" },\n { code: \"TZ\", name: \"Tanzania\", region: \"Africa\", dialCode: \"+255\" },\n { code: \"TH\", name: \"Thailand\", region: \"Asia\", dialCode: \"+66\" },\n { code: \"TG\", name: \"Togo\", region: \"Africa\", dialCode: \"+228\" },\n { code: \"TK\", name: \"Tokelau\", region: \"Oceania\", dialCode: \"+690\" },\n { code: \"TO\", name: \"Tonga\", region: \"Oceania\", dialCode: \"+676\" },\n { code: \"TT\", name: \"Trinidad and Tobago\", region: \"North America\", dialCode: \"+1\" },\n { code: \"TN\", name: \"Tunisia\", region: \"Africa\", dialCode: \"+216\" },\n { code: \"TR\", name: \"Türkiye\", region: \"Europe\", dialCode: \"+90\" },\n { code: \"TM\", name: \"Turkmenistan\", region: \"Asia\", dialCode: \"+993\" },\n { code: \"TC\", name: \"Turks and Caicos Islands\", region: \"North America\", dialCode: \"+1\" },\n { code: \"TV\", name: \"Tuvalu\", region: \"Oceania\", dialCode: \"+688\" },\n { code: \"UG\", name: \"Uganda\", region: \"Africa\", dialCode: \"+256\" },\n { code: \"UA\", name: \"Ukraine\", region: \"Europe\", dialCode: \"+380\" },\n { code: \"AE\", name: \"United Arab Emirates\", region: \"Asia\", dialCode: \"+971\" },\n { code: \"GB\", name: \"United Kingdom\", region: \"Europe\", dialCode: \"+44\" },\n { code: \"US\", name: \"United States\", region: \"North America\", dialCode: \"+1\" },\n { code: \"UY\", name: \"Uruguay\", region: \"South America\", dialCode: \"+598\" },\n { code: \"UZ\", name: \"Uzbekistan\", region: \"Asia\", dialCode: \"+998\" },\n { code: \"VU\", name: \"Vanuatu\", region: \"Oceania\", dialCode: \"+678\" },\n { code: \"VA\", name: \"Vatican City\", region: \"Europe\", dialCode: \"+39\" },\n { code: \"VE\", name: \"Venezuela\", region: \"South America\", dialCode: \"+58\" },\n { code: \"VN\", name: \"Vietnam\", region: \"Asia\", dialCode: \"+84\" },\n { code: \"VI\", name: \"U.S. Virgin Islands\", region: \"North America\", dialCode: \"+1\" },\n { code: \"WF\", name: \"Wallis and Futuna\", region: \"Oceania\", dialCode: \"+681\" },\n { code: \"EH\", name: \"Western Sahara\", region: \"Africa\", dialCode: \"+212\" },\n { code: \"YE\", name: \"Yemen\", region: \"Asia\", dialCode: \"+967\" },\n { code: \"ZM\", name: \"Zambia\", region: \"Africa\", dialCode: \"+260\" },\n { code: \"ZW\", name: \"Zimbabwe\", region: \"Africa\", dialCode: \"+263\" },\n];\n","import { useEffect, useMemo, useState } from \"react\";\nimport type { CountryDial } from \"../countryDialCodes\";\nimport { countries as defaultCountries } from \"../countryDialCodes\";\n\nexport interface UseTelControlOptions {\n countries?: CountryDial[];\n name: string;\n value?: string | number | readonly string[] | undefined;\n onChange?: (e: React.ChangeEvent<HTMLInputElement>) => void;\n}\n\nexport function useTelControl({ countries, name, value, onChange }: UseTelControlOptions) {\n const allCountries = useMemo<CountryDial[]>(() => countries || defaultCountries, [countries]);\n\n const [selected, setSelected] = useState<CountryDial | null>(null);\n const [localNumber, setLocalNumber] = useState<string>(\"\");\n\n const toStringValue = (val?: string | number | readonly string[]) => {\n if (typeof val === \"string\") return val;\n if (typeof val === \"number\") return String(val);\n if (Array.isArray(val)) return val[0] ?? \"\";\n return \"\";\n };\n\n useEffect(() => {\n const s = toStringValue(value).trim();\n const m = s.match(/^\\+\\d{1,4}/);\n const dial = m ? m[0] : \"\";\n const number = s.slice(dial.length).trimStart();\n setLocalNumber(number || \"\");\n if (dial) {\n const found = allCountries.find((c) => c.dialCode === dial) || null;\n setSelected(found);\n } else {\n setSelected(null);\n }\n }, [value, allCountries]);\n\n const emitChange = (combined: string) => {\n if (!onChange) return;\n const evt = {\n target: { value: combined, name } as unknown,\n currentTarget: { value: combined, name } as unknown,\n } as unknown as React.ChangeEvent<HTMLInputElement>;\n onChange(evt);\n };\n\n const filtered = (query: string) => {\n if (!query) return allCountries;\n const q = query.toLowerCase();\n return allCountries.filter(\n (c) =>\n c.name.toLowerCase().includes(q) ||\n (c.region && c.region.toLowerCase().includes(q)) ||\n c.dialCode.replace(\"+\", \"\").includes(q.replace(\"+\", \"\"))\n );\n };\n\n const onSelectCountry = (c: CountryDial) => {\n setSelected(c);\n const combined = `${c.dialCode} ${localNumber}`.trim();\n emitChange(combined);\n };\n\n const onChangeLocal = (next: string) => {\n setLocalNumber(next);\n const combined = `${selected?.dialCode || \"\"} ${next}`.trim();\n emitChange(combined);\n };\n\n return {\n allCountries,\n selected,\n setSelected,\n localNumber,\n setLocalNumber,\n filtered,\n onSelectCountry,\n onChangeLocal,\n } as const;\n}\n","import clsx from \"clsx\";\nimport { forwardRef, useEffect, useMemo, useRef, useState } from \"react\";\nimport { CountryDial } from \"./countryDialCodes\";\nimport { useTelControl } from \"./hooks/useTelControl\";\n\nexport interface TelInputProps\n extends Omit<React.InputHTMLAttributes<HTMLInputElement>, \"type\"> {\n label?: string;\n name: string;\n required?: boolean;\n requiredClassName?: string;\n className?: string;\n labelClassName?: string;\n inputClassName?: string;\n countries?: CountryDial[];\n}\n\nexport const TelInput = forwardRef<HTMLInputElement, TelInputProps>(\n (props, ref) => {\n const {\n label,\n name,\n required,\n requiredClassName,\n className,\n labelClassName,\n inputClassName,\n countries,\n placeholder,\n value,\n onChange,\n } = props;\n\n const { allCountries, selected, localNumber, onSelectCountry, onChangeLocal } =\n useTelControl({ countries, name, value, onChange });\n\n const [open, setOpen] = useState(false);\n const [query, setQuery] = useState(\"\");\n const panelRef = useRef<HTMLDivElement | null>(null);\n const buttonRef = useRef<HTMLButtonElement | null>(null);\n\n useEffect(() => {\n const onDocClick = (e: MouseEvent) => {\n const target = e.target as Node;\n if (\n open &&\n panelRef.current &&\n !panelRef.current.contains(target) &&\n buttonRef.current &&\n !buttonRef.current.contains(target)\n ) {\n setOpen(false);\n }\n };\n document.addEventListener(\"mousedown\", onDocClick);\n return () => document.removeEventListener(\"mousedown\", onDocClick);\n }, [open]);\n\n // 使用 useTelControl 负责解析与变更回传\n\n const filtered: CountryDial[] = useMemo(() => {\n if (!query) return allCountries;\n const q = query.toLowerCase();\n return allCountries.filter(\n (c: CountryDial) =>\n c.name.toLowerCase().includes(q) ||\n (c.region && c.region.toLowerCase().includes(q)) ||\n c.dialCode.replace(\"+\", \"\").includes(q.replace(\"+\", \"\"))\n );\n }, [allCountries, query]);\n\n return (\n <div className={clsx(\"w-full\", className)}>\n {label ? (\n <label\n htmlFor={name}\n className={clsx(\n \"mb-1 inline-flex items-center text-sm text-gray-600\",\n labelClassName\n )}\n >\n {label}\n {required ? <span className={requiredClassName}>*</span> : null}\n </label>\n ) : null}\n\n <div\n className={clsx(\n \"flex h-10 items-center gap-2 rounded-md focus-within:ring-2 focus-within:ring-primary-300 focus-within:ring-offset-0 bg-white\",\n inputClassName\n )}\n >\n <div className=\"relative h-full\">\n <button\n ref={buttonRef}\n type=\"button\"\n aria-haspopup=\"listbox\"\n aria-expanded={open}\n onClick={() => setOpen((v) => !v)}\n className={\n \"h-full min-w-[200px] inline-flex items-center justify-between whitespace-nowrap rounded-md px-3 py-0 text-sm\"\n }\n >\n <span className=\"truncate text-left leading-tight\">\n {selected ? (\n <>\n <span className=\"font-medium\">{selected.name}</span>\n {selected.region ? (\n <span className=\"text-gray-500\">, {selected.region}</span>\n ) : null}\n <span className=\"ml-1 text-gray-700\">\n {selected.dialCode}\n </span>\n </>\n ) : (\n \"Select Country/Region\"\n )}\n </span>\n <svg\n className=\"ml-2 h-4 w-4 text-gray-500\"\n viewBox=\"0 0 20 20\"\n fill=\"currentColor\"\n aria-hidden=\"true\"\n >\n <path\n fillRule=\"evenodd\"\n d=\"M5.23 7.21a.75.75 0 011.06.02L10 11.085l3.71-3.855a.75.75 0 111.08 1.04l-4.24 4.41a.75.75 0 01-1.08 0L5.25 8.27a.75.75 0 01-.02-1.06z\"\n clipRule=\"evenodd\"\n />\n </svg>\n </button>\n\n {open ? (\n <div\n ref={panelRef}\n className=\"absolute z-50 mt-2 w-[320px] rounded-md border border-gray-200 bg-white p-2 shadow-lg\"\n >\n <div className=\"flex items-center gap-2 rounded-md border border-gray-200 px-2 py-1.5\">\n <input\n value={query}\n onChange={(e) => setQuery(e.target.value)}\n placeholder=\"Enter Country/Region\"\n className=\"h-8 w-full bg-transparent text-sm outline-none\"\n />\n <svg\n className=\"h-4 w-4 text-gray-500\"\n viewBox=\"0 0 20 20\"\n fill=\"currentColor\"\n aria-hidden=\"true\"\n >\n <path\n fillRule=\"evenodd\"\n d=\"M8.5 3.5a5 5 0 013.996 8.1l3.202 3.203a.75.75 0 11-1.06 1.06l-3.203-3.202A5 5 0 118.5 3.5zm0 1.5a3.5 3.5 0 100 7 3.5 3.5 0 000-7z\"\n clipRule=\"evenodd\"\n />\n </svg>\n </div>\n\n <div className=\"mt-2 max-h-64 overflow-auto pr-1\">\n {filtered.map((c: CountryDial) => (\n <button\n key={c.code}\n type=\"button\"\n onClick={() => {\n onSelectCountry(c);\n setOpen(false);\n }}\n className=\"flex w-full items-center gap-2 rounded-md px-2 py-2 text-left text-sm hover:bg-gray-50\"\n >\n <span\n className={clsx(\n \"inline-block h-3 w-3 rounded-full border\",\n selected?.code === c.code\n ? \"border-primary-500 ring-4 ring-primary-200\"\n : \"border-gray-400\"\n )}\n ></span>\n <span className=\"flex-1 truncate\">\n {c.name}\n {c.region ? (\n <span className=\"text-gray-500\">, {c.region}</span>\n ) : null}\n </span>\n <span className=\"text-gray-700\">{c.dialCode}</span>\n </button>\n ))}\n </div>\n </div>\n ) : null}\n </div>\n\n <input\n ref={ref}\n id={name}\n name={name}\n required={required}\n placeholder={placeholder || \"Phone number\"}\n inputMode=\"tel\"\n className={clsx(\"h-10 w-full px-3 py-0 text-sm leading-tight ring-0 outline-none rounded-md\")}\n value={localNumber}\n onChange={(e) => {\n const next = e.target.value;\n onChangeLocal(next);\n }}\n autoComplete={name}\n autoCorrect=\"off\"\n spellCheck={false}\n />\n </div>\n </div>\n );\n }\n);\n\nexport default TelInput;\n","import clsx from \"clsx\";\nimport { forwardRef, useEffect, useMemo, useRef, useState } from \"react\";\nimport type { CountryDial } from \"./countryDialCodes\";\nimport { useInlineLabelPadding } from \"./hooks/useInlineLabelPadding\";\nimport { useTelControl } from \"./hooks/useTelControl\";\n\nexport interface TelInputProps\n extends Omit<React.InputHTMLAttributes<HTMLInputElement>, \"type\"> {\n label?: string;\n name: string;\n required?: boolean;\n requiredClassName?: string;\n className?: string;\n labelClassName?: string;\n inputClassName?: string;\n countries?: CountryDial[];\n selectPlaceholder?: string;\n}\n\nexport const TelInput2 = forwardRef<HTMLInputElement, TelInputProps>(\n (props, ref) => {\n const {\n label,\n name,\n required,\n requiredClassName,\n className,\n labelClassName,\n inputClassName,\n countries,\n placeholder,\n selectPlaceholder,\n value,\n onChange,\n } = props;\n\n const { labelRef, paddingLeft } = useInlineLabelPadding(16);\n const {\n allCountries,\n selected,\n localNumber,\n onSelectCountry,\n onChangeLocal,\n } = useTelControl({ countries, name, value, onChange });\n\n const [open, setOpen] = useState(false);\n const [query, setQuery] = useState(\"\");\n const panelRef = useRef<HTMLDivElement | null>(null);\n const buttonRef = useRef<HTMLButtonElement | null>(null);\n\n const filtered = useMemo(() => {\n if (!query) return allCountries;\n const q = query.toLowerCase();\n return allCountries.filter(\n (c) =>\n c.name.toLowerCase().includes(q) ||\n (c.region && c.region.toLowerCase().includes(q)) ||\n c.dialCode.replace(\"+\", \"\").includes(q.replace(\"+\", \"\"))\n );\n }, [allCountries, query]);\n\n useEffect(() => {\n const onDocClick = (e: MouseEvent) => {\n const target = e.target as Node;\n if (\n open &&\n panelRef.current &&\n !panelRef.current.contains(target) &&\n buttonRef.current &&\n !buttonRef.current.contains(target)\n ) {\n setOpen(false);\n }\n };\n document.addEventListener(\"mousedown\", onDocClick);\n return () => document.removeEventListener(\"mousedown\", onDocClick);\n }, [open]);\n\n return (\n <div className={clsx(\"relative w-full\", className)}>\n <label\n ref={labelRef}\n htmlFor={name}\n className={clsx(\n \"absolute left-3 top-1/2 -translate-y-1/2 mt-1 opacity-70 text-sm pointer-events-none whitespace-nowrap\",\n labelClassName\n )}\n >\n {label}\n {required ? <span className={requiredClassName}>*</span> : null}\n </label>\n\n <div\n className={clsx(\n \"flex h-10 items-center gap-2 rounded-md shadow-sm focus-within:ring-2 focus-within:ring-primary-300\",\n inputClassName\n )}\n style={{ paddingLeft }}\n >\n <div className=\"relative h-full\">\n <button\n ref={buttonRef}\n type=\"button\"\n aria-haspopup=\"listbox\"\n aria-expanded={open}\n onClick={() => setOpen((v) => !v)}\n className={\n \"h-full min-w-[100px] inline-flex items-center justify-between whitespace-nowrap rounded-md px-3 py-0 text-sm\"\n }\n >\n <span className=\"truncate text-left leading-tight\">\n {selected ? (\n <span className=\"font-medium\">{selected.dialCode}</span>\n ) : (\n <span className=\"text-gray-500\">+ Code</span>\n )}\n </span>\n <svg\n className=\"ml-2 h-4 w-4 text-gray-500\"\n viewBox=\"0 0 20 20\"\n fill=\"currentColor\"\n aria-hidden=\"true\"\n >\n <path\n fillRule=\"evenodd\"\n d=\"M5.23 7.21a.75.75 0 011.06.02L10 11.085l3.71-3.855a.75.75 0 111.08 1.04l-4.24 4.41a.75.75 0 01-1.08 0L5.25 8.27a.75.75 0 01-.02-1.06z\"\n clipRule=\"evenodd\"\n />\n </svg>\n </button>\n\n {open ? (\n <div\n ref={panelRef}\n className=\"absolute z-50 mt-2 w-[320px] rounded-md border border-gray-200 bg-white p-2 shadow-lg\"\n >\n <div className=\"flex items-center gap-2 rounded-md border border-gray-200 px-2 py-1.5\">\n <input\n value={query}\n onChange={(e) => setQuery(e.target.value)}\n placeholder={selectPlaceholder || \"Enter Country/Region\"}\n className=\"h-8 w-full bg-transparent text-sm outline-none\"\n />\n <svg\n className=\"h-4 w-4 text-gray-500\"\n viewBox=\"0 0 20 20\"\n fill=\"currentColor\"\n aria-hidden=\"true\"\n >\n <path\n fillRule=\"evenodd\"\n d=\"M8.5 3.5a5 5 0 013.996 8.1l3.202 3.203a.75.75 0 11-1.06 1.06l-3.203-3.202A5 5 0 118.5 3.5zm0 1.5a3.5 3.5 0 100 7 3.5 3.5 0 000-7z\"\n clipRule=\"evenodd\"\n />\n </svg>\n </div>\n\n <div className=\"mt-2 max-h-64 overflow-auto pr-1\">\n {filtered.map((c) => (\n <button\n key={c.code}\n type=\"button\"\n onClick={() => {\n onSelectCountry(c);\n setOpen(false);\n }}\n className=\"flex w-full items-center gap-2 rounded-md px-2 py-2 text-left text-sm hover:bg-gray-50\"\n >\n <span\n className={clsx(\n \"inline-block h-3 w-3 rounded-full border\",\n selected?.code === c.code\n ? \"border-primary-500 ring-4 ring-primary-200\"\n : \"border-gray-400\"\n )}\n ></span>\n <span className=\"flex-1 truncate\">\n {c.name}\n {c.region ? (\n <span className=\"text-gray-500\">, {c.region}</span>\n ) : null}\n </span>\n <span className=\"text-gray-700\">{c.dialCode}</span>\n </button>\n ))}\n </div>\n </div>\n ) : null}\n </div>\n\n <input\n ref={ref}\n id={name}\n name={name}\n required={required}\n placeholder={placeholder || \"Phone number\"}\n inputMode=\"tel\"\n className={clsx(\n \"h-10 w-full appearance-none rounded-md border-0 bg-transparent px-3 py-0 text-sm leading-tight focus:outline-none\"\n )}\n value={localNumber}\n onChange={(e) => onChangeLocal(e.target.value)}\n autoComplete={name}\n autoCorrect=\"off\"\n spellCheck={false}\n />\n </div>\n </div>\n );\n }\n);\n\nexport default TelInput2;\n","import { FileUpload2, FileUploadProps } from \"./FileUpload2\";\nimport { Input } from \"./Input\";\nimport { Input2 } from \"./Input2\";\nimport { Textarea } from \"./Textarea\";\nimport { Textarea2 } from \"./Textarea2\";\nimport TelInput from \"./TelInput\";\nimport TelInput2 from \"./TelInput2\";\nimport { FieldStyle } from \"./types\";\n\nexport const getControl = (controlName?: string, fieldStyle?: FieldStyle) => {\n switch (controlName) {\n case \"Input\":\n return getInput(fieldStyle);\n case \"Textarea\":\n return getTextarea(fieldStyle);\n case \"TelInput\":\n return getTelInput(fieldStyle);\n default:\n return getInput(fieldStyle);\n }\n};\n\nexport const getInput = (fieldStyle?: FieldStyle) => {\n if (fieldStyle === \"default\") {\n return Input;\n } else if (fieldStyle === \"label-inline\") {\n return Input2;\n } else {\n return Input;\n }\n};\n\nexport const getTextarea = (fieldStyle?: FieldStyle) => {\n if (fieldStyle === \"default\") {\n return Textarea;\n } else if (fieldStyle === \"label-inline\") {\n return Textarea2;\n } else {\n return Textarea;\n }\n};\n\nexport const getTelInput = (fieldStyle?: FieldStyle) => {\n if (fieldStyle === \"label-inline\") {\n return TelInput2;\n }\n return TelInput;\n};\n\nexport const getFileUpload = (\n fieldStyle?: FieldStyle\n): React.FC<FileUploadProps> => {\n if (fieldStyle === \"default\") {\n return FileUpload2;\n } else if (fieldStyle === \"label-inline\") {\n return FileUpload2;\n } else {\n return FileUpload2;\n }\n};\n","import { forwardRef, useState } from \"react\";\nimport { Submit } from \"./Submit\";\nimport { type UploadedFile } from \"./FileUpload2\";\nimport clsx from \"clsx\";\nimport { encrypt } from \"./funcs\";\nimport { ContactFormProps, QuoteRequest } from \"./types\";\nimport { getControl, getFileUpload } from \"./factory\";\n\ninterface FormErrors {\n name?: string;\n email?: string;\n message?: string;\n}\n\nexport const ContactForm = forwardRef<HTMLDivElement, ContactFormProps>(\n (props, ref) => {\n const {\n submit,\n actionUrl = \"/api/ask-for-quote\",\n formSalt,\n fields = [],\n className,\n classNames,\n fromCta,\n ...rest\n } = props;\n const [formData, setFormData] = useState<QuoteRequest>({\n name: \"\",\n email: \"\",\n company: \"\",\n message: \"\",\n phone: \"\", // 初始化蜜罐字段\n attachments: [], // 附件 ID 列表\n });\n // 错误状态\n const [errors, setErrors] = useState<FormErrors>({});\n const [submitting, setSubmitting] = useState(false);\n const [isUploading, setIsUploading] = useState(false);\n const [submitStatus, setSubmitStatus] = useState<{\n success?: boolean;\n message?: string;\n }>({});\n const lastCta = (window as Window & { lastCta?: string }).lastCta;\n\n // 处理输入变化\n const handleChange = (\n e: React.ChangeEvent<HTMLInputElement | HTMLTextAreaElement>,\n isExtends?: boolean\n ) => {\n const { name, value } = e.target;\n if (isExtends) {\n setFormData((prev) => ({\n ...prev,\n extents: {\n ...(prev.extends || {}),\n [name]: value,\n },\n }));\n } else {\n setFormData((prev) => ({\n ...prev,\n [name]: value,\n }));\n }\n\n setSubmitStatus({}); // 重置提交状态\n\n // 清除对应字段的错误\n if (errors[name as keyof FormErrors]) {\n setErrors((prev) => ({\n ...prev,\n [name]: undefined,\n }));\n }\n };\n\n // 处理文件上传变化(单文件)\n const handleFileChange = (fileInfo: UploadedFile | null) => {\n setFormData((prev) => ({\n ...prev,\n attachments: fileInfo ? [fileInfo] : [], // 存储完整的文件信息\n }));\n };\n\n // 处理文件上传状态变化\n const handleFileUploadStateChange = (uploading: boolean) => {\n setIsUploading(uploading);\n };\n // 验证表单\n const validateForm = (): boolean => {\n const newErrors: FormErrors = {};\n\n // if (!formData.name?.trim()) {\n // newErrors.name = \"Please enter your name\";\n // }\n\n if (!formData.email?.trim()) {\n newErrors.email = \"Please enter your email\";\n } else if (!/^[^\\s@]+@[^\\s@]+\\.[^\\s@]+$/.test(formData.email)) {\n newErrors.email = \"Please enter a valid email address\";\n }\n\n if (!formData.message?.trim()) {\n newErrors.message = \"Please enter your message\";\n }\n\n // 检查蜜罐字段 - 如果填写了则表示是机器人\n if (formData.phone) {\n // 悄悄失败,不显示错误信息\n console.log(\"Honeypot triggered - likely spam submission\");\n return false;\n }\n\n setErrors(newErrors);\n return Object.keys(newErrors).length === 0;\n };\n\n const handleClick = async (event: React.MouseEvent) => {\n event.preventDefault(); // 阻止表单默认提交行为\n\n // 验证表单\n if (!validateForm()) {\n return; // 如果验证失败,不继续提交\n }\n\n try {\n setSubmitting(true);\n setSubmitStatus({}); // 重置提交状态\n const response = await fetch(actionUrl, {\n method: \"POST\",\n body: JSON.stringify({\n ...formData,\n //TODO:后面改成从window 或者传入\n fromCta: fromCta || lastCta,\n encryptedField: encrypt(formData.phone, formSalt),\n }),\n headers: {\n \"X-Request-URL\": window.location.href,\n \"Content-Type\": \"application/json\",\n },\n });\n\n if (!response.ok) {\n throw new Error(`Server responded with status: ${response.status}`);\n }\n\n const result = await response.json();\n\n setSubmitStatus({\n success: result.success,\n message: result.message,\n });\n\n if (result.success) {\n // 重置表单\n setFormData({\n name: \"\",\n email: \"\",\n company: \"\",\n message: \"\",\n phone: \"\",\n attachments: [],\n });\n window.location.href = \"/thanks\";\n }\n } catch (error) {\n // 如果出现错误,打印错误信息\n console.error(\"Form submission error:\", error);\n setSubmitStatus({\n success: false,\n message:\n error instanceof Error\n ? `Error: ${error.message}`\n : \"Failed to submit the form. Please try again later.\",\n });\n } finally {\n setSubmitting(false);\n }\n };\n\n return (\n <div\n ref={ref}\n className={clsx(\n \"py-4 grid max-w-2xl grid-cols-1 gap-x-6 sm:grid-cols-2 w-full\",\n className || \"gap-y-6\"\n )}\n {...rest}\n >\n {fields.map((field, index) => {\n const {\n controlName,\n feildStyle,\n isExtends,\n name,\n className,\n inputClassName,\n labelClassName,\n ...rest\n } = field;\n\n // FileUpload 组件特殊处理\n if (controlName === \"FileUpload\") {\n const FileUploadControl = getFileUpload(feildStyle);\n return (\n <FileUploadControl\n key={name || index}\n name={name || \"attachments\"}\n formSalt={formSalt}\n className={clsx(classNames?.inputContainer, className)}\n inputClassName={clsx(classNames?.input, inputClassName)}\n labelClassName={clsx(classNames?.label, labelClassName)}\n maxSize={3 * 1024 * 1024}\n onChange={handleFileChange}\n onUploadStateChange={handleFileUploadStateChange}\n placeholder=\"Click to select file\"\n uploadingText=\"Uploading...\"\n selectedText=\"Selected: {name}\"\n accept=\"*/*\"\n {...rest}\n />\n );\n }\n\n // 普通输入控件\n const Control = getControl(controlName, feildStyle);\n return (\n <Control\n key={name || index}\n name={name}\n className={clsx(classNames?.inputContainer, className)}\n labelClassName={clsx(classNames?.label, labelClassName)}\n inputClassName={clsx(classNames?.input, inputClassName)}\n requiredClassName={classNames?.required}\n value={formData[name as keyof QuoteRequest] as string}\n onChange={(e) => handleChange(e, isExtends)}\n error={errors[name as keyof FormErrors]}\n {...rest}\n />\n );\n })}\n\n {/* 蜜罐字段 - 对用户隐藏但对机器人可见 */}\n <div style={{ display: \"none\" }}>\n <input\n type=\"text\"\n name=\"phone\"\n value={formData.phone}\n onChange={handleChange}\n tabIndex={-1}\n autoComplete=\"off\"\n />\n </div>\n <div\n className={clsx(\n \"col-span-full flex items-center gap-x-6 px-0 py-2\",\n submit?.containerClassName\n )}\n >\n {submitStatus.message && !submitStatus.success && (\n <div\n className={`text-sm ${\n submitStatus.success ? \"text-green-600\" : \"text-red-600\"\n }`}\n >\n {submitStatus.message}\n </div>\n )}\n <Submit\n className={clsx(\n \"flex gap-2 items-center relative shadow-sm btn btn-lg nowrap\",\n submit?.className || \"btn-primary\"\n )}\n title={submit?.title || \"Send Message\"}\n spinner={\n <div className=\"left-8 flex items-center justify-center\">\n <div className=\"animate-spin rounded-full h-5 w-5 border-t-2 border-b-2 border-white\" />\n </div>\n }\n rawHtml={submit?.rawHtml}\n needClasses={submit?.needClasses}\n submitting={submitting}\n disabled={submitting || isUploading}\n onClick={handleClick}\n />\n </div>\n </div>\n );\n }\n);\n"],"names":["jsxs","Fragment","jsx","error","countries","defaultCountries","className","rest"],"mappings":"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"}
1
+ {"version":3,"file":"forms.mjs","sources":["../src/components/ContactForm/Submit.tsx","../src/components/ContactForm/funcs.ts","../src/components/ContactForm/hooks/useInlineLabelPadding.ts","../src/components/ContactForm/FileUpload2.tsx","../src/components/ContactForm/Input.tsx","../src/components/ContactForm/Input2.tsx","../src/components/ContactForm/Textarea.tsx","../src/components/ContactForm/Textarea2.tsx","../src/components/ContactForm/countryDialCodes.ts","../src/components/ContactForm/hooks/useTelControl.ts","../src/components/ContactForm/TelInput.tsx","../src/components/ContactForm/TelInput2.tsx","../src/components/ContactForm/factory.tsx","../src/components/ContactForm/ContactForm.tsx"],"sourcesContent":["export type SubmitProps = {\n needClasses?: string;\n title: string;\n className?: string;\n rawHtml?: string;\n spinner?: React.ReactNode;\n submitting?: boolean;\n disabled?: boolean;\n onClick?: (e: React.MouseEvent) => void;\n};\n\nexport const Submit: React.FC<SubmitProps> = (props) => {\n const {\n title = \"Send Message\",\n className,\n spinner,\n submitting,\n disabled,\n onClick,\n rawHtml,\n needClasses,\n ...rest\n } = props;\n return (\n <>\n <button\n type=\"button\"\n className={className}\n disabled={disabled ?? submitting}\n onClick={onClick}\n {...rest}\n >\n {submitting && spinner}\n {rawHtml ? (\n <div\n style={{ display: \"contents\" }}\n dangerouslySetInnerHTML={{ __html: rawHtml }}\n />\n ) : (\n title\n )}\n </button>\n <span className=\"fixed -z-10 top-0 left-0 w-0 h-0 overflow-hidden opacity-0 pointer-events-none\">\n <span className={needClasses}></span>\n </span>\n </>\n );\n};\n","/**\n * 简单的加密函数,用于生成防机器人的加密字段\n * @param value 需要加密的值\n * @returns 加密后的字符串\n */\nexport const encrypt = (value: string, formSalt: string): string => {\n // 获取当前时间戳,精确到分钟级别(防止频繁变化)\n const timestamp = Math.floor(Date.now() / (60 * 1000));\n\n // 将时间戳与盐值和输入值组合\n const dataToEncrypt = `${formSalt}:${timestamp}:${value}`;\n\n // 使用简单的哈希算法\n let hash = 0;\n for (let i = 0; i < dataToEncrypt.length; i++) {\n const char = dataToEncrypt.charCodeAt(i);\n hash = (hash << 5) - hash + char;\n hash = hash & hash; // 转换为32位整数\n }\n\n // 转换为16进制字符串并添加时间戳信息\n return `${hash.toString(16)}_${timestamp}`;\n};\n\n/**\n * 验证加密字段是否有效\n * @param encryptedValue 加密后的字符串\n * @param originalValue 原始值(如蜜罐字段的值)\n * @param maxAgeMinutes 最大有效时间(分钟)\n * @returns 是否有效\n */\nexport const verifyEncryption = (\n formSalt: string,\n encryptedValue: string = \"\",\n originalValue: string = \"\",\n maxAgeMinutes: number = 30\n): boolean => {\n // 解析加密值\n const parts = encryptedValue.split(\"_\");\n if (parts.length !== 2) {\n return false; // 格式不正确\n }\n\n const [hashString, timestampString] = parts;\n const timestamp = parseInt(timestampString, 10);\n\n // 验证时间戳是否在有效期内\n const currentTimestamp = Math.floor(Date.now() / (60 * 1000));\n if (isNaN(timestamp) || currentTimestamp - timestamp > maxAgeMinutes) {\n return false; // 时间戳无效或已过期\n }\n\n // 重新计算哈希值\n const dataToEncrypt = `${formSalt}:${timestamp}:${originalValue}`;\n let hash = 0;\n for (let i = 0; i < dataToEncrypt.length; i++) {\n const char = dataToEncrypt.charCodeAt(i);\n hash = (hash << 5) - hash + char;\n hash = hash & hash;\n }\n\n // 比较哈希值\n return hashString === hash.toString(16);\n};\n","import { useEffect, useRef, useState } from \"react\";\n\n/**\n * 计算内联标签布局所需的 paddingLeft(= label 宽度 + 额外间距)\n * - 返回 labelRef 供 <label ref={labelRef} /> 绑定\n * - 返回 paddingLeft 用于内层输入/容器 style\n */\nexport function useInlineLabelPadding(extraSpace: number = 16) {\n const labelRef = useRef<HTMLLabelElement>(null);\n const [paddingLeft, setPaddingLeft] = useState<string>(\"3.5rem\");\n\n useEffect(() => {\n const labelEl = labelRef.current;\n if (!labelEl) return;\n\n let rafId = 0;\n const measure = () => {\n const width = labelEl.getBoundingClientRect().width;\n setPaddingLeft(`${width + extraSpace}px`);\n };\n\n measure();\n rafId = requestAnimationFrame(measure);\n\n if (typeof ResizeObserver === \"undefined\") {\n return () => {\n cancelAnimationFrame(rafId);\n };\n }\n\n const ro = new ResizeObserver(() => {\n measure();\n });\n ro.observe(labelEl);\n\n return () => {\n cancelAnimationFrame(rafId);\n ro.disconnect();\n };\n }, [extraSpace]);\n\n return { labelRef, paddingLeft } as const;\n}\n","import clsx from \"clsx\";\nimport { forwardRef, useRef, useState } from \"react\";\nimport { useInlineLabelPadding } from \"./hooks/useInlineLabelPadding\";\n\n/**\n * Simple encryption function for generating anti-bot encrypted fields\n */\nconst generateEncryption = (formSalt: string, value: string): string => {\n const timestamp = Math.floor(Date.now() / (60 * 1000));\n const dataToEncrypt = `${formSalt}:${timestamp}:${value}`;\n\n let hash = 0;\n for (let i = 0; i < dataToEncrypt.length; i++) {\n const char = dataToEncrypt.charCodeAt(i);\n hash = (hash << 5) - hash + char;\n hash = hash & hash;\n }\n\n return `${hash.toString(16)}_${timestamp}`;\n};\n\nexport type UploadedFile = {\n id: string;\n name: string;\n size: number;\n url: string; // OSS public URL\n};\n\nexport type FileUploadProps = {\n label: string;\n name: string;\n required?: boolean;\n className?: string;\n labelClassName?: string;\n inputClassName?: string;\n accept?: string;\n onChange?: (fileInfo: UploadedFile | null) => void;\n onUploadStateChange?: (isUploading: boolean) => void;\n error?: string;\n placeholder?: string;\n uploadingText?: string;\n selectedText?: string;\n formSalt?: string; // 加密盐\n maxSize?: number; // 最大文件大小(字节),默认 5MB\n};\n\nexport const FileUpload2 = forwardRef<HTMLInputElement, FileUploadProps>(\n (props, ref) => {\n const {\n label,\n name,\n required,\n className,\n labelClassName,\n inputClassName,\n accept = \"*/*\",\n onChange,\n onUploadStateChange,\n error,\n placeholder = \"Click to select file\",\n uploadingText = \"Uploading...\",\n selectedText = \"Selected: {name}\",\n formSalt = \"default-salt\",\n maxSize = 5 * 1024 * 1024,\n ...rest\n } = props;\n\n const [uploadedFile, setUploadedFile] = useState<UploadedFile | null>(null);\n const [isUploading, setIsUploading] = useState(false);\n const [uploadError, setUploadError] = useState<string>(\"\");\n const fileInputRef = useRef<HTMLInputElement>(null);\n const { labelRef, paddingLeft } = useInlineLabelPadding(16);\n const abortControllerRef = useRef<AbortController | null>(null);\n\n // Upload single file\n const uploadFile = async (\n file: File,\n signal: AbortSignal\n ): Promise<UploadedFile> => {\n // Validate file size\n if (file.size > maxSize) {\n throw new Error(\n `File ${file.name} exceeds maximum size limit of ${\n maxSize / 1024 / 1024\n }MB`\n );\n }\n\n // Generate encrypted field with honeypot value\n const honeypot = \"\";\n const encryptedField = generateEncryption(formSalt, honeypot);\n\n // 1. Get upload credentials\n const credentialsResponse = await fetch(\"/api/get-upload-credentials\", {\n method: \"POST\",\n headers: {\n \"Content-Type\": \"application/json\",\n },\n body: JSON.stringify({\n fileName: file.name,\n fileSize: file.size,\n fileType: file.type,\n mediaType: \"document\", // Request document type credentials (usually R2)\n encryptedField,\n honeypot,\n }),\n signal,\n });\n\n if (!credentialsResponse.ok) {\n const errorData = await credentialsResponse.json();\n throw new Error(\n errorData.message || \"Failed to get upload credentials\"\n );\n }\n\n const credentialsData = await credentialsResponse.json();\n\n if (!credentialsData.success) {\n throw new Error(\n credentialsData.message || \"Failed to get upload credentials\"\n );\n }\n\n // Extract upload information from response\n const { credentials, mediaType } = credentialsData;\n const uploadUrl = credentials?.uploadUrl;\n const platform = credentials?.platform;\n\n if (!uploadUrl) {\n throw new Error(\"Failed to get upload URL\");\n }\n\n // 2. Upload to cloud storage\n\n let uploadResponse: Response;\n\n // Use different upload methods based on platform type\n if (platform === \"cloudflare_images\") {\n // Cloudflare Images uses FormData + POST\n const formData = new FormData();\n formData.append(\"file\", file);\n\n uploadResponse = await fetch(uploadUrl, {\n method: \"POST\",\n body: formData,\n signal,\n });\n } else {\n // Other platforms use PUT (e.g., pre-signed URLs)\n uploadResponse = await fetch(uploadUrl, {\n method: \"PUT\",\n headers: {\n \"Content-Type\": file.type,\n },\n body: file,\n signal,\n });\n }\n\n if (!uploadResponse.ok) {\n throw new Error(\n `File upload failed: ${uploadResponse.status} ${uploadResponse.statusText}`\n );\n }\n\n // Get resource identifier after upload\n let resourceId: string;\n let publicUrl: string;\n\n if (platform === \"cloudflare_images\") {\n // Cloudflare Images returns JSON, extract result.id\n const uploadResult = await uploadResponse.json();\n resourceId = uploadResult?.result?.id || uploadUrl;\n // Construct Cloudflare Images public URL\n // Format: https://imagedelivery.net/{account_hash}/{image_id}/public\n const accountHash = uploadUrl.split(\"/\")[3]; // Extract from upload URL\n publicUrl = `https://imagedelivery.net/${accountHash}/${resourceId}/public`;\n } else if (platform === \"cloudflare_r2\") {\n // Cloudflare R2: uploadUrl is already the public URL (pre-signed or public bucket URL)\n resourceId = uploadUrl.split(\"/\").pop() || uploadUrl; // Extract filename from URL\n publicUrl = uploadUrl; // Use the upload URL as public URL\n } else {\n // Other platforms use uploadUrl as resource identifier\n resourceId = uploadUrl;\n publicUrl = uploadUrl;\n }\n\n // 3. Insert Media object into database\n const mediaPayload = {\n name: file.name,\n size: file.size,\n mimeType: file.type,\n mediaType,\n resourceUrl: resourceId,\n storageType: platform || \"cloudflare_images\",\n encryptedField,\n honeypot,\n };\n\n const createMediaResponse = await fetch(\"/api/create-media\", {\n method: \"POST\",\n headers: {\n \"Content-Type\": \"application/json\",\n },\n body: JSON.stringify(mediaPayload),\n signal,\n });\n\n if (!createMediaResponse.ok) {\n const errorData = await createMediaResponse.json();\n throw new Error(errorData.message || \"Failed to create Media object\");\n }\n\n const mediaData = await createMediaResponse.json();\n\n if (!mediaData.success) {\n throw new Error(mediaData.message || \"Failed to create Media object\");\n }\n\n // Return uploaded file information\n return {\n id: mediaData.mediaId,\n name: file.name,\n size: file.size,\n url: publicUrl, // Use public URL instead of resource ID\n };\n };\n\n const handleFileChange = async (e: React.ChangeEvent<HTMLInputElement>) => {\n const files = e.target.files;\n\n if (!files || files.length === 0) return;\n\n const file = files[0]; // Only take the first file\n\n // Create new AbortController\n const abortController = new AbortController();\n abortControllerRef.current = abortController;\n\n setIsUploading(true);\n onUploadStateChange?.(true); // 通知父组件开始上传\n setUploadError(\"\");\n\n try {\n // Validate file size\n if (file.size > maxSize) {\n throw new Error(\n `File ${file.name} exceeds ${maxSize / 1024 / 1024}MB limit`\n );\n }\n\n // Upload file\n const uploadedFileData = await uploadFile(file, abortController.signal);\n setUploadedFile(uploadedFileData);\n onChange?.(uploadedFileData); // Pass complete file info\n } catch (error) {\n // Don't show error if user cancelled\n if (error instanceof Error && error.name === \"AbortError\") {\n console.log(\"User cancelled upload\");\n } else {\n console.error(\"File upload failed:\", error);\n setUploadError(\n error instanceof Error ? error.message : \"File upload failed\"\n );\n }\n } finally {\n setIsUploading(false);\n onUploadStateChange?.(false); // 通知父组件上传结束\n abortControllerRef.current = null;\n // Clear input to allow re-selecting the same file\n if (fileInputRef.current) {\n fileInputRef.current.value = \"\";\n }\n }\n };\n\n const handleClick = () => {\n // Don't allow selection if uploading or file already exists\n if (isUploading || uploadedFile) return;\n fileInputRef.current?.click();\n };\n\n const handleRemoveFile = (e: React.MouseEvent) => {\n e.stopPropagation();\n setUploadedFile(null);\n onChange?.(null); // Pass null when file is removed\n setUploadError(\"\");\n };\n\n const handleCancelUpload = (e: React.MouseEvent) => {\n e.stopPropagation();\n if (abortControllerRef.current) {\n abortControllerRef.current.abort();\n }\n };\n\n const getDisplayText = () => {\n if (isUploading) return uploadingText;\n if (uploadedFile) {\n return selectedText.replace(\"{name}\", uploadedFile.name);\n }\n return placeholder;\n };\n\n return (\n <div\n ref={ref}\n className={clsx(\"relative w-full\", className)}\n {...rest}\n >\n <label\n ref={labelRef}\n htmlFor={name}\n className={clsx(\n \"absolute left-3 top-1/2 -translate-y-1/2 mt-1 opacity-70 text-sm pointer-events-none whitespace-nowrap z-10\",\n labelClassName\n )}\n >\n {label}\n </label>\n\n {/* Hidden file input */}\n <input\n ref={fileInputRef}\n type=\"file\"\n id={name}\n name={name}\n required={required}\n accept={accept}\n onChange={handleFileChange}\n disabled={!!uploadedFile}\n className=\"hidden\"\n />\n\n {/* Simulated input box upload area */}\n <div\n onClick={handleClick}\n className={clsx(\n \"w-full pr-3 py-2 border border-gray-300 rounded-md focus:outline-none focus:ring-2 focus:ring-primary-300 bg-transparent transition-colors duration-200 flex items-center justify-start min-h-[2.5rem]\",\n isUploading || uploadedFile\n ? \"cursor-not-allowed opacity-75\"\n : \"cursor-pointer hover:bg-white\",\n inputClassName\n )}\n style={{ paddingLeft }}\n >\n <span\n className={clsx(\n \"pl-6 text-sm font-medium flex-1 mr-4\",\n uploadedFile ? \"text-gray-900\" : \"text-gray-600\"\n )}\n >\n {getDisplayText()}\n </span>\n {isUploading ? (\n <button\n type=\"button\"\n onClick={handleCancelUpload}\n className=\"ml-2 p-1 hover:bg-gray-100 rounded-full transition-colors flex-shrink-0 flex items-center gap-1\"\n title=\"Cancel upload\"\n >\n <div className=\"animate-spin rounded-full h-4 w-4 border-t-2 border-b-2 border-primary-500\" />\n <svg\n className=\"w-3 h-3 text-gray-500\"\n fill=\"none\"\n stroke=\"currentColor\"\n viewBox=\"0 0 24 24\"\n >\n <path\n strokeLinecap=\"round\"\n strokeLinejoin=\"round\"\n strokeWidth={2}\n d=\"M6 18L18 6M6 6l12 12\"\n />\n </svg>\n </button>\n ) : uploadedFile ? (\n <button\n type=\"button\"\n onClick={handleRemoveFile}\n className=\"ml-2 p-1 hover:bg-red-100 rounded-full transition-colors flex-shrink-0\"\n title=\"Delete file\"\n >\n <svg\n className=\"w-4 h-4 text-red-500\"\n fill=\"none\"\n stroke=\"currentColor\"\n viewBox=\"0 0 24 24\"\n >\n <path\n strokeLinecap=\"round\"\n strokeLinejoin=\"round\"\n strokeWidth={2}\n d=\"M6 18L18 6M6 6l12 12\"\n />\n </svg>\n </button>\n ) : (\n <svg\n className=\"w-5 h-5 text-gray-400 flex-shrink-0\"\n fill=\"none\"\n stroke=\"currentColor\"\n viewBox=\"0 0 24 24\"\n >\n <path\n strokeLinecap=\"round\"\n strokeLinejoin=\"round\"\n strokeWidth={2}\n d=\"M4 16l4.586-4.586a2 2 0 012.828 0L16 16m-2-2l1.586-1.586a2 2 0 012.828 0L20 14m-6-6h.01M6 20h12a2 2 0 002-2V6a2 2 0 00-2-2H6a2 2 0 00-2 2v12a2 2 0 002 2z\"\n />\n </svg>\n )}\n </div>\n\n {/* Display error message */}\n {(error || uploadError) && (\n <p className=\"text-red-500 mt-1 text-sm\">{error || uploadError}</p>\n )}\n </div>\n );\n }\n);\n","import { forwardRef } from \"react\";\nimport { FieldConfig } from \"./types\";\n\nexport type InputProps = Omit<FieldConfig, \"feildStyle\"> & {\n requiredClassName?: string;\n value?: string;\n onChange?: (e: React.ChangeEvent<HTMLInputElement>) => void;\n error?: string;\n};\n\nexport const Input = forwardRef<HTMLInputElement, InputProps>((props, ref) => {\n const {\n label,\n name,\n required,\n requiredClassName,\n labelClassName,\n inputClassName,\n type,\n autoFocus,\n value,\n onChange,\n error,\n ...rest\n } = props;\n\n return (\n <div {...rest}>\n <label htmlFor={name} className={labelClassName}>\n {label}\n {required ? <span className={requiredClassName}>*</span> : \"\"}\n </label>\n <input\n ref={ref}\n type={type || \"text\"}\n id={name}\n name={name}\n required={required}\n className={inputClassName}\n autoComplete={name}\n autoFocus={autoFocus}\n value={value}\n onChange={onChange}\n />\n {error && <p className=\"text-red-500 mt-1\">{error}</p>}\n </div>\n );\n});\n","import clsx from \"clsx\";\nimport { forwardRef } from \"react\";\nimport { InputProps } from \"./Input\";\nimport { useInlineLabelPadding } from \"./hooks/useInlineLabelPadding\";\n\nexport const Input2 = forwardRef<HTMLInputElement, InputProps>((props, ref) => {\n const {\n label,\n name,\n required,\n requiredClassName,\n className,\n labelClassName,\n inputClassName,\n type = \"text\",\n autoFocus,\n value,\n placeholder,\n onChange,\n error,\n ...rest\n } = props;\n\n const { labelRef, paddingLeft } = useInlineLabelPadding(16);\n\n return (\n <div className={clsx(\"relative w-full\", className)} {...rest}>\n <label\n ref={labelRef}\n htmlFor={name}\n className={clsx(\n \"absolute left-3 top-1/2 -translate-y-1/2 mt-1 opacity-70 text-sm pointer-events-none whitespace-nowrap\",\n labelClassName\n )}\n >\n {label}\n {required ? <span className={requiredClassName}>*</span> : \"\"}\n </label>\n <input\n ref={ref}\n type={type}\n id={name}\n name={name}\n required={required}\n placeholder={placeholder}\n className={clsx(\n \"w-full pr-3 py-2 border border-gray-300 rounded-md focus:outline-none focus:ring-2 focus:ring-primary-300 bg-transparent focus:bg-white transition-colors duration-200\",\n inputClassName\n )}\n style={{ paddingLeft }}\n autoComplete={name}\n autoFocus={autoFocus}\n value={value}\n onChange={onChange}\n />\n {error && <p className=\"text-red-500 mt-1 text-sm\">{error}</p>}\n </div>\n );\n});\n","import { forwardRef } from \"react\";\nimport { FieldConfig } from \"./types\";\n\nexport type TextareaProps = Omit<FieldConfig, \"feildStyle\"> & {\n requiredClassName?: string;\n value?: string;\n onChange?: (e: React.ChangeEvent<HTMLTextAreaElement>) => void;\n error?: string;\n};\n\nexport const Textarea = forwardRef<HTMLTextAreaElement, TextareaProps>(\n (props, ref) => {\n const {\n label,\n name,\n required,\n requiredClassName,\n labelClassName,\n inputClassName,\n rows = 8,\n value,\n onChange,\n error,\n ...rest\n } = props;\n\n return (\n <div {...rest}>\n <label htmlFor={name} className={labelClassName}>\n {label}\n {required ? <span className={requiredClassName}>*</span> : \"\"}\n </label>\n <textarea\n ref={ref}\n id={name}\n name={name}\n required={required}\n className={inputClassName}\n rows={rows}\n value={value}\n onChange={onChange}\n autoComplete={name}\n />\n {error && <p className=\"text-red-500 mt-1\">{error}</p>}\n </div>\n );\n }\n);\n","import { forwardRef, useRef, useEffect, useState } from \"react\";\nimport { TextareaProps } from \"./Textarea\";\n\nexport const Textarea2 = forwardRef<HTMLTextAreaElement, TextareaProps>(\n (props, ref) => {\n const {\n label,\n name,\n required,\n requiredClassName,\n labelClassName,\n inputClassName,\n className,\n rows = 6,\n value,\n onChange,\n error,\n ...rest\n } = props;\n\n const [paddingTop, setPaddingTop] = useState(\"2.5rem\");\n const labelRef = useRef<HTMLLabelElement>(null);\n\n useEffect(() => {\n const labelEl = labelRef.current;\n if (!labelEl) return;\n\n let rafId = 0;\n const measure = () => {\n const height = labelEl.getBoundingClientRect().height;\n setPaddingTop(`${height + 12}px`);\n };\n\n measure();\n rafId = requestAnimationFrame(measure);\n\n if (typeof ResizeObserver === \"undefined\") {\n return () => {\n cancelAnimationFrame(rafId);\n };\n }\n\n const ro = new ResizeObserver(() => {\n measure();\n });\n ro.observe(labelEl);\n\n return () => {\n cancelAnimationFrame(rafId);\n ro.disconnect();\n };\n }, [label]);\n\n return (\n <div className={className} {...rest}>\n <div className=\"relative w-full\">\n <label\n ref={labelRef}\n htmlFor={name}\n className={`absolute left-3 top-2 opacity-70 text-sm pointer-events-none ${\n labelClassName || \"\"\n }`}\n >\n {label}\n {required ? <span className={requiredClassName}>*</span> : \"\"}\n </label>\n <textarea\n ref={ref}\n id={name}\n name={name}\n required={required}\n rows={rows}\n value={value}\n onChange={onChange}\n autoComplete={name}\n style={{ paddingTop }}\n className={`w-full px-3 pb-2 border border-gray-300 rounded-md shadow-sm focus:outline-none \n focus:ring-2 focus:ring-primary-300 focus:border-transparent resize-y bg-transparent focus:bg-white transition-colors duration-200 ${\n inputClassName || \"\"\n }`}\n />\n </div>\n {error && <p className=\"text-red-500 mt-1 text-sm\">{error}</p>}\n </div>\n );\n }\n);\n\nTextarea2.displayName = \"Textarea2\";\n","export type CountryDial = {\n code: string; // ISO 3166-1 alpha-2\n name: string; // English name\n region?: string; // Continent/region label\n dialCode: string; // +NN\n};\n\n// Note: Names follow common English naming used in international forms.\n// Region is a coarse grouping for search hints.\nexport const countries: CountryDial[] = [\n { code: \"AF\", name: \"Afghanistan\", region: \"Asia\", dialCode: \"+93\" },\n { code: \"AL\", name: \"Albania\", region: \"Europe\", dialCode: \"+355\" },\n { code: \"DZ\", name: \"Algeria\", region: \"Africa\", dialCode: \"+213\" },\n { code: \"AS\", name: \"American Samoa\", region: \"Oceania\", dialCode: \"+1\" },\n { code: \"AD\", name: \"Andorra\", region: \"Europe\", dialCode: \"+376\" },\n { code: \"AO\", name: \"Angola\", region: \"Africa\", dialCode: \"+244\" },\n { code: \"AI\", name: \"Anguilla\", region: \"North America\", dialCode: \"+1\" },\n { code: \"AG\", name: \"Antigua and Barbuda\", region: \"North America\", dialCode: \"+1\" },\n { code: \"AR\", name: \"Argentina\", region: \"South America\", dialCode: \"+54\" },\n { code: \"AM\", name: \"Armenia\", region: \"Asia\", dialCode: \"+374\" },\n { code: \"AW\", name: \"Aruba\", region: \"North America\", dialCode: \"+297\" },\n { code: \"AU\", name: \"Australia\", region: \"Oceania\", dialCode: \"+61\" },\n { code: \"AT\", name: \"Austria\", region: \"Europe\", dialCode: \"+43\" },\n { code: \"AZ\", name: \"Azerbaijan\", region: \"Asia\", dialCode: \"+994\" },\n { code: \"BS\", name: \"Bahamas\", region: \"North America\", dialCode: \"+1\" },\n { code: \"BH\", name: \"Bahrain\", region: \"Asia\", dialCode: \"+973\" },\n { code: \"BD\", name: \"Bangladesh\", region: \"Asia\", dialCode: \"+880\" },\n { code: \"BB\", name: \"Barbados\", region: \"North America\", dialCode: \"+1\" },\n { code: \"BY\", name: \"Belarus\", region: \"Europe\", dialCode: \"+375\" },\n { code: \"BE\", name: \"Belgium\", region: \"Europe\", dialCode: \"+32\" },\n { code: \"BZ\", name: \"Belize\", region: \"North America\", dialCode: \"+501\" },\n { code: \"BJ\", name: \"Benin\", region: \"Africa\", dialCode: \"+229\" },\n { code: \"BM\", name: \"Bermuda\", region: \"North America\", dialCode: \"+1\" },\n { code: \"BT\", name: \"Bhutan\", region: \"Asia\", dialCode: \"+975\" },\n { code: \"BO\", name: \"Bolivia\", region: \"South America\", dialCode: \"+591\" },\n { code: \"BA\", name: \"Bosnia and Herzegovina\", region: \"Europe\", dialCode: \"+387\" },\n { code: \"BW\", name: \"Botswana\", region: \"Africa\", dialCode: \"+267\" },\n { code: \"BR\", name: \"Brazil\", region: \"South America\", dialCode: \"+55\" },\n { code: \"VG\", name: \"British Virgin Islands\", region: \"North America\", dialCode: \"+1\" },\n { code: \"BN\", name: \"Brunei\", region: \"Asia\", dialCode: \"+673\" },\n { code: \"BG\", name: \"Bulgaria\", region: \"Europe\", dialCode: \"+359\" },\n { code: \"BF\", name: \"Burkina Faso\", region: \"Africa\", dialCode: \"+226\" },\n { code: \"BI\", name: \"Burundi\", region: \"Africa\", dialCode: \"+257\" },\n { code: \"KH\", name: \"Cambodia\", region: \"Asia\", dialCode: \"+855\" },\n { code: \"CM\", name: \"Cameroon\", region: \"Africa\", dialCode: \"+237\" },\n { code: \"CA\", name: \"Canada\", region: \"North America\", dialCode: \"+1\" },\n { code: \"CV\", name: \"Cape Verde\", region: \"Africa\", dialCode: \"+238\" },\n { code: \"KY\", name: \"Cayman Islands\", region: \"North America\", dialCode: \"+1\" },\n { code: \"CF\", name: \"Central African Republic\", region: \"Africa\", dialCode: \"+236\" },\n { code: \"TD\", name: \"Chad\", region: \"Africa\", dialCode: \"+235\" },\n { code: \"CL\", name: \"Chile\", region: \"South America\", dialCode: \"+56\" },\n { code: \"CN\", name: \"China\", region: \"Asia\", dialCode: \"+86\" },\n { code: \"HK\", name: \"Hong Kong, China\", region: \"Asia\", dialCode: \"+852\" },\n { code: \"MO\", name: \"Macao, China\", region: \"Asia\", dialCode: \"+853\" },\n { code: \"TW\", name: \"Taiwan, China\", region: \"Asia\", dialCode: \"+886\" },\n { code: \"CO\", name: \"Colombia\", region: \"South America\", dialCode: \"+57\" },\n { code: \"KM\", name: \"Comoros\", region: \"Africa\", dialCode: \"+269\" },\n { code: \"CG\", name: \"Congo\", region: \"Africa\", dialCode: \"+242\" },\n { code: \"CD\", name: \"Congo (DRC)\", region: \"Africa\", dialCode: \"+243\" },\n { code: \"CR\", name: \"Costa Rica\", region: \"North America\", dialCode: \"+506\" },\n { code: \"CI\", name: \"Côte d’Ivoire\", region: \"Africa\", dialCode: \"+225\" },\n { code: \"HR\", name: \"Croatia\", region: \"Europe\", dialCode: \"+385\" },\n { code: \"CU\", name: \"Cuba\", region: \"North America\", dialCode: \"+53\" },\n { code: \"CY\", name: \"Cyprus\", region: \"Europe\", dialCode: \"+357\" },\n { code: \"CZ\", name: \"Czechia\", region: \"Europe\", dialCode: \"+420\" },\n { code: \"DK\", name: \"Denmark\", region: \"Europe\", dialCode: \"+45\" },\n { code: \"DJ\", name: \"Djibouti\", region: \"Africa\", dialCode: \"+253\" },\n { code: \"DM\", name: \"Dominica\", region: \"North America\", dialCode: \"+1\" },\n { code: \"DO\", name: \"Dominican Republic\", region: \"North America\", dialCode: \"+1\" },\n { code: \"EC\", name: \"Ecuador\", region: \"South America\", dialCode: \"+593\" },\n { code: \"EG\", name: \"Egypt\", region: \"Africa\", dialCode: \"+20\" },\n { code: \"SV\", name: \"El Salvador\", region: \"North America\", dialCode: \"+503\" },\n { code: \"GQ\", name: \"Equatorial Guinea\", region: \"Africa\", dialCode: \"+240\" },\n { code: \"ER\", name: \"Eritrea\", region: \"Africa\", dialCode: \"+291\" },\n { code: \"EE\", name: \"Estonia\", region: \"Europe\", dialCode: \"+372\" },\n { code: \"SZ\", name: \"Eswatini\", region: \"Africa\", dialCode: \"+268\" },\n { code: \"ET\", name: \"Ethiopia\", region: \"Africa\", dialCode: \"+251\" },\n { code: \"FO\", name: \"Faroe Islands\", region: \"Europe\", dialCode: \"+298\" },\n { code: \"FJ\", name: \"Fiji\", region: \"Oceania\", dialCode: \"+679\" },\n { code: \"FI\", name: \"Finland\", region: \"Europe\", dialCode: \"+358\" },\n { code: \"FR\", name: \"France\", region: \"Europe\", dialCode: \"+33\" },\n { code: \"GF\", name: \"French Guiana\", region: \"South America\", dialCode: \"+594\" },\n { code: \"PF\", name: \"French Polynesia\", region: \"Oceania\", dialCode: \"+689\" },\n { code: \"GA\", name: \"Gabon\", region: \"Africa\", dialCode: \"+241\" },\n { code: \"GM\", name: \"Gambia\", region: \"Africa\", dialCode: \"+220\" },\n { code: \"GE\", name: \"Georgia\", region: \"Asia\", dialCode: \"+995\" },\n { code: \"DE\", name: \"Germany\", region: \"Europe\", dialCode: \"+49\" },\n { code: \"GH\", name: \"Ghana\", region: \"Africa\", dialCode: \"+233\" },\n { code: \"GI\", name: \"Gibraltar\", region: \"Europe\", dialCode: \"+350\" },\n { code: \"GR\", name: \"Greece\", region: \"Europe\", dialCode: \"+30\" },\n { code: \"GL\", name: \"Greenland\", region: \"North America\", dialCode: \"+299\" },\n { code: \"GD\", name: \"Grenada\", region: \"North America\", dialCode: \"+1\" },\n { code: \"GP\", name: \"Guadeloupe\", region: \"North America\", dialCode: \"+590\" },\n { code: \"GU\", name: \"Guam\", region: \"Oceania\", dialCode: \"+1\" },\n { code: \"GT\", name: \"Guatemala\", region: \"North America\", dialCode: \"+502\" },\n { code: \"GG\", name: \"Guernsey\", region: \"Europe\", dialCode: \"+44\" },\n { code: \"GN\", name: \"Guinea\", region: \"Africa\", dialCode: \"+224\" },\n { code: \"GW\", name: \"Guinea-Bissau\", region: \"Africa\", dialCode: \"+245\" },\n { code: \"GY\", name: \"Guyana\", region: \"South America\", dialCode: \"+592\" },\n { code: \"HT\", name: \"Haiti\", region: \"North America\", dialCode: \"+509\" },\n { code: \"HN\", name: \"Honduras\", region: \"North America\", dialCode: \"+504\" },\n { code: \"HU\", name: \"Hungary\", region: \"Europe\", dialCode: \"+36\" },\n { code: \"IS\", name: \"Iceland\", region: \"Europe\", dialCode: \"+354\" },\n { code: \"IN\", name: \"India\", region: \"Asia\", dialCode: \"+91\" },\n { code: \"ID\", name: \"Indonesia\", region: \"Asia\", dialCode: \"+62\" },\n { code: \"IR\", name: \"Iran\", region: \"Asia\", dialCode: \"+98\" },\n { code: \"IQ\", name: \"Iraq\", region: \"Asia\", dialCode: \"+964\" },\n { code: \"IE\", name: \"Ireland\", region: \"Europe\", dialCode: \"+353\" },\n { code: \"IM\", name: \"Isle of Man\", region: \"Europe\", dialCode: \"+44\" },\n { code: \"IL\", name: \"Israel\", region: \"Asia\", dialCode: \"+972\" },\n { code: \"IT\", name: \"Italy\", region: \"Europe\", dialCode: \"+39\" },\n { code: \"JM\", name: \"Jamaica\", region: \"North America\", dialCode: \"+1\" },\n { code: \"JP\", name: \"Japan\", region: \"Asia\", dialCode: \"+81\" },\n { code: \"JE\", name: \"Jersey\", region: \"Europe\", dialCode: \"+44\" },\n { code: \"JO\", name: \"Jordan\", region: \"Asia\", dialCode: \"+962\" },\n { code: \"KZ\", name: \"Kazakhstan\", region: \"Asia\", dialCode: \"+7\" },\n { code: \"KE\", name: \"Kenya\", region: \"Africa\", dialCode: \"+254\" },\n { code: \"KI\", name: \"Kiribati\", region: \"Oceania\", dialCode: \"+686\" },\n { code: \"XK\", name: \"Kosovo\", region: \"Europe\", dialCode: \"+383\" },\n { code: \"KW\", name: \"Kuwait\", region: \"Asia\", dialCode: \"+965\" },\n { code: \"KG\", name: \"Kyrgyzstan\", region: \"Asia\", dialCode: \"+996\" },\n { code: \"LA\", name: \"Laos\", region: \"Asia\", dialCode: \"+856\" },\n { code: \"LV\", name: \"Latvia\", region: \"Europe\", dialCode: \"+371\" },\n { code: \"LB\", name: \"Lebanon\", region: \"Asia\", dialCode: \"+961\" },\n { code: \"LS\", name: \"Lesotho\", region: \"Africa\", dialCode: \"+266\" },\n { code: \"LR\", name: \"Liberia\", region: \"Africa\", dialCode: \"+231\" },\n { code: \"LY\", name: \"Libya\", region: \"Africa\", dialCode: \"+218\" },\n { code: \"LI\", name: \"Liechtenstein\", region: \"Europe\", dialCode: \"+423\" },\n { code: \"LT\", name: \"Lithuania\", region: \"Europe\", dialCode: \"+370\" },\n { code: \"LU\", name: \"Luxembourg\", region: \"Europe\", dialCode: \"+352\" },\n { code: \"MG\", name: \"Madagascar\", region: \"Africa\", dialCode: \"+261\" },\n { code: \"MW\", name: \"Malawi\", region: \"Africa\", dialCode: \"+265\" },\n { code: \"MY\", name: \"Malaysia\", region: \"Asia\", dialCode: \"+60\" },\n { code: \"MV\", name: \"Maldives\", region: \"Asia\", dialCode: \"+960\" },\n { code: \"ML\", name: \"Mali\", region: \"Africa\", dialCode: \"+223\" },\n { code: \"MT\", name: \"Malta\", region: \"Europe\", dialCode: \"+356\" },\n { code: \"MH\", name: \"Marshall Islands\", region: \"Oceania\", dialCode: \"+692\" },\n { code: \"MQ\", name: \"Martinique\", region: \"North America\", dialCode: \"+596\" },\n { code: \"MR\", name: \"Mauritania\", region: \"Africa\", dialCode: \"+222\" },\n { code: \"MU\", name: \"Mauritius\", region: \"Africa\", dialCode: \"+230\" },\n { code: \"YT\", name: \"Mayotte\", region: \"Africa\", dialCode: \"+262\" },\n { code: \"MX\", name: \"Mexico\", region: \"North America\", dialCode: \"+52\" },\n { code: \"FM\", name: \"Micronesia\", region: \"Oceania\", dialCode: \"+691\" },\n { code: \"MD\", name: \"Moldova\", region: \"Europe\", dialCode: \"+373\" },\n { code: \"MC\", name: \"Monaco\", region: \"Europe\", dialCode: \"+377\" },\n { code: \"MN\", name: \"Mongolia\", region: \"Asia\", dialCode: \"+976\" },\n { code: \"ME\", name: \"Montenegro\", region: \"Europe\", dialCode: \"+382\" },\n { code: \"MS\", name: \"Montserrat\", region: \"North America\", dialCode: \"+1\" },\n { code: \"MA\", name: \"Morocco\", region: \"Africa\", dialCode: \"+212\" },\n { code: \"MZ\", name: \"Mozambique\", region: \"Africa\", dialCode: \"+258\" },\n { code: \"MM\", name: \"Myanmar\", region: \"Asia\", dialCode: \"+95\" },\n { code: \"NA\", name: \"Namibia\", region: \"Africa\", dialCode: \"+264\" },\n { code: \"NR\", name: \"Nauru\", region: \"Oceania\", dialCode: \"+674\" },\n { code: \"NP\", name: \"Nepal\", region: \"Asia\", dialCode: \"+977\" },\n { code: \"NL\", name: \"Netherlands\", region: \"Europe\", dialCode: \"+31\" },\n { code: \"NC\", name: \"New Caledonia\", region: \"Oceania\", dialCode: \"+687\" },\n { code: \"NZ\", name: \"New Zealand\", region: \"Oceania\", dialCode: \"+64\" },\n { code: \"NI\", name: \"Nicaragua\", region: \"North America\", dialCode: \"+505\" },\n { code: \"NE\", name: \"Niger\", region: \"Africa\", dialCode: \"+227\" },\n { code: \"NG\", name: \"Nigeria\", region: \"Africa\", dialCode: \"+234\" },\n { code: \"NU\", name: \"Niue\", region: \"Oceania\", dialCode: \"+683\" },\n { code: \"NF\", name: \"Norfolk Island\", region: \"Oceania\", dialCode: \"+672\" },\n { code: \"KP\", name: \"North Korea\", region: \"Asia\", dialCode: \"+850\" },\n { code: \"MK\", name: \"North Macedonia\", region: \"Europe\", dialCode: \"+389\" },\n { code: \"MP\", name: \"Northern Mariana Islands\", region: \"Oceania\", dialCode: \"+1\" },\n { code: \"NO\", name: \"Norway\", region: \"Europe\", dialCode: \"+47\" },\n { code: \"OM\", name: \"Oman\", region: \"Asia\", dialCode: \"+968\" },\n { code: \"PK\", name: \"Pakistan\", region: \"Asia\", dialCode: \"+92\" },\n { code: \"PW\", name: \"Palau\", region: \"Oceania\", dialCode: \"+680\" },\n { code: \"PS\", name: \"Palestine\", region: \"Asia\", dialCode: \"+970\" },\n { code: \"PA\", name: \"Panama\", region: \"North America\", dialCode: \"+507\" },\n { code: \"PG\", name: \"Papua New Guinea\", region: \"Oceania\", dialCode: \"+675\" },\n { code: \"PY\", name: \"Paraguay\", region: \"South America\", dialCode: \"+595\" },\n { code: \"PE\", name: \"Peru\", region: \"South America\", dialCode: \"+51\" },\n { code: \"PH\", name: \"Philippines\", region: \"Asia\", dialCode: \"+63\" },\n { code: \"PL\", name: \"Poland\", region: \"Europe\", dialCode: \"+48\" },\n { code: \"PT\", name: \"Portugal\", region: \"Europe\", dialCode: \"+351\" },\n { code: \"PR\", name: \"Puerto Rico\", region: \"North America\", dialCode: \"+1\" },\n { code: \"QA\", name: \"Qatar\", region: \"Asia\", dialCode: \"+974\" },\n { code: \"RE\", name: \"Réunion\", region: \"Africa\", dialCode: \"+262\" },\n { code: \"RO\", name: \"Romania\", region: \"Europe\", dialCode: \"+40\" },\n { code: \"RU\", name: \"Russia\", region: \"Europe\", dialCode: \"+7\" },\n { code: \"RW\", name: \"Rwanda\", region: \"Africa\", dialCode: \"+250\" },\n { code: \"BL\", name: \"Saint Barthélemy\", region: \"North America\", dialCode: \"+590\" },\n { code: \"KN\", name: \"Saint Kitts and Nevis\", region: \"North America\", dialCode: \"+1\" },\n { code: \"LC\", name: \"Saint Lucia\", region: \"North America\", dialCode: \"+1\" },\n { code: \"MF\", name: \"Saint Martin\", region: \"North America\", dialCode: \"+590\" },\n { code: \"PM\", name: \"Saint Pierre and Miquelon\", region: \"North America\", dialCode: \"+508\" },\n { code: \"VC\", name: \"Saint Vincent and the Grenadines\", region: \"North America\", dialCode: \"+1\" },\n { code: \"WS\", name: \"Samoa\", region: \"Oceania\", dialCode: \"+685\" },\n { code: \"SM\", name: \"San Marino\", region: \"Europe\", dialCode: \"+378\" },\n { code: \"ST\", name: \"São Tomé and Príncipe\", region: \"Africa\", dialCode: \"+239\" },\n { code: \"SA\", name: \"Saudi Arabia\", region: \"Asia\", dialCode: \"+966\" },\n { code: \"SN\", name: \"Senegal\", region: \"Africa\", dialCode: \"+221\" },\n { code: \"RS\", name: \"Serbia\", region: \"Europe\", dialCode: \"+381\" },\n { code: \"SC\", name: \"Seychelles\", region: \"Africa\", dialCode: \"+248\" },\n { code: \"SL\", name: \"Sierra Leone\", region: \"Africa\", dialCode: \"+232\" },\n { code: \"SG\", name: \"Singapore\", region: \"Asia\", dialCode: \"+65\" },\n { code: \"SX\", name: \"Sint Maarten\", region: \"North America\", dialCode: \"+1\" },\n { code: \"SK\", name: \"Slovakia\", region: \"Europe\", dialCode: \"+421\" },\n { code: \"SI\", name: \"Slovenia\", region: \"Europe\", dialCode: \"+386\" },\n { code: \"SB\", name: \"Solomon Islands\", region: \"Oceania\", dialCode: \"+677\" },\n { code: \"SO\", name: \"Somalia\", region: \"Africa\", dialCode: \"+252\" },\n { code: \"ZA\", name: \"South Africa\", region: \"Africa\", dialCode: \"+27\" },\n { code: \"KR\", name: \"South Korea\", region: \"Asia\", dialCode: \"+82\" },\n { code: \"SS\", name: \"South Sudan\", region: \"Africa\", dialCode: \"+211\" },\n { code: \"ES\", name: \"Spain\", region: \"Europe\", dialCode: \"+34\" },\n { code: \"LK\", name: \"Sri Lanka\", region: \"Asia\", dialCode: \"+94\" },\n { code: \"SD\", name: \"Sudan\", region: \"Africa\", dialCode: \"+249\" },\n { code: \"SR\", name: \"Suriname\", region: \"South America\", dialCode: \"+597\" },\n { code: \"SE\", name: \"Sweden\", region: \"Europe\", dialCode: \"+46\" },\n { code: \"CH\", name: \"Switzerland\", region: \"Europe\", dialCode: \"+41\" },\n { code: \"SY\", name: \"Syria\", region: \"Asia\", dialCode: \"+963\" },\n { code: \"TJ\", name: \"Tajikistan\", region: \"Asia\", dialCode: \"+992\" },\n { code: \"TZ\", name: \"Tanzania\", region: \"Africa\", dialCode: \"+255\" },\n { code: \"TH\", name: \"Thailand\", region: \"Asia\", dialCode: \"+66\" },\n { code: \"TG\", name: \"Togo\", region: \"Africa\", dialCode: \"+228\" },\n { code: \"TK\", name: \"Tokelau\", region: \"Oceania\", dialCode: \"+690\" },\n { code: \"TO\", name: \"Tonga\", region: \"Oceania\", dialCode: \"+676\" },\n { code: \"TT\", name: \"Trinidad and Tobago\", region: \"North America\", dialCode: \"+1\" },\n { code: \"TN\", name: \"Tunisia\", region: \"Africa\", dialCode: \"+216\" },\n { code: \"TR\", name: \"Türkiye\", region: \"Europe\", dialCode: \"+90\" },\n { code: \"TM\", name: \"Turkmenistan\", region: \"Asia\", dialCode: \"+993\" },\n { code: \"TC\", name: \"Turks and Caicos Islands\", region: \"North America\", dialCode: \"+1\" },\n { code: \"TV\", name: \"Tuvalu\", region: \"Oceania\", dialCode: \"+688\" },\n { code: \"UG\", name: \"Uganda\", region: \"Africa\", dialCode: \"+256\" },\n { code: \"UA\", name: \"Ukraine\", region: \"Europe\", dialCode: \"+380\" },\n { code: \"AE\", name: \"United Arab Emirates\", region: \"Asia\", dialCode: \"+971\" },\n { code: \"GB\", name: \"United Kingdom\", region: \"Europe\", dialCode: \"+44\" },\n { code: \"US\", name: \"United States\", region: \"North America\", dialCode: \"+1\" },\n { code: \"UY\", name: \"Uruguay\", region: \"South America\", dialCode: \"+598\" },\n { code: \"UZ\", name: \"Uzbekistan\", region: \"Asia\", dialCode: \"+998\" },\n { code: \"VU\", name: \"Vanuatu\", region: \"Oceania\", dialCode: \"+678\" },\n { code: \"VA\", name: \"Vatican City\", region: \"Europe\", dialCode: \"+39\" },\n { code: \"VE\", name: \"Venezuela\", region: \"South America\", dialCode: \"+58\" },\n { code: \"VN\", name: \"Vietnam\", region: \"Asia\", dialCode: \"+84\" },\n { code: \"VI\", name: \"U.S. Virgin Islands\", region: \"North America\", dialCode: \"+1\" },\n { code: \"WF\", name: \"Wallis and Futuna\", region: \"Oceania\", dialCode: \"+681\" },\n { code: \"EH\", name: \"Western Sahara\", region: \"Africa\", dialCode: \"+212\" },\n { code: \"YE\", name: \"Yemen\", region: \"Asia\", dialCode: \"+967\" },\n { code: \"ZM\", name: \"Zambia\", region: \"Africa\", dialCode: \"+260\" },\n { code: \"ZW\", name: \"Zimbabwe\", region: \"Africa\", dialCode: \"+263\" },\n];\n","import { useEffect, useMemo, useState } from \"react\";\nimport type { CountryDial } from \"../countryDialCodes\";\nimport { countries as defaultCountries } from \"../countryDialCodes\";\n\nexport interface UseTelControlOptions {\n countries?: CountryDial[];\n name: string;\n value?: string | number | readonly string[] | undefined;\n onChange?: (e: React.ChangeEvent<HTMLInputElement>) => void;\n}\n\nexport function useTelControl({ countries, name, value, onChange }: UseTelControlOptions) {\n const allCountries = useMemo<CountryDial[]>(() => countries || defaultCountries, [countries]);\n\n const [selected, setSelected] = useState<CountryDial | null>(null);\n const [localNumber, setLocalNumber] = useState<string>(\"\");\n\n const toStringValue = (val?: string | number | readonly string[]) => {\n if (typeof val === \"string\") return val;\n if (typeof val === \"number\") return String(val);\n if (Array.isArray(val)) return val[0] ?? \"\";\n return \"\";\n };\n\n useEffect(() => {\n const s = toStringValue(value).trim();\n const m = s.match(/^\\+\\d{1,4}/);\n const dial = m ? m[0] : \"\";\n const number = s.slice(dial.length).trimStart();\n setLocalNumber(number || \"\");\n if (dial) {\n const found = allCountries.find((c) => c.dialCode === dial) || null;\n setSelected(found);\n } else {\n setSelected(null);\n }\n }, [value, allCountries]);\n\n const emitChange = (combined: string) => {\n if (!onChange) return;\n const evt = {\n target: { value: combined, name } as unknown,\n currentTarget: { value: combined, name } as unknown,\n } as unknown as React.ChangeEvent<HTMLInputElement>;\n onChange(evt);\n };\n\n const filtered = (query: string) => {\n if (!query) return allCountries;\n const q = query.toLowerCase();\n return allCountries.filter(\n (c) =>\n c.name.toLowerCase().includes(q) ||\n (c.region && c.region.toLowerCase().includes(q)) ||\n c.dialCode.replace(\"+\", \"\").includes(q.replace(\"+\", \"\"))\n );\n };\n\n const onSelectCountry = (c: CountryDial) => {\n setSelected(c);\n const combined = `${c.dialCode} ${localNumber}`.trim();\n emitChange(combined);\n };\n\n const onChangeLocal = (next: string) => {\n setLocalNumber(next);\n const combined = `${selected?.dialCode || \"\"} ${next}`.trim();\n emitChange(combined);\n };\n\n return {\n allCountries,\n selected,\n setSelected,\n localNumber,\n setLocalNumber,\n filtered,\n onSelectCountry,\n onChangeLocal,\n } as const;\n}\n","import clsx from \"clsx\";\nimport { forwardRef, useEffect, useMemo, useRef, useState } from \"react\";\nimport { CountryDial } from \"./countryDialCodes\";\nimport { useTelControl } from \"./hooks/useTelControl\";\n\nexport interface TelInputProps\n extends Omit<React.InputHTMLAttributes<HTMLInputElement>, \"type\"> {\n label?: string;\n name: string;\n required?: boolean;\n requiredClassName?: string;\n className?: string;\n labelClassName?: string;\n inputClassName?: string;\n countries?: CountryDial[];\n}\n\nexport const TelInput = forwardRef<HTMLInputElement, TelInputProps>(\n (props, ref) => {\n const {\n label,\n name,\n required,\n requiredClassName,\n className,\n labelClassName,\n inputClassName,\n countries,\n placeholder,\n value,\n onChange,\n } = props;\n\n const { allCountries, selected, localNumber, onSelectCountry, onChangeLocal } =\n useTelControl({ countries, name, value, onChange });\n\n const [open, setOpen] = useState(false);\n const [query, setQuery] = useState(\"\");\n const panelRef = useRef<HTMLDivElement | null>(null);\n const buttonRef = useRef<HTMLButtonElement | null>(null);\n\n useEffect(() => {\n const onDocClick = (e: MouseEvent) => {\n const target = e.target as Node;\n if (\n open &&\n panelRef.current &&\n !panelRef.current.contains(target) &&\n buttonRef.current &&\n !buttonRef.current.contains(target)\n ) {\n setOpen(false);\n }\n };\n document.addEventListener(\"mousedown\", onDocClick);\n return () => document.removeEventListener(\"mousedown\", onDocClick);\n }, [open]);\n\n // 使用 useTelControl 负责解析与变更回传\n\n const filtered: CountryDial[] = useMemo(() => {\n if (!query) return allCountries;\n const q = query.toLowerCase();\n return allCountries.filter(\n (c: CountryDial) =>\n c.name.toLowerCase().includes(q) ||\n (c.region && c.region.toLowerCase().includes(q)) ||\n c.dialCode.replace(\"+\", \"\").includes(q.replace(\"+\", \"\"))\n );\n }, [allCountries, query]);\n\n return (\n <div className={clsx(\"w-full\", className)}>\n {label ? (\n <label\n htmlFor={name}\n className={clsx(\n \"mb-1 inline-flex items-center text-sm text-gray-600\",\n labelClassName\n )}\n >\n {label}\n {required ? <span className={requiredClassName}>*</span> : null}\n </label>\n ) : null}\n\n <div\n className={clsx(\n \"flex h-10 items-center gap-2 rounded-md focus-within:ring-2 focus-within:ring-primary-300 focus-within:ring-offset-0 bg-white\",\n inputClassName\n )}\n >\n <div className=\"relative h-full\">\n <button\n ref={buttonRef}\n type=\"button\"\n aria-haspopup=\"listbox\"\n aria-expanded={open}\n onClick={() => setOpen((v) => !v)}\n className={\n \"h-full min-w-[200px] inline-flex items-center justify-between whitespace-nowrap rounded-md px-3 py-0 text-sm\"\n }\n >\n <span className=\"truncate text-left leading-tight\">\n {selected ? (\n <>\n <span className=\"font-medium\">{selected.name}</span>\n {selected.region ? (\n <span className=\"text-gray-500\">, {selected.region}</span>\n ) : null}\n <span className=\"ml-1 text-gray-700\">\n {selected.dialCode}\n </span>\n </>\n ) : (\n \"Select Country/Region\"\n )}\n </span>\n <svg\n className=\"ml-2 h-4 w-4 text-gray-500\"\n viewBox=\"0 0 20 20\"\n fill=\"currentColor\"\n aria-hidden=\"true\"\n >\n <path\n fillRule=\"evenodd\"\n d=\"M5.23 7.21a.75.75 0 011.06.02L10 11.085l3.71-3.855a.75.75 0 111.08 1.04l-4.24 4.41a.75.75 0 01-1.08 0L5.25 8.27a.75.75 0 01-.02-1.06z\"\n clipRule=\"evenodd\"\n />\n </svg>\n </button>\n\n {open ? (\n <div\n ref={panelRef}\n className=\"absolute z-50 mt-2 w-[320px] rounded-md border border-gray-200 bg-white p-2 shadow-lg\"\n >\n <div className=\"flex items-center gap-2 rounded-md border border-gray-200 px-2 py-1.5\">\n <input\n value={query}\n onChange={(e) => setQuery(e.target.value)}\n placeholder=\"Enter Country/Region\"\n className=\"h-8 w-full bg-transparent text-sm outline-none\"\n />\n <svg\n className=\"h-4 w-4 text-gray-500\"\n viewBox=\"0 0 20 20\"\n fill=\"currentColor\"\n aria-hidden=\"true\"\n >\n <path\n fillRule=\"evenodd\"\n d=\"M8.5 3.5a5 5 0 013.996 8.1l3.202 3.203a.75.75 0 11-1.06 1.06l-3.203-3.202A5 5 0 118.5 3.5zm0 1.5a3.5 3.5 0 100 7 3.5 3.5 0 000-7z\"\n clipRule=\"evenodd\"\n />\n </svg>\n </div>\n\n <div className=\"mt-2 max-h-64 overflow-auto pr-1\">\n {filtered.map((c: CountryDial) => (\n <button\n key={c.code}\n type=\"button\"\n onClick={() => {\n onSelectCountry(c);\n setOpen(false);\n }}\n className=\"flex w-full items-center gap-2 rounded-md px-2 py-2 text-left text-sm hover:bg-gray-50\"\n >\n <span\n className={clsx(\n \"inline-block h-3 w-3 rounded-full border\",\n selected?.code === c.code\n ? \"border-primary-500 ring-4 ring-primary-200\"\n : \"border-gray-400\"\n )}\n ></span>\n <span className=\"flex-1 truncate\">\n {c.name}\n {c.region ? (\n <span className=\"text-gray-500\">, {c.region}</span>\n ) : null}\n </span>\n <span className=\"text-gray-700\">{c.dialCode}</span>\n </button>\n ))}\n </div>\n </div>\n ) : null}\n </div>\n\n <input\n ref={ref}\n id={name}\n name={name}\n required={required}\n placeholder={placeholder || \"Phone number\"}\n inputMode=\"tel\"\n className={clsx(\"h-10 w-full px-3 py-0 text-sm leading-tight ring-0 outline-none rounded-md\")}\n value={localNumber}\n onChange={(e) => {\n const next = e.target.value;\n onChangeLocal(next);\n }}\n autoComplete={name}\n autoCorrect=\"off\"\n spellCheck={false}\n />\n </div>\n </div>\n );\n }\n);\n\nexport default TelInput;\n","import clsx from \"clsx\";\nimport { forwardRef, useEffect, useMemo, useRef, useState } from \"react\";\nimport type { CountryDial } from \"./countryDialCodes\";\nimport { useInlineLabelPadding } from \"./hooks/useInlineLabelPadding\";\nimport { useTelControl } from \"./hooks/useTelControl\";\n\nexport interface TelInputProps\n extends Omit<React.InputHTMLAttributes<HTMLInputElement>, \"type\"> {\n label?: string;\n name: string;\n required?: boolean;\n requiredClassName?: string;\n className?: string;\n labelClassName?: string;\n inputClassName?: string;\n countries?: CountryDial[];\n selectPlaceholder?: string;\n}\n\nexport const TelInput2 = forwardRef<HTMLInputElement, TelInputProps>(\n (props, ref) => {\n const {\n label,\n name,\n required,\n requiredClassName,\n className,\n labelClassName,\n inputClassName,\n countries,\n placeholder,\n selectPlaceholder,\n value,\n onChange,\n } = props;\n\n const { labelRef, paddingLeft } = useInlineLabelPadding(16);\n const {\n allCountries,\n selected,\n localNumber,\n onSelectCountry,\n onChangeLocal,\n } = useTelControl({ countries, name, value, onChange });\n\n const [open, setOpen] = useState(false);\n const [query, setQuery] = useState(\"\");\n const panelRef = useRef<HTMLDivElement | null>(null);\n const buttonRef = useRef<HTMLButtonElement | null>(null);\n\n const filtered = useMemo(() => {\n if (!query) return allCountries;\n const q = query.toLowerCase();\n return allCountries.filter(\n (c) =>\n c.name.toLowerCase().includes(q) ||\n (c.region && c.region.toLowerCase().includes(q)) ||\n c.dialCode.replace(\"+\", \"\").includes(q.replace(\"+\", \"\"))\n );\n }, [allCountries, query]);\n\n useEffect(() => {\n const onDocClick = (e: MouseEvent) => {\n const target = e.target as Node;\n if (\n open &&\n panelRef.current &&\n !panelRef.current.contains(target) &&\n buttonRef.current &&\n !buttonRef.current.contains(target)\n ) {\n setOpen(false);\n }\n };\n document.addEventListener(\"mousedown\", onDocClick);\n return () => document.removeEventListener(\"mousedown\", onDocClick);\n }, [open]);\n\n return (\n <div className={clsx(\"relative w-full\", className)}>\n <label\n ref={labelRef}\n htmlFor={name}\n className={clsx(\n \"absolute left-3 top-1/2 -translate-y-1/2 mt-1 opacity-70 text-sm pointer-events-none whitespace-nowrap\",\n labelClassName\n )}\n >\n {label}\n {required ? <span className={requiredClassName}>*</span> : null}\n </label>\n\n <div\n className={clsx(\n \"flex h-10 items-center gap-2 rounded-md shadow-sm focus-within:ring-2 focus-within:ring-primary-300\",\n inputClassName\n )}\n style={{ paddingLeft }}\n >\n <div className=\"relative h-full\">\n <button\n ref={buttonRef}\n type=\"button\"\n aria-haspopup=\"listbox\"\n aria-expanded={open}\n onClick={() => setOpen((v) => !v)}\n className={\n \"h-full min-w-[100px] inline-flex items-center justify-between whitespace-nowrap rounded-md px-3 py-0 text-sm\"\n }\n >\n <span className=\"truncate text-left leading-tight\">\n {selected ? (\n <span className=\"font-medium\">{selected.dialCode}</span>\n ) : (\n <span className=\"text-gray-500\">+ Code</span>\n )}\n </span>\n <svg\n className=\"ml-2 h-4 w-4 text-gray-500\"\n viewBox=\"0 0 20 20\"\n fill=\"currentColor\"\n aria-hidden=\"true\"\n >\n <path\n fillRule=\"evenodd\"\n d=\"M5.23 7.21a.75.75 0 011.06.02L10 11.085l3.71-3.855a.75.75 0 111.08 1.04l-4.24 4.41a.75.75 0 01-1.08 0L5.25 8.27a.75.75 0 01-.02-1.06z\"\n clipRule=\"evenodd\"\n />\n </svg>\n </button>\n\n {open ? (\n <div\n ref={panelRef}\n className=\"absolute z-50 mt-2 w-[320px] rounded-md border border-gray-200 bg-white p-2 shadow-lg\"\n >\n <div className=\"flex items-center gap-2 rounded-md border border-gray-200 px-2 py-1.5\">\n <input\n value={query}\n onChange={(e) => setQuery(e.target.value)}\n placeholder={selectPlaceholder || \"Enter Country/Region\"}\n className=\"h-8 w-full bg-transparent text-sm outline-none\"\n />\n <svg\n className=\"h-4 w-4 text-gray-500\"\n viewBox=\"0 0 20 20\"\n fill=\"currentColor\"\n aria-hidden=\"true\"\n >\n <path\n fillRule=\"evenodd\"\n d=\"M8.5 3.5a5 5 0 013.996 8.1l3.202 3.203a.75.75 0 11-1.06 1.06l-3.203-3.202A5 5 0 118.5 3.5zm0 1.5a3.5 3.5 0 100 7 3.5 3.5 0 000-7z\"\n clipRule=\"evenodd\"\n />\n </svg>\n </div>\n\n <div className=\"mt-2 max-h-64 overflow-auto pr-1\">\n {filtered.map((c) => (\n <button\n key={c.code}\n type=\"button\"\n onClick={() => {\n onSelectCountry(c);\n setOpen(false);\n }}\n className=\"flex w-full items-center gap-2 rounded-md px-2 py-2 text-left text-sm hover:bg-gray-50\"\n >\n <span\n className={clsx(\n \"inline-block h-3 w-3 rounded-full border\",\n selected?.code === c.code\n ? \"border-primary-500 ring-4 ring-primary-200\"\n : \"border-gray-400\"\n )}\n ></span>\n <span className=\"flex-1 truncate\">\n {c.name}\n {c.region ? (\n <span className=\"text-gray-500\">, {c.region}</span>\n ) : null}\n </span>\n <span className=\"text-gray-700\">{c.dialCode}</span>\n </button>\n ))}\n </div>\n </div>\n ) : null}\n </div>\n\n <input\n ref={ref}\n id={name}\n name={name}\n required={required}\n placeholder={placeholder || \"Phone number\"}\n inputMode=\"tel\"\n className={clsx(\n \"h-10 w-full appearance-none rounded-md border-0 bg-transparent px-3 py-0 text-sm leading-tight focus:outline-none\"\n )}\n value={localNumber}\n onChange={(e) => onChangeLocal(e.target.value)}\n autoComplete={name}\n autoCorrect=\"off\"\n spellCheck={false}\n />\n </div>\n </div>\n );\n }\n);\n\nexport default TelInput2;\n","import { FileUpload2, FileUploadProps } from \"./FileUpload2\";\nimport { Input } from \"./Input\";\nimport { Input2 } from \"./Input2\";\nimport { Textarea } from \"./Textarea\";\nimport { Textarea2 } from \"./Textarea2\";\nimport TelInput from \"./TelInput\";\nimport TelInput2 from \"./TelInput2\";\nimport { FieldStyle } from \"./types\";\n\nexport const getControl = (controlName?: string, fieldStyle?: FieldStyle) => {\n switch (controlName) {\n case \"Input\":\n return getInput(fieldStyle);\n case \"Textarea\":\n return getTextarea(fieldStyle);\n case \"TelInput\":\n return getTelInput(fieldStyle);\n default:\n return getInput(fieldStyle);\n }\n};\n\nexport const getInput = (fieldStyle?: FieldStyle) => {\n if (fieldStyle === \"default\") {\n return Input;\n } else if (fieldStyle === \"label-inline\") {\n return Input2;\n } else {\n return Input;\n }\n};\n\nexport const getTextarea = (fieldStyle?: FieldStyle) => {\n if (fieldStyle === \"default\") {\n return Textarea;\n } else if (fieldStyle === \"label-inline\") {\n return Textarea2;\n } else {\n return Textarea;\n }\n};\n\nexport const getTelInput = (fieldStyle?: FieldStyle) => {\n if (fieldStyle === \"label-inline\") {\n return TelInput2;\n }\n return TelInput;\n};\n\nexport const getFileUpload = (\n fieldStyle?: FieldStyle\n): React.FC<FileUploadProps> => {\n if (fieldStyle === \"default\") {\n return FileUpload2;\n } else if (fieldStyle === \"label-inline\") {\n return FileUpload2;\n } else {\n return FileUpload2;\n }\n};\n","import React, { forwardRef, useState } from \"react\";\nimport { Submit } from \"./Submit\";\nimport { type UploadedFile } from \"./FileUpload2\";\nimport clsx from \"clsx\";\nimport { encrypt } from \"./funcs\";\nimport { ContactFormProps, QuoteRequest } from \"./types\";\nimport { getControl, getFileUpload } from \"./factory\";\n\ninterface FormErrors {\n name?: string;\n email?: string;\n message?: string;\n}\n\nexport const ContactForm = forwardRef<HTMLDivElement, ContactFormProps>(\n (props, ref) => {\n const {\n submit,\n actionUrl = \"/api/ask-for-quote\",\n formSalt,\n fields = [],\n className,\n classNames,\n fromCta,\n ...rest\n } = props;\n const [formData, setFormData] = useState<QuoteRequest>({\n name: \"\",\n email: \"\",\n company: \"\",\n message: \"\",\n phone: \"\", // 初始化蜜罐字段\n attachments: [], // 附件 ID 列表\n });\n // 错误状态\n const [errors, setErrors] = useState<FormErrors>({});\n const [submitting, setSubmitting] = useState(false);\n const [isUploading, setIsUploading] = useState(false);\n const [submitStatus, setSubmitStatus] = useState<{\n success?: boolean;\n message?: string;\n }>({});\n const lastCta =\n typeof window === \"undefined\"\n ? undefined\n : (window as Window & { lastCta?: string }).lastCta;\n\n // 处理输入变化\n const handleChange = (\n e: React.ChangeEvent<HTMLInputElement | HTMLTextAreaElement>,\n isExtends?: boolean\n ) => {\n const { name, value } = e.target;\n if (isExtends) {\n setFormData((prev) => ({\n ...prev,\n extents: {\n ...(prev.extends || {}),\n [name]: value,\n },\n }));\n } else {\n setFormData((prev) => ({\n ...prev,\n [name]: value,\n }));\n }\n\n setSubmitStatus({}); // 重置提交状态\n\n // 清除对应字段的错误\n if (errors[name as keyof FormErrors]) {\n setErrors((prev) => ({\n ...prev,\n [name]: undefined,\n }));\n }\n };\n\n // 处理文件上传变化(单文件)\n const handleFileChange = (fileInfo: UploadedFile | null) => {\n setFormData((prev) => ({\n ...prev,\n attachments: fileInfo ? [fileInfo] : [], // 存储完整的文件信息\n }));\n };\n\n // 处理文件上传状态变化\n const handleFileUploadStateChange = (uploading: boolean) => {\n setIsUploading(uploading);\n };\n // 验证表单\n const validateForm = (): boolean => {\n const newErrors: FormErrors = {};\n\n // if (!formData.name?.trim()) {\n // newErrors.name = \"Please enter your name\";\n // }\n\n if (!formData.email?.trim()) {\n newErrors.email = \"Please enter your email\";\n } else if (!/^[^\\s@]+@[^\\s@]+\\.[^\\s@]+$/.test(formData.email)) {\n newErrors.email = \"Please enter a valid email address\";\n }\n\n if (!formData.message?.trim()) {\n newErrors.message = \"Please enter your message\";\n }\n\n // 检查蜜罐字段 - 如果填写了则表示是机器人\n if (formData.phone) {\n // 悄悄失败,不显示错误信息\n console.log(\"Honeypot triggered - likely spam submission\");\n return false;\n }\n\n setErrors(newErrors);\n return Object.keys(newErrors).length === 0;\n };\n\n const handleClick = async (event: React.MouseEvent) => {\n event.preventDefault(); // 阻止表单默认提交行为\n\n // 验证表单\n if (!validateForm()) {\n return; // 如果验证失败,不继续提交\n }\n\n try {\n setSubmitting(true);\n setSubmitStatus({}); // 重置提交状态\n const response = await fetch(actionUrl, {\n method: \"POST\",\n body: JSON.stringify({\n ...formData,\n //TODO:后面改成从window 或者传入\n fromCta: fromCta || lastCta,\n encryptedField: encrypt(formData.phone, formSalt),\n }),\n headers: {\n \"X-Request-URL\":\n typeof window === \"undefined\" ? \"\" : window.location.href,\n \"Content-Type\": \"application/json\",\n },\n });\n\n if (!response.ok) {\n throw new Error(`Server responded with status: ${response.status}`);\n }\n\n const result = await response.json();\n\n setSubmitStatus({\n success: result.success,\n message: result.message,\n });\n\n if (result.success) {\n // 重置表单\n setFormData({\n name: \"\",\n email: \"\",\n company: \"\",\n message: \"\",\n phone: \"\",\n attachments: [],\n });\n if (typeof window !== \"undefined\") {\n window.location.href = \"/thanks\";\n }\n }\n } catch (error) {\n // 如果出现错误,打印错误信息\n console.error(\"Form submission error:\", error);\n setSubmitStatus({\n success: false,\n message:\n error instanceof Error\n ? `Error: ${error.message}`\n : \"Failed to submit the form. Please try again later.\",\n });\n } finally {\n setSubmitting(false);\n }\n };\n\n return (\n <div\n ref={ref}\n className={clsx(\n \"py-4 grid max-w-2xl grid-cols-1 gap-x-6 sm:grid-cols-2 w-full\",\n className || \"gap-y-6\"\n )}\n {...rest}\n >\n {fields.map((field, index) => {\n const {\n controlName,\n feildStyle,\n isExtends,\n name,\n className,\n inputClassName,\n labelClassName,\n ...rest\n } = field;\n\n // FileUpload 组件特殊处理\n if (controlName === \"FileUpload\") {\n const FileUploadControl = getFileUpload(feildStyle);\n return (\n <FileUploadControl\n key={name || index}\n name={name || \"attachments\"}\n formSalt={formSalt}\n className={clsx(classNames?.inputContainer, className)}\n inputClassName={clsx(classNames?.input, inputClassName)}\n labelClassName={clsx(classNames?.label, labelClassName)}\n maxSize={3 * 1024 * 1024}\n onChange={handleFileChange}\n onUploadStateChange={handleFileUploadStateChange}\n placeholder=\"Click to select file\"\n uploadingText=\"Uploading...\"\n selectedText=\"Selected: {name}\"\n accept=\"*/*\"\n {...rest}\n />\n );\n }\n\n // 普通输入控件\n const Control = getControl(controlName, feildStyle);\n return (\n <Control\n key={name || index}\n name={name}\n className={clsx(classNames?.inputContainer, className)}\n labelClassName={clsx(classNames?.label, labelClassName)}\n inputClassName={clsx(classNames?.input, inputClassName)}\n requiredClassName={classNames?.required}\n value={formData[name as keyof QuoteRequest] as string}\n onChange={(e) => handleChange(e, isExtends)}\n error={errors[name as keyof FormErrors]}\n {...rest}\n />\n );\n })}\n\n {/* 蜜罐字段 - 对用户隐藏但对机器人可见 */}\n <div style={{ display: \"none\" }}>\n <input\n type=\"text\"\n name=\"phone\"\n value={formData.phone}\n onChange={handleChange}\n tabIndex={-1}\n autoComplete=\"off\"\n />\n </div>\n <div\n className={clsx(\n \"col-span-full flex items-center gap-x-6 px-0 py-2\",\n submit?.containerClassName\n )}\n >\n {submitStatus.message && !submitStatus.success && (\n <div\n className={`text-sm ${\n submitStatus.success ? \"text-green-600\" : \"text-red-600\"\n }`}\n >\n {submitStatus.message}\n </div>\n )}\n <Submit\n className={clsx(\n \"flex gap-2 items-center relative shadow-sm btn btn-lg nowrap\",\n submit?.className || \"btn-primary\"\n )}\n title={submit?.title || \"Send Message\"}\n spinner={\n <div className=\"left-8 flex items-center justify-center\">\n <div className=\"animate-spin rounded-full h-5 w-5 border-t-2 border-b-2 border-white\" />\n </div>\n }\n rawHtml={submit?.rawHtml}\n needClasses={submit?.needClasses}\n submitting={submitting}\n disabled={submitting || isUploading}\n onClick={handleClick}\n />\n </div>\n </div>\n );\n }\n);\n"],"names":["jsxs","Fragment","jsx","error","countries","defaultCountries","className","rest"],"mappings":"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"}