@tempots/beatui 0.11.0 → 0.13.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 (39) hide show
  1. package/dist/beatui.css +1 -1
  2. package/dist/{de-O2DMrfiH.js → de-C_Zm61s8.js} +0 -1
  3. package/dist/{es-CsNVN5AY.js → es-Br-Gawkv.js} +0 -1
  4. package/dist/{fr-CJjx2YoL.js → fr-TsXahdgA.js} +0 -1
  5. package/dist/index.es.js +4068 -3803
  6. package/dist/index.umd.js +30 -30
  7. package/dist/{it-BKzoVost.js → it-CkmN7du_.js} +0 -1
  8. package/dist/{ja-ZBFmK5Uj.js → ja-C81oj42G.js} +0 -1
  9. package/dist/{pt-DumIX3mi.js → pt-DtslyWAl.js} +0 -1
  10. package/dist/{ru-_EKfu_bO.js → ru-BIqAHQQ4.js} +0 -1
  11. package/dist/types/auth-i18n/default.d.ts +0 -1
  12. package/dist/types/auth-i18n/locales/de.d.ts +0 -1
  13. package/dist/types/auth-i18n/locales/en.d.ts +0 -1
  14. package/dist/types/auth-i18n/locales/es.d.ts +0 -1
  15. package/dist/types/auth-i18n/locales/fr.d.ts +0 -1
  16. package/dist/types/auth-i18n/locales/it.d.ts +0 -1
  17. package/dist/types/auth-i18n/locales/ja.d.ts +0 -1
  18. package/dist/types/auth-i18n/locales/pt.d.ts +0 -1
  19. package/dist/types/auth-i18n/locales/ru.d.ts +0 -1
  20. package/dist/types/auth-i18n/locales/zh.d.ts +0 -1
  21. package/dist/types/auth-i18n/translations.d.ts +0 -1
  22. package/dist/types/components/auth/auth-container.d.ts +1 -4
  23. package/dist/types/components/auth/auth-email-prop.d.ts +1 -0
  24. package/dist/types/components/auth/reset-password-form.d.ts +1 -1
  25. package/dist/types/components/auth/schemas.d.ts +24 -10
  26. package/dist/types/components/auth/signin-form.d.ts +1 -1
  27. package/dist/types/components/auth/signup-form.d.ts +1 -1
  28. package/dist/types/components/auth/social-login-button.d.ts +2 -4
  29. package/dist/types/components/auth/social-providers.d.ts +2 -0
  30. package/dist/types/components/auth/types.d.ts +77 -90
  31. package/dist/types/components/auth/utils.d.ts +6 -4
  32. package/dist/types/components/form/controller/controller-validation.d.ts +8 -0
  33. package/dist/types/components/form/controller/controller.d.ts +22 -20
  34. package/dist/types/components/form/controller/index.d.ts +1 -1
  35. package/dist/types/components/form/schema/schema-utils.d.ts +2 -2
  36. package/dist/types/components/form/use-form.d.ts +44 -11
  37. package/dist/{zh-DEZH0fdq.js → zh-Cy7W0TAv.js} +0 -1
  38. package/package.json +2 -2
  39. package/dist/types/components/form/controller/validation-result.d.ts +0 -13
@@ -28,7 +28,6 @@ const i = {
28
28
  passwordStrengthStrong: () => "Forte",
29
29
  // Common
30
30
  orDivider: () => "o",
31
- loading: () => "Caricamento...",
32
31
  error: () => "Si è verificato un errore",
33
32
  required: () => "Obbligatorio"
34
33
  };
@@ -28,7 +28,6 @@ const r = {
28
28
  passwordStrengthStrong: () => "強い",
29
29
  // Common
30
30
  orDivider: () => "または",
31
- loading: () => "読み込み中...",
32
31
  error: () => "エラーが発生しました",
33
32
  required: () => "必須"
34
33
  };
@@ -28,7 +28,6 @@ const r = {
28
28
  passwordStrengthStrong: () => "Forte",
29
29
  // Common
30
30
  orDivider: () => "ou",
31
- loading: () => "Carregando...",
32
31
  error: () => "Ocorreu um erro",
33
32
  required: () => "Obrigatório"
34
33
  };
@@ -28,7 +28,6 @@ const r = {
28
28
  passwordStrengthStrong: () => "Сильный",
29
29
  // Common
30
30
  orDivider: () => "или",
31
- loading: () => "Загрузка...",
32
31
  error: () => "Произошла ошибка",
33
32
  required: () => "Обязательно"
34
33
  };
@@ -22,7 +22,6 @@ export declare const defaultMessages: {
22
22
  passwordStrengthGood: () => string;
23
23
  passwordStrengthStrong: () => string;
24
24
  orDivider: () => string;
25
- loading: () => string;
26
25
  error: () => string;
27
26
  required: () => string;
28
27
  };
@@ -22,7 +22,6 @@ declare const de: {
22
22
  passwordStrengthGood: () => string;
23
23
  passwordStrengthStrong: () => string;
24
24
  orDivider: () => string;
25
- loading: () => string;
26
25
  error: () => string;
27
26
  required: () => string;
28
27
  };
@@ -22,7 +22,6 @@ declare const en: {
22
22
  passwordStrengthGood: () => string;
23
23
  passwordStrengthStrong: () => string;
24
24
  orDivider: () => string;
25
- loading: () => string;
26
25
  error: () => string;
27
26
  required: () => string;
28
27
  };
@@ -22,7 +22,6 @@ declare const es: {
22
22
  passwordStrengthGood: () => string;
23
23
  passwordStrengthStrong: () => string;
24
24
  orDivider: () => string;
25
- loading: () => string;
26
25
  error: () => string;
27
26
  required: () => string;
28
27
  };
@@ -22,7 +22,6 @@ declare const fr: {
22
22
  passwordStrengthGood: () => string;
23
23
  passwordStrengthStrong: () => string;
24
24
  orDivider: () => string;
25
- loading: () => string;
26
25
  error: () => string;
27
26
  required: () => string;
28
27
  };
@@ -22,7 +22,6 @@ declare const it: {
22
22
  passwordStrengthGood: () => string;
23
23
  passwordStrengthStrong: () => string;
24
24
  orDivider: () => string;
25
- loading: () => string;
26
25
  error: () => string;
27
26
  required: () => string;
28
27
  };
@@ -22,7 +22,6 @@ declare const ja: {
22
22
  passwordStrengthGood: () => string;
23
23
  passwordStrengthStrong: () => string;
24
24
  orDivider: () => string;
25
- loading: () => string;
26
25
  error: () => string;
27
26
  required: () => string;
28
27
  };
@@ -22,7 +22,6 @@ declare const pt: {
22
22
  passwordStrengthGood: () => string;
23
23
  passwordStrengthStrong: () => string;
24
24
  orDivider: () => string;
25
- loading: () => string;
26
25
  error: () => string;
27
26
  required: () => string;
28
27
  };
@@ -22,7 +22,6 @@ declare const ru: {
22
22
  passwordStrengthGood: () => string;
23
23
  passwordStrengthStrong: () => string;
24
24
  orDivider: () => string;
25
- loading: () => string;
26
25
  error: () => string;
27
26
  required: () => string;
28
27
  };
@@ -22,7 +22,6 @@ declare const zh: {
22
22
  passwordStrengthGood: () => string;
23
23
  passwordStrengthStrong: () => string;
24
24
  orDivider: () => string;
25
- loading: () => string;
26
25
  error: () => string;
27
26
  required: () => string;
28
27
  };
@@ -22,7 +22,6 @@ export declare const AuthI18n: import("@tempots/dom").Provider<import("..").Reac
22
22
  passwordStrengthGood: () => string;
23
23
  passwordStrengthStrong: () => string;
24
24
  orDivider: () => string;
25
- loading: () => string;
26
25
  error: () => string;
27
26
  required: () => string;
28
27
  }>, object>;
@@ -1,10 +1,7 @@
1
1
  import { TNode, Value } from '@tempots/dom';
2
2
  import { AuthContainerOptions } from './index';
3
- export declare function AuthContainer({ mode: initialMode, className, socialProviders, passwordRules, showRememberMe, showSocialDivider, allowSignUp, allowPasswordReset, showPasswordStrength, labels, onSignIn, onSignUp, onResetPassword, onModeChange, onSocialLogin, onSubmitSignIn, onSubmitSignUp, onSubmitResetPassword, }: AuthContainerOptions): TNode;
3
+ export declare function AuthContainer({ mode: initialMode, className, socialProviders, passwordRules, showRememberMe, showSocialDivider, showPasswordStrength, labels, onSignIn, onSignUp, onResetPassword, onModeChange, }: AuthContainerOptions): TNode;
4
4
  export declare function AuthModal({ isOpen, onClose, ...authOptions }: AuthContainerOptions & {
5
5
  isOpen: Value<boolean>;
6
6
  onClose?: () => void;
7
7
  }): TNode;
8
- export declare function SignInContainer(options: Omit<AuthContainerOptions, 'initialMode'>): TNode;
9
- export declare function SignUpContainer(options: Omit<AuthContainerOptions, 'initialMode'>): TNode;
10
- export declare function ResetPasswordContainer(options: Omit<AuthContainerOptions, 'initialMode'>): TNode;
@@ -0,0 +1 @@
1
+ export declare const useAuthEmailProp: () => import("@tempots/dom").Prop<string | null>;
@@ -1,3 +1,3 @@
1
1
  import { TNode } from '@tempots/dom';
2
2
  import { ResetPasswordFormOptions } from './index';
3
- export declare function ResetPasswordForm({ onSubmit, onModeChange, onResetPassword, loading, error, labels, }: ResetPasswordFormOptions): TNode;
3
+ export declare function ResetPasswordForm({ onResetPassword, labels, }: ResetPasswordFormOptions): TNode;
@@ -1,20 +1,34 @@
1
- import { StringValidator } from '../form/schema/custom-validation';
1
+ import { StringValidator, SafeParseResult } from '../form/schema/custom-validation';
2
2
  import { StandardSchemaV1 } from '../form/schema/standard-schema-v1';
3
- import { PasswordRules, SignInData, SignUpData, ResetPasswordData } from './types';
3
+ import { PasswordRules, ResetPasswordData, SignInFormData, SignUpFormData } from './types';
4
4
  export declare function createPasswordSchema(rules?: PasswordRules): StringValidator;
5
5
  export declare const emailSchema: StringValidator;
6
- export declare function createSignInSchema(passwordRules?: PasswordRules): StandardSchemaV1<SignInData>;
7
- export declare function createSignUpSchema(passwordRules?: PasswordRules): StandardSchemaV1<SignUpData>;
8
- export declare const resetPasswordSchema: StandardSchemaV1<ResetPasswordData>;
9
- export declare const defaultSignInSchema: StandardSchemaV1<SignInData, SignInData>;
10
- export declare const defaultSignUpSchema: StandardSchemaV1<SignUpData, SignUpData>;
11
- export type SignInFormData = SignInData;
12
- export type SignUpFormData = SignUpData;
6
+ export declare function createSignInSchema(passwordRules?: PasswordRules): StandardSchemaV1<SignInFormData> & {
7
+ safeParse: (value: unknown) => SafeParseResult<SignInFormData>;
8
+ };
9
+ export declare function createSignUpSchema(passwordRules?: PasswordRules, options?: {
10
+ showNameField?: boolean;
11
+ showConfirmPassword?: boolean;
12
+ showAcceptTermsAndConditions?: boolean;
13
+ }): StandardSchemaV1<SignUpFormData> & {
14
+ safeParse: (value: unknown) => SafeParseResult<SignUpFormData>;
15
+ };
16
+ export declare const resetPasswordSchema: StandardSchemaV1<ResetPasswordData> & {
17
+ safeParse: (value: unknown) => SafeParseResult<ResetPasswordData>;
18
+ };
19
+ export declare const defaultSignInSchema: StandardSchemaV1<import("./types").SignInData, import("./types").SignInData> & {
20
+ safeParse: (value: unknown) => SafeParseResult<SignInFormData>;
21
+ };
22
+ export declare const defaultSignUpSchema: StandardSchemaV1<SignUpFormData, SignUpFormData> & {
23
+ safeParse: (value: unknown) => SafeParseResult<SignUpFormData>;
24
+ };
13
25
  export type ResetPasswordFormData = ResetPasswordData;
14
26
  export declare const authSchemas: {
15
27
  signIn: typeof createSignInSchema;
16
28
  signUp: typeof createSignUpSchema;
17
- resetPassword: () => StandardSchemaV1<ResetPasswordData, ResetPasswordData>;
29
+ resetPassword: () => StandardSchemaV1<ResetPasswordData, ResetPasswordData> & {
30
+ safeParse: (value: unknown) => SafeParseResult<ResetPasswordData>;
31
+ };
18
32
  };
19
33
  export declare function validateEmail(email: string): string | null;
20
34
  export declare function validatePassword(password: string, rules?: PasswordRules): string | null;
@@ -1,3 +1,3 @@
1
1
  import { TNode } from '@tempots/dom';
2
2
  import { SignInFormOptions } from './index';
3
- export declare function SignInForm({ onSubmit, onModeChange, onSignIn, onSocialLogin, loading, error, passwordRules, labels, socialProviders, showSocialDivider, showRememberMe, allowPasswordReset, allowSignUp, }: SignInFormOptions): TNode;
3
+ export declare function SignInForm({ onSignIn, passwordRules, labels, showRememberMe, }: SignInFormOptions): TNode;
@@ -1,3 +1,3 @@
1
1
  import { TNode } from '@tempots/dom';
2
2
  import { SignUpFormOptions } from './index';
3
- export declare function SignUpForm({ onSubmit, onModeChange, loading, error, passwordRules, labels, socialProviders, showSocialDivider, showPasswordStrength, onSignUp, onSocialLogin, }: SignUpFormOptions): TNode;
3
+ export declare function SignUpForm({ passwordRules, labels, showPasswordStrength, onSignUp, showNameField, showConfirmPassword, showAcceptTermsAndConditions, termsAndConditions, }: SignUpFormOptions): TNode;
@@ -2,16 +2,14 @@ import { TNode, Value } from '@tempots/dom';
2
2
  import { SocialLoginButtonOptions, AuthProviderName } from './index';
3
3
  import { ControlSize } from '../theme';
4
4
  import { ThemeColorName } from '@/tokens';
5
- export declare function SocialLoginButton({ provider, onClick, loading, disabled, size, name, icon, color, flow, labels, }: SocialLoginButtonOptions): TNode;
5
+ export declare function SocialLoginButton({ provider, onClick, size, name, icon, color, flow, labels, }: SocialLoginButtonOptions): TNode;
6
6
  export type AuthProviderInfo = {
7
7
  provider: AuthProviderName;
8
8
  flow?: 'redirect' | 'popup';
9
9
  };
10
- export declare function SocialLoginButtons({ providers, onProviderClick, loading, disabled, size, className, }: {
10
+ export declare function SocialLoginButtons({ providers, onProviderClick, size, className, }: {
11
11
  providers: Value<Array<AuthProviderInfo>>;
12
12
  onProviderClick?: (provider: AuthProviderName) => Promise<void>;
13
- loading?: Value<boolean>;
14
- disabled?: Value<boolean>;
15
13
  size?: Value<ControlSize>;
16
14
  className?: Value<string>;
17
15
  }): TNode;
@@ -0,0 +1,2 @@
1
+ import { SocialProvidersOptions } from './types';
2
+ export declare function SocialProviders({ providers }: SocialProvidersOptions): import("@tempots/dom").Renderable;
@@ -1,4 +1,4 @@
1
- import { Value } from '@tempots/dom';
1
+ import { TNode, Value } from '@tempots/dom';
2
2
  import { ControlSize } from '../theme';
3
3
  import { ThemeColorName } from '@/tokens';
4
4
  import { AuthProviderInfo } from './social-login-button';
@@ -9,12 +9,14 @@ export type PasswordStrength = 'weak' | 'fair' | 'good' | 'strong';
9
9
  export interface SignInData {
10
10
  email: string;
11
11
  password: string;
12
- rememberMe?: boolean;
13
12
  }
13
+ export type SignInFormData = SignInData;
14
14
  export interface SignUpData {
15
15
  name?: string;
16
16
  email: string;
17
17
  password: string;
18
+ }
19
+ export interface SignUpFormData extends SignUpData {
18
20
  confirmPassword: string;
19
21
  acceptTerms: boolean;
20
22
  }
@@ -38,111 +40,96 @@ export interface PasswordRules {
38
40
  requireSymbols?: boolean;
39
41
  customValidation?: (password: string) => string | null;
40
42
  }
43
+ export interface AuthContainerLabels {
44
+ signInTitle?: () => string;
45
+ emailLabel?: () => string;
46
+ passwordLabel?: () => string;
47
+ rememberMeLabel?: () => string;
48
+ signInButton?: () => string;
49
+ forgotPasswordLink?: () => string;
50
+ noAccountLink?: () => string;
51
+ acceptTermsLabel?: () => string;
52
+ confirmPasswordLabel?: () => string;
53
+ signUpTitle?: () => string;
54
+ signUpButton?: () => string;
55
+ nameLabel?: () => string;
56
+ hasAccountLink?: () => string;
57
+ resetPasswordTitle?: () => string;
58
+ resetPasswordButton?: () => string;
59
+ resetPasswordDescription?: () => string;
60
+ backToSignInLink?: () => string;
61
+ }
41
62
  export interface AuthContainerOptions {
42
63
  mode?: Value<AuthMode>;
43
64
  className?: Value<string>;
44
- socialProviders?: Value<AuthProviderInfo[]>;
65
+ socialProviders?: AuthProviderInfo[];
45
66
  passwordRules?: PasswordRules;
46
- showRememberMe?: Value<boolean>;
47
- showSocialDivider?: Value<boolean>;
48
- allowSignUp?: Value<boolean>;
49
- allowPasswordReset?: Value<boolean>;
50
- showPasswordStrength?: Value<boolean>;
51
- labels?: {
52
- signInTitle?: () => string;
53
- emailLabel?: () => string;
54
- passwordLabel?: () => string;
55
- rememberMeLabel?: () => string;
56
- loading?: () => string;
57
- signInButton?: () => string;
58
- forgotPasswordLink?: () => string;
59
- noAccountLink?: () => string;
60
- acceptTermsLabel?: () => string;
61
- confirmPasswordLabel?: () => string;
62
- signUpTitle?: () => string;
63
- signUpButton?: () => string;
64
- nameLabel?: () => string;
65
- hasAccountLink?: () => string;
66
- resetPasswordTitle?: () => string;
67
- resetPasswordButton?: () => string;
68
- resetPasswordDescription?: () => string;
69
- backToSignInLink?: () => string;
70
- };
71
- onSignIn?: (data: SignInData) => Promise<void>;
72
- onSignUp?: (data: SignUpData) => Promise<void>;
73
- onResetPassword?: (data: ResetPasswordData) => Promise<void>;
67
+ showRememberMe?: boolean;
68
+ showSocialDivider?: boolean;
69
+ allowSignUp?: boolean;
70
+ allowPasswordReset?: boolean;
71
+ labels?: AuthContainerLabels;
72
+ onSignIn?: (data: SignInData) => Promise<string | null>;
73
+ onSignUp?: (data: SignUpData) => Promise<string | null>;
74
+ onResetPassword?: (data: ResetPasswordData) => Promise<string | null>;
74
75
  onModeChange?: (mode: AuthMode) => void;
75
- onSocialLogin?: (provider: AuthProviderName) => Promise<void>;
76
- onSubmitSignIn?: (data: SignInData) => Promise<void>;
77
- onSubmitSignUp?: (data: SignUpData) => Promise<void>;
78
- onSubmitResetPassword?: (data: ResetPasswordData) => Promise<void>;
76
+ showPasswordStrength?: boolean;
77
+ showAlreadyHaveAccountLink?: boolean;
78
+ showNameField?: boolean;
79
+ showConfirmPassword?: boolean;
80
+ showAcceptTermsAndConditions?: boolean;
81
+ termsAndConditions?: TNode;
82
+ }
83
+ export interface SocialProvidersOptions {
84
+ providers: AuthProviderInfo[];
85
+ }
86
+ export interface SignInFormLabels {
87
+ emailLabel?: () => string;
88
+ passwordLabel?: () => string;
89
+ rememberMeLabel?: () => string;
90
+ signInButton?: () => string;
91
+ forgotPasswordLink?: () => string;
92
+ noAccountLink?: () => string;
79
93
  }
80
94
  export interface SignInFormOptions {
81
- onSubmit?: (data: SignInData) => Promise<void>;
82
- onModeChange?: (mode: AuthMode) => void;
83
- onSignIn?: (data: SignInData) => Promise<void>;
84
- onSocialLogin?: (provider: AuthProviderName) => Promise<void>;
85
- loading?: Value<boolean>;
86
- error?: Value<string | null>;
95
+ onSignIn?: (data: SignInData) => Promise<string | null>;
87
96
  passwordRules?: PasswordRules;
88
- labels?: {
89
- signInTitle?: () => string;
90
- emailLabel?: () => string;
91
- passwordLabel?: () => string;
92
- rememberMeLabel?: () => string;
93
- loading?: () => string;
94
- signInButton?: () => string;
95
- forgotPasswordLink?: () => string;
96
- noAccountLink?: () => string;
97
- };
98
- socialProviders?: Value<SocialProviderConfig<unknown>[]>;
99
- showSocialDivider?: Value<boolean>;
100
- showRememberMe?: Value<boolean>;
101
- allowPasswordReset?: Value<boolean>;
102
- allowSignUp?: Value<boolean>;
97
+ labels?: SignInFormLabels;
98
+ showRememberMe?: boolean;
99
+ }
100
+ export interface SignUpFormLabels {
101
+ nameLabel?: () => string;
102
+ emailLabel?: () => string;
103
+ passwordLabel?: () => string;
104
+ confirmPasswordLabel?: () => string;
105
+ acceptTermsLabel?: () => string;
106
+ signUpButton?: () => string;
107
+ hasAccountLink?: () => string;
103
108
  }
104
109
  export interface SignUpFormOptions {
105
- onSubmit?: (data: SignUpData) => Promise<void>;
106
- onModeChange?: (mode: AuthMode) => void;
107
- loading?: Value<boolean>;
108
- error?: Value<string | null>;
109
110
  passwordRules?: PasswordRules;
110
- labels?: {
111
- signUpTitle?: () => string;
112
- nameLabel?: () => string;
113
- emailLabel?: () => string;
114
- passwordLabel?: () => string;
115
- confirmPasswordLabel?: () => string;
116
- acceptTermsLabel?: () => string;
117
- loading?: () => string;
118
- signUpButton?: () => string;
119
- hasAccountLink?: () => string;
120
- };
121
- socialProviders?: Value<AuthProviderInfo[]>;
122
- showSocialDivider?: Value<boolean>;
123
- showPasswordStrength?: Value<boolean>;
124
- onSignUp?: (data: SignUpData) => Promise<void>;
125
- onSocialLogin?: (provider: AuthProviderName) => Promise<void>;
111
+ labels?: SignUpFormLabels;
112
+ onSignUp?: (data: SignUpData) => Promise<string | null>;
113
+ showPasswordStrength?: boolean;
114
+ showAlreadyHaveAccountLink?: boolean;
115
+ showNameField?: boolean;
116
+ showConfirmPassword?: boolean;
117
+ showAcceptTermsAndConditions?: boolean;
118
+ termsAndConditions?: TNode;
119
+ }
120
+ export interface ResetPasswordFormLabels {
121
+ resetPasswordButton?: () => string;
122
+ resetPasswordDescription?: () => string;
123
+ emailLabel?: () => string;
124
+ backToSignInLink?: () => string;
126
125
  }
127
126
  export interface ResetPasswordFormOptions {
128
- onSubmit?: (data: ResetPasswordData) => Promise<void>;
129
- onModeChange?: (mode: AuthMode) => void;
130
- onResetPassword?: (data: ResetPasswordData) => Promise<void>;
131
- loading?: Value<boolean>;
132
- error?: Value<string | null>;
133
- labels?: {
134
- resetPasswordTitle?: () => string;
135
- resetPasswordButton?: () => string;
136
- resetPasswordDescription?: () => string;
137
- emailLabel?: () => string;
138
- loading?: () => string;
139
- backToSignInLink?: () => string;
140
- };
127
+ onResetPassword?: (data: ResetPasswordData) => Promise<string | null>;
128
+ labels?: ResetPasswordFormLabels;
141
129
  }
142
130
  export interface SocialLoginButtonOptions {
143
131
  provider: Value<AuthProviderName>;
144
132
  onClick?: () => Promise<void>;
145
- loading?: Value<boolean>;
146
133
  disabled?: Value<boolean>;
147
134
  size?: Value<ControlSize>;
148
135
  flow?: Value<'redirect' | 'popup' | undefined>;
@@ -16,8 +16,10 @@ export declare function createSocialLoginUrl(provider: AuthProviderName, clientI
16
16
  export declare function openSocialLoginPopup<T>(url: string, provider: AuthProviderName, onSuccess?: (result: T) => void, onError?: (error: Error) => void): void;
17
17
  export declare function formatAuthError(error: unknown): string;
18
18
  export declare function isBrowser(): boolean;
19
- export declare const REMEMBER_EMAIL_KEY = "bui_auth_remember_email";
20
- export declare function saveRememberMe(email: string): void;
21
- export declare function getRememberedEmail(): string | null;
22
- export declare function clearRememberedEmail(): void;
23
19
  export declare function functionOrReactiveMessage<T extends Value<unknown>[]>(fn: undefined | ((...args: GetValueTypes<T>) => string), reactiveFn: (...args: T) => Signal<string>, ...args: T): Signal<string>;
20
+ export declare function requestToControllerValidation<T>({ task, message, onStart, onEnd, }: {
21
+ task: undefined | ((value: T) => Promise<string | null>);
22
+ message: string;
23
+ onStart?: () => void;
24
+ onEnd?: () => void;
25
+ }): (value: T) => Promise<import("../form").ControllerValidation>;
@@ -0,0 +1,8 @@
1
+ import { Validation } from '@tempots/std';
2
+ import { PathSegment } from './path';
3
+ export type ControllerError = {
4
+ message?: string;
5
+ dependencies?: Record<PathSegment, ControllerError>;
6
+ };
7
+ export type ControllerValidation = Validation<ControllerError>;
8
+ export declare function makeMapValidation(fields: PathSegment[]): (status: ControllerValidation) => ControllerValidation;
@@ -1,49 +1,51 @@
1
1
  import { Signal } from '@tempots/dom';
2
2
  import { Path, PathSegment } from './path';
3
- import { InvalidDependencies, ValidationResult } from './validation-result';
4
- export declare class Controller<In> {
3
+ import { ControllerError, ControllerValidation } from './controller-validation';
4
+ export declare class Controller<T> {
5
5
  #private;
6
6
  readonly path: Path;
7
- readonly change: (value: In) => void;
8
- readonly value: Signal<In>;
9
- readonly status: Signal<ValidationResult>;
7
+ readonly change: (value: T) => void;
8
+ readonly value: Signal<T>;
9
+ readonly status: Signal<ControllerValidation>;
10
10
  readonly error: Signal<undefined | string>;
11
11
  readonly hasError: Signal<boolean>;
12
- readonly dependencyErrors: Signal<undefined | Record<string | number, InvalidDependencies>>;
12
+ readonly dependencyErrors: Signal<undefined | Record<string | number, ControllerError>>;
13
13
  protected readonly parent: {
14
14
  disabled: Signal<boolean>;
15
15
  };
16
16
  readonly disabled: Signal<boolean>;
17
- constructor(path: Path, change: (value: In) => void, value: Signal<In>, status: Signal<ValidationResult>, parent: {
17
+ readonly disabledOrHasErrors: Signal<boolean>;
18
+ constructor(path: Path, change: (value: T) => void, value: Signal<T>, status: Signal<ControllerValidation>, parent: {
18
19
  disabled: Signal<boolean>;
19
20
  });
20
21
  get name(): string;
21
22
  readonly onDispose: (callback: () => void) => void;
22
23
  readonly dispose: () => void;
24
+ readonly setDisabled: (disabled: boolean) => void;
23
25
  readonly disable: () => void;
24
26
  readonly enable: () => void;
25
- readonly array: (equals?: (a: In, b: In) => boolean) => ArrayController<In extends any[] ? In : never>;
26
- readonly object: (equals?: (a: In, b: In) => boolean) => ObjectController<In extends Record<string, any> ? In : never>;
27
- readonly transform: <Out>(transform: (value: In) => Out, untransform: (value: Out) => In, subpath?: PathSegment[], equals?: (a: Out, b: Out) => boolean) => Controller<Out>;
27
+ readonly array: (equals?: (a: T, b: T) => boolean) => ArrayController<T extends any[] ? T : never>;
28
+ readonly object: (equals?: (a: T, b: T) => boolean) => ObjectController<T extends Record<string, any> ? T : never>;
29
+ readonly transform: <Out>(transform: (value: T) => Out, untransform: (value: Out) => T, subpath?: PathSegment[], equals?: (a: Out, b: Out) => boolean) => Controller<Out>;
28
30
  }
29
- export declare class ObjectController<In extends Record<string, In[keyof In]>> extends Controller<In> {
31
+ export declare class ObjectController<T extends Record<keyof T, T[keyof T]>> extends Controller<T> {
30
32
  #private;
31
- constructor(path: Path, change: (value: In) => void, value: Signal<In>, status: Signal<ValidationResult>, parent: {
33
+ constructor(path: Path, change: (value: T) => void, value: Signal<T>, status: Signal<ControllerValidation>, parent: {
32
34
  disabled: Signal<boolean>;
33
- }, equals: (a: In, b: In) => boolean);
34
- readonly field: <K extends keyof In & string>(field: K) => Controller<In[K]>;
35
+ }, equals: (a: T, b: T) => boolean);
36
+ readonly field: <K extends keyof T & string>(field: K) => Controller<T[K]>;
35
37
  }
36
- export declare class ArrayController<In extends unknown[]> extends Controller<In> {
38
+ export declare class ArrayController<T extends unknown[]> extends Controller<T> {
37
39
  #private;
38
40
  readonly length: Signal<number>;
39
- constructor(path: Path, change: (value: In) => void, value: Signal<In>, status: Signal<ValidationResult>, parent: {
41
+ constructor(path: Path, change: (value: T) => void, value: Signal<T>, status: Signal<ControllerValidation>, parent: {
40
42
  disabled: Signal<boolean>;
41
- }, equals: (a: In, b: In) => boolean);
42
- readonly item: (index: number) => Controller<In[number]>;
43
- readonly push: (...value: In[number][]) => void;
43
+ }, equals: (a: T, b: T) => boolean);
44
+ readonly item: (index: number) => Controller<T[number]>;
45
+ readonly push: (...value: T[number][]) => void;
44
46
  readonly pop: () => void;
45
47
  readonly shift: () => void;
46
- readonly unshift: (...value: In) => void;
48
+ readonly unshift: (...value: T) => void;
47
49
  readonly removeAt: (index: number) => void;
48
50
  readonly splice: (start: number, deleteCount?: number) => void;
49
51
  readonly move: (from: number, to: number, length?: number) => void;
@@ -1,5 +1,5 @@
1
1
  export * from '../control/ensure-control';
2
2
  export * from '../control/list-control';
3
3
  export * from './path';
4
- export * from './validation-result';
4
+ export * from './controller-validation';
5
5
  export * from './controller';
@@ -1,4 +1,4 @@
1
- import { InvalidDependencies } from '../controller/validation-result';
1
+ import { ControllerError } from '../controller/controller-validation';
2
2
  import { StandardSchemaV1 } from './standard-schema-v1';
3
3
  export declare function convertStandardSchemaPathToPath(path: ReadonlyArray<PropertyKey | StandardSchemaV1.PathSegment>): (string | number)[];
4
- export declare function convertStandardSchemaIssues(issues: readonly StandardSchemaV1.Issue[]): InvalidDependencies;
4
+ export declare function convertStandardSchemaIssues(issues: readonly StandardSchemaV1.Issue[]): ControllerError;
@@ -1,19 +1,23 @@
1
1
  import { StandardSchemaV1 } from './schema/standard-schema-v1';
2
- import { ValidationResult, Controller } from './controller';
3
- export interface UseFormOptions<In, Out = In> {
4
- schema: StandardSchemaV1<In, Out>;
5
- defaultValue?: In;
2
+ import { ControllerValidation, Controller, ObjectController } from './controller';
3
+ export interface UseFormOptions<T> {
4
+ schema: StandardSchemaV1<T, T>;
5
+ defaultValue?: T;
6
+ submit?: (value: T) => Promise<ControllerValidation>;
6
7
  }
7
- export interface UseControllerOptions<In> {
8
- defaultValue: In;
9
- onChange?: (value: In) => void;
10
- validate?: (value: In) => Promise<ValidationResult> | ValidationResult;
8
+ export interface UseControllerOptions<T> {
9
+ defaultValue: T;
10
+ onChange?: (value: T) => void;
11
+ validate?: (value: T) => Promise<ControllerValidation> | ControllerValidation;
11
12
  }
12
13
  /**
13
14
  * Creates a Controller instance with automatic resource cleanup.
14
15
  * The controller will be automatically disposed when the component unmounts.
15
16
  */
16
- export declare function useController<In>({ defaultValue, onChange, validate, }: UseControllerOptions<In>): Controller<In>;
17
+ export declare function useController<T>({ defaultValue, onChange, validate, }: UseControllerOptions<T>): {
18
+ controller: Controller<T>;
19
+ setStatus: (result: ControllerValidation) => void;
20
+ };
17
21
  export declare function connectCommonAttributes<T>(value: Controller<T>): import("@tempots/dom").Renderable<import("@tempots/dom").DOMContext>;
18
22
  export declare function connectStringInput(value: Controller<string>, { triggerOn, }?: {
19
23
  triggerOn?: 'change' | 'input';
@@ -21,5 +25,34 @@ export declare function connectStringInput(value: Controller<string>, { triggerO
21
25
  export declare function connectNumberInput(value: Controller<number>, { triggerOn, }?: {
22
26
  triggerOn?: 'change' | 'input';
23
27
  }): import("@tempots/dom").Renderable<import("@tempots/dom").DOMContext>;
24
- export declare function standardSchemaResultToValidationResult<Out>(result: StandardSchemaV1.Result<Out>): ValidationResult;
25
- export declare function useForm<In extends Record<string, any>, Out = In>({ defaultValue, schema, }: UseFormOptions<In, Out>): import("./controller").ObjectController<In extends Record<string, any> ? In : never>;
28
+ export declare function standardSchemaResultToValidation<Out>(result: StandardSchemaV1.Result<Out>): ControllerValidation;
29
+ /**
30
+ * Wraps an async operation and converts any thrown errors into a ControllerValidation.
31
+ * This is useful for form submission handlers that need to convert async operations
32
+ * into the ControllerValidation format expected by the form system.
33
+ *
34
+ * @param task - The async operation to execute
35
+ * @param errorMessage - Optional custom error message. If not provided, uses the error's message or a default message
36
+ * @param errorPath - Optional path for the error. Defaults to ['root']
37
+ * @returns A Promise that resolves to a ControllerValidation
38
+ *
39
+ * @example
40
+ * ```typescript
41
+ * const result = await taskToValidation(
42
+ * () => signUpUser(userData),
43
+ * 'Sign up failed'
44
+ * )
45
+ * ```
46
+ */
47
+ export declare function taskToValidation<T>({ task, errorMessage, errorPath, validation, }: {
48
+ task: () => Promise<T>;
49
+ errorMessage?: string;
50
+ errorPath?: string[];
51
+ validation?: (result: T) => ControllerValidation;
52
+ }): Promise<ControllerValidation>;
53
+ export type UseFormResult<T> = {
54
+ controller: ObjectController<T>;
55
+ setStatus: (result: ControllerValidation) => void;
56
+ onSubmit: (e: Event) => Promise<void>;
57
+ };
58
+ export declare function useForm<T>({ defaultValue, schema, submit, }: UseFormOptions<T>): UseFormResult<T>;