@omnikit-js/ui 0.9.47 → 0.9.48

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.
@@ -323,6 +323,8 @@ interface FileUploaderProps {
323
323
  apiKey?: string;
324
324
  /** JWT access token for authentication */
325
325
  accessToken?: string;
326
+ /** Display variant: 'default' (drop zone) or 'compact' (single-line, single file) */
327
+ variant?: 'default' | 'compact';
326
328
  /** Custom class name */
327
329
  className?: string;
328
330
  /** Show list of selected/uploading files (default: true) */
@@ -385,7 +387,7 @@ interface FileUploadState {
385
387
  bytesUploaded: number;
386
388
  }
387
389
 
388
- declare function FileUploader({ apiUrl, projectId, bucketId, folderId, accessLevel, autoUpload, maxConcurrentFiles, maxConcurrentParts, multipartThreshold, partSize, accept, maxFileSize, maxFiles, onUploadComplete, onUploadError, onAllUploadsComplete, onProgress, onFilesSelected, apiKey, accessToken, className, showFileList, showProgress, label, helperText, disabled, }: FileUploaderProps): react_jsx_runtime.JSX.Element;
390
+ declare function FileUploader({ apiUrl, projectId, bucketId, folderId, accessLevel, autoUpload, maxConcurrentFiles, maxConcurrentParts, multipartThreshold, partSize, accept, maxFileSize, maxFiles, onUploadComplete, onUploadError, onAllUploadsComplete, onProgress, onFilesSelected, apiKey, accessToken, variant, className, showFileList, showProgress, label, helperText, disabled, }: FileUploaderProps): react_jsx_runtime.JSX.Element;
389
391
 
390
392
  interface PaymentMethod {
391
393
  id: number;
@@ -1047,6 +1047,7 @@ function FileUploader({
1047
1047
  onFilesSelected,
1048
1048
  apiKey,
1049
1049
  accessToken,
1050
+ variant = "default",
1050
1051
  className = "",
1051
1052
  showFileList = true,
1052
1053
  showProgress = true,
@@ -1054,6 +1055,9 @@ function FileUploader({
1054
1055
  helperText,
1055
1056
  disabled = false
1056
1057
  }) {
1058
+ if (variant === "compact") {
1059
+ maxFiles = 1;
1060
+ }
1057
1061
  const [uploads, setUploads] = useState([]);
1058
1062
  const [isDragging, setIsDragging] = useState(false);
1059
1063
  const [overallProgress, setOverallProgress] = useState(null);
@@ -1251,6 +1255,108 @@ function FileUploader({
1251
1255
  }, [uploads, startUploads]);
1252
1256
  const isUploading = uploads.some((u) => u.status === "uploading");
1253
1257
  const hasPendingFiles = uploads.some((u) => u.status === "pending");
1258
+ if (variant === "compact") {
1259
+ const upload = uploads[0] || null;
1260
+ return /* @__PURE__ */ jsxs("div", { className: `w-full ${className}`, children: [
1261
+ label && /* @__PURE__ */ jsx("label", { className: "block text-sm font-medium text-[hsl(var(--foreground))] mb-1", children: label }),
1262
+ /* @__PURE__ */ jsxs(
1263
+ "div",
1264
+ {
1265
+ className: `
1266
+ flex items-center gap-2 h-10 px-3 rounded-lg border transition-all
1267
+ ${isDragging ? "border-[hsl(var(--primary))] bg-[hsl(var(--primary))]/10" : "border-[hsl(var(--input))] hover:border-[hsl(var(--muted-foreground))]"}
1268
+ ${disabled ? "opacity-50 cursor-not-allowed" : "cursor-pointer"}
1269
+ `,
1270
+ onDrop: handleDrop,
1271
+ onDragOver: handleDragOver,
1272
+ onDragLeave: handleDragLeave,
1273
+ onClick: !upload ? handleClick : void 0,
1274
+ children: [
1275
+ /* @__PURE__ */ jsx(
1276
+ "input",
1277
+ {
1278
+ ref: fileInputRef,
1279
+ type: "file",
1280
+ accept,
1281
+ multiple: false,
1282
+ onChange: handleInputChange,
1283
+ disabled,
1284
+ className: "hidden"
1285
+ }
1286
+ ),
1287
+ !upload ? (
1288
+ /* ── Empty state ── */
1289
+ /* @__PURE__ */ jsxs(Fragment, { children: [
1290
+ /* @__PURE__ */ jsx("svg", { className: "w-4 h-4 flex-shrink-0 text-[hsl(var(--muted-foreground))]", fill: "none", stroke: "currentColor", viewBox: "0 0 24 24", children: /* @__PURE__ */ jsx("path", { strokeLinecap: "round", strokeLinejoin: "round", strokeWidth: 2, d: "M15.172 7l-6.586 6.586a2 2 0 102.828 2.828l6.414-6.586a4 4 0 00-5.656-5.656l-6.415 6.585a6 6 0 108.486 8.486L20.5 13" }) }),
1291
+ /* @__PURE__ */ jsx("span", { className: "text-sm text-[hsl(var(--muted-foreground))] select-none", children: helperText || "Choose file" })
1292
+ ] })
1293
+ ) : (
1294
+ /* ── File present ── */
1295
+ /* @__PURE__ */ jsxs(Fragment, { children: [
1296
+ upload.status === "uploading" ? /* @__PURE__ */ jsx(Spinner, { size: "sm" }) : upload.status === "completed" ? /* @__PURE__ */ jsx("svg", { className: "w-4 h-4 flex-shrink-0 text-[hsl(var(--success,142_71%_45%))]", fill: "none", stroke: "currentColor", viewBox: "0 0 24 24", children: /* @__PURE__ */ jsx("path", { strokeLinecap: "round", strokeLinejoin: "round", strokeWidth: 2, d: "M5 13l4 4L19 7" }) }) : upload.status === "error" ? /* @__PURE__ */ jsx("svg", { className: "w-4 h-4 flex-shrink-0 text-[hsl(var(--destructive))]", fill: "none", stroke: "currentColor", viewBox: "0 0 24 24", children: /* @__PURE__ */ jsx("path", { strokeLinecap: "round", strokeLinejoin: "round", strokeWidth: 2, d: "M12 8v4m0 4h.01M21 12a9 9 0 11-18 0 9 9 0 0118 0z" }) }) : /* @__PURE__ */ jsx("svg", { className: "w-4 h-4 flex-shrink-0 text-[hsl(var(--muted-foreground))]", fill: "none", stroke: "currentColor", viewBox: "0 0 24 24", children: /* @__PURE__ */ jsx("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" }) }),
1297
+ /* @__PURE__ */ jsxs("div", { className: "flex-1 min-w-0 flex items-center gap-2", children: [
1298
+ /* @__PURE__ */ jsx("span", { className: "text-sm text-[hsl(var(--foreground))] truncate", children: upload.file.name }),
1299
+ upload.status === "uploading" && /* @__PURE__ */ jsxs("div", { className: "flex items-center gap-2 flex-shrink-0", children: [
1300
+ /* @__PURE__ */ jsx("div", { className: "w-20 h-1.5 bg-[hsl(var(--muted))] rounded-full overflow-hidden", children: /* @__PURE__ */ jsx(
1301
+ "div",
1302
+ {
1303
+ className: "h-full bg-[hsl(var(--primary))] rounded-full transition-all duration-200",
1304
+ style: { width: `${upload.progress}%` }
1305
+ }
1306
+ ) }),
1307
+ /* @__PURE__ */ jsxs("span", { className: "text-xs text-[hsl(var(--muted-foreground))] tabular-nums", children: [
1308
+ upload.progress,
1309
+ "%"
1310
+ ] })
1311
+ ] }),
1312
+ upload.status === "completed" && /* @__PURE__ */ jsx("span", { className: "text-xs text-[hsl(var(--muted-foreground))] flex-shrink-0", children: formatFileSize(upload.file.size) }),
1313
+ upload.status === "error" && /* @__PURE__ */ jsx("span", { className: "text-xs text-[hsl(var(--destructive))] truncate flex-shrink-0", children: upload.error || "Failed" })
1314
+ ] }),
1315
+ /* @__PURE__ */ jsxs("div", { className: "flex items-center gap-0.5 flex-shrink-0", children: [
1316
+ upload.status === "error" && /* @__PURE__ */ jsx(
1317
+ "button",
1318
+ {
1319
+ onClick: (e) => {
1320
+ e.stopPropagation();
1321
+ handleRetry(upload);
1322
+ },
1323
+ className: "p-1 text-[hsl(var(--muted-foreground))] hover:text-[hsl(var(--primary))] transition-colors",
1324
+ title: "Retry",
1325
+ children: /* @__PURE__ */ jsx("svg", { className: "w-3.5 h-3.5", fill: "none", stroke: "currentColor", viewBox: "0 0 24 24", children: /* @__PURE__ */ jsx("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" }) })
1326
+ }
1327
+ ),
1328
+ !autoUpload && upload.status === "pending" && /* @__PURE__ */ jsx(
1329
+ "button",
1330
+ {
1331
+ onClick: (e) => {
1332
+ e.stopPropagation();
1333
+ handleStartUpload();
1334
+ },
1335
+ className: "p-1 text-[hsl(var(--primary))] hover:text-[hsl(var(--primary))]/80 transition-colors",
1336
+ title: "Upload",
1337
+ children: /* @__PURE__ */ jsx("svg", { className: "w-3.5 h-3.5", fill: "none", stroke: "currentColor", viewBox: "0 0 24 24", children: /* @__PURE__ */ jsx("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" }) })
1338
+ }
1339
+ ),
1340
+ /* @__PURE__ */ jsx(
1341
+ "button",
1342
+ {
1343
+ onClick: (e) => {
1344
+ e.stopPropagation();
1345
+ handleRemoveFile(upload.id);
1346
+ },
1347
+ className: "p-1 text-[hsl(var(--muted-foreground))] hover:text-[hsl(var(--destructive))] transition-colors",
1348
+ title: "Remove",
1349
+ children: /* @__PURE__ */ jsx("svg", { className: "w-3.5 h-3.5", fill: "none", stroke: "currentColor", viewBox: "0 0 24 24", children: /* @__PURE__ */ jsx("path", { strokeLinecap: "round", strokeLinejoin: "round", strokeWidth: 2, d: "M6 18L18 6M6 6l12 12" }) })
1350
+ }
1351
+ )
1352
+ ] })
1353
+ ] })
1354
+ )
1355
+ ]
1356
+ }
1357
+ )
1358
+ ] });
1359
+ }
1254
1360
  return /* @__PURE__ */ jsxs("div", { className: `w-full ${className}`, children: [
1255
1361
  label && /* @__PURE__ */ jsx("label", { className: "block text-sm font-medium text-[hsl(var(--foreground))] mb-2", children: label }),
1256
1362
  /* @__PURE__ */ jsxs(
@@ -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.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.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, ProgressBar } 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-[hsl(var(--foreground))] 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-[hsl(var(--primary))] bg-[hsl(var(--primary))]/10'\n : 'border-[hsl(var(--input))] hover:border-[hsl(var(--muted-foreground))]'\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-[hsl(var(--muted))] flex items-center justify-center\">\n <svg className=\"w-6 h-6 text-[hsl(var(--muted-foreground))]\" 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-[hsl(var(--foreground))]\">\n <span className=\"text-[hsl(var(--primary))]\">Click to upload</span> or drag and drop\n </p>\n <p className=\"text-xs text-[hsl(var(--muted-foreground))] 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-[hsl(var(--muted-foreground))]\">{helperText}</p>\n )}\n\n {/* Overall Progress - only show for multiple files */}\n {showProgress && overallProgress && isUploading && overallProgress.totalFiles > 1 && (\n <div className=\"mt-4 p-3 bg-[hsl(var(--muted))] rounded-lg\">\n <div className=\"flex items-center justify-between text-sm mb-2\">\n <span className=\"text-[hsl(var(--foreground))]\">\n Uploading {overallProgress.completedFiles + 1} of {overallProgress.totalFiles}\n </span>\n <span className=\"text-[hsl(var(--muted-foreground))]\">\n {overallProgress.percentage}%\n </span>\n </div>\n <ProgressBar value={overallProgress.percentage} size=\"sm\" />\n <div className=\"flex items-center justify-between text-xs text-[hsl(var(--muted-foreground))] 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-[hsl(var(--muted))] rounded-lg border border-[hsl(var(--border))]\"\n >\n {/* File Icon */}\n <div className=\"w-10 h-10 rounded bg-[hsl(var(--card))] 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-[hsl(var(--success))]\" 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-[hsl(var(--destructive))]\" 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-[hsl(var(--muted-foreground))]\" 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-[hsl(var(--foreground))] truncate\">\n {upload.file.name}\n </p>\n <div className=\"flex items-center gap-2 text-xs text-[hsl(var(--muted-foreground))]\">\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-[hsl(var(--destructive))]\">{upload.error}</span>\n )}\n {upload.file.size >= multipartThreshold && upload.status === 'pending' && (\n <span className=\"text-[hsl(var(--primary))]\">Multipart</span>\n )}\n </div>\n\n {/* Progress Bar */}\n {upload.status === 'uploading' && (\n <div className=\"mt-2\">\n <ProgressBar value={upload.progress} size=\"sm\" />\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-[hsl(var(--muted-foreground))] hover:text-[hsl(var(--primary))] 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-[hsl(var(--muted-foreground))] hover:text-[hsl(var(--destructive))] 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\n// Payment Form Component\nexport { PaymentForm } from './PaymentForm'\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.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.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, ProgressBar } 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 variant = 'default',\n className = '',\n showFileList = true,\n showProgress = true,\n label,\n helperText,\n disabled = false,\n}: FileUploaderProps) {\n // Compact variant forces single file\n if (variant === 'compact') {\n maxFiles = 1\n }\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 // ── Compact variant: single-line, single file ──\n if (variant === 'compact') {\n const upload = uploads[0] || null\n\n return (\n <div className={`w-full ${className}`}>\n {label && (\n <label className=\"block text-sm font-medium text-[hsl(var(--foreground))] mb-1\">\n {label}\n </label>\n )}\n\n <div\n className={`\n flex items-center gap-2 h-10 px-3 rounded-lg border transition-all\n ${isDragging\n ? 'border-[hsl(var(--primary))] bg-[hsl(var(--primary))]/10'\n : 'border-[hsl(var(--input))] hover:border-[hsl(var(--muted-foreground))]'\n }\n ${disabled ? 'opacity-50 cursor-not-allowed' : 'cursor-pointer'}\n `}\n onDrop={handleDrop}\n onDragOver={handleDragOver}\n onDragLeave={handleDragLeave}\n onClick={!upload ? handleClick : undefined}\n >\n <input\n ref={fileInputRef}\n type=\"file\"\n accept={accept}\n multiple={false}\n onChange={handleInputChange}\n disabled={disabled}\n className=\"hidden\"\n />\n\n {!upload ? (\n /* ── Empty state ── */\n <>\n <svg className=\"w-4 h-4 flex-shrink-0 text-[hsl(var(--muted-foreground))]\" fill=\"none\" stroke=\"currentColor\" viewBox=\"0 0 24 24\">\n <path strokeLinecap=\"round\" strokeLinejoin=\"round\" strokeWidth={2} d=\"M15.172 7l-6.586 6.586a2 2 0 102.828 2.828l6.414-6.586a4 4 0 00-5.656-5.656l-6.415 6.585a6 6 0 108.486 8.486L20.5 13\" />\n </svg>\n <span className=\"text-sm text-[hsl(var(--muted-foreground))] select-none\">\n {helperText || 'Choose file'}\n </span>\n </>\n ) : (\n /* ── File present ── */\n <>\n {/* Status icon */}\n {upload.status === 'uploading' ? (\n <Spinner size=\"sm\" />\n ) : upload.status === 'completed' ? (\n <svg className=\"w-4 h-4 flex-shrink-0 text-[hsl(var(--success,142_71%_45%))]\" 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-4 h-4 flex-shrink-0 text-[hsl(var(--destructive))]\" fill=\"none\" stroke=\"currentColor\" viewBox=\"0 0 24 24\">\n <path strokeLinecap=\"round\" strokeLinejoin=\"round\" strokeWidth={2} d=\"M12 8v4m0 4h.01M21 12a9 9 0 11-18 0 9 9 0 0118 0z\" />\n </svg>\n ) : (\n <svg className=\"w-4 h-4 flex-shrink-0 text-[hsl(var(--muted-foreground))]\" 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\n {/* Filename + inline progress */}\n <div className=\"flex-1 min-w-0 flex items-center gap-2\">\n <span className=\"text-sm text-[hsl(var(--foreground))] truncate\">\n {upload.file.name}\n </span>\n {upload.status === 'uploading' && (\n <div className=\"flex items-center gap-2 flex-shrink-0\">\n <div className=\"w-20 h-1.5 bg-[hsl(var(--muted))] rounded-full overflow-hidden\">\n <div\n className=\"h-full bg-[hsl(var(--primary))] rounded-full transition-all duration-200\"\n style={{ width: `${upload.progress}%` }}\n />\n </div>\n <span className=\"text-xs text-[hsl(var(--muted-foreground))] tabular-nums\">\n {upload.progress}%\n </span>\n </div>\n )}\n {upload.status === 'completed' && (\n <span className=\"text-xs text-[hsl(var(--muted-foreground))] flex-shrink-0\">\n {formatFileSize(upload.file.size)}\n </span>\n )}\n {upload.status === 'error' && (\n <span className=\"text-xs text-[hsl(var(--destructive))] truncate flex-shrink-0\">\n {upload.error || 'Failed'}\n </span>\n )}\n </div>\n\n {/* Actions */}\n <div className=\"flex items-center gap-0.5 flex-shrink-0\">\n {upload.status === 'error' && (\n <button\n onClick={(e) => { e.stopPropagation(); handleRetry(upload) }}\n className=\"p-1 text-[hsl(var(--muted-foreground))] hover:text-[hsl(var(--primary))] transition-colors\"\n title=\"Retry\"\n >\n <svg className=\"w-3.5 h-3.5\" 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 {!autoUpload && upload.status === 'pending' && (\n <button\n onClick={(e) => { e.stopPropagation(); handleStartUpload() }}\n className=\"p-1 text-[hsl(var(--primary))] hover:text-[hsl(var(--primary))]/80 transition-colors\"\n title=\"Upload\"\n >\n <svg className=\"w-3.5 h-3.5\" 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 </button>\n )}\n <button\n onClick={(e) => { e.stopPropagation(); handleRemoveFile(upload.id) }}\n className=\"p-1 text-[hsl(var(--muted-foreground))] hover:text-[hsl(var(--destructive))] transition-colors\"\n title=\"Remove\"\n >\n <svg className=\"w-3.5 h-3.5\" 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 )}\n </div>\n </div>\n )\n }\n\n // ── Default variant ──\n return (\n <div className={`w-full ${className}`}>\n {label && (\n <label className=\"block text-sm font-medium text-[hsl(var(--foreground))] 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-[hsl(var(--primary))] bg-[hsl(var(--primary))]/10'\n : 'border-[hsl(var(--input))] hover:border-[hsl(var(--muted-foreground))]'\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-[hsl(var(--muted))] flex items-center justify-center\">\n <svg className=\"w-6 h-6 text-[hsl(var(--muted-foreground))]\" 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-[hsl(var(--foreground))]\">\n <span className=\"text-[hsl(var(--primary))]\">Click to upload</span> or drag and drop\n </p>\n <p className=\"text-xs text-[hsl(var(--muted-foreground))] 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-[hsl(var(--muted-foreground))]\">{helperText}</p>\n )}\n\n {/* Overall Progress - only show for multiple files */}\n {showProgress && overallProgress && isUploading && overallProgress.totalFiles > 1 && (\n <div className=\"mt-4 p-3 bg-[hsl(var(--muted))] rounded-lg\">\n <div className=\"flex items-center justify-between text-sm mb-2\">\n <span className=\"text-[hsl(var(--foreground))]\">\n Uploading {overallProgress.completedFiles + 1} of {overallProgress.totalFiles}\n </span>\n <span className=\"text-[hsl(var(--muted-foreground))]\">\n {overallProgress.percentage}%\n </span>\n </div>\n <ProgressBar value={overallProgress.percentage} size=\"sm\" />\n <div className=\"flex items-center justify-between text-xs text-[hsl(var(--muted-foreground))] 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-[hsl(var(--muted))] rounded-lg border border-[hsl(var(--border))]\"\n >\n {/* File Icon */}\n <div className=\"w-10 h-10 rounded bg-[hsl(var(--card))] 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-[hsl(var(--success))]\" 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-[hsl(var(--destructive))]\" 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-[hsl(var(--muted-foreground))]\" 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-[hsl(var(--foreground))] truncate\">\n {upload.file.name}\n </p>\n <div className=\"flex items-center gap-2 text-xs text-[hsl(var(--muted-foreground))]\">\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-[hsl(var(--destructive))]\">{upload.error}</span>\n )}\n {upload.file.size >= multipartThreshold && upload.status === 'pending' && (\n <span className=\"text-[hsl(var(--primary))]\">Multipart</span>\n )}\n </div>\n\n {/* Progress Bar */}\n {upload.status === 'uploading' && (\n <div className=\"mt-2\">\n <ProgressBar value={upload.progress} size=\"sm\" />\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-[hsl(var(--muted-foreground))] hover:text-[hsl(var(--primary))] 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-[hsl(var(--muted-foreground))] hover:text-[hsl(var(--destructive))] 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\n// Payment Form Component\nexport { PaymentForm } from './PaymentForm'\n\nexport const OMNIKIT_CLIENT_VERSION = '0.9.11'\n"]}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@omnikit-js/ui",
3
- "version": "0.9.47",
3
+ "version": "0.9.48",
4
4
  "type": "module",
5
5
  "description": "React component library for OmniKit serverless platform",
6
6
  "main": "./dist/index.js",