diff --git a/src/lib/components/ui/breadcrumb/breadcrumb-ellipsis.svelte b/src/lib/components/ui/breadcrumb/breadcrumb-ellipsis.svelte new file mode 100644 index 0000000..a178cf5 --- /dev/null +++ b/src/lib/components/ui/breadcrumb/breadcrumb-ellipsis.svelte @@ -0,0 +1,23 @@ + + + diff --git a/src/lib/components/ui/breadcrumb/breadcrumb-item.svelte b/src/lib/components/ui/breadcrumb/breadcrumb-item.svelte new file mode 100644 index 0000000..1a84c4c --- /dev/null +++ b/src/lib/components/ui/breadcrumb/breadcrumb-item.svelte @@ -0,0 +1,20 @@ + + +
  • + {@render children?.()} +
  • diff --git a/src/lib/components/ui/breadcrumb/breadcrumb-link.svelte b/src/lib/components/ui/breadcrumb/breadcrumb-link.svelte new file mode 100644 index 0000000..e6bc17d --- /dev/null +++ b/src/lib/components/ui/breadcrumb/breadcrumb-link.svelte @@ -0,0 +1,31 @@ + + +{#if child} + {@render child({ props: attrs })} +{:else} + + {@render children?.()} + +{/if} diff --git a/src/lib/components/ui/breadcrumb/breadcrumb-list.svelte b/src/lib/components/ui/breadcrumb/breadcrumb-list.svelte new file mode 100644 index 0000000..1272a37 --- /dev/null +++ b/src/lib/components/ui/breadcrumb/breadcrumb-list.svelte @@ -0,0 +1,23 @@ + + +
      + {@render children?.()} +
    diff --git a/src/lib/components/ui/breadcrumb/breadcrumb-page.svelte b/src/lib/components/ui/breadcrumb/breadcrumb-page.svelte new file mode 100644 index 0000000..5fb6979 --- /dev/null +++ b/src/lib/components/ui/breadcrumb/breadcrumb-page.svelte @@ -0,0 +1,23 @@ + + + + {@render children?.()} + diff --git a/src/lib/components/ui/breadcrumb/breadcrumb-separator.svelte b/src/lib/components/ui/breadcrumb/breadcrumb-separator.svelte new file mode 100644 index 0000000..84106a1 --- /dev/null +++ b/src/lib/components/ui/breadcrumb/breadcrumb-separator.svelte @@ -0,0 +1,27 @@ + + + diff --git a/src/lib/components/ui/breadcrumb/breadcrumb.svelte b/src/lib/components/ui/breadcrumb/breadcrumb.svelte new file mode 100644 index 0000000..8f8a3e6 --- /dev/null +++ b/src/lib/components/ui/breadcrumb/breadcrumb.svelte @@ -0,0 +1,21 @@ + + + diff --git a/src/lib/components/ui/breadcrumb/index.ts b/src/lib/components/ui/breadcrumb/index.ts new file mode 100644 index 0000000..dc914ec --- /dev/null +++ b/src/lib/components/ui/breadcrumb/index.ts @@ -0,0 +1,25 @@ +import Root from "./breadcrumb.svelte"; +import Ellipsis from "./breadcrumb-ellipsis.svelte"; +import Item from "./breadcrumb-item.svelte"; +import Separator from "./breadcrumb-separator.svelte"; +import Link from "./breadcrumb-link.svelte"; +import List from "./breadcrumb-list.svelte"; +import Page from "./breadcrumb-page.svelte"; + +export { + Root, + Ellipsis, + Item, + Separator, + Link, + List, + Page, + // + Root as Breadcrumb, + Ellipsis as BreadcrumbEllipsis, + Item as BreadcrumbItem, + Separator as BreadcrumbSeparator, + Link as BreadcrumbLink, + List as BreadcrumbList, + Page as BreadcrumbPage, +}; diff --git a/src/lib/components/ui/input-otp/index.ts b/src/lib/components/ui/input-otp/index.ts new file mode 100644 index 0000000..e9ae273 --- /dev/null +++ b/src/lib/components/ui/input-otp/index.ts @@ -0,0 +1,15 @@ +import Root from "./input-otp.svelte"; +import Group from "./input-otp-group.svelte"; +import Slot from "./input-otp-slot.svelte"; +import Separator from "./input-otp-separator.svelte"; + +export { + Root, + Group, + Slot, + Separator, + Root as InputOTP, + Group as InputOTPGroup, + Slot as InputOTPSlot, + Separator as InputOTPSeparator, +}; diff --git a/src/lib/components/ui/input-otp/input-otp-group.svelte b/src/lib/components/ui/input-otp/input-otp-group.svelte new file mode 100644 index 0000000..9b311bc --- /dev/null +++ b/src/lib/components/ui/input-otp/input-otp-group.svelte @@ -0,0 +1,20 @@ + + +
    + {@render children?.()} +
    diff --git a/src/lib/components/ui/input-otp/input-otp-separator.svelte b/src/lib/components/ui/input-otp/input-otp-separator.svelte new file mode 100644 index 0000000..2c4fb4a --- /dev/null +++ b/src/lib/components/ui/input-otp/input-otp-separator.svelte @@ -0,0 +1,19 @@ + + +
    + {#if children} + {@render children?.()} + {:else} + + {/if} +
    diff --git a/src/lib/components/ui/input-otp/input-otp-slot.svelte b/src/lib/components/ui/input-otp/input-otp-slot.svelte new file mode 100644 index 0000000..9d45382 --- /dev/null +++ b/src/lib/components/ui/input-otp/input-otp-slot.svelte @@ -0,0 +1,31 @@ + + + + {cell.char} + {#if cell.hasFakeCaret} +
    + +
    + {/if} +
    diff --git a/src/lib/components/ui/input-otp/input-otp.svelte b/src/lib/components/ui/input-otp/input-otp.svelte new file mode 100644 index 0000000..a9de2c4 --- /dev/null +++ b/src/lib/components/ui/input-otp/input-otp.svelte @@ -0,0 +1,22 @@ + + + diff --git a/src/lib/components/ui/login-form/login-form.svelte b/src/lib/components/ui/login-form/login-form.svelte index 52f83e7..6ddf3dc 100644 --- a/src/lib/components/ui/login-form/login-form.svelte +++ b/src/lib/components/ui/login-form/login-form.svelte @@ -36,7 +36,7 @@ diff --git a/src/routes/+page.svelte b/src/routes/+page.svelte index eec2ce0..20d7631 100644 --- a/src/routes/+page.svelte +++ b/src/routes/+page.svelte @@ -1,4 +1,5 @@ +{#if from == 'cambio_contraseña'} + { + from = ''; + }} + > + Se cambio la contraseña del usuario exitosamente + +{/if} + diff --git a/src/routes/password-reset/+page.svelte b/src/routes/password-reset/+page.svelte new file mode 100644 index 0000000..c56b523 --- /dev/null +++ b/src/routes/password-reset/+page.svelte @@ -0,0 +1,35 @@ + + +
    +
    + +
    + {#if estado === 'email'} + + {/if} + {#if estado === 'otp'} + + {/if} + {#if estado === 'nuevapass'} + + {/if} +
    +
    +
    diff --git a/src/routes/password-reset/IngresarEmail.svelte b/src/routes/password-reset/IngresarEmail.svelte new file mode 100644 index 0000000..bd10395 --- /dev/null +++ b/src/routes/password-reset/IngresarEmail.svelte @@ -0,0 +1,101 @@ + + +{#if mensajeError} + (mensajeError = '')}> + + + + +{/if} +
    + + +
    +

    + Ingresa tu correo electrónico + {#if checkeado == null} + + {:else if checkeado == true} + + {:else if esEmailExistente} + + {:else} + + {/if} +

    +
    { + e.preventDefault(); + try { + const formData = new FormData(); + formData.append('email', email); + const req = await fetch(`${$apiBase}/api/password-reset/otp`, { + method: 'POST', + body: formData + }); + if (req.ok) { + estado = 'otp'; + return; + } + mensajeError = await req.text(); + } catch { + mensajeError = 'No se pudo alcanzar el servidor'; + } + }} + > +
    + + +
    +
    +
    +
    +
    +
    diff --git a/src/routes/password-reset/NuevaPass.svelte b/src/routes/password-reset/NuevaPass.svelte new file mode 100644 index 0000000..54cabf8 --- /dev/null +++ b/src/routes/password-reset/NuevaPass.svelte @@ -0,0 +1,96 @@ + + +{#if mensajeError} + (mensajeError = '')}> + + + + +{/if} + +
    + + +

    Crear una Nueva Contraseña

    +
    { + e.preventDefault(); + const formData = new FormData(); + formData.append('otp', otp); + formData.append('email', email); + formData.append('newpass', pass); + try { + const req = await fetch(`${$apiBase}/api/password-reset/change`, { + method: 'PATCH', + body: formData + }); + if (req.ok) { + const token = await req.json(); + sesionStore.set(token); + goto('/?from=cambio_contraseña'); + return; + } + const data = await req.text(); + mensajeError = data; + } catch { + mensajeError = 'No se pudo alcanzar el servidor'; + } + }} + > +
    +
    + + +

    + La contraseña debe contener al menos una mayúscula, una minúscula, un número y un + carácter especial. Además de 8 chars de longitud. +

    +
    +
    + + +
    + +
    +
    +
    +
    +
    diff --git a/src/routes/password-reset/Otp.svelte b/src/routes/password-reset/Otp.svelte new file mode 100644 index 0000000..39c9cec --- /dev/null +++ b/src/routes/password-reset/Otp.svelte @@ -0,0 +1,92 @@ + + +{#if mensajeError} + (mensajeError = '')}> + + + + +{/if} + +
    + + +
    +

    Verificación de correo

    +

    + Hemos enviado un código de verificación a tu correo electrónico. +

    + +
    +
    + + {#snippet children({ cells })} + + {#each cells as cell} + + {/each} + + {/snippet} + +
    + +
    + + + +
    +
    +
    +
    +
    +
    diff --git a/src/routes/password-reset/Pasos.svelte b/src/routes/password-reset/Pasos.svelte new file mode 100644 index 0000000..329ef5d --- /dev/null +++ b/src/routes/password-reset/Pasos.svelte @@ -0,0 +1,30 @@ + + +
    + + + +

    + Ingrese Email +

    +
    + + +

    Ingresar OTP

    +
    + + +

    + Nueva Contraseña +

    +
    +
    +
    +