hazo_auth 7.0.1 → 8.0.1

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 (274) hide show
  1. package/README.md +96 -319
  2. package/SETUP_CHECKLIST.md +59 -248
  3. package/cli-src/cli/generate.ts +1 -10
  4. package/cli-src/cli/validate.ts +0 -4
  5. package/cli-src/lib/auth/auth_types.ts +15 -21
  6. package/cli-src/lib/auth/hazo_get_auth.server.ts +19 -0
  7. package/cli-src/lib/auth/hazo_get_tenant_auth.server.ts +24 -25
  8. package/cli-src/lib/auth/index.ts +2 -2
  9. package/cli-src/lib/auth/nextauth_config.ts +27 -67
  10. package/cli-src/lib/auth/with_auth.server.ts +15 -15
  11. package/cli-src/lib/config/default_config.ts +8 -0
  12. package/cli-src/lib/cookies_config.server.ts +1 -1
  13. package/cli-src/lib/email_verification_config.server.ts +34 -0
  14. package/cli-src/lib/forgot_password_config.server.ts +34 -0
  15. package/cli-src/lib/legal/legal_docs_config.server.ts +61 -0
  16. package/cli-src/lib/legal/legal_docs_reader.server.ts +36 -0
  17. package/cli-src/lib/legal/legal_docs_service.ts +196 -0
  18. package/cli-src/lib/legal/legal_docs_types.ts +31 -0
  19. package/cli-src/lib/login_config.server.ts +29 -14
  20. package/cli-src/lib/my_settings_config.server.ts +3 -0
  21. package/cli-src/lib/oauth_config.server.ts +31 -57
  22. package/cli-src/lib/register_config.server.ts +35 -11
  23. package/cli-src/lib/reset_password_config.server.ts +31 -0
  24. package/cli-src/lib/services/email_template_manifest.ts +0 -17
  25. package/cli-src/lib/services/index.ts +2 -8
  26. package/cli-src/lib/services/oauth_service.ts +74 -128
  27. package/cli-src/lib/services/otp_service.ts +7 -2
  28. package/cli-src/lib/services/registration_service.ts +16 -1
  29. package/cli-src/lib/services/session_token_service.ts +0 -2
  30. package/config/hazo_auth_config.example.ini +41 -76
  31. package/dist/cli/generate.d.ts.map +1 -1
  32. package/dist/cli/generate.js +1 -10
  33. package/dist/cli/validate.d.ts.map +1 -1
  34. package/dist/cli/validate.js +0 -4
  35. package/dist/client.d.ts +1 -2
  36. package/dist/client.d.ts.map +1 -1
  37. package/dist/client.js +3 -1
  38. package/dist/components/layouts/create_firm/index.d.ts +8 -4
  39. package/dist/components/layouts/create_firm/index.d.ts.map +1 -1
  40. package/dist/components/layouts/create_firm/index.js +3 -3
  41. package/dist/components/layouts/email_verification/index.d.ts +5 -4
  42. package/dist/components/layouts/email_verification/index.d.ts.map +1 -1
  43. package/dist/components/layouts/email_verification/index.js +4 -4
  44. package/dist/components/layouts/forgot_password/index.d.ts +5 -4
  45. package/dist/components/layouts/forgot_password/index.d.ts.map +1 -1
  46. package/dist/components/layouts/forgot_password/index.js +2 -2
  47. package/dist/components/layouts/index.d.ts +1 -0
  48. package/dist/components/layouts/index.d.ts.map +1 -1
  49. package/dist/components/layouts/index.js +2 -0
  50. package/dist/components/layouts/legal/index.d.ts +5 -0
  51. package/dist/components/layouts/legal/index.d.ts.map +1 -0
  52. package/dist/components/layouts/legal/index.js +4 -0
  53. package/dist/components/layouts/legal/legal_acceptance_gate.d.ts +7 -0
  54. package/dist/components/layouts/legal/legal_acceptance_gate.d.ts.map +1 -0
  55. package/dist/components/layouts/legal/legal_acceptance_gate.js +84 -0
  56. package/dist/components/layouts/legal/legal_doc_checkbox_list.d.ts +9 -0
  57. package/dist/components/layouts/legal/legal_doc_checkbox_list.d.ts.map +1 -0
  58. package/dist/components/layouts/legal/legal_doc_checkbox_list.js +11 -0
  59. package/dist/components/layouts/legal/legal_doc_combined_view.d.ts +9 -0
  60. package/dist/components/layouts/legal/legal_doc_combined_view.d.ts.map +1 -0
  61. package/dist/components/layouts/legal/legal_doc_combined_view.js +11 -0
  62. package/dist/components/layouts/legal/legal_doc_drawer.d.ts +8 -0
  63. package/dist/components/layouts/legal/legal_doc_drawer.d.ts.map +1 -0
  64. package/dist/components/layouts/legal/legal_doc_drawer.js +55 -0
  65. package/dist/components/layouts/login/index.d.ts +13 -19
  66. package/dist/components/layouts/login/index.d.ts.map +1 -1
  67. package/dist/components/layouts/login/index.js +8 -11
  68. package/dist/components/layouts/otp/index.d.ts +5 -1
  69. package/dist/components/layouts/otp/index.d.ts.map +1 -1
  70. package/dist/components/layouts/otp/index.js +2 -2
  71. package/dist/components/layouts/register/hooks/use_register_form.d.ts +5 -1
  72. package/dist/components/layouts/register/hooks/use_register_form.d.ts.map +1 -1
  73. package/dist/components/layouts/register/hooks/use_register_form.js +25 -10
  74. package/dist/components/layouts/register/index.d.ts +11 -11
  75. package/dist/components/layouts/register/index.d.ts.map +1 -1
  76. package/dist/components/layouts/register/index.js +26 -7
  77. package/dist/components/layouts/reset_password/index.d.ts +5 -4
  78. package/dist/components/layouts/reset_password/index.d.ts.map +1 -1
  79. package/dist/components/layouts/reset_password/index.js +5 -5
  80. package/dist/components/layouts/shared/components/already_logged_in_guard.d.ts +5 -3
  81. package/dist/components/layouts/shared/components/already_logged_in_guard.d.ts.map +1 -1
  82. package/dist/components/layouts/shared/components/already_logged_in_guard.js +2 -2
  83. package/dist/components/layouts/shared/components/facebook_sign_in_button.d.ts +2 -6
  84. package/dist/components/layouts/shared/components/facebook_sign_in_button.d.ts.map +1 -1
  85. package/dist/components/layouts/shared/components/facebook_sign_in_button.js +11 -13
  86. package/dist/components/layouts/shared/components/sidebar_layout_wrapper.d.ts.map +1 -1
  87. package/dist/components/layouts/shared/components/sidebar_layout_wrapper.js +3 -8
  88. package/dist/components/layouts/shared/components/two_column_auth_layout.d.ts +6 -3
  89. package/dist/components/layouts/shared/components/two_column_auth_layout.d.ts.map +1 -1
  90. package/dist/components/layouts/shared/components/two_column_auth_layout.js +5 -8
  91. package/dist/components/layouts/shared/index.d.ts +2 -0
  92. package/dist/components/layouts/shared/index.d.ts.map +1 -1
  93. package/dist/components/layouts/shared/index.js +1 -0
  94. package/dist/components/layouts/user_management/index.d.ts.map +1 -1
  95. package/dist/components/layouts/user_management/index.js +84 -9
  96. package/dist/components/ui/button.d.ts +1 -1
  97. package/dist/components/ui/input-otp.d.ts +2 -2
  98. package/dist/components/ui/sheet.d.ts +1 -1
  99. package/dist/index.d.ts +2 -1
  100. package/dist/index.d.ts.map +1 -1
  101. package/dist/lib/auth/auth_types.d.ts +14 -13
  102. package/dist/lib/auth/auth_types.d.ts.map +1 -1
  103. package/dist/lib/auth/auth_types.js +0 -10
  104. package/dist/lib/auth/hazo_get_auth.server.d.ts.map +1 -1
  105. package/dist/lib/auth/hazo_get_auth.server.js +19 -0
  106. package/dist/lib/auth/hazo_get_tenant_auth.server.d.ts +7 -8
  107. package/dist/lib/auth/hazo_get_tenant_auth.server.d.ts.map +1 -1
  108. package/dist/lib/auth/hazo_get_tenant_auth.server.js +22 -23
  109. package/dist/lib/auth/index.d.ts +2 -2
  110. package/dist/lib/auth/index.d.ts.map +1 -1
  111. package/dist/lib/auth/nextauth_config.d.ts +0 -10
  112. package/dist/lib/auth/nextauth_config.d.ts.map +1 -1
  113. package/dist/lib/auth/nextauth_config.js +23 -52
  114. package/dist/lib/auth/with_auth.server.d.ts +13 -13
  115. package/dist/lib/auth/with_auth.server.d.ts.map +1 -1
  116. package/dist/lib/auth/with_auth.server.js +2 -2
  117. package/dist/lib/config/default_config.d.ts +16 -0
  118. package/dist/lib/config/default_config.d.ts.map +1 -1
  119. package/dist/lib/config/default_config.js +8 -0
  120. package/dist/lib/cookies_config.server.d.ts +1 -1
  121. package/dist/lib/cookies_config.server.js +1 -1
  122. package/dist/lib/email_verification_config.server.d.ts +3 -0
  123. package/dist/lib/email_verification_config.server.d.ts.map +1 -1
  124. package/dist/lib/email_verification_config.server.js +15 -0
  125. package/dist/lib/forgot_password_config.server.d.ts +3 -0
  126. package/dist/lib/forgot_password_config.server.d.ts.map +1 -1
  127. package/dist/lib/forgot_password_config.server.js +15 -0
  128. package/dist/lib/legal/legal_docs_config.server.d.ts +22 -0
  129. package/dist/lib/legal/legal_docs_config.server.d.ts.map +1 -0
  130. package/dist/lib/legal/legal_docs_config.server.js +52 -0
  131. package/dist/lib/legal/legal_docs_reader.server.d.ts +15 -0
  132. package/dist/lib/legal/legal_docs_reader.server.d.ts.map +1 -0
  133. package/dist/lib/legal/legal_docs_reader.server.js +24 -0
  134. package/dist/lib/legal/legal_docs_service.d.ts +49 -0
  135. package/dist/lib/legal/legal_docs_service.d.ts.map +1 -0
  136. package/dist/lib/legal/legal_docs_service.js +140 -0
  137. package/dist/lib/legal/legal_docs_types.d.ts +25 -0
  138. package/dist/lib/legal/legal_docs_types.d.ts.map +1 -0
  139. package/dist/lib/legal/legal_docs_types.js +2 -0
  140. package/dist/lib/login_config.server.d.ts +3 -6
  141. package/dist/lib/login_config.server.d.ts.map +1 -1
  142. package/dist/lib/login_config.server.js +11 -7
  143. package/dist/lib/my_settings_config.server.d.ts +1 -0
  144. package/dist/lib/my_settings_config.server.d.ts.map +1 -1
  145. package/dist/lib/my_settings_config.server.js +2 -0
  146. package/dist/lib/oauth_config.server.d.ts +8 -17
  147. package/dist/lib/oauth_config.server.d.ts.map +1 -1
  148. package/dist/lib/oauth_config.server.js +10 -25
  149. package/dist/lib/register_config.server.d.ts +5 -2
  150. package/dist/lib/register_config.server.d.ts.map +1 -1
  151. package/dist/lib/register_config.server.js +15 -4
  152. package/dist/lib/reset_password_config.server.d.ts +3 -0
  153. package/dist/lib/reset_password_config.server.d.ts.map +1 -1
  154. package/dist/lib/reset_password_config.server.js +13 -0
  155. package/dist/lib/services/email_template_manifest.d.ts.map +1 -1
  156. package/dist/lib/services/email_template_manifest.js +0 -17
  157. package/dist/lib/services/index.d.ts +0 -2
  158. package/dist/lib/services/index.d.ts.map +1 -1
  159. package/dist/lib/services/index.js +0 -1
  160. package/dist/lib/services/oauth_service.d.ts +11 -22
  161. package/dist/lib/services/oauth_service.d.ts.map +1 -1
  162. package/dist/lib/services/oauth_service.js +63 -96
  163. package/dist/lib/services/otp_service.d.ts +1 -1
  164. package/dist/lib/services/otp_service.d.ts.map +1 -1
  165. package/dist/lib/services/otp_service.js +6 -1
  166. package/dist/lib/services/registration_service.d.ts +5 -0
  167. package/dist/lib/services/registration_service.d.ts.map +1 -1
  168. package/dist/lib/services/registration_service.js +6 -0
  169. package/dist/lib/services/session_token_service.d.ts +0 -2
  170. package/dist/lib/services/session_token_service.d.ts.map +1 -1
  171. package/dist/lib/services/session_token_service.js +0 -2
  172. package/dist/page_components/create_firm.d.ts +1 -13
  173. package/dist/page_components/create_firm.d.ts.map +1 -1
  174. package/dist/page_components/create_firm.js +6 -10
  175. package/dist/page_components/forgot_password.d.ts +4 -1
  176. package/dist/page_components/forgot_password.d.ts.map +1 -1
  177. package/dist/page_components/forgot_password.js +6 -2
  178. package/dist/page_components/index.d.ts +0 -5
  179. package/dist/page_components/index.d.ts.map +1 -1
  180. package/dist/page_components/index.js +0 -5
  181. package/dist/page_components/login.d.ts +4 -1
  182. package/dist/page_components/login.d.ts.map +1 -1
  183. package/dist/page_components/login.js +6 -2
  184. package/dist/page_components/register.d.ts +4 -1
  185. package/dist/page_components/register.d.ts.map +1 -1
  186. package/dist/page_components/register.js +6 -2
  187. package/dist/page_components/reset_password.d.ts +4 -1
  188. package/dist/page_components/reset_password.d.ts.map +1 -1
  189. package/dist/page_components/reset_password.js +6 -2
  190. package/dist/page_components/verify_email.d.ts +4 -1
  191. package/dist/page_components/verify_email.d.ts.map +1 -1
  192. package/dist/page_components/verify_email.js +6 -2
  193. package/dist/server/routes/assets.d.ts +8 -0
  194. package/dist/server/routes/assets.d.ts.map +1 -0
  195. package/dist/server/routes/assets.js +38 -0
  196. package/dist/server/routes/consent_me.d.ts +4 -0
  197. package/dist/server/routes/consent_me.d.ts.map +1 -0
  198. package/dist/server/routes/consent_me.js +15 -0
  199. package/dist/server/routes/index.d.ts +9 -4
  200. package/dist/server/routes/index.d.ts.map +1 -1
  201. package/dist/server/routes/index.js +13 -5
  202. package/dist/server/routes/legal_docs_accept.d.ts +3 -0
  203. package/dist/server/routes/legal_docs_accept.d.ts.map +1 -0
  204. package/dist/server/routes/legal_docs_accept.js +43 -0
  205. package/dist/server/routes/legal_docs_get.d.ts +3 -0
  206. package/dist/server/routes/legal_docs_get.d.ts.map +1 -0
  207. package/dist/server/routes/legal_docs_get.js +49 -0
  208. package/dist/server/routes/legal_docs_publish.d.ts +3 -0
  209. package/dist/server/routes/legal_docs_publish.d.ts.map +1 -0
  210. package/dist/server/routes/legal_docs_publish.js +35 -0
  211. package/dist/server/routes/me.d.ts.map +1 -1
  212. package/dist/server/routes/me.js +1 -43
  213. package/dist/server/routes/oauth_facebook_callback.d.ts +1 -1
  214. package/dist/server/routes/oauth_facebook_callback.d.ts.map +1 -1
  215. package/dist/server/routes/oauth_facebook_callback.js +8 -1
  216. package/dist/server/routes/oauth_google_callback.js +1 -1
  217. package/dist/server/routes/otp/verify.js +2 -2
  218. package/dist/server/routes/register.d.ts.map +1 -1
  219. package/dist/server/routes/register.js +26 -0
  220. package/dist/server/routes/strings_defaults.d.ts +4 -0
  221. package/dist/server/routes/strings_defaults.d.ts.map +1 -0
  222. package/dist/server/routes/strings_defaults.js +7 -0
  223. package/dist/server/routes/user_management_users.d.ts +11 -0
  224. package/dist/server/routes/user_management_users.d.ts.map +1 -1
  225. package/dist/server/routes/user_management_users.js +94 -0
  226. package/dist/server-lib.d.ts +0 -3
  227. package/dist/server-lib.d.ts.map +1 -1
  228. package/dist/server-lib.js +0 -2
  229. package/dist/server_pages/forgot_password.d.ts +18 -14
  230. package/dist/server_pages/forgot_password.d.ts.map +1 -1
  231. package/dist/server_pages/forgot_password.js +14 -12
  232. package/dist/server_pages/forgot_password_client_wrapper.d.ts +8 -7
  233. package/dist/server_pages/forgot_password_client_wrapper.d.ts.map +1 -1
  234. package/dist/server_pages/forgot_password_client_wrapper.js +2 -2
  235. package/dist/server_pages/index.d.ts +2 -0
  236. package/dist/server_pages/index.d.ts.map +1 -1
  237. package/dist/server_pages/index.js +1 -0
  238. package/dist/server_pages/login.d.ts +22 -23
  239. package/dist/server_pages/login.d.ts.map +1 -1
  240. package/dist/server_pages/login.js +27 -14
  241. package/dist/server_pages/login_client_wrapper.d.ts +9 -10
  242. package/dist/server_pages/login_client_wrapper.d.ts.map +1 -1
  243. package/dist/server_pages/login_client_wrapper.js +2 -2
  244. package/dist/server_pages/my_settings.d.ts +1 -3
  245. package/dist/server_pages/my_settings.d.ts.map +1 -1
  246. package/dist/server_pages/my_settings.js +2 -9
  247. package/dist/server_pages/register.d.ts +17 -20
  248. package/dist/server_pages/register.d.ts.map +1 -1
  249. package/dist/server_pages/register.js +20 -15
  250. package/dist/server_pages/register_client_wrapper.d.ts +8 -10
  251. package/dist/server_pages/register_client_wrapper.d.ts.map +1 -1
  252. package/dist/server_pages/register_client_wrapper.js +2 -2
  253. package/dist/server_pages/reset_password.d.ts +16 -11
  254. package/dist/server_pages/reset_password.d.ts.map +1 -1
  255. package/dist/server_pages/reset_password.js +14 -10
  256. package/dist/server_pages/reset_password_client_wrapper.d.ts +8 -7
  257. package/dist/server_pages/reset_password_client_wrapper.d.ts.map +1 -1
  258. package/dist/server_pages/reset_password_client_wrapper.js +2 -2
  259. package/dist/server_pages/verify_email.d.ts +18 -12
  260. package/dist/server_pages/verify_email.d.ts.map +1 -1
  261. package/dist/server_pages/verify_email.js +13 -11
  262. package/dist/server_pages/verify_email_client_wrapper.d.ts +8 -7
  263. package/dist/server_pages/verify_email_client_wrapper.d.ts.map +1 -1
  264. package/dist/server_pages/verify_email_client_wrapper.js +2 -2
  265. package/dist/strings.d.ts +2 -0
  266. package/dist/strings.d.ts.map +1 -0
  267. package/dist/strings.js +3 -0
  268. package/dist/themes/index.d.ts +0 -1
  269. package/dist/themes/index.d.ts.map +1 -1
  270. package/dist/themes/index.js +1 -1
  271. package/package.json +30 -61
  272. package/dist/themes/preset_indigo_sunset.d.ts +0 -3
  273. package/dist/themes/preset_indigo_sunset.d.ts.map +0 -1
  274. package/dist/themes/preset_indigo_sunset.js +0 -20
@@ -5,9 +5,9 @@ import "server-only";
5
5
  // section: imports
6
6
  import { get_forgot_password_config } from "../lib/forgot_password_config.server.js";
7
7
  import { ForgotPasswordClientWrapper } from "./forgot_password_client_wrapper.js";
8
+ import { readStrings } from "../strings.js";
8
9
  import { AuthPageShell } from "../components/layouts/shared/components/auth_page_shell.js";
9
10
  import { DEFAULT_FORGOT_PASSWORD } from "../lib/config/default_config.js";
10
- import { DEFAULT_STRINGS, readStrings } from "../strings.js";
11
11
  // section: component
12
12
  /**
13
13
  * Zero-config ForgotPasswordPage server component
@@ -29,22 +29,24 @@ import { DEFAULT_STRINGS, readStrings } from "../strings.js";
29
29
  *
30
30
  * Zero configuration required - works out of the box!
31
31
  *
32
- * @param props - Optional navigation customization props
32
+ * @param props - Optional visual and navigation customization props
33
33
  * @returns Server-rendered forgot password page
34
34
  */
35
- export default function ForgotPasswordPage(props) {
36
- var _a, _b, _c;
37
- const { sign_in_path = DEFAULT_FORGOT_PASSWORD.loginPath, sign_in_label = DEFAULT_FORGOT_PASSWORD.loginLabel, theme, title, subtitle, ctaText, } = props !== null && props !== void 0 ? props : {};
38
- // Resolve strings: prop > HazoAuthStringsProvider > DEFAULT_STRINGS
35
+ export default function ForgotPasswordPage({ image_src, image_alt, image_background_color, sign_in_path = DEFAULT_FORGOT_PASSWORD.loginPath, sign_in_label = DEFAULT_FORGOT_PASSWORD.loginLabel, } = {}) {
36
+ // Load configuration from INI file (with defaults including asset images)
37
+ const config = get_forgot_password_config();
39
38
  const strings = readStrings();
40
39
  const fp_strings = strings.forgot_password;
41
- const resolved_title = (_a = title !== null && title !== void 0 ? title : fp_strings.title) !== null && _a !== void 0 ? _a : DEFAULT_STRINGS.forgot_password.title;
42
- const resolved_subtitle = (_b = subtitle !== null && subtitle !== void 0 ? subtitle : fp_strings.subtitle) !== null && _b !== void 0 ? _b : DEFAULT_STRINGS.forgot_password.subtitle;
43
- const resolved_cta = (_c = ctaText !== null && ctaText !== void 0 ? ctaText : fp_strings.ctaText) !== null && _c !== void 0 ? _c : DEFAULT_STRINGS.forgot_password.ctaText;
44
- // Load configuration from INI file (with defaults)
45
- const config = get_forgot_password_config();
40
+ // Use props if provided, otherwise fall back to config (which includes default asset image)
41
+ const finalImageSrc = image_src || config.imageSrc;
42
+ const finalImageAlt = image_alt || config.imageAlt;
43
+ const finalImageBackgroundColor = image_background_color || config.imageBackgroundColor;
46
44
  // Pass serializable config to client wrapper, wrapped in AuthPageShell for navbar support
47
- return (_jsx(AuthPageShell, { children: _jsx(ForgotPasswordClientWrapper, { sign_in_path: sign_in_path, sign_in_label: sign_in_label, alreadyLoggedInMessage: config.alreadyLoggedInMessage, showLogoutButton: config.showLogoutButton, showReturnHomeButton: config.showReturnHomeButton, returnHomeButtonLabel: config.returnHomeButtonLabel, returnHomePath: config.returnHomePath, theme: theme, labels: { heading: resolved_title, subHeading: resolved_subtitle, submitButton: resolved_cta } }) }));
45
+ return (_jsx(AuthPageShell, { children: _jsx(ForgotPasswordClientWrapper, { image_src: finalImageSrc, image_alt: finalImageAlt, image_background_color: finalImageBackgroundColor, sign_in_path: sign_in_path, sign_in_label: sign_in_label, alreadyLoggedInMessage: config.alreadyLoggedInMessage, showLogoutButton: config.showLogoutButton, showReturnHomeButton: config.showReturnHomeButton, returnHomeButtonLabel: config.returnHomeButtonLabel, returnHomePath: config.returnHomePath, labels: {
46
+ heading: fp_strings.title,
47
+ subHeading: fp_strings.subtitle,
48
+ submitButton: fp_strings.ctaText,
49
+ } }) }));
48
50
  }
49
51
  // Named export for direct imports
50
52
  export { ForgotPasswordPage };
@@ -1,16 +1,17 @@
1
1
  import type { ForgotPasswordConfig } from "../lib/forgot_password_config.server";
2
- import type { HazoAuthTheme } from "../theme/theme_types";
3
- export type ForgotPasswordClientWrapperProps = ForgotPasswordConfig & {
2
+ import type { LayoutLabelOverrides } from "../components/layouts/shared/config/layout_customization";
3
+ import type { StaticImageData } from "next/image";
4
+ export type ForgotPasswordClientWrapperProps = Omit<ForgotPasswordConfig, 'imageSrc' | 'imageAlt' | 'imageBackgroundColor'> & {
5
+ image_src: string | StaticImageData;
6
+ image_alt: string;
7
+ image_background_color: string;
4
8
  sign_in_path: string;
5
9
  sign_in_label: string;
6
- /** Optional theme passed through to ForgotPasswordLayout → TwoColumnAuthLayout. */
7
- theme?: HazoAuthTheme;
8
- /** Optional label overrides (heading, subHeading, submitButton) */
9
- labels?: import("../components/layouts/shared/config/layout_customization").LayoutLabelOverrides;
10
+ labels?: LayoutLabelOverrides;
10
11
  };
11
12
  /**
12
13
  * Client wrapper for ForgotPasswordLayout
13
14
  * Initializes hazo_connect data client on client side and passes config from server
14
15
  */
15
- export declare function ForgotPasswordClientWrapper({ sign_in_path, sign_in_label, alreadyLoggedInMessage, showLogoutButton, showReturnHomeButton, returnHomeButtonLabel, returnHomePath, theme, labels, }: ForgotPasswordClientWrapperProps): import("react/jsx-runtime").JSX.Element;
16
+ export declare function ForgotPasswordClientWrapper({ image_src, image_alt, image_background_color, sign_in_path, sign_in_label, alreadyLoggedInMessage, showLogoutButton, showReturnHomeButton, returnHomeButtonLabel, returnHomePath, labels, }: ForgotPasswordClientWrapperProps): import("react/jsx-runtime").JSX.Element;
16
17
  //# sourceMappingURL=forgot_password_client_wrapper.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"forgot_password_client_wrapper.d.ts","sourceRoot":"","sources":["../../src/server_pages/forgot_password_client_wrapper.tsx"],"names":[],"mappings":"AASA,OAAO,KAAK,EAAE,oBAAoB,EAAE,MAAM,sCAAsC,CAAC;AACjF,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,sBAAsB,CAAC;AAG1D,MAAM,MAAM,gCAAgC,GAAG,oBAAoB,GAAG;IACpE,YAAY,EAAE,MAAM,CAAC;IACrB,aAAa,EAAE,MAAM,CAAC;IACtB,mFAAmF;IACnF,KAAK,CAAC,EAAE,aAAa,CAAC;IACtB,mEAAmE;IACnE,MAAM,CAAC,EAAE,OAAO,0DAA0D,EAAE,oBAAoB,CAAC;CAClG,CAAC;AAGF;;;GAGG;AACH,wBAAgB,2BAA2B,CAAC,EAC1C,YAAY,EACZ,aAAa,EACb,sBAAsB,EACtB,gBAAgB,EAChB,oBAAoB,EACpB,qBAAqB,EACrB,cAAc,EACd,KAAK,EACL,MAAM,GACP,EAAE,gCAAgC,2CAkClC"}
1
+ {"version":3,"file":"forgot_password_client_wrapper.d.ts","sourceRoot":"","sources":["../../src/server_pages/forgot_password_client_wrapper.tsx"],"names":[],"mappings":"AASA,OAAO,KAAK,EAAE,oBAAoB,EAAE,MAAM,sCAAsC,CAAC;AACjF,OAAO,KAAK,EAAE,oBAAoB,EAAE,MAAM,0DAA0D,CAAC;AAGrG,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,YAAY,CAAC;AAElD,MAAM,MAAM,gCAAgC,GAAG,IAAI,CAAC,oBAAoB,EAAE,UAAU,GAAG,UAAU,GAAG,sBAAsB,CAAC,GAAG;IAC5H,SAAS,EAAE,MAAM,GAAG,eAAe,CAAC;IACpC,SAAS,EAAE,MAAM,CAAC;IAClB,sBAAsB,EAAE,MAAM,CAAC;IAC/B,YAAY,EAAE,MAAM,CAAC;IACrB,aAAa,EAAE,MAAM,CAAC;IACtB,MAAM,CAAC,EAAE,oBAAoB,CAAC;CAC/B,CAAC;AAGF;;;GAGG;AACH,wBAAgB,2BAA2B,CAAC,EAC1C,SAAS,EACT,SAAS,EACT,sBAAsB,EACtB,YAAY,EACZ,aAAa,EACb,sBAAsB,EACtB,gBAAgB,EAChB,oBAAoB,EACpB,qBAAqB,EACrB,cAAc,EACd,MAAM,GACP,EAAE,gCAAgC,2CAoClC"}
@@ -11,7 +11,7 @@ import { create_sqlite_hazo_connect } from "../lib/hazo_connect_setup.js";
11
11
  * Client wrapper for ForgotPasswordLayout
12
12
  * Initializes hazo_connect data client on client side and passes config from server
13
13
  */
14
- export function ForgotPasswordClientWrapper({ sign_in_path, sign_in_label, alreadyLoggedInMessage, showLogoutButton, showReturnHomeButton, returnHomeButtonLabel, returnHomePath, theme, labels, }) {
14
+ export function ForgotPasswordClientWrapper({ image_src, image_alt, image_background_color, sign_in_path, sign_in_label, alreadyLoggedInMessage, showLogoutButton, showReturnHomeButton, returnHomeButtonLabel, returnHomePath, labels, }) {
15
15
  const [dataClient, setDataClient] = useState(null);
16
16
  useEffect(() => {
17
17
  // Initialize hazo_connect on client side
@@ -23,5 +23,5 @@ export function ForgotPasswordClientWrapper({ sign_in_path, sign_in_label, alrea
23
23
  if (!dataClient) {
24
24
  return (_jsx("div", { className: "cls_forgot_password_page_loading flex items-center justify-center min-h-screen", children: _jsx("div", { className: "text-slate-600 animate-pulse", children: "Loading..." }) }));
25
25
  }
26
- return (_jsx(ForgotPasswordLayout, { data_client: dataClient, sign_in_path: sign_in_path, sign_in_label: sign_in_label, alreadyLoggedInMessage: alreadyLoggedInMessage, showLogoutButton: showLogoutButton, showReturnHomeButton: showReturnHomeButton, returnHomeButtonLabel: returnHomeButtonLabel, returnHomePath: returnHomePath, theme: theme, labels: labels }));
26
+ return (_jsx(ForgotPasswordLayout, { image_src: image_src, image_alt: image_alt, image_background_color: image_background_color, data_client: dataClient, sign_in_path: sign_in_path, sign_in_label: sign_in_label, alreadyLoggedInMessage: alreadyLoggedInMessage, showLogoutButton: showLogoutButton, showReturnHomeButton: showReturnHomeButton, returnHomeButtonLabel: returnHomeButtonLabel, returnHomePath: returnHomePath, labels: labels }));
27
27
  }
@@ -10,4 +10,6 @@ export type { ForgotPasswordPageProps } from "./forgot_password";
10
10
  export type { ResetPasswordPageProps } from "./reset_password";
11
11
  export type { VerifyEmailPageProps } from "./verify_email";
12
12
  export type { MySettingsPageProps } from "./my_settings";
13
+ export { default as OTPPage } from "./otp.js";
14
+ export type { OTPPageProps } from "./otp";
13
15
  //# sourceMappingURL=index.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/server_pages/index.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,OAAO,IAAI,SAAS,EAAE,MAAM,SAAS,CAAC;AAC/C,OAAO,EAAE,OAAO,IAAI,YAAY,EAAE,MAAM,YAAY,CAAC;AACrD,OAAO,EAAE,OAAO,IAAI,kBAAkB,EAAE,MAAM,mBAAmB,CAAC;AAClE,OAAO,EAAE,OAAO,IAAI,iBAAiB,EAAE,MAAM,kBAAkB,CAAC;AAChE,OAAO,EAAE,OAAO,IAAI,eAAe,EAAE,MAAM,gBAAgB,CAAC;AAC5D,OAAO,EAAE,OAAO,IAAI,cAAc,EAAE,MAAM,eAAe,CAAC;AAG1D,YAAY,EAAE,cAAc,EAAE,MAAM,SAAS,CAAC;AAC9C,YAAY,EAAE,iBAAiB,EAAE,MAAM,YAAY,CAAC;AACpD,YAAY,EAAE,uBAAuB,EAAE,MAAM,mBAAmB,CAAC;AACjE,YAAY,EAAE,sBAAsB,EAAE,MAAM,kBAAkB,CAAC;AAC/D,YAAY,EAAE,oBAAoB,EAAE,MAAM,gBAAgB,CAAC;AAC3D,YAAY,EAAE,mBAAmB,EAAE,MAAM,eAAe,CAAC"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/server_pages/index.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,OAAO,IAAI,SAAS,EAAE,MAAM,SAAS,CAAC;AAC/C,OAAO,EAAE,OAAO,IAAI,YAAY,EAAE,MAAM,YAAY,CAAC;AACrD,OAAO,EAAE,OAAO,IAAI,kBAAkB,EAAE,MAAM,mBAAmB,CAAC;AAClE,OAAO,EAAE,OAAO,IAAI,iBAAiB,EAAE,MAAM,kBAAkB,CAAC;AAChE,OAAO,EAAE,OAAO,IAAI,eAAe,EAAE,MAAM,gBAAgB,CAAC;AAC5D,OAAO,EAAE,OAAO,IAAI,cAAc,EAAE,MAAM,eAAe,CAAC;AAG1D,YAAY,EAAE,cAAc,EAAE,MAAM,SAAS,CAAC;AAC9C,YAAY,EAAE,iBAAiB,EAAE,MAAM,YAAY,CAAC;AACpD,YAAY,EAAE,uBAAuB,EAAE,MAAM,mBAAmB,CAAC;AACjE,YAAY,EAAE,sBAAsB,EAAE,MAAM,kBAAkB,CAAC;AAC/D,YAAY,EAAE,oBAAoB,EAAE,MAAM,gBAAgB,CAAC;AAC3D,YAAY,EAAE,mBAAmB,EAAE,MAAM,eAAe,CAAC;AACzD,OAAO,EAAE,OAAO,IAAI,OAAO,EAAE,MAAM,OAAO,CAAC;AAC3C,YAAY,EAAE,YAAY,EAAE,MAAM,OAAO,CAAC"}
@@ -5,3 +5,4 @@ export { default as ForgotPasswordPage } from "./forgot_password.js";
5
5
  export { default as ResetPasswordPage } from "./reset_password.js";
6
6
  export { default as VerifyEmailPage } from "./verify_email.js";
7
7
  export { default as MySettingsPage } from "./my_settings.js";
8
+ export { default as OTPPage } from "./otp.js";
@@ -1,34 +1,33 @@
1
1
  import "server-only";
2
- import type React from "react";
2
+ import type { StaticImageData } from "next/image";
3
3
  export type LoginPageProps = {
4
+ /**
5
+ * Optional image source for the visual panel
6
+ * Defaults from hazo_auth_config.ini or package default image
7
+ */
8
+ image_src?: string | StaticImageData;
9
+ /**
10
+ * Optional image alt text
11
+ * Defaults to "Secure login illustration"
12
+ */
13
+ image_alt?: string;
14
+ /**
15
+ * Optional image background color
16
+ * Defaults to "#f1f5f9"
17
+ */
18
+ image_background_color?: string;
4
19
  /**
5
20
  * Layout mode (default: `"two_column"`).
6
21
  * - `"two_column"` — full server-rendered page with the package's
7
- * TwoColumnAuthLayout wrapped in the standalone AuthPageShell.
8
- * Layout appearance is now controlled by the theme (split or centered).
22
+ * TwoColumnAuthLayout (image on the left, form on the right) wrapped in
23
+ * the standalone AuthPageShell. Backwards-compatible.
9
24
  * - `"form_only"` — emits just the form content (no AuthPageShell, no
10
25
  * TwoColumnAuthLayout). Use when wrapping the form in your own brand
11
- * chrome.
26
+ * chrome (e.g. a custom split-panel layout or an existing app shell).
27
+ * `image_src` / `image_alt` / `image_background_color` are ignored in
28
+ * this mode.
12
29
  */
13
30
  layout?: "two_column" | "form_only";
14
- /**
15
- * Optional theme that controls visual appearance and layout mode.
16
- * When `theme.layout` is `"split"`, activates the two-column split layout
17
- * with the brand panel on the left.
18
- */
19
- theme?: import("../theme/theme_types").HazoAuthTheme;
20
- /** Override the page heading. Falls back to HazoAuthStringsProvider → DEFAULT_STRINGS. */
21
- title?: string;
22
- /** Override the page subtitle. Falls back to HazoAuthStringsProvider → DEFAULT_STRINGS. */
23
- subtitle?: string;
24
- /** Override the submit button label. Falls back to HazoAuthStringsProvider → DEFAULT_STRINGS. */
25
- ctaText?: string;
26
- /**
27
- * Optional legal text rendered below the form.
28
- * Accepts a string or JSX (e.g. `<a href="/tos">Terms of Service</a>`).
29
- * Falls back to HazoAuthStringsProvider → DEFAULT_STRINGS.
30
- */
31
- legalText?: React.ReactNode;
32
31
  };
33
32
  /**
34
33
  * Zero-config LoginPage server component
@@ -53,6 +52,6 @@ export type LoginPageProps = {
53
52
  * @param props - Optional visual customization props
54
53
  * @returns Server-rendered login page
55
54
  */
56
- export default function LoginPage(props: LoginPageProps): import("react/jsx-runtime").JSX.Element;
55
+ export default function LoginPage({ image_src, image_alt, image_background_color, layout, }?: LoginPageProps): import("react/jsx-runtime").JSX.Element;
57
56
  export { LoginPage };
58
57
  //# sourceMappingURL=login.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"login.d.ts","sourceRoot":"","sources":["../../src/server_pages/login.tsx"],"names":[],"mappings":"AAEA,OAAO,aAAa,CAAC;AAIrB,OAAO,KAAK,KAAK,MAAM,OAAO,CAAC;AAQ/B,MAAM,MAAM,cAAc,GAAG;IAC3B;;;;;;;;OAQG;IACH,MAAM,CAAC,EAAE,YAAY,GAAG,WAAW,CAAC;IACpC;;;;OAIG;IACH,KAAK,CAAC,EAAE,OAAO,sBAAsB,EAAE,aAAa,CAAC;IACrD,0FAA0F;IAC1F,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,2FAA2F;IAC3F,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,iGAAiG;IACjG,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB;;;;OAIG;IACH,SAAS,CAAC,EAAE,KAAK,CAAC,SAAS,CAAC;CAC7B,CAAC;AAGF;;;;;;;;;;;;;;;;;;;;;;GAsBG;AACH,MAAM,CAAC,OAAO,UAAU,SAAS,CAAC,KAAK,EAAE,cAAc,2CAkEtD;AAGD,OAAO,EAAE,SAAS,EAAE,CAAC"}
1
+ {"version":3,"file":"login.d.ts","sourceRoot":"","sources":["../../src/server_pages/login.tsx"],"names":[],"mappings":"AAEA,OAAO,aAAa,CAAC;AAUrB,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,YAAY,CAAC;AAElD,MAAM,MAAM,cAAc,GAAG;IAC3B;;;OAGG;IACH,SAAS,CAAC,EAAE,MAAM,GAAG,eAAe,CAAC;IAErC;;;OAGG;IACH,SAAS,CAAC,EAAE,MAAM,CAAC;IAEnB;;;OAGG;IACH,sBAAsB,CAAC,EAAE,MAAM,CAAC;IAEhC;;;;;;;;;;OAUG;IACH,MAAM,CAAC,EAAE,YAAY,GAAG,WAAW,CAAC;CACrC,CAAC;AAGF;;;;;;;;;;;;;;;;;;;;;;GAsBG;AACH,MAAM,CAAC,OAAO,UAAU,SAAS,CAAC,EAChC,SAAS,EACT,SAAS,EACT,sBAAsB,EACtB,MAAqB,GACtB,GAAE,cAAmB,2CAsErB;AAGD,OAAO,EAAE,SAAS,EAAE,CAAC"}
@@ -2,12 +2,13 @@ import { jsx as _jsx, Fragment as _Fragment, jsxs as _jsxs } from "react/jsx-run
2
2
  // file_description: Zero-config LoginPage server component - drop in and use with no configuration required
3
3
  // section: server-only-guard
4
4
  import "server-only";
5
+ // section: imports
5
6
  import { get_login_config } from "../lib/login_config.server.js";
6
7
  import { get_navbar_config } from "../lib/navbar_config.server.js";
7
8
  import { LoginClientWrapper } from "./login_client_wrapper.js";
9
+ import { readStrings } from "../strings.js";
8
10
  import { AuthPageShell } from "../components/layouts/shared/components/auth_page_shell.js";
9
11
  import { FloatingHomeLink } from "../components/layouts/shared/components/floating_home_link.js";
10
- import { DEFAULT_STRINGS, readStrings } from "../strings.js";
11
12
  // section: component
12
13
  /**
13
14
  * Zero-config LoginPage server component
@@ -32,26 +33,38 @@ import { DEFAULT_STRINGS, readStrings } from "../strings.js";
32
33
  * @param props - Optional visual customization props
33
34
  * @returns Server-rendered login page
34
35
  */
35
- export default function LoginPage(props) {
36
- var _a, _b, _c;
37
- const { layout = "two_column", theme, title, subtitle, ctaText, legalText, } = props !== null && props !== void 0 ? props : {};
38
- // Resolve strings: prop > HazoAuthStringsProvider > DEFAULT_STRINGS
36
+ export default function LoginPage({ image_src, image_alt, image_background_color, layout = "two_column", } = {}) {
37
+ // Load configuration from INI file (with defaults including asset images)
38
+ const config = get_login_config();
39
+ // Resolve strings for heading/subheading/ctaText
39
40
  const strings = readStrings();
40
41
  const login_strings = strings.login;
41
- const resolved_title = (_a = title !== null && title !== void 0 ? title : login_strings.title) !== null && _a !== void 0 ? _a : DEFAULT_STRINGS.login.title;
42
- const resolved_subtitle = (_b = subtitle !== null && subtitle !== void 0 ? subtitle : login_strings.subtitle) !== null && _b !== void 0 ? _b : DEFAULT_STRINGS.login.subtitle;
43
- const resolved_cta = (_c = ctaText !== null && ctaText !== void 0 ? ctaText : login_strings.ctaText) !== null && _c !== void 0 ? _c : DEFAULT_STRINGS.login.ctaText;
44
- const resolved_legal = legalText !== undefined ? legalText : (login_strings.legalText || undefined);
45
- // Load configuration from INI file (with defaults)
46
- const config = get_login_config();
47
- const wrapper = (_jsx(LoginClientWrapper, { redirectRoute: config.redirectRoute, successMessage: config.successMessage, alreadyLoggedInMessage: config.alreadyLoggedInMessage, showLogoutButton: config.showLogoutButton, showReturnHomeButton: config.showReturnHomeButton, returnHomeButtonLabel: config.returnHomeButtonLabel, returnHomePath: config.returnHomePath, forgotPasswordPath: config.forgotPasswordPath, forgotPasswordLabel: config.forgotPasswordLabel, createAccountPath: config.createAccountPath, createAccountLabel: config.createAccountLabel, showCreateAccountLink: config.showCreateAccountLink, oauth: {
42
+ // Use props if provided, otherwise fall back to config (which includes default asset image)
43
+ const finalImageSrc = image_src || config.imageSrc;
44
+ const finalImageAlt = image_alt || config.imageAlt;
45
+ const finalImageBackgroundColor = image_background_color || config.imageBackgroundColor;
46
+ const wrapper = (_jsx(LoginClientWrapper, { image_src: finalImageSrc, image_alt: finalImageAlt, image_background_color: finalImageBackgroundColor, redirectRoute: config.redirectRoute, successMessage: config.successMessage, alreadyLoggedInMessage: config.alreadyLoggedInMessage, showLogoutButton: config.showLogoutButton, showReturnHomeButton: config.showReturnHomeButton, returnHomeButtonLabel: config.returnHomeButtonLabel, returnHomePath: config.returnHomePath, forgotPasswordPath: config.forgotPasswordPath, forgotPasswordLabel: config.forgotPasswordLabel, createAccountPath: config.createAccountPath, createAccountLabel: config.createAccountLabel, showCreateAccountLink: config.showCreateAccountLink, oauth: {
48
47
  enable_google: config.oauth.enable_google,
49
48
  enable_email_password: config.oauth.enable_email_password,
50
49
  google_button_text: config.oauth.google_button_text,
51
50
  oauth_divider_text: config.oauth.oauth_divider_text,
52
- enable_facebook: config.oauth.enable_facebook,
51
+ enable_facebook_oauth: config.oauth.enable_facebook_oauth,
53
52
  facebook_button_text: config.oauth.facebook_button_text,
54
- }, otpSigninEnabled: config.otpSigninEnabled, otpSigninLabel: config.otpSigninLabel, otpSigninHref: config.otpSigninHref, layout: layout, theme: theme, labels: { heading: resolved_title, subHeading: resolved_subtitle, submitButton: resolved_cta }, legalText: resolved_legal }));
53
+ }, layout: layout, labels: {
54
+ heading: login_strings.title,
55
+ subHeading: login_strings.subtitle,
56
+ submitButton: login_strings.ctaText,
57
+ } }));
58
+ // form_only mode: skip AuthPageShell so the consumer's own page chrome
59
+ // (e.g. a split-panel AuthLayout) hosts the form without our standalone
60
+ // wrapper interfering. Two-column mode keeps the existing AuthPageShell
61
+ // wrap for navbar/centering support.
62
+ //
63
+ // The navbar config's home_link is also surfaced here in form_only mode
64
+ // so users mid-auth-flow always have a way out — without this, the only
65
+ // exit is the browser back button. Rendered as a fixed-position "Back to
66
+ // home" pill (top-left). Disabled by setting `[hazo_auth__navbar]
67
+ // show_home_link = false` or by hiding it CSS-side at the consumer.
55
68
  if (layout === "form_only") {
56
69
  const navbar = get_navbar_config();
57
70
  return (_jsxs(_Fragment, { children: [navbar.show_home_link && (_jsx(FloatingHomeLink, { path: navbar.home_path, label: navbar.home_label })), wrapper] }));
@@ -1,24 +1,23 @@
1
- import React from "react";
2
1
  import type { LoginConfig } from "../lib/login_config.server";
3
2
  import type { OAuthLayoutConfig } from "../components/layouts/login/index";
4
- import type { HazoAuthTheme } from "../theme/theme_types";
5
- export type LoginClientWrapperProps = Omit<LoginConfig, 'oauth' | 'showCreateAccountLink'> & {
3
+ import type { LayoutLabelOverrides } from "../components/layouts/shared/config/layout_customization";
4
+ import type { StaticImageData } from "next/image";
5
+ export type LoginClientWrapperProps = Omit<LoginConfig, 'imageSrc' | 'imageAlt' | 'imageBackgroundColor' | 'oauth' | 'showCreateAccountLink'> & {
6
+ image_src?: string | StaticImageData;
7
+ image_alt?: string;
8
+ image_background_color?: string;
6
9
  /** Show/hide "Create account" link (default: true) */
7
10
  showCreateAccountLink?: boolean;
8
11
  /** OAuth configuration */
9
12
  oauth?: OAuthLayoutConfig;
10
13
  /** Layout mode — see LoginLayoutProps.layout. Default `"two_column"`. */
11
14
  layout?: "two_column" | "form_only";
12
- /** Optional theme passed through to LoginLayout TwoColumnAuthLayout. */
13
- theme?: HazoAuthTheme;
14
- /** Optional label overrides (heading, subHeading, submitButton) */
15
- labels?: import("../components/layouts/shared/config/layout_customization").LayoutLabelOverrides;
16
- /** Optional legal text rendered below the form (accepts ReactNode for links/JSX) */
17
- legalText?: React.ReactNode;
15
+ /** String overrides for page heading, subheading, and submit button. */
16
+ labels?: LayoutLabelOverrides;
18
17
  };
19
18
  /**
20
19
  * Client wrapper for LoginLayout
21
20
  * Initializes hazo_connect data client on client side and passes config from server
22
21
  */
23
- export declare function LoginClientWrapper({ redirectRoute, successMessage, alreadyLoggedInMessage, showLogoutButton, showReturnHomeButton, returnHomeButtonLabel, returnHomePath, forgotPasswordPath, forgotPasswordLabel, createAccountPath, createAccountLabel, showCreateAccountLink, oauth, otpSigninEnabled, otpSigninLabel, otpSigninHref, layout, theme, labels, legalText, }: LoginClientWrapperProps): import("react/jsx-runtime").JSX.Element;
22
+ export declare function LoginClientWrapper({ image_src, image_alt, image_background_color, redirectRoute, successMessage, alreadyLoggedInMessage, showLogoutButton, showReturnHomeButton, returnHomeButtonLabel, returnHomePath, forgotPasswordPath, forgotPasswordLabel, createAccountPath, createAccountLabel, showCreateAccountLink, oauth, layout, labels, }: LoginClientWrapperProps): import("react/jsx-runtime").JSX.Element;
24
23
  //# sourceMappingURL=login_client_wrapper.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"login_client_wrapper.d.ts","sourceRoot":"","sources":["../../src/server_pages/login_client_wrapper.tsx"],"names":[],"mappings":"AAIA,OAAO,KAA8B,MAAM,OAAO,CAAC;AAKnD,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,4BAA4B,CAAC;AAC9D,OAAO,KAAK,EAAE,iBAAiB,EAAE,MAAM,mCAAmC,CAAC;AAC3E,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,sBAAsB,CAAC;AAG1D,MAAM,MAAM,uBAAuB,GAAG,IAAI,CAAC,WAAW,EAAE,OAAO,GAAG,uBAAuB,CAAC,GAAG;IAC3F,sDAAsD;IACtD,qBAAqB,CAAC,EAAE,OAAO,CAAC;IAChC,0BAA0B;IAC1B,KAAK,CAAC,EAAE,iBAAiB,CAAC;IAC1B,yEAAyE;IACzE,MAAM,CAAC,EAAE,YAAY,GAAG,WAAW,CAAC;IACpC,0EAA0E;IAC1E,KAAK,CAAC,EAAE,aAAa,CAAC;IACtB,mEAAmE;IACnE,MAAM,CAAC,EAAE,OAAO,0DAA0D,EAAE,oBAAoB,CAAC;IACjG,oFAAoF;IACpF,SAAS,CAAC,EAAE,KAAK,CAAC,SAAS,CAAC;CAC7B,CAAC;AAGF;;;GAGG;AACH,wBAAgB,kBAAkB,CAAC,EACjC,aAAa,EACb,cAAc,EACd,sBAAsB,EACtB,gBAAgB,EAChB,oBAAoB,EACpB,qBAAqB,EACrB,cAAc,EACd,kBAAkB,EAClB,mBAAmB,EACnB,iBAAiB,EACjB,kBAAkB,EAClB,qBAA4B,EAC5B,KAAK,EACL,gBAAwB,EACxB,cAA0C,EAC1C,aAAgC,EAChC,MAAqB,EACrB,KAAK,EACL,MAAM,EACN,SAAS,GACV,EAAE,uBAAuB,2CA6CzB"}
1
+ {"version":3,"file":"login_client_wrapper.d.ts","sourceRoot":"","sources":["../../src/server_pages/login_client_wrapper.tsx"],"names":[],"mappings":"AASA,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,4BAA4B,CAAC;AAC9D,OAAO,KAAK,EAAE,iBAAiB,EAAE,MAAM,mCAAmC,CAAC;AAC3E,OAAO,KAAK,EAAE,oBAAoB,EAAE,MAAM,0DAA0D,CAAC;AAGrG,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,YAAY,CAAC;AAElD,MAAM,MAAM,uBAAuB,GAAG,IAAI,CAAC,WAAW,EAAE,UAAU,GAAG,UAAU,GAAG,sBAAsB,GAAG,OAAO,GAAG,uBAAuB,CAAC,GAAG;IAC9I,SAAS,CAAC,EAAE,MAAM,GAAG,eAAe,CAAC;IACrC,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,sBAAsB,CAAC,EAAE,MAAM,CAAC;IAChC,sDAAsD;IACtD,qBAAqB,CAAC,EAAE,OAAO,CAAC;IAChC,0BAA0B;IAC1B,KAAK,CAAC,EAAE,iBAAiB,CAAC;IAC1B,yEAAyE;IACzE,MAAM,CAAC,EAAE,YAAY,GAAG,WAAW,CAAC;IACpC,wEAAwE;IACxE,MAAM,CAAC,EAAE,oBAAoB,CAAC;CAC/B,CAAC;AAGF;;;GAGG;AACH,wBAAgB,kBAAkB,CAAC,EACjC,SAAS,EACT,SAAS,EACT,sBAAsB,EACtB,aAAa,EACb,cAAc,EACd,sBAAsB,EACtB,gBAAgB,EAChB,oBAAoB,EACpB,qBAAqB,EACrB,cAAc,EACd,kBAAkB,EAClB,mBAAmB,EACnB,iBAAiB,EACjB,kBAAkB,EAClB,qBAA4B,EAC5B,KAAK,EACL,MAAqB,EACrB,MAAM,GACP,EAAE,uBAAuB,2CA2CzB"}
@@ -11,7 +11,7 @@ import { create_sqlite_hazo_connect } from "../lib/hazo_connect_setup.js";
11
11
  * Client wrapper for LoginLayout
12
12
  * Initializes hazo_connect data client on client side and passes config from server
13
13
  */
14
- export function LoginClientWrapper({ redirectRoute, successMessage, alreadyLoggedInMessage, showLogoutButton, showReturnHomeButton, returnHomeButtonLabel, returnHomePath, forgotPasswordPath, forgotPasswordLabel, createAccountPath, createAccountLabel, showCreateAccountLink = true, oauth, otpSigninEnabled = false, otpSigninLabel = "Sign in with email code", otpSigninHref = "/hazo_auth/otp", layout = "two_column", theme, labels, legalText, }) {
14
+ export function LoginClientWrapper({ image_src, image_alt, image_background_color, redirectRoute, successMessage, alreadyLoggedInMessage, showLogoutButton, showReturnHomeButton, returnHomeButtonLabel, returnHomePath, forgotPasswordPath, forgotPasswordLabel, createAccountPath, createAccountLabel, showCreateAccountLink = true, oauth, layout = "two_column", labels, }) {
15
15
  const [dataClient, setDataClient] = useState(null);
16
16
  useEffect(() => {
17
17
  // Initialize hazo_connect on client side
@@ -23,5 +23,5 @@ export function LoginClientWrapper({ redirectRoute, successMessage, alreadyLogge
23
23
  if (!dataClient) {
24
24
  return (_jsx("div", { className: "cls_login_page_loading flex items-center justify-center min-h-screen", children: _jsx("div", { className: "text-slate-600 animate-pulse", children: "Loading..." }) }));
25
25
  }
26
- return (_jsx(LoginLayout, { data_client: dataClient, redirectRoute: redirectRoute, successMessage: successMessage, alreadyLoggedInMessage: alreadyLoggedInMessage, showLogoutButton: showLogoutButton, showReturnHomeButton: showReturnHomeButton, returnHomeButtonLabel: returnHomeButtonLabel, returnHomePath: returnHomePath, forgot_password_path: forgotPasswordPath, forgot_password_label: forgotPasswordLabel, create_account_path: createAccountPath, create_account_label: createAccountLabel, show_create_account_link: showCreateAccountLink, oauth: oauth, otp_signin_enabled: otpSigninEnabled, otp_signin_label: otpSigninLabel, otp_signin_href: otpSigninHref, layout: layout, theme: theme, labels: labels, legalText: legalText }));
26
+ return (_jsx(LoginLayout, { image_src: image_src, image_alt: image_alt, image_background_color: image_background_color, data_client: dataClient, redirectRoute: redirectRoute, successMessage: successMessage, alreadyLoggedInMessage: alreadyLoggedInMessage, showLogoutButton: showLogoutButton, showReturnHomeButton: showReturnHomeButton, returnHomeButtonLabel: returnHomeButtonLabel, returnHomePath: returnHomePath, forgot_password_path: forgotPasswordPath, forgot_password_label: forgotPasswordLabel, create_account_path: createAccountPath, create_account_label: createAccountLabel, show_create_account_link: showCreateAccountLink, oauth: oauth, layout: layout, labels: labels }));
27
27
  }
@@ -4,8 +4,6 @@ export type MySettingsPageProps = {
4
4
  * Optional className for custom styling
5
5
  */
6
6
  className?: string;
7
- /** Override the page heading. Falls back to HazoAuthStringsProvider → DEFAULT_STRINGS. */
8
- title?: string;
9
7
  };
10
8
  /**
11
9
  * Zero-config MySettingsPage server component
@@ -52,6 +50,6 @@ export type MySettingsPageProps = {
52
50
  * @param props - Optional className for custom styling
53
51
  * @returns Server-rendered my settings component
54
52
  */
55
- export default function MySettingsPage(props: MySettingsPageProps): import("react/jsx-runtime").JSX.Element;
53
+ export default function MySettingsPage({ className, }?: MySettingsPageProps): import("react/jsx-runtime").JSX.Element;
56
54
  export { MySettingsPage };
57
55
  //# sourceMappingURL=my_settings.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"my_settings.d.ts","sourceRoot":"","sources":["../../src/server_pages/my_settings.tsx"],"names":[],"mappings":"AAEA,OAAO,aAAa,CAAC;AASrB,MAAM,MAAM,mBAAmB,GAAG;IAChC;;OAEG;IACH,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,0FAA0F;IAC1F,KAAK,CAAC,EAAE,MAAM,CAAC;CAChB,CAAC;AAGF;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GA4CG;AACH,MAAM,CAAC,OAAO,UAAU,cAAc,CAAC,KAAK,EAAE,mBAAmB,2CAuChE;AAGD,OAAO,EAAE,cAAc,EAAE,CAAC"}
1
+ {"version":3,"file":"my_settings.d.ts","sourceRoot":"","sources":["../../src/server_pages/my_settings.tsx"],"names":[],"mappings":"AAEA,OAAO,aAAa,CAAC;AAQrB,MAAM,MAAM,mBAAmB,GAAG;IAChC;;OAEG;IACH,SAAS,CAAC,EAAE,MAAM,CAAC;CACpB,CAAC;AAGF;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GA4CG;AACH,MAAM,CAAC,OAAO,UAAU,cAAc,CAAC,EACrC,SAAS,GACV,GAAE,mBAAwB,2CAgC1B;AAGD,OAAO,EAAE,cAAc,EAAE,CAAC"}
@@ -6,7 +6,6 @@ import "server-only";
6
6
  import { get_my_settings_config } from "../lib/my_settings_config.server.js";
7
7
  import MySettingsLayout from "../components/layouts/my_settings/index.js";
8
8
  import { AuthPageShell } from "../components/layouts/shared/components/auth_page_shell.js";
9
- import { DEFAULT_STRINGS, readStrings } from "../strings.js";
10
9
  // section: component
11
10
  /**
12
11
  * Zero-config MySettingsPage server component
@@ -53,17 +52,11 @@ import { DEFAULT_STRINGS, readStrings } from "../strings.js";
53
52
  * @param props - Optional className for custom styling
54
53
  * @returns Server-rendered my settings component
55
54
  */
56
- export default function MySettingsPage(props) {
57
- var _a;
58
- const { className, title } = props !== null && props !== void 0 ? props : {};
59
- // Resolve strings: prop > HazoAuthStringsProvider > DEFAULT_STRINGS
60
- const strings = readStrings();
61
- const ms_strings = strings.my_settings;
62
- const resolved_title = (_a = title !== null && title !== void 0 ? title : ms_strings.title) !== null && _a !== void 0 ? _a : DEFAULT_STRINGS.my_settings.title;
55
+ export default function MySettingsPage({ className, } = {}) {
63
56
  // Load configuration from INI file (with defaults)
64
57
  const config = get_my_settings_config();
65
58
  // Render layout with all server-initialized configuration, wrapped in AuthPageShell for navbar support
66
- return (_jsx(AuthPageShell, { children: _jsx(MySettingsLayout, { className: className, password_requirements: config.passwordRequirements, profilePicture: config.profilePicture, userFields: config.userFields, unauthorizedMessage: config.unauthorizedMessage, loginButtonLabel: config.loginButtonLabel, loginPath: config.loginPath, heading: resolved_title, subHeading: config.subHeading, profilePhotoLabel: config.profilePhotoLabel, profilePhotoRecommendation: config.profilePhotoRecommendation, uploadPhotoButtonLabel: config.uploadPhotoButtonLabel, removePhotoButtonLabel: config.removePhotoButtonLabel, profileInformationLabel: config.profileInformationLabel, passwordLabel: config.passwordLabel, currentPasswordLabel: config.currentPasswordLabel, newPasswordLabel: config.newPasswordLabel, confirmPasswordLabel: config.confirmPasswordLabel, messages: config.messages, uiSizes: config.uiSizes, fileTypes: config.fileTypes }) }));
59
+ return (_jsx(AuthPageShell, { children: _jsx(MySettingsLayout, { className: className, password_requirements: config.passwordRequirements, profilePicture: config.profilePicture, userFields: config.userFields, unauthorizedMessage: config.unauthorizedMessage, loginButtonLabel: config.loginButtonLabel, loginPath: config.loginPath, heading: config.heading, subHeading: config.subHeading, profilePhotoLabel: config.profilePhotoLabel, profilePhotoRecommendation: config.profilePhotoRecommendation, uploadPhotoButtonLabel: config.uploadPhotoButtonLabel, removePhotoButtonLabel: config.removePhotoButtonLabel, profileInformationLabel: config.profileInformationLabel, passwordLabel: config.passwordLabel, currentPasswordLabel: config.currentPasswordLabel, newPasswordLabel: config.newPasswordLabel, confirmPasswordLabel: config.confirmPasswordLabel, messages: config.messages, uiSizes: config.uiSizes, fileTypes: config.fileTypes }) }));
67
60
  }
68
61
  // Named export for direct imports
69
62
  export { MySettingsPage };
@@ -1,30 +1,27 @@
1
1
  import "server-only";
2
- import type React from "react";
2
+ import type { StaticImageData } from "next/image";
3
3
  export type RegisterPageProps = {
4
4
  /**
5
- * Layout mode (default: `"two_column"`). See `LoginPageProps.layout` for the
6
- * full description. `"form_only"` skips both AuthPageShell and
7
- * TwoColumnAuthLayout so the consumer's brand chrome can wrap the form.
5
+ * Optional image source for the visual panel
6
+ * Defaults from hazo_auth_config.ini or package default image
8
7
  */
9
- layout?: "two_column" | "form_only";
8
+ image_src?: string | StaticImageData;
9
+ /**
10
+ * Optional image alt text
11
+ * Defaults from hazo_auth_config.ini or "Modern building representing user registration"
12
+ */
13
+ image_alt?: string;
10
14
  /**
11
- * Optional theme that controls visual appearance and layout mode.
12
- * When `theme.layout` is `"split"`, activates the two-column split layout
13
- * with the brand panel on the left.
15
+ * Optional image background color
16
+ * Defaults from hazo_auth_config.ini or "#e2e8f0"
14
17
  */
15
- theme?: import("../theme/theme_types").HazoAuthTheme;
16
- /** Override the page heading. Falls back to HazoAuthStringsProvider → DEFAULT_STRINGS. */
17
- title?: string;
18
- /** Override the page subtitle. Falls back to HazoAuthStringsProvider → DEFAULT_STRINGS. */
19
- subtitle?: string;
20
- /** Override the submit button label. Falls back to HazoAuthStringsProvider → DEFAULT_STRINGS. */
21
- ctaText?: string;
18
+ image_background_color?: string;
22
19
  /**
23
- * Optional legal text rendered below the form.
24
- * Accepts a string or JSX (e.g. `<a href="/tos">Terms of Service</a>`).
25
- * Falls back to HazoAuthStringsProvider DEFAULT_STRINGS.
20
+ * Layout mode (default: `"two_column"`). See `LoginPageProps.layout` for the
21
+ * full description. `"form_only"` skips both AuthPageShell and
22
+ * TwoColumnAuthLayout so the consumer's brand chrome can wrap the form.
26
23
  */
27
- legalText?: React.ReactNode;
24
+ layout?: "two_column" | "form_only";
28
25
  };
29
26
  /**
30
27
  * Zero-config RegisterPage server component
@@ -51,6 +48,6 @@ export type RegisterPageProps = {
51
48
  * @param props - Optional visual customization props
52
49
  * @returns Server-rendered register page
53
50
  */
54
- export default function RegisterPage(props: RegisterPageProps): import("react/jsx-runtime").JSX.Element;
51
+ export default function RegisterPage({ image_src, image_alt, image_background_color, layout, }?: RegisterPageProps): import("react/jsx-runtime").JSX.Element;
55
52
  export { RegisterPage };
56
53
  //# sourceMappingURL=register.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"register.d.ts","sourceRoot":"","sources":["../../src/server_pages/register.tsx"],"names":[],"mappings":"AAEA,OAAO,aAAa,CAAC;AAIrB,OAAO,KAAK,KAAK,MAAM,OAAO,CAAC;AAQ/B,MAAM,MAAM,iBAAiB,GAAG;IAC9B;;;;OAIG;IACH,MAAM,CAAC,EAAE,YAAY,GAAG,WAAW,CAAC;IACpC;;;;OAIG;IACH,KAAK,CAAC,EAAE,OAAO,sBAAsB,EAAE,aAAa,CAAC;IACrD,0FAA0F;IAC1F,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,2FAA2F;IAC3F,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,iGAAiG;IACjG,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB;;;;OAIG;IACH,SAAS,CAAC,EAAE,KAAK,CAAC,SAAS,CAAC;CAC7B,CAAC;AAIF;;;;;;;;;;;;;;;;;;;;;;;;GAwBG;AACH,MAAM,CAAC,OAAO,UAAU,YAAY,CAAC,KAAK,EAAE,iBAAiB,2CA4D5D;AAGD,OAAO,EAAE,YAAY,EAAE,CAAC"}
1
+ {"version":3,"file":"register.d.ts","sourceRoot":"","sources":["../../src/server_pages/register.tsx"],"names":[],"mappings":"AAEA,OAAO,aAAa,CAAC;AAUrB,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,YAAY,CAAC;AAElD,MAAM,MAAM,iBAAiB,GAAG;IAC9B;;;OAGG;IACH,SAAS,CAAC,EAAE,MAAM,GAAG,eAAe,CAAC;IAErC;;;OAGG;IACH,SAAS,CAAC,EAAE,MAAM,CAAC;IAEnB;;;OAGG;IACH,sBAAsB,CAAC,EAAE,MAAM,CAAC;IAEhC;;;;OAIG;IACH,MAAM,CAAC,EAAE,YAAY,GAAG,WAAW,CAAC;CACrC,CAAC;AAIF;;;;;;;;;;;;;;;;;;;;;;;;GAwBG;AACH,MAAM,CAAC,OAAO,UAAU,YAAY,CAAC,EACnC,SAAS,EACT,SAAS,EACT,sBAAsB,EACtB,MAAqB,GACtB,GAAE,iBAAsB,2CA2DxB;AAGD,OAAO,EAAE,YAAY,EAAE,CAAC"}
@@ -2,12 +2,13 @@ import { jsx as _jsx, Fragment as _Fragment, jsxs as _jsxs } from "react/jsx-run
2
2
  // file_description: Zero-config RegisterPage server component - drop in and use with no configuration required
3
3
  // section: server-only-guard
4
4
  import "server-only";
5
+ // section: imports
5
6
  import { get_register_config } from "../lib/register_config.server.js";
6
7
  import { get_navbar_config } from "../lib/navbar_config.server.js";
7
8
  import { RegisterClientWrapper } from "./register_client_wrapper.js";
9
+ import { readStrings } from "../strings.js";
8
10
  import { AuthPageShell } from "../components/layouts/shared/components/auth_page_shell.js";
9
11
  import { FloatingHomeLink } from "../components/layouts/shared/components/floating_home_link.js";
10
- import { DEFAULT_STRINGS, readStrings } from "../strings.js";
11
12
  // section: component
12
13
  /**
13
14
  * Zero-config RegisterPage server component
@@ -34,26 +35,30 @@ import { DEFAULT_STRINGS, readStrings } from "../strings.js";
34
35
  * @param props - Optional visual customization props
35
36
  * @returns Server-rendered register page
36
37
  */
37
- export default function RegisterPage(props) {
38
- var _a, _b, _c;
39
- const { layout = "two_column", theme, title, subtitle, ctaText, legalText, } = props !== null && props !== void 0 ? props : {};
40
- // Resolve strings: prop > HazoAuthStringsProvider > DEFAULT_STRINGS
41
- const strings = readStrings();
42
- const register_strings = strings.register;
43
- const resolved_title = (_a = title !== null && title !== void 0 ? title : register_strings.title) !== null && _a !== void 0 ? _a : DEFAULT_STRINGS.register.title;
44
- const resolved_subtitle = (_b = subtitle !== null && subtitle !== void 0 ? subtitle : register_strings.subtitle) !== null && _b !== void 0 ? _b : DEFAULT_STRINGS.register.subtitle;
45
- const resolved_cta = (_c = ctaText !== null && ctaText !== void 0 ? ctaText : register_strings.ctaText) !== null && _c !== void 0 ? _c : DEFAULT_STRINGS.register.ctaText;
46
- const resolved_legal = legalText !== undefined ? legalText : (register_strings.legalText || undefined);
47
- // Load configuration from INI file (with defaults)
38
+ export default function RegisterPage({ image_src, image_alt, image_background_color, layout = "two_column", } = {}) {
39
+ // Load configuration from INI file (with defaults including asset images)
48
40
  const config = get_register_config();
49
- const wrapper = (_jsx(RegisterClientWrapper, { showNameField: config.showNameField, passwordRequirements: config.passwordRequirements, alreadyLoggedInMessage: config.alreadyLoggedInMessage, showLogoutButton: config.showLogoutButton, showReturnHomeButton: config.showReturnHomeButton, returnHomeButtonLabel: config.returnHomeButtonLabel, returnHomePath: config.returnHomePath, signInPath: config.signInPath, signInLabel: config.signInLabel, oauth: {
41
+ const strings = readStrings();
42
+ const reg_strings = strings.register;
43
+ // Use props if provided, otherwise fall back to config (which includes default asset image)
44
+ const finalImageSrc = image_src || config.imageSrc;
45
+ const finalImageAlt = image_alt || config.imageAlt;
46
+ const finalImageBackgroundColor = image_background_color || config.imageBackgroundColor;
47
+ const wrapper = (_jsx(RegisterClientWrapper, { image_src: finalImageSrc, image_alt: finalImageAlt, image_background_color: finalImageBackgroundColor, showNameField: config.showNameField, passwordRequirements: config.passwordRequirements, alreadyLoggedInMessage: config.alreadyLoggedInMessage, showLogoutButton: config.showLogoutButton, showReturnHomeButton: config.showReturnHomeButton, returnHomeButtonLabel: config.returnHomeButtonLabel, returnHomePath: config.returnHomePath, signInPath: config.signInPath, signInLabel: config.signInLabel, oauth: {
50
48
  enable_google: config.oauth.enable_google,
51
49
  enable_email_password: config.oauth.enable_email_password,
52
50
  google_button_text: config.oauth.google_button_text,
53
51
  oauth_divider_text: config.oauth.oauth_divider_text,
54
- enable_facebook: config.oauth.enable_facebook,
52
+ enable_facebook_oauth: config.oauth.enable_facebook_oauth,
55
53
  facebook_button_text: config.oauth.facebook_button_text,
56
- }, layout: layout, theme: theme, labels: { heading: resolved_title, subHeading: resolved_subtitle, submitButton: resolved_cta }, legalText: resolved_legal }));
54
+ }, layout: layout, labels: {
55
+ heading: reg_strings.title,
56
+ subHeading: reg_strings.subtitle,
57
+ submitButton: reg_strings.ctaText,
58
+ } }));
59
+ // form_only mode: skip AuthPageShell so the consumer's own page chrome
60
+ // hosts the form. See LoginPage for the full rationale, including the
61
+ // FloatingHomeLink rendering rule below.
57
62
  if (layout === "form_only") {
58
63
  const navbar = get_navbar_config();
59
64
  return (_jsxs(_Fragment, { children: [navbar.show_home_link && (_jsx(FloatingHomeLink, { path: navbar.home_path, label: navbar.home_label })), wrapper] }));
@@ -1,22 +1,20 @@
1
- import React from "react";
2
1
  import type { RegisterConfig } from "../lib/register_config.server";
3
2
  import type { OAuthLayoutConfig } from "../components/layouts/register/index";
4
- import type { HazoAuthTheme } from "../theme/theme_types";
5
- export type RegisterClientWrapperProps = Omit<RegisterConfig, 'oauth'> & {
3
+ import type { LayoutLabelOverrides } from "../components/layouts/shared/config/layout_customization";
4
+ import type { StaticImageData } from "next/image";
5
+ export type RegisterClientWrapperProps = Omit<RegisterConfig, 'imageSrc' | 'imageAlt' | 'imageBackgroundColor' | 'oauth'> & {
6
+ image_src?: string | StaticImageData;
7
+ image_alt?: string;
8
+ image_background_color?: string;
6
9
  /** OAuth configuration */
7
10
  oauth?: OAuthLayoutConfig;
8
11
  /** Layout mode — see RegisterLayoutProps.layout. Default `"two_column"`. */
9
12
  layout?: "two_column" | "form_only";
10
- /** Optional theme passed through to RegisterLayout → TwoColumnAuthLayout. */
11
- theme?: HazoAuthTheme;
12
- /** Optional label overrides (heading, subHeading, submitButton) */
13
- labels?: import("../components/layouts/shared/config/layout_customization").LayoutLabelOverrides;
14
- /** Optional legal text rendered below the form (accepts ReactNode for links/JSX) */
15
- legalText?: React.ReactNode;
13
+ labels?: LayoutLabelOverrides;
16
14
  };
17
15
  /**
18
16
  * Client wrapper for RegisterLayout
19
17
  * Initializes hazo_connect data client on client side and passes config from server
20
18
  */
21
- export declare function RegisterClientWrapper({ showNameField, passwordRequirements, alreadyLoggedInMessage, showLogoutButton, showReturnHomeButton, returnHomeButtonLabel, returnHomePath, signInPath, signInLabel, oauth, layout, theme, labels, legalText, }: RegisterClientWrapperProps): import("react/jsx-runtime").JSX.Element;
19
+ export declare function RegisterClientWrapper({ image_src, image_alt, image_background_color, showNameField, passwordRequirements, alreadyLoggedInMessage, showLogoutButton, showReturnHomeButton, returnHomeButtonLabel, returnHomePath, signInPath, signInLabel, oauth, layout, labels, }: RegisterClientWrapperProps): import("react/jsx-runtime").JSX.Element;
22
20
  //# sourceMappingURL=register_client_wrapper.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"register_client_wrapper.d.ts","sourceRoot":"","sources":["../../src/server_pages/register_client_wrapper.tsx"],"names":[],"mappings":"AAIA,OAAO,KAA8B,MAAM,OAAO,CAAC;AAKnD,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,+BAA+B,CAAC;AACpE,OAAO,KAAK,EAAE,iBAAiB,EAAE,MAAM,sCAAsC,CAAC;AAC9E,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,sBAAsB,CAAC;AAG1D,MAAM,MAAM,0BAA0B,GAAG,IAAI,CAAC,cAAc,EAAE,OAAO,CAAC,GAAG;IACvE,0BAA0B;IAC1B,KAAK,CAAC,EAAE,iBAAiB,CAAC;IAC1B,4EAA4E;IAC5E,MAAM,CAAC,EAAE,YAAY,GAAG,WAAW,CAAC;IACpC,6EAA6E;IAC7E,KAAK,CAAC,EAAE,aAAa,CAAC;IACtB,mEAAmE;IACnE,MAAM,CAAC,EAAE,OAAO,0DAA0D,EAAE,oBAAoB,CAAC;IACjG,oFAAoF;IACpF,SAAS,CAAC,EAAE,KAAK,CAAC,SAAS,CAAC;CAC7B,CAAC;AAGF;;;GAGG;AACH,wBAAgB,qBAAqB,CAAC,EACpC,aAAa,EACb,oBAAoB,EACpB,sBAAsB,EACtB,gBAAgB,EAChB,oBAAoB,EACpB,qBAAqB,EACrB,cAAc,EACd,UAAU,EACV,WAAW,EACX,KAAK,EACL,MAAqB,EACrB,KAAK,EACL,MAAM,EACN,SAAS,GACV,EAAE,0BAA0B,2CAuC5B"}
1
+ {"version":3,"file":"register_client_wrapper.d.ts","sourceRoot":"","sources":["../../src/server_pages/register_client_wrapper.tsx"],"names":[],"mappings":"AASA,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,+BAA+B,CAAC;AACpE,OAAO,KAAK,EAAE,iBAAiB,EAAE,MAAM,sCAAsC,CAAC;AAC9E,OAAO,KAAK,EAAE,oBAAoB,EAAE,MAAM,0DAA0D,CAAC;AAGrG,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,YAAY,CAAC;AAElD,MAAM,MAAM,0BAA0B,GAAG,IAAI,CAAC,cAAc,EAAE,UAAU,GAAG,UAAU,GAAG,sBAAsB,GAAG,OAAO,CAAC,GAAG;IAC1H,SAAS,CAAC,EAAE,MAAM,GAAG,eAAe,CAAC;IACrC,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,sBAAsB,CAAC,EAAE,MAAM,CAAC;IAChC,0BAA0B;IAC1B,KAAK,CAAC,EAAE,iBAAiB,CAAC;IAC1B,4EAA4E;IAC5E,MAAM,CAAC,EAAE,YAAY,GAAG,WAAW,CAAC;IACpC,MAAM,CAAC,EAAE,oBAAoB,CAAC;CAC/B,CAAC;AAGF;;;GAGG;AACH,wBAAgB,qBAAqB,CAAC,EACpC,SAAS,EACT,SAAS,EACT,sBAAsB,EACtB,aAAa,EACb,oBAAoB,EACpB,sBAAsB,EACtB,gBAAgB,EAChB,oBAAoB,EACpB,qBAAqB,EACrB,cAAc,EACd,UAAU,EACV,WAAW,EACX,KAAK,EACL,MAAqB,EACrB,MAAM,GACP,EAAE,0BAA0B,2CAwC5B"}
@@ -11,7 +11,7 @@ import { create_sqlite_hazo_connect } from "../lib/hazo_connect_setup.js";
11
11
  * Client wrapper for RegisterLayout
12
12
  * Initializes hazo_connect data client on client side and passes config from server
13
13
  */
14
- export function RegisterClientWrapper({ showNameField, passwordRequirements, alreadyLoggedInMessage, showLogoutButton, showReturnHomeButton, returnHomeButtonLabel, returnHomePath, signInPath, signInLabel, oauth, layout = "two_column", theme, labels, legalText, }) {
14
+ export function RegisterClientWrapper({ image_src, image_alt, image_background_color, showNameField, passwordRequirements, alreadyLoggedInMessage, showLogoutButton, showReturnHomeButton, returnHomeButtonLabel, returnHomePath, signInPath, signInLabel, oauth, layout = "two_column", labels, }) {
15
15
  const [dataClient, setDataClient] = useState(null);
16
16
  useEffect(() => {
17
17
  // Initialize hazo_connect on client side
@@ -23,5 +23,5 @@ export function RegisterClientWrapper({ showNameField, passwordRequirements, alr
23
23
  if (!dataClient) {
24
24
  return (_jsx("div", { className: "cls_register_page_loading flex items-center justify-center min-h-screen", children: _jsx("div", { className: "text-slate-600 animate-pulse", children: "Loading..." }) }));
25
25
  }
26
- return (_jsx(RegisterLayout, { data_client: dataClient, show_name_field: showNameField, password_requirements: passwordRequirements, alreadyLoggedInMessage: alreadyLoggedInMessage, showLogoutButton: showLogoutButton, showReturnHomeButton: showReturnHomeButton, returnHomeButtonLabel: returnHomeButtonLabel, returnHomePath: returnHomePath, signInPath: signInPath, signInLabel: signInLabel, oauth: oauth, layout: layout, theme: theme, labels: labels, legalText: legalText }));
26
+ return (_jsx(RegisterLayout, { image_src: image_src, image_alt: image_alt, image_background_color: image_background_color, data_client: dataClient, show_name_field: showNameField, password_requirements: passwordRequirements, alreadyLoggedInMessage: alreadyLoggedInMessage, showLogoutButton: showLogoutButton, showReturnHomeButton: showReturnHomeButton, returnHomeButtonLabel: returnHomeButtonLabel, returnHomePath: returnHomePath, signInPath: signInPath, signInLabel: signInLabel, oauth: oauth, layout: layout, labels: labels }));
27
27
  }