hazo_auth 1.2.0 → 1.4.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.
- package/README.md +383 -774
- package/dist/components/index.d.ts +3 -0
- package/dist/components/index.d.ts.map +1 -0
- package/dist/components/index.js +5 -0
- package/dist/components/layouts/email_verification/config/email_verification_field_config.d.ts +23 -0
- package/dist/components/layouts/email_verification/config/email_verification_field_config.d.ts.map +1 -0
- package/dist/components/layouts/email_verification/config/email_verification_field_config.js +44 -0
- package/dist/components/layouts/email_verification/hooks/use_email_verification.d.ts +31 -0
- package/dist/components/layouts/email_verification/hooks/use_email_verification.d.ts.map +1 -0
- package/dist/components/layouts/email_verification/hooks/use_email_verification.js +222 -0
- package/dist/components/layouts/email_verification/index.d.ts +23 -0
- package/dist/components/layouts/email_verification/index.d.ts.map +1 -0
- package/dist/components/layouts/email_verification/index.js +61 -0
- package/dist/components/layouts/forgot_password/config/forgot_password_field_config.d.ts +10 -0
- package/dist/components/layouts/forgot_password/config/forgot_password_field_config.d.ts.map +1 -0
- package/dist/components/layouts/forgot_password/config/forgot_password_field_config.js +33 -0
- package/dist/components/layouts/forgot_password/hooks/use_forgot_password_form.d.ts +22 -0
- package/dist/components/layouts/forgot_password/hooks/use_forgot_password_form.d.ts.map +1 -0
- package/dist/components/layouts/forgot_password/hooks/use_forgot_password_form.js +127 -0
- package/dist/components/layouts/forgot_password/index.d.ts +18 -0
- package/dist/components/layouts/forgot_password/index.d.ts.map +1 -0
- package/dist/components/layouts/forgot_password/index.js +43 -0
- package/dist/components/layouts/index.d.ts +16 -0
- package/dist/components/layouts/index.d.ts.map +1 -0
- package/dist/components/layouts/index.js +11 -0
- package/dist/components/layouts/login/config/login_field_config.d.ts +11 -0
- package/dist/components/layouts/login/config/login_field_config.d.ts.map +1 -0
- package/dist/components/layouts/login/config/login_field_config.js +42 -0
- package/dist/components/layouts/login/hooks/use_login_form.d.ts +34 -0
- package/dist/components/layouts/login/hooks/use_login_form.d.ts.map +1 -0
- package/dist/components/layouts/login/hooks/use_login_form.js +196 -0
- package/dist/components/layouts/login/index.d.ts +31 -0
- package/dist/components/layouts/login/index.d.ts.map +1 -0
- package/dist/components/layouts/login/index.js +58 -0
- package/dist/components/layouts/my_settings/components/editable_field.d.ts +19 -0
- package/dist/components/layouts/my_settings/components/editable_field.d.ts.map +1 -0
- package/dist/components/layouts/my_settings/components/editable_field.js +73 -0
- package/dist/components/layouts/my_settings/components/password_change_dialog.d.ts +28 -0
- package/dist/components/layouts/my_settings/components/password_change_dialog.d.ts.map +1 -0
- package/dist/components/layouts/my_settings/components/password_change_dialog.js +138 -0
- package/dist/components/layouts/my_settings/components/profile_picture_dialog.d.ts +42 -0
- package/dist/components/layouts/my_settings/components/profile_picture_dialog.d.ts.map +1 -0
- package/dist/components/layouts/my_settings/components/profile_picture_dialog.js +198 -0
- package/dist/components/layouts/my_settings/components/profile_picture_display.d.ts +16 -0
- package/dist/components/layouts/my_settings/components/profile_picture_display.d.ts.map +1 -0
- package/dist/components/layouts/my_settings/components/profile_picture_display.js +33 -0
- package/dist/components/layouts/my_settings/components/profile_picture_gravatar_tab.d.ts +17 -0
- package/dist/components/layouts/my_settings/components/profile_picture_gravatar_tab.d.ts.map +1 -0
- package/dist/components/layouts/my_settings/components/profile_picture_gravatar_tab.js +48 -0
- package/dist/components/layouts/my_settings/components/profile_picture_library_tab.d.ts +21 -0
- package/dist/components/layouts/my_settings/components/profile_picture_library_tab.d.ts.map +1 -0
- package/dist/components/layouts/my_settings/components/profile_picture_library_tab.js +144 -0
- package/dist/components/layouts/my_settings/components/profile_picture_upload_tab.d.ts +23 -0
- package/dist/components/layouts/my_settings/components/profile_picture_upload_tab.d.ts.map +1 -0
- package/dist/components/layouts/my_settings/components/profile_picture_upload_tab.js +169 -0
- package/dist/components/layouts/my_settings/config/my_settings_field_config.d.ts +19 -0
- package/dist/components/layouts/my_settings/config/my_settings_field_config.d.ts.map +1 -0
- package/dist/components/layouts/my_settings/config/my_settings_field_config.js +26 -0
- package/dist/components/layouts/my_settings/hooks/use_my_settings.d.ts +46 -0
- package/dist/components/layouts/my_settings/hooks/use_my_settings.d.ts.map +1 -0
- package/dist/components/layouts/my_settings/hooks/use_my_settings.js +354 -0
- package/dist/components/layouts/my_settings/index.d.ts +64 -0
- package/dist/components/layouts/my_settings/index.d.ts.map +1 -0
- package/dist/components/layouts/my_settings/index.js +65 -0
- package/dist/components/layouts/register/config/register_field_config.d.ts +14 -0
- package/dist/components/layouts/register/config/register_field_config.d.ts.map +1 -0
- package/dist/components/layouts/register/config/register_field_config.js +69 -0
- package/dist/components/layouts/register/hooks/use_register_form.d.ts +30 -0
- package/dist/components/layouts/register/hooks/use_register_form.d.ts.map +1 -0
- package/dist/components/layouts/register/hooks/use_register_form.js +184 -0
- package/dist/components/layouts/register/index.d.ts +23 -0
- package/dist/components/layouts/register/index.d.ts.map +1 -0
- package/dist/components/layouts/register/index.js +58 -0
- package/dist/components/layouts/reset_password/config/reset_password_field_config.d.ts +13 -0
- package/dist/components/layouts/reset_password/config/reset_password_field_config.d.ts.map +1 -0
- package/dist/components/layouts/reset_password/config/reset_password_field_config.js +53 -0
- package/dist/components/layouts/reset_password/hooks/use_reset_password_form.d.ts +28 -0
- package/dist/components/layouts/reset_password/hooks/use_reset_password_form.d.ts.map +1 -0
- package/dist/components/layouts/reset_password/hooks/use_reset_password_form.js +201 -0
- package/dist/components/layouts/reset_password/index.d.ts +23 -0
- package/dist/components/layouts/reset_password/index.d.ts.map +1 -0
- package/dist/components/layouts/reset_password/index.js +53 -0
- package/dist/components/layouts/shared/components/already_logged_in_guard.d.ts +20 -0
- package/dist/components/layouts/shared/components/already_logged_in_guard.d.ts.map +1 -0
- package/dist/components/layouts/shared/components/already_logged_in_guard.js +32 -0
- package/dist/components/layouts/shared/components/auth_page_shell.d.ts +7 -0
- package/dist/components/layouts/shared/components/auth_page_shell.d.ts.map +1 -0
- package/dist/components/layouts/shared/components/auth_page_shell.js +12 -0
- package/dist/components/layouts/shared/components/field_error_message.d.ts +7 -0
- package/dist/components/layouts/shared/components/field_error_message.d.ts.map +1 -0
- package/dist/components/layouts/shared/components/field_error_message.js +6 -0
- package/dist/components/layouts/shared/components/form_action_buttons.d.ts +14 -0
- package/dist/components/layouts/shared/components/form_action_buttons.d.ts.map +1 -0
- package/dist/components/layouts/shared/components/form_action_buttons.js +15 -0
- package/dist/components/layouts/shared/components/form_field_wrapper.d.ts +11 -0
- package/dist/components/layouts/shared/components/form_field_wrapper.d.ts.map +1 -0
- package/dist/components/layouts/shared/components/form_field_wrapper.js +9 -0
- package/dist/components/layouts/shared/components/form_header.d.ts +10 -0
- package/dist/components/layouts/shared/components/form_header.d.ts.map +1 -0
- package/dist/components/layouts/shared/components/form_header.js +5 -0
- package/dist/components/layouts/shared/components/logout_button.d.ts +7 -0
- package/dist/components/layouts/shared/components/logout_button.d.ts.map +1 -0
- package/dist/components/layouts/shared/components/logout_button.js +44 -0
- package/dist/components/layouts/shared/components/password_field.d.ts +13 -0
- package/dist/components/layouts/shared/components/password_field.d.ts.map +1 -0
- package/dist/components/layouts/shared/components/password_field.js +13 -0
- package/dist/components/layouts/shared/components/profile_pic_menu.d.ts +22 -0
- package/dist/components/layouts/shared/components/profile_pic_menu.d.ts.map +1 -0
- package/dist/components/layouts/shared/components/profile_pic_menu.js +169 -0
- package/dist/components/layouts/shared/components/profile_pic_menu_wrapper.d.ts +12 -0
- package/dist/components/layouts/shared/components/profile_pic_menu_wrapper.d.ts.map +1 -0
- package/dist/components/layouts/shared/components/profile_pic_menu_wrapper.js +16 -0
- package/dist/components/layouts/shared/components/sidebar_layout_wrapper.d.ts +6 -0
- package/dist/components/layouts/shared/components/sidebar_layout_wrapper.d.ts.map +1 -0
- package/dist/components/layouts/shared/components/sidebar_layout_wrapper.js +15 -0
- package/dist/components/layouts/shared/components/standalone_layout_wrapper.d.ts +11 -0
- package/dist/components/layouts/shared/components/standalone_layout_wrapper.d.ts.map +1 -0
- package/dist/components/layouts/shared/components/standalone_layout_wrapper.js +10 -0
- package/dist/components/layouts/shared/components/two_column_auth_layout.d.ts +12 -0
- package/dist/components/layouts/shared/components/two_column_auth_layout.d.ts.map +1 -0
- package/dist/components/layouts/shared/components/two_column_auth_layout.js +8 -0
- package/dist/components/layouts/shared/components/unauthorized_guard.d.ts +14 -0
- package/dist/components/layouts/shared/components/unauthorized_guard.d.ts.map +1 -0
- package/dist/components/layouts/shared/components/unauthorized_guard.js +30 -0
- package/dist/components/layouts/shared/components/visual_panel.d.ts +9 -0
- package/dist/components/layouts/shared/components/visual_panel.d.ts.map +1 -0
- package/dist/components/layouts/shared/components/visual_panel.js +10 -0
- package/dist/components/layouts/shared/config/layout_customization.d.ts +38 -0
- package/dist/components/layouts/shared/config/layout_customization.d.ts.map +1 -0
- package/dist/components/layouts/shared/config/layout_customization.js +19 -0
- package/dist/components/layouts/shared/data/layout_data_client.d.ts +6 -0
- package/dist/components/layouts/shared/data/layout_data_client.d.ts.map +1 -0
- package/dist/components/layouts/shared/data/layout_data_client.js +9 -0
- package/dist/components/layouts/shared/hooks/use_auth_status.d.ts +20 -0
- package/dist/components/layouts/shared/hooks/use_auth_status.d.ts.map +1 -0
- package/dist/components/layouts/shared/hooks/use_auth_status.js +71 -0
- package/dist/components/layouts/shared/hooks/use_hazo_auth.d.ts +48 -0
- package/dist/components/layouts/shared/hooks/use_hazo_auth.d.ts.map +1 -0
- package/dist/components/layouts/shared/hooks/use_hazo_auth.js +90 -0
- package/dist/components/layouts/shared/index.d.ts +24 -0
- package/dist/components/layouts/shared/index.d.ts.map +1 -0
- package/dist/components/layouts/shared/index.js +27 -0
- package/dist/components/layouts/shared/utils/ip_address.d.ts +7 -0
- package/dist/components/layouts/shared/utils/ip_address.d.ts.map +1 -0
- package/dist/components/layouts/shared/utils/ip_address.js +34 -0
- package/dist/components/layouts/shared/utils/validation.d.ts +15 -0
- package/dist/components/layouts/shared/utils/validation.d.ts.map +1 -0
- package/dist/components/layouts/shared/utils/validation.js +45 -0
- package/dist/components/layouts/user_management/components/roles_matrix.d.ts +29 -0
- package/dist/components/layouts/user_management/components/roles_matrix.d.ts.map +1 -0
- package/dist/components/layouts/user_management/components/roles_matrix.js +287 -0
- package/dist/components/layouts/user_management/index.d.ts +13 -0
- package/dist/components/layouts/user_management/index.d.ts.map +1 -0
- package/dist/components/layouts/user_management/index.js +495 -0
- package/dist/components/ui/alert-dialog.d.ts +21 -0
- package/dist/components/ui/alert-dialog.d.ts.map +1 -0
- package/dist/components/ui/alert-dialog.js +62 -0
- package/dist/components/ui/avatar.d.ts +7 -0
- package/dist/components/ui/avatar.d.ts.map +1 -0
- package/dist/components/ui/avatar.js +32 -0
- package/dist/components/ui/button.d.ts +12 -0
- package/dist/components/ui/button.d.ts.map +1 -0
- package/dist/components/ui/button.js +45 -0
- package/dist/components/ui/checkbox.d.ts +5 -0
- package/dist/components/ui/checkbox.d.ts.map +1 -0
- package/dist/components/ui/checkbox.js +23 -0
- package/dist/components/ui/dialog.d.ts +20 -0
- package/dist/components/ui/dialog.d.ts.map +1 -0
- package/dist/components/ui/dialog.js +52 -0
- package/dist/components/ui/dropdown-menu.d.ts +28 -0
- package/dist/components/ui/dropdown-menu.d.ts.map +1 -0
- package/dist/components/ui/dropdown-menu.js +72 -0
- package/dist/components/ui/hazo_ui_tooltip.d.ts +26 -0
- package/dist/components/ui/hazo_ui_tooltip.d.ts.map +1 -0
- package/dist/components/ui/hazo_ui_tooltip.js +17 -0
- package/dist/components/ui/index.d.ts +20 -0
- package/dist/components/ui/index.d.ts.map +1 -0
- package/dist/components/ui/index.js +21 -0
- package/dist/components/ui/input.d.ts +4 -0
- package/dist/components/ui/input.d.ts.map +1 -0
- package/dist/components/ui/input.js +20 -0
- package/dist/components/ui/label.d.ts +6 -0
- package/dist/components/ui/label.d.ts.map +1 -0
- package/dist/components/ui/label.js +24 -0
- package/dist/components/ui/separator.d.ts +5 -0
- package/dist/components/ui/separator.d.ts.map +1 -0
- package/dist/components/ui/separator.js +22 -0
- package/dist/components/ui/sheet.d.ts +23 -0
- package/dist/components/ui/sheet.d.ts.map +1 -0
- package/dist/components/ui/sheet.js +66 -0
- package/dist/components/ui/sidebar.d.ts +66 -0
- package/dist/components/ui/sidebar.d.ts.map +1 -0
- package/dist/components/ui/sidebar.js +267 -0
- package/dist/components/ui/skeleton.d.ts +3 -0
- package/dist/components/ui/skeleton.d.ts.map +1 -0
- package/dist/components/ui/skeleton.js +18 -0
- package/dist/components/ui/sonner.d.ts +5 -0
- package/dist/components/ui/sonner.d.ts.map +1 -0
- package/dist/components/ui/sonner.js +28 -0
- package/dist/components/ui/switch.d.ts +5 -0
- package/dist/components/ui/switch.d.ts.map +1 -0
- package/dist/components/ui/switch.js +22 -0
- package/dist/components/ui/table.d.ts +11 -0
- package/dist/components/ui/table.d.ts.map +1 -0
- package/dist/components/ui/table.js +55 -0
- package/dist/components/ui/tabs.d.ts +8 -0
- package/dist/components/ui/tabs.d.ts.map +1 -0
- package/dist/components/ui/tabs.js +33 -0
- package/dist/components/ui/tooltip.d.ts +8 -0
- package/dist/components/ui/tooltip.d.ts.map +1 -0
- package/dist/components/ui/tooltip.js +25 -0
- package/dist/components/ui/vertical-tabs.d.ts +8 -0
- package/dist/components/ui/vertical-tabs.d.ts.map +1 -0
- package/dist/components/ui/vertical-tabs.js +37 -0
- package/dist/hooks/use-mobile.d.ts +2 -0
- package/dist/hooks/use-mobile.d.ts.map +1 -0
- package/dist/hooks/use-mobile.js +15 -0
- package/dist/index.d.ts +3 -0
- package/dist/index.d.ts.map +1 -0
- package/dist/index.js +5 -0
- package/dist/lib/already_logged_in_config.server.d.ts +14 -0
- package/dist/lib/already_logged_in_config.server.d.ts.map +1 -0
- package/dist/lib/already_logged_in_config.server.js +29 -0
- package/dist/lib/app_logger.d.ts +12 -0
- package/dist/lib/app_logger.d.ts.map +1 -0
- package/dist/lib/app_logger.js +14 -0
- package/dist/lib/auth/auth_cache.d.ts +83 -0
- package/dist/lib/auth/auth_cache.d.ts.map +1 -0
- package/dist/lib/auth/auth_cache.js +158 -0
- package/dist/lib/auth/auth_rate_limiter.d.ts +39 -0
- package/dist/lib/auth/auth_rate_limiter.d.ts.map +1 -0
- package/dist/lib/auth/auth_rate_limiter.js +95 -0
- package/dist/lib/auth/auth_types.d.ts +53 -0
- package/dist/lib/auth/auth_types.d.ts.map +1 -0
- package/dist/lib/auth/auth_types.js +16 -0
- package/dist/lib/auth/auth_utils.server.d.ts +47 -0
- package/dist/lib/auth/auth_utils.server.d.ts.map +1 -0
- package/dist/lib/auth/auth_utils.server.js +150 -0
- package/dist/lib/auth/hazo_get_auth.server.d.ts +12 -0
- package/dist/lib/auth/hazo_get_auth.server.d.ts.map +1 -0
- package/dist/lib/auth/hazo_get_auth.server.js +256 -0
- package/dist/lib/auth/index.d.ts +9 -0
- package/dist/lib/auth/index.d.ts.map +1 -0
- package/dist/lib/auth/index.js +12 -0
- package/dist/lib/auth/server_auth.d.ts +26 -0
- package/dist/lib/auth/server_auth.d.ts.map +1 -0
- package/dist/lib/auth/server_auth.js +62 -0
- package/dist/lib/auth_utility_config.server.d.ts +20 -0
- package/dist/lib/auth_utility_config.server.d.ts.map +1 -0
- package/dist/lib/auth_utility_config.server.js +64 -0
- package/dist/lib/config/config_loader.server.d.ts +44 -0
- package/dist/lib/config/config_loader.server.d.ts.map +1 -0
- package/dist/lib/config/config_loader.server.js +122 -0
- package/dist/lib/email_verification_config.server.d.ts +14 -0
- package/dist/lib/email_verification_config.server.d.ts.map +1 -0
- package/dist/lib/email_verification_config.server.js +20 -0
- package/dist/lib/file_types_config.server.d.ts +11 -0
- package/dist/lib/file_types_config.server.d.ts.map +1 -0
- package/dist/lib/file_types_config.server.js +16 -0
- package/dist/lib/forgot_password_config.server.d.ts +14 -0
- package/dist/lib/forgot_password_config.server.d.ts.map +1 -0
- package/dist/lib/forgot_password_config.server.js +20 -0
- package/dist/lib/hazo_connect_instance.server.d.ts +17 -0
- package/dist/lib/hazo_connect_instance.server.d.ts.map +1 -0
- package/dist/lib/hazo_connect_instance.server.js +88 -0
- package/dist/lib/hazo_connect_setup.d.ts +2 -0
- package/dist/lib/hazo_connect_setup.d.ts.map +1 -0
- package/dist/lib/hazo_connect_setup.js +49 -0
- package/dist/lib/hazo_connect_setup.server.d.ts +20 -0
- package/dist/lib/hazo_connect_setup.server.d.ts.map +1 -0
- package/dist/lib/hazo_connect_setup.server.js +138 -0
- package/dist/lib/index.d.ts +28 -0
- package/dist/lib/index.d.ts.map +1 -0
- package/dist/lib/index.js +35 -0
- package/dist/lib/login_config.server.d.ts +20 -0
- package/dist/lib/login_config.server.d.ts.map +1 -0
- package/dist/lib/login_config.server.js +37 -0
- package/dist/lib/messages_config.server.d.ts +13 -0
- package/dist/lib/messages_config.server.d.ts.map +1 -0
- package/dist/lib/messages_config.server.js +18 -0
- package/dist/lib/migrations/apply_migration.d.ts +22 -0
- package/dist/lib/migrations/apply_migration.d.ts.map +1 -0
- package/dist/lib/migrations/apply_migration.js +78 -0
- package/dist/lib/my_settings_config.server.d.ts +65 -0
- package/dist/lib/my_settings_config.server.d.ts.map +1 -0
- package/dist/lib/my_settings_config.server.js +67 -0
- package/dist/lib/password_requirements_config.server.d.ts +15 -0
- package/dist/lib/password_requirements_config.server.d.ts.map +1 -0
- package/dist/lib/password_requirements_config.server.js +26 -0
- package/dist/lib/profile_pic_menu_config.server.d.ts +26 -0
- package/dist/lib/profile_pic_menu_config.server.d.ts.map +1 -0
- package/dist/lib/profile_pic_menu_config.server.js +95 -0
- package/dist/lib/profile_picture_config.server.d.ts +16 -0
- package/dist/lib/profile_picture_config.server.d.ts.map +1 -0
- package/dist/lib/profile_picture_config.server.js +40 -0
- package/dist/lib/register_config.server.d.ts +24 -0
- package/dist/lib/register_config.server.d.ts.map +1 -0
- package/dist/lib/register_config.server.js +39 -0
- package/dist/lib/reset_password_config.server.d.ts +25 -0
- package/dist/lib/reset_password_config.server.d.ts.map +1 -0
- package/dist/lib/reset_password_config.server.js +38 -0
- package/dist/lib/services/email_service.d.ts +44 -0
- package/dist/lib/services/email_service.d.ts.map +1 -0
- package/dist/lib/services/email_service.js +480 -0
- package/dist/lib/services/email_verification_service.d.ts +35 -0
- package/dist/lib/services/email_verification_service.d.ts.map +1 -0
- package/dist/lib/services/email_verification_service.js +208 -0
- package/dist/lib/services/index.d.ts +13 -0
- package/dist/lib/services/index.d.ts.map +1 -0
- package/dist/lib/services/index.js +14 -0
- package/dist/lib/services/login_service.d.ts +20 -0
- package/dist/lib/services/login_service.d.ts.map +1 -0
- package/dist/lib/services/login_service.js +94 -0
- package/dist/lib/services/password_change_service.d.ts +19 -0
- package/dist/lib/services/password_change_service.d.ts.map +1 -0
- package/dist/lib/services/password_change_service.js +118 -0
- package/dist/lib/services/password_reset_service.d.ts +52 -0
- package/dist/lib/services/password_reset_service.d.ts.map +1 -0
- package/dist/lib/services/password_reset_service.js +318 -0
- package/dist/lib/services/profile_picture_remove_service.d.ts +15 -0
- package/dist/lib/services/profile_picture_remove_service.d.ts.map +1 -0
- package/dist/lib/services/profile_picture_remove_service.js +94 -0
- package/dist/lib/services/profile_picture_service.d.ts +45 -0
- package/dist/lib/services/profile_picture_service.d.ts.map +1 -0
- package/dist/lib/services/profile_picture_service.js +183 -0
- package/dist/lib/services/profile_picture_source_mapper.d.ts +23 -0
- package/dist/lib/services/profile_picture_source_mapper.d.ts.map +1 -0
- package/dist/lib/services/profile_picture_source_mapper.js +45 -0
- package/dist/lib/services/registration_service.d.ts +20 -0
- package/dist/lib/services/registration_service.d.ts.map +1 -0
- package/dist/lib/services/registration_service.js +147 -0
- package/dist/lib/services/token_service.d.ts +20 -0
- package/dist/lib/services/token_service.d.ts.map +1 -0
- package/dist/lib/services/token_service.js +201 -0
- package/dist/lib/services/user_profiles_service.d.ts +31 -0
- package/dist/lib/services/user_profiles_service.d.ts.map +1 -0
- package/dist/lib/services/user_profiles_service.js +99 -0
- package/dist/lib/services/user_update_service.d.ts +23 -0
- package/dist/lib/services/user_update_service.d.ts.map +1 -0
- package/dist/lib/services/user_update_service.js +103 -0
- package/dist/lib/ui_shell_config.server.d.ts +16 -0
- package/dist/lib/ui_shell_config.server.d.ts.map +1 -0
- package/dist/lib/ui_shell_config.server.js +28 -0
- package/dist/lib/ui_sizes_config.server.d.ts +17 -0
- package/dist/lib/ui_sizes_config.server.d.ts.map +1 -0
- package/dist/lib/ui_sizes_config.server.js +22 -0
- package/dist/lib/user_fields_config.server.d.ts +13 -0
- package/dist/lib/user_fields_config.server.d.ts.map +1 -0
- package/dist/lib/user_fields_config.server.js +21 -0
- package/dist/lib/user_management_config.server.d.ts +10 -0
- package/dist/lib/user_management_config.server.d.ts.map +1 -0
- package/dist/lib/user_management_config.server.js +26 -0
- package/dist/lib/utils/api_route_helpers.d.ts +13 -0
- package/dist/lib/utils/api_route_helpers.d.ts.map +1 -0
- package/dist/lib/utils/api_route_helpers.js +58 -0
- package/dist/lib/utils/error_sanitizer.d.ts +16 -0
- package/dist/lib/utils/error_sanitizer.d.ts.map +1 -0
- package/dist/lib/utils/error_sanitizer.js +39 -0
- package/dist/lib/utils.d.ts +4 -0
- package/dist/lib/utils.d.ts.map +1 -0
- package/dist/lib/utils.js +9 -0
- package/dist/server/config/config_loader.d.ts +26 -0
- package/dist/server/config/config_loader.d.ts.map +1 -0
- package/dist/server/config/config_loader.js +329 -0
- package/dist/server/index.d.ts +2 -0
- package/dist/server/index.d.ts.map +1 -0
- package/dist/server/index.js +32 -0
- package/dist/server/logging/logger_service.d.ts +3 -0
- package/dist/server/logging/logger_service.d.ts.map +1 -0
- package/dist/server/logging/logger_service.js +37 -0
- package/dist/server/routes/root_router.d.ts +3 -0
- package/dist/server/routes/root_router.d.ts.map +1 -0
- package/dist/server/routes/root_router.js +14 -0
- package/dist/server/server.d.ts +3 -0
- package/dist/server/server.d.ts.map +1 -0
- package/dist/server/server.js +25 -0
- package/dist/server/types/app_types.d.ts +53 -0
- package/dist/server/types/app_types.d.ts.map +1 -0
- package/dist/server/types/app_types.js +1 -0
- package/migrations/003_add_url_on_logon_to_hazo_users.sql +8 -0
- package/next.config.mjs +12 -0
- package/package.json +39 -2
- package/scripts/init_users.ts +9 -9
- package/src/components/index.ts +7 -0
- package/src/components/layouts/email_verification/config/email_verification_field_config.ts +2 -2
- package/src/components/layouts/email_verification/hooks/use_email_verification.ts +3 -3
- package/src/components/layouts/email_verification/index.tsx +11 -11
- package/src/components/layouts/forgot_password/config/forgot_password_field_config.ts +2 -2
- package/src/components/layouts/forgot_password/hooks/use_forgot_password_form.ts +3 -3
- package/src/components/layouts/forgot_password/index.tsx +10 -10
- package/src/components/layouts/index.ts +26 -0
- package/src/components/layouts/login/config/login_field_config.ts +2 -2
- package/src/components/layouts/login/hooks/use_login_form.ts +5 -5
- package/src/components/layouts/login/index.tsx +11 -11
- package/src/components/layouts/my_settings/components/editable_field.tsx +3 -3
- package/src/components/layouts/my_settings/components/password_change_dialog.tsx +5 -5
- package/src/components/layouts/my_settings/components/profile_picture_dialog.tsx +7 -7
- package/src/components/layouts/my_settings/components/profile_picture_display.tsx +2 -2
- package/src/components/layouts/my_settings/components/profile_picture_gravatar_tab.tsx +3 -3
- package/src/components/layouts/my_settings/components/profile_picture_library_tab.tsx +5 -5
- package/src/components/layouts/my_settings/components/profile_picture_upload_tab.tsx +4 -4
- package/src/components/layouts/my_settings/config/my_settings_field_config.ts +2 -2
- package/src/components/layouts/my_settings/hooks/use_my_settings.ts +2 -2
- package/src/components/layouts/my_settings/index.tsx +10 -10
- package/src/components/layouts/register/config/register_field_config.ts +2 -2
- package/src/components/layouts/register/hooks/use_register_form.ts +4 -4
- package/src/components/layouts/register/index.tsx +11 -11
- package/src/components/layouts/reset_password/config/reset_password_field_config.ts +2 -2
- package/src/components/layouts/reset_password/hooks/use_reset_password_form.ts +4 -4
- package/src/components/layouts/reset_password/index.tsx +10 -10
- package/src/components/layouts/shared/components/already_logged_in_guard.tsx +4 -4
- package/src/components/layouts/shared/components/auth_page_shell.tsx +3 -3
- package/src/components/layouts/shared/components/form_action_buttons.tsx +2 -2
- package/src/components/layouts/shared/components/form_field_wrapper.tsx +2 -2
- package/src/components/layouts/shared/components/logout_button.tsx +2 -2
- package/src/components/layouts/shared/components/password_field.tsx +3 -3
- package/src/components/layouts/shared/components/profile_pic_menu.tsx +5 -5
- package/src/components/layouts/shared/components/profile_pic_menu_wrapper.tsx +2 -2
- package/src/components/layouts/shared/components/sidebar_layout_wrapper.tsx +3 -3
- package/src/components/layouts/shared/components/standalone_layout_wrapper.tsx +1 -1
- package/src/components/layouts/shared/components/two_column_auth_layout.tsx +1 -1
- package/src/components/layouts/shared/components/unauthorized_guard.tsx +2 -2
- package/src/components/layouts/shared/hooks/use_hazo_auth.ts +1 -1
- package/src/components/layouts/shared/index.ts +34 -0
- package/src/components/layouts/shared/utils/validation.ts +1 -1
- package/src/components/layouts/user_management/components/roles_matrix.tsx +7 -7
- package/src/components/layouts/user_management/index.tsx +11 -11
- package/src/components/ui/alert-dialog.tsx +2 -2
- package/src/components/ui/avatar.tsx +1 -1
- package/src/components/ui/button.tsx +1 -1
- package/src/components/ui/checkbox.tsx +1 -1
- package/src/components/ui/dialog.tsx +1 -1
- package/src/components/ui/dropdown-menu.tsx +1 -1
- package/src/components/ui/hazo_ui_tooltip.tsx +1 -1
- package/src/components/ui/index.ts +22 -0
- package/src/components/ui/input.tsx +1 -1
- package/src/components/ui/label.tsx +1 -1
- package/src/components/ui/separator.tsx +1 -1
- package/src/components/ui/sheet.tsx +1 -1
- package/src/components/ui/sidebar.tsx +8 -8
- package/src/components/ui/skeleton.tsx +1 -1
- package/src/components/ui/switch.tsx +1 -1
- package/src/components/ui/table.tsx +1 -1
- package/src/components/ui/tabs.tsx +1 -1
- package/src/components/ui/tooltip.tsx +1 -1
- package/src/components/ui/vertical-tabs.tsx +1 -1
- package/src/index.ts +7 -0
- package/src/lib/already_logged_in_config.server.ts +1 -1
- package/src/lib/app_logger.ts +1 -1
- package/src/lib/auth/auth_cache.ts +1 -1
- package/src/lib/auth/auth_utils.server.ts +2 -2
- package/src/lib/auth/hazo_get_auth.server.ts +8 -8
- package/src/lib/auth/index.ts +23 -0
- package/src/lib/auth/server_auth.ts +2 -2
- package/src/lib/auth_utility_config.server.ts +1 -1
- package/src/lib/config/config_loader.server.ts +1 -1
- package/src/lib/email_verification_config.server.ts +1 -1
- package/src/lib/file_types_config.server.ts +1 -1
- package/src/lib/forgot_password_config.server.ts +1 -1
- package/src/lib/hazo_connect_instance.server.ts +2 -2
- package/src/lib/hazo_connect_setup.server.ts +2 -2
- package/src/lib/index.ts +44 -0
- package/src/lib/login_config.server.ts +2 -2
- package/src/lib/messages_config.server.ts +1 -1
- package/src/lib/my_settings_config.server.ts +7 -7
- package/src/lib/password_requirements_config.server.ts +1 -1
- package/src/lib/profile_pic_menu_config.server.ts +1 -1
- package/src/lib/profile_picture_config.server.ts +2 -2
- package/src/lib/register_config.server.ts +4 -4
- package/src/lib/reset_password_config.server.ts +3 -3
- package/src/lib/services/email_service.ts +2 -2
- package/src/lib/services/email_verification_service.ts +3 -3
- package/src/lib/services/index.ts +15 -0
- package/src/lib/services/login_service.ts +3 -3
- package/src/lib/services/password_change_service.ts +3 -3
- package/src/lib/services/password_reset_service.ts +3 -3
- package/src/lib/services/profile_picture_remove_service.ts +3 -3
- package/src/lib/services/profile_picture_service.ts +5 -5
- package/src/lib/services/registration_service.ts +8 -8
- package/src/lib/services/token_service.ts +2 -2
- package/src/lib/services/user_profiles_service.ts +2 -2
- package/src/lib/services/user_update_service.ts +4 -4
- package/src/lib/ui_shell_config.server.ts +1 -1
- package/src/lib/ui_sizes_config.server.ts +1 -1
- package/src/lib/user_fields_config.server.ts +1 -1
- package/src/lib/user_management_config.server.ts +1 -2
- package/src/lib/utils/error_sanitizer.ts +1 -1
- package/src/routes/index.ts +34 -0
- package/src/server/config/config_loader.ts +2 -2
- package/src/server/index.ts +2 -2
- package/src/server/logging/logger_service.ts +1 -1
- package/src/server/server.ts +2 -2
- package/src/server/types/express.d.ts +1 -1
- package/tsconfig.build.json +39 -0
- package/tsconfig.json +5 -1
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/components/index.ts"],"names":[],"mappings":"AAEA,cAAc,YAAY,CAAC;AAG3B,cAAc,iBAAiB,CAAC"}
|
package/dist/components/layouts/email_verification/config/email_verification_field_config.d.ts
ADDED
|
@@ -0,0 +1,23 @@
|
|
|
1
|
+
import type { LayoutFieldMap, LayoutFieldMapOverrides } from "hazo_auth/components/layouts/shared/config/layout_customization";
|
|
2
|
+
import { type ButtonPaletteDefaults, type ButtonPaletteOverrides, type LayoutLabelDefaults, type LayoutLabelOverrides } from "hazo_auth/components/layouts/shared/config/layout_customization";
|
|
3
|
+
export declare const EMAIL_VERIFICATION_FIELD_IDS: {
|
|
4
|
+
readonly EMAIL: "email_address";
|
|
5
|
+
};
|
|
6
|
+
export type EmailVerificationFieldId = (typeof EMAIL_VERIFICATION_FIELD_IDS)[keyof typeof EMAIL_VERIFICATION_FIELD_IDS];
|
|
7
|
+
export declare const createEmailVerificationFieldDefinitions: (overrides?: LayoutFieldMapOverrides) => LayoutFieldMap;
|
|
8
|
+
export declare const resolveEmailVerificationLabels: (overrides?: LayoutLabelOverrides) => LayoutLabelDefaults;
|
|
9
|
+
export declare const resolveEmailVerificationButtonPalette: (overrides?: ButtonPaletteOverrides) => ButtonPaletteDefaults;
|
|
10
|
+
export type EmailVerificationSuccessLabels = {
|
|
11
|
+
heading: string;
|
|
12
|
+
message: string;
|
|
13
|
+
redirectMessage: string;
|
|
14
|
+
goToLoginButton: string;
|
|
15
|
+
};
|
|
16
|
+
export declare const EMAIL_VERIFICATION_SUCCESS_LABEL_DEFAULTS: EmailVerificationSuccessLabels;
|
|
17
|
+
export type EmailVerificationErrorLabels = {
|
|
18
|
+
heading: string;
|
|
19
|
+
message: string;
|
|
20
|
+
resendFormHeading: string;
|
|
21
|
+
};
|
|
22
|
+
export declare const EMAIL_VERIFICATION_ERROR_LABEL_DEFAULTS: EmailVerificationErrorLabels;
|
|
23
|
+
//# sourceMappingURL=email_verification_field_config.d.ts.map
|
package/dist/components/layouts/email_verification/config/email_verification_field_config.d.ts.map
ADDED
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"email_verification_field_config.d.ts","sourceRoot":"","sources":["../../../../../src/components/layouts/email_verification/config/email_verification_field_config.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAE,cAAc,EAAE,uBAAuB,EAAE,MAAM,iEAAiE,CAAC;AAC/H,OAAO,EAIL,KAAK,qBAAqB,EAC1B,KAAK,sBAAsB,EAC3B,KAAK,mBAAmB,EACxB,KAAK,oBAAoB,EAC1B,MAAM,iEAAiE,CAAC;AAGzE,eAAO,MAAM,4BAA4B;;CAE/B,CAAC;AAEX,MAAM,MAAM,wBAAwB,GAAG,CAAC,OAAO,4BAA4B,CAAC,CAAC,MAAM,OAAO,4BAA4B,CAAC,CAAC;AAcxH,eAAO,MAAM,uCAAuC,GAClD,YAAY,uBAAuB,mBACwC,CAAC;AAU9E,eAAO,MAAM,8BAA8B,GAAI,YAAY,oBAAoB,wBAClB,CAAC;AAU9D,eAAO,MAAM,qCAAqC,GAAI,YAAY,sBAAsB,0BACX,CAAC;AAG9E,MAAM,MAAM,8BAA8B,GAAG;IAC3C,OAAO,EAAE,MAAM,CAAC;IAChB,OAAO,EAAE,MAAM,CAAC;IAChB,eAAe,EAAE,MAAM,CAAC;IACxB,eAAe,EAAE,MAAM,CAAC;CACzB,CAAC;AAEF,eAAO,MAAM,yCAAyC,EAAE,8BAKvD,CAAC;AAGF,MAAM,MAAM,4BAA4B,GAAG;IACzC,OAAO,EAAE,MAAM,CAAC;IAChB,OAAO,EAAE,MAAM,CAAC;IAChB,iBAAiB,EAAE,MAAM,CAAC;CAC3B,CAAC;AAEF,eAAO,MAAM,uCAAuC,EAAE,4BAIrD,CAAC"}
|
|
@@ -0,0 +1,44 @@
|
|
|
1
|
+
import { resolveButtonPalette, resolveFieldDefinitions, resolveLabels, } from "hazo_auth/components/layouts/shared/config/layout_customization";
|
|
2
|
+
// section: field_identifiers
|
|
3
|
+
export const EMAIL_VERIFICATION_FIELD_IDS = {
|
|
4
|
+
EMAIL: "email_address",
|
|
5
|
+
};
|
|
6
|
+
// section: field_definitions
|
|
7
|
+
const EMAIL_VERIFICATION_FIELD_DEFINITIONS = {
|
|
8
|
+
[EMAIL_VERIFICATION_FIELD_IDS.EMAIL]: {
|
|
9
|
+
id: EMAIL_VERIFICATION_FIELD_IDS.EMAIL,
|
|
10
|
+
label: "Email address",
|
|
11
|
+
type: "email",
|
|
12
|
+
autoComplete: "email",
|
|
13
|
+
placeholder: "Enter your email address",
|
|
14
|
+
ariaLabel: "Email address input field",
|
|
15
|
+
},
|
|
16
|
+
};
|
|
17
|
+
export const createEmailVerificationFieldDefinitions = (overrides) => resolveFieldDefinitions(EMAIL_VERIFICATION_FIELD_DEFINITIONS, overrides);
|
|
18
|
+
// section: label_defaults
|
|
19
|
+
const EMAIL_VERIFICATION_LABEL_DEFAULTS = {
|
|
20
|
+
heading: "Email verification",
|
|
21
|
+
subHeading: "Verifying your email address...",
|
|
22
|
+
submitButton: "Resend verification email",
|
|
23
|
+
cancelButton: "Cancel",
|
|
24
|
+
};
|
|
25
|
+
export const resolveEmailVerificationLabels = (overrides) => resolveLabels(EMAIL_VERIFICATION_LABEL_DEFAULTS, overrides);
|
|
26
|
+
// section: button_palette_defaults
|
|
27
|
+
const EMAIL_VERIFICATION_BUTTON_PALETTE_DEFAULTS = {
|
|
28
|
+
submitBackground: "#0f172a",
|
|
29
|
+
submitText: "#ffffff",
|
|
30
|
+
cancelBorder: "#cbd5f5",
|
|
31
|
+
cancelText: "#0f172a",
|
|
32
|
+
};
|
|
33
|
+
export const resolveEmailVerificationButtonPalette = (overrides) => resolveButtonPalette(EMAIL_VERIFICATION_BUTTON_PALETTE_DEFAULTS, overrides);
|
|
34
|
+
export const EMAIL_VERIFICATION_SUCCESS_LABEL_DEFAULTS = {
|
|
35
|
+
heading: "Email verified successfully",
|
|
36
|
+
message: "Your email address has been verified. You can now log in to your account.",
|
|
37
|
+
redirectMessage: "Redirecting to login page in",
|
|
38
|
+
goToLoginButton: "Go to login",
|
|
39
|
+
};
|
|
40
|
+
export const EMAIL_VERIFICATION_ERROR_LABEL_DEFAULTS = {
|
|
41
|
+
heading: "Verification failed",
|
|
42
|
+
message: "The verification link is invalid or has expired.",
|
|
43
|
+
resendFormHeading: "Resend verification email",
|
|
44
|
+
};
|
|
@@ -0,0 +1,31 @@
|
|
|
1
|
+
import type { LayoutDataClient } from "hazo_auth/components/layouts/shared/data/layout_data_client";
|
|
2
|
+
import { type EmailVerificationFieldId } from "hazo_auth/components/layouts/email_verification/config/email_verification_field_config";
|
|
3
|
+
export type EmailVerificationFormValues = Record<EmailVerificationFieldId, string>;
|
|
4
|
+
export type EmailVerificationFormErrors = Partial<Record<EmailVerificationFieldId, string>> & {
|
|
5
|
+
submit?: string;
|
|
6
|
+
};
|
|
7
|
+
export type UseEmailVerificationParams<TClient = unknown> = {
|
|
8
|
+
dataClient: LayoutDataClient<TClient>;
|
|
9
|
+
redirectDelay?: number;
|
|
10
|
+
loginPath?: string;
|
|
11
|
+
};
|
|
12
|
+
export type UseEmailVerificationResult = {
|
|
13
|
+
isVerifying: boolean;
|
|
14
|
+
isVerified: boolean;
|
|
15
|
+
isError: boolean;
|
|
16
|
+
errorMessage?: string;
|
|
17
|
+
email?: string;
|
|
18
|
+
values: EmailVerificationFormValues;
|
|
19
|
+
errors: EmailVerificationFormErrors;
|
|
20
|
+
isSubmitDisabled: boolean;
|
|
21
|
+
isSubmitting: boolean;
|
|
22
|
+
emailTouched: boolean;
|
|
23
|
+
redirectCountdown: number;
|
|
24
|
+
handleFieldChange: (fieldId: EmailVerificationFieldId, value: string) => void;
|
|
25
|
+
handleEmailBlur: () => void;
|
|
26
|
+
handleResendSubmit: (event: React.FormEvent<HTMLFormElement>) => void;
|
|
27
|
+
handleCancel: () => void;
|
|
28
|
+
handleGoToLogin: () => void;
|
|
29
|
+
};
|
|
30
|
+
export declare const use_email_verification: <TClient>({ dataClient, redirectDelay, loginPath, }: UseEmailVerificationParams<TClient>) => UseEmailVerificationResult;
|
|
31
|
+
//# sourceMappingURL=use_email_verification.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"use_email_verification.d.ts","sourceRoot":"","sources":["../../../../../src/components/layouts/email_verification/hooks/use_email_verification.ts"],"names":[],"mappings":"AAKA,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,6DAA6D,CAAC;AACpG,OAAO,EAAgC,KAAK,wBAAwB,EAAE,MAAM,wFAAwF,CAAC;AAIrK,MAAM,MAAM,2BAA2B,GAAG,MAAM,CAAC,wBAAwB,EAAE,MAAM,CAAC,CAAC;AACnF,MAAM,MAAM,2BAA2B,GAAG,OAAO,CAAC,MAAM,CAAC,wBAAwB,EAAE,MAAM,CAAC,CAAC,GAAG;IAC5F,MAAM,CAAC,EAAE,MAAM,CAAC;CACjB,CAAC;AAEF,MAAM,MAAM,0BAA0B,CAAC,OAAO,GAAG,OAAO,IAAI;IAC1D,UAAU,EAAE,gBAAgB,CAAC,OAAO,CAAC,CAAC;IACtC,aAAa,CAAC,EAAE,MAAM,CAAC;IACvB,SAAS,CAAC,EAAE,MAAM,CAAC;CACpB,CAAC;AAEF,MAAM,MAAM,0BAA0B,GAAG;IACvC,WAAW,EAAE,OAAO,CAAC;IACrB,UAAU,EAAE,OAAO,CAAC;IACpB,OAAO,EAAE,OAAO,CAAC;IACjB,YAAY,CAAC,EAAE,MAAM,CAAC;IACtB,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,MAAM,EAAE,2BAA2B,CAAC;IACpC,MAAM,EAAE,2BAA2B,CAAC;IACpC,gBAAgB,EAAE,OAAO,CAAC;IAC1B,YAAY,EAAE,OAAO,CAAC;IACtB,YAAY,EAAE,OAAO,CAAC;IACtB,iBAAiB,EAAE,MAAM,CAAC;IAC1B,iBAAiB,EAAE,CAAC,OAAO,EAAE,wBAAwB,EAAE,KAAK,EAAE,MAAM,KAAK,IAAI,CAAC;IAC9E,eAAe,EAAE,MAAM,IAAI,CAAC;IAC5B,kBAAkB,EAAE,CAAC,KAAK,EAAE,KAAK,CAAC,SAAS,CAAC,eAAe,CAAC,KAAK,IAAI,CAAC;IACtE,YAAY,EAAE,MAAM,IAAI,CAAC;IACzB,eAAe,EAAE,MAAM,IAAI,CAAC;CAC7B,CAAC;AAQF,eAAO,MAAM,sBAAsB,GAAI,OAAO,EAAG,2CAI9C,0BAA0B,CAAC,OAAO,CAAC,KAAG,0BAqPxC,CAAC"}
|
|
@@ -0,0 +1,222 @@
|
|
|
1
|
+
// file_description: encapsulate email verification state, validation, and data interactions
|
|
2
|
+
// section: imports
|
|
3
|
+
import { useCallback, useEffect, useMemo, useState } from "react";
|
|
4
|
+
import { useRouter, useSearchParams } from "next/navigation";
|
|
5
|
+
import { toast } from "sonner";
|
|
6
|
+
import { EMAIL_VERIFICATION_FIELD_IDS } from "hazo_auth/components/layouts/email_verification/config/email_verification_field_config";
|
|
7
|
+
import { validateEmail } from "hazo_auth/components/layouts/shared/utils/validation";
|
|
8
|
+
// section: helpers
|
|
9
|
+
const buildInitialValues = (initialEmail) => ({
|
|
10
|
+
[EMAIL_VERIFICATION_FIELD_IDS.EMAIL]: initialEmail || "",
|
|
11
|
+
});
|
|
12
|
+
// section: hook
|
|
13
|
+
export const use_email_verification = ({ dataClient, redirectDelay = 5, loginPath = "/hazo_auth/login", }) => {
|
|
14
|
+
const router = useRouter();
|
|
15
|
+
const searchParams = useSearchParams();
|
|
16
|
+
const token = searchParams.get("token");
|
|
17
|
+
const emailParam = searchParams.get("email");
|
|
18
|
+
const messageParam = searchParams.get("message");
|
|
19
|
+
const [isVerifying, setIsVerifying] = useState(false);
|
|
20
|
+
const [isVerified, setIsVerified] = useState(false);
|
|
21
|
+
const [isError, setIsError] = useState(false);
|
|
22
|
+
const [errorMessage, setErrorMessage] = useState(messageParam || undefined);
|
|
23
|
+
const [email, setEmail] = useState(emailParam || undefined);
|
|
24
|
+
const [values, setValues] = useState(buildInitialValues(emailParam || undefined));
|
|
25
|
+
const [errors, setErrors] = useState({});
|
|
26
|
+
const [emailTouched, setEmailTouched] = useState(false);
|
|
27
|
+
const [isSubmitting, setIsSubmitting] = useState(false);
|
|
28
|
+
const [redirectCountdown, setRedirectCountdown] = useState(redirectDelay);
|
|
29
|
+
// Verify token on mount if token exists, or show error if message is provided
|
|
30
|
+
useEffect(() => {
|
|
31
|
+
// If message is provided (from login redirect), show error state immediately
|
|
32
|
+
if (messageParam && !token) {
|
|
33
|
+
setIsError(true);
|
|
34
|
+
setErrorMessage(messageParam);
|
|
35
|
+
if (emailParam) {
|
|
36
|
+
setEmail(emailParam);
|
|
37
|
+
setValues(buildInitialValues(emailParam));
|
|
38
|
+
}
|
|
39
|
+
return;
|
|
40
|
+
}
|
|
41
|
+
if (!token) {
|
|
42
|
+
setIsError(true);
|
|
43
|
+
setErrorMessage("No verification token provided");
|
|
44
|
+
return;
|
|
45
|
+
}
|
|
46
|
+
const verifyToken = async () => {
|
|
47
|
+
setIsVerifying(true);
|
|
48
|
+
setIsError(false);
|
|
49
|
+
setErrorMessage(undefined);
|
|
50
|
+
try {
|
|
51
|
+
const response = await fetch(`/api/hazo_auth/verify_email?token=${encodeURIComponent(token)}`, {
|
|
52
|
+
method: "GET",
|
|
53
|
+
});
|
|
54
|
+
const data = await response.json();
|
|
55
|
+
if (!response.ok) {
|
|
56
|
+
throw new Error(data.error || "Email verification failed");
|
|
57
|
+
}
|
|
58
|
+
// Success
|
|
59
|
+
setIsVerified(true);
|
|
60
|
+
setEmail(data.email);
|
|
61
|
+
setValues(buildInitialValues(data.email));
|
|
62
|
+
// Start countdown for redirect
|
|
63
|
+
let countdown = redirectDelay;
|
|
64
|
+
setRedirectCountdown(countdown);
|
|
65
|
+
const countdownInterval = setInterval(() => {
|
|
66
|
+
countdown -= 1;
|
|
67
|
+
setRedirectCountdown(countdown);
|
|
68
|
+
if (countdown <= 0) {
|
|
69
|
+
clearInterval(countdownInterval);
|
|
70
|
+
router.push(loginPath);
|
|
71
|
+
}
|
|
72
|
+
}, 1000);
|
|
73
|
+
// Cleanup interval on unmount
|
|
74
|
+
return () => clearInterval(countdownInterval);
|
|
75
|
+
}
|
|
76
|
+
catch (error) {
|
|
77
|
+
const errorMessage = error instanceof Error ? error.message : "Email verification failed. Please try again.";
|
|
78
|
+
setIsError(true);
|
|
79
|
+
setErrorMessage(errorMessage);
|
|
80
|
+
// Try to extract email from error response if available
|
|
81
|
+
try {
|
|
82
|
+
const response = await fetch(`/api/hazo_auth/verify_email?token=${encodeURIComponent(token)}`, {
|
|
83
|
+
method: "GET",
|
|
84
|
+
});
|
|
85
|
+
const data = await response.json();
|
|
86
|
+
if (data.email) {
|
|
87
|
+
setEmail(data.email);
|
|
88
|
+
setValues(buildInitialValues(data.email));
|
|
89
|
+
}
|
|
90
|
+
}
|
|
91
|
+
catch (_a) {
|
|
92
|
+
// Ignore errors when trying to get email
|
|
93
|
+
}
|
|
94
|
+
}
|
|
95
|
+
finally {
|
|
96
|
+
setIsVerifying(false);
|
|
97
|
+
}
|
|
98
|
+
};
|
|
99
|
+
void verifyToken();
|
|
100
|
+
}, [token, redirectDelay, loginPath, router]);
|
|
101
|
+
const isSubmitDisabled = useMemo(() => {
|
|
102
|
+
if (isSubmitting) {
|
|
103
|
+
return true;
|
|
104
|
+
}
|
|
105
|
+
// Only disable if there are active errors
|
|
106
|
+
const hasErrors = !!errors[EMAIL_VERIFICATION_FIELD_IDS.EMAIL];
|
|
107
|
+
return hasErrors;
|
|
108
|
+
}, [errors, isSubmitting]);
|
|
109
|
+
const handleFieldChange = useCallback((fieldId, value) => {
|
|
110
|
+
setValues((previousValues) => {
|
|
111
|
+
const nextValues = Object.assign(Object.assign({}, previousValues), { [fieldId]: value });
|
|
112
|
+
setErrors((previousErrors) => {
|
|
113
|
+
const updatedErrors = Object.assign({}, previousErrors);
|
|
114
|
+
// Only validate email on change if it has been touched (blurred)
|
|
115
|
+
if (fieldId === EMAIL_VERIFICATION_FIELD_IDS.EMAIL && emailTouched) {
|
|
116
|
+
const emailError = validateEmail(value);
|
|
117
|
+
if (emailError) {
|
|
118
|
+
updatedErrors[EMAIL_VERIFICATION_FIELD_IDS.EMAIL] = emailError;
|
|
119
|
+
}
|
|
120
|
+
else {
|
|
121
|
+
delete updatedErrors[EMAIL_VERIFICATION_FIELD_IDS.EMAIL];
|
|
122
|
+
}
|
|
123
|
+
}
|
|
124
|
+
return updatedErrors;
|
|
125
|
+
});
|
|
126
|
+
return nextValues;
|
|
127
|
+
});
|
|
128
|
+
}, [emailTouched]);
|
|
129
|
+
const handleEmailBlur = useCallback(() => {
|
|
130
|
+
setEmailTouched(true);
|
|
131
|
+
// Validate email on blur
|
|
132
|
+
setErrors((previousErrors) => {
|
|
133
|
+
const updatedErrors = Object.assign({}, previousErrors);
|
|
134
|
+
const emailValue = values[EMAIL_VERIFICATION_FIELD_IDS.EMAIL];
|
|
135
|
+
const emailError = validateEmail(emailValue);
|
|
136
|
+
if (emailError) {
|
|
137
|
+
updatedErrors[EMAIL_VERIFICATION_FIELD_IDS.EMAIL] = emailError;
|
|
138
|
+
}
|
|
139
|
+
else {
|
|
140
|
+
delete updatedErrors[EMAIL_VERIFICATION_FIELD_IDS.EMAIL];
|
|
141
|
+
}
|
|
142
|
+
return updatedErrors;
|
|
143
|
+
});
|
|
144
|
+
}, [values]);
|
|
145
|
+
const handleResendSubmit = useCallback(async (event) => {
|
|
146
|
+
event.preventDefault();
|
|
147
|
+
// Final validation
|
|
148
|
+
const emailError = validateEmail(values[EMAIL_VERIFICATION_FIELD_IDS.EMAIL]);
|
|
149
|
+
if (emailError) {
|
|
150
|
+
setErrors({
|
|
151
|
+
[EMAIL_VERIFICATION_FIELD_IDS.EMAIL]: emailError,
|
|
152
|
+
});
|
|
153
|
+
return;
|
|
154
|
+
}
|
|
155
|
+
setIsSubmitting(true);
|
|
156
|
+
setErrors({});
|
|
157
|
+
try {
|
|
158
|
+
const response = await fetch("/api/hazo_auth/resend_verification", {
|
|
159
|
+
method: "POST",
|
|
160
|
+
headers: {
|
|
161
|
+
"Content-Type": "application/json",
|
|
162
|
+
},
|
|
163
|
+
body: JSON.stringify({
|
|
164
|
+
email: values[EMAIL_VERIFICATION_FIELD_IDS.EMAIL],
|
|
165
|
+
}),
|
|
166
|
+
});
|
|
167
|
+
let data;
|
|
168
|
+
try {
|
|
169
|
+
data = await response.json();
|
|
170
|
+
}
|
|
171
|
+
catch (jsonError) {
|
|
172
|
+
// If JSON parsing fails, the response is likely HTML (e.g., error page)
|
|
173
|
+
throw new Error("Server returned an invalid response. Please try again later.");
|
|
174
|
+
}
|
|
175
|
+
if (!response.ok) {
|
|
176
|
+
throw new Error(data.error || "Failed to resend verification email");
|
|
177
|
+
}
|
|
178
|
+
// Show success notification
|
|
179
|
+
toast.success("Verification email sent", {
|
|
180
|
+
description: data.message || "If an account with that email exists and is not verified, a verification link has been sent.",
|
|
181
|
+
});
|
|
182
|
+
}
|
|
183
|
+
catch (error) {
|
|
184
|
+
const errorMessage = error instanceof Error ? error.message : "Failed to resend verification email. Please try again.";
|
|
185
|
+
// Show error notification
|
|
186
|
+
toast.error("Failed to resend verification email", {
|
|
187
|
+
description: errorMessage,
|
|
188
|
+
});
|
|
189
|
+
// Set error state
|
|
190
|
+
setErrors({
|
|
191
|
+
submit: errorMessage,
|
|
192
|
+
});
|
|
193
|
+
}
|
|
194
|
+
finally {
|
|
195
|
+
setIsSubmitting(false);
|
|
196
|
+
}
|
|
197
|
+
}, [values, dataClient]);
|
|
198
|
+
const handleCancel = useCallback(() => {
|
|
199
|
+
router.push(loginPath);
|
|
200
|
+
}, [router, loginPath]);
|
|
201
|
+
const handleGoToLogin = useCallback(() => {
|
|
202
|
+
router.push(loginPath);
|
|
203
|
+
}, [router, loginPath]);
|
|
204
|
+
return {
|
|
205
|
+
isVerifying,
|
|
206
|
+
isVerified,
|
|
207
|
+
isError,
|
|
208
|
+
errorMessage,
|
|
209
|
+
email,
|
|
210
|
+
values,
|
|
211
|
+
errors,
|
|
212
|
+
isSubmitDisabled,
|
|
213
|
+
isSubmitting,
|
|
214
|
+
emailTouched,
|
|
215
|
+
redirectCountdown,
|
|
216
|
+
handleFieldChange,
|
|
217
|
+
handleEmailBlur,
|
|
218
|
+
handleResendSubmit,
|
|
219
|
+
handleCancel,
|
|
220
|
+
handleGoToLogin,
|
|
221
|
+
};
|
|
222
|
+
};
|
|
@@ -0,0 +1,23 @@
|
|
|
1
|
+
import { type ButtonPaletteOverrides, type LayoutFieldMapOverrides, type LayoutLabelOverrides } from "hazo_auth/components/layouts/shared/config/layout_customization";
|
|
2
|
+
import { type EmailVerificationSuccessLabels, type EmailVerificationErrorLabels } from "hazo_auth/components/layouts/email_verification/config/email_verification_field_config";
|
|
3
|
+
import { type LayoutDataClient } from "hazo_auth/components/layouts/shared/data/layout_data_client";
|
|
4
|
+
export type EmailVerificationLayoutProps<TClient = unknown> = {
|
|
5
|
+
image_src: string;
|
|
6
|
+
image_alt: string;
|
|
7
|
+
image_background_color?: string;
|
|
8
|
+
field_overrides?: LayoutFieldMapOverrides;
|
|
9
|
+
labels?: LayoutLabelOverrides;
|
|
10
|
+
button_colors?: ButtonPaletteOverrides;
|
|
11
|
+
success_labels?: Partial<EmailVerificationSuccessLabels>;
|
|
12
|
+
error_labels?: Partial<EmailVerificationErrorLabels>;
|
|
13
|
+
redirect_delay?: number;
|
|
14
|
+
login_path?: string;
|
|
15
|
+
already_logged_in_message?: string;
|
|
16
|
+
showLogoutButton?: boolean;
|
|
17
|
+
showReturnHomeButton?: boolean;
|
|
18
|
+
returnHomeButtonLabel?: string;
|
|
19
|
+
returnHomePath?: string;
|
|
20
|
+
data_client: LayoutDataClient<TClient>;
|
|
21
|
+
};
|
|
22
|
+
export default function email_verification_layout<TClient>({ image_src, image_alt, image_background_color, field_overrides, labels, button_colors, success_labels, error_labels, redirect_delay, login_path, data_client, already_logged_in_message, showLogoutButton, showReturnHomeButton, returnHomeButtonLabel, returnHomePath, }: EmailVerificationLayoutProps<TClient>): import("react/jsx-runtime").JSX.Element;
|
|
23
|
+
//# sourceMappingURL=index.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../../src/components/layouts/email_verification/index.tsx"],"names":[],"mappings":"AAWA,OAAO,EACL,KAAK,sBAAsB,EAC3B,KAAK,uBAAuB,EAC5B,KAAK,oBAAoB,EAC1B,MAAM,iEAAiE,CAAC;AACzE,OAAO,EAOL,KAAK,8BAA8B,EACnC,KAAK,4BAA4B,EAClC,MAAM,wFAAwF,CAAC;AAKhG,OAAO,EAAE,KAAK,gBAAgB,EAAE,MAAM,6DAA6D,CAAC;AAKpG,MAAM,MAAM,4BAA4B,CAAC,OAAO,GAAG,OAAO,IAAI;IAC5D,SAAS,EAAE,MAAM,CAAC;IAClB,SAAS,EAAE,MAAM,CAAC;IAClB,sBAAsB,CAAC,EAAE,MAAM,CAAC;IAChC,eAAe,CAAC,EAAE,uBAAuB,CAAC;IAC1C,MAAM,CAAC,EAAE,oBAAoB,CAAC;IAC9B,aAAa,CAAC,EAAE,sBAAsB,CAAC;IACvC,cAAc,CAAC,EAAE,OAAO,CAAC,8BAA8B,CAAC,CAAC;IACzD,YAAY,CAAC,EAAE,OAAO,CAAC,4BAA4B,CAAC,CAAC;IACrD,cAAc,CAAC,EAAE,MAAM,CAAC;IACxB,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,yBAAyB,CAAC,EAAE,MAAM,CAAC;IACnC,gBAAgB,CAAC,EAAE,OAAO,CAAC;IAC3B,oBAAoB,CAAC,EAAE,OAAO,CAAC;IAC/B,qBAAqB,CAAC,EAAE,MAAM,CAAC;IAC/B,cAAc,CAAC,EAAE,MAAM,CAAC;IACxB,WAAW,EAAE,gBAAgB,CAAC,OAAO,CAAC,CAAC;CACxC,CAAC;AASF,MAAM,CAAC,OAAO,UAAU,yBAAyB,CAAC,OAAO,EAAE,EACzD,SAAS,EACT,SAAS,EACT,sBAAkC,EAClC,eAAe,EACf,MAAM,EACN,aAAa,EACb,cAAc,EACd,YAAY,EACZ,cAAkB,EAClB,UAA+B,EAC/B,WAAW,EACX,yBAAyB,EACzB,gBAAuB,EACvB,oBAA4B,EAC5B,qBAAqC,EACrC,cAAoB,GACrB,EAAE,4BAA4B,CAAC,OAAO,CAAC,2CAyNvC"}
|
|
@@ -0,0 +1,61 @@
|
|
|
1
|
+
// file_description: email verification layout component built atop shared layout utilities
|
|
2
|
+
// section: client_directive
|
|
3
|
+
"use client";
|
|
4
|
+
import { jsx as _jsx, jsxs as _jsxs, Fragment as _Fragment } from "react/jsx-runtime";
|
|
5
|
+
// section: imports
|
|
6
|
+
import { Input } from "hazo_auth/components/ui/input";
|
|
7
|
+
import { Button } from "hazo_auth/components/ui/button";
|
|
8
|
+
import { FormFieldWrapper } from "hazo_auth/components/layouts/shared/components/form_field_wrapper";
|
|
9
|
+
import { FormHeader } from "hazo_auth/components/layouts/shared/components/form_header";
|
|
10
|
+
import { FormActionButtons } from "hazo_auth/components/layouts/shared/components/form_action_buttons";
|
|
11
|
+
import { TwoColumnAuthLayout } from "hazo_auth/components/layouts/shared/components/two_column_auth_layout";
|
|
12
|
+
import { EMAIL_VERIFICATION_FIELD_IDS, createEmailVerificationFieldDefinitions, resolveEmailVerificationButtonPalette, resolveEmailVerificationLabels, EMAIL_VERIFICATION_SUCCESS_LABEL_DEFAULTS, EMAIL_VERIFICATION_ERROR_LABEL_DEFAULTS, } from "hazo_auth/components/layouts/email_verification/config/email_verification_field_config";
|
|
13
|
+
import { use_email_verification, } from "hazo_auth/components/layouts/email_verification/hooks/use_email_verification";
|
|
14
|
+
import { CheckCircle, XCircle, Loader2 } from "lucide-react";
|
|
15
|
+
import { AlreadyLoggedInGuard } from "hazo_auth/components/layouts/shared/components/already_logged_in_guard";
|
|
16
|
+
const ORDERED_FIELDS = [
|
|
17
|
+
EMAIL_VERIFICATION_FIELD_IDS.EMAIL,
|
|
18
|
+
];
|
|
19
|
+
// section: component
|
|
20
|
+
export default function email_verification_layout({ image_src, image_alt, image_background_color = "#f1f5f9", field_overrides, labels, button_colors, success_labels, error_labels, redirect_delay = 5, login_path = "/hazo_auth/login", data_client, already_logged_in_message, showLogoutButton = true, showReturnHomeButton = false, returnHomeButtonLabel = "Return home", returnHomePath = "/", }) {
|
|
21
|
+
const fieldDefinitions = createEmailVerificationFieldDefinitions(field_overrides);
|
|
22
|
+
const resolvedLabels = resolveEmailVerificationLabels(labels);
|
|
23
|
+
const resolvedButtonPalette = resolveEmailVerificationButtonPalette(button_colors);
|
|
24
|
+
const resolvedSuccessLabels = Object.assign(Object.assign({}, EMAIL_VERIFICATION_SUCCESS_LABEL_DEFAULTS), (success_labels !== null && success_labels !== void 0 ? success_labels : {}));
|
|
25
|
+
const resolvedErrorLabels = Object.assign(Object.assign({}, EMAIL_VERIFICATION_ERROR_LABEL_DEFAULTS), (error_labels !== null && error_labels !== void 0 ? error_labels : {}));
|
|
26
|
+
const verification = use_email_verification({
|
|
27
|
+
dataClient: data_client,
|
|
28
|
+
redirectDelay: redirect_delay,
|
|
29
|
+
loginPath: login_path,
|
|
30
|
+
});
|
|
31
|
+
const renderFields = (formState) => {
|
|
32
|
+
return ORDERED_FIELDS.map((fieldId) => {
|
|
33
|
+
const fieldDefinition = fieldDefinitions[fieldId];
|
|
34
|
+
const fieldValue = formState.values[fieldId];
|
|
35
|
+
const fieldError = formState.errors[fieldId];
|
|
36
|
+
const inputElement = (_jsx(Input, { id: fieldDefinition.id, type: fieldDefinition.type, value: fieldValue, onChange: (event) => formState.handleFieldChange(fieldId, event.target.value), onBlur: fieldId === EMAIL_VERIFICATION_FIELD_IDS.EMAIL
|
|
37
|
+
? formState.handleEmailBlur
|
|
38
|
+
: undefined, autoComplete: fieldDefinition.autoComplete, placeholder: fieldDefinition.placeholder, "aria-label": fieldDefinition.ariaLabel, className: "cls_email_verification_layout_field_input" }));
|
|
39
|
+
// Only show email error if field has been touched (blurred)
|
|
40
|
+
const shouldShowError = fieldId === EMAIL_VERIFICATION_FIELD_IDS.EMAIL
|
|
41
|
+
? formState.emailTouched && fieldError
|
|
42
|
+
? fieldError
|
|
43
|
+
: undefined
|
|
44
|
+
: fieldError;
|
|
45
|
+
return (_jsx(FormFieldWrapper, { fieldId: fieldDefinition.id, label: fieldDefinition.label, input: inputElement, errorMessage: shouldShowError }, fieldId));
|
|
46
|
+
});
|
|
47
|
+
};
|
|
48
|
+
// Verifying state
|
|
49
|
+
if (verification.isVerifying) {
|
|
50
|
+
return (_jsx(AlreadyLoggedInGuard, { image_src: image_src, image_alt: image_alt, image_background_color: image_background_color, message: already_logged_in_message, showLogoutButton: showLogoutButton, showReturnHomeButton: showReturnHomeButton, returnHomeButtonLabel: returnHomeButtonLabel, returnHomePath: returnHomePath, requireEmailVerified: false, children: _jsx(TwoColumnAuthLayout, { imageSrc: image_src, imageAlt: image_alt, imageBackgroundColor: image_background_color, formContent: _jsxs("div", { className: "cls_email_verification_verifying flex flex-col items-center justify-center gap-4 py-8", children: [_jsx(Loader2, { className: "h-12 w-12 animate-spin text-slate-600", "aria-hidden": "true" }), _jsxs("div", { className: "cls_email_verification_verifying_text text-center", children: [_jsx("h1", { className: "cls_email_verification_verifying_heading text-2xl font-semibold text-slate-900", children: resolvedLabels.heading }), _jsx("p", { className: "cls_email_verification_verifying_subheading mt-2 text-sm text-slate-600", children: resolvedLabels.subHeading })] })] }) }) }));
|
|
51
|
+
}
|
|
52
|
+
// Success state
|
|
53
|
+
if (verification.isVerified) {
|
|
54
|
+
return (_jsx(AlreadyLoggedInGuard, { image_src: image_src, image_alt: image_alt, image_background_color: image_background_color, message: already_logged_in_message, showLogoutButton: showLogoutButton, showReturnHomeButton: showReturnHomeButton, returnHomeButtonLabel: returnHomeButtonLabel, returnHomePath: returnHomePath, requireEmailVerified: false, children: _jsx(TwoColumnAuthLayout, { imageSrc: image_src, imageAlt: image_alt, imageBackgroundColor: image_background_color, formContent: _jsxs("div", { className: "cls_email_verification_success flex flex-col gap-6", children: [_jsxs("div", { className: "cls_email_verification_success_content flex flex-col items-center gap-4 text-center", children: [_jsx(CheckCircle, { className: "h-16 w-16 text-green-600", "aria-hidden": "true" }), _jsxs("div", { className: "cls_email_verification_success_text", children: [_jsx("h1", { className: "cls_email_verification_success_heading text-2xl font-semibold text-slate-900", children: resolvedSuccessLabels.heading }), _jsx("p", { className: "cls_email_verification_success_message mt-2 text-sm text-slate-600", children: resolvedSuccessLabels.message })] }), _jsxs("div", { className: "cls_email_verification_redirect_info mt-2 text-sm text-slate-500", children: [resolvedSuccessLabels.redirectMessage, " ", verification.redirectCountdown, " seconds..."] })] }), _jsx("div", { className: "cls_email_verification_success_actions flex justify-center", children: _jsx(Button, { type: "button", onClick: verification.handleGoToLogin, className: "cls_email_verification_go_to_login_button", style: {
|
|
55
|
+
backgroundColor: resolvedButtonPalette.submitBackground,
|
|
56
|
+
color: resolvedButtonPalette.submitText,
|
|
57
|
+
}, children: resolvedSuccessLabels.goToLoginButton }) })] }) }) }));
|
|
58
|
+
}
|
|
59
|
+
// Error state with resend form
|
|
60
|
+
return (_jsx(AlreadyLoggedInGuard, { image_src: image_src, image_alt: image_alt, image_background_color: image_background_color, message: already_logged_in_message, showLogoutButton: showLogoutButton, showReturnHomeButton: showReturnHomeButton, returnHomeButtonLabel: returnHomeButtonLabel, returnHomePath: returnHomePath, requireEmailVerified: false, children: _jsx(TwoColumnAuthLayout, { imageSrc: image_src, imageAlt: image_alt, imageBackgroundColor: image_background_color, formContent: _jsxs(_Fragment, { children: [_jsxs("div", { className: "cls_email_verification_error_header flex flex-col items-center gap-4 text-center", children: [_jsx(XCircle, { className: "h-12 w-12 text-red-600", "aria-hidden": "true" }), _jsxs("div", { className: "cls_email_verification_error_text", children: [_jsx("h1", { className: "cls_email_verification_error_heading text-2xl font-semibold text-slate-900", children: resolvedErrorLabels.heading }), _jsx("p", { className: "cls_email_verification_error_message mt-2 text-sm text-slate-600", children: verification.errorMessage || resolvedErrorLabels.message })] })] }), _jsxs("div", { className: "cls_email_verification_resend_form", children: [_jsx(FormHeader, { heading: resolvedErrorLabels.resendFormHeading, subHeading: "Enter your email address to receive a new verification link." }), _jsxs("form", { className: "cls_email_verification_layout_form_fields flex flex-col gap-5", onSubmit: verification.handleResendSubmit, "aria-label": "Resend verification email form", children: [renderFields(verification), _jsx(FormActionButtons, { submitLabel: resolvedLabels.submitButton, cancelLabel: resolvedLabels.cancelButton, buttonPalette: resolvedButtonPalette, isSubmitDisabled: verification.isSubmitDisabled, onCancel: verification.handleCancel, submitAriaLabel: "Submit resend verification email form", cancelAriaLabel: "Cancel resend verification email form" }), verification.isSubmitting && (_jsx("div", { className: "cls_email_verification_submitting_indicator text-sm text-slate-600 text-center", children: "Sending verification email..." }))] })] })] }) }) }));
|
|
61
|
+
}
|
|
@@ -0,0 +1,10 @@
|
|
|
1
|
+
import type { LayoutFieldMap, LayoutFieldMapOverrides } from "hazo_auth/components/layouts/shared/config/layout_customization";
|
|
2
|
+
import { type ButtonPaletteDefaults, type ButtonPaletteOverrides, type LayoutLabelDefaults, type LayoutLabelOverrides } from "hazo_auth/components/layouts/shared/config/layout_customization";
|
|
3
|
+
export declare const FORGOT_PASSWORD_FIELD_IDS: {
|
|
4
|
+
readonly EMAIL: "email_address";
|
|
5
|
+
};
|
|
6
|
+
export type ForgotPasswordFieldId = (typeof FORGOT_PASSWORD_FIELD_IDS)[keyof typeof FORGOT_PASSWORD_FIELD_IDS];
|
|
7
|
+
export declare const createForgotPasswordFieldDefinitions: (overrides?: LayoutFieldMapOverrides) => LayoutFieldMap;
|
|
8
|
+
export declare const resolveForgotPasswordLabels: (overrides?: LayoutLabelOverrides) => LayoutLabelDefaults;
|
|
9
|
+
export declare const resolveForgotPasswordButtonPalette: (overrides?: ButtonPaletteOverrides) => ButtonPaletteDefaults;
|
|
10
|
+
//# sourceMappingURL=forgot_password_field_config.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"forgot_password_field_config.d.ts","sourceRoot":"","sources":["../../../../../src/components/layouts/forgot_password/config/forgot_password_field_config.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAE,cAAc,EAAE,uBAAuB,EAAE,MAAM,iEAAiE,CAAC;AAC/H,OAAO,EAIL,KAAK,qBAAqB,EAC1B,KAAK,sBAAsB,EAC3B,KAAK,mBAAmB,EACxB,KAAK,oBAAoB,EAC1B,MAAM,iEAAiE,CAAC;AAGzE,eAAO,MAAM,yBAAyB;;CAE5B,CAAC;AAEX,MAAM,MAAM,qBAAqB,GAAG,CAAC,OAAO,yBAAyB,CAAC,CAAC,MAAM,OAAO,yBAAyB,CAAC,CAAC;AAc/G,eAAO,MAAM,oCAAoC,GAC/C,YAAY,uBAAuB,mBACqC,CAAC;AAU3E,eAAO,MAAM,2BAA2B,GAAI,YAAY,oBAAoB,wBAClB,CAAC;AAU3D,eAAO,MAAM,kCAAkC,GAAI,YAAY,sBAAsB,0BACX,CAAC"}
|
|
@@ -0,0 +1,33 @@
|
|
|
1
|
+
import { resolveButtonPalette, resolveFieldDefinitions, resolveLabels, } from "hazo_auth/components/layouts/shared/config/layout_customization";
|
|
2
|
+
// section: field_identifiers
|
|
3
|
+
export const FORGOT_PASSWORD_FIELD_IDS = {
|
|
4
|
+
EMAIL: "email_address",
|
|
5
|
+
};
|
|
6
|
+
// section: field_definitions
|
|
7
|
+
const FORGOT_PASSWORD_FIELD_DEFINITIONS = {
|
|
8
|
+
[FORGOT_PASSWORD_FIELD_IDS.EMAIL]: {
|
|
9
|
+
id: FORGOT_PASSWORD_FIELD_IDS.EMAIL,
|
|
10
|
+
label: "Email address",
|
|
11
|
+
type: "email",
|
|
12
|
+
autoComplete: "email",
|
|
13
|
+
placeholder: "Enter your email address",
|
|
14
|
+
ariaLabel: "Email address input field",
|
|
15
|
+
},
|
|
16
|
+
};
|
|
17
|
+
export const createForgotPasswordFieldDefinitions = (overrides) => resolveFieldDefinitions(FORGOT_PASSWORD_FIELD_DEFINITIONS, overrides);
|
|
18
|
+
// section: label_defaults
|
|
19
|
+
const FORGOT_PASSWORD_LABEL_DEFAULTS = {
|
|
20
|
+
heading: "Forgot your password?",
|
|
21
|
+
subHeading: "Enter your email address and we'll send you a link to reset your password.",
|
|
22
|
+
submitButton: "Send reset link",
|
|
23
|
+
cancelButton: "Cancel",
|
|
24
|
+
};
|
|
25
|
+
export const resolveForgotPasswordLabels = (overrides) => resolveLabels(FORGOT_PASSWORD_LABEL_DEFAULTS, overrides);
|
|
26
|
+
// section: button_palette_defaults
|
|
27
|
+
const FORGOT_PASSWORD_BUTTON_PALETTE_DEFAULTS = {
|
|
28
|
+
submitBackground: "#0f172a",
|
|
29
|
+
submitText: "#ffffff",
|
|
30
|
+
cancelBorder: "#cbd5f5",
|
|
31
|
+
cancelText: "#0f172a",
|
|
32
|
+
};
|
|
33
|
+
export const resolveForgotPasswordButtonPalette = (overrides) => resolveButtonPalette(FORGOT_PASSWORD_BUTTON_PALETTE_DEFAULTS, overrides);
|
|
@@ -0,0 +1,22 @@
|
|
|
1
|
+
import type { LayoutDataClient } from "hazo_auth/components/layouts/shared/data/layout_data_client";
|
|
2
|
+
import { type ForgotPasswordFieldId } from "hazo_auth/components/layouts/forgot_password/config/forgot_password_field_config";
|
|
3
|
+
export type ForgotPasswordFormValues = Record<ForgotPasswordFieldId, string>;
|
|
4
|
+
export type ForgotPasswordFormErrors = Partial<Record<ForgotPasswordFieldId, string>> & {
|
|
5
|
+
submit?: string;
|
|
6
|
+
};
|
|
7
|
+
export type UseForgotPasswordFormParams<TClient = unknown> = {
|
|
8
|
+
dataClient: LayoutDataClient<TClient>;
|
|
9
|
+
};
|
|
10
|
+
export type UseForgotPasswordFormResult = {
|
|
11
|
+
values: ForgotPasswordFormValues;
|
|
12
|
+
errors: ForgotPasswordFormErrors;
|
|
13
|
+
isSubmitDisabled: boolean;
|
|
14
|
+
isSubmitting: boolean;
|
|
15
|
+
emailTouched: boolean;
|
|
16
|
+
handleFieldChange: (fieldId: ForgotPasswordFieldId, value: string) => void;
|
|
17
|
+
handleEmailBlur: () => void;
|
|
18
|
+
handleSubmit: (event: React.FormEvent<HTMLFormElement>) => void;
|
|
19
|
+
handleCancel: () => void;
|
|
20
|
+
};
|
|
21
|
+
export declare const use_forgot_password_form: <TClient>({ dataClient, }: UseForgotPasswordFormParams<TClient>) => UseForgotPasswordFormResult;
|
|
22
|
+
//# sourceMappingURL=use_forgot_password_form.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"use_forgot_password_form.d.ts","sourceRoot":"","sources":["../../../../../src/components/layouts/forgot_password/hooks/use_forgot_password_form.ts"],"names":[],"mappings":"AAIA,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,6DAA6D,CAAC;AACpG,OAAO,EAA6B,KAAK,qBAAqB,EAAE,MAAM,kFAAkF,CAAC;AAIzJ,MAAM,MAAM,wBAAwB,GAAG,MAAM,CAAC,qBAAqB,EAAE,MAAM,CAAC,CAAC;AAC7E,MAAM,MAAM,wBAAwB,GAAG,OAAO,CAAC,MAAM,CAAC,qBAAqB,EAAE,MAAM,CAAC,CAAC,GAAG;IACtF,MAAM,CAAC,EAAE,MAAM,CAAC;CACjB,CAAC;AAEF,MAAM,MAAM,2BAA2B,CAAC,OAAO,GAAG,OAAO,IAAI;IAC3D,UAAU,EAAE,gBAAgB,CAAC,OAAO,CAAC,CAAC;CACvC,CAAC;AAEF,MAAM,MAAM,2BAA2B,GAAG;IACxC,MAAM,EAAE,wBAAwB,CAAC;IACjC,MAAM,EAAE,wBAAwB,CAAC;IACjC,gBAAgB,EAAE,OAAO,CAAC;IAC1B,YAAY,EAAE,OAAO,CAAC;IACtB,YAAY,EAAE,OAAO,CAAC;IACtB,iBAAiB,EAAE,CAAC,OAAO,EAAE,qBAAqB,EAAE,KAAK,EAAE,MAAM,KAAK,IAAI,CAAC;IAC3E,eAAe,EAAE,MAAM,IAAI,CAAC;IAC5B,YAAY,EAAE,CAAC,KAAK,EAAE,KAAK,CAAC,SAAS,CAAC,eAAe,CAAC,KAAK,IAAI,CAAC;IAChE,YAAY,EAAE,MAAM,IAAI,CAAC;CAC1B,CAAC;AAQF,eAAO,MAAM,wBAAwB,GAAI,OAAO,EAAG,iBAEhD,2BAA2B,CAAC,OAAO,CAAC,KAAG,2BA2IzC,CAAC"}
|