@rpcbase/auth 0.116.0 → 0.118.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/index.js +9 -9
- package/dist/index.js.map +1 -1
- package/package.json +1 -1
package/dist/index.js
CHANGED
|
@@ -365,7 +365,7 @@ var RememberMeCheckbox = (t0) => {
|
|
|
365
365
|
//#endregion
|
|
366
366
|
//#region ../../node_modules/lucide-react/dist/esm/shared/src/utils/mergeClasses.js
|
|
367
367
|
/**
|
|
368
|
-
* @license lucide-react v1.0
|
|
368
|
+
* @license lucide-react v1.7.0 - ISC
|
|
369
369
|
*
|
|
370
370
|
* This source code is licensed under the ISC license.
|
|
371
371
|
* See the LICENSE file in the root directory of this source tree.
|
|
@@ -376,7 +376,7 @@ var mergeClasses = (...classes) => classes.filter((className, index, array) => {
|
|
|
376
376
|
//#endregion
|
|
377
377
|
//#region ../../node_modules/lucide-react/dist/esm/shared/src/utils/toKebabCase.js
|
|
378
378
|
/**
|
|
379
|
-
* @license lucide-react v1.0
|
|
379
|
+
* @license lucide-react v1.7.0 - ISC
|
|
380
380
|
*
|
|
381
381
|
* This source code is licensed under the ISC license.
|
|
382
382
|
* See the LICENSE file in the root directory of this source tree.
|
|
@@ -385,7 +385,7 @@ var toKebabCase = (string) => string.replace(/([a-z0-9])([A-Z])/g, "$1-$2").toLo
|
|
|
385
385
|
//#endregion
|
|
386
386
|
//#region ../../node_modules/lucide-react/dist/esm/shared/src/utils/toCamelCase.js
|
|
387
387
|
/**
|
|
388
|
-
* @license lucide-react v1.0
|
|
388
|
+
* @license lucide-react v1.7.0 - ISC
|
|
389
389
|
*
|
|
390
390
|
* This source code is licensed under the ISC license.
|
|
391
391
|
* See the LICENSE file in the root directory of this source tree.
|
|
@@ -394,7 +394,7 @@ var toCamelCase = (string) => string.replace(/^([A-Z])|[\s-_]+(\w)/g, (match, p1
|
|
|
394
394
|
//#endregion
|
|
395
395
|
//#region ../../node_modules/lucide-react/dist/esm/shared/src/utils/toPascalCase.js
|
|
396
396
|
/**
|
|
397
|
-
* @license lucide-react v1.0
|
|
397
|
+
* @license lucide-react v1.7.0 - ISC
|
|
398
398
|
*
|
|
399
399
|
* This source code is licensed under the ISC license.
|
|
400
400
|
* See the LICENSE file in the root directory of this source tree.
|
|
@@ -406,7 +406,7 @@ var toPascalCase = (string) => {
|
|
|
406
406
|
//#endregion
|
|
407
407
|
//#region ../../node_modules/lucide-react/dist/esm/defaultAttributes.js
|
|
408
408
|
/**
|
|
409
|
-
* @license lucide-react v1.0
|
|
409
|
+
* @license lucide-react v1.7.0 - ISC
|
|
410
410
|
*
|
|
411
411
|
* This source code is licensed under the ISC license.
|
|
412
412
|
* See the LICENSE file in the root directory of this source tree.
|
|
@@ -425,7 +425,7 @@ var defaultAttributes = {
|
|
|
425
425
|
//#endregion
|
|
426
426
|
//#region ../../node_modules/lucide-react/dist/esm/shared/src/utils/hasA11yProp.js
|
|
427
427
|
/**
|
|
428
|
-
* @license lucide-react v1.0
|
|
428
|
+
* @license lucide-react v1.7.0 - ISC
|
|
429
429
|
*
|
|
430
430
|
* This source code is licensed under the ISC license.
|
|
431
431
|
* See the LICENSE file in the root directory of this source tree.
|
|
@@ -437,7 +437,7 @@ var hasA11yProp = (props) => {
|
|
|
437
437
|
//#endregion
|
|
438
438
|
//#region ../../node_modules/lucide-react/dist/esm/context.js
|
|
439
439
|
/**
|
|
440
|
-
* @license lucide-react v1.0
|
|
440
|
+
* @license lucide-react v1.7.0 - ISC
|
|
441
441
|
*
|
|
442
442
|
* This source code is licensed under the ISC license.
|
|
443
443
|
* See the LICENSE file in the root directory of this source tree.
|
|
@@ -447,7 +447,7 @@ var useLucideContext = () => useContext(LucideContext);
|
|
|
447
447
|
//#endregion
|
|
448
448
|
//#region ../../node_modules/lucide-react/dist/esm/Icon.js
|
|
449
449
|
/**
|
|
450
|
-
* @license lucide-react v1.0
|
|
450
|
+
* @license lucide-react v1.7.0 - ISC
|
|
451
451
|
*
|
|
452
452
|
* This source code is licensed under the ISC license.
|
|
453
453
|
* See the LICENSE file in the root directory of this source tree.
|
|
@@ -470,7 +470,7 @@ var Icon = forwardRef(({ color, size, strokeWidth, absoluteStrokeWidth, classNam
|
|
|
470
470
|
//#endregion
|
|
471
471
|
//#region ../../node_modules/lucide-react/dist/esm/createLucideIcon.js
|
|
472
472
|
/**
|
|
473
|
-
* @license lucide-react v1.0
|
|
473
|
+
* @license lucide-react v1.7.0 - ISC
|
|
474
474
|
*
|
|
475
475
|
* This source code is licensed under the ISC license.
|
|
476
476
|
* See the LICENSE file in the root directory of this source tree.
|
package/dist/index.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","names":["React","Link","useLocation","LINKS_REDIRECTION_MAP","Pathname","AuthLayout","t0","$","_c","sidePanel","t1","children","undefined","location","linkTitle","pathname","title","linkLocation","t2","t3","t4","t5","clsx","AppleSignInButton","t0","$","_c","onPress","className","t1","t2","t3","Symbol","for","t4","useFormContext","EmailInput","t0","$","_c","id","className","placeholder","register","formState","error","errors","email","errorMessage","message","t1","t2","t3","t4","hasUnsafeNextPathChars","value","i","length","code","charCodeAt","sanitizeNextPath","raw","nextPath","trim","startsWith","base","URL","url","origin","pathname","search","hash","ReactNode","useNavigate","useSearchParams","useForm","FormProvider","zodResolver","SubmitHandler","z","requestSchema","sanitizeNextPath","SignInFormValues","input","SignInForm","children","className","navigate","searchParams","methods","defaultValues","email","password","rememberMe","navigationGuard","resolver","onSubmit","data","clearErrors","res","fetch","method","headers","body","JSON","stringify","credentials","json","catch","success","error","ok","message","setError","type","nextPath","get","replace","err","handleSubmit","formState","errors","root","ReactNode","useState","useNavigate","useForm","FormProvider","zodResolver","SubmitHandler","z","requestSchema","SignUpFormValues","input","SignUpForm","children","className","otpNextPath","navigate","serverMessage","setServerMessage","methods","defaultValues","email","password","rememberMe","navigationGuard","resolver","onSubmit","data","clearErrors","res","fetch","method","headers","body","JSON","stringify","credentials","json","ok","message","error","setError","type","success","search","URLSearchParams","set","toString","err","handleSubmit","formState","errors","root","ElementType","useFormContext","RememberMeCheckbox","t0","$","_c","label","as","t1","Component","undefined","register","t2","t3","t4","t5","__iconNode","useState","Eye","EyeOff","useFormContext","PasswordInputProps","id","name","className","placeholder","autoComplete","PasswordInput","t0","$","_c","t1","t2","undefined","showPassword","setShowPassword","register","formState","fieldError","errors","errorMessage","message","inputClassName","t3","t4","Parameters","t5","t6","t7","Symbol","for","_temp","t8","t9","t10","t11","t12","t13","prev","useCallback","useEffect","useMemo","useState","clsx","useResendCountdown","t0","$","_c","seconds","undefined","remaining","setRemaining","isCountingDown","setIsCountingDown","t1","t2","timer","setInterval","prev","clearInterval","t3","nextSeconds","value","restart","minutes","Math","floor","secs","t4","toString","padStart","formatted","canResend","t5","ResendCodeButton","onResend","className","disabled","Promise","isSending","setIsSending","handleClick","isDisabled","showCountdown"],"sources":["../src/components/AuthLayout/index.tsx","../src/components/AppleSignInButton/index.tsx","../src/components/EmailInput/index.tsx","../src/utils/sanitizeNextPath.ts","../src/components/SignInForm/index.tsx","../src/components/SignUpForm/index.tsx","../src/components/RememberMeCheckbox/index.tsx","../../../node_modules/lucide-react/dist/esm/shared/src/utils/mergeClasses.js","../../../node_modules/lucide-react/dist/esm/shared/src/utils/toKebabCase.js","../../../node_modules/lucide-react/dist/esm/shared/src/utils/toCamelCase.js","../../../node_modules/lucide-react/dist/esm/shared/src/utils/toPascalCase.js","../../../node_modules/lucide-react/dist/esm/defaultAttributes.js","../../../node_modules/lucide-react/dist/esm/shared/src/utils/hasA11yProp.js","../../../node_modules/lucide-react/dist/esm/context.js","../../../node_modules/lucide-react/dist/esm/Icon.js","../../../node_modules/lucide-react/dist/esm/createLucideIcon.js","../../../node_modules/lucide-react/dist/esm/icons/eye-off.js","../../../node_modules/lucide-react/dist/esm/icons/eye.js","../src/components/PasswordInput/index.tsx","../src/components/ResendCodeButton/index.tsx"],"sourcesContent":["import * as React from \"react\"\nimport {Link, useLocation } from \"@rpcbase/router\"\n\n\nconst LINKS_REDIRECTION_MAP = {\n \"/auth/sign-in\": {\n \"title\": \"Sign Up\",\n \"location\": \"/auth/sign-up\"\n },\n \"/auth/sign-up\": {\n \"title\": \"Sign In\",\n \"location\": \"/auth/sign-in\"\n },\n \"/auth/logout-success\": {\n \"title\": \"Sign In\",\n \"location\": \"/auth/sign-in\"\n }\n}\n\ntype Pathname = keyof typeof LINKS_REDIRECTION_MAP\n\nexport const AuthLayout = ({\n sidePanel = null,\n children,\n}: {\n sidePanel: React.ReactElement | null\n children: React.ReactNode\n}) => {\n const location = useLocation()\n\n const linkTitle = LINKS_REDIRECTION_MAP[location.pathname as Pathname]?.title\n const linkLocation = LINKS_REDIRECTION_MAP[location.pathname as Pathname]?.location\n\n return (\n <div className=\"container relative hidden h-dvh flex-col items-center justify-center md:grid md:w-full lg:max-w-none lg:grid-cols-2 lg:px-0\">\n {/* Top-right redirection link */}\n {linkTitle && linkLocation ? (\n <Link\n className=\"inline-flex items-center justify-center gap-2 whitespace-nowrap rounded-md text-sm font-medium transition-colors focus-visible:outline-none focus-visible:ring-1 focus-visible:ring-ring disabled:pointer-events-none disabled:opacity-50 [&_svg]:pointer-events-none [&_svg]:size-4 [&_svg]:shrink-0 hover:bg-accent hover:text-accent-foreground h-9 px-4 py-2 absolute right-4 top-4 md:right-8 md:top-8\"\n to={linkLocation}\n >\n {linkTitle}\n </Link>\n ) : null}\n <div className=\"relative hidden h-full flex-col bg-muted p-10 text-white dark:border-r lg:flex\">\n {sidePanel}\n </div>\n <div className=\"mx-auto flex w-full flex-col justify-center gap-6 /*sm:w-[350px]*/\">\n {children}\n </div>\n </div>\n )\n}\n","import clsx from \"clsx\"\n\n\nexport const AppleSignInButton = ({\n onPress,\n className,\n}: {\n onPress: () => void;\n className?: string;\n}) => {\n\n return (\n <button\n onClick={onPress}\n className={clsx(`\n w-full\n bg-black text-white hover:bg-gray-800\n flex items-center justify-center\n px-6 py-2\n rounded-lg\n font-medium\n transition duration-150 ease-in-out\n focus:outline-none focus:ring-2 focus:ring-offset-2 focus:ring-black\n `, className)}\n >\n <svg\n className=\"w-5 h-5 mr-3\"\n xmlns=\"http://www.w3.org/2000/svg\"\n viewBox=\"0 0 24 24\"\n fill=\"white\"\n >\n <path d=\"M12.152 6.896c-.948 0-2.415-1.078-3.96-1.04-2.04.027-3.91 1.183-4.961 3.014-2.117 3.675-.539 9.103 1.519 12.09 1.013 1.454 2.208 3.09 3.792 3.039 1.52-.065 2.09-.987 3.935-.987 1.831 0 2.35.987 3.96.948 1.637-.026 2.676-1.48 3.676-2.948 1.156-1.688 1.636-3.325 1.662-3.415-.039-.013-3.182-1.221-3.22-4.857-.026-3.04 2.48-4.494 2.597-4.559-1.429-2.09-3.623-2.324-4.39-2.376-2-.156-3.675 1.09-4.61 1.09zM15.53 3.83c.843-1.012 1.4-2.427 1.245-3.83-1.207.052-2.662.805-3.532 1.818-.78.896-1.454 2.338-1.273 3.714 1.338.104 2.715-.688 3.559-1.701\" />\n </svg>\n <span>Continue with Apple</span>\n </button>\n )\n}\n","import {useFormContext} from \"@rpcbase/form\"\n\n\nexport const EmailInput = ({\n id,\n className,\n placeholder,\n}: {\n id: string\n className?: string\n placeholder?: string\n}) => {\n const {register, formState} = useFormContext()\n\n const error = formState.errors.email\n let errorMessage: string | undefined\n if (typeof error === \"string\") {\n errorMessage = error\n } else if (error && typeof error.message === \"string\") {\n errorMessage = error.message\n }\n\n return (\n <>\n <input\n id={id}\n type=\"email\"\n required\n autoComplete=\"email\"\n className={className}\n placeholder={placeholder}\n {...register(\"email\")}\n />\n {errorMessage ? (\n <p className=\"mt-1 -mb-2 text-sm/6 text-red-500\">{errorMessage}</p>\n ) : null}\n </>\n )\n}\n","const hasUnsafeNextPathChars = (value: string) => {\n for (let i = 0; i < value.length; i++) {\n const code = value.charCodeAt(i)\n if (code === 92 || code <= 31 || code === 127) return true\n }\n return false\n}\n\nexport const sanitizeNextPath = (raw: string | null) => {\n if (!raw) return null\n\n const nextPath = raw.trim()\n if (!nextPath) return null\n\n if (!nextPath.startsWith(\"/\") || nextPath.startsWith(\"//\")) {\n return null\n }\n\n if (hasUnsafeNextPathChars(nextPath)) {\n return null\n }\n\n try {\n const base = new URL(\"http://localhost\")\n const url = new URL(nextPath, base)\n if (url.origin !== base.origin) {\n return null\n }\n return `${url.pathname}${url.search}${url.hash}`\n } catch {\n return null\n }\n}\n\n","import { ReactNode } from \"react\"\nimport { useNavigate, useSearchParams } from \"@rpcbase/router\"\nimport { useForm, FormProvider, zodResolver } from \"@rpcbase/form\"\nimport type { SubmitHandler } from \"@rpcbase/form\"\nimport { z } from \"zod\"\n\nimport {requestSchema} from \"../../api/sign-in\"\nimport { sanitizeNextPath } from \"../../utils/sanitizeNextPath\"\n\n\ntype SignInFormValues = z.input<typeof requestSchema>\n\nexport const SignInForm = ({\n children,\n className\n}: {\n children: ReactNode,\n className?: string\n}) => {\n const navigate = useNavigate()\n const [searchParams] = useSearchParams()\n\n const methods = useForm<SignInFormValues>({\n defaultValues: {\n email: \"\",\n password: \"\",\n rememberMe: true,\n },\n navigationGuard: false,\n resolver: zodResolver(requestSchema)\n })\n\n const onSubmit: SubmitHandler<SignInFormValues> = async (data) => {\n methods.clearErrors(\"root\")\n\n try {\n const res = await fetch(\"/api/rb/auth/sign-in\", {\n method: \"POST\",\n headers: {\n \"Content-Type\": \"application/json\",\n },\n body: JSON.stringify(data),\n credentials: \"include\",\n })\n\n const json = await res.json().catch(() => null) as { success?: boolean; error?: string } | null\n\n if (!res.ok || !json?.success) {\n const message = json?.error === \"invalid_credentials\"\n ? \"Invalid email or password.\"\n : \"Sign-in failed. Please try again.\"\n methods.setError(\"root\", { type: \"server\", message })\n return\n }\n\n const nextPath = sanitizeNextPath(searchParams.get(\"next\")) ?? \"/\"\n navigate(nextPath, { replace: true })\n } catch (err) {\n methods.setError(\"root\", { type: \"server\", message: \"Network error. Please try again.\" })\n }\n }\n\n return (\n <FormProvider {...methods}>\n <form method=\"post\" noValidate className={className} onSubmit={methods.handleSubmit(onSubmit)}>\n {children}\n {methods.formState.errors.root?.message && (\n <p className=\"mt-2 text-sm text-red-600\" role=\"alert\">\n {methods.formState.errors.root.message}\n </p>\n )}\n </form>\n </FormProvider>\n )\n}\n","import {ReactNode, useState} from \"react\"\nimport { useNavigate } from \"@rpcbase/router\"\nimport { useForm, FormProvider, zodResolver } from \"@rpcbase/form\"\nimport type {SubmitHandler} from \"@rpcbase/form\"\nimport { z } from \"zod\"\n\nimport {requestSchema} from \"../../api/sign-up\"\n\n\ntype SignUpFormValues = z.input<typeof requestSchema>\n\n\nexport const SignUpForm = ({\n children,\n className,\n otpNextPath\n}: {\n children: ReactNode,\n className?: string\n otpNextPath?: string\n}) => {\n\n const navigate = useNavigate()\n\n const [serverMessage, setServerMessage] = useState<string | null>(null)\n const methods = useForm<SignUpFormValues>({\n defaultValues: {\n email: \"\",\n password: \"\",\n rememberMe: true,\n },\n navigationGuard: false,\n resolver: zodResolver(requestSchema)\n })\n\n const onSubmit: SubmitHandler<SignUpFormValues> = async (data) => {\n setServerMessage(null)\n methods.clearErrors(\"root\")\n\n try {\n const res = await fetch(\"/api/rb/auth/sign-up\", {\n method: \"POST\",\n headers: {\n \"Content-Type\": \"application/json\",\n },\n body: JSON.stringify(data),\n credentials: \"include\",\n })\n\n const json = await res.json()\n\n if (!res.ok) {\n const message = json.error === \"user_exists\"\n ? \"An account already exists with this email.\"\n : \"Sign-up failed. Please try again.\"\n methods.setError(\"root\", { type: \"server\", message })\n return\n }\n\n if (!json.success) {\n methods.setError(\"root\", { type: \"server\", message: \"Sign-up failed. Please try again.\" })\n return\n }\n\n const search = new URLSearchParams({ email: data.email })\n if (otpNextPath) {\n search.set(\"next\", otpNextPath)\n }\n navigate(`/auth/sign-up-otp?${search.toString()}`)\n setServerMessage(\"Account created. Check your inbox to verify your email.\")\n } catch (err) {\n methods.setError(\"root\", { type: \"server\", message: \"Network error. Please try again.\" })\n }\n }\n\n return (\n <FormProvider {...methods}>\n <form method=\"post\" noValidate className={className} onSubmit={methods.handleSubmit(onSubmit)}>\n {children}\n {methods.formState.errors.root?.message && (\n <p className=\"mt-2 text-sm text-red-600\" role=\"alert\">\n {methods.formState.errors.root.message}\n </p>\n )}\n {serverMessage && (\n <p className=\"mt-2 text-sm text-green-700\" role=\"status\">\n {serverMessage}\n </p>\n )}\n </form>\n </FormProvider>\n )\n}\n","import type { ElementType } from \"react\"\nimport {useFormContext} from \"@rpcbase/form\"\n\n\nexport const RememberMeCheckbox = ({\n label,\n as: Component = \"input\"\n}: {\n label: string,\n as?: ElementType\n}) => {\n const {register} = useFormContext()\n\n return (\n <>\n <Component\n id=\"rememberMe\"\n {...register(\"rememberMe\")}\n />\n <label\n htmlFor={\"rememberMe\"}\n className=\"pl-2 block text-sm/6 text-gray-900\"\n >\n {label}\n </label>\n </>\n )\n}\n","/**\n * @license lucide-react v1.0.1 - ISC\n *\n * This source code is licensed under the ISC license.\n * See the LICENSE file in the root directory of this source tree.\n */\n\nconst mergeClasses = (...classes) => classes.filter((className, index, array) => {\n return Boolean(className) && className.trim() !== \"\" && array.indexOf(className) === index;\n}).join(\" \").trim();\n\nexport { mergeClasses };\n//# sourceMappingURL=mergeClasses.js.map\n","/**\n * @license lucide-react v1.0.1 - ISC\n *\n * This source code is licensed under the ISC license.\n * See the LICENSE file in the root directory of this source tree.\n */\n\nconst toKebabCase = (string) => string.replace(/([a-z0-9])([A-Z])/g, \"$1-$2\").toLowerCase();\n\nexport { toKebabCase };\n//# sourceMappingURL=toKebabCase.js.map\n","/**\n * @license lucide-react v1.0.1 - ISC\n *\n * This source code is licensed under the ISC license.\n * See the LICENSE file in the root directory of this source tree.\n */\n\nconst toCamelCase = (string) => string.replace(\n /^([A-Z])|[\\s-_]+(\\w)/g,\n (match, p1, p2) => p2 ? p2.toUpperCase() : p1.toLowerCase()\n);\n\nexport { toCamelCase };\n//# sourceMappingURL=toCamelCase.js.map\n","/**\n * @license lucide-react v1.0.1 - ISC\n *\n * This source code is licensed under the ISC license.\n * See the LICENSE file in the root directory of this source tree.\n */\n\nimport { toCamelCase } from './toCamelCase.js';\n\nconst toPascalCase = (string) => {\n const camelCase = toCamelCase(string);\n return camelCase.charAt(0).toUpperCase() + camelCase.slice(1);\n};\n\nexport { toPascalCase };\n//# sourceMappingURL=toPascalCase.js.map\n","/**\n * @license lucide-react v1.0.1 - ISC\n *\n * This source code is licensed under the ISC license.\n * See the LICENSE file in the root directory of this source tree.\n */\n\nvar defaultAttributes = {\n xmlns: \"http://www.w3.org/2000/svg\",\n width: 24,\n height: 24,\n viewBox: \"0 0 24 24\",\n fill: \"none\",\n stroke: \"currentColor\",\n strokeWidth: 2,\n strokeLinecap: \"round\",\n strokeLinejoin: \"round\"\n};\n\nexport { defaultAttributes as default };\n//# sourceMappingURL=defaultAttributes.js.map\n","/**\n * @license lucide-react v1.0.1 - ISC\n *\n * This source code is licensed under the ISC license.\n * See the LICENSE file in the root directory of this source tree.\n */\n\nconst hasA11yProp = (props) => {\n for (const prop in props) {\n if (prop.startsWith(\"aria-\") || prop === \"role\" || prop === \"title\") {\n return true;\n }\n }\n return false;\n};\n\nexport { hasA11yProp };\n//# sourceMappingURL=hasA11yProp.js.map\n","\"use strict\";\n\"use client\";\n/**\n * @license lucide-react v1.0.1 - ISC\n *\n * This source code is licensed under the ISC license.\n * See the LICENSE file in the root directory of this source tree.\n */\n\nimport { createContext, useContext, useMemo, createElement } from 'react';\n\nconst LucideContext = createContext({});\nfunction LucideProvider({\n children,\n size,\n color,\n strokeWidth,\n absoluteStrokeWidth,\n className\n}) {\n const value = useMemo(\n () => ({\n size,\n color,\n strokeWidth,\n absoluteStrokeWidth,\n className\n }),\n [size, color, strokeWidth, absoluteStrokeWidth, className]\n );\n return createElement(LucideContext.Provider, { value }, children);\n}\nconst useLucideContext = () => useContext(LucideContext);\n\nexport { LucideProvider, useLucideContext };\n//# sourceMappingURL=context.js.map\n","\"use strict\";\n\"use client\";\n/**\n * @license lucide-react v1.0.1 - ISC\n *\n * This source code is licensed under the ISC license.\n * See the LICENSE file in the root directory of this source tree.\n */\n\nimport { forwardRef, createElement } from 'react';\nimport defaultAttributes from './defaultAttributes.js';\nimport { hasA11yProp } from './shared/src/utils/hasA11yProp.js';\nimport { mergeClasses } from './shared/src/utils/mergeClasses.js';\nimport { useLucideContext } from './context.js';\n\nconst Icon = forwardRef(\n ({ color, size, strokeWidth, absoluteStrokeWidth, className = \"\", children, iconNode, ...rest }, ref) => {\n const {\n size: contextSize = 24,\n strokeWidth: contextStrokeWidth = 2,\n absoluteStrokeWidth: contextAbsoluteStrokeWidth = false,\n color: contextColor = \"currentColor\",\n className: contextClass = \"\"\n } = useLucideContext() ?? {};\n const calculatedStrokeWidth = absoluteStrokeWidth ?? contextAbsoluteStrokeWidth ? Number(strokeWidth ?? contextStrokeWidth) * 24 / Number(size ?? contextSize) : strokeWidth ?? contextStrokeWidth;\n return createElement(\n \"svg\",\n {\n ref,\n ...defaultAttributes,\n width: size ?? contextSize ?? defaultAttributes.width,\n height: size ?? contextSize ?? defaultAttributes.height,\n stroke: color ?? contextColor,\n strokeWidth: calculatedStrokeWidth,\n className: mergeClasses(\"lucide\", contextClass, className),\n ...!children && !hasA11yProp(rest) && { \"aria-hidden\": \"true\" },\n ...rest\n },\n [\n ...iconNode.map(([tag, attrs]) => createElement(tag, attrs)),\n ...Array.isArray(children) ? children : [children]\n ]\n );\n }\n);\n\nexport { Icon as default };\n//# sourceMappingURL=Icon.js.map\n","/**\n * @license lucide-react v1.0.1 - ISC\n *\n * This source code is licensed under the ISC license.\n * See the LICENSE file in the root directory of this source tree.\n */\n\nimport { forwardRef, createElement } from 'react';\nimport { mergeClasses } from './shared/src/utils/mergeClasses.js';\nimport { toKebabCase } from './shared/src/utils/toKebabCase.js';\nimport { toPascalCase } from './shared/src/utils/toPascalCase.js';\nimport Icon from './Icon.js';\n\nconst createLucideIcon = (iconName, iconNode) => {\n const Component = forwardRef(\n ({ className, ...props }, ref) => createElement(Icon, {\n ref,\n iconNode,\n className: mergeClasses(\n `lucide-${toKebabCase(toPascalCase(iconName))}`,\n `lucide-${iconName}`,\n className\n ),\n ...props\n })\n );\n Component.displayName = toPascalCase(iconName);\n return Component;\n};\n\nexport { createLucideIcon as default };\n//# sourceMappingURL=createLucideIcon.js.map\n","/**\n * @license lucide-react v1.0.1 - ISC\n *\n * This source code is licensed under the ISC license.\n * See the LICENSE file in the root directory of this source tree.\n */\n\nimport createLucideIcon from '../createLucideIcon.js';\n\nconst __iconNode = [\n [\n \"path\",\n {\n d: \"M10.733 5.076a10.744 10.744 0 0 1 11.205 6.575 1 1 0 0 1 0 .696 10.747 10.747 0 0 1-1.444 2.49\",\n key: \"ct8e1f\"\n }\n ],\n [\"path\", { d: \"M14.084 14.158a3 3 0 0 1-4.242-4.242\", key: \"151rxh\" }],\n [\n \"path\",\n {\n d: \"M17.479 17.499a10.75 10.75 0 0 1-15.417-5.151 1 1 0 0 1 0-.696 10.75 10.75 0 0 1 4.446-5.143\",\n key: \"13bj9a\"\n }\n ],\n [\"path\", { d: \"m2 2 20 20\", key: \"1ooewy\" }]\n];\nconst EyeOff = createLucideIcon(\"eye-off\", __iconNode);\n\nexport { __iconNode, EyeOff as default };\n//# sourceMappingURL=eye-off.js.map\n","/**\n * @license lucide-react v1.0.1 - ISC\n *\n * This source code is licensed under the ISC license.\n * See the LICENSE file in the root directory of this source tree.\n */\n\nimport createLucideIcon from '../createLucideIcon.js';\n\nconst __iconNode = [\n [\n \"path\",\n {\n d: \"M2.062 12.348a1 1 0 0 1 0-.696 10.75 10.75 0 0 1 19.876 0 1 1 0 0 1 0 .696 10.75 10.75 0 0 1-19.876 0\",\n key: \"1nclc0\"\n }\n ],\n [\"circle\", { cx: \"12\", cy: \"12\", r: \"3\", key: \"1v7zrd\" }]\n];\nconst Eye = createLucideIcon(\"eye\", __iconNode);\n\nexport { __iconNode, Eye as default };\n//# sourceMappingURL=eye.js.map\n","import { useState } from \"react\"\nimport { Eye, EyeOff } from \"lucide-react\"\nimport { useFormContext } from \"@rpcbase/form\"\n\n\ntype PasswordInputProps = {\n id: string\n name?: string\n className?: string\n placeholder?: string\n autoComplete?: string\n}\n\nexport const PasswordInput = ({\n id,\n name = \"password\",\n className,\n placeholder,\n autoComplete = \"current-password\",\n}: PasswordInputProps) => {\n const [showPassword, setShowPassword] = useState(false)\n const { register, formState } = useFormContext()\n\n const fieldError = formState.errors[name as keyof typeof formState.errors]\n const errorMessage =\n typeof fieldError === \"string\"\n ? fieldError\n : typeof fieldError?.message === \"string\"\n ? fieldError.message\n : undefined\n\n const inputClassName = className ? `${className} pr-11` : \"pr-11\"\n\n return (\n <>\n <div className=\"relative\">\n <input\n id={id}\n type={showPassword ? \"text\" : \"password\"}\n autoComplete={autoComplete}\n className={inputClassName}\n placeholder={placeholder}\n {...register(name as Parameters<typeof register>[0])}\n />\n <button\n type=\"button\"\n className=\"absolute inset-y-0 right-0 flex items-center pr-3 text-gray-500\"\n onClick={() => setShowPassword((prev) => !prev)}\n aria-label={showPassword ? \"Hide characters\" : \"Show characters\"}\n >\n {showPassword ? (\n <EyeOff className=\"h-5 w-5\" aria-hidden />\n ) : (\n <Eye className=\"h-5 w-5\" aria-hidden />\n )}\n </button>\n </div>\n {errorMessage ? (\n <p className=\"mt-1 -mb-2 text-sm/6 text-red-500\">{errorMessage}</p>\n ) : null}\n </>\n )\n}\n","import {useCallback, useEffect, useMemo, useState} from \"react\"\nimport clsx from \"clsx\"\n\n\nexport const useResendCountdown = (seconds = 60) => {\n const [remaining, setRemaining] = useState(seconds)\n const [isCountingDown, setIsCountingDown] = useState(true)\n\n useEffect(() => {\n if (!isCountingDown) return\n\n const timer = setInterval(() => {\n setRemaining((prev) => {\n if (prev <= 1) {\n setIsCountingDown(false)\n return seconds\n }\n return prev - 1\n })\n }, 1000)\n\n return () => clearInterval(timer)\n }, [isCountingDown, seconds])\n\n const restart = useCallback((nextSeconds?: number) => {\n const value = typeof nextSeconds === \"number\" ? nextSeconds : seconds\n setRemaining(value)\n setIsCountingDown(true)\n }, [seconds])\n\n const formatted = useMemo(() => {\n const minutes = Math.floor(remaining / 60)\n const secs = remaining % 60\n return `${minutes}:${secs.toString().padStart(2, \"0\")}`\n }, [remaining])\n\n const canResend = !isCountingDown\n\n return {remaining, formatted, isCountingDown, canResend, restart}\n}\n\n\nexport const ResendCodeButton = ({\n seconds = 60,\n onResend,\n className,\n disabled,\n}: {\n seconds?: number\n onResend?: () => Promise<void> | void\n className?: string\n disabled?: boolean\n}) => {\n const [isSending, setIsSending] = useState(false)\n const {formatted, isCountingDown, restart, canResend} = useResendCountdown(seconds)\n\n const handleClick = async () => {\n if (!canResend || isSending || disabled) return\n\n try {\n setIsSending(true)\n if (onResend) {\n await onResend()\n }\n } finally {\n restart()\n setIsSending(false)\n }\n }\n\n const isDisabled = disabled || isCountingDown || isSending\n const showCountdown = isDisabled && (isCountingDown || isSending)\n\n return (\n <span className=\"inline-flex items-center gap-2\">\n <button\n type=\"button\"\n onClick={handleClick}\n disabled={isDisabled}\n aria-label=\"Resend code\"\n className={clsx(\n \"text-sm font-semibold text-sky-600 hover:underline disabled:cursor-not-allowed disabled:text-gray-400\",\n className\n )}\n >\n Resend code\n </button>\n {showCountdown ? (\n <span\n data-testid=\"resend-countdown\"\n className=\"text-sm text-gray-500\"\n aria-live=\"polite\"\n >\n ({formatted})\n </span>\n ) : null}\n </span>\n )\n}\n"],"x_google_ignoreList":[7,8,9,10,11,12,13,14,15,16,17],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"index.js","names":["React","Link","useLocation","LINKS_REDIRECTION_MAP","Pathname","AuthLayout","t0","$","_c","sidePanel","t1","children","undefined","location","linkTitle","pathname","title","linkLocation","t2","t3","t4","t5","clsx","AppleSignInButton","t0","$","_c","onPress","className","t1","t2","t3","Symbol","for","t4","useFormContext","EmailInput","t0","$","_c","id","className","placeholder","register","formState","error","errors","email","errorMessage","message","t1","t2","t3","t4","hasUnsafeNextPathChars","value","i","length","code","charCodeAt","sanitizeNextPath","raw","nextPath","trim","startsWith","base","URL","url","origin","pathname","search","hash","ReactNode","useNavigate","useSearchParams","useForm","FormProvider","zodResolver","SubmitHandler","z","requestSchema","sanitizeNextPath","SignInFormValues","input","SignInForm","children","className","navigate","searchParams","methods","defaultValues","email","password","rememberMe","navigationGuard","resolver","onSubmit","data","clearErrors","res","fetch","method","headers","body","JSON","stringify","credentials","json","catch","success","error","ok","message","setError","type","nextPath","get","replace","err","handleSubmit","formState","errors","root","ReactNode","useState","useNavigate","useForm","FormProvider","zodResolver","SubmitHandler","z","requestSchema","SignUpFormValues","input","SignUpForm","children","className","otpNextPath","navigate","serverMessage","setServerMessage","methods","defaultValues","email","password","rememberMe","navigationGuard","resolver","onSubmit","data","clearErrors","res","fetch","method","headers","body","JSON","stringify","credentials","json","ok","message","error","setError","type","success","search","URLSearchParams","set","toString","err","handleSubmit","formState","errors","root","ElementType","useFormContext","RememberMeCheckbox","t0","$","_c","label","as","t1","Component","undefined","register","t2","t3","t4","t5","__iconNode","useState","Eye","EyeOff","useFormContext","PasswordInputProps","id","name","className","placeholder","autoComplete","PasswordInput","t0","$","_c","t1","t2","undefined","showPassword","setShowPassword","register","formState","fieldError","errors","errorMessage","message","inputClassName","t3","t4","Parameters","t5","t6","t7","Symbol","for","_temp","t8","t9","t10","t11","t12","t13","prev","useCallback","useEffect","useMemo","useState","clsx","useResendCountdown","t0","$","_c","seconds","undefined","remaining","setRemaining","isCountingDown","setIsCountingDown","t1","t2","timer","setInterval","prev","clearInterval","t3","nextSeconds","value","restart","minutes","Math","floor","secs","t4","toString","padStart","formatted","canResend","t5","ResendCodeButton","onResend","className","disabled","Promise","isSending","setIsSending","handleClick","isDisabled","showCountdown"],"sources":["../src/components/AuthLayout/index.tsx","../src/components/AppleSignInButton/index.tsx","../src/components/EmailInput/index.tsx","../src/utils/sanitizeNextPath.ts","../src/components/SignInForm/index.tsx","../src/components/SignUpForm/index.tsx","../src/components/RememberMeCheckbox/index.tsx","../../../node_modules/lucide-react/dist/esm/shared/src/utils/mergeClasses.js","../../../node_modules/lucide-react/dist/esm/shared/src/utils/toKebabCase.js","../../../node_modules/lucide-react/dist/esm/shared/src/utils/toCamelCase.js","../../../node_modules/lucide-react/dist/esm/shared/src/utils/toPascalCase.js","../../../node_modules/lucide-react/dist/esm/defaultAttributes.js","../../../node_modules/lucide-react/dist/esm/shared/src/utils/hasA11yProp.js","../../../node_modules/lucide-react/dist/esm/context.js","../../../node_modules/lucide-react/dist/esm/Icon.js","../../../node_modules/lucide-react/dist/esm/createLucideIcon.js","../../../node_modules/lucide-react/dist/esm/icons/eye-off.js","../../../node_modules/lucide-react/dist/esm/icons/eye.js","../src/components/PasswordInput/index.tsx","../src/components/ResendCodeButton/index.tsx"],"sourcesContent":["import * as React from \"react\"\nimport {Link, useLocation } from \"@rpcbase/router\"\n\n\nconst LINKS_REDIRECTION_MAP = {\n \"/auth/sign-in\": {\n \"title\": \"Sign Up\",\n \"location\": \"/auth/sign-up\"\n },\n \"/auth/sign-up\": {\n \"title\": \"Sign In\",\n \"location\": \"/auth/sign-in\"\n },\n \"/auth/logout-success\": {\n \"title\": \"Sign In\",\n \"location\": \"/auth/sign-in\"\n }\n}\n\ntype Pathname = keyof typeof LINKS_REDIRECTION_MAP\n\nexport const AuthLayout = ({\n sidePanel = null,\n children,\n}: {\n sidePanel: React.ReactElement | null\n children: React.ReactNode\n}) => {\n const location = useLocation()\n\n const linkTitle = LINKS_REDIRECTION_MAP[location.pathname as Pathname]?.title\n const linkLocation = LINKS_REDIRECTION_MAP[location.pathname as Pathname]?.location\n\n return (\n <div className=\"container relative hidden h-dvh flex-col items-center justify-center md:grid md:w-full lg:max-w-none lg:grid-cols-2 lg:px-0\">\n {/* Top-right redirection link */}\n {linkTitle && linkLocation ? (\n <Link\n className=\"inline-flex items-center justify-center gap-2 whitespace-nowrap rounded-md text-sm font-medium transition-colors focus-visible:outline-none focus-visible:ring-1 focus-visible:ring-ring disabled:pointer-events-none disabled:opacity-50 [&_svg]:pointer-events-none [&_svg]:size-4 [&_svg]:shrink-0 hover:bg-accent hover:text-accent-foreground h-9 px-4 py-2 absolute right-4 top-4 md:right-8 md:top-8\"\n to={linkLocation}\n >\n {linkTitle}\n </Link>\n ) : null}\n <div className=\"relative hidden h-full flex-col bg-muted p-10 text-white dark:border-r lg:flex\">\n {sidePanel}\n </div>\n <div className=\"mx-auto flex w-full flex-col justify-center gap-6 /*sm:w-[350px]*/\">\n {children}\n </div>\n </div>\n )\n}\n","import clsx from \"clsx\"\n\n\nexport const AppleSignInButton = ({\n onPress,\n className,\n}: {\n onPress: () => void;\n className?: string;\n}) => {\n\n return (\n <button\n onClick={onPress}\n className={clsx(`\n w-full\n bg-black text-white hover:bg-gray-800\n flex items-center justify-center\n px-6 py-2\n rounded-lg\n font-medium\n transition duration-150 ease-in-out\n focus:outline-none focus:ring-2 focus:ring-offset-2 focus:ring-black\n `, className)}\n >\n <svg\n className=\"w-5 h-5 mr-3\"\n xmlns=\"http://www.w3.org/2000/svg\"\n viewBox=\"0 0 24 24\"\n fill=\"white\"\n >\n <path d=\"M12.152 6.896c-.948 0-2.415-1.078-3.96-1.04-2.04.027-3.91 1.183-4.961 3.014-2.117 3.675-.539 9.103 1.519 12.09 1.013 1.454 2.208 3.09 3.792 3.039 1.52-.065 2.09-.987 3.935-.987 1.831 0 2.35.987 3.96.948 1.637-.026 2.676-1.48 3.676-2.948 1.156-1.688 1.636-3.325 1.662-3.415-.039-.013-3.182-1.221-3.22-4.857-.026-3.04 2.48-4.494 2.597-4.559-1.429-2.09-3.623-2.324-4.39-2.376-2-.156-3.675 1.09-4.61 1.09zM15.53 3.83c.843-1.012 1.4-2.427 1.245-3.83-1.207.052-2.662.805-3.532 1.818-.78.896-1.454 2.338-1.273 3.714 1.338.104 2.715-.688 3.559-1.701\" />\n </svg>\n <span>Continue with Apple</span>\n </button>\n )\n}\n","import {useFormContext} from \"@rpcbase/form\"\n\n\nexport const EmailInput = ({\n id,\n className,\n placeholder,\n}: {\n id: string\n className?: string\n placeholder?: string\n}) => {\n const {register, formState} = useFormContext()\n\n const error = formState.errors.email\n let errorMessage: string | undefined\n if (typeof error === \"string\") {\n errorMessage = error\n } else if (error && typeof error.message === \"string\") {\n errorMessage = error.message\n }\n\n return (\n <>\n <input\n id={id}\n type=\"email\"\n required\n autoComplete=\"email\"\n className={className}\n placeholder={placeholder}\n {...register(\"email\")}\n />\n {errorMessage ? (\n <p className=\"mt-1 -mb-2 text-sm/6 text-red-500\">{errorMessage}</p>\n ) : null}\n </>\n )\n}\n","const hasUnsafeNextPathChars = (value: string) => {\n for (let i = 0; i < value.length; i++) {\n const code = value.charCodeAt(i)\n if (code === 92 || code <= 31 || code === 127) return true\n }\n return false\n}\n\nexport const sanitizeNextPath = (raw: string | null) => {\n if (!raw) return null\n\n const nextPath = raw.trim()\n if (!nextPath) return null\n\n if (!nextPath.startsWith(\"/\") || nextPath.startsWith(\"//\")) {\n return null\n }\n\n if (hasUnsafeNextPathChars(nextPath)) {\n return null\n }\n\n try {\n const base = new URL(\"http://localhost\")\n const url = new URL(nextPath, base)\n if (url.origin !== base.origin) {\n return null\n }\n return `${url.pathname}${url.search}${url.hash}`\n } catch {\n return null\n }\n}\n\n","import { ReactNode } from \"react\"\nimport { useNavigate, useSearchParams } from \"@rpcbase/router\"\nimport { useForm, FormProvider, zodResolver } from \"@rpcbase/form\"\nimport type { SubmitHandler } from \"@rpcbase/form\"\nimport { z } from \"zod\"\n\nimport {requestSchema} from \"../../api/sign-in\"\nimport { sanitizeNextPath } from \"../../utils/sanitizeNextPath\"\n\n\ntype SignInFormValues = z.input<typeof requestSchema>\n\nexport const SignInForm = ({\n children,\n className\n}: {\n children: ReactNode,\n className?: string\n}) => {\n const navigate = useNavigate()\n const [searchParams] = useSearchParams()\n\n const methods = useForm<SignInFormValues>({\n defaultValues: {\n email: \"\",\n password: \"\",\n rememberMe: true,\n },\n navigationGuard: false,\n resolver: zodResolver(requestSchema)\n })\n\n const onSubmit: SubmitHandler<SignInFormValues> = async (data) => {\n methods.clearErrors(\"root\")\n\n try {\n const res = await fetch(\"/api/rb/auth/sign-in\", {\n method: \"POST\",\n headers: {\n \"Content-Type\": \"application/json\",\n },\n body: JSON.stringify(data),\n credentials: \"include\",\n })\n\n const json = await res.json().catch(() => null) as { success?: boolean; error?: string } | null\n\n if (!res.ok || !json?.success) {\n const message = json?.error === \"invalid_credentials\"\n ? \"Invalid email or password.\"\n : \"Sign-in failed. Please try again.\"\n methods.setError(\"root\", { type: \"server\", message })\n return\n }\n\n const nextPath = sanitizeNextPath(searchParams.get(\"next\")) ?? \"/\"\n navigate(nextPath, { replace: true })\n } catch (err) {\n methods.setError(\"root\", { type: \"server\", message: \"Network error. Please try again.\" })\n }\n }\n\n return (\n <FormProvider {...methods}>\n <form method=\"post\" noValidate className={className} onSubmit={methods.handleSubmit(onSubmit)}>\n {children}\n {methods.formState.errors.root?.message && (\n <p className=\"mt-2 text-sm text-red-600\" role=\"alert\">\n {methods.formState.errors.root.message}\n </p>\n )}\n </form>\n </FormProvider>\n )\n}\n","import {ReactNode, useState} from \"react\"\nimport { useNavigate } from \"@rpcbase/router\"\nimport { useForm, FormProvider, zodResolver } from \"@rpcbase/form\"\nimport type {SubmitHandler} from \"@rpcbase/form\"\nimport { z } from \"zod\"\n\nimport {requestSchema} from \"../../api/sign-up\"\n\n\ntype SignUpFormValues = z.input<typeof requestSchema>\n\n\nexport const SignUpForm = ({\n children,\n className,\n otpNextPath\n}: {\n children: ReactNode,\n className?: string\n otpNextPath?: string\n}) => {\n\n const navigate = useNavigate()\n\n const [serverMessage, setServerMessage] = useState<string | null>(null)\n const methods = useForm<SignUpFormValues>({\n defaultValues: {\n email: \"\",\n password: \"\",\n rememberMe: true,\n },\n navigationGuard: false,\n resolver: zodResolver(requestSchema)\n })\n\n const onSubmit: SubmitHandler<SignUpFormValues> = async (data) => {\n setServerMessage(null)\n methods.clearErrors(\"root\")\n\n try {\n const res = await fetch(\"/api/rb/auth/sign-up\", {\n method: \"POST\",\n headers: {\n \"Content-Type\": \"application/json\",\n },\n body: JSON.stringify(data),\n credentials: \"include\",\n })\n\n const json = await res.json()\n\n if (!res.ok) {\n const message = json.error === \"user_exists\"\n ? \"An account already exists with this email.\"\n : \"Sign-up failed. Please try again.\"\n methods.setError(\"root\", { type: \"server\", message })\n return\n }\n\n if (!json.success) {\n methods.setError(\"root\", { type: \"server\", message: \"Sign-up failed. Please try again.\" })\n return\n }\n\n const search = new URLSearchParams({ email: data.email })\n if (otpNextPath) {\n search.set(\"next\", otpNextPath)\n }\n navigate(`/auth/sign-up-otp?${search.toString()}`)\n setServerMessage(\"Account created. Check your inbox to verify your email.\")\n } catch (err) {\n methods.setError(\"root\", { type: \"server\", message: \"Network error. Please try again.\" })\n }\n }\n\n return (\n <FormProvider {...methods}>\n <form method=\"post\" noValidate className={className} onSubmit={methods.handleSubmit(onSubmit)}>\n {children}\n {methods.formState.errors.root?.message && (\n <p className=\"mt-2 text-sm text-red-600\" role=\"alert\">\n {methods.formState.errors.root.message}\n </p>\n )}\n {serverMessage && (\n <p className=\"mt-2 text-sm text-green-700\" role=\"status\">\n {serverMessage}\n </p>\n )}\n </form>\n </FormProvider>\n )\n}\n","import type { ElementType } from \"react\"\nimport {useFormContext} from \"@rpcbase/form\"\n\n\nexport const RememberMeCheckbox = ({\n label,\n as: Component = \"input\"\n}: {\n label: string,\n as?: ElementType\n}) => {\n const {register} = useFormContext()\n\n return (\n <>\n <Component\n id=\"rememberMe\"\n {...register(\"rememberMe\")}\n />\n <label\n htmlFor={\"rememberMe\"}\n className=\"pl-2 block text-sm/6 text-gray-900\"\n >\n {label}\n </label>\n </>\n )\n}\n","/**\n * @license lucide-react v1.7.0 - ISC\n *\n * This source code is licensed under the ISC license.\n * See the LICENSE file in the root directory of this source tree.\n */\n\nconst mergeClasses = (...classes) => classes.filter((className, index, array) => {\n return Boolean(className) && className.trim() !== \"\" && array.indexOf(className) === index;\n}).join(\" \").trim();\n\nexport { mergeClasses };\n//# sourceMappingURL=mergeClasses.js.map\n","/**\n * @license lucide-react v1.7.0 - ISC\n *\n * This source code is licensed under the ISC license.\n * See the LICENSE file in the root directory of this source tree.\n */\n\nconst toKebabCase = (string) => string.replace(/([a-z0-9])([A-Z])/g, \"$1-$2\").toLowerCase();\n\nexport { toKebabCase };\n//# sourceMappingURL=toKebabCase.js.map\n","/**\n * @license lucide-react v1.7.0 - ISC\n *\n * This source code is licensed under the ISC license.\n * See the LICENSE file in the root directory of this source tree.\n */\n\nconst toCamelCase = (string) => string.replace(\n /^([A-Z])|[\\s-_]+(\\w)/g,\n (match, p1, p2) => p2 ? p2.toUpperCase() : p1.toLowerCase()\n);\n\nexport { toCamelCase };\n//# sourceMappingURL=toCamelCase.js.map\n","/**\n * @license lucide-react v1.7.0 - ISC\n *\n * This source code is licensed under the ISC license.\n * See the LICENSE file in the root directory of this source tree.\n */\n\nimport { toCamelCase } from './toCamelCase.js';\n\nconst toPascalCase = (string) => {\n const camelCase = toCamelCase(string);\n return camelCase.charAt(0).toUpperCase() + camelCase.slice(1);\n};\n\nexport { toPascalCase };\n//# sourceMappingURL=toPascalCase.js.map\n","/**\n * @license lucide-react v1.7.0 - ISC\n *\n * This source code is licensed under the ISC license.\n * See the LICENSE file in the root directory of this source tree.\n */\n\nvar defaultAttributes = {\n xmlns: \"http://www.w3.org/2000/svg\",\n width: 24,\n height: 24,\n viewBox: \"0 0 24 24\",\n fill: \"none\",\n stroke: \"currentColor\",\n strokeWidth: 2,\n strokeLinecap: \"round\",\n strokeLinejoin: \"round\"\n};\n\nexport { defaultAttributes as default };\n//# sourceMappingURL=defaultAttributes.js.map\n","/**\n * @license lucide-react v1.7.0 - ISC\n *\n * This source code is licensed under the ISC license.\n * See the LICENSE file in the root directory of this source tree.\n */\n\nconst hasA11yProp = (props) => {\n for (const prop in props) {\n if (prop.startsWith(\"aria-\") || prop === \"role\" || prop === \"title\") {\n return true;\n }\n }\n return false;\n};\n\nexport { hasA11yProp };\n//# sourceMappingURL=hasA11yProp.js.map\n","\"use strict\";\n\"use client\";\n/**\n * @license lucide-react v1.7.0 - ISC\n *\n * This source code is licensed under the ISC license.\n * See the LICENSE file in the root directory of this source tree.\n */\n\nimport { createContext, useContext, useMemo, createElement } from 'react';\n\nconst LucideContext = createContext({});\nfunction LucideProvider({\n children,\n size,\n color,\n strokeWidth,\n absoluteStrokeWidth,\n className\n}) {\n const value = useMemo(\n () => ({\n size,\n color,\n strokeWidth,\n absoluteStrokeWidth,\n className\n }),\n [size, color, strokeWidth, absoluteStrokeWidth, className]\n );\n return createElement(LucideContext.Provider, { value }, children);\n}\nconst useLucideContext = () => useContext(LucideContext);\n\nexport { LucideProvider, useLucideContext };\n//# sourceMappingURL=context.js.map\n","\"use strict\";\n\"use client\";\n/**\n * @license lucide-react v1.7.0 - ISC\n *\n * This source code is licensed under the ISC license.\n * See the LICENSE file in the root directory of this source tree.\n */\n\nimport { forwardRef, createElement } from 'react';\nimport defaultAttributes from './defaultAttributes.js';\nimport { hasA11yProp } from './shared/src/utils/hasA11yProp.js';\nimport { mergeClasses } from './shared/src/utils/mergeClasses.js';\nimport { useLucideContext } from './context.js';\n\nconst Icon = forwardRef(\n ({ color, size, strokeWidth, absoluteStrokeWidth, className = \"\", children, iconNode, ...rest }, ref) => {\n const {\n size: contextSize = 24,\n strokeWidth: contextStrokeWidth = 2,\n absoluteStrokeWidth: contextAbsoluteStrokeWidth = false,\n color: contextColor = \"currentColor\",\n className: contextClass = \"\"\n } = useLucideContext() ?? {};\n const calculatedStrokeWidth = absoluteStrokeWidth ?? contextAbsoluteStrokeWidth ? Number(strokeWidth ?? contextStrokeWidth) * 24 / Number(size ?? contextSize) : strokeWidth ?? contextStrokeWidth;\n return createElement(\n \"svg\",\n {\n ref,\n ...defaultAttributes,\n width: size ?? contextSize ?? defaultAttributes.width,\n height: size ?? contextSize ?? defaultAttributes.height,\n stroke: color ?? contextColor,\n strokeWidth: calculatedStrokeWidth,\n className: mergeClasses(\"lucide\", contextClass, className),\n ...!children && !hasA11yProp(rest) && { \"aria-hidden\": \"true\" },\n ...rest\n },\n [\n ...iconNode.map(([tag, attrs]) => createElement(tag, attrs)),\n ...Array.isArray(children) ? children : [children]\n ]\n );\n }\n);\n\nexport { Icon as default };\n//# sourceMappingURL=Icon.js.map\n","/**\n * @license lucide-react v1.7.0 - ISC\n *\n * This source code is licensed under the ISC license.\n * See the LICENSE file in the root directory of this source tree.\n */\n\nimport { forwardRef, createElement } from 'react';\nimport { mergeClasses } from './shared/src/utils/mergeClasses.js';\nimport { toKebabCase } from './shared/src/utils/toKebabCase.js';\nimport { toPascalCase } from './shared/src/utils/toPascalCase.js';\nimport Icon from './Icon.js';\n\nconst createLucideIcon = (iconName, iconNode) => {\n const Component = forwardRef(\n ({ className, ...props }, ref) => createElement(Icon, {\n ref,\n iconNode,\n className: mergeClasses(\n `lucide-${toKebabCase(toPascalCase(iconName))}`,\n `lucide-${iconName}`,\n className\n ),\n ...props\n })\n );\n Component.displayName = toPascalCase(iconName);\n return Component;\n};\n\nexport { createLucideIcon as default };\n//# sourceMappingURL=createLucideIcon.js.map\n","/**\n * @license lucide-react v1.7.0 - ISC\n *\n * This source code is licensed under the ISC license.\n * See the LICENSE file in the root directory of this source tree.\n */\n\nimport createLucideIcon from '../createLucideIcon.js';\n\nconst __iconNode = [\n [\n \"path\",\n {\n d: \"M10.733 5.076a10.744 10.744 0 0 1 11.205 6.575 1 1 0 0 1 0 .696 10.747 10.747 0 0 1-1.444 2.49\",\n key: \"ct8e1f\"\n }\n ],\n [\"path\", { d: \"M14.084 14.158a3 3 0 0 1-4.242-4.242\", key: \"151rxh\" }],\n [\n \"path\",\n {\n d: \"M17.479 17.499a10.75 10.75 0 0 1-15.417-5.151 1 1 0 0 1 0-.696 10.75 10.75 0 0 1 4.446-5.143\",\n key: \"13bj9a\"\n }\n ],\n [\"path\", { d: \"m2 2 20 20\", key: \"1ooewy\" }]\n];\nconst EyeOff = createLucideIcon(\"eye-off\", __iconNode);\n\nexport { __iconNode, EyeOff as default };\n//# sourceMappingURL=eye-off.js.map\n","/**\n * @license lucide-react v1.7.0 - ISC\n *\n * This source code is licensed under the ISC license.\n * See the LICENSE file in the root directory of this source tree.\n */\n\nimport createLucideIcon from '../createLucideIcon.js';\n\nconst __iconNode = [\n [\n \"path\",\n {\n d: \"M2.062 12.348a1 1 0 0 1 0-.696 10.75 10.75 0 0 1 19.876 0 1 1 0 0 1 0 .696 10.75 10.75 0 0 1-19.876 0\",\n key: \"1nclc0\"\n }\n ],\n [\"circle\", { cx: \"12\", cy: \"12\", r: \"3\", key: \"1v7zrd\" }]\n];\nconst Eye = createLucideIcon(\"eye\", __iconNode);\n\nexport { __iconNode, Eye as default };\n//# sourceMappingURL=eye.js.map\n","import { useState } from \"react\"\nimport { Eye, EyeOff } from \"lucide-react\"\nimport { useFormContext } from \"@rpcbase/form\"\n\n\ntype PasswordInputProps = {\n id: string\n name?: string\n className?: string\n placeholder?: string\n autoComplete?: string\n}\n\nexport const PasswordInput = ({\n id,\n name = \"password\",\n className,\n placeholder,\n autoComplete = \"current-password\",\n}: PasswordInputProps) => {\n const [showPassword, setShowPassword] = useState(false)\n const { register, formState } = useFormContext()\n\n const fieldError = formState.errors[name as keyof typeof formState.errors]\n const errorMessage =\n typeof fieldError === \"string\"\n ? fieldError\n : typeof fieldError?.message === \"string\"\n ? fieldError.message\n : undefined\n\n const inputClassName = className ? `${className} pr-11` : \"pr-11\"\n\n return (\n <>\n <div className=\"relative\">\n <input\n id={id}\n type={showPassword ? \"text\" : \"password\"}\n autoComplete={autoComplete}\n className={inputClassName}\n placeholder={placeholder}\n {...register(name as Parameters<typeof register>[0])}\n />\n <button\n type=\"button\"\n className=\"absolute inset-y-0 right-0 flex items-center pr-3 text-gray-500\"\n onClick={() => setShowPassword((prev) => !prev)}\n aria-label={showPassword ? \"Hide characters\" : \"Show characters\"}\n >\n {showPassword ? (\n <EyeOff className=\"h-5 w-5\" aria-hidden />\n ) : (\n <Eye className=\"h-5 w-5\" aria-hidden />\n )}\n </button>\n </div>\n {errorMessage ? (\n <p className=\"mt-1 -mb-2 text-sm/6 text-red-500\">{errorMessage}</p>\n ) : null}\n </>\n )\n}\n","import {useCallback, useEffect, useMemo, useState} from \"react\"\nimport clsx from \"clsx\"\n\n\nexport const useResendCountdown = (seconds = 60) => {\n const [remaining, setRemaining] = useState(seconds)\n const [isCountingDown, setIsCountingDown] = useState(true)\n\n useEffect(() => {\n if (!isCountingDown) return\n\n const timer = setInterval(() => {\n setRemaining((prev) => {\n if (prev <= 1) {\n setIsCountingDown(false)\n return seconds\n }\n return prev - 1\n })\n }, 1000)\n\n return () => clearInterval(timer)\n }, [isCountingDown, seconds])\n\n const restart = useCallback((nextSeconds?: number) => {\n const value = typeof nextSeconds === \"number\" ? nextSeconds : seconds\n setRemaining(value)\n setIsCountingDown(true)\n }, [seconds])\n\n const formatted = useMemo(() => {\n const minutes = Math.floor(remaining / 60)\n const secs = remaining % 60\n return `${minutes}:${secs.toString().padStart(2, \"0\")}`\n }, [remaining])\n\n const canResend = !isCountingDown\n\n return {remaining, formatted, isCountingDown, canResend, restart}\n}\n\n\nexport const ResendCodeButton = ({\n seconds = 60,\n onResend,\n className,\n disabled,\n}: {\n seconds?: number\n onResend?: () => Promise<void> | void\n className?: string\n disabled?: boolean\n}) => {\n const [isSending, setIsSending] = useState(false)\n const {formatted, isCountingDown, restart, canResend} = useResendCountdown(seconds)\n\n const handleClick = async () => {\n if (!canResend || isSending || disabled) return\n\n try {\n setIsSending(true)\n if (onResend) {\n await onResend()\n }\n } finally {\n restart()\n setIsSending(false)\n }\n }\n\n const isDisabled = disabled || isCountingDown || isSending\n const showCountdown = isDisabled && (isCountingDown || isSending)\n\n return (\n <span className=\"inline-flex items-center gap-2\">\n <button\n type=\"button\"\n onClick={handleClick}\n disabled={isDisabled}\n aria-label=\"Resend code\"\n className={clsx(\n \"text-sm font-semibold text-sky-600 hover:underline disabled:cursor-not-allowed disabled:text-gray-400\",\n className\n )}\n >\n Resend code\n </button>\n {showCountdown ? (\n <span\n data-testid=\"resend-countdown\"\n className=\"text-sm text-gray-500\"\n aria-live=\"polite\"\n >\n ({formatted})\n </span>\n ) : null}\n </span>\n )\n}\n"],"x_google_ignoreList":[7,8,9,10,11,12,13,14,15,16,17],"mappings":"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"}
|