@rxdrag/website-lib-react 0.0.3 → 0.0.6
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/ReactModalTrigger-9207e763.js +26 -0
- package/dist/ReactModalTrigger-9207e763.js.map +1 -0
- package/dist/components/RichTextOutline/parseOutline.d.ts +5 -0
- package/dist/components/all.d.ts +0 -21
- package/dist/components/index.d.ts +0 -5
- package/dist/forms.d.ts +1 -0
- package/dist/forms.mjs +1647 -0
- package/dist/forms.mjs.map +1 -0
- package/dist/index.mjs +9 -3918
- package/dist/index.mjs.map +1 -1
- package/dist/jsx-runtime-c02cc059.js +325 -0
- package/dist/jsx-runtime-c02cc059.js.map +1 -0
- package/dist/media.d.ts +1 -0
- package/dist/media.mjs +613 -0
- package/dist/media.mjs.map +1 -0
- package/dist/richtext.d.ts +1 -0
- package/dist/richtext.mjs +191 -0
- package/dist/richtext.mjs.map +1 -0
- package/dist/ui.d.ts +10 -0
- package/dist/ui.mjs +687 -0
- package/dist/ui.mjs.map +1 -0
- package/dist/video.d.ts +2 -0
- package/dist/video.mjs +426 -0
- package/dist/video.mjs.map +1 -0
- package/forms.ts +1 -0
- package/index.ts +1 -0
- package/media.ts +1 -0
- package/package.json +41 -6
- package/richtext.ts +1 -0
- package/src/components/Analytics/eventHandlers.ts +173 -0
- package/src/components/Analytics/index.tsx +21 -0
- package/src/components/Analytics/singleton.ts +214 -0
- package/src/components/Analytics/tracking.ts +221 -0
- package/src/components/Analytics/types.ts +60 -0
- package/src/components/Analytics/utils.ts +95 -0
- package/src/components/AttachmentIcon/index.tsx +53 -0
- package/src/components/BackgroundHlsVideoPlayer.tsx +97 -0
- package/src/components/BackgroundVideoPlayer.tsx +32 -0
- package/src/components/Bulletin.tsx +30 -0
- package/src/components/ContactForm/ContactForm.tsx +290 -0
- package/src/components/ContactForm/FileUpload2.tsx +423 -0
- package/src/components/ContactForm/Input.tsx +48 -0
- package/src/components/ContactForm/Input2.tsx +59 -0
- package/src/components/ContactForm/Submit.tsx +48 -0
- package/src/components/ContactForm/TelInput.tsx +215 -0
- package/src/components/ContactForm/TelInput2.tsx +213 -0
- package/src/components/ContactForm/Textarea.tsx +48 -0
- package/src/components/ContactForm/Textarea2.tsx +89 -0
- package/src/components/ContactForm/countryDialCodes.ts +243 -0
- package/src/components/ContactForm/factory.tsx +60 -0
- package/src/components/ContactForm/funcs.ts +64 -0
- package/src/components/ContactForm/hooks/useInlineLabelPadding.ts +43 -0
- package/src/components/ContactForm/hooks/useTelControl.ts +81 -0
- package/src/components/ContactForm/index.ts +7 -0
- package/src/components/ContactForm/types.ts +68 -0
- package/src/components/Icon/index.tsx +20 -0
- package/src/components/Medias/MainMedia.tsx +257 -0
- package/src/components/Medias/Thumbnail.tsx +62 -0
- package/src/components/Medias/VideoPlayer.tsx +114 -0
- package/src/components/Medias/index.tsx +271 -0
- package/src/components/ProductCard/ProductCard.tsx +24 -0
- package/src/components/ProductCard/ProductCta/index.tsx +28 -0
- package/src/components/ProductCard/ProductCta/style.css +4 -0
- package/src/components/ProductCard/ProductDescription/index.tsx +13 -0
- package/src/components/ProductCard/ProductDescription/style.css +6 -0
- package/src/components/ProductCard/ProductMedia/index.tsx +35 -0
- package/src/components/ProductCard/ProductMedia/style.css +6 -0
- package/src/components/ProductCard/ProductTitle/index.tsx +7 -0
- package/src/components/ProductCard/ProductTitle/style.css +4 -0
- package/src/components/ProductCard/ProductView.tsx +36 -0
- package/src/components/ProductCard/index.ts +5 -0
- package/src/components/ProductCard/useQueryProduct.ts +32 -0
- package/src/components/ReactModalTrigger.tsx +28 -0
- package/src/components/ReactVideoPlayer.tsx +332 -0
- package/src/components/RichTextOutline/index.tsx +74 -0
- package/src/components/RichTextOutline/parseOutline.ts +63 -0
- package/src/components/RichTextOutline/useAcitviedHeading.ts +142 -0
- package/src/components/RichTextOutline/useAnchorScroll.ts +24 -0
- package/src/components/Scroller.tsx +39 -0
- package/src/components/SearchInput.tsx +21 -0
- package/src/components/Share/index.tsx +86 -0
- package/src/components/Share/socials.tsx +80 -0
- package/src/components/Share//350/265/204/346/226/231.md +7 -0
- package/src/components/ToTop.tsx +72 -0
- package/src/components/VideoPlayIcon.tsx +43 -0
- package/src/components/all.ts +25 -0
- package/src/components/index.ts +12 -0
- package/src/forms.ts +1 -0
- package/src/index.ts +1 -0
- package/src/media.ts +1 -0
- package/src/richtext.ts +1 -0
- package/src/types/view-model.ts +37 -0
- package/src/ui.ts +10 -0
- package/src/video.ts +2 -0
- package/ui.ts +1 -0
- package/video.ts +1 -0
- package/dist/style.css +0 -17
|
@@ -0,0 +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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"}
|