hazo_auth 4.6.0 → 4.6.2

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 (40) hide show
  1. package/cli-src/lib/config/default_config.ts +4 -4
  2. package/cli-src/lib/email_verification_config.server.ts +10 -7
  3. package/cli-src/lib/forgot_password_config.server.ts +10 -7
  4. package/cli-src/lib/login_config.server.ts +10 -7
  5. package/cli-src/lib/register_config.server.ts +10 -7
  6. package/cli-src/lib/reset_password_config.server.ts +10 -7
  7. package/dist/components/layouts/dev_lock/index.d.ts +1 -1
  8. package/dist/components/layouts/dev_lock/index.d.ts.map +1 -1
  9. package/dist/components/layouts/dev_lock/index.js +4 -2
  10. package/dist/components/layouts/shared/components/auth_navbar.d.ts +1 -1
  11. package/dist/components/layouts/shared/components/auth_navbar.d.ts.map +1 -1
  12. package/dist/components/layouts/shared/components/auth_navbar.js +4 -2
  13. package/dist/components/layouts/shared/components/form_action_buttons.js +3 -3
  14. package/dist/components/layouts/shared/components/password_field.d.ts.map +1 -1
  15. package/dist/components/layouts/shared/components/password_field.js +8 -1
  16. package/dist/lib/config/default_config.d.ts +8 -8
  17. package/dist/lib/config/default_config.d.ts.map +1 -1
  18. package/dist/lib/config/default_config.js +4 -4
  19. package/dist/lib/email_verification_config.server.d.ts +1 -2
  20. package/dist/lib/email_verification_config.server.d.ts.map +1 -1
  21. package/dist/lib/email_verification_config.server.js +7 -4
  22. package/dist/lib/forgot_password_config.server.d.ts +1 -2
  23. package/dist/lib/forgot_password_config.server.d.ts.map +1 -1
  24. package/dist/lib/forgot_password_config.server.js +7 -4
  25. package/dist/lib/login_config.server.d.ts +1 -2
  26. package/dist/lib/login_config.server.d.ts.map +1 -1
  27. package/dist/lib/login_config.server.js +7 -4
  28. package/dist/lib/register_config.server.d.ts +1 -2
  29. package/dist/lib/register_config.server.d.ts.map +1 -1
  30. package/dist/lib/register_config.server.js +7 -4
  31. package/dist/lib/reset_password_config.server.d.ts +1 -2
  32. package/dist/lib/reset_password_config.server.d.ts.map +1 -1
  33. package/dist/lib/reset_password_config.server.js +7 -4
  34. package/hazo_auth_config.example.ini +44 -1
  35. package/package.json +2 -1
  36. package/public/hazo_auth/images/forgot_password_default.jpg +0 -0
  37. package/public/hazo_auth/images/login_default.jpg +0 -0
  38. package/public/hazo_auth/images/register_default.jpg +0 -0
  39. package/public/hazo_auth/images/reset_password_default.jpg +0 -0
  40. package/public/hazo_auth/images/verify_email_default.jpg +0 -0
@@ -181,8 +181,8 @@ export const DEFAULT_MULTI_TENANCY = {
181
181
  export const DEFAULT_NAVBAR = {
182
182
  /** Enable navbar on auth pages */
183
183
  enable_navbar: true,
184
- /** Logo image path (default: /logo.png in public folder) */
185
- logo_path: "/logo.png",
184
+ /** Logo image path (empty = no logo shown, configure to show) */
185
+ logo_path: "",
186
186
  /** Logo width in pixels */
187
187
  logo_width: 32,
188
188
  /** Logo height in pixels */
@@ -219,8 +219,8 @@ export const DEFAULT_DEV_LOCK = {
219
219
  session_duration_days: 7,
220
220
  /** Background color (default: black) */
221
221
  background_color: "#000000",
222
- /** Logo image path (default: /logo.png in public folder) */
223
- logo_path: "/logo.png",
222
+ /** Logo image path (empty = no logo shown, configure to show) */
223
+ logo_path: "",
224
224
  /** Logo width in pixels */
225
225
  logo_width: 120,
226
226
  /** Logo height in pixels */
@@ -2,18 +2,20 @@
2
2
  // section: imports
3
3
  import { get_already_logged_in_config } from "./already_logged_in_config.server.js";
4
4
  import { get_config_value } from "./config/config_loader.server.js";
5
- import verifyEmailDefaultImage from "../assets/images/verify_email_default.jpg.js";
6
5
 
7
- // section: types
8
- import type { StaticImageData } from "next/image";
6
+ // Default image path - consuming apps should either:
7
+ // 1. Configure their own image_src in hazo_auth_config.ini
8
+ // 2. Copy the default images from node_modules/hazo_auth/public/hazo_auth/images/ to their public folder
9
+ const DEFAULT_VERIFY_EMAIL_IMAGE_PATH = "/hazo_auth/images/verify_email_default.jpg";
9
10
 
11
+ // section: types
10
12
  export type EmailVerificationConfig = {
11
13
  alreadyLoggedInMessage: string;
12
14
  showLogoutButton: boolean;
13
15
  showReturnHomeButton: boolean;
14
16
  returnHomeButtonLabel: string;
15
17
  returnHomePath: string;
16
- imageSrc: string | StaticImageData;
18
+ imageSrc: string;
17
19
  imageAlt: string;
18
20
  imageBackgroundColor: string;
19
21
  };
@@ -31,12 +33,13 @@ export function get_email_verification_config(): EmailVerificationConfig {
31
33
  const alreadyLoggedInConfig = get_already_logged_in_config();
32
34
 
33
35
  // Read image configuration
34
- // If not set in config, falls back to default image from assets
36
+ // If not set in config, falls back to default path-based image
37
+ // Consuming apps should copy images to public/hazo_auth/images/ or configure their own image_src
35
38
  const imageSrc = get_config_value(
36
39
  section,
37
40
  "image_src",
38
- "" // Empty string means not set in config
39
- ) || verifyEmailDefaultImage;
41
+ DEFAULT_VERIFY_EMAIL_IMAGE_PATH
42
+ );
40
43
 
41
44
  const imageAlt = get_config_value(
42
45
  section,
@@ -2,18 +2,20 @@
2
2
  // section: imports
3
3
  import { get_already_logged_in_config } from "./already_logged_in_config.server.js";
4
4
  import { get_config_value } from "./config/config_loader.server.js";
5
- import forgotPasswordDefaultImage from "../assets/images/forgot_password_default.jpg.js";
6
5
 
7
- // section: types
8
- import type { StaticImageData } from "next/image";
6
+ // Default image path - consuming apps should either:
7
+ // 1. Configure their own image_src in hazo_auth_config.ini
8
+ // 2. Copy the default images from node_modules/hazo_auth/public/hazo_auth/images/ to their public folder
9
+ const DEFAULT_FORGOT_PASSWORD_IMAGE_PATH = "/hazo_auth/images/forgot_password_default.jpg";
9
10
 
11
+ // section: types
10
12
  export type ForgotPasswordConfig = {
11
13
  alreadyLoggedInMessage: string;
12
14
  showLogoutButton: boolean;
13
15
  showReturnHomeButton: boolean;
14
16
  returnHomeButtonLabel: string;
15
17
  returnHomePath: string;
16
- imageSrc: string | StaticImageData;
18
+ imageSrc: string;
17
19
  imageAlt: string;
18
20
  imageBackgroundColor: string;
19
21
  };
@@ -31,12 +33,13 @@ export function get_forgot_password_config(): ForgotPasswordConfig {
31
33
  const alreadyLoggedInConfig = get_already_logged_in_config();
32
34
 
33
35
  // Read image configuration
34
- // If not set in config, falls back to default image from assets
36
+ // If not set in config, falls back to default path-based image
37
+ // Consuming apps should copy images to public/hazo_auth/images/ or configure their own image_src
35
38
  const imageSrc = get_config_value(
36
39
  section,
37
40
  "image_src",
38
- "" // Empty string means not set in config
39
- ) || forgotPasswordDefaultImage;
41
+ DEFAULT_FORGOT_PASSWORD_IMAGE_PATH
42
+ );
40
43
 
41
44
  const imageAlt = get_config_value(
42
45
  section,
@@ -3,11 +3,13 @@
3
3
  import { get_config_value } from "./config/config_loader.server.js";
4
4
  import { get_already_logged_in_config } from "./already_logged_in_config.server.js";
5
5
  import { get_oauth_config, type OAuthConfig } from "./oauth_config.server.js";
6
- import loginDefaultImage from "../assets/images/login_default.jpg.js";
7
6
 
8
- // section: types
9
- import type { StaticImageData } from "next/image";
7
+ // Default image path - consuming apps should either:
8
+ // 1. Configure their own image_src in hazo_auth_config.ini
9
+ // 2. Copy the default images from node_modules/hazo_auth/public/hazo_auth/images/ to their public folder
10
+ const DEFAULT_LOGIN_IMAGE_PATH = "/hazo_auth/images/login_default.jpg";
10
11
 
12
+ // section: types
11
13
  export type LoginConfig = {
12
14
  redirectRoute?: string;
13
15
  successMessage: string;
@@ -20,7 +22,7 @@ export type LoginConfig = {
20
22
  forgotPasswordLabel: string;
21
23
  createAccountPath: string;
22
24
  createAccountLabel: string;
23
- imageSrc: string | StaticImageData;
25
+ imageSrc: string;
24
26
  imageAlt: string;
25
27
  imageBackgroundColor: string;
26
28
  /** OAuth configuration */
@@ -64,12 +66,13 @@ export function get_login_config(): LoginConfig {
64
66
  const alreadyLoggedInConfig = get_already_logged_in_config();
65
67
 
66
68
  // Read image configuration
67
- // If not set in config, falls back to default image from assets
69
+ // If not set in config, falls back to default path-based image
70
+ // Consuming apps should copy images to public/hazo_auth/images/ or configure their own image_src
68
71
  const imageSrc = get_config_value(
69
72
  section,
70
73
  "image_src",
71
- "" // Empty string means not set in config
72
- ) || loginDefaultImage;
74
+ DEFAULT_LOGIN_IMAGE_PATH
75
+ );
73
76
 
74
77
  const imageAlt = get_config_value(
75
78
  section,
@@ -4,11 +4,13 @@ import { get_config_boolean, get_config_value, read_config_section } from "./con
4
4
  import { get_password_requirements_config } from "./password_requirements_config.server.js";
5
5
  import { get_already_logged_in_config } from "./already_logged_in_config.server.js";
6
6
  import { get_user_fields_config } from "./user_fields_config.server.js";
7
- import registerDefaultImage from "../assets/images/register_default.jpg.js";
8
7
 
9
- // section: types
10
- import type { StaticImageData } from "next/image";
8
+ // Default image path - consuming apps should either:
9
+ // 1. Configure their own image_src in hazo_auth_config.ini
10
+ // 2. Copy the default images from node_modules/hazo_auth/public/hazo_auth/images/ to their public folder
11
+ const DEFAULT_REGISTER_IMAGE_PATH = "/hazo_auth/images/register_default.jpg";
11
12
 
13
+ // section: types
12
14
  export type RegisterConfig = {
13
15
  showNameField: boolean;
14
16
  passwordRequirements: {
@@ -25,7 +27,7 @@ export type RegisterConfig = {
25
27
  returnHomePath: string;
26
28
  signInPath: string;
27
29
  signInLabel: string;
28
- imageSrc: string | StaticImageData;
30
+ imageSrc: string;
29
31
  imageAlt: string;
30
32
  imageBackgroundColor: string;
31
33
  };
@@ -65,12 +67,13 @@ export function get_register_config(): RegisterConfig {
65
67
  );
66
68
 
67
69
  // Read image configuration
68
- // If not set in config, falls back to default image from assets
70
+ // If not set in config, falls back to default path-based image
71
+ // Consuming apps should copy images to public/hazo_auth/images/ or configure their own image_src
69
72
  const imageSrc = get_config_value(
70
73
  "hazo_auth__register_layout",
71
74
  "image_src",
72
- "" // Empty string means not set in config
73
- ) || registerDefaultImage;
75
+ DEFAULT_REGISTER_IMAGE_PATH
76
+ );
74
77
 
75
78
  const imageAlt = get_config_value(
76
79
  "hazo_auth__register_layout",
@@ -3,11 +3,13 @@
3
3
  import { get_config_value } from "./config/config_loader.server.js";
4
4
  import { get_already_logged_in_config } from "./already_logged_in_config.server.js";
5
5
  import { get_password_requirements_config } from "./password_requirements_config.server.js";
6
- import resetPasswordDefaultImage from "../assets/images/reset_password_default.jpg.js";
7
6
 
8
- // section: types
9
- import type { StaticImageData } from "next/image";
7
+ // Default image path - consuming apps should either:
8
+ // 1. Configure their own image_src in hazo_auth_config.ini
9
+ // 2. Copy the default images from node_modules/hazo_auth/public/hazo_auth/images/ to their public folder
10
+ const DEFAULT_RESET_PASSWORD_IMAGE_PATH = "/hazo_auth/images/reset_password_default.jpg";
10
11
 
12
+ // section: types
11
13
  export type ResetPasswordConfig = {
12
14
  errorMessage: string;
13
15
  successMessage: string;
@@ -25,7 +27,7 @@ export type ResetPasswordConfig = {
25
27
  require_number: boolean;
26
28
  require_special: boolean;
27
29
  };
28
- imageSrc: string | StaticImageData;
30
+ imageSrc: string;
29
31
  imageAlt: string;
30
32
  imageBackgroundColor: string;
31
33
  };
@@ -66,12 +68,13 @@ export function get_reset_password_config(): ResetPasswordConfig {
66
68
  const passwordRequirements = get_password_requirements_config();
67
69
 
68
70
  // Read image configuration
69
- // If not set in config, falls back to default image from assets
71
+ // If not set in config, falls back to default path-based image
72
+ // Consuming apps should copy images to public/hazo_auth/images/ or configure their own image_src
70
73
  const imageSrc = get_config_value(
71
74
  section,
72
75
  "image_src",
73
- "" // Empty string means not set in config
74
- ) || resetPasswordDefaultImage;
76
+ DEFAULT_RESET_PASSWORD_IMAGE_PATH
77
+ );
75
78
 
76
79
  const imageAlt = get_config_value(
77
80
  section,
@@ -1,7 +1,7 @@
1
1
  export type DevLockLayoutProps = {
2
2
  /** Background color (default: #000000 - black) */
3
3
  background_color?: string;
4
- /** Logo image path (default: /logo.png) */
4
+ /** Logo image path (empty = no logo shown, configure to show) */
5
5
  logo_path?: string;
6
6
  /** Logo width in pixels (default: 120) */
7
7
  logo_width?: number;
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../../src/components/layouts/dev_lock/index.tsx"],"names":[],"mappings":"AAaA,MAAM,MAAM,kBAAkB,GAAG;IAC/B,kDAAkD;IAClD,gBAAgB,CAAC,EAAE,MAAM,CAAC;IAC1B,2CAA2C;IAC3C,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,0CAA0C;IAC1C,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,2CAA2C;IAC3C,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,4CAA4C;IAC5C,gBAAgB,CAAC,EAAE,MAAM,CAAC;IAC1B,+EAA+E;IAC/E,mBAAmB,CAAC,EAAE,MAAM,CAAC;IAC7B,oEAAoE;IACpE,oBAAoB,CAAC,EAAE,MAAM,CAAC;IAC9B,6CAA6C;IAC7C,kBAAkB,CAAC,EAAE,MAAM,CAAC;IAC5B,2EAA2E;IAC3E,aAAa,CAAC,EAAE,MAAM,CAAC;IACvB,uDAAuD;IACvD,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,wDAAwD;IACxD,YAAY,CAAC,EAAE,MAAM,CAAC;IACtB,yCAAyC;IACzC,QAAQ,CAAC,EAAE,MAAM,IAAI,CAAC;CACvB,CAAC;AAGF,MAAM,CAAC,OAAO,UAAU,aAAa,CAAC,EACpC,gBAA4B,EAC5B,SAAuB,EACvB,UAAgB,EAChB,WAAiB,EACjB,gBAAqB,EACrB,mBAAsC,EACtC,oBAA8C,EAC9C,kBAA6B,EAC7B,aAAoC,EACpC,UAAsB,EACtB,YAAwB,EACxB,QAAQ,GACT,EAAE,kBAAkB,2CA4IpB;AAED,OAAO,EAAE,aAAa,EAAE,CAAC"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../../src/components/layouts/dev_lock/index.tsx"],"names":[],"mappings":"AAaA,MAAM,MAAM,kBAAkB,GAAG;IAC/B,kDAAkD;IAClD,gBAAgB,CAAC,EAAE,MAAM,CAAC;IAC1B,iEAAiE;IACjE,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,0CAA0C;IAC1C,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,2CAA2C;IAC3C,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,4CAA4C;IAC5C,gBAAgB,CAAC,EAAE,MAAM,CAAC;IAC1B,+EAA+E;IAC/E,mBAAmB,CAAC,EAAE,MAAM,CAAC;IAC7B,oEAAoE;IACpE,oBAAoB,CAAC,EAAE,MAAM,CAAC;IAC9B,6CAA6C;IAC7C,kBAAkB,CAAC,EAAE,MAAM,CAAC;IAC5B,2EAA2E;IAC3E,aAAa,CAAC,EAAE,MAAM,CAAC;IACvB,uDAAuD;IACvD,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,wDAAwD;IACxD,YAAY,CAAC,EAAE,MAAM,CAAC;IACtB,yCAAyC;IACzC,QAAQ,CAAC,EAAE,MAAM,IAAI,CAAC;CACvB,CAAC;AAGF,MAAM,CAAC,OAAO,UAAU,aAAa,CAAC,EACpC,gBAA4B,EAC5B,SAAc,EACd,UAAgB,EAChB,WAAiB,EACjB,gBAAqB,EACrB,mBAAsC,EACtC,oBAA8C,EAC9C,kBAA6B,EAC7B,aAAoC,EACpC,UAAsB,EACtB,YAAwB,EACxB,QAAQ,GACT,EAAE,kBAAkB,2CAgJpB;AAED,OAAO,EAAE,aAAa,EAAE,CAAC"}
@@ -10,7 +10,9 @@ import { Input } from "../../ui/input";
10
10
  import { Button } from "../../ui/button";
11
11
  import { Lock, AlertCircle, Loader2 } from "lucide-react";
12
12
  // section: component
13
- export default function DevLockLayout({ background_color = "#000000", logo_path = "/logo.png", logo_width = 120, logo_height = 120, application_name = "", limited_access_text = "Limited Access", password_placeholder = "Enter access password", submit_button_text = "Unlock", error_message = "Incorrect password", text_color = "#ffffff", accent_color = "#3b82f6", onUnlock, }) {
13
+ export default function DevLockLayout({ background_color = "#000000", logo_path = "", logo_width = 120, logo_height = 120, application_name = "", limited_access_text = "Limited Access", password_placeholder = "Enter access password", submit_button_text = "Unlock", error_message = "Incorrect password", text_color = "#ffffff", accent_color = "#3b82f6", onUnlock, }) {
14
+ // Only show logo if logo_path is configured (non-empty)
15
+ const showLogo = logo_path !== "";
14
16
  const [password, setPassword] = useState("");
15
17
  const [error, setError] = useState(null);
16
18
  const [isLoading, setIsLoading] = useState(false);
@@ -52,7 +54,7 @@ export default function DevLockLayout({ background_color = "#000000", logo_path
52
54
  setError(null);
53
55
  }
54
56
  }, [error]);
55
- return (_jsx("div", { className: "cls_dev_lock_layout min-h-screen flex flex-col items-center justify-center p-4", style: { backgroundColor: background_color }, children: _jsxs("div", { className: "cls_dev_lock_container flex flex-col items-center gap-6 max-w-sm w-full", children: [_jsx("div", { className: "cls_dev_lock_logo", children: _jsx(Image, { src: logo_path, alt: "Application logo", width: logo_width, height: logo_height, className: "object-contain", priority: true }) }), application_name && (_jsx("h1", { className: "cls_dev_lock_app_name text-2xl font-bold text-center", style: { color: text_color }, children: application_name })), _jsxs("div", { className: "cls_dev_lock_header flex items-center gap-2", children: [_jsx(Lock, { className: "w-5 h-5", style: { color: text_color } }), _jsx("span", { className: "cls_dev_lock_text text-sm font-medium uppercase tracking-wider", style: { color: text_color, opacity: 0.8 }, children: limited_access_text })] }), _jsxs("form", { onSubmit: handleSubmit, className: "cls_dev_lock_form flex flex-col gap-4 w-full", children: [_jsx("div", { className: "cls_dev_lock_input_wrapper relative", children: _jsx(Input, { type: "password", value: password, onChange: handlePasswordChange, placeholder: password_placeholder, className: "cls_dev_lock_input h-12 bg-white/10 border-white/20 text-white placeholder:text-white/50 focus:border-white/40 focus:ring-white/20", disabled: isLoading, autoFocus: true, autoComplete: "current-password" }) }), error && (_jsxs("div", { className: "cls_dev_lock_error flex items-center gap-2 text-sm", style: { color: "#ef4444" }, children: [_jsx(AlertCircle, { className: "w-4 h-4 flex-shrink-0" }), _jsx("span", { children: error })] })), _jsx(Button, { type: "submit", className: "cls_dev_lock_button h-12 font-medium transition-colors", style: {
57
+ return (_jsx("div", { className: "cls_dev_lock_layout min-h-screen flex flex-col items-center justify-center p-4", style: { backgroundColor: background_color }, children: _jsxs("div", { className: "cls_dev_lock_container flex flex-col items-center gap-6 max-w-sm w-full", children: [showLogo && (_jsx("div", { className: "cls_dev_lock_logo", children: _jsx(Image, { src: logo_path, alt: "Application logo", width: logo_width, height: logo_height, className: "object-contain", priority: true }) })), application_name && (_jsx("h1", { className: "cls_dev_lock_app_name text-2xl font-bold text-center", style: { color: text_color }, children: application_name })), _jsxs("div", { className: "cls_dev_lock_header flex items-center gap-2", children: [_jsx(Lock, { className: "w-5 h-5", style: { color: text_color } }), _jsx("span", { className: "cls_dev_lock_text text-sm font-medium uppercase tracking-wider", style: { color: text_color, opacity: 0.8 }, children: limited_access_text })] }), _jsxs("form", { onSubmit: handleSubmit, className: "cls_dev_lock_form flex flex-col gap-4 w-full", children: [_jsx("div", { className: "cls_dev_lock_input_wrapper relative", children: _jsx(Input, { type: "password", value: password, onChange: handlePasswordChange, placeholder: password_placeholder, className: "cls_dev_lock_input h-12 bg-white/10 border-white/20 text-white placeholder:text-white/50 focus:border-white/40 focus:ring-white/20", disabled: isLoading, autoFocus: true, autoComplete: "current-password" }) }), error && (_jsxs("div", { className: "cls_dev_lock_error flex items-center gap-2 text-sm", style: { color: "#ef4444" }, children: [_jsx(AlertCircle, { className: "w-4 h-4 flex-shrink-0" }), _jsx("span", { children: error })] })), _jsx(Button, { type: "submit", className: "cls_dev_lock_button h-12 font-medium transition-colors", style: {
56
58
  backgroundColor: accent_color,
57
59
  color: "#ffffff",
58
60
  }, disabled: isLoading || !password, children: isLoading ? (_jsxs(_Fragment, { children: [_jsx(Loader2, { className: "w-4 h-4 animate-spin mr-2" }), "Verifying..."] })) : (submit_button_text) })] })] }) }));
@@ -1,5 +1,5 @@
1
1
  export type AuthNavbarProps = {
2
- /** Logo image path */
2
+ /** Logo image path (empty string = no logo shown) */
3
3
  logo_path?: string;
4
4
  /** Logo width in pixels */
5
5
  logo_width?: number;
@@ -1 +1 @@
1
- {"version":3,"file":"auth_navbar.d.ts","sourceRoot":"","sources":["../../../../../src/components/layouts/shared/components/auth_navbar.tsx"],"names":[],"mappings":"AAWA,MAAM,MAAM,eAAe,GAAG;IAC5B,sBAAsB;IACtB,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,2BAA2B;IAC3B,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,4BAA4B;IAC5B,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,sDAAsD;IACtD,YAAY,CAAC,EAAE,MAAM,CAAC;IACtB,qBAAqB;IACrB,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,sBAAsB;IACtB,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,qBAAqB;IACrB,cAAc,CAAC,EAAE,OAAO,CAAC;IACzB,8BAA8B;IAC9B,gBAAgB,CAAC,EAAE,MAAM,CAAC;IAC1B,wBAAwB;IACxB,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,8BAA8B;IAC9B,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,2BAA2B;IAC3B,SAAS,CAAC,EAAE,MAAM,CAAC;CACpB,CAAC;AAGF,wBAAgB,UAAU,CAAC,EACzB,SAAuB,EACvB,UAAe,EACf,WAAgB,EAChB,YAAiB,EACjB,SAAe,EACf,UAAmB,EACnB,cAAqB,EACrB,gBAAgB,EAChB,UAAU,EACV,MAAW,EACX,SAAS,GACV,EAAE,eAAe,2CAiDjB"}
1
+ {"version":3,"file":"auth_navbar.d.ts","sourceRoot":"","sources":["../../../../../src/components/layouts/shared/components/auth_navbar.tsx"],"names":[],"mappings":"AAWA,MAAM,MAAM,eAAe,GAAG;IAC5B,qDAAqD;IACrD,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,2BAA2B;IAC3B,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,4BAA4B;IAC5B,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,sDAAsD;IACtD,YAAY,CAAC,EAAE,MAAM,CAAC;IACtB,qBAAqB;IACrB,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,sBAAsB;IACtB,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,qBAAqB;IACrB,cAAc,CAAC,EAAE,OAAO,CAAC;IACzB,8BAA8B;IAC9B,gBAAgB,CAAC,EAAE,MAAM,CAAC;IAC1B,wBAAwB;IACxB,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,8BAA8B;IAC9B,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,2BAA2B;IAC3B,SAAS,CAAC,EAAE,MAAM,CAAC;CACpB,CAAC;AAGF,wBAAgB,UAAU,CAAC,EACzB,SAAc,EACd,UAAe,EACf,WAAgB,EAChB,YAAiB,EACjB,SAAe,EACf,UAAmB,EACnB,cAAqB,EACrB,gBAAgB,EAChB,UAAU,EACV,MAAW,EACX,SAAS,GACV,EAAE,eAAe,2CAuDjB"}
@@ -8,7 +8,9 @@ import Image from "next/image";
8
8
  import { Home } from "lucide-react";
9
9
  import { cn } from "../../../../lib/utils";
10
10
  // section: component
11
- export function AuthNavbar({ logo_path = "/logo.png", logo_width = 32, logo_height = 32, company_name = "", home_path = "/", home_label = "Home", show_home_link = true, background_color, text_color, height = 64, className, }) {
11
+ export function AuthNavbar({ logo_path = "", logo_width = 32, logo_height = 32, company_name = "", home_path = "/", home_label = "Home", show_home_link = true, background_color, text_color, height = 64, className, }) {
12
+ // Only show logo if logo_path is configured (non-empty)
13
+ const showLogo = logo_path !== "";
12
14
  const navStyle = Object.assign(Object.assign({ height: `${height}px` }, (background_color && { backgroundColor: background_color })), (text_color && { color: text_color }));
13
- return (_jsxs("nav", { className: cn("cls_auth_navbar flex w-full items-center justify-between border-b border-border/40 bg-background/95 px-4 backdrop-blur supports-[backdrop-filter]:bg-background/60", className), style: navStyle, "aria-label": "Authentication page navigation", children: [_jsx("div", { className: "cls_auth_navbar_brand flex items-center gap-3", children: _jsxs(Link, { href: home_path, className: "cls_auth_navbar_logo_link flex items-center gap-3", children: [_jsx(Image, { src: logo_path, alt: company_name ? `${company_name} logo` : "Logo", width: logo_width, height: logo_height, className: "cls_auth_navbar_logo object-contain" }), company_name && (_jsx("span", { className: "cls_auth_navbar_company_name text-lg font-semibold text-foreground", children: company_name }))] }) }), show_home_link && (_jsx("div", { className: "cls_auth_navbar_links flex items-center gap-4", children: _jsxs(Link, { href: home_path, className: "cls_auth_navbar_home_link flex items-center gap-2 text-sm font-medium text-muted-foreground transition-colors hover:text-foreground", "aria-label": `Navigate to ${home_label}`, children: [_jsx(Home, { className: "h-4 w-4", "aria-hidden": "true" }), _jsx("span", { children: home_label })] }) }))] }));
15
+ return (_jsxs("nav", { className: cn("cls_auth_navbar flex w-full items-center justify-between border-b border-border/40 bg-background/95 px-4 backdrop-blur supports-[backdrop-filter]:bg-background/60", className), style: navStyle, "aria-label": "Authentication page navigation", children: [_jsx("div", { className: "cls_auth_navbar_brand flex items-center gap-3", children: (showLogo || company_name) && (_jsxs(Link, { href: home_path, className: "cls_auth_navbar_logo_link flex items-center gap-3", children: [showLogo && (_jsx(Image, { src: logo_path, alt: company_name ? `${company_name} logo` : "Logo", width: logo_width, height: logo_height, className: "cls_auth_navbar_logo object-contain" })), company_name && (_jsx("span", { className: "cls_auth_navbar_company_name text-lg font-semibold text-foreground", children: company_name }))] })) }), show_home_link && (_jsx("div", { className: "cls_auth_navbar_links flex items-center gap-4", children: _jsxs(Link, { href: home_path, className: "cls_auth_navbar_home_link flex items-center gap-2 text-sm font-medium text-muted-foreground transition-colors hover:text-foreground", "aria-label": `Navigate to ${home_label}`, children: [_jsx(Home, { className: "h-4 w-4", "aria-hidden": "true" }), _jsx("span", { children: home_label })] }) }))] }));
14
16
  }
@@ -5,11 +5,11 @@ import { CircleCheckBig, CircleX } from "lucide-react";
5
5
  import { Button } from "../../../ui/button";
6
6
  // section: component
7
7
  export function FormActionButtons({ submitLabel, cancelLabel, buttonPalette, isSubmitDisabled, onCancel, submitAriaLabel = "Submit form", cancelAriaLabel = "Cancel form", className, }) {
8
- return (_jsxs("div", { className: `cls_form_action_buttons mt-2 flex items-center justify-end gap-4 ${className !== null && className !== void 0 ? className : ""}`, children: [_jsxs(Button, { type: "submit", disabled: isSubmitDisabled, className: "cls_form_action_submit_button flex items-center gap-2", "aria-label": submitAriaLabel, style: {
8
+ return (_jsxs("div", { className: `cls_form_action_buttons mt-2 flex flex-wrap items-center justify-end gap-4 ${className !== null && className !== void 0 ? className : ""}`, children: [_jsxs(Button, { type: "submit", disabled: isSubmitDisabled, className: "cls_form_action_submit_button flex shrink-0 items-center gap-2", "aria-label": submitAriaLabel, style: {
9
9
  backgroundColor: buttonPalette.submitBackground,
10
10
  color: buttonPalette.submitText,
11
- }, children: [_jsx(CircleCheckBig, { className: "h-4 w-4", "aria-hidden": "true" }), _jsx("span", { children: submitLabel })] }), _jsxs(Button, { type: "button", variant: "outline", onClick: onCancel, className: "cls_form_action_cancel_button flex items-center gap-2", "aria-label": cancelAriaLabel, style: {
11
+ }, children: [_jsx(CircleCheckBig, { className: "h-4 w-4 shrink-0", "aria-hidden": "true" }), _jsx("span", { children: submitLabel })] }), _jsxs(Button, { type: "button", variant: "outline", onClick: onCancel, className: "cls_form_action_cancel_button flex shrink-0 items-center gap-2", "aria-label": cancelAriaLabel, style: {
12
12
  borderColor: buttonPalette.cancelBorder,
13
13
  color: buttonPalette.cancelText,
14
- }, children: [_jsx(CircleX, { className: "h-4 w-4", "aria-hidden": "true" }), _jsx("span", { children: cancelLabel })] })] }));
14
+ }, children: [_jsx(CircleX, { className: "h-4 w-4 shrink-0", "aria-hidden": "true" }), _jsx("span", { children: cancelLabel })] })] }));
15
15
  }
@@ -1 +1 @@
1
- {"version":3,"file":"password_field.d.ts","sourceRoot":"","sources":["../../../../../src/components/layouts/shared/components/password_field.tsx"],"names":[],"mappings":"AAWA,MAAM,MAAM,kBAAkB,GAAG;IAC/B,OAAO,EAAE,MAAM,CAAC;IAChB,SAAS,EAAE,MAAM,CAAC;IAClB,KAAK,EAAE,MAAM,CAAC;IACd,WAAW,EAAE,MAAM,CAAC;IACpB,YAAY,CAAC,EAAE,MAAM,CAAC;IACtB,SAAS,EAAE,OAAO,CAAC;IACnB,QAAQ,EAAE,CAAC,KAAK,EAAE,MAAM,KAAK,IAAI,CAAC;IAClC,kBAAkB,EAAE,MAAM,IAAI,CAAC;IAC/B,YAAY,CAAC,EAAE,MAAM,GAAG,MAAM,EAAE,CAAC;CAClC,CAAC;AAGF,wBAAgB,aAAa,CAAC,EAC5B,OAAO,EACP,SAAS,EACT,KAAK,EACL,WAAW,EACX,YAAY,EACZ,SAAS,EACT,QAAQ,EACR,kBAAkB,EAClB,YAAY,GACb,EAAE,kBAAkB,2CAoCpB"}
1
+ {"version":3,"file":"password_field.d.ts","sourceRoot":"","sources":["../../../../../src/components/layouts/shared/components/password_field.tsx"],"names":[],"mappings":"AAWA,MAAM,MAAM,kBAAkB,GAAG;IAC/B,OAAO,EAAE,MAAM,CAAC;IAChB,SAAS,EAAE,MAAM,CAAC;IAClB,KAAK,EAAE,MAAM,CAAC;IACd,WAAW,EAAE,MAAM,CAAC;IACpB,YAAY,CAAC,EAAE,MAAM,CAAC;IACtB,SAAS,EAAE,OAAO,CAAC;IACnB,QAAQ,EAAE,CAAC,KAAK,EAAE,MAAM,KAAK,IAAI,CAAC;IAClC,kBAAkB,EAAE,MAAM,IAAI,CAAC;IAC/B,YAAY,CAAC,EAAE,MAAM,GAAG,MAAM,EAAE,CAAC;CAClC,CAAC;AAGF,wBAAgB,aAAa,CAAC,EAC5B,OAAO,EACP,SAAS,EACT,KAAK,EACL,WAAW,EACX,YAAY,EACZ,SAAS,EACT,QAAQ,EACR,kBAAkB,EAClB,YAAY,GACb,EAAE,kBAAkB,2CA6CpB"}
@@ -9,5 +9,12 @@ import { Input } from "../../../ui/input";
9
9
  import { FieldErrorMessage } from "./field_error_message";
10
10
  // section: component
11
11
  export function PasswordField({ inputId, ariaLabel, value, placeholder, autoComplete, isVisible, onChange, onToggleVisibility, errorMessage, }) {
12
- return (_jsxs("div", { className: "cls_password_field_wrapper", children: [_jsxs("div", { className: "relative", children: [_jsx(Input, { id: inputId, type: isVisible ? "text" : "password", value: value, onChange: (event) => onChange(event.target.value), autoComplete: autoComplete, placeholder: placeholder, "aria-label": ariaLabel, className: "cls_password_field_input pr-11" }), _jsx(Button, { type: "button", variant: "ghost", size: "icon", "aria-label": `${isVisible ? "Hide" : "Show"} ${ariaLabel.toLowerCase()}`, onClick: onToggleVisibility, className: "cls_password_field_toggle absolute inset-y-0 right-1 my-auto h-8 w-8 text-muted-foreground hover:bg-transparent hover:text-foreground", children: isVisible ? (_jsx(EyeOff, { className: "h-4 w-4", "aria-hidden": "true" })) : (_jsx(Eye, { className: "h-4 w-4", "aria-hidden": "true" })) })] }), errorMessage ? (_jsx("div", { className: "mt-1 min-h-0", children: _jsx(FieldErrorMessage, { message: errorMessage }) })) : null] }));
12
+ return (_jsxs("div", { className: "cls_password_field_wrapper", children: [_jsxs("div", { className: "cls_password_field_container relative", style: { position: "relative" }, children: [_jsx(Input, { id: inputId, type: isVisible ? "text" : "password", value: value, onChange: (event) => onChange(event.target.value), autoComplete: autoComplete, placeholder: placeholder, "aria-label": ariaLabel, className: "cls_password_field_input pr-11", style: { paddingRight: "2.75rem" } }), _jsx(Button, { type: "button", variant: "ghost", size: "icon", "aria-label": `${isVisible ? "Hide" : "Show"} ${ariaLabel.toLowerCase()}`, onClick: onToggleVisibility, className: "cls_password_field_toggle absolute inset-y-0 right-1 my-auto h-8 w-8 text-muted-foreground hover:bg-transparent hover:text-foreground", style: {
13
+ position: "absolute",
14
+ top: "50%",
15
+ right: "0.25rem",
16
+ transform: "translateY(-50%)",
17
+ height: "2rem",
18
+ width: "2rem",
19
+ }, children: isVisible ? (_jsx(EyeOff, { className: "h-4 w-4", "aria-hidden": "true" })) : (_jsx(Eye, { className: "h-4 w-4", "aria-hidden": "true" })) })] }), errorMessage ? (_jsx("div", { className: "mt-1 min-h-0", children: _jsx(FieldErrorMessage, { message: errorMessage }) })) : null] }));
13
20
  }
@@ -136,8 +136,8 @@ export declare const DEFAULT_MULTI_TENANCY: {
136
136
  export declare const DEFAULT_NAVBAR: {
137
137
  /** Enable navbar on auth pages */
138
138
  readonly enable_navbar: true;
139
- /** Logo image path (default: /logo.png in public folder) */
140
- readonly logo_path: "/logo.png";
139
+ /** Logo image path (empty = no logo shown, configure to show) */
140
+ readonly logo_path: "";
141
141
  /** Logo width in pixels */
142
142
  readonly logo_width: 32;
143
143
  /** Logo height in pixels */
@@ -170,8 +170,8 @@ export declare const DEFAULT_DEV_LOCK: {
170
170
  readonly session_duration_days: 7;
171
171
  /** Background color (default: black) */
172
172
  readonly background_color: "#000000";
173
- /** Logo image path (default: /logo.png in public folder) */
174
- readonly logo_path: "/logo.png";
173
+ /** Logo image path (empty = no logo shown, configure to show) */
174
+ readonly logo_path: "";
175
175
  /** Logo width in pixels */
176
176
  readonly logo_width: 120;
177
177
  /** Logo height in pixels */
@@ -328,8 +328,8 @@ export declare const HAZO_AUTH_DEFAULTS: {
328
328
  readonly session_duration_days: 7;
329
329
  /** Background color (default: black) */
330
330
  readonly background_color: "#000000";
331
- /** Logo image path (default: /logo.png in public folder) */
332
- readonly logo_path: "/logo.png";
331
+ /** Logo image path (empty = no logo shown, configure to show) */
332
+ readonly logo_path: "";
333
333
  /** Logo width in pixels */
334
334
  readonly logo_width: 120;
335
335
  /** Logo height in pixels */
@@ -362,8 +362,8 @@ export declare const HAZO_AUTH_DEFAULTS: {
362
362
  readonly navbar: {
363
363
  /** Enable navbar on auth pages */
364
364
  readonly enable_navbar: true;
365
- /** Logo image path (default: /logo.png in public folder) */
366
- readonly logo_path: "/logo.png";
365
+ /** Logo image path (empty = no logo shown, configure to show) */
366
+ readonly logo_path: "";
367
367
  /** Logo width in pixels */
368
368
  readonly logo_width: 32;
369
369
  /** Logo height in pixels */
@@ -1 +1 @@
1
- {"version":3,"file":"default_config.d.ts","sourceRoot":"","sources":["../../../src/lib/config/default_config.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"default_config.d.ts","sourceRoot":"","sources":["../../../src/lib/config/default_config.ts"],"names":[],"mappings":"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"}
@@ -160,8 +160,8 @@ export const DEFAULT_MULTI_TENANCY = {
160
160
  export const DEFAULT_NAVBAR = {
161
161
  /** Enable navbar on auth pages */
162
162
  enable_navbar: true,
163
- /** Logo image path (default: /logo.png in public folder) */
164
- logo_path: "/logo.png",
163
+ /** Logo image path (empty = no logo shown, configure to show) */
164
+ logo_path: "",
165
165
  /** Logo width in pixels */
166
166
  logo_width: 32,
167
167
  /** Logo height in pixels */
@@ -196,8 +196,8 @@ export const DEFAULT_DEV_LOCK = {
196
196
  session_duration_days: 7,
197
197
  /** Background color (default: black) */
198
198
  background_color: "#000000",
199
- /** Logo image path (default: /logo.png in public folder) */
200
- logo_path: "/logo.png",
199
+ /** Logo image path (empty = no logo shown, configure to show) */
200
+ logo_path: "",
201
201
  /** Logo width in pixels */
202
202
  logo_width: 120,
203
203
  /** Logo height in pixels */
@@ -1,11 +1,10 @@
1
- import type { StaticImageData } from "next/image";
2
1
  export type EmailVerificationConfig = {
3
2
  alreadyLoggedInMessage: string;
4
3
  showLogoutButton: boolean;
5
4
  showReturnHomeButton: boolean;
6
5
  returnHomeButtonLabel: string;
7
6
  returnHomePath: string;
8
- imageSrc: string | StaticImageData;
7
+ imageSrc: string;
9
8
  imageAlt: string;
10
9
  imageBackgroundColor: string;
11
10
  };
@@ -1 +1 @@
1
- {"version":3,"file":"email_verification_config.server.d.ts","sourceRoot":"","sources":["../../src/lib/email_verification_config.server.ts"],"names":[],"mappings":"AAOA,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,YAAY,CAAC;AAElD,MAAM,MAAM,uBAAuB,GAAG;IACpC,sBAAsB,EAAE,MAAM,CAAC;IAC/B,gBAAgB,EAAE,OAAO,CAAC;IAC1B,oBAAoB,EAAE,OAAO,CAAC;IAC9B,qBAAqB,EAAE,MAAM,CAAC;IAC9B,cAAc,EAAE,MAAM,CAAC;IACvB,QAAQ,EAAE,MAAM,GAAG,eAAe,CAAC;IACnC,QAAQ,EAAE,MAAM,CAAC;IACjB,oBAAoB,EAAE,MAAM,CAAC;CAC9B,CAAC;AAGF;;;;GAIG;AACH,wBAAgB,6BAA6B,IAAI,uBAAuB,CAmCvE"}
1
+ {"version":3,"file":"email_verification_config.server.d.ts","sourceRoot":"","sources":["../../src/lib/email_verification_config.server.ts"],"names":[],"mappings":"AAWA,MAAM,MAAM,uBAAuB,GAAG;IACpC,sBAAsB,EAAE,MAAM,CAAC;IAC/B,gBAAgB,EAAE,OAAO,CAAC;IAC1B,oBAAoB,EAAE,OAAO,CAAC;IAC9B,qBAAqB,EAAE,MAAM,CAAC;IAC9B,cAAc,EAAE,MAAM,CAAC;IACvB,QAAQ,EAAE,MAAM,CAAC;IACjB,QAAQ,EAAE,MAAM,CAAC;IACjB,oBAAoB,EAAE,MAAM,CAAC;CAC9B,CAAC;AAGF;;;;GAIG;AACH,wBAAgB,6BAA6B,IAAI,uBAAuB,CAoCvE"}
@@ -2,7 +2,10 @@
2
2
  // section: imports
3
3
  import { get_already_logged_in_config } from "./already_logged_in_config.server";
4
4
  import { get_config_value } from "./config/config_loader.server";
5
- import verifyEmailDefaultImage from "../assets/images/verify_email_default.jpg";
5
+ // Default image path - consuming apps should either:
6
+ // 1. Configure their own image_src in hazo_auth_config.ini
7
+ // 2. Copy the default images from node_modules/hazo_auth/public/hazo_auth/images/ to their public folder
8
+ const DEFAULT_VERIFY_EMAIL_IMAGE_PATH = "/hazo_auth/images/verify_email_default.jpg";
6
9
  // section: helpers
7
10
  /**
8
11
  * Reads email verification layout configuration from hazo_auth_config.ini file
@@ -14,9 +17,9 @@ export function get_email_verification_config() {
14
17
  // Get shared already logged in config
15
18
  const alreadyLoggedInConfig = get_already_logged_in_config();
16
19
  // Read image configuration
17
- // If not set in config, falls back to default image from assets
18
- const imageSrc = get_config_value(section, "image_src", "" // Empty string means not set in config
19
- ) || verifyEmailDefaultImage;
20
+ // If not set in config, falls back to default path-based image
21
+ // Consuming apps should copy images to public/hazo_auth/images/ or configure their own image_src
22
+ const imageSrc = get_config_value(section, "image_src", DEFAULT_VERIFY_EMAIL_IMAGE_PATH);
20
23
  const imageAlt = get_config_value(section, "image_alt", "Email verification illustration");
21
24
  const imageBackgroundColor = get_config_value(section, "image_background_color", "#f1f5f9");
22
25
  return {
@@ -1,11 +1,10 @@
1
- import type { StaticImageData } from "next/image";
2
1
  export type ForgotPasswordConfig = {
3
2
  alreadyLoggedInMessage: string;
4
3
  showLogoutButton: boolean;
5
4
  showReturnHomeButton: boolean;
6
5
  returnHomeButtonLabel: string;
7
6
  returnHomePath: string;
8
- imageSrc: string | StaticImageData;
7
+ imageSrc: string;
9
8
  imageAlt: string;
10
9
  imageBackgroundColor: string;
11
10
  };
@@ -1 +1 @@
1
- {"version":3,"file":"forgot_password_config.server.d.ts","sourceRoot":"","sources":["../../src/lib/forgot_password_config.server.ts"],"names":[],"mappings":"AAOA,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,YAAY,CAAC;AAElD,MAAM,MAAM,oBAAoB,GAAG;IACjC,sBAAsB,EAAE,MAAM,CAAC;IAC/B,gBAAgB,EAAE,OAAO,CAAC;IAC1B,oBAAoB,EAAE,OAAO,CAAC;IAC9B,qBAAqB,EAAE,MAAM,CAAC;IAC9B,cAAc,EAAE,MAAM,CAAC;IACvB,QAAQ,EAAE,MAAM,GAAG,eAAe,CAAC;IACnC,QAAQ,EAAE,MAAM,CAAC;IACjB,oBAAoB,EAAE,MAAM,CAAC;CAC9B,CAAC;AAGF;;;;GAIG;AACH,wBAAgB,0BAA0B,IAAI,oBAAoB,CAmCjE"}
1
+ {"version":3,"file":"forgot_password_config.server.d.ts","sourceRoot":"","sources":["../../src/lib/forgot_password_config.server.ts"],"names":[],"mappings":"AAWA,MAAM,MAAM,oBAAoB,GAAG;IACjC,sBAAsB,EAAE,MAAM,CAAC;IAC/B,gBAAgB,EAAE,OAAO,CAAC;IAC1B,oBAAoB,EAAE,OAAO,CAAC;IAC9B,qBAAqB,EAAE,MAAM,CAAC;IAC9B,cAAc,EAAE,MAAM,CAAC;IACvB,QAAQ,EAAE,MAAM,CAAC;IACjB,QAAQ,EAAE,MAAM,CAAC;IACjB,oBAAoB,EAAE,MAAM,CAAC;CAC9B,CAAC;AAGF;;;;GAIG;AACH,wBAAgB,0BAA0B,IAAI,oBAAoB,CAoCjE"}
@@ -2,7 +2,10 @@
2
2
  // section: imports
3
3
  import { get_already_logged_in_config } from "./already_logged_in_config.server";
4
4
  import { get_config_value } from "./config/config_loader.server";
5
- import forgotPasswordDefaultImage from "../assets/images/forgot_password_default.jpg";
5
+ // Default image path - consuming apps should either:
6
+ // 1. Configure their own image_src in hazo_auth_config.ini
7
+ // 2. Copy the default images from node_modules/hazo_auth/public/hazo_auth/images/ to their public folder
8
+ const DEFAULT_FORGOT_PASSWORD_IMAGE_PATH = "/hazo_auth/images/forgot_password_default.jpg";
6
9
  // section: helpers
7
10
  /**
8
11
  * Reads forgot password layout configuration from hazo_auth_config.ini file
@@ -14,9 +17,9 @@ export function get_forgot_password_config() {
14
17
  // Get shared already logged in config
15
18
  const alreadyLoggedInConfig = get_already_logged_in_config();
16
19
  // Read image configuration
17
- // If not set in config, falls back to default image from assets
18
- const imageSrc = get_config_value(section, "image_src", "" // Empty string means not set in config
19
- ) || forgotPasswordDefaultImage;
20
+ // If not set in config, falls back to default path-based image
21
+ // Consuming apps should copy images to public/hazo_auth/images/ or configure their own image_src
22
+ const imageSrc = get_config_value(section, "image_src", DEFAULT_FORGOT_PASSWORD_IMAGE_PATH);
20
23
  const imageAlt = get_config_value(section, "image_alt", "Password recovery illustration");
21
24
  const imageBackgroundColor = get_config_value(section, "image_background_color", "#f1f5f9");
22
25
  return {
@@ -1,5 +1,4 @@
1
1
  import { type OAuthConfig } from "./oauth_config.server";
2
- import type { StaticImageData } from "next/image";
3
2
  export type LoginConfig = {
4
3
  redirectRoute?: string;
5
4
  successMessage: string;
@@ -12,7 +11,7 @@ export type LoginConfig = {
12
11
  forgotPasswordLabel: string;
13
12
  createAccountPath: string;
14
13
  createAccountLabel: string;
15
- imageSrc: string | StaticImageData;
14
+ imageSrc: string;
16
15
  imageAlt: string;
17
16
  imageBackgroundColor: string;
18
17
  /** OAuth configuration */
@@ -1 +1 @@
1
- {"version":3,"file":"login_config.server.d.ts","sourceRoot":"","sources":["../../src/lib/login_config.server.ts"],"names":[],"mappings":"AAIA,OAAO,EAAoB,KAAK,WAAW,EAAE,MAAM,uBAAuB,CAAC;AAI3E,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,YAAY,CAAC;AAElD,MAAM,MAAM,WAAW,GAAG;IACxB,aAAa,CAAC,EAAE,MAAM,CAAC;IACvB,cAAc,EAAE,MAAM,CAAC;IACvB,sBAAsB,EAAE,MAAM,CAAC;IAC/B,gBAAgB,EAAE,OAAO,CAAC;IAC1B,oBAAoB,EAAE,OAAO,CAAC;IAC9B,qBAAqB,EAAE,MAAM,CAAC;IAC9B,cAAc,EAAE,MAAM,CAAC;IACvB,kBAAkB,EAAE,MAAM,CAAC;IAC3B,mBAAmB,EAAE,MAAM,CAAC;IAC5B,iBAAiB,EAAE,MAAM,CAAC;IAC1B,kBAAkB,EAAE,MAAM,CAAC;IAC3B,QAAQ,EAAE,MAAM,GAAG,eAAe,CAAC;IACnC,QAAQ,EAAE,MAAM,CAAC;IACjB,oBAAoB,EAAE,MAAM,CAAC;IAC7B,0BAA0B;IAC1B,KAAK,EAAE,WAAW,CAAC;CACpB,CAAC;AAGF;;;;GAIG;AACH,wBAAgB,gBAAgB,IAAI,WAAW,CAqE9C"}
1
+ {"version":3,"file":"login_config.server.d.ts","sourceRoot":"","sources":["../../src/lib/login_config.server.ts"],"names":[],"mappings":"AAIA,OAAO,EAAoB,KAAK,WAAW,EAAE,MAAM,uBAAuB,CAAC;AAQ3E,MAAM,MAAM,WAAW,GAAG;IACxB,aAAa,CAAC,EAAE,MAAM,CAAC;IACvB,cAAc,EAAE,MAAM,CAAC;IACvB,sBAAsB,EAAE,MAAM,CAAC;IAC/B,gBAAgB,EAAE,OAAO,CAAC;IAC1B,oBAAoB,EAAE,OAAO,CAAC;IAC9B,qBAAqB,EAAE,MAAM,CAAC;IAC9B,cAAc,EAAE,MAAM,CAAC;IACvB,kBAAkB,EAAE,MAAM,CAAC;IAC3B,mBAAmB,EAAE,MAAM,CAAC;IAC5B,iBAAiB,EAAE,MAAM,CAAC;IAC1B,kBAAkB,EAAE,MAAM,CAAC;IAC3B,QAAQ,EAAE,MAAM,CAAC;IACjB,QAAQ,EAAE,MAAM,CAAC;IACjB,oBAAoB,EAAE,MAAM,CAAC;IAC7B,0BAA0B;IAC1B,KAAK,EAAE,WAAW,CAAC;CACpB,CAAC;AAGF;;;;GAIG;AACH,wBAAgB,gBAAgB,IAAI,WAAW,CAsE9C"}
@@ -3,7 +3,10 @@
3
3
  import { get_config_value } from "./config/config_loader.server";
4
4
  import { get_already_logged_in_config } from "./already_logged_in_config.server";
5
5
  import { get_oauth_config } from "./oauth_config.server";
6
- import loginDefaultImage from "../assets/images/login_default.jpg";
6
+ // Default image path - consuming apps should either:
7
+ // 1. Configure their own image_src in hazo_auth_config.ini
8
+ // 2. Copy the default images from node_modules/hazo_auth/public/hazo_auth/images/ to their public folder
9
+ const DEFAULT_LOGIN_IMAGE_PATH = "/hazo_auth/images/login_default.jpg";
7
10
  // section: helpers
8
11
  /**
9
12
  * Reads login layout configuration from hazo_auth_config.ini file
@@ -24,9 +27,9 @@ export function get_login_config() {
24
27
  // Get shared already logged in config
25
28
  const alreadyLoggedInConfig = get_already_logged_in_config();
26
29
  // Read image configuration
27
- // If not set in config, falls back to default image from assets
28
- const imageSrc = get_config_value(section, "image_src", "" // Empty string means not set in config
29
- ) || loginDefaultImage;
30
+ // If not set in config, falls back to default path-based image
31
+ // Consuming apps should copy images to public/hazo_auth/images/ or configure their own image_src
32
+ const imageSrc = get_config_value(section, "image_src", DEFAULT_LOGIN_IMAGE_PATH);
30
33
  const imageAlt = get_config_value(section, "image_alt", "Secure login illustration");
31
34
  const imageBackgroundColor = get_config_value(section, "image_background_color", "#f1f5f9");
32
35
  // Get OAuth configuration
@@ -1,4 +1,3 @@
1
- import type { StaticImageData } from "next/image";
2
1
  export type RegisterConfig = {
3
2
  showNameField: boolean;
4
3
  passwordRequirements: {
@@ -15,7 +14,7 @@ export type RegisterConfig = {
15
14
  returnHomePath: string;
16
15
  signInPath: string;
17
16
  signInLabel: string;
18
- imageSrc: string | StaticImageData;
17
+ imageSrc: string;
19
18
  imageAlt: string;
20
19
  imageBackgroundColor: string;
21
20
  };
@@ -1 +1 @@
1
- {"version":3,"file":"register_config.server.d.ts","sourceRoot":"","sources":["../../src/lib/register_config.server.ts"],"names":[],"mappings":"AASA,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,YAAY,CAAC;AAElD,MAAM,MAAM,cAAc,GAAG;IAC3B,aAAa,EAAE,OAAO,CAAC;IACvB,oBAAoB,EAAE;QACpB,cAAc,EAAE,MAAM,CAAC;QACvB,iBAAiB,EAAE,OAAO,CAAC;QAC3B,iBAAiB,EAAE,OAAO,CAAC;QAC3B,cAAc,EAAE,OAAO,CAAC;QACxB,eAAe,EAAE,OAAO,CAAC;KAC1B,CAAC;IACF,sBAAsB,EAAE,MAAM,CAAC;IAC/B,gBAAgB,EAAE,OAAO,CAAC;IAC1B,oBAAoB,EAAE,OAAO,CAAC;IAC9B,qBAAqB,EAAE,MAAM,CAAC;IAC9B,cAAc,EAAE,MAAM,CAAC;IACvB,UAAU,EAAE,MAAM,CAAC;IACnB,WAAW,EAAE,MAAM,CAAC;IACpB,QAAQ,EAAE,MAAM,GAAG,eAAe,CAAC;IACnC,QAAQ,EAAE,MAAM,CAAC;IACjB,oBAAoB,EAAE,MAAM,CAAC;CAC9B,CAAC;AAGF;;;;GAIG;AACH,wBAAgB,mBAAmB,IAAI,cAAc,CA6DpD"}
1
+ {"version":3,"file":"register_config.server.d.ts","sourceRoot":"","sources":["../../src/lib/register_config.server.ts"],"names":[],"mappings":"AAaA,MAAM,MAAM,cAAc,GAAG;IAC3B,aAAa,EAAE,OAAO,CAAC;IACvB,oBAAoB,EAAE;QACpB,cAAc,EAAE,MAAM,CAAC;QACvB,iBAAiB,EAAE,OAAO,CAAC;QAC3B,iBAAiB,EAAE,OAAO,CAAC;QAC3B,cAAc,EAAE,OAAO,CAAC;QACxB,eAAe,EAAE,OAAO,CAAC;KAC1B,CAAC;IACF,sBAAsB,EAAE,MAAM,CAAC;IAC/B,gBAAgB,EAAE,OAAO,CAAC;IAC1B,oBAAoB,EAAE,OAAO,CAAC;IAC9B,qBAAqB,EAAE,MAAM,CAAC;IAC9B,cAAc,EAAE,MAAM,CAAC;IACvB,UAAU,EAAE,MAAM,CAAC;IACnB,WAAW,EAAE,MAAM,CAAC;IACpB,QAAQ,EAAE,MAAM,CAAC;IACjB,QAAQ,EAAE,MAAM,CAAC;IACjB,oBAAoB,EAAE,MAAM,CAAC;CAC9B,CAAC;AAGF;;;;GAIG;AACH,wBAAgB,mBAAmB,IAAI,cAAc,CA8DpD"}
@@ -4,7 +4,10 @@ import { get_config_boolean, get_config_value, read_config_section } from "./con
4
4
  import { get_password_requirements_config } from "./password_requirements_config.server";
5
5
  import { get_already_logged_in_config } from "./already_logged_in_config.server";
6
6
  import { get_user_fields_config } from "./user_fields_config.server";
7
- import registerDefaultImage from "../assets/images/register_default.jpg";
7
+ // Default image path - consuming apps should either:
8
+ // 1. Configure their own image_src in hazo_auth_config.ini
9
+ // 2. Copy the default images from node_modules/hazo_auth/public/hazo_auth/images/ to their public folder
10
+ const DEFAULT_REGISTER_IMAGE_PATH = "/hazo_auth/images/register_default.jpg";
8
11
  // section: helpers
9
12
  /**
10
13
  * Reads register layout configuration from hazo_auth_config.ini file
@@ -27,9 +30,9 @@ export function get_register_config() {
27
30
  const signInPath = get_config_value("hazo_auth__register_layout", "sign_in_path", "/hazo_auth/login");
28
31
  const signInLabel = get_config_value("hazo_auth__register_layout", "sign_in_label", "Sign in");
29
32
  // Read image configuration
30
- // If not set in config, falls back to default image from assets
31
- const imageSrc = get_config_value("hazo_auth__register_layout", "image_src", "" // Empty string means not set in config
32
- ) || registerDefaultImage;
33
+ // If not set in config, falls back to default path-based image
34
+ // Consuming apps should copy images to public/hazo_auth/images/ or configure their own image_src
35
+ const imageSrc = get_config_value("hazo_auth__register_layout", "image_src", DEFAULT_REGISTER_IMAGE_PATH);
33
36
  const imageAlt = get_config_value("hazo_auth__register_layout", "image_alt", "Modern building representing user registration");
34
37
  const imageBackgroundColor = get_config_value("hazo_auth__register_layout", "image_background_color", "#e2e8f0");
35
38
  return {
@@ -1,4 +1,3 @@
1
- import type { StaticImageData } from "next/image";
2
1
  export type ResetPasswordConfig = {
3
2
  errorMessage: string;
4
3
  successMessage: string;
@@ -16,7 +15,7 @@ export type ResetPasswordConfig = {
16
15
  require_number: boolean;
17
16
  require_special: boolean;
18
17
  };
19
- imageSrc: string | StaticImageData;
18
+ imageSrc: string;
20
19
  imageAlt: string;
21
20
  imageBackgroundColor: string;
22
21
  };
@@ -1 +1 @@
1
- {"version":3,"file":"reset_password_config.server.d.ts","sourceRoot":"","sources":["../../src/lib/reset_password_config.server.ts"],"names":[],"mappings":"AAQA,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,YAAY,CAAC;AAElD,MAAM,MAAM,mBAAmB,GAAG;IAChC,YAAY,EAAE,MAAM,CAAC;IACrB,cAAc,EAAE,MAAM,CAAC;IACvB,SAAS,EAAE,MAAM,CAAC;IAClB,kBAAkB,EAAE,MAAM,CAAC;IAC3B,sBAAsB,EAAE,MAAM,CAAC;IAC/B,gBAAgB,EAAE,OAAO,CAAC;IAC1B,oBAAoB,EAAE,OAAO,CAAC;IAC9B,qBAAqB,EAAE,MAAM,CAAC;IAC9B,cAAc,EAAE,MAAM,CAAC;IACvB,oBAAoB,EAAE;QACpB,cAAc,EAAE,MAAM,CAAC;QACvB,iBAAiB,EAAE,OAAO,CAAC;QAC3B,iBAAiB,EAAE,OAAO,CAAC;QAC3B,cAAc,EAAE,OAAO,CAAC;QACxB,eAAe,EAAE,OAAO,CAAC;KAC1B,CAAC;IACF,QAAQ,EAAE,MAAM,GAAG,eAAe,CAAC;IACnC,QAAQ,EAAE,MAAM,CAAC;IACjB,oBAAoB,EAAE,MAAM,CAAC;CAC9B,CAAC;AAGF;;;;GAIG;AACH,wBAAgB,yBAAyB,IAAI,mBAAmB,CA+D/D"}
1
+ {"version":3,"file":"reset_password_config.server.d.ts","sourceRoot":"","sources":["../../src/lib/reset_password_config.server.ts"],"names":[],"mappings":"AAYA,MAAM,MAAM,mBAAmB,GAAG;IAChC,YAAY,EAAE,MAAM,CAAC;IACrB,cAAc,EAAE,MAAM,CAAC;IACvB,SAAS,EAAE,MAAM,CAAC;IAClB,kBAAkB,EAAE,MAAM,CAAC;IAC3B,sBAAsB,EAAE,MAAM,CAAC;IAC/B,gBAAgB,EAAE,OAAO,CAAC;IAC1B,oBAAoB,EAAE,OAAO,CAAC;IAC9B,qBAAqB,EAAE,MAAM,CAAC;IAC9B,cAAc,EAAE,MAAM,CAAC;IACvB,oBAAoB,EAAE;QACpB,cAAc,EAAE,MAAM,CAAC;QACvB,iBAAiB,EAAE,OAAO,CAAC;QAC3B,iBAAiB,EAAE,OAAO,CAAC;QAC3B,cAAc,EAAE,OAAO,CAAC;QACxB,eAAe,EAAE,OAAO,CAAC;KAC1B,CAAC;IACF,QAAQ,EAAE,MAAM,CAAC;IACjB,QAAQ,EAAE,MAAM,CAAC;IACjB,oBAAoB,EAAE,MAAM,CAAC;CAC9B,CAAC;AAGF;;;;GAIG;AACH,wBAAgB,yBAAyB,IAAI,mBAAmB,CAgE/D"}
@@ -3,7 +3,10 @@
3
3
  import { get_config_value } from "./config/config_loader.server";
4
4
  import { get_already_logged_in_config } from "./already_logged_in_config.server";
5
5
  import { get_password_requirements_config } from "./password_requirements_config.server";
6
- import resetPasswordDefaultImage from "../assets/images/reset_password_default.jpg";
6
+ // Default image path - consuming apps should either:
7
+ // 1. Configure their own image_src in hazo_auth_config.ini
8
+ // 2. Copy the default images from node_modules/hazo_auth/public/hazo_auth/images/ to their public folder
9
+ const DEFAULT_RESET_PASSWORD_IMAGE_PATH = "/hazo_auth/images/reset_password_default.jpg";
7
10
  // section: helpers
8
11
  /**
9
12
  * Reads reset password layout configuration from hazo_auth_config.ini file
@@ -25,9 +28,9 @@ export function get_reset_password_config() {
25
28
  // Get shared password requirements
26
29
  const passwordRequirements = get_password_requirements_config();
27
30
  // Read image configuration
28
- // If not set in config, falls back to default image from assets
29
- const imageSrc = get_config_value(section, "image_src", "" // Empty string means not set in config
30
- ) || resetPasswordDefaultImage;
31
+ // If not set in config, falls back to default path-based image
32
+ // Consuming apps should copy images to public/hazo_auth/images/ or configure their own image_src
33
+ const imageSrc = get_config_value(section, "image_src", DEFAULT_RESET_PASSWORD_IMAGE_PATH);
31
34
  const imageAlt = get_config_value(section, "image_alt", "Reset password illustration");
32
35
  const imageBackgroundColor = get_config_value(section, "image_background_color", "#f1f5f9");
33
36
  return {
@@ -68,7 +68,8 @@ enable_admin_ui = true
68
68
 
69
69
  [hazo_auth__register_layout]
70
70
  # Image configuration
71
- # image_src = /globe.svg
71
+ # Default: /hazo_auth/images/register_default.jpg (copy from node_modules/hazo_auth/public/hazo_auth)
72
+ # image_src = /hazo_auth/images/register_default.jpg
72
73
  # image_alt = Illustration of a globe representing secure authentication workflows
73
74
  # image_background_color = #e2e8f0
74
75
 
@@ -607,3 +608,45 @@ application_permission_list_defaults = admin_user_management,admin_role_manageme
607
608
  # - PATCH /api/hazo_auth/org_management/orgs - Update organization
608
609
  # - DELETE /api/hazo_auth/org_management/orgs?org_id=... - Soft delete (deactivate)
609
610
 
611
+ [hazo_auth__navbar]
612
+ # Navbar configuration for authentication pages (standalone layout mode only)
613
+ # The navbar appears at the top of auth pages when enabled
614
+
615
+ # Enable navbar on auth pages (true/false, default: true)
616
+ # enable_navbar = true
617
+
618
+ # Logo image path (empty = no logo shown)
619
+ # To show a logo, place an image in your public folder and set the path
620
+ # Example: logo_path = /logo.png
621
+ # logo_path =
622
+
623
+ # Logo dimensions in pixels (default: 32x32)
624
+ # logo_width = 32
625
+ # logo_height = 32
626
+
627
+ # Company/application name displayed next to logo (default: empty)
628
+ # company_name = My Company
629
+
630
+ # Home link configuration
631
+ # home_path = /
632
+ # home_label = Home
633
+ # show_home_link = true
634
+
635
+ # Styling (empty = inherit from theme)
636
+ # background_color =
637
+ # text_color =
638
+ # height = 64
639
+
640
+ # ============================================
641
+ # IMPORTANT: Default Images for Auth Pages
642
+ # ============================================
643
+ # The default images for login, register, forgot_password, reset_password,
644
+ # and verify_email pages are served from: /hazo_auth/images/
645
+ #
646
+ # To use these defaults, copy the images from the package to your public folder:
647
+ # cp -r node_modules/hazo_auth/public/hazo_auth public/
648
+ #
649
+ # Or configure your own images in the respective layout sections:
650
+ # [hazo_auth__login_layout]
651
+ # image_src = /your-custom-image.jpg
652
+
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "hazo_auth",
3
- "version": "4.6.0",
3
+ "version": "4.6.2",
4
4
  "description": "Zero-config authentication UI components for Next.js with RBAC, OAuth, multi-tenancy, and hierarchical scopes",
5
5
  "keywords": [
6
6
  "authentication",
@@ -167,6 +167,7 @@
167
167
  "bin/**/*",
168
168
  "cli-src/**/*",
169
169
  "public/profile_pictures/library/**/*",
170
+ "public/hazo_auth/images/**/*",
170
171
  "hazo_auth_config.example.ini",
171
172
  "hazo_notify_config.example.ini",
172
173
  "README.md",