@tanglemedia/svelte-starter-auth-shadcn 0.0.2 → 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 (163) hide show
  1. package/dist/app.css +174 -0
  2. package/dist/app.html +0 -1
  3. package/dist/index.d.ts +1 -0
  4. package/dist/index.js +1 -0
  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 -82
  20. package/dist/lib/components/ui/auth-layout/auth-layout.svelte.d.ts +4 -11
  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 -81
  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 -0
  42. package/dist/lib/components/ui/index.js +6 -0
  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 -111
  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 -170
  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/hooks/index.d.ts +1 -0
  102. package/dist/lib/hooks/index.js +1 -0
  103. package/dist/lib/index.d.ts +2 -0
  104. package/dist/lib/index.js +3 -0
  105. package/dist/lib/utils.d.ts +10 -0
  106. package/package.json +40 -69
  107. package/src/app.css +174 -0
  108. package/src/app.html +0 -1
  109. package/src/index.ts +1 -0
  110. package/src/lib/components/types.ts +24 -0
  111. package/src/lib/components/ui/auth-layout/auth-layout-content-top.svelte +15 -0
  112. package/src/lib/components/ui/auth-layout/auth-layout-content.svelte +15 -0
  113. package/src/lib/components/ui/auth-layout/auth-layout-feature-info.svelte +45 -0
  114. package/src/lib/components/ui/auth-layout/auth-layout-feature.svelte +24 -0
  115. package/src/lib/components/ui/auth-layout/auth-layout-logo.svelte +99 -0
  116. package/src/lib/components/ui/auth-layout/auth-layout-main.svelte +17 -0
  117. package/src/lib/components/ui/auth-layout/auth-layout.svelte +22 -88
  118. package/src/lib/components/ui/auth-layout/index.ts +20 -2
  119. package/src/lib/components/ui/forgot-password/forgot-password-container.svelte +27 -0
  120. package/src/lib/components/ui/forgot-password/forgot-password-form.svelte +70 -81
  121. package/src/lib/components/ui/forgot-password/forgot-password-header.svelte +34 -0
  122. package/src/lib/components/ui/forgot-password/forgot-password-login.svelte +19 -0
  123. package/src/lib/components/ui/forgot-password/forgot-password-provider.svelte +13 -0
  124. package/src/lib/components/ui/forgot-password/forgot-password-submit.svelte +17 -0
  125. package/src/lib/components/ui/forgot-password/forgot-password-user-input.svelte +21 -0
  126. package/src/lib/components/ui/forgot-password/forgot-password.schema.ts +7 -0
  127. package/src/lib/components/ui/forgot-password/index.ts +19 -2
  128. package/src/lib/components/ui/index.ts +6 -0
  129. package/src/lib/components/ui/login-form/index.ts +26 -2
  130. package/src/lib/components/ui/login-form/login-container.svelte +27 -0
  131. package/src/lib/components/ui/login-form/login-context.ts +16 -0
  132. package/src/lib/components/ui/login-form/login-forgot-password.svelte +19 -0
  133. package/src/lib/components/ui/login-form/login-form.svelte +68 -111
  134. package/src/lib/components/ui/login-form/login-header.svelte +34 -0
  135. package/src/lib/components/ui/login-form/login-password-input.svelte +21 -0
  136. package/src/lib/components/ui/login-form/login-provider.svelte +13 -0
  137. package/src/lib/components/ui/login-form/login-submit.svelte +17 -0
  138. package/src/lib/components/ui/login-form/login-user-input.svelte +21 -0
  139. package/src/lib/components/ui/login-form/login.schema.ts +8 -0
  140. package/src/lib/components/ui/register-form/index.ts +21 -2
  141. package/src/lib/components/ui/register-form/register-container.svelte +27 -0
  142. package/src/lib/components/ui/register-form/register-form.svelte +67 -170
  143. package/src/lib/components/ui/register-form/register-header.svelte +34 -0
  144. package/src/lib/components/ui/register-form/register-name-input.svelte +21 -0
  145. package/src/lib/components/ui/register-form/register-password-input.svelte +21 -0
  146. package/src/lib/components/ui/register-form/register-provider.svelte +13 -0
  147. package/src/lib/components/ui/register-form/register-submit.svelte +17 -0
  148. package/src/lib/components/ui/register-form/register-user-input.svelte +21 -0
  149. package/src/lib/components/ui/register-form/register.schema.ts +10 -0
  150. package/src/lib/components/ui/reset-password/index.ts +17 -2
  151. package/src/lib/components/ui/reset-password/reset-password-container.svelte +27 -0
  152. package/src/lib/components/ui/reset-password/reset-password-form.svelte +91 -0
  153. package/src/lib/components/ui/reset-password/reset-password-header.svelte +34 -0
  154. package/src/lib/components/ui/reset-password/reset-password-password-input.svelte +21 -0
  155. package/src/lib/components/ui/reset-password/reset-password-provider.svelte +13 -0
  156. package/src/lib/components/ui/reset-password/reset-password-submit.svelte +17 -0
  157. package/src/lib/components/ui/reset-password/reset-password.schema.ts +12 -0
  158. package/src/lib/hooks/index.ts +1 -0
  159. package/src/lib/index.ts +3 -0
  160. package/src/lib/utils.ts +8 -1
  161. package/dist/lib/components/ui/reset-password/reset-form.svelte +0 -120
  162. package/dist/lib/components/ui/reset-password/reset-form.svelte.d.ts +0 -16
  163. package/src/lib/components/ui/reset-password/reset-form.svelte +0 -120
@@ -0,0 +1,91 @@
1
+ <!-- title = "Reset Password",
2
+ description = "Enter your new password below to reset your password", -->
3
+
4
+ <script lang="ts">
5
+ import { Card } from "@tanglemedia/svelte-starter-ui-shadcn";
6
+ import type { Snippet } from "svelte";
7
+ import SuperDebug, {
8
+ defaults,
9
+ superForm,
10
+ type Infer,
11
+ type SuperForm,
12
+ type SuperValidated,
13
+ } from "sveltekit-superforms";
14
+ import { zod4 } from "sveltekit-superforms/adapters";
15
+
16
+ import ResetPasswordProvider from "./reset-password-provider.svelte";
17
+ import ResetPasswordContainer from "./reset-password-container.svelte";
18
+ import ResetPasswordHeader from "./reset-password-header.svelte";
19
+ import ResetPasswordSubmit from "./reset-password-submit.svelte";
20
+ import ResetPasswordPasswordInput from "./reset-password-password-input.svelte";
21
+ import { resetPasswordSchema, type ResetPasswordSchema } from "./reset-password.schema.js";
22
+
23
+ import { ServerError } from "@tanglemedia/svelte-starter-form-shadcn";
24
+ // import { Field } from "@tanglemedia/svelte-starter-form-shadcn";
25
+
26
+ interface Props {
27
+ superform?: SuperForm<Infer<ResetPasswordSchema>> | null;
28
+ card?: boolean;
29
+ // cardClass?: string;
30
+ title?: string;
31
+ description?: string;
32
+ // forgotPassword?: boolean;
33
+ login?: boolean;
34
+ loginLink?: string;
35
+ lead?: Snippet;
36
+ tail?: Snippet;
37
+ children?: Snippet;
38
+ form?: SuperValidated<Infer<ResetPasswordSchema>>;
39
+ action?: string;
40
+
41
+ debug?: boolean;
42
+ }
43
+
44
+ let {
45
+ debug = false,
46
+ form,
47
+ superform: superforms = $bindable(null),
48
+ card = true,
49
+ title = "Reset Password",
50
+ description = "Enter your new password below to reset your password",
51
+ // forgotPassword = true,
52
+ login = true,
53
+ loginLink = "/login",
54
+ lead,
55
+ tail,
56
+ action = "?/register",
57
+ }: Props = $props();
58
+
59
+ superforms = superforms || superForm(form || defaults(zod4(resetPasswordSchema)));
60
+
61
+ const { errors, message } = superforms;
62
+ </script>
63
+
64
+ <ResetPasswordProvider {superforms} {action}>
65
+ <ResetPasswordContainer {card}>
66
+ <ResetPasswordHeader text={title} desc={description} />
67
+ <Card.Content>
68
+ {@render lead?.()}
69
+ <ServerError class="mb-4" />
70
+ <ResetPasswordPasswordInput name={"password"} label={"New Password"} />
71
+ <ResetPasswordPasswordInput name={"confirm_password"} label={"Confirm Password"} />
72
+ <ResetPasswordSubmit />
73
+ {#if login}
74
+ <div class="mt-4 text-center text-sm">
75
+ Remembered your password?
76
+ <a href={loginLink} class="underline"> Sign in </a>
77
+ </div>
78
+ {/if}
79
+ {@render tail?.()}
80
+
81
+ {#if debug}
82
+ <div class="mb-6">
83
+ <h4>Errors</h4>
84
+ <SuperDebug data={errors} />
85
+ </div>
86
+ <h4>Message</h4>
87
+ <SuperDebug data={$message} />
88
+ {/if}
89
+ </Card.Content>
90
+ </ResetPasswordContainer>
91
+ </ResetPasswordProvider>
@@ -0,0 +1,20 @@
1
+ import type { Snippet } from "svelte";
2
+ import { type Infer, type SuperForm, type SuperValidated } from "sveltekit-superforms";
3
+ import { type ResetPasswordSchema } from "./reset-password.schema.js";
4
+ interface Props {
5
+ superform?: SuperForm<Infer<ResetPasswordSchema>> | null;
6
+ card?: boolean;
7
+ title?: string;
8
+ description?: string;
9
+ login?: boolean;
10
+ loginLink?: string;
11
+ lead?: Snippet;
12
+ tail?: Snippet;
13
+ children?: Snippet;
14
+ form?: SuperValidated<Infer<ResetPasswordSchema>>;
15
+ action?: string;
16
+ debug?: boolean;
17
+ }
18
+ declare const ResetPasswordForm: import("svelte").Component<Props, {}, "superform">;
19
+ type ResetPasswordForm = ReturnType<typeof ResetPasswordForm>;
20
+ export default ResetPasswordForm;
@@ -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 ResetPasswordHeader: import("svelte").Component<LoginHeaderProps, {}, "">;
12
+ type ResetPasswordHeader = ReturnType<typeof ResetPasswordHeader>;
13
+ export default ResetPasswordHeader;
@@ -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 ResetPasswordPasswordInput: $$IsomorphicComponent;
25
+ type ResetPasswordPasswordInput<T extends Record<string, unknown>, U extends _FormPathLeaves<T, any>> = InstanceType<typeof ResetPasswordPasswordInput<T, U>>;
26
+ export default ResetPasswordPasswordInput;
@@ -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 ResetPasswordProvider: $$IsomorphicComponent;
24
+ type ResetPasswordProvider<T extends Record<string, unknown>> = InstanceType<typeof ResetPasswordProvider<T>>;
25
+ export default ResetPasswordProvider;
@@ -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
+ Reset
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 ResetPasswordSubmit: import("svelte").Component<LoginSubmitProps, {}, "">;
6
+ type ResetPasswordSubmit = ReturnType<typeof ResetPasswordSubmit>;
7
+ export default ResetPasswordSubmit;
@@ -0,0 +1,6 @@
1
+ import { z } from "zod";
2
+ export declare const resetPasswordSchema: z.ZodObject<{
3
+ password: z.ZodString;
4
+ confirm_password: z.ZodString;
5
+ }, z.core.$strip>;
6
+ export type ResetPasswordSchema = typeof resetPasswordSchema;
@@ -0,0 +1,9 @@
1
+ import { z } from "zod";
2
+ export const resetPasswordSchema = z.object({
3
+ password: z.string().min(1, { error: "Password is required" }),
4
+ confirm_password: z
5
+ .string()
6
+ .min(1, { error: "Confirm password is required" })
7
+ }).refine((schema) => {
8
+ return schema.password === schema.confirm_password;
9
+ }, "Passwords do not match");
@@ -0,0 +1 @@
1
+ export * from './is-mobile.svelte';
@@ -0,0 +1 @@
1
+ export * from './is-mobile.svelte';
@@ -0,0 +1,2 @@
1
+ export * from './hooks/index.ts';
2
+ export * from './components/ui/index.ts';
@@ -0,0 +1,3 @@
1
+ // export * from './utils.ts';
2
+ export * from "./hooks/index.js";
3
+ export * from "./components/ui/index.js";
@@ -1,2 +1,12 @@
1
1
  import { type ClassValue } from "clsx";
2
2
  export declare function cn(...inputs: ClassValue[]): string;
3
+ export type WithoutChild<T> = T extends {
4
+ child?: any;
5
+ } ? Omit<T, "child"> : T;
6
+ export type WithoutChildren<T> = T extends {
7
+ children?: any;
8
+ } ? Omit<T, "children"> : T;
9
+ export type WithoutChildrenOrChild<T> = WithoutChildren<WithoutChild<T>>;
10
+ export type WithElementRef<T, U extends HTMLElement = HTMLElement> = T & {
11
+ ref?: U | null;
12
+ };
package/package.json CHANGED
@@ -1,8 +1,8 @@
1
1
  {
2
2
  "name": "@tanglemedia/svelte-starter-auth-shadcn",
3
- "version": "0.0.2",
4
- "main": "src/index.ts",
5
- "types": "src/index.ts",
3
+ "version": "0.1.0",
4
+ "main": "./src/index.ts",
5
+ "types": "./src/index.ts",
6
6
  "description": "Auth features and components for use in svelte websites",
7
7
  "type": "module",
8
8
  "module": "./dist/index.d.ts",
@@ -16,80 +16,51 @@
16
16
  "exports": {
17
17
  ".": {
18
18
  "types": "./dist/index.d.ts",
19
- "svelte": "./dist/index.js",
20
- "import": "./dist/index.js",
21
- "default": "./dist/index.js"
22
- },
23
- "./Login-Form": {
24
- "default": "./src/lib/components/ui/login-form/index.ts",
25
- "types": "./src/lib/components/ui/login-form/index.ts",
26
- "svelte": "./src/lib/components/ui/login-form/index.ts",
27
- "import": "./src/lib/components/ui/login-form/index.ts"
28
- },
29
- "./Register-Form": {
30
- "default": "./src/lib/components/ui/register-form/index.ts",
31
- "types": "./src/lib/components/ui/register-form/index.ts",
32
- "svelte": "./src/lib/components/ui/register-form/index.ts",
33
- "import": "./src/lib/components/ui/register-form/index.ts"
34
- },
35
- "./Reset-Password-Form": {
36
- "default": "./src/lib/components/ui/reset-password/index.ts",
37
- "types": "./src/lib/components/ui/reset-password/index.ts",
38
- "svelte": "./src/lib/components/ui/reset-password/index.ts",
39
- "import": "./src/lib/components/ui/reset-password/index.ts"
40
- },
41
- "./Forgot-Password-Form": {
42
- "default": "./src/lib/components/ui/forgot-password/index.ts",
43
- "types": "./src/lib/components/ui/forgot-password/index.ts",
44
- "svelte": "./src/lib/components/ui/forgot-password/index.ts",
45
- "import": "./src/lib/components/ui/forgot-password/index.ts"
46
- },
47
- "./Auth-Layout": {
48
- "default": "./src/lib/components/ui/auth-layout/index.ts",
49
- "types": "./src/lib/components/ui/auth-layout/index.ts",
50
- "svelte": "./src/lib/components/ui/auth-layout/index.ts",
51
- "import": "./src/lib/components/ui/auth-layout/index.ts"
52
- },
53
- "./hooks": {
54
- "default": "./src/lib/hooks"
55
- },
56
- "./utils": {
57
- "default": "./src/lib/utils"
19
+ "svelte": "./dist/index.js"
58
20
  }
59
21
  },
60
22
  "devDependencies": {
61
- "@sveltejs/adapter-auto": "^4.0.0",
62
- "@sveltejs/package": "^2.3.10",
63
- "@testing-library/jest-dom": "^6.6.3",
64
- "@testing-library/svelte": "^5.2.7",
65
- "@vitest/coverage-v8": "^3.0.8",
66
- "jsdom": "^26.0.0",
67
- "msw": "^2.7.3",
68
- "postcss": "^8.5.3",
69
- "@sveltejs/kit": "^2.16.0",
70
- "@sveltejs/vite-plugin-svelte": "^5.0.0",
71
- "autoprefixer": "^10.4.20",
72
- "bits-ui": "^1.3.19",
23
+ "@lucide/svelte": "^0.561.0",
24
+ "@sveltejs/adapter-auto": "^7.0.0",
25
+ "@sveltejs/kit": "^2.49.2",
26
+ "@sveltejs/package": "^2.5.7",
27
+ "@sveltejs/vite-plugin-svelte": "^6.2.1",
28
+ "@tailwindcss/postcss": "^4.1.18",
29
+ "@tailwindcss/vite": "^4.1.18",
30
+ "@testing-library/jest-dom": "^6.9.1",
31
+ "@testing-library/svelte": "^5.3.0",
32
+ "@vitest/coverage-v8": "^3.2.4",
33
+ "autoprefixer": "^10.4.21",
34
+ "bits-ui": "^2.14.3",
73
35
  "clsx": "^2.1.1",
74
- "globals": "^15.14.0",
75
- "svelte": "^5.0.0",
76
- "svelte-check": "^4.0.0",
77
- "tailwind-merge": "^3.2.0",
78
- "tailwind-variants": "^1.0.0",
79
- "tailwindcss": "^3.4.17",
80
- "tailwindcss-animate": "^1.0.7",
81
- "typescript": "^5.0.0",
82
- "typescript-eslint": "^8.20.0",
83
- "vite": "^6.0.0",
84
- "vitest": "^3.0.0",
36
+ "globals": "^16.4.0",
37
+ "jsdom": "^27.0.0",
38
+ "msw": "^2.11.3",
39
+ "postcss": "^8.5.6",
40
+ "svelte": "^5.46.1",
41
+ "svelte-check": "^4.3.5",
42
+ "tailwind-merge": "^3.3.1",
43
+ "tailwind-variants": "^3.1.1",
44
+ "tailwindcss": "^4.1.18",
45
+ "tw-animate-css": "^1.4.0",
46
+ "typescript": "^5.9.3",
47
+ "typescript-eslint": "^8.49.0",
48
+ "vite": "^7.3.0",
49
+ "vitest": "^4.0.16",
85
50
  "@internal/eslint-config": "0.0.0",
86
- "@tanglemedia/svelte-starter-core": "2.0.0",
87
- "@tanglemedia/svelte-starter-ui-shadcn": "0.0.1"
51
+ "@tanglemedia/svelte-starter-core": "3.0.0",
52
+ "@tanglemedia/svelte-starter-form-shadcn": "0.1.0",
53
+ "@tanglemedia/svelte-starter-ui-shadcn": "0.1.0"
88
54
  },
89
- "dependencies": {},
90
55
  "peerDependencies": {
91
56
  "@sveltejs/kit": ">=2 <3",
92
- "svelte": "^4.0.0 || >=5.0.0"
57
+ "svelte": ">=5.0.0"
58
+ },
59
+ "dependencies": {
60
+ "formsnap": "^2.0.1",
61
+ "svelte-toolbelt": "^0.10.6",
62
+ "sveltekit-superforms": "^2.29.1",
63
+ "zod": "^4.2.1"
93
64
  },
94
65
  "scripts": {
95
66
  "build": "svelte-package --input ./src --output ./dist",
package/src/app.css ADDED
@@ -0,0 +1,174 @@
1
+ @import "tailwindcss";
2
+
3
+ @import "tw-animate-css";
4
+
5
+ @source "../node_modules/@tanglemedia/svelte-starter-form-shadcn/dist/**/*.{html,js,svelte,ts}";
6
+ @source "src/**/*.{html,js,svelte,ts}";
7
+ /*
8
+ The default border color has changed to `currentcolor` in Tailwind CSS v4,
9
+ so we've added these compatibility styles to make sure everything still
10
+ looks the same as it did with Tailwind CSS v3.
11
+
12
+ If we ever want to remove these styles, we need to add an explicit border
13
+ color utility to any element that depends on these defaults.
14
+ */
15
+ @layer base {
16
+ *,
17
+ ::after,
18
+ ::before,
19
+ ::backdrop,
20
+ ::file-selector-button {
21
+ border-color: var(--color-gray-200, currentcolor);
22
+ }
23
+ }
24
+
25
+ @custom-variant dark (&:is(.dark *));
26
+
27
+ :root {
28
+ --radius: 0.625rem;
29
+ --background: oklch(1 0 0);
30
+ --foreground: oklch(0.129 0.042 264.695);
31
+ --card: oklch(1 0 0);
32
+ --card-foreground: oklch(0.129 0.042 264.695);
33
+ --popover: oklch(1 0 0);
34
+ --popover-foreground: oklch(0.129 0.042 264.695);
35
+ --primary: oklch(0.208 0.042 265.755);
36
+ --primary-foreground: oklch(0.984 0.003 247.858);
37
+ --secondary: oklch(0.968 0.007 247.896);
38
+ --secondary-foreground: oklch(0.208 0.042 265.755);
39
+ --muted: oklch(0.968 0.007 247.896);
40
+ --muted-foreground: oklch(0.554 0.046 257.417);
41
+ --accent: oklch(0.968 0.007 247.896);
42
+ --accent-foreground: oklch(0.208 0.042 265.755);
43
+ --destructive: oklch(0.577 0.245 27.325);
44
+ --border: oklch(0.929 0.013 255.508);
45
+ --input: oklch(0.929 0.013 255.508);
46
+ --ring: oklch(0.704 0.04 256.788);
47
+ --chart-1: oklch(0.646 0.222 41.116);
48
+ --chart-2: oklch(0.6 0.118 184.704);
49
+ --chart-3: oklch(0.398 0.07 227.392);
50
+ --chart-4: oklch(0.828 0.189 84.429);
51
+ --chart-5: oklch(0.769 0.188 70.08);
52
+ --sidebar: oklch(0.984 0.003 247.858);
53
+ --sidebar-foreground: oklch(0.129 0.042 264.695);
54
+ --sidebar-primary: oklch(0.208 0.042 265.755);
55
+ --sidebar-primary-foreground: oklch(0.984 0.003 247.858);
56
+ --sidebar-accent: oklch(0.968 0.007 247.896);
57
+ --sidebar-accent-foreground: oklch(0.208 0.042 265.755);
58
+ --sidebar-border: oklch(0.929 0.013 255.508);
59
+ --sidebar-ring: oklch(0.704 0.04 256.788);
60
+ }
61
+
62
+ .dark {
63
+ --background: oklch(0.129 0.042 264.695);
64
+ --foreground: oklch(0.984 0.003 247.858);
65
+ --card: oklch(0.208 0.042 265.755);
66
+ --card-foreground: oklch(0.984 0.003 247.858);
67
+ --popover: oklch(0.208 0.042 265.755);
68
+ --popover-foreground: oklch(0.984 0.003 247.858);
69
+ --primary: oklch(0.929 0.013 255.508);
70
+ --primary-foreground: oklch(0.208 0.042 265.755);
71
+ --secondary: oklch(0.279 0.041 260.031);
72
+ --secondary-foreground: oklch(0.984 0.003 247.858);
73
+ --muted: oklch(0.279 0.041 260.031);
74
+ --muted-foreground: oklch(0.704 0.04 256.788);
75
+ --accent: oklch(0.279 0.041 260.031);
76
+ --accent-foreground: oklch(0.984 0.003 247.858);
77
+ --destructive: oklch(0.704 0.191 22.216);
78
+ --border: oklch(1 0 0 / 10%);
79
+ --input: oklch(1 0 0 / 15%);
80
+ --ring: oklch(0.551 0.027 264.364);
81
+ --chart-1: oklch(0.488 0.243 264.376);
82
+ --chart-2: oklch(0.696 0.17 162.48);
83
+ --chart-3: oklch(0.769 0.188 70.08);
84
+ --chart-4: oklch(0.627 0.265 303.9);
85
+ --chart-5: oklch(0.645 0.246 16.439);
86
+ --sidebar: oklch(0.208 0.042 265.755);
87
+ --sidebar-foreground: oklch(0.984 0.003 247.858);
88
+ --sidebar-primary: oklch(0.488 0.243 264.376);
89
+ --sidebar-primary-foreground: oklch(0.984 0.003 247.858);
90
+ --sidebar-accent: oklch(0.279 0.041 260.031);
91
+ --sidebar-accent-foreground: oklch(0.984 0.003 247.858);
92
+ --sidebar-border: oklch(1 0 0 / 10%);
93
+ --sidebar-ring: oklch(0.551 0.027 264.364);
94
+ }
95
+
96
+ @theme inline {
97
+ --radius-sm: calc(var(--radius) - 4px);
98
+ --radius-md: calc(var(--radius) - 2px);
99
+ --radius-lg: var(--radius);
100
+ --radius-xl: calc(var(--radius) + 4px);
101
+ --color-background: var(--background);
102
+ --color-foreground: var(--foreground);
103
+ --color-card: var(--card);
104
+ --color-card-foreground: var(--card-foreground);
105
+ --color-popover: var(--popover);
106
+ --color-popover-foreground: var(--popover-foreground);
107
+ --color-primary: var(--primary);
108
+ --color-primary-foreground: var(--primary-foreground);
109
+ --color-secondary: var(--secondary);
110
+ --color-secondary-foreground: var(--secondary-foreground);
111
+ --color-muted: var(--muted);
112
+ --color-muted-foreground: var(--muted-foreground);
113
+ --color-accent: var(--accent);
114
+ --color-accent-foreground: var(--accent-foreground);
115
+ --color-destructive: var(--destructive);
116
+ --color-border: var(--border);
117
+ --color-input: var(--input);
118
+ --color-ring: var(--ring);
119
+ --color-chart-1: var(--chart-1);
120
+ --color-chart-2: var(--chart-2);
121
+ --color-chart-3: var(--chart-3);
122
+ --color-chart-4: var(--chart-4);
123
+ --color-chart-5: var(--chart-5);
124
+ --color-sidebar: var(--sidebar);
125
+ --color-sidebar-foreground: var(--sidebar-foreground);
126
+ --color-sidebar-primary: var(--sidebar-primary);
127
+ --color-sidebar-primary-foreground: var(--sidebar-primary-foreground);
128
+ --color-sidebar-accent: var(--sidebar-accent);
129
+ --color-sidebar-accent-foreground: var(--sidebar-accent-foreground);
130
+ --color-sidebar-border: var(--sidebar-border);
131
+ --color-sidebar-ring: var(--sidebar-ring);
132
+ }
133
+
134
+ @layer base {
135
+ * {
136
+ @apply border-border outline-ring/50;
137
+ }
138
+ body {
139
+ @apply bg-background text-foreground;
140
+ }
141
+ }
142
+
143
+ @keyframes accordion-down {
144
+ from {
145
+ height: 0;
146
+ }
147
+
148
+ to {
149
+ height: var(--bits-accordion-content-height);
150
+ }
151
+ }
152
+
153
+ @keyframes accordion-up {
154
+ from {
155
+ height: var(--bits-accordion-content-height);
156
+ }
157
+
158
+ to {
159
+ height: 0;
160
+ }
161
+ }
162
+
163
+ @keyframes caret-blink {
164
+ 0%,
165
+ 70%,
166
+ 100% {
167
+ opacity: 1;
168
+ }
169
+
170
+ 20%,
171
+ 50% {
172
+ opacity: 0;
173
+ }
174
+ }
package/src/app.html CHANGED
@@ -1,4 +1,3 @@
1
- // src/app.html
2
1
  <!doctype html>
3
2
  <html lang="en">
4
3
  <head>
package/src/index.ts ADDED
@@ -0,0 +1 @@
1
+ export * from './lib/index.ts';