negodesign 0.0.74 → 0.0.76

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.
Files changed (121) hide show
  1. package/dist/components/pages/security/auth/PageAuth01.svelte +65 -0
  2. package/dist/components/pages/security/auth/PageAuth01.svelte.d.ts +17 -0
  3. package/dist/components/pages/security/auth/PageAuth02.svelte +45 -0
  4. package/dist/components/pages/security/auth/PageAuth02.svelte.d.ts +17 -0
  5. package/dist/components/pages/security/auth/PageAuth03.svelte +45 -0
  6. package/dist/components/pages/security/auth/PageAuth03.svelte.d.ts +17 -0
  7. package/dist/components/pages/security/login/01/ui/PageLogin01.svelte +15 -40
  8. package/dist/components/pages/security/login/02/ui/LoginCard02.svelte +15 -4
  9. package/dist/components/pages/security/login/02/ui/PageLogin02.svelte +15 -20
  10. package/dist/components/pages/security/login/03/ui/LoginCard03.svelte +34 -16
  11. package/dist/components/pages/security/login/03/ui/PageLogin03.svelte +15 -20
  12. package/dist/components/pages/security/register/01/ui/PageRegister01.svelte +64 -0
  13. package/dist/components/pages/security/register/01/ui/PageRegister01.svelte.d.ts +3 -0
  14. package/dist/components/pages/security/register/01/ui/RegisterCard.svelte +100 -0
  15. package/dist/components/pages/security/register/01/ui/RegisterCard.svelte.d.ts +12 -0
  16. package/dist/components/pages/security/register/02/ui/PageRegister02.svelte +76 -0
  17. package/dist/components/pages/security/register/02/ui/PageRegister02.svelte.d.ts +4 -0
  18. package/dist/components/pages/security/register/02/ui/RegisterCard02.svelte +98 -0
  19. package/dist/components/pages/security/register/02/ui/RegisterCard02.svelte.d.ts +12 -0
  20. package/dist/components/pages/security/register/03/ui/PageRegister03.svelte +76 -0
  21. package/dist/components/pages/security/register/03/ui/PageRegister03.svelte.d.ts +4 -0
  22. package/dist/components/pages/security/register/03/ui/RegisterCard03.svelte +103 -0
  23. package/dist/components/pages/security/register/03/ui/RegisterCard03.svelte.d.ts +12 -0
  24. package/dist/components/pages/security/register/FormRegister.svelte +120 -0
  25. package/dist/components/pages/security/register/FormRegister.svelte.d.ts +8 -0
  26. package/dist/components/pages/security/register/PageRegister.svelte +30 -0
  27. package/dist/components/pages/security/register/PageRegister.svelte.d.ts +8 -0
  28. package/dist/components/pages/security/register/types.d.ts +51 -0
  29. package/dist/components/pages/security/register/types.js +1 -0
  30. package/dist/components/ui/form/Form.svelte +171 -0
  31. package/dist/components/ui/form/Form.svelte.d.ts +4 -0
  32. package/dist/components/ui/form/types.d.ts +78 -0
  33. package/dist/components/ui/form/types.js +1 -0
  34. package/dist/components/ui/form/ui/input-badges.svelte +214 -0
  35. package/dist/components/ui/form/ui/input-badges.svelte.d.ts +14 -0
  36. package/dist/components/ui/form/ui/input-checkbox.svelte +86 -0
  37. package/dist/components/ui/form/ui/input-checkbox.svelte.d.ts +17 -0
  38. package/dist/components/ui/form/ui/input-radio.svelte +82 -0
  39. package/dist/components/ui/form/ui/input-radio.svelte.d.ts +17 -0
  40. package/dist/components/ui/form/ui/input-select.svelte +195 -0
  41. package/dist/components/ui/form/ui/input-select.svelte.d.ts +17 -0
  42. package/dist/components/ui/form/ui/input-textarea.svelte +61 -0
  43. package/dist/components/ui/form/ui/input-textarea.svelte.d.ts +13 -0
  44. package/dist/components/ui/form/ui/input-toggle.svelte +89 -0
  45. package/dist/components/ui/form/ui/input-toggle.svelte.d.ts +11 -0
  46. package/dist/components/ui/modal/badge/index.d.ts +3 -0
  47. package/dist/components/ui/modal/badge/index.js +2 -0
  48. package/dist/components/ui/modal/badge/types.d.ts +35 -0
  49. package/dist/components/ui/modal/badge/types.js +1 -0
  50. package/dist/components/ui/modal/badge/ui/ModalBadgeSelection.svelte +87 -0
  51. package/dist/components/ui/modal/badge/ui/ModalBadgeSelection.svelte.d.ts +4 -0
  52. package/dist/components/ui/modal/core/index.d.ts +3 -0
  53. package/dist/components/ui/modal/core/index.js +2 -0
  54. package/dist/components/ui/modal/core/types.d.ts +84 -0
  55. package/dist/components/ui/modal/core/types.js +1 -0
  56. package/dist/components/ui/modal/core/ui/ModalCore.svelte +132 -0
  57. package/dist/components/ui/modal/core/ui/ModalCore.svelte.d.ts +4 -0
  58. package/dist/components/ui/modal/feedback/index.d.ts +3 -0
  59. package/dist/components/ui/modal/feedback/index.js +2 -0
  60. package/dist/components/ui/modal/feedback/types.d.ts +32 -0
  61. package/dist/components/ui/modal/feedback/types.js +1 -0
  62. package/dist/components/ui/modal/feedback/ui/ModalFeedback.svelte +135 -0
  63. package/dist/components/ui/modal/feedback/ui/ModalFeedback.svelte.d.ts +4 -0
  64. package/dist/components/ui/modal/form/index.d.ts +3 -0
  65. package/dist/components/ui/modal/form/index.js +2 -0
  66. package/dist/components/ui/modal/form/types.d.ts +38 -0
  67. package/dist/components/ui/modal/form/types.js +1 -0
  68. package/dist/components/ui/modal/form/ui/ModalForm.svelte +67 -0
  69. package/dist/components/ui/modal/form/ui/ModalForm.svelte.d.ts +4 -0
  70. package/dist/components/ui/modal/grid/index.d.ts +5 -0
  71. package/dist/components/ui/modal/grid/index.js +4 -0
  72. package/dist/components/ui/modal/grid/types.d.ts +51 -0
  73. package/dist/components/ui/modal/grid/types.js +1 -0
  74. package/dist/components/ui/modal/grid/ui/01/ModalGridSelection01.svelte +83 -0
  75. package/dist/components/ui/modal/grid/ui/01/ModalGridSelection01.svelte.d.ts +4 -0
  76. package/dist/components/ui/modal/grid/ui/02/ModalGridSelection02.svelte +146 -0
  77. package/dist/components/ui/modal/grid/ui/02/ModalGridSelection02.svelte.d.ts +4 -0
  78. package/dist/components/ui/modal/grid/ui/ModalGridSelection.svelte +60 -0
  79. package/dist/components/ui/modal/grid/ui/ModalGridSelection.svelte.d.ts +4 -0
  80. package/dist/components/ui/modal/map/index.d.ts +3 -0
  81. package/dist/components/ui/modal/map/index.js +2 -0
  82. package/dist/components/ui/modal/map/types.d.ts +48 -0
  83. package/dist/components/ui/modal/map/types.js +1 -0
  84. package/dist/components/ui/modal/map/ui/ModalMap.svelte +187 -0
  85. package/dist/components/ui/modal/map/ui/ModalMap.svelte.d.ts +4 -0
  86. package/dist/components/ui/modal/notification/index.d.ts +3 -0
  87. package/dist/components/ui/modal/notification/index.js +2 -0
  88. package/dist/components/ui/modal/notification/types.d.ts +26 -0
  89. package/dist/components/ui/modal/notification/types.js +1 -0
  90. package/dist/components/ui/modal/notification/ui/ModalNotification.svelte +65 -0
  91. package/dist/components/ui/modal/notification/ui/ModalNotification.svelte.d.ts +4 -0
  92. package/dist/components/ui/modal/share/index.d.ts +3 -0
  93. package/dist/components/ui/modal/share/index.js +2 -0
  94. package/dist/components/ui/modal/share/types.d.ts +47 -0
  95. package/dist/components/ui/modal/share/types.js +1 -0
  96. package/dist/components/ui/modal/share/ui/ModalShareSelection.svelte +156 -0
  97. package/dist/components/ui/modal/share/ui/ModalShareSelection.svelte.d.ts +4 -0
  98. package/dist/components/ui/modal/upload/index.d.ts +3 -0
  99. package/dist/components/ui/modal/upload/index.js +2 -0
  100. package/dist/components/ui/modal/upload/types.d.ts +79 -0
  101. package/dist/components/ui/modal/upload/types.js +1 -0
  102. package/dist/components/ui/modal/upload/ui/ModalUpload.svelte +268 -0
  103. package/dist/components/ui/modal/upload/ui/ModalUpload.svelte.d.ts +4 -0
  104. package/dist/components/ui/section/Section01.svelte +90 -0
  105. package/dist/components/ui/section/Section01.svelte.d.ts +4 -0
  106. package/dist/components/ui/section/Section02.svelte +68 -0
  107. package/dist/components/ui/section/Section02.svelte.d.ts +4 -0
  108. package/dist/components/ui/section/Section03.svelte +52 -0
  109. package/dist/components/ui/section/Section03.svelte.d.ts +4 -0
  110. package/dist/components/ui/section/index.d.ts +4 -0
  111. package/dist/components/ui/section/index.js +3 -0
  112. package/dist/components/ui/section/types.d.ts +46 -0
  113. package/dist/components/ui/section/types.js +1 -0
  114. package/dist/docs/DocsSidebar.svelte +58 -1
  115. package/dist/docs/components.d.ts +1 -1
  116. package/dist/docs/components.js +968 -0
  117. package/dist/globals.css +360 -0
  118. package/dist/index.d.ts +185 -0
  119. package/dist/index.js +185 -0
  120. package/dist/types/index.d.ts +53 -0
  121. 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 LeftHero from "../../../../../ui/panel/LeftHero.svelte";
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
- <main class="h-screen w-screen flex items-center">
52
- <svg width="0" height="0" class="absolute">
53
- <defs>
54
- <clipPath id="grid-curve-clip" clipPathUnits="objectBoundingBox">
55
- <path d="M0.35,0 L1,0 C0.85,0.3 1,0.6 0.4,1 L1,1 Z" />
56
- </clipPath>
57
- </defs>
58
- </svg>
59
- <div class="hidden md:block md:w-8/12">
60
- <LeftHero {title} type={type ?? "POINTER"} items={carouselItems} />
61
- </div>
62
- <div class="w-full md:px-0 md:w-4/12 border-gray-900">
63
- {#if children}
64
- {@render children()}
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>
@@ -12,7 +12,12 @@
12
12
  import LanguageSwitcher from "../../../../../ui/language-switcher/language-switcher.svelte";
13
13
  import { LightSwitch } from "../../../../../ui/light-switch";
14
14
  import { t } from "../../../../../../i18n";
15
- import type { LoginFormType, LoginRequestDto, LinkProps, SocialLoginItem } from "../../types";
15
+ import type {
16
+ LoginFormType,
17
+ LoginRequestDto,
18
+ LinkProps,
19
+ SocialLoginItem,
20
+ } from "../../types";
16
21
  import FormLoginUsernamePassword02 from "./FormLoginUsernamePassword02.svelte";
17
22
  import FormLoginEmailPassword02 from "./FormLoginEmailPassword02.svelte";
18
23
  import FormLoginPhonePassword02 from "./FormLoginPhonePassword02.svelte";
@@ -38,7 +43,7 @@
38
43
  }: Props = $props();
39
44
  </script>
40
45
 
41
- <div class="flex-1 flex flex-col justify-between h-full bg-white">
46
+ <div class="flex-1 flex flex-col justify-between h-full">
42
47
  <nav class="flex justify-end p-5">
43
48
  <div class="flex gap-2">
44
49
  <LightSwitch />
@@ -49,7 +54,9 @@
49
54
  <div class="flex-1 flex flex-col justify-center px-8 md:px-12 pb-8">
50
55
  <div class="w-full max-w-sm mx-auto space-y-6">
51
56
  <div class="text-center space-y-2">
52
- <h1 class="text-2xl font-bold text-gray-900">{$t("text.login.welcome")}</h1>
57
+ <h1 class="text-2xl font-bold text-gray-900">
58
+ {$t("text.login.welcome")}
59
+ </h1>
53
60
  <p class="text-sm text-gray-500">
54
61
  {$t("text.login.continue")}
55
62
  </p>
@@ -58,7 +65,11 @@
58
65
  {#if formType == "EMAIL_PASSWORD"}
59
66
  <FormLoginEmailPassword02 {onSubmit} {forgetPassword} {socialLogins} />
60
67
  {:else if formType == "USERNAME_PASSWORD"}
61
- <FormLoginUsernamePassword02 {onSubmit} {forgetPassword} {socialLogins} />
68
+ <FormLoginUsernamePassword02
69
+ {onSubmit}
70
+ {forgetPassword}
71
+ {socialLogins}
72
+ />
62
73
  {:else if formType == "PHONE_PASSWORD"}
63
74
  <FormLoginPhonePassword02 {onSubmit} {forgetPassword} {socialLogins} />
64
75
  {/if}
@@ -10,7 +10,7 @@
10
10
 
11
11
  <script lang="ts">
12
12
  import AuthCard from "./LoginCard02.svelte";
13
- import LeftHero from "./LeftHero02.svelte";
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
- <main class="h-screen w-screen flex items-center justify-center">
52
- <div class="hidden md:flex w-7/12 h-screen">
53
- <LeftHero {title} type={type ?? "POINTER"} items={carouselItems} />
54
- </div>
55
- <div class="w-full md:w-5/12 flex flex-col h-screen">
56
- {#if children}
57
- {@render children()}
58
- {:else}
59
- <AuthCard
60
- {formType}
61
- {onSubmit}
62
- {forgetPassword}
63
- {privacyPolicy}
64
- {termsOfService}
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>
@@ -54,9 +54,7 @@
54
54
  <div class="flex-1 flex flex-col justify-center px-8 md:px-12 pb-8">
55
55
  <div class="w-full max-w-sm mx-auto space-y-6">
56
56
  <div class="space-y-2">
57
- <div
58
- class="w-12 h-12 bg-gray-100 rounded-xl flex items-center justify-center"
59
- >
57
+ <div class="w-12 h-12 rounded-xl flex items-center justify-center">
60
58
  <span class="text-xl font-bold text-gray-600">G</span>
61
59
  </div>
62
60
  <h1 class="text-2xl font-bold text-gray-900">
@@ -79,21 +77,41 @@
79
77
  <FormLoginPhonePassword03 {onSubmit} {forgetPassword} {socialLogins} />
80
78
  {/if}
81
79
 
82
- <p class="text-center text-sm text-gray-600">
83
- {$t("text.login.no-account")}
84
- <a
85
- href={register?.url ?? "/register"}
86
- onclick={register?.onclick}
87
- class="font-semibold text-primary hover:underline"
88
- >
89
- {$t("text.login.sign-up")}
90
- </a>
91
- </p>
80
+ <div class="flex flex-col space-y-2">
81
+ <div class="text-center text-xs space-x-2">
82
+ <a
83
+ href={privacyPolicy?.url ?? "/privacy-policy"}
84
+ onclick={privacyPolicy?.onclick}
85
+ class="hover:underline"
86
+ >
87
+ {$t("link.privacy-policy.label")}
88
+ </a>
89
+ <span>|</span>
90
+ <a
91
+ href={termsOfService?.url ?? "/terms-of-service"}
92
+ onclick={termsOfService?.onclick}
93
+ class="hover:underline"
94
+ >
95
+ {$t("link.terms-of-service.label")}
96
+ </a>
97
+ </div>
98
+
99
+ <p class="text-center text-sm">
100
+ {$t("text.login.no-account")}
101
+ <a
102
+ href={register?.url ?? "/register"}
103
+ onclick={register?.onclick}
104
+ class="font-semibold text-primary hover:underline"
105
+ >
106
+ {$t("text.login.sign-up")}
107
+ </a>
108
+ </p>
109
+ </div>
92
110
  </div>
93
111
  </div>
94
112
 
95
113
  <div class="px-8 pb-8">
96
- <div class="flex items-center gap-3 p-4 bg-gray-50 rounded-xl">
114
+ <div class="flex items-center gap-3 p-4 rounded-xl">
97
115
  <div class="flex -space-x-2">
98
116
  <div
99
117
  class="w-8 h-8 rounded-full bg-linear-to-br from-blue-400 to-blue-600 border-2 border-white"
@@ -106,10 +124,10 @@
106
124
  ></div>
107
125
  </div>
108
126
  <div>
109
- <p class="text-sm font-semibold text-gray-900">
127
+ <p class="text-sm font-semibold">
110
128
  {$t("text.login.users.count")}
111
129
  </p>
112
- <p class="text-xs text-gray-500">{$t("text.login.users.worldwide")}</p>
130
+ <p class="text-xs">{$t("text.login.users.worldwide")}</p>
113
131
  </div>
114
132
  </div>
115
133
  </div>
@@ -10,7 +10,7 @@
10
10
 
11
11
  <script lang="ts">
12
12
  import AuthCard from "./LoginCard03.svelte";
13
- import LeftHero from "./LeftHero03.svelte";
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
- <main class="h-screen w-screen flex items-center justify-center">
52
- <div class="hidden md:flex w-1/2 h-screen">
53
- <LeftHero {title} type={type ?? "DOT"} items={carouselItems} />
54
- </div>
55
- <div class="w-full md:w-1/2 flex flex-col h-screen">
56
- {#if children}
57
- {@render children()}
58
- {:else}
59
- <AuthCard
60
- {formType}
61
- {onSubmit}
62
- {forgetPassword}
63
- {privacyPolicy}
64
- {termsOfService}
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,3 @@
1
+ declare const PageRegister01: import("svelte").Component<PageRegisterProps, {}, "">;
2
+ type PageRegister01 = ReturnType<typeof PageRegister01>;
3
+ export default PageRegister01;
@@ -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;