@omnikit-js/ui 0.9.42 → 0.9.43
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.
|
@@ -355,8 +355,10 @@ interface UploadedFile {
|
|
|
355
355
|
size: number;
|
|
356
356
|
/** MIME type */
|
|
357
357
|
mimeType: string;
|
|
358
|
-
/**
|
|
358
|
+
/** Storage URL (direct storage access) */
|
|
359
359
|
url?: string;
|
|
360
|
+
/** Public URL (CDN access, only for public files) */
|
|
361
|
+
publicUrl?: string;
|
|
360
362
|
/** Storage key/path */
|
|
361
363
|
storageKey?: string;
|
|
362
364
|
}
|
|
@@ -920,7 +920,8 @@ async function uploadSingleFile(file, config) {
|
|
|
920
920
|
name: confirmResponse.data.name,
|
|
921
921
|
size: confirmResponse.data.size_bytes,
|
|
922
922
|
mimeType: confirmResponse.data.mime_type,
|
|
923
|
-
url: confirmResponse.data.storage_url
|
|
923
|
+
url: confirmResponse.data.storage_url,
|
|
924
|
+
publicUrl: confirmResponse.data.public_url
|
|
924
925
|
};
|
|
925
926
|
}
|
|
926
927
|
async function uploadMultipartFile(file, config, abortSignal) {
|
|
@@ -1000,7 +1001,8 @@ async function uploadMultipartFile(file, config, abortSignal) {
|
|
|
1000
1001
|
name: confirmResponse.data.name,
|
|
1001
1002
|
size: confirmResponse.data.size_bytes,
|
|
1002
1003
|
mimeType: confirmResponse.data.mime_type,
|
|
1003
|
-
url: confirmResponse.data.storage_url
|
|
1004
|
+
url: confirmResponse.data.storage_url,
|
|
1005
|
+
publicUrl: confirmResponse.data.public_url
|
|
1004
1006
|
};
|
|
1005
1007
|
}
|
|
1006
1008
|
async function uploadFile(file, config, abortSignal) {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../../../src/components/client/Tabs/index.tsx","../../../src/components/client/Modal/index.tsx","../../../src/components/client/PaymentMethodManager/index.tsx","../../../src/components/client/LoginForm/index.tsx","../../../src/components/client/RegisterForm/index.tsx","../../../src/components/client/ForgotPasswordForm/index.tsx","../../../src/components/client/ResetPasswordForm/index.tsx","../../../src/components/client/FileUploader/upload-utils.ts","../../../src/components/client/FileUploader/index.tsx","../../../src/components/client/index.ts"],"names":["jsxs","jsx","useState","Button","Fragment","TextInput","Spinner","result","DEFAULT_MULTIPART_THRESHOLD","useEffect","uploadSingleFile"],"mappings":"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","file":"index.js","sourcesContent":["'use client'\n\nimport { useState } from 'react'\n\nexport interface Tab {\n id: string\n label: string\n content: React.ReactNode\n}\n\nexport interface TabsProps {\n tabs: Tab[]\n defaultTab?: string\n className?: string\n}\n\nexport function Tabs({ tabs, defaultTab, className = '' }: TabsProps) {\n const [activeTab, setActiveTab] = useState(defaultTab || tabs[0]?.id)\n\n return (\n <div className={className}>\n <div className=\"border-b border-gray-200 dark:border-gray-700\">\n <nav className=\"-mb-px flex space-x-8\">\n {tabs.map((tab) => (\n <button\n key={tab.id}\n onClick={() => setActiveTab(tab.id)}\n className={`\n whitespace-nowrap border-b-2 px-1 pb-4 text-sm font-medium transition-colors\n ${\n activeTab === tab.id\n ? 'border-blue-500 text-blue-600 dark:border-neutral-300 dark:text-white'\n : 'border-transparent text-gray-500 hover:border-gray-300 hover:text-gray-700 dark:text-neutral-400 dark:hover:text-neutral-300'\n }\n `}\n >\n {tab.label}\n </button>\n ))}\n </nav>\n </div>\n <div className=\"mt-6\">\n {tabs.find((tab) => tab.id === activeTab)?.content}\n </div>\n </div>\n )\n}\n","'use client'\n\nimport { useEffect } from 'react'\n\nexport interface ModalProps {\n isOpen: boolean\n onClose: () => void\n title: string\n children: React.ReactNode\n className?: string\n}\n\nexport function Modal({ isOpen, onClose, title, children, className = '' }: ModalProps) {\n useEffect(() => {\n const handleEscape = (e: KeyboardEvent) => {\n if (e.key === 'Escape') onClose()\n }\n\n if (isOpen) {\n document.addEventListener('keydown', handleEscape)\n document.body.style.overflow = 'hidden'\n }\n\n return () => {\n document.removeEventListener('keydown', handleEscape)\n document.body.style.overflow = 'unset'\n }\n }, [isOpen, onClose])\n\n if (!isOpen) return null\n\n return (\n <div className=\"fixed inset-0 z-50 flex items-center justify-center p-4\">\n {/* Backdrop */}\n <div\n className=\"absolute inset-0 bg-black/50 backdrop-blur-sm\"\n onClick={onClose}\n />\n\n {/* Modal */}\n <div\n className={`relative bg-white dark:bg-neutral-900 rounded-lg shadow-xl max-w-md w-full max-h-[90vh] overflow-y-auto ${className}`}\n >\n {/* Header */}\n <div className=\"flex items-center justify-between p-6 border-b border-gray-200 dark:border-neutral-700\">\n <h2 className=\"text-xl font-semibold\">{title}</h2>\n <button\n onClick={onClose}\n className=\"text-gray-400 hover:text-gray-600 dark:hover:text-gray-300 transition-colors\"\n >\n <svg className=\"w-6 h-6\" fill=\"none\" stroke=\"currentColor\" viewBox=\"0 0 24 24\">\n <path strokeLinecap=\"round\" strokeLinejoin=\"round\" strokeWidth={2} d=\"M6 18L18 6M6 6l12 12\" />\n </svg>\n </button>\n </div>\n\n {/* Content */}\n <div className=\"p-6\">\n {children}\n </div>\n </div>\n </div>\n )\n}\n","'use client'\n\nimport { useState } from 'react'\nimport { Modal } from '../Modal'\nimport { Button } from '../LiteButton'\n\nexport interface PaymentMethodManagerProps {\n currentMethod: {\n type: string\n last4: string\n expiry: string\n }\n}\n\nexport function PaymentMethodManager({ currentMethod }: PaymentMethodManagerProps) {\n const [isModalOpen, setIsModalOpen] = useState(false)\n\n return (\n <>\n <div>\n <h3 className=\"text-lg font-semibold mb-4\">Current Payment Method</h3>\n <div className=\"flex items-center justify-between p-4 border border-gray-200 dark:border-gray-700 rounded-lg mb-6\">\n <div className=\"flex items-center gap-4\">\n <div className=\"h-12 w-16 rounded bg-gradient-to-br from-blue-600 to-blue-800 flex items-center justify-center text-white font-bold text-sm\">\n {currentMethod.type}\n </div>\n <div>\n <p className=\"font-medium\">•••• •••• •••• {currentMethod.last4}</p>\n <p className=\"text-sm text-gray-600 dark:text-gray-400\">\n Expires {currentMethod.expiry}\n </p>\n </div>\n </div>\n <Button\n onClick={() => setIsModalOpen(true)}\n variant=\"secondary\"\n size=\"sm\"\n >\n Update\n </Button>\n </div>\n\n <Button\n onClick={() => setIsModalOpen(true)}\n className=\"w-full\"\n >\n Add New Payment Method\n </Button>\n </div>\n\n <Modal\n isOpen={isModalOpen}\n onClose={() => setIsModalOpen(false)}\n title=\"Add Payment Method\"\n >\n <div className=\"space-y-4\">\n <div>\n <label className=\"block text-sm font-medium text-gray-700 dark:text-gray-300 mb-2\">\n Cardholder Name\n </label>\n <input\n type=\"text\"\n placeholder=\"John Doe\"\n className=\"w-full rounded-lg border border-gray-300 dark:border-gray-600 bg-white dark:bg-gray-800 px-4 py-2 text-sm focus:border-blue-500 dark:focus:border-neutral-400 focus:outline-none focus:ring-2 focus:ring-blue-500/20 dark:focus:ring-neutral-400/20\"\n />\n </div>\n <div>\n <label className=\"block text-sm font-medium text-gray-700 dark:text-gray-300 mb-2\">\n Card Number\n </label>\n <input\n type=\"text\"\n placeholder=\"1234 5678 9012 3456\"\n className=\"w-full rounded-lg border border-gray-300 dark:border-gray-600 bg-white dark:bg-gray-800 px-4 py-2 text-sm focus:border-blue-500 dark:focus:border-neutral-400 focus:outline-none focus:ring-2 focus:ring-blue-500/20 dark:focus:ring-neutral-400/20\"\n />\n </div>\n <div className=\"grid grid-cols-2 gap-4\">\n <div>\n <label className=\"block text-sm font-medium text-gray-700 dark:text-gray-300 mb-2\">\n Expiry Date\n </label>\n <input\n type=\"text\"\n placeholder=\"MM/YY\"\n className=\"w-full rounded-lg border border-gray-300 dark:border-gray-600 bg-white dark:bg-gray-800 px-4 py-2 text-sm focus:border-blue-500 dark:focus:border-neutral-400 focus:outline-none focus:ring-2 focus:ring-blue-500/20 dark:focus:ring-neutral-400/20\"\n />\n </div>\n <div>\n <label className=\"block text-sm font-medium text-gray-700 dark:text-gray-300 mb-2\">\n CVC\n </label>\n <input\n type=\"text\"\n placeholder=\"123\"\n className=\"w-full rounded-lg border border-gray-300 dark:border-gray-600 bg-white dark:bg-gray-800 px-4 py-2 text-sm focus:border-blue-500 dark:focus:border-neutral-400 focus:outline-none focus:ring-2 focus:ring-blue-500/20 dark:focus:ring-neutral-400/20\"\n />\n </div>\n </div>\n <div className=\"flex items-center gap-2\">\n <input\n type=\"checkbox\"\n id=\"setDefaultModal\"\n className=\"rounded border-gray-300 dark:border-gray-600 text-blue-600 dark:text-gray-300 focus:ring-blue-500 dark:focus:ring-gray-400\"\n />\n <label htmlFor=\"setDefaultModal\" className=\"text-sm text-gray-700 dark:text-gray-300\">\n Set as default payment method\n </label>\n </div>\n <div className=\"flex gap-3 pt-4\">\n <Button\n onClick={() => setIsModalOpen(false)}\n variant=\"secondary\"\n className=\"flex-1\"\n >\n Cancel\n </Button>\n <Button\n onClick={() => setIsModalOpen(false)}\n className=\"flex-1\"\n >\n Add Card\n </Button>\n </div>\n </div>\n </Modal>\n </>\n )\n}\n","'use client'\n\nimport { useState, FormEvent } from 'react'\nimport { TextInput, Button, Spinner } from '@marcoschwartz/lite-ui'\nimport type { LoginFormProps, LoginSuccessData, LoginFormState } from './types'\n\nexport type { LoginFormProps, LoginSuccessData }\n\nexport function LoginForm({\n apiUrl,\n projectId,\n onSuccess,\n onError,\n showRememberMe = false,\n allowUsername = false,\n className = '',\n registerLink,\n forgotPasswordLink,\n}: LoginFormProps) {\n const [state, setState] = useState<LoginFormState>({\n email: '',\n password: '',\n rememberMe: false,\n isLoading: false,\n error: null,\n })\n\n const handleSubmit = async (e: FormEvent) => {\n e.preventDefault()\n setState(prev => ({ ...prev, isLoading: true, error: null }))\n\n try {\n const response = await fetch(`${apiUrl}/auth/login`, {\n method: 'POST',\n headers: { 'Content-Type': 'application/json' },\n body: JSON.stringify({\n [allowUsername && !state.email.includes('@') ? 'username' : 'email']: state.email,\n password: state.password,\n project_id: projectId,\n }),\n })\n\n const data = await response.json()\n\n if (!response.ok) {\n throw new Error(data.error || 'Login failed')\n }\n\n onSuccess?.(data as LoginSuccessData)\n } catch (err) {\n const error = err instanceof Error ? err : new Error('Login failed')\n setState(prev => ({ ...prev, error: error.message }))\n onError?.(error)\n } finally {\n setState(prev => ({ ...prev, isLoading: false }))\n }\n }\n\n return (\n <form onSubmit={handleSubmit} className={`space-y-4 ${className}`}>\n {state.error && (\n <div className=\"p-3 text-sm text-red-600 bg-red-50 dark:bg-red-900/20 dark:text-red-400 rounded-md\">\n {state.error}\n </div>\n )}\n\n <TextInput\n label={allowUsername ? 'Email or Username' : 'Email'}\n type={allowUsername ? 'text' : 'email'}\n value={state.email}\n onChange={(e) => setState(prev => ({ ...prev, email: e.target.value }))}\n placeholder={allowUsername ? 'you@example.com or username' : 'you@example.com'}\n required\n disabled={state.isLoading}\n fullWidth\n autoComplete=\"username\"\n />\n\n <TextInput\n label=\"Password\"\n type=\"password\"\n value={state.password}\n onChange={(e) => setState(prev => ({ ...prev, password: e.target.value }))}\n placeholder=\"Enter your password\"\n required\n disabled={state.isLoading}\n fullWidth\n autoComplete=\"current-password\"\n />\n\n {showRememberMe && (\n <label className=\"flex items-center gap-2 text-sm\">\n <input\n type=\"checkbox\"\n checked={state.rememberMe}\n onChange={(e) => setState(prev => ({ ...prev, rememberMe: e.target.checked }))}\n className=\"rounded border-gray-300 text-blue-600 focus:ring-blue-500\"\n disabled={state.isLoading}\n />\n <span className=\"text-gray-700 dark:text-gray-300\">Remember me</span>\n </label>\n )}\n\n <Button\n type=\"submit\"\n variant=\"primary\"\n disabled={state.isLoading}\n className=\"w-full\"\n >\n {state.isLoading ? (\n <>\n <Spinner size=\"sm\" color=\"white\" className=\"mr-2\" />\n Signing in...\n </>\n ) : (\n 'Sign in'\n )}\n </Button>\n\n {(forgotPasswordLink || registerLink) && (\n <div className=\"flex items-center justify-between text-sm\">\n {forgotPasswordLink && (\n <a\n href={forgotPasswordLink}\n className=\"text-blue-600 hover:text-blue-700 dark:text-neutral-300 dark:hover:text-white\"\n >\n Forgot password?\n </a>\n )}\n {registerLink && (\n <a\n href={registerLink}\n className=\"text-blue-600 hover:text-blue-700 dark:text-neutral-300 dark:hover:text-white\"\n >\n Create an account\n </a>\n )}\n </div>\n )}\n </form>\n )\n}\n","'use client'\n\nimport { useState, FormEvent } from 'react'\nimport { TextInput, Button, Spinner } from '@marcoschwartz/lite-ui'\nimport type { RegisterFormProps, RegisterSuccessData, RegisterFormState } from './types'\n\nexport type { RegisterFormProps, RegisterSuccessData }\n\nexport function RegisterForm({\n apiUrl,\n projectId,\n onSuccess,\n onError,\n requireUsername = false,\n showDisplayName = false,\n showOrganizationName = false,\n showTerms = false,\n termsLink,\n className = '',\n loginLink,\n}: RegisterFormProps) {\n const [state, setState] = useState<RegisterFormState>({\n email: '',\n username: '',\n password: '',\n confirmPassword: '',\n displayName: '',\n organizationName: '',\n acceptTerms: false,\n isLoading: false,\n error: null,\n fieldErrors: {},\n })\n\n const validateForm = (): boolean => {\n const errors: RegisterFormState['fieldErrors'] = {}\n\n // Email validation\n if (!state.email) {\n errors.email = 'Email is required'\n } else if (!/^[^\\s@]+@[^\\s@]+\\.[^\\s@]+$/.test(state.email)) {\n errors.email = 'Please enter a valid email address'\n }\n\n // Username validation (if required)\n if (requireUsername && !state.username) {\n errors.username = 'Username is required'\n } else if (state.username && state.username.length < 3) {\n errors.username = 'Username must be at least 3 characters'\n }\n\n // Password validation\n if (!state.password) {\n errors.password = 'Password is required'\n } else if (state.password.length < 6) {\n errors.password = 'Password must be at least 6 characters'\n }\n\n // Confirm password\n if (state.password !== state.confirmPassword) {\n errors.confirmPassword = 'Passwords do not match'\n }\n\n setState(prev => ({ ...prev, fieldErrors: errors }))\n return Object.keys(errors).length === 0\n }\n\n const handleSubmit = async (e: FormEvent) => {\n e.preventDefault()\n\n if (!validateForm()) return\n\n if (showTerms && !state.acceptTerms) {\n setState(prev => ({ ...prev, error: 'You must accept the terms and conditions' }))\n return\n }\n\n setState(prev => ({ ...prev, isLoading: true, error: null }))\n\n try {\n const payload: Record<string, any> = {\n email: state.email,\n password: state.password,\n project_id: projectId,\n }\n\n if (state.username) {\n payload.username = state.username\n }\n if (state.displayName) {\n payload.display_name = state.displayName\n }\n if (state.organizationName) {\n payload.organization_name = state.organizationName\n }\n\n const response = await fetch(`${apiUrl}/auth/register`, {\n method: 'POST',\n headers: { 'Content-Type': 'application/json' },\n body: JSON.stringify(payload),\n })\n\n const data = await response.json()\n\n if (!response.ok) {\n throw new Error(data.error || 'Registration failed')\n }\n\n onSuccess?.(data as RegisterSuccessData)\n } catch (err) {\n const error = err instanceof Error ? err : new Error('Registration failed')\n setState(prev => ({ ...prev, error: error.message }))\n onError?.(error)\n } finally {\n setState(prev => ({ ...prev, isLoading: false }))\n }\n }\n\n return (\n <form onSubmit={handleSubmit} className={`space-y-4 ${className}`}>\n {state.error && (\n <div className=\"p-3 text-sm text-red-600 bg-red-50 dark:bg-red-900/20 dark:text-red-400 rounded-md\">\n {state.error}\n </div>\n )}\n\n <TextInput\n label=\"Email\"\n type=\"email\"\n value={state.email}\n onChange={(e) => setState(prev => ({ ...prev, email: e.target.value, fieldErrors: { ...prev.fieldErrors, email: undefined } }))}\n placeholder=\"you@example.com\"\n required\n disabled={state.isLoading}\n fullWidth\n autoComplete=\"email\"\n error={state.fieldErrors.email}\n />\n\n {requireUsername && (\n <TextInput\n label=\"Username\"\n type=\"text\"\n value={state.username}\n onChange={(e) => setState(prev => ({ ...prev, username: e.target.value, fieldErrors: { ...prev.fieldErrors, username: undefined } }))}\n placeholder=\"Choose a username\"\n required\n disabled={state.isLoading}\n fullWidth\n autoComplete=\"username\"\n error={state.fieldErrors.username}\n />\n )}\n\n {showDisplayName && (\n <TextInput\n label=\"Display Name\"\n type=\"text\"\n value={state.displayName}\n onChange={(e) => setState(prev => ({ ...prev, displayName: e.target.value }))}\n placeholder=\"Your display name\"\n disabled={state.isLoading}\n fullWidth\n />\n )}\n\n {showOrganizationName && (\n <TextInput\n label=\"Organization Name\"\n type=\"text\"\n value={state.organizationName}\n onChange={(e) => setState(prev => ({ ...prev, organizationName: e.target.value }))}\n placeholder=\"Your organization (optional)\"\n disabled={state.isLoading}\n fullWidth\n />\n )}\n\n <TextInput\n label=\"Password\"\n type=\"password\"\n value={state.password}\n onChange={(e) => setState(prev => ({ ...prev, password: e.target.value, fieldErrors: { ...prev.fieldErrors, password: undefined } }))}\n placeholder=\"At least 6 characters\"\n required\n disabled={state.isLoading}\n fullWidth\n autoComplete=\"new-password\"\n error={state.fieldErrors.password}\n />\n\n <TextInput\n label=\"Confirm Password\"\n type=\"password\"\n value={state.confirmPassword}\n onChange={(e) => setState(prev => ({ ...prev, confirmPassword: e.target.value, fieldErrors: { ...prev.fieldErrors, confirmPassword: undefined } }))}\n placeholder=\"Confirm your password\"\n required\n disabled={state.isLoading}\n fullWidth\n autoComplete=\"new-password\"\n error={state.fieldErrors.confirmPassword}\n />\n\n {showTerms && (\n <label className=\"flex items-start gap-2 text-sm\">\n <input\n type=\"checkbox\"\n checked={state.acceptTerms}\n onChange={(e) => setState(prev => ({ ...prev, acceptTerms: e.target.checked }))}\n className=\"mt-1 rounded border-gray-300 text-blue-600 focus:ring-blue-500\"\n disabled={state.isLoading}\n />\n <span className=\"text-gray-700 dark:text-gray-300\">\n I agree to the{' '}\n {termsLink ? (\n <a href={termsLink} className=\"text-blue-600 hover:underline\" target=\"_blank\" rel=\"noopener noreferrer\">\n terms and conditions\n </a>\n ) : (\n 'terms and conditions'\n )}\n </span>\n </label>\n )}\n\n <Button\n type=\"submit\"\n variant=\"primary\"\n disabled={state.isLoading}\n className=\"w-full\"\n >\n {state.isLoading ? (\n <>\n <Spinner size=\"sm\" color=\"white\" className=\"mr-2\" />\n Creating account...\n </>\n ) : (\n 'Create account'\n )}\n </Button>\n\n {loginLink && (\n <p className=\"text-center text-sm text-gray-600 dark:text-gray-400\">\n Already have an account?{' '}\n <a\n href={loginLink}\n className=\"text-blue-600 hover:text-blue-700 dark:text-neutral-300 dark:hover:text-white\"\n >\n Sign in\n </a>\n </p>\n )}\n </form>\n )\n}\n","'use client'\n\nimport { useState, FormEvent } from 'react'\nimport { TextInput, Button, Spinner } from '@marcoschwartz/lite-ui'\nimport type { ForgotPasswordFormProps, ForgotPasswordFormState } from './types'\n\nexport type { ForgotPasswordFormProps }\n\nexport function ForgotPasswordForm({\n apiUrl,\n projectId,\n resetPasswordUrl,\n onSuccess,\n onError,\n className = '',\n loginLink,\n}: ForgotPasswordFormProps) {\n const [state, setState] = useState<ForgotPasswordFormState>({\n email: '',\n isLoading: false,\n isSuccess: false,\n error: null,\n })\n\n const handleSubmit = async (e: FormEvent) => {\n e.preventDefault()\n setState(prev => ({ ...prev, isLoading: true, error: null }))\n\n try {\n const response = await fetch(`${apiUrl}/auth/forgot-password`, {\n method: 'POST',\n headers: { 'Content-Type': 'application/json' },\n body: JSON.stringify({\n email: state.email,\n project_id: projectId,\n frontendUrl: resetPasswordUrl,\n }),\n })\n\n const data = await response.json()\n\n if (!response.ok) {\n throw new Error(data.error || 'Failed to send reset email')\n }\n\n setState(prev => ({ ...prev, isSuccess: true }))\n onSuccess?.()\n } catch (err) {\n const error = err instanceof Error ? err : new Error('Failed to send reset email')\n setState(prev => ({ ...prev, error: error.message }))\n onError?.(error)\n } finally {\n setState(prev => ({ ...prev, isLoading: false }))\n }\n }\n\n if (state.isSuccess) {\n return (\n <div className={`space-y-4 ${className}`}>\n <div className=\"p-4 text-center rounded-md bg-green-50 dark:bg-green-900/20\">\n <svg\n className=\"w-12 h-12 mx-auto mb-3 text-green-500\"\n fill=\"none\"\n stroke=\"currentColor\"\n viewBox=\"0 0 24 24\"\n >\n <path\n strokeLinecap=\"round\"\n strokeLinejoin=\"round\"\n strokeWidth={2}\n d=\"M3 8l7.89 5.26a2 2 0 002.22 0L21 8M5 19h14a2 2 0 002-2V7a2 2 0 00-2-2H5a2 2 0 00-2 2v10a2 2 0 002 2z\"\n />\n </svg>\n <h3 className=\"text-lg font-medium text-green-800 dark:text-green-200\">\n Check your email\n </h3>\n <p className=\"mt-2 text-sm text-green-700 dark:text-green-300\">\n If an account with that email exists, we've sent you a password reset link.\n </p>\n </div>\n\n {loginLink && (\n <p className=\"text-center text-sm text-gray-600 dark:text-gray-400\">\n <a\n href={loginLink}\n className=\"text-blue-600 hover:text-blue-700 dark:text-neutral-300 dark:hover:text-white\"\n >\n Back to sign in\n </a>\n </p>\n )}\n </div>\n )\n }\n\n return (\n <form onSubmit={handleSubmit} className={`space-y-4 ${className}`}>\n <div className=\"text-center mb-6\">\n <h2 className=\"text-xl font-semibold text-gray-900 dark:text-white\">\n Forgot your password?\n </h2>\n <p className=\"mt-2 text-sm text-gray-600 dark:text-gray-400\">\n Enter your email and we'll send you a reset link.\n </p>\n </div>\n\n {state.error && (\n <div className=\"p-3 text-sm text-red-600 bg-red-50 dark:bg-red-900/20 dark:text-red-400 rounded-md\">\n {state.error}\n </div>\n )}\n\n <TextInput\n label=\"Email\"\n type=\"email\"\n value={state.email}\n onChange={(e) => setState(prev => ({ ...prev, email: e.target.value }))}\n placeholder=\"you@example.com\"\n required\n disabled={state.isLoading}\n fullWidth\n autoComplete=\"email\"\n />\n\n <Button\n type=\"submit\"\n variant=\"primary\"\n disabled={state.isLoading}\n className=\"w-full\"\n >\n {state.isLoading ? (\n <>\n <Spinner size=\"sm\" color=\"white\" className=\"mr-2\" />\n Sending...\n </>\n ) : (\n 'Send reset link'\n )}\n </Button>\n\n {loginLink && (\n <p className=\"text-center text-sm text-gray-600 dark:text-gray-400\">\n Remember your password?{' '}\n <a\n href={loginLink}\n className=\"text-blue-600 hover:text-blue-700 dark:text-blue-400 dark:hover:text-blue-300\"\n >\n Sign in\n </a>\n </p>\n )}\n </form>\n )\n}\n","'use client'\n\nimport { useState, FormEvent } from 'react'\nimport { TextInput, Button, Spinner } from '@marcoschwartz/lite-ui'\nimport type { ResetPasswordFormProps, ResetPasswordFormState } from './types'\n\nexport type { ResetPasswordFormProps }\n\nexport function ResetPasswordForm({\n apiUrl,\n token,\n onSuccess,\n onError,\n className = '',\n loginLink,\n}: ResetPasswordFormProps) {\n const [state, setState] = useState<ResetPasswordFormState>({\n password: '',\n confirmPassword: '',\n isLoading: false,\n isSuccess: false,\n error: null,\n fieldErrors: {},\n })\n\n const validateForm = (): boolean => {\n const errors: ResetPasswordFormState['fieldErrors'] = {}\n\n if (!state.password) {\n errors.password = 'Password is required'\n } else if (state.password.length < 6) {\n errors.password = 'Password must be at least 6 characters'\n }\n\n if (state.password !== state.confirmPassword) {\n errors.confirmPassword = 'Passwords do not match'\n }\n\n setState(prev => ({ ...prev, fieldErrors: errors }))\n return Object.keys(errors).length === 0\n }\n\n const handleSubmit = async (e: FormEvent) => {\n e.preventDefault()\n\n if (!validateForm()) return\n\n setState(prev => ({ ...prev, isLoading: true, error: null }))\n\n try {\n const response = await fetch(`${apiUrl}/auth/reset-password`, {\n method: 'POST',\n headers: { 'Content-Type': 'application/json' },\n body: JSON.stringify({\n token,\n password: state.password,\n sendConfirmationEmail: true,\n }),\n })\n\n const data = await response.json()\n\n if (!response.ok) {\n throw new Error(data.error || 'Failed to reset password')\n }\n\n setState(prev => ({ ...prev, isSuccess: true }))\n onSuccess?.()\n } catch (err) {\n const error = err instanceof Error ? err : new Error('Failed to reset password')\n setState(prev => ({ ...prev, error: error.message }))\n onError?.(error)\n } finally {\n setState(prev => ({ ...prev, isLoading: false }))\n }\n }\n\n if (state.isSuccess) {\n return (\n <div className={`space-y-4 ${className}`}>\n <div className=\"p-4 text-center rounded-md bg-green-50 dark:bg-green-900/20\">\n <svg\n className=\"w-12 h-12 mx-auto mb-3 text-green-500\"\n fill=\"none\"\n stroke=\"currentColor\"\n viewBox=\"0 0 24 24\"\n >\n <path\n strokeLinecap=\"round\"\n strokeLinejoin=\"round\"\n strokeWidth={2}\n d=\"M9 12l2 2 4-4m6 2a9 9 0 11-18 0 9 9 0 0118 0z\"\n />\n </svg>\n <h3 className=\"text-lg font-medium text-green-800 dark:text-green-200\">\n Password reset successful\n </h3>\n <p className=\"mt-2 text-sm text-green-700 dark:text-green-300\">\n Your password has been updated. You can now sign in with your new password.\n </p>\n </div>\n\n {loginLink && (\n <div className=\"text-center\">\n <a\n href={loginLink}\n className=\"inline-flex items-center justify-center px-4 py-2 text-sm font-medium text-white bg-blue-600 rounded-md hover:bg-blue-700\"\n >\n Go to sign in\n </a>\n </div>\n )}\n </div>\n )\n }\n\n if (!token) {\n return (\n <div className={`space-y-4 ${className}`}>\n <div className=\"p-4 text-center rounded-md bg-red-50 dark:bg-red-900/20\">\n <svg\n className=\"w-12 h-12 mx-auto mb-3 text-red-500\"\n fill=\"none\"\n stroke=\"currentColor\"\n viewBox=\"0 0 24 24\"\n >\n <path\n strokeLinecap=\"round\"\n strokeLinejoin=\"round\"\n strokeWidth={2}\n d=\"M12 9v2m0 4h.01m-6.938 4h13.856c1.54 0 2.502-1.667 1.732-3L13.732 4c-.77-1.333-2.694-1.333-3.464 0L3.34 16c-.77 1.333.192 3 1.732 3z\"\n />\n </svg>\n <h3 className=\"text-lg font-medium text-red-800 dark:text-red-200\">\n Invalid reset link\n </h3>\n <p className=\"mt-2 text-sm text-red-700 dark:text-red-300\">\n This password reset link is invalid or has expired.\n </p>\n </div>\n\n {loginLink && (\n <p className=\"text-center text-sm text-gray-600 dark:text-gray-400\">\n <a\n href={loginLink}\n className=\"text-blue-600 hover:text-blue-700 dark:text-neutral-300 dark:hover:text-white\"\n >\n Back to sign in\n </a>\n </p>\n )}\n </div>\n )\n }\n\n return (\n <form onSubmit={handleSubmit} className={`space-y-4 ${className}`}>\n <div className=\"text-center mb-6\">\n <h2 className=\"text-xl font-semibold text-gray-900 dark:text-white\">\n Reset your password\n </h2>\n <p className=\"mt-2 text-sm text-gray-600 dark:text-gray-400\">\n Enter your new password below.\n </p>\n </div>\n\n {state.error && (\n <div className=\"p-3 text-sm text-red-600 bg-red-50 dark:bg-red-900/20 dark:text-red-400 rounded-md\">\n {state.error}\n </div>\n )}\n\n <TextInput\n label=\"New Password\"\n type=\"password\"\n value={state.password}\n onChange={(e) => setState(prev => ({ ...prev, password: e.target.value, fieldErrors: { ...prev.fieldErrors, password: undefined } }))}\n placeholder=\"At least 6 characters\"\n required\n disabled={state.isLoading}\n fullWidth\n autoComplete=\"new-password\"\n error={state.fieldErrors.password}\n />\n\n <TextInput\n label=\"Confirm Password\"\n type=\"password\"\n value={state.confirmPassword}\n onChange={(e) => setState(prev => ({ ...prev, confirmPassword: e.target.value, fieldErrors: { ...prev.fieldErrors, confirmPassword: undefined } }))}\n placeholder=\"Confirm your new password\"\n required\n disabled={state.isLoading}\n fullWidth\n autoComplete=\"new-password\"\n error={state.fieldErrors.confirmPassword}\n />\n\n <Button\n type=\"submit\"\n variant=\"primary\"\n disabled={state.isLoading}\n className=\"w-full\"\n >\n {state.isLoading ? (\n <>\n <Spinner size=\"sm\" color=\"white\" className=\"mr-2\" />\n Resetting password...\n </>\n ) : (\n 'Reset password'\n )}\n </Button>\n\n {loginLink && (\n <p className=\"text-center text-sm text-gray-600 dark:text-gray-400\">\n Remember your password?{' '}\n <a\n href={loginLink}\n className=\"text-blue-600 hover:text-blue-700 dark:text-blue-400 dark:hover:text-blue-300\"\n >\n Sign in\n </a>\n </p>\n )}\n </form>\n )\n}\n","import type {\n PresignedUrlResponse,\n ConfirmUploadResponse,\n UploadPartResult,\n UploadedFile,\n} from './types'\n\nconst DEFAULT_PART_SIZE = 5 * 1024 * 1024 // 5MB\nconst DEFAULT_MULTIPART_THRESHOLD = 5 * 1024 * 1024 // 5MB\nconst DEFAULT_MAX_CONCURRENT_PARTS = 5\nconst EMA_ALPHA = 0.3\n\nexport interface UploadConfig {\n apiUrl: string\n projectId: number\n bucketId?: number\n folderId?: number\n accessLevel?: 'private' | 'public'\n apiKey?: string\n accessToken?: string\n partSize?: number\n maxConcurrentParts?: number\n onProgress?: (bytesUploaded: number, totalBytes: number, speed: number) => void\n}\n\nfunction getAuthHeaders(config: UploadConfig): HeadersInit {\n const headers: HeadersInit = {\n 'Content-Type': 'application/json',\n }\n if (config.accessToken) {\n headers['Authorization'] = `Bearer ${config.accessToken}`\n } else if (config.apiKey) {\n headers['X-API-Key'] = config.apiKey\n }\n return headers\n}\n\nexport async function generatePresignedUrl(\n file: File,\n config: UploadConfig,\n isMultipart: boolean,\n numParts?: number\n): Promise<PresignedUrlResponse> {\n const response = await fetch(`${config.apiUrl}/storage/generate-presigned-url`, {\n method: 'POST',\n headers: getAuthHeaders(config),\n body: JSON.stringify({\n file_name: file.name,\n file_size: file.size,\n mime_type: file.type || 'application/octet-stream',\n project_id: config.projectId,\n bucket_id: config.bucketId,\n folder_id: config.folderId,\n access_level: config.accessLevel || 'private',\n is_multipart: isMultipart,\n num_parts: numParts,\n }),\n })\n\n if (!response.ok) {\n const errorData = await response.json().catch(() => ({}))\n throw new Error(errorData.error || 'Failed to generate presigned URL')\n }\n\n return response.json()\n}\n\nexport async function confirmUpload(\n fileId: string,\n config: UploadConfig,\n parts?: Array<{ partNumber: number; etag: string }>\n): Promise<ConfirmUploadResponse> {\n const response = await fetch(`${config.apiUrl}/storage/confirm-upload`, {\n method: 'POST',\n headers: getAuthHeaders(config),\n body: JSON.stringify({\n file_id: fileId,\n parts: parts,\n }),\n })\n\n if (!response.ok) {\n const errorData = await response.json().catch(() => ({}))\n throw new Error(errorData.error || 'Failed to confirm upload')\n }\n\n return response.json()\n}\n\nexport async function uploadSingleFile(\n file: File,\n config: UploadConfig\n): Promise<UploadedFile> {\n // Step 1: Get presigned URL\n const presignedResponse = await generatePresignedUrl(file, config, false)\n const { file_id, upload_url } = presignedResponse.data\n\n if (!upload_url) {\n throw new Error('No upload URL received')\n }\n\n // Step 2: Upload to presigned URL\n const uploadResponse = await fetch(upload_url, {\n method: 'PUT',\n body: file,\n headers: {\n 'Content-Type': file.type || 'application/octet-stream',\n },\n })\n\n if (!uploadResponse.ok) {\n throw new Error(`Upload failed: ${uploadResponse.status}`)\n }\n\n // Report progress\n config.onProgress?.(file.size, file.size, 0)\n\n // Step 3: Confirm upload\n const confirmResponse = await confirmUpload(file_id, config)\n\n return {\n id: confirmResponse.data.id,\n name: confirmResponse.data.name,\n size: confirmResponse.data.size_bytes,\n mimeType: confirmResponse.data.mime_type,\n url: confirmResponse.data.storage_url,\n }\n}\n\nexport async function uploadMultipartFile(\n file: File,\n config: UploadConfig,\n abortSignal?: AbortSignal\n): Promise<UploadedFile> {\n const partSize = config.partSize || DEFAULT_PART_SIZE\n const maxConcurrentParts = config.maxConcurrentParts || DEFAULT_MAX_CONCURRENT_PARTS\n const numParts = Math.ceil(file.size / partSize)\n\n // Step 1: Get presigned URLs for all parts\n const presignedResponse = await generatePresignedUrl(file, config, true, numParts)\n const { file_id, parts } = presignedResponse.data\n\n if (!parts || parts.length === 0) {\n throw new Error('No part URLs received')\n }\n\n // Step 2: Upload parts with sliding window\n const uploadedParts: UploadPartResult[] = []\n let bytesUploaded = 0\n const uploadStartTime = Date.now()\n let smoothedSpeed = 0\n\n // Create parts queue\n const partsQueue = parts.map(p => ({ part_number: p.part_number, url: p.url }))\n const inFlight = new Map<number, Promise<UploadPartResult>>()\n\n // Upload a single part\n const uploadPart = async (part: { part_number: number; url: string }): Promise<UploadPartResult> => {\n if (abortSignal?.aborted) {\n throw new Error('Upload cancelled')\n }\n\n const start = (part.part_number - 1) * partSize\n const end = Math.min(start + partSize, file.size)\n const partBlob = file.slice(start, end)\n const partBytes = partBlob.size\n\n const uploadResponse = await fetch(part.url, {\n method: 'PUT',\n body: partBlob,\n headers: {\n 'Content-Type': file.type || 'application/octet-stream',\n },\n signal: abortSignal,\n })\n\n if (!uploadResponse.ok) {\n throw new Error(`Part ${part.part_number} upload failed: ${uploadResponse.status}`)\n }\n\n const etag = uploadResponse.headers.get('ETag')?.replace(/\"/g, '') || ''\n\n return {\n partNumber: part.part_number,\n etag,\n bytes: partBytes,\n }\n }\n\n // Wait for any upload to complete\n const waitForAny = async (): Promise<UploadPartResult> => {\n const entries = Array.from(inFlight.entries())\n const result = await Promise.race(entries.map(([partNum, promise]) =>\n promise.then(result => ({ partNum, result }))\n ))\n inFlight.delete(result.partNum)\n return result.result\n }\n\n // Start initial batch\n while (inFlight.size < maxConcurrentParts && partsQueue.length > 0) {\n const part = partsQueue.shift()!\n inFlight.set(part.part_number, uploadPart(part))\n }\n\n // Process as uploads complete\n while (inFlight.size > 0) {\n const completed = await waitForAny()\n\n uploadedParts.push({\n partNumber: completed.partNumber,\n etag: completed.etag,\n bytes: completed.bytes,\n })\n\n bytesUploaded += completed.bytes\n\n // Calculate smoothed speed\n const elapsed = (Date.now() - uploadStartTime) / 1000\n const instantSpeed = elapsed > 0 ? bytesUploaded / elapsed : 0\n smoothedSpeed = smoothedSpeed === 0\n ? instantSpeed\n : EMA_ALPHA * instantSpeed + (1 - EMA_ALPHA) * smoothedSpeed\n\n // Report progress\n config.onProgress?.(bytesUploaded, file.size, smoothedSpeed)\n\n // Start next upload if there are more parts\n if (partsQueue.length > 0) {\n const nextPart = partsQueue.shift()!\n inFlight.set(nextPart.part_number, uploadPart(nextPart))\n }\n }\n\n // Step 3: Confirm upload with ETags\n const sortedParts = uploadedParts\n .sort((a, b) => a.partNumber - b.partNumber)\n .map(p => ({ partNumber: p.partNumber, etag: p.etag }))\n\n const confirmResponse = await confirmUpload(file_id, config, sortedParts)\n\n return {\n id: confirmResponse.data.id,\n name: confirmResponse.data.name,\n size: confirmResponse.data.size_bytes,\n mimeType: confirmResponse.data.mime_type,\n url: confirmResponse.data.storage_url,\n }\n}\n\nexport async function uploadFile(\n file: File,\n config: UploadConfig,\n abortSignal?: AbortSignal\n): Promise<UploadedFile> {\n const multipartThreshold = DEFAULT_MULTIPART_THRESHOLD\n\n if (file.size >= multipartThreshold) {\n return uploadMultipartFile(file, config, abortSignal)\n } else {\n return uploadSingleFile(file, config)\n }\n}\n\nexport function formatFileSize(bytes: number): string {\n if (bytes === 0) return '0 B'\n const k = 1024\n const sizes = ['B', 'KB', 'MB', 'GB', 'TB']\n const i = Math.floor(Math.log(bytes) / Math.log(k))\n return `${(bytes / Math.pow(k, i)).toFixed(1)} ${sizes[i]}`\n}\n\nexport function formatSpeed(bytesPerSec: number): string {\n return `${formatFileSize(bytesPerSec)}/s`\n}\n\nexport function formatEta(seconds: number): string {\n if (!isFinite(seconds) || seconds <= 0) return '--'\n if (seconds < 60) return `${Math.round(seconds)}s`\n if (seconds < 3600) return `${Math.round(seconds / 60)}m`\n return `${Math.round(seconds / 3600)}h ${Math.round((seconds % 3600) / 60)}m`\n}\n\nexport function generateUploadId(): string {\n return `upload-${Date.now()}-${Math.random().toString(36).substr(2, 9)}`\n}\n","'use client'\n\nimport { useState, useRef, useCallback, useEffect } from 'react'\nimport { Button, Spinner } from '@marcoschwartz/lite-ui'\nimport type {\n FileUploaderProps,\n FileUploadState,\n UploadProgress,\n UploadedFile,\n} from './types'\nimport {\n uploadFile,\n formatFileSize,\n formatSpeed,\n generateUploadId,\n type UploadConfig,\n} from './upload-utils'\n\nexport type { FileUploaderProps, UploadProgress, UploadedFile, FileUploadState }\n\nconst DEFAULT_MAX_CONCURRENT_FILES = 3\nconst DEFAULT_MULTIPART_THRESHOLD = 5 * 1024 * 1024\n\nexport function FileUploader({\n apiUrl,\n projectId,\n bucketId,\n folderId,\n accessLevel = 'private',\n autoUpload = true,\n maxConcurrentFiles = DEFAULT_MAX_CONCURRENT_FILES,\n maxConcurrentParts = 5,\n multipartThreshold = DEFAULT_MULTIPART_THRESHOLD,\n partSize = 5 * 1024 * 1024,\n accept,\n maxFileSize,\n maxFiles = 10,\n onUploadComplete,\n onUploadError,\n onAllUploadsComplete,\n onProgress,\n onFilesSelected,\n apiKey,\n accessToken,\n className = '',\n showFileList = true,\n showProgress = true,\n label,\n helperText,\n disabled = false,\n}: FileUploaderProps) {\n const [uploads, setUploads] = useState<FileUploadState[]>([])\n const [isDragging, setIsDragging] = useState(false)\n const [overallProgress, setOverallProgress] = useState<UploadProgress | null>(null)\n const fileInputRef = useRef<HTMLInputElement>(null)\n const abortControllersRef = useRef<Map<string, AbortController>>(new Map())\n const uploadedFilesRef = useRef<UploadedFile[]>([])\n\n // Cleanup abort controllers on unmount\n useEffect(() => {\n return () => {\n abortControllersRef.current.forEach(controller => controller.abort())\n }\n }, [])\n\n const validateFile = useCallback((file: File): string | null => {\n if (maxFileSize && file.size > maxFileSize) {\n return `File exceeds maximum size of ${formatFileSize(maxFileSize)}`\n }\n return null\n }, [maxFileSize])\n\n const updateUploadState = useCallback((id: string, updates: Partial<FileUploadState>) => {\n setUploads(prev => prev.map(u => u.id === id ? { ...u, ...updates } : u))\n }, [])\n\n const calculateOverallProgress = useCallback(() => {\n // Use functional update to get current state, then schedule callbacks outside\n setUploads(currentUploads => {\n const totalBytes = currentUploads.reduce((sum, u) => sum + u.file.size, 0)\n const bytesUploaded = currentUploads.reduce((sum, u) => sum + u.bytesUploaded, 0)\n const completedFiles = currentUploads.filter(u => u.status === 'completed').length\n const percentage = totalBytes > 0 ? Math.round((bytesUploaded / totalBytes) * 100) : 0\n\n const progress: UploadProgress = {\n totalFiles: currentUploads.length,\n completedFiles,\n bytesUploaded,\n totalBytes,\n percentage,\n speed: 0,\n eta: 0,\n }\n\n // Schedule state updates outside the updater to avoid React warning\n queueMicrotask(() => {\n setOverallProgress(progress)\n onProgress?.(progress)\n })\n\n return currentUploads\n })\n }, [onProgress])\n\n const uploadSingleFile = useCallback(async (uploadState: FileUploadState) => {\n const { id, file } = uploadState\n const abortController = new AbortController()\n abortControllersRef.current.set(id, abortController)\n\n const config: UploadConfig = {\n apiUrl,\n projectId,\n bucketId,\n folderId,\n accessLevel,\n apiKey,\n accessToken,\n partSize,\n maxConcurrentParts,\n onProgress: (bytesUploaded, totalBytes, _speed) => {\n const progress = Math.round((bytesUploaded / totalBytes) * 100)\n updateUploadState(id, { progress, bytesUploaded })\n calculateOverallProgress()\n },\n }\n\n try {\n updateUploadState(id, { status: 'uploading', progress: 0 })\n\n const result = await uploadFile(file, config, abortController.signal)\n\n updateUploadState(id, {\n status: 'completed',\n progress: 100,\n bytesUploaded: file.size,\n result,\n })\n\n uploadedFilesRef.current.push(result)\n onUploadComplete?.(result)\n\n return result\n } catch (error) {\n const errorMessage = error instanceof Error ? error.message : 'Upload failed'\n updateUploadState(id, { status: 'error', error: errorMessage })\n onUploadError?.(file, error instanceof Error ? error : new Error(errorMessage))\n throw error\n } finally {\n abortControllersRef.current.delete(id)\n calculateOverallProgress()\n }\n }, [\n apiUrl,\n projectId,\n bucketId,\n folderId,\n accessLevel,\n apiKey,\n accessToken,\n partSize,\n maxConcurrentParts,\n updateUploadState,\n calculateOverallProgress,\n onUploadComplete,\n onUploadError,\n ])\n\n const startUploads = useCallback(async (uploadStates: FileUploadState[]) => {\n uploadedFilesRef.current = []\n const pending = [...uploadStates]\n const inProgress: Promise<void>[] = []\n\n const processNext = async () => {\n while (pending.length > 0 && inProgress.length < maxConcurrentFiles) {\n const next = pending.shift()!\n const promise = uploadSingleFile(next)\n .catch(() => {}) // Errors handled in uploadSingleFile\n .finally(() => {\n const index = inProgress.indexOf(promise as unknown as Promise<void>)\n if (index > -1) inProgress.splice(index, 1)\n processNext()\n })\n inProgress.push(promise as unknown as Promise<void>)\n }\n }\n\n await processNext()\n\n // Wait for all uploads to complete\n while (inProgress.length > 0) {\n await Promise.race(inProgress)\n }\n\n // Call onAllUploadsComplete with successful uploads\n if (uploadedFilesRef.current.length > 0) {\n onAllUploadsComplete?.(uploadedFilesRef.current)\n }\n }, [maxConcurrentFiles, uploadSingleFile, onAllUploadsComplete])\n\n const handleFiles = useCallback((files: FileList | File[]) => {\n const fileArray = Array.from(files)\n\n // Check max files\n if (uploads.length + fileArray.length > maxFiles) {\n const allowed = maxFiles - uploads.length\n if (allowed <= 0) return\n fileArray.splice(allowed)\n }\n\n // Validate and create upload states\n const newUploads: FileUploadState[] = []\n for (const file of fileArray) {\n const error = validateFile(file)\n if (error) {\n onUploadError?.(file, new Error(error))\n continue\n }\n\n newUploads.push({\n id: generateUploadId(),\n file,\n status: 'pending',\n progress: 0,\n bytesUploaded: 0,\n })\n }\n\n if (newUploads.length === 0) return\n\n setUploads(prev => [...prev, ...newUploads])\n onFilesSelected?.(newUploads.map(u => u.file))\n\n if (autoUpload) {\n // Start uploads after state update\n setTimeout(() => startUploads(newUploads), 0)\n }\n }, [uploads.length, maxFiles, validateFile, autoUpload, startUploads, onFilesSelected, onUploadError])\n\n const handleDrop = useCallback((e: React.DragEvent) => {\n e.preventDefault()\n setIsDragging(false)\n if (!disabled) {\n handleFiles(e.dataTransfer.files)\n }\n }, [disabled, handleFiles])\n\n const handleDragOver = useCallback((e: React.DragEvent) => {\n e.preventDefault()\n if (!disabled) setIsDragging(true)\n }, [disabled])\n\n const handleDragLeave = useCallback((e: React.DragEvent) => {\n e.preventDefault()\n setIsDragging(false)\n }, [])\n\n const handleClick = useCallback(() => {\n if (!disabled) {\n fileInputRef.current?.click()\n }\n }, [disabled])\n\n const handleInputChange = useCallback((e: React.ChangeEvent<HTMLInputElement>) => {\n if (e.target.files) {\n handleFiles(e.target.files)\n e.target.value = '' // Reset for same file selection\n }\n }, [handleFiles])\n\n const handleRemoveFile = useCallback((id: string) => {\n const controller = abortControllersRef.current.get(id)\n if (controller) {\n controller.abort()\n abortControllersRef.current.delete(id)\n }\n setUploads(prev => prev.filter(u => u.id !== id))\n }, [])\n\n const handleRetry = useCallback((uploadState: FileUploadState) => {\n updateUploadState(uploadState.id, { status: 'pending', progress: 0, error: undefined, bytesUploaded: 0 })\n startUploads([uploadState])\n }, [updateUploadState, startUploads])\n\n const handleStartUpload = useCallback(() => {\n const pendingUploads = uploads.filter(u => u.status === 'pending')\n if (pendingUploads.length > 0) {\n startUploads(pendingUploads)\n }\n }, [uploads, startUploads])\n\n const isUploading = uploads.some(u => u.status === 'uploading')\n const hasPendingFiles = uploads.some(u => u.status === 'pending')\n\n return (\n <div className={`w-full ${className}`}>\n {label && (\n <label className=\"block text-sm font-medium text-gray-900 dark:text-neutral-100 mb-2\">\n {label}\n </label>\n )}\n\n {/* Drop Zone */}\n <div\n onDrop={handleDrop}\n onDragOver={handleDragOver}\n onDragLeave={handleDragLeave}\n onClick={handleClick}\n className={`\n relative border-2 border-dashed rounded-lg p-8 text-center cursor-pointer transition-all\n ${isDragging\n ? 'border-blue-500 bg-blue-50 dark:border-neutral-400 dark:bg-neutral-700/50'\n : 'border-gray-300 dark:border-neutral-600 hover:border-gray-400 dark:hover:border-neutral-500'\n }\n ${disabled ? 'opacity-50 cursor-not-allowed' : ''}\n `}\n >\n <input\n ref={fileInputRef}\n type=\"file\"\n accept={accept}\n multiple={maxFiles > 1}\n onChange={handleInputChange}\n disabled={disabled}\n className=\"hidden\"\n />\n\n <div className=\"flex flex-col items-center gap-2\">\n <div className=\"w-12 h-12 rounded-full bg-gray-100 dark:bg-neutral-800 flex items-center justify-center\">\n <svg className=\"w-6 h-6 text-gray-400 dark:text-neutral-400\" fill=\"none\" stroke=\"currentColor\" viewBox=\"0 0 24 24\">\n <path strokeLinecap=\"round\" strokeLinejoin=\"round\" strokeWidth={2} d=\"M7 16a4 4 0 01-.88-7.903A5 5 0 1115.9 6L16 6a5 5 0 011 9.9M15 13l-3-3m0 0l-3 3m3-3v12\" />\n </svg>\n </div>\n <div>\n <p className=\"text-sm font-medium text-gray-900 dark:text-neutral-100\">\n <span className=\"text-blue-600 dark:text-neutral-200 dark:font-medium\">Click to upload</span> or drag and drop\n </p>\n <p className=\"text-xs text-gray-500 dark:text-neutral-400 mt-1\">\n {accept ? `Accepted: ${accept}` : 'Any file type'}\n {maxFileSize && ` · Max: ${formatFileSize(maxFileSize)}`}\n </p>\n </div>\n </div>\n </div>\n\n {helperText && (\n <p className=\"mt-2 text-sm text-gray-500 dark:text-neutral-400\">{helperText}</p>\n )}\n\n {/* Overall Progress */}\n {showProgress && overallProgress && isUploading && (\n <div className=\"mt-4 p-3 bg-gray-50 dark:bg-neutral-800 rounded-lg\">\n <div className=\"flex items-center justify-between text-sm mb-2\">\n <span className=\"text-gray-700 dark:text-neutral-300\">\n Uploading {overallProgress.completedFiles + 1} of {overallProgress.totalFiles}\n </span>\n <span className=\"text-gray-500 dark:text-neutral-400\">\n {overallProgress.percentage}%\n </span>\n </div>\n <div className=\"w-full h-2 bg-gray-200 dark:bg-neutral-700 rounded-full overflow-hidden\">\n <div\n className=\"h-full bg-blue-600 dark:bg-neutral-300 transition-all duration-300\"\n style={{ width: `${overallProgress.percentage}%` }}\n />\n </div>\n <div className=\"flex items-center justify-between text-xs text-gray-500 dark:text-neutral-400 mt-1\">\n <span>{formatFileSize(overallProgress.bytesUploaded)} / {formatFileSize(overallProgress.totalBytes)}</span>\n {overallProgress.speed > 0 && (\n <span>{formatSpeed(overallProgress.speed)}</span>\n )}\n </div>\n </div>\n )}\n\n {/* File List */}\n {showFileList && uploads.length > 0 && (\n <div className=\"mt-4 space-y-2\">\n {uploads.map((upload) => (\n <div\n key={upload.id}\n className=\"flex items-center gap-3 p-3 bg-gray-50 dark:bg-neutral-800 rounded-lg border border-gray-200 dark:border-neutral-700\"\n >\n {/* File Icon */}\n <div className=\"w-10 h-10 rounded bg-gray-200 dark:bg-neutral-700 flex items-center justify-center flex-shrink-0\">\n {upload.status === 'uploading' ? (\n <Spinner size=\"sm\" />\n ) : upload.status === 'completed' ? (\n <svg className=\"w-5 h-5 text-green-500\" fill=\"none\" stroke=\"currentColor\" viewBox=\"0 0 24 24\">\n <path strokeLinecap=\"round\" strokeLinejoin=\"round\" strokeWidth={2} d=\"M5 13l4 4L19 7\" />\n </svg>\n ) : upload.status === 'error' ? (\n <svg className=\"w-5 h-5 text-red-500\" fill=\"none\" stroke=\"currentColor\" viewBox=\"0 0 24 24\">\n <path strokeLinecap=\"round\" strokeLinejoin=\"round\" strokeWidth={2} d=\"M6 18L18 6M6 6l12 12\" />\n </svg>\n ) : (\n <svg className=\"w-5 h-5 text-gray-400 dark:text-neutral-400\" fill=\"none\" stroke=\"currentColor\" viewBox=\"0 0 24 24\">\n <path strokeLinecap=\"round\" strokeLinejoin=\"round\" strokeWidth={2} d=\"M9 12h6m-6 4h6m2 5H7a2 2 0 01-2-2V5a2 2 0 012-2h5.586a1 1 0 01.707.293l5.414 5.414a1 1 0 01.293.707V19a2 2 0 01-2 2z\" />\n </svg>\n )}\n </div>\n\n {/* File Info */}\n <div className=\"flex-1 min-w-0\">\n <p className=\"text-sm font-medium text-gray-900 dark:text-neutral-100 truncate\">\n {upload.file.name}\n </p>\n <div className=\"flex items-center gap-2 text-xs text-gray-500 dark:text-neutral-400\">\n <span>{formatFileSize(upload.file.size)}</span>\n {upload.status === 'uploading' && (\n <span>· {upload.progress}%</span>\n )}\n {upload.status === 'error' && (\n <span className=\"text-red-500\">{upload.error}</span>\n )}\n {upload.file.size >= multipartThreshold && upload.status === 'pending' && (\n <span className=\"text-blue-500 dark:text-neutral-300\">Multipart</span>\n )}\n </div>\n\n {/* Progress Bar */}\n {upload.status === 'uploading' && (\n <div className=\"w-full h-1 bg-gray-200 dark:bg-neutral-700 rounded-full mt-2 overflow-hidden\">\n <div\n className=\"h-full bg-blue-600 dark:bg-neutral-300 transition-all duration-300\"\n style={{ width: `${upload.progress}%` }}\n />\n </div>\n )}\n </div>\n\n {/* Actions */}\n <div className=\"flex items-center gap-1 flex-shrink-0\">\n {upload.status === 'error' && (\n <button\n onClick={() => handleRetry(upload)}\n className=\"p-1 text-gray-400 dark:text-neutral-400 hover:text-blue-500 dark:hover:text-neutral-200 transition-colors\"\n title=\"Retry\"\n >\n <svg className=\"w-4 h-4\" fill=\"none\" stroke=\"currentColor\" viewBox=\"0 0 24 24\">\n <path strokeLinecap=\"round\" strokeLinejoin=\"round\" strokeWidth={2} d=\"M4 4v5h.582m15.356 2A8.001 8.001 0 004.582 9m0 0H9m11 11v-5h-.581m0 0a8.003 8.003 0 01-15.357-2m15.357 2H15\" />\n </svg>\n </button>\n )}\n <button\n onClick={() => handleRemoveFile(upload.id)}\n className=\"p-1 text-gray-400 dark:text-neutral-400 hover:text-red-500 transition-colors\"\n title=\"Remove\"\n >\n <svg className=\"w-4 h-4\" fill=\"none\" stroke=\"currentColor\" viewBox=\"0 0 24 24\">\n <path strokeLinecap=\"round\" strokeLinejoin=\"round\" strokeWidth={2} d=\"M6 18L18 6M6 6l12 12\" />\n </svg>\n </button>\n </div>\n </div>\n ))}\n </div>\n )}\n\n {/* Manual Upload Button */}\n {!autoUpload && hasPendingFiles && (\n <div className=\"mt-4\">\n <Button\n onClick={handleStartUpload}\n disabled={isUploading || disabled}\n variant=\"primary\"\n className=\"w-full\"\n >\n {isUploading ? (\n <>\n <Spinner size=\"sm\" color=\"white\" className=\"mr-2\" />\n Uploading...\n </>\n ) : (\n `Upload ${uploads.filter(u => u.status === 'pending').length} file(s)`\n )}\n </Button>\n </div>\n )}\n </div>\n )\n}\n","/**\n * Client Components\n * These components run on the client side\n */\n\nexport { Tabs } from './Tabs'\nexport type { TabsProps, Tab } from './Tabs'\n\nexport { Modal } from './Modal'\nexport type { ModalProps } from './Modal'\n\nexport { PaymentMethodManager } from './PaymentMethodManager'\nexport type { PaymentMethodManagerProps } from './PaymentMethodManager'\n\nexport { BillingContent } from './BillingContent'\nexport { AddPaymentMethodForm } from './AddPaymentMethodForm'\nexport type { AddPaymentMethodFormProps } from './AddPaymentMethodForm'\nexport { Button } from './LiteButton'\nexport type { ButtonProps } from './LiteButton'\n\n// Auth Components\nexport { LoginForm } from './LoginForm'\nexport type { LoginFormProps, LoginSuccessData } from './LoginForm'\n\nexport { RegisterForm } from './RegisterForm'\nexport type { RegisterFormProps, RegisterSuccessData } from './RegisterForm'\n\nexport { ForgotPasswordForm } from './ForgotPasswordForm'\nexport type { ForgotPasswordFormProps } from './ForgotPasswordForm'\n\nexport { ResetPasswordForm } from './ResetPasswordForm'\nexport type { ResetPasswordFormProps } from './ResetPasswordForm'\n\n// File Upload Component\nexport { FileUploader } from './FileUploader'\nexport type {\n FileUploaderProps,\n UploadProgress,\n UploadedFile,\n FileUploadState,\n} from './FileUploader'\n\nexport const OMNIKIT_CLIENT_VERSION = '0.9.11'\n"]}
|
|
1
|
+
{"version":3,"sources":["../../../src/components/client/Tabs/index.tsx","../../../src/components/client/Modal/index.tsx","../../../src/components/client/PaymentMethodManager/index.tsx","../../../src/components/client/LoginForm/index.tsx","../../../src/components/client/RegisterForm/index.tsx","../../../src/components/client/ForgotPasswordForm/index.tsx","../../../src/components/client/ResetPasswordForm/index.tsx","../../../src/components/client/FileUploader/upload-utils.ts","../../../src/components/client/FileUploader/index.tsx","../../../src/components/client/index.ts"],"names":["jsxs","jsx","useState","Button","Fragment","TextInput","Spinner","result","DEFAULT_MULTIPART_THRESHOLD","useEffect","uploadSingleFile"],"mappings":"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","file":"index.js","sourcesContent":["'use client'\n\nimport { useState } from 'react'\n\nexport interface Tab {\n id: string\n label: string\n content: React.ReactNode\n}\n\nexport interface TabsProps {\n tabs: Tab[]\n defaultTab?: string\n className?: string\n}\n\nexport function Tabs({ tabs, defaultTab, className = '' }: TabsProps) {\n const [activeTab, setActiveTab] = useState(defaultTab || tabs[0]?.id)\n\n return (\n <div className={className}>\n <div className=\"border-b border-gray-200 dark:border-gray-700\">\n <nav className=\"-mb-px flex space-x-8\">\n {tabs.map((tab) => (\n <button\n key={tab.id}\n onClick={() => setActiveTab(tab.id)}\n className={`\n whitespace-nowrap border-b-2 px-1 pb-4 text-sm font-medium transition-colors\n ${\n activeTab === tab.id\n ? 'border-blue-500 text-blue-600 dark:border-neutral-300 dark:text-white'\n : 'border-transparent text-gray-500 hover:border-gray-300 hover:text-gray-700 dark:text-neutral-400 dark:hover:text-neutral-300'\n }\n `}\n >\n {tab.label}\n </button>\n ))}\n </nav>\n </div>\n <div className=\"mt-6\">\n {tabs.find((tab) => tab.id === activeTab)?.content}\n </div>\n </div>\n )\n}\n","'use client'\n\nimport { useEffect } from 'react'\n\nexport interface ModalProps {\n isOpen: boolean\n onClose: () => void\n title: string\n children: React.ReactNode\n className?: string\n}\n\nexport function Modal({ isOpen, onClose, title, children, className = '' }: ModalProps) {\n useEffect(() => {\n const handleEscape = (e: KeyboardEvent) => {\n if (e.key === 'Escape') onClose()\n }\n\n if (isOpen) {\n document.addEventListener('keydown', handleEscape)\n document.body.style.overflow = 'hidden'\n }\n\n return () => {\n document.removeEventListener('keydown', handleEscape)\n document.body.style.overflow = 'unset'\n }\n }, [isOpen, onClose])\n\n if (!isOpen) return null\n\n return (\n <div className=\"fixed inset-0 z-50 flex items-center justify-center p-4\">\n {/* Backdrop */}\n <div\n className=\"absolute inset-0 bg-black/50 backdrop-blur-sm\"\n onClick={onClose}\n />\n\n {/* Modal */}\n <div\n className={`relative bg-white dark:bg-neutral-900 rounded-lg shadow-xl max-w-md w-full max-h-[90vh] overflow-y-auto ${className}`}\n >\n {/* Header */}\n <div className=\"flex items-center justify-between p-6 border-b border-gray-200 dark:border-neutral-700\">\n <h2 className=\"text-xl font-semibold\">{title}</h2>\n <button\n onClick={onClose}\n className=\"text-gray-400 hover:text-gray-600 dark:hover:text-gray-300 transition-colors\"\n >\n <svg className=\"w-6 h-6\" fill=\"none\" stroke=\"currentColor\" viewBox=\"0 0 24 24\">\n <path strokeLinecap=\"round\" strokeLinejoin=\"round\" strokeWidth={2} d=\"M6 18L18 6M6 6l12 12\" />\n </svg>\n </button>\n </div>\n\n {/* Content */}\n <div className=\"p-6\">\n {children}\n </div>\n </div>\n </div>\n )\n}\n","'use client'\n\nimport { useState } from 'react'\nimport { Modal } from '../Modal'\nimport { Button } from '../LiteButton'\n\nexport interface PaymentMethodManagerProps {\n currentMethod: {\n type: string\n last4: string\n expiry: string\n }\n}\n\nexport function PaymentMethodManager({ currentMethod }: PaymentMethodManagerProps) {\n const [isModalOpen, setIsModalOpen] = useState(false)\n\n return (\n <>\n <div>\n <h3 className=\"text-lg font-semibold mb-4\">Current Payment Method</h3>\n <div className=\"flex items-center justify-between p-4 border border-gray-200 dark:border-gray-700 rounded-lg mb-6\">\n <div className=\"flex items-center gap-4\">\n <div className=\"h-12 w-16 rounded bg-gradient-to-br from-blue-600 to-blue-800 flex items-center justify-center text-white font-bold text-sm\">\n {currentMethod.type}\n </div>\n <div>\n <p className=\"font-medium\">•••• •••• •••• {currentMethod.last4}</p>\n <p className=\"text-sm text-gray-600 dark:text-gray-400\">\n Expires {currentMethod.expiry}\n </p>\n </div>\n </div>\n <Button\n onClick={() => setIsModalOpen(true)}\n variant=\"secondary\"\n size=\"sm\"\n >\n Update\n </Button>\n </div>\n\n <Button\n onClick={() => setIsModalOpen(true)}\n className=\"w-full\"\n >\n Add New Payment Method\n </Button>\n </div>\n\n <Modal\n isOpen={isModalOpen}\n onClose={() => setIsModalOpen(false)}\n title=\"Add Payment Method\"\n >\n <div className=\"space-y-4\">\n <div>\n <label className=\"block text-sm font-medium text-gray-700 dark:text-gray-300 mb-2\">\n Cardholder Name\n </label>\n <input\n type=\"text\"\n placeholder=\"John Doe\"\n className=\"w-full rounded-lg border border-gray-300 dark:border-gray-600 bg-white dark:bg-gray-800 px-4 py-2 text-sm focus:border-blue-500 dark:focus:border-neutral-400 focus:outline-none focus:ring-2 focus:ring-blue-500/20 dark:focus:ring-neutral-400/20\"\n />\n </div>\n <div>\n <label className=\"block text-sm font-medium text-gray-700 dark:text-gray-300 mb-2\">\n Card Number\n </label>\n <input\n type=\"text\"\n placeholder=\"1234 5678 9012 3456\"\n className=\"w-full rounded-lg border border-gray-300 dark:border-gray-600 bg-white dark:bg-gray-800 px-4 py-2 text-sm focus:border-blue-500 dark:focus:border-neutral-400 focus:outline-none focus:ring-2 focus:ring-blue-500/20 dark:focus:ring-neutral-400/20\"\n />\n </div>\n <div className=\"grid grid-cols-2 gap-4\">\n <div>\n <label className=\"block text-sm font-medium text-gray-700 dark:text-gray-300 mb-2\">\n Expiry Date\n </label>\n <input\n type=\"text\"\n placeholder=\"MM/YY\"\n className=\"w-full rounded-lg border border-gray-300 dark:border-gray-600 bg-white dark:bg-gray-800 px-4 py-2 text-sm focus:border-blue-500 dark:focus:border-neutral-400 focus:outline-none focus:ring-2 focus:ring-blue-500/20 dark:focus:ring-neutral-400/20\"\n />\n </div>\n <div>\n <label className=\"block text-sm font-medium text-gray-700 dark:text-gray-300 mb-2\">\n CVC\n </label>\n <input\n type=\"text\"\n placeholder=\"123\"\n className=\"w-full rounded-lg border border-gray-300 dark:border-gray-600 bg-white dark:bg-gray-800 px-4 py-2 text-sm focus:border-blue-500 dark:focus:border-neutral-400 focus:outline-none focus:ring-2 focus:ring-blue-500/20 dark:focus:ring-neutral-400/20\"\n />\n </div>\n </div>\n <div className=\"flex items-center gap-2\">\n <input\n type=\"checkbox\"\n id=\"setDefaultModal\"\n className=\"rounded border-gray-300 dark:border-gray-600 text-blue-600 dark:text-gray-300 focus:ring-blue-500 dark:focus:ring-gray-400\"\n />\n <label htmlFor=\"setDefaultModal\" className=\"text-sm text-gray-700 dark:text-gray-300\">\n Set as default payment method\n </label>\n </div>\n <div className=\"flex gap-3 pt-4\">\n <Button\n onClick={() => setIsModalOpen(false)}\n variant=\"secondary\"\n className=\"flex-1\"\n >\n Cancel\n </Button>\n <Button\n onClick={() => setIsModalOpen(false)}\n className=\"flex-1\"\n >\n Add Card\n </Button>\n </div>\n </div>\n </Modal>\n </>\n )\n}\n","'use client'\n\nimport { useState, FormEvent } from 'react'\nimport { TextInput, Button, Spinner } from '@marcoschwartz/lite-ui'\nimport type { LoginFormProps, LoginSuccessData, LoginFormState } from './types'\n\nexport type { LoginFormProps, LoginSuccessData }\n\nexport function LoginForm({\n apiUrl,\n projectId,\n onSuccess,\n onError,\n showRememberMe = false,\n allowUsername = false,\n className = '',\n registerLink,\n forgotPasswordLink,\n}: LoginFormProps) {\n const [state, setState] = useState<LoginFormState>({\n email: '',\n password: '',\n rememberMe: false,\n isLoading: false,\n error: null,\n })\n\n const handleSubmit = async (e: FormEvent) => {\n e.preventDefault()\n setState(prev => ({ ...prev, isLoading: true, error: null }))\n\n try {\n const response = await fetch(`${apiUrl}/auth/login`, {\n method: 'POST',\n headers: { 'Content-Type': 'application/json' },\n body: JSON.stringify({\n [allowUsername && !state.email.includes('@') ? 'username' : 'email']: state.email,\n password: state.password,\n project_id: projectId,\n }),\n })\n\n const data = await response.json()\n\n if (!response.ok) {\n throw new Error(data.error || 'Login failed')\n }\n\n onSuccess?.(data as LoginSuccessData)\n } catch (err) {\n const error = err instanceof Error ? err : new Error('Login failed')\n setState(prev => ({ ...prev, error: error.message }))\n onError?.(error)\n } finally {\n setState(prev => ({ ...prev, isLoading: false }))\n }\n }\n\n return (\n <form onSubmit={handleSubmit} className={`space-y-4 ${className}`}>\n {state.error && (\n <div className=\"p-3 text-sm text-red-600 bg-red-50 dark:bg-red-900/20 dark:text-red-400 rounded-md\">\n {state.error}\n </div>\n )}\n\n <TextInput\n label={allowUsername ? 'Email or Username' : 'Email'}\n type={allowUsername ? 'text' : 'email'}\n value={state.email}\n onChange={(e) => setState(prev => ({ ...prev, email: e.target.value }))}\n placeholder={allowUsername ? 'you@example.com or username' : 'you@example.com'}\n required\n disabled={state.isLoading}\n fullWidth\n autoComplete=\"username\"\n />\n\n <TextInput\n label=\"Password\"\n type=\"password\"\n value={state.password}\n onChange={(e) => setState(prev => ({ ...prev, password: e.target.value }))}\n placeholder=\"Enter your password\"\n required\n disabled={state.isLoading}\n fullWidth\n autoComplete=\"current-password\"\n />\n\n {showRememberMe && (\n <label className=\"flex items-center gap-2 text-sm\">\n <input\n type=\"checkbox\"\n checked={state.rememberMe}\n onChange={(e) => setState(prev => ({ ...prev, rememberMe: e.target.checked }))}\n className=\"rounded border-gray-300 text-blue-600 focus:ring-blue-500\"\n disabled={state.isLoading}\n />\n <span className=\"text-gray-700 dark:text-gray-300\">Remember me</span>\n </label>\n )}\n\n <Button\n type=\"submit\"\n variant=\"primary\"\n disabled={state.isLoading}\n className=\"w-full\"\n >\n {state.isLoading ? (\n <>\n <Spinner size=\"sm\" color=\"white\" className=\"mr-2\" />\n Signing in...\n </>\n ) : (\n 'Sign in'\n )}\n </Button>\n\n {(forgotPasswordLink || registerLink) && (\n <div className=\"flex items-center justify-between text-sm\">\n {forgotPasswordLink && (\n <a\n href={forgotPasswordLink}\n className=\"text-blue-600 hover:text-blue-700 dark:text-neutral-300 dark:hover:text-white\"\n >\n Forgot password?\n </a>\n )}\n {registerLink && (\n <a\n href={registerLink}\n className=\"text-blue-600 hover:text-blue-700 dark:text-neutral-300 dark:hover:text-white\"\n >\n Create an account\n </a>\n )}\n </div>\n )}\n </form>\n )\n}\n","'use client'\n\nimport { useState, FormEvent } from 'react'\nimport { TextInput, Button, Spinner } from '@marcoschwartz/lite-ui'\nimport type { RegisterFormProps, RegisterSuccessData, RegisterFormState } from './types'\n\nexport type { RegisterFormProps, RegisterSuccessData }\n\nexport function RegisterForm({\n apiUrl,\n projectId,\n onSuccess,\n onError,\n requireUsername = false,\n showDisplayName = false,\n showOrganizationName = false,\n showTerms = false,\n termsLink,\n className = '',\n loginLink,\n}: RegisterFormProps) {\n const [state, setState] = useState<RegisterFormState>({\n email: '',\n username: '',\n password: '',\n confirmPassword: '',\n displayName: '',\n organizationName: '',\n acceptTerms: false,\n isLoading: false,\n error: null,\n fieldErrors: {},\n })\n\n const validateForm = (): boolean => {\n const errors: RegisterFormState['fieldErrors'] = {}\n\n // Email validation\n if (!state.email) {\n errors.email = 'Email is required'\n } else if (!/^[^\\s@]+@[^\\s@]+\\.[^\\s@]+$/.test(state.email)) {\n errors.email = 'Please enter a valid email address'\n }\n\n // Username validation (if required)\n if (requireUsername && !state.username) {\n errors.username = 'Username is required'\n } else if (state.username && state.username.length < 3) {\n errors.username = 'Username must be at least 3 characters'\n }\n\n // Password validation\n if (!state.password) {\n errors.password = 'Password is required'\n } else if (state.password.length < 6) {\n errors.password = 'Password must be at least 6 characters'\n }\n\n // Confirm password\n if (state.password !== state.confirmPassword) {\n errors.confirmPassword = 'Passwords do not match'\n }\n\n setState(prev => ({ ...prev, fieldErrors: errors }))\n return Object.keys(errors).length === 0\n }\n\n const handleSubmit = async (e: FormEvent) => {\n e.preventDefault()\n\n if (!validateForm()) return\n\n if (showTerms && !state.acceptTerms) {\n setState(prev => ({ ...prev, error: 'You must accept the terms and conditions' }))\n return\n }\n\n setState(prev => ({ ...prev, isLoading: true, error: null }))\n\n try {\n const payload: Record<string, any> = {\n email: state.email,\n password: state.password,\n project_id: projectId,\n }\n\n if (state.username) {\n payload.username = state.username\n }\n if (state.displayName) {\n payload.display_name = state.displayName\n }\n if (state.organizationName) {\n payload.organization_name = state.organizationName\n }\n\n const response = await fetch(`${apiUrl}/auth/register`, {\n method: 'POST',\n headers: { 'Content-Type': 'application/json' },\n body: JSON.stringify(payload),\n })\n\n const data = await response.json()\n\n if (!response.ok) {\n throw new Error(data.error || 'Registration failed')\n }\n\n onSuccess?.(data as RegisterSuccessData)\n } catch (err) {\n const error = err instanceof Error ? err : new Error('Registration failed')\n setState(prev => ({ ...prev, error: error.message }))\n onError?.(error)\n } finally {\n setState(prev => ({ ...prev, isLoading: false }))\n }\n }\n\n return (\n <form onSubmit={handleSubmit} className={`space-y-4 ${className}`}>\n {state.error && (\n <div className=\"p-3 text-sm text-red-600 bg-red-50 dark:bg-red-900/20 dark:text-red-400 rounded-md\">\n {state.error}\n </div>\n )}\n\n <TextInput\n label=\"Email\"\n type=\"email\"\n value={state.email}\n onChange={(e) => setState(prev => ({ ...prev, email: e.target.value, fieldErrors: { ...prev.fieldErrors, email: undefined } }))}\n placeholder=\"you@example.com\"\n required\n disabled={state.isLoading}\n fullWidth\n autoComplete=\"email\"\n error={state.fieldErrors.email}\n />\n\n {requireUsername && (\n <TextInput\n label=\"Username\"\n type=\"text\"\n value={state.username}\n onChange={(e) => setState(prev => ({ ...prev, username: e.target.value, fieldErrors: { ...prev.fieldErrors, username: undefined } }))}\n placeholder=\"Choose a username\"\n required\n disabled={state.isLoading}\n fullWidth\n autoComplete=\"username\"\n error={state.fieldErrors.username}\n />\n )}\n\n {showDisplayName && (\n <TextInput\n label=\"Display Name\"\n type=\"text\"\n value={state.displayName}\n onChange={(e) => setState(prev => ({ ...prev, displayName: e.target.value }))}\n placeholder=\"Your display name\"\n disabled={state.isLoading}\n fullWidth\n />\n )}\n\n {showOrganizationName && (\n <TextInput\n label=\"Organization Name\"\n type=\"text\"\n value={state.organizationName}\n onChange={(e) => setState(prev => ({ ...prev, organizationName: e.target.value }))}\n placeholder=\"Your organization (optional)\"\n disabled={state.isLoading}\n fullWidth\n />\n )}\n\n <TextInput\n label=\"Password\"\n type=\"password\"\n value={state.password}\n onChange={(e) => setState(prev => ({ ...prev, password: e.target.value, fieldErrors: { ...prev.fieldErrors, password: undefined } }))}\n placeholder=\"At least 6 characters\"\n required\n disabled={state.isLoading}\n fullWidth\n autoComplete=\"new-password\"\n error={state.fieldErrors.password}\n />\n\n <TextInput\n label=\"Confirm Password\"\n type=\"password\"\n value={state.confirmPassword}\n onChange={(e) => setState(prev => ({ ...prev, confirmPassword: e.target.value, fieldErrors: { ...prev.fieldErrors, confirmPassword: undefined } }))}\n placeholder=\"Confirm your password\"\n required\n disabled={state.isLoading}\n fullWidth\n autoComplete=\"new-password\"\n error={state.fieldErrors.confirmPassword}\n />\n\n {showTerms && (\n <label className=\"flex items-start gap-2 text-sm\">\n <input\n type=\"checkbox\"\n checked={state.acceptTerms}\n onChange={(e) => setState(prev => ({ ...prev, acceptTerms: e.target.checked }))}\n className=\"mt-1 rounded border-gray-300 text-blue-600 focus:ring-blue-500\"\n disabled={state.isLoading}\n />\n <span className=\"text-gray-700 dark:text-gray-300\">\n I agree to the{' '}\n {termsLink ? (\n <a href={termsLink} className=\"text-blue-600 hover:underline\" target=\"_blank\" rel=\"noopener noreferrer\">\n terms and conditions\n </a>\n ) : (\n 'terms and conditions'\n )}\n </span>\n </label>\n )}\n\n <Button\n type=\"submit\"\n variant=\"primary\"\n disabled={state.isLoading}\n className=\"w-full\"\n >\n {state.isLoading ? (\n <>\n <Spinner size=\"sm\" color=\"white\" className=\"mr-2\" />\n Creating account...\n </>\n ) : (\n 'Create account'\n )}\n </Button>\n\n {loginLink && (\n <p className=\"text-center text-sm text-gray-600 dark:text-gray-400\">\n Already have an account?{' '}\n <a\n href={loginLink}\n className=\"text-blue-600 hover:text-blue-700 dark:text-neutral-300 dark:hover:text-white\"\n >\n Sign in\n </a>\n </p>\n )}\n </form>\n )\n}\n","'use client'\n\nimport { useState, FormEvent } from 'react'\nimport { TextInput, Button, Spinner } from '@marcoschwartz/lite-ui'\nimport type { ForgotPasswordFormProps, ForgotPasswordFormState } from './types'\n\nexport type { ForgotPasswordFormProps }\n\nexport function ForgotPasswordForm({\n apiUrl,\n projectId,\n resetPasswordUrl,\n onSuccess,\n onError,\n className = '',\n loginLink,\n}: ForgotPasswordFormProps) {\n const [state, setState] = useState<ForgotPasswordFormState>({\n email: '',\n isLoading: false,\n isSuccess: false,\n error: null,\n })\n\n const handleSubmit = async (e: FormEvent) => {\n e.preventDefault()\n setState(prev => ({ ...prev, isLoading: true, error: null }))\n\n try {\n const response = await fetch(`${apiUrl}/auth/forgot-password`, {\n method: 'POST',\n headers: { 'Content-Type': 'application/json' },\n body: JSON.stringify({\n email: state.email,\n project_id: projectId,\n frontendUrl: resetPasswordUrl,\n }),\n })\n\n const data = await response.json()\n\n if (!response.ok) {\n throw new Error(data.error || 'Failed to send reset email')\n }\n\n setState(prev => ({ ...prev, isSuccess: true }))\n onSuccess?.()\n } catch (err) {\n const error = err instanceof Error ? err : new Error('Failed to send reset email')\n setState(prev => ({ ...prev, error: error.message }))\n onError?.(error)\n } finally {\n setState(prev => ({ ...prev, isLoading: false }))\n }\n }\n\n if (state.isSuccess) {\n return (\n <div className={`space-y-4 ${className}`}>\n <div className=\"p-4 text-center rounded-md bg-green-50 dark:bg-green-900/20\">\n <svg\n className=\"w-12 h-12 mx-auto mb-3 text-green-500\"\n fill=\"none\"\n stroke=\"currentColor\"\n viewBox=\"0 0 24 24\"\n >\n <path\n strokeLinecap=\"round\"\n strokeLinejoin=\"round\"\n strokeWidth={2}\n d=\"M3 8l7.89 5.26a2 2 0 002.22 0L21 8M5 19h14a2 2 0 002-2V7a2 2 0 00-2-2H5a2 2 0 00-2 2v10a2 2 0 002 2z\"\n />\n </svg>\n <h3 className=\"text-lg font-medium text-green-800 dark:text-green-200\">\n Check your email\n </h3>\n <p className=\"mt-2 text-sm text-green-700 dark:text-green-300\">\n If an account with that email exists, we've sent you a password reset link.\n </p>\n </div>\n\n {loginLink && (\n <p className=\"text-center text-sm text-gray-600 dark:text-gray-400\">\n <a\n href={loginLink}\n className=\"text-blue-600 hover:text-blue-700 dark:text-neutral-300 dark:hover:text-white\"\n >\n Back to sign in\n </a>\n </p>\n )}\n </div>\n )\n }\n\n return (\n <form onSubmit={handleSubmit} className={`space-y-4 ${className}`}>\n <div className=\"text-center mb-6\">\n <h2 className=\"text-xl font-semibold text-gray-900 dark:text-white\">\n Forgot your password?\n </h2>\n <p className=\"mt-2 text-sm text-gray-600 dark:text-gray-400\">\n Enter your email and we'll send you a reset link.\n </p>\n </div>\n\n {state.error && (\n <div className=\"p-3 text-sm text-red-600 bg-red-50 dark:bg-red-900/20 dark:text-red-400 rounded-md\">\n {state.error}\n </div>\n )}\n\n <TextInput\n label=\"Email\"\n type=\"email\"\n value={state.email}\n onChange={(e) => setState(prev => ({ ...prev, email: e.target.value }))}\n placeholder=\"you@example.com\"\n required\n disabled={state.isLoading}\n fullWidth\n autoComplete=\"email\"\n />\n\n <Button\n type=\"submit\"\n variant=\"primary\"\n disabled={state.isLoading}\n className=\"w-full\"\n >\n {state.isLoading ? (\n <>\n <Spinner size=\"sm\" color=\"white\" className=\"mr-2\" />\n Sending...\n </>\n ) : (\n 'Send reset link'\n )}\n </Button>\n\n {loginLink && (\n <p className=\"text-center text-sm text-gray-600 dark:text-gray-400\">\n Remember your password?{' '}\n <a\n href={loginLink}\n className=\"text-blue-600 hover:text-blue-700 dark:text-blue-400 dark:hover:text-blue-300\"\n >\n Sign in\n </a>\n </p>\n )}\n </form>\n )\n}\n","'use client'\n\nimport { useState, FormEvent } from 'react'\nimport { TextInput, Button, Spinner } from '@marcoschwartz/lite-ui'\nimport type { ResetPasswordFormProps, ResetPasswordFormState } from './types'\n\nexport type { ResetPasswordFormProps }\n\nexport function ResetPasswordForm({\n apiUrl,\n token,\n onSuccess,\n onError,\n className = '',\n loginLink,\n}: ResetPasswordFormProps) {\n const [state, setState] = useState<ResetPasswordFormState>({\n password: '',\n confirmPassword: '',\n isLoading: false,\n isSuccess: false,\n error: null,\n fieldErrors: {},\n })\n\n const validateForm = (): boolean => {\n const errors: ResetPasswordFormState['fieldErrors'] = {}\n\n if (!state.password) {\n errors.password = 'Password is required'\n } else if (state.password.length < 6) {\n errors.password = 'Password must be at least 6 characters'\n }\n\n if (state.password !== state.confirmPassword) {\n errors.confirmPassword = 'Passwords do not match'\n }\n\n setState(prev => ({ ...prev, fieldErrors: errors }))\n return Object.keys(errors).length === 0\n }\n\n const handleSubmit = async (e: FormEvent) => {\n e.preventDefault()\n\n if (!validateForm()) return\n\n setState(prev => ({ ...prev, isLoading: true, error: null }))\n\n try {\n const response = await fetch(`${apiUrl}/auth/reset-password`, {\n method: 'POST',\n headers: { 'Content-Type': 'application/json' },\n body: JSON.stringify({\n token,\n password: state.password,\n sendConfirmationEmail: true,\n }),\n })\n\n const data = await response.json()\n\n if (!response.ok) {\n throw new Error(data.error || 'Failed to reset password')\n }\n\n setState(prev => ({ ...prev, isSuccess: true }))\n onSuccess?.()\n } catch (err) {\n const error = err instanceof Error ? err : new Error('Failed to reset password')\n setState(prev => ({ ...prev, error: error.message }))\n onError?.(error)\n } finally {\n setState(prev => ({ ...prev, isLoading: false }))\n }\n }\n\n if (state.isSuccess) {\n return (\n <div className={`space-y-4 ${className}`}>\n <div className=\"p-4 text-center rounded-md bg-green-50 dark:bg-green-900/20\">\n <svg\n className=\"w-12 h-12 mx-auto mb-3 text-green-500\"\n fill=\"none\"\n stroke=\"currentColor\"\n viewBox=\"0 0 24 24\"\n >\n <path\n strokeLinecap=\"round\"\n strokeLinejoin=\"round\"\n strokeWidth={2}\n d=\"M9 12l2 2 4-4m6 2a9 9 0 11-18 0 9 9 0 0118 0z\"\n />\n </svg>\n <h3 className=\"text-lg font-medium text-green-800 dark:text-green-200\">\n Password reset successful\n </h3>\n <p className=\"mt-2 text-sm text-green-700 dark:text-green-300\">\n Your password has been updated. You can now sign in with your new password.\n </p>\n </div>\n\n {loginLink && (\n <div className=\"text-center\">\n <a\n href={loginLink}\n className=\"inline-flex items-center justify-center px-4 py-2 text-sm font-medium text-white bg-blue-600 rounded-md hover:bg-blue-700\"\n >\n Go to sign in\n </a>\n </div>\n )}\n </div>\n )\n }\n\n if (!token) {\n return (\n <div className={`space-y-4 ${className}`}>\n <div className=\"p-4 text-center rounded-md bg-red-50 dark:bg-red-900/20\">\n <svg\n className=\"w-12 h-12 mx-auto mb-3 text-red-500\"\n fill=\"none\"\n stroke=\"currentColor\"\n viewBox=\"0 0 24 24\"\n >\n <path\n strokeLinecap=\"round\"\n strokeLinejoin=\"round\"\n strokeWidth={2}\n d=\"M12 9v2m0 4h.01m-6.938 4h13.856c1.54 0 2.502-1.667 1.732-3L13.732 4c-.77-1.333-2.694-1.333-3.464 0L3.34 16c-.77 1.333.192 3 1.732 3z\"\n />\n </svg>\n <h3 className=\"text-lg font-medium text-red-800 dark:text-red-200\">\n Invalid reset link\n </h3>\n <p className=\"mt-2 text-sm text-red-700 dark:text-red-300\">\n This password reset link is invalid or has expired.\n </p>\n </div>\n\n {loginLink && (\n <p className=\"text-center text-sm text-gray-600 dark:text-gray-400\">\n <a\n href={loginLink}\n className=\"text-blue-600 hover:text-blue-700 dark:text-neutral-300 dark:hover:text-white\"\n >\n Back to sign in\n </a>\n </p>\n )}\n </div>\n )\n }\n\n return (\n <form onSubmit={handleSubmit} className={`space-y-4 ${className}`}>\n <div className=\"text-center mb-6\">\n <h2 className=\"text-xl font-semibold text-gray-900 dark:text-white\">\n Reset your password\n </h2>\n <p className=\"mt-2 text-sm text-gray-600 dark:text-gray-400\">\n Enter your new password below.\n </p>\n </div>\n\n {state.error && (\n <div className=\"p-3 text-sm text-red-600 bg-red-50 dark:bg-red-900/20 dark:text-red-400 rounded-md\">\n {state.error}\n </div>\n )}\n\n <TextInput\n label=\"New Password\"\n type=\"password\"\n value={state.password}\n onChange={(e) => setState(prev => ({ ...prev, password: e.target.value, fieldErrors: { ...prev.fieldErrors, password: undefined } }))}\n placeholder=\"At least 6 characters\"\n required\n disabled={state.isLoading}\n fullWidth\n autoComplete=\"new-password\"\n error={state.fieldErrors.password}\n />\n\n <TextInput\n label=\"Confirm Password\"\n type=\"password\"\n value={state.confirmPassword}\n onChange={(e) => setState(prev => ({ ...prev, confirmPassword: e.target.value, fieldErrors: { ...prev.fieldErrors, confirmPassword: undefined } }))}\n placeholder=\"Confirm your new password\"\n required\n disabled={state.isLoading}\n fullWidth\n autoComplete=\"new-password\"\n error={state.fieldErrors.confirmPassword}\n />\n\n <Button\n type=\"submit\"\n variant=\"primary\"\n disabled={state.isLoading}\n className=\"w-full\"\n >\n {state.isLoading ? (\n <>\n <Spinner size=\"sm\" color=\"white\" className=\"mr-2\" />\n Resetting password...\n </>\n ) : (\n 'Reset password'\n )}\n </Button>\n\n {loginLink && (\n <p className=\"text-center text-sm text-gray-600 dark:text-gray-400\">\n Remember your password?{' '}\n <a\n href={loginLink}\n className=\"text-blue-600 hover:text-blue-700 dark:text-blue-400 dark:hover:text-blue-300\"\n >\n Sign in\n </a>\n </p>\n )}\n </form>\n )\n}\n","import type {\n PresignedUrlResponse,\n ConfirmUploadResponse,\n UploadPartResult,\n UploadedFile,\n} from './types'\n\nconst DEFAULT_PART_SIZE = 5 * 1024 * 1024 // 5MB\nconst DEFAULT_MULTIPART_THRESHOLD = 5 * 1024 * 1024 // 5MB\nconst DEFAULT_MAX_CONCURRENT_PARTS = 5\nconst EMA_ALPHA = 0.3\n\nexport interface UploadConfig {\n apiUrl: string\n projectId: number\n bucketId?: number\n folderId?: number\n accessLevel?: 'private' | 'public'\n apiKey?: string\n accessToken?: string\n partSize?: number\n maxConcurrentParts?: number\n onProgress?: (bytesUploaded: number, totalBytes: number, speed: number) => void\n}\n\nfunction getAuthHeaders(config: UploadConfig): HeadersInit {\n const headers: HeadersInit = {\n 'Content-Type': 'application/json',\n }\n if (config.accessToken) {\n headers['Authorization'] = `Bearer ${config.accessToken}`\n } else if (config.apiKey) {\n headers['X-API-Key'] = config.apiKey\n }\n return headers\n}\n\nexport async function generatePresignedUrl(\n file: File,\n config: UploadConfig,\n isMultipart: boolean,\n numParts?: number\n): Promise<PresignedUrlResponse> {\n const response = await fetch(`${config.apiUrl}/storage/generate-presigned-url`, {\n method: 'POST',\n headers: getAuthHeaders(config),\n body: JSON.stringify({\n file_name: file.name,\n file_size: file.size,\n mime_type: file.type || 'application/octet-stream',\n project_id: config.projectId,\n bucket_id: config.bucketId,\n folder_id: config.folderId,\n access_level: config.accessLevel || 'private',\n is_multipart: isMultipart,\n num_parts: numParts,\n }),\n })\n\n if (!response.ok) {\n const errorData = await response.json().catch(() => ({}))\n throw new Error(errorData.error || 'Failed to generate presigned URL')\n }\n\n return response.json()\n}\n\nexport async function confirmUpload(\n fileId: string,\n config: UploadConfig,\n parts?: Array<{ partNumber: number; etag: string }>\n): Promise<ConfirmUploadResponse> {\n const response = await fetch(`${config.apiUrl}/storage/confirm-upload`, {\n method: 'POST',\n headers: getAuthHeaders(config),\n body: JSON.stringify({\n file_id: fileId,\n parts: parts,\n }),\n })\n\n if (!response.ok) {\n const errorData = await response.json().catch(() => ({}))\n throw new Error(errorData.error || 'Failed to confirm upload')\n }\n\n return response.json()\n}\n\nexport async function uploadSingleFile(\n file: File,\n config: UploadConfig\n): Promise<UploadedFile> {\n // Step 1: Get presigned URL\n const presignedResponse = await generatePresignedUrl(file, config, false)\n const { file_id, upload_url } = presignedResponse.data\n\n if (!upload_url) {\n throw new Error('No upload URL received')\n }\n\n // Step 2: Upload to presigned URL\n const uploadResponse = await fetch(upload_url, {\n method: 'PUT',\n body: file,\n headers: {\n 'Content-Type': file.type || 'application/octet-stream',\n },\n })\n\n if (!uploadResponse.ok) {\n throw new Error(`Upload failed: ${uploadResponse.status}`)\n }\n\n // Report progress\n config.onProgress?.(file.size, file.size, 0)\n\n // Step 3: Confirm upload\n const confirmResponse = await confirmUpload(file_id, config)\n\n return {\n id: confirmResponse.data.id,\n name: confirmResponse.data.name,\n size: confirmResponse.data.size_bytes,\n mimeType: confirmResponse.data.mime_type,\n url: confirmResponse.data.storage_url,\n publicUrl: confirmResponse.data.public_url,\n }\n}\n\nexport async function uploadMultipartFile(\n file: File,\n config: UploadConfig,\n abortSignal?: AbortSignal\n): Promise<UploadedFile> {\n const partSize = config.partSize || DEFAULT_PART_SIZE\n const maxConcurrentParts = config.maxConcurrentParts || DEFAULT_MAX_CONCURRENT_PARTS\n const numParts = Math.ceil(file.size / partSize)\n\n // Step 1: Get presigned URLs for all parts\n const presignedResponse = await generatePresignedUrl(file, config, true, numParts)\n const { file_id, parts } = presignedResponse.data\n\n if (!parts || parts.length === 0) {\n throw new Error('No part URLs received')\n }\n\n // Step 2: Upload parts with sliding window\n const uploadedParts: UploadPartResult[] = []\n let bytesUploaded = 0\n const uploadStartTime = Date.now()\n let smoothedSpeed = 0\n\n // Create parts queue\n const partsQueue = parts.map(p => ({ part_number: p.part_number, url: p.url }))\n const inFlight = new Map<number, Promise<UploadPartResult>>()\n\n // Upload a single part\n const uploadPart = async (part: { part_number: number; url: string }): Promise<UploadPartResult> => {\n if (abortSignal?.aborted) {\n throw new Error('Upload cancelled')\n }\n\n const start = (part.part_number - 1) * partSize\n const end = Math.min(start + partSize, file.size)\n const partBlob = file.slice(start, end)\n const partBytes = partBlob.size\n\n const uploadResponse = await fetch(part.url, {\n method: 'PUT',\n body: partBlob,\n headers: {\n 'Content-Type': file.type || 'application/octet-stream',\n },\n signal: abortSignal,\n })\n\n if (!uploadResponse.ok) {\n throw new Error(`Part ${part.part_number} upload failed: ${uploadResponse.status}`)\n }\n\n const etag = uploadResponse.headers.get('ETag')?.replace(/\"/g, '') || ''\n\n return {\n partNumber: part.part_number,\n etag,\n bytes: partBytes,\n }\n }\n\n // Wait for any upload to complete\n const waitForAny = async (): Promise<UploadPartResult> => {\n const entries = Array.from(inFlight.entries())\n const result = await Promise.race(entries.map(([partNum, promise]) =>\n promise.then(result => ({ partNum, result }))\n ))\n inFlight.delete(result.partNum)\n return result.result\n }\n\n // Start initial batch\n while (inFlight.size < maxConcurrentParts && partsQueue.length > 0) {\n const part = partsQueue.shift()!\n inFlight.set(part.part_number, uploadPart(part))\n }\n\n // Process as uploads complete\n while (inFlight.size > 0) {\n const completed = await waitForAny()\n\n uploadedParts.push({\n partNumber: completed.partNumber,\n etag: completed.etag,\n bytes: completed.bytes,\n })\n\n bytesUploaded += completed.bytes\n\n // Calculate smoothed speed\n const elapsed = (Date.now() - uploadStartTime) / 1000\n const instantSpeed = elapsed > 0 ? bytesUploaded / elapsed : 0\n smoothedSpeed = smoothedSpeed === 0\n ? instantSpeed\n : EMA_ALPHA * instantSpeed + (1 - EMA_ALPHA) * smoothedSpeed\n\n // Report progress\n config.onProgress?.(bytesUploaded, file.size, smoothedSpeed)\n\n // Start next upload if there are more parts\n if (partsQueue.length > 0) {\n const nextPart = partsQueue.shift()!\n inFlight.set(nextPart.part_number, uploadPart(nextPart))\n }\n }\n\n // Step 3: Confirm upload with ETags\n const sortedParts = uploadedParts\n .sort((a, b) => a.partNumber - b.partNumber)\n .map(p => ({ partNumber: p.partNumber, etag: p.etag }))\n\n const confirmResponse = await confirmUpload(file_id, config, sortedParts)\n\n return {\n id: confirmResponse.data.id,\n name: confirmResponse.data.name,\n size: confirmResponse.data.size_bytes,\n mimeType: confirmResponse.data.mime_type,\n url: confirmResponse.data.storage_url,\n publicUrl: confirmResponse.data.public_url,\n }\n}\n\nexport async function uploadFile(\n file: File,\n config: UploadConfig,\n abortSignal?: AbortSignal\n): Promise<UploadedFile> {\n const multipartThreshold = DEFAULT_MULTIPART_THRESHOLD\n\n if (file.size >= multipartThreshold) {\n return uploadMultipartFile(file, config, abortSignal)\n } else {\n return uploadSingleFile(file, config)\n }\n}\n\nexport function formatFileSize(bytes: number): string {\n if (bytes === 0) return '0 B'\n const k = 1024\n const sizes = ['B', 'KB', 'MB', 'GB', 'TB']\n const i = Math.floor(Math.log(bytes) / Math.log(k))\n return `${(bytes / Math.pow(k, i)).toFixed(1)} ${sizes[i]}`\n}\n\nexport function formatSpeed(bytesPerSec: number): string {\n return `${formatFileSize(bytesPerSec)}/s`\n}\n\nexport function formatEta(seconds: number): string {\n if (!isFinite(seconds) || seconds <= 0) return '--'\n if (seconds < 60) return `${Math.round(seconds)}s`\n if (seconds < 3600) return `${Math.round(seconds / 60)}m`\n return `${Math.round(seconds / 3600)}h ${Math.round((seconds % 3600) / 60)}m`\n}\n\nexport function generateUploadId(): string {\n return `upload-${Date.now()}-${Math.random().toString(36).substr(2, 9)}`\n}\n","'use client'\n\nimport { useState, useRef, useCallback, useEffect } from 'react'\nimport { Button, Spinner } from '@marcoschwartz/lite-ui'\nimport type {\n FileUploaderProps,\n FileUploadState,\n UploadProgress,\n UploadedFile,\n} from './types'\nimport {\n uploadFile,\n formatFileSize,\n formatSpeed,\n generateUploadId,\n type UploadConfig,\n} from './upload-utils'\n\nexport type { FileUploaderProps, UploadProgress, UploadedFile, FileUploadState }\n\nconst DEFAULT_MAX_CONCURRENT_FILES = 3\nconst DEFAULT_MULTIPART_THRESHOLD = 5 * 1024 * 1024\n\nexport function FileUploader({\n apiUrl,\n projectId,\n bucketId,\n folderId,\n accessLevel = 'private',\n autoUpload = true,\n maxConcurrentFiles = DEFAULT_MAX_CONCURRENT_FILES,\n maxConcurrentParts = 5,\n multipartThreshold = DEFAULT_MULTIPART_THRESHOLD,\n partSize = 5 * 1024 * 1024,\n accept,\n maxFileSize,\n maxFiles = 10,\n onUploadComplete,\n onUploadError,\n onAllUploadsComplete,\n onProgress,\n onFilesSelected,\n apiKey,\n accessToken,\n className = '',\n showFileList = true,\n showProgress = true,\n label,\n helperText,\n disabled = false,\n}: FileUploaderProps) {\n const [uploads, setUploads] = useState<FileUploadState[]>([])\n const [isDragging, setIsDragging] = useState(false)\n const [overallProgress, setOverallProgress] = useState<UploadProgress | null>(null)\n const fileInputRef = useRef<HTMLInputElement>(null)\n const abortControllersRef = useRef<Map<string, AbortController>>(new Map())\n const uploadedFilesRef = useRef<UploadedFile[]>([])\n\n // Cleanup abort controllers on unmount\n useEffect(() => {\n return () => {\n abortControllersRef.current.forEach(controller => controller.abort())\n }\n }, [])\n\n const validateFile = useCallback((file: File): string | null => {\n if (maxFileSize && file.size > maxFileSize) {\n return `File exceeds maximum size of ${formatFileSize(maxFileSize)}`\n }\n return null\n }, [maxFileSize])\n\n const updateUploadState = useCallback((id: string, updates: Partial<FileUploadState>) => {\n setUploads(prev => prev.map(u => u.id === id ? { ...u, ...updates } : u))\n }, [])\n\n const calculateOverallProgress = useCallback(() => {\n // Use functional update to get current state, then schedule callbacks outside\n setUploads(currentUploads => {\n const totalBytes = currentUploads.reduce((sum, u) => sum + u.file.size, 0)\n const bytesUploaded = currentUploads.reduce((sum, u) => sum + u.bytesUploaded, 0)\n const completedFiles = currentUploads.filter(u => u.status === 'completed').length\n const percentage = totalBytes > 0 ? Math.round((bytesUploaded / totalBytes) * 100) : 0\n\n const progress: UploadProgress = {\n totalFiles: currentUploads.length,\n completedFiles,\n bytesUploaded,\n totalBytes,\n percentage,\n speed: 0,\n eta: 0,\n }\n\n // Schedule state updates outside the updater to avoid React warning\n queueMicrotask(() => {\n setOverallProgress(progress)\n onProgress?.(progress)\n })\n\n return currentUploads\n })\n }, [onProgress])\n\n const uploadSingleFile = useCallback(async (uploadState: FileUploadState) => {\n const { id, file } = uploadState\n const abortController = new AbortController()\n abortControllersRef.current.set(id, abortController)\n\n const config: UploadConfig = {\n apiUrl,\n projectId,\n bucketId,\n folderId,\n accessLevel,\n apiKey,\n accessToken,\n partSize,\n maxConcurrentParts,\n onProgress: (bytesUploaded, totalBytes, _speed) => {\n const progress = Math.round((bytesUploaded / totalBytes) * 100)\n updateUploadState(id, { progress, bytesUploaded })\n calculateOverallProgress()\n },\n }\n\n try {\n updateUploadState(id, { status: 'uploading', progress: 0 })\n\n const result = await uploadFile(file, config, abortController.signal)\n\n updateUploadState(id, {\n status: 'completed',\n progress: 100,\n bytesUploaded: file.size,\n result,\n })\n\n uploadedFilesRef.current.push(result)\n onUploadComplete?.(result)\n\n return result\n } catch (error) {\n const errorMessage = error instanceof Error ? error.message : 'Upload failed'\n updateUploadState(id, { status: 'error', error: errorMessage })\n onUploadError?.(file, error instanceof Error ? error : new Error(errorMessage))\n throw error\n } finally {\n abortControllersRef.current.delete(id)\n calculateOverallProgress()\n }\n }, [\n apiUrl,\n projectId,\n bucketId,\n folderId,\n accessLevel,\n apiKey,\n accessToken,\n partSize,\n maxConcurrentParts,\n updateUploadState,\n calculateOverallProgress,\n onUploadComplete,\n onUploadError,\n ])\n\n const startUploads = useCallback(async (uploadStates: FileUploadState[]) => {\n uploadedFilesRef.current = []\n const pending = [...uploadStates]\n const inProgress: Promise<void>[] = []\n\n const processNext = async () => {\n while (pending.length > 0 && inProgress.length < maxConcurrentFiles) {\n const next = pending.shift()!\n const promise = uploadSingleFile(next)\n .catch(() => {}) // Errors handled in uploadSingleFile\n .finally(() => {\n const index = inProgress.indexOf(promise as unknown as Promise<void>)\n if (index > -1) inProgress.splice(index, 1)\n processNext()\n })\n inProgress.push(promise as unknown as Promise<void>)\n }\n }\n\n await processNext()\n\n // Wait for all uploads to complete\n while (inProgress.length > 0) {\n await Promise.race(inProgress)\n }\n\n // Call onAllUploadsComplete with successful uploads\n if (uploadedFilesRef.current.length > 0) {\n onAllUploadsComplete?.(uploadedFilesRef.current)\n }\n }, [maxConcurrentFiles, uploadSingleFile, onAllUploadsComplete])\n\n const handleFiles = useCallback((files: FileList | File[]) => {\n const fileArray = Array.from(files)\n\n // Check max files\n if (uploads.length + fileArray.length > maxFiles) {\n const allowed = maxFiles - uploads.length\n if (allowed <= 0) return\n fileArray.splice(allowed)\n }\n\n // Validate and create upload states\n const newUploads: FileUploadState[] = []\n for (const file of fileArray) {\n const error = validateFile(file)\n if (error) {\n onUploadError?.(file, new Error(error))\n continue\n }\n\n newUploads.push({\n id: generateUploadId(),\n file,\n status: 'pending',\n progress: 0,\n bytesUploaded: 0,\n })\n }\n\n if (newUploads.length === 0) return\n\n setUploads(prev => [...prev, ...newUploads])\n onFilesSelected?.(newUploads.map(u => u.file))\n\n if (autoUpload) {\n // Start uploads after state update\n setTimeout(() => startUploads(newUploads), 0)\n }\n }, [uploads.length, maxFiles, validateFile, autoUpload, startUploads, onFilesSelected, onUploadError])\n\n const handleDrop = useCallback((e: React.DragEvent) => {\n e.preventDefault()\n setIsDragging(false)\n if (!disabled) {\n handleFiles(e.dataTransfer.files)\n }\n }, [disabled, handleFiles])\n\n const handleDragOver = useCallback((e: React.DragEvent) => {\n e.preventDefault()\n if (!disabled) setIsDragging(true)\n }, [disabled])\n\n const handleDragLeave = useCallback((e: React.DragEvent) => {\n e.preventDefault()\n setIsDragging(false)\n }, [])\n\n const handleClick = useCallback(() => {\n if (!disabled) {\n fileInputRef.current?.click()\n }\n }, [disabled])\n\n const handleInputChange = useCallback((e: React.ChangeEvent<HTMLInputElement>) => {\n if (e.target.files) {\n handleFiles(e.target.files)\n e.target.value = '' // Reset for same file selection\n }\n }, [handleFiles])\n\n const handleRemoveFile = useCallback((id: string) => {\n const controller = abortControllersRef.current.get(id)\n if (controller) {\n controller.abort()\n abortControllersRef.current.delete(id)\n }\n setUploads(prev => prev.filter(u => u.id !== id))\n }, [])\n\n const handleRetry = useCallback((uploadState: FileUploadState) => {\n updateUploadState(uploadState.id, { status: 'pending', progress: 0, error: undefined, bytesUploaded: 0 })\n startUploads([uploadState])\n }, [updateUploadState, startUploads])\n\n const handleStartUpload = useCallback(() => {\n const pendingUploads = uploads.filter(u => u.status === 'pending')\n if (pendingUploads.length > 0) {\n startUploads(pendingUploads)\n }\n }, [uploads, startUploads])\n\n const isUploading = uploads.some(u => u.status === 'uploading')\n const hasPendingFiles = uploads.some(u => u.status === 'pending')\n\n return (\n <div className={`w-full ${className}`}>\n {label && (\n <label className=\"block text-sm font-medium text-gray-900 dark:text-neutral-100 mb-2\">\n {label}\n </label>\n )}\n\n {/* Drop Zone */}\n <div\n onDrop={handleDrop}\n onDragOver={handleDragOver}\n onDragLeave={handleDragLeave}\n onClick={handleClick}\n className={`\n relative border-2 border-dashed rounded-lg p-8 text-center cursor-pointer transition-all\n ${isDragging\n ? 'border-blue-500 bg-blue-50 dark:border-neutral-400 dark:bg-neutral-700/50'\n : 'border-gray-300 dark:border-neutral-600 hover:border-gray-400 dark:hover:border-neutral-500'\n }\n ${disabled ? 'opacity-50 cursor-not-allowed' : ''}\n `}\n >\n <input\n ref={fileInputRef}\n type=\"file\"\n accept={accept}\n multiple={maxFiles > 1}\n onChange={handleInputChange}\n disabled={disabled}\n className=\"hidden\"\n />\n\n <div className=\"flex flex-col items-center gap-2\">\n <div className=\"w-12 h-12 rounded-full bg-gray-100 dark:bg-neutral-800 flex items-center justify-center\">\n <svg className=\"w-6 h-6 text-gray-400 dark:text-neutral-400\" fill=\"none\" stroke=\"currentColor\" viewBox=\"0 0 24 24\">\n <path strokeLinecap=\"round\" strokeLinejoin=\"round\" strokeWidth={2} d=\"M7 16a4 4 0 01-.88-7.903A5 5 0 1115.9 6L16 6a5 5 0 011 9.9M15 13l-3-3m0 0l-3 3m3-3v12\" />\n </svg>\n </div>\n <div>\n <p className=\"text-sm font-medium text-gray-900 dark:text-neutral-100\">\n <span className=\"text-blue-600 dark:text-neutral-200 dark:font-medium\">Click to upload</span> or drag and drop\n </p>\n <p className=\"text-xs text-gray-500 dark:text-neutral-400 mt-1\">\n {accept ? `Accepted: ${accept}` : 'Any file type'}\n {maxFileSize && ` · Max: ${formatFileSize(maxFileSize)}`}\n </p>\n </div>\n </div>\n </div>\n\n {helperText && (\n <p className=\"mt-2 text-sm text-gray-500 dark:text-neutral-400\">{helperText}</p>\n )}\n\n {/* Overall Progress */}\n {showProgress && overallProgress && isUploading && (\n <div className=\"mt-4 p-3 bg-gray-50 dark:bg-neutral-800 rounded-lg\">\n <div className=\"flex items-center justify-between text-sm mb-2\">\n <span className=\"text-gray-700 dark:text-neutral-300\">\n Uploading {overallProgress.completedFiles + 1} of {overallProgress.totalFiles}\n </span>\n <span className=\"text-gray-500 dark:text-neutral-400\">\n {overallProgress.percentage}%\n </span>\n </div>\n <div className=\"w-full h-2 bg-gray-200 dark:bg-neutral-700 rounded-full overflow-hidden\">\n <div\n className=\"h-full bg-blue-600 dark:bg-neutral-300 transition-all duration-300\"\n style={{ width: `${overallProgress.percentage}%` }}\n />\n </div>\n <div className=\"flex items-center justify-between text-xs text-gray-500 dark:text-neutral-400 mt-1\">\n <span>{formatFileSize(overallProgress.bytesUploaded)} / {formatFileSize(overallProgress.totalBytes)}</span>\n {overallProgress.speed > 0 && (\n <span>{formatSpeed(overallProgress.speed)}</span>\n )}\n </div>\n </div>\n )}\n\n {/* File List */}\n {showFileList && uploads.length > 0 && (\n <div className=\"mt-4 space-y-2\">\n {uploads.map((upload) => (\n <div\n key={upload.id}\n className=\"flex items-center gap-3 p-3 bg-gray-50 dark:bg-neutral-800 rounded-lg border border-gray-200 dark:border-neutral-700\"\n >\n {/* File Icon */}\n <div className=\"w-10 h-10 rounded bg-gray-200 dark:bg-neutral-700 flex items-center justify-center flex-shrink-0\">\n {upload.status === 'uploading' ? (\n <Spinner size=\"sm\" />\n ) : upload.status === 'completed' ? (\n <svg className=\"w-5 h-5 text-green-500\" fill=\"none\" stroke=\"currentColor\" viewBox=\"0 0 24 24\">\n <path strokeLinecap=\"round\" strokeLinejoin=\"round\" strokeWidth={2} d=\"M5 13l4 4L19 7\" />\n </svg>\n ) : upload.status === 'error' ? (\n <svg className=\"w-5 h-5 text-red-500\" fill=\"none\" stroke=\"currentColor\" viewBox=\"0 0 24 24\">\n <path strokeLinecap=\"round\" strokeLinejoin=\"round\" strokeWidth={2} d=\"M6 18L18 6M6 6l12 12\" />\n </svg>\n ) : (\n <svg className=\"w-5 h-5 text-gray-400 dark:text-neutral-400\" fill=\"none\" stroke=\"currentColor\" viewBox=\"0 0 24 24\">\n <path strokeLinecap=\"round\" strokeLinejoin=\"round\" strokeWidth={2} d=\"M9 12h6m-6 4h6m2 5H7a2 2 0 01-2-2V5a2 2 0 012-2h5.586a1 1 0 01.707.293l5.414 5.414a1 1 0 01.293.707V19a2 2 0 01-2 2z\" />\n </svg>\n )}\n </div>\n\n {/* File Info */}\n <div className=\"flex-1 min-w-0\">\n <p className=\"text-sm font-medium text-gray-900 dark:text-neutral-100 truncate\">\n {upload.file.name}\n </p>\n <div className=\"flex items-center gap-2 text-xs text-gray-500 dark:text-neutral-400\">\n <span>{formatFileSize(upload.file.size)}</span>\n {upload.status === 'uploading' && (\n <span>· {upload.progress}%</span>\n )}\n {upload.status === 'error' && (\n <span className=\"text-red-500\">{upload.error}</span>\n )}\n {upload.file.size >= multipartThreshold && upload.status === 'pending' && (\n <span className=\"text-blue-500 dark:text-neutral-300\">Multipart</span>\n )}\n </div>\n\n {/* Progress Bar */}\n {upload.status === 'uploading' && (\n <div className=\"w-full h-1 bg-gray-200 dark:bg-neutral-700 rounded-full mt-2 overflow-hidden\">\n <div\n className=\"h-full bg-blue-600 dark:bg-neutral-300 transition-all duration-300\"\n style={{ width: `${upload.progress}%` }}\n />\n </div>\n )}\n </div>\n\n {/* Actions */}\n <div className=\"flex items-center gap-1 flex-shrink-0\">\n {upload.status === 'error' && (\n <button\n onClick={() => handleRetry(upload)}\n className=\"p-1 text-gray-400 dark:text-neutral-400 hover:text-blue-500 dark:hover:text-neutral-200 transition-colors\"\n title=\"Retry\"\n >\n <svg className=\"w-4 h-4\" fill=\"none\" stroke=\"currentColor\" viewBox=\"0 0 24 24\">\n <path strokeLinecap=\"round\" strokeLinejoin=\"round\" strokeWidth={2} d=\"M4 4v5h.582m15.356 2A8.001 8.001 0 004.582 9m0 0H9m11 11v-5h-.581m0 0a8.003 8.003 0 01-15.357-2m15.357 2H15\" />\n </svg>\n </button>\n )}\n <button\n onClick={() => handleRemoveFile(upload.id)}\n className=\"p-1 text-gray-400 dark:text-neutral-400 hover:text-red-500 transition-colors\"\n title=\"Remove\"\n >\n <svg className=\"w-4 h-4\" fill=\"none\" stroke=\"currentColor\" viewBox=\"0 0 24 24\">\n <path strokeLinecap=\"round\" strokeLinejoin=\"round\" strokeWidth={2} d=\"M6 18L18 6M6 6l12 12\" />\n </svg>\n </button>\n </div>\n </div>\n ))}\n </div>\n )}\n\n {/* Manual Upload Button */}\n {!autoUpload && hasPendingFiles && (\n <div className=\"mt-4\">\n <Button\n onClick={handleStartUpload}\n disabled={isUploading || disabled}\n variant=\"primary\"\n className=\"w-full\"\n >\n {isUploading ? (\n <>\n <Spinner size=\"sm\" color=\"white\" className=\"mr-2\" />\n Uploading...\n </>\n ) : (\n `Upload ${uploads.filter(u => u.status === 'pending').length} file(s)`\n )}\n </Button>\n </div>\n )}\n </div>\n )\n}\n","/**\n * Client Components\n * These components run on the client side\n */\n\nexport { Tabs } from './Tabs'\nexport type { TabsProps, Tab } from './Tabs'\n\nexport { Modal } from './Modal'\nexport type { ModalProps } from './Modal'\n\nexport { PaymentMethodManager } from './PaymentMethodManager'\nexport type { PaymentMethodManagerProps } from './PaymentMethodManager'\n\nexport { BillingContent } from './BillingContent'\nexport { AddPaymentMethodForm } from './AddPaymentMethodForm'\nexport type { AddPaymentMethodFormProps } from './AddPaymentMethodForm'\nexport { Button } from './LiteButton'\nexport type { ButtonProps } from './LiteButton'\n\n// Auth Components\nexport { LoginForm } from './LoginForm'\nexport type { LoginFormProps, LoginSuccessData } from './LoginForm'\n\nexport { RegisterForm } from './RegisterForm'\nexport type { RegisterFormProps, RegisterSuccessData } from './RegisterForm'\n\nexport { ForgotPasswordForm } from './ForgotPasswordForm'\nexport type { ForgotPasswordFormProps } from './ForgotPasswordForm'\n\nexport { ResetPasswordForm } from './ResetPasswordForm'\nexport type { ResetPasswordFormProps } from './ResetPasswordForm'\n\n// File Upload Component\nexport { FileUploader } from './FileUploader'\nexport type {\n FileUploaderProps,\n UploadProgress,\n UploadedFile,\n FileUploadState,\n} from './FileUploader'\n\nexport const OMNIKIT_CLIENT_VERSION = '0.9.11'\n"]}
|