negodesign 0.0.26 → 0.0.28
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/assets/placeholder-company.png +0 -0
- package/dist/assets/placeholder-image.png +0 -0
- package/dist/components/core/breadcrumb/breadcrumb-list.svelte +31 -31
- package/dist/components/core/button/ButtonBack.svelte +18 -18
- package/dist/components/core/button/ButtonLogin.svelte +15 -15
- package/dist/components/core/button/ButtonLoginWith.svelte +57 -57
- package/dist/components/core/button/ButtonSend.svelte +15 -15
- package/dist/components/core/card/highlight/01/CardHighlight01.svelte +110 -91
- package/dist/components/core/card/highlight/02/CardHighlight02.svelte +108 -93
- package/dist/components/core/card/highlight/CardHighlight.svelte +22 -22
- package/dist/components/core/card/highlight/data.js +4 -1
- package/dist/components/core/card/media/01/CardMedia01.svelte +111 -111
- package/dist/components/core/card/media/02/CardMedia02.svelte +110 -110
- package/dist/components/core/card/media/CardMedia.svelte +17 -17
- package/dist/components/core/card/profile/01/CardProfile01.svelte +98 -98
- package/dist/components/core/card/profile/02/CardProfile02.svelte +98 -98
- package/dist/components/core/card/profile/CardProfile.svelte +17 -17
- package/dist/components/core/card/promotion/CardPromotion.svelte +133 -112
- package/dist/components/core/card/shared/CardButton.svelte +30 -30
- package/dist/components/core/card/shared/CardCart.svelte +36 -36
- package/dist/components/core/card/shared/CardDescription.svelte +38 -38
- package/dist/components/core/card/shared/CardFavorite.svelte +33 -33
- package/dist/components/core/card/shared/CardStarRating.svelte +20 -20
- package/dist/components/core/card/shared/CardStartPrice.svelte +32 -34
- package/dist/components/core/card/shared/CardTags.svelte +70 -73
- package/dist/components/core/card/shared/CardThumbnailVideo.svelte +169 -169
- package/dist/components/core/card/shared/TruncatableText.svelte +55 -55
- package/dist/components/core/carousel/badge/ui/CarouselBadge.svelte +82 -83
- package/dist/components/core/carousel/hero/CarouselHero.svelte +158 -158
- package/dist/components/core/carousel/highlights/ui/CarouselHighlights.svelte +65 -63
- package/dist/components/core/carousel/promotion/ui/CarouselPromotion.svelte +64 -64
- package/dist/components/core/carousel/shared/ui/CarouselHeader.svelte +55 -55
- package/dist/components/core/datatable/ui/DataTableActions.svelte +28 -28
- package/dist/components/core/datatable/ui/DataTableCheckbox.svelte +22 -22
- package/dist/components/core/datatable/ui/DataTableContent.svelte +59 -59
- package/dist/components/core/datatable/ui/DataTableCore.svelte +151 -151
- package/dist/components/core/datatable/ui/DataTableDragHandle.svelte +8 -8
- package/dist/components/core/datatable/ui/DataTableListFilter.svelte +59 -59
- package/dist/components/core/datatable/ui/DataTableListPagination.svelte +35 -35
- package/dist/components/core/form/ui/input-base.svelte +81 -81
- package/dist/components/core/form/ui/input-email-or-phone.svelte +23 -23
- package/dist/components/core/form/ui/input-email.svelte +23 -23
- package/dist/components/core/form/ui/input-password-confirm.svelte +23 -23
- package/dist/components/core/form/ui/input-password.svelte +23 -23
- package/dist/components/core/form/ui/input-phone.svelte +33 -33
- package/dist/components/core/form/ui/input-username.svelte +22 -22
- package/dist/components/core/hero/SimpleHero.svelte +65 -65
- package/dist/components/core/label/LabelOr.svelte +25 -25
- package/dist/components/core/link/link-forget-password.svelte +12 -12
- package/dist/components/core/link/link-privacy-polity.svelte +12 -12
- package/dist/components/core/link/link-terms-of-service.svelte +12 -12
- package/dist/components/core/nav/ui/menu-links.svelte +27 -27
- package/dist/components/core/nav/ui/mobile/nav-menu-drawer.svelte +85 -85
- package/dist/components/core/nav/ui/nav-menu-bottom-sidebar.svelte +33 -33
- package/dist/components/core/nav/ui/nav-menu-sidebar.svelte +97 -97
- package/dist/components/core/nav/ui/nav-menu-top-bar-sidebar.svelte +103 -103
- package/dist/components/core/nav/ui/nav-menu.svelte +106 -106
- package/dist/components/core/panel/CarouselSlot.svelte +63 -63
- package/dist/components/core/panel/LeftHero.svelte +116 -116
- package/dist/components/core/search/SearchInput.svelte +32 -32
- package/dist/components/core/search/shared/SearchInputCore.svelte +66 -66
- package/dist/components/core/sidebar/MenuBarSidebar.svelte +70 -70
- package/dist/components/core/tabs/ui/tab-underline.svelte +43 -43
- package/dist/components/pages/admin/01/ui/AdminContent.svelte +14 -14
- package/dist/components/pages/admin/01/ui/AdminPanel.svelte +46 -46
- package/dist/components/pages/security/login/01/ui/FormRegister.svelte +28 -28
- package/dist/components/pages/security/login/01/ui/LoginCard.svelte +107 -107
- package/dist/components/pages/security/login/PageLogin.svelte +22 -22
- package/dist/components/ui/badge/badge.svelte +49 -49
- package/dist/components/ui/button/button.svelte +82 -82
- package/dist/components/ui/chart/chart-container.svelte +80 -80
- package/dist/components/ui/chart/chart-style.svelte +37 -37
- package/dist/components/ui/chart/chart-tooltip.svelte +184 -184
- package/dist/components/ui/checkbox/checkbox.svelte +40 -40
- package/dist/components/ui/data-table/flex-render.svelte +40 -40
- package/dist/components/ui/drawer/drawer-close.svelte +7 -7
- package/dist/components/ui/drawer/drawer-content.svelte +33 -33
- package/dist/components/ui/drawer/drawer-description.svelte +17 -17
- package/dist/components/ui/drawer/drawer-footer.svelte +20 -20
- package/dist/components/ui/drawer/drawer-header.svelte +20 -20
- package/dist/components/ui/drawer/drawer-nested.svelte +12 -12
- package/dist/components/ui/drawer/drawer-overlay.svelte +17 -17
- package/dist/components/ui/drawer/drawer-portal.svelte +7 -7
- package/dist/components/ui/drawer/drawer-title.svelte +17 -17
- package/dist/components/ui/drawer/drawer-trigger.svelte +7 -7
- package/dist/components/ui/drawer/drawer.svelte +12 -12
- package/dist/components/ui/select/select-content.svelte +45 -45
- package/dist/components/ui/select/select-group-heading.svelte +21 -21
- package/dist/components/ui/select/select-group.svelte +17 -17
- package/dist/components/ui/select/select-item.svelte +41 -41
- package/dist/components/ui/select/select-label.svelte +20 -20
- package/dist/components/ui/select/select-portal.svelte +7 -7
- package/dist/components/ui/select/select-scroll-down-button.svelte +21 -21
- package/dist/components/ui/select/select-scroll-up-button.svelte +21 -21
- package/dist/components/ui/select/select-separator.svelte +18 -18
- package/dist/components/ui/select/select-trigger.svelte +30 -30
- package/dist/components/ui/select/select.svelte +11 -11
- package/dist/components/ui/sidebar/sidebar-menu-sub-button.svelte +39 -39
- package/dist/components/ui/star-rating/star-rating-star.svelte +41 -41
- package/dist/components/ui/star-rating/star-rating.svelte +20 -20
- package/dist/components/ui/table/table-body.svelte +15 -15
- package/dist/components/ui/table/table-caption.svelte +20 -20
- package/dist/components/ui/table/table-cell.svelte +15 -15
- package/dist/components/ui/table/table-footer.svelte +20 -20
- package/dist/components/ui/table/table-head.svelte +15 -15
- package/dist/components/ui/table/table-header.svelte +20 -20
- package/dist/components/ui/table/table-row.svelte +15 -15
- package/dist/components/ui/table/table.svelte +17 -17
- package/dist/components/ui/tabs/tabs-content.svelte +17 -17
- package/dist/components/ui/tabs/tabs-list.svelte +40 -40
- package/dist/components/ui/tabs/tabs-trigger.svelte +23 -23
- package/dist/components/ui/tabs/tabs.svelte +19 -19
- package/dist/globals.css +8 -38
- package/dist/styles/globals.css +149 -149
- package/package.json +113 -113
|
@@ -1,14 +1,14 @@
|
|
|
1
|
-
<script lang="ts">
|
|
2
|
-
import type { Snippet } from "svelte";
|
|
3
|
-
|
|
4
|
-
/** Content wrapper for admin pages. */
|
|
5
|
-
type Props = {
|
|
6
|
-
children?: Snippet;
|
|
7
|
-
};
|
|
8
|
-
|
|
9
|
-
let { children }: Props = $props();
|
|
10
|
-
</script>
|
|
11
|
-
|
|
12
|
-
<div class="flex flex-1 flex-col gap-4 p-4 pt-0">
|
|
13
|
-
{@render children?.()}
|
|
14
|
-
</div>
|
|
1
|
+
<script lang="ts">
|
|
2
|
+
import type { Snippet } from "svelte";
|
|
3
|
+
|
|
4
|
+
/** Content wrapper for admin pages. */
|
|
5
|
+
type Props = {
|
|
6
|
+
children?: Snippet;
|
|
7
|
+
};
|
|
8
|
+
|
|
9
|
+
let { children }: Props = $props();
|
|
10
|
+
</script>
|
|
11
|
+
|
|
12
|
+
<div class="flex flex-1 flex-col gap-4 p-4 pt-0">
|
|
13
|
+
{@render children?.()}
|
|
14
|
+
</div>
|
|
@@ -1,46 +1,46 @@
|
|
|
1
|
-
<script lang="ts">
|
|
2
|
-
import LanguageSwitcher from "../../../../ui/language-switcher/language-switcher.svelte";
|
|
3
|
-
import LightSwitch from "../../../../ui/light-switch/light-switch.svelte";
|
|
4
|
-
import { Separator } from "../../../../ui/separator/index.js";
|
|
5
|
-
import * as Sidebar from "../../../../ui/sidebar/index.js";
|
|
6
|
-
import type { Snippet } from "svelte";
|
|
7
|
-
|
|
8
|
-
/**
|
|
9
|
-
* Admin layout with sidebar, header, and content.
|
|
10
|
-
* @property {Snippet} appsidebar - Application sidebar
|
|
11
|
-
* @property {Snippet} content - Main content
|
|
12
|
-
* @property {Snippet} breadcrumb - Breadcrumb navigation
|
|
13
|
-
*/
|
|
14
|
-
type Props = {
|
|
15
|
-
appsidebar?: Snippet;
|
|
16
|
-
content?: Snippet;
|
|
17
|
-
breadcrumb?: Snippet;
|
|
18
|
-
};
|
|
19
|
-
|
|
20
|
-
let { appsidebar, content, breadcrumb }: Props = $props();
|
|
21
|
-
</script>
|
|
22
|
-
|
|
23
|
-
<Sidebar.Provider>
|
|
24
|
-
{@render appsidebar?.()}
|
|
25
|
-
<Sidebar.Inset>
|
|
26
|
-
<header
|
|
27
|
-
class="flex h-16 shrink-0 items-center md:justify-between gap-2 transition-[width,height] ease-linear group-has-data-[collapsible=icon]/sidebar-wrapper:h-12"
|
|
28
|
-
>
|
|
29
|
-
<div class="flex items-center gap-2 px-4">
|
|
30
|
-
<Sidebar.Trigger class="-ms-1" />
|
|
31
|
-
<Separator
|
|
32
|
-
orientation="vertical"
|
|
33
|
-
class="me-2 data-[orientation=vertical]:h-4"
|
|
34
|
-
/>
|
|
35
|
-
{@render breadcrumb?.()}
|
|
36
|
-
</div>
|
|
37
|
-
<div class="pr-5">
|
|
38
|
-
<div class="flex gap-3">
|
|
39
|
-
<LanguageSwitcher />
|
|
40
|
-
<LightSwitch />
|
|
41
|
-
</div>
|
|
42
|
-
</div>
|
|
43
|
-
</header>
|
|
44
|
-
{@render content?.()}
|
|
45
|
-
</Sidebar.Inset>
|
|
46
|
-
</Sidebar.Provider>
|
|
1
|
+
<script lang="ts">
|
|
2
|
+
import LanguageSwitcher from "../../../../ui/language-switcher/language-switcher.svelte";
|
|
3
|
+
import LightSwitch from "../../../../ui/light-switch/light-switch.svelte";
|
|
4
|
+
import { Separator } from "../../../../ui/separator/index.js";
|
|
5
|
+
import * as Sidebar from "../../../../ui/sidebar/index.js";
|
|
6
|
+
import type { Snippet } from "svelte";
|
|
7
|
+
|
|
8
|
+
/**
|
|
9
|
+
* Admin layout with sidebar, header, and content.
|
|
10
|
+
* @property {Snippet} appsidebar - Application sidebar
|
|
11
|
+
* @property {Snippet} content - Main content
|
|
12
|
+
* @property {Snippet} breadcrumb - Breadcrumb navigation
|
|
13
|
+
*/
|
|
14
|
+
type Props = {
|
|
15
|
+
appsidebar?: Snippet;
|
|
16
|
+
content?: Snippet;
|
|
17
|
+
breadcrumb?: Snippet;
|
|
18
|
+
};
|
|
19
|
+
|
|
20
|
+
let { appsidebar, content, breadcrumb }: Props = $props();
|
|
21
|
+
</script>
|
|
22
|
+
|
|
23
|
+
<Sidebar.Provider>
|
|
24
|
+
{@render appsidebar?.()}
|
|
25
|
+
<Sidebar.Inset>
|
|
26
|
+
<header
|
|
27
|
+
class="flex h-16 shrink-0 items-center md:justify-between gap-2 transition-[width,height] ease-linear group-has-data-[collapsible=icon]/sidebar-wrapper:h-12"
|
|
28
|
+
>
|
|
29
|
+
<div class="flex items-center gap-2 px-4">
|
|
30
|
+
<Sidebar.Trigger class="-ms-1" />
|
|
31
|
+
<Separator
|
|
32
|
+
orientation="vertical"
|
|
33
|
+
class="me-2 data-[orientation=vertical]:h-4"
|
|
34
|
+
/>
|
|
35
|
+
{@render breadcrumb?.()}
|
|
36
|
+
</div>
|
|
37
|
+
<div class="pr-5">
|
|
38
|
+
<div class="flex gap-3">
|
|
39
|
+
<LanguageSwitcher />
|
|
40
|
+
<LightSwitch />
|
|
41
|
+
</div>
|
|
42
|
+
</div>
|
|
43
|
+
</header>
|
|
44
|
+
{@render content?.()}
|
|
45
|
+
</Sidebar.Inset>
|
|
46
|
+
</Sidebar.Provider>
|
|
@@ -1,28 +1,28 @@
|
|
|
1
|
-
<script lang="ts">
|
|
2
|
-
import InputPasswordConfirm from "../../../../../core/form/ui/input-password-confirm.svelte";
|
|
3
|
-
import InputPassword from "../../../../../core/form/ui/input-password.svelte";
|
|
4
|
-
import InputEmail from "../../../../../core/form/ui/input-email.svelte";
|
|
5
|
-
import ButtonLogin from "../../../../../core/button/ButtonLogin.svelte";
|
|
6
|
-
import { t } from "../../../../../../i18n";
|
|
7
|
-
|
|
8
|
-
let email = $state("");
|
|
9
|
-
let password = $state("");
|
|
10
|
-
</script>
|
|
11
|
-
|
|
12
|
-
<form class="space-y-4" onsubmit={(e) => e.preventDefault()}>
|
|
13
|
-
<p class="text-[13px] py-3">{$t("text.register")}</p>
|
|
14
|
-
|
|
15
|
-
<div class="space-y-1">
|
|
16
|
-
<InputEmail value={email} />
|
|
17
|
-
</div>
|
|
18
|
-
|
|
19
|
-
<div class="space-y-1">
|
|
20
|
-
<InputPassword value={password} />
|
|
21
|
-
</div>
|
|
22
|
-
|
|
23
|
-
<div class="space-y-1">
|
|
24
|
-
<InputPasswordConfirm value={password} />
|
|
25
|
-
</div>
|
|
26
|
-
|
|
27
|
-
<ButtonLogin />
|
|
28
|
-
</form>
|
|
1
|
+
<script lang="ts">
|
|
2
|
+
import InputPasswordConfirm from "../../../../../core/form/ui/input-password-confirm.svelte";
|
|
3
|
+
import InputPassword from "../../../../../core/form/ui/input-password.svelte";
|
|
4
|
+
import InputEmail from "../../../../../core/form/ui/input-email.svelte";
|
|
5
|
+
import ButtonLogin from "../../../../../core/button/ButtonLogin.svelte";
|
|
6
|
+
import { t } from "../../../../../../i18n";
|
|
7
|
+
|
|
8
|
+
let email = $state("");
|
|
9
|
+
let password = $state("");
|
|
10
|
+
</script>
|
|
11
|
+
|
|
12
|
+
<form class="space-y-4" onsubmit={(e) => e.preventDefault()}>
|
|
13
|
+
<p class="text-[13px] py-3">{$t("text.register")}</p>
|
|
14
|
+
|
|
15
|
+
<div class="space-y-1">
|
|
16
|
+
<InputEmail value={email} />
|
|
17
|
+
</div>
|
|
18
|
+
|
|
19
|
+
<div class="space-y-1">
|
|
20
|
+
<InputPassword value={password} />
|
|
21
|
+
</div>
|
|
22
|
+
|
|
23
|
+
<div class="space-y-1">
|
|
24
|
+
<InputPasswordConfirm value={password} />
|
|
25
|
+
</div>
|
|
26
|
+
|
|
27
|
+
<ButtonLogin />
|
|
28
|
+
</form>
|
|
@@ -1,107 +1,107 @@
|
|
|
1
|
-
<script lang="ts" module>
|
|
2
|
-
/**
|
|
3
|
-
* @component LoginCard
|
|
4
|
-
* Authentication card with login/register tabs, back button, light switch, and link footer.
|
|
5
|
-
*
|
|
6
|
-
* @example svelte
|
|
7
|
-
* <LoginCard formType="EMAIL_PASSWORD" onSubmit={(cred) => login(cred)} />
|
|
8
|
-
*/
|
|
9
|
-
</script>
|
|
10
|
-
|
|
11
|
-
<script lang="ts">
|
|
12
|
-
import LanguageSwitcher from "../../../../../ui/language-switcher/language-switcher.svelte";
|
|
13
|
-
import LinkTermsOfService from "../../../../../core/link/link-terms-of-service.svelte";
|
|
14
|
-
import LinkPrivacyPolity from "../../../../../core/link/link-privacy-polity.svelte";
|
|
15
|
-
import TabUnderline from "../../../../../core/tabs/ui/tab-underline.svelte";
|
|
16
|
-
import ButtonBack from "../../../../../core/button/ButtonBack.svelte";
|
|
17
|
-
import LabelOr from "../../../../../core/label/LabelOr.svelte";
|
|
18
|
-
import type { Snippet } from "svelte";
|
|
19
|
-
import { LightSwitch } from "../../../../../ui/light-switch";
|
|
20
|
-
import { t } from "../../../../../../i18n";
|
|
21
|
-
import type { LoginFormType, LoginRequestDto, LinkProps } from "../../types";
|
|
22
|
-
import FormLoginEmailPassword from "./FormLoginEmailPassword.svelte";
|
|
23
|
-
import FormLoginUsernamePassword from "./FormLoginUsernamePassword.svelte";
|
|
24
|
-
import FormLoginPhonePassword from "./FormLoginPhonePassword.svelte";
|
|
25
|
-
|
|
26
|
-
type Props = {
|
|
27
|
-
formType?: LoginFormType;
|
|
28
|
-
onSubmit?: (credential: LoginRequestDto) => void;
|
|
29
|
-
register?: Snippet;
|
|
30
|
-
forgetPassword?: LinkProps;
|
|
31
|
-
privacyPolicy?: LinkProps;
|
|
32
|
-
termsOfService?: LinkProps;
|
|
33
|
-
};
|
|
34
|
-
|
|
35
|
-
let {
|
|
36
|
-
formType,
|
|
37
|
-
onSubmit,
|
|
38
|
-
register,
|
|
39
|
-
forgetPassword,
|
|
40
|
-
privacyPolicy,
|
|
41
|
-
termsOfService,
|
|
42
|
-
}: Props = $props();
|
|
43
|
-
</script>
|
|
44
|
-
|
|
45
|
-
<div class="flex-1 flex flex-col justify-between h-screen bg-gradient-right">
|
|
46
|
-
<nav class="flex justify-between p-5 md:bg-transparent">
|
|
47
|
-
<div>
|
|
48
|
-
<ButtonBack />
|
|
49
|
-
</div>
|
|
50
|
-
<div class="flex gap-2">
|
|
51
|
-
<LightSwitch />
|
|
52
|
-
<LanguageSwitcher />
|
|
53
|
-
</div>
|
|
54
|
-
</nav>
|
|
55
|
-
|
|
56
|
-
<div
|
|
57
|
-
class="p-5 h-full border-t-2 bg-background md:border-none rounded-tl-[35px] rounded-tr-[35px]"
|
|
58
|
-
>
|
|
59
|
-
<TabUnderline
|
|
60
|
-
items={[
|
|
61
|
-
{
|
|
62
|
-
item: { label: $t("label.login"), value: "login" },
|
|
63
|
-
children: loginSnippet,
|
|
64
|
-
},
|
|
65
|
-
...(register
|
|
66
|
-
? [
|
|
67
|
-
{
|
|
68
|
-
item: { label: $t("label.register"), value: "register" },
|
|
69
|
-
children: registerSnippet,
|
|
70
|
-
},
|
|
71
|
-
]
|
|
72
|
-
: []),
|
|
73
|
-
]}
|
|
74
|
-
/>
|
|
75
|
-
|
|
76
|
-
{#snippet loginSnippet()}
|
|
77
|
-
{#if formType == "EMAIL_PASSWORD"}
|
|
78
|
-
<FormLoginEmailPassword {onSubmit} {forgetPassword} />
|
|
79
|
-
{:else if formType == "USERNAME_PASSWORD"}
|
|
80
|
-
<FormLoginUsernamePassword {onSubmit} {forgetPassword} />
|
|
81
|
-
{:else if formType == "PHONE_PASSWORD"}
|
|
82
|
-
<FormLoginPhonePassword {onSubmit} {forgetPassword} />
|
|
83
|
-
{/if}
|
|
84
|
-
{/snippet}
|
|
85
|
-
|
|
86
|
-
{#snippet registerSnippet()}
|
|
87
|
-
{#if register}
|
|
88
|
-
{@render register()}
|
|
89
|
-
{/if}
|
|
90
|
-
{/snippet}
|
|
91
|
-
</div>
|
|
92
|
-
|
|
93
|
-
<!-- Footer Terms -->
|
|
94
|
-
<div
|
|
95
|
-
class="text-[11px] text-slate-400 py-2 flex justify-center gap-2 bg-background"
|
|
96
|
-
>
|
|
97
|
-
<LinkPrivacyPolity
|
|
98
|
-
href={privacyPolicy?.url}
|
|
99
|
-
onclick={privacyPolicy?.onclick}
|
|
100
|
-
/>
|
|
101
|
-
<LabelOr />
|
|
102
|
-
<LinkTermsOfService
|
|
103
|
-
href={termsOfService?.url}
|
|
104
|
-
onclick={termsOfService?.onclick}
|
|
105
|
-
/>
|
|
106
|
-
</div>
|
|
107
|
-
</div>
|
|
1
|
+
<script lang="ts" module>
|
|
2
|
+
/**
|
|
3
|
+
* @component LoginCard
|
|
4
|
+
* Authentication card with login/register tabs, back button, light switch, and link footer.
|
|
5
|
+
*
|
|
6
|
+
* @example svelte
|
|
7
|
+
* <LoginCard formType="EMAIL_PASSWORD" onSubmit={(cred) => login(cred)} />
|
|
8
|
+
*/
|
|
9
|
+
</script>
|
|
10
|
+
|
|
11
|
+
<script lang="ts">
|
|
12
|
+
import LanguageSwitcher from "../../../../../ui/language-switcher/language-switcher.svelte";
|
|
13
|
+
import LinkTermsOfService from "../../../../../core/link/link-terms-of-service.svelte";
|
|
14
|
+
import LinkPrivacyPolity from "../../../../../core/link/link-privacy-polity.svelte";
|
|
15
|
+
import TabUnderline from "../../../../../core/tabs/ui/tab-underline.svelte";
|
|
16
|
+
import ButtonBack from "../../../../../core/button/ButtonBack.svelte";
|
|
17
|
+
import LabelOr from "../../../../../core/label/LabelOr.svelte";
|
|
18
|
+
import type { Snippet } from "svelte";
|
|
19
|
+
import { LightSwitch } from "../../../../../ui/light-switch";
|
|
20
|
+
import { t } from "../../../../../../i18n";
|
|
21
|
+
import type { LoginFormType, LoginRequestDto, LinkProps } from "../../types";
|
|
22
|
+
import FormLoginEmailPassword from "./FormLoginEmailPassword.svelte";
|
|
23
|
+
import FormLoginUsernamePassword from "./FormLoginUsernamePassword.svelte";
|
|
24
|
+
import FormLoginPhonePassword from "./FormLoginPhonePassword.svelte";
|
|
25
|
+
|
|
26
|
+
type Props = {
|
|
27
|
+
formType?: LoginFormType;
|
|
28
|
+
onSubmit?: (credential: LoginRequestDto) => void;
|
|
29
|
+
register?: Snippet;
|
|
30
|
+
forgetPassword?: LinkProps;
|
|
31
|
+
privacyPolicy?: LinkProps;
|
|
32
|
+
termsOfService?: LinkProps;
|
|
33
|
+
};
|
|
34
|
+
|
|
35
|
+
let {
|
|
36
|
+
formType,
|
|
37
|
+
onSubmit,
|
|
38
|
+
register,
|
|
39
|
+
forgetPassword,
|
|
40
|
+
privacyPolicy,
|
|
41
|
+
termsOfService,
|
|
42
|
+
}: Props = $props();
|
|
43
|
+
</script>
|
|
44
|
+
|
|
45
|
+
<div class="flex-1 flex flex-col justify-between h-screen bg-gradient-right">
|
|
46
|
+
<nav class="flex justify-between p-5 md:bg-transparent">
|
|
47
|
+
<div>
|
|
48
|
+
<ButtonBack />
|
|
49
|
+
</div>
|
|
50
|
+
<div class="flex gap-2">
|
|
51
|
+
<LightSwitch />
|
|
52
|
+
<LanguageSwitcher />
|
|
53
|
+
</div>
|
|
54
|
+
</nav>
|
|
55
|
+
|
|
56
|
+
<div
|
|
57
|
+
class="p-5 h-full border-t-2 bg-background md:border-none rounded-tl-[35px] rounded-tr-[35px]"
|
|
58
|
+
>
|
|
59
|
+
<TabUnderline
|
|
60
|
+
items={[
|
|
61
|
+
{
|
|
62
|
+
item: { label: $t("label.login"), value: "login" },
|
|
63
|
+
children: loginSnippet,
|
|
64
|
+
},
|
|
65
|
+
...(register
|
|
66
|
+
? [
|
|
67
|
+
{
|
|
68
|
+
item: { label: $t("label.register"), value: "register" },
|
|
69
|
+
children: registerSnippet,
|
|
70
|
+
},
|
|
71
|
+
]
|
|
72
|
+
: []),
|
|
73
|
+
]}
|
|
74
|
+
/>
|
|
75
|
+
|
|
76
|
+
{#snippet loginSnippet()}
|
|
77
|
+
{#if formType == "EMAIL_PASSWORD"}
|
|
78
|
+
<FormLoginEmailPassword {onSubmit} {forgetPassword} />
|
|
79
|
+
{:else if formType == "USERNAME_PASSWORD"}
|
|
80
|
+
<FormLoginUsernamePassword {onSubmit} {forgetPassword} />
|
|
81
|
+
{:else if formType == "PHONE_PASSWORD"}
|
|
82
|
+
<FormLoginPhonePassword {onSubmit} {forgetPassword} />
|
|
83
|
+
{/if}
|
|
84
|
+
{/snippet}
|
|
85
|
+
|
|
86
|
+
{#snippet registerSnippet()}
|
|
87
|
+
{#if register}
|
|
88
|
+
{@render register()}
|
|
89
|
+
{/if}
|
|
90
|
+
{/snippet}
|
|
91
|
+
</div>
|
|
92
|
+
|
|
93
|
+
<!-- Footer Terms -->
|
|
94
|
+
<div
|
|
95
|
+
class="text-[11px] text-slate-400 py-2 flex justify-center gap-2 bg-background"
|
|
96
|
+
>
|
|
97
|
+
<LinkPrivacyPolity
|
|
98
|
+
href={privacyPolicy?.url}
|
|
99
|
+
onclick={privacyPolicy?.onclick}
|
|
100
|
+
/>
|
|
101
|
+
<LabelOr />
|
|
102
|
+
<LinkTermsOfService
|
|
103
|
+
href={termsOfService?.url}
|
|
104
|
+
onclick={termsOfService?.onclick}
|
|
105
|
+
/>
|
|
106
|
+
</div>
|
|
107
|
+
</div>
|
|
@@ -1,22 +1,22 @@
|
|
|
1
|
-
<script lang="ts" module>
|
|
2
|
-
/**
|
|
3
|
-
* @component PageLogin
|
|
4
|
-
* Main login page. Routes to the specified layout variant.
|
|
5
|
-
*
|
|
6
|
-
* @example svelte
|
|
7
|
-
* <PageLogin varient="01" formType="EMAIL_PASSWORD" onSubmit={(cred) => login(cred)} />
|
|
8
|
-
*/
|
|
9
|
-
</script>
|
|
10
|
-
|
|
11
|
-
<script lang="ts">
|
|
12
|
-
import type { PageLoginProps } from "./types";
|
|
13
|
-
import PageLogin01 from "./01/ui/PageLogin01.svelte";
|
|
14
|
-
|
|
15
|
-
type Props = {
|
|
16
|
-
variant?: 1;
|
|
17
|
-
};
|
|
18
|
-
|
|
19
|
-
let { ...props }: PageLoginProps & Props = $props();
|
|
20
|
-
</script>
|
|
21
|
-
|
|
22
|
-
<PageLogin01 {...props} />
|
|
1
|
+
<script lang="ts" module>
|
|
2
|
+
/**
|
|
3
|
+
* @component PageLogin
|
|
4
|
+
* Main login page. Routes to the specified layout variant.
|
|
5
|
+
*
|
|
6
|
+
* @example svelte
|
|
7
|
+
* <PageLogin varient="01" formType="EMAIL_PASSWORD" onSubmit={(cred) => login(cred)} />
|
|
8
|
+
*/
|
|
9
|
+
</script>
|
|
10
|
+
|
|
11
|
+
<script lang="ts">
|
|
12
|
+
import type { PageLoginProps } from "./types";
|
|
13
|
+
import PageLogin01 from "./01/ui/PageLogin01.svelte";
|
|
14
|
+
|
|
15
|
+
type Props = {
|
|
16
|
+
variant?: 1;
|
|
17
|
+
};
|
|
18
|
+
|
|
19
|
+
let { ...props }: PageLoginProps & Props = $props();
|
|
20
|
+
</script>
|
|
21
|
+
|
|
22
|
+
<PageLogin01 {...props} />
|
|
@@ -1,49 +1,49 @@
|
|
|
1
|
-
<script lang="ts" module>
|
|
2
|
-
import { type VariantProps, tv } from "tailwind-variants";
|
|
3
|
-
|
|
4
|
-
export const badgeVariants = tv({
|
|
5
|
-
base: "h-5 gap-1 rounded-4xl border border-transparent px-2 py-0.5 text-xs font-medium transition-all has-data-[icon=inline-end]:pr-1.5 has-data-[icon=inline-start]:pl-1.5 [&>svg]:size-3! focus-visible:border-ring focus-visible:ring-ring/50 aria-invalid:ring-destructive/20 dark:aria-invalid:ring-destructive/40 aria-invalid:border-destructive group/badge inline-flex w-fit shrink-0 items-center justify-center overflow-hidden whitespace-nowrap transition-colors focus-visible:ring-[3px] [&>svg]:pointer-events-none",
|
|
6
|
-
variants: {
|
|
7
|
-
variant: {
|
|
8
|
-
default: "bg-primary text-primary-foreground [a]:hover:bg-primary/80",
|
|
9
|
-
secondary: "bg-secondary text-secondary-foreground [a]:hover:bg-secondary/80",
|
|
10
|
-
destructive: "bg-destructive/10 [a]:hover:bg-destructive/20 focus-visible:ring-destructive/20 dark:focus-visible:ring-destructive/40 text-destructive dark:bg-destructive/20",
|
|
11
|
-
outline: "border-border text-foreground [a]:hover:bg-muted [a]:hover:text-muted-foreground bg-input/30",
|
|
12
|
-
ghost: "hover:bg-muted hover:text-muted-foreground dark:hover:bg-muted/50",
|
|
13
|
-
link: "text-primary underline-offset-4 hover:underline",
|
|
14
|
-
},
|
|
15
|
-
},
|
|
16
|
-
defaultVariants: {
|
|
17
|
-
variant: "default",
|
|
18
|
-
},
|
|
19
|
-
});
|
|
20
|
-
|
|
21
|
-
export type BadgeVariant = VariantProps<typeof badgeVariants>["variant"];
|
|
22
|
-
</script>
|
|
23
|
-
|
|
24
|
-
<script lang="ts">
|
|
25
|
-
import type { HTMLAnchorAttributes } from "svelte/elements";
|
|
26
|
-
import { cn, type WithElementRef } from "../../../utils.js";
|
|
27
|
-
|
|
28
|
-
let {
|
|
29
|
-
ref = $bindable(null),
|
|
30
|
-
href,
|
|
31
|
-
class: className,
|
|
32
|
-
variant = "default",
|
|
33
|
-
children,
|
|
34
|
-
...restProps
|
|
35
|
-
}: WithElementRef<HTMLAnchorAttributes> & {
|
|
36
|
-
variant?: BadgeVariant;
|
|
37
|
-
} = $props();
|
|
38
|
-
</script>
|
|
39
|
-
|
|
40
|
-
<svelte:element
|
|
41
|
-
this={href ? "a" : "span"}
|
|
42
|
-
bind:this={ref}
|
|
43
|
-
data-slot="badge"
|
|
44
|
-
{href}
|
|
45
|
-
class={cn(badgeVariants({ variant }), className)}
|
|
46
|
-
{...restProps}
|
|
47
|
-
>
|
|
48
|
-
{@render children?.()}
|
|
49
|
-
</svelte:element>
|
|
1
|
+
<script lang="ts" module>
|
|
2
|
+
import { type VariantProps, tv } from "tailwind-variants";
|
|
3
|
+
|
|
4
|
+
export const badgeVariants = tv({
|
|
5
|
+
base: "h-5 gap-1 rounded-4xl border border-transparent px-2 py-0.5 text-xs font-medium transition-all has-data-[icon=inline-end]:pr-1.5 has-data-[icon=inline-start]:pl-1.5 [&>svg]:size-3! focus-visible:border-ring focus-visible:ring-ring/50 aria-invalid:ring-destructive/20 dark:aria-invalid:ring-destructive/40 aria-invalid:border-destructive group/badge inline-flex w-fit shrink-0 items-center justify-center overflow-hidden whitespace-nowrap transition-colors focus-visible:ring-[3px] [&>svg]:pointer-events-none",
|
|
6
|
+
variants: {
|
|
7
|
+
variant: {
|
|
8
|
+
default: "bg-primary text-primary-foreground [a]:hover:bg-primary/80",
|
|
9
|
+
secondary: "bg-secondary text-secondary-foreground [a]:hover:bg-secondary/80",
|
|
10
|
+
destructive: "bg-destructive/10 [a]:hover:bg-destructive/20 focus-visible:ring-destructive/20 dark:focus-visible:ring-destructive/40 text-destructive dark:bg-destructive/20",
|
|
11
|
+
outline: "border-border text-foreground [a]:hover:bg-muted [a]:hover:text-muted-foreground bg-input/30",
|
|
12
|
+
ghost: "hover:bg-muted hover:text-muted-foreground dark:hover:bg-muted/50",
|
|
13
|
+
link: "text-primary underline-offset-4 hover:underline",
|
|
14
|
+
},
|
|
15
|
+
},
|
|
16
|
+
defaultVariants: {
|
|
17
|
+
variant: "default",
|
|
18
|
+
},
|
|
19
|
+
});
|
|
20
|
+
|
|
21
|
+
export type BadgeVariant = VariantProps<typeof badgeVariants>["variant"];
|
|
22
|
+
</script>
|
|
23
|
+
|
|
24
|
+
<script lang="ts">
|
|
25
|
+
import type { HTMLAnchorAttributes } from "svelte/elements";
|
|
26
|
+
import { cn, type WithElementRef } from "../../../utils.js";
|
|
27
|
+
|
|
28
|
+
let {
|
|
29
|
+
ref = $bindable(null),
|
|
30
|
+
href,
|
|
31
|
+
class: className,
|
|
32
|
+
variant = "default",
|
|
33
|
+
children,
|
|
34
|
+
...restProps
|
|
35
|
+
}: WithElementRef<HTMLAnchorAttributes> & {
|
|
36
|
+
variant?: BadgeVariant;
|
|
37
|
+
} = $props();
|
|
38
|
+
</script>
|
|
39
|
+
|
|
40
|
+
<svelte:element
|
|
41
|
+
this={href ? "a" : "span"}
|
|
42
|
+
bind:this={ref}
|
|
43
|
+
data-slot="badge"
|
|
44
|
+
{href}
|
|
45
|
+
class={cn(badgeVariants({ variant }), className)}
|
|
46
|
+
{...restProps}
|
|
47
|
+
>
|
|
48
|
+
{@render children?.()}
|
|
49
|
+
</svelte:element>
|