negodesign 0.0.75 → 0.0.77
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/components/pages/security/auth/PageAuth01.svelte +65 -0
- package/dist/components/pages/security/auth/PageAuth01.svelte.d.ts +17 -0
- package/dist/components/pages/security/auth/PageAuth02.svelte +45 -0
- package/dist/components/pages/security/auth/PageAuth02.svelte.d.ts +17 -0
- package/dist/components/pages/security/auth/PageAuth03.svelte +45 -0
- package/dist/components/pages/security/auth/PageAuth03.svelte.d.ts +17 -0
- package/dist/components/pages/security/login/01/ui/PageLogin01.svelte +15 -40
- package/dist/components/pages/security/login/02/ui/PageLogin02.svelte +15 -20
- package/dist/components/pages/security/login/03/ui/PageLogin03.svelte +15 -20
- package/dist/components/pages/security/register/01/ui/PageRegister01.svelte +64 -0
- package/dist/components/pages/security/register/01/ui/PageRegister01.svelte.d.ts +3 -0
- package/dist/components/pages/security/register/01/ui/RegisterCard.svelte +100 -0
- package/dist/components/pages/security/register/01/ui/RegisterCard.svelte.d.ts +12 -0
- package/dist/components/pages/security/register/02/ui/PageRegister02.svelte +76 -0
- package/dist/components/pages/security/register/02/ui/PageRegister02.svelte.d.ts +4 -0
- package/dist/components/pages/security/register/02/ui/RegisterCard02.svelte +98 -0
- package/dist/components/pages/security/register/02/ui/RegisterCard02.svelte.d.ts +12 -0
- package/dist/components/pages/security/register/03/ui/PageRegister03.svelte +76 -0
- package/dist/components/pages/security/register/03/ui/PageRegister03.svelte.d.ts +4 -0
- package/dist/components/pages/security/register/03/ui/RegisterCard03.svelte +103 -0
- package/dist/components/pages/security/register/03/ui/RegisterCard03.svelte.d.ts +12 -0
- package/dist/components/pages/security/register/FormRegister.svelte +120 -0
- package/dist/components/pages/security/register/FormRegister.svelte.d.ts +8 -0
- package/dist/components/pages/security/register/PageRegister.svelte +30 -0
- package/dist/components/pages/security/register/PageRegister.svelte.d.ts +8 -0
- package/dist/components/pages/security/register/types.d.ts +51 -0
- package/dist/components/pages/security/register/types.js +1 -0
- package/dist/components/ui/modal/core/types.d.ts +3 -1
- package/dist/components/ui/modal/core/ui/ModalCore.svelte +132 -129
- package/dist/components/ui/modal/grid/ui/02/ModalGridSelection02.svelte +146 -142
- package/dist/components/ui/modal/share/types.d.ts +16 -1
- package/dist/components/ui/modal/share/ui/ModalShareSelection.svelte +156 -103
- package/dist/docs/DocsSidebar.svelte +58 -1
- package/dist/docs/components.js +94 -8
- package/dist/globals.css +18 -101
- package/dist/i18n/langs/en.d.ts +17 -0
- package/dist/i18n/langs/en.js +17 -0
- package/dist/i18n/langs/pt.d.ts +17 -0
- package/dist/i18n/langs/pt.js +17 -0
- package/dist/i18n/translations.d.ts +34 -0
- package/dist/index.d.ts +17 -1
- package/dist/index.js +17 -1
- package/dist/types/index.d.ts +7 -0
- package/package.json +1 -1
|
@@ -0,0 +1,65 @@
|
|
|
1
|
+
<script lang="ts" module>
|
|
2
|
+
/**
|
|
3
|
+
* @component PageAuth01
|
|
4
|
+
* Shared layout for auth pages (login/register) variant 01.
|
|
5
|
+
* Split layout: hero on the left, auth card on the right with grid pattern.
|
|
6
|
+
*/
|
|
7
|
+
</script>
|
|
8
|
+
|
|
9
|
+
<script lang="ts">
|
|
10
|
+
import type { Snippet } from "svelte";
|
|
11
|
+
import LeftHero from "../../../ui/panel/LeftHero.svelte";
|
|
12
|
+
|
|
13
|
+
type CarouselItem = {
|
|
14
|
+
title: string
|
|
15
|
+
description: string
|
|
16
|
+
buttonText: string
|
|
17
|
+
buttonUrl?: string
|
|
18
|
+
backgroundUrl?: string
|
|
19
|
+
};
|
|
20
|
+
|
|
21
|
+
type Props = {
|
|
22
|
+
title?: string
|
|
23
|
+
type?: "NUMBER" | "DOT" | "POINTER"
|
|
24
|
+
carousel?: CarouselItem[]
|
|
25
|
+
children?: Snippet
|
|
26
|
+
};
|
|
27
|
+
|
|
28
|
+
let {
|
|
29
|
+
title,
|
|
30
|
+
type,
|
|
31
|
+
carousel = [],
|
|
32
|
+
children,
|
|
33
|
+
}: Props = $props();
|
|
34
|
+
</script>
|
|
35
|
+
|
|
36
|
+
<main class="h-screen w-screen flex items-center">
|
|
37
|
+
<svg width="0" height="0" class="absolute">
|
|
38
|
+
<defs>
|
|
39
|
+
<clipPath id="grid-curve-clip" clipPathUnits="objectBoundingBox">
|
|
40
|
+
<path d="M0.35,0 L1,0 C0.85,0.3 1,0.6 0.4,1 L1,1 Z" />
|
|
41
|
+
</clipPath>
|
|
42
|
+
</defs>
|
|
43
|
+
</svg>
|
|
44
|
+
<div class="hidden md:block md:w-8/12">
|
|
45
|
+
<LeftHero {title} type={type ?? "POINTER"} items={carousel} />
|
|
46
|
+
</div>
|
|
47
|
+
<div class="w-full md:px-0 md:w-4/12 border-gray-900">
|
|
48
|
+
{#if children}
|
|
49
|
+
{@render children()}
|
|
50
|
+
{/if}
|
|
51
|
+
</div>
|
|
52
|
+
</main>
|
|
53
|
+
|
|
54
|
+
<style>
|
|
55
|
+
:global(.grid-pattern) {
|
|
56
|
+
background-size: 40px 40px;
|
|
57
|
+
background-image: linear-gradient(
|
|
58
|
+
to right,
|
|
59
|
+
rgba(0, 0, 0, 0.1) 1px,
|
|
60
|
+
transparent 1px
|
|
61
|
+
),
|
|
62
|
+
linear-gradient(to bottom, rgba(0, 0, 0, 0.1) 1px, transparent 1px);
|
|
63
|
+
clip-path: url(#grid-curve-clip);
|
|
64
|
+
}
|
|
65
|
+
</style>
|
|
@@ -0,0 +1,17 @@
|
|
|
1
|
+
import type { Snippet } from "svelte";
|
|
2
|
+
type CarouselItem = {
|
|
3
|
+
title: string;
|
|
4
|
+
description: string;
|
|
5
|
+
buttonText: string;
|
|
6
|
+
buttonUrl?: string;
|
|
7
|
+
backgroundUrl?: string;
|
|
8
|
+
};
|
|
9
|
+
type Props = {
|
|
10
|
+
title?: string;
|
|
11
|
+
type?: "NUMBER" | "DOT" | "POINTER";
|
|
12
|
+
carousel?: CarouselItem[];
|
|
13
|
+
children?: Snippet;
|
|
14
|
+
};
|
|
15
|
+
declare const PageAuth01: import("svelte").Component<Props, {}, "">;
|
|
16
|
+
type PageAuth01 = ReturnType<typeof PageAuth01>;
|
|
17
|
+
export default PageAuth01;
|
|
@@ -0,0 +1,45 @@
|
|
|
1
|
+
<script lang="ts" module>
|
|
2
|
+
/**
|
|
3
|
+
* @component PageAuth02
|
|
4
|
+
* Shared layout for auth pages (login/register) variant 02.
|
|
5
|
+
* Split layout: hero image on the left, auth card on the right.
|
|
6
|
+
*/
|
|
7
|
+
</script>
|
|
8
|
+
|
|
9
|
+
<script lang="ts">
|
|
10
|
+
import type { Snippet } from "svelte";
|
|
11
|
+
import LeftHero from "../login/02/ui/LeftHero02.svelte";
|
|
12
|
+
|
|
13
|
+
type CarouselItem = {
|
|
14
|
+
title: string
|
|
15
|
+
description: string
|
|
16
|
+
buttonText: string
|
|
17
|
+
buttonUrl?: string
|
|
18
|
+
backgroundUrl?: string
|
|
19
|
+
};
|
|
20
|
+
|
|
21
|
+
type Props = {
|
|
22
|
+
title?: string
|
|
23
|
+
type?: "NUMBER" | "DOT" | "POINTER"
|
|
24
|
+
carousel?: CarouselItem[]
|
|
25
|
+
children?: Snippet
|
|
26
|
+
};
|
|
27
|
+
|
|
28
|
+
let {
|
|
29
|
+
title,
|
|
30
|
+
type,
|
|
31
|
+
carousel = [],
|
|
32
|
+
children,
|
|
33
|
+
}: Props = $props();
|
|
34
|
+
</script>
|
|
35
|
+
|
|
36
|
+
<main class="h-screen w-screen flex items-center justify-center">
|
|
37
|
+
<div class="hidden md:flex w-7/12 h-screen">
|
|
38
|
+
<LeftHero {title} type={type ?? "POINTER"} items={carousel} />
|
|
39
|
+
</div>
|
|
40
|
+
<div class="w-full md:w-5/12 flex flex-col h-screen">
|
|
41
|
+
{#if children}
|
|
42
|
+
{@render children()}
|
|
43
|
+
{/if}
|
|
44
|
+
</div>
|
|
45
|
+
</main>
|
|
@@ -0,0 +1,17 @@
|
|
|
1
|
+
import type { Snippet } from "svelte";
|
|
2
|
+
type CarouselItem = {
|
|
3
|
+
title: string;
|
|
4
|
+
description: string;
|
|
5
|
+
buttonText: string;
|
|
6
|
+
buttonUrl?: string;
|
|
7
|
+
backgroundUrl?: string;
|
|
8
|
+
};
|
|
9
|
+
type Props = {
|
|
10
|
+
title?: string;
|
|
11
|
+
type?: "NUMBER" | "DOT" | "POINTER";
|
|
12
|
+
carousel?: CarouselItem[];
|
|
13
|
+
children?: Snippet;
|
|
14
|
+
};
|
|
15
|
+
declare const PageAuth02: import("svelte").Component<Props, {}, "">;
|
|
16
|
+
type PageAuth02 = ReturnType<typeof PageAuth02>;
|
|
17
|
+
export default PageAuth02;
|
|
@@ -0,0 +1,45 @@
|
|
|
1
|
+
<script lang="ts" module>
|
|
2
|
+
/**
|
|
3
|
+
* @component PageAuth03
|
|
4
|
+
* Shared layout for auth pages (login/register) variant 03.
|
|
5
|
+
* Split layout with glass morphism: hero on the left, auth card on the right.
|
|
6
|
+
*/
|
|
7
|
+
</script>
|
|
8
|
+
|
|
9
|
+
<script lang="ts">
|
|
10
|
+
import type { Snippet } from "svelte";
|
|
11
|
+
import LeftHero from "../login/03/ui/LeftHero03.svelte";
|
|
12
|
+
|
|
13
|
+
type CarouselItem = {
|
|
14
|
+
title: string
|
|
15
|
+
description: string
|
|
16
|
+
buttonText: string
|
|
17
|
+
buttonUrl?: string
|
|
18
|
+
backgroundUrl?: string
|
|
19
|
+
};
|
|
20
|
+
|
|
21
|
+
type Props = {
|
|
22
|
+
title?: string
|
|
23
|
+
type?: "NUMBER" | "DOT" | "POINTER"
|
|
24
|
+
carousel?: CarouselItem[]
|
|
25
|
+
children?: Snippet
|
|
26
|
+
};
|
|
27
|
+
|
|
28
|
+
let {
|
|
29
|
+
title,
|
|
30
|
+
type,
|
|
31
|
+
carousel = [],
|
|
32
|
+
children,
|
|
33
|
+
}: Props = $props();
|
|
34
|
+
</script>
|
|
35
|
+
|
|
36
|
+
<main class="h-screen w-screen flex items-center justify-center">
|
|
37
|
+
<div class="hidden md:flex w-1/2 h-screen">
|
|
38
|
+
<LeftHero {title} type={type ?? "DOT"} items={carousel} />
|
|
39
|
+
</div>
|
|
40
|
+
<div class="w-full md:w-1/2 flex flex-col h-screen">
|
|
41
|
+
{#if children}
|
|
42
|
+
{@render children()}
|
|
43
|
+
{/if}
|
|
44
|
+
</div>
|
|
45
|
+
</main>
|
|
@@ -0,0 +1,17 @@
|
|
|
1
|
+
import type { Snippet } from "svelte";
|
|
2
|
+
type CarouselItem = {
|
|
3
|
+
title: string;
|
|
4
|
+
description: string;
|
|
5
|
+
buttonText: string;
|
|
6
|
+
buttonUrl?: string;
|
|
7
|
+
backgroundUrl?: string;
|
|
8
|
+
};
|
|
9
|
+
type Props = {
|
|
10
|
+
title?: string;
|
|
11
|
+
type?: "NUMBER" | "DOT" | "POINTER";
|
|
12
|
+
carousel?: CarouselItem[];
|
|
13
|
+
children?: Snippet;
|
|
14
|
+
};
|
|
15
|
+
declare const PageAuth03: import("svelte").Component<Props, {}, "">;
|
|
16
|
+
type PageAuth03 = ReturnType<typeof PageAuth03>;
|
|
17
|
+
export default PageAuth03;
|
|
@@ -10,7 +10,7 @@
|
|
|
10
10
|
|
|
11
11
|
<script lang="ts">
|
|
12
12
|
import AuthCard from "./LoginCard.svelte";
|
|
13
|
-
import
|
|
13
|
+
import PageAuth01 from "../../../auth/PageAuth01.svelte";
|
|
14
14
|
import type { PageLoginProps } from "../../types";
|
|
15
15
|
import { t } from "../../../../../../i18n";
|
|
16
16
|
|
|
@@ -48,42 +48,17 @@
|
|
|
48
48
|
const carouselItems = $derived(carousel ?? defaultCarousel);
|
|
49
49
|
</script>
|
|
50
50
|
|
|
51
|
-
<
|
|
52
|
-
|
|
53
|
-
|
|
54
|
-
|
|
55
|
-
|
|
56
|
-
|
|
57
|
-
|
|
58
|
-
|
|
59
|
-
|
|
60
|
-
|
|
61
|
-
|
|
62
|
-
|
|
63
|
-
|
|
64
|
-
|
|
65
|
-
{:else}
|
|
66
|
-
<AuthCard
|
|
67
|
-
{formType}
|
|
68
|
-
{onSubmit}
|
|
69
|
-
{forgetPassword}
|
|
70
|
-
{privacyPolicy}
|
|
71
|
-
{termsOfService}
|
|
72
|
-
{socialLogins}
|
|
73
|
-
/>
|
|
74
|
-
{/if}
|
|
75
|
-
</div>
|
|
76
|
-
</main>
|
|
77
|
-
|
|
78
|
-
<style>
|
|
79
|
-
:global(.grid-pattern) {
|
|
80
|
-
background-size: 40px 40px;
|
|
81
|
-
background-image: linear-gradient(
|
|
82
|
-
to right,
|
|
83
|
-
rgba(0, 0, 0, 0.1) 1px,
|
|
84
|
-
transparent 1px
|
|
85
|
-
),
|
|
86
|
-
linear-gradient(to bottom, rgba(0, 0, 0, 0.1) 1px, transparent 1px);
|
|
87
|
-
clip-path: url(#grid-curve-clip);
|
|
88
|
-
}
|
|
89
|
-
</style>
|
|
51
|
+
<PageAuth01 {title} {type} carousel={carouselItems}>
|
|
52
|
+
{#if children}
|
|
53
|
+
{@render children()}
|
|
54
|
+
{:else}
|
|
55
|
+
<AuthCard
|
|
56
|
+
{formType}
|
|
57
|
+
{onSubmit}
|
|
58
|
+
{forgetPassword}
|
|
59
|
+
{privacyPolicy}
|
|
60
|
+
{termsOfService}
|
|
61
|
+
{socialLogins}
|
|
62
|
+
/>
|
|
63
|
+
{/if}
|
|
64
|
+
</PageAuth01>
|
|
@@ -10,7 +10,7 @@
|
|
|
10
10
|
|
|
11
11
|
<script lang="ts">
|
|
12
12
|
import AuthCard from "./LoginCard02.svelte";
|
|
13
|
-
import
|
|
13
|
+
import PageAuth02 from "../../../auth/PageAuth02.svelte";
|
|
14
14
|
import type { PageLoginProps } from "../../types";
|
|
15
15
|
import { t } from "../../../../../../i18n";
|
|
16
16
|
|
|
@@ -48,22 +48,17 @@
|
|
|
48
48
|
const carouselItems = $derived(carousel ?? defaultCarousel);
|
|
49
49
|
</script>
|
|
50
50
|
|
|
51
|
-
<
|
|
52
|
-
|
|
53
|
-
|
|
54
|
-
|
|
55
|
-
|
|
56
|
-
|
|
57
|
-
{
|
|
58
|
-
|
|
59
|
-
|
|
60
|
-
|
|
61
|
-
|
|
62
|
-
|
|
63
|
-
|
|
64
|
-
|
|
65
|
-
{socialLogins}
|
|
66
|
-
/>
|
|
67
|
-
{/if}
|
|
68
|
-
</div>
|
|
69
|
-
</main>
|
|
51
|
+
<PageAuth02 {title} {type} carousel={carouselItems}>
|
|
52
|
+
{#if children}
|
|
53
|
+
{@render children()}
|
|
54
|
+
{:else}
|
|
55
|
+
<AuthCard
|
|
56
|
+
{formType}
|
|
57
|
+
{onSubmit}
|
|
58
|
+
{forgetPassword}
|
|
59
|
+
{privacyPolicy}
|
|
60
|
+
{termsOfService}
|
|
61
|
+
{socialLogins}
|
|
62
|
+
/>
|
|
63
|
+
{/if}
|
|
64
|
+
</PageAuth02>
|
|
@@ -10,7 +10,7 @@
|
|
|
10
10
|
|
|
11
11
|
<script lang="ts">
|
|
12
12
|
import AuthCard from "./LoginCard03.svelte";
|
|
13
|
-
import
|
|
13
|
+
import PageAuth03 from "../../../auth/PageAuth03.svelte";
|
|
14
14
|
import type { PageLoginProps } from "../../types";
|
|
15
15
|
import { t } from "../../../../../../i18n";
|
|
16
16
|
|
|
@@ -48,22 +48,17 @@
|
|
|
48
48
|
const carouselItems = $derived(carousel ?? defaultCarousel);
|
|
49
49
|
</script>
|
|
50
50
|
|
|
51
|
-
<
|
|
52
|
-
|
|
53
|
-
|
|
54
|
-
|
|
55
|
-
|
|
56
|
-
|
|
57
|
-
{
|
|
58
|
-
|
|
59
|
-
|
|
60
|
-
|
|
61
|
-
|
|
62
|
-
|
|
63
|
-
|
|
64
|
-
|
|
65
|
-
{socialLogins}
|
|
66
|
-
/>
|
|
67
|
-
{/if}
|
|
68
|
-
</div>
|
|
69
|
-
</main>
|
|
51
|
+
<PageAuth03 {title} {type} carousel={carouselItems}>
|
|
52
|
+
{#if children}
|
|
53
|
+
{@render children()}
|
|
54
|
+
{:else}
|
|
55
|
+
<AuthCard
|
|
56
|
+
{formType}
|
|
57
|
+
{onSubmit}
|
|
58
|
+
{forgetPassword}
|
|
59
|
+
{privacyPolicy}
|
|
60
|
+
{termsOfService}
|
|
61
|
+
{socialLogins}
|
|
62
|
+
/>
|
|
63
|
+
{/if}
|
|
64
|
+
</PageAuth03>
|
|
@@ -0,0 +1,64 @@
|
|
|
1
|
+
<script lang="ts" module>
|
|
2
|
+
/**
|
|
3
|
+
* @component PageRegister01
|
|
4
|
+
* Variant 01 of the register page. Split layout: hero on the left, auth card on the right.
|
|
5
|
+
*
|
|
6
|
+
* @example svelte
|
|
7
|
+
* <PageRegister01 fields={{ isName: true, isEmail: true }} onSubmit={(data) => register(data)} />
|
|
8
|
+
*/
|
|
9
|
+
</script>
|
|
10
|
+
|
|
11
|
+
<script lang="ts">
|
|
12
|
+
import AuthCard from "./RegisterCard.svelte";
|
|
13
|
+
import PageAuth01 from "../../../auth/PageAuth01.svelte";
|
|
14
|
+
import type { PageRegisterProps } from "../types";
|
|
15
|
+
import { t } from "../../../../../../i18n";
|
|
16
|
+
|
|
17
|
+
let {
|
|
18
|
+
carousel,
|
|
19
|
+
type,
|
|
20
|
+
title,
|
|
21
|
+
fields,
|
|
22
|
+
children,
|
|
23
|
+
onSubmit,
|
|
24
|
+
login,
|
|
25
|
+
privacyPolicy,
|
|
26
|
+
termsOfService,
|
|
27
|
+
socialLogins = [],
|
|
28
|
+
}: PageRegisterProps = $props();
|
|
29
|
+
|
|
30
|
+
const defaultCarousel = $derived([
|
|
31
|
+
{
|
|
32
|
+
buttonText: $t("label.next"),
|
|
33
|
+
title: $t("carousel.register.slide1.title") ?? $t("carousel.login.slide1.title"),
|
|
34
|
+
description: $t("carousel.register.slide1.description") ?? $t("carousel.login.slide1.description"),
|
|
35
|
+
},
|
|
36
|
+
{
|
|
37
|
+
buttonText: $t("label.next"),
|
|
38
|
+
title: $t("carousel.register.slide2.title") ?? $t("carousel.login.slide2.title"),
|
|
39
|
+
description: $t("carousel.register.slide2.description") ?? $t("carousel.login.slide2.description"),
|
|
40
|
+
},
|
|
41
|
+
{
|
|
42
|
+
buttonText: $t("label.next"),
|
|
43
|
+
title: $t("carousel.register.slide3.title") ?? $t("carousel.login.slide3.title"),
|
|
44
|
+
description: $t("carousel.register.slide3.description") ?? $t("carousel.login.slide3.description"),
|
|
45
|
+
},
|
|
46
|
+
]);
|
|
47
|
+
|
|
48
|
+
const carouselItems = $derived(carousel ?? defaultCarousel);
|
|
49
|
+
</script>
|
|
50
|
+
|
|
51
|
+
<PageAuth01 {title} {type} carousel={carouselItems}>
|
|
52
|
+
{#if children}
|
|
53
|
+
{@render children()}
|
|
54
|
+
{:else}
|
|
55
|
+
<AuthCard
|
|
56
|
+
{fields}
|
|
57
|
+
{onSubmit}
|
|
58
|
+
{login}
|
|
59
|
+
{privacyPolicy}
|
|
60
|
+
{termsOfService}
|
|
61
|
+
{socialLogins}
|
|
62
|
+
/>
|
|
63
|
+
{/if}
|
|
64
|
+
</PageAuth01>
|
|
@@ -0,0 +1,100 @@
|
|
|
1
|
+
<script lang="ts" module>
|
|
2
|
+
/**
|
|
3
|
+
* @component RegisterCard
|
|
4
|
+
* Authentication card for registration with back button, light switch, and link footer.
|
|
5
|
+
*
|
|
6
|
+
* @example svelte
|
|
7
|
+
* <RegisterCard fields={{ isName: true, isEmail: true, isPassword: true }} onSubmit={(data) => register(data)} />
|
|
8
|
+
*/
|
|
9
|
+
</script>
|
|
10
|
+
|
|
11
|
+
<script lang="ts">
|
|
12
|
+
import LanguageSwitcher from "../../../../../ui/language-switcher/language-switcher.svelte";
|
|
13
|
+
import LinkTermsOfService from "../../../../../ui/link/link-terms-of-service.svelte";
|
|
14
|
+
import LinkPrivacyPolity from "../../../../../ui/link/link-privacy-polity.svelte";
|
|
15
|
+
import ButtonBack from "../../../../../ui/button/ButtonBack.svelte";
|
|
16
|
+
import LabelOr from "../../../../../ui/label/core/LabelOr.svelte";
|
|
17
|
+
import { LightSwitch } from "../../../../../ui/light-switch";
|
|
18
|
+
import { t } from "../../../../../../i18n";
|
|
19
|
+
import type {
|
|
20
|
+
RegisterFormFields,
|
|
21
|
+
RegisterRequestDto,
|
|
22
|
+
LinkProps,
|
|
23
|
+
SocialLoginItem,
|
|
24
|
+
} from "../../types";
|
|
25
|
+
import SocialLogin from "../../../../../ui/social-login/social-login.svelte";
|
|
26
|
+
import FormRegister from "../../FormRegister.svelte";
|
|
27
|
+
|
|
28
|
+
type Props = {
|
|
29
|
+
fields?: RegisterFormFields;
|
|
30
|
+
onSubmit?: (data: RegisterRequestDto) => void;
|
|
31
|
+
login?: LinkProps;
|
|
32
|
+
privacyPolicy?: LinkProps;
|
|
33
|
+
termsOfService?: LinkProps;
|
|
34
|
+
socialLogins?: SocialLoginItem[];
|
|
35
|
+
};
|
|
36
|
+
|
|
37
|
+
let {
|
|
38
|
+
fields,
|
|
39
|
+
onSubmit,
|
|
40
|
+
login,
|
|
41
|
+
privacyPolicy,
|
|
42
|
+
termsOfService,
|
|
43
|
+
socialLogins = [],
|
|
44
|
+
}: Props = $props();
|
|
45
|
+
</script>
|
|
46
|
+
|
|
47
|
+
<div class="flex-1 flex flex-col justify-between h-screen bg-gradient-right">
|
|
48
|
+
<nav class="flex justify-between p-5 md:bg-transparent">
|
|
49
|
+
<div>
|
|
50
|
+
<ButtonBack />
|
|
51
|
+
</div>
|
|
52
|
+
<div class="flex gap-2">
|
|
53
|
+
<LightSwitch />
|
|
54
|
+
<LanguageSwitcher />
|
|
55
|
+
</div>
|
|
56
|
+
</nav>
|
|
57
|
+
|
|
58
|
+
<div
|
|
59
|
+
class="p-5 h-full border-t-2 bg-background md:border-none rounded-tl-[35px] rounded-tr-[35px]"
|
|
60
|
+
>
|
|
61
|
+
<div class="space-y-6">
|
|
62
|
+
<div>
|
|
63
|
+
<h1 class="text-2xl font-bold">{$t("label.register")}</h1>
|
|
64
|
+
<p class="text-sm text-muted-foreground">{$t("text.register")}</p>
|
|
65
|
+
</div>
|
|
66
|
+
|
|
67
|
+
<FormRegister {fields} {onSubmit} />
|
|
68
|
+
|
|
69
|
+
{#if socialLogins.length > 0}
|
|
70
|
+
<SocialLogin items={socialLogins} />
|
|
71
|
+
{/if}
|
|
72
|
+
|
|
73
|
+
<p class="text-center text-sm">
|
|
74
|
+
{$t("text.login.has-account")}
|
|
75
|
+
<a
|
|
76
|
+
href={login?.url ?? "/login"}
|
|
77
|
+
onclick={login?.onclick}
|
|
78
|
+
class="font-semibold text-primary hover:underline"
|
|
79
|
+
>
|
|
80
|
+
{$t("text.login.sign-in")}
|
|
81
|
+
</a>
|
|
82
|
+
</p>
|
|
83
|
+
</div>
|
|
84
|
+
</div>
|
|
85
|
+
|
|
86
|
+
<!-- Footer Terms -->
|
|
87
|
+
<div
|
|
88
|
+
class="text-[11px] text-slate-400 py-2 flex justify-center gap-2 bg-background"
|
|
89
|
+
>
|
|
90
|
+
<LinkPrivacyPolity
|
|
91
|
+
href={privacyPolicy?.url}
|
|
92
|
+
onclick={privacyPolicy?.onclick}
|
|
93
|
+
/>
|
|
94
|
+
<LabelOr />
|
|
95
|
+
<LinkTermsOfService
|
|
96
|
+
href={termsOfService?.url}
|
|
97
|
+
onclick={termsOfService?.onclick}
|
|
98
|
+
/>
|
|
99
|
+
</div>
|
|
100
|
+
</div>
|
|
@@ -0,0 +1,12 @@
|
|
|
1
|
+
import type { RegisterFormFields, RegisterRequestDto, LinkProps, SocialLoginItem } from "../../types";
|
|
2
|
+
type Props = {
|
|
3
|
+
fields?: RegisterFormFields;
|
|
4
|
+
onSubmit?: (data: RegisterRequestDto) => void;
|
|
5
|
+
login?: LinkProps;
|
|
6
|
+
privacyPolicy?: LinkProps;
|
|
7
|
+
termsOfService?: LinkProps;
|
|
8
|
+
socialLogins?: SocialLoginItem[];
|
|
9
|
+
};
|
|
10
|
+
declare const RegisterCard: import("svelte").Component<Props, {}, "">;
|
|
11
|
+
type RegisterCard = ReturnType<typeof RegisterCard>;
|
|
12
|
+
export default RegisterCard;
|
|
@@ -0,0 +1,76 @@
|
|
|
1
|
+
<script lang="ts" module>
|
|
2
|
+
/**
|
|
3
|
+
* @component PageRegister02
|
|
4
|
+
* Variant 02 of the register page. Split layout: hero image on the left, auth card on the right.
|
|
5
|
+
*
|
|
6
|
+
* @example svelte
|
|
7
|
+
* <PageRegister02 fields={{ isName: true, isEmail: true }} onSubmit={(data) => register(data)} />
|
|
8
|
+
*/
|
|
9
|
+
</script>
|
|
10
|
+
|
|
11
|
+
<script lang="ts">
|
|
12
|
+
import AuthCard from "./RegisterCard02.svelte";
|
|
13
|
+
import PageAuth02 from "../../../auth/PageAuth02.svelte";
|
|
14
|
+
import type { PageRegisterProps } from "../../../../../../types";
|
|
15
|
+
import { t } from "../../../../../../i18n";
|
|
16
|
+
|
|
17
|
+
let {
|
|
18
|
+
carousel,
|
|
19
|
+
type,
|
|
20
|
+
title,
|
|
21
|
+
fields,
|
|
22
|
+
children,
|
|
23
|
+
onSubmit,
|
|
24
|
+
login,
|
|
25
|
+
privacyPolicy,
|
|
26
|
+
termsOfService,
|
|
27
|
+
socialLogins = [],
|
|
28
|
+
}: PageRegisterProps = $props();
|
|
29
|
+
|
|
30
|
+
const defaultCarousel = $derived([
|
|
31
|
+
{
|
|
32
|
+
buttonText: $t("label.next"),
|
|
33
|
+
title:
|
|
34
|
+
$t("carousel.register.slide1.title") ??
|
|
35
|
+
$t("carousel.login.slide1.title"),
|
|
36
|
+
description:
|
|
37
|
+
$t("carousel.register.slide1.description") ??
|
|
38
|
+
$t("carousel.login.slide1.description"),
|
|
39
|
+
},
|
|
40
|
+
{
|
|
41
|
+
buttonText: $t("label.next"),
|
|
42
|
+
title:
|
|
43
|
+
$t("carousel.register.slide2.title") ??
|
|
44
|
+
$t("carousel.login.slide2.title"),
|
|
45
|
+
description:
|
|
46
|
+
$t("carousel.register.slide2.description") ??
|
|
47
|
+
$t("carousel.login.slide2.description"),
|
|
48
|
+
},
|
|
49
|
+
{
|
|
50
|
+
buttonText: $t("label.next"),
|
|
51
|
+
title:
|
|
52
|
+
$t("carousel.register.slide3.title") ??
|
|
53
|
+
$t("carousel.login.slide3.title"),
|
|
54
|
+
description:
|
|
55
|
+
$t("carousel.register.slide3.description") ??
|
|
56
|
+
$t("carousel.login.slide3.description"),
|
|
57
|
+
},
|
|
58
|
+
]);
|
|
59
|
+
|
|
60
|
+
const carouselItems = $derived(carousel ?? defaultCarousel);
|
|
61
|
+
</script>
|
|
62
|
+
|
|
63
|
+
<PageAuth02 {title} {type} carousel={carouselItems}>
|
|
64
|
+
{#if children}
|
|
65
|
+
{@render children()}
|
|
66
|
+
{:else}
|
|
67
|
+
<AuthCard
|
|
68
|
+
{fields}
|
|
69
|
+
{onSubmit}
|
|
70
|
+
{login}
|
|
71
|
+
{privacyPolicy}
|
|
72
|
+
{termsOfService}
|
|
73
|
+
{socialLogins}
|
|
74
|
+
/>
|
|
75
|
+
{/if}
|
|
76
|
+
</PageAuth02>
|