@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
@@ -1,193 +1,94 @@
1
1
  <script lang="ts">
2
- import { Button, Card, Input, Label, Form } from '@tanglemedia/svelte-starter-ui-shadcn';
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
+
13
+ import RegisterProvider from "./register-provider.svelte";
14
+ import RegisterContainer from "./register-container.svelte";
15
+ import RegisterHeader from "./register-header.svelte";
16
+ import RegisterSubmit from "./register-submit.svelte";
17
+ import RegisterUserInput from "./register-user-input.svelte";
18
+ import RegisterPasswordInput from "./register-password-input.svelte";
19
+ import RegisterNameInput from "./register-name-input.svelte";
20
+ import { registerSchema, type RegisterSchema } from "./register.schema.js";
21
+
22
+ import { ServerError } from "@tanglemedia/svelte-starter-form-shadcn";
23
+ // import { Field } from "@tanglemedia/svelte-starter-form-shadcn";
3
24
 
4
25
  interface Props {
5
- superform: any;
26
+ superform?: SuperForm<Infer<RegisterSchema>> | null;
6
27
  card?: boolean;
7
- cardClass?: string;
28
+ // cardClass?: string;
8
29
  title?: string;
9
30
  description?: string;
31
+ // forgotPassword?: boolean;
10
32
  login?: boolean;
11
33
  loginLink?: string;
12
- formTail?: Snippet;
13
- formHead?: Snippet;
34
+ lead?: Snippet;
35
+ tail?: Snippet;
14
36
  children?: Snippet;
37
+ form?: SuperValidated<Infer<RegisterSchema>>;
38
+ action?: string;
39
+
40
+ debug?: boolean;
15
41
  }
16
42
 
17
- let {
18
- superform,
19
- card = false,
20
- cardClass = "mx-auto max-w-sm",
21
- title = "Register",
43
+ let {
44
+ debug = false,
45
+ form,
46
+ superform: superforms = $bindable(null),
47
+ card = true,
48
+ title = "Register",
22
49
  description = "Enter your information below to register a new account",
50
+ // forgotPassword = true,
23
51
  login = true,
24
52
  loginLink = "/login",
25
- formTail,
26
- formHead,
27
- children
53
+ lead,
54
+ tail,
55
+ action = "?/register",
28
56
  }: Props = $props();
29
57
 
30
- const { form: formData, enhance } = superform;
58
+ superforms = superforms || superForm(form || defaults(zod4(registerSchema)));
59
+
60
+ const { errors, message } = superforms;
31
61
  </script>
32
62
 
33
- {#if card}
34
- <Card.Root class={cardClass}>
35
- <Card.Header>
36
- <Card.Title class="text-2xl">{title}</Card.Title>
37
- <Card.Description>{description}</Card.Description>
38
- </Card.Header>
63
+ <RegisterProvider {superforms} {action}>
64
+ <RegisterContainer {card}>
65
+ <RegisterHeader text={title} desc={description} />
39
66
  <Card.Content>
40
- <form method="POST" use:enhance class="grid gap-4">
41
- {@render formHead?.()}
42
- {#if children}
43
- {@render children?.()}
44
- {:else}
45
- <div class="grid grid-cols-2 gap-4">
46
- <Form.Field form={superform} name="first_name">
47
- <Form.Control >
48
- {#snippet children({ props })}
49
- <Form.Label>
50
- First Name
51
- </Form.Label>
52
- <Input {...props} bind:value={$formData.first_name} />
53
- {/snippet}
54
- </Form.Control>
55
- <Form.FieldErrors />
56
- </Form.Field>
57
- <Form.Field form={superform} name="last_name">
58
- <Form.Control >
59
- {#snippet children({ props })}
60
- <Form.Label>
61
- Last Name
62
- </Form.Label>
63
- <Input {...props} bind:value={$formData.last_name} />
64
- {/snippet}
65
- </Form.Control>
66
- <Form.FieldErrors />
67
- </Form.Field>
68
- </div>
69
- <Form.Field form={superform} name="email">
70
- <Form.Control >
71
- {#snippet children({ props })}
72
- <Form.Label>
73
- Email
74
- </Form.Label>
75
- <Input {...props} bind:value={$formData.email} type="email" />
76
- {/snippet}
77
- </Form.Control>
78
- <Form.FieldErrors />
79
- </Form.Field>
80
- <Form.Field form={superform} name="password">
81
- <Form.Control >
82
- {#snippet children({ props })}
83
- <Form.Label>
84
- Password
85
- </Form.Label>
86
- <Input {...props} bind:value={$formData.password} type="password" />
87
- {/snippet}
88
- </Form.Control>
89
- <Form.FieldErrors />
90
- </Form.Field>
91
- <Form.Field form={superform} name="confirm_password">
92
- <Form.Control >
93
- {#snippet children({ props })}
94
- <Form.Label>
95
- Confirm Password
96
- </Form.Label>
97
- <Input {...props} bind:value={$formData.confirm_password} type="password" />
98
- {/snippet}
99
- </Form.Control>
100
- <Form.FieldErrors />
101
- </Form.Field>
102
- {/if}
103
- <Form.Button type="submit" class="w-full">Register</Form.Button>
104
- {@render formTail?.()}
105
- </form>
67
+ {@render lead?.()}
68
+ <ServerError class="mb-4" />
69
+ <div class="flex items-start gap-4 *:mb-0">
70
+ <RegisterNameInput name={"first_name"} label={"First Name"} />
71
+ <RegisterNameInput name={"last_name"} label={"Last Name"} />
72
+ </div>
73
+ <RegisterUserInput name={"username"} />
74
+ <RegisterPasswordInput name={"password"} label={"Password"} />
75
+ <RegisterSubmit />
106
76
  {#if login}
107
77
  <div class="mt-4 text-center text-sm">
108
78
  Already have an account?
109
79
  <a href={loginLink} class="underline"> Sign in </a>
110
80
  </div>
111
81
  {/if}
112
- </Card.Content>
113
- </Card.Root>
114
- {:else}
115
- <div class={cardClass}>
116
- <div class="flex flex-col space-y-1.5">
117
- <h3 class="font-semibold tracking-tight text-2xl">{title}</h3>
118
- <p class="text-muted-foreground text-sm">{description}</p>
119
- </div>
120
- <form method="POST" use:enhance class="grid gap-4">
121
- {@render formHead?.()}
122
- {#if children}
123
- {@render children?.()}
124
- {:else}
125
- <div class="grid grid-cols-2 gap-4">
126
- <Form.Field form={superform} name="first_name">
127
- <Form.Control >
128
- {#snippet children({ props })}
129
- <Form.Label>
130
- First Name
131
- </Form.Label>
132
- <Input {...props} bind:value={$formData.first_name} />
133
- {/snippet}
134
- </Form.Control>
135
- <Form.FieldErrors />
136
- </Form.Field>
137
- <Form.Field form={superform} name="last_name">
138
- <Form.Control >
139
- {#snippet children({ props })}
140
- <Form.Label>
141
- Last Name
142
- </Form.Label>
143
- <Input {...props} bind:value={$formData.last_name} />
144
- {/snippet}
145
- </Form.Control>
146
- <Form.FieldErrors />
147
- </Form.Field>
82
+ {@render tail?.()}
83
+
84
+ {#if debug}
85
+ <div class="mb-6">
86
+ <h4>Errors</h4>
87
+ <SuperDebug data={errors} />
148
88
  </div>
149
- <Form.Field form={superform} name="email">
150
- <Form.Control >
151
- {#snippet children({ props })}
152
- <Form.Label>
153
- Email
154
- </Form.Label>
155
- <Input {...props} bind:value={$formData.email} type="email" />
156
- {/snippet}
157
- </Form.Control>
158
- <Form.FieldErrors />
159
- </Form.Field>
160
- <Form.Field form={superform} name="password">
161
- <Form.Control >
162
- {#snippet children({ props })}
163
- <Form.Label>
164
- Password
165
- </Form.Label>
166
- <Input {...props} bind:value={$formData.password} type="password" />
167
- {/snippet}
168
- </Form.Control>
169
- <Form.FieldErrors />
170
- </Form.Field>
171
- <Form.Field form={superform} name="confirm_password">
172
- <Form.Control >
173
- {#snippet children({ props })}
174
- <Form.Label>
175
- Confirm Password
176
- </Form.Label>
177
- <Input {...props} bind:value={$formData.confirm_password} type="password" />
178
- {/snippet}
179
- </Form.Control>
180
- <Form.FieldErrors />
181
- </Form.Field>
89
+ <h4>Message</h4>
90
+ <SuperDebug data={$message} />
182
91
  {/if}
183
- <Form.Button type="submit" class="w-full">Register</Form.Button>
184
- {@render formTail?.()}
185
- </form>
186
- {#if login}
187
- <div class="mt-4 text-center text-sm">
188
- Already have an account?
189
- <a href={loginLink} class="underline"> Sign in </a>
190
- </div>
191
- {/if}
192
- </div>
193
- {/if}
92
+ </Card.Content>
93
+ </RegisterContainer>
94
+ </RegisterProvider>
@@ -1,15 +1,20 @@
1
+ import type { Snippet } from "svelte";
2
+ import { type Infer, type SuperForm, type SuperValidated } from "sveltekit-superforms";
3
+ import { type RegisterSchema } from "./register.schema.js";
1
4
  interface Props {
2
- superform: any;
5
+ superform?: SuperForm<Infer<RegisterSchema>> | null;
3
6
  card?: boolean;
4
- cardClass?: string;
5
7
  title?: string;
6
8
  description?: string;
7
9
  login?: boolean;
8
10
  loginLink?: string;
9
- formTail?: Snippet;
10
- formHead?: Snippet;
11
+ lead?: Snippet;
12
+ tail?: Snippet;
11
13
  children?: Snippet;
14
+ form?: SuperValidated<Infer<RegisterSchema>>;
15
+ action?: string;
16
+ debug?: boolean;
12
17
  }
13
- declare const RegisterForm: import("svelte").Component<Props, {}, "">;
18
+ declare const RegisterForm: import("svelte").Component<Props, {}, "superform">;
14
19
  type RegisterForm = ReturnType<typeof RegisterForm>;
15
20
  export default RegisterForm;
@@ -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 RegisterHeader: import("svelte").Component<LoginHeaderProps, {}, "">;
12
+ type RegisterHeader = ReturnType<typeof RegisterHeader>;
13
+ export default RegisterHeader;
@@ -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 = 'first_name' as U, label, ...rest }: LoginUserInputProps = $props();
19
+ </script>
20
+
21
+ <Field.Input type={'text'} {name} label={label || 'Name'} {...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 RegisterNameInput: $$IsomorphicComponent;
25
+ type RegisterNameInput<T extends Record<string, unknown>, U extends _FormPathLeaves<T, any>> = InstanceType<typeof RegisterNameInput<T, U>>;
26
+ export default RegisterNameInput;
@@ -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 RegisterPasswordInput: $$IsomorphicComponent;
25
+ type RegisterPasswordInput<T extends Record<string, unknown>, U extends _FormPathLeaves<T, any>> = InstanceType<typeof RegisterPasswordInput<T, U>>;
26
+ export default RegisterPasswordInput;
@@ -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 RegisterProvider: $$IsomorphicComponent;
24
+ type RegisterProvider<T extends Record<string, unknown>> = InstanceType<typeof RegisterProvider<T>>;
25
+ export default RegisterProvider;
@@ -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
+ Register
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 RegisterSubmit: import("svelte").Component<LoginSubmitProps, {}, "">;
6
+ type RegisterSubmit = ReturnType<typeof RegisterSubmit>;
7
+ export default RegisterSubmit;
@@ -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 RegisterUserInput: $$IsomorphicComponent;
25
+ type RegisterUserInput<T extends Record<string, unknown>, U extends _FormPathLeaves<T, any>> = InstanceType<typeof RegisterUserInput<T, U>>;
26
+ export default RegisterUserInput;
@@ -0,0 +1,8 @@
1
+ import { z } from "zod";
2
+ export declare const registerSchema: z.ZodObject<{
3
+ first_name: z.ZodString;
4
+ last_name: z.ZodString;
5
+ username: z.ZodString;
6
+ password: z.ZodString;
7
+ }, z.core.$strip>;
8
+ export type RegisterSchema = typeof registerSchema;
@@ -0,0 +1,7 @@
1
+ import { z } from "zod";
2
+ export const registerSchema = z.object({
3
+ first_name: z.string().min(1, { error: "First name is required" }),
4
+ last_name: z.string().min(1, { error: "Last name is required" }),
5
+ username: z.string().min(1, { error: "Username is required" }),
6
+ password: z.string().min(1, { error: "Password is required" }),
7
+ });
@@ -1,2 +1,8 @@
1
- import ResetPasswordForm from './reset-form.svelte';
2
- export { ResetPasswordForm };
1
+ import Form from './reset-password-form.svelte';
2
+ import Provider from './reset-password-provider.svelte';
3
+ import Header from './reset-password-header.svelte';
4
+ import { resetPasswordSchema as schema, type ResetPasswordSchema } from './reset-password.schema.ts';
5
+ import Container from './reset-password-container.svelte';
6
+ import Submit from './reset-password-submit.svelte';
7
+ import PasswordInput from './reset-password-password-input.svelte';
8
+ export { Form, Provider, Header, Container, schema, Submit, PasswordInput, type ResetPasswordSchema, };
@@ -1,2 +1,8 @@
1
- import ResetPasswordForm from './reset-form.svelte';
2
- export { ResetPasswordForm };
1
+ import Form from './reset-password-form.svelte';
2
+ import Provider from './reset-password-provider.svelte';
3
+ import Header from './reset-password-header.svelte';
4
+ import { resetPasswordSchema as schema } from "./reset-password.schema.js";
5
+ import Container from './reset-password-container.svelte';
6
+ import Submit from './reset-password-submit.svelte';
7
+ import PasswordInput from './reset-password-password-input.svelte';
8
+ export { Form, Provider, Header, Container, schema, Submit, PasswordInput, };
@@ -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 ResetPasswordContainer: import("svelte").Component<LoginContainerProps, {}, "">;
7
+ type ResetPasswordContainer = ReturnType<typeof ResetPasswordContainer>;
8
+ export default ResetPasswordContainer;