@tinyrack/tinyauth-server 0.5.0 → 0.6.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/entities/oauth-client.entity.d.ts +36 -0
- package/dist/entities/oauth-client.entity.d.ts.map +1 -1
- package/dist/entities/oauth-client.entity.js +4 -0
- package/dist/entities/oauth-client.entity.js.map +1 -1
- package/dist/entities/oauth-code.entity.d.ts +36 -0
- package/dist/entities/oauth-code.entity.d.ts.map +1 -1
- package/dist/entities/oauth-device-code.entity.d.ts +36 -0
- package/dist/entities/oauth-device-code.entity.d.ts.map +1 -1
- package/dist/entities/oauth-device-code.entity.js +12 -0
- package/dist/entities/oauth-device-code.entity.js.map +1 -1
- package/dist/entities/revoked-token.entity.d.ts +36 -0
- package/dist/entities/revoked-token.entity.d.ts.map +1 -1
- package/dist/entities/user-consent.entity.d.ts +36 -0
- package/dist/entities/user-consent.entity.d.ts.map +1 -1
- package/dist/entrypoints/app.d.ts +326 -16
- package/dist/entrypoints/app.d.ts.map +1 -1
- package/dist/entrypoints/app.js +33 -7
- package/dist/entrypoints/app.js.map +1 -1
- package/dist/entrypoints/database/postgres/compiled-functions.d.ts +19 -7
- package/dist/entrypoints/database/postgres/compiled-functions.d.ts.map +1 -1
- package/dist/entrypoints/database/postgres/compiled-functions.js +213 -39
- package/dist/entrypoints/database/postgres/compiled-functions.js.map +1 -1
- package/dist/entrypoints/database/sqlite/compiled-functions.d.ts +19 -7
- package/dist/entrypoints/database/sqlite/compiled-functions.d.ts.map +1 -1
- package/dist/entrypoints/database/sqlite/compiled-functions.js +213 -39
- package/dist/entrypoints/database/sqlite/compiled-functions.js.map +1 -1
- package/dist/lib/config/admin.d.ts +9 -0
- package/dist/lib/config/admin.d.ts.map +1 -0
- package/dist/lib/config/admin.js +13 -0
- package/dist/lib/config/admin.js.map +1 -0
- package/dist/lib/config/auth.d.ts +85 -0
- package/dist/lib/config/auth.d.ts.map +1 -1
- package/dist/lib/config/auth.js +61 -0
- package/dist/lib/config/auth.js.map +1 -1
- package/dist/lib/config/client.d.ts +22 -0
- package/dist/lib/config/client.d.ts.map +1 -1
- package/dist/lib/config/client.js +18 -0
- package/dist/lib/config/client.js.map +1 -1
- package/dist/lib/config/index.d.ts +2 -0
- package/dist/lib/config/index.d.ts.map +1 -1
- package/dist/lib/config/index.js +1 -0
- package/dist/lib/config/index.js.map +1 -1
- package/dist/lib/config/resolved.d.ts +41 -0
- package/dist/lib/config/resolved.d.ts.map +1 -1
- package/dist/lib/config/resolved.js +2 -0
- package/dist/lib/config/resolved.js.map +1 -1
- package/dist/lib/config/server.d.ts.map +1 -1
- package/dist/lib/config/server.js +12 -0
- package/dist/lib/config/server.js.map +1 -1
- package/dist/lib/swagger-tags.d.ts +1 -0
- package/dist/lib/swagger-tags.d.ts.map +1 -1
- package/dist/lib/swagger-tags.js +1 -0
- package/dist/lib/swagger-tags.js.map +1 -1
- package/dist/middleware/auth.d.ts +3 -0
- package/dist/middleware/auth.d.ts.map +1 -1
- package/dist/middleware/auth.js +26 -0
- package/dist/middleware/auth.js.map +1 -1
- package/dist/middleware/session.d.ts +33 -1
- package/dist/middleware/session.d.ts.map +1 -1
- package/dist/middleware/session.js +84 -3
- package/dist/middleware/session.js.map +1 -1
- package/dist/migrations/postgres/Migration20260620025358_add_oauth_client_skip_consent.d.ts +6 -0
- package/dist/migrations/postgres/Migration20260620025358_add_oauth_client_skip_consent.d.ts.map +1 -0
- package/dist/migrations/postgres/Migration20260620025358_add_oauth_client_skip_consent.js +11 -0
- package/dist/migrations/postgres/Migration20260620025358_add_oauth_client_skip_consent.js.map +1 -0
- package/dist/migrations/postgres/Migration20260624190500_add_oauth_device_denied_at.d.ts +6 -0
- package/dist/migrations/postgres/Migration20260624190500_add_oauth_device_denied_at.d.ts.map +1 -0
- package/dist/migrations/postgres/Migration20260624190500_add_oauth_device_denied_at.js +11 -0
- package/dist/migrations/postgres/Migration20260624190500_add_oauth_device_denied_at.js.map +1 -0
- package/dist/migrations/postgres/Migration20260624223000_add_oauth_device_poll_state.d.ts +6 -0
- package/dist/migrations/postgres/Migration20260624223000_add_oauth_device_poll_state.d.ts.map +1 -0
- package/dist/migrations/postgres/Migration20260624223000_add_oauth_device_poll_state.js +14 -0
- package/dist/migrations/postgres/Migration20260624223000_add_oauth_device_poll_state.js.map +1 -0
- package/dist/migrations/postgres/index.d.ts.map +1 -1
- package/dist/migrations/postgres/index.js +6 -0
- package/dist/migrations/postgres/index.js.map +1 -1
- package/dist/migrations/sqlite/Migration20260620025358_add_oauth_client_skip_consent.d.ts +6 -0
- package/dist/migrations/sqlite/Migration20260620025358_add_oauth_client_skip_consent.d.ts.map +1 -0
- package/dist/migrations/sqlite/Migration20260620025358_add_oauth_client_skip_consent.js +10 -0
- package/dist/migrations/sqlite/Migration20260620025358_add_oauth_client_skip_consent.js.map +1 -0
- package/dist/migrations/sqlite/Migration20260624190500_add_oauth_device_denied_at.d.ts +6 -0
- package/dist/migrations/sqlite/Migration20260624190500_add_oauth_device_denied_at.d.ts.map +1 -0
- package/dist/migrations/sqlite/Migration20260624190500_add_oauth_device_denied_at.js +10 -0
- package/dist/migrations/sqlite/Migration20260624190500_add_oauth_device_denied_at.js.map +1 -0
- package/dist/migrations/sqlite/Migration20260624223000_add_oauth_device_poll_state.d.ts +6 -0
- package/dist/migrations/sqlite/Migration20260624223000_add_oauth_device_poll_state.d.ts.map +1 -0
- package/dist/migrations/sqlite/Migration20260624223000_add_oauth_device_poll_state.js +12 -0
- package/dist/migrations/sqlite/Migration20260624223000_add_oauth_device_poll_state.js.map +1 -0
- package/dist/migrations/sqlite/index.d.ts.map +1 -1
- package/dist/migrations/sqlite/index.js +6 -0
- package/dist/migrations/sqlite/index.js.map +1 -1
- package/dist/repositories/oauth-device-code.repository.d.ts +4 -0
- package/dist/repositories/oauth-device-code.repository.d.ts.map +1 -1
- package/dist/repositories/oauth-device-code.repository.js +19 -0
- package/dist/repositories/oauth-device-code.repository.js.map +1 -1
- package/dist/repositories/user.repository.d.ts +4 -2
- package/dist/repositories/user.repository.d.ts.map +1 -1
- package/dist/repositories/user.repository.js +11 -7
- package/dist/repositories/user.repository.js.map +1 -1
- package/dist/routes/.well-known/openid-configuration/get.d.ts.map +1 -1
- package/dist/routes/.well-known/openid-configuration/get.js +4 -0
- package/dist/routes/.well-known/openid-configuration/get.js.map +1 -1
- package/dist/routes/api/admin/index.d.ts +185 -0
- package/dist/routes/api/admin/index.d.ts.map +1 -0
- package/dist/routes/api/admin/index.js +13 -0
- package/dist/routes/api/admin/index.js.map +1 -0
- package/dist/routes/api/admin/me/get.d.ts +26 -0
- package/dist/routes/api/admin/me/get.d.ts.map +1 -0
- package/dist/routes/api/admin/me/get.js +29 -0
- package/dist/routes/api/admin/me/get.js.map +1 -0
- package/dist/routes/api/admin/users/index.d.ts +162 -0
- package/dist/routes/api/admin/users/index.d.ts.map +1 -0
- package/dist/routes/api/admin/users/index.js +166 -0
- package/dist/routes/api/admin/users/index.js.map +1 -0
- package/dist/routes/api/auth/accounts/get.d.ts +28 -0
- package/dist/routes/api/auth/accounts/get.d.ts.map +1 -0
- package/dist/routes/api/auth/accounts/get.js +47 -0
- package/dist/routes/api/auth/accounts/get.js.map +1 -0
- package/dist/routes/api/auth/accounts/remove.post.d.ts +30 -0
- package/dist/routes/api/auth/accounts/remove.post.d.ts.map +1 -0
- package/dist/routes/api/auth/accounts/remove.post.js +30 -0
- package/dist/routes/api/auth/accounts/remove.post.js.map +1 -0
- package/dist/routes/api/auth/accounts/select.post.d.ts +31 -0
- package/dist/routes/api/auth/accounts/select.post.d.ts.map +1 -0
- package/dist/routes/api/auth/accounts/select.post.js +26 -0
- package/dist/routes/api/auth/accounts/select.post.js.map +1 -0
- package/dist/routes/api/auth/email/verify/post.d.ts +1 -0
- package/dist/routes/api/auth/email/verify/post.d.ts.map +1 -1
- package/dist/routes/api/auth/index.d.ts +86 -0
- package/dist/routes/api/auth/index.d.ts.map +1 -1
- package/dist/routes/api/auth/index.js +6 -0
- package/dist/routes/api/auth/index.js.map +1 -1
- package/dist/routes/api/auth/login/post.d.ts +1 -0
- package/dist/routes/api/auth/login/post.d.ts.map +1 -1
- package/dist/routes/api/auth/login/post.js +15 -16
- package/dist/routes/api/auth/login/post.js.map +1 -1
- package/dist/routes/api/auth/passkey/verify/post.d.ts +1 -0
- package/dist/routes/api/auth/passkey/verify/post.d.ts.map +1 -1
- package/dist/routes/api/auth/register/post.d.ts +1 -0
- package/dist/routes/api/auth/register/post.d.ts.map +1 -1
- package/dist/routes/api/auth/totp/recovery/verify/post.d.ts +1 -0
- package/dist/routes/api/auth/totp/recovery/verify/post.d.ts.map +1 -1
- package/dist/routes/api/auth/totp/verify/post.d.ts +1 -0
- package/dist/routes/api/auth/totp/verify/post.d.ts.map +1 -1
- package/dist/routes/api/config/get.d.ts +3 -0
- package/dist/routes/api/config/get.d.ts.map +1 -1
- package/dist/routes/api/config/get.js +7 -1
- package/dist/routes/api/config/get.js.map +1 -1
- package/dist/routes/api/config/index.d.ts +3 -0
- package/dist/routes/api/config/index.d.ts.map +1 -1
- package/dist/routes/api/consent/index.d.ts +10 -0
- package/dist/routes/api/consent/index.d.ts.map +1 -1
- package/dist/routes/api/consent/post.d.ts +10 -0
- package/dist/routes/api/consent/post.d.ts.map +1 -1
- package/dist/routes/api/consent/post.js +52 -1
- package/dist/routes/api/consent/post.js.map +1 -1
- package/dist/routes/api/index.d.ts +310 -26
- package/dist/routes/api/index.d.ts.map +1 -1
- package/dist/routes/api/index.js +2 -0
- package/dist/routes/api/index.js.map +1 -1
- package/dist/routes/api/user/index.d.ts +3 -0
- package/dist/routes/api/user/index.d.ts.map +1 -1
- package/dist/routes/api/user/passkeys/register/verify/post.d.ts +1 -0
- package/dist/routes/api/user/passkeys/register/verify/post.d.ts.map +1 -1
- package/dist/routes/api/user/session/get.d.ts +1 -0
- package/dist/routes/api/user/session/get.d.ts.map +1 -1
- package/dist/routes/api/user/totp/confirm/post.d.ts +1 -0
- package/dist/routes/api/user/totp/confirm/post.d.ts.map +1 -1
- package/dist/routes/index.d.ts +303 -16
- package/dist/routes/index.d.ts.map +1 -1
- package/dist/routes/oauth/.well-known/openid-configuration/get.d.ts.map +1 -1
- package/dist/routes/oauth/.well-known/openid-configuration/get.js +1 -0
- package/dist/routes/oauth/.well-known/openid-configuration/get.js.map +1 -1
- package/dist/routes/oauth/authorize/get.d.ts +2 -0
- package/dist/routes/oauth/authorize/get.d.ts.map +1 -1
- package/dist/routes/oauth/authorize/get.js +12 -1
- package/dist/routes/oauth/authorize/get.js.map +1 -1
- package/dist/routes/oauth/client-auth.js +1 -1
- package/dist/routes/oauth/client-auth.js.map +1 -1
- package/dist/routes/oauth/cors.d.ts.map +1 -1
- package/dist/routes/oauth/cors.js +8 -3
- package/dist/routes/oauth/cors.js.map +1 -1
- package/dist/routes/oauth/device/get-post.d.ts +2 -1
- package/dist/routes/oauth/device/get-post.d.ts.map +1 -1
- package/dist/routes/oauth/device/get-post.js +15 -9
- package/dist/routes/oauth/device/get-post.js.map +1 -1
- package/dist/routes/oauth/device-authorization/post.d.ts.map +1 -1
- package/dist/routes/oauth/device-authorization/post.js +2 -0
- package/dist/routes/oauth/device-authorization/post.js.map +1 -1
- package/dist/routes/oauth/end-session/get.d.ts.map +1 -1
- package/dist/routes/oauth/end-session/get.js +17 -8
- package/dist/routes/oauth/end-session/get.js.map +1 -1
- package/dist/routes/oauth/index.d.ts +5 -2
- package/dist/routes/oauth/index.d.ts.map +1 -1
- package/dist/routes/oauth/revoke/post.d.ts.map +1 -1
- package/dist/routes/oauth/revoke/post.js +2 -0
- package/dist/routes/oauth/revoke/post.js.map +1 -1
- package/dist/routes/oauth/token/post.d.ts +1 -1
- package/dist/routes/oauth/token/post.d.ts.map +1 -1
- package/dist/routes/oauth/token/post.js +10 -6
- package/dist/routes/oauth/token/post.js.map +1 -1
- package/dist/routes/oauth/userinfo/get.d.ts.map +1 -1
- package/dist/routes/oauth/userinfo/get.js +12 -6
- package/dist/routes/oauth/userinfo/get.js.map +1 -1
- package/dist/schemas/error.d.ts +56 -6
- package/dist/schemas/error.d.ts.map +1 -1
- package/dist/schemas/error.js +4 -2
- package/dist/schemas/error.js.map +1 -1
- package/dist/schemas/field.d.ts +1 -4
- package/dist/schemas/field.d.ts.map +1 -1
- package/dist/schemas/field.js +3 -1
- package/dist/schemas/field.js.map +1 -1
- package/dist/schemas/response.d.ts +97 -0
- package/dist/schemas/response.d.ts.map +1 -1
- package/dist/schemas/response.js +32 -0
- package/dist/schemas/response.js.map +1 -1
- package/dist/seeders/config.seeder.js +1 -0
- package/dist/seeders/config.seeder.js.map +1 -1
- package/dist/services/account-selection.service.d.ts +39 -0
- package/dist/services/account-selection.service.d.ts.map +1 -0
- package/dist/services/account-selection.service.js +77 -0
- package/dist/services/account-selection.service.js.map +1 -0
- package/dist/services/container.d.ts +23 -0
- package/dist/services/container.d.ts.map +1 -1
- package/dist/services/jwt.service.js +3 -3
- package/dist/services/jwt.service.js.map +1 -1
- package/dist/services/oauth-authorize.service.d.ts +24 -1
- package/dist/services/oauth-authorize.service.d.ts.map +1 -1
- package/dist/services/oauth-authorize.service.js +233 -8
- package/dist/services/oauth-authorize.service.js.map +1 -1
- package/dist/services/oauth-client.service.d.ts.map +1 -1
- package/dist/services/oauth-client.service.js +1 -0
- package/dist/services/oauth-client.service.js.map +1 -1
- package/dist/services/oauth-token.service.d.ts +2 -3
- package/dist/services/oauth-token.service.d.ts.map +1 -1
- package/dist/services/oauth-token.service.js +18 -10
- package/dist/services/oauth-token.service.js.map +1 -1
- package/dist/services/user-consent.service.d.ts +1 -0
- package/dist/services/user-consent.service.d.ts.map +1 -1
- package/dist/services/user-consent.service.js +4 -1
- package/dist/services/user-consent.service.js.map +1 -1
- package/dist/services/user.service.d.ts +28 -1
- package/dist/services/user.service.d.ts.map +1 -1
- package/dist/services/user.service.js +104 -0
- package/dist/services/user.service.js.map +1 -1
- package/package.json +1 -1
- package/public/assets/2fa-BoyBKrjD.js +2 -0
- package/public/assets/2fa-BoyBKrjD.js.map +1 -0
- package/public/assets/2fa-DfWvDjDW.js +2 -0
- package/public/assets/2fa-DfWvDjDW.js.map +1 -0
- package/public/assets/2fa-IkQlgUP0.js +2 -0
- package/public/assets/2fa-IkQlgUP0.js.map +1 -0
- package/public/assets/2fa-SSKfXB7c.js +2 -0
- package/public/assets/2fa-SSKfXB7c.js.map +1 -0
- package/public/assets/CheckCircle.es-MnJIACCe.js +2 -0
- package/public/assets/CheckCircle.es-MnJIACCe.js.map +1 -0
- package/public/assets/EnvelopeSimple.es-BZ7u3LYh.js +2 -0
- package/public/assets/EnvelopeSimple.es-BZ7u3LYh.js.map +1 -0
- package/public/assets/Fingerprint.es-CW755VWD.js +2 -0
- package/public/assets/Fingerprint.es-CW755VWD.js.map +1 -0
- package/public/assets/IconBase.es-d5KP98Ac.js +2 -0
- package/public/assets/IconBase.es-d5KP98Ac.js.map +1 -0
- package/public/assets/Key.es-l5aSxw0I.js +2 -0
- package/public/assets/Key.es-l5aSxw0I.js.map +1 -0
- package/public/assets/Link.es-B-IJS4Q5.js +2 -0
- package/public/assets/Link.es-B-IJS4Q5.js.map +1 -0
- package/public/assets/Lock.es-Cb_uwQly.js +2 -0
- package/public/assets/Lock.es-Cb_uwQly.js.map +1 -0
- package/public/assets/ShieldCheck.es-CscPsYbC.js +2 -0
- package/public/assets/ShieldCheck.es-CscPsYbC.js.map +1 -0
- package/public/assets/Trash.es-BepW9BwV.js +2 -0
- package/public/assets/Trash.es-BepW9BwV.js.map +1 -0
- package/public/assets/Warning.es-BPpZIJYZ.js +2 -0
- package/public/assets/Warning.es-BPpZIJYZ.js.map +1 -0
- package/public/assets/X.es-IwdB4hWT.js +2 -0
- package/public/assets/X.es-IwdB4hWT.js.map +1 -0
- package/public/assets/admin-D2CMlWzS.js +2 -0
- package/public/assets/admin-D2CMlWzS.js.map +1 -0
- package/public/assets/admin-users-CTAQJl7w.js +2 -0
- package/public/assets/admin-users-CTAQJl7w.js.map +1 -0
- package/public/assets/alert-CSXqgDVi.js +2 -0
- package/public/assets/alert-CSXqgDVi.js.map +1 -0
- package/public/assets/consent-C5Qo0iLd.js +2 -0
- package/public/assets/consent-C5Qo0iLd.js.map +1 -0
- package/public/assets/consent-DwuWkp63.js +2 -0
- package/public/assets/consent-DwuWkp63.js.map +1 -0
- package/public/assets/email-CIttZRBe.js +2 -0
- package/public/assets/email-CIttZRBe.js.map +1 -0
- package/public/assets/email-SSKfXB7c.js +2 -0
- package/public/assets/email-SSKfXB7c.js.map +1 -0
- package/public/assets/error-D60wkdWN.js +2 -0
- package/public/assets/error-D60wkdWN.js.map +1 -0
- package/public/assets/footer-link-Ib1Hd-fr.js +2 -0
- package/public/assets/footer-link-Ib1Hd-fr.js.map +1 -0
- package/public/assets/forgot-SSKfXB7c.js +2 -0
- package/public/assets/forgot-SSKfXB7c.js.map +1 -0
- package/public/assets/forgot-x-UDyHXT.js +2 -0
- package/public/assets/forgot-x-UDyHXT.js.map +1 -0
- package/public/assets/icon-input-8iU7PNzd.js +2 -0
- package/public/assets/icon-input-8iU7PNzd.js.map +1 -0
- package/public/assets/index-CsT6OVnP.js +11 -0
- package/public/assets/index-CsT6OVnP.js.map +1 -0
- package/public/assets/index-D6-1JDnX.css +2 -0
- package/public/assets/login-DhbnCudI.js +2 -0
- package/public/assets/login-DhbnCudI.js.map +1 -0
- package/public/assets/login-SSKfXB7c.js +2 -0
- package/public/assets/login-SSKfXB7c.js.map +1 -0
- package/public/assets/modal-BjnpKlXn.js +2 -0
- package/public/assets/modal-BjnpKlXn.js.map +1 -0
- package/public/assets/mutationOptions-Dfvzj6n2.js +2 -0
- package/public/assets/mutationOptions-Dfvzj6n2.js.map +1 -0
- package/public/assets/page-header-BYMFSGfT.js +2 -0
- package/public/assets/page-header-BYMFSGfT.js.map +1 -0
- package/public/assets/page-layout-C475gs09.js +2 -0
- package/public/assets/page-layout-C475gs09.js.map +1 -0
- package/public/assets/passkey-BdISbWr7.js +2 -0
- package/public/assets/passkey-BdISbWr7.js.map +1 -0
- package/public/assets/passkey-Bv7zPLAZ.js +2 -0
- package/public/assets/passkey-Bv7zPLAZ.js.map +1 -0
- package/public/assets/passkey-e6uvApHa.js +2 -0
- package/public/assets/passkey-e6uvApHa.js.map +1 -0
- package/public/assets/password-CkeV4qxb.js +2 -0
- package/public/assets/password-CkeV4qxb.js.map +1 -0
- package/public/assets/password-SSKfXB7c.js +2 -0
- package/public/assets/password-SSKfXB7c.js.map +1 -0
- package/public/assets/password-reset-XZJTgJi3.js +2 -0
- package/public/assets/password-reset-XZJTgJi3.js.map +1 -0
- package/public/assets/pin-input-BM1UizHr.js +2 -0
- package/public/assets/pin-input-BM1UizHr.js.map +1 -0
- package/public/assets/profile-D2cuVYgE.js +2 -0
- package/public/assets/profile-D2cuVYgE.js.map +1 -0
- package/public/assets/profile-TKdT20x5.js +2 -0
- package/public/assets/profile-TKdT20x5.js.map +1 -0
- package/public/assets/promise-OpBtq8tG.js +2 -0
- package/public/assets/promise-OpBtq8tG.js.map +1 -0
- package/public/assets/recovery-DM8h2gbb.js +2 -0
- package/public/assets/recovery-DM8h2gbb.js.map +1 -0
- package/public/assets/register-SSKfXB7c.js +2 -0
- package/public/assets/register-SSKfXB7c.js.map +1 -0
- package/public/assets/register-vWW_43cD.js +2 -0
- package/public/assets/register-vWW_43cD.js.map +1 -0
- package/public/assets/reset-CgACYrdp.js +2 -0
- package/public/assets/reset-CgACYrdp.js.map +1 -0
- package/public/assets/reset-SSKfXB7c.js +2 -0
- package/public/assets/reset-SSKfXB7c.js.map +1 -0
- package/public/assets/routes-CAIeH5mq.js +2 -0
- package/public/assets/routes-CAIeH5mq.js.map +1 -0
- package/public/assets/select-BCP5fwfB.js +2 -0
- package/public/assets/select-BCP5fwfB.js.map +1 -0
- package/public/assets/select-SSKfXB7c.js +2 -0
- package/public/assets/select-SSKfXB7c.js.map +1 -0
- package/public/assets/standard-schema-o4V-s4uY.js +2 -0
- package/public/assets/standard-schema-o4V-s4uY.js.map +1 -0
- package/public/assets/submit-button-Xx6DwLyh.js +2 -0
- package/public/assets/submit-button-Xx6DwLyh.js.map +1 -0
- package/public/assets/terms-DPWrbYY2.js +2 -0
- package/public/assets/terms-DPWrbYY2.js.map +1 -0
- package/public/assets/terms-TKdT20x5.js +2 -0
- package/public/assets/terms-TKdT20x5.js.map +1 -0
- package/public/assets/terms-checkbox-list-CdrbHxiF.js +2 -0
- package/public/assets/terms-checkbox-list-CdrbHxiF.js.map +1 -0
- package/public/assets/totp-CKZ6N1NS.js +2 -0
- package/public/assets/totp-CKZ6N1NS.js.map +1 -0
- package/public/assets/totp-D-PVOsGQ.js +2 -0
- package/public/assets/totp-D-PVOsGQ.js.map +1 -0
- package/public/assets/totp-NlqqRp4a.js +2 -0
- package/public/assets/totp-NlqqRp4a.js.map +1 -0
- package/public/assets/use-theme-cVUDAjtt.js +2 -0
- package/public/assets/use-theme-cVUDAjtt.js.map +1 -0
- package/public/assets/use-totp-setup-BH75uEbE.js +3 -0
- package/public/assets/use-totp-setup-BH75uEbE.js.map +1 -0
- package/public/assets/useMutation-DVMopbtG.js +2 -0
- package/public/assets/useMutation-DVMopbtG.js.map +1 -0
- package/public/assets/users-B7ofdp72.js +2 -0
- package/public/assets/users-B7ofdp72.js.map +1 -0
- package/public/assets/zod-BItJDQBQ.js +66 -0
- package/public/assets/zod-BItJDQBQ.js.map +1 -0
- package/public/index.html +6 -2
- package/public/assets/index-5_9rzim1.css +0 -2
- package/public/assets/index-BTGeW26-.js +0 -75
- package/public/assets/index-BTGeW26-.js.map +0 -1
|
@@ -0,0 +1,2 @@
|
|
|
1
|
+
import{n as e,o as t,r as n,s as r,t as i,u as a}from"./IconBase.es-d5KP98Ac.js";import{$ as o,Q as s,a as c,dt as l,h as u,i as d,n as f,r as p,ut as m}from"./use-theme-cVUDAjtt.js";import{t as h}from"./useMutation-DVMopbtG.js";import{t as g}from"./mutationOptions-Dfvzj6n2.js";import{t as _}from"./Warning.es-BPpZIJYZ.js";import{t as v}from"./page-layout-C475gs09.js";import{a as y,i as b,n as x,r as S,t as C}from"./use-totp-setup-BH75uEbE.js";import{t as w}from"./Fingerprint.es-CW755VWD.js";import{t as T}from"./Key.es-l5aSxw0I.js";import{t as E}from"./Link.es-B-IJS4Q5.js";import{t as D}from"./ShieldCheck.es-CscPsYbC.js";import{t as O}from"./Trash.es-BepW9BwV.js";import{t as k}from"./zod-BItJDQBQ.js";import{C as ee,P as A,S as j,T as te,w as ne,x as re}from"./index-CsT6OVnP.js";import{t as M}from"./alert-CSXqgDVi.js";import{t as N}from"./promise-OpBtq8tG.js";import{a as P,i as F,n as I,r as L}from"./passkey-e6uvApHa.js";import{r as R,t as z}from"./standard-schema-o4V-s4uY.js";import{n as B,t as V}from"./modal-BjnpKlXn.js";import{n as ie,r as H}from"./totp-NlqqRp4a.js";function U(e,t){return o(e,l,t)}var W=a(r(),1),G=new Map([[`bold`,W.createElement(W.Fragment,null,W.createElement(`path`,{d:`M160,36A92.09,92.09,0,0,0,79,84.36,68,68,0,1,0,72,220h88a92,92,0,0,0,0-184Zm0,160H72a44,44,0,0,1-1.82-88A91.86,91.86,0,0,0,68,128a12,12,0,0,0,24,0,68,68,0,1,1,68,68Z`}))],[`duotone`,W.createElement(W.Fragment,null,W.createElement(`path`,{d:`M240,128a80,80,0,0,1-80,80H72A56,56,0,1,1,85.92,97.74l0,.1A80,80,0,0,1,240,128Z`,opacity:`0.2`}),W.createElement(`path`,{d:`M160,40A88.09,88.09,0,0,0,81.29,88.67,64,64,0,1,0,72,216h88a88,88,0,0,0,0-176Zm0,160H72a48,48,0,0,1,0-96c1.1,0,2.2,0,3.29.11A88,88,0,0,0,72,128a8,8,0,0,0,16,0,72,72,0,1,1,72,72Z`}))],[`fill`,W.createElement(W.Fragment,null,W.createElement(`path`,{d:`M160.06,40A88.1,88.1,0,0,0,81.29,88.67h0A87.48,87.48,0,0,0,72,127.73,8.18,8.18,0,0,1,64.57,136,8,8,0,0,1,56,128a103.66,103.66,0,0,1,5.34-32.92,4,4,0,0,0-4.75-5.18A64.09,64.09,0,0,0,8,152c0,35.19,29.75,64,65,64H160a88.09,88.09,0,0,0,87.93-91.48C246.11,77.54,207.07,40,160.06,40Z`}))],[`light`,W.createElement(W.Fragment,null,W.createElement(`path`,{d:`M160,42A86.11,86.11,0,0,0,82.43,90.88,62,62,0,1,0,72,214h88a86,86,0,0,0,0-172Zm0,160H72a50,50,0,0,1,0-100,50.67,50.67,0,0,1,5.91.35A85.61,85.61,0,0,0,74,128a6,6,0,0,0,12,0,74,74,0,1,1,74,74Z`}))],[`regular`,W.createElement(W.Fragment,null,W.createElement(`path`,{d:`M160,40A88.09,88.09,0,0,0,81.29,88.67,64,64,0,1,0,72,216h88a88,88,0,0,0,0-176Zm0,160H72a48,48,0,0,1,0-96c1.1,0,2.2,0,3.29.11A88,88,0,0,0,72,128a8,8,0,0,0,16,0,72,72,0,1,1,72,72Z`}))],[`thin`,W.createElement(W.Fragment,null,W.createElement(`path`,{d:`M160,44A84.11,84.11,0,0,0,83.59,93.12,60.71,60.71,0,0,0,72,92a60,60,0,0,0,0,120h88a84,84,0,0,0,0-168Zm0,160H72a52,52,0,1,1,8.55-103.3A83.66,83.66,0,0,0,76,128a4,4,0,0,0,8,0,76,76,0,1,1,76,76Z`}))]]),K=new Map([[`bold`,W.createElement(W.Fragment,null,W.createElement(`path`,{d:`M176,12H80A28,28,0,0,0,52,40V216a28,28,0,0,0,28,28h96a28,28,0,0,0,28-28V40A28,28,0,0,0,176,12ZM76,76H180V180H76Zm4-40h96a4,4,0,0,1,4,4V52H76V40A4,4,0,0,1,80,36Zm96,184H80a4,4,0,0,1-4-4V204H180v12A4,4,0,0,1,176,220Z`}))],[`duotone`,W.createElement(W.Fragment,null,W.createElement(`path`,{d:`M192,56V200H64V56Z`,opacity:`0.2`}),W.createElement(`path`,{d:`M176,16H80A24,24,0,0,0,56,40V216a24,24,0,0,0,24,24h96a24,24,0,0,0,24-24V40A24,24,0,0,0,176,16ZM72,64H184V192H72Zm8-32h96a8,8,0,0,1,8,8v8H72V40A8,8,0,0,1,80,32Zm96,192H80a8,8,0,0,1-8-8v-8H184v8A8,8,0,0,1,176,224Z`}))],[`fill`,W.createElement(W.Fragment,null,W.createElement(`path`,{d:`M176,16H80A24,24,0,0,0,56,40V216a24,24,0,0,0,24,24h96a24,24,0,0,0,24-24V40A24,24,0,0,0,176,16ZM80,32h96a8,8,0,0,1,8,8v8H72V40A8,8,0,0,1,80,32Zm96,192H80a8,8,0,0,1-8-8v-8H184v8A8,8,0,0,1,176,224Z`}))],[`light`,W.createElement(W.Fragment,null,W.createElement(`path`,{d:`M176,18H80A22,22,0,0,0,58,40V216a22,22,0,0,0,22,22h96a22,22,0,0,0,22-22V40A22,22,0,0,0,176,18ZM70,62H186V194H70ZM80,30h96a10,10,0,0,1,10,10V50H70V40A10,10,0,0,1,80,30Zm96,196H80a10,10,0,0,1-10-10V206H186v10A10,10,0,0,1,176,226Z`}))],[`regular`,W.createElement(W.Fragment,null,W.createElement(`path`,{d:`M176,16H80A24,24,0,0,0,56,40V216a24,24,0,0,0,24,24h96a24,24,0,0,0,24-24V40A24,24,0,0,0,176,16ZM72,64H184V192H72Zm8-32h96a8,8,0,0,1,8,8v8H72V40A8,8,0,0,1,80,32Zm96,192H80a8,8,0,0,1-8-8v-8H184v8A8,8,0,0,1,176,224Z`}))],[`thin`,W.createElement(W.Fragment,null,W.createElement(`path`,{d:`M176,20H80A20,20,0,0,0,60,40V216a20,20,0,0,0,20,20h96a20,20,0,0,0,20-20V40A20,20,0,0,0,176,20ZM68,60H188V196H68ZM80,28h96a12,12,0,0,1,12,12V52H68V40A12,12,0,0,1,80,28Zm96,200H80a12,12,0,0,1-12-12V204H188v12A12,12,0,0,1,176,228Z`}))]]),q=new Map([[`bold`,W.createElement(W.Fragment,null,W.createElement(`path`,{d:`M128,76a52,52,0,1,0,52,52A52.06,52.06,0,0,0,128,76Zm0,80a28,28,0,1,1,28-28A28,28,0,0,1,128,156Zm92-27.21v-1.58l14-17.51a12,12,0,0,0,2.23-10.59A111.75,111.75,0,0,0,225,71.89,12,12,0,0,0,215.89,66L193.61,63.5l-1.11-1.11L190,40.1A12,12,0,0,0,184.11,31a111.67,111.67,0,0,0-27.23-11.27A12,12,0,0,0,146.3,22L128.79,36h-1.58L109.7,22a12,12,0,0,0-10.59-2.23A111.75,111.75,0,0,0,71.89,31.05,12,12,0,0,0,66,40.11L63.5,62.39,62.39,63.5,40.1,66A12,12,0,0,0,31,71.89,111.67,111.67,0,0,0,19.77,99.12,12,12,0,0,0,22,109.7l14,17.51v1.58L22,146.3a12,12,0,0,0-2.23,10.59,111.75,111.75,0,0,0,11.29,27.22A12,12,0,0,0,40.11,190l22.28,2.48,1.11,1.11L66,215.9A12,12,0,0,0,71.89,225a111.67,111.67,0,0,0,27.23,11.27A12,12,0,0,0,109.7,234l17.51-14h1.58l17.51,14a12,12,0,0,0,10.59,2.23A111.75,111.75,0,0,0,184.11,225a12,12,0,0,0,5.91-9.06l2.48-22.28,1.11-1.11L215.9,190a12,12,0,0,0,9.06-5.91,111.67,111.67,0,0,0,11.27-27.23A12,12,0,0,0,234,146.3Zm-24.12-4.89a70.1,70.1,0,0,1,0,8.2,12,12,0,0,0,2.61,8.22l12.84,16.05A86.47,86.47,0,0,1,207,166.86l-20.43,2.27a12,12,0,0,0-7.65,4,69,69,0,0,1-5.8,5.8,12,12,0,0,0-4,7.65L166.86,207a86.47,86.47,0,0,1-10.49,4.35l-16.05-12.85a12,12,0,0,0-7.5-2.62c-.24,0-.48,0-.72,0a70.1,70.1,0,0,1-8.2,0,12.06,12.06,0,0,0-8.22,2.6L99.63,211.33A86.47,86.47,0,0,1,89.14,207l-2.27-20.43a12,12,0,0,0-4-7.65,69,69,0,0,1-5.8-5.8,12,12,0,0,0-7.65-4L49,166.86a86.47,86.47,0,0,1-4.35-10.49l12.84-16.05a12,12,0,0,0,2.61-8.22,70.1,70.1,0,0,1,0-8.2,12,12,0,0,0-2.61-8.22L44.67,99.63A86.47,86.47,0,0,1,49,89.14l20.43-2.27a12,12,0,0,0,7.65-4,69,69,0,0,1,5.8-5.8,12,12,0,0,0,4-7.65L89.14,49a86.47,86.47,0,0,1,10.49-4.35l16.05,12.85a12.06,12.06,0,0,0,8.22,2.6,70.1,70.1,0,0,1,8.2,0,12,12,0,0,0,8.22-2.6l16.05-12.85A86.47,86.47,0,0,1,166.86,49l2.27,20.43a12,12,0,0,0,4,7.65,69,69,0,0,1,5.8,5.8,12,12,0,0,0,7.65,4L207,89.14a86.47,86.47,0,0,1,4.35,10.49l-12.84,16.05A12,12,0,0,0,195.88,123.9Z`}))],[`duotone`,W.createElement(W.Fragment,null,W.createElement(`path`,{d:`M207.86,123.18l16.78-21a99.14,99.14,0,0,0-10.07-24.29l-26.7-3a81,81,0,0,0-6.81-6.81l-3-26.71a99.43,99.43,0,0,0-24.3-10l-21,16.77a81.59,81.59,0,0,0-9.64,0l-21-16.78A99.14,99.14,0,0,0,77.91,41.43l-3,26.7a81,81,0,0,0-6.81,6.81l-26.71,3a99.43,99.43,0,0,0-10,24.3l16.77,21a81.59,81.59,0,0,0,0,9.64l-16.78,21a99.14,99.14,0,0,0,10.07,24.29l26.7,3a81,81,0,0,0,6.81,6.81l3,26.71a99.43,99.43,0,0,0,24.3,10l21-16.77a81.59,81.59,0,0,0,9.64,0l21,16.78a99.14,99.14,0,0,0,24.29-10.07l3-26.7a81,81,0,0,0,6.81-6.81l26.71-3a99.43,99.43,0,0,0,10-24.3l-16.77-21A81.59,81.59,0,0,0,207.86,123.18ZM128,168a40,40,0,1,1,40-40A40,40,0,0,1,128,168Z`,opacity:`0.2`}),W.createElement(`path`,{d:`M128,80a48,48,0,1,0,48,48A48.05,48.05,0,0,0,128,80Zm0,80a32,32,0,1,1,32-32A32,32,0,0,1,128,160Zm88-29.84q.06-2.16,0-4.32l14.92-18.64a8,8,0,0,0,1.48-7.06,107.6,107.6,0,0,0-10.88-26.25,8,8,0,0,0-6-3.93l-23.72-2.64q-1.48-1.56-3-3L186,40.54a8,8,0,0,0-3.94-6,107.29,107.29,0,0,0-26.25-10.86,8,8,0,0,0-7.06,1.48L130.16,40Q128,40,125.84,40L107.2,25.11a8,8,0,0,0-7.06-1.48A107.6,107.6,0,0,0,73.89,34.51a8,8,0,0,0-3.93,6L67.32,64.27q-1.56,1.49-3,3L40.54,70a8,8,0,0,0-6,3.94,107.71,107.71,0,0,0-10.87,26.25,8,8,0,0,0,1.49,7.06L40,125.84Q40,128,40,130.16L25.11,148.8a8,8,0,0,0-1.48,7.06,107.6,107.6,0,0,0,10.88,26.25,8,8,0,0,0,6,3.93l23.72,2.64q1.49,1.56,3,3L70,215.46a8,8,0,0,0,3.94,6,107.71,107.71,0,0,0,26.25,10.87,8,8,0,0,0,7.06-1.49L125.84,216q2.16.06,4.32,0l18.64,14.92a8,8,0,0,0,7.06,1.48,107.21,107.21,0,0,0,26.25-10.88,8,8,0,0,0,3.93-6l2.64-23.72q1.56-1.48,3-3L215.46,186a8,8,0,0,0,6-3.94,107.71,107.71,0,0,0,10.87-26.25,8,8,0,0,0-1.49-7.06Zm-16.1-6.5a73.93,73.93,0,0,1,0,8.68,8,8,0,0,0,1.74,5.48l14.19,17.73a91.57,91.57,0,0,1-6.23,15L187,173.11a8,8,0,0,0-5.1,2.64,74.11,74.11,0,0,1-6.14,6.14,8,8,0,0,0-2.64,5.1l-2.51,22.58a91.32,91.32,0,0,1-15,6.23l-17.74-14.19a8,8,0,0,0-5-1.75h-.48a73.93,73.93,0,0,1-8.68,0,8.06,8.06,0,0,0-5.48,1.74L100.45,215.8a91.57,91.57,0,0,1-15-6.23L82.89,187a8,8,0,0,0-2.64-5.1,74.11,74.11,0,0,1-6.14-6.14,8,8,0,0,0-5.1-2.64L46.43,170.6a91.32,91.32,0,0,1-6.23-15l14.19-17.74a8,8,0,0,0,1.74-5.48,73.93,73.93,0,0,1,0-8.68,8,8,0,0,0-1.74-5.48L40.2,100.45a91.57,91.57,0,0,1,6.23-15L69,82.89a8,8,0,0,0,5.1-2.64,74.11,74.11,0,0,1,6.14-6.14A8,8,0,0,0,82.89,69L85.4,46.43a91.32,91.32,0,0,1,15-6.23l17.74,14.19a8,8,0,0,0,5.48,1.74,73.93,73.93,0,0,1,8.68,0,8.06,8.06,0,0,0,5.48-1.74L155.55,40.2a91.57,91.57,0,0,1,15,6.23L173.11,69a8,8,0,0,0,2.64,5.1,74.11,74.11,0,0,1,6.14,6.14,8,8,0,0,0,5.1,2.64l22.58,2.51a91.32,91.32,0,0,1,6.23,15l-14.19,17.74A8,8,0,0,0,199.87,123.66Z`}))],[`fill`,W.createElement(W.Fragment,null,W.createElement(`path`,{d:`M216,130.16q.06-2.16,0-4.32l14.92-18.64a8,8,0,0,0,1.48-7.06,107.6,107.6,0,0,0-10.88-26.25,8,8,0,0,0-6-3.93l-23.72-2.64q-1.48-1.56-3-3L186,40.54a8,8,0,0,0-3.94-6,107.29,107.29,0,0,0-26.25-10.86,8,8,0,0,0-7.06,1.48L130.16,40Q128,40,125.84,40L107.2,25.11a8,8,0,0,0-7.06-1.48A107.6,107.6,0,0,0,73.89,34.51a8,8,0,0,0-3.93,6L67.32,64.27q-1.56,1.49-3,3L40.54,70a8,8,0,0,0-6,3.94,107.71,107.71,0,0,0-10.87,26.25,8,8,0,0,0,1.49,7.06L40,125.84Q40,128,40,130.16L25.11,148.8a8,8,0,0,0-1.48,7.06,107.6,107.6,0,0,0,10.88,26.25,8,8,0,0,0,6,3.93l23.72,2.64q1.49,1.56,3,3L70,215.46a8,8,0,0,0,3.94,6,107.71,107.71,0,0,0,26.25,10.87,8,8,0,0,0,7.06-1.49L125.84,216q2.16.06,4.32,0l18.64,14.92a8,8,0,0,0,7.06,1.48,107.21,107.21,0,0,0,26.25-10.88,8,8,0,0,0,3.93-6l2.64-23.72q1.56-1.48,3-3L215.46,186a8,8,0,0,0,6-3.94,107.71,107.71,0,0,0,10.87-26.25,8,8,0,0,0-1.49-7.06ZM128,168a40,40,0,1,1,40-40A40,40,0,0,1,128,168Z`}))],[`light`,W.createElement(W.Fragment,null,W.createElement(`path`,{d:`M128,82a46,46,0,1,0,46,46A46.06,46.06,0,0,0,128,82Zm0,80a34,34,0,1,1,34-34A34,34,0,0,1,128,162ZM214,130.84c.06-1.89.06-3.79,0-5.68L229.33,106a6,6,0,0,0,1.11-5.29A105.34,105.34,0,0,0,219.76,74.9a6,6,0,0,0-4.53-3l-24.45-2.71q-1.93-2.07-4-4l-2.72-24.46a6,6,0,0,0-3-4.53,105.65,105.65,0,0,0-25.77-10.66A6,6,0,0,0,150,26.68l-19.2,15.37c-1.89-.06-3.79-.06-5.68,0L106,26.67a6,6,0,0,0-5.29-1.11A105.34,105.34,0,0,0,74.9,36.24a6,6,0,0,0-3,4.53L69.23,65.22q-2.07,1.94-4,4L40.76,72a6,6,0,0,0-4.53,3,105.65,105.65,0,0,0-10.66,25.77A6,6,0,0,0,26.68,106l15.37,19.2c-.06,1.89-.06,3.79,0,5.68L26.67,150.05a6,6,0,0,0-1.11,5.29A105.34,105.34,0,0,0,36.24,181.1a6,6,0,0,0,4.53,3l24.45,2.71q1.94,2.07,4,4L72,215.24a6,6,0,0,0,3,4.53,105.65,105.65,0,0,0,25.77,10.66,6,6,0,0,0,5.29-1.11L125.16,214c1.89.06,3.79.06,5.68,0l19.21,15.38a6,6,0,0,0,3.75,1.31,6.2,6.2,0,0,0,1.54-.2,105.34,105.34,0,0,0,25.76-10.68,6,6,0,0,0,3-4.53l2.71-24.45q2.07-1.93,4-4l24.46-2.72a6,6,0,0,0,4.53-3,105.49,105.49,0,0,0,10.66-25.77,6,6,0,0,0-1.11-5.29Zm-3.1,41.63-23.64,2.63a6,6,0,0,0-3.82,2,75.14,75.14,0,0,1-6.31,6.31,6,6,0,0,0-2,3.82l-2.63,23.63A94.28,94.28,0,0,1,155.14,218l-18.57-14.86a6,6,0,0,0-3.75-1.31h-.36a78.07,78.07,0,0,1-8.92,0,6,6,0,0,0-4.11,1.3L100.87,218a94.13,94.13,0,0,1-17.34-7.17L80.9,187.21a6,6,0,0,0-2-3.82,75.14,75.14,0,0,1-6.31-6.31,6,6,0,0,0-3.82-2l-23.63-2.63A94.28,94.28,0,0,1,38,155.14l14.86-18.57a6,6,0,0,0,1.3-4.11,78.07,78.07,0,0,1,0-8.92,6,6,0,0,0-1.3-4.11L38,100.87a94.13,94.13,0,0,1,7.17-17.34L68.79,80.9a6,6,0,0,0,3.82-2,75.14,75.14,0,0,1,6.31-6.31,6,6,0,0,0,2-3.82l2.63-23.63A94.28,94.28,0,0,1,100.86,38l18.57,14.86a6,6,0,0,0,4.11,1.3,78.07,78.07,0,0,1,8.92,0,6,6,0,0,0,4.11-1.3L155.13,38a94.13,94.13,0,0,1,17.34,7.17l2.63,23.64a6,6,0,0,0,2,3.82,75.14,75.14,0,0,1,6.31,6.31,6,6,0,0,0,3.82,2l23.63,2.63A94.28,94.28,0,0,1,218,100.86l-14.86,18.57a6,6,0,0,0-1.3,4.11,78.07,78.07,0,0,1,0,8.92,6,6,0,0,0,1.3,4.11L218,155.13A94.13,94.13,0,0,1,210.85,172.47Z`}))],[`regular`,W.createElement(W.Fragment,null,W.createElement(`path`,{d:`M128,80a48,48,0,1,0,48,48A48.05,48.05,0,0,0,128,80Zm0,80a32,32,0,1,1,32-32A32,32,0,0,1,128,160Zm88-29.84q.06-2.16,0-4.32l14.92-18.64a8,8,0,0,0,1.48-7.06,107.21,107.21,0,0,0-10.88-26.25,8,8,0,0,0-6-3.93l-23.72-2.64q-1.48-1.56-3-3L186,40.54a8,8,0,0,0-3.94-6,107.71,107.71,0,0,0-26.25-10.87,8,8,0,0,0-7.06,1.49L130.16,40Q128,40,125.84,40L107.2,25.11a8,8,0,0,0-7.06-1.48A107.6,107.6,0,0,0,73.89,34.51a8,8,0,0,0-3.93,6L67.32,64.27q-1.56,1.49-3,3L40.54,70a8,8,0,0,0-6,3.94,107.71,107.71,0,0,0-10.87,26.25,8,8,0,0,0,1.49,7.06L40,125.84Q40,128,40,130.16L25.11,148.8a8,8,0,0,0-1.48,7.06,107.21,107.21,0,0,0,10.88,26.25,8,8,0,0,0,6,3.93l23.72,2.64q1.49,1.56,3,3L70,215.46a8,8,0,0,0,3.94,6,107.71,107.71,0,0,0,26.25,10.87,8,8,0,0,0,7.06-1.49L125.84,216q2.16.06,4.32,0l18.64,14.92a8,8,0,0,0,7.06,1.48,107.21,107.21,0,0,0,26.25-10.88,8,8,0,0,0,3.93-6l2.64-23.72q1.56-1.48,3-3L215.46,186a8,8,0,0,0,6-3.94,107.71,107.71,0,0,0,10.87-26.25,8,8,0,0,0-1.49-7.06Zm-16.1-6.5a73.93,73.93,0,0,1,0,8.68,8,8,0,0,0,1.74,5.48l14.19,17.73a91.57,91.57,0,0,1-6.23,15L187,173.11a8,8,0,0,0-5.1,2.64,74.11,74.11,0,0,1-6.14,6.14,8,8,0,0,0-2.64,5.1l-2.51,22.58a91.32,91.32,0,0,1-15,6.23l-17.74-14.19a8,8,0,0,0-5-1.75h-.48a73.93,73.93,0,0,1-8.68,0,8,8,0,0,0-5.48,1.74L100.45,215.8a91.57,91.57,0,0,1-15-6.23L82.89,187a8,8,0,0,0-2.64-5.1,74.11,74.11,0,0,1-6.14-6.14,8,8,0,0,0-5.1-2.64L46.43,170.6a91.32,91.32,0,0,1-6.23-15l14.19-17.74a8,8,0,0,0,1.74-5.48,73.93,73.93,0,0,1,0-8.68,8,8,0,0,0-1.74-5.48L40.2,100.45a91.57,91.57,0,0,1,6.23-15L69,82.89a8,8,0,0,0,5.1-2.64,74.11,74.11,0,0,1,6.14-6.14A8,8,0,0,0,82.89,69L85.4,46.43a91.32,91.32,0,0,1,15-6.23l17.74,14.19a8,8,0,0,0,5.48,1.74,73.93,73.93,0,0,1,8.68,0,8,8,0,0,0,5.48-1.74L155.55,40.2a91.57,91.57,0,0,1,15,6.23L173.11,69a8,8,0,0,0,2.64,5.1,74.11,74.11,0,0,1,6.14,6.14,8,8,0,0,0,5.1,2.64l22.58,2.51a91.32,91.32,0,0,1,6.23,15l-14.19,17.74A8,8,0,0,0,199.87,123.66Z`}))],[`thin`,W.createElement(W.Fragment,null,W.createElement(`path`,{d:`M128,84a44,44,0,1,0,44,44A44.05,44.05,0,0,0,128,84Zm0,80a36,36,0,1,1,36-36A36,36,0,0,1,128,164Zm83.93-32.49q.13-3.51,0-7l15.83-19.79a4,4,0,0,0,.75-3.53A103.64,103.64,0,0,0,218,75.9a4,4,0,0,0-3-2l-25.19-2.8c-1.58-1.71-3.24-3.37-4.95-4.95L182.07,41a4,4,0,0,0-2-3A104,104,0,0,0,154.82,27.5a4,4,0,0,0-3.53.74L131.51,44.07q-3.51-.14-7,0L104.7,28.24a4,4,0,0,0-3.53-.75A103.64,103.64,0,0,0,75.9,38a4,4,0,0,0-2,3l-2.8,25.19c-1.71,1.58-3.37,3.24-4.95,4.95L41,73.93a4,4,0,0,0-3,2A104,104,0,0,0,27.5,101.18a4,4,0,0,0,.74,3.53l15.83,19.78q-.14,3.51,0,7L28.24,151.3a4,4,0,0,0-.75,3.53A103.64,103.64,0,0,0,38,180.1a4,4,0,0,0,3,2l25.19,2.8c1.58,1.71,3.24,3.37,4.95,4.95l2.8,25.2a4,4,0,0,0,2,3,104,104,0,0,0,25.28,10.46,4,4,0,0,0,3.53-.74l19.78-15.83q3.51.13,7,0l19.79,15.83a4,4,0,0,0,2.5.88,4,4,0,0,0,1-.13A103.64,103.64,0,0,0,180.1,218a4,4,0,0,0,2-3l2.8-25.19c1.71-1.58,3.37-3.24,4.95-4.95l25.2-2.8a4,4,0,0,0,3-2,104,104,0,0,0,10.46-25.28,4,4,0,0,0-.74-3.53Zm.17,42.83-24.67,2.74a4,4,0,0,0-2.55,1.32,76.2,76.2,0,0,1-6.48,6.48,4,4,0,0,0-1.32,2.55l-2.74,24.66a95.45,95.45,0,0,1-19.64,8.15l-19.38-15.51a4,4,0,0,0-2.5-.87h-.24a73.67,73.67,0,0,1-9.16,0,4,4,0,0,0-2.74.87l-19.37,15.5a95.33,95.33,0,0,1-19.65-8.13l-2.74-24.67a4,4,0,0,0-1.32-2.55,76.2,76.2,0,0,1-6.48-6.48,4,4,0,0,0-2.55-1.32l-24.66-2.74a95.45,95.45,0,0,1-8.15-19.64l15.51-19.38a4,4,0,0,0,.87-2.74,77.76,77.76,0,0,1,0-9.16,4,4,0,0,0-.87-2.74l-15.5-19.37A95.33,95.33,0,0,1,43.9,81.66l24.67-2.74a4,4,0,0,0,2.55-1.32,76.2,76.2,0,0,1,6.48-6.48,4,4,0,0,0,1.32-2.55l2.74-24.66a95.45,95.45,0,0,1,19.64-8.15l19.38,15.51a4,4,0,0,0,2.74.87,73.67,73.67,0,0,1,9.16,0,4,4,0,0,0,2.74-.87l19.37-15.5a95.33,95.33,0,0,1,19.65,8.13l2.74,24.67a4,4,0,0,0,1.32,2.55,76.2,76.2,0,0,1,6.48,6.48,4,4,0,0,0,2.55,1.32l24.66,2.74a95.45,95.45,0,0,1,8.15,19.64l-15.51,19.38a4,4,0,0,0-.87,2.74,77.76,77.76,0,0,1,0,9.16,4,4,0,0,0,.87,2.74l15.5,19.37A95.33,95.33,0,0,1,212.1,174.34Z`}))]]),ae=new Map([[`bold`,W.createElement(W.Fragment,null,W.createElement(`path`,{d:`M195.8,60.2a28,28,0,0,0-39.51-.09L144.68,72.28a12,12,0,1,1-17.36-16.56L139,43.43l.2-.2a52,52,0,0,1,73.54,73.54l-.2.2-12.29,11.71a12,12,0,0,1-16.56-17.36l12.17-11.61A28,28,0,0,0,195.8,60.2ZM111.32,183.72,99.71,195.89a28,28,0,0,1-39.6-39.6l12.17-11.61a12,12,0,0,0-16.56-17.36L43.43,139l-.2.2a52,52,0,0,0,73.54,73.54l.2-.2,11.71-12.29a12,12,0,1,0-17.36-16.56ZM216,148H192a12,12,0,0,0,0,24h24a12,12,0,0,0,0-24ZM40,108H64a12,12,0,0,0,0-24H40a12,12,0,0,0,0,24Zm120,72a12,12,0,0,0-12,12v24a12,12,0,0,0,24,0V192A12,12,0,0,0,160,180ZM96,76a12,12,0,0,0,12-12V40a12,12,0,0,0-24,0V64A12,12,0,0,0,96,76Z`}))],[`duotone`,W.createElement(W.Fragment,null,W.createElement(`path`,{d:`M204.28,108.28l-96,96a40,40,0,0,1-56.56-56.56l96-96a40,40,0,0,1,56.56,56.56Z`,opacity:`0.2`}),W.createElement(`path`,{d:`M198.63,57.37a32,32,0,0,0-45.19-.06L141.79,69.52a8,8,0,0,1-11.58-11l11.72-12.29a1.59,1.59,0,0,1,.13-.13,48,48,0,0,1,67.88,67.88,1.59,1.59,0,0,1-.13.13l-12.29,11.72a8,8,0,0,1-11-11.58l12.21-11.65A32,32,0,0,0,198.63,57.37ZM114.21,186.48l-11.65,12.21a32,32,0,0,1-45.25-45.25l12.21-11.65a8,8,0,0,0-11-11.58L46.19,141.93a1.59,1.59,0,0,0-.13.13,48,48,0,0,0,67.88,67.88,1.59,1.59,0,0,0,.13-.13l11.72-12.29a8,8,0,1,0-11.58-11ZM216,152H192a8,8,0,0,0,0,16h24a8,8,0,0,0,0-16ZM40,104H64a8,8,0,0,0,0-16H40a8,8,0,0,0,0,16Zm120,80a8,8,0,0,0-8,8v24a8,8,0,0,0,16,0V192A8,8,0,0,0,160,184ZM96,72a8,8,0,0,0,8-8V40a8,8,0,0,0-16,0V64A8,8,0,0,0,96,72Z`}))],[`fill`,W.createElement(W.Fragment,null,W.createElement(`path`,{d:`M208,32H48A16,16,0,0,0,32,48V208a16,16,0,0,0,16,16H208a16,16,0,0,0,16-16V48A16,16,0,0,0,208,32ZM96,64a8,8,0,0,1,16,0V80a8,8,0,0,1-16,0ZM64,96H80a8,8,0,0,1,0,16H64a8,8,0,0,1,0-16Zm64.08,85.66-7.21,7.21a38,38,0,1,1-53.74-53.74l7.21-7.21a8,8,0,1,1,11.32,11.31l-7.22,7.21a22,22,0,0,0,31.12,31.12l7.21-7.22a8,8,0,1,1,11.31,11.32ZM160,192a8,8,0,0,1-16,0V176a8,8,0,0,1,16,0Zm32-32H176a8,8,0,0,1,0-16h16a8,8,0,0,1,0,16Zm-3.13-39.13-7.21,7.21a8,8,0,1,1-11.32-11.31l7.22-7.21a22,22,0,0,0-31.12-31.12l-7.21,7.22a8,8,0,1,1-11.31-11.32l7.21-7.21a38,38,0,1,1,53.74,53.74Z`}))],[`light`,W.createElement(W.Fragment,null,W.createElement(`path`,{d:`M200,56a34,34,0,0,0-48-.05L140.34,68.14a6,6,0,1,1-8.68-8.28l11.71-12.28.1-.11a46,46,0,0,1,65.06,65.06l-.11.1-12.28,11.71a6,6,0,1,1-8.28-8.68L200.09,104A34,34,0,0,0,200,56Zm-84.38,131.9L104,200.09A34,34,0,0,1,55.91,152l12.23-11.67a6,6,0,0,0-8.28-8.68L47.58,143.37l-.11.1a46,46,0,0,0,65.06,65.06l.1-.11,11.71-12.28a6,6,0,1,0-8.68-8.28ZM216,154H192a6,6,0,0,0,0,12h24a6,6,0,0,0,0-12ZM40,102H64a6,6,0,0,0,0-12H40a6,6,0,0,0,0,12Zm120,84a6,6,0,0,0-6,6v24a6,6,0,0,0,12,0V192A6,6,0,0,0,160,186ZM96,70a6,6,0,0,0,6-6V40a6,6,0,0,0-12,0V64A6,6,0,0,0,96,70Z`}))],[`regular`,W.createElement(W.Fragment,null,W.createElement(`path`,{d:`M198.63,57.37a32,32,0,0,0-45.19-.06L141.79,69.52a8,8,0,0,1-11.58-11l11.72-12.29a1.59,1.59,0,0,1,.13-.13,48,48,0,0,1,67.88,67.88,1.59,1.59,0,0,1-.13.13l-12.29,11.72a8,8,0,0,1-11-11.58l12.21-11.65A32,32,0,0,0,198.63,57.37ZM114.21,186.48l-11.65,12.21a32,32,0,0,1-45.25-45.25l12.21-11.65a8,8,0,0,0-11-11.58L46.19,141.93a1.59,1.59,0,0,0-.13.13,48,48,0,0,0,67.88,67.88,1.59,1.59,0,0,0,.13-.13l11.72-12.29a8,8,0,1,0-11.58-11ZM216,152H192a8,8,0,0,0,0,16h24a8,8,0,0,0,0-16ZM40,104H64a8,8,0,0,0,0-16H40a8,8,0,0,0,0,16Zm120,80a8,8,0,0,0-8,8v24a8,8,0,0,0,16,0V192A8,8,0,0,0,160,184ZM96,72a8,8,0,0,0,8-8V40a8,8,0,0,0-16,0V64A8,8,0,0,0,96,72Z`}))],[`thin`,W.createElement(W.Fragment,null,W.createElement(`path`,{d:`M201.46,54.54a36.06,36.06,0,0,0-50.92,0L138.89,66.76a4,4,0,0,1-5.78-5.52L144.82,49a44,44,0,1,1,62.29,62.15l-12.35,11.78a4,4,0,0,1-5.52-5.78l12.28-11.72A36,36,0,0,0,201.46,54.54Zm-84.35,134.7-11.65,12.22a36,36,0,0,1-51-50.85l12.28-11.72a4,4,0,0,0-5.52-5.78L48.89,144.89A44,44,0,1,0,111.18,207l11.71-12.28a4,4,0,1,0-5.78-5.52ZM216,156H192a4,4,0,0,0,0,8h24a4,4,0,0,0,0-8ZM40,100H64a4,4,0,0,0,0-8H40a4,4,0,0,0,0,8Zm120,88a4,4,0,0,0-4,4v24a4,4,0,0,0,8,0V192A4,4,0,0,0,160,188ZM96,68a4,4,0,0,0,4-4V40a4,4,0,0,0-8,0V64A4,4,0,0,0,96,68Z`}))]]),oe=new Map([[`bold`,W.createElement(W.Fragment,null,W.createElement(`path`,{d:`M230.14,70.54,185.46,25.85a20,20,0,0,0-28.29,0L33.86,149.17A19.85,19.85,0,0,0,28,163.31V208a20,20,0,0,0,20,20H92.69a19.86,19.86,0,0,0,14.14-5.86L230.14,98.82a20,20,0,0,0,0-28.28ZM91,204H52V165l84-84,39,39ZM192,103,153,64l18.34-18.34,39,39Z`}))],[`duotone`,W.createElement(W.Fragment,null,W.createElement(`path`,{d:`M221.66,90.34,192,120,136,64l29.66-29.66a8,8,0,0,1,11.31,0L221.66,79A8,8,0,0,1,221.66,90.34Z`,opacity:`0.2`}),W.createElement(`path`,{d:`M227.31,73.37,182.63,28.68a16,16,0,0,0-22.63,0L36.69,152A15.86,15.86,0,0,0,32,163.31V208a16,16,0,0,0,16,16H92.69A15.86,15.86,0,0,0,104,219.31L227.31,96a16,16,0,0,0,0-22.63ZM92.69,208H48V163.31l88-88L180.69,120ZM192,108.68,147.31,64l24-24L216,84.68Z`}))],[`fill`,W.createElement(W.Fragment,null,W.createElement(`path`,{d:`M227.31,73.37,182.63,28.68a16,16,0,0,0-22.63,0L36.69,152A15.86,15.86,0,0,0,32,163.31V208a16,16,0,0,0,16,16H92.69A15.86,15.86,0,0,0,104,219.31L227.31,96a16,16,0,0,0,0-22.63ZM192,108.68,147.31,64l24-24L216,84.68Z`}))],[`light`,W.createElement(W.Fragment,null,W.createElement(`path`,{d:`M225.9,74.78,181.21,30.09a14,14,0,0,0-19.8,0L38.1,153.41a13.94,13.94,0,0,0-4.1,9.9V208a14,14,0,0,0,14,14H92.69a13.94,13.94,0,0,0,9.9-4.1L225.9,94.58a14,14,0,0,0,0-19.8ZM94.1,209.41a2,2,0,0,1-1.41.59H48a2,2,0,0,1-2-2V163.31a2,2,0,0,1,.59-1.41L136,72.48,183.51,120ZM217.41,86.1,192,111.51,144.49,64,169.9,38.58a2,2,0,0,1,2.83,0l44.68,44.69a2,2,0,0,1,0,2.83Z`}))],[`regular`,W.createElement(W.Fragment,null,W.createElement(`path`,{d:`M227.31,73.37,182.63,28.68a16,16,0,0,0-22.63,0L36.69,152A15.86,15.86,0,0,0,32,163.31V208a16,16,0,0,0,16,16H92.69A15.86,15.86,0,0,0,104,219.31L227.31,96a16,16,0,0,0,0-22.63ZM92.69,208H48V163.31l88-88L180.69,120ZM192,108.68,147.31,64l24-24L216,84.68Z`}))],[`thin`,W.createElement(W.Fragment,null,W.createElement(`path`,{d:`M224.49,76.2,179.8,31.51a12,12,0,0,0-17,0L133.17,61.17h0L39.52,154.83A11.9,11.9,0,0,0,36,163.31V208a12,12,0,0,0,12,12H92.69a12,12,0,0,0,8.48-3.51L224.48,93.17a12,12,0,0,0,0-17Zm-129,134.63A4,4,0,0,1,92.69,212H48a4,4,0,0,1-4-4V163.31a4,4,0,0,1,1.17-2.83L136,69.65,186.34,120ZM218.83,87.51,192,114.34,141.66,64l26.82-26.83a4,4,0,0,1,5.66,0l44.69,44.68a4,4,0,0,1,0,5.66Z`}))]]),se=new Map([[`bold`,W.createElement(W.Fragment,null,W.createElement(`path`,{d:`M124,216a12,12,0,0,1-12,12H48a12,12,0,0,1-12-12V40A12,12,0,0,1,48,28h64a12,12,0,0,1,0,24H60V204h52A12,12,0,0,1,124,216Zm108.49-96.49-40-40a12,12,0,0,0-17,17L195,116H112a12,12,0,0,0,0,24h83l-19.52,19.51a12,12,0,0,0,17,17l40-40A12,12,0,0,0,232.49,119.51Z`}))],[`duotone`,W.createElement(W.Fragment,null,W.createElement(`path`,{d:`M224,56V200a16,16,0,0,1-16,16H48V40H208A16,16,0,0,1,224,56Z`,opacity:`0.2`}),W.createElement(`path`,{d:`M120,216a8,8,0,0,1-8,8H48a8,8,0,0,1-8-8V40a8,8,0,0,1,8-8h64a8,8,0,0,1,0,16H56V208h56A8,8,0,0,1,120,216Zm109.66-93.66-40-40a8,8,0,0,0-11.32,11.32L204.69,120H112a8,8,0,0,0,0,16h92.69l-26.35,26.34a8,8,0,0,0,11.32,11.32l40-40A8,8,0,0,0,229.66,122.34Z`}))],[`fill`,W.createElement(W.Fragment,null,W.createElement(`path`,{d:`M120,216a8,8,0,0,1-8,8H48a8,8,0,0,1-8-8V40a8,8,0,0,1,8-8h64a8,8,0,0,1,0,16H56V208h56A8,8,0,0,1,120,216Zm109.66-93.66-40-40A8,8,0,0,0,176,88v32H112a8,8,0,0,0,0,16h64v32a8,8,0,0,0,13.66,5.66l40-40A8,8,0,0,0,229.66,122.34Z`}))],[`light`,W.createElement(W.Fragment,null,W.createElement(`path`,{d:`M118,216a6,6,0,0,1-6,6H48a6,6,0,0,1-6-6V40a6,6,0,0,1,6-6h64a6,6,0,0,1,0,12H54V210h58A6,6,0,0,1,118,216Zm110.24-92.24-40-40a6,6,0,0,0-8.48,8.48L209.51,122H112a6,6,0,0,0,0,12h97.51l-29.75,29.76a6,6,0,1,0,8.48,8.48l40-40A6,6,0,0,0,228.24,123.76Z`}))],[`regular`,W.createElement(W.Fragment,null,W.createElement(`path`,{d:`M120,216a8,8,0,0,1-8,8H48a8,8,0,0,1-8-8V40a8,8,0,0,1,8-8h64a8,8,0,0,1,0,16H56V208h56A8,8,0,0,1,120,216Zm109.66-93.66-40-40a8,8,0,0,0-11.32,11.32L204.69,120H112a8,8,0,0,0,0,16h92.69l-26.35,26.34a8,8,0,0,0,11.32,11.32l40-40A8,8,0,0,0,229.66,122.34Z`}))],[`thin`,W.createElement(W.Fragment,null,W.createElement(`path`,{d:`M116,216a4,4,0,0,1-4,4H48a4,4,0,0,1-4-4V40a4,4,0,0,1,4-4h64a4,4,0,0,1,0,8H52V212h60A4,4,0,0,1,116,216Zm110.83-90.83-40-40a4,4,0,0,0-5.66,5.66L214.34,124H112a4,4,0,0,0,0,8H214.34l-33.17,33.17a4,4,0,0,0,5.66,5.66l40-40A4,4,0,0,0,226.83,125.17Z`}))]]),J=W.forwardRef((e,t)=>W.createElement(i,{ref:t,...e,weights:G}));J.displayName=`CloudIcon`;var Y=W.forwardRef((e,t)=>W.createElement(i,{ref:t,...e,weights:K}));Y.displayName=`DeviceMobileIcon`;var X=W.forwardRef((e,t)=>W.createElement(i,{ref:t,...e,weights:q}));X.displayName=`GearIcon`;var Z=W.forwardRef((e,t)=>W.createElement(i,{ref:t,...e,weights:ae}));Z.displayName=`LinkBreakIcon`;var ce=W.forwardRef((e,t)=>W.createElement(i,{ref:t,...e,weights:oe}));ce.displayName=`PencilSimpleIcon`;var le=W.forwardRef((e,t)=>W.createElement(i,{ref:t,...e,weights:se}));le.displayName=`SignOutIcon`;var Q=t();function ue({isConfigManaged:e,isDeletionEnabled:t,onDeleteClick:r}){let{t:i}=n();return t?(0,Q.jsxs)(`div`,{className:`rounded-xl border border-base-200 border-l-4 border-l-error/60`,children:[(0,Q.jsxs)(`div`,{className:`border-base-200 border-b px-4 py-3`,children:[(0,Q.jsxs)(`div`,{className:`flex items-center gap-2`,children:[(0,Q.jsx)(_,{className:`size-4 text-error`,weight:`fill`}),(0,Q.jsx)(`h2`,{className:`font-semibold text-error text-sm`,children:i(`profile.dangerZone.title`)})]}),(0,Q.jsx)(`p`,{className:`mt-0.5 text-base-content/60 text-xs`,children:i(`profile.dangerZone.description`)})]}),(0,Q.jsx)(`div`,{className:`px-4 py-3`,children:(0,Q.jsxs)(`div`,{className:`flex items-center justify-between gap-4`,children:[(0,Q.jsxs)(`div`,{className:`min-w-0 flex-1`,children:[(0,Q.jsx)(`p`,{className:`font-medium text-sm`,children:i(`profile.deleteAccount.title`)}),(0,Q.jsx)(`p`,{className:`text-base-content/60 text-xs`,children:i(e?`profile.deleteAccount.configManaged`:`profile.deleteAccount.description`)})]}),(0,Q.jsxs)(`button`,{className:`btn btn-error btn-outline btn-sm gap-2`,"data-testid":`profile-delete-account`,disabled:e,onClick:r,type:`button`,children:[(0,Q.jsx)(O,{className:`size-4`,weight:`bold`}),i(`profile.deleteAccount.button`)]})]})})]}):null}function de({providers:e,unlinkingProvider:t,getAuthorizeUrl:r,onUnlinkRequest:i}){let{t:a}=n();return e.length===0?null:(0,Q.jsxs)(`div`,{className:`rounded-xl border border-base-200`,children:[(0,Q.jsxs)(`div`,{className:`border-base-200 border-b px-4 py-3`,children:[(0,Q.jsx)(`h2`,{className:`font-semibold text-sm`,children:a(`profile.linkedAccounts.title`)}),(0,Q.jsx)(`p`,{className:`text-base-content/60 text-xs`,children:a(`profile.linkedAccounts.description`)})]}),(0,Q.jsx)(`div`,{className:`divide-y divide-base-200`,children:e.map(e=>(0,Q.jsxs)(`div`,{className:`flex items-center justify-between p-4`,children:[(0,Q.jsxs)(`div`,{className:`flex items-center gap-3`,children:[(0,Q.jsx)(`div`,{className:`flex size-9 shrink-0 items-center justify-center rounded-lg ${e.linked?`bg-success/10`:`bg-base-200`}`,children:(0,Q.jsx)(E,{className:`size-4 ${e.linked?`text-success`:`text-base-content/50`}`,weight:`regular`})}),(0,Q.jsxs)(`div`,{children:[(0,Q.jsx)(`div`,{className:`font-medium text-sm`,children:e.display_name}),(0,Q.jsx)(`div`,{className:`text-base-content/60 text-xs`,children:e.linked?a(`profile.linkedAccounts.connected`):a(`profile.linkedAccounts.notConnected`)})]})]}),e.linked?(0,Q.jsx)(`button`,{className:`btn btn-ghost btn-xs text-error`,disabled:t===e.id,onClick:()=>i(e),type:`button`,children:t===e.id?(0,Q.jsxs)(Q.Fragment,{children:[(0,Q.jsx)(`span`,{className:`loading loading-spinner loading-xs`}),a(`profile.linkedAccounts.unlinking`)]}):a(`profile.linkedAccounts.unlink`)}):(0,Q.jsx)(`a`,{className:`btn btn-ghost btn-xs text-primary`,href:r(e.id,`link`,`/profile`),children:a(`profile.linkedAccounts.link`)})]},e.id))})]})}function fe({passkeyCount:e,onOpenModal:t}){let{t:r}=n();return(0,Q.jsxs)(`div`,{className:`flex items-center justify-between p-4`,children:[(0,Q.jsxs)(`div`,{className:`flex items-center gap-3`,children:[(0,Q.jsx)(`div`,{className:`flex size-9 shrink-0 items-center justify-center rounded-lg ${e>0?`bg-success/10`:`bg-base-200`}`,children:(0,Q.jsx)(w,{className:`size-4 ${e>0?`text-success`:`text-base-content/50`}`,weight:`regular`})}),(0,Q.jsxs)(`div`,{children:[(0,Q.jsx)(`div`,{className:`font-medium text-sm`,children:r(`profile.passkey.title`)}),(0,Q.jsx)(`div`,{className:`text-base-content/60 text-xs`,children:e>0?r(`profile.passkey.status.enabled`,{count:e}):r(`profile.passkey.status.disabled`)})]})]}),(0,Q.jsx)(`div`,{className:`flex gap-1`,children:e>0?(0,Q.jsx)(`button`,{className:`btn btn-ghost btn-xs text-primary`,onClick:()=>t(`manage`),type:`button`,children:r(`profile.passkey.manage`)}):(0,Q.jsx)(`button`,{className:`btn btn-ghost btn-xs text-primary`,onClick:()=>t(`setup`),type:`button`,children:r(`profile.passkey.add`)})})]})}function pe({hasPassword:e,hasLinkedOAuth:t,isConfigManaged:r,hasSecondFactorOnly:i,onOpenModal:a}){let{t:o}=n();return(0,Q.jsxs)(`div`,{className:`flex items-center justify-between gap-4 p-4`,children:[(0,Q.jsxs)(`div`,{className:`flex min-w-0 flex-1 items-center gap-3`,children:[(0,Q.jsx)(`div`,{className:`flex size-9 shrink-0 items-center justify-center rounded-lg ${e?`bg-success/10`:`bg-base-200`}`,children:(0,Q.jsx)(T,{className:`size-4 ${e?`text-success`:`text-base-content/50`}`,weight:`regular`})}),(0,Q.jsxs)(`div`,{className:`min-w-0 flex-1`,children:[(0,Q.jsx)(`div`,{className:`font-medium text-sm`,children:o(`profile.password.title`)}),(0,Q.jsx)(`div`,{className:`text-base-content/60 text-xs`,children:o(e?`profile.password.status.set`:`profile.password.status.notSet`)}),r&&(0,Q.jsxs)(`div`,{className:`mt-0.5 flex items-center gap-1 text-base-content/40 text-xs`,children:[(0,Q.jsx)(X,{className:`size-3 shrink-0`,weight:`fill`}),(0,Q.jsx)(`span`,{children:o(`profile.password.configManaged`)})]})]})]}),!r&&(0,Q.jsx)(`div`,{className:`flex shrink-0 items-center gap-1`,children:e?(0,Q.jsxs)(Q.Fragment,{children:[(0,Q.jsx)(`button`,{className:`btn btn-ghost btn-xs text-primary`,"data-testid":`profile-password-change`,onClick:()=>a(`change`),type:`button`,children:o(`profile.password.change`)}),t?(0,Q.jsx)(`button`,{className:`btn btn-ghost btn-xs text-error`,"data-testid":`profile-password-remove`,onClick:()=>a(`remove`),type:`button`,children:o(`profile.password.remove`)}):null,!t&&i&&(0,Q.jsxs)(`div`,{className:`dropdown dropdown-end`,children:[(0,Q.jsx)(`button`,{className:`btn btn-disabled btn-ghost btn-xs cursor-not-allowed text-base-content/30`,type:`button`,children:o(`profile.password.remove`)}),(0,Q.jsx)(`div`,{className:`dropdown-content z-50 w-64 rounded-xl border border-base-200 bg-base-100 p-4 shadow-lg`,children:(0,Q.jsxs)(`div`,{className:`flex items-start gap-2`,children:[(0,Q.jsx)(y,{className:`size-4 shrink-0 text-warning`}),(0,Q.jsx)(`div`,{className:`text-xs`,children:o(`profile.password.removeDisabledReason`)})]})})]})]}):(0,Q.jsx)(`button`,{className:`btn btn-ghost btn-xs text-primary`,"data-testid":`profile-password-set`,onClick:()=>a(`set`),type:`button`,children:o(`profile.password.set`)})})]})}function me({totpEnabled:e,recoveryCodesMissing:t,onOpenModal:r}){let{t:i}=n();return(0,Q.jsxs)(`div`,{className:`flex items-center justify-between p-4`,children:[(0,Q.jsxs)(`div`,{className:`flex items-center gap-3`,children:[(0,Q.jsx)(`div`,{className:`flex size-9 shrink-0 items-center justify-center rounded-lg ${e?`bg-success/10`:`bg-base-200`}`,children:(0,Q.jsx)(D,{className:`size-4 ${e?`text-success`:`text-base-content/50`}`,weight:`regular`})}),(0,Q.jsxs)(`div`,{children:[(0,Q.jsx)(`div`,{className:`font-medium text-sm`,children:i(`profile.totp.title`)}),(0,Q.jsx)(`div`,{className:`text-base-content/60 text-xs`,children:i(e?t?`profile.totp.status.recoveryCodesMissing`:`profile.totp.status.enabled`:`profile.totp.status.disabled`)})]})]}),(0,Q.jsx)(`div`,{className:`flex flex-wrap justify-end gap-1`,children:e?(0,Q.jsxs)(Q.Fragment,{children:[(0,Q.jsx)(`button`,{className:`btn btn-ghost btn-xs text-primary`,"data-testid":`profile-totp-regenerate`,onClick:()=>r(`regenerate`),type:`button`,children:i(`profile.totp.regenerate`)}),(0,Q.jsx)(`button`,{className:`btn btn-ghost btn-xs text-error`,"data-testid":`profile-totp-disable`,onClick:()=>r(`disable`),type:`button`,children:i(`profile.totp.disable`)})]}):(0,Q.jsx)(`button`,{className:`btn btn-ghost btn-xs text-primary`,"data-testid":`profile-totp-enable`,onClick:()=>r(`setup`),type:`button`,children:i(`profile.totp.enable`)})})]})}var he={error:`bg-error/10 text-error`,warning:`bg-warning/10 text-warning`,info:`bg-info/10 text-info`},ge={error:A,warning:_,info:y};function $({variant:e,children:t}){let n=ge[e];return(0,Q.jsxs)(`div`,{className:`flex items-start gap-3 rounded-lg p-3 ${he[e]}`,"data-testid":`alert-banner-${e}`,children:[(0,Q.jsx)(n,{className:`mt-0.5 size-5 shrink-0`,weight:`fill`}),(0,Q.jsx)(`div`,{className:`min-w-0 flex-1 text-sm`,children:t})]})}function _e({isOpen:e,onClose:t,providerName:r,isPending:i,onConfirm:a}){let{t:o}=n(),[s,c]=(0,W.useState)(null),l=()=>{i||(c(null),t())};return(0,Q.jsx)(V,{description:o(`profile.linkedAccounts.unlinkModal.description`,{provider:r}),icon:Z,isOpen:e,onClose:l,preventClose:i,title:o(`profile.linkedAccounts.unlinkModal.title`),variant:`destructive`,children:(0,Q.jsxs)(`div`,{className:`mt-4 space-y-3`,children:[(0,Q.jsx)($,{variant:`warning`,children:o(`profile.linkedAccounts.unlinkModal.warning`,{provider:r})}),s&&(0,Q.jsx)($,{variant:`error`,children:s}),(0,Q.jsxs)(B,{children:[(0,Q.jsx)(`button`,{className:`btn btn-sm`,"data-testid":`unlink-oauth-cancel`,disabled:i,onClick:l,type:`button`,children:o(`profile.linkedAccounts.unlinkModal.cancel`)}),(0,Q.jsx)(`button`,{className:`btn btn-sm btn-error`,"data-testid":`unlink-oauth-unlink`,disabled:i,onClick:async()=>{c(null);try{await a(),l()}catch{c(o(`profile.linkedAccounts.unlinkError`))}},type:`button`,children:i?(0,Q.jsxs)(Q.Fragment,{children:[(0,Q.jsx)(`span`,{className:`loading loading-spinner loading-xs`}),o(`profile.linkedAccounts.unlinking`)]}):o(`profile.linkedAccounts.unlink`)})]})]})})}function ve({user:e}){let{t}=n();return(0,Q.jsxs)(`div`,{className:`rounded-xl border border-base-200`,children:[(0,Q.jsxs)(`div`,{className:`border-base-200 border-b px-4 py-3`,children:[(0,Q.jsx)(`h2`,{className:`font-semibold text-sm`,children:t(`profile.account.title`)}),(0,Q.jsx)(`p`,{className:`text-base-content/60 text-xs`,children:t(`profile.account.description`)})]}),(0,Q.jsxs)(`div`,{className:`divide-y divide-base-200`,children:[(0,Q.jsxs)(`div`,{className:`flex items-center justify-between gap-4 px-4 py-3`,children:[(0,Q.jsx)(`span`,{className:`shrink-0 text-base-content/60 text-xs`,children:t(`profile.id.label`)}),(0,Q.jsx)(`span`,{className:`truncate font-medium text-sm`,children:e.sub})]}),(0,Q.jsxs)(`div`,{className:`flex items-center justify-between gap-4 px-4 py-3`,children:[(0,Q.jsx)(`span`,{className:`shrink-0 text-base-content/60 text-xs`,children:t(`profile.email.label`)}),(0,Q.jsx)(`span`,{className:`truncate font-medium text-sm`,children:e.email})]})]})]})}var ye={sm:`size-8 text-sm`,md:`size-12 text-xl`,lg:`size-16 text-2xl`};function be({email:e,size:t=`md`}){let n=e.charAt(0).toUpperCase();return(0,Q.jsx)(`div`,{className:`flex shrink-0 items-center justify-center rounded-full bg-primary font-bold text-primary-content ${ye[t]}`,children:n})}var xe=g({mutationFn:async e=>c(await d.api.user.password.$post({json:e}))}),Se=g({mutationFn:async e=>c(await d.api.user.password.$put({json:e}))}),Ce=g({mutationFn:async e=>c(await d.api.user.password.$delete({json:e}))});function we({isOpen:t,onClose:r}){let{t:i}=n(),a=m(),{data:o}=s(f),c=o.auth.password.policy,l=R({resolver:z((0,W.useMemo)(()=>k.object({currentPassword:k.string().min(1,i(`validation.password.required`)),newPassword:k.string().min(c.min_length,i(`validation.password.min`,{count:c.min_length})).max(c.max_length,i(`validation.password.max`,{count:c.max_length})),confirmPassword:k.string()}).refine(e=>e.newPassword===e.confirmPassword,{message:i(`validation.confirmPassword.mismatch`),path:[`confirmPassword`]}),[c.max_length,c.min_length,i])),defaultValues:{currentPassword:``,newPassword:``,confirmPassword:``}}),u=h({...Se,onSuccess:()=>{a.invalidateQueries({queryKey:j.queryKey}),d()}}),d=()=>{l.reset(),r()},p=l.handleSubmit(async t=>{try{await u.mutateAsync({current_password:t.currentPassword,new_password:t.newPassword})}catch(t){t instanceof e&&t.code===`INVALID_CURRENT_PASSWORD`?l.setError(`currentPassword`,{message:i(`profile.password.changeModal.invalidCurrent`)}):l.setError(`root`,{message:i(`profile.password.changeModal.error`)})}});return(0,Q.jsx)(V,{description:i(`profile.password.changeModal.description`),icon:T,isOpen:t,onClose:d,title:i(`profile.password.changeModal.title`),children:(0,Q.jsxs)(`form`,{className:`mt-4 space-y-3`,onSubmit:p,children:[(0,Q.jsxs)(`div`,{className:`form-control`,children:[(0,Q.jsx)(`label`,{className:`label w-full`,htmlFor:`current-password`,children:(0,Q.jsx)(`span`,{className:`label-text text-xs`,children:i(`profile.password.changeModal.currentPassword`)})}),(0,Q.jsx)(`input`,{className:`input input-bordered input-sm w-full ${l.formState.errors.currentPassword?`input-error`:``}`,id:`current-password`,placeholder:i(`profile.password.changeModal.currentPasswordPlaceholder`),type:`password`,...l.register(`currentPassword`)}),l.formState.errors.currentPassword&&(0,Q.jsx)(`span`,{className:`label-text-alt mt-0.5 text-error`,"data-testid":`change-password-error-currentPassword`,children:l.formState.errors.currentPassword.message})]}),(0,Q.jsxs)(`div`,{className:`form-control`,children:[(0,Q.jsx)(`label`,{className:`label w-full`,htmlFor:`new-password-change`,children:(0,Q.jsx)(`span`,{className:`label-text text-xs`,children:i(`profile.password.changeModal.newPassword`)})}),(0,Q.jsx)(`input`,{className:`input input-bordered input-sm w-full ${l.formState.errors.newPassword?`input-error`:``}`,id:`new-password-change`,placeholder:i(`profile.password.changeModal.newPasswordPlaceholder`),type:`password`,...l.register(`newPassword`)}),l.formState.errors.newPassword&&(0,Q.jsx)(`span`,{className:`label-text-alt mt-0.5 text-error`,"data-testid":`change-password-error-newPassword`,children:l.formState.errors.newPassword.message})]}),(0,Q.jsxs)(`div`,{className:`form-control`,children:[(0,Q.jsx)(`label`,{className:`label w-full`,htmlFor:`confirm-password-change`,children:(0,Q.jsx)(`span`,{className:`label-text text-xs`,children:i(`profile.password.changeModal.confirmPassword`)})}),(0,Q.jsx)(`input`,{className:`input input-bordered input-sm w-full ${l.formState.errors.confirmPassword?`input-error`:``}`,id:`confirm-password-change`,placeholder:i(`profile.password.changeModal.confirmPasswordPlaceholder`),type:`password`,...l.register(`confirmPassword`)}),l.formState.errors.confirmPassword&&(0,Q.jsx)(`span`,{className:`label-text-alt mt-0.5 text-error`,"data-testid":`change-password-error-confirmPassword`,children:l.formState.errors.confirmPassword.message})]}),l.formState.errors.root&&(0,Q.jsx)($,{variant:`error`,children:l.formState.errors.root.message}),(0,Q.jsxs)(B,{children:[(0,Q.jsx)(`button`,{className:`btn btn-sm`,"data-testid":`change-password-cancel`,disabled:u.isPending,onClick:d,type:`button`,children:i(`profile.password.changeModal.cancel`)}),(0,Q.jsx)(`button`,{className:`btn btn-sm btn-primary`,"data-testid":`change-password-submit`,disabled:u.isPending,type:`submit`,children:u.isPending?(0,Q.jsxs)(Q.Fragment,{children:[(0,Q.jsx)(`span`,{className:`loading loading-spinner loading-xs`}),i(`profile.password.changeModal.submitting`)]}):i(`profile.password.changeModal.submit`)})]})]})})}var Te=g({mutationFn:async()=>c(await d.api.user.$delete())});function Ee({isOpen:e,onClose:t,retentionDays:r}){let{t:i}=n(),a=u(),o=m(),s=R({resolver:z((0,W.useMemo)(()=>k.object({confirmation:k.string().refine(e=>e.toLowerCase()===i(`profile.deleteAccount.modal.confirmPlaceholder`).toLowerCase(),{message:i(`validation.confirmText.mismatch`)})}),[i])),defaultValues:{confirmation:``}}),c=h({...Te,onSuccess:async()=>{o.setQueryData(j.queryKey,{user:null}),await N(),a.navigate({to:`/login`})}}),l=()=>{c.isPending||(s.reset(),t())},d=s.handleSubmit(async()=>{try{await c.mutateAsync()}catch{s.setError(`root`,{message:i(`profile.deleteAccount.error`)})}});return(0,Q.jsx)(V,{icon:O,isOpen:e,onClose:l,preventClose:c.isPending,title:i(`profile.deleteAccount.modal.title`),variant:`destructive`,children:(0,Q.jsxs)(`form`,{className:`mt-4 space-y-3`,onSubmit:d,children:[(0,Q.jsxs)($,{variant:`error`,children:[(0,Q.jsx)(`p`,{children:i(`profile.deleteAccount.modal.description`,{days:r})}),(0,Q.jsx)(`p`,{className:`mt-0.5 text-xs opacity-80`,children:i(`profile.deleteAccount.modal.warning`)})]}),(0,Q.jsxs)(`div`,{className:`form-control`,children:[(0,Q.jsx)(`label`,{className:`label w-full`,htmlFor:`delete-confirmation`,children:(0,Q.jsx)(`span`,{className:`label-text text-xs`,children:i(`profile.deleteAccount.modal.confirmLabel`)})}),(0,Q.jsx)(`input`,{className:`input input-bordered input-sm w-full ${s.formState.errors.confirmation?`input-error`:``}`,id:`delete-confirmation`,placeholder:i(`profile.deleteAccount.modal.confirmPlaceholder`),type:`text`,...s.register(`confirmation`),autoComplete:`off`}),s.formState.errors.confirmation&&(0,Q.jsx)(`span`,{className:`label-text-alt mt-0.5 text-error`,"data-testid":`delete-account-error`,children:s.formState.errors.confirmation.message})]}),s.formState.errors.root&&(0,Q.jsx)($,{variant:`error`,children:s.formState.errors.root.message}),(0,Q.jsxs)(B,{children:[(0,Q.jsx)(`button`,{className:`btn btn-sm`,"data-testid":`delete-account-cancel`,disabled:c.isPending,onClick:l,type:`button`,children:i(`profile.deleteAccount.modal.cancel`)}),(0,Q.jsx)(`button`,{className:`btn btn-sm btn-error`,"data-testid":`delete-account-submit`,disabled:c.isPending,type:`submit`,children:c.isPending?(0,Q.jsxs)(Q.Fragment,{children:[(0,Q.jsx)(`span`,{className:`loading loading-spinner loading-xs`}),i(`profile.deleteAccount.modal.confirming`)]}):i(`profile.deleteAccount.modal.confirm`)})]})]})})}function De({isOpen:t,onClose:r}){let{t:i}=n(),a=m(),o=R({resolver:z((0,W.useMemo)(()=>k.object({code:k.string().length(6,i(`validation.totp.length`)).regex(/^\d{6}$/,i(`validation.totp.digits`))}),[i])),defaultValues:{code:``}}),s=h({...ie,onSuccess:()=>{a.invalidateQueries({queryKey:j.queryKey}),c()}}),c=()=>{o.reset(),r()},l=o.handleSubmit(async t=>{try{await s.mutateAsync({code:t.code})}catch(t){if(t instanceof e&&t.code===`CANNOT_REMOVE_LAST_SECOND_FACTOR`){o.setError(`code`,{message:i(`profile.totp.disableModal.cannotRemoveLastSecondFactor`)});return}o.setError(`code`,{message:i(`profile.totp.disableModal.error`)})}});return(0,Q.jsx)(V,{description:i(`profile.totp.disableModal.description`),icon:D,isOpen:t,onClose:c,title:i(`profile.totp.disableModal.title`),variant:`destructive`,children:(0,Q.jsxs)(`form`,{className:`mt-4 space-y-3`,onSubmit:l,children:[(0,Q.jsx)($,{variant:`warning`,children:i(`profile.totp.disableModal.warning`)}),(0,Q.jsxs)(`div`,{className:`form-control`,children:[(0,Q.jsx)(`label`,{className:`label w-full`,htmlFor:`disable-totp-code`,children:(0,Q.jsx)(`span`,{className:`label-text text-xs`,children:i(`profile.totp.disableModal.codeLabel`)})}),(0,Q.jsx)(`input`,{autoComplete:`one-time-code`,className:`input input-bordered input-sm w-full text-center text-xl tracking-widest ${o.formState.errors.code?`input-error`:``}`,id:`disable-totp-code`,inputMode:`numeric`,maxLength:6,pattern:`[0-9]*`,placeholder:`000000`,type:`text`,...o.register(`code`)}),o.formState.errors.code&&(0,Q.jsx)(`span`,{className:`label-text-alt mt-0.5 text-error`,"data-testid":`disable-totp-error`,children:o.formState.errors.code.message})]}),(0,Q.jsxs)(B,{children:[(0,Q.jsx)(`button`,{className:`btn btn-sm`,"data-testid":`disable-totp-cancel`,disabled:s.isPending,onClick:c,type:`button`,children:i(`profile.totp.disableModal.cancel`)}),(0,Q.jsx)(`button`,{className:`btn btn-sm btn-error`,"data-testid":`disable-totp-submit`,disabled:s.isPending,type:`submit`,children:s.isPending?(0,Q.jsxs)(Q.Fragment,{children:[(0,Q.jsx)(`span`,{className:`loading loading-spinner loading-xs`}),i(`profile.totp.disableModal.disabling`)]}):i(`profile.totp.disableModal.disable`)})]})]})})}function Oe({isOpen:t,onClose:r,onAddNew:i}){let{t:a}=n(),o=m(),[s,c]=(0,W.useState)(null),[l,u]=(0,W.useState)(null),[d,f]=(0,W.useState)(null),[g,_]=(0,W.useState)(null),{data:v,isLoading:y}=U({...L,enabled:t}),b=h({...I,onSuccess:()=>{o.invalidateQueries({queryKey:p.passkeys()}),o.invalidateQueries({queryKey:j.queryKey})},onSettled:()=>{u(null)}}),x=(0,W.useCallback)(()=>{c(null),u(null),f(null),_(null),r()},[r]),S=e=>{f(e.id),_(null)},C=()=>{f(null),_(null)},T=async t=>{u(t.id),f(null);try{await b.mutateAsync({id:t.id})}catch(t){if(t instanceof e&&t.code===`CANNOT_REMOVE_LAST_SECOND_FACTOR`){_(a(`profile.passkey.manageModal.cannotRemoveLastSecondFactor`));return}_(a(`profile.passkey.manageModal.deleteError`))}},E=e=>new Date(e).toLocaleDateString(void 0,{year:`numeric`,month:`short`,day:`numeric`}),D=v?.passkeys||[];return(0,Q.jsxs)(V,{icon:w,isOpen:t,onClose:x,size:`lg`,title:a(`profile.passkey.manageModal.title`),children:[(0,Q.jsxs)(`div`,{className:`mt-4 space-y-2`,children:[g&&(0,Q.jsx)($,{variant:`error`,children:g}),y&&(0,Q.jsx)(`div`,{className:`flex justify-center py-6`,children:(0,Q.jsx)(`span`,{className:`loading loading-spinner loading-md`})}),!y&&D.length===0&&(0,Q.jsx)(`div`,{className:`py-6 text-center text-base-content/60 text-sm`,"data-testid":`passkeys-empty`,children:(0,Q.jsx)(`p`,{children:a(`profile.passkey.manageModal.noPasskeys`)})}),!y&&D.length>0&&(0,Q.jsx)(`div`,{className:`flex flex-col gap-2`,children:D.map(e=>(0,Q.jsx)(ke,{formatDate:E,isConfirmingDelete:d===e.id,isDeleting:l===e.id,isEditing:s?.id===e.id,onCancelDelete:C,onCancelEdit:()=>c(null),onConfirmDelete:()=>T(e),onEdit:()=>c(e),onRequestDelete:()=>S(e),passkey:e},e.id))})]}),(0,Q.jsxs)(B,{children:[(0,Q.jsx)(`button`,{className:`btn btn-sm`,"data-testid":`manage-passkeys-close`,onClick:x,type:`button`,children:a(`profile.passkey.manageModal.close`)}),(0,Q.jsx)(`button`,{className:`btn btn-sm btn-primary`,"data-testid":`manage-passkeys-add-new`,onClick:()=>{x(),i()},type:`button`,children:a(`profile.passkey.manageModal.addNew`)})]})]})}function ke({passkey:e,isDeleting:t,isEditing:r,isConfirmingDelete:i,onEdit:a,onCancelEdit:o,onRequestDelete:s,onConfirmDelete:c,onCancelDelete:l,formatDate:u}){let{t:d}=n(),f=m(),g=R({resolver:z((0,W.useMemo)(()=>k.object({name:k.string().min(1,d(`validation.passkey.name.required`)).max(100,d(`validation.passkey.name.max`))}),[d])),defaultValues:{name:e.name||``}}),_=h({...P,onSuccess:()=>{f.invalidateQueries({queryKey:p.passkeys()}),o()}}),v=g.handleSubmit(async t=>{try{await _.mutateAsync({id:e.id,name:t.name})}catch{g.setError(`name`,{message:d(`profile.passkey.manageModal.renameError`)})}});return r?(0,Q.jsxs)(`form`,{className:`flex flex-col gap-1.5 rounded-lg bg-base-200 p-2`,onSubmit:v,children:[(0,Q.jsx)(`input`,{className:`input input-bordered input-sm w-full ${g.formState.errors.name?`input-error`:``}`,"data-testid":`passkey-rename-input`,placeholder:d(`profile.passkey.manageModal.namePlaceholder`),type:`text`,...g.register(`name`)}),g.formState.errors.name&&(0,Q.jsx)(`span`,{className:`text-error text-xs`,"data-testid":`passkey-rename-error`,children:g.formState.errors.name.message}),(0,Q.jsxs)(`div`,{className:`flex justify-end gap-1`,children:[(0,Q.jsx)(`button`,{className:`btn btn-ghost btn-xs`,disabled:_.isPending,onClick:()=>{g.reset(),o()},type:`button`,children:d(`profile.passkey.manageModal.cancelEdit`)}),(0,Q.jsx)(`button`,{className:`btn btn-primary btn-xs`,disabled:_.isPending,type:`submit`,children:_.isPending?d(`profile.passkey.manageModal.saving`):d(`profile.passkey.manageModal.save`)})]})]}):i?(0,Q.jsxs)(`div`,{className:`flex items-center justify-between rounded-lg bg-error/10 p-2`,children:[(0,Q.jsxs)(`div`,{className:`flex items-center gap-2`,children:[(0,Q.jsx)(O,{className:`size-4 text-error`,weight:`regular`}),(0,Q.jsx)(`span`,{className:`text-error text-xs`,children:d(`profile.passkey.manageModal.deleteConfirmInline`)})]}),(0,Q.jsxs)(`div`,{className:`flex gap-1`,children:[(0,Q.jsx)(`button`,{className:`btn btn-ghost btn-xs`,onClick:l,type:`button`,children:d(`profile.passkey.manageModal.cancelEdit`)}),(0,Q.jsx)(`button`,{className:`btn btn-error btn-xs`,onClick:c,type:`button`,children:d(`profile.passkey.manageModal.delete`)})]})]}):(0,Q.jsxs)(`div`,{className:`flex items-center justify-between rounded-lg bg-base-200 p-2`,"data-testid":`passkey-item`,children:[(0,Q.jsxs)(`div`,{className:`flex items-center gap-2`,children:[e.device_type===`multiDevice`?(0,Q.jsx)(J,{className:`size-4 text-primary`,weight:`regular`}):(0,Q.jsx)(Y,{className:`size-4 text-primary`,weight:`regular`}),(0,Q.jsxs)(`div`,{children:[(0,Q.jsx)(`div`,{className:`font-medium text-xs`,children:e.name||d(`profile.passkey.manageModal.unnamedPasskey`)}),(0,Q.jsxs)(`div`,{className:`flex items-center gap-1.5 text-base-content/60 text-xs`,children:[(0,Q.jsx)(`span`,{children:d(`profile.passkey.manageModal.createdAt`,{date:u(e.created_at)})}),e.backed_up&&(0,Q.jsx)(`span`,{className:`badge badge-success badge-xs`,children:d(`profile.passkey.manageModal.backedUp`)})]})]})]}),(0,Q.jsxs)(`div`,{className:`flex gap-1`,children:[(0,Q.jsx)(`button`,{"aria-label":d(`profile.passkey.manageModal.rename`),className:`btn btn-ghost btn-xs`,onClick:a,type:`button`,children:(0,Q.jsx)(ce,{className:`size-3.5`,weight:`regular`})}),(0,Q.jsx)(`button`,{"aria-label":d(`profile.passkey.manageModal.delete`),className:`btn btn-ghost btn-xs text-error`,disabled:t,onClick:s,type:`button`,children:t?(0,Q.jsx)(`span`,{className:`loading loading-spinner loading-xs`}):(0,Q.jsx)(O,{className:`size-3.5`,weight:`regular`})})]})]})}function Ae({isOpen:t,onClose:r}){let{t:i}=n(),a=u(),o=m(),{data:c}=s(f),[l,d]=(0,W.useState)(`verify`),[p,g]=(0,W.useState)(null),[_,v]=(0,W.useState)(null),y=h({...H,onSuccess:async e=>{g(e),d(`recovery`),await o.invalidateQueries({queryKey:j.queryKey})}}),x=(0,W.useCallback)(()=>{d(`verify`),g(null),v(null),y.reset()},[y]),C=(0,W.useCallback)(()=>{x(),r()},[r,x]),w=(0,W.useCallback)(async t=>{v(null);try{await y.mutateAsync({code:t})}catch(t){if(t instanceof e){if(t.code===`INVALID_TOTP_CODE`)throw t;if(t.code===`UNAUTHORIZED`){o.setQueryData(j.queryKey,{user:null}),await N(),a.navigate({to:`/login`});return}if(t.code===`TOTP_NOT_ENABLED`||t.code===`VALIDATION_ERROR`){await o.invalidateQueries({queryKey:j.queryKey}),C();return}}v(i(`profile.totp.regenerateModal.unexpectedError`))}},[C,y,o,a,i]);return c.auth.password.totp.enabled?(0,Q.jsx)(V,{description:i(l===`verify`?`profile.totp.regenerateModal.description`:`profile.totp.regenerateModal.recoveryDescription`),icon:D,isOpen:t,onClose:C,preventClose:l===`recovery`,size:`sm`,title:i(l===`verify`?`profile.totp.regenerateModal.title`:`profile.totp.regenerateModal.recoveryTitle`),children:l===`verify`?(0,Q.jsxs)(`div`,{className:`mt-4`,children:[_&&(0,Q.jsx)(`div`,{className:`mb-3`,children:(0,Q.jsx)($,{variant:`error`,children:_})}),(0,Q.jsx)(S,{invalidMessage:i(`profile.totp.regenerateModal.error`),isPending:y.isPending,onSubmit:w,pendingText:i(`profile.totp.regenerateModal.submitting`),submitLabel:i(`profile.totp.regenerateModal.submit`)})]}):(0,Q.jsx)(`div`,{className:`mt-4`,children:(0,Q.jsx)(b,{onConfirm:C,recoveryCodes:p?.recovery_codes??[]})})}):null}function je({isOpen:t,onClose:r}){let{t:i}=n(),a=m(),o=R({resolver:z((0,W.useMemo)(()=>k.object({currentPassword:k.string().min(1,i(`validation.password.required`))}),[i])),defaultValues:{currentPassword:``}}),s=h({...Ce,onSuccess:()=>{a.invalidateQueries({queryKey:j.queryKey}),c()}}),c=()=>{o.reset(),r()},l=o.handleSubmit(async t=>{try{await s.mutateAsync({current_password:t.currentPassword})}catch(t){if(t instanceof e){if(t.code===`INVALID_CURRENT_PASSWORD`){o.setError(`currentPassword`,{message:i(`profile.password.removeModal.invalidCurrent`)});return}if(t.code===`CANNOT_REMOVE_LAST_AUTH_METHOD`){o.setError(`root`,{message:i(`profile.password.removeModal.noOAuth`)});return}if(t.code===`CANNOT_REMOVE_PASSWORD_WITH_SECOND_FACTOR_ONLY`){o.setError(`root`,{message:i(`profile.password.removeModal.noOAuthWith2FA`)});return}}o.setError(`root`,{message:i(`profile.password.removeModal.error`)})}});return(0,Q.jsx)(V,{description:i(`profile.password.removeModal.description`),icon:T,isOpen:t,onClose:c,title:i(`profile.password.removeModal.title`),variant:`destructive`,children:(0,Q.jsxs)(`form`,{className:`mt-4 space-y-3`,onSubmit:l,children:[(0,Q.jsxs)(`div`,{className:`form-control`,children:[(0,Q.jsx)(`label`,{className:`label w-full`,htmlFor:`current-password-remove`,children:(0,Q.jsx)(`span`,{className:`label-text text-xs`,children:i(`profile.password.removeModal.currentPassword`)})}),(0,Q.jsx)(`input`,{className:`input input-bordered input-sm w-full ${o.formState.errors.currentPassword?`input-error`:``}`,id:`current-password-remove`,placeholder:i(`profile.password.removeModal.currentPasswordPlaceholder`),type:`password`,...o.register(`currentPassword`)}),o.formState.errors.currentPassword&&(0,Q.jsx)(`span`,{className:`label-text-alt mt-0.5 text-error`,"data-testid":`remove-password-error`,children:o.formState.errors.currentPassword.message})]}),o.formState.errors.root&&(0,Q.jsx)($,{variant:`error`,children:o.formState.errors.root.message}),(0,Q.jsxs)(B,{children:[(0,Q.jsx)(`button`,{className:`btn btn-sm`,"data-testid":`remove-password-cancel`,disabled:s.isPending,onClick:c,type:`button`,children:i(`profile.password.removeModal.cancel`)}),(0,Q.jsx)(`button`,{className:`btn btn-sm btn-error`,"data-testid":`remove-password-submit`,disabled:s.isPending,type:`submit`,children:s.isPending?(0,Q.jsxs)(Q.Fragment,{children:[(0,Q.jsx)(`span`,{className:`loading loading-spinner loading-xs`}),i(`profile.password.removeModal.submitting`)]}):i(`profile.password.removeModal.submit`)})]})]})})}function Me({isOpen:e,onClose:t}){let{t:r}=n(),i=m(),{data:a}=s(f),o=a.auth.password.policy,c=R({resolver:z((0,W.useMemo)(()=>k.object({password:k.string().min(o.min_length,r(`validation.password.min`,{count:o.min_length})).max(o.max_length,r(`validation.password.max`,{count:o.max_length})),confirmPassword:k.string()}).refine(e=>e.password===e.confirmPassword,{message:r(`validation.confirmPassword.mismatch`),path:[`confirmPassword`]}),[o.max_length,o.min_length,r])),defaultValues:{password:``,confirmPassword:``}}),l=h({...xe,onSuccess:()=>{i.invalidateQueries({queryKey:j.queryKey}),u()}}),u=()=>{c.reset(),t()},d=c.handleSubmit(async e=>{try{await l.mutateAsync({password:e.password})}catch{c.setError(`root`,{message:r(`profile.password.setModal.error`)})}});return(0,Q.jsx)(V,{description:r(`profile.password.setModal.description`),icon:T,isOpen:e,onClose:u,title:r(`profile.password.setModal.title`),children:(0,Q.jsxs)(`form`,{className:`mt-4 space-y-3`,onSubmit:d,children:[(0,Q.jsxs)(`div`,{className:`form-control`,children:[(0,Q.jsx)(`label`,{className:`label w-full`,htmlFor:`new-password`,children:(0,Q.jsx)(`span`,{className:`label-text text-xs`,children:r(`profile.password.setModal.newPassword`)})}),(0,Q.jsx)(`input`,{className:`input input-bordered input-sm w-full ${c.formState.errors.password?`input-error`:``}`,id:`new-password`,placeholder:r(`profile.password.setModal.newPasswordPlaceholder`),type:`password`,...c.register(`password`)}),c.formState.errors.password&&(0,Q.jsx)(`span`,{className:`label-text-alt mt-0.5 text-error`,"data-testid":`set-password-error-password`,children:c.formState.errors.password.message})]}),(0,Q.jsxs)(`div`,{className:`form-control`,children:[(0,Q.jsx)(`label`,{className:`label w-full`,htmlFor:`confirm-password`,children:(0,Q.jsx)(`span`,{className:`label-text text-xs`,children:r(`profile.password.setModal.confirmPassword`)})}),(0,Q.jsx)(`input`,{className:`input input-bordered input-sm w-full ${c.formState.errors.confirmPassword?`input-error`:``}`,id:`confirm-password`,placeholder:r(`profile.password.setModal.confirmPasswordPlaceholder`),type:`password`,...c.register(`confirmPassword`)}),c.formState.errors.confirmPassword&&(0,Q.jsx)(`span`,{className:`label-text-alt mt-0.5 text-error`,"data-testid":`set-password-error-confirmPassword`,children:c.formState.errors.confirmPassword.message})]}),c.formState.errors.root&&(0,Q.jsx)($,{variant:`error`,children:c.formState.errors.root.message}),(0,Q.jsxs)(B,{children:[(0,Q.jsx)(`button`,{className:`btn btn-sm`,"data-testid":`set-password-cancel`,disabled:l.isPending,onClick:u,type:`button`,children:r(`profile.password.setModal.cancel`)}),(0,Q.jsx)(`button`,{className:`btn btn-sm btn-primary`,"data-testid":`set-password-submit`,disabled:l.isPending,type:`submit`,children:l.isPending?(0,Q.jsxs)(Q.Fragment,{children:[(0,Q.jsx)(`span`,{className:`loading loading-spinner loading-xs`}),r(`profile.password.setModal.submitting`)]}):r(`profile.password.setModal.submit`)})]})]})})}function Ne({isOpen:e,onClose:t,isRequired:r=!1,canSwitchToTotp:i=!1,onSwitchToTotp:a}){let{t:o}=n(),s=m(),[c,l]=(0,W.useState)(`name`),[u,d]=(0,W.useState)(null),f=R({resolver:z((0,W.useMemo)(()=>k.object({name:k.string().max(100,o(`validation.passkey.name.max`)).optional().transform(e=>e?.trim()||void 0)}),[o])),defaultValues:{name:``}}),g=h({...F,onSuccess:()=>{s.invalidateQueries({queryKey:p.passkeys()}),s.invalidateQueries({queryKey:j.queryKey}),_()},onError:e=>{l(`name`),e.name===`NotAllowedError`?d(o(`profile.passkey.setupModal.cancelled`)):d(o(`profile.passkey.setupModal.error`))}}),_=(0,W.useCallback)(()=>{f.reset(),l(`name`),d(null),t()},[f,t]),v=f.handleSubmit(async e=>{l(`register`),d(null);try{await g.mutateAsync({name:e.name})}catch{}}),y=g.isPending;return(0,Q.jsxs)(V,{description:r?o(`profile.passkey.setupModal.requiredDescription`):void 0,icon:w,isOpen:e,onClose:_,preventClose:r,size:`sm`,title:o(`profile.passkey.setupModal.title`),children:[c===`name`&&(0,Q.jsxs)(`form`,{className:`mt-4 space-y-3`,onSubmit:v,children:[(0,Q.jsx)(`p`,{className:`text-base-content/60 text-xs`,children:o(`profile.passkey.setupModal.description`)}),u&&(0,Q.jsx)($,{variant:`error`,children:u}),(0,Q.jsxs)(`div`,{className:`form-control`,children:[(0,Q.jsx)(`label`,{className:`label w-full`,htmlFor:`passkey-name`,children:(0,Q.jsx)(`span`,{className:`label-text text-xs`,children:o(`profile.passkey.setupModal.nameLabel`)})}),(0,Q.jsx)(`input`,{className:`input input-bordered input-sm w-full ${f.formState.errors.name?`input-error`:``}`,id:`passkey-name`,placeholder:o(`profile.passkey.setupModal.namePlaceholder`),type:`text`,...f.register(`name`)}),f.formState.errors.name&&(0,Q.jsx)(`span`,{className:`label-text-alt mt-0.5 text-error`,"data-testid":`setup-passkey-error`,children:f.formState.errors.name.message}),(0,Q.jsx)(`span`,{className:`label-text-alt mt-0.5 text-base-content/50`,children:o(`profile.passkey.setupModal.nameHint`)})]}),(0,Q.jsxs)(B,{children:[(0,Q.jsx)(`button`,{className:`btn btn-sm`,"data-testid":`setup-passkey-cancel`,onClick:_,type:`button`,children:o(`profile.passkey.setupModal.cancel`)}),(0,Q.jsx)(`button`,{className:`btn btn-sm btn-primary`,"data-testid":`setup-passkey-continue`,type:`submit`,children:o(`profile.passkey.setupModal.continue`)})]}),i&&a&&(0,Q.jsx)(`p`,{className:`mt-2 text-center text-xs`,children:(0,Q.jsx)(`button`,{className:`link link-primary`,onClick:a,type:`button`,children:o(`profile.passkey.setupModal.switchToTotp`)})})]}),c===`register`&&(0,Q.jsxs)(`div`,{className:`mt-4`,children:[(0,Q.jsxs)(`div`,{className:`flex flex-col items-center gap-3 py-6`,"data-testid":`setup-passkey-loading`,children:[(0,Q.jsx)(`span`,{className:`loading loading-spinner loading-md`}),(0,Q.jsx)(`p`,{className:`text-center text-base-content/60 text-xs`,children:o(`profile.passkey.setupModal.waitingForDevice`)})]}),(0,Q.jsx)(B,{children:(0,Q.jsx)(`button`,{className:`btn btn-sm`,"data-testid":`setup-passkey-cancel`,disabled:y,onClick:_,type:`button`,children:o(`profile.passkey.setupModal.cancel`)})})]})]})}function Pe({isOpen:e,onClose:t,isRequired:r=!1,canSwitchToPasskey:i=!1,onSwitchToPasskey:a}){let{t:o}=n(),{step:s,setupData:c,recoveryCodes:l,isSetupPending:u,isVerifyPending:d,isConfirmPending:f,startSetup:p,verify:m,goToVerify:h,goToQr:g,confirmRecoveryCodes:_,reset:v}=C({autoStart:!1,onConfirmSuccess:()=>{v(),t()}}),y=(0,W.useCallback)(()=>{v(),t()},[t,v]),w=(0,W.useCallback)(()=>{!c&&!u&&p()},[c,u,p]);e&&!c&&!u&&s!==`error`&&w();let T=(0,W.useCallback)(async e=>{await m(e)},[m]),E=o(s===`recovery`?`setupTotp.recoveryCodes.title`:`profile.totp.setupModal.title`);return(0,Q.jsxs)(V,{description:r?o(`profile.totp.setupModal.requiredDescription`):void 0,icon:D,isOpen:e,onClose:y,preventClose:r||s===`recovery`,size:`sm`,title:E,children:[u&&(0,Q.jsx)(`div`,{className:`flex justify-center py-6`,"data-testid":`setup-totp-loading`,children:(0,Q.jsx)(`span`,{className:`loading loading-spinner loading-md`})}),s===`error`&&(0,Q.jsxs)(`div`,{className:`mt-4 space-y-3`,children:[(0,Q.jsx)($,{variant:`error`,children:o(`profile.totp.setupModal.setupError`)}),(0,Q.jsxs)(B,{children:[(0,Q.jsx)(`button`,{className:`btn btn-sm`,onClick:y,type:`button`,children:o(`profile.totp.setupModal.cancel`)}),(0,Q.jsx)(`button`,{className:`btn btn-sm btn-primary`,onClick:p,type:`button`,children:o(`profile.totp.setupModal.retry`)})]})]}),c&&s===`qr`&&(0,Q.jsx)(`div`,{className:`mt-4`,children:(0,Q.jsx)(x,{additionalActions:(0,Q.jsxs)(Q.Fragment,{children:[(0,Q.jsx)(B,{children:(0,Q.jsx)(`button`,{className:`btn btn-sm`,onClick:y,type:`button`,children:o(`profile.totp.setupModal.cancel`)})}),i&&a&&(0,Q.jsx)(`p`,{className:`mt-2 text-center text-xs`,children:(0,Q.jsx)(`button`,{className:`link link-primary`,onClick:a,type:`button`,children:o(`profile.totp.setupModal.switchToPasskey`)})})]}),onNext:h,setupData:c})}),c&&s===`verify`&&(0,Q.jsx)(`div`,{className:`mt-4`,children:(0,Q.jsx)(S,{isPending:d,onBack:g,onSubmit:T})}),s===`recovery`&&l.length>0&&(0,Q.jsx)(`div`,{className:`mt-4`,children:(0,Q.jsx)(b,{isLoading:f,onConfirm:_,recoveryCodes:l})})]})}var Fe=g({mutationFn:async()=>c(await d.api.auth.logout.$post())}),Ie={access_denied:`oauth.error.accessDenied`,temporarily_unavailable:`oauth.error.temporarilyUnavailable`,server_error:`oauth.error.serverError`};function Le(){let{t:e}=n(),t=u(),r=m(),i=re.useSearch().oauth_error,a=i?e(Ie[i]??`oauth.error.failed`):void 0,[o,c]=(0,W.useState)(null),[l,d]=(0,W.useState)(null),[p,g]=(0,W.useState)(null),[_,y]=(0,W.useState)(null),[b,x]=(0,W.useState)(null),[S,C]=(0,W.useState)(!1),{data:w}=s(j),{data:T}=s(ne),{data:E}=s(f),D=h({...Fe,onSuccess:async()=>{r.setQueryData(j.queryKey,{user:null}),await N(),t.navigate({to:`/login`})},onSettled:()=>{r.invalidateQueries({queryKey:j.queryKey})}}),O=h({...te,onSuccess:()=>{r.invalidateQueries({queryKey:ne.queryKey})},onSettled:()=>{c(null)}}),k=async()=>{l&&(c(l.id),await O.mutateAsync(l.id))};if(!w.user)return null;let P=w.user,F=T.available_providers,I=F.some(e=>e.linked),L=P.managed_by===`config`,R=E.auth.password,z=E.auth.passkey,B=R.totp.enabled,V=z.enabled,ie=E.account_deletion.enabled,H=E.account_deletion.retention,U=(()=>{let e=H.match(/^(\d+)([dmy])$/);if(!e)return 30;let t=parseInt(e[1],10);switch(e[2]){case`d`:return t;case`m`:return t*30;case`y`:return t*365;default:return 30}})(),G=!L&&B,K=!L&&V,q=F.length>0;return(0,Q.jsxs)(v,{maxWidth:`xl`,responsivePadding:!0,children:[(0,Q.jsx)(`div`,{className:`border-base-200 border-b p-6`,children:(0,Q.jsxs)(`div`,{className:`flex items-start justify-between gap-4`,children:[(0,Q.jsxs)(`div`,{className:`flex items-center gap-4`,children:[(0,Q.jsx)(be,{email:P.email,size:`lg`}),(0,Q.jsxs)(`div`,{className:`min-w-0`,children:[(0,Q.jsx)(`h1`,{className:`font-bold text-xl`,children:e(`profile.title`)}),(0,Q.jsx)(`p`,{className:`truncate text-base-content/70 text-sm`,"data-testid":`profile-user-email`,children:P.email})]})]}),(0,Q.jsxs)(`button`,{className:`btn btn-ghost btn-sm gap-2`,"data-testid":`profile-logout`,disabled:D.isPending,onClick:()=>D.mutate(),type:`button`,children:[D.isPending?(0,Q.jsx)(`span`,{className:`loading loading-spinner loading-sm`}):(0,Q.jsx)(le,{className:`size-4`,weight:`bold`}),(0,Q.jsx)(`span`,{className:`hidden sm:inline`,children:e(`profile.logout`)})]})]})}),a&&(0,Q.jsx)(`div`,{className:`px-6 pt-4`,children:(0,Q.jsx)(M,{icon:A,type:`error`,children:a})}),(0,Q.jsxs)(`div`,{className:`space-y-5 p-6`,children:[P&&(0,Q.jsx)(ve,{user:P}),(0,Q.jsxs)(`div`,{className:`rounded-xl border border-base-200`,children:[(0,Q.jsxs)(`div`,{className:`border-base-200 border-b px-4 py-3`,children:[(0,Q.jsx)(`h2`,{className:`font-semibold text-sm`,children:e(`profile.security.title`)}),(0,Q.jsx)(`p`,{className:`text-base-content/60 text-xs`,children:e(`profile.security.description`)})]}),G&&P.totp_recovery_codes_missing&&(0,Q.jsx)(`div`,{className:`border-base-200 border-b px-4 py-3`,"data-testid":`profile-totp-recovery-warning`,children:(0,Q.jsx)(M,{icon:A,type:`warning`,children:e(`profile.totp.recoveryCodesMissing`)})}),(0,Q.jsxs)(`div`,{className:`divide-y divide-base-200`,children:[(0,Q.jsx)(pe,{hasLinkedOAuth:I,hasPassword:P.has_password,hasSecondFactorOnly:P.has_password&&!I&&(P.totp_registered||P.passkey_count>0),isConfigManaged:L,onOpenModal:g}),G&&(0,Q.jsx)(me,{onOpenModal:y,recoveryCodesMissing:P.totp_recovery_codes_missing,totpEnabled:P.totp_registered}),K&&(0,Q.jsx)(fe,{onOpenModal:x,passkeyCount:P.passkey_count})]})]}),q&&(0,Q.jsx)(de,{getAuthorizeUrl:ee,onUnlinkRequest:e=>d({id:e.id,name:e.display_name}),providers:F,unlinkingProvider:o}),(0,Q.jsx)(ue,{isConfigManaged:L,isDeletionEnabled:ie,onDeleteClick:()=>C(!0)})]}),(0,Q.jsx)(Me,{isOpen:p===`set`,onClose:()=>g(null)}),(0,Q.jsx)(we,{isOpen:p===`change`,onClose:()=>g(null)}),(0,Q.jsx)(je,{isOpen:p===`remove`,onClose:()=>g(null)}),(0,Q.jsx)(Pe,{isOpen:_===`setup`,onClose:()=>y(null)}),(0,Q.jsx)(De,{isOpen:_===`disable`,onClose:()=>y(null)}),(0,Q.jsx)(Ae,{isOpen:_===`regenerate`,onClose:()=>y(null)}),(0,Q.jsx)(Ne,{isOpen:b===`setup`,onClose:()=>x(null)}),(0,Q.jsx)(Oe,{isOpen:b===`manage`,onAddNew:()=>x(`setup`),onClose:()=>x(null)}),(0,Q.jsx)(_e,{isOpen:l!==null,isPending:O.isPending,onClose:()=>d(null),onConfirm:k,providerName:l?.name??``}),(0,Q.jsx)(Ee,{isOpen:S,onClose:()=>C(!1),retentionDays:U})]})}export{Le as component};
|
|
2
|
+
//# sourceMappingURL=profile-D2cuVYgE.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"profile-D2cuVYgE.js","names":["a","l","e","e","a","m","o","r","t","o","t","m","o","t","n","c","r","n","a","SignOutIcon","WarningCircleIcon","useMutation","useQueryClient","useSuspenseQuery","useRouter","useState","useTranslation","DangerZoneSection","LinkedAccountsSection","PasskeySection","PasswordSection","TotpSection","UnlinkOAuthModal","UserInfoSection","Alert","InitialAvatar","PageLayout","ChangePasswordModal","DeleteAccountModal","DisableTotpModal","ManagePasskeysModal","RegenerateTotpRecoveryCodesModal","RemovePasswordModal","SetPasswordModal","SetupPasskeyModal","SetupTotpModal","tick","appConfigQueryOptions","logoutMutationOptions","getOAuthAuthorizeUrl","oauthAccountsQueryOptions","unlinkOAuthMutationOptions","getSessionQueryOptions","PasswordModalType","TotpModalType","PasskeyModalType","OAUTH_ERROR_I18N_MAP","Record","access_denied","temporarily_unavailable","server_error","Route","Profile","t","router","queryClient","search","useSearch","oauthError","oauth_error","oauthErrorMessage","undefined","unlinkingProvider","setUnlinkingProvider","unlinkModal","setUnlinkModal","id","name","passwordModal","setPasswordModal","totpModal","setTotpModal","passkeyModal","setPasskeyModal","showDeleteModal","setShowDeleteModal","data","session","oauthAccountsData","appConfig","logoutMutation","onSuccess","setQueryData","queryKey","user","navigate","to","onSettled","invalidateQueries","unlinkMutation","handleUnlinkConfirm","mutateAsync","availableProviders","available_providers","hasLinkedOAuth","some","p","linked","isConfigManaged","managed_by","passwordAuthMethod","auth","password","passkeyAuthMethod","passkey","totpEnabled","totp","enabled","passkeyEnabled","accountDeletionEnabled","account_deletion","retentionPeriod","retention","retentionDays","match","value","parseInt","unit","showPasswordSection","showTotpSection","showPasskeySection","showLinkedAccounts","length","hasSecurityOptions","email","isPending","mutate","totp_recovery_codes_missing","has_password","totp_registered","passkey_count","provider","display_name","component"],"sources":["../../../../node_modules/.pnpm/@tanstack+react-query@5.101.0_react@19.2.7/node_modules/@tanstack/react-query/build/modern/useQuery.js","../../../../node_modules/.pnpm/@phosphor-icons+react@2.1.10_react-dom@19.2.7_react@19.2.7__react@19.2.7/node_modules/@phosphor-icons/react/dist/defs/Cloud.es.js","../../../../node_modules/.pnpm/@phosphor-icons+react@2.1.10_react-dom@19.2.7_react@19.2.7__react@19.2.7/node_modules/@phosphor-icons/react/dist/defs/DeviceMobile.es.js","../../../../node_modules/.pnpm/@phosphor-icons+react@2.1.10_react-dom@19.2.7_react@19.2.7__react@19.2.7/node_modules/@phosphor-icons/react/dist/defs/Gear.es.js","../../../../node_modules/.pnpm/@phosphor-icons+react@2.1.10_react-dom@19.2.7_react@19.2.7__react@19.2.7/node_modules/@phosphor-icons/react/dist/defs/LinkBreak.es.js","../../../../node_modules/.pnpm/@phosphor-icons+react@2.1.10_react-dom@19.2.7_react@19.2.7__react@19.2.7/node_modules/@phosphor-icons/react/dist/defs/PencilSimple.es.js","../../../../node_modules/.pnpm/@phosphor-icons+react@2.1.10_react-dom@19.2.7_react@19.2.7__react@19.2.7/node_modules/@phosphor-icons/react/dist/defs/SignOut.es.js","../../../../node_modules/.pnpm/@phosphor-icons+react@2.1.10_react-dom@19.2.7_react@19.2.7__react@19.2.7/node_modules/@phosphor-icons/react/dist/csr/Cloud.es.js","../../../../node_modules/.pnpm/@phosphor-icons+react@2.1.10_react-dom@19.2.7_react@19.2.7__react@19.2.7/node_modules/@phosphor-icons/react/dist/csr/DeviceMobile.es.js","../../../../node_modules/.pnpm/@phosphor-icons+react@2.1.10_react-dom@19.2.7_react@19.2.7__react@19.2.7/node_modules/@phosphor-icons/react/dist/csr/Gear.es.js","../../../../node_modules/.pnpm/@phosphor-icons+react@2.1.10_react-dom@19.2.7_react@19.2.7__react@19.2.7/node_modules/@phosphor-icons/react/dist/csr/LinkBreak.es.js","../../../../node_modules/.pnpm/@phosphor-icons+react@2.1.10_react-dom@19.2.7_react@19.2.7__react@19.2.7/node_modules/@phosphor-icons/react/dist/csr/PencilSimple.es.js","../../../../node_modules/.pnpm/@phosphor-icons+react@2.1.10_react-dom@19.2.7_react@19.2.7__react@19.2.7/node_modules/@phosphor-icons/react/dist/csr/SignOut.es.js","../../../frontend/src/components/profile/danger-zone-section.tsx","../../../frontend/src/components/profile/linked-accounts-section.tsx","../../../frontend/src/components/profile/passkey-section.tsx","../../../frontend/src/components/profile/password-section.tsx","../../../frontend/src/components/profile/totp-section.tsx","../../../frontend/src/components/ui/alert-banner.tsx","../../../frontend/src/components/profile/unlink-oauth-modal.tsx","../../../frontend/src/components/profile/user-info-section.tsx","../../../frontend/src/components/ui/initial-avatar.tsx","../../../frontend/src/queries/password.ts","../../../frontend/src/features/profile/change-password-modal.tsx","../../../frontend/src/queries/account.ts","../../../frontend/src/features/profile/delete-account-modal.tsx","../../../frontend/src/features/profile/disable-totp-modal.tsx","../../../frontend/src/features/profile/manage-passkeys-modal.tsx","../../../frontend/src/features/profile/regenerate-totp-recovery-codes-modal.tsx","../../../frontend/src/features/profile/remove-password-modal.tsx","../../../frontend/src/features/profile/set-password-modal.tsx","../../../frontend/src/features/profile/setup-passkey-modal.tsx","../../../frontend/src/features/profile/setup-totp-modal.tsx","../../../frontend/src/queries/logout.ts","../../../frontend/src/routes/profile/index.tsx?tsr-split=component"],"sourcesContent":["\"use client\";\n\n// src/useQuery.ts\nimport { QueryObserver } from \"@tanstack/query-core\";\nimport { useBaseQuery } from \"./useBaseQuery.js\";\nfunction useQuery(options, queryClient) {\n return useBaseQuery(options, QueryObserver, queryClient);\n}\nexport {\n useQuery\n};\n//# sourceMappingURL=useQuery.js.map","import * as e from \"react\";\nconst a = /* @__PURE__ */ new Map([\n [\n \"bold\",\n /* @__PURE__ */ e.createElement(e.Fragment, null, /* @__PURE__ */ e.createElement(\"path\", { d: \"M160,36A92.09,92.09,0,0,0,79,84.36,68,68,0,1,0,72,220h88a92,92,0,0,0,0-184Zm0,160H72a44,44,0,0,1-1.82-88A91.86,91.86,0,0,0,68,128a12,12,0,0,0,24,0,68,68,0,1,1,68,68Z\" }))\n ],\n [\n \"duotone\",\n /* @__PURE__ */ e.createElement(e.Fragment, null, /* @__PURE__ */ e.createElement(\n \"path\",\n {\n d: \"M240,128a80,80,0,0,1-80,80H72A56,56,0,1,1,85.92,97.74l0,.1A80,80,0,0,1,240,128Z\",\n opacity: \"0.2\"\n }\n ), /* @__PURE__ */ e.createElement(\"path\", { d: \"M160,40A88.09,88.09,0,0,0,81.29,88.67,64,64,0,1,0,72,216h88a88,88,0,0,0,0-176Zm0,160H72a48,48,0,0,1,0-96c1.1,0,2.2,0,3.29.11A88,88,0,0,0,72,128a8,8,0,0,0,16,0,72,72,0,1,1,72,72Z\" }))\n ],\n [\n \"fill\",\n /* @__PURE__ */ e.createElement(e.Fragment, null, /* @__PURE__ */ e.createElement(\"path\", { d: \"M160.06,40A88.1,88.1,0,0,0,81.29,88.67h0A87.48,87.48,0,0,0,72,127.73,8.18,8.18,0,0,1,64.57,136,8,8,0,0,1,56,128a103.66,103.66,0,0,1,5.34-32.92,4,4,0,0,0-4.75-5.18A64.09,64.09,0,0,0,8,152c0,35.19,29.75,64,65,64H160a88.09,88.09,0,0,0,87.93-91.48C246.11,77.54,207.07,40,160.06,40Z\" }))\n ],\n [\n \"light\",\n /* @__PURE__ */ e.createElement(e.Fragment, null, /* @__PURE__ */ e.createElement(\"path\", { d: \"M160,42A86.11,86.11,0,0,0,82.43,90.88,62,62,0,1,0,72,214h88a86,86,0,0,0,0-172Zm0,160H72a50,50,0,0,1,0-100,50.67,50.67,0,0,1,5.91.35A85.61,85.61,0,0,0,74,128a6,6,0,0,0,12,0,74,74,0,1,1,74,74Z\" }))\n ],\n [\n \"regular\",\n /* @__PURE__ */ e.createElement(e.Fragment, null, /* @__PURE__ */ e.createElement(\"path\", { d: \"M160,40A88.09,88.09,0,0,0,81.29,88.67,64,64,0,1,0,72,216h88a88,88,0,0,0,0-176Zm0,160H72a48,48,0,0,1,0-96c1.1,0,2.2,0,3.29.11A88,88,0,0,0,72,128a8,8,0,0,0,16,0,72,72,0,1,1,72,72Z\" }))\n ],\n [\n \"thin\",\n /* @__PURE__ */ e.createElement(e.Fragment, null, /* @__PURE__ */ e.createElement(\"path\", { d: \"M160,44A84.11,84.11,0,0,0,83.59,93.12,60.71,60.71,0,0,0,72,92a60,60,0,0,0,0,120h88a84,84,0,0,0,0-168Zm0,160H72a52,52,0,1,1,8.55-103.3A83.66,83.66,0,0,0,76,128a4,4,0,0,0,8,0,76,76,0,1,1,76,76Z\" }))\n ]\n]);\nexport {\n a as default\n};\n","import * as e from \"react\";\nconst a = /* @__PURE__ */ new Map([\n [\n \"bold\",\n /* @__PURE__ */ e.createElement(e.Fragment, null, /* @__PURE__ */ e.createElement(\"path\", { d: \"M176,12H80A28,28,0,0,0,52,40V216a28,28,0,0,0,28,28h96a28,28,0,0,0,28-28V40A28,28,0,0,0,176,12ZM76,76H180V180H76Zm4-40h96a4,4,0,0,1,4,4V52H76V40A4,4,0,0,1,80,36Zm96,184H80a4,4,0,0,1-4-4V204H180v12A4,4,0,0,1,176,220Z\" }))\n ],\n [\n \"duotone\",\n /* @__PURE__ */ e.createElement(e.Fragment, null, /* @__PURE__ */ e.createElement(\"path\", { d: \"M192,56V200H64V56Z\", opacity: \"0.2\" }), /* @__PURE__ */ e.createElement(\"path\", { d: \"M176,16H80A24,24,0,0,0,56,40V216a24,24,0,0,0,24,24h96a24,24,0,0,0,24-24V40A24,24,0,0,0,176,16ZM72,64H184V192H72Zm8-32h96a8,8,0,0,1,8,8v8H72V40A8,8,0,0,1,80,32Zm96,192H80a8,8,0,0,1-8-8v-8H184v8A8,8,0,0,1,176,224Z\" }))\n ],\n [\n \"fill\",\n /* @__PURE__ */ e.createElement(e.Fragment, null, /* @__PURE__ */ e.createElement(\"path\", { d: \"M176,16H80A24,24,0,0,0,56,40V216a24,24,0,0,0,24,24h96a24,24,0,0,0,24-24V40A24,24,0,0,0,176,16ZM80,32h96a8,8,0,0,1,8,8v8H72V40A8,8,0,0,1,80,32Zm96,192H80a8,8,0,0,1-8-8v-8H184v8A8,8,0,0,1,176,224Z\" }))\n ],\n [\n \"light\",\n /* @__PURE__ */ e.createElement(e.Fragment, null, /* @__PURE__ */ e.createElement(\"path\", { d: \"M176,18H80A22,22,0,0,0,58,40V216a22,22,0,0,0,22,22h96a22,22,0,0,0,22-22V40A22,22,0,0,0,176,18ZM70,62H186V194H70ZM80,30h96a10,10,0,0,1,10,10V50H70V40A10,10,0,0,1,80,30Zm96,196H80a10,10,0,0,1-10-10V206H186v10A10,10,0,0,1,176,226Z\" }))\n ],\n [\n \"regular\",\n /* @__PURE__ */ e.createElement(e.Fragment, null, /* @__PURE__ */ e.createElement(\"path\", { d: \"M176,16H80A24,24,0,0,0,56,40V216a24,24,0,0,0,24,24h96a24,24,0,0,0,24-24V40A24,24,0,0,0,176,16ZM72,64H184V192H72Zm8-32h96a8,8,0,0,1,8,8v8H72V40A8,8,0,0,1,80,32Zm96,192H80a8,8,0,0,1-8-8v-8H184v8A8,8,0,0,1,176,224Z\" }))\n ],\n [\n \"thin\",\n /* @__PURE__ */ e.createElement(e.Fragment, null, /* @__PURE__ */ e.createElement(\"path\", { d: \"M176,20H80A20,20,0,0,0,60,40V216a20,20,0,0,0,20,20h96a20,20,0,0,0,20-20V40A20,20,0,0,0,176,20ZM68,60H188V196H68ZM80,28h96a12,12,0,0,1,12,12V52H68V40A12,12,0,0,1,80,28Zm96,200H80a12,12,0,0,1-12-12V204H188v12A12,12,0,0,1,176,228Z\" }))\n ]\n]);\nexport {\n a as default\n};\n","import * as a from \"react\";\nconst l = /* @__PURE__ */ new Map([\n [\n \"bold\",\n /* @__PURE__ */ a.createElement(a.Fragment, null, /* @__PURE__ */ a.createElement(\"path\", { d: \"M128,76a52,52,0,1,0,52,52A52.06,52.06,0,0,0,128,76Zm0,80a28,28,0,1,1,28-28A28,28,0,0,1,128,156Zm92-27.21v-1.58l14-17.51a12,12,0,0,0,2.23-10.59A111.75,111.75,0,0,0,225,71.89,12,12,0,0,0,215.89,66L193.61,63.5l-1.11-1.11L190,40.1A12,12,0,0,0,184.11,31a111.67,111.67,0,0,0-27.23-11.27A12,12,0,0,0,146.3,22L128.79,36h-1.58L109.7,22a12,12,0,0,0-10.59-2.23A111.75,111.75,0,0,0,71.89,31.05,12,12,0,0,0,66,40.11L63.5,62.39,62.39,63.5,40.1,66A12,12,0,0,0,31,71.89,111.67,111.67,0,0,0,19.77,99.12,12,12,0,0,0,22,109.7l14,17.51v1.58L22,146.3a12,12,0,0,0-2.23,10.59,111.75,111.75,0,0,0,11.29,27.22A12,12,0,0,0,40.11,190l22.28,2.48,1.11,1.11L66,215.9A12,12,0,0,0,71.89,225a111.67,111.67,0,0,0,27.23,11.27A12,12,0,0,0,109.7,234l17.51-14h1.58l17.51,14a12,12,0,0,0,10.59,2.23A111.75,111.75,0,0,0,184.11,225a12,12,0,0,0,5.91-9.06l2.48-22.28,1.11-1.11L215.9,190a12,12,0,0,0,9.06-5.91,111.67,111.67,0,0,0,11.27-27.23A12,12,0,0,0,234,146.3Zm-24.12-4.89a70.1,70.1,0,0,1,0,8.2,12,12,0,0,0,2.61,8.22l12.84,16.05A86.47,86.47,0,0,1,207,166.86l-20.43,2.27a12,12,0,0,0-7.65,4,69,69,0,0,1-5.8,5.8,12,12,0,0,0-4,7.65L166.86,207a86.47,86.47,0,0,1-10.49,4.35l-16.05-12.85a12,12,0,0,0-7.5-2.62c-.24,0-.48,0-.72,0a70.1,70.1,0,0,1-8.2,0,12.06,12.06,0,0,0-8.22,2.6L99.63,211.33A86.47,86.47,0,0,1,89.14,207l-2.27-20.43a12,12,0,0,0-4-7.65,69,69,0,0,1-5.8-5.8,12,12,0,0,0-7.65-4L49,166.86a86.47,86.47,0,0,1-4.35-10.49l12.84-16.05a12,12,0,0,0,2.61-8.22,70.1,70.1,0,0,1,0-8.2,12,12,0,0,0-2.61-8.22L44.67,99.63A86.47,86.47,0,0,1,49,89.14l20.43-2.27a12,12,0,0,0,7.65-4,69,69,0,0,1,5.8-5.8,12,12,0,0,0,4-7.65L89.14,49a86.47,86.47,0,0,1,10.49-4.35l16.05,12.85a12.06,12.06,0,0,0,8.22,2.6,70.1,70.1,0,0,1,8.2,0,12,12,0,0,0,8.22-2.6l16.05-12.85A86.47,86.47,0,0,1,166.86,49l2.27,20.43a12,12,0,0,0,4,7.65,69,69,0,0,1,5.8,5.8,12,12,0,0,0,7.65,4L207,89.14a86.47,86.47,0,0,1,4.35,10.49l-12.84,16.05A12,12,0,0,0,195.88,123.9Z\" }))\n ],\n [\n \"duotone\",\n /* @__PURE__ */ a.createElement(a.Fragment, null, /* @__PURE__ */ a.createElement(\n \"path\",\n {\n d: \"M207.86,123.18l16.78-21a99.14,99.14,0,0,0-10.07-24.29l-26.7-3a81,81,0,0,0-6.81-6.81l-3-26.71a99.43,99.43,0,0,0-24.3-10l-21,16.77a81.59,81.59,0,0,0-9.64,0l-21-16.78A99.14,99.14,0,0,0,77.91,41.43l-3,26.7a81,81,0,0,0-6.81,6.81l-26.71,3a99.43,99.43,0,0,0-10,24.3l16.77,21a81.59,81.59,0,0,0,0,9.64l-16.78,21a99.14,99.14,0,0,0,10.07,24.29l26.7,3a81,81,0,0,0,6.81,6.81l3,26.71a99.43,99.43,0,0,0,24.3,10l21-16.77a81.59,81.59,0,0,0,9.64,0l21,16.78a99.14,99.14,0,0,0,24.29-10.07l3-26.7a81,81,0,0,0,6.81-6.81l26.71-3a99.43,99.43,0,0,0,10-24.3l-16.77-21A81.59,81.59,0,0,0,207.86,123.18ZM128,168a40,40,0,1,1,40-40A40,40,0,0,1,128,168Z\",\n opacity: \"0.2\"\n }\n ), /* @__PURE__ */ a.createElement(\"path\", { d: \"M128,80a48,48,0,1,0,48,48A48.05,48.05,0,0,0,128,80Zm0,80a32,32,0,1,1,32-32A32,32,0,0,1,128,160Zm88-29.84q.06-2.16,0-4.32l14.92-18.64a8,8,0,0,0,1.48-7.06,107.6,107.6,0,0,0-10.88-26.25,8,8,0,0,0-6-3.93l-23.72-2.64q-1.48-1.56-3-3L186,40.54a8,8,0,0,0-3.94-6,107.29,107.29,0,0,0-26.25-10.86,8,8,0,0,0-7.06,1.48L130.16,40Q128,40,125.84,40L107.2,25.11a8,8,0,0,0-7.06-1.48A107.6,107.6,0,0,0,73.89,34.51a8,8,0,0,0-3.93,6L67.32,64.27q-1.56,1.49-3,3L40.54,70a8,8,0,0,0-6,3.94,107.71,107.71,0,0,0-10.87,26.25,8,8,0,0,0,1.49,7.06L40,125.84Q40,128,40,130.16L25.11,148.8a8,8,0,0,0-1.48,7.06,107.6,107.6,0,0,0,10.88,26.25,8,8,0,0,0,6,3.93l23.72,2.64q1.49,1.56,3,3L70,215.46a8,8,0,0,0,3.94,6,107.71,107.71,0,0,0,26.25,10.87,8,8,0,0,0,7.06-1.49L125.84,216q2.16.06,4.32,0l18.64,14.92a8,8,0,0,0,7.06,1.48,107.21,107.21,0,0,0,26.25-10.88,8,8,0,0,0,3.93-6l2.64-23.72q1.56-1.48,3-3L215.46,186a8,8,0,0,0,6-3.94,107.71,107.71,0,0,0,10.87-26.25,8,8,0,0,0-1.49-7.06Zm-16.1-6.5a73.93,73.93,0,0,1,0,8.68,8,8,0,0,0,1.74,5.48l14.19,17.73a91.57,91.57,0,0,1-6.23,15L187,173.11a8,8,0,0,0-5.1,2.64,74.11,74.11,0,0,1-6.14,6.14,8,8,0,0,0-2.64,5.1l-2.51,22.58a91.32,91.32,0,0,1-15,6.23l-17.74-14.19a8,8,0,0,0-5-1.75h-.48a73.93,73.93,0,0,1-8.68,0,8.06,8.06,0,0,0-5.48,1.74L100.45,215.8a91.57,91.57,0,0,1-15-6.23L82.89,187a8,8,0,0,0-2.64-5.1,74.11,74.11,0,0,1-6.14-6.14,8,8,0,0,0-5.1-2.64L46.43,170.6a91.32,91.32,0,0,1-6.23-15l14.19-17.74a8,8,0,0,0,1.74-5.48,73.93,73.93,0,0,1,0-8.68,8,8,0,0,0-1.74-5.48L40.2,100.45a91.57,91.57,0,0,1,6.23-15L69,82.89a8,8,0,0,0,5.1-2.64,74.11,74.11,0,0,1,6.14-6.14A8,8,0,0,0,82.89,69L85.4,46.43a91.32,91.32,0,0,1,15-6.23l17.74,14.19a8,8,0,0,0,5.48,1.74,73.93,73.93,0,0,1,8.68,0,8.06,8.06,0,0,0,5.48-1.74L155.55,40.2a91.57,91.57,0,0,1,15,6.23L173.11,69a8,8,0,0,0,2.64,5.1,74.11,74.11,0,0,1,6.14,6.14,8,8,0,0,0,5.1,2.64l22.58,2.51a91.32,91.32,0,0,1,6.23,15l-14.19,17.74A8,8,0,0,0,199.87,123.66Z\" }))\n ],\n [\n \"fill\",\n /* @__PURE__ */ a.createElement(a.Fragment, null, /* @__PURE__ */ a.createElement(\"path\", { d: \"M216,130.16q.06-2.16,0-4.32l14.92-18.64a8,8,0,0,0,1.48-7.06,107.6,107.6,0,0,0-10.88-26.25,8,8,0,0,0-6-3.93l-23.72-2.64q-1.48-1.56-3-3L186,40.54a8,8,0,0,0-3.94-6,107.29,107.29,0,0,0-26.25-10.86,8,8,0,0,0-7.06,1.48L130.16,40Q128,40,125.84,40L107.2,25.11a8,8,0,0,0-7.06-1.48A107.6,107.6,0,0,0,73.89,34.51a8,8,0,0,0-3.93,6L67.32,64.27q-1.56,1.49-3,3L40.54,70a8,8,0,0,0-6,3.94,107.71,107.71,0,0,0-10.87,26.25,8,8,0,0,0,1.49,7.06L40,125.84Q40,128,40,130.16L25.11,148.8a8,8,0,0,0-1.48,7.06,107.6,107.6,0,0,0,10.88,26.25,8,8,0,0,0,6,3.93l23.72,2.64q1.49,1.56,3,3L70,215.46a8,8,0,0,0,3.94,6,107.71,107.71,0,0,0,26.25,10.87,8,8,0,0,0,7.06-1.49L125.84,216q2.16.06,4.32,0l18.64,14.92a8,8,0,0,0,7.06,1.48,107.21,107.21,0,0,0,26.25-10.88,8,8,0,0,0,3.93-6l2.64-23.72q1.56-1.48,3-3L215.46,186a8,8,0,0,0,6-3.94,107.71,107.71,0,0,0,10.87-26.25,8,8,0,0,0-1.49-7.06ZM128,168a40,40,0,1,1,40-40A40,40,0,0,1,128,168Z\" }))\n ],\n [\n \"light\",\n /* @__PURE__ */ a.createElement(a.Fragment, null, /* @__PURE__ */ a.createElement(\"path\", { d: \"M128,82a46,46,0,1,0,46,46A46.06,46.06,0,0,0,128,82Zm0,80a34,34,0,1,1,34-34A34,34,0,0,1,128,162ZM214,130.84c.06-1.89.06-3.79,0-5.68L229.33,106a6,6,0,0,0,1.11-5.29A105.34,105.34,0,0,0,219.76,74.9a6,6,0,0,0-4.53-3l-24.45-2.71q-1.93-2.07-4-4l-2.72-24.46a6,6,0,0,0-3-4.53,105.65,105.65,0,0,0-25.77-10.66A6,6,0,0,0,150,26.68l-19.2,15.37c-1.89-.06-3.79-.06-5.68,0L106,26.67a6,6,0,0,0-5.29-1.11A105.34,105.34,0,0,0,74.9,36.24a6,6,0,0,0-3,4.53L69.23,65.22q-2.07,1.94-4,4L40.76,72a6,6,0,0,0-4.53,3,105.65,105.65,0,0,0-10.66,25.77A6,6,0,0,0,26.68,106l15.37,19.2c-.06,1.89-.06,3.79,0,5.68L26.67,150.05a6,6,0,0,0-1.11,5.29A105.34,105.34,0,0,0,36.24,181.1a6,6,0,0,0,4.53,3l24.45,2.71q1.94,2.07,4,4L72,215.24a6,6,0,0,0,3,4.53,105.65,105.65,0,0,0,25.77,10.66,6,6,0,0,0,5.29-1.11L125.16,214c1.89.06,3.79.06,5.68,0l19.21,15.38a6,6,0,0,0,3.75,1.31,6.2,6.2,0,0,0,1.54-.2,105.34,105.34,0,0,0,25.76-10.68,6,6,0,0,0,3-4.53l2.71-24.45q2.07-1.93,4-4l24.46-2.72a6,6,0,0,0,4.53-3,105.49,105.49,0,0,0,10.66-25.77,6,6,0,0,0-1.11-5.29Zm-3.1,41.63-23.64,2.63a6,6,0,0,0-3.82,2,75.14,75.14,0,0,1-6.31,6.31,6,6,0,0,0-2,3.82l-2.63,23.63A94.28,94.28,0,0,1,155.14,218l-18.57-14.86a6,6,0,0,0-3.75-1.31h-.36a78.07,78.07,0,0,1-8.92,0,6,6,0,0,0-4.11,1.3L100.87,218a94.13,94.13,0,0,1-17.34-7.17L80.9,187.21a6,6,0,0,0-2-3.82,75.14,75.14,0,0,1-6.31-6.31,6,6,0,0,0-3.82-2l-23.63-2.63A94.28,94.28,0,0,1,38,155.14l14.86-18.57a6,6,0,0,0,1.3-4.11,78.07,78.07,0,0,1,0-8.92,6,6,0,0,0-1.3-4.11L38,100.87a94.13,94.13,0,0,1,7.17-17.34L68.79,80.9a6,6,0,0,0,3.82-2,75.14,75.14,0,0,1,6.31-6.31,6,6,0,0,0,2-3.82l2.63-23.63A94.28,94.28,0,0,1,100.86,38l18.57,14.86a6,6,0,0,0,4.11,1.3,78.07,78.07,0,0,1,8.92,0,6,6,0,0,0,4.11-1.3L155.13,38a94.13,94.13,0,0,1,17.34,7.17l2.63,23.64a6,6,0,0,0,2,3.82,75.14,75.14,0,0,1,6.31,6.31,6,6,0,0,0,3.82,2l23.63,2.63A94.28,94.28,0,0,1,218,100.86l-14.86,18.57a6,6,0,0,0-1.3,4.11,78.07,78.07,0,0,1,0,8.92,6,6,0,0,0,1.3,4.11L218,155.13A94.13,94.13,0,0,1,210.85,172.47Z\" }))\n ],\n [\n \"regular\",\n /* @__PURE__ */ a.createElement(a.Fragment, null, /* @__PURE__ */ a.createElement(\"path\", { d: \"M128,80a48,48,0,1,0,48,48A48.05,48.05,0,0,0,128,80Zm0,80a32,32,0,1,1,32-32A32,32,0,0,1,128,160Zm88-29.84q.06-2.16,0-4.32l14.92-18.64a8,8,0,0,0,1.48-7.06,107.21,107.21,0,0,0-10.88-26.25,8,8,0,0,0-6-3.93l-23.72-2.64q-1.48-1.56-3-3L186,40.54a8,8,0,0,0-3.94-6,107.71,107.71,0,0,0-26.25-10.87,8,8,0,0,0-7.06,1.49L130.16,40Q128,40,125.84,40L107.2,25.11a8,8,0,0,0-7.06-1.48A107.6,107.6,0,0,0,73.89,34.51a8,8,0,0,0-3.93,6L67.32,64.27q-1.56,1.49-3,3L40.54,70a8,8,0,0,0-6,3.94,107.71,107.71,0,0,0-10.87,26.25,8,8,0,0,0,1.49,7.06L40,125.84Q40,128,40,130.16L25.11,148.8a8,8,0,0,0-1.48,7.06,107.21,107.21,0,0,0,10.88,26.25,8,8,0,0,0,6,3.93l23.72,2.64q1.49,1.56,3,3L70,215.46a8,8,0,0,0,3.94,6,107.71,107.71,0,0,0,26.25,10.87,8,8,0,0,0,7.06-1.49L125.84,216q2.16.06,4.32,0l18.64,14.92a8,8,0,0,0,7.06,1.48,107.21,107.21,0,0,0,26.25-10.88,8,8,0,0,0,3.93-6l2.64-23.72q1.56-1.48,3-3L215.46,186a8,8,0,0,0,6-3.94,107.71,107.71,0,0,0,10.87-26.25,8,8,0,0,0-1.49-7.06Zm-16.1-6.5a73.93,73.93,0,0,1,0,8.68,8,8,0,0,0,1.74,5.48l14.19,17.73a91.57,91.57,0,0,1-6.23,15L187,173.11a8,8,0,0,0-5.1,2.64,74.11,74.11,0,0,1-6.14,6.14,8,8,0,0,0-2.64,5.1l-2.51,22.58a91.32,91.32,0,0,1-15,6.23l-17.74-14.19a8,8,0,0,0-5-1.75h-.48a73.93,73.93,0,0,1-8.68,0,8,8,0,0,0-5.48,1.74L100.45,215.8a91.57,91.57,0,0,1-15-6.23L82.89,187a8,8,0,0,0-2.64-5.1,74.11,74.11,0,0,1-6.14-6.14,8,8,0,0,0-5.1-2.64L46.43,170.6a91.32,91.32,0,0,1-6.23-15l14.19-17.74a8,8,0,0,0,1.74-5.48,73.93,73.93,0,0,1,0-8.68,8,8,0,0,0-1.74-5.48L40.2,100.45a91.57,91.57,0,0,1,6.23-15L69,82.89a8,8,0,0,0,5.1-2.64,74.11,74.11,0,0,1,6.14-6.14A8,8,0,0,0,82.89,69L85.4,46.43a91.32,91.32,0,0,1,15-6.23l17.74,14.19a8,8,0,0,0,5.48,1.74,73.93,73.93,0,0,1,8.68,0,8,8,0,0,0,5.48-1.74L155.55,40.2a91.57,91.57,0,0,1,15,6.23L173.11,69a8,8,0,0,0,2.64,5.1,74.11,74.11,0,0,1,6.14,6.14,8,8,0,0,0,5.1,2.64l22.58,2.51a91.32,91.32,0,0,1,6.23,15l-14.19,17.74A8,8,0,0,0,199.87,123.66Z\" }))\n ],\n [\n \"thin\",\n /* @__PURE__ */ a.createElement(a.Fragment, null, /* @__PURE__ */ a.createElement(\"path\", { d: \"M128,84a44,44,0,1,0,44,44A44.05,44.05,0,0,0,128,84Zm0,80a36,36,0,1,1,36-36A36,36,0,0,1,128,164Zm83.93-32.49q.13-3.51,0-7l15.83-19.79a4,4,0,0,0,.75-3.53A103.64,103.64,0,0,0,218,75.9a4,4,0,0,0-3-2l-25.19-2.8c-1.58-1.71-3.24-3.37-4.95-4.95L182.07,41a4,4,0,0,0-2-3A104,104,0,0,0,154.82,27.5a4,4,0,0,0-3.53.74L131.51,44.07q-3.51-.14-7,0L104.7,28.24a4,4,0,0,0-3.53-.75A103.64,103.64,0,0,0,75.9,38a4,4,0,0,0-2,3l-2.8,25.19c-1.71,1.58-3.37,3.24-4.95,4.95L41,73.93a4,4,0,0,0-3,2A104,104,0,0,0,27.5,101.18a4,4,0,0,0,.74,3.53l15.83,19.78q-.14,3.51,0,7L28.24,151.3a4,4,0,0,0-.75,3.53A103.64,103.64,0,0,0,38,180.1a4,4,0,0,0,3,2l25.19,2.8c1.58,1.71,3.24,3.37,4.95,4.95l2.8,25.2a4,4,0,0,0,2,3,104,104,0,0,0,25.28,10.46,4,4,0,0,0,3.53-.74l19.78-15.83q3.51.13,7,0l19.79,15.83a4,4,0,0,0,2.5.88,4,4,0,0,0,1-.13A103.64,103.64,0,0,0,180.1,218a4,4,0,0,0,2-3l2.8-25.19c1.71-1.58,3.37-3.24,4.95-4.95l25.2-2.8a4,4,0,0,0,3-2,104,104,0,0,0,10.46-25.28,4,4,0,0,0-.74-3.53Zm.17,42.83-24.67,2.74a4,4,0,0,0-2.55,1.32,76.2,76.2,0,0,1-6.48,6.48,4,4,0,0,0-1.32,2.55l-2.74,24.66a95.45,95.45,0,0,1-19.64,8.15l-19.38-15.51a4,4,0,0,0-2.5-.87h-.24a73.67,73.67,0,0,1-9.16,0,4,4,0,0,0-2.74.87l-19.37,15.5a95.33,95.33,0,0,1-19.65-8.13l-2.74-24.67a4,4,0,0,0-1.32-2.55,76.2,76.2,0,0,1-6.48-6.48,4,4,0,0,0-2.55-1.32l-24.66-2.74a95.45,95.45,0,0,1-8.15-19.64l15.51-19.38a4,4,0,0,0,.87-2.74,77.76,77.76,0,0,1,0-9.16,4,4,0,0,0-.87-2.74l-15.5-19.37A95.33,95.33,0,0,1,43.9,81.66l24.67-2.74a4,4,0,0,0,2.55-1.32,76.2,76.2,0,0,1,6.48-6.48,4,4,0,0,0,1.32-2.55l2.74-24.66a95.45,95.45,0,0,1,19.64-8.15l19.38,15.51a4,4,0,0,0,2.74.87,73.67,73.67,0,0,1,9.16,0,4,4,0,0,0,2.74-.87l19.37-15.5a95.33,95.33,0,0,1,19.65,8.13l2.74,24.67a4,4,0,0,0,1.32,2.55,76.2,76.2,0,0,1,6.48,6.48,4,4,0,0,0,2.55,1.32l24.66,2.74a95.45,95.45,0,0,1,8.15,19.64l-15.51,19.38a4,4,0,0,0-.87,2.74,77.76,77.76,0,0,1,0,9.16,4,4,0,0,0,.87,2.74l15.5,19.37A95.33,95.33,0,0,1,212.1,174.34Z\" }))\n ]\n]);\nexport {\n l as default\n};\n","import * as a from \"react\";\nconst l = /* @__PURE__ */ new Map([\n [\n \"bold\",\n /* @__PURE__ */ a.createElement(a.Fragment, null, /* @__PURE__ */ a.createElement(\"path\", { d: \"M195.8,60.2a28,28,0,0,0-39.51-.09L144.68,72.28a12,12,0,1,1-17.36-16.56L139,43.43l.2-.2a52,52,0,0,1,73.54,73.54l-.2.2-12.29,11.71a12,12,0,0,1-16.56-17.36l12.17-11.61A28,28,0,0,0,195.8,60.2ZM111.32,183.72,99.71,195.89a28,28,0,0,1-39.6-39.6l12.17-11.61a12,12,0,0,0-16.56-17.36L43.43,139l-.2.2a52,52,0,0,0,73.54,73.54l.2-.2,11.71-12.29a12,12,0,1,0-17.36-16.56ZM216,148H192a12,12,0,0,0,0,24h24a12,12,0,0,0,0-24ZM40,108H64a12,12,0,0,0,0-24H40a12,12,0,0,0,0,24Zm120,72a12,12,0,0,0-12,12v24a12,12,0,0,0,24,0V192A12,12,0,0,0,160,180ZM96,76a12,12,0,0,0,12-12V40a12,12,0,0,0-24,0V64A12,12,0,0,0,96,76Z\" }))\n ],\n [\n \"duotone\",\n /* @__PURE__ */ a.createElement(a.Fragment, null, /* @__PURE__ */ a.createElement(\n \"path\",\n {\n d: \"M204.28,108.28l-96,96a40,40,0,0,1-56.56-56.56l96-96a40,40,0,0,1,56.56,56.56Z\",\n opacity: \"0.2\"\n }\n ), /* @__PURE__ */ a.createElement(\"path\", { d: \"M198.63,57.37a32,32,0,0,0-45.19-.06L141.79,69.52a8,8,0,0,1-11.58-11l11.72-12.29a1.59,1.59,0,0,1,.13-.13,48,48,0,0,1,67.88,67.88,1.59,1.59,0,0,1-.13.13l-12.29,11.72a8,8,0,0,1-11-11.58l12.21-11.65A32,32,0,0,0,198.63,57.37ZM114.21,186.48l-11.65,12.21a32,32,0,0,1-45.25-45.25l12.21-11.65a8,8,0,0,0-11-11.58L46.19,141.93a1.59,1.59,0,0,0-.13.13,48,48,0,0,0,67.88,67.88,1.59,1.59,0,0,0,.13-.13l11.72-12.29a8,8,0,1,0-11.58-11ZM216,152H192a8,8,0,0,0,0,16h24a8,8,0,0,0,0-16ZM40,104H64a8,8,0,0,0,0-16H40a8,8,0,0,0,0,16Zm120,80a8,8,0,0,0-8,8v24a8,8,0,0,0,16,0V192A8,8,0,0,0,160,184ZM96,72a8,8,0,0,0,8-8V40a8,8,0,0,0-16,0V64A8,8,0,0,0,96,72Z\" }))\n ],\n [\n \"fill\",\n /* @__PURE__ */ a.createElement(a.Fragment, null, /* @__PURE__ */ a.createElement(\"path\", { d: \"M208,32H48A16,16,0,0,0,32,48V208a16,16,0,0,0,16,16H208a16,16,0,0,0,16-16V48A16,16,0,0,0,208,32ZM96,64a8,8,0,0,1,16,0V80a8,8,0,0,1-16,0ZM64,96H80a8,8,0,0,1,0,16H64a8,8,0,0,1,0-16Zm64.08,85.66-7.21,7.21a38,38,0,1,1-53.74-53.74l7.21-7.21a8,8,0,1,1,11.32,11.31l-7.22,7.21a22,22,0,0,0,31.12,31.12l7.21-7.22a8,8,0,1,1,11.31,11.32ZM160,192a8,8,0,0,1-16,0V176a8,8,0,0,1,16,0Zm32-32H176a8,8,0,0,1,0-16h16a8,8,0,0,1,0,16Zm-3.13-39.13-7.21,7.21a8,8,0,1,1-11.32-11.31l7.22-7.21a22,22,0,0,0-31.12-31.12l-7.21,7.22a8,8,0,1,1-11.31-11.32l7.21-7.21a38,38,0,1,1,53.74,53.74Z\" }))\n ],\n [\n \"light\",\n /* @__PURE__ */ a.createElement(a.Fragment, null, /* @__PURE__ */ a.createElement(\"path\", { d: \"M200,56a34,34,0,0,0-48-.05L140.34,68.14a6,6,0,1,1-8.68-8.28l11.71-12.28.1-.11a46,46,0,0,1,65.06,65.06l-.11.1-12.28,11.71a6,6,0,1,1-8.28-8.68L200.09,104A34,34,0,0,0,200,56Zm-84.38,131.9L104,200.09A34,34,0,0,1,55.91,152l12.23-11.67a6,6,0,0,0-8.28-8.68L47.58,143.37l-.11.1a46,46,0,0,0,65.06,65.06l.1-.11,11.71-12.28a6,6,0,1,0-8.68-8.28ZM216,154H192a6,6,0,0,0,0,12h24a6,6,0,0,0,0-12ZM40,102H64a6,6,0,0,0,0-12H40a6,6,0,0,0,0,12Zm120,84a6,6,0,0,0-6,6v24a6,6,0,0,0,12,0V192A6,6,0,0,0,160,186ZM96,70a6,6,0,0,0,6-6V40a6,6,0,0,0-12,0V64A6,6,0,0,0,96,70Z\" }))\n ],\n [\n \"regular\",\n /* @__PURE__ */ a.createElement(a.Fragment, null, /* @__PURE__ */ a.createElement(\"path\", { d: \"M198.63,57.37a32,32,0,0,0-45.19-.06L141.79,69.52a8,8,0,0,1-11.58-11l11.72-12.29a1.59,1.59,0,0,1,.13-.13,48,48,0,0,1,67.88,67.88,1.59,1.59,0,0,1-.13.13l-12.29,11.72a8,8,0,0,1-11-11.58l12.21-11.65A32,32,0,0,0,198.63,57.37ZM114.21,186.48l-11.65,12.21a32,32,0,0,1-45.25-45.25l12.21-11.65a8,8,0,0,0-11-11.58L46.19,141.93a1.59,1.59,0,0,0-.13.13,48,48,0,0,0,67.88,67.88,1.59,1.59,0,0,0,.13-.13l11.72-12.29a8,8,0,1,0-11.58-11ZM216,152H192a8,8,0,0,0,0,16h24a8,8,0,0,0,0-16ZM40,104H64a8,8,0,0,0,0-16H40a8,8,0,0,0,0,16Zm120,80a8,8,0,0,0-8,8v24a8,8,0,0,0,16,0V192A8,8,0,0,0,160,184ZM96,72a8,8,0,0,0,8-8V40a8,8,0,0,0-16,0V64A8,8,0,0,0,96,72Z\" }))\n ],\n [\n \"thin\",\n /* @__PURE__ */ a.createElement(a.Fragment, null, /* @__PURE__ */ a.createElement(\"path\", { d: \"M201.46,54.54a36.06,36.06,0,0,0-50.92,0L138.89,66.76a4,4,0,0,1-5.78-5.52L144.82,49a44,44,0,1,1,62.29,62.15l-12.35,11.78a4,4,0,0,1-5.52-5.78l12.28-11.72A36,36,0,0,0,201.46,54.54Zm-84.35,134.7-11.65,12.22a36,36,0,0,1-51-50.85l12.28-11.72a4,4,0,0,0-5.52-5.78L48.89,144.89A44,44,0,1,0,111.18,207l11.71-12.28a4,4,0,1,0-5.78-5.52ZM216,156H192a4,4,0,0,0,0,8h24a4,4,0,0,0,0-8ZM40,100H64a4,4,0,0,0,0-8H40a4,4,0,0,0,0,8Zm120,88a4,4,0,0,0-4,4v24a4,4,0,0,0,8,0V192A4,4,0,0,0,160,188ZM96,68a4,4,0,0,0,4-4V40a4,4,0,0,0-8,0V64A4,4,0,0,0,96,68Z\" }))\n ]\n]);\nexport {\n l as default\n};\n","import * as a from \"react\";\nconst e = /* @__PURE__ */ new Map([\n [\n \"bold\",\n /* @__PURE__ */ a.createElement(a.Fragment, null, /* @__PURE__ */ a.createElement(\"path\", { d: \"M230.14,70.54,185.46,25.85a20,20,0,0,0-28.29,0L33.86,149.17A19.85,19.85,0,0,0,28,163.31V208a20,20,0,0,0,20,20H92.69a19.86,19.86,0,0,0,14.14-5.86L230.14,98.82a20,20,0,0,0,0-28.28ZM91,204H52V165l84-84,39,39ZM192,103,153,64l18.34-18.34,39,39Z\" }))\n ],\n [\n \"duotone\",\n /* @__PURE__ */ a.createElement(a.Fragment, null, /* @__PURE__ */ a.createElement(\n \"path\",\n {\n d: \"M221.66,90.34,192,120,136,64l29.66-29.66a8,8,0,0,1,11.31,0L221.66,79A8,8,0,0,1,221.66,90.34Z\",\n opacity: \"0.2\"\n }\n ), /* @__PURE__ */ a.createElement(\"path\", { d: \"M227.31,73.37,182.63,28.68a16,16,0,0,0-22.63,0L36.69,152A15.86,15.86,0,0,0,32,163.31V208a16,16,0,0,0,16,16H92.69A15.86,15.86,0,0,0,104,219.31L227.31,96a16,16,0,0,0,0-22.63ZM92.69,208H48V163.31l88-88L180.69,120ZM192,108.68,147.31,64l24-24L216,84.68Z\" }))\n ],\n [\n \"fill\",\n /* @__PURE__ */ a.createElement(a.Fragment, null, /* @__PURE__ */ a.createElement(\"path\", { d: \"M227.31,73.37,182.63,28.68a16,16,0,0,0-22.63,0L36.69,152A15.86,15.86,0,0,0,32,163.31V208a16,16,0,0,0,16,16H92.69A15.86,15.86,0,0,0,104,219.31L227.31,96a16,16,0,0,0,0-22.63ZM192,108.68,147.31,64l24-24L216,84.68Z\" }))\n ],\n [\n \"light\",\n /* @__PURE__ */ a.createElement(a.Fragment, null, /* @__PURE__ */ a.createElement(\"path\", { d: \"M225.9,74.78,181.21,30.09a14,14,0,0,0-19.8,0L38.1,153.41a13.94,13.94,0,0,0-4.1,9.9V208a14,14,0,0,0,14,14H92.69a13.94,13.94,0,0,0,9.9-4.1L225.9,94.58a14,14,0,0,0,0-19.8ZM94.1,209.41a2,2,0,0,1-1.41.59H48a2,2,0,0,1-2-2V163.31a2,2,0,0,1,.59-1.41L136,72.48,183.51,120ZM217.41,86.1,192,111.51,144.49,64,169.9,38.58a2,2,0,0,1,2.83,0l44.68,44.69a2,2,0,0,1,0,2.83Z\" }))\n ],\n [\n \"regular\",\n /* @__PURE__ */ a.createElement(a.Fragment, null, /* @__PURE__ */ a.createElement(\"path\", { d: \"M227.31,73.37,182.63,28.68a16,16,0,0,0-22.63,0L36.69,152A15.86,15.86,0,0,0,32,163.31V208a16,16,0,0,0,16,16H92.69A15.86,15.86,0,0,0,104,219.31L227.31,96a16,16,0,0,0,0-22.63ZM92.69,208H48V163.31l88-88L180.69,120ZM192,108.68,147.31,64l24-24L216,84.68Z\" }))\n ],\n [\n \"thin\",\n /* @__PURE__ */ a.createElement(a.Fragment, null, /* @__PURE__ */ a.createElement(\"path\", { d: \"M224.49,76.2,179.8,31.51a12,12,0,0,0-17,0L133.17,61.17h0L39.52,154.83A11.9,11.9,0,0,0,36,163.31V208a12,12,0,0,0,12,12H92.69a12,12,0,0,0,8.48-3.51L224.48,93.17a12,12,0,0,0,0-17Zm-129,134.63A4,4,0,0,1,92.69,212H48a4,4,0,0,1-4-4V163.31a4,4,0,0,1,1.17-2.83L136,69.65,186.34,120ZM218.83,87.51,192,114.34,141.66,64l26.82-26.83a4,4,0,0,1,5.66,0l44.69,44.68a4,4,0,0,1,0,5.66Z\" }))\n ]\n]);\nexport {\n e as default\n};\n","import * as a from \"react\";\nconst e = /* @__PURE__ */ new Map([\n [\n \"bold\",\n /* @__PURE__ */ a.createElement(a.Fragment, null, /* @__PURE__ */ a.createElement(\"path\", { d: \"M124,216a12,12,0,0,1-12,12H48a12,12,0,0,1-12-12V40A12,12,0,0,1,48,28h64a12,12,0,0,1,0,24H60V204h52A12,12,0,0,1,124,216Zm108.49-96.49-40-40a12,12,0,0,0-17,17L195,116H112a12,12,0,0,0,0,24h83l-19.52,19.51a12,12,0,0,0,17,17l40-40A12,12,0,0,0,232.49,119.51Z\" }))\n ],\n [\n \"duotone\",\n /* @__PURE__ */ a.createElement(a.Fragment, null, /* @__PURE__ */ a.createElement(\n \"path\",\n {\n d: \"M224,56V200a16,16,0,0,1-16,16H48V40H208A16,16,0,0,1,224,56Z\",\n opacity: \"0.2\"\n }\n ), /* @__PURE__ */ a.createElement(\"path\", { d: \"M120,216a8,8,0,0,1-8,8H48a8,8,0,0,1-8-8V40a8,8,0,0,1,8-8h64a8,8,0,0,1,0,16H56V208h56A8,8,0,0,1,120,216Zm109.66-93.66-40-40a8,8,0,0,0-11.32,11.32L204.69,120H112a8,8,0,0,0,0,16h92.69l-26.35,26.34a8,8,0,0,0,11.32,11.32l40-40A8,8,0,0,0,229.66,122.34Z\" }))\n ],\n [\n \"fill\",\n /* @__PURE__ */ a.createElement(a.Fragment, null, /* @__PURE__ */ a.createElement(\"path\", { d: \"M120,216a8,8,0,0,1-8,8H48a8,8,0,0,1-8-8V40a8,8,0,0,1,8-8h64a8,8,0,0,1,0,16H56V208h56A8,8,0,0,1,120,216Zm109.66-93.66-40-40A8,8,0,0,0,176,88v32H112a8,8,0,0,0,0,16h64v32a8,8,0,0,0,13.66,5.66l40-40A8,8,0,0,0,229.66,122.34Z\" }))\n ],\n [\n \"light\",\n /* @__PURE__ */ a.createElement(a.Fragment, null, /* @__PURE__ */ a.createElement(\"path\", { d: \"M118,216a6,6,0,0,1-6,6H48a6,6,0,0,1-6-6V40a6,6,0,0,1,6-6h64a6,6,0,0,1,0,12H54V210h58A6,6,0,0,1,118,216Zm110.24-92.24-40-40a6,6,0,0,0-8.48,8.48L209.51,122H112a6,6,0,0,0,0,12h97.51l-29.75,29.76a6,6,0,1,0,8.48,8.48l40-40A6,6,0,0,0,228.24,123.76Z\" }))\n ],\n [\n \"regular\",\n /* @__PURE__ */ a.createElement(a.Fragment, null, /* @__PURE__ */ a.createElement(\"path\", { d: \"M120,216a8,8,0,0,1-8,8H48a8,8,0,0,1-8-8V40a8,8,0,0,1,8-8h64a8,8,0,0,1,0,16H56V208h56A8,8,0,0,1,120,216Zm109.66-93.66-40-40a8,8,0,0,0-11.32,11.32L204.69,120H112a8,8,0,0,0,0,16h92.69l-26.35,26.34a8,8,0,0,0,11.32,11.32l40-40A8,8,0,0,0,229.66,122.34Z\" }))\n ],\n [\n \"thin\",\n /* @__PURE__ */ a.createElement(a.Fragment, null, /* @__PURE__ */ a.createElement(\"path\", { d: \"M116,216a4,4,0,0,1-4,4H48a4,4,0,0,1-4-4V40a4,4,0,0,1,4-4h64a4,4,0,0,1,0,8H52V212h60A4,4,0,0,1,116,216Zm110.83-90.83-40-40a4,4,0,0,0-5.66,5.66L214.34,124H112a4,4,0,0,0,0,8H214.34l-33.17,33.17a4,4,0,0,0,5.66,5.66l40-40A4,4,0,0,0,226.83,125.17Z\" }))\n ]\n]);\nexport {\n e as default\n};\n","import * as o from \"react\";\nimport a from \"../lib/IconBase.es.js\";\nimport m from \"../defs/Cloud.es.js\";\nconst e = o.forwardRef((r, t) => /* @__PURE__ */ o.createElement(a, { ref: t, ...r, weights: m }));\ne.displayName = \"CloudIcon\";\nconst n = e;\nexport {\n n as Cloud,\n e as CloudIcon\n};\n","import * as e from \"react\";\nimport r from \"../lib/IconBase.es.js\";\nimport t from \"../defs/DeviceMobile.es.js\";\nconst o = e.forwardRef((i, c) => /* @__PURE__ */ e.createElement(r, { ref: c, ...i, weights: t }));\no.displayName = \"DeviceMobileIcon\";\nconst s = o;\nexport {\n s as DeviceMobile,\n o as DeviceMobileIcon\n};\n","import * as e from \"react\";\nimport t from \"../lib/IconBase.es.js\";\nimport m from \"../defs/Gear.es.js\";\nconst o = e.forwardRef((r, a) => /* @__PURE__ */ e.createElement(t, { ref: a, ...r, weights: m }));\no.displayName = \"GearIcon\";\nconst n = o;\nexport {\n n as Gear,\n o as GearIcon\n};\n","import * as e from \"react\";\nimport t from \"../lib/IconBase.es.js\";\nimport n from \"../defs/LinkBreak.es.js\";\nconst o = e.forwardRef((r, a) => /* @__PURE__ */ e.createElement(t, { ref: a, ...r, weights: n }));\no.displayName = \"LinkBreakIcon\";\nconst c = o;\nexport {\n c as LinkBreak,\n o as LinkBreakIcon\n};\n","import * as e from \"react\";\nimport c from \"../lib/IconBase.es.js\";\nimport r from \"../defs/PencilSimple.es.js\";\nconst o = e.forwardRef((i, m) => /* @__PURE__ */ e.createElement(c, { ref: m, ...i, weights: r }));\no.displayName = \"PencilSimpleIcon\";\nconst a = o;\nexport {\n a as PencilSimple,\n o as PencilSimpleIcon\n};\n","import * as o from \"react\";\nimport n from \"../lib/IconBase.es.js\";\nimport a from \"../defs/SignOut.es.js\";\nconst t = o.forwardRef((e, r) => /* @__PURE__ */ o.createElement(n, { ref: r, ...e, weights: a }));\nt.displayName = \"SignOutIcon\";\nconst c = t;\nexport {\n c as SignOut,\n t as SignOutIcon\n};\n","import { TrashIcon, WarningIcon } from '@phosphor-icons/react';\nimport { useTranslation } from 'react-i18next';\n\ninterface DangerZoneSectionProps {\n isConfigManaged: boolean;\n isDeletionEnabled: boolean;\n onDeleteClick: () => void;\n}\n\nexport function DangerZoneSection({\n isConfigManaged,\n isDeletionEnabled,\n onDeleteClick,\n}: DangerZoneSectionProps) {\n const { t } = useTranslation();\n\n // Don't render if deletion is disabled\n if (!isDeletionEnabled) {\n return null;\n }\n\n return (\n <div className=\"rounded-xl border border-base-200 border-l-4 border-l-error/60\">\n <div className=\"border-base-200 border-b px-4 py-3\">\n <div className=\"flex items-center gap-2\">\n <WarningIcon className=\"size-4 text-error\" weight=\"fill\" />\n <h2 className=\"font-semibold text-error text-sm\">\n {t('profile.dangerZone.title')}\n </h2>\n </div>\n <p className=\"mt-0.5 text-base-content/60 text-xs\">\n {t('profile.dangerZone.description')}\n </p>\n </div>\n <div className=\"px-4 py-3\">\n <div className=\"flex items-center justify-between gap-4\">\n <div className=\"min-w-0 flex-1\">\n <p className=\"font-medium text-sm\">\n {t('profile.deleteAccount.title')}\n </p>\n <p className=\"text-base-content/60 text-xs\">\n {isConfigManaged\n ? t('profile.deleteAccount.configManaged')\n : t('profile.deleteAccount.description')}\n </p>\n </div>\n <button\n className=\"btn btn-error btn-outline btn-sm gap-2\"\n data-testid=\"profile-delete-account\"\n disabled={isConfigManaged}\n onClick={onDeleteClick}\n type=\"button\"\n >\n <TrashIcon className=\"size-4\" weight=\"bold\" />\n {t('profile.deleteAccount.button')}\n </button>\n </div>\n </div>\n </div>\n );\n}\n","import { LinkIcon } from '@phosphor-icons/react';\nimport { useTranslation } from 'react-i18next';\n\ninterface OAuthProvider {\n id: string;\n display_name: string;\n linked: boolean;\n}\n\ninterface LinkedAccountsSectionProps {\n providers: OAuthProvider[];\n unlinkingProvider: string | null;\n getAuthorizeUrl: (\n providerId: string,\n mode?: 'login' | 'register' | 'link',\n returnUrl?: string,\n ) => string;\n onUnlinkRequest: (provider: OAuthProvider) => void;\n}\n\nexport function LinkedAccountsSection({\n providers,\n unlinkingProvider,\n getAuthorizeUrl,\n onUnlinkRequest,\n}: LinkedAccountsSectionProps) {\n const { t } = useTranslation();\n\n if (providers.length === 0) {\n return null;\n }\n\n return (\n <div className=\"rounded-xl border border-base-200\">\n <div className=\"border-base-200 border-b px-4 py-3\">\n <h2 className=\"font-semibold text-sm\">\n {t('profile.linkedAccounts.title')}\n </h2>\n <p className=\"text-base-content/60 text-xs\">\n {t('profile.linkedAccounts.description')}\n </p>\n </div>\n <div className=\"divide-y divide-base-200\">\n {providers.map((provider) => (\n <div\n className=\"flex items-center justify-between p-4\"\n key={provider.id}\n >\n <div className=\"flex items-center gap-3\">\n <div\n className={`flex size-9 shrink-0 items-center justify-center rounded-lg ${\n provider.linked ? 'bg-success/10' : 'bg-base-200'\n }`}\n >\n <LinkIcon\n className={`size-4 ${\n provider.linked ? 'text-success' : 'text-base-content/50'\n }`}\n weight=\"regular\"\n />\n </div>\n <div>\n <div className=\"font-medium text-sm\">\n {provider.display_name}\n </div>\n <div className=\"text-base-content/60 text-xs\">\n {provider.linked\n ? t('profile.linkedAccounts.connected')\n : t('profile.linkedAccounts.notConnected')}\n </div>\n </div>\n </div>\n {provider.linked ? (\n <button\n className=\"btn btn-ghost btn-xs text-error\"\n disabled={unlinkingProvider === provider.id}\n onClick={() => onUnlinkRequest(provider)}\n type=\"button\"\n >\n {unlinkingProvider === provider.id ? (\n <>\n <span className=\"loading loading-spinner loading-xs\" />\n {t('profile.linkedAccounts.unlinking')}\n </>\n ) : (\n t('profile.linkedAccounts.unlink')\n )}\n </button>\n ) : (\n <a\n className=\"btn btn-ghost btn-xs text-primary\"\n href={getAuthorizeUrl(provider.id, 'link', '/profile')}\n >\n {t('profile.linkedAccounts.link')}\n </a>\n )}\n </div>\n ))}\n </div>\n </div>\n );\n}\n","import { FingerprintIcon } from '@phosphor-icons/react';\nimport { useTranslation } from 'react-i18next';\n\ntype PasskeyModalType = 'setup' | 'manage' | null;\n\ninterface PasskeySectionProps {\n passkeyCount: number;\n onOpenModal: (type: PasskeyModalType) => void;\n}\n\nexport function PasskeySection({\n passkeyCount,\n onOpenModal,\n}: PasskeySectionProps) {\n const { t } = useTranslation();\n\n return (\n <div className=\"flex items-center justify-between p-4\">\n <div className=\"flex items-center gap-3\">\n <div\n className={`flex size-9 shrink-0 items-center justify-center rounded-lg ${\n passkeyCount > 0 ? 'bg-success/10' : 'bg-base-200'\n }`}\n >\n <FingerprintIcon\n className={`size-4 ${\n passkeyCount > 0 ? 'text-success' : 'text-base-content/50'\n }`}\n weight=\"regular\"\n />\n </div>\n <div>\n <div className=\"font-medium text-sm\">\n {t('profile.passkey.title')}\n </div>\n <div className=\"text-base-content/60 text-xs\">\n {passkeyCount > 0\n ? t('profile.passkey.status.enabled', { count: passkeyCount })\n : t('profile.passkey.status.disabled')}\n </div>\n </div>\n </div>\n <div className=\"flex gap-1\">\n {passkeyCount > 0 ? (\n <button\n className=\"btn btn-ghost btn-xs text-primary\"\n onClick={() => onOpenModal('manage')}\n type=\"button\"\n >\n {t('profile.passkey.manage')}\n </button>\n ) : (\n <button\n className=\"btn btn-ghost btn-xs text-primary\"\n onClick={() => onOpenModal('setup')}\n type=\"button\"\n >\n {t('profile.passkey.add')}\n </button>\n )}\n </div>\n </div>\n );\n}\n","import { GearIcon, InfoIcon, KeyIcon } from '@phosphor-icons/react';\nimport { useTranslation } from 'react-i18next';\n\ntype PasswordModalType = 'set' | 'change' | 'remove' | null;\n\ninterface PasswordSectionProps {\n hasPassword: boolean;\n hasLinkedOAuth: boolean;\n isConfigManaged: boolean;\n hasSecondFactorOnly: boolean;\n onOpenModal: (type: PasswordModalType) => void;\n}\n\nexport function PasswordSection({\n hasPassword,\n hasLinkedOAuth,\n isConfigManaged,\n hasSecondFactorOnly,\n onOpenModal,\n}: PasswordSectionProps) {\n const { t } = useTranslation();\n\n return (\n <div className=\"flex items-center justify-between gap-4 p-4\">\n <div className=\"flex min-w-0 flex-1 items-center gap-3\">\n <div\n className={`flex size-9 shrink-0 items-center justify-center rounded-lg ${\n hasPassword ? 'bg-success/10' : 'bg-base-200'\n }`}\n >\n <KeyIcon\n className={`size-4 ${\n hasPassword ? 'text-success' : 'text-base-content/50'\n }`}\n weight=\"regular\"\n />\n </div>\n <div className=\"min-w-0 flex-1\">\n <div className=\"font-medium text-sm\">\n {t('profile.password.title')}\n </div>\n <div className=\"text-base-content/60 text-xs\">\n {hasPassword\n ? t('profile.password.status.set')\n : t('profile.password.status.notSet')}\n </div>\n {isConfigManaged && (\n <div className=\"mt-0.5 flex items-center gap-1 text-base-content/40 text-xs\">\n <GearIcon className=\"size-3 shrink-0\" weight=\"fill\" />\n <span>{t('profile.password.configManaged')}</span>\n </div>\n )}\n </div>\n </div>\n {!isConfigManaged && (\n <div className=\"flex shrink-0 items-center gap-1\">\n {hasPassword ? (\n <>\n <button\n className=\"btn btn-ghost btn-xs text-primary\"\n data-testid=\"profile-password-change\"\n onClick={() => onOpenModal('change')}\n type=\"button\"\n >\n {t('profile.password.change')}\n </button>\n {hasLinkedOAuth ? (\n <button\n className=\"btn btn-ghost btn-xs text-error\"\n data-testid=\"profile-password-remove\"\n onClick={() => onOpenModal('remove')}\n type=\"button\"\n >\n {t('profile.password.remove')}\n </button>\n ) : null}\n {!hasLinkedOAuth && hasSecondFactorOnly && (\n <div className=\"dropdown dropdown-end\">\n <button\n className=\"btn btn-disabled btn-ghost btn-xs cursor-not-allowed text-base-content/30\"\n type=\"button\"\n >\n {t('profile.password.remove')}\n </button>\n <div className=\"dropdown-content z-50 w-64 rounded-xl border border-base-200 bg-base-100 p-4 shadow-lg\">\n <div className=\"flex items-start gap-2\">\n <InfoIcon className=\"size-4 shrink-0 text-warning\" />\n <div className=\"text-xs\">\n {t('profile.password.removeDisabledReason')}\n </div>\n </div>\n </div>\n </div>\n )}\n </>\n ) : (\n <button\n className=\"btn btn-ghost btn-xs text-primary\"\n data-testid=\"profile-password-set\"\n onClick={() => onOpenModal('set')}\n type=\"button\"\n >\n {t('profile.password.set')}\n </button>\n )}\n </div>\n )}\n </div>\n );\n}\n","import { ShieldCheckIcon } from '@phosphor-icons/react';\nimport { useTranslation } from 'react-i18next';\n\ntype TotpModalType = 'setup' | 'disable' | 'regenerate' | null;\n\ninterface TotpSectionProps {\n totpEnabled: boolean;\n recoveryCodesMissing: boolean;\n onOpenModal: (type: TotpModalType) => void;\n}\n\nexport function TotpSection({\n totpEnabled,\n recoveryCodesMissing,\n onOpenModal,\n}: TotpSectionProps) {\n const { t } = useTranslation();\n\n return (\n <div className=\"flex items-center justify-between p-4\">\n <div className=\"flex items-center gap-3\">\n <div\n className={`flex size-9 shrink-0 items-center justify-center rounded-lg ${\n totpEnabled ? 'bg-success/10' : 'bg-base-200'\n }`}\n >\n <ShieldCheckIcon\n className={`size-4 ${\n totpEnabled ? 'text-success' : 'text-base-content/50'\n }`}\n weight=\"regular\"\n />\n </div>\n <div>\n <div className=\"font-medium text-sm\">{t('profile.totp.title')}</div>\n <div className=\"text-base-content/60 text-xs\">\n {totpEnabled\n ? recoveryCodesMissing\n ? t('profile.totp.status.recoveryCodesMissing')\n : t('profile.totp.status.enabled')\n : t('profile.totp.status.disabled')}\n </div>\n </div>\n </div>\n <div className=\"flex flex-wrap justify-end gap-1\">\n {totpEnabled ? (\n <>\n <button\n className=\"btn btn-ghost btn-xs text-primary\"\n data-testid=\"profile-totp-regenerate\"\n onClick={() => onOpenModal('regenerate')}\n type=\"button\"\n >\n {t('profile.totp.regenerate')}\n </button>\n <button\n className=\"btn btn-ghost btn-xs text-error\"\n data-testid=\"profile-totp-disable\"\n onClick={() => onOpenModal('disable')}\n type=\"button\"\n >\n {t('profile.totp.disable')}\n </button>\n </>\n ) : (\n <button\n className=\"btn btn-ghost btn-xs text-primary\"\n data-testid=\"profile-totp-enable\"\n onClick={() => onOpenModal('setup')}\n type=\"button\"\n >\n {t('profile.totp.enable')}\n </button>\n )}\n </div>\n </div>\n );\n}\n","import {\n InfoIcon,\n WarningCircleIcon,\n WarningIcon,\n} from '@phosphor-icons/react';\nimport type { ReactNode } from 'react';\n\ntype AlertBannerVariant = 'error' | 'warning' | 'info';\n\ninterface AlertBannerProps {\n variant: AlertBannerVariant;\n children: ReactNode;\n}\n\nconst variantClasses: Record<AlertBannerVariant, string> = {\n error: 'bg-error/10 text-error',\n warning: 'bg-warning/10 text-warning',\n info: 'bg-info/10 text-info',\n};\n\nconst variantIcons: Record<AlertBannerVariant, typeof WarningIcon> = {\n error: WarningCircleIcon,\n warning: WarningIcon,\n info: InfoIcon,\n};\n\nexport function AlertBanner({ variant, children }: AlertBannerProps) {\n const IconComponent = variantIcons[variant];\n\n return (\n <div\n className={`flex items-start gap-3 rounded-lg p-3 ${variantClasses[variant]}`}\n data-testid={`alert-banner-${variant}`}\n >\n <IconComponent className=\"mt-0.5 size-5 shrink-0\" weight=\"fill\" />\n <div className=\"min-w-0 flex-1 text-sm\">{children}</div>\n </div>\n );\n}\n","import { LinkBreakIcon } from '@phosphor-icons/react';\nimport { useState } from 'react';\nimport { useTranslation } from 'react-i18next';\nimport { AlertBanner } from '#frontend/components/ui/alert-banner.tsx';\nimport { Modal, ModalActions } from '#frontend/components/ui/modal.tsx';\n\ninterface UnlinkOAuthModalProps {\n isOpen: boolean;\n onClose: () => void;\n providerName: string;\n isPending: boolean;\n onConfirm: () => Promise<void>;\n}\n\nexport function UnlinkOAuthModal({\n isOpen,\n onClose,\n providerName,\n isPending,\n onConfirm,\n}: UnlinkOAuthModalProps) {\n const { t } = useTranslation();\n const [error, setError] = useState<string | null>(null);\n\n const handleClose = () => {\n if (isPending) return;\n setError(null);\n onClose();\n };\n\n const handleConfirm = async () => {\n setError(null);\n try {\n await onConfirm();\n handleClose();\n } catch {\n setError(t('profile.linkedAccounts.unlinkError'));\n }\n };\n\n return (\n <Modal\n description={t('profile.linkedAccounts.unlinkModal.description', {\n provider: providerName,\n })}\n icon={LinkBreakIcon}\n isOpen={isOpen}\n onClose={handleClose}\n preventClose={isPending}\n title={t('profile.linkedAccounts.unlinkModal.title')}\n variant=\"destructive\"\n >\n <div className=\"mt-4 space-y-3\">\n <AlertBanner variant=\"warning\">\n {t('profile.linkedAccounts.unlinkModal.warning', {\n provider: providerName,\n })}\n </AlertBanner>\n\n {error && <AlertBanner variant=\"error\">{error}</AlertBanner>}\n\n <ModalActions>\n <button\n className=\"btn btn-sm\"\n data-testid=\"unlink-oauth-cancel\"\n disabled={isPending}\n onClick={handleClose}\n type=\"button\"\n >\n {t('profile.linkedAccounts.unlinkModal.cancel')}\n </button>\n <button\n className=\"btn btn-sm btn-error\"\n data-testid=\"unlink-oauth-unlink\"\n disabled={isPending}\n onClick={handleConfirm}\n type=\"button\"\n >\n {isPending ? (\n <>\n <span className=\"loading loading-spinner loading-xs\" />\n {t('profile.linkedAccounts.unlinking')}\n </>\n ) : (\n t('profile.linkedAccounts.unlink')\n )}\n </button>\n </ModalActions>\n </div>\n </Modal>\n );\n}\n","import { useTranslation } from 'react-i18next';\n\ninterface UserInfoSectionProps {\n user: {\n sub: string;\n email: string;\n };\n}\n\nexport function UserInfoSection({ user }: UserInfoSectionProps) {\n const { t } = useTranslation();\n\n return (\n <div className=\"rounded-xl border border-base-200\">\n <div className=\"border-base-200 border-b px-4 py-3\">\n <h2 className=\"font-semibold text-sm\">{t('profile.account.title')}</h2>\n <p className=\"text-base-content/60 text-xs\">\n {t('profile.account.description')}\n </p>\n </div>\n <div className=\"divide-y divide-base-200\">\n {/* User ID */}\n <div className=\"flex items-center justify-between gap-4 px-4 py-3\">\n <span className=\"shrink-0 text-base-content/60 text-xs\">\n {t('profile.id.label')}\n </span>\n <span className=\"truncate font-medium text-sm\">{user.sub}</span>\n </div>\n\n {/* Email */}\n <div className=\"flex items-center justify-between gap-4 px-4 py-3\">\n <span className=\"shrink-0 text-base-content/60 text-xs\">\n {t('profile.email.label')}\n </span>\n <span className=\"truncate font-medium text-sm\">{user.email}</span>\n </div>\n </div>\n </div>\n );\n}\n","type InitialAvatarProps = {\n email: string;\n size?: 'sm' | 'md' | 'lg';\n};\n\nconst sizeClasses: Record<NonNullable<InitialAvatarProps['size']>, string> = {\n sm: 'size-8 text-sm',\n md: 'size-12 text-xl',\n lg: 'size-16 text-2xl',\n};\n\nexport function InitialAvatar({ email, size = 'md' }: InitialAvatarProps) {\n const initial = email.charAt(0).toUpperCase();\n\n return (\n <div\n className={`flex shrink-0 items-center justify-center rounded-full bg-primary font-bold text-primary-content ${sizeClasses[size]}`}\n >\n {initial}\n </div>\n );\n}\n","import { mutationOptions } from '@tanstack/react-query';\nimport type { InferRequestType } from 'hono/client';\nimport { client, jsonOk } from '#frontend/libs/api.ts';\n\n/**\n * Set password for OAuth-only users\n */\nexport type SetPasswordParams = InferRequestType<\n (typeof client.api.user.password)['$post']\n>['json'];\n\nexport const setPasswordMutationOptions = mutationOptions({\n mutationFn: async (values: SetPasswordParams) => {\n const res = await client.api.user.password.$post({\n json: values,\n });\n return jsonOk(res);\n },\n});\n\n/**\n * Change password for users who already have a password\n */\nexport type ChangePasswordParams = InferRequestType<\n (typeof client.api.user.password)['$put']\n>['json'];\n\nexport const changePasswordMutationOptions = mutationOptions({\n mutationFn: async (values: ChangePasswordParams) => {\n const res = await client.api.user.password.$put({\n json: values,\n });\n return jsonOk(res);\n },\n});\n\n/**\n * Remove password (only if user has at least one\n * OAuth account linked)\n */\nexport type RemovePasswordParams = InferRequestType<\n (typeof client.api.user.password)['$delete']\n>['json'];\n\nexport const removePasswordMutationOptions = mutationOptions({\n mutationFn: async (values: RemovePasswordParams) => {\n const res = await client.api.user.password.$delete({\n json: values,\n });\n return jsonOk(res);\n },\n});\n","import { standardSchemaResolver } from '@hookform/resolvers/standard-schema';\nimport { KeyIcon } from '@phosphor-icons/react';\nimport {\n useMutation,\n useQueryClient,\n useSuspenseQuery,\n} from '@tanstack/react-query';\nimport { useMemo } from 'react';\nimport { useForm } from 'react-hook-form';\nimport { useTranslation } from 'react-i18next';\nimport z from 'zod';\nimport { AlertBanner } from '#frontend/components/ui/alert-banner.tsx';\nimport { Modal, ModalActions } from '#frontend/components/ui/modal.tsx';\nimport { TinyAuthError } from '#frontend/libs/error.ts';\nimport { appConfigQueryOptions } from '#frontend/queries/config.ts';\nimport { changePasswordMutationOptions } from '#frontend/queries/password.ts';\nimport { getSessionQueryOptions } from '#frontend/queries/session.ts';\n\ninterface ChangePasswordModalProps {\n isOpen: boolean;\n onClose: () => void;\n}\n\nexport function ChangePasswordModal({\n isOpen,\n onClose,\n}: ChangePasswordModalProps) {\n const { t } = useTranslation();\n const queryClient = useQueryClient();\n const { data: configData } = useSuspenseQuery(appConfigQueryOptions);\n const passwordPolicy = configData.auth.password.policy;\n\n const schema = useMemo(\n () =>\n z\n .object({\n currentPassword: z.string().min(1, t('validation.password.required')),\n newPassword: z\n .string()\n .min(\n passwordPolicy.min_length,\n t('validation.password.min', {\n count: passwordPolicy.min_length,\n }),\n )\n .max(\n passwordPolicy.max_length,\n t('validation.password.max', {\n count: passwordPolicy.max_length,\n }),\n ),\n confirmPassword: z.string(),\n })\n .refine((data) => data.newPassword === data.confirmPassword, {\n message: t('validation.confirmPassword.mismatch'),\n path: ['confirmPassword'],\n }),\n [passwordPolicy.max_length, passwordPolicy.min_length, t],\n );\n\n const form = useForm({\n resolver: standardSchemaResolver(schema),\n defaultValues: {\n currentPassword: '',\n newPassword: '',\n confirmPassword: '',\n },\n });\n\n const mutation = useMutation({\n ...changePasswordMutationOptions,\n onSuccess: () => {\n queryClient.invalidateQueries({\n queryKey: getSessionQueryOptions.queryKey,\n });\n handleClose();\n },\n });\n\n const handleClose = () => {\n form.reset();\n onClose();\n };\n\n const handleSubmit = form.handleSubmit(async (data) => {\n try {\n await mutation.mutateAsync({\n current_password: data.currentPassword,\n new_password: data.newPassword,\n });\n } catch (err) {\n if (\n err instanceof TinyAuthError &&\n err.code === 'INVALID_CURRENT_PASSWORD'\n ) {\n form.setError('currentPassword', {\n message: t('profile.password.changeModal.invalidCurrent'),\n });\n } else {\n form.setError('root', {\n message: t('profile.password.changeModal.error'),\n });\n }\n }\n });\n\n return (\n <Modal\n description={t('profile.password.changeModal.description')}\n icon={KeyIcon}\n isOpen={isOpen}\n onClose={handleClose}\n title={t('profile.password.changeModal.title')}\n >\n <form className=\"mt-4 space-y-3\" onSubmit={handleSubmit}>\n <div className=\"form-control\">\n <label className=\"label w-full\" htmlFor=\"current-password\">\n <span className=\"label-text text-xs\">\n {t('profile.password.changeModal.currentPassword')}\n </span>\n </label>\n <input\n className={`input input-bordered input-sm w-full ${\n form.formState.errors.currentPassword ? 'input-error' : ''\n }`}\n id=\"current-password\"\n placeholder={t(\n 'profile.password.changeModal.currentPasswordPlaceholder',\n )}\n type=\"password\"\n {...form.register('currentPassword')}\n />\n {form.formState.errors.currentPassword && (\n <span\n className=\"label-text-alt mt-0.5 text-error\"\n data-testid=\"change-password-error-currentPassword\"\n >\n {form.formState.errors.currentPassword.message}\n </span>\n )}\n </div>\n <div className=\"form-control\">\n <label className=\"label w-full\" htmlFor=\"new-password-change\">\n <span className=\"label-text text-xs\">\n {t('profile.password.changeModal.newPassword')}\n </span>\n </label>\n <input\n className={`input input-bordered input-sm w-full ${\n form.formState.errors.newPassword ? 'input-error' : ''\n }`}\n id=\"new-password-change\"\n placeholder={t(\n 'profile.password.changeModal.newPasswordPlaceholder',\n )}\n type=\"password\"\n {...form.register('newPassword')}\n />\n {form.formState.errors.newPassword && (\n <span\n className=\"label-text-alt mt-0.5 text-error\"\n data-testid=\"change-password-error-newPassword\"\n >\n {form.formState.errors.newPassword.message}\n </span>\n )}\n </div>\n <div className=\"form-control\">\n <label className=\"label w-full\" htmlFor=\"confirm-password-change\">\n <span className=\"label-text text-xs\">\n {t('profile.password.changeModal.confirmPassword')}\n </span>\n </label>\n <input\n className={`input input-bordered input-sm w-full ${\n form.formState.errors.confirmPassword ? 'input-error' : ''\n }`}\n id=\"confirm-password-change\"\n placeholder={t(\n 'profile.password.changeModal.confirmPasswordPlaceholder',\n )}\n type=\"password\"\n {...form.register('confirmPassword')}\n />\n {form.formState.errors.confirmPassword && (\n <span\n className=\"label-text-alt mt-0.5 text-error\"\n data-testid=\"change-password-error-confirmPassword\"\n >\n {form.formState.errors.confirmPassword.message}\n </span>\n )}\n </div>\n {form.formState.errors.root && (\n <AlertBanner variant=\"error\">\n {form.formState.errors.root.message}\n </AlertBanner>\n )}\n <ModalActions>\n <button\n className=\"btn btn-sm\"\n data-testid=\"change-password-cancel\"\n disabled={mutation.isPending}\n onClick={handleClose}\n type=\"button\"\n >\n {t('profile.password.changeModal.cancel')}\n </button>\n <button\n className=\"btn btn-sm btn-primary\"\n data-testid=\"change-password-submit\"\n disabled={mutation.isPending}\n type=\"submit\"\n >\n {mutation.isPending ? (\n <>\n <span className=\"loading loading-spinner loading-xs\" />\n {t('profile.password.changeModal.submitting')}\n </>\n ) : (\n t('profile.password.changeModal.submit')\n )}\n </button>\n </ModalActions>\n </form>\n </Modal>\n );\n}\n","import { mutationOptions } from '@tanstack/react-query';\nimport type { InferResponseType } from 'hono/client';\nimport { client, jsonOk } from '#frontend/libs/api.ts';\n\nexport type AccountDeletionResponse = InferResponseType<\n (typeof client.api.user)['$delete'],\n 200\n>;\n\nexport const deleteAccountMutationOptions = mutationOptions({\n mutationFn: async () => {\n const res = await client.api.user.$delete();\n return jsonOk(res);\n },\n});\n","import { standardSchemaResolver } from '@hookform/resolvers/standard-schema';\nimport { TrashIcon } from '@phosphor-icons/react';\nimport { useMutation, useQueryClient } from '@tanstack/react-query';\nimport { useRouter } from '@tanstack/react-router';\nimport { useMemo } from 'react';\nimport { useForm } from 'react-hook-form';\nimport { useTranslation } from 'react-i18next';\nimport z from 'zod';\nimport { AlertBanner } from '#frontend/components/ui/alert-banner.tsx';\nimport { Modal, ModalActions } from '#frontend/components/ui/modal.tsx';\nimport { tick } from '#frontend/libs/promise.ts';\nimport { deleteAccountMutationOptions } from '#frontend/queries/account.ts';\nimport { getSessionQueryOptions } from '#frontend/queries/session.ts';\n\ninterface DeleteAccountModalProps {\n isOpen: boolean;\n onClose: () => void;\n retentionDays: number;\n}\n\nexport function DeleteAccountModal({\n isOpen,\n onClose,\n retentionDays,\n}: DeleteAccountModalProps) {\n const { t } = useTranslation();\n const router = useRouter();\n const queryClient = useQueryClient();\n\n const schema = useMemo(\n () =>\n z.object({\n confirmation: z\n .string()\n .refine(\n (val) =>\n val.toLowerCase() ===\n t('profile.deleteAccount.modal.confirmPlaceholder').toLowerCase(),\n { message: t('validation.confirmText.mismatch') },\n ),\n }),\n [t],\n );\n\n const form = useForm({\n resolver: standardSchemaResolver(schema),\n defaultValues: { confirmation: '' },\n });\n\n const mutation = useMutation({\n ...deleteAccountMutationOptions,\n onSuccess: async () => {\n queryClient.setQueryData(getSessionQueryOptions.queryKey, {\n user: null,\n });\n await tick();\n router.navigate({ to: '/login' });\n },\n });\n\n const handleClose = () => {\n if (mutation.isPending) return;\n form.reset();\n onClose();\n };\n\n const handleSubmit = form.handleSubmit(async () => {\n try {\n await mutation.mutateAsync();\n } catch {\n form.setError('root', {\n message: t('profile.deleteAccount.error'),\n });\n }\n });\n\n return (\n <Modal\n icon={TrashIcon}\n isOpen={isOpen}\n onClose={handleClose}\n preventClose={mutation.isPending}\n title={t('profile.deleteAccount.modal.title')}\n variant=\"destructive\"\n >\n <form className=\"mt-4 space-y-3\" onSubmit={handleSubmit}>\n <AlertBanner variant=\"error\">\n <p>\n {t('profile.deleteAccount.modal.description', {\n days: retentionDays,\n })}\n </p>\n <p className=\"mt-0.5 text-xs opacity-80\">\n {t('profile.deleteAccount.modal.warning')}\n </p>\n </AlertBanner>\n\n <div className=\"form-control\">\n <label className=\"label w-full\" htmlFor=\"delete-confirmation\">\n <span className=\"label-text text-xs\">\n {t('profile.deleteAccount.modal.confirmLabel')}\n </span>\n </label>\n <input\n className={`input input-bordered input-sm w-full ${\n form.formState.errors.confirmation ? 'input-error' : ''\n }`}\n id=\"delete-confirmation\"\n placeholder={t('profile.deleteAccount.modal.confirmPlaceholder')}\n type=\"text\"\n {...form.register('confirmation')}\n autoComplete=\"off\"\n />\n {form.formState.errors.confirmation && (\n <span\n className=\"label-text-alt mt-0.5 text-error\"\n data-testid=\"delete-account-error\"\n >\n {form.formState.errors.confirmation.message}\n </span>\n )}\n </div>\n\n {form.formState.errors.root && (\n <AlertBanner variant=\"error\">\n {form.formState.errors.root.message}\n </AlertBanner>\n )}\n\n <ModalActions>\n <button\n className=\"btn btn-sm\"\n data-testid=\"delete-account-cancel\"\n disabled={mutation.isPending}\n onClick={handleClose}\n type=\"button\"\n >\n {t('profile.deleteAccount.modal.cancel')}\n </button>\n <button\n className=\"btn btn-sm btn-error\"\n data-testid=\"delete-account-submit\"\n disabled={mutation.isPending}\n type=\"submit\"\n >\n {mutation.isPending ? (\n <>\n <span className=\"loading loading-spinner loading-xs\" />\n {t('profile.deleteAccount.modal.confirming')}\n </>\n ) : (\n t('profile.deleteAccount.modal.confirm')\n )}\n </button>\n </ModalActions>\n </form>\n </Modal>\n );\n}\n","import { standardSchemaResolver } from '@hookform/resolvers/standard-schema';\nimport { ShieldCheckIcon } from '@phosphor-icons/react';\nimport { useMutation, useQueryClient } from '@tanstack/react-query';\nimport { useMemo } from 'react';\nimport { useForm } from 'react-hook-form';\nimport { useTranslation } from 'react-i18next';\nimport z from 'zod';\nimport { AlertBanner } from '#frontend/components/ui/alert-banner.tsx';\nimport { Modal, ModalActions } from '#frontend/components/ui/modal.tsx';\nimport { TinyAuthError } from '#frontend/libs/error.ts';\nimport { getSessionQueryOptions } from '#frontend/queries/session.ts';\nimport { disableTotpMutationOptions } from '#frontend/queries/totp.ts';\n\ninterface DisableTotpModalProps {\n isOpen: boolean;\n onClose: () => void;\n}\n\nexport function DisableTotpModal({ isOpen, onClose }: DisableTotpModalProps) {\n const { t } = useTranslation();\n const queryClient = useQueryClient();\n\n const schema = useMemo(\n () =>\n z.object({\n code: z\n .string()\n .length(6, t('validation.totp.length'))\n .regex(/^\\d{6}$/, t('validation.totp.digits')),\n }),\n [t],\n );\n\n const form = useForm({\n resolver: standardSchemaResolver(schema),\n defaultValues: { code: '' },\n });\n\n const mutation = useMutation({\n ...disableTotpMutationOptions,\n onSuccess: () => {\n queryClient.invalidateQueries({\n queryKey: getSessionQueryOptions.queryKey,\n });\n handleClose();\n },\n });\n\n const handleClose = () => {\n form.reset();\n onClose();\n };\n\n const handleSubmit = form.handleSubmit(async (data) => {\n try {\n await mutation.mutateAsync({ code: data.code });\n } catch (error) {\n if (error instanceof TinyAuthError) {\n if (error.code === 'CANNOT_REMOVE_LAST_SECOND_FACTOR') {\n form.setError('code', {\n message: t(\n 'profile.totp.disableModal.cannotRemoveLastSecondFactor',\n ),\n });\n return;\n }\n }\n form.setError('code', {\n message: t('profile.totp.disableModal.error'),\n });\n }\n });\n\n return (\n <Modal\n description={t('profile.totp.disableModal.description')}\n icon={ShieldCheckIcon}\n isOpen={isOpen}\n onClose={handleClose}\n title={t('profile.totp.disableModal.title')}\n variant=\"destructive\"\n >\n <form className=\"mt-4 space-y-3\" onSubmit={handleSubmit}>\n <AlertBanner variant=\"warning\">\n {t('profile.totp.disableModal.warning')}\n </AlertBanner>\n\n <div className=\"form-control\">\n <label className=\"label w-full\" htmlFor=\"disable-totp-code\">\n <span className=\"label-text text-xs\">\n {t('profile.totp.disableModal.codeLabel')}\n </span>\n </label>\n <input\n autoComplete=\"one-time-code\"\n className={`input input-bordered input-sm w-full text-center text-xl tracking-widest ${\n form.formState.errors.code ? 'input-error' : ''\n }`}\n id=\"disable-totp-code\"\n inputMode=\"numeric\"\n maxLength={6}\n pattern=\"[0-9]*\"\n placeholder=\"000000\"\n type=\"text\"\n {...form.register('code')}\n />\n {form.formState.errors.code && (\n <span\n className=\"label-text-alt mt-0.5 text-error\"\n data-testid=\"disable-totp-error\"\n >\n {form.formState.errors.code.message}\n </span>\n )}\n </div>\n\n <ModalActions>\n <button\n className=\"btn btn-sm\"\n data-testid=\"disable-totp-cancel\"\n disabled={mutation.isPending}\n onClick={handleClose}\n type=\"button\"\n >\n {t('profile.totp.disableModal.cancel')}\n </button>\n <button\n className=\"btn btn-sm btn-error\"\n data-testid=\"disable-totp-submit\"\n disabled={mutation.isPending}\n type=\"submit\"\n >\n {mutation.isPending ? (\n <>\n <span className=\"loading loading-spinner loading-xs\" />\n {t('profile.totp.disableModal.disabling')}\n </>\n ) : (\n t('profile.totp.disableModal.disable')\n )}\n </button>\n </ModalActions>\n </form>\n </Modal>\n );\n}\n","import { standardSchemaResolver } from '@hookform/resolvers/standard-schema';\nimport {\n CloudIcon,\n DeviceMobileIcon,\n FingerprintIcon,\n PencilSimpleIcon,\n TrashIcon,\n} from '@phosphor-icons/react';\nimport { useMutation, useQuery, useQueryClient } from '@tanstack/react-query';\nimport { useCallback, useMemo, useState } from 'react';\nimport { useForm } from 'react-hook-form';\nimport { useTranslation } from 'react-i18next';\nimport z from 'zod';\nimport { AlertBanner } from '#frontend/components/ui/alert-banner.tsx';\nimport { Modal, ModalActions } from '#frontend/components/ui/modal.tsx';\nimport { TinyAuthError } from '#frontend/libs/error.ts';\nimport { queryKeys } from '#frontend/queries/keys.ts';\nimport {\n deletePasskeyMutationOptions,\n getPasskeysQueryOptions,\n type PasskeyInfo,\n renamePasskeyMutationOptions,\n} from '#frontend/queries/passkey.ts';\nimport { getSessionQueryOptions } from '#frontend/queries/session.ts';\n\ninterface ManagePasskeysModalProps {\n isOpen: boolean;\n onClose: () => void;\n onAddNew: () => void;\n}\n\nexport function ManagePasskeysModal({\n isOpen,\n onClose,\n onAddNew,\n}: ManagePasskeysModalProps) {\n const { t } = useTranslation();\n const queryClient = useQueryClient();\n const [editingPasskey, setEditingPasskey] = useState<PasskeyInfo | null>(\n null,\n );\n const [deletingId, setDeletingId] = useState<string | null>(null);\n const [confirmingDeleteId, setConfirmingDeleteId] = useState<string | null>(\n null,\n );\n const [deleteError, setDeleteError] = useState<string | null>(null);\n\n const { data: passkeysData, isLoading } = useQuery({\n ...getPasskeysQueryOptions,\n enabled: isOpen,\n });\n\n const deleteMutation = useMutation({\n ...deletePasskeyMutationOptions,\n onSuccess: () => {\n queryClient.invalidateQueries({ queryKey: queryKeys.passkeys() });\n queryClient.invalidateQueries({\n queryKey: getSessionQueryOptions.queryKey,\n });\n },\n onSettled: () => {\n setDeletingId(null);\n },\n });\n\n const handleClose = useCallback(() => {\n setEditingPasskey(null);\n setDeletingId(null);\n setConfirmingDeleteId(null);\n setDeleteError(null);\n onClose();\n }, [onClose]);\n\n const handleRequestDelete = (passkey: PasskeyInfo) => {\n setConfirmingDeleteId(passkey.id);\n setDeleteError(null);\n };\n\n const handleCancelDelete = () => {\n setConfirmingDeleteId(null);\n setDeleteError(null);\n };\n\n const handleConfirmDelete = async (passkey: PasskeyInfo) => {\n setDeletingId(passkey.id);\n setConfirmingDeleteId(null);\n try {\n await deleteMutation.mutateAsync({ id: passkey.id });\n } catch (error) {\n if (error instanceof TinyAuthError) {\n if (error.code === 'CANNOT_REMOVE_LAST_SECOND_FACTOR') {\n setDeleteError(\n t('profile.passkey.manageModal.cannotRemoveLastSecondFactor'),\n );\n return;\n }\n }\n setDeleteError(t('profile.passkey.manageModal.deleteError'));\n }\n };\n\n const formatDate = (dateString: string) => {\n return new Date(dateString).toLocaleDateString(undefined, {\n year: 'numeric',\n month: 'short',\n day: 'numeric',\n });\n };\n\n const passkeys = passkeysData?.passkeys || [];\n\n return (\n <Modal\n icon={FingerprintIcon}\n isOpen={isOpen}\n onClose={handleClose}\n size=\"lg\"\n title={t('profile.passkey.manageModal.title')}\n >\n <div className=\"mt-4 space-y-2\">\n {deleteError && (\n <AlertBanner variant=\"error\">{deleteError}</AlertBanner>\n )}\n\n {isLoading && (\n <div className=\"flex justify-center py-6\">\n <span className=\"loading loading-spinner loading-md\" />\n </div>\n )}\n\n {!isLoading && passkeys.length === 0 && (\n <div\n className=\"py-6 text-center text-base-content/60 text-sm\"\n data-testid=\"passkeys-empty\"\n >\n <p>{t('profile.passkey.manageModal.noPasskeys')}</p>\n </div>\n )}\n\n {!isLoading && passkeys.length > 0 && (\n <div className=\"flex flex-col gap-2\">\n {passkeys.map((passkey) => (\n <PasskeyItem\n formatDate={formatDate}\n isConfirmingDelete={confirmingDeleteId === passkey.id}\n isDeleting={deletingId === passkey.id}\n isEditing={editingPasskey?.id === passkey.id}\n key={passkey.id}\n onCancelDelete={handleCancelDelete}\n onCancelEdit={() => setEditingPasskey(null)}\n onConfirmDelete={() => handleConfirmDelete(passkey)}\n onEdit={() => setEditingPasskey(passkey)}\n onRequestDelete={() => handleRequestDelete(passkey)}\n passkey={passkey}\n />\n ))}\n </div>\n )}\n </div>\n\n <ModalActions>\n <button\n className=\"btn btn-sm\"\n data-testid=\"manage-passkeys-close\"\n onClick={handleClose}\n type=\"button\"\n >\n {t('profile.passkey.manageModal.close')}\n </button>\n <button\n className=\"btn btn-sm btn-primary\"\n data-testid=\"manage-passkeys-add-new\"\n onClick={() => {\n handleClose();\n onAddNew();\n }}\n type=\"button\"\n >\n {t('profile.passkey.manageModal.addNew')}\n </button>\n </ModalActions>\n </Modal>\n );\n}\n\ninterface PasskeyItemProps {\n passkey: PasskeyInfo;\n isDeleting: boolean;\n isEditing: boolean;\n isConfirmingDelete: boolean;\n onEdit: () => void;\n onCancelEdit: () => void;\n onRequestDelete: () => void;\n onConfirmDelete: () => void;\n onCancelDelete: () => void;\n formatDate: (dateString: string) => string;\n}\n\nfunction PasskeyItem({\n passkey,\n isDeleting,\n isEditing,\n isConfirmingDelete,\n onEdit,\n onCancelEdit,\n onRequestDelete,\n onConfirmDelete,\n onCancelDelete,\n formatDate,\n}: PasskeyItemProps) {\n const { t } = useTranslation();\n const queryClient = useQueryClient();\n\n const schema = useMemo(\n () =>\n z.object({\n name: z\n .string()\n .min(1, t('validation.passkey.name.required'))\n .max(100, t('validation.passkey.name.max')),\n }),\n [t],\n );\n\n const form = useForm({\n resolver: standardSchemaResolver(schema),\n defaultValues: { name: passkey.name || '' },\n });\n\n const renameMutation = useMutation({\n ...renamePasskeyMutationOptions,\n onSuccess: () => {\n queryClient.invalidateQueries({ queryKey: queryKeys.passkeys() });\n onCancelEdit();\n },\n });\n\n const handleRename = form.handleSubmit(async (data) => {\n try {\n await renameMutation.mutateAsync({ id: passkey.id, name: data.name });\n } catch {\n form.setError('name', {\n message: t('profile.passkey.manageModal.renameError'),\n });\n }\n });\n\n if (isEditing) {\n return (\n <form\n className=\"flex flex-col gap-1.5 rounded-lg bg-base-200 p-2\"\n onSubmit={handleRename}\n >\n <input\n className={`input input-bordered input-sm w-full ${\n form.formState.errors.name ? 'input-error' : ''\n }`}\n data-testid=\"passkey-rename-input\"\n placeholder={t('profile.passkey.manageModal.namePlaceholder')}\n type=\"text\"\n {...form.register('name')}\n />\n {form.formState.errors.name && (\n <span\n className=\"text-error text-xs\"\n data-testid=\"passkey-rename-error\"\n >\n {form.formState.errors.name.message}\n </span>\n )}\n <div className=\"flex justify-end gap-1\">\n <button\n className=\"btn btn-ghost btn-xs\"\n disabled={renameMutation.isPending}\n onClick={() => {\n form.reset();\n onCancelEdit();\n }}\n type=\"button\"\n >\n {t('profile.passkey.manageModal.cancelEdit')}\n </button>\n <button\n className=\"btn btn-primary btn-xs\"\n disabled={renameMutation.isPending}\n type=\"submit\"\n >\n {renameMutation.isPending\n ? t('profile.passkey.manageModal.saving')\n : t('profile.passkey.manageModal.save')}\n </button>\n </div>\n </form>\n );\n }\n\n if (isConfirmingDelete) {\n return (\n <div className=\"flex items-center justify-between rounded-lg bg-error/10 p-2\">\n <div className=\"flex items-center gap-2\">\n <TrashIcon className=\"size-4 text-error\" weight=\"regular\" />\n <span className=\"text-error text-xs\">\n {t('profile.passkey.manageModal.deleteConfirmInline')}\n </span>\n </div>\n <div className=\"flex gap-1\">\n <button\n className=\"btn btn-ghost btn-xs\"\n onClick={onCancelDelete}\n type=\"button\"\n >\n {t('profile.passkey.manageModal.cancelEdit')}\n </button>\n <button\n className=\"btn btn-error btn-xs\"\n onClick={onConfirmDelete}\n type=\"button\"\n >\n {t('profile.passkey.manageModal.delete')}\n </button>\n </div>\n </div>\n );\n }\n\n return (\n <div\n className=\"flex items-center justify-between rounded-lg bg-base-200 p-2\"\n data-testid=\"passkey-item\"\n >\n <div className=\"flex items-center gap-2\">\n {passkey.device_type === 'multiDevice' ? (\n <CloudIcon className=\"size-4 text-primary\" weight=\"regular\" />\n ) : (\n <DeviceMobileIcon className=\"size-4 text-primary\" weight=\"regular\" />\n )}\n <div>\n <div className=\"font-medium text-xs\">\n {passkey.name || t('profile.passkey.manageModal.unnamedPasskey')}\n </div>\n <div className=\"flex items-center gap-1.5 text-base-content/60 text-xs\">\n <span>\n {t('profile.passkey.manageModal.createdAt', {\n date: formatDate(passkey.created_at),\n })}\n </span>\n {passkey.backed_up && (\n <span className=\"badge badge-success badge-xs\">\n {t('profile.passkey.manageModal.backedUp')}\n </span>\n )}\n </div>\n </div>\n </div>\n <div className=\"flex gap-1\">\n <button\n aria-label={t('profile.passkey.manageModal.rename')}\n className=\"btn btn-ghost btn-xs\"\n onClick={onEdit}\n type=\"button\"\n >\n <PencilSimpleIcon className=\"size-3.5\" weight=\"regular\" />\n </button>\n <button\n aria-label={t('profile.passkey.manageModal.delete')}\n className=\"btn btn-ghost btn-xs text-error\"\n disabled={isDeleting}\n onClick={onRequestDelete}\n type=\"button\"\n >\n {isDeleting ? (\n <span className=\"loading loading-spinner loading-xs\" />\n ) : (\n <TrashIcon className=\"size-3.5\" weight=\"regular\" />\n )}\n </button>\n </div>\n </div>\n );\n}\n","import { ShieldCheckIcon } from '@phosphor-icons/react';\nimport {\n useMutation,\n useQueryClient,\n useSuspenseQuery,\n} from '@tanstack/react-query';\nimport { useRouter } from '@tanstack/react-router';\nimport { useCallback, useState } from 'react';\nimport { useTranslation } from 'react-i18next';\nimport { RecoveryCodesStep } from '#frontend/components/totp/recovery-codes-step.tsx';\nimport { VerifyStep } from '#frontend/components/totp/verify-step.tsx';\nimport { AlertBanner } from '#frontend/components/ui/alert-banner.tsx';\nimport { Modal } from '#frontend/components/ui/modal.tsx';\nimport { TinyAuthError } from '#frontend/libs/error.ts';\nimport { tick } from '#frontend/libs/promise.ts';\nimport { appConfigQueryOptions } from '#frontend/queries/config.ts';\nimport { getSessionQueryOptions } from '#frontend/queries/session.ts';\nimport {\n type RegenerateTotpRecoveryCodesResponse,\n regenerateTotpRecoveryCodesMutationOptions,\n} from '#frontend/queries/totp.ts';\n\ninterface RegenerateTotpRecoveryCodesModalProps {\n isOpen: boolean;\n onClose: () => void;\n}\n\ntype RegenerateStep = 'verify' | 'recovery';\n\nexport function RegenerateTotpRecoveryCodesModal({\n isOpen,\n onClose,\n}: RegenerateTotpRecoveryCodesModalProps) {\n const { t } = useTranslation();\n const router = useRouter();\n const queryClient = useQueryClient();\n const { data: appConfig } = useSuspenseQuery(appConfigQueryOptions);\n const [step, setStep] = useState<RegenerateStep>('verify');\n const [response, setResponse] =\n useState<RegenerateTotpRecoveryCodesResponse | null>(null);\n const [errorMessage, setErrorMessage] = useState<string | null>(null);\n\n const mutation = useMutation({\n ...regenerateTotpRecoveryCodesMutationOptions,\n onSuccess: async (data) => {\n setResponse(data);\n setStep('recovery');\n await queryClient.invalidateQueries({\n queryKey: getSessionQueryOptions.queryKey,\n });\n },\n });\n\n const reset = useCallback(() => {\n setStep('verify');\n setResponse(null);\n setErrorMessage(null);\n mutation.reset();\n }, [mutation]);\n\n const handleClose = useCallback(() => {\n reset();\n onClose();\n }, [onClose, reset]);\n\n const handleVerify = useCallback(\n async (code: string) => {\n setErrorMessage(null);\n\n try {\n await mutation.mutateAsync({ code });\n } catch (error) {\n if (error instanceof TinyAuthError) {\n if (error.code === 'INVALID_TOTP_CODE') {\n throw error;\n }\n\n if (error.code === 'UNAUTHORIZED') {\n queryClient.setQueryData(getSessionQueryOptions.queryKey, {\n user: null,\n });\n await tick();\n router.navigate({ to: '/login' });\n return;\n }\n\n if (\n error.code === 'TOTP_NOT_ENABLED' ||\n error.code === 'VALIDATION_ERROR'\n ) {\n await queryClient.invalidateQueries({\n queryKey: getSessionQueryOptions.queryKey,\n });\n handleClose();\n return;\n }\n }\n\n setErrorMessage(t('profile.totp.regenerateModal.unexpectedError'));\n }\n },\n [handleClose, mutation, queryClient, router, t],\n );\n\n if (!appConfig.auth.password.totp.enabled) {\n return null;\n }\n\n return (\n <Modal\n description={\n step === 'verify'\n ? t('profile.totp.regenerateModal.description')\n : t('profile.totp.regenerateModal.recoveryDescription')\n }\n icon={ShieldCheckIcon}\n isOpen={isOpen}\n onClose={handleClose}\n preventClose={step === 'recovery'}\n size=\"sm\"\n title={\n step === 'verify'\n ? t('profile.totp.regenerateModal.title')\n : t('profile.totp.regenerateModal.recoveryTitle')\n }\n >\n {step === 'verify' ? (\n <div className=\"mt-4\">\n {errorMessage && (\n <div className=\"mb-3\">\n <AlertBanner variant=\"error\">{errorMessage}</AlertBanner>\n </div>\n )}\n <VerifyStep\n invalidMessage={t('profile.totp.regenerateModal.error')}\n isPending={mutation.isPending}\n onSubmit={handleVerify}\n pendingText={t('profile.totp.regenerateModal.submitting')}\n submitLabel={t('profile.totp.regenerateModal.submit')}\n />\n </div>\n ) : (\n <div className=\"mt-4\">\n <RecoveryCodesStep\n onConfirm={handleClose}\n recoveryCodes={response?.recovery_codes ?? []}\n />\n </div>\n )}\n </Modal>\n );\n}\n","import { standardSchemaResolver } from '@hookform/resolvers/standard-schema';\nimport { KeyIcon } from '@phosphor-icons/react';\nimport { useMutation, useQueryClient } from '@tanstack/react-query';\nimport { useMemo } from 'react';\nimport { useForm } from 'react-hook-form';\nimport { useTranslation } from 'react-i18next';\nimport z from 'zod';\nimport { AlertBanner } from '#frontend/components/ui/alert-banner.tsx';\nimport { Modal, ModalActions } from '#frontend/components/ui/modal.tsx';\nimport { TinyAuthError } from '#frontend/libs/error.ts';\nimport { removePasswordMutationOptions } from '#frontend/queries/password.ts';\nimport { getSessionQueryOptions } from '#frontend/queries/session.ts';\n\ninterface RemovePasswordModalProps {\n isOpen: boolean;\n onClose: () => void;\n}\n\nexport function RemovePasswordModal({\n isOpen,\n onClose,\n}: RemovePasswordModalProps) {\n const { t } = useTranslation();\n const queryClient = useQueryClient();\n\n const schema = useMemo(\n () =>\n z.object({\n currentPassword: z.string().min(1, t('validation.password.required')),\n }),\n [t],\n );\n\n const form = useForm({\n resolver: standardSchemaResolver(schema),\n defaultValues: { currentPassword: '' },\n });\n\n const mutation = useMutation({\n ...removePasswordMutationOptions,\n onSuccess: () => {\n queryClient.invalidateQueries({\n queryKey: getSessionQueryOptions.queryKey,\n });\n handleClose();\n },\n });\n\n const handleClose = () => {\n form.reset();\n onClose();\n };\n\n const handleSubmit = form.handleSubmit(async (data) => {\n try {\n await mutation.mutateAsync({\n current_password: data.currentPassword,\n });\n } catch (err) {\n if (err instanceof TinyAuthError) {\n if (err.code === 'INVALID_CURRENT_PASSWORD') {\n form.setError('currentPassword', {\n message: t('profile.password.removeModal.invalidCurrent'),\n });\n return;\n }\n if (err.code === 'CANNOT_REMOVE_LAST_AUTH_METHOD') {\n form.setError('root', {\n message: t('profile.password.removeModal.noOAuth'),\n });\n return;\n }\n if (err.code === 'CANNOT_REMOVE_PASSWORD_WITH_SECOND_FACTOR_ONLY') {\n form.setError('root', {\n message: t('profile.password.removeModal.noOAuthWith2FA'),\n });\n return;\n }\n }\n form.setError('root', {\n message: t('profile.password.removeModal.error'),\n });\n }\n });\n\n return (\n <Modal\n description={t('profile.password.removeModal.description')}\n icon={KeyIcon}\n isOpen={isOpen}\n onClose={handleClose}\n title={t('profile.password.removeModal.title')}\n variant=\"destructive\"\n >\n <form className=\"mt-4 space-y-3\" onSubmit={handleSubmit}>\n <div className=\"form-control\">\n <label className=\"label w-full\" htmlFor=\"current-password-remove\">\n <span className=\"label-text text-xs\">\n {t('profile.password.removeModal.currentPassword')}\n </span>\n </label>\n <input\n className={`input input-bordered input-sm w-full ${\n form.formState.errors.currentPassword ? 'input-error' : ''\n }`}\n id=\"current-password-remove\"\n placeholder={t(\n 'profile.password.removeModal.currentPasswordPlaceholder',\n )}\n type=\"password\"\n {...form.register('currentPassword')}\n />\n {form.formState.errors.currentPassword && (\n <span\n className=\"label-text-alt mt-0.5 text-error\"\n data-testid=\"remove-password-error\"\n >\n {form.formState.errors.currentPassword.message}\n </span>\n )}\n </div>\n {form.formState.errors.root && (\n <AlertBanner variant=\"error\">\n {form.formState.errors.root.message}\n </AlertBanner>\n )}\n <ModalActions>\n <button\n className=\"btn btn-sm\"\n data-testid=\"remove-password-cancel\"\n disabled={mutation.isPending}\n onClick={handleClose}\n type=\"button\"\n >\n {t('profile.password.removeModal.cancel')}\n </button>\n <button\n className=\"btn btn-sm btn-error\"\n data-testid=\"remove-password-submit\"\n disabled={mutation.isPending}\n type=\"submit\"\n >\n {mutation.isPending ? (\n <>\n <span className=\"loading loading-spinner loading-xs\" />\n {t('profile.password.removeModal.submitting')}\n </>\n ) : (\n t('profile.password.removeModal.submit')\n )}\n </button>\n </ModalActions>\n </form>\n </Modal>\n );\n}\n","import { standardSchemaResolver } from '@hookform/resolvers/standard-schema';\nimport { KeyIcon } from '@phosphor-icons/react';\nimport {\n useMutation,\n useQueryClient,\n useSuspenseQuery,\n} from '@tanstack/react-query';\nimport { useMemo } from 'react';\nimport { useForm } from 'react-hook-form';\nimport { useTranslation } from 'react-i18next';\nimport z from 'zod';\nimport { AlertBanner } from '#frontend/components/ui/alert-banner.tsx';\nimport { Modal, ModalActions } from '#frontend/components/ui/modal.tsx';\nimport { appConfigQueryOptions } from '#frontend/queries/config.ts';\nimport { setPasswordMutationOptions } from '#frontend/queries/password.ts';\nimport { getSessionQueryOptions } from '#frontend/queries/session.ts';\n\ninterface SetPasswordModalProps {\n isOpen: boolean;\n onClose: () => void;\n}\n\nexport function SetPasswordModal({ isOpen, onClose }: SetPasswordModalProps) {\n const { t } = useTranslation();\n const queryClient = useQueryClient();\n const { data: configData } = useSuspenseQuery(appConfigQueryOptions);\n const passwordPolicy = configData.auth.password.policy;\n\n const schema = useMemo(\n () =>\n z\n .object({\n password: z\n .string()\n .min(\n passwordPolicy.min_length,\n t('validation.password.min', {\n count: passwordPolicy.min_length,\n }),\n )\n .max(\n passwordPolicy.max_length,\n t('validation.password.max', {\n count: passwordPolicy.max_length,\n }),\n ),\n confirmPassword: z.string(),\n })\n .refine((data) => data.password === data.confirmPassword, {\n message: t('validation.confirmPassword.mismatch'),\n path: ['confirmPassword'],\n }),\n [passwordPolicy.max_length, passwordPolicy.min_length, t],\n );\n\n const form = useForm({\n resolver: standardSchemaResolver(schema),\n defaultValues: { password: '', confirmPassword: '' },\n });\n\n const mutation = useMutation({\n ...setPasswordMutationOptions,\n onSuccess: () => {\n queryClient.invalidateQueries({\n queryKey: getSessionQueryOptions.queryKey,\n });\n handleClose();\n },\n });\n\n const handleClose = () => {\n form.reset();\n onClose();\n };\n\n const handleSubmit = form.handleSubmit(async (data) => {\n try {\n await mutation.mutateAsync({ password: data.password });\n } catch (error) {\n void error;\n form.setError('root', {\n message: t('profile.password.setModal.error'),\n });\n }\n });\n\n return (\n <Modal\n description={t('profile.password.setModal.description')}\n icon={KeyIcon}\n isOpen={isOpen}\n onClose={handleClose}\n title={t('profile.password.setModal.title')}\n >\n <form className=\"mt-4 space-y-3\" onSubmit={handleSubmit}>\n <div className=\"form-control\">\n <label className=\"label w-full\" htmlFor=\"new-password\">\n <span className=\"label-text text-xs\">\n {t('profile.password.setModal.newPassword')}\n </span>\n </label>\n <input\n className={`input input-bordered input-sm w-full ${\n form.formState.errors.password ? 'input-error' : ''\n }`}\n id=\"new-password\"\n placeholder={t('profile.password.setModal.newPasswordPlaceholder')}\n type=\"password\"\n {...form.register('password')}\n />\n {form.formState.errors.password && (\n <span\n className=\"label-text-alt mt-0.5 text-error\"\n data-testid=\"set-password-error-password\"\n >\n {form.formState.errors.password.message}\n </span>\n )}\n </div>\n <div className=\"form-control\">\n <label className=\"label w-full\" htmlFor=\"confirm-password\">\n <span className=\"label-text text-xs\">\n {t('profile.password.setModal.confirmPassword')}\n </span>\n </label>\n <input\n className={`input input-bordered input-sm w-full ${\n form.formState.errors.confirmPassword ? 'input-error' : ''\n }`}\n id=\"confirm-password\"\n placeholder={t(\n 'profile.password.setModal.confirmPasswordPlaceholder',\n )}\n type=\"password\"\n {...form.register('confirmPassword')}\n />\n {form.formState.errors.confirmPassword && (\n <span\n className=\"label-text-alt mt-0.5 text-error\"\n data-testid=\"set-password-error-confirmPassword\"\n >\n {form.formState.errors.confirmPassword.message}\n </span>\n )}\n </div>\n {form.formState.errors.root && (\n <AlertBanner variant=\"error\">\n {form.formState.errors.root.message}\n </AlertBanner>\n )}\n <ModalActions>\n <button\n className=\"btn btn-sm\"\n data-testid=\"set-password-cancel\"\n disabled={mutation.isPending}\n onClick={handleClose}\n type=\"button\"\n >\n {t('profile.password.setModal.cancel')}\n </button>\n <button\n className=\"btn btn-sm btn-primary\"\n data-testid=\"set-password-submit\"\n disabled={mutation.isPending}\n type=\"submit\"\n >\n {mutation.isPending ? (\n <>\n <span className=\"loading loading-spinner loading-xs\" />\n {t('profile.password.setModal.submitting')}\n </>\n ) : (\n t('profile.password.setModal.submit')\n )}\n </button>\n </ModalActions>\n </form>\n </Modal>\n );\n}\n","import { standardSchemaResolver } from '@hookform/resolvers/standard-schema';\nimport { FingerprintIcon } from '@phosphor-icons/react';\nimport { useMutation, useQueryClient } from '@tanstack/react-query';\nimport { useCallback, useMemo, useState } from 'react';\nimport { useForm } from 'react-hook-form';\nimport { useTranslation } from 'react-i18next';\nimport z from 'zod';\nimport { AlertBanner } from '#frontend/components/ui/alert-banner.tsx';\nimport { Modal, ModalActions } from '#frontend/components/ui/modal.tsx';\nimport { queryKeys } from '#frontend/queries/keys.ts';\nimport { registerPasskeyMutationOptions } from '#frontend/queries/passkey.ts';\nimport { getSessionQueryOptions } from '#frontend/queries/session.ts';\n\ninterface SetupPasskeyModalProps {\n isOpen: boolean;\n onClose: () => void;\n isRequired?: boolean;\n canSwitchToTotp?: boolean;\n onSwitchToTotp?: () => void;\n}\n\ntype SetupStep = 'name' | 'register';\n\nexport function SetupPasskeyModal({\n isOpen,\n onClose,\n isRequired = false,\n canSwitchToTotp = false,\n onSwitchToTotp,\n}: SetupPasskeyModalProps) {\n const { t } = useTranslation();\n const queryClient = useQueryClient();\n const [step, setStep] = useState<SetupStep>('name');\n const [errorMessage, setErrorMessage] = useState<string | null>(null);\n\n const schema = useMemo(\n () =>\n z.object({\n name: z\n .string()\n .max(100, t('validation.passkey.name.max'))\n .optional()\n .transform((val) => val?.trim() || undefined),\n }),\n [t],\n );\n\n const form = useForm({\n resolver: standardSchemaResolver(schema),\n defaultValues: { name: '' },\n });\n\n const registerMutation = useMutation({\n ...registerPasskeyMutationOptions,\n onSuccess: () => {\n queryClient.invalidateQueries({ queryKey: queryKeys.passkeys() });\n queryClient.invalidateQueries({\n queryKey: getSessionQueryOptions.queryKey,\n });\n handleClose();\n },\n onError: (error) => {\n setStep('name');\n if (error.name === 'NotAllowedError') {\n setErrorMessage(t('profile.passkey.setupModal.cancelled'));\n } else {\n setErrorMessage(t('profile.passkey.setupModal.error'));\n }\n },\n });\n\n const handleClose = useCallback(() => {\n form.reset();\n setStep('name');\n setErrorMessage(null);\n onClose();\n }, [form, onClose]);\n\n const handleRegister = form.handleSubmit(async (data) => {\n setStep('register');\n setErrorMessage(null);\n try {\n await registerMutation.mutateAsync({ name: data.name });\n } catch {\n // Error handling is done via mutation callbacks\n }\n });\n\n const isPending = registerMutation.isPending;\n\n return (\n <Modal\n description={\n isRequired\n ? t('profile.passkey.setupModal.requiredDescription')\n : undefined\n }\n icon={FingerprintIcon}\n isOpen={isOpen}\n onClose={handleClose}\n preventClose={isRequired}\n size=\"sm\"\n title={t('profile.passkey.setupModal.title')}\n >\n {step === 'name' && (\n <form className=\"mt-4 space-y-3\" onSubmit={handleRegister}>\n <p className=\"text-base-content/60 text-xs\">\n {t('profile.passkey.setupModal.description')}\n </p>\n\n {errorMessage && (\n <AlertBanner variant=\"error\">{errorMessage}</AlertBanner>\n )}\n\n <div className=\"form-control\">\n <label className=\"label w-full\" htmlFor=\"passkey-name\">\n <span className=\"label-text text-xs\">\n {t('profile.passkey.setupModal.nameLabel')}\n </span>\n </label>\n <input\n className={`input input-bordered input-sm w-full ${\n form.formState.errors.name ? 'input-error' : ''\n }`}\n id=\"passkey-name\"\n placeholder={t('profile.passkey.setupModal.namePlaceholder')}\n type=\"text\"\n {...form.register('name')}\n />\n {form.formState.errors.name && (\n <span\n className=\"label-text-alt mt-0.5 text-error\"\n data-testid=\"setup-passkey-error\"\n >\n {form.formState.errors.name.message}\n </span>\n )}\n <span className=\"label-text-alt mt-0.5 text-base-content/50\">\n {t('profile.passkey.setupModal.nameHint')}\n </span>\n </div>\n\n <ModalActions>\n <button\n className=\"btn btn-sm\"\n data-testid=\"setup-passkey-cancel\"\n onClick={handleClose}\n type=\"button\"\n >\n {t('profile.passkey.setupModal.cancel')}\n </button>\n <button\n className=\"btn btn-sm btn-primary\"\n data-testid=\"setup-passkey-continue\"\n type=\"submit\"\n >\n {t('profile.passkey.setupModal.continue')}\n </button>\n </ModalActions>\n {canSwitchToTotp && onSwitchToTotp && (\n <p className=\"mt-2 text-center text-xs\">\n <button\n className=\"link link-primary\"\n onClick={onSwitchToTotp}\n type=\"button\"\n >\n {t('profile.passkey.setupModal.switchToTotp')}\n </button>\n </p>\n )}\n </form>\n )}\n\n {step === 'register' && (\n <div className=\"mt-4\">\n <div\n className=\"flex flex-col items-center gap-3 py-6\"\n data-testid=\"setup-passkey-loading\"\n >\n <span className=\"loading loading-spinner loading-md\" />\n <p className=\"text-center text-base-content/60 text-xs\">\n {t('profile.passkey.setupModal.waitingForDevice')}\n </p>\n </div>\n\n <ModalActions>\n <button\n className=\"btn btn-sm\"\n data-testid=\"setup-passkey-cancel\"\n disabled={isPending}\n onClick={handleClose}\n type=\"button\"\n >\n {t('profile.passkey.setupModal.cancel')}\n </button>\n </ModalActions>\n </div>\n )}\n </Modal>\n );\n}\n","import { ShieldCheckIcon } from '@phosphor-icons/react';\nimport { useCallback } from 'react';\nimport { useTranslation } from 'react-i18next';\nimport { QrStep } from '#frontend/components/totp/qr-step.tsx';\nimport { RecoveryCodesStep } from '#frontend/components/totp/recovery-codes-step.tsx';\nimport { VerifyStep } from '#frontend/components/totp/verify-step.tsx';\nimport { AlertBanner } from '#frontend/components/ui/alert-banner.tsx';\nimport { Modal, ModalActions } from '#frontend/components/ui/modal.tsx';\nimport { useTotpSetup } from '#frontend/features/totp/use-totp-setup.ts';\n\ninterface SetupTotpModalProps {\n isOpen: boolean;\n onClose: () => void;\n isRequired?: boolean;\n canSwitchToPasskey?: boolean;\n onSwitchToPasskey?: () => void;\n}\n\nexport function SetupTotpModal({\n isOpen,\n onClose,\n isRequired = false,\n canSwitchToPasskey = false,\n onSwitchToPasskey,\n}: SetupTotpModalProps) {\n const { t } = useTranslation();\n\n const {\n step,\n setupData,\n recoveryCodes,\n isSetupPending,\n isVerifyPending,\n isConfirmPending,\n startSetup,\n verify,\n goToVerify,\n goToQr,\n confirmRecoveryCodes,\n reset,\n } = useTotpSetup({\n autoStart: false,\n onConfirmSuccess: () => {\n reset();\n onClose();\n },\n });\n\n const handleClose = useCallback(() => {\n reset();\n onClose();\n }, [onClose, reset]);\n\n // Start setup when modal opens\n const handleModalOpen = useCallback(() => {\n if (!setupData && !isSetupPending) {\n startSetup();\n }\n }, [setupData, isSetupPending, startSetup]);\n\n // Trigger setup on first render when open\n if (isOpen && !setupData && !isSetupPending && step !== 'error') {\n handleModalOpen();\n }\n\n const handleVerify = useCallback(\n async (code: string) => {\n await verify(code);\n },\n [verify],\n );\n\n const modalTitle =\n step === 'recovery'\n ? t('setupTotp.recoveryCodes.title')\n : t('profile.totp.setupModal.title');\n\n return (\n <Modal\n description={\n isRequired\n ? t('profile.totp.setupModal.requiredDescription')\n : undefined\n }\n icon={ShieldCheckIcon}\n isOpen={isOpen}\n onClose={handleClose}\n preventClose={isRequired || step === 'recovery'}\n size=\"sm\"\n title={modalTitle}\n >\n {isSetupPending && (\n <div\n className=\"flex justify-center py-6\"\n data-testid=\"setup-totp-loading\"\n >\n <span className=\"loading loading-spinner loading-md\" />\n </div>\n )}\n\n {step === 'error' && (\n <div className=\"mt-4 space-y-3\">\n <AlertBanner variant=\"error\">\n {t('profile.totp.setupModal.setupError')}\n </AlertBanner>\n <ModalActions>\n <button className=\"btn btn-sm\" onClick={handleClose} type=\"button\">\n {t('profile.totp.setupModal.cancel')}\n </button>\n <button\n className=\"btn btn-sm btn-primary\"\n onClick={startSetup}\n type=\"button\"\n >\n {t('profile.totp.setupModal.retry')}\n </button>\n </ModalActions>\n </div>\n )}\n\n {setupData && step === 'qr' && (\n <div className=\"mt-4\">\n <QrStep\n additionalActions={\n <>\n <ModalActions>\n <button\n className=\"btn btn-sm\"\n onClick={handleClose}\n type=\"button\"\n >\n {t('profile.totp.setupModal.cancel')}\n </button>\n </ModalActions>\n {canSwitchToPasskey && onSwitchToPasskey && (\n <p className=\"mt-2 text-center text-xs\">\n <button\n className=\"link link-primary\"\n onClick={onSwitchToPasskey}\n type=\"button\"\n >\n {t('profile.totp.setupModal.switchToPasskey')}\n </button>\n </p>\n )}\n </>\n }\n onNext={goToVerify}\n setupData={setupData}\n />\n </div>\n )}\n\n {setupData && step === 'verify' && (\n <div className=\"mt-4\">\n <VerifyStep\n isPending={isVerifyPending}\n onBack={goToQr}\n onSubmit={handleVerify}\n />\n </div>\n )}\n\n {step === 'recovery' && recoveryCodes.length > 0 && (\n <div className=\"mt-4\">\n <RecoveryCodesStep\n isLoading={isConfirmPending}\n onConfirm={confirmRecoveryCodes}\n recoveryCodes={recoveryCodes}\n />\n </div>\n )}\n </Modal>\n );\n}\n","import { mutationOptions } from '@tanstack/react-query';\nimport { client, jsonOk } from '#frontend/libs/api.ts';\n\nexport const logoutMutationOptions = mutationOptions({\n mutationFn: async () => {\n const res = await client.api.auth.logout.$post();\n return jsonOk(res);\n },\n});\n","import { SignOutIcon, WarningCircleIcon } from '@phosphor-icons/react';\nimport {\n useMutation,\n useQueryClient,\n useSuspenseQuery,\n} from '@tanstack/react-query';\nimport {\n createFileRoute,\n type ErrorComponentProps,\n redirect,\n useRouter,\n} from '@tanstack/react-router';\nimport { useState } from 'react';\nimport { useTranslation } from 'react-i18next';\nimport { z } from 'zod';\nimport { DangerZoneSection } from '#frontend/components/profile/danger-zone-section.tsx';\nimport { LinkedAccountsSection } from '#frontend/components/profile/linked-accounts-section.tsx';\nimport { PasskeySection } from '#frontend/components/profile/passkey-section.tsx';\nimport { PasswordSection } from '#frontend/components/profile/password-section.tsx';\nimport { TotpSection } from '#frontend/components/profile/totp-section.tsx';\nimport { UnlinkOAuthModal } from '#frontend/components/profile/unlink-oauth-modal.tsx';\nimport { UserInfoSection } from '#frontend/components/profile/user-info-section.tsx';\nimport { Alert } from '#frontend/components/ui/alert.tsx';\nimport { InitialAvatar } from '#frontend/components/ui/initial-avatar.tsx';\nimport { RouteErrorFallback } from '#frontend/components/ui/route-error-fallback.tsx';\nimport { PageLayout } from '#frontend/features/layout/page-layout.tsx';\nimport { ChangePasswordModal } from '#frontend/features/profile/change-password-modal.tsx';\nimport { DeleteAccountModal } from '#frontend/features/profile/delete-account-modal.tsx';\nimport { DisableTotpModal } from '#frontend/features/profile/disable-totp-modal.tsx';\nimport { ManagePasskeysModal } from '#frontend/features/profile/manage-passkeys-modal.tsx';\nimport { RegenerateTotpRecoveryCodesModal } from '#frontend/features/profile/regenerate-totp-recovery-codes-modal.tsx';\nimport { RemovePasswordModal } from '#frontend/features/profile/remove-password-modal.tsx';\nimport { SetPasswordModal } from '#frontend/features/profile/set-password-modal.tsx';\nimport { SetupPasskeyModal } from '#frontend/features/profile/setup-passkey-modal.tsx';\nimport { SetupTotpModal } from '#frontend/features/profile/setup-totp-modal.tsx';\nimport { tick } from '#frontend/libs/promise.ts';\nimport { appConfigQueryOptions } from '#frontend/queries/config.ts';\nimport { logoutMutationOptions } from '#frontend/queries/logout.ts';\nimport {\n getOAuthAuthorizeUrl,\n oauthAccountsQueryOptions,\n unlinkOAuthMutationOptions,\n} from '#frontend/queries/oauth.ts';\nimport { getSessionQueryOptions } from '#frontend/queries/session.ts';\n\ntype PasswordModalType = 'set' | 'change' | 'remove' | null;\ntype TotpModalType = 'setup' | 'disable' | 'regenerate' | null;\ntype PasskeyModalType = 'setup' | 'manage' | null;\n\nconst SearchSchema = z.object({\n oauth_error: z.string().optional(),\n oauth_error_description: z.string().optional(),\n});\n\nconst OAUTH_ERROR_I18N_MAP: Record<string, string> = {\n access_denied: 'oauth.error.accessDenied',\n temporarily_unavailable: 'oauth.error.temporarilyUnavailable',\n server_error: 'oauth.error.serverError',\n};\n\nfunction ProfileError(props: ErrorComponentProps) {\n return (\n <RouteErrorFallback\n {...props}\n onUnauthorized={() => {\n window.location.href = '/login';\n }}\n />\n );\n}\n\nexport const Route = createFileRoute('/profile/')({\n component: Profile,\n errorComponent: ProfileError,\n validateSearch: SearchSchema,\n beforeLoad: async ({ context }) => {\n if (!context.user) {\n throw redirect({\n to: '/login',\n });\n }\n },\n loader: async ({ context }) => {\n await Promise.all([\n context.queryClient.ensureQueryData(getSessionQueryOptions),\n context.queryClient.ensureQueryData(oauthAccountsQueryOptions),\n context.queryClient.ensureQueryData(appConfigQueryOptions),\n ]);\n },\n});\n\nfunction Profile() {\n const { t } = useTranslation();\n const router = useRouter();\n const queryClient = useQueryClient();\n const search = Route.useSearch();\n\n const oauthError = search.oauth_error;\n const oauthErrorMessage = oauthError\n ? t(OAUTH_ERROR_I18N_MAP[oauthError] ?? 'oauth.error.failed')\n : undefined;\n const [unlinkingProvider, setUnlinkingProvider] = useState<string | null>(\n null,\n );\n const [unlinkModal, setUnlinkModal] = useState<{\n id: string;\n name: string;\n } | null>(null);\n const [passwordModal, setPasswordModal] = useState<PasswordModalType>(null);\n const [totpModal, setTotpModal] = useState<TotpModalType>(null);\n const [passkeyModal, setPasskeyModal] = useState<PasskeyModalType>(null);\n const [showDeleteModal, setShowDeleteModal] = useState(false);\n\n const { data: session } = useSuspenseQuery(getSessionQueryOptions);\n const { data: oauthAccountsData } = useSuspenseQuery(\n oauthAccountsQueryOptions,\n );\n const { data: appConfig } = useSuspenseQuery(appConfigQueryOptions);\n\n const logoutMutation = useMutation({\n ...logoutMutationOptions,\n onSuccess: async () => {\n queryClient.setQueryData(getSessionQueryOptions.queryKey, {\n user: null,\n });\n await tick();\n router.navigate({\n to: '/login',\n });\n },\n onSettled: () => {\n queryClient.invalidateQueries({\n queryKey: getSessionQueryOptions.queryKey,\n });\n },\n });\n\n const unlinkMutation = useMutation({\n ...unlinkOAuthMutationOptions,\n onSuccess: () => {\n queryClient.invalidateQueries({\n queryKey: oauthAccountsQueryOptions.queryKey,\n });\n },\n onSettled: () => {\n setUnlinkingProvider(null);\n },\n });\n\n const handleUnlinkConfirm = async () => {\n if (!unlinkModal) return;\n setUnlinkingProvider(unlinkModal.id);\n await unlinkMutation.mutateAsync(unlinkModal.id);\n };\n\n // Handle non-authenticated states (should be redirected, but fallback)\n if (!session.user) {\n return null;\n }\n\n const user = session.user;\n const availableProviders = oauthAccountsData.available_providers;\n const hasLinkedOAuth = availableProviders.some((p) => p.linked);\n const isConfigManaged = user.managed_by === 'config';\n\n // Check if TOTP and Passkey are enabled in config\n const passwordAuthMethod = appConfig.auth.password;\n const passkeyAuthMethod = appConfig.auth.passkey;\n const totpEnabled = passwordAuthMethod.totp.enabled;\n const passkeyEnabled = passkeyAuthMethod.enabled;\n\n // Account deletion settings\n const accountDeletionEnabled = appConfig.account_deletion.enabled;\n const retentionPeriod = appConfig.account_deletion.retention;\n\n // Parse retention period to get days for display\n const retentionDays = (() => {\n const match = retentionPeriod.match(/^(\\d+)([dmy])$/);\n if (!match) return 30;\n const value = parseInt(match[1], 10);\n const unit = match[2];\n switch (unit) {\n case 'd':\n return value;\n case 'm':\n return value * 30;\n case 'y':\n return value * 365;\n default:\n return 30;\n }\n })();\n\n // Determine which security sections to show\n const showPasswordSection = true;\n const showTotpSection = !isConfigManaged && totpEnabled;\n const showPasskeySection = !isConfigManaged && passkeyEnabled;\n const showLinkedAccounts = availableProviders.length > 0;\n const hasSecurityOptions =\n showPasswordSection || showTotpSection || showPasskeySection;\n\n return (\n <PageLayout maxWidth=\"xl\" responsivePadding>\n {/* Header */}\n <div className=\"border-base-200 border-b p-6\">\n <div className=\"flex items-start justify-between gap-4\">\n <div className=\"flex items-center gap-4\">\n <InitialAvatar email={user.email} size=\"lg\" />\n <div className=\"min-w-0\">\n <h1 className=\"font-bold text-xl\">{t('profile.title')}</h1>\n <p\n className=\"truncate text-base-content/70 text-sm\"\n data-testid=\"profile-user-email\"\n >\n {user.email}\n </p>\n </div>\n </div>\n <button\n className=\"btn btn-ghost btn-sm gap-2\"\n data-testid=\"profile-logout\"\n disabled={logoutMutation.isPending}\n onClick={() => logoutMutation.mutate()}\n type=\"button\"\n >\n {logoutMutation.isPending ? (\n <span className=\"loading loading-spinner loading-sm\" />\n ) : (\n <SignOutIcon className=\"size-4\" weight=\"bold\" />\n )}\n <span className=\"hidden sm:inline\">{t('profile.logout')}</span>\n </button>\n </div>\n </div>\n\n {/* OAuth Error Alert */}\n {oauthErrorMessage && (\n <div className=\"px-6 pt-4\">\n <Alert icon={WarningCircleIcon} type=\"error\">\n {oauthErrorMessage}\n </Alert>\n </div>\n )}\n\n {/* Content - Single Column */}\n <div className=\"space-y-5 p-6\">\n {/* Account Information */}\n {user && <UserInfoSection user={user} />}\n\n {/* Security Options */}\n {hasSecurityOptions && (\n <div className=\"rounded-xl border border-base-200\">\n <div className=\"border-base-200 border-b px-4 py-3\">\n <h2 className=\"font-semibold text-sm\">\n {t('profile.security.title')}\n </h2>\n <p className=\"text-base-content/60 text-xs\">\n {t('profile.security.description')}\n </p>\n </div>\n {showTotpSection && user.totp_recovery_codes_missing && (\n <div\n className=\"border-base-200 border-b px-4 py-3\"\n data-testid=\"profile-totp-recovery-warning\"\n >\n <Alert icon={WarningCircleIcon} type=\"warning\">\n {t('profile.totp.recoveryCodesMissing')}\n </Alert>\n </div>\n )}\n <div className=\"divide-y divide-base-200\">\n {showPasswordSection && (\n <PasswordSection\n hasLinkedOAuth={hasLinkedOAuth}\n hasPassword={user.has_password}\n hasSecondFactorOnly={\n user.has_password &&\n !hasLinkedOAuth &&\n (user.totp_registered || user.passkey_count > 0)\n }\n isConfigManaged={isConfigManaged}\n onOpenModal={setPasswordModal}\n />\n )}\n {showTotpSection && (\n <TotpSection\n onOpenModal={setTotpModal}\n recoveryCodesMissing={user.totp_recovery_codes_missing}\n totpEnabled={user.totp_registered}\n />\n )}\n {showPasskeySection && (\n <PasskeySection\n onOpenModal={setPasskeyModal}\n passkeyCount={user.passkey_count}\n />\n )}\n </div>\n </div>\n )}\n\n {/* Linked OAuth Accounts */}\n {showLinkedAccounts && (\n <LinkedAccountsSection\n getAuthorizeUrl={getOAuthAuthorizeUrl}\n onUnlinkRequest={(provider) =>\n setUnlinkModal({\n id: provider.id,\n name: provider.display_name,\n })\n }\n providers={availableProviders}\n unlinkingProvider={unlinkingProvider}\n />\n )}\n\n {/* Danger Zone */}\n <DangerZoneSection\n isConfigManaged={isConfigManaged}\n isDeletionEnabled={accountDeletionEnabled}\n onDeleteClick={() => setShowDeleteModal(true)}\n />\n </div>\n\n {/* Password Modals */}\n <SetPasswordModal\n isOpen={passwordModal === 'set'}\n onClose={() => setPasswordModal(null)}\n />\n <ChangePasswordModal\n isOpen={passwordModal === 'change'}\n onClose={() => setPasswordModal(null)}\n />\n <RemovePasswordModal\n isOpen={passwordModal === 'remove'}\n onClose={() => setPasswordModal(null)}\n />\n\n {/* TOTP Modals */}\n <SetupTotpModal\n isOpen={totpModal === 'setup'}\n onClose={() => setTotpModal(null)}\n />\n <DisableTotpModal\n isOpen={totpModal === 'disable'}\n onClose={() => setTotpModal(null)}\n />\n <RegenerateTotpRecoveryCodesModal\n isOpen={totpModal === 'regenerate'}\n onClose={() => setTotpModal(null)}\n />\n\n {/* Passkey Modals */}\n <SetupPasskeyModal\n isOpen={passkeyModal === 'setup'}\n onClose={() => setPasskeyModal(null)}\n />\n <ManagePasskeysModal\n isOpen={passkeyModal === 'manage'}\n onAddNew={() => setPasskeyModal('setup')}\n onClose={() => setPasskeyModal(null)}\n />\n\n {/* Unlink OAuth Modal */}\n <UnlinkOAuthModal\n isOpen={unlinkModal !== null}\n isPending={unlinkMutation.isPending}\n onClose={() => setUnlinkModal(null)}\n onConfirm={handleUnlinkConfirm}\n providerName={unlinkModal?.name ?? ''}\n />\n\n {/* Delete Account Modal */}\n <DeleteAccountModal\n isOpen={showDeleteModal}\n onClose={() => setShowDeleteModal(false)}\n retentionDays={retentionDays}\n />\n </PageLayout>\n );\n}\n"],"x_google_ignoreList":[0,1,2,3,4,5,6,7,8,9,10,11,12],"mappings":"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"}
|