@fileflow/sdk 0.1.22 → 0.1.23

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.
@@ -1 +1 @@
1
- {"version":3,"file":"KYCWizard-BNEAS8HW.js","sources":["../../../node_modules/.pnpm/lucide-react@0.563.0_react@18.3.1/node_modules/lucide-react/dist/esm/icons/car.js","../../../node_modules/.pnpm/lucide-react@0.563.0_react@18.3.1/node_modules/lucide-react/dist/esm/icons/clock.js","../../../node_modules/.pnpm/lucide-react@0.563.0_react@18.3.1/node_modules/lucide-react/dist/esm/icons/file-text.js","../../../node_modules/.pnpm/lucide-react@0.563.0_react@18.3.1/node_modules/lucide-react/dist/esm/icons/house.js","../../../node_modules/.pnpm/lucide-react@0.563.0_react@18.3.1/node_modules/lucide-react/dist/esm/icons/image.js","../../../node_modules/.pnpm/lucide-react@0.563.0_react@18.3.1/node_modules/lucide-react/dist/esm/icons/shield-check.js","../../../node_modules/.pnpm/lucide-react@0.563.0_react@18.3.1/node_modules/lucide-react/dist/esm/icons/shield.js","../src/store/kyc-store.ts","../src/kyc/components/DocumentUploader.tsx","../src/kyc/components/DocumentStatus.tsx","../src/kyc/components/KYCWizard.tsx"],"sourcesContent":["/**\n * @license lucide-react v0.563.0 - ISC\n *\n * This source code is licensed under the ISC license.\n * See the LICENSE file in the root directory of this source tree.\n */\n\nimport createLucideIcon from '../createLucideIcon.js';\n\nconst __iconNode = [\n [\n \"path\",\n {\n d: \"M19 17h2c.6 0 1-.4 1-1v-3c0-.9-.7-1.7-1.5-1.9C18.7 10.6 16 10 16 10s-1.3-1.4-2.2-2.3c-.5-.4-1.1-.7-1.8-.7H5c-.6 0-1.1.4-1.4.9l-1.4 2.9A3.7 3.7 0 0 0 2 12v4c0 .6.4 1 1 1h2\",\n key: \"5owen\"\n }\n ],\n [\"circle\", { cx: \"7\", cy: \"17\", r: \"2\", key: \"u2ysq9\" }],\n [\"path\", { d: \"M9 17h6\", key: \"r8uit2\" }],\n [\"circle\", { cx: \"17\", cy: \"17\", r: \"2\", key: \"axvx0g\" }]\n];\nconst Car = createLucideIcon(\"car\", __iconNode);\n\nexport { __iconNode, Car as default };\n//# sourceMappingURL=car.js.map\n","/**\n * @license lucide-react v0.563.0 - ISC\n *\n * This source code is licensed under the ISC license.\n * See the LICENSE file in the root directory of this source tree.\n */\n\nimport createLucideIcon from '../createLucideIcon.js';\n\nconst __iconNode = [\n [\"path\", { d: \"M12 6v6l4 2\", key: \"mmk7yg\" }],\n [\"circle\", { cx: \"12\", cy: \"12\", r: \"10\", key: \"1mglay\" }]\n];\nconst Clock = createLucideIcon(\"clock\", __iconNode);\n\nexport { __iconNode, Clock as default };\n//# sourceMappingURL=clock.js.map\n","/**\n * @license lucide-react v0.563.0 - ISC\n *\n * This source code is licensed under the ISC license.\n * See the LICENSE file in the root directory of this source tree.\n */\n\nimport createLucideIcon from '../createLucideIcon.js';\n\nconst __iconNode = [\n [\n \"path\",\n {\n d: \"M6 22a2 2 0 0 1-2-2V4a2 2 0 0 1 2-2h8a2.4 2.4 0 0 1 1.704.706l3.588 3.588A2.4 2.4 0 0 1 20 8v12a2 2 0 0 1-2 2z\",\n key: \"1oefj6\"\n }\n ],\n [\"path\", { d: \"M14 2v5a1 1 0 0 0 1 1h5\", key: \"wfsgrz\" }],\n [\"path\", { d: \"M10 9H8\", key: \"b1mrlr\" }],\n [\"path\", { d: \"M16 13H8\", key: \"t4e002\" }],\n [\"path\", { d: \"M16 17H8\", key: \"z1uh3a\" }]\n];\nconst FileText = createLucideIcon(\"file-text\", __iconNode);\n\nexport { __iconNode, FileText as default };\n//# sourceMappingURL=file-text.js.map\n","/**\n * @license lucide-react v0.563.0 - ISC\n *\n * This source code is licensed under the ISC license.\n * See the LICENSE file in the root directory of this source tree.\n */\n\nimport createLucideIcon from '../createLucideIcon.js';\n\nconst __iconNode = [\n [\"path\", { d: \"M15 21v-8a1 1 0 0 0-1-1h-4a1 1 0 0 0-1 1v8\", key: \"5wwlr5\" }],\n [\n \"path\",\n {\n d: \"M3 10a2 2 0 0 1 .709-1.528l7-6a2 2 0 0 1 2.582 0l7 6A2 2 0 0 1 21 10v9a2 2 0 0 1-2 2H5a2 2 0 0 1-2-2z\",\n key: \"r6nss1\"\n }\n ]\n];\nconst House = createLucideIcon(\"house\", __iconNode);\n\nexport { __iconNode, House as default };\n//# sourceMappingURL=house.js.map\n","/**\n * @license lucide-react v0.563.0 - ISC\n *\n * This source code is licensed under the ISC license.\n * See the LICENSE file in the root directory of this source tree.\n */\n\nimport createLucideIcon from '../createLucideIcon.js';\n\nconst __iconNode = [\n [\"rect\", { width: \"18\", height: \"18\", x: \"3\", y: \"3\", rx: \"2\", ry: \"2\", key: \"1m3agn\" }],\n [\"circle\", { cx: \"9\", cy: \"9\", r: \"2\", key: \"af1f0g\" }],\n [\"path\", { d: \"m21 15-3.086-3.086a2 2 0 0 0-2.828 0L6 21\", key: \"1xmnt7\" }]\n];\nconst Image = createLucideIcon(\"image\", __iconNode);\n\nexport { __iconNode, Image as default };\n//# sourceMappingURL=image.js.map\n","/**\n * @license lucide-react v0.563.0 - ISC\n *\n * This source code is licensed under the ISC license.\n * See the LICENSE file in the root directory of this source tree.\n */\n\nimport createLucideIcon from '../createLucideIcon.js';\n\nconst __iconNode = [\n [\n \"path\",\n {\n d: \"M20 13c0 5-3.5 7.5-7.66 8.95a1 1 0 0 1-.67-.01C7.5 20.5 4 18 4 13V6a1 1 0 0 1 1-1c2 0 4.5-1.2 6.24-2.72a1.17 1.17 0 0 1 1.52 0C14.51 3.81 17 5 19 5a1 1 0 0 1 1 1z\",\n key: \"oel41y\"\n }\n ],\n [\"path\", { d: \"m9 12 2 2 4-4\", key: \"dzmm74\" }]\n];\nconst ShieldCheck = createLucideIcon(\"shield-check\", __iconNode);\n\nexport { __iconNode, ShieldCheck as default };\n//# sourceMappingURL=shield-check.js.map\n","/**\n * @license lucide-react v0.563.0 - ISC\n *\n * This source code is licensed under the ISC license.\n * See the LICENSE file in the root directory of this source tree.\n */\n\nimport createLucideIcon from '../createLucideIcon.js';\n\nconst __iconNode = [\n [\n \"path\",\n {\n d: \"M20 13c0 5-3.5 7.5-7.66 8.95a1 1 0 0 1-.67-.01C7.5 20.5 4 18 4 13V6a1 1 0 0 1 1-1c2 0 4.5-1.2 6.24-2.72a1.17 1.17 0 0 1 1.52 0C14.51 3.81 17 5 19 5a1 1 0 0 1 1 1z\",\n key: \"oel41y\"\n }\n ]\n];\nconst Shield = createLucideIcon(\"shield\", __iconNode);\n\nexport { __iconNode, Shield as default };\n//# sourceMappingURL=shield.js.map\n","import { create } from 'zustand';\nimport type { \n DocumentType, \n KYCDocument, \n DocumentStatus,\n FraudFlag,\n ExtractedData,\n} from '@fileflow/shared';\n\nexport type KYCStep = 'select' | 'upload' | 'processing' | 'review' | 'complete';\n\nexport interface DocumentState {\n id: string | null;\n type: DocumentType;\n status: DocumentStatus;\n file: File | null;\n previewUrl: string | null;\n extractedData: ExtractedData | null;\n confidence: number;\n fraudFlags: FraudFlag[];\n error: string | null;\n}\n\nexport interface KYCState {\n // Session\n sessionId: string | null;\n status: string;\n step: KYCStep;\n \n // Required documents\n requiredDocuments: DocumentType[];\n currentDocumentType: DocumentType | null;\n \n // Document states\n documents: Map<DocumentType, DocumentState>;\n \n // Verification\n isVerified: boolean;\n verificationStatus: object | null;\n \n // UI state\n isLoading: boolean;\n error: string | null;\n}\n\nexport interface KYCActions {\n // Initialize\n setSessionId: (sessionId: string) => void;\n setRequiredDocuments: (documents: DocumentType[]) => void;\n \n // Document management\n setCurrentDocumentType: (type: DocumentType) => void;\n setDocumentFile: (type: DocumentType, file: File) => void;\n setDocumentStatus: (type: DocumentType, status: DocumentStatus) => void;\n setDocumentData: (type: DocumentType, data: Partial<DocumentState>) => void;\n clearDocumentPreview: (type: DocumentType) => void;\n \n // Navigation\n setStep: (step: KYCStep) => void;\n nextDocument: () => void;\n \n // Verification\n setVerificationStatus: (status: object) => void;\n setVerified: (verified: boolean) => void;\n \n // Status\n setStatus: (status: string) => void;\n setLoading: (loading: boolean) => void;\n setError: (error: string | null) => void;\n \n // Helpers\n getNextRequiredDocument: () => DocumentType | null;\n areAllDocumentsUploaded: () => boolean;\n areAllDocumentsProcessed: () => boolean;\n \n // Reset\n reset: () => void;\n}\n\nconst createEmptyDocumentState = (type: DocumentType): DocumentState => ({\n id: null,\n type,\n status: 'uploaded',\n file: null,\n previewUrl: null,\n extractedData: null,\n confidence: 0,\n fraudFlags: [],\n error: null,\n});\n\nconst initialState: KYCState = {\n sessionId: null,\n status: 'idle',\n step: 'select',\n requiredDocuments: [],\n currentDocumentType: null,\n documents: new Map(),\n isVerified: false,\n verificationStatus: null,\n isLoading: false,\n error: null,\n};\n\nexport const useKYCStore = create<KYCState & KYCActions>((set, get) => ({\n ...initialState,\n\n setSessionId: (sessionId) => set({ sessionId }),\n\n setRequiredDocuments: (documents) => {\n const docsMap = new Map<DocumentType, DocumentState>();\n for (const type of documents) {\n docsMap.set(type, createEmptyDocumentState(type));\n }\n set({ \n requiredDocuments: documents, \n documents: docsMap,\n currentDocumentType: documents[0] || null,\n });\n },\n\n setCurrentDocumentType: (type) => set({ currentDocumentType: type }),\n\n setDocumentFile: (type, file) => {\n const { documents } = get();\n const doc = documents.get(type) || createEmptyDocumentState(type);\n \n // Create preview URL\n const previewUrl = URL.createObjectURL(file);\n \n const updated = new Map(documents);\n updated.set(type, {\n ...doc,\n file,\n previewUrl,\n status: 'uploaded',\n error: null,\n });\n \n set({ documents: updated });\n },\n\n setDocumentStatus: (type, status) => {\n const { documents } = get();\n const doc = documents.get(type);\n if (doc) {\n const updated = new Map(documents);\n updated.set(type, { ...doc, status });\n set({ documents: updated });\n }\n },\n\n setDocumentData: (type, data) => {\n const { documents } = get();\n const doc = documents.get(type);\n if (doc) {\n const updated = new Map(documents);\n updated.set(type, { ...doc, ...data });\n set({ documents: updated });\n }\n },\n\n clearDocumentPreview: (type) => {\n const { documents } = get();\n const doc = documents.get(type);\n if (doc?.previewUrl) {\n URL.revokeObjectURL(doc.previewUrl);\n }\n },\n\n setStep: (step) => set({ step }),\n\n nextDocument: () => {\n const { requiredDocuments, currentDocumentType, documents } = get();\n const currentIndex = currentDocumentType \n ? requiredDocuments.indexOf(currentDocumentType) \n : -1;\n \n // Find next document that needs upload\n for (let i = currentIndex + 1; i < requiredDocuments.length; i++) {\n const type = requiredDocuments[i];\n const doc = documents.get(type);\n if (!doc?.file) {\n set({ currentDocumentType: type });\n return;\n }\n }\n \n // All documents uploaded, move to processing/review\n set({ \n currentDocumentType: null,\n step: 'processing',\n });\n },\n\n setVerificationStatus: (status) => set({ verificationStatus: status }),\n \n setVerified: (verified) => set({ isVerified: verified }),\n\n setStatus: (status) => set({ status }),\n \n setLoading: (isLoading) => set({ isLoading }),\n \n setError: (error) => set({ error }),\n\n getNextRequiredDocument: () => {\n const { requiredDocuments, documents } = get();\n for (const type of requiredDocuments) {\n const doc = documents.get(type);\n if (!doc?.file) {\n return type;\n }\n }\n return null;\n },\n\n areAllDocumentsUploaded: () => {\n const { requiredDocuments, documents } = get();\n return requiredDocuments.every((type) => {\n const doc = documents.get(type);\n return doc?.file !== null;\n });\n },\n\n areAllDocumentsProcessed: () => {\n const { requiredDocuments, documents } = get();\n return requiredDocuments.every((type) => {\n const doc = documents.get(type);\n return doc?.status === 'completed' || doc?.status === 'requires_review';\n });\n },\n\n reset: () => {\n // Clean up preview URLs\n const { documents } = get();\n for (const doc of documents.values()) {\n if (doc.previewUrl) {\n URL.revokeObjectURL(doc.previewUrl);\n }\n }\n set(initialState);\n },\n}));\n","import React, { useCallback } from 'react';\nimport { useDropzone } from 'react-dropzone';\nimport { Upload, FileText, Image, AlertCircle, X } from 'lucide-react';\nimport { clsx } from 'clsx';\nimport { useKYCStore } from '../../store/kyc-store';\nimport type { DocumentType } from '@fileflow/shared';\nimport { DOCUMENT_TYPES } from '@fileflow/shared';\n\ninterface DocumentUploaderProps {\n documentType: DocumentType;\n onFileSelect?: (file: File) => void;\n}\n\nexport const DocumentUploader: React.FC<DocumentUploaderProps> = ({\n documentType,\n onFileSelect,\n}) => {\n const { documents, setDocumentFile, isLoading } = useKYCStore();\n const documentState = documents.get(documentType);\n const documentInfo = DOCUMENT_TYPES[documentType];\n\n const onDrop = useCallback(\n (acceptedFiles: File[], rejectedFiles: unknown[]) => {\n if (rejectedFiles.length > 0) {\n return;\n }\n\n if (acceptedFiles.length > 0) {\n const file = acceptedFiles[0];\n setDocumentFile(documentType, file);\n onFileSelect?.(file);\n }\n },\n [documentType, onFileSelect, setDocumentFile]\n );\n\n const { getRootProps, getInputProps, isDragActive } = useDropzone({\n onDrop,\n accept: {\n 'application/pdf': ['.pdf'],\n 'image/jpeg': ['.jpg', '.jpeg'],\n 'image/png': ['.png'],\n },\n maxSize: documentInfo.maxFileSize,\n multiple: false,\n disabled: isLoading,\n });\n\n const formatFileSize = (bytes: number): string => {\n if (bytes < 1024) return `${bytes} B`;\n if (bytes < 1024 * 1024) return `${(bytes / 1024).toFixed(1)} KB`;\n return `${(bytes / (1024 * 1024)).toFixed(1)} MB`;\n };\n\n const getFileIcon = () => {\n if (documentState?.file?.type === 'application/pdf') {\n return <FileText className=\"ff-w-6 ff-h-6\" />;\n }\n return <Image className=\"ff-w-6 ff-h-6\" />;\n };\n\n const clearFile = (e: React.MouseEvent) => {\n e.stopPropagation();\n useKYCStore.getState().clearDocumentPreview(documentType);\n setDocumentFile(documentType, null as unknown as File);\n };\n\n // Show preview if file is selected\n if (documentState?.file && documentState.previewUrl) {\n return (\n <div className=\"ff-space-y-4\">\n {/* Document Info */}\n <div className=\"ff-p-4 ff-rounded-xl\" style={{ backgroundColor: 'var(--ff-primary-20)', border: '1px solid var(--ff-primary-50)' }}>\n <div className=\"ff-flex ff-items-center ff-gap-3\">\n <div className=\"ff-p-2 ff-rounded-lg\" style={{ backgroundColor: 'var(--ff-primary-30)' }}>\n <span style={{ color: 'var(--ff-primary-90)' }}>{getFileIcon()}</span>\n </div>\n <div className=\"ff-flex-1 ff-min-w-0\">\n <p className=\"ff-font-medium ff-truncate\" style={{ color: 'var(--ff-primary-110)' }}>\n {documentState.file.name}\n </p>\n <p className=\"ff-text-sm\" style={{ color: 'var(--ff-primary-90)' }}>\n {formatFileSize(documentState.file.size)}\n </p>\n </div>\n <button\n onClick={clearFile}\n className=\"ff-p-1.5 ff-rounded-full ff-transition-colors\"\n style={{ color: 'var(--ff-primary-90)' }}\n aria-label=\"Remove file\"\n >\n <X className=\"ff-w-5 ff-h-5\" />\n </button>\n </div>\n </div>\n\n {/* Preview */}\n <div className=\"ff-document-preview ff-aspect-[3/4] ff-max-h-96\">\n {documentState.file.type === 'application/pdf' ? (\n <iframe\n src={documentState.previewUrl}\n className=\"ff-w-full ff-h-full ff-rounded-xl\"\n title=\"Document preview\"\n />\n ) : (\n <img\n src={documentState.previewUrl}\n alt=\"Document preview\"\n className=\"ff-w-full ff-h-full ff-object-contain ff-rounded-xl\"\n />\n )}\n </div>\n </div>\n );\n }\n\n return (\n <div className=\"ff-space-y-6\">\n {/* Document Type Info */}\n <div className=\"ff-text-center ff-mb-4\">\n <h3 className=\"ff-text-lg ff-font-semibold\" style={{ color: 'var(--ff-text-primary)' }}>{documentInfo.label}</h3>\n <p className=\"ff-text-sm ff-mt-1\" style={{ color: 'var(--ff-text-muted)' }}>{documentInfo.description}</p>\n </div>\n\n {/* Dropzone - Demo style */}\n <div\n {...getRootProps()}\n className={clsx(\n 'ff-dropzone',\n isDragActive && 'ff-dropzone-active',\n isLoading && 'ff-opacity-50 ff-cursor-not-allowed'\n )}\n >\n <input {...getInputProps()} />\n <div className=\"ff-dropzone-icon-wrapper\">\n <Upload className=\"ff-dropzone-icon\" />\n </div>\n <h3 className=\"ff-dropzone-text\">\n {isDragActive ? 'Drop your document here' : 'Upload your document'}\n </h3>\n <p className=\"ff-dropzone-hint\">Drag and drop or click to select</p>\n <label className=\"ff-inline-block\">\n <span className={clsx(\n 'ff-btn ff-btn-primary',\n isLoading && 'ff-opacity-50 ff-cursor-wait'\n )}>\n {isLoading ? 'Processing...' : 'Choose file'}\n </span>\n </label>\n <div className=\"ff-flex ff-flex-wrap ff-justify-center ff-gap-2 ff-mt-3\">\n {documentInfo.acceptedFormats.map((format) => (\n <span \n key={format} \n className=\"ff-px-2 ff-py-1 ff-rounded ff-text-xs\"\n style={{ backgroundColor: 'var(--ff-bg-tertiary)', color: 'var(--ff-text-muted)' }}\n >\n {format.toUpperCase()}\n </span>\n ))}\n <span className=\"ff-px-2 ff-py-1 ff-text-xs\" style={{ color: 'var(--ff-text-muted)' }}>\n Max {formatFileSize(documentInfo.maxFileSize)}\n </span>\n </div>\n </div>\n\n {/* Error */}\n {documentState?.error && (\n <div className=\"ff-flex ff-items-center ff-gap-2 ff-p-4 ff-rounded-lg ff-text-sm\" style={{ backgroundColor: 'var(--ff-error-light)', color: 'var(--ff-error)' }}>\n <AlertCircle className=\"ff-w-4 ff-h-4 ff-flex-shrink-0\" />\n <p>{documentState.error}</p>\n </div>\n )}\n\n {/* Tips */}\n <div className=\"ff-rounded-xl ff-p-4\" style={{ backgroundColor: 'var(--ff-bg-secondary)' }}>\n <h4 className=\"ff-text-sm ff-font-medium ff-mb-2\" style={{ color: 'var(--ff-text-secondary)' }}>Tips for best results:</h4>\n <ul className=\"ff-text-sm ff-space-y-1 ff-list-disc ff-list-inside\" style={{ color: 'var(--ff-text-muted)' }}>\n <li>Ensure all text is clearly visible and readable</li>\n <li>Avoid glare, shadows, or blurry images</li>\n <li>Include all four corners of the document</li>\n <li>Use good lighting when taking photos</li>\n </ul>\n </div>\n </div>\n );\n};\n","import React from 'react';\nimport { CheckCircle, XCircle, AlertTriangle, Loader2, Clock } from 'lucide-react';\nimport { clsx } from 'clsx';\nimport { useKYCStore } from '../../store/kyc-store';\nimport type { DocumentType, DocumentStatus as DocStatus } from '@fileflow/shared';\nimport { DOCUMENT_TYPES } from '@fileflow/shared';\n\ninterface DocumentStatusProps {\n documentType: DocumentType;\n showDetails?: boolean;\n}\n\nexport const DocumentStatus: React.FC<DocumentStatusProps> = ({\n documentType,\n showDetails = true,\n}) => {\n const { documents } = useKYCStore();\n const documentState = documents.get(documentType);\n const documentInfo = DOCUMENT_TYPES[documentType];\n\n const getStatusConfig = (status?: DocStatus) => {\n switch (status) {\n case 'completed':\n return {\n icon: CheckCircle,\n iconColor: 'var(--ff-success)',\n bgColor: 'var(--ff-success-light)',\n label: 'Verified',\n labelColor: 'var(--ff-success)',\n description: 'Document successfully processed',\n };\n case 'requires_review':\n return {\n icon: AlertTriangle,\n iconColor: 'var(--ff-warning)',\n bgColor: 'var(--ff-warning-light)',\n label: 'Review Required',\n labelColor: 'var(--ff-warning)',\n description: 'Manual verification may be needed',\n };\n case 'failed':\n return {\n icon: XCircle,\n iconColor: 'var(--ff-error)',\n bgColor: 'var(--ff-error-light)',\n label: 'Failed',\n labelColor: 'var(--ff-error)',\n description: 'Unable to process document',\n };\n case 'processing':\n return {\n icon: Loader2,\n iconColor: 'var(--ff-primary-90)',\n bgColor: 'var(--ff-primary-20)',\n label: 'Processing',\n labelColor: 'var(--ff-primary-90)',\n description: 'Analyzing document...',\n };\n case 'uploaded':\n return {\n icon: Clock,\n iconColor: 'var(--ff-text-secondary)',\n bgColor: 'var(--ff-bg-tertiary)',\n label: 'Pending',\n labelColor: 'var(--ff-text-secondary)',\n description: 'Waiting to be processed',\n };\n default:\n return {\n icon: Clock,\n iconColor: 'var(--ff-text-muted)',\n bgColor: 'var(--ff-bg-tertiary)',\n label: 'Not Uploaded',\n labelColor: 'var(--ff-text-muted)',\n description: 'Upload document to continue',\n };\n }\n };\n\n const statusConfig = getStatusConfig(documentState?.status);\n const Icon = statusConfig.icon;\n\n const getConfidenceColor = (confidence: number) => {\n if (confidence >= 0.8) return 'var(--ff-success)';\n if (confidence >= 0.6) return 'var(--ff-warning)';\n return 'var(--ff-error)';\n };\n\n return (\n <div className=\"ff-space-y-3\">\n {/* Status Header */}\n <div className=\"ff-flex ff-items-center ff-gap-3\">\n <div className=\"ff-p-2 ff-rounded-xl\" style={{ backgroundColor: statusConfig.bgColor }}>\n <Icon\n className={clsx(\n 'ff-w-5 ff-h-5',\n documentState?.status === 'processing' && 'ff-animate-spin'\n )}\n style={{ color: statusConfig.iconColor }}\n />\n </div>\n <div>\n <p className=\"ff-font-medium\" style={{ color: 'var(--ff-text-primary)' }}>{documentInfo.label}</p>\n <p className=\"ff-text-sm\" style={{ color: statusConfig.labelColor }}>{statusConfig.label}</p>\n </div>\n </div>\n\n {/* Confidence Score */}\n {documentState?.confidence !== undefined && documentState.confidence > 0 && (\n <div className=\"ff-space-y-1\">\n <div className=\"ff-flex ff-items-center ff-justify-between ff-text-sm\">\n <span style={{ color: 'var(--ff-text-secondary)' }}>Confidence</span>\n <span className=\"ff-font-medium\" style={{ color: getConfidenceColor(documentState.confidence) }}>\n {Math.round(documentState.confidence * 100)}%\n </span>\n </div>\n <div className=\"ff-progress\">\n <div\n className=\"ff-progress-bar\"\n style={{ \n width: `${documentState.confidence * 100}%`,\n backgroundColor: getConfidenceColor(documentState.confidence)\n }}\n />\n </div>\n </div>\n )}\n\n {/* Fraud Flags */}\n {showDetails && documentState?.fraudFlags && documentState.fraudFlags.length > 0 && (\n <div className=\"ff-space-y-2\">\n <p className=\"ff-text-sm ff-font-medium\" style={{ color: 'var(--ff-text-secondary)' }}>Issues Detected</p>\n <div className=\"ff-space-y-1\">\n {documentState.fraudFlags.map((flag, index) => (\n <div\n key={index}\n className=\"ff-flex ff-items-start ff-gap-2 ff-p-2 ff-rounded-lg ff-text-sm\"\n style={{\n backgroundColor: flag.severity === 'high' ? 'var(--ff-error-light)' : flag.severity === 'medium' ? 'var(--ff-warning-light)' : 'var(--ff-bg-tertiary)',\n color: flag.severity === 'high' ? 'var(--ff-error)' : flag.severity === 'medium' ? 'var(--ff-warning)' : 'var(--ff-text-secondary)',\n }}\n >\n {flag.severity === 'high' ? (\n <XCircle className=\"ff-w-4 ff-h-4 ff-flex-shrink-0 ff-mt-0.5\" />\n ) : (\n <AlertTriangle className=\"ff-w-4 ff-h-4 ff-flex-shrink-0 ff-mt-0.5\" />\n )}\n <span>{flag.message}</span>\n </div>\n ))}\n </div>\n </div>\n )}\n\n {/* Extracted Data Preview */}\n {showDetails &&\n documentState?.extractedData &&\n documentState.status === 'completed' && (\n <div className=\"ff-rounded-xl ff-p-3\" style={{ backgroundColor: 'var(--ff-bg-tertiary)' }}>\n <p className=\"ff-text-sm ff-font-medium ff-mb-2\" style={{ color: 'var(--ff-text-secondary)' }}>\n Extracted Information\n </p>\n <dl className=\"ff-space-y-1 ff-text-sm\">\n {'fullName' in documentState.extractedData && (\n <div className=\"ff-flex ff-justify-between\">\n <dt style={{ color: 'var(--ff-text-muted)' }}>Name</dt>\n <dd className=\"ff-font-medium\" style={{ color: 'var(--ff-text-primary)' }}>\n {documentState.extractedData.fullName}\n </dd>\n </div>\n )}\n {'dateOfBirth' in documentState.extractedData && (\n <div className=\"ff-flex ff-justify-between\">\n <dt style={{ color: 'var(--ff-text-muted)' }}>Date of Birth</dt>\n <dd style={{ color: 'var(--ff-text-primary)' }}>{documentState.extractedData.dateOfBirth}</dd>\n </div>\n )}\n {documentState.extractedData.documentType === 'passport' &&\n 'passportNumber' in documentState.extractedData && (\n <div className=\"ff-flex ff-justify-between\">\n <dt style={{ color: 'var(--ff-text-muted)' }}>Passport #</dt>\n <dd className=\"ff-font-mono\" style={{ color: 'var(--ff-text-primary)' }}>\n {documentState.extractedData.passportNumber}\n </dd>\n </div>\n )}\n {documentState.extractedData.documentType === 'drivers_license' &&\n 'licenseNumber' in documentState.extractedData && (\n <div className=\"ff-flex ff-justify-between\">\n <dt style={{ color: 'var(--ff-text-muted)' }}>License #</dt>\n <dd className=\"ff-font-mono\" style={{ color: 'var(--ff-text-primary)' }}>\n {documentState.extractedData.licenseNumber}\n </dd>\n </div>\n )}\n {'address' in documentState.extractedData && documentState.extractedData.address && (\n <div className=\"ff-flex ff-justify-between\">\n <dt style={{ color: 'var(--ff-text-muted)' }}>Address</dt>\n <dd className=\"ff-text-right\" style={{ color: 'var(--ff-text-primary)' }}>\n {documentState.extractedData.address.city},{' '}\n {documentState.extractedData.address.province}\n </dd>\n </div>\n )}\n </dl>\n </div>\n )}\n </div>\n );\n};\n","import React, { useCallback, useEffect, useState } from 'react';\nimport {\n FileText,\n Car,\n Home,\n CheckCircle,\n X,\n Loader2,\n ChevronRight,\n ShieldCheck,\n Shield,\n} from 'lucide-react';\nimport { clsx } from 'clsx';\nimport { useKYCStore, type KYCStep } from '../../store/kyc-store';\nimport { getClient } from '../../api/client';\nimport { DocumentUploader } from './DocumentUploader';\nimport { DocumentStatus } from './DocumentStatus';\nimport { StyleProvider } from '../../styles/StyleProvider';\nimport type { DocumentType, KYCSession, KYCDocument } from '@fileflow/shared';\nimport { DOCUMENT_TYPES } from '@fileflow/shared';\n\n// KYC steps for the step indicator\nconst KYC_STEP_LABELS = ['select', 'upload', 'review', 'complete'] as const;\n\ninterface KYCWizardProps {\n requiredDocuments: DocumentType[];\n onComplete?: (session: KYCSession) => void;\n onCancel?: () => void;\n onError?: (error: Error) => void;\n}\n\nconst DOCUMENT_ICONS: Record<DocumentType, React.ElementType> = {\n passport: FileText,\n drivers_license: Car,\n proof_of_address: Home,\n};\n\nexport const KYCWizard: React.FC<KYCWizardProps> = ({\n requiredDocuments,\n onComplete,\n onCancel,\n onError,\n}) => {\n const {\n sessionId,\n step,\n currentDocumentType,\n documents,\n isVerified,\n verificationStatus,\n isLoading,\n error,\n setSessionId,\n setRequiredDocuments,\n setCurrentDocumentType,\n setDocumentStatus,\n setDocumentData,\n setStep,\n nextDocument,\n setVerificationStatus,\n setVerified,\n setLoading,\n setError,\n areAllDocumentsUploaded,\n areAllDocumentsProcessed,\n reset,\n } = useKYCStore();\n\n const [pollingDocument, setPollingDocument] = useState<string | null>(null);\n\n // Initialize\n useEffect(() => {\n setRequiredDocuments(requiredDocuments);\n initializeSession();\n\n return () => {\n // Cleanup polling on unmount\n setPollingDocument(null);\n };\n }, [requiredDocuments]);\n\n const initializeSession = async () => {\n try {\n setLoading(true);\n const client = getClient();\n const result = await client.createKYCSession(requiredDocuments);\n setSessionId(result.sessionId);\n setStep('upload');\n } catch (err) {\n const error = err as Error;\n setError(error.message);\n onError?.(error);\n } finally {\n setLoading(false);\n }\n };\n\n const handleFileSelect = useCallback(\n async (file: File) => {\n if (!sessionId || !currentDocumentType) return;\n\n try {\n setLoading(true);\n setError(null);\n\n const client = getClient();\n const result = await client.uploadKYCDocument(sessionId, currentDocumentType, file);\n\n setDocumentData(currentDocumentType, {\n id: result.documentId,\n status: 'processing',\n });\n\n // Start polling for document status\n setPollingDocument(result.documentId);\n pollDocumentStatus(result.documentId);\n } catch (err) {\n const error = err as Error;\n setDocumentData(currentDocumentType, {\n status: 'failed',\n error: error.message,\n });\n onError?.(error);\n } finally {\n setLoading(false);\n }\n },\n [sessionId, currentDocumentType]\n );\n\n const pollDocumentStatus = async (documentId: string) => {\n const maxAttempts = 30;\n const maxConsecutiveErrors = 3; // Stop after 3 consecutive errors\n let attempts = 0;\n let consecutiveErrors = 0;\n\n const poll = async () => {\n if (attempts >= maxAttempts) {\n setPollingDocument(null);\n if (currentDocumentType) {\n setDocumentData(currentDocumentType, {\n status: 'failed',\n error: 'Processing timed out. Please try again.',\n });\n }\n return;\n }\n\n // Stop polling if we've had too many consecutive errors\n if (consecutiveErrors >= maxConsecutiveErrors) {\n setPollingDocument(null);\n if (currentDocumentType) {\n setDocumentData(currentDocumentType, {\n status: 'failed',\n error: 'Failed to check document status. Please refresh and try again.',\n });\n }\n return;\n }\n\n try {\n const client = getClient();\n const result = await client.getKYCDocument(documentId);\n const doc = result.document as KYCDocument;\n\n // Reset consecutive errors on success\n consecutiveErrors = 0;\n\n const docType = doc.type as DocumentType;\n setDocumentData(docType, {\n id: doc.id,\n status: doc.status,\n extractedData: doc.extractedData,\n confidence: doc.confidence,\n fraudFlags: doc.fraudFlags,\n error: null, // Clear any previous errors\n });\n\n if (doc.status === 'completed' || doc.status === 'requires_review' || doc.status === 'failed') {\n setPollingDocument(null);\n\n // Check if all documents are processed\n if (areAllDocumentsUploaded()) {\n const allProcessed = areAllDocumentsProcessed();\n if (allProcessed) {\n setStep('review');\n }\n } else {\n // Move to next document\n nextDocument();\n }\n return;\n }\n\n // Continue polling\n attempts++;\n setTimeout(poll, 2000);\n } catch (err) {\n const error = err as Error & { status?: number };\n consecutiveErrors++;\n attempts++;\n \n // On 404, stop immediately - the document doesn't exist\n if (error.status === 404 || error.message?.includes('not found')) {\n setPollingDocument(null);\n if (currentDocumentType) {\n setDocumentData(currentDocumentType, {\n status: 'failed',\n error: 'Session not found or invalid state',\n });\n }\n return;\n }\n\n // On other errors, retry with backoff (up to maxConsecutiveErrors times)\n if (consecutiveErrors < maxConsecutiveErrors) {\n setTimeout(poll, 3000 * consecutiveErrors); // Exponential backoff\n } else {\n setPollingDocument(null);\n if (currentDocumentType) {\n setDocumentData(currentDocumentType, {\n status: 'failed',\n error: error.message || 'Failed to process document',\n });\n }\n }\n }\n };\n\n poll();\n };\n\n const handleVerify = async () => {\n if (!sessionId) return;\n\n try {\n setLoading(true);\n setError(null);\n\n const client = getClient();\n const result = await client.verifyKYCSession(sessionId, true);\n\n setVerificationStatus(result.verificationStatus);\n const status = result.verificationStatus as { isVerified: boolean };\n setVerified(status.isVerified);\n setStep('complete');\n\n onComplete?.(result as unknown as KYCSession);\n } catch (err) {\n const error = err as Error;\n setError(error.message);\n onError?.(error);\n } finally {\n setLoading(false);\n }\n };\n\n const handleCancel = () => {\n reset();\n onCancel?.();\n };\n\n const selectDocument = (type: DocumentType) => {\n setCurrentDocumentType(type);\n setStep('upload');\n };\n\n const isDocumentComplete = (type: DocumentType) => {\n const doc = documents.get(type);\n return doc?.status === 'completed' || doc?.status === 'requires_review';\n };\n\n // Get step index for the step indicator\n const getDisplayStepIndex = () => {\n const currentStep = step === 'processing' ? 'upload' : step;\n return KYC_STEP_LABELS.indexOf(currentStep as typeof KYC_STEP_LABELS[number]);\n };\n\n return (\n <StyleProvider>\n <div className=\"ff-container ff-modal\">\n {/* Modal Header - Demo style */}\n <div className=\"ff-modal-header\">\n <div className=\"ff-modal-header-left\">\n <div className=\"ff-flex ff-items-center ff-gap-3\">\n <div className=\"ff-modal-icon\">\n <Shield />\n </div>\n <h2 className=\"ff-modal-title\">Identity Verification</h2>\n </div>\n {/* Step Indicator - Demo style */}\n <div className=\"ff-steps ff-ml-4\">\n {KYC_STEP_LABELS.map((s, i) => (\n <React.Fragment key={s}>\n <div\n className={clsx(\n 'ff-step',\n getDisplayStepIndex() === i && 'ff-step-active',\n getDisplayStepIndex() > i && 'ff-step-complete',\n getDisplayStepIndex() < i && 'ff-step-pending'\n )}\n >\n {getDisplayStepIndex() > i ? '✓' : i + 1}\n </div>\n {i < KYC_STEP_LABELS.length - 1 && (\n <div className={clsx(\n 'ff-step-connector',\n getDisplayStepIndex() > i && 'ff-step-connector-complete'\n )} />\n )}\n </React.Fragment>\n ))}\n </div>\n </div>\n <button\n onClick={handleCancel}\n className=\"ff-modal-close\"\n >\n <X className=\"ff-w-5 ff-h-5\" />\n </button>\n </div>\n\n {/* Modal Body */}\n <div className=\"ff-modal-body\">\n {error && (\n <div className=\"ff-mb-4 ff-p-4 ff-rounded-lg ff-text-sm\" style={{ backgroundColor: 'var(--ff-error-light)', color: 'var(--ff-error)' }}>\n {error}\n </div>\n )}\n\n {/* Document Selection */}\n {step === 'select' && (\n <div className=\"ff-space-y-4\">\n <p className=\"ff-text-center ff-mb-6\" style={{ color: 'var(--ff-text-muted)' }}>\n Please upload the following documents to verify your identity\n </p>\n <div className=\"ff-grid ff-gap-3\">\n {requiredDocuments.map((type) => {\n const Icon = DOCUMENT_ICONS[type];\n const info = DOCUMENT_TYPES[type];\n const doc = documents.get(type);\n const isComplete = isDocumentComplete(type);\n\n return (\n <button\n key={type}\n onClick={() => selectDocument(type)}\n className={clsx(\n 'ff-flex ff-items-center ff-gap-4 ff-p-4 ff-rounded-xl ff-border-2 ff-text-left ff-transition-all ff-duration-150',\n isComplete\n ? 'ff-border-transparent'\n : 'ff-border-transparent hover:ff-border-transparent'\n )}\n style={{\n backgroundColor: isComplete ? 'var(--ff-success-light)' : 'var(--ff-bg-secondary)',\n borderColor: isComplete ? 'var(--ff-success)' : 'var(--ff-border-light)',\n }}\n >\n <div\n className=\"ff-p-3 ff-rounded-xl\"\n style={{\n backgroundColor: isComplete ? 'rgba(41, 142, 51, 0.15)' : 'var(--ff-bg-tertiary)',\n }}\n >\n {isComplete ? (\n <CheckCircle className=\"ff-w-6 ff-h-6\" style={{ color: 'var(--ff-success)' }} />\n ) : (\n <Icon className=\"ff-w-6 ff-h-6\" style={{ color: 'var(--ff-text-secondary)' }} />\n )}\n </div>\n <div className=\"ff-flex-1\">\n <p className=\"ff-font-medium\" style={{ color: 'var(--ff-text-primary)' }}>{info.label}</p>\n <p className=\"ff-text-sm\" style={{ color: 'var(--ff-text-muted)' }}>{info.description}</p>\n </div>\n <ChevronRight className=\"ff-w-5 ff-h-5\" style={{ color: 'var(--ff-text-muted)' }} />\n </button>\n );\n })}\n </div>\n </div>\n )}\n\n {/* Document Upload */}\n {step === 'upload' && currentDocumentType && (\n <div className=\"ff-py-4\">\n <div className=\"ff-max-w-lg ff-mx-auto\">\n <DocumentUploader documentType={currentDocumentType} onFileSelect={handleFileSelect} />\n </div>\n </div>\n )}\n\n {/* Processing */}\n {step === 'processing' && (\n <div className=\"ff-flex ff-flex-col ff-items-center ff-justify-center ff-py-12\">\n <Loader2 className=\"ff-w-12 ff-h-12 ff-animate-spin ff-mb-4\" style={{ color: 'var(--ff-primary-90)' }} />\n <h3 className=\"ff-text-lg ff-font-semibold ff-mb-2\" style={{ color: 'var(--ff-text-primary)' }}>\n Processing Documents\n </h3>\n <p style={{ color: 'var(--ff-text-muted)' }} className=\"ff-text-center\">\n We're analyzing your documents. This may take a moment...\n </p>\n </div>\n )}\n\n {/* Review */}\n {step === 'review' && (\n <div className=\"ff-space-y-6\">\n <div className=\"ff-text-center ff-mb-6\">\n <h3 className=\"ff-text-lg ff-font-semibold\" style={{ color: 'var(--ff-text-primary)' }}>Review Your Documents</h3>\n <p style={{ color: 'var(--ff-text-muted)' }}>\n Please review the extracted information before completing verification\n </p>\n </div>\n\n <div className=\"ff-grid ff-gap-4\">\n {requiredDocuments.map((type) => (\n <div\n key={type}\n className=\"ff-rounded-xl ff-p-4\"\n style={{ backgroundColor: 'var(--ff-bg-secondary)', border: '1px solid var(--ff-border-light)' }}\n >\n <DocumentStatus documentType={type} showDetails={true} />\n </div>\n ))}\n </div>\n </div>\n )}\n\n {/* Complete */}\n {step === 'complete' && (\n <div className=\"ff-flex ff-flex-col ff-items-center ff-justify-center ff-py-12\">\n <div\n className=\"ff-w-16 ff-h-16 ff-rounded-full ff-flex ff-items-center ff-justify-center ff-mb-4\"\n style={{ backgroundColor: isVerified ? 'var(--ff-success-light)' : 'var(--ff-warning-light)' }}\n >\n {isVerified ? (\n <CheckCircle className=\"ff-w-10 ff-h-10\" style={{ color: 'var(--ff-success)' }} />\n ) : (\n <ShieldCheck className=\"ff-w-10 ff-h-10\" style={{ color: 'var(--ff-warning)' }} />\n )}\n </div>\n <h3 className=\"ff-text-xl ff-font-semibold ff-mb-2\" style={{ color: 'var(--ff-text-primary)' }}>\n {isVerified ? 'Verification Complete!' : 'Review Required'}\n </h3>\n <p style={{ color: 'var(--ff-text-muted)' }} className=\"ff-text-center\">\n {isVerified\n ? 'Your identity has been successfully verified.'\n : 'Additional review may be required. We will contact you if needed.'}\n </p>\n </div>\n )}\n </div>\n\n {/* Modal Footer */}\n {step !== 'complete' && (\n <div className=\"ff-modal-footer\">\n <button\n onClick={() => {\n if (step === 'upload') {\n setStep('select');\n } else if (step === 'review') {\n setStep('select');\n }\n }}\n disabled={isLoading}\n className=\"ff-btn ff-btn-secondary\"\n >\n Back\n </button>\n\n {step === 'review' && (\n <button\n onClick={handleVerify}\n disabled={isLoading || !areAllDocumentsProcessed()}\n className=\"ff-btn ff-btn-primary\"\n >\n {isLoading ? (\n <>\n <Loader2 className=\"ff-w-4 ff-h-4 ff-animate-spin\" />\n Verifying...\n </>\n ) : (\n 'Complete Verification'\n )}\n </button>\n )}\n\n {step === 'select' && areAllDocumentsUploaded() && (\n <button\n onClick={() => setStep('review')}\n className=\"ff-btn ff-btn-primary\"\n >\n Review & Verify\n </button>\n )}\n </div>\n )}\n </div>\n </StyleProvider>\n );\n};\n"],"names":["__iconNode","Car","createLucideIcon","Clock","FileText","House","Image","ShieldCheck","Shield","createEmptyDocumentState","type","initialState","useKYCStore","create","set","get","sessionId","documents","docsMap","file","doc","previewUrl","updated","status","data","step","requiredDocuments","currentDocumentType","currentIndex","i","verified","isLoading","error","DocumentUploader","documentType","onFileSelect","setDocumentFile","documentState","documentInfo","DOCUMENT_TYPES","onDrop","useCallback","acceptedFiles","rejectedFiles","getRootProps","getInputProps","isDragActive","useDropzone","formatFileSize","bytes","getFileIcon","_a","jsx","clearFile","e","jsxs","X","clsx","Upload","format","AlertCircle","DocumentStatus","showDetails","statusConfig","CheckCircle","AlertTriangle","XCircle","Loader2","Icon","getConfidenceColor","confidence","flag","index","KYC_STEP_LABELS","DOCUMENT_ICONS","Home","KYCWizard","onComplete","onCancel","onError","isVerified","verificationStatus","setSessionId","setRequiredDocuments","setCurrentDocumentType","setDocumentStatus","setDocumentData","setStep","nextDocument","setVerificationStatus","setVerified","setLoading","setError","areAllDocumentsUploaded","areAllDocumentsProcessed","reset","pollingDocument","setPollingDocument","useState","useEffect","initializeSession","result","getClient","err","handleFileSelect","pollDocumentStatus","documentId","attempts","consecutiveErrors","poll","docType","handleVerify","handleCancel","selectDocument","isDocumentComplete","getDisplayStepIndex","currentStep","StyleProvider","s","React","info","isComplete","ChevronRight","Fragment"],"mappings":"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","x_google_ignoreList":[0,1,2,3,4,5,6]}
1
+ {"version":3,"file":"KYCWizard-DecrJ0MW.js","sources":["../../../node_modules/.pnpm/lucide-react@0.563.0_react@18.3.1/node_modules/lucide-react/dist/esm/icons/car.js","../../../node_modules/.pnpm/lucide-react@0.563.0_react@18.3.1/node_modules/lucide-react/dist/esm/icons/clock.js","../../../node_modules/.pnpm/lucide-react@0.563.0_react@18.3.1/node_modules/lucide-react/dist/esm/icons/file-text.js","../../../node_modules/.pnpm/lucide-react@0.563.0_react@18.3.1/node_modules/lucide-react/dist/esm/icons/house.js","../../../node_modules/.pnpm/lucide-react@0.563.0_react@18.3.1/node_modules/lucide-react/dist/esm/icons/image.js","../../../node_modules/.pnpm/lucide-react@0.563.0_react@18.3.1/node_modules/lucide-react/dist/esm/icons/shield-check.js","../../../node_modules/.pnpm/lucide-react@0.563.0_react@18.3.1/node_modules/lucide-react/dist/esm/icons/shield.js","../src/store/kyc-store.ts","../src/kyc/components/DocumentUploader.tsx","../src/kyc/components/DocumentStatus.tsx","../src/kyc/components/KYCWizard.tsx"],"sourcesContent":["/**\n * @license lucide-react v0.563.0 - ISC\n *\n * This source code is licensed under the ISC license.\n * See the LICENSE file in the root directory of this source tree.\n */\n\nimport createLucideIcon from '../createLucideIcon.js';\n\nconst __iconNode = [\n [\n \"path\",\n {\n d: \"M19 17h2c.6 0 1-.4 1-1v-3c0-.9-.7-1.7-1.5-1.9C18.7 10.6 16 10 16 10s-1.3-1.4-2.2-2.3c-.5-.4-1.1-.7-1.8-.7H5c-.6 0-1.1.4-1.4.9l-1.4 2.9A3.7 3.7 0 0 0 2 12v4c0 .6.4 1 1 1h2\",\n key: \"5owen\"\n }\n ],\n [\"circle\", { cx: \"7\", cy: \"17\", r: \"2\", key: \"u2ysq9\" }],\n [\"path\", { d: \"M9 17h6\", key: \"r8uit2\" }],\n [\"circle\", { cx: \"17\", cy: \"17\", r: \"2\", key: \"axvx0g\" }]\n];\nconst Car = createLucideIcon(\"car\", __iconNode);\n\nexport { __iconNode, Car as default };\n//# sourceMappingURL=car.js.map\n","/**\n * @license lucide-react v0.563.0 - ISC\n *\n * This source code is licensed under the ISC license.\n * See the LICENSE file in the root directory of this source tree.\n */\n\nimport createLucideIcon from '../createLucideIcon.js';\n\nconst __iconNode = [\n [\"path\", { d: \"M12 6v6l4 2\", key: \"mmk7yg\" }],\n [\"circle\", { cx: \"12\", cy: \"12\", r: \"10\", key: \"1mglay\" }]\n];\nconst Clock = createLucideIcon(\"clock\", __iconNode);\n\nexport { __iconNode, Clock as default };\n//# sourceMappingURL=clock.js.map\n","/**\n * @license lucide-react v0.563.0 - ISC\n *\n * This source code is licensed under the ISC license.\n * See the LICENSE file in the root directory of this source tree.\n */\n\nimport createLucideIcon from '../createLucideIcon.js';\n\nconst __iconNode = [\n [\n \"path\",\n {\n d: \"M6 22a2 2 0 0 1-2-2V4a2 2 0 0 1 2-2h8a2.4 2.4 0 0 1 1.704.706l3.588 3.588A2.4 2.4 0 0 1 20 8v12a2 2 0 0 1-2 2z\",\n key: \"1oefj6\"\n }\n ],\n [\"path\", { d: \"M14 2v5a1 1 0 0 0 1 1h5\", key: \"wfsgrz\" }],\n [\"path\", { d: \"M10 9H8\", key: \"b1mrlr\" }],\n [\"path\", { d: \"M16 13H8\", key: \"t4e002\" }],\n [\"path\", { d: \"M16 17H8\", key: \"z1uh3a\" }]\n];\nconst FileText = createLucideIcon(\"file-text\", __iconNode);\n\nexport { __iconNode, FileText as default };\n//# sourceMappingURL=file-text.js.map\n","/**\n * @license lucide-react v0.563.0 - ISC\n *\n * This source code is licensed under the ISC license.\n * See the LICENSE file in the root directory of this source tree.\n */\n\nimport createLucideIcon from '../createLucideIcon.js';\n\nconst __iconNode = [\n [\"path\", { d: \"M15 21v-8a1 1 0 0 0-1-1h-4a1 1 0 0 0-1 1v8\", key: \"5wwlr5\" }],\n [\n \"path\",\n {\n d: \"M3 10a2 2 0 0 1 .709-1.528l7-6a2 2 0 0 1 2.582 0l7 6A2 2 0 0 1 21 10v9a2 2 0 0 1-2 2H5a2 2 0 0 1-2-2z\",\n key: \"r6nss1\"\n }\n ]\n];\nconst House = createLucideIcon(\"house\", __iconNode);\n\nexport { __iconNode, House as default };\n//# sourceMappingURL=house.js.map\n","/**\n * @license lucide-react v0.563.0 - ISC\n *\n * This source code is licensed under the ISC license.\n * See the LICENSE file in the root directory of this source tree.\n */\n\nimport createLucideIcon from '../createLucideIcon.js';\n\nconst __iconNode = [\n [\"rect\", { width: \"18\", height: \"18\", x: \"3\", y: \"3\", rx: \"2\", ry: \"2\", key: \"1m3agn\" }],\n [\"circle\", { cx: \"9\", cy: \"9\", r: \"2\", key: \"af1f0g\" }],\n [\"path\", { d: \"m21 15-3.086-3.086a2 2 0 0 0-2.828 0L6 21\", key: \"1xmnt7\" }]\n];\nconst Image = createLucideIcon(\"image\", __iconNode);\n\nexport { __iconNode, Image as default };\n//# sourceMappingURL=image.js.map\n","/**\n * @license lucide-react v0.563.0 - ISC\n *\n * This source code is licensed under the ISC license.\n * See the LICENSE file in the root directory of this source tree.\n */\n\nimport createLucideIcon from '../createLucideIcon.js';\n\nconst __iconNode = [\n [\n \"path\",\n {\n d: \"M20 13c0 5-3.5 7.5-7.66 8.95a1 1 0 0 1-.67-.01C7.5 20.5 4 18 4 13V6a1 1 0 0 1 1-1c2 0 4.5-1.2 6.24-2.72a1.17 1.17 0 0 1 1.52 0C14.51 3.81 17 5 19 5a1 1 0 0 1 1 1z\",\n key: \"oel41y\"\n }\n ],\n [\"path\", { d: \"m9 12 2 2 4-4\", key: \"dzmm74\" }]\n];\nconst ShieldCheck = createLucideIcon(\"shield-check\", __iconNode);\n\nexport { __iconNode, ShieldCheck as default };\n//# sourceMappingURL=shield-check.js.map\n","/**\n * @license lucide-react v0.563.0 - ISC\n *\n * This source code is licensed under the ISC license.\n * See the LICENSE file in the root directory of this source tree.\n */\n\nimport createLucideIcon from '../createLucideIcon.js';\n\nconst __iconNode = [\n [\n \"path\",\n {\n d: \"M20 13c0 5-3.5 7.5-7.66 8.95a1 1 0 0 1-.67-.01C7.5 20.5 4 18 4 13V6a1 1 0 0 1 1-1c2 0 4.5-1.2 6.24-2.72a1.17 1.17 0 0 1 1.52 0C14.51 3.81 17 5 19 5a1 1 0 0 1 1 1z\",\n key: \"oel41y\"\n }\n ]\n];\nconst Shield = createLucideIcon(\"shield\", __iconNode);\n\nexport { __iconNode, Shield as default };\n//# sourceMappingURL=shield.js.map\n","import { create } from 'zustand';\nimport type { \n DocumentType, \n KYCDocument, \n DocumentStatus,\n FraudFlag,\n ExtractedData,\n} from '@fileflow/shared';\n\nexport type KYCStep = 'select' | 'upload' | 'processing' | 'review' | 'complete';\n\nexport interface DocumentState {\n id: string | null;\n type: DocumentType;\n status: DocumentStatus;\n file: File | null;\n previewUrl: string | null;\n extractedData: ExtractedData | null;\n confidence: number;\n fraudFlags: FraudFlag[];\n error: string | null;\n}\n\nexport interface KYCState {\n // Session\n sessionId: string | null;\n status: string;\n step: KYCStep;\n \n // Required documents\n requiredDocuments: DocumentType[];\n currentDocumentType: DocumentType | null;\n \n // Document states\n documents: Map<DocumentType, DocumentState>;\n \n // Verification\n isVerified: boolean;\n verificationStatus: object | null;\n \n // UI state\n isLoading: boolean;\n error: string | null;\n}\n\nexport interface KYCActions {\n // Initialize\n setSessionId: (sessionId: string) => void;\n setRequiredDocuments: (documents: DocumentType[]) => void;\n \n // Document management\n setCurrentDocumentType: (type: DocumentType) => void;\n setDocumentFile: (type: DocumentType, file: File) => void;\n setDocumentStatus: (type: DocumentType, status: DocumentStatus) => void;\n setDocumentData: (type: DocumentType, data: Partial<DocumentState>) => void;\n clearDocumentPreview: (type: DocumentType) => void;\n \n // Navigation\n setStep: (step: KYCStep) => void;\n nextDocument: () => void;\n \n // Verification\n setVerificationStatus: (status: object) => void;\n setVerified: (verified: boolean) => void;\n \n // Status\n setStatus: (status: string) => void;\n setLoading: (loading: boolean) => void;\n setError: (error: string | null) => void;\n \n // Helpers\n getNextRequiredDocument: () => DocumentType | null;\n areAllDocumentsUploaded: () => boolean;\n areAllDocumentsProcessed: () => boolean;\n \n // Reset\n reset: () => void;\n}\n\nconst createEmptyDocumentState = (type: DocumentType): DocumentState => ({\n id: null,\n type,\n status: 'uploaded',\n file: null,\n previewUrl: null,\n extractedData: null,\n confidence: 0,\n fraudFlags: [],\n error: null,\n});\n\nconst initialState: KYCState = {\n sessionId: null,\n status: 'idle',\n step: 'select',\n requiredDocuments: [],\n currentDocumentType: null,\n documents: new Map(),\n isVerified: false,\n verificationStatus: null,\n isLoading: false,\n error: null,\n};\n\nexport const useKYCStore = create<KYCState & KYCActions>((set, get) => ({\n ...initialState,\n\n setSessionId: (sessionId) => set({ sessionId }),\n\n setRequiredDocuments: (documents) => {\n const docsMap = new Map<DocumentType, DocumentState>();\n for (const type of documents) {\n docsMap.set(type, createEmptyDocumentState(type));\n }\n set({ \n requiredDocuments: documents, \n documents: docsMap,\n currentDocumentType: documents[0] || null,\n });\n },\n\n setCurrentDocumentType: (type) => set({ currentDocumentType: type }),\n\n setDocumentFile: (type, file) => {\n const { documents } = get();\n const doc = documents.get(type) || createEmptyDocumentState(type);\n \n // Create preview URL\n const previewUrl = URL.createObjectURL(file);\n \n const updated = new Map(documents);\n updated.set(type, {\n ...doc,\n file,\n previewUrl,\n status: 'uploaded',\n error: null,\n });\n \n set({ documents: updated });\n },\n\n setDocumentStatus: (type, status) => {\n const { documents } = get();\n const doc = documents.get(type);\n if (doc) {\n const updated = new Map(documents);\n updated.set(type, { ...doc, status });\n set({ documents: updated });\n }\n },\n\n setDocumentData: (type, data) => {\n const { documents } = get();\n const doc = documents.get(type);\n if (doc) {\n const updated = new Map(documents);\n updated.set(type, { ...doc, ...data });\n set({ documents: updated });\n }\n },\n\n clearDocumentPreview: (type) => {\n const { documents } = get();\n const doc = documents.get(type);\n if (doc?.previewUrl) {\n URL.revokeObjectURL(doc.previewUrl);\n }\n },\n\n setStep: (step) => set({ step }),\n\n nextDocument: () => {\n const { requiredDocuments, currentDocumentType, documents } = get();\n const currentIndex = currentDocumentType \n ? requiredDocuments.indexOf(currentDocumentType) \n : -1;\n \n // Find next document that needs upload\n for (let i = currentIndex + 1; i < requiredDocuments.length; i++) {\n const type = requiredDocuments[i];\n const doc = documents.get(type);\n if (!doc?.file) {\n set({ currentDocumentType: type });\n return;\n }\n }\n \n // All documents uploaded, move to processing/review\n set({ \n currentDocumentType: null,\n step: 'processing',\n });\n },\n\n setVerificationStatus: (status) => set({ verificationStatus: status }),\n \n setVerified: (verified) => set({ isVerified: verified }),\n\n setStatus: (status) => set({ status }),\n \n setLoading: (isLoading) => set({ isLoading }),\n \n setError: (error) => set({ error }),\n\n getNextRequiredDocument: () => {\n const { requiredDocuments, documents } = get();\n for (const type of requiredDocuments) {\n const doc = documents.get(type);\n if (!doc?.file) {\n return type;\n }\n }\n return null;\n },\n\n areAllDocumentsUploaded: () => {\n const { requiredDocuments, documents } = get();\n return requiredDocuments.every((type) => {\n const doc = documents.get(type);\n return doc?.file !== null;\n });\n },\n\n areAllDocumentsProcessed: () => {\n const { requiredDocuments, documents } = get();\n return requiredDocuments.every((type) => {\n const doc = documents.get(type);\n return doc?.status === 'completed' || doc?.status === 'requires_review';\n });\n },\n\n reset: () => {\n // Clean up preview URLs\n const { documents } = get();\n for (const doc of documents.values()) {\n if (doc.previewUrl) {\n URL.revokeObjectURL(doc.previewUrl);\n }\n }\n set(initialState);\n },\n}));\n","import React, { useCallback } from 'react';\nimport { useDropzone } from 'react-dropzone';\nimport { Upload, FileText, Image, AlertCircle, X } from 'lucide-react';\nimport { clsx } from 'clsx';\nimport { useKYCStore } from '../../store/kyc-store';\nimport type { DocumentType } from '@fileflow/shared';\nimport { DOCUMENT_TYPES } from '@fileflow/shared';\n\ninterface DocumentUploaderProps {\n documentType: DocumentType;\n onFileSelect?: (file: File) => void;\n}\n\nexport const DocumentUploader: React.FC<DocumentUploaderProps> = ({\n documentType,\n onFileSelect,\n}) => {\n const { documents, setDocumentFile, isLoading } = useKYCStore();\n const documentState = documents.get(documentType);\n const documentInfo = DOCUMENT_TYPES[documentType];\n\n const onDrop = useCallback(\n (acceptedFiles: File[], rejectedFiles: unknown[]) => {\n if (rejectedFiles.length > 0) {\n return;\n }\n\n if (acceptedFiles.length > 0) {\n const file = acceptedFiles[0];\n setDocumentFile(documentType, file);\n onFileSelect?.(file);\n }\n },\n [documentType, onFileSelect, setDocumentFile]\n );\n\n const { getRootProps, getInputProps, isDragActive } = useDropzone({\n onDrop,\n accept: {\n 'application/pdf': ['.pdf'],\n 'image/jpeg': ['.jpg', '.jpeg'],\n 'image/png': ['.png'],\n },\n maxSize: documentInfo.maxFileSize,\n multiple: false,\n disabled: isLoading,\n });\n\n const formatFileSize = (bytes: number): string => {\n if (bytes < 1024) return `${bytes} B`;\n if (bytes < 1024 * 1024) return `${(bytes / 1024).toFixed(1)} KB`;\n return `${(bytes / (1024 * 1024)).toFixed(1)} MB`;\n };\n\n const getFileIcon = () => {\n if (documentState?.file?.type === 'application/pdf') {\n return <FileText className=\"ff-w-6 ff-h-6\" />;\n }\n return <Image className=\"ff-w-6 ff-h-6\" />;\n };\n\n const clearFile = (e: React.MouseEvent) => {\n e.stopPropagation();\n useKYCStore.getState().clearDocumentPreview(documentType);\n setDocumentFile(documentType, null as unknown as File);\n };\n\n // Show preview if file is selected\n if (documentState?.file && documentState.previewUrl) {\n return (\n <div className=\"ff-space-y-4\">\n {/* Document Info */}\n <div className=\"ff-p-4 ff-rounded-xl\" style={{ backgroundColor: 'var(--ff-primary-20)', border: '1px solid var(--ff-primary-50)' }}>\n <div className=\"ff-flex ff-items-center ff-gap-3\">\n <div className=\"ff-p-2 ff-rounded-lg\" style={{ backgroundColor: 'var(--ff-primary-30)' }}>\n <span style={{ color: 'var(--ff-primary-90)' }}>{getFileIcon()}</span>\n </div>\n <div className=\"ff-flex-1 ff-min-w-0\">\n <p className=\"ff-font-medium ff-truncate\" style={{ color: 'var(--ff-primary-110)' }}>\n {documentState.file.name}\n </p>\n <p className=\"ff-text-sm\" style={{ color: 'var(--ff-primary-90)' }}>\n {formatFileSize(documentState.file.size)}\n </p>\n </div>\n <button\n onClick={clearFile}\n className=\"ff-p-1.5 ff-rounded-full ff-transition-colors\"\n style={{ color: 'var(--ff-primary-90)' }}\n aria-label=\"Remove file\"\n >\n <X className=\"ff-w-5 ff-h-5\" />\n </button>\n </div>\n </div>\n\n {/* Preview */}\n <div className=\"ff-document-preview ff-aspect-[3/4] ff-max-h-96\">\n {documentState.file.type === 'application/pdf' ? (\n <iframe\n src={documentState.previewUrl}\n className=\"ff-w-full ff-h-full ff-rounded-xl\"\n title=\"Document preview\"\n />\n ) : (\n <img\n src={documentState.previewUrl}\n alt=\"Document preview\"\n className=\"ff-w-full ff-h-full ff-object-contain ff-rounded-xl\"\n />\n )}\n </div>\n </div>\n );\n }\n\n return (\n <div className=\"ff-space-y-6\">\n {/* Document Type Info */}\n <div className=\"ff-text-center ff-mb-4\">\n <h3 className=\"ff-text-lg ff-font-semibold\" style={{ color: 'var(--ff-text-primary)' }}>{documentInfo.label}</h3>\n <p className=\"ff-text-sm ff-mt-1\" style={{ color: 'var(--ff-text-muted)' }}>{documentInfo.description}</p>\n </div>\n\n {/* Dropzone - Demo style */}\n <div\n {...getRootProps()}\n className={clsx(\n 'ff-dropzone',\n isDragActive && 'ff-dropzone-active',\n isLoading && 'ff-opacity-50 ff-cursor-not-allowed'\n )}\n >\n <input {...getInputProps()} />\n <div className=\"ff-dropzone-icon-wrapper\">\n <Upload className=\"ff-dropzone-icon\" />\n </div>\n <h3 className=\"ff-dropzone-text\">\n {isDragActive ? 'Drop your document here' : 'Upload your document'}\n </h3>\n <p className=\"ff-dropzone-hint\">Drag and drop or click to select</p>\n <label className=\"ff-inline-block\">\n <span className={clsx(\n 'ff-btn ff-btn-primary',\n isLoading && 'ff-opacity-50 ff-cursor-wait'\n )}>\n {isLoading ? 'Processing...' : 'Choose file'}\n </span>\n </label>\n <div className=\"ff-flex ff-flex-wrap ff-justify-center ff-gap-2 ff-mt-3\">\n {documentInfo.acceptedFormats.map((format) => (\n <span \n key={format} \n className=\"ff-px-2 ff-py-1 ff-rounded ff-text-xs\"\n style={{ backgroundColor: 'var(--ff-bg-tertiary)', color: 'var(--ff-text-muted)' }}\n >\n {format.toUpperCase()}\n </span>\n ))}\n <span className=\"ff-px-2 ff-py-1 ff-text-xs\" style={{ color: 'var(--ff-text-muted)' }}>\n Max {formatFileSize(documentInfo.maxFileSize)}\n </span>\n </div>\n </div>\n\n {/* Error */}\n {documentState?.error && (\n <div className=\"ff-flex ff-items-center ff-gap-2 ff-p-4 ff-rounded-lg ff-text-sm\" style={{ backgroundColor: 'var(--ff-error-light)', color: 'var(--ff-error)' }}>\n <AlertCircle className=\"ff-w-4 ff-h-4 ff-flex-shrink-0\" />\n <p>{documentState.error}</p>\n </div>\n )}\n\n {/* Tips */}\n <div className=\"ff-rounded-xl ff-p-4\" style={{ backgroundColor: 'var(--ff-bg-secondary)' }}>\n <h4 className=\"ff-text-sm ff-font-medium ff-mb-2\" style={{ color: 'var(--ff-text-secondary)' }}>Tips for best results:</h4>\n <ul className=\"ff-text-sm ff-space-y-1 ff-list-disc ff-list-inside\" style={{ color: 'var(--ff-text-muted)' }}>\n <li>Ensure all text is clearly visible and readable</li>\n <li>Avoid glare, shadows, or blurry images</li>\n <li>Include all four corners of the document</li>\n <li>Use good lighting when taking photos</li>\n </ul>\n </div>\n </div>\n );\n};\n","import React from 'react';\nimport { CheckCircle, XCircle, AlertTriangle, Loader2, Clock } from 'lucide-react';\nimport { clsx } from 'clsx';\nimport { useKYCStore } from '../../store/kyc-store';\nimport type { DocumentType, DocumentStatus as DocStatus } from '@fileflow/shared';\nimport { DOCUMENT_TYPES } from '@fileflow/shared';\n\ninterface DocumentStatusProps {\n documentType: DocumentType;\n showDetails?: boolean;\n}\n\nexport const DocumentStatus: React.FC<DocumentStatusProps> = ({\n documentType,\n showDetails = true,\n}) => {\n const { documents } = useKYCStore();\n const documentState = documents.get(documentType);\n const documentInfo = DOCUMENT_TYPES[documentType];\n\n const getStatusConfig = (status?: DocStatus) => {\n switch (status) {\n case 'completed':\n return {\n icon: CheckCircle,\n iconColor: 'var(--ff-success)',\n bgColor: 'var(--ff-success-light)',\n label: 'Verified',\n labelColor: 'var(--ff-success)',\n description: 'Document successfully processed',\n };\n case 'requires_review':\n return {\n icon: AlertTriangle,\n iconColor: 'var(--ff-warning)',\n bgColor: 'var(--ff-warning-light)',\n label: 'Review Required',\n labelColor: 'var(--ff-warning)',\n description: 'Manual verification may be needed',\n };\n case 'failed':\n return {\n icon: XCircle,\n iconColor: 'var(--ff-error)',\n bgColor: 'var(--ff-error-light)',\n label: 'Failed',\n labelColor: 'var(--ff-error)',\n description: 'Unable to process document',\n };\n case 'processing':\n return {\n icon: Loader2,\n iconColor: 'var(--ff-primary-90)',\n bgColor: 'var(--ff-primary-20)',\n label: 'Processing',\n labelColor: 'var(--ff-primary-90)',\n description: 'Analyzing document...',\n };\n case 'uploaded':\n return {\n icon: Clock,\n iconColor: 'var(--ff-text-secondary)',\n bgColor: 'var(--ff-bg-tertiary)',\n label: 'Pending',\n labelColor: 'var(--ff-text-secondary)',\n description: 'Waiting to be processed',\n };\n default:\n return {\n icon: Clock,\n iconColor: 'var(--ff-text-muted)',\n bgColor: 'var(--ff-bg-tertiary)',\n label: 'Not Uploaded',\n labelColor: 'var(--ff-text-muted)',\n description: 'Upload document to continue',\n };\n }\n };\n\n const statusConfig = getStatusConfig(documentState?.status);\n const Icon = statusConfig.icon;\n\n const getConfidenceColor = (confidence: number) => {\n if (confidence >= 0.8) return 'var(--ff-success)';\n if (confidence >= 0.6) return 'var(--ff-warning)';\n return 'var(--ff-error)';\n };\n\n return (\n <div className=\"ff-space-y-3\">\n {/* Status Header */}\n <div className=\"ff-flex ff-items-center ff-gap-3\">\n <div className=\"ff-p-2 ff-rounded-xl\" style={{ backgroundColor: statusConfig.bgColor }}>\n <Icon\n className={clsx(\n 'ff-w-5 ff-h-5',\n documentState?.status === 'processing' && 'ff-animate-spin'\n )}\n style={{ color: statusConfig.iconColor }}\n />\n </div>\n <div>\n <p className=\"ff-font-medium\" style={{ color: 'var(--ff-text-primary)' }}>{documentInfo.label}</p>\n <p className=\"ff-text-sm\" style={{ color: statusConfig.labelColor }}>{statusConfig.label}</p>\n </div>\n </div>\n\n {/* Confidence Score */}\n {documentState?.confidence !== undefined && documentState.confidence > 0 && (\n <div className=\"ff-space-y-1\">\n <div className=\"ff-flex ff-items-center ff-justify-between ff-text-sm\">\n <span style={{ color: 'var(--ff-text-secondary)' }}>Confidence</span>\n <span className=\"ff-font-medium\" style={{ color: getConfidenceColor(documentState.confidence) }}>\n {Math.round(documentState.confidence * 100)}%\n </span>\n </div>\n <div className=\"ff-progress\">\n <div\n className=\"ff-progress-bar\"\n style={{ \n width: `${documentState.confidence * 100}%`,\n backgroundColor: getConfidenceColor(documentState.confidence)\n }}\n />\n </div>\n </div>\n )}\n\n {/* Fraud Flags */}\n {showDetails && documentState?.fraudFlags && documentState.fraudFlags.length > 0 && (\n <div className=\"ff-space-y-2\">\n <p className=\"ff-text-sm ff-font-medium\" style={{ color: 'var(--ff-text-secondary)' }}>Issues Detected</p>\n <div className=\"ff-space-y-1\">\n {documentState.fraudFlags.map((flag, index) => (\n <div\n key={index}\n className=\"ff-flex ff-items-start ff-gap-2 ff-p-2 ff-rounded-lg ff-text-sm\"\n style={{\n backgroundColor: flag.severity === 'high' ? 'var(--ff-error-light)' : flag.severity === 'medium' ? 'var(--ff-warning-light)' : 'var(--ff-bg-tertiary)',\n color: flag.severity === 'high' ? 'var(--ff-error)' : flag.severity === 'medium' ? 'var(--ff-warning)' : 'var(--ff-text-secondary)',\n }}\n >\n {flag.severity === 'high' ? (\n <XCircle className=\"ff-w-4 ff-h-4 ff-flex-shrink-0 ff-mt-0.5\" />\n ) : (\n <AlertTriangle className=\"ff-w-4 ff-h-4 ff-flex-shrink-0 ff-mt-0.5\" />\n )}\n <span>{flag.message}</span>\n </div>\n ))}\n </div>\n </div>\n )}\n\n {/* Extracted Data Preview */}\n {showDetails &&\n documentState?.extractedData &&\n documentState.status === 'completed' && (\n <div className=\"ff-rounded-xl ff-p-3\" style={{ backgroundColor: 'var(--ff-bg-tertiary)' }}>\n <p className=\"ff-text-sm ff-font-medium ff-mb-2\" style={{ color: 'var(--ff-text-secondary)' }}>\n Extracted Information\n </p>\n <dl className=\"ff-space-y-1 ff-text-sm\">\n {'fullName' in documentState.extractedData && (\n <div className=\"ff-flex ff-justify-between\">\n <dt style={{ color: 'var(--ff-text-muted)' }}>Name</dt>\n <dd className=\"ff-font-medium\" style={{ color: 'var(--ff-text-primary)' }}>\n {documentState.extractedData.fullName}\n </dd>\n </div>\n )}\n {'dateOfBirth' in documentState.extractedData && (\n <div className=\"ff-flex ff-justify-between\">\n <dt style={{ color: 'var(--ff-text-muted)' }}>Date of Birth</dt>\n <dd style={{ color: 'var(--ff-text-primary)' }}>{documentState.extractedData.dateOfBirth}</dd>\n </div>\n )}\n {documentState.extractedData.documentType === 'passport' &&\n 'passportNumber' in documentState.extractedData && (\n <div className=\"ff-flex ff-justify-between\">\n <dt style={{ color: 'var(--ff-text-muted)' }}>Passport #</dt>\n <dd className=\"ff-font-mono\" style={{ color: 'var(--ff-text-primary)' }}>\n {documentState.extractedData.passportNumber}\n </dd>\n </div>\n )}\n {documentState.extractedData.documentType === 'drivers_license' &&\n 'licenseNumber' in documentState.extractedData && (\n <div className=\"ff-flex ff-justify-between\">\n <dt style={{ color: 'var(--ff-text-muted)' }}>License #</dt>\n <dd className=\"ff-font-mono\" style={{ color: 'var(--ff-text-primary)' }}>\n {documentState.extractedData.licenseNumber}\n </dd>\n </div>\n )}\n {'address' in documentState.extractedData && documentState.extractedData.address && (\n <div className=\"ff-flex ff-justify-between\">\n <dt style={{ color: 'var(--ff-text-muted)' }}>Address</dt>\n <dd className=\"ff-text-right\" style={{ color: 'var(--ff-text-primary)' }}>\n {documentState.extractedData.address.city},{' '}\n {documentState.extractedData.address.province}\n </dd>\n </div>\n )}\n </dl>\n </div>\n )}\n </div>\n );\n};\n","import React, { useCallback, useEffect, useState } from 'react';\nimport {\n FileText,\n Car,\n Home,\n CheckCircle,\n X,\n Loader2,\n ChevronRight,\n ShieldCheck,\n Shield,\n} from 'lucide-react';\nimport { clsx } from 'clsx';\nimport { useKYCStore, type KYCStep } from '../../store/kyc-store';\nimport { getClient } from '../../api/client';\nimport { DocumentUploader } from './DocumentUploader';\nimport { DocumentStatus } from './DocumentStatus';\nimport { StyleProvider } from '../../styles/StyleProvider';\nimport type { DocumentType, KYCSession, KYCDocument } from '@fileflow/shared';\nimport { DOCUMENT_TYPES } from '@fileflow/shared';\n\n// KYC steps for the step indicator\nconst KYC_STEP_LABELS = ['select', 'upload', 'review', 'complete'] as const;\n\ninterface KYCWizardProps {\n requiredDocuments: DocumentType[];\n onComplete?: (session: KYCSession) => void;\n onCancel?: () => void;\n onError?: (error: Error) => void;\n}\n\nconst DOCUMENT_ICONS: Record<DocumentType, React.ElementType> = {\n passport: FileText,\n drivers_license: Car,\n proof_of_address: Home,\n};\n\nexport const KYCWizard: React.FC<KYCWizardProps> = ({\n requiredDocuments,\n onComplete,\n onCancel,\n onError,\n}) => {\n const {\n sessionId,\n step,\n currentDocumentType,\n documents,\n isVerified,\n verificationStatus,\n isLoading,\n error,\n setSessionId,\n setRequiredDocuments,\n setCurrentDocumentType,\n setDocumentStatus,\n setDocumentData,\n setStep,\n nextDocument,\n setVerificationStatus,\n setVerified,\n setLoading,\n setError,\n areAllDocumentsUploaded,\n areAllDocumentsProcessed,\n reset,\n } = useKYCStore();\n\n const [pollingDocument, setPollingDocument] = useState<string | null>(null);\n\n // Initialize\n useEffect(() => {\n setRequiredDocuments(requiredDocuments);\n initializeSession();\n\n return () => {\n // Cleanup polling on unmount\n setPollingDocument(null);\n };\n }, [requiredDocuments]);\n\n const initializeSession = async () => {\n try {\n setLoading(true);\n const client = getClient();\n const result = await client.createKYCSession(requiredDocuments);\n setSessionId(result.sessionId);\n setStep('upload');\n } catch (err) {\n const error = err as Error;\n setError(error.message);\n onError?.(error);\n } finally {\n setLoading(false);\n }\n };\n\n const handleFileSelect = useCallback(\n async (file: File) => {\n if (!sessionId || !currentDocumentType) return;\n\n try {\n setLoading(true);\n setError(null);\n\n const client = getClient();\n const result = await client.uploadKYCDocument(sessionId, currentDocumentType, file);\n\n setDocumentData(currentDocumentType, {\n id: result.documentId,\n status: 'processing',\n });\n\n // Start polling for document status\n setPollingDocument(result.documentId);\n pollDocumentStatus(result.documentId);\n } catch (err) {\n const error = err as Error;\n setDocumentData(currentDocumentType, {\n status: 'failed',\n error: error.message,\n });\n onError?.(error);\n } finally {\n setLoading(false);\n }\n },\n [sessionId, currentDocumentType]\n );\n\n const pollDocumentStatus = async (documentId: string) => {\n const maxAttempts = 30;\n const maxConsecutiveErrors = 3; // Stop after 3 consecutive errors\n let attempts = 0;\n let consecutiveErrors = 0;\n\n const poll = async () => {\n if (attempts >= maxAttempts) {\n setPollingDocument(null);\n if (currentDocumentType) {\n setDocumentData(currentDocumentType, {\n status: 'failed',\n error: 'Processing timed out. Please try again.',\n });\n }\n return;\n }\n\n // Stop polling if we've had too many consecutive errors\n if (consecutiveErrors >= maxConsecutiveErrors) {\n setPollingDocument(null);\n if (currentDocumentType) {\n setDocumentData(currentDocumentType, {\n status: 'failed',\n error: 'Failed to check document status. Please refresh and try again.',\n });\n }\n return;\n }\n\n try {\n const client = getClient();\n const result = await client.getKYCDocument(documentId);\n const doc = result.document as KYCDocument;\n\n // Reset consecutive errors on success\n consecutiveErrors = 0;\n\n const docType = doc.type as DocumentType;\n setDocumentData(docType, {\n id: doc.id,\n status: doc.status,\n extractedData: doc.extractedData,\n confidence: doc.confidence,\n fraudFlags: doc.fraudFlags,\n error: null, // Clear any previous errors\n });\n\n if (doc.status === 'completed' || doc.status === 'requires_review' || doc.status === 'failed') {\n setPollingDocument(null);\n\n // Check if all documents are processed\n if (areAllDocumentsUploaded()) {\n const allProcessed = areAllDocumentsProcessed();\n if (allProcessed) {\n setStep('review');\n }\n } else {\n // Move to next document\n nextDocument();\n }\n return;\n }\n\n // Continue polling\n attempts++;\n setTimeout(poll, 2000);\n } catch (err) {\n const error = err as Error & { status?: number };\n consecutiveErrors++;\n attempts++;\n \n // On 404, stop immediately - the document doesn't exist\n if (error.status === 404 || error.message?.includes('not found')) {\n setPollingDocument(null);\n if (currentDocumentType) {\n setDocumentData(currentDocumentType, {\n status: 'failed',\n error: 'Session not found or invalid state',\n });\n }\n return;\n }\n\n // On other errors, retry with backoff (up to maxConsecutiveErrors times)\n if (consecutiveErrors < maxConsecutiveErrors) {\n setTimeout(poll, 3000 * consecutiveErrors); // Exponential backoff\n } else {\n setPollingDocument(null);\n if (currentDocumentType) {\n setDocumentData(currentDocumentType, {\n status: 'failed',\n error: error.message || 'Failed to process document',\n });\n }\n }\n }\n };\n\n poll();\n };\n\n const handleVerify = async () => {\n if (!sessionId) return;\n\n try {\n setLoading(true);\n setError(null);\n\n const client = getClient();\n const result = await client.verifyKYCSession(sessionId, true);\n\n setVerificationStatus(result.verificationStatus);\n const status = result.verificationStatus as { isVerified: boolean };\n setVerified(status.isVerified);\n setStep('complete');\n\n onComplete?.(result as unknown as KYCSession);\n } catch (err) {\n const error = err as Error;\n setError(error.message);\n onError?.(error);\n } finally {\n setLoading(false);\n }\n };\n\n const handleCancel = () => {\n reset();\n onCancel?.();\n };\n\n const selectDocument = (type: DocumentType) => {\n setCurrentDocumentType(type);\n setStep('upload');\n };\n\n const isDocumentComplete = (type: DocumentType) => {\n const doc = documents.get(type);\n return doc?.status === 'completed' || doc?.status === 'requires_review';\n };\n\n // Get step index for the step indicator\n const getDisplayStepIndex = () => {\n const currentStep = step === 'processing' ? 'upload' : step;\n return KYC_STEP_LABELS.indexOf(currentStep as typeof KYC_STEP_LABELS[number]);\n };\n\n return (\n <StyleProvider>\n <div className=\"ff-container ff-modal\">\n {/* Modal Header - Demo style */}\n <div className=\"ff-modal-header\">\n <div className=\"ff-modal-header-left\">\n <div className=\"ff-flex ff-items-center ff-gap-3\">\n <div className=\"ff-modal-icon\">\n <Shield />\n </div>\n <h2 className=\"ff-modal-title\">Identity Verification</h2>\n </div>\n {/* Step Indicator - Demo style */}\n <div className=\"ff-steps ff-ml-4\">\n {KYC_STEP_LABELS.map((s, i) => (\n <React.Fragment key={s}>\n <div\n className={clsx(\n 'ff-step',\n getDisplayStepIndex() === i && 'ff-step-active',\n getDisplayStepIndex() > i && 'ff-step-complete',\n getDisplayStepIndex() < i && 'ff-step-pending'\n )}\n >\n {getDisplayStepIndex() > i ? '✓' : i + 1}\n </div>\n {i < KYC_STEP_LABELS.length - 1 && (\n <div className={clsx(\n 'ff-step-connector',\n getDisplayStepIndex() > i && 'ff-step-connector-complete'\n )} />\n )}\n </React.Fragment>\n ))}\n </div>\n </div>\n <button\n onClick={handleCancel}\n className=\"ff-modal-close\"\n >\n <X className=\"ff-w-5 ff-h-5\" />\n </button>\n </div>\n\n {/* Modal Body */}\n <div className=\"ff-modal-body\">\n {error && (\n <div className=\"ff-mb-4 ff-p-4 ff-rounded-lg ff-text-sm\" style={{ backgroundColor: 'var(--ff-error-light)', color: 'var(--ff-error)' }}>\n {error}\n </div>\n )}\n\n {/* Document Selection */}\n {step === 'select' && (\n <div className=\"ff-space-y-4\">\n <p className=\"ff-text-center ff-mb-6\" style={{ color: 'var(--ff-text-muted)' }}>\n Please upload the following documents to verify your identity\n </p>\n <div className=\"ff-grid ff-gap-3\">\n {requiredDocuments.map((type) => {\n const Icon = DOCUMENT_ICONS[type];\n const info = DOCUMENT_TYPES[type];\n const doc = documents.get(type);\n const isComplete = isDocumentComplete(type);\n\n return (\n <button\n key={type}\n onClick={() => selectDocument(type)}\n className={clsx(\n 'ff-flex ff-items-center ff-gap-4 ff-p-4 ff-rounded-xl ff-border-2 ff-text-left ff-transition-all ff-duration-150',\n isComplete\n ? 'ff-border-transparent'\n : 'ff-border-transparent hover:ff-border-transparent'\n )}\n style={{\n backgroundColor: isComplete ? 'var(--ff-success-light)' : 'var(--ff-bg-secondary)',\n borderColor: isComplete ? 'var(--ff-success)' : 'var(--ff-border-light)',\n }}\n >\n <div\n className=\"ff-p-3 ff-rounded-xl\"\n style={{\n backgroundColor: isComplete ? 'rgba(41, 142, 51, 0.15)' : 'var(--ff-bg-tertiary)',\n }}\n >\n {isComplete ? (\n <CheckCircle className=\"ff-w-6 ff-h-6\" style={{ color: 'var(--ff-success)' }} />\n ) : (\n <Icon className=\"ff-w-6 ff-h-6\" style={{ color: 'var(--ff-text-secondary)' }} />\n )}\n </div>\n <div className=\"ff-flex-1\">\n <p className=\"ff-font-medium\" style={{ color: 'var(--ff-text-primary)' }}>{info.label}</p>\n <p className=\"ff-text-sm\" style={{ color: 'var(--ff-text-muted)' }}>{info.description}</p>\n </div>\n <ChevronRight className=\"ff-w-5 ff-h-5\" style={{ color: 'var(--ff-text-muted)' }} />\n </button>\n );\n })}\n </div>\n </div>\n )}\n\n {/* Document Upload */}\n {step === 'upload' && currentDocumentType && (\n <div className=\"ff-py-4\">\n <div className=\"ff-max-w-lg ff-mx-auto\">\n <DocumentUploader documentType={currentDocumentType} onFileSelect={handleFileSelect} />\n </div>\n </div>\n )}\n\n {/* Processing */}\n {step === 'processing' && (\n <div className=\"ff-flex ff-flex-col ff-items-center ff-justify-center ff-py-12\">\n <Loader2 className=\"ff-w-12 ff-h-12 ff-animate-spin ff-mb-4\" style={{ color: 'var(--ff-primary-90)' }} />\n <h3 className=\"ff-text-lg ff-font-semibold ff-mb-2\" style={{ color: 'var(--ff-text-primary)' }}>\n Processing Documents\n </h3>\n <p style={{ color: 'var(--ff-text-muted)' }} className=\"ff-text-center\">\n We're analyzing your documents. This may take a moment...\n </p>\n </div>\n )}\n\n {/* Review */}\n {step === 'review' && (\n <div className=\"ff-space-y-6\">\n <div className=\"ff-text-center ff-mb-6\">\n <h3 className=\"ff-text-lg ff-font-semibold\" style={{ color: 'var(--ff-text-primary)' }}>Review Your Documents</h3>\n <p style={{ color: 'var(--ff-text-muted)' }}>\n Please review the extracted information before completing verification\n </p>\n </div>\n\n <div className=\"ff-grid ff-gap-4\">\n {requiredDocuments.map((type) => (\n <div\n key={type}\n className=\"ff-rounded-xl ff-p-4\"\n style={{ backgroundColor: 'var(--ff-bg-secondary)', border: '1px solid var(--ff-border-light)' }}\n >\n <DocumentStatus documentType={type} showDetails={true} />\n </div>\n ))}\n </div>\n </div>\n )}\n\n {/* Complete */}\n {step === 'complete' && (\n <div className=\"ff-flex ff-flex-col ff-items-center ff-justify-center ff-py-12\">\n <div\n className=\"ff-w-16 ff-h-16 ff-rounded-full ff-flex ff-items-center ff-justify-center ff-mb-4\"\n style={{ backgroundColor: isVerified ? 'var(--ff-success-light)' : 'var(--ff-warning-light)' }}\n >\n {isVerified ? (\n <CheckCircle className=\"ff-w-10 ff-h-10\" style={{ color: 'var(--ff-success)' }} />\n ) : (\n <ShieldCheck className=\"ff-w-10 ff-h-10\" style={{ color: 'var(--ff-warning)' }} />\n )}\n </div>\n <h3 className=\"ff-text-xl ff-font-semibold ff-mb-2\" style={{ color: 'var(--ff-text-primary)' }}>\n {isVerified ? 'Verification Complete!' : 'Review Required'}\n </h3>\n <p style={{ color: 'var(--ff-text-muted)' }} className=\"ff-text-center\">\n {isVerified\n ? 'Your identity has been successfully verified.'\n : 'Additional review may be required. We will contact you if needed.'}\n </p>\n </div>\n )}\n </div>\n\n {/* Modal Footer */}\n {step !== 'complete' && (\n <div className=\"ff-modal-footer\">\n <button\n onClick={() => {\n if (step === 'upload') {\n setStep('select');\n } else if (step === 'review') {\n setStep('select');\n }\n }}\n disabled={isLoading}\n className=\"ff-btn ff-btn-secondary\"\n >\n Back\n </button>\n\n {step === 'review' && (\n <button\n onClick={handleVerify}\n disabled={isLoading || !areAllDocumentsProcessed()}\n className=\"ff-btn ff-btn-primary\"\n >\n {isLoading ? (\n <>\n <Loader2 className=\"ff-w-4 ff-h-4 ff-animate-spin\" />\n Verifying...\n </>\n ) : (\n 'Complete Verification'\n )}\n </button>\n )}\n\n {step === 'select' && areAllDocumentsUploaded() && (\n <button\n onClick={() => setStep('review')}\n className=\"ff-btn ff-btn-primary\"\n >\n Review & Verify\n </button>\n )}\n </div>\n )}\n </div>\n </StyleProvider>\n );\n};\n"],"names":["__iconNode","Car","createLucideIcon","Clock","FileText","House","Image","ShieldCheck","Shield","createEmptyDocumentState","type","initialState","useKYCStore","create","set","get","sessionId","documents","docsMap","file","doc","previewUrl","updated","status","data","step","requiredDocuments","currentDocumentType","currentIndex","i","verified","isLoading","error","DocumentUploader","documentType","onFileSelect","setDocumentFile","documentState","documentInfo","DOCUMENT_TYPES","onDrop","useCallback","acceptedFiles","rejectedFiles","getRootProps","getInputProps","isDragActive","useDropzone","formatFileSize","bytes","getFileIcon","_a","jsx","clearFile","e","jsxs","X","clsx","Upload","format","AlertCircle","DocumentStatus","showDetails","statusConfig","CheckCircle","AlertTriangle","XCircle","Loader2","Icon","getConfidenceColor","confidence","flag","index","KYC_STEP_LABELS","DOCUMENT_ICONS","Home","KYCWizard","onComplete","onCancel","onError","isVerified","verificationStatus","setSessionId","setRequiredDocuments","setCurrentDocumentType","setDocumentStatus","setDocumentData","setStep","nextDocument","setVerificationStatus","setVerified","setLoading","setError","areAllDocumentsUploaded","areAllDocumentsProcessed","reset","pollingDocument","setPollingDocument","useState","useEffect","initializeSession","result","getClient","err","handleFileSelect","pollDocumentStatus","documentId","attempts","consecutiveErrors","poll","docType","handleVerify","handleCancel","selectDocument","isDocumentComplete","getDisplayStepIndex","currentStep","StyleProvider","s","React","info","isComplete","ChevronRight","Fragment"],"mappings":"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","x_google_ignoreList":[0,1,2,3,4,5,6]}
package/dist/import.js CHANGED
@@ -1,2 +1,2 @@
1
- "use strict";Object.defineProperty(exports,Symbol.toStringTag,{value:"Module"});const r=require("./ImportWizard-B20izQeY.js");exports.ColumnMapper=r.ColumnMapper;exports.DataTable=r.DataTable;exports.FileUploader=r.FileUploader;exports.ImportWizard=r.ImportWizard;exports.ValidationSummary=r.ValidationSummary;exports.useImportStore=r.useImportStore;
1
+ "use strict";Object.defineProperty(exports,Symbol.toStringTag,{value:"Module"});const r=require("./ImportWizard-x7cTPmMH.js");exports.ColumnMapper=r.ColumnMapper;exports.DataTable=r.DataTable;exports.FileUploader=r.FileUploader;exports.ImportWizard=r.ImportWizard;exports.ValidationSummary=r.ValidationSummary;exports.useImportStore=r.useImportStore;
2
2
  //# sourceMappingURL=import.js.map
package/dist/import.mjs CHANGED
@@ -1,4 +1,4 @@
1
- import { C as o, D as e, F as s, I as m, V as p, u as t } from "./ImportWizard-Ctm4PB3o.mjs";
1
+ import { C as o, D as e, F as s, I as m, V as p, u as t } from "./ImportWizard-_wJ7Qxpr.mjs";
2
2
  export {
3
3
  o as ColumnMapper,
4
4
  e as DataTable,
@@ -1,7 +1,7 @@
1
1
  import { jsx as ur } from "react/jsx-runtime";
2
2
  import lt, { useRef as nt, useState as pn, useCallback as _e, useEffect as ht, useMemo as et, useReducer as ki, forwardRef as Gr, useImperativeHandle as _i, Fragment as Si, createElement as jr } from "react";
3
3
  import Ei from "react-dom";
4
- const ga = `.ff-container{width:100%}@media (min-width: 640px){.ff-container{max-width:640px}}@media (min-width: 768px){.ff-container{max-width:768px}}@media (min-width: 1024px){.ff-container{max-width:1024px}}@media (min-width: 1280px){.ff-container{max-width:1280px}}@media (min-width: 1536px){.ff-container{max-width:1536px}}.fileflow-sdk-root{all:revert;isolation:isolate;font-family:ui-sans-serif,system-ui,-apple-system,BlinkMacSystemFont,Segoe UI,Roboto,Helvetica Neue,Arial,Noto Sans,sans-serif;font-size:16px;line-height:1.5;font-weight:400;-webkit-font-smoothing:antialiased;-moz-osx-font-smoothing:grayscale;box-sizing:border-box;color:#21201d;background-color:transparent;text-align:left;direction:ltr;text-rendering:optimizeLegibility;margin:0;padding:0;--tw-border-spacing-x: 0;--tw-border-spacing-y: 0;--tw-translate-x: 0;--tw-translate-y: 0;--tw-rotate: 0;--tw-skew-x: 0;--tw-skew-y: 0;--tw-scale-x: 1;--tw-scale-y: 1;--tw-pan-x: ;--tw-pan-y: ;--tw-pinch-zoom: ;--tw-scroll-snap-strictness: proximity;--tw-gradient-from-position: ;--tw-gradient-via-position: ;--tw-gradient-to-position: ;--tw-ordinal: ;--tw-slashed-zero: ;--tw-numeric-figure: ;--tw-numeric-spacing: ;--tw-numeric-fraction: ;--tw-ring-inset: ;--tw-ring-offset-width: 0px;--tw-ring-offset-color: #fff;--tw-ring-color: rgb(59 130 246 / .5);--tw-ring-offset-shadow: 0 0 #0000;--tw-ring-shadow: 0 0 #0000;--tw-shadow: 0 0 #0000;--tw-shadow-colored: 0 0 #0000;--tw-blur: ;--tw-brightness: ;--tw-contrast: ;--tw-grayscale: ;--tw-hue-rotate: ;--tw-invert: ;--tw-saturate: ;--tw-sepia: ;--tw-drop-shadow: ;--tw-backdrop-blur: ;--tw-backdrop-brightness: ;--tw-backdrop-contrast: ;--tw-backdrop-grayscale: ;--tw-backdrop-hue-rotate: ;--tw-backdrop-invert: ;--tw-backdrop-opacity: ;--tw-backdrop-saturate: ;--tw-backdrop-sepia: }.fileflow-sdk-root *,.fileflow-sdk-root *:before,.fileflow-sdk-root *:after{box-sizing:border-box;border-width:0;border-style:solid;border-color:currentColor;--tw-ring-inset: ;--tw-ring-offset-width: 0px;--tw-ring-offset-color: #fff;--tw-ring-color: rgb(59 130 246 / .5);--tw-ring-offset-shadow: 0 0 #0000;--tw-ring-shadow: 0 0 #0000;--tw-shadow: 0 0 #0000;--tw-shadow-colored: 0 0 #0000}.fileflow-sdk-root button,.fileflow-sdk-root input,.fileflow-sdk-root select,.fileflow-sdk-root textarea{font-family:inherit;font-size:inherit;line-height:inherit;margin:0}.fileflow-sdk-root button{cursor:pointer;background:none;border:none;padding:0}.fileflow-sdk-root img,.fileflow-sdk-root svg{display:block;max-width:100%}.fileflow-sdk-root a{color:inherit;text-decoration:inherit}.fileflow-sdk-root h1,.fileflow-sdk-root h2,.fileflow-sdk-root h3,.fileflow-sdk-root h4,.fileflow-sdk-root h5,.fileflow-sdk-root h6{font-size:inherit;font-weight:inherit;margin:0}.fileflow-sdk-root p,.fileflow-sdk-root ul,.fileflow-sdk-root ol{margin:0;padding:0}.fileflow-sdk-root ul,.fileflow-sdk-root ol{list-style:none}.fileflow-sdk-root{--ff-primary-10: #f9fafb;--ff-primary-20: #eef0f6;--ff-primary-30: #e2e6f0;--ff-primary-40: #dce1ec;--ff-primary-50: #d7e1f2;--ff-primary-60: #c6d6f0;--ff-primary-70: #c0d0ed;--ff-primary-80: #b9cbeb;--ff-primary-90: #728ab3;--ff-primary-100: #6980a5;--ff-primary-110: #4f6180;--ff-primary-120: #132036;--ff-primary-500: #d7e1f2;--ff-primary-600: #c0d0ed;--ff-brown-10: #f0ece8;--ff-brown-20: #d4c4ba;--ff-brown-30: #b59f8c;--ff-brown-40: #a68c74;--ff-brown-50: #97795d;--ff-brown-60: #8a6447;--ff-brown-70: #7a522f;--ff-brown-80: #6b3f18;--ff-brown-90: #613916;--ff-brown-100: #563213;--ff-brown-110: #4b2c11;--ff-brown-120: #36200c;--ff-primary-text: #6b3f18;--ff-gray-white: #ffffff;--ff-gray-10: #fcfcfb;--ff-gray-20: #f9f9f7;--ff-gray-30: #f0efed;--ff-gray-40: #e9e8e4;--ff-gray-50: #e2e0dd;--ff-gray-60: #dadad5;--ff-gray-70: #cfceca;--ff-gray-80: #bcbbb7;--ff-gray-90: #8e8d89;--ff-gray-100: #848280;--ff-gray-110: #656461;--ff-gray-120: #21201d;--ff-bg-primary: var(--ff-gray-white);--ff-bg-secondary: var(--ff-gray-10);--ff-bg-tertiary: var(--ff-gray-30);--ff-bg-brand: var(--ff-primary-50);--ff-bg-brand-light: var(--ff-primary-20);--ff-text-primary: var(--ff-gray-120);--ff-text-secondary: var(--ff-gray-110);--ff-text-muted: var(--ff-gray-90);--ff-text-supportive: var(--ff-gray-80);--ff-text-inverse: var(--ff-gray-white);--ff-text-link: var(--ff-primary-90);--ff-text-brand: var(--ff-brown-80);--ff-border-light: var(--ff-gray-30);--ff-border-default: var(--ff-gray-40);--ff-border-dark: var(--ff-gray-70);--ff-border-brand: var(--ff-brown-80);--ff-border-focus: var(--ff-primary-70);--ff-icon-default: var(--ff-gray-90);--ff-icon-active: var(--ff-gray-120);--ff-icon-muted: var(--ff-gray-80);--ff-icon-brand: var(--ff-brown-80);--ff-icon-inverse: var(--ff-gray-white);--ff-success-light: #e7f5e4;--ff-success: #298e33;--ff-success-dark: #1f3c20;--ff-warning-light: #ffe6c1;--ff-warning: #a86807;--ff-warning-dark: #4a3723;--ff-error-light: #fcdede;--ff-error: #d43338;--ff-error-dark: #641a1a;--ff-focus-ring: rgba(192, 208, 237, .5);--ff-focus-ring-accent: rgba(168, 85, 247, .25);--ff-accent-50: #faf5ff;--ff-accent-100: #f3e8ff;--ff-accent-200: #e9d5ff;--ff-accent-300: #d8b4fe;--ff-accent-400: #c084fc;--ff-accent-500: #a855f7;--ff-accent-600: #9333ea;--ff-accent-700: #7c3aed;--ff-accent-800: #6b21a8;--ff-accent-900: #581c87;--ff-navy-950: #1a2029}.fileflow-sdk-root .ff-container{font-family:Inter,-apple-system,BlinkMacSystemFont,Segoe UI,Roboto,sans-serif;color:var(--ff-text-primary);font-feature-settings:"cv02","cv03","cv04","cv11"}.fileflow-sdk-root .ff-table-container{position:relative;overflow:auto;border-radius:1rem;border-width:1px;border-color:var(--ff-border-light);background-color:var(--ff-bg-primary)}.fileflow-sdk-root .ff-table{width:100%;font-size:.875rem;line-height:1.25rem}.fileflow-sdk-root .ff-table thead{position:sticky;top:0;z-index:10;background-color:var(--ff-bg-secondary)}.fileflow-sdk-root .ff-table thead tr:first-child th:first-child{border-top-left-radius:1rem}.fileflow-sdk-root .ff-table thead tr:first-child th:last-child{border-top-right-radius:1rem}.fileflow-sdk-root .ff-table th{padding:.75rem 1rem;text-align:left;font-size:.75rem;line-height:1rem;font-weight:600;text-transform:uppercase;letter-spacing:.05em;color:var(--ff-text-secondary);border-bottom:2px solid var(--ff-border-light)}.fileflow-sdk-root .ff-table td{padding:.75rem 1rem;color:var(--ff-text-primary);border-bottom:1px solid var(--ff-border-light)}.fileflow-sdk-root .ff-table tbody tr{transition-property:color,background-color,border-color,text-decoration-color,fill,stroke;transition-timing-function:cubic-bezier(.4,0,.2,1);transition-duration:.15s}.fileflow-sdk-root .ff-table tbody tr:hover{background-color:var(--ff-bg-secondary)}.fileflow-sdk-root .ff-cell-error{border-left-width:4px;background-color:var(--ff-error-light);border-left-color:var(--ff-error)}.fileflow-sdk-root .ff-cell-warning{border-left-width:4px;background-color:var(--ff-warning-light);border-left-color:var(--ff-warning)}.fileflow-sdk-root .ff-cell-editing{--tw-ring-offset-shadow: var(--tw-ring-inset) 0 0 0 var(--tw-ring-offset-width) var(--tw-ring-offset-color);--tw-ring-shadow: var(--tw-ring-inset) 0 0 0 calc(2px + var(--tw-ring-offset-width)) var(--tw-ring-color);box-shadow:var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow, 0 0 #0000);background-color:var(--ff-primary-50);--tw-ring-color: var(--ff-primary-400)}.fileflow-sdk-root .ff-cell-success{background-color:var(--ff-success-light)}.fileflow-sdk-root .ff-row-error{background-color:#d433381a}.fileflow-sdk-root .ff-edit-btn{color:var(--ff-text-muted);border-radius:.5rem;padding:.25rem}.fileflow-sdk-root .ff-edit-btn:hover{color:var(--ff-text-secondary);background-color:var(--ff-bg-tertiary)}.fileflow-sdk-root .ff-delete-btn{border-radius:.75rem;padding:.375rem;color:var(--ff-gray-80);background-color:transparent;transition-property:color,background-color,border-color,text-decoration-color,fill,stroke;transition-timing-function:cubic-bezier(.4,0,.2,1);transition-duration:.15s}.fileflow-sdk-root .ff-delete-btn svg{display:block;width:1rem;height:1rem}.fileflow-sdk-root .ff-delete-btn:hover{color:var(--ff-error);background-color:var(--ff-error-light)}.fileflow-sdk-root .ff-delete-btn:disabled{cursor:not-allowed;opacity:.3}.fileflow-sdk-root .ff-delete-btn:disabled:hover{color:var(--ff-gray-80);background-color:transparent}.fileflow-sdk-root .ff-input{width:100%;border-radius:.75rem;border-width:1px;padding:.75rem 1rem;font-size:.875rem;line-height:1.25rem;border-color:var(--ff-border-default);background-color:var(--ff-bg-primary);color:var(--ff-text-primary);transition-property:all;transition-timing-function:cubic-bezier(.4,0,.2,1);transition-duration:.2s}.fileflow-sdk-root .ff-input::-moz-placeholder{color:var(--ff-text-muted)}.fileflow-sdk-root .ff-input::placeholder{color:var(--ff-text-muted)}.fileflow-sdk-root .ff-input:hover{border-color:var(--ff-border-dark)}.fileflow-sdk-root .ff-input:focus{outline:2px solid transparent;outline-offset:2px;--tw-ring-offset-shadow: var(--tw-ring-inset) 0 0 0 var(--tw-ring-offset-width) var(--tw-ring-offset-color);--tw-ring-shadow: var(--tw-ring-inset) 0 0 0 calc(4px + var(--tw-ring-offset-width)) var(--tw-ring-color);box-shadow:var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow, 0 0 #0000);border-color:var(--ff-primary-500);--tw-ring-color: var(--ff-focus-ring)}.fileflow-sdk-root .ff-input-error{border-color:var(--ff-error)}.fileflow-sdk-root .ff-input-error:focus{border-color:var(--ff-error);--tw-ring-color: rgba(212, 51, 56, .2)}.fileflow-sdk-root .ff-select,.fileflow-sdk-root select.ff-input{cursor:pointer;-webkit-appearance:none;-moz-appearance:none;appearance:none;padding-right:2.5rem;background-image:url("data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' fill='none' viewBox='0 0 20 20'%3e%3cpath stroke='%2378716c' stroke-linecap='round' stroke-linejoin='round' stroke-width='1.5' d='M6 8l4 4 4-4'/%3e%3c/svg%3e");background-position:right .75rem center;background-repeat:no-repeat;background-size:1.25em 1.25em}.fileflow-sdk-root .ff-btn{display:inline-flex;align-items:center;justify-content:center;gap:.5rem;font-size:.875rem;line-height:1.25rem;font-weight:600;padding:.625rem 1.25rem;border-radius:.75rem;transition-property:all;transition-timing-function:cubic-bezier(.4,0,.2,1);transition-duration:.15s;border-width:1px;border-color:transparent;cursor:pointer}.fileflow-sdk-root .ff-btn:focus{outline:2px solid transparent;outline-offset:2px}.fileflow-sdk-root .ff-btn:disabled{cursor:not-allowed;opacity:.5}.fileflow-sdk-root .ff-btn-primary{background-color:var(--ff-primary-110);color:var(--ff-gray-white)}.fileflow-sdk-root .ff-btn-primary:hover:not(:disabled){background-color:var(--ff-primary-120);transform:translateY(-1px);box-shadow:0 4px 12px -2px #0003}.fileflow-sdk-root .ff-btn-primary:active:not(:disabled){background-color:var(--ff-primary-130);transform:translateY(0)}.fileflow-sdk-root .ff-btn-primary:focus-visible{box-shadow:0 0 0 3px var(--ff-focus-ring)}.fileflow-sdk-root .ff-btn-secondary{background-color:var(--ff-bg-primary);color:var(--ff-text-primary);border-color:var(--ff-border-default)}.fileflow-sdk-root .ff-btn-secondary:hover:not(:disabled){background-color:var(--ff-bg-secondary);border-color:var(--ff-border-dark)}.fileflow-sdk-root .ff-btn-secondary:active:not(:disabled){background-color:var(--ff-bg-tertiary)}.fileflow-sdk-root .ff-btn-secondary:focus-visible{box-shadow:0 0 0 3px var(--ff-focus-ring)}.fileflow-sdk-root .ff-btn-ghost{background-color:var(--ff-bg-primary);color:var(--ff-text-secondary);border-color:var(--ff-border-default)}.fileflow-sdk-root .ff-btn-ghost:hover:not(:disabled){background-color:var(--ff-bg-tertiary);color:var(--ff-text-primary);border-color:var(--ff-border-dark)}.fileflow-sdk-root .ff-btn-accent{background-color:var(--ff-accent-500);color:var(--ff-text-inverse)}.fileflow-sdk-root .ff-btn-accent:hover:not(:disabled){background-color:var(--ff-accent-600);transform:translateY(-1px);box-shadow:0 4px 12px -2px #a855f74d}.fileflow-sdk-root .ff-btn-accent:active:not(:disabled){background-color:var(--ff-accent-700);transform:translateY(0)}.fileflow-sdk-root .ff-btn-accent:focus{outline:2px solid transparent;outline-offset:2px;--tw-ring-offset-shadow: var(--tw-ring-inset) 0 0 0 var(--tw-ring-offset-width) var(--tw-ring-offset-color);--tw-ring-shadow: var(--tw-ring-inset) 0 0 0 calc(4px + var(--tw-ring-offset-width)) var(--tw-ring-color);box-shadow:var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow, 0 0 #0000);--tw-ring-color: var(--ff-focus-ring-accent)}.fileflow-sdk-root .ff-btn-danger{--tw-bg-opacity: 1;background-color:rgb(239 68 68 / var(--tw-bg-opacity, 1));--tw-text-opacity: 1;color:rgb(255 255 255 / var(--tw-text-opacity, 1))}.fileflow-sdk-root .ff-btn-danger:hover:not(:disabled){--tw-bg-opacity: 1;background-color:rgb(220 38 38 / var(--tw-bg-opacity, 1));transform:translateY(-1px)}.fileflow-sdk-root .ff-btn-link{background-color:transparent;color:var(--ff-primary-text);padding:.25rem .5rem}.fileflow-sdk-root .ff-btn-link:hover:not(:disabled){color:#4a2a10;text-decoration:underline}.fileflow-sdk-root .ff-btn-sm{border-radius:.375rem;padding:.5rem .75rem;font-size:.875rem;line-height:1.25rem}.fileflow-sdk-root .ff-btn-lg{border-radius:1rem;padding:.75rem 1.5rem;font-size:1rem;line-height:1.5rem}.fileflow-sdk-root .ff-checkbox{height:1.25rem;width:1.25rem;cursor:pointer;border-radius:.5rem;border-width:2px;transition-property:all;transition-timing-function:cubic-bezier(.4,0,.2,1);transition-duration:.15s;border-color:var(--ff-border-default);background-color:var(--ff-bg-primary)}.fileflow-sdk-root .ff-checkbox:hover{border-color:var(--ff-primary-400)}.fileflow-sdk-root .ff-checkbox:checked{background-color:var(--ff-primary-500);border-color:var(--ff-primary-500);background-image:url("data:image/svg+xml,%3csvg viewBox='0 0 16 16' fill='white' xmlns='http://www.w3.org/2000/svg'%3e%3cpath d='M12.207 4.793a1 1 0 010 1.414l-5 5a1 1 0 01-1.414 0l-2-2a1 1 0 011.414-1.414L6.5 9.086l4.293-4.293a1 1 0 011.414 0z'/%3e%3c/svg%3e")}.fileflow-sdk-root .ff-checkbox:focus{outline:2px solid transparent;outline-offset:2px;--tw-ring-offset-shadow: var(--tw-ring-inset) 0 0 0 var(--tw-ring-offset-width) var(--tw-ring-offset-color);--tw-ring-shadow: var(--tw-ring-inset) 0 0 0 calc(4px + var(--tw-ring-offset-width)) var(--tw-ring-color);box-shadow:var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow, 0 0 #0000);--tw-ring-color: var(--ff-focus-ring)}.fileflow-sdk-root .ff-radio{height:1.25rem;width:1.25rem;cursor:pointer;border-radius:9999px;border-width:2px;transition-property:all;transition-timing-function:cubic-bezier(.4,0,.2,1);transition-duration:.15s;border-color:var(--ff-border-default);background-color:var(--ff-bg-primary)}.fileflow-sdk-root .ff-radio:checked{border-color:var(--ff-primary-500);border-width:6px}.fileflow-sdk-root .ff-radio:focus{outline:2px solid transparent;outline-offset:2px;--tw-ring-offset-shadow: var(--tw-ring-inset) 0 0 0 var(--tw-ring-offset-width) var(--tw-ring-offset-color);--tw-ring-shadow: var(--tw-ring-inset) 0 0 0 calc(4px + var(--tw-ring-offset-width)) var(--tw-ring-color);box-shadow:var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow, 0 0 #0000);--tw-ring-color: var(--ff-focus-ring)}.fileflow-sdk-root .ff-toggle{position:relative;height:1.5rem;width:2.75rem;cursor:pointer;border-radius:9999px;transition-property:all;transition-timing-function:cubic-bezier(.4,0,.2,1);transition-duration:.2s;background-color:var(--ff-border-default)}.fileflow-sdk-root .ff-toggle:after{position:absolute;top:.125rem;left:.125rem;height:1.25rem;width:1.25rem;border-radius:9999px;transition-property:transform;transition-timing-function:cubic-bezier(.4,0,.2,1);transition-duration:.2s;content:"";background-color:var(--ff-bg-primary);box-shadow:0 1px 3px #0000001a}.fileflow-sdk-root .ff-toggle:checked{background-color:var(--ff-primary-500)}.fileflow-sdk-root .ff-toggle:checked:after{transform:translate(1.25rem)}.fileflow-sdk-root .ff-dropzone{display:flex;flex-direction:column;align-items:center;justify-content:center;padding:2rem;border-radius:1rem;border-width:2px;border-style:dashed;border-color:var(--ff-border-default);background-color:var(--ff-bg-secondary);cursor:pointer;transition-property:all;transition-timing-function:cubic-bezier(.4,0,.2,1);transition-duration:.15s}.fileflow-sdk-root .ff-dropzone *{pointer-events:none}.fileflow-sdk-root .ff-dropzone input{pointer-events:auto}.fileflow-sdk-root .ff-dropzone:hover{border-color:var(--ff-primary-70);background-color:var(--ff-primary-10)}.fileflow-sdk-root .ff-dropzone-active{border-color:var(--ff-primary-90);background-color:var(--ff-primary-20);--tw-scale-x: 1.01;--tw-scale-y: 1.01;transform:translate(var(--tw-translate-x),var(--tw-translate-y)) rotate(var(--tw-rotate)) skew(var(--tw-skew-x)) skewY(var(--tw-skew-y)) scaleX(var(--tw-scale-x)) scaleY(var(--tw-scale-y))}.fileflow-sdk-root .ff-dropzone-icon-wrapper{margin-left:auto;margin-right:auto;margin-bottom:1rem;display:flex;height:3.5rem;width:3.5rem;align-items:center;justify-content:center;border-radius:1rem;background-color:var(--ff-primary-20);transition-property:color,background-color,border-color,text-decoration-color,fill,stroke;transition-timing-function:cubic-bezier(.4,0,.2,1);transition-duration:.15s}.fileflow-sdk-root .ff-dropzone-active .ff-dropzone-icon-wrapper{background-color:var(--ff-primary-30)}.fileflow-sdk-root .ff-dropzone-icon{height:1.75rem;width:1.75rem;color:var(--ff-primary-90);transition-property:color,background-color,border-color,text-decoration-color,fill,stroke;transition-timing-function:cubic-bezier(.4,0,.2,1);transition-duration:.15s}.fileflow-sdk-root .ff-dropzone-active .ff-dropzone-icon{color:var(--ff-primary-110)}.fileflow-sdk-root .ff-dropzone-text{margin-bottom:.25rem;font-size:1rem;line-height:1.5rem;font-weight:600;color:var(--ff-text-primary)}.fileflow-sdk-root .ff-dropzone-hint{margin-bottom:1rem;font-size:.875rem;line-height:1.25rem;color:var(--ff-text-muted)}.fileflow-sdk-root .ff-dropzone-formats{margin-top:.75rem;font-size:.75rem;line-height:1rem;color:var(--ff-text-muted)}.fileflow-sdk-root .ff-badge{display:inline-flex;align-items:center;border-radius:9999px;padding:.25rem .625rem;font-size:.75rem;line-height:1rem;font-weight:600}.fileflow-sdk-root .ff-badge-error{background-color:var(--ff-error-light);color:var(--ff-error)}.fileflow-sdk-root .ff-badge-warning{background-color:var(--ff-warning-light);color:var(--ff-warning)}.fileflow-sdk-root .ff-badge-success{background-color:var(--ff-success-light);color:var(--ff-success)}.fileflow-sdk-root .ff-badge-info{background-color:var(--ff-primary-20);color:var(--ff-primary-90)}.fileflow-sdk-root .ff-badge-neutral{background-color:var(--ff-bg-tertiary);color:var(--ff-text-secondary)}.fileflow-sdk-root .ff-badge-primary{background-color:var(--ff-primary-100);color:var(--ff-primary-700)}.fileflow-sdk-root .ff-badge-accent{background-color:var(--ff-accent-100);color:var(--ff-accent-700)}.fileflow-sdk-root .ff-overlay{position:fixed;top:0;right:0;bottom:0;left:0;z-index:50;background-color:#1c191780;-webkit-backdrop-filter:blur(4px);backdrop-filter:blur(4px);display:flex;align-items:center;justify-content:center;padding:1rem;animation:ff-fade-in .2s ease-out;overflow-y:auto}@keyframes ff-fade-in{0%{opacity:0}to{opacity:1}}.fileflow-sdk-root .ff-overlay{position:fixed;top:0;right:0;bottom:0;left:0;z-index:9999;background-color:#00000080;display:flex;align-items:center;justify-content:center;padding:1rem}.fileflow-sdk-root .ff-modal{background-color:var(--ff-bg-primary);border-radius:1.25rem;width:100%;max-width:56rem;display:flex;flex-direction:column;max-height:min(90vh,calc(100vh - 2rem));box-shadow:0 25px 50px -12px #00000040;animation:ff-scale-in .2s ease-out;margin-top:auto;margin-bottom:auto}.fileflow-sdk-root .ff-embed{background-color:var(--ff-bg-primary);display:flex;width:100%;flex-direction:column;border-radius:1rem;border-width:1px;border-color:var(--ff-border-light)}.fileflow-sdk-root .ff-embed .ff-modal-header{border-top-left-radius:1rem;border-top-right-radius:1rem}.fileflow-sdk-root .ff-embed .ff-modal-footer{border-bottom-right-radius:1rem;border-bottom-left-radius:1rem}@keyframes ff-scale-in{0%{opacity:0;transform:scale(.95)}to{opacity:1;transform:scale(1)}}.fileflow-sdk-root .ff-modal-header{display:flex;align-items:center;justify-content:space-between;padding:1.25rem 1.5rem;border-bottom:1px solid var(--ff-border-light);flex-shrink:0;border-top-left-radius:1.25rem;border-top-right-radius:1.25rem}.fileflow-sdk-root .ff-modal-header-left{display:flex;align-items:center;gap:1rem}.fileflow-sdk-root .ff-modal-icon{display:flex;height:2.5rem;width:2.5rem;align-items:center;justify-content:center;border-radius:.75rem;background-color:var(--ff-primary-20)}.fileflow-sdk-root .ff-modal-icon svg{height:1.25rem;width:1.25rem;color:var(--ff-primary-90)}.fileflow-sdk-root .ff-modal-title{font-size:1.125rem;line-height:1.75rem;font-weight:600;color:var(--ff-text-primary)}.fileflow-sdk-root .ff-modal-close{border-radius:.75rem;padding:.5rem;color:var(--ff-text-muted);transition-property:color,background-color,border-color,text-decoration-color,fill,stroke;transition-timing-function:cubic-bezier(.4,0,.2,1);transition-duration:.15s}.fileflow-sdk-root .ff-modal-close:hover{color:var(--ff-text-primary);background-color:var(--ff-bg-tertiary)}.fileflow-sdk-root .ff-modal-body{flex:1 1 0%;overflow-y:auto;padding:1.5rem}.fileflow-sdk-root .ff-modal-footer{display:flex;align-items:center;justify-content:space-between;padding:1rem 1.5rem;background-color:var(--ff-bg-secondary);border-top:1px solid var(--ff-border-light);flex-shrink:0;border-bottom-right-radius:1.25rem;border-bottom-left-radius:1.25rem}.fileflow-sdk-root .ff-steps{display:flex;align-items:center;gap:.5rem}.fileflow-sdk-root .ff-step{display:flex;align-items:center;justify-content:center;height:2rem;width:2rem;border-radius:9999px;font-size:.875rem;line-height:1.25rem;font-weight:600;transition-property:all;transition-timing-function:cubic-bezier(.4,0,.2,1);transition-duration:.15s}.fileflow-sdk-root .ff-step-pending{background-color:var(--ff-bg-tertiary);color:var(--ff-text-muted)}.fileflow-sdk-root .ff-step-active{background-color:var(--ff-primary-50);color:var(--ff-primary-90);box-shadow:0 0 0 4px var(--ff-primary-20)}.fileflow-sdk-root .ff-step-complete{background-color:var(--ff-success);color:#fff}.fileflow-sdk-root .ff-step-connector{height:.125rem;width:2rem;background-color:var(--ff-border-default);transition-property:color,background-color,border-color,text-decoration-color,fill,stroke;transition-timing-function:cubic-bezier(.4,0,.2,1);transition-duration:.15s}.fileflow-sdk-root .ff-step-connector-complete{background-color:var(--ff-success)}.fileflow-sdk-root .ff-progress{height:.5rem;overflow:hidden;border-radius:9999px;background-color:var(--ff-bg-tertiary)}.fileflow-sdk-root .ff-progress-bar{height:100%;border-radius:9999px;transition-property:all;transition-timing-function:cubic-bezier(.4,0,.2,1);transition-duration:.5s;transition-timing-function:cubic-bezier(0,0,.2,1);background-color:var(--ff-primary-500)}.fileflow-sdk-root .ff-progress-bar-animated{background:linear-gradient(90deg,var(--ff-primary-400) 0%,var(--ff-primary-500) 50%,var(--ff-primary-400) 100%);background-size:200% 100%;animation:shimmer 2s linear infinite}@keyframes shimmer{0%{background-position:-200% 0}to{background-position:200% 0}}.fileflow-sdk-root .ff-tooltip{position:absolute;z-index:50;border-radius:.75rem;padding:.5rem .75rem;font-size:.75rem;line-height:1rem;font-weight:500;visibility:hidden;opacity:0;transition-property:all;transition-timing-function:cubic-bezier(.4,0,.2,1);transition-duration:.2s;background-color:var(--ff-navy-950);color:var(--ff-text-inverse);box-shadow:0 4px 12px -2px #0003}.fileflow-sdk-root .ff-tooltip-visible{visibility:visible;opacity:1}.fileflow-sdk-root .ff-spinner{height:1.25rem;width:1.25rem}.fileflow-sdk-root .ff-spinner{animation:ff-spin 1s linear infinite;border-radius:9999px;border-width:2px;border-color:var(--ff-border-light);border-top-color:var(--ff-primary-500)}.fileflow-sdk-root .ff-spinner-lg{height:2rem;width:2rem;border-width:3px}.fileflow-sdk-root .ff-document-preview{position:relative;overflow:hidden;border-radius:1rem;background-color:var(--ff-bg-tertiary)}.fileflow-sdk-root .ff-document-preview img{height:auto;width:100%;-o-object-fit:contain;object-fit:contain}.fileflow-sdk-root .ff-mapping-header{margin-bottom:1rem;display:flex;align-items:center;justify-content:space-between}.fileflow-sdk-root .ff-mapping-title{font-size:1.125rem;line-height:1.75rem;font-weight:600;color:var(--ff-text-primary)}.fileflow-sdk-root .ff-mapping-subtitle{font-size:.875rem;line-height:1.25rem;color:var(--ff-text-muted)}.fileflow-sdk-root .ff-mapping-legend{display:flex;align-items:center;gap:1rem;font-size:.875rem;line-height:1.25rem}.fileflow-sdk-root .ff-mapping-legend-item{display:flex;align-items:center;gap:.375rem}.fileflow-sdk-root .ff-mapping-legend-dot{height:.5rem;width:.5rem;border-radius:9999px}.fileflow-sdk-root .ff-mapping-row{display:flex;align-items:center;gap:1rem;border-radius:1rem;border-width:1px;padding:1rem;transition-property:all;transition-timing-function:cubic-bezier(.4,0,.2,1);transition-duration:.15s;background-color:var(--ff-bg-primary);border-color:var(--ff-border-light)}.fileflow-sdk-root .ff-mapping-row:hover{border-color:var(--ff-border-default);background-color:var(--ff-bg-secondary)}.fileflow-sdk-root .ff-mapping-row-success{border-color:var(--ff-success-light);background-color:#e7f5e480}.fileflow-sdk-root .ff-mapping-row-warning{border-color:var(--ff-warning-light);background-color:#ffe6c180}.fileflow-sdk-root .ff-mapping-source{flex:1 1 0%;border-radius:.75rem;padding:.625rem 1rem;font-family:JetBrains Mono,SF Mono,Monaco,monospace;font-size:.875rem;line-height:1.25rem;background-color:var(--ff-bg-tertiary);color:var(--ff-text-secondary)}.fileflow-sdk-root .ff-mapping-arrow{flex-shrink:0;color:var(--ff-text-muted)}.fileflow-sdk-root .ff-mapping-target{flex:1 1 0%}.fileflow-sdk-root .ff-mapping-status{display:flex;width:2rem;justify-content:center}.fileflow-sdk-root .ff-confidence{display:inline-flex;align-items:center;gap:.375rem;font-size:.75rem;line-height:1rem;font-weight:500}.fileflow-sdk-root .ff-confidence-high{color:var(--ff-success)}.fileflow-sdk-root .ff-confidence-medium{color:var(--ff-warning)}.fileflow-sdk-root .ff-confidence-low{color:var(--ff-error)}.fileflow-sdk-root .ff-confidence-bar{height:.375rem;border-radius:9999px;background-color:var(--ff-bg-tertiary)}.fileflow-sdk-root .ff-confidence-bar-fill{height:100%;border-radius:9999px;transition-property:all;transition-timing-function:cubic-bezier(.4,0,.2,1);transition-duration:.3s}.fileflow-sdk-root .ff-validation-summary{border-radius:1rem;border-width:1px;padding:1rem}.fileflow-sdk-root .ff-validation-summary-error{background-color:var(--ff-error-light);border-color:var(--ff-error)}.fileflow-sdk-root .ff-validation-summary-warning{background-color:var(--ff-warning-light);border-color:var(--ff-warning)}.fileflow-sdk-root .ff-validation-summary-success{background-color:var(--ff-success-light);border-color:var(--ff-success)}.fileflow-sdk-root .ff-card{border-radius:1rem;border-width:1px;background-color:var(--ff-bg-primary);border-color:var(--ff-border-light);box-shadow:0 2px 8px -2px #0000000a}.fileflow-sdk-root .ff-card-hover{transition-property:all;transition-timing-function:cubic-bezier(.4,0,.2,1);transition-duration:.3s}.fileflow-sdk-root .ff-card-hover:hover{border-color:var(--ff-border-default);box-shadow:0 8px 24px -4px #00000014;transform:translateY(-2px)}.fileflow-sdk-root .ff-status{display:inline-flex;align-items:center;gap:.5rem}.fileflow-sdk-root .ff-status-dot{height:.5rem;width:.5rem;border-radius:9999px}.fileflow-sdk-root .ff-status-dot-success{background-color:var(--ff-success)}.fileflow-sdk-root .ff-status-dot-warning{background-color:var(--ff-warning)}.fileflow-sdk-root .ff-status-dot-error{background-color:var(--ff-error)}.fileflow-sdk-root .ff-status-dot-pending{background-color:var(--ff-text-muted)}.fileflow-sdk-root .ff-status-dot-processing{animation:ff-pulse 2s cubic-bezier(.4,0,.6,1) infinite;background-color:var(--ff-primary-90)}.fileflow-sdk-root .ff-empty-state{display:flex;flex-direction:column;align-items:center;justify-content:center;padding-top:3rem;padding-bottom:3rem;text-align:center}.fileflow-sdk-root .ff-empty-state-icon{margin-bottom:1rem;height:4rem;width:4rem;color:var(--ff-border-default)}.fileflow-sdk-root .ff-empty-state-title{margin-bottom:.5rem;font-size:1.125rem;line-height:1.75rem;font-weight:600;color:var(--ff-text-primary)}.fileflow-sdk-root .ff-empty-state-description{max-width:24rem;font-size:.875rem;line-height:1.25rem;color:var(--ff-text-muted)}@keyframes ff-pulse{50%{opacity:.5}}.fileflow-sdk-root .ff-skeleton{animation:ff-pulse 2s cubic-bezier(.4,0,.6,1) infinite;border-radius:.5rem;background-color:var(--ff-bg-tertiary)}.fileflow-sdk-root .ff-skeleton-text{height:1rem;border-radius:.5rem}.fileflow-sdk-root .ff-skeleton-title{height:1.5rem;width:75%;border-radius:.5rem}.fileflow-sdk-root .ff-skeleton-avatar{height:2.5rem;width:2.5rem;border-radius:9999px}.fileflow-sdk-root .ff-pagination{display:flex;align-items:center;gap:.25rem}.fileflow-sdk-root .ff-pagination-btn{display:flex;height:2.25rem;width:2.25rem;align-items:center;justify-content:center;border-radius:.75rem;font-size:.875rem;line-height:1.25rem;font-weight:500;transition-property:color,background-color,border-color,text-decoration-color,fill,stroke;transition-timing-function:cubic-bezier(.4,0,.2,1);transition-duration:.15s;color:var(--ff-text-secondary)}.fileflow-sdk-root .ff-pagination-btn:hover{background-color:var(--ff-bg-secondary);color:var(--ff-text-primary)}.fileflow-sdk-root .ff-pagination-btn-active{background-color:var(--ff-primary-500);color:var(--ff-text-inverse)}.fileflow-sdk-root .ff-pagination-btn-active:hover{background-color:var(--ff-primary-600);color:var(--ff-text-inverse)}.fileflow-sdk-root .ff-selector-group{display:inline-flex;flex-wrap:wrap;gap:.5rem}.fileflow-sdk-root .ff-selector-item{display:inline-flex;align-items:center;gap:.375rem;border-radius:9999px;padding:.375rem .75rem;cursor:pointer;font-size:.875rem;line-height:1.25rem;font-weight:500;transition-property:all;transition-timing-function:cubic-bezier(.4,0,.2,1);transition-duration:.15s;background-color:var(--ff-bg-secondary);color:var(--ff-text-secondary);border:1px solid var(--ff-border-light)}.fileflow-sdk-root .ff-selector-item:hover{background-color:var(--ff-bg-tertiary);border-color:var(--ff-border-default)}.fileflow-sdk-root .ff-selector-item-active{background-color:var(--ff-primary-500);color:var(--ff-text-inverse);border-color:var(--ff-primary-500)}.fileflow-sdk-root .ff-selector-item-active:hover{background-color:var(--ff-primary-600);border-color:var(--ff-primary-600)}.fileflow-sdk-root .ff-fade-in{animation:fadeIn .3s ease-out}.fileflow-sdk-root .ff-slide-up{animation:slideUp .3s ease-out}@keyframes fadeIn{0%{opacity:0}to{opacity:1}}@keyframes slideUp{0%{opacity:0;transform:translateY(10px)}to{opacity:1;transform:translateY(0)}}.fileflow-sdk-root .ff-theme-accent{--ff-primary-50: var(--ff-accent-50);--ff-primary-100: var(--ff-accent-100);--ff-primary-200: var(--ff-accent-200);--ff-primary-300: var(--ff-accent-300);--ff-primary-400: var(--ff-accent-400);--ff-primary-500: var(--ff-accent-500);--ff-primary-600: var(--ff-accent-600);--ff-primary-700: var(--ff-accent-700);--ff-primary-800: var(--ff-accent-800);--ff-primary-900: var(--ff-accent-900);--ff-focus-ring: var(--ff-focus-ring-accent)}.ff-relative{position:relative}.ff-bottom-full{bottom:100%}.ff-left-1\\/2{left:50%}.ff-mx-auto{margin-left:auto;margin-right:auto}.ff-mb-2{margin-bottom:.5rem}.ff-mb-3{margin-bottom:.75rem}.ff-mb-4{margin-bottom:1rem}.ff-mb-6{margin-bottom:1.5rem}.ff-ml-4{margin-left:1rem}.ff-mr-1{margin-right:.25rem}.ff-mr-4{margin-right:1rem}.ff-mt-0\\.5{margin-top:.125rem}.ff-mt-1{margin-top:.25rem}.ff-mt-2{margin-top:.5rem}.ff-mt-3{margin-top:.75rem}.ff-block{display:block}.ff-inline-block{display:inline-block}.ff-flex{display:flex}.ff-table{display:table}.ff-grid{display:grid}.ff-aspect-\\[3\\/4\\]{aspect-ratio:3/4}.ff-h-10{height:2.5rem}.ff-h-12{height:3rem}.ff-h-16{height:4rem}.ff-h-20{height:5rem}.ff-h-3{height:.75rem}.ff-h-4{height:1rem}.ff-h-5{height:1.25rem}.ff-h-6{height:1.5rem}.ff-h-8{height:2rem}.ff-h-full{height:100%}.ff-max-h-96{max-height:24rem}.ff-max-h-\\[500px\\]{max-height:500px}.ff-w-10{width:2.5rem}.ff-w-12{width:3rem}.ff-w-16{width:4rem}.ff-w-20{width:5rem}.ff-w-3{width:.75rem}.ff-w-4{width:1rem}.ff-w-48{width:12rem}.ff-w-5{width:1.25rem}.ff-w-6{width:1.5rem}.ff-w-8{width:2rem}.ff-w-full{width:100%}.ff-min-w-0{min-width:0px}.ff-min-w-\\[160px\\]{min-width:160px}.ff-min-w-\\[280px\\]{min-width:280px}.ff-max-w-lg{max-width:32rem}.ff-max-w-md{max-width:28rem}.ff-max-w-xl{max-width:36rem}.ff-max-w-xs{max-width:20rem}.ff-flex-1{flex:1 1 0%}.ff-flex-shrink-0{flex-shrink:0}.ff--translate-x-1\\/2{--tw-translate-x: -50%;transform:translate(var(--tw-translate-x),var(--tw-translate-y)) rotate(var(--tw-rotate)) skew(var(--tw-skew-x)) skewY(var(--tw-skew-y)) scaleX(var(--tw-scale-x)) scaleY(var(--tw-scale-y))}.ff-transform{transform:translate(var(--tw-translate-x),var(--tw-translate-y)) rotate(var(--tw-rotate)) skew(var(--tw-skew-x)) skewY(var(--tw-skew-y)) scaleX(var(--tw-scale-x)) scaleY(var(--tw-scale-y))}@keyframes ff-spin{to{transform:rotate(360deg)}}.ff-animate-spin{animation:ff-spin 1s linear infinite}.ff-cursor-not-allowed{cursor:not-allowed}.ff-cursor-pointer{cursor:pointer}.ff-cursor-wait{cursor:wait}.ff-select-none{-webkit-user-select:none;-moz-user-select:none;user-select:none}.ff-list-inside{list-style-position:inside}.ff-list-disc{list-style-type:disc}.ff-grid-cols-4{grid-template-columns:repeat(4,minmax(0,1fr))}.ff-flex-col{flex-direction:column}.ff-flex-wrap{flex-wrap:wrap}.ff-items-start{align-items:flex-start}.ff-items-center{align-items:center}.ff-justify-center{justify-content:center}.ff-justify-between{justify-content:space-between}.ff-gap-1{gap:.25rem}.ff-gap-2{gap:.5rem}.ff-gap-3{gap:.75rem}.ff-gap-4{gap:1rem}.ff-gap-6{gap:1.5rem}.ff-space-y-1>:not([hidden])~:not([hidden]){--tw-space-y-reverse: 0;margin-top:calc(.25rem * calc(1 - var(--tw-space-y-reverse)));margin-bottom:calc(.25rem * var(--tw-space-y-reverse))}.ff-space-y-2>:not([hidden])~:not([hidden]){--tw-space-y-reverse: 0;margin-top:calc(.5rem * calc(1 - var(--tw-space-y-reverse)));margin-bottom:calc(.5rem * var(--tw-space-y-reverse))}.ff-space-y-3>:not([hidden])~:not([hidden]){--tw-space-y-reverse: 0;margin-top:calc(.75rem * calc(1 - var(--tw-space-y-reverse)));margin-bottom:calc(.75rem * var(--tw-space-y-reverse))}.ff-space-y-4>:not([hidden])~:not([hidden]){--tw-space-y-reverse: 0;margin-top:calc(1rem * calc(1 - var(--tw-space-y-reverse)));margin-bottom:calc(1rem * var(--tw-space-y-reverse))}.ff-space-y-6>:not([hidden])~:not([hidden]){--tw-space-y-reverse: 0;margin-top:calc(1.5rem * calc(1 - var(--tw-space-y-reverse)));margin-bottom:calc(1.5rem * var(--tw-space-y-reverse))}.ff-overflow-hidden{overflow:hidden}.ff-truncate{overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.ff-whitespace-nowrap{white-space:nowrap}.ff-rounded{border-radius:.5rem}.ff-rounded-2xl{border-radius:1.25rem}.ff-rounded-full{border-radius:9999px}.ff-rounded-lg{border-radius:.75rem}.ff-rounded-xl{border-radius:1rem}.ff-border{border-width:1px}.ff-border-2{border-width:2px}.ff-border-transparent{border-color:transparent}.ff-bg-white{--tw-bg-opacity: 1;background-color:rgb(255 255 255 / var(--tw-bg-opacity, 1))}.ff-object-contain{-o-object-fit:contain;object-fit:contain}.ff-p-1{padding:.25rem}.ff-p-1\\.5{padding:.375rem}.ff-p-2{padding:.5rem}.ff-p-3{padding:.75rem}.ff-p-4{padding:1rem}.ff-p-6{padding:1.5rem}.ff-p-8{padding:2rem}.ff-px-2{padding-left:.5rem;padding-right:.5rem}.ff-px-3{padding-left:.75rem;padding-right:.75rem}.ff-px-4{padding-left:1rem;padding-right:1rem}.ff-px-6{padding-left:1.5rem;padding-right:1.5rem}.ff-py-1{padding-top:.25rem;padding-bottom:.25rem}.ff-py-12{padding-top:3rem;padding-bottom:3rem}.ff-py-2{padding-top:.5rem;padding-bottom:.5rem}.ff-py-3{padding-top:.75rem;padding-bottom:.75rem}.ff-py-4{padding-top:1rem;padding-bottom:1rem}.ff-py-8{padding-top:2rem;padding-bottom:2rem}.ff-text-left{text-align:left}.ff-text-center{text-align:center}.ff-text-right{text-align:right}.ff-font-mono{font-family:JetBrains Mono,SF Mono,Monaco,monospace}.ff-text-2xl{font-size:1.5rem;line-height:2rem}.ff-text-lg{font-size:1.125rem;line-height:1.75rem}.ff-text-sm{font-size:.875rem;line-height:1.25rem}.ff-text-xl{font-size:1.25rem;line-height:1.75rem}.ff-text-xs{font-size:.75rem;line-height:1rem}.ff-font-bold{font-weight:700}.ff-font-medium{font-weight:500}.ff-font-semibold{font-weight:600}.ff-opacity-0{opacity:0}.ff-opacity-50{opacity:.5}.ff-shadow-xl{--tw-shadow: 0 20px 25px -5px rgb(0 0 0 / .1), 0 8px 10px -6px rgb(0 0 0 / .1);--tw-shadow-colored: 0 20px 25px -5px var(--tw-shadow-color), 0 8px 10px -6px var(--tw-shadow-color);box-shadow:var(--tw-ring-offset-shadow, 0 0 #0000),var(--tw-ring-shadow, 0 0 #0000),var(--tw-shadow)}.ff-transition-all{transition-property:all;transition-timing-function:cubic-bezier(.4,0,.2,1);transition-duration:.15s}.ff-transition-colors{transition-property:color,background-color,border-color,text-decoration-color,fill,stroke;transition-timing-function:cubic-bezier(.4,0,.2,1);transition-duration:.15s}.ff-transition-opacity{transition-property:opacity;transition-timing-function:cubic-bezier(.4,0,.2,1);transition-duration:.15s}.ff-duration-150{transition-duration:.15s}.hover\\:ff-border-transparent:hover{border-color:transparent}.ff-group:hover .group-hover\\:ff-opacity-100{opacity:1}`, fn = "fileflow-sdk-styles";
4
+ const ga = `.ff-container{width:100%}@media (min-width: 640px){.ff-container{max-width:640px}}@media (min-width: 768px){.ff-container{max-width:768px}}@media (min-width: 1024px){.ff-container{max-width:1024px}}@media (min-width: 1280px){.ff-container{max-width:1280px}}@media (min-width: 1536px){.ff-container{max-width:1536px}}.fileflow-sdk-root{all:revert;isolation:isolate;font-family:ui-sans-serif,system-ui,-apple-system,BlinkMacSystemFont,Segoe UI,Roboto,Helvetica Neue,Arial,Noto Sans,sans-serif;font-size:16px;line-height:1.5;font-weight:400;-webkit-font-smoothing:antialiased;-moz-osx-font-smoothing:grayscale;box-sizing:border-box;color:#21201d;background-color:transparent;text-align:left;direction:ltr;text-rendering:optimizeLegibility;margin:0;padding:0;--tw-border-spacing-x: 0;--tw-border-spacing-y: 0;--tw-translate-x: 0;--tw-translate-y: 0;--tw-rotate: 0;--tw-skew-x: 0;--tw-skew-y: 0;--tw-scale-x: 1;--tw-scale-y: 1;--tw-pan-x: ;--tw-pan-y: ;--tw-pinch-zoom: ;--tw-scroll-snap-strictness: proximity;--tw-gradient-from-position: ;--tw-gradient-via-position: ;--tw-gradient-to-position: ;--tw-ordinal: ;--tw-slashed-zero: ;--tw-numeric-figure: ;--tw-numeric-spacing: ;--tw-numeric-fraction: ;--tw-ring-inset: ;--tw-ring-offset-width: 0px;--tw-ring-offset-color: #fff;--tw-ring-color: rgb(59 130 246 / .5);--tw-ring-offset-shadow: 0 0 #0000;--tw-ring-shadow: 0 0 #0000;--tw-shadow: 0 0 #0000;--tw-shadow-colored: 0 0 #0000;--tw-blur: ;--tw-brightness: ;--tw-contrast: ;--tw-grayscale: ;--tw-hue-rotate: ;--tw-invert: ;--tw-saturate: ;--tw-sepia: ;--tw-drop-shadow: ;--tw-backdrop-blur: ;--tw-backdrop-brightness: ;--tw-backdrop-contrast: ;--tw-backdrop-grayscale: ;--tw-backdrop-hue-rotate: ;--tw-backdrop-invert: ;--tw-backdrop-opacity: ;--tw-backdrop-saturate: ;--tw-backdrop-sepia: }.fileflow-sdk-root *,.fileflow-sdk-root *:before,.fileflow-sdk-root *:after{box-sizing:border-box;border-width:0;border-style:solid;border-color:currentColor;--tw-ring-inset: ;--tw-ring-offset-width: 0px;--tw-ring-offset-color: #fff;--tw-ring-color: rgb(59 130 246 / .5);--tw-ring-offset-shadow: 0 0 #0000;--tw-ring-shadow: 0 0 #0000;--tw-shadow: 0 0 #0000;--tw-shadow-colored: 0 0 #0000}.fileflow-sdk-root button,.fileflow-sdk-root input,.fileflow-sdk-root select,.fileflow-sdk-root textarea{font-family:inherit;font-size:inherit;line-height:inherit;margin:0}.fileflow-sdk-root button{cursor:pointer;background:none;border:none;padding:0}.fileflow-sdk-root img,.fileflow-sdk-root svg{display:block;max-width:100%}.fileflow-sdk-root a{color:inherit;text-decoration:inherit}.fileflow-sdk-root h1,.fileflow-sdk-root h2,.fileflow-sdk-root h3,.fileflow-sdk-root h4,.fileflow-sdk-root h5,.fileflow-sdk-root h6{font-size:inherit;font-weight:inherit;margin:0}.fileflow-sdk-root p,.fileflow-sdk-root ul,.fileflow-sdk-root ol{margin:0;padding:0}.fileflow-sdk-root ul,.fileflow-sdk-root ol{list-style:none}.fileflow-sdk-root{--ff-primary-10: #f9fafb;--ff-primary-20: #eef0f6;--ff-primary-30: #e2e6f0;--ff-primary-40: #dce1ec;--ff-primary-50: #d7e1f2;--ff-primary-60: #c6d6f0;--ff-primary-70: #c0d0ed;--ff-primary-80: #b9cbeb;--ff-primary-90: #728ab3;--ff-primary-100: #6980a5;--ff-primary-110: #4f6180;--ff-primary-120: #132036;--ff-primary-500: #d7e1f2;--ff-primary-600: #c0d0ed;--ff-brown-10: #f0ece8;--ff-brown-20: #d4c4ba;--ff-brown-30: #b59f8c;--ff-brown-40: #a68c74;--ff-brown-50: #97795d;--ff-brown-60: #8a6447;--ff-brown-70: #7a522f;--ff-brown-80: #6b3f18;--ff-brown-90: #613916;--ff-brown-100: #563213;--ff-brown-110: #4b2c11;--ff-brown-120: #36200c;--ff-primary-text: #6b3f18;--ff-gray-white: #ffffff;--ff-gray-10: #fcfcfb;--ff-gray-20: #f9f9f7;--ff-gray-30: #f0efed;--ff-gray-40: #e9e8e4;--ff-gray-50: #e2e0dd;--ff-gray-60: #dadad5;--ff-gray-70: #cfceca;--ff-gray-80: #bcbbb7;--ff-gray-90: #8e8d89;--ff-gray-100: #848280;--ff-gray-110: #656461;--ff-gray-120: #21201d;--ff-bg-primary: var(--ff-gray-white);--ff-bg-secondary: var(--ff-gray-10);--ff-bg-tertiary: var(--ff-gray-30);--ff-bg-brand: var(--ff-primary-50);--ff-bg-brand-light: var(--ff-primary-20);--ff-text-primary: var(--ff-gray-120);--ff-text-secondary: var(--ff-gray-110);--ff-text-muted: var(--ff-gray-90);--ff-text-supportive: var(--ff-gray-80);--ff-text-inverse: var(--ff-gray-white);--ff-text-link: var(--ff-primary-90);--ff-text-brand: var(--ff-brown-80);--ff-border-light: var(--ff-gray-30);--ff-border-default: var(--ff-gray-40);--ff-border-dark: var(--ff-gray-70);--ff-border-brand: var(--ff-brown-80);--ff-border-focus: var(--ff-primary-70);--ff-icon-default: var(--ff-gray-90);--ff-icon-active: var(--ff-gray-120);--ff-icon-muted: var(--ff-gray-80);--ff-icon-brand: var(--ff-brown-80);--ff-icon-inverse: var(--ff-gray-white);--ff-success-light: #e7f5e4;--ff-success: #298e33;--ff-success-dark: #1f3c20;--ff-warning-light: #ffe6c1;--ff-warning: #a86807;--ff-warning-dark: #4a3723;--ff-error-light: #fcdede;--ff-error: #d43338;--ff-error-dark: #641a1a;--ff-focus-ring: rgba(192, 208, 237, .5);--ff-focus-ring-accent: rgba(168, 85, 247, .25);--ff-accent-50: #faf5ff;--ff-accent-100: #f3e8ff;--ff-accent-200: #e9d5ff;--ff-accent-300: #d8b4fe;--ff-accent-400: #c084fc;--ff-accent-500: #a855f7;--ff-accent-600: #9333ea;--ff-accent-700: #7c3aed;--ff-accent-800: #6b21a8;--ff-accent-900: #581c87;--ff-navy-950: #1a2029}.fileflow-sdk-root .ff-container{font-family:Inter,-apple-system,BlinkMacSystemFont,Segoe UI,Roboto,sans-serif;color:var(--ff-text-primary);font-feature-settings:"cv02","cv03","cv04","cv11"}.fileflow-sdk-root .ff-table-container{position:relative;overflow:auto;border-radius:1rem;border-width:1px;border-color:var(--ff-border-light);background-color:var(--ff-bg-primary)}.fileflow-sdk-root .ff-table{width:100%;font-size:.875rem;line-height:1.25rem}.fileflow-sdk-root .ff-table thead{position:sticky;top:0;z-index:10;background-color:var(--ff-bg-secondary)}.fileflow-sdk-root .ff-table thead tr:first-child th:first-child{border-top-left-radius:1rem}.fileflow-sdk-root .ff-table thead tr:first-child th:last-child{border-top-right-radius:1rem}.fileflow-sdk-root .ff-table th{padding:.75rem 1rem;text-align:left;font-size:.75rem;line-height:1rem;font-weight:600;text-transform:uppercase;letter-spacing:.05em;color:var(--ff-text-secondary);border-bottom:2px solid var(--ff-border-light)}.fileflow-sdk-root .ff-table td{padding:.75rem 1rem;color:var(--ff-text-primary);border-bottom:1px solid var(--ff-border-light)}.fileflow-sdk-root .ff-table tbody tr{transition-property:color,background-color,border-color,text-decoration-color,fill,stroke;transition-timing-function:cubic-bezier(.4,0,.2,1);transition-duration:.15s}.fileflow-sdk-root .ff-table tbody tr:hover{background-color:var(--ff-bg-secondary)}.fileflow-sdk-root .ff-cell-error{border-left-width:4px;background-color:var(--ff-error-light);border-left-color:var(--ff-error)}.fileflow-sdk-root .ff-cell-warning{border-left-width:4px;background-color:var(--ff-warning-light);border-left-color:var(--ff-warning)}.fileflow-sdk-root .ff-cell-editing{--tw-ring-offset-shadow: var(--tw-ring-inset) 0 0 0 var(--tw-ring-offset-width) var(--tw-ring-offset-color);--tw-ring-shadow: var(--tw-ring-inset) 0 0 0 calc(2px + var(--tw-ring-offset-width)) var(--tw-ring-color);box-shadow:var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow, 0 0 #0000);background-color:var(--ff-primary-50);--tw-ring-color: var(--ff-primary-400)}.fileflow-sdk-root .ff-cell-success{background-color:var(--ff-success-light)}.fileflow-sdk-root .ff-row-error{background-color:#d433381a}.fileflow-sdk-root .ff-edit-btn{color:var(--ff-text-muted);border-radius:.5rem;padding:.25rem}.fileflow-sdk-root .ff-edit-btn:hover{color:var(--ff-text-secondary);background-color:var(--ff-bg-tertiary)}.fileflow-sdk-root .ff-delete-btn{border-radius:.75rem;padding:.375rem;color:var(--ff-gray-80);background-color:transparent;transition-property:color,background-color,border-color,text-decoration-color,fill,stroke;transition-timing-function:cubic-bezier(.4,0,.2,1);transition-duration:.15s}.fileflow-sdk-root .ff-delete-btn svg{display:block;width:1rem;height:1rem}.fileflow-sdk-root .ff-delete-btn:hover{color:var(--ff-error);background-color:var(--ff-error-light)}.fileflow-sdk-root .ff-delete-btn:disabled{cursor:not-allowed;opacity:.3}.fileflow-sdk-root .ff-delete-btn:disabled:hover{color:var(--ff-gray-80);background-color:transparent}.fileflow-sdk-root .ff-input{width:100%;border-radius:.75rem;border-width:1px;padding:.75rem 1rem;font-size:.875rem;line-height:1.25rem;border-color:var(--ff-border-default);background-color:var(--ff-bg-primary);color:var(--ff-text-primary);transition-property:all;transition-timing-function:cubic-bezier(.4,0,.2,1);transition-duration:.2s}.fileflow-sdk-root .ff-input::-moz-placeholder{color:var(--ff-text-muted)}.fileflow-sdk-root .ff-input::placeholder{color:var(--ff-text-muted)}.fileflow-sdk-root .ff-input:hover{border-color:var(--ff-border-dark)}.fileflow-sdk-root .ff-input:focus{outline:2px solid transparent;outline-offset:2px;--tw-ring-offset-shadow: var(--tw-ring-inset) 0 0 0 var(--tw-ring-offset-width) var(--tw-ring-offset-color);--tw-ring-shadow: var(--tw-ring-inset) 0 0 0 calc(4px + var(--tw-ring-offset-width)) var(--tw-ring-color);box-shadow:var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow, 0 0 #0000);border-color:var(--ff-primary-500);--tw-ring-color: var(--ff-focus-ring)}.fileflow-sdk-root .ff-input-error{border-color:var(--ff-error)}.fileflow-sdk-root .ff-input-error:focus{border-color:var(--ff-error);--tw-ring-color: rgba(212, 51, 56, .2)}.fileflow-sdk-root .ff-select,.fileflow-sdk-root select.ff-input{cursor:pointer;-webkit-appearance:none;-moz-appearance:none;appearance:none;padding-right:2.5rem;background-image:url("data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' fill='none' viewBox='0 0 20 20'%3e%3cpath stroke='%2378716c' stroke-linecap='round' stroke-linejoin='round' stroke-width='1.5' d='M6 8l4 4 4-4'/%3e%3c/svg%3e");background-position:right .75rem center;background-repeat:no-repeat;background-size:1.25em 1.25em}.fileflow-sdk-root .ff-btn{display:inline-flex;align-items:center;justify-content:center;gap:.5rem;font-size:.875rem;line-height:1.25rem;font-weight:600;padding:.625rem 1.25rem;border-radius:.75rem;transition-property:all;transition-timing-function:cubic-bezier(.4,0,.2,1);transition-duration:.15s;border-width:1px;border-color:transparent;cursor:pointer}.fileflow-sdk-root .ff-btn:focus{outline:2px solid transparent;outline-offset:2px}.fileflow-sdk-root .ff-btn:disabled{cursor:not-allowed;opacity:.5}.fileflow-sdk-root .ff-btn-primary{background-color:var(--ff-primary-110);color:var(--ff-gray-white)}.fileflow-sdk-root .ff-btn-primary:hover:not(:disabled){background-color:var(--ff-primary-120);transform:translateY(-1px);box-shadow:0 4px 12px -2px #0003}.fileflow-sdk-root .ff-btn-primary:active:not(:disabled){background-color:var(--ff-primary-130);transform:translateY(0)}.fileflow-sdk-root .ff-btn-primary:focus-visible{box-shadow:0 0 0 3px var(--ff-focus-ring)}.fileflow-sdk-root .ff-btn-secondary{background-color:var(--ff-bg-primary);color:var(--ff-text-primary);border-color:var(--ff-border-default)}.fileflow-sdk-root .ff-btn-secondary:hover:not(:disabled){background-color:var(--ff-bg-secondary);border-color:var(--ff-border-dark)}.fileflow-sdk-root .ff-btn-secondary:active:not(:disabled){background-color:var(--ff-bg-tertiary)}.fileflow-sdk-root .ff-btn-secondary:focus-visible{box-shadow:0 0 0 3px var(--ff-focus-ring)}.fileflow-sdk-root .ff-btn-ghost{background-color:var(--ff-bg-primary);color:var(--ff-text-secondary);border-color:var(--ff-border-default)}.fileflow-sdk-root .ff-btn-ghost:hover:not(:disabled){background-color:var(--ff-bg-tertiary);color:var(--ff-text-primary);border-color:var(--ff-border-dark)}.fileflow-sdk-root .ff-btn-accent{background-color:var(--ff-accent-500);color:var(--ff-text-inverse)}.fileflow-sdk-root .ff-btn-accent:hover:not(:disabled){background-color:var(--ff-accent-600);transform:translateY(-1px);box-shadow:0 4px 12px -2px #a855f74d}.fileflow-sdk-root .ff-btn-accent:active:not(:disabled){background-color:var(--ff-accent-700);transform:translateY(0)}.fileflow-sdk-root .ff-btn-accent:focus{outline:2px solid transparent;outline-offset:2px;--tw-ring-offset-shadow: var(--tw-ring-inset) 0 0 0 var(--tw-ring-offset-width) var(--tw-ring-offset-color);--tw-ring-shadow: var(--tw-ring-inset) 0 0 0 calc(4px + var(--tw-ring-offset-width)) var(--tw-ring-color);box-shadow:var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow, 0 0 #0000);--tw-ring-color: var(--ff-focus-ring-accent)}.fileflow-sdk-root .ff-btn-danger{--tw-bg-opacity: 1;background-color:rgb(239 68 68 / var(--tw-bg-opacity, 1));--tw-text-opacity: 1;color:rgb(255 255 255 / var(--tw-text-opacity, 1))}.fileflow-sdk-root .ff-btn-danger:hover:not(:disabled){--tw-bg-opacity: 1;background-color:rgb(220 38 38 / var(--tw-bg-opacity, 1));transform:translateY(-1px)}.fileflow-sdk-root .ff-btn-link{background-color:transparent;color:var(--ff-primary-text);padding:.25rem .5rem}.fileflow-sdk-root .ff-btn-link:hover:not(:disabled){color:#4a2a10;text-decoration:underline}.fileflow-sdk-root .ff-btn-sm{border-radius:.375rem;padding:.5rem .75rem;font-size:.875rem;line-height:1.25rem}.fileflow-sdk-root .ff-btn-lg{border-radius:1rem;padding:.75rem 1.5rem;font-size:1rem;line-height:1.5rem}.fileflow-sdk-root .ff-checkbox{height:1.25rem;width:1.25rem;cursor:pointer;border-radius:.5rem;border-width:2px;transition-property:all;transition-timing-function:cubic-bezier(.4,0,.2,1);transition-duration:.15s;border-color:var(--ff-border-default);background-color:var(--ff-bg-primary)}.fileflow-sdk-root .ff-checkbox:hover{border-color:var(--ff-primary-400)}.fileflow-sdk-root .ff-checkbox:checked{background-color:var(--ff-primary-500);border-color:var(--ff-primary-500);background-image:url("data:image/svg+xml,%3csvg viewBox='0 0 16 16' fill='white' xmlns='http://www.w3.org/2000/svg'%3e%3cpath d='M12.207 4.793a1 1 0 010 1.414l-5 5a1 1 0 01-1.414 0l-2-2a1 1 0 011.414-1.414L6.5 9.086l4.293-4.293a1 1 0 011.414 0z'/%3e%3c/svg%3e")}.fileflow-sdk-root .ff-checkbox:focus{outline:2px solid transparent;outline-offset:2px;--tw-ring-offset-shadow: var(--tw-ring-inset) 0 0 0 var(--tw-ring-offset-width) var(--tw-ring-offset-color);--tw-ring-shadow: var(--tw-ring-inset) 0 0 0 calc(4px + var(--tw-ring-offset-width)) var(--tw-ring-color);box-shadow:var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow, 0 0 #0000);--tw-ring-color: var(--ff-focus-ring)}.fileflow-sdk-root .ff-radio{height:1.25rem;width:1.25rem;cursor:pointer;border-radius:9999px;border-width:2px;transition-property:all;transition-timing-function:cubic-bezier(.4,0,.2,1);transition-duration:.15s;border-color:var(--ff-border-default);background-color:var(--ff-bg-primary)}.fileflow-sdk-root .ff-radio:checked{border-color:var(--ff-primary-500);border-width:6px}.fileflow-sdk-root .ff-radio:focus{outline:2px solid transparent;outline-offset:2px;--tw-ring-offset-shadow: var(--tw-ring-inset) 0 0 0 var(--tw-ring-offset-width) var(--tw-ring-offset-color);--tw-ring-shadow: var(--tw-ring-inset) 0 0 0 calc(4px + var(--tw-ring-offset-width)) var(--tw-ring-color);box-shadow:var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow, 0 0 #0000);--tw-ring-color: var(--ff-focus-ring)}.fileflow-sdk-root .ff-toggle{position:relative;height:1.5rem;width:2.75rem;cursor:pointer;border-radius:9999px;transition-property:all;transition-timing-function:cubic-bezier(.4,0,.2,1);transition-duration:.2s;background-color:var(--ff-border-default)}.fileflow-sdk-root .ff-toggle:after{position:absolute;top:.125rem;left:.125rem;height:1.25rem;width:1.25rem;border-radius:9999px;transition-property:transform;transition-timing-function:cubic-bezier(.4,0,.2,1);transition-duration:.2s;content:"";background-color:var(--ff-bg-primary);box-shadow:0 1px 3px #0000001a}.fileflow-sdk-root .ff-toggle:checked{background-color:var(--ff-primary-500)}.fileflow-sdk-root .ff-toggle:checked:after{transform:translate(1.25rem)}.fileflow-sdk-root .ff-dropzone{display:flex;flex-direction:column;align-items:center;justify-content:center;padding:2rem;border-radius:1rem;border-width:2px;border-style:dashed;border-color:var(--ff-border-default);background-color:var(--ff-bg-secondary);cursor:pointer;transition-property:all;transition-timing-function:cubic-bezier(.4,0,.2,1);transition-duration:.15s}.fileflow-sdk-root .ff-dropzone *{pointer-events:none}.fileflow-sdk-root .ff-dropzone input{pointer-events:auto}.fileflow-sdk-root .ff-dropzone:hover{border-color:var(--ff-primary-70);background-color:var(--ff-primary-10)}.fileflow-sdk-root .ff-dropzone-active{border-color:var(--ff-primary-90);background-color:var(--ff-primary-20);--tw-scale-x: 1.01;--tw-scale-y: 1.01;transform:translate(var(--tw-translate-x),var(--tw-translate-y)) rotate(var(--tw-rotate)) skew(var(--tw-skew-x)) skewY(var(--tw-skew-y)) scaleX(var(--tw-scale-x)) scaleY(var(--tw-scale-y))}.fileflow-sdk-root .ff-dropzone-icon-wrapper{margin-left:auto;margin-right:auto;margin-bottom:1rem;display:flex;height:3.5rem;width:3.5rem;align-items:center;justify-content:center;border-radius:1rem;background-color:var(--ff-primary-20);transition-property:color,background-color,border-color,text-decoration-color,fill,stroke;transition-timing-function:cubic-bezier(.4,0,.2,1);transition-duration:.15s}.fileflow-sdk-root .ff-dropzone-active .ff-dropzone-icon-wrapper{background-color:var(--ff-primary-30)}.fileflow-sdk-root .ff-dropzone-icon{height:1.75rem;width:1.75rem;color:var(--ff-primary-90);transition-property:color,background-color,border-color,text-decoration-color,fill,stroke;transition-timing-function:cubic-bezier(.4,0,.2,1);transition-duration:.15s}.fileflow-sdk-root .ff-dropzone-active .ff-dropzone-icon{color:var(--ff-primary-110)}.fileflow-sdk-root .ff-dropzone-text{margin-bottom:.25rem;font-size:1rem;line-height:1.5rem;font-weight:600;color:var(--ff-text-primary)}.fileflow-sdk-root .ff-dropzone-hint{margin-bottom:1rem;font-size:.875rem;line-height:1.25rem;color:var(--ff-text-muted)}.fileflow-sdk-root .ff-dropzone-formats{margin-top:.75rem;font-size:.75rem;line-height:1rem;color:var(--ff-text-muted)}.fileflow-sdk-root .ff-badge{display:inline-flex;align-items:center;border-radius:9999px;padding:.25rem .625rem;font-size:.75rem;line-height:1rem;font-weight:600}.fileflow-sdk-root .ff-badge-error{background-color:var(--ff-error-light);color:var(--ff-error)}.fileflow-sdk-root .ff-badge-warning{background-color:var(--ff-warning-light);color:var(--ff-warning)}.fileflow-sdk-root .ff-badge-success{background-color:var(--ff-success-light);color:var(--ff-success)}.fileflow-sdk-root .ff-badge-info{background-color:var(--ff-primary-20);color:var(--ff-primary-90)}.fileflow-sdk-root .ff-badge-neutral{background-color:var(--ff-bg-tertiary);color:var(--ff-text-secondary)}.fileflow-sdk-root .ff-badge-primary{background-color:var(--ff-primary-100);color:var(--ff-primary-700)}.fileflow-sdk-root .ff-badge-accent{background-color:var(--ff-accent-100);color:var(--ff-accent-700)}.fileflow-sdk-root .ff-overlay{position:fixed;top:0;right:0;bottom:0;left:0;z-index:50;background-color:#1c191780;-webkit-backdrop-filter:blur(4px);backdrop-filter:blur(4px);display:flex;align-items:center;justify-content:center;padding:1rem;animation:ff-fade-in .2s ease-out;overflow-y:auto}@keyframes ff-fade-in{0%{opacity:0}to{opacity:1}}.fileflow-sdk-root .ff-overlay{position:fixed;top:0;right:0;bottom:0;left:0;z-index:9999;background-color:#00000080;display:flex;align-items:center;justify-content:center;padding:1rem}.fileflow-sdk-root .ff-modal{background-color:var(--ff-bg-primary);border-radius:1.25rem;width:100%;max-width:56rem;display:flex;flex-direction:column;max-height:min(90vh,calc(100vh - 2rem));box-shadow:0 25px 50px -12px #00000040;animation:ff-scale-in .2s ease-out;margin-top:auto;margin-bottom:auto}.fileflow-sdk-root .ff-embed{background-color:var(--ff-bg-primary);display:flex;width:100%;flex-direction:column;border-radius:1rem;border-width:1px;border-color:var(--ff-border-light)}.fileflow-sdk-root .ff-embed .ff-modal-header{border-top-left-radius:1rem;border-top-right-radius:1rem}.fileflow-sdk-root .ff-embed .ff-modal-footer{border-bottom-right-radius:1rem;border-bottom-left-radius:1rem}@keyframes ff-scale-in{0%{opacity:0;transform:scale(.95)}to{opacity:1;transform:scale(1)}}.fileflow-sdk-root .ff-modal-header{display:flex;align-items:center;justify-content:space-between;padding:1.25rem 1.5rem;border-bottom:1px solid var(--ff-border-light);flex-shrink:0;border-top-left-radius:1.25rem;border-top-right-radius:1.25rem}.fileflow-sdk-root .ff-modal-header-left{display:flex;align-items:center;gap:1rem}.fileflow-sdk-root .ff-modal-icon{display:flex;height:2.5rem;width:2.5rem;align-items:center;justify-content:center;border-radius:.75rem;background-color:var(--ff-primary-20)}.fileflow-sdk-root .ff-modal-icon svg{height:1.25rem;width:1.25rem;color:var(--ff-primary-90)}.fileflow-sdk-root .ff-modal-title{font-size:1.125rem;line-height:1.75rem;font-weight:600;color:var(--ff-text-primary)}.fileflow-sdk-root .ff-modal-close{border-radius:.75rem;padding:.5rem;color:var(--ff-text-muted);transition-property:color,background-color,border-color,text-decoration-color,fill,stroke;transition-timing-function:cubic-bezier(.4,0,.2,1);transition-duration:.15s}.fileflow-sdk-root .ff-modal-close:hover{color:var(--ff-text-primary);background-color:var(--ff-bg-tertiary)}.fileflow-sdk-root .ff-modal-body{flex:1 1 0%;overflow-y:auto;padding:1.5rem}.fileflow-sdk-root .ff-modal-footer{display:flex;align-items:center;justify-content:space-between;padding:1rem 1.5rem;background-color:var(--ff-bg-secondary);border-top:1px solid var(--ff-border-light);flex-shrink:0;border-bottom-right-radius:1.25rem;border-bottom-left-radius:1.25rem}.fileflow-sdk-root .ff-steps{display:flex;align-items:center;gap:.5rem}.fileflow-sdk-root .ff-step{display:flex;align-items:center;justify-content:center;height:2rem;width:2rem;border-radius:9999px;font-size:.875rem;line-height:1.25rem;font-weight:600;transition-property:all;transition-timing-function:cubic-bezier(.4,0,.2,1);transition-duration:.15s}.fileflow-sdk-root .ff-step-pending{background-color:var(--ff-bg-tertiary);color:var(--ff-text-muted)}.fileflow-sdk-root .ff-step-active{background-color:var(--ff-primary-50);color:var(--ff-primary-90);box-shadow:0 0 0 4px var(--ff-primary-20)}.fileflow-sdk-root .ff-step-complete{background-color:var(--ff-success);color:#fff}.fileflow-sdk-root .ff-step-connector{height:.125rem;width:2rem;background-color:var(--ff-border-default);transition-property:color,background-color,border-color,text-decoration-color,fill,stroke;transition-timing-function:cubic-bezier(.4,0,.2,1);transition-duration:.15s}.fileflow-sdk-root .ff-step-connector-complete{background-color:var(--ff-success)}.fileflow-sdk-root .ff-progress{height:.5rem;overflow:hidden;border-radius:9999px;background-color:var(--ff-bg-tertiary)}.fileflow-sdk-root .ff-progress-bar{height:100%;border-radius:9999px;transition-property:all;transition-timing-function:cubic-bezier(.4,0,.2,1);transition-duration:.5s;transition-timing-function:cubic-bezier(0,0,.2,1);background-color:var(--ff-primary-500)}.fileflow-sdk-root .ff-progress-bar-animated{background:linear-gradient(90deg,var(--ff-primary-400) 0%,var(--ff-primary-500) 50%,var(--ff-primary-400) 100%);background-size:200% 100%;animation:shimmer 2s linear infinite}@keyframes shimmer{0%{background-position:-200% 0}to{background-position:200% 0}}.fileflow-sdk-root .ff-tooltip{position:absolute;z-index:50;border-radius:.75rem;padding:.5rem .75rem;font-size:.75rem;line-height:1rem;font-weight:500;visibility:hidden;opacity:0;transition-property:all;transition-timing-function:cubic-bezier(.4,0,.2,1);transition-duration:.2s;background-color:var(--ff-navy-950);color:var(--ff-text-inverse);box-shadow:0 4px 12px -2px #0003}.fileflow-sdk-root .ff-tooltip-visible{visibility:visible;opacity:1}.fileflow-sdk-root .ff-spinner{height:1.25rem;width:1.25rem}.fileflow-sdk-root .ff-spinner{animation:ff-spin 1s linear infinite;border-radius:9999px;border-width:2px;border-color:var(--ff-border-light);border-top-color:var(--ff-primary-500)}.fileflow-sdk-root .ff-spinner-lg{height:2rem;width:2rem;border-width:3px}.fileflow-sdk-root .ff-document-preview{position:relative;overflow:hidden;border-radius:1rem;background-color:var(--ff-bg-tertiary)}.fileflow-sdk-root .ff-document-preview img{height:auto;width:100%;-o-object-fit:contain;object-fit:contain}.fileflow-sdk-root .ff-mapping-header{margin-bottom:1rem;display:flex;align-items:center;justify-content:space-between}.fileflow-sdk-root .ff-mapping-title{font-size:1.125rem;line-height:1.75rem;font-weight:600;color:var(--ff-text-primary)}.fileflow-sdk-root .ff-mapping-subtitle{font-size:.875rem;line-height:1.25rem;color:var(--ff-text-muted)}.fileflow-sdk-root .ff-mapping-legend{display:flex;align-items:center;gap:1rem;font-size:.875rem;line-height:1.25rem}.fileflow-sdk-root .ff-mapping-legend-item{display:flex;align-items:center;gap:.375rem}.fileflow-sdk-root .ff-mapping-legend-dot{height:.5rem;width:.5rem;border-radius:9999px}.fileflow-sdk-root .ff-mapping-row{display:flex;align-items:center;gap:1rem;border-radius:1rem;border-width:1px;padding:1rem;transition-property:all;transition-timing-function:cubic-bezier(.4,0,.2,1);transition-duration:.15s;background-color:var(--ff-bg-primary);border-color:var(--ff-border-light)}.fileflow-sdk-root .ff-mapping-row:hover{border-color:var(--ff-border-default);background-color:var(--ff-bg-secondary)}.fileflow-sdk-root .ff-mapping-row-success{border-color:var(--ff-success-light);background-color:#e7f5e480}.fileflow-sdk-root .ff-mapping-row-warning{border-color:var(--ff-warning-light);background-color:#ffe6c180}.fileflow-sdk-root .ff-mapping-source{flex:1 1 0%;border-radius:.75rem;padding:.625rem 1rem;font-family:JetBrains Mono,SF Mono,Monaco,monospace;font-size:.875rem;line-height:1.25rem;background-color:var(--ff-bg-tertiary);color:var(--ff-text-secondary)}.fileflow-sdk-root .ff-mapping-arrow{flex-shrink:0;color:var(--ff-text-muted)}.fileflow-sdk-root .ff-mapping-target{flex:1 1 0%}.fileflow-sdk-root .ff-mapping-status{display:flex;width:2rem;justify-content:center}.fileflow-sdk-root .ff-confidence{display:inline-flex;align-items:center;gap:.375rem;font-size:.75rem;line-height:1rem;font-weight:500}.fileflow-sdk-root .ff-confidence-high{color:var(--ff-success)}.fileflow-sdk-root .ff-confidence-medium{color:var(--ff-warning)}.fileflow-sdk-root .ff-confidence-low{color:var(--ff-error)}.fileflow-sdk-root .ff-confidence-bar{height:.375rem;border-radius:9999px;background-color:var(--ff-bg-tertiary)}.fileflow-sdk-root .ff-confidence-bar-fill{height:100%;border-radius:9999px;transition-property:all;transition-timing-function:cubic-bezier(.4,0,.2,1);transition-duration:.3s}.fileflow-sdk-root .ff-validation-summary{border-radius:1rem;border-width:1px;padding:1rem}.fileflow-sdk-root .ff-validation-summary-error{background-color:var(--ff-error-light);border-color:var(--ff-error)}.fileflow-sdk-root .ff-validation-summary-warning{background-color:var(--ff-warning-light);border-color:var(--ff-warning)}.fileflow-sdk-root .ff-validation-summary-success{background-color:var(--ff-success-light);border-color:var(--ff-success)}.fileflow-sdk-root .ff-card{border-radius:1rem;border-width:1px;background-color:var(--ff-bg-primary);border-color:var(--ff-border-light);box-shadow:0 2px 8px -2px #0000000a}.fileflow-sdk-root .ff-card-hover{transition-property:all;transition-timing-function:cubic-bezier(.4,0,.2,1);transition-duration:.3s}.fileflow-sdk-root .ff-card-hover:hover{border-color:var(--ff-border-default);box-shadow:0 8px 24px -4px #00000014;transform:translateY(-2px)}.fileflow-sdk-root .ff-status{display:inline-flex;align-items:center;gap:.5rem}.fileflow-sdk-root .ff-status-dot{height:.5rem;width:.5rem;border-radius:9999px}.fileflow-sdk-root .ff-status-dot-success{background-color:var(--ff-success)}.fileflow-sdk-root .ff-status-dot-warning{background-color:var(--ff-warning)}.fileflow-sdk-root .ff-status-dot-error{background-color:var(--ff-error)}.fileflow-sdk-root .ff-status-dot-pending{background-color:var(--ff-text-muted)}.fileflow-sdk-root .ff-status-dot-processing{animation:ff-pulse 2s cubic-bezier(.4,0,.6,1) infinite;background-color:var(--ff-primary-90)}.fileflow-sdk-root .ff-empty-state{display:flex;flex-direction:column;align-items:center;justify-content:center;padding-top:3rem;padding-bottom:3rem;text-align:center}.fileflow-sdk-root .ff-empty-state-icon{margin-bottom:1rem;height:4rem;width:4rem;color:var(--ff-border-default)}.fileflow-sdk-root .ff-empty-state-title{margin-bottom:.5rem;font-size:1.125rem;line-height:1.75rem;font-weight:600;color:var(--ff-text-primary)}.fileflow-sdk-root .ff-empty-state-description{max-width:24rem;font-size:.875rem;line-height:1.25rem;color:var(--ff-text-muted)}@keyframes ff-pulse{50%{opacity:.5}}.fileflow-sdk-root .ff-skeleton{animation:ff-pulse 2s cubic-bezier(.4,0,.6,1) infinite;border-radius:.5rem;background-color:var(--ff-bg-tertiary)}.fileflow-sdk-root .ff-skeleton-text{height:1rem;border-radius:.5rem}.fileflow-sdk-root .ff-skeleton-title{height:1.5rem;width:75%;border-radius:.5rem}.fileflow-sdk-root .ff-skeleton-avatar{height:2.5rem;width:2.5rem;border-radius:9999px}.fileflow-sdk-root .ff-pagination{display:flex;align-items:center;gap:.25rem}.fileflow-sdk-root .ff-pagination-btn{display:flex;height:2.25rem;width:2.25rem;align-items:center;justify-content:center;border-radius:.75rem;font-size:.875rem;line-height:1.25rem;font-weight:500;transition-property:color,background-color,border-color,text-decoration-color,fill,stroke;transition-timing-function:cubic-bezier(.4,0,.2,1);transition-duration:.15s;color:var(--ff-text-secondary)}.fileflow-sdk-root .ff-pagination-btn:hover{background-color:var(--ff-bg-secondary);color:var(--ff-text-primary)}.fileflow-sdk-root .ff-pagination-btn-active{background-color:var(--ff-primary-500);color:var(--ff-text-inverse)}.fileflow-sdk-root .ff-pagination-btn-active:hover{background-color:var(--ff-primary-600);color:var(--ff-text-inverse)}.fileflow-sdk-root .ff-selector-group{display:inline-flex;flex-wrap:wrap;gap:.5rem}.fileflow-sdk-root .ff-selector-item{display:inline-flex;align-items:center;gap:.375rem;border-radius:9999px;padding:.375rem .75rem;cursor:pointer;font-size:.875rem;line-height:1.25rem;font-weight:500;transition-property:all;transition-timing-function:cubic-bezier(.4,0,.2,1);transition-duration:.15s;background-color:var(--ff-bg-secondary);color:var(--ff-text-secondary);border:1px solid var(--ff-border-light)}.fileflow-sdk-root .ff-selector-item:hover{background-color:var(--ff-bg-tertiary);border-color:var(--ff-border-default)}.fileflow-sdk-root .ff-selector-item-active{background-color:var(--ff-primary-500);color:var(--ff-text-inverse);border-color:var(--ff-primary-500)}.fileflow-sdk-root .ff-selector-item-active:hover{background-color:var(--ff-primary-600);border-color:var(--ff-primary-600)}.fileflow-sdk-root .ff-fade-in{animation:fadeIn .3s ease-out}.fileflow-sdk-root .ff-slide-up{animation:slideUp .3s ease-out}@keyframes fadeIn{0%{opacity:0}to{opacity:1}}@keyframes slideUp{0%{opacity:0;transform:translateY(10px)}to{opacity:1;transform:translateY(0)}}.fileflow-sdk-root .ff-theme-accent{--ff-primary-50: var(--ff-accent-50);--ff-primary-100: var(--ff-accent-100);--ff-primary-200: var(--ff-accent-200);--ff-primary-300: var(--ff-accent-300);--ff-primary-400: var(--ff-accent-400);--ff-primary-500: var(--ff-accent-500);--ff-primary-600: var(--ff-accent-600);--ff-primary-700: var(--ff-accent-700);--ff-primary-800: var(--ff-accent-800);--ff-primary-900: var(--ff-accent-900);--ff-focus-ring: var(--ff-focus-ring-accent)}.ff-relative{position:relative}.ff-bottom-full{bottom:100%}.ff-left-1\\/2{left:50%}.ff-mx-auto{margin-left:auto;margin-right:auto}.ff-mb-2{margin-bottom:.5rem}.ff-mb-3{margin-bottom:.75rem}.ff-mb-4{margin-bottom:1rem}.ff-mb-6{margin-bottom:1.5rem}.ff-ml-4{margin-left:1rem}.ff-mr-1{margin-right:.25rem}.ff-mr-4{margin-right:1rem}.ff-mt-0\\.5{margin-top:.125rem}.ff-mt-1{margin-top:.25rem}.ff-mt-2{margin-top:.5rem}.ff-mt-3{margin-top:.75rem}.ff-block{display:block}.ff-inline-block{display:inline-block}.ff-flex{display:flex}.ff-table{display:table}.ff-grid{display:grid}.ff-aspect-\\[3\\/4\\]{aspect-ratio:3/4}.ff-h-10{height:2.5rem}.ff-h-12{height:3rem}.ff-h-16{height:4rem}.ff-h-20{height:5rem}.ff-h-3{height:.75rem}.ff-h-4{height:1rem}.ff-h-5{height:1.25rem}.ff-h-6{height:1.5rem}.ff-h-8{height:2rem}.ff-h-full{height:100%}.ff-max-h-96{max-height:24rem}.ff-max-h-\\[250px\\]{max-height:250px}.ff-max-h-\\[500px\\]{max-height:500px}.ff-w-10{width:2.5rem}.ff-w-12{width:3rem}.ff-w-16{width:4rem}.ff-w-20{width:5rem}.ff-w-3{width:.75rem}.ff-w-4{width:1rem}.ff-w-48{width:12rem}.ff-w-5{width:1.25rem}.ff-w-6{width:1.5rem}.ff-w-8{width:2rem}.ff-w-full{width:100%}.ff-min-w-0{min-width:0px}.ff-min-w-\\[160px\\]{min-width:160px}.ff-min-w-\\[280px\\]{min-width:280px}.ff-max-w-\\[150px\\]{max-width:150px}.ff-max-w-lg{max-width:32rem}.ff-max-w-md{max-width:28rem}.ff-max-w-xl{max-width:36rem}.ff-max-w-xs{max-width:20rem}.ff-flex-1{flex:1 1 0%}.ff-flex-shrink-0{flex-shrink:0}.ff--translate-x-1\\/2{--tw-translate-x: -50%;transform:translate(var(--tw-translate-x),var(--tw-translate-y)) rotate(var(--tw-rotate)) skew(var(--tw-skew-x)) skewY(var(--tw-skew-y)) scaleX(var(--tw-scale-x)) scaleY(var(--tw-scale-y))}.ff-transform{transform:translate(var(--tw-translate-x),var(--tw-translate-y)) rotate(var(--tw-rotate)) skew(var(--tw-skew-x)) skewY(var(--tw-skew-y)) scaleX(var(--tw-scale-x)) scaleY(var(--tw-scale-y))}@keyframes ff-spin{to{transform:rotate(360deg)}}.ff-animate-spin{animation:ff-spin 1s linear infinite}.ff-cursor-not-allowed{cursor:not-allowed}.ff-cursor-pointer{cursor:pointer}.ff-cursor-wait{cursor:wait}.ff-select-none{-webkit-user-select:none;-moz-user-select:none;user-select:none}.ff-list-inside{list-style-position:inside}.ff-list-disc{list-style-type:disc}.ff-grid-cols-4{grid-template-columns:repeat(4,minmax(0,1fr))}.ff-flex-col{flex-direction:column}.ff-flex-wrap{flex-wrap:wrap}.ff-items-start{align-items:flex-start}.ff-items-center{align-items:center}.ff-justify-center{justify-content:center}.ff-justify-between{justify-content:space-between}.ff-gap-1{gap:.25rem}.ff-gap-2{gap:.5rem}.ff-gap-3{gap:.75rem}.ff-gap-4{gap:1rem}.ff-gap-6{gap:1.5rem}.ff-space-y-1>:not([hidden])~:not([hidden]){--tw-space-y-reverse: 0;margin-top:calc(.25rem * calc(1 - var(--tw-space-y-reverse)));margin-bottom:calc(.25rem * var(--tw-space-y-reverse))}.ff-space-y-2>:not([hidden])~:not([hidden]){--tw-space-y-reverse: 0;margin-top:calc(.5rem * calc(1 - var(--tw-space-y-reverse)));margin-bottom:calc(.5rem * var(--tw-space-y-reverse))}.ff-space-y-3>:not([hidden])~:not([hidden]){--tw-space-y-reverse: 0;margin-top:calc(.75rem * calc(1 - var(--tw-space-y-reverse)));margin-bottom:calc(.75rem * var(--tw-space-y-reverse))}.ff-space-y-4>:not([hidden])~:not([hidden]){--tw-space-y-reverse: 0;margin-top:calc(1rem * calc(1 - var(--tw-space-y-reverse)));margin-bottom:calc(1rem * var(--tw-space-y-reverse))}.ff-space-y-6>:not([hidden])~:not([hidden]){--tw-space-y-reverse: 0;margin-top:calc(1.5rem * calc(1 - var(--tw-space-y-reverse)));margin-bottom:calc(1.5rem * var(--tw-space-y-reverse))}.ff-overflow-hidden{overflow:hidden}.ff-truncate{overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.ff-whitespace-nowrap{white-space:nowrap}.ff-rounded{border-radius:.5rem}.ff-rounded-2xl{border-radius:1.25rem}.ff-rounded-full{border-radius:9999px}.ff-rounded-lg{border-radius:.75rem}.ff-rounded-xl{border-radius:1rem}.ff-border{border-width:1px}.ff-border-2{border-width:2px}.ff-border-transparent{border-color:transparent}.ff-bg-white{--tw-bg-opacity: 1;background-color:rgb(255 255 255 / var(--tw-bg-opacity, 1))}.ff-object-contain{-o-object-fit:contain;object-fit:contain}.ff-p-1{padding:.25rem}.ff-p-1\\.5{padding:.375rem}.ff-p-2{padding:.5rem}.ff-p-3{padding:.75rem}.ff-p-4{padding:1rem}.ff-p-6{padding:1.5rem}.ff-p-8{padding:2rem}.ff-px-2{padding-left:.5rem;padding-right:.5rem}.ff-px-3{padding-left:.75rem;padding-right:.75rem}.ff-px-4{padding-left:1rem;padding-right:1rem}.ff-px-6{padding-left:1.5rem;padding-right:1.5rem}.ff-py-1{padding-top:.25rem;padding-bottom:.25rem}.ff-py-12{padding-top:3rem;padding-bottom:3rem}.ff-py-2{padding-top:.5rem;padding-bottom:.5rem}.ff-py-3{padding-top:.75rem;padding-bottom:.75rem}.ff-py-4{padding-top:1rem;padding-bottom:1rem}.ff-py-8{padding-top:2rem;padding-bottom:2rem}.ff-text-left{text-align:left}.ff-text-center{text-align:center}.ff-text-right{text-align:right}.ff-font-mono{font-family:JetBrains Mono,SF Mono,Monaco,monospace}.ff-text-2xl{font-size:1.5rem;line-height:2rem}.ff-text-lg{font-size:1.125rem;line-height:1.75rem}.ff-text-sm{font-size:.875rem;line-height:1.25rem}.ff-text-xl{font-size:1.25rem;line-height:1.75rem}.ff-text-xs{font-size:.75rem;line-height:1rem}.ff-font-bold{font-weight:700}.ff-font-medium{font-weight:500}.ff-font-semibold{font-weight:600}.ff-uppercase{text-transform:uppercase}.ff-tracking-wider{letter-spacing:.05em}.ff-opacity-0{opacity:0}.ff-opacity-50{opacity:.5}.ff-shadow-xl{--tw-shadow: 0 20px 25px -5px rgb(0 0 0 / .1), 0 8px 10px -6px rgb(0 0 0 / .1);--tw-shadow-colored: 0 20px 25px -5px var(--tw-shadow-color), 0 8px 10px -6px var(--tw-shadow-color);box-shadow:var(--tw-ring-offset-shadow, 0 0 #0000),var(--tw-ring-shadow, 0 0 #0000),var(--tw-shadow)}.ff-transition-all{transition-property:all;transition-timing-function:cubic-bezier(.4,0,.2,1);transition-duration:.15s}.ff-transition-colors{transition-property:color,background-color,border-color,text-decoration-color,fill,stroke;transition-timing-function:cubic-bezier(.4,0,.2,1);transition-duration:.15s}.ff-transition-opacity{transition-property:opacity;transition-timing-function:cubic-bezier(.4,0,.2,1);transition-duration:.15s}.ff-duration-150{transition-duration:.15s}.hover\\:ff-border-transparent:hover{border-color:transparent}.ff-group:hover .group-hover\\:ff-opacity-100{opacity:1}`, fn = "fileflow-sdk-styles";
5
5
  let mr = !1;
6
6
  function Dr() {
7
7
  if (mr || typeof document > "u") return;
@@ -9224,4 +9224,4 @@ export {
9224
9224
  _d as t,
9225
9225
  Uc as u
9226
9226
  };
9227
- //# sourceMappingURL=index-DJ8UbzFt.mjs.map
9227
+ //# sourceMappingURL=index-Dn3cI9sZ.mjs.map