@tanglemedia/svelte-starter-auth-shadcn 0.0.3 → 0.1.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.
Files changed (160) hide show
  1. package/dist/app.css +174 -0
  2. package/dist/app.html +0 -1
  3. package/dist/index.d.ts +1 -1
  4. package/dist/index.js +1 -1
  5. package/dist/lib/components/types.d.ts +13 -0
  6. package/dist/lib/components/types.js +1 -0
  7. package/dist/lib/components/ui/auth-layout/auth-layout-content-top.svelte +15 -0
  8. package/dist/lib/components/ui/auth-layout/auth-layout-content-top.svelte.d.ts +8 -0
  9. package/dist/lib/components/ui/auth-layout/auth-layout-content.svelte +15 -0
  10. package/dist/lib/components/ui/auth-layout/auth-layout-content.svelte.d.ts +8 -0
  11. package/dist/lib/components/ui/auth-layout/auth-layout-feature-info.svelte +45 -0
  12. package/dist/lib/components/ui/auth-layout/auth-layout-feature-info.svelte.d.ts +12 -0
  13. package/dist/lib/components/ui/auth-layout/auth-layout-feature.svelte +24 -0
  14. package/dist/lib/components/ui/auth-layout/auth-layout-feature.svelte.d.ts +8 -0
  15. package/dist/lib/components/ui/auth-layout/auth-layout-logo.svelte +99 -0
  16. package/dist/lib/components/ui/auth-layout/auth-layout-logo.svelte.d.ts +63 -0
  17. package/dist/lib/components/ui/auth-layout/auth-layout-main.svelte +17 -0
  18. package/dist/lib/components/ui/auth-layout/auth-layout-main.svelte.d.ts +8 -0
  19. package/dist/lib/components/ui/auth-layout/auth-layout.svelte +22 -88
  20. package/dist/lib/components/ui/auth-layout/auth-layout.svelte.d.ts +4 -12
  21. package/dist/lib/components/ui/auth-layout/index.d.ts +8 -2
  22. package/dist/lib/components/ui/auth-layout/index.js +10 -2
  23. package/dist/lib/components/ui/forgot-password/forgot-password-container.svelte +27 -0
  24. package/dist/lib/components/ui/forgot-password/forgot-password-container.svelte.d.ts +8 -0
  25. package/dist/lib/components/ui/forgot-password/forgot-password-form.svelte +70 -77
  26. package/dist/lib/components/ui/forgot-password/forgot-password-form.svelte.d.ts +12 -7
  27. package/dist/lib/components/ui/forgot-password/forgot-password-header.svelte +34 -0
  28. package/dist/lib/components/ui/forgot-password/forgot-password-header.svelte.d.ts +13 -0
  29. package/dist/lib/components/ui/forgot-password/forgot-password-login.svelte +19 -0
  30. package/dist/lib/components/ui/forgot-password/forgot-password-login.svelte.d.ts +9 -0
  31. package/dist/lib/components/ui/forgot-password/forgot-password-provider.svelte +13 -0
  32. package/dist/lib/components/ui/forgot-password/forgot-password-provider.svelte.d.ts +25 -0
  33. package/dist/lib/components/ui/forgot-password/forgot-password-submit.svelte +17 -0
  34. package/dist/lib/components/ui/forgot-password/forgot-password-submit.svelte.d.ts +7 -0
  35. package/dist/lib/components/ui/forgot-password/forgot-password-user-input.svelte +21 -0
  36. package/dist/lib/components/ui/forgot-password/forgot-password-user-input.svelte.d.ts +26 -0
  37. package/dist/lib/components/ui/forgot-password/forgot-password.schema.d.ts +5 -0
  38. package/dist/lib/components/ui/forgot-password/forgot-password.schema.js +4 -0
  39. package/dist/lib/components/ui/forgot-password/index.d.ts +9 -2
  40. package/dist/lib/components/ui/forgot-password/index.js +9 -2
  41. package/dist/lib/components/ui/index.d.ts +5 -5
  42. package/dist/lib/components/ui/index.js +6 -5
  43. package/dist/lib/components/ui/login-form/index.d.ts +11 -2
  44. package/dist/lib/components/ui/login-form/index.js +13 -2
  45. package/dist/lib/components/ui/login-form/login-container.svelte +27 -0
  46. package/dist/lib/components/ui/login-form/login-container.svelte.d.ts +8 -0
  47. package/dist/lib/components/ui/login-form/login-context.d.ts +2 -0
  48. package/dist/lib/components/ui/login-form/login-context.js +13 -0
  49. package/dist/lib/components/ui/login-form/login-forgot-password.svelte +19 -0
  50. package/dist/lib/components/ui/login-form/login-forgot-password.svelte.d.ts +9 -0
  51. package/dist/lib/components/ui/login-form/login-form.svelte +68 -107
  52. package/dist/lib/components/ui/login-form/login-form.svelte.d.ts +10 -7
  53. package/dist/lib/components/ui/login-form/login-header.svelte +34 -0
  54. package/dist/lib/components/ui/login-form/login-header.svelte.d.ts +13 -0
  55. package/dist/lib/components/ui/login-form/login-password-input.svelte +21 -0
  56. package/dist/lib/components/ui/login-form/login-password-input.svelte.d.ts +26 -0
  57. package/dist/lib/components/ui/login-form/login-provider.svelte +13 -0
  58. package/dist/lib/components/ui/login-form/login-provider.svelte.d.ts +25 -0
  59. package/dist/lib/components/ui/login-form/login-submit.svelte +17 -0
  60. package/dist/lib/components/ui/login-form/login-submit.svelte.d.ts +7 -0
  61. package/dist/lib/components/ui/login-form/login-user-input.svelte +21 -0
  62. package/dist/lib/components/ui/login-form/login-user-input.svelte.d.ts +26 -0
  63. package/dist/lib/components/ui/login-form/login.schema.d.ts +6 -0
  64. package/dist/lib/components/ui/login-form/login.schema.js +5 -0
  65. package/dist/lib/components/ui/register-form/index.d.ts +10 -2
  66. package/dist/lib/components/ui/register-form/index.js +10 -2
  67. package/dist/lib/components/ui/register-form/register-container.svelte +27 -0
  68. package/dist/lib/components/ui/register-form/register-container.svelte.d.ts +8 -0
  69. package/dist/lib/components/ui/register-form/register-form.svelte +67 -166
  70. package/dist/lib/components/ui/register-form/register-form.svelte.d.ts +10 -5
  71. package/dist/lib/components/ui/register-form/register-header.svelte +34 -0
  72. package/dist/lib/components/ui/register-form/register-header.svelte.d.ts +13 -0
  73. package/dist/lib/components/ui/register-form/register-name-input.svelte +21 -0
  74. package/dist/lib/components/ui/register-form/register-name-input.svelte.d.ts +26 -0
  75. package/dist/lib/components/ui/register-form/register-password-input.svelte +21 -0
  76. package/dist/lib/components/ui/register-form/register-password-input.svelte.d.ts +26 -0
  77. package/dist/lib/components/ui/register-form/register-provider.svelte +13 -0
  78. package/dist/lib/components/ui/register-form/register-provider.svelte.d.ts +25 -0
  79. package/dist/lib/components/ui/register-form/register-submit.svelte +17 -0
  80. package/dist/lib/components/ui/register-form/register-submit.svelte.d.ts +7 -0
  81. package/dist/lib/components/ui/register-form/register-user-input.svelte +21 -0
  82. package/dist/lib/components/ui/register-form/register-user-input.svelte.d.ts +26 -0
  83. package/dist/lib/components/ui/register-form/register.schema.d.ts +8 -0
  84. package/dist/lib/components/ui/register-form/register.schema.js +7 -0
  85. package/dist/lib/components/ui/reset-password/index.d.ts +8 -2
  86. package/dist/lib/components/ui/reset-password/index.js +8 -2
  87. package/dist/lib/components/ui/reset-password/reset-password-container.svelte +27 -0
  88. package/dist/lib/components/ui/reset-password/reset-password-container.svelte.d.ts +8 -0
  89. package/dist/lib/components/ui/reset-password/reset-password-form.svelte +91 -0
  90. package/dist/lib/components/ui/reset-password/reset-password-form.svelte.d.ts +20 -0
  91. package/dist/lib/components/ui/reset-password/reset-password-header.svelte +34 -0
  92. package/dist/lib/components/ui/reset-password/reset-password-header.svelte.d.ts +13 -0
  93. package/dist/lib/components/ui/reset-password/reset-password-password-input.svelte +21 -0
  94. package/dist/lib/components/ui/reset-password/reset-password-password-input.svelte.d.ts +26 -0
  95. package/dist/lib/components/ui/reset-password/reset-password-provider.svelte +13 -0
  96. package/dist/lib/components/ui/reset-password/reset-password-provider.svelte.d.ts +25 -0
  97. package/dist/lib/components/ui/reset-password/reset-password-submit.svelte +17 -0
  98. package/dist/lib/components/ui/reset-password/reset-password-submit.svelte.d.ts +7 -0
  99. package/dist/lib/components/ui/reset-password/reset-password.schema.d.ts +6 -0
  100. package/dist/lib/components/ui/reset-password/reset-password.schema.js +9 -0
  101. package/dist/lib/index.d.ts +2 -3
  102. package/dist/lib/index.js +3 -3
  103. package/dist/lib/utils.d.ts +10 -0
  104. package/package.json +39 -30
  105. package/src/app.css +174 -0
  106. package/src/app.html +0 -1
  107. package/src/index.ts +1 -1
  108. package/src/lib/components/types.ts +24 -0
  109. package/src/lib/components/ui/auth-layout/auth-layout-content-top.svelte +15 -0
  110. package/src/lib/components/ui/auth-layout/auth-layout-content.svelte +15 -0
  111. package/src/lib/components/ui/auth-layout/auth-layout-feature-info.svelte +45 -0
  112. package/src/lib/components/ui/auth-layout/auth-layout-feature.svelte +24 -0
  113. package/src/lib/components/ui/auth-layout/auth-layout-logo.svelte +99 -0
  114. package/src/lib/components/ui/auth-layout/auth-layout-main.svelte +17 -0
  115. package/src/lib/components/ui/auth-layout/auth-layout.svelte +22 -88
  116. package/src/lib/components/ui/auth-layout/index.ts +20 -2
  117. package/src/lib/components/ui/forgot-password/forgot-password-container.svelte +27 -0
  118. package/src/lib/components/ui/forgot-password/forgot-password-form.svelte +70 -77
  119. package/src/lib/components/ui/forgot-password/forgot-password-header.svelte +34 -0
  120. package/src/lib/components/ui/forgot-password/forgot-password-login.svelte +19 -0
  121. package/src/lib/components/ui/forgot-password/forgot-password-provider.svelte +13 -0
  122. package/src/lib/components/ui/forgot-password/forgot-password-submit.svelte +17 -0
  123. package/src/lib/components/ui/forgot-password/forgot-password-user-input.svelte +21 -0
  124. package/src/lib/components/ui/forgot-password/forgot-password.schema.ts +7 -0
  125. package/src/lib/components/ui/forgot-password/index.ts +19 -2
  126. package/src/lib/components/ui/index.ts +6 -5
  127. package/src/lib/components/ui/login-form/index.ts +26 -2
  128. package/src/lib/components/ui/login-form/login-container.svelte +27 -0
  129. package/src/lib/components/ui/login-form/login-context.ts +16 -0
  130. package/src/lib/components/ui/login-form/login-forgot-password.svelte +19 -0
  131. package/src/lib/components/ui/login-form/login-form.svelte +68 -107
  132. package/src/lib/components/ui/login-form/login-header.svelte +34 -0
  133. package/src/lib/components/ui/login-form/login-password-input.svelte +21 -0
  134. package/src/lib/components/ui/login-form/login-provider.svelte +13 -0
  135. package/src/lib/components/ui/login-form/login-submit.svelte +17 -0
  136. package/src/lib/components/ui/login-form/login-user-input.svelte +21 -0
  137. package/src/lib/components/ui/login-form/login.schema.ts +8 -0
  138. package/src/lib/components/ui/register-form/index.ts +21 -2
  139. package/src/lib/components/ui/register-form/register-container.svelte +27 -0
  140. package/src/lib/components/ui/register-form/register-form.svelte +67 -166
  141. package/src/lib/components/ui/register-form/register-header.svelte +34 -0
  142. package/src/lib/components/ui/register-form/register-name-input.svelte +21 -0
  143. package/src/lib/components/ui/register-form/register-password-input.svelte +21 -0
  144. package/src/lib/components/ui/register-form/register-provider.svelte +13 -0
  145. package/src/lib/components/ui/register-form/register-submit.svelte +17 -0
  146. package/src/lib/components/ui/register-form/register-user-input.svelte +21 -0
  147. package/src/lib/components/ui/register-form/register.schema.ts +10 -0
  148. package/src/lib/components/ui/reset-password/index.ts +17 -2
  149. package/src/lib/components/ui/reset-password/reset-password-container.svelte +27 -0
  150. package/src/lib/components/ui/reset-password/reset-password-form.svelte +91 -0
  151. package/src/lib/components/ui/reset-password/reset-password-header.svelte +34 -0
  152. package/src/lib/components/ui/reset-password/reset-password-password-input.svelte +21 -0
  153. package/src/lib/components/ui/reset-password/reset-password-provider.svelte +13 -0
  154. package/src/lib/components/ui/reset-password/reset-password-submit.svelte +17 -0
  155. package/src/lib/components/ui/reset-password/reset-password.schema.ts +12 -0
  156. package/src/lib/index.ts +3 -3
  157. package/src/lib/utils.ts +8 -1
  158. package/dist/lib/components/ui/reset-password/reset-form.svelte +0 -116
  159. package/dist/lib/components/ui/reset-password/reset-form.svelte.d.ts +0 -16
  160. package/src/lib/components/ui/reset-password/reset-form.svelte +0 -116
@@ -0,0 +1,9 @@
1
+ import type { Snippet } from "svelte";
2
+ type LoginForgotPasswordProps = {
3
+ href: string;
4
+ class?: string;
5
+ children?: Snippet;
6
+ };
7
+ declare const LoginForgotPassword: import("svelte").Component<LoginForgotPasswordProps, {}, "">;
8
+ type LoginForgotPassword = ReturnType<typeof LoginForgotPassword>;
9
+ export default LoginForgotPassword;
@@ -1,134 +1,95 @@
1
1
  <script lang="ts">
2
- import { Button, Card, Input, Label, Form } from '@tanglemedia/svelte-starter-ui-shadcn';
3
- import type { Snippet } from 'svelte';
2
+ import { Card } from "@tanglemedia/svelte-starter-ui-shadcn";
3
+ import type { Snippet } from "svelte";
4
+ import SuperDebug, {
5
+ defaults,
6
+ superForm,
7
+ type Infer,
8
+ type SuperForm,
9
+ type SuperValidated,
10
+ } from "sveltekit-superforms";
11
+ import { zod4 } from "sveltekit-superforms/adapters";
12
+ import LoginContainer from "./login-container.svelte";
13
+ import LoginForgotPassword from "./login-forgot-password.svelte";
14
+ import LoginHeader from "./login-header.svelte";
15
+ import LoginPasswordInput from "./login-password-input.svelte";
16
+ import LoginProvider from "./login-provider.svelte";
17
+ import LoginSubmit from "./login-submit.svelte";
18
+ import LoginUserInput from "./login-user-input.svelte";
19
+ import { loginSchema, type LoginSchema } from "./login.schema.js";
20
+ import { ServerError } from "@tanglemedia/svelte-starter-form-shadcn";
21
+ // import { Field } from "@tanglemedia/svelte-starter-form-shadcn";
4
22
 
5
23
  interface Props {
6
- superform: any;
24
+ superform?: SuperForm<Infer<LoginSchema>> | null;
7
25
  card?: boolean;
8
- cardClass?: string;
26
+ // cardClass?: string;
9
27
  title?: string;
10
28
  description?: string;
11
- forgotPassword?: boolean;
29
+ // forgotPassword?: boolean;
12
30
  forgotPasswordLink?: string;
13
31
  register?: boolean;
14
32
  registerLink?: string;
15
- formTail?: Snippet;
16
- formHead?: Snippet;
33
+ lead?: Snippet;
34
+ tail?: Snippet;
17
35
  children?: Snippet;
36
+ form?: SuperValidated<Infer<LoginSchema>>;
37
+ action?: string;
38
+
39
+ debug?: boolean;
18
40
  }
19
41
 
20
- let {
21
- superform,
22
- card = false,
23
- cardClass = "mx-auto max-w-sm",
24
- title = "Login",
25
- description = "Enter your information below to register a new account",
26
- forgotPassword = true,
42
+ let {
43
+ debug = false,
44
+ form,
45
+ superform: superforms = $bindable(null),
46
+ card = true,
47
+ title = "Login",
48
+ description = "Enter your credentails below",
49
+ // forgotPassword = true,
27
50
  forgotPasswordLink = "/forgot-password",
28
51
  register = true,
29
52
  registerLink = "/register",
30
- formTail,
31
- formHead,
32
- children
53
+ lead,
54
+ tail,
55
+ action = "?/login",
33
56
  }: Props = $props();
34
57
 
35
- const { form: formData, enhance } = superform;
58
+ // https://github.com/ciscoheat/sveltekit-superforms/issues/630
59
+ superforms = superforms || superForm(form || defaults(zod4(loginSchema)));
60
+
61
+ const { errors, message } = superforms;
36
62
  </script>
37
63
 
38
- {#if card}
39
- <Card.Root class={cardClass}>
40
- <Card.Header>
41
- <Card.Title class="text-2xl">{title}</Card.Title>
42
- <Card.Description>{description}</Card.Description>
43
- </Card.Header>
64
+ <LoginProvider {superforms} {action}>
65
+ <LoginContainer {card}>
66
+ <LoginHeader text={title} desc={description} />
44
67
  <Card.Content>
45
- <form method="POST" use:enhance class="grid gap-4">
46
- {@render formHead?.()}
47
- {#if children}
48
- {@render children?.()}
49
- {:else}
50
- <Form.Field form={superform} name="email">
51
- <Form.Control>
52
- {#snippet children({ props })}
53
- <Form.Label>Email</Form.Label>
54
- <Input {...props} bind:value={$formData.email} type="email" required />
55
- {/snippet}
56
- </Form.Control>
57
- <Form.FieldErrors />
58
- </Form.Field>
59
- <Form.Field form={superform} name="password">
60
- <Form.Control>
61
- {#snippet children({ props })}
62
- <div class="flex items-center">
63
- <Form.Label>Password</Form.Label>
64
- {#if forgotPassword}
65
- <a href={forgotPasswordLink} class="ml-auto inline-block text-sm underline">
66
- Forgot your password?
67
- </a>
68
- {/if}
69
- </div>
70
- <Input {...props} bind:value={$formData.password} type="password" required />
71
- {/snippet}
72
- </Form.Control>
73
- <Form.FieldErrors />
74
- </Form.Field>
75
- {/if}
76
- <Form.Button type="submit" class="w-full">Login</Form.Button>
77
- {@render formTail?.()}
78
- </form>
68
+ {@render lead?.()}
69
+ <ServerError class="mb-4" />
70
+ <LoginUserInput autocomplete="username" name={"username"} />
71
+ <LoginPasswordInput name={"password"} label={"Password"}>
72
+ {#snippet asideLabel()}
73
+ <LoginForgotPassword href={forgotPasswordLink} />
74
+ {/snippet}
75
+ </LoginPasswordInput>
76
+ <LoginSubmit />
79
77
  {#if register}
80
78
  <div class="mt-4 text-center text-sm">
81
79
  Don't have an account?
82
80
  <a href={registerLink} class="underline"> Sign up </a>
83
81
  </div>
84
82
  {/if}
85
- </Card.Content>
86
- </Card.Root>
87
- {:else}
88
- <div class={cardClass}>
89
- <div class="flex flex-col space-y-1.5 p-6 pb-0">
90
- <h3 class="font-semibold tracking-tight text-2xl">{title}</h3>
91
- <p class="text-muted-foreground text-sm">{description}</p>
92
- </div>
93
- <form method="POST" use:enhance class="grid gap-4 p-6">
94
- {@render formHead?.()}
95
- {#if children}
96
- {@render children?.()}
97
- {:else}
98
- <Form.Field form={superform} name="email">
99
- <Form.Control>
100
- {#snippet children({ props })}
101
- <Form.Label>Email</Form.Label>
102
- <Input {...props} bind:value={$formData.email} type="email" required />
103
- {/snippet}
104
- </Form.Control>
105
- <Form.FieldErrors />
106
- </Form.Field>
107
- <Form.Field form={superform} name="password">
108
- <Form.Control>
109
- {#snippet children({ props })}
110
- <div class="flex items-center">
111
- <Form.Label>Password</Form.Label>
112
- {#if forgotPassword}
113
- <a href={forgotPasswordLink} class="ml-auto inline-block text-sm underline">
114
- Forgot your password?
115
- </a>
116
- {/if}
117
- </div>
118
- <Input {...props} bind:value={$formData.password} type="password" required />
119
- {/snippet}
120
- </Form.Control>
121
- <Form.FieldErrors />
122
- </Form.Field>
83
+ {@render tail?.()}
84
+
85
+ {#if debug}
86
+ <div class="mb-6">
87
+ <h4>Errors</h4>
88
+ <SuperDebug data={errors} />
89
+ </div>
90
+ <h4>Message</h4>
91
+ <SuperDebug data={$message} />
123
92
  {/if}
124
- <Form.Button type="submit" class="w-full">Login</Form.Button>
125
- {@render formTail?.()}
126
- </form>
127
- {#if register}
128
- <div class="mt-4 text-center text-sm">
129
- Don't have an account?
130
- <a href={registerLink} class="underline"> Sign up </a>
131
- </div>
132
- {/if}
133
- </div>
134
- {/if}
93
+ </Card.Content>
94
+ </LoginContainer>
95
+ </LoginProvider>
@@ -1,18 +1,21 @@
1
- import type { Snippet } from 'svelte';
1
+ import type { Snippet } from "svelte";
2
+ import { type Infer, type SuperForm, type SuperValidated } from "sveltekit-superforms";
3
+ import { type LoginSchema } from "./login.schema.js";
2
4
  interface Props {
3
- superform: any;
5
+ superform?: SuperForm<Infer<LoginSchema>> | null;
4
6
  card?: boolean;
5
- cardClass?: string;
6
7
  title?: string;
7
8
  description?: string;
8
- forgotPassword?: boolean;
9
9
  forgotPasswordLink?: string;
10
10
  register?: boolean;
11
11
  registerLink?: string;
12
- formTail?: Snippet;
13
- formHead?: Snippet;
12
+ lead?: Snippet;
13
+ tail?: Snippet;
14
14
  children?: Snippet;
15
+ form?: SuperValidated<Infer<LoginSchema>>;
16
+ action?: string;
17
+ debug?: boolean;
15
18
  }
16
- declare const LoginForm: import("svelte").Component<Props, {}, "">;
19
+ declare const LoginForm: import("svelte").Component<Props, {}, "superform">;
17
20
  type LoginForm = ReturnType<typeof LoginForm>;
18
21
  export default LoginForm;
@@ -0,0 +1,34 @@
1
+ <script lang="ts">
2
+ import { Card } from '@tanglemedia/svelte-starter-ui-shadcn';
3
+ import type { Snippet } from 'svelte';
4
+
5
+ type LoginHeaderAttr = {
6
+ text?: string;
7
+ desc?: string;
8
+ };
9
+
10
+ type LoginHeaderProps = LoginHeaderAttr & {
11
+ title?: Snippet<[LoginHeaderAttr]>;
12
+ description?: Snippet<[LoginHeaderAttr]>;
13
+ children?: Snippet<[LoginHeaderAttr]>;
14
+ };
15
+
16
+ let { title, children, description, ...restProps }: LoginHeaderProps = $props();
17
+ </script>
18
+
19
+ <Card.Header>
20
+ <Card.Title class="text-2xl">
21
+ {#if title}
22
+ {@render title(restProps)}
23
+ {:else if children}
24
+ {@render children?.(restProps)}
25
+ {:else}
26
+ {restProps.text}
27
+ {/if}
28
+ </Card.Title>
29
+ {#if description}
30
+ <Card.Description>{@render description(restProps)}</Card.Description>
31
+ {:else if restProps.desc}
32
+ <Card.Description>{restProps.desc}</Card.Description>
33
+ {/if}
34
+ </Card.Header>
@@ -0,0 +1,13 @@
1
+ import type { Snippet } from 'svelte';
2
+ type LoginHeaderAttr = {
3
+ text?: string;
4
+ desc?: string;
5
+ };
6
+ type LoginHeaderProps = LoginHeaderAttr & {
7
+ title?: Snippet<[LoginHeaderAttr]>;
8
+ description?: Snippet<[LoginHeaderAttr]>;
9
+ children?: Snippet<[LoginHeaderAttr]>;
10
+ };
11
+ declare const LoginHeader: import("svelte").Component<LoginHeaderProps, {}, "">;
12
+ type LoginHeader = ReturnType<typeof LoginHeader>;
13
+ export default LoginHeader;
@@ -0,0 +1,21 @@
1
+ <script lang="ts" module>
2
+ import { type FormPathLeaves as _FormPathLeaves } from 'sveltekit-superforms';
3
+
4
+ type T = Record<string, unknown>;
5
+ type U = _FormPathLeaves<T, any>;
6
+ </script>
7
+
8
+ <script
9
+ lang="ts"
10
+ generics="T extends Record<string, unknown>, U extends _FormPathLeaves<T, any>"
11
+ >
12
+ import {
13
+ Field,
14
+ type PasswordFieldProps,
15
+ } from '@tanglemedia/svelte-starter-form-shadcn';
16
+
17
+ type LoginPasswordInputProps = PasswordFieldProps<T, U>;
18
+ const { name = 'password' as U, ...rest }: LoginPasswordInputProps = $props();
19
+ </script>
20
+
21
+ <Field.Password {name} {...rest}></Field.Password>
@@ -0,0 +1,26 @@
1
+ import { type FormPathLeaves as _FormPathLeaves } from 'sveltekit-superforms';
2
+ import { type PasswordFieldProps } from '@tanglemedia/svelte-starter-form-shadcn';
3
+ declare function $$render<T extends Record<string, unknown>, U extends _FormPathLeaves<T, any>>(): {
4
+ props: PasswordFieldProps<T, U>;
5
+ exports: {};
6
+ bindings: "";
7
+ slots: {};
8
+ events: {};
9
+ };
10
+ declare class __sveltets_Render<T extends Record<string, unknown>, U extends _FormPathLeaves<T, any>> {
11
+ props(): ReturnType<typeof $$render<T, U>>['props'];
12
+ events(): ReturnType<typeof $$render<T, U>>['events'];
13
+ slots(): ReturnType<typeof $$render<T, U>>['slots'];
14
+ bindings(): "";
15
+ exports(): {};
16
+ }
17
+ interface $$IsomorphicComponent {
18
+ new <T extends Record<string, unknown>, U extends _FormPathLeaves<T, any>>(options: import('svelte').ComponentConstructorOptions<ReturnType<__sveltets_Render<T, U>['props']>>): import('svelte').SvelteComponent<ReturnType<__sveltets_Render<T, U>['props']>, ReturnType<__sveltets_Render<T, U>['events']>, ReturnType<__sveltets_Render<T, U>['slots']>> & {
19
+ $$bindings?: ReturnType<__sveltets_Render<T, U>['bindings']>;
20
+ } & ReturnType<__sveltets_Render<T, U>['exports']>;
21
+ <T extends Record<string, unknown>, U extends _FormPathLeaves<T, any>>(internal: unknown, props: ReturnType<__sveltets_Render<T, U>['props']> & {}): ReturnType<__sveltets_Render<T, U>['exports']>;
22
+ z_$$bindings?: ReturnType<__sveltets_Render<any, any>['bindings']>;
23
+ }
24
+ declare const LoginPasswordInput: $$IsomorphicComponent;
25
+ type LoginPasswordInput<T extends Record<string, unknown>, U extends _FormPathLeaves<T, any>> = InstanceType<typeof LoginPasswordInput<T, U>>;
26
+ export default LoginPasswordInput;
@@ -0,0 +1,13 @@
1
+ <script lang="ts" module>
2
+ type T = Record<string, unknown>;
3
+ </script>
4
+
5
+ <script lang="ts" generics="T extends Record<string, unknown>">
6
+ import {
7
+ Form,
8
+ type FormProviderProps,
9
+ } from "@tanglemedia/svelte-starter-form-shadcn";
10
+ let rest: FormProviderProps<T> = $props();
11
+ </script>
12
+
13
+ <Form.Provider {...rest} />
@@ -0,0 +1,25 @@
1
+ import { type FormProviderProps } from "@tanglemedia/svelte-starter-form-shadcn";
2
+ declare function $$render<T extends Record<string, unknown>>(): {
3
+ props: FormProviderProps<T>;
4
+ exports: {};
5
+ bindings: "";
6
+ slots: {};
7
+ events: {};
8
+ };
9
+ declare class __sveltets_Render<T extends Record<string, unknown>> {
10
+ props(): ReturnType<typeof $$render<T>>['props'];
11
+ events(): ReturnType<typeof $$render<T>>['events'];
12
+ slots(): ReturnType<typeof $$render<T>>['slots'];
13
+ bindings(): "";
14
+ exports(): {};
15
+ }
16
+ interface $$IsomorphicComponent {
17
+ new <T extends Record<string, unknown>>(options: import('svelte').ComponentConstructorOptions<ReturnType<__sveltets_Render<T>['props']>>): import('svelte').SvelteComponent<ReturnType<__sveltets_Render<T>['props']>, ReturnType<__sveltets_Render<T>['events']>, ReturnType<__sveltets_Render<T>['slots']>> & {
18
+ $$bindings?: ReturnType<__sveltets_Render<T>['bindings']>;
19
+ } & ReturnType<__sveltets_Render<T>['exports']>;
20
+ <T extends Record<string, unknown>>(internal: unknown, props: ReturnType<__sveltets_Render<T>['props']> & {}): ReturnType<__sveltets_Render<T>['exports']>;
21
+ z_$$bindings?: ReturnType<__sveltets_Render<any>['bindings']>;
22
+ }
23
+ declare const LoginProvider: $$IsomorphicComponent;
24
+ type LoginProvider<T extends Record<string, unknown>> = InstanceType<typeof LoginProvider<T>>;
25
+ export default LoginProvider;
@@ -0,0 +1,17 @@
1
+ <script lang="ts">
2
+ import { Form } from "@tanglemedia/svelte-starter-form-shadcn";
3
+ import type { Snippet } from "svelte";
4
+
5
+ type LoginSubmitProps = {
6
+ children?: Snippet;
7
+ };
8
+ const { children }: LoginSubmitProps = $props();
9
+ </script>
10
+
11
+ <Form.Submit class="w-full">
12
+ {#if children}
13
+ {@render children?.()}
14
+ {:else}
15
+ Login
16
+ {/if}
17
+ </Form.Submit>
@@ -0,0 +1,7 @@
1
+ import type { Snippet } from "svelte";
2
+ type LoginSubmitProps = {
3
+ children?: Snippet;
4
+ };
5
+ declare const LoginSubmit: import("svelte").Component<LoginSubmitProps, {}, "">;
6
+ type LoginSubmit = ReturnType<typeof LoginSubmit>;
7
+ export default LoginSubmit;
@@ -0,0 +1,21 @@
1
+ <script lang="ts" module>
2
+ import { type FormPathLeaves as _FormPathLeaves } from 'sveltekit-superforms';
3
+
4
+ type T = Record<string, unknown>;
5
+ type U = _FormPathLeaves<T, any>;
6
+ </script>
7
+
8
+ <script
9
+ lang="ts"
10
+ generics="T extends Record<string, unknown>, U extends _FormPathLeaves<T, any>"
11
+ >
12
+ import {
13
+ Field,
14
+ type InputFieldProps,
15
+ } from '@tanglemedia/svelte-starter-form-shadcn';
16
+
17
+ type LoginUserInputProps = InputFieldProps<T, U>;
18
+ const { name = 'username' as U, label, ...rest }: LoginUserInputProps = $props();
19
+ </script>
20
+
21
+ <Field.Input type={'email'} {name} label={label || 'Username'} {...rest}></Field.Input>
@@ -0,0 +1,26 @@
1
+ import { type FormPathLeaves as _FormPathLeaves } from 'sveltekit-superforms';
2
+ import { type InputFieldProps } from '@tanglemedia/svelte-starter-form-shadcn';
3
+ declare function $$render<T extends Record<string, unknown>, U extends _FormPathLeaves<T, any>>(): {
4
+ props: InputFieldProps<T, U>;
5
+ exports: {};
6
+ bindings: "";
7
+ slots: {};
8
+ events: {};
9
+ };
10
+ declare class __sveltets_Render<T extends Record<string, unknown>, U extends _FormPathLeaves<T, any>> {
11
+ props(): ReturnType<typeof $$render<T, U>>['props'];
12
+ events(): ReturnType<typeof $$render<T, U>>['events'];
13
+ slots(): ReturnType<typeof $$render<T, U>>['slots'];
14
+ bindings(): "";
15
+ exports(): {};
16
+ }
17
+ interface $$IsomorphicComponent {
18
+ new <T extends Record<string, unknown>, U extends _FormPathLeaves<T, any>>(options: import('svelte').ComponentConstructorOptions<ReturnType<__sveltets_Render<T, U>['props']>>): import('svelte').SvelteComponent<ReturnType<__sveltets_Render<T, U>['props']>, ReturnType<__sveltets_Render<T, U>['events']>, ReturnType<__sveltets_Render<T, U>['slots']>> & {
19
+ $$bindings?: ReturnType<__sveltets_Render<T, U>['bindings']>;
20
+ } & ReturnType<__sveltets_Render<T, U>['exports']>;
21
+ <T extends Record<string, unknown>, U extends _FormPathLeaves<T, any>>(internal: unknown, props: ReturnType<__sveltets_Render<T, U>['props']> & {}): ReturnType<__sveltets_Render<T, U>['exports']>;
22
+ z_$$bindings?: ReturnType<__sveltets_Render<any, any>['bindings']>;
23
+ }
24
+ declare const LoginUserInput: $$IsomorphicComponent;
25
+ type LoginUserInput<T extends Record<string, unknown>, U extends _FormPathLeaves<T, any>> = InstanceType<typeof LoginUserInput<T, U>>;
26
+ export default LoginUserInput;
@@ -0,0 +1,6 @@
1
+ import { z } from "zod";
2
+ export declare const loginSchema: z.ZodObject<{
3
+ username: z.ZodString;
4
+ password: z.ZodString;
5
+ }, z.core.$strip>;
6
+ export type LoginSchema = typeof loginSchema;
@@ -0,0 +1,5 @@
1
+ import { z } from "zod";
2
+ export const loginSchema = z.object({
3
+ username: z.string().min(1, { error: "Username is required" }),
4
+ password: z.string().min(1, { error: "Password is required" }),
5
+ });
@@ -1,2 +1,10 @@
1
- import RegisterForm from './register-form.svelte';
2
- export { RegisterForm };
1
+ import Form from './register-form.svelte';
2
+ import Provider from './register-provider.svelte';
3
+ import Header from './register-header.svelte';
4
+ import { registerSchema as schema, type RegisterSchema } from './register.schema.ts';
5
+ import Container from './register-container.svelte';
6
+ import Submit from './register-submit.svelte';
7
+ import UserInput from './register-user-input.svelte';
8
+ import PasswordInput from './register-password-input.svelte';
9
+ import NameInput from './register-name-input.svelte';
10
+ export { Form, Provider, Header, Container, schema, Submit, UserInput, PasswordInput, NameInput, type RegisterSchema, };
@@ -1,2 +1,10 @@
1
- import RegisterForm from './register-form.svelte';
2
- export { RegisterForm };
1
+ import Form from './register-form.svelte';
2
+ import Provider from './register-provider.svelte';
3
+ import Header from './register-header.svelte';
4
+ import { registerSchema as schema } from "./register.schema.js";
5
+ import Container from './register-container.svelte';
6
+ import Submit from './register-submit.svelte';
7
+ import UserInput from './register-user-input.svelte';
8
+ import PasswordInput from './register-password-input.svelte';
9
+ import NameInput from './register-name-input.svelte';
10
+ export { Form, Provider, Header, Container, schema, Submit, UserInput, PasswordInput, NameInput, };
@@ -0,0 +1,27 @@
1
+ <script lang="ts">
2
+ import { Card } from '@tanglemedia/svelte-starter-ui-shadcn';
3
+ import type { WithChild } from 'svelte-toolbelt';
4
+ import { cn } from '../../../utils.js';
5
+
6
+ type LoginContainerProps = Omit<WithChild, 'child'> & {
7
+ class?: string;
8
+ card?: boolean;
9
+ };
10
+
11
+ const {
12
+ children,
13
+ class: cls,
14
+ card = true,
15
+ ...rest
16
+ }: LoginContainerProps = $props();
17
+ </script>
18
+
19
+ {#if !card}
20
+ <div class={cn('mx-auto max-w-sm', cls)} {...rest}>
21
+ {@render children?.()}
22
+ </div>
23
+ {:else}
24
+ <Card.Root class={cn('mx-auto max-w-sm', cls)} {...rest}>
25
+ {@render children?.()}
26
+ </Card.Root>
27
+ {/if}
@@ -0,0 +1,8 @@
1
+ import type { WithChild } from 'svelte-toolbelt';
2
+ type LoginContainerProps = Omit<WithChild, 'child'> & {
3
+ class?: string;
4
+ card?: boolean;
5
+ };
6
+ declare const RegisterContainer: import("svelte").Component<LoginContainerProps, {}, "">;
7
+ type RegisterContainer = ReturnType<typeof RegisterContainer>;
8
+ export default RegisterContainer;