@tinyrack/tinyauth-server 0.5.1 → 0.6.1
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/entities/oauth-client.entity.d.ts +27 -0
- package/dist/entities/oauth-client.entity.d.ts.map +1 -1
- package/dist/entities/oauth-code.entity.d.ts +27 -0
- package/dist/entities/oauth-code.entity.d.ts.map +1 -1
- package/dist/entities/oauth-device-code.entity.d.ts +27 -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 +27 -0
- package/dist/entities/revoked-token.entity.d.ts.map +1 -1
- package/dist/entities/user-consent.entity.d.ts +27 -0
- package/dist/entities/user-consent.entity.d.ts.map +1 -1
- package/dist/entrypoints/app.d.ts +325 -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 +16 -7
- package/dist/entrypoints/database/postgres/compiled-functions.d.ts.map +1 -1
- package/dist/entrypoints/database/postgres/compiled-functions.js +183 -39
- package/dist/entrypoints/database/postgres/compiled-functions.js.map +1 -1
- package/dist/entrypoints/database/sqlite/compiled-functions.d.ts +16 -7
- package/dist/entrypoints/database/sqlite/compiled-functions.d.ts.map +1 -1
- package/dist/entrypoints/database/sqlite/compiled-functions.js +183 -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 +20 -0
- package/dist/lib/config/client.d.ts.map +1 -1
- package/dist/lib/config/client.js +14 -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 +40 -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/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 +4 -0
- package/dist/migrations/postgres/index.js.map +1 -1
- 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 +4 -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 +60 -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 +20 -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 +96 -0
- package/dist/schemas/response.d.ts.map +1 -1
- package/dist/schemas/response.js +29 -0
- package/dist/schemas/response.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 +79 -0
- package/dist/services/account-selection.service.js.map +1 -0
- package/dist/services/container.d.ts +22 -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 +236 -12
- package/dist/services/oauth-authorize.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.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-BMEIiDXv.js +2 -0
- package/public/assets/2fa-BMEIiDXv.js.map +1 -0
- package/public/assets/2fa-BhCgCfEc.js +2 -0
- package/public/assets/2fa-BhCgCfEc.js.map +1 -0
- package/public/assets/2fa-Cteolf9l.js +2 -0
- package/public/assets/2fa-Cteolf9l.js.map +1 -0
- package/public/assets/2fa-E0x3Samn.js +2 -0
- package/public/assets/2fa-E0x3Samn.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-CXJ0z2QN.js +2 -0
- package/public/assets/admin-CXJ0z2QN.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-B17hGrta.js +2 -0
- package/public/assets/consent-B17hGrta.js.map +1 -0
- package/public/assets/consent-C-h_pWHQ.js +2 -0
- package/public/assets/consent-C-h_pWHQ.js.map +1 -0
- package/public/assets/email-BMEIiDXv.js +2 -0
- package/public/assets/email-BMEIiDXv.js.map +1 -0
- package/public/assets/email-DjE7mqnX.js +2 -0
- package/public/assets/email-DjE7mqnX.js.map +1 -0
- package/public/assets/error-BKXsXhdR.js +2 -0
- package/public/assets/error-BKXsXhdR.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-BMEIiDXv.js +2 -0
- package/public/assets/forgot-BMEIiDXv.js.map +1 -0
- package/public/assets/forgot-C9zSfaX9.js +2 -0
- package/public/assets/forgot-C9zSfaX9.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-BmfaaNx6.js +11 -0
- package/public/assets/index-BmfaaNx6.js.map +1 -0
- package/public/assets/index-D6-1JDnX.css +2 -0
- package/public/assets/login-BMEIiDXv.js +2 -0
- package/public/assets/login-BMEIiDXv.js.map +1 -0
- package/public/assets/login-DG1Yfmb8.js +2 -0
- package/public/assets/login-DG1Yfmb8.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-BDrX3jVg.js +2 -0
- package/public/assets/passkey-BDrX3jVg.js.map +1 -0
- package/public/assets/passkey-C-h8Fvqn.js +2 -0
- package/public/assets/passkey-C-h8Fvqn.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-86C-hCze.js +2 -0
- package/public/assets/password-86C-hCze.js.map +1 -0
- package/public/assets/password-BMEIiDXv.js +2 -0
- package/public/assets/password-BMEIiDXv.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-8buOY6GT.js +2 -0
- package/public/assets/profile-8buOY6GT.js.map +1 -0
- package/public/assets/profile-DcpL_XUt.js +2 -0
- package/public/assets/profile-DcpL_XUt.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-Csf6dtvj.js +2 -0
- package/public/assets/recovery-Csf6dtvj.js.map +1 -0
- package/public/assets/register-BMEIiDXv.js +2 -0
- package/public/assets/register-BMEIiDXv.js.map +1 -0
- package/public/assets/register-X6dycne4.js +2 -0
- package/public/assets/register-X6dycne4.js.map +1 -0
- package/public/assets/reset-1nsqPlxL.js +2 -0
- package/public/assets/reset-1nsqPlxL.js.map +1 -0
- package/public/assets/reset-BMEIiDXv.js +2 -0
- package/public/assets/reset-BMEIiDXv.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-BMEIiDXv.js +2 -0
- package/public/assets/select-BMEIiDXv.js.map +1 -0
- package/public/assets/select-CDdb3jyc.js +2 -0
- package/public/assets/select-CDdb3jyc.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-CUhvMN9k.js +2 -0
- package/public/assets/terms-CUhvMN9k.js.map +1 -0
- package/public/assets/terms-DcpL_XUt.js +2 -0
- package/public/assets/terms-DcpL_XUt.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-DB9WqW4V.js +2 -0
- package/public/assets/totp-DB9WqW4V.js.map +1 -0
- package/public/assets/totp-NlqqRp4a.js +2 -0
- package/public/assets/totp-NlqqRp4a.js.map +1 -0
- package/public/assets/totp-UDT2P91H.js +2 -0
- package/public/assets/totp-UDT2P91H.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-9fktn_he.js +3 -0
- package/public/assets/use-totp-setup-9fktn_he.js.map +1 -0
- package/public/assets/useMutation-Iu4AJCB4.js +2 -0
- package/public/assets/useMutation-Iu4AJCB4.js.map +1 -0
- package/public/assets/users-Bi7gjreq.js +2 -0
- package/public/assets/users-Bi7gjreq.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 @@
|
|
|
1
|
+
{"version":3,"file":"use-theme-cVUDAjtt.js","names":["#setup","#cleanup","#focused","#provider","noop","functionalUpdate","isPlainObject","hasOwn","replaceEqualDeep","isPlainArray","hasObjectPrototype","#setup","#cleanup","#online","#gcTimeout","#abortSignalConsumed","#defaultOptions","#client","#cache","#initialState","#queryType","#retryer","#dispatch","noop","#isInitialPausedFetch","#revertState","#client","#selectError","#currentThenable","#currentQuery","#executeFetch","#updateTimers","#clearStaleTimeout","#clearRefetchInterval","#updateQuery","#updateStaleTimeout","#computeRefetchInterval","#currentRefetchInterval","#updateRefetchInterval","#currentResult","#currentResultOptions","#currentResultState","#trackedProps","noop","#staleTimeoutId","#refetchIntervalId","#currentQueryInitialState","#lastQueryWithDefinedData","#selectFn","#selectResult","#notify","noop","\"use\"","trimPathRight","createProxy"],"sources":["../../../../node_modules/.pnpm/@tanstack+query-core@5.101.0/node_modules/@tanstack/query-core/build/modern/subscribable.js","../../../../node_modules/.pnpm/@tanstack+query-core@5.101.0/node_modules/@tanstack/query-core/build/modern/focusManager.js","../../../../node_modules/.pnpm/@tanstack+query-core@5.101.0/node_modules/@tanstack/query-core/build/modern/timeoutManager.js","../../../../node_modules/.pnpm/@tanstack+query-core@5.101.0/node_modules/@tanstack/query-core/build/modern/utils.js","../../../../node_modules/.pnpm/@tanstack+query-core@5.101.0/node_modules/@tanstack/query-core/build/modern/environmentManager.js","../../../../node_modules/.pnpm/@tanstack+query-core@5.101.0/node_modules/@tanstack/query-core/build/modern/thenable.js","../../../../node_modules/.pnpm/@tanstack+query-core@5.101.0/node_modules/@tanstack/query-core/build/modern/notifyManager.js","../../../../node_modules/.pnpm/@tanstack+query-core@5.101.0/node_modules/@tanstack/query-core/build/modern/onlineManager.js","../../../../node_modules/.pnpm/@tanstack+query-core@5.101.0/node_modules/@tanstack/query-core/build/modern/retryer.js","../../../../node_modules/.pnpm/@tanstack+query-core@5.101.0/node_modules/@tanstack/query-core/build/modern/removable.js","../../../../node_modules/.pnpm/@tanstack+query-core@5.101.0/node_modules/@tanstack/query-core/build/modern/infiniteQueryBehavior.js","../../../../node_modules/.pnpm/@tanstack+query-core@5.101.0/node_modules/@tanstack/query-core/build/modern/query.js","../../../../node_modules/.pnpm/@tanstack+query-core@5.101.0/node_modules/@tanstack/query-core/build/modern/queryObserver.js","../../../../node_modules/.pnpm/@tanstack+react-query@5.101.0_react@19.2.7/node_modules/@tanstack/react-query/build/modern/QueryClientProvider.js","../../../../node_modules/.pnpm/@tanstack+react-query@5.101.0_react@19.2.7/node_modules/@tanstack/react-query/build/modern/IsRestoringProvider.js","../../../../node_modules/.pnpm/@tanstack+react-query@5.101.0_react@19.2.7/node_modules/@tanstack/react-query/build/modern/QueryErrorResetBoundary.js","../../../../node_modules/.pnpm/@tanstack+react-query@5.101.0_react@19.2.7/node_modules/@tanstack/react-query/build/modern/errorBoundaryUtils.js","../../../../node_modules/.pnpm/@tanstack+react-query@5.101.0_react@19.2.7/node_modules/@tanstack/react-query/build/modern/suspense.js","../../../../node_modules/.pnpm/@tanstack+react-query@5.101.0_react@19.2.7/node_modules/@tanstack/react-query/build/modern/useBaseQuery.js","../../../../node_modules/.pnpm/@tanstack+react-query@5.101.0_react@19.2.7/node_modules/@tanstack/react-query/build/modern/useSuspenseQuery.js","../../../../node_modules/.pnpm/@tanstack+react-query@5.101.0_react@19.2.7/node_modules/@tanstack/react-query/build/modern/queryOptions.js","../../../../node_modules/.pnpm/@tanstack+react-router@1.170.16_react-dom@19.2.7_react@19.2.7__react@19.2.7/node_modules/@tanstack/react-router/dist/esm/utils.js","../../../../node_modules/.pnpm/@tanstack+router-core@1.171.13/node_modules/@tanstack/router-core/dist/esm/utils.js","../../../../node_modules/.pnpm/@tanstack+router-core@1.171.13/node_modules/@tanstack/router-core/dist/esm/invariant.js","../../../../node_modules/.pnpm/@tanstack+router-core@1.171.13/node_modules/@tanstack/router-core/dist/esm/lru-cache.js","../../../../node_modules/.pnpm/@tanstack+router-core@1.171.13/node_modules/@tanstack/router-core/dist/esm/new-process-route-tree.js","../../../../node_modules/.pnpm/@tanstack+router-core@1.171.13/node_modules/@tanstack/router-core/dist/esm/path.js","../../../../node_modules/.pnpm/@tanstack+router-core@1.171.13/node_modules/@tanstack/router-core/dist/esm/link.js","../../../../node_modules/.pnpm/@tanstack+react-router@1.170.16_react-dom@19.2.7_react@19.2.7__react@19.2.7/node_modules/@tanstack/react-router/dist/esm/ClientOnly.js","../../../../node_modules/.pnpm/@tanstack+react-router@1.170.16_react-dom@19.2.7_react@19.2.7__react@19.2.7/node_modules/@tanstack/react-router/dist/esm/routerContext.js","../../../../node_modules/.pnpm/@tanstack+react-router@1.170.16_react-dom@19.2.7_react@19.2.7__react@19.2.7/node_modules/@tanstack/react-router/dist/esm/useRouter.js","../../../../node_modules/.pnpm/use-sync-external-store@1.6.0_react@19.2.7/node_modules/use-sync-external-store/cjs/use-sync-external-store-shim/with-selector.production.js","../../../../node_modules/.pnpm/use-sync-external-store@1.6.0_react@19.2.7/node_modules/use-sync-external-store/shim/with-selector.js","../../../../node_modules/.pnpm/@tanstack+react-store@0.9.3_react-dom@19.2.7_react@19.2.7__react@19.2.7/node_modules/@tanstack/react-store/dist/esm/useStore.js","../../../../node_modules/.pnpm/react-dom@19.2.7_react@19.2.7/node_modules/react-dom/cjs/react-dom.production.js","../../../../node_modules/.pnpm/react-dom@19.2.7_react@19.2.7/node_modules/react-dom/index.js","../../../../node_modules/.pnpm/@tanstack+react-router@1.170.16_react-dom@19.2.7_react@19.2.7__react@19.2.7/node_modules/@tanstack/react-router/dist/esm/link.js","../../../../node_modules/.pnpm/i18next@26.3.1_typescript@6.0.3/node_modules/i18next/dist/esm/i18next.js","../../../frontend/src/i18n/locales/en.json","../../../frontend/src/i18n/locales/ja.json","../../../frontend/src/i18n/locales/ko.json","../../../frontend/src/i18n/index.ts","../../../../node_modules/.pnpm/hono@4.12.25/node_modules/hono/dist/utils/cookie.js","../../../../node_modules/.pnpm/hono@4.12.25/node_modules/hono/dist/client/utils.js","../../../../node_modules/.pnpm/hono@4.12.25/node_modules/hono/dist/client/client.js","../../../frontend/src/libs/api.ts","../../../frontend/src/queries/keys.ts","../../../frontend/src/queries/config.ts","../../../frontend/src/hooks/use-theme.ts"],"sourcesContent":["// src/subscribable.ts\nvar Subscribable = class {\n constructor() {\n this.listeners = /* @__PURE__ */ new Set();\n this.subscribe = this.subscribe.bind(this);\n }\n subscribe(listener) {\n this.listeners.add(listener);\n this.onSubscribe();\n return () => {\n this.listeners.delete(listener);\n this.onUnsubscribe();\n };\n }\n hasListeners() {\n return this.listeners.size > 0;\n }\n onSubscribe() {\n }\n onUnsubscribe() {\n }\n};\nexport {\n Subscribable\n};\n//# sourceMappingURL=subscribable.js.map","// src/focusManager.ts\nimport { Subscribable } from \"./subscribable.js\";\nvar FocusManager = class extends Subscribable {\n #focused;\n #cleanup;\n #setup;\n constructor() {\n super();\n this.#setup = (onFocus) => {\n if (typeof window !== \"undefined\" && window.addEventListener) {\n const listener = () => onFocus();\n window.addEventListener(\"visibilitychange\", listener, false);\n return () => {\n window.removeEventListener(\"visibilitychange\", listener);\n };\n }\n return;\n };\n }\n onSubscribe() {\n if (!this.#cleanup) {\n this.setEventListener(this.#setup);\n }\n }\n onUnsubscribe() {\n if (!this.hasListeners()) {\n this.#cleanup?.();\n this.#cleanup = void 0;\n }\n }\n setEventListener(setup) {\n this.#setup = setup;\n this.#cleanup?.();\n this.#cleanup = setup((focused) => {\n if (typeof focused === \"boolean\") {\n this.setFocused(focused);\n } else {\n this.onFocus();\n }\n });\n }\n setFocused(focused) {\n const changed = this.#focused !== focused;\n if (changed) {\n this.#focused = focused;\n this.onFocus();\n }\n }\n onFocus() {\n const isFocused = this.isFocused();\n this.listeners.forEach((listener) => {\n listener(isFocused);\n });\n }\n isFocused() {\n if (typeof this.#focused === \"boolean\") {\n return this.#focused;\n }\n return globalThis.document?.visibilityState !== \"hidden\";\n }\n};\nvar focusManager = new FocusManager();\nexport {\n FocusManager,\n focusManager\n};\n//# sourceMappingURL=focusManager.js.map","// src/timeoutManager.ts\nvar defaultTimeoutProvider = {\n // We need the wrapper function syntax below instead of direct references to\n // global setTimeout etc.\n //\n // BAD: `setTimeout: setTimeout`\n // GOOD: `setTimeout: (cb, delay) => setTimeout(cb, delay)`\n //\n // If we use direct references here, then anything that wants to spy on or\n // replace the global setTimeout (like tests) won't work since we'll already\n // have a hard reference to the original implementation at the time when this\n // file was imported.\n setTimeout: (callback, delay) => setTimeout(callback, delay),\n clearTimeout: (timeoutId) => clearTimeout(timeoutId),\n setInterval: (callback, delay) => setInterval(callback, delay),\n clearInterval: (intervalId) => clearInterval(intervalId)\n};\nvar TimeoutManager = class {\n // We cannot have TimeoutManager<T> as we must instantiate it with a concrete\n // type at app boot; and if we leave that type, then any new timer provider\n // would need to support the default provider's concrete timer ID, which is\n // infeasible across environments.\n //\n // We settle for type safety for the TimeoutProvider type, and accept that\n // this class is unsafe internally to allow for extension.\n #provider = defaultTimeoutProvider;\n #providerCalled = false;\n setTimeoutProvider(provider) {\n if (process.env.NODE_ENV !== \"production\") {\n if (this.#providerCalled && provider !== this.#provider) {\n console.error(\n `[timeoutManager]: Switching provider after calls to previous provider might result in unexpected behavior.`,\n { previous: this.#provider, provider }\n );\n }\n }\n this.#provider = provider;\n if (process.env.NODE_ENV !== \"production\") {\n this.#providerCalled = false;\n }\n }\n setTimeout(callback, delay) {\n if (process.env.NODE_ENV !== \"production\") {\n this.#providerCalled = true;\n }\n return this.#provider.setTimeout(callback, delay);\n }\n clearTimeout(timeoutId) {\n this.#provider.clearTimeout(timeoutId);\n }\n setInterval(callback, delay) {\n if (process.env.NODE_ENV !== \"production\") {\n this.#providerCalled = true;\n }\n return this.#provider.setInterval(callback, delay);\n }\n clearInterval(intervalId) {\n this.#provider.clearInterval(intervalId);\n }\n};\nvar timeoutManager = new TimeoutManager();\nfunction systemSetTimeoutZero(callback) {\n setTimeout(callback, 0);\n}\nexport {\n TimeoutManager,\n defaultTimeoutProvider,\n systemSetTimeoutZero,\n timeoutManager\n};\n//# sourceMappingURL=timeoutManager.js.map","// src/utils.ts\nimport { timeoutManager } from \"./timeoutManager.js\";\nvar isServer = typeof window === \"undefined\" || \"Deno\" in globalThis;\nfunction noop() {\n}\nfunction functionalUpdate(updater, input) {\n return typeof updater === \"function\" ? updater(input) : updater;\n}\nfunction isValidTimeout(value) {\n return typeof value === \"number\" && value >= 0 && value !== Infinity;\n}\nfunction timeUntilStale(updatedAt, staleTime) {\n return Math.max(updatedAt + (staleTime || 0) - Date.now(), 0);\n}\nfunction resolveStaleTime(staleTime, query) {\n return typeof staleTime === \"function\" ? staleTime(query) : staleTime;\n}\nfunction resolveQueryBoolean(option, query) {\n return typeof option === \"function\" ? option(query) : option;\n}\nfunction matchQuery(filters, query) {\n const {\n type = \"all\",\n exact,\n fetchStatus,\n predicate,\n queryKey,\n stale\n } = filters;\n if (queryKey) {\n if (exact) {\n if (query.queryHash !== hashQueryKeyByOptions(queryKey, query.options)) {\n return false;\n }\n } else if (!partialMatchKey(query.queryKey, queryKey)) {\n return false;\n }\n }\n if (type !== \"all\") {\n const isActive = query.isActive();\n if (type === \"active\" && !isActive) {\n return false;\n }\n if (type === \"inactive\" && isActive) {\n return false;\n }\n }\n if (typeof stale === \"boolean\" && query.isStale() !== stale) {\n return false;\n }\n if (fetchStatus && fetchStatus !== query.state.fetchStatus) {\n return false;\n }\n if (predicate && !predicate(query)) {\n return false;\n }\n return true;\n}\nfunction matchMutation(filters, mutation) {\n const { exact, status, predicate, mutationKey } = filters;\n if (mutationKey) {\n if (!mutation.options.mutationKey) {\n return false;\n }\n if (exact) {\n if (hashKey(mutation.options.mutationKey) !== hashKey(mutationKey)) {\n return false;\n }\n } else if (!partialMatchKey(mutation.options.mutationKey, mutationKey)) {\n return false;\n }\n }\n if (status && mutation.state.status !== status) {\n return false;\n }\n if (predicate && !predicate(mutation)) {\n return false;\n }\n return true;\n}\nfunction hashQueryKeyByOptions(queryKey, options) {\n const hashFn = options?.queryKeyHashFn || hashKey;\n return hashFn(queryKey);\n}\nfunction hashKey(queryKey) {\n return JSON.stringify(\n queryKey,\n (_, val) => isPlainObject(val) ? Object.keys(val).sort().reduce((result, key) => {\n result[key] = val[key];\n return result;\n }, {}) : val\n );\n}\nfunction partialMatchKey(a, b) {\n if (a === b) {\n return true;\n }\n if (typeof a !== typeof b) {\n return false;\n }\n if (a && b && typeof a === \"object\" && typeof b === \"object\") {\n return Object.keys(b).every((key) => partialMatchKey(a[key], b[key]));\n }\n return false;\n}\nvar hasOwn = Object.prototype.hasOwnProperty;\nfunction replaceEqualDeep(a, b, depth = 0) {\n if (a === b) {\n return a;\n }\n if (depth > 500) return b;\n const array = isPlainArray(a) && isPlainArray(b);\n if (!array && !(isPlainObject(a) && isPlainObject(b))) return b;\n const aItems = array ? a : Object.keys(a);\n const aSize = aItems.length;\n const bItems = array ? b : Object.keys(b);\n const bSize = bItems.length;\n const copy = array ? new Array(bSize) : {};\n let equalItems = 0;\n for (let i = 0; i < bSize; i++) {\n const key = array ? i : bItems[i];\n const aItem = a[key];\n const bItem = b[key];\n if (aItem === bItem) {\n copy[key] = aItem;\n if (array ? i < aSize : hasOwn.call(a, key)) equalItems++;\n continue;\n }\n if (aItem === null || bItem === null || typeof aItem !== \"object\" || typeof bItem !== \"object\") {\n copy[key] = bItem;\n continue;\n }\n const v = replaceEqualDeep(aItem, bItem, depth + 1);\n copy[key] = v;\n if (v === aItem) equalItems++;\n }\n return aSize === bSize && equalItems === aSize ? a : copy;\n}\nfunction shallowEqualObjects(a, b) {\n if (!b || Object.keys(a).length !== Object.keys(b).length) {\n return false;\n }\n for (const key in a) {\n if (a[key] !== b[key]) {\n return false;\n }\n }\n return true;\n}\nfunction isPlainArray(value) {\n return Array.isArray(value) && value.length === Object.keys(value).length;\n}\nfunction isPlainObject(o) {\n if (!hasObjectPrototype(o)) {\n return false;\n }\n const ctor = o.constructor;\n if (ctor === void 0) {\n return true;\n }\n const prot = ctor.prototype;\n if (!hasObjectPrototype(prot)) {\n return false;\n }\n if (!prot.hasOwnProperty(\"isPrototypeOf\")) {\n return false;\n }\n if (Object.getPrototypeOf(o) !== Object.prototype) {\n return false;\n }\n return true;\n}\nfunction hasObjectPrototype(o) {\n return Object.prototype.toString.call(o) === \"[object Object]\";\n}\nfunction sleep(timeout) {\n return new Promise((resolve) => {\n timeoutManager.setTimeout(resolve, timeout);\n });\n}\nfunction replaceData(prevData, data, options) {\n if (typeof options.structuralSharing === \"function\") {\n return options.structuralSharing(prevData, data);\n } else if (options.structuralSharing !== false) {\n if (process.env.NODE_ENV !== \"production\") {\n try {\n return replaceEqualDeep(prevData, data);\n } catch (error) {\n console.error(\n `Structural sharing requires data to be JSON serializable. To fix this, turn off structuralSharing or return JSON-serializable data from your queryFn. [${options.queryHash}]: ${error}`\n );\n throw error;\n }\n }\n return replaceEqualDeep(prevData, data);\n }\n return data;\n}\nfunction keepPreviousData(previousData) {\n return previousData;\n}\nfunction addToEnd(items, item, max = 0) {\n const newItems = [...items, item];\n return max && newItems.length > max ? newItems.slice(1) : newItems;\n}\nfunction addToStart(items, item, max = 0) {\n const newItems = [item, ...items];\n return max && newItems.length > max ? newItems.slice(0, -1) : newItems;\n}\nvar skipToken = /* @__PURE__ */ Symbol();\nfunction ensureQueryFn(options, fetchOptions) {\n if (process.env.NODE_ENV !== \"production\") {\n if (options.queryFn === skipToken) {\n console.error(\n `Attempted to invoke queryFn when set to skipToken. This is likely a configuration error. Query hash: '${options.queryHash}'`\n );\n }\n }\n if (!options.queryFn && fetchOptions?.initialPromise) {\n return () => fetchOptions.initialPromise;\n }\n if (!options.queryFn || options.queryFn === skipToken) {\n return () => Promise.reject(new Error(`Missing queryFn: '${options.queryHash}'`));\n }\n return options.queryFn;\n}\nfunction shouldThrowError(throwOnError, params) {\n if (typeof throwOnError === \"function\") {\n return throwOnError(...params);\n }\n return !!throwOnError;\n}\nfunction addConsumeAwareSignal(object, getSignal, onCancelled) {\n let consumed = false;\n let signal;\n Object.defineProperty(object, \"signal\", {\n enumerable: true,\n get: () => {\n signal ??= getSignal();\n if (consumed) {\n return signal;\n }\n consumed = true;\n if (signal.aborted) {\n onCancelled();\n } else {\n signal.addEventListener(\"abort\", onCancelled, { once: true });\n }\n return signal;\n }\n });\n return object;\n}\nexport {\n addConsumeAwareSignal,\n addToEnd,\n addToStart,\n ensureQueryFn,\n functionalUpdate,\n hashKey,\n hashQueryKeyByOptions,\n isPlainArray,\n isPlainObject,\n isServer,\n isValidTimeout,\n keepPreviousData,\n matchMutation,\n matchQuery,\n noop,\n partialMatchKey,\n replaceData,\n replaceEqualDeep,\n resolveQueryBoolean,\n resolveStaleTime,\n shallowEqualObjects,\n shouldThrowError,\n skipToken,\n sleep,\n timeUntilStale\n};\n//# sourceMappingURL=utils.js.map","// src/environmentManager.ts\nimport { isServer } from \"./utils.js\";\nvar environmentManager = /* @__PURE__ */ (() => {\n let isServerFn = () => isServer;\n return {\n /**\n * Returns whether the current runtime should be treated as a server environment.\n */\n isServer() {\n return isServerFn();\n },\n /**\n * Overrides the server check globally.\n */\n setIsServer(isServerValue) {\n isServerFn = isServerValue;\n }\n };\n})();\nexport {\n environmentManager\n};\n//# sourceMappingURL=environmentManager.js.map","// src/thenable.ts\nimport { noop } from \"./utils.js\";\nfunction pendingThenable() {\n let resolve;\n let reject;\n const thenable = new Promise((_resolve, _reject) => {\n resolve = _resolve;\n reject = _reject;\n });\n thenable.status = \"pending\";\n thenable.catch(() => {\n });\n function finalize(data) {\n Object.assign(thenable, data);\n delete thenable.resolve;\n delete thenable.reject;\n }\n thenable.resolve = (value) => {\n finalize({\n status: \"fulfilled\",\n value\n });\n resolve(value);\n };\n thenable.reject = (reason) => {\n finalize({\n status: \"rejected\",\n reason\n });\n reject(reason);\n };\n return thenable;\n}\nfunction tryResolveSync(promise) {\n let data;\n promise.then((result) => {\n data = result;\n return result;\n }, noop)?.catch(noop);\n if (data !== void 0) {\n return { data };\n }\n return void 0;\n}\nexport {\n pendingThenable,\n tryResolveSync\n};\n//# sourceMappingURL=thenable.js.map","// src/notifyManager.ts\nimport { systemSetTimeoutZero } from \"./timeoutManager.js\";\nvar defaultScheduler = systemSetTimeoutZero;\nfunction createNotifyManager() {\n let queue = [];\n let transactions = 0;\n let notifyFn = (callback) => {\n callback();\n };\n let batchNotifyFn = (callback) => {\n callback();\n };\n let scheduleFn = defaultScheduler;\n const schedule = (callback) => {\n if (transactions) {\n queue.push(callback);\n } else {\n scheduleFn(() => {\n notifyFn(callback);\n });\n }\n };\n const flush = () => {\n const originalQueue = queue;\n queue = [];\n if (originalQueue.length) {\n scheduleFn(() => {\n batchNotifyFn(() => {\n originalQueue.forEach((callback) => {\n notifyFn(callback);\n });\n });\n });\n }\n };\n return {\n batch: (callback) => {\n let result;\n transactions++;\n try {\n result = callback();\n } finally {\n transactions--;\n if (!transactions) {\n flush();\n }\n }\n return result;\n },\n /**\n * All calls to the wrapped function will be batched.\n */\n batchCalls: (callback) => {\n return (...args) => {\n schedule(() => {\n callback(...args);\n });\n };\n },\n schedule,\n /**\n * Use this method to set a custom notify function.\n * This can be used to for example wrap notifications with `React.act` while running tests.\n */\n setNotifyFunction: (fn) => {\n notifyFn = fn;\n },\n /**\n * Use this method to set a custom function to batch notifications together into a single tick.\n * By default React Query will use the batch function provided by ReactDOM or React Native.\n */\n setBatchNotifyFunction: (fn) => {\n batchNotifyFn = fn;\n },\n setScheduler: (fn) => {\n scheduleFn = fn;\n }\n };\n}\nvar notifyManager = createNotifyManager();\nexport {\n createNotifyManager,\n defaultScheduler,\n notifyManager\n};\n//# sourceMappingURL=notifyManager.js.map","// src/onlineManager.ts\nimport { Subscribable } from \"./subscribable.js\";\nvar OnlineManager = class extends Subscribable {\n #online = true;\n #cleanup;\n #setup;\n constructor() {\n super();\n this.#setup = (onOnline) => {\n if (typeof window !== \"undefined\" && window.addEventListener) {\n const onlineListener = () => onOnline(true);\n const offlineListener = () => onOnline(false);\n window.addEventListener(\"online\", onlineListener, false);\n window.addEventListener(\"offline\", offlineListener, false);\n return () => {\n window.removeEventListener(\"online\", onlineListener);\n window.removeEventListener(\"offline\", offlineListener);\n };\n }\n return;\n };\n }\n onSubscribe() {\n if (!this.#cleanup) {\n this.setEventListener(this.#setup);\n }\n }\n onUnsubscribe() {\n if (!this.hasListeners()) {\n this.#cleanup?.();\n this.#cleanup = void 0;\n }\n }\n setEventListener(setup) {\n this.#setup = setup;\n this.#cleanup?.();\n this.#cleanup = setup(this.setOnline.bind(this));\n }\n setOnline(online) {\n const changed = this.#online !== online;\n if (changed) {\n this.#online = online;\n this.listeners.forEach((listener) => {\n listener(online);\n });\n }\n }\n isOnline() {\n return this.#online;\n }\n};\nvar onlineManager = new OnlineManager();\nexport {\n OnlineManager,\n onlineManager\n};\n//# sourceMappingURL=onlineManager.js.map","// src/retryer.ts\nimport { focusManager } from \"./focusManager.js\";\nimport { onlineManager } from \"./onlineManager.js\";\nimport { pendingThenable } from \"./thenable.js\";\nimport { environmentManager } from \"./environmentManager.js\";\nimport { sleep } from \"./utils.js\";\nfunction defaultRetryDelay(failureCount) {\n return Math.min(1e3 * 2 ** failureCount, 3e4);\n}\nfunction canFetch(networkMode) {\n return (networkMode ?? \"online\") === \"online\" ? onlineManager.isOnline() : true;\n}\nvar CancelledError = class extends Error {\n constructor(options) {\n super(\"CancelledError\");\n this.revert = options?.revert;\n this.silent = options?.silent;\n }\n};\nfunction isCancelledError(value) {\n return value instanceof CancelledError;\n}\nfunction createRetryer(config) {\n let isRetryCancelled = false;\n let failureCount = 0;\n let continueFn;\n const thenable = pendingThenable();\n const isResolved = () => thenable.status !== \"pending\";\n const cancel = (cancelOptions) => {\n if (!isResolved()) {\n const error = new CancelledError(cancelOptions);\n reject(error);\n config.onCancel?.(error);\n }\n };\n const cancelRetry = () => {\n isRetryCancelled = true;\n };\n const continueRetry = () => {\n isRetryCancelled = false;\n };\n const canContinue = () => focusManager.isFocused() && (config.networkMode === \"always\" || onlineManager.isOnline()) && config.canRun();\n const canStart = () => canFetch(config.networkMode) && config.canRun();\n const resolve = (value) => {\n if (!isResolved()) {\n continueFn?.();\n thenable.resolve(value);\n }\n };\n const reject = (value) => {\n if (!isResolved()) {\n continueFn?.();\n thenable.reject(value);\n }\n };\n const pause = () => {\n return new Promise((continueResolve) => {\n continueFn = (value) => {\n if (isResolved() || canContinue()) {\n continueResolve(value);\n }\n };\n config.onPause?.();\n }).then(() => {\n continueFn = void 0;\n if (!isResolved()) {\n config.onContinue?.();\n }\n });\n };\n const run = () => {\n if (isResolved()) {\n return;\n }\n let promiseOrValue;\n const initialPromise = failureCount === 0 ? config.initialPromise : void 0;\n try {\n promiseOrValue = initialPromise ?? config.fn();\n } catch (error) {\n promiseOrValue = Promise.reject(error);\n }\n Promise.resolve(promiseOrValue).then(resolve).catch((error) => {\n if (isResolved()) {\n return;\n }\n const retry = config.retry ?? (environmentManager.isServer() ? 0 : 3);\n const retryDelay = config.retryDelay ?? defaultRetryDelay;\n const delay = typeof retryDelay === \"function\" ? retryDelay(failureCount, error) : retryDelay;\n const shouldRetry = retry === true || typeof retry === \"number\" && failureCount < retry || typeof retry === \"function\" && retry(failureCount, error);\n if (isRetryCancelled || !shouldRetry) {\n reject(error);\n return;\n }\n failureCount++;\n config.onFail?.(failureCount, error);\n sleep(delay).then(() => {\n return canContinue() ? void 0 : pause();\n }).then(() => {\n if (isRetryCancelled) {\n reject(error);\n } else {\n run();\n }\n });\n });\n };\n return {\n promise: thenable,\n status: () => thenable.status,\n cancel,\n continue: () => {\n continueFn?.();\n return thenable;\n },\n cancelRetry,\n continueRetry,\n canStart,\n start: () => {\n if (canStart()) {\n run();\n } else {\n pause().then(run);\n }\n return thenable;\n }\n };\n}\nexport {\n CancelledError,\n canFetch,\n createRetryer,\n isCancelledError\n};\n//# sourceMappingURL=retryer.js.map","// src/removable.ts\nimport { timeoutManager } from \"./timeoutManager.js\";\nimport { environmentManager } from \"./environmentManager.js\";\nimport { isValidTimeout } from \"./utils.js\";\nvar Removable = class {\n #gcTimeout;\n destroy() {\n this.clearGcTimeout();\n }\n scheduleGc() {\n this.clearGcTimeout();\n if (isValidTimeout(this.gcTime)) {\n this.#gcTimeout = timeoutManager.setTimeout(() => {\n this.optionalRemove();\n }, this.gcTime);\n }\n }\n updateGcTime(newGcTime) {\n this.gcTime = Math.max(\n this.gcTime || 0,\n newGcTime ?? (environmentManager.isServer() ? Infinity : 5 * 60 * 1e3)\n );\n }\n clearGcTimeout() {\n if (this.#gcTimeout !== void 0) {\n timeoutManager.clearTimeout(this.#gcTimeout);\n this.#gcTimeout = void 0;\n }\n }\n};\nexport {\n Removable\n};\n//# sourceMappingURL=removable.js.map","// src/infiniteQueryBehavior.ts\nimport {\n addConsumeAwareSignal,\n addToEnd,\n addToStart,\n ensureQueryFn\n} from \"./utils.js\";\nfunction infiniteQueryBehavior(pages) {\n return {\n onFetch: (context, query) => {\n const options = context.options;\n const direction = context.fetchOptions?.meta?.fetchMore?.direction;\n const oldPages = context.state.data?.pages || [];\n const oldPageParams = context.state.data?.pageParams || [];\n let result = { pages: [], pageParams: [] };\n let currentPage = 0;\n const fetchFn = async () => {\n let cancelled = false;\n const addSignalProperty = (object) => {\n addConsumeAwareSignal(\n object,\n () => context.signal,\n () => cancelled = true\n );\n };\n const queryFn = ensureQueryFn(context.options, context.fetchOptions);\n const fetchPage = async (data, param, previous) => {\n if (cancelled) {\n return Promise.reject(context.signal.reason);\n }\n if (param == null && data.pages.length) {\n return Promise.resolve(data);\n }\n const createQueryFnContext = () => {\n const queryFnContext2 = {\n client: context.client,\n queryKey: context.queryKey,\n pageParam: param,\n direction: previous ? \"backward\" : \"forward\",\n meta: context.options.meta\n };\n addSignalProperty(queryFnContext2);\n return queryFnContext2;\n };\n const queryFnContext = createQueryFnContext();\n const page = await queryFn(queryFnContext);\n const { maxPages } = context.options;\n const addTo = previous ? addToStart : addToEnd;\n return {\n pages: addTo(data.pages, page, maxPages),\n pageParams: addTo(data.pageParams, param, maxPages)\n };\n };\n if (direction && oldPages.length) {\n const previous = direction === \"backward\";\n const pageParamFn = previous ? getPreviousPageParam : getNextPageParam;\n const oldData = {\n pages: oldPages,\n pageParams: oldPageParams\n };\n const param = pageParamFn(options, oldData);\n result = await fetchPage(oldData, param, previous);\n } else {\n const remainingPages = pages ?? oldPages.length;\n do {\n const param = currentPage === 0 ? oldPageParams[0] ?? options.initialPageParam : getNextPageParam(options, result);\n if (currentPage > 0 && param == null) {\n break;\n }\n result = await fetchPage(result, param);\n currentPage++;\n } while (currentPage < remainingPages);\n }\n return result;\n };\n if (context.options.persister) {\n context.fetchFn = () => {\n return context.options.persister?.(\n fetchFn,\n {\n client: context.client,\n queryKey: context.queryKey,\n meta: context.options.meta,\n signal: context.signal\n },\n query\n );\n };\n } else {\n context.fetchFn = fetchFn;\n }\n }\n };\n}\nfunction getNextPageParam(options, { pages, pageParams }) {\n const lastIndex = pages.length - 1;\n return pages.length > 0 ? options.getNextPageParam(\n pages[lastIndex],\n pages,\n pageParams[lastIndex],\n pageParams\n ) : void 0;\n}\nfunction getPreviousPageParam(options, { pages, pageParams }) {\n return pages.length > 0 ? options.getPreviousPageParam?.(pages[0], pages, pageParams[0], pageParams) : void 0;\n}\nfunction hasNextPage(options, data) {\n if (!data) return false;\n return getNextPageParam(options, data) != null;\n}\nfunction hasPreviousPage(options, data) {\n if (!data || !options.getPreviousPageParam) return false;\n return getPreviousPageParam(options, data) != null;\n}\nexport {\n hasNextPage,\n hasPreviousPage,\n infiniteQueryBehavior\n};\n//# sourceMappingURL=infiniteQueryBehavior.js.map","// src/query.ts\nimport {\n ensureQueryFn,\n noop,\n replaceData,\n resolveQueryBoolean,\n resolveStaleTime,\n skipToken,\n timeUntilStale\n} from \"./utils.js\";\nimport { notifyManager } from \"./notifyManager.js\";\nimport { CancelledError, canFetch, createRetryer } from \"./retryer.js\";\nimport { Removable } from \"./removable.js\";\nimport { infiniteQueryBehavior } from \"./infiniteQueryBehavior.js\";\nvar Query = class extends Removable {\n #queryType;\n #initialState;\n #revertState;\n #cache;\n #client;\n #retryer;\n #defaultOptions;\n #abortSignalConsumed;\n constructor(config) {\n super();\n this.#abortSignalConsumed = false;\n this.#defaultOptions = config.defaultOptions;\n this.setOptions(config.options);\n this.observers = [];\n this.#client = config.client;\n this.#cache = this.#client.getQueryCache();\n this.queryKey = config.queryKey;\n this.queryHash = config.queryHash;\n this.#initialState = getDefaultState(this.options);\n this.state = config.state ?? this.#initialState;\n this.scheduleGc();\n }\n get meta() {\n return this.options.meta;\n }\n get queryType() {\n return this.#queryType;\n }\n get promise() {\n return this.#retryer?.promise;\n }\n setOptions(options) {\n this.options = { ...this.#defaultOptions, ...options };\n if (options?._type) {\n this.#queryType = options._type;\n }\n this.updateGcTime(this.options.gcTime);\n if (this.state && this.state.data === void 0) {\n const defaultState = getDefaultState(this.options);\n if (defaultState.data !== void 0) {\n this.setState(\n successState(defaultState.data, defaultState.dataUpdatedAt)\n );\n this.#initialState = defaultState;\n }\n }\n }\n optionalRemove() {\n if (!this.observers.length && this.state.fetchStatus === \"idle\") {\n this.#cache.remove(this);\n }\n }\n setData(newData, options) {\n const data = replaceData(this.state.data, newData, this.options);\n this.#dispatch({\n data,\n type: \"success\",\n dataUpdatedAt: options?.updatedAt,\n manual: options?.manual\n });\n return data;\n }\n setState(state) {\n this.#dispatch({ type: \"setState\", state });\n }\n cancel(options) {\n const promise = this.#retryer?.promise;\n this.#retryer?.cancel(options);\n return promise ? promise.then(noop).catch(noop) : Promise.resolve();\n }\n destroy() {\n super.destroy();\n this.cancel({ silent: true });\n }\n get resetState() {\n return this.#initialState;\n }\n reset() {\n this.destroy();\n this.setState(this.resetState);\n }\n isActive() {\n return this.observers.some(\n (observer) => resolveQueryBoolean(observer.options.enabled, this) !== false\n );\n }\n isDisabled() {\n if (this.getObserversCount() > 0) {\n return !this.isActive();\n }\n return this.options.queryFn === skipToken || !this.isFetched();\n }\n isFetched() {\n return this.state.dataUpdateCount + this.state.errorUpdateCount > 0;\n }\n isStatic() {\n if (this.getObserversCount() > 0) {\n return this.observers.some(\n (observer) => resolveStaleTime(observer.options.staleTime, this) === \"static\"\n );\n }\n return false;\n }\n isStale() {\n if (this.getObserversCount() > 0) {\n return this.observers.some(\n (observer) => observer.getCurrentResult().isStale\n );\n }\n return this.state.data === void 0 || this.state.isInvalidated;\n }\n isStaleByTime(staleTime = 0) {\n if (this.state.data === void 0) {\n return true;\n }\n if (staleTime === \"static\") {\n return false;\n }\n if (this.state.isInvalidated) {\n return true;\n }\n return !timeUntilStale(this.state.dataUpdatedAt, staleTime);\n }\n onFocus() {\n const observer = this.observers.find((x) => x.shouldFetchOnWindowFocus());\n observer?.refetch({ cancelRefetch: false });\n this.#retryer?.continue();\n }\n onOnline() {\n const observer = this.observers.find((x) => x.shouldFetchOnReconnect());\n observer?.refetch({ cancelRefetch: false });\n this.#retryer?.continue();\n }\n addObserver(observer) {\n if (!this.observers.includes(observer)) {\n this.observers.push(observer);\n this.clearGcTimeout();\n this.#cache.notify({ type: \"observerAdded\", query: this, observer });\n }\n }\n removeObserver(observer) {\n if (this.observers.includes(observer)) {\n this.observers = this.observers.filter((x) => x !== observer);\n if (!this.observers.length) {\n if (this.#retryer) {\n if (this.#abortSignalConsumed || this.#isInitialPausedFetch()) {\n this.#retryer.cancel({ revert: true });\n } else {\n this.#retryer.cancelRetry();\n }\n }\n this.scheduleGc();\n }\n this.#cache.notify({ type: \"observerRemoved\", query: this, observer });\n }\n }\n getObserversCount() {\n return this.observers.length;\n }\n #isInitialPausedFetch() {\n return this.state.fetchStatus === \"paused\" && this.state.status === \"pending\";\n }\n invalidate() {\n if (!this.state.isInvalidated) {\n this.#dispatch({ type: \"invalidate\" });\n }\n }\n async fetch(options, fetchOptions) {\n if (this.state.fetchStatus !== \"idle\" && // If the promise in the retryer is already rejected, we have to definitely\n // re-start the fetch; there is a chance that the query is still in a\n // pending state when that happens\n this.#retryer?.status() !== \"rejected\") {\n if (this.state.data !== void 0 && fetchOptions?.cancelRefetch) {\n this.cancel({ silent: true });\n } else if (this.#retryer) {\n this.#retryer.continueRetry();\n return this.#retryer.promise;\n }\n }\n if (options) {\n this.setOptions(options);\n }\n if (!this.options.queryFn) {\n const observer = this.observers.find((x) => x.options.queryFn);\n if (observer) {\n this.setOptions(observer.options);\n }\n }\n if (process.env.NODE_ENV !== \"production\") {\n if (!Array.isArray(this.options.queryKey)) {\n console.error(\n `As of v4, queryKey needs to be an Array. If you are using a string like 'repoData', please change it to an Array, e.g. ['repoData']`\n );\n }\n }\n const abortController = new AbortController();\n const addSignalProperty = (object) => {\n Object.defineProperty(object, \"signal\", {\n enumerable: true,\n get: () => {\n this.#abortSignalConsumed = true;\n return abortController.signal;\n }\n });\n };\n const fetchFn = () => {\n const queryFn = ensureQueryFn(this.options, fetchOptions);\n const createQueryFnContext = () => {\n const queryFnContext2 = {\n client: this.#client,\n queryKey: this.queryKey,\n meta: this.meta\n };\n addSignalProperty(queryFnContext2);\n return queryFnContext2;\n };\n const queryFnContext = createQueryFnContext();\n this.#abortSignalConsumed = false;\n if (this.options.persister) {\n return this.options.persister(\n queryFn,\n queryFnContext,\n this\n );\n }\n return queryFn(queryFnContext);\n };\n const createFetchContext = () => {\n const context2 = {\n fetchOptions,\n options: this.options,\n queryKey: this.queryKey,\n client: this.#client,\n state: this.state,\n fetchFn\n };\n addSignalProperty(context2);\n return context2;\n };\n const context = createFetchContext();\n const behavior = this.#queryType === \"infinite\" ? infiniteQueryBehavior(\n this.options.pages\n ) : this.options.behavior;\n behavior?.onFetch(context, this);\n this.#revertState = this.state;\n if (this.state.fetchStatus === \"idle\" || this.state.fetchMeta !== context.fetchOptions?.meta) {\n this.#dispatch({ type: \"fetch\", meta: context.fetchOptions?.meta });\n }\n this.#retryer = createRetryer({\n initialPromise: fetchOptions?.initialPromise,\n fn: context.fetchFn,\n onCancel: (error) => {\n if (error instanceof CancelledError && error.revert) {\n this.setState({\n ...this.#revertState,\n fetchStatus: \"idle\"\n });\n }\n abortController.abort();\n },\n onFail: (failureCount, error) => {\n this.#dispatch({ type: \"failed\", failureCount, error });\n },\n onPause: () => {\n this.#dispatch({ type: \"pause\" });\n },\n onContinue: () => {\n this.#dispatch({ type: \"continue\" });\n },\n retry: context.options.retry,\n retryDelay: context.options.retryDelay,\n networkMode: context.options.networkMode,\n canRun: () => true\n });\n try {\n const data = await this.#retryer.start();\n if (data === void 0) {\n if (process.env.NODE_ENV !== \"production\") {\n console.error(\n `Query data cannot be undefined. Please make sure to return a value other than undefined from your query function. Affected query key: ${this.queryHash}`\n );\n }\n throw new Error(`${this.queryHash} data is undefined`);\n }\n this.setData(data);\n this.#cache.config.onSuccess?.(data, this);\n this.#cache.config.onSettled?.(\n data,\n this.state.error,\n this\n );\n return data;\n } catch (error) {\n if (error instanceof CancelledError) {\n if (error.silent) {\n return this.#retryer.promise;\n } else if (error.revert) {\n if (this.state.data === void 0) {\n throw error;\n }\n return this.state.data;\n }\n }\n this.#dispatch({\n type: \"error\",\n error\n });\n this.#cache.config.onError?.(\n error,\n this\n );\n this.#cache.config.onSettled?.(\n this.state.data,\n error,\n this\n );\n throw error;\n } finally {\n this.scheduleGc();\n }\n }\n #dispatch(action) {\n const reducer = (state) => {\n switch (action.type) {\n case \"failed\":\n return {\n ...state,\n fetchFailureCount: action.failureCount,\n fetchFailureReason: action.error\n };\n case \"pause\":\n return {\n ...state,\n fetchStatus: \"paused\"\n };\n case \"continue\":\n return {\n ...state,\n fetchStatus: \"fetching\"\n };\n case \"fetch\":\n return {\n ...state,\n ...fetchState(state.data, this.options),\n fetchMeta: action.meta ?? null\n };\n case \"success\":\n const newState = {\n ...state,\n ...successState(action.data, action.dataUpdatedAt),\n dataUpdateCount: state.dataUpdateCount + 1,\n ...!action.manual && {\n fetchStatus: \"idle\",\n fetchFailureCount: 0,\n fetchFailureReason: null\n }\n };\n this.#revertState = action.manual ? newState : void 0;\n return newState;\n case \"error\":\n const error = action.error;\n return {\n ...state,\n error,\n errorUpdateCount: state.errorUpdateCount + 1,\n errorUpdatedAt: Date.now(),\n fetchFailureCount: state.fetchFailureCount + 1,\n fetchFailureReason: error,\n fetchStatus: \"idle\",\n status: \"error\",\n // flag existing data as invalidated if we get a background error\n // note that \"no data\" always means stale so we can set unconditionally here\n isInvalidated: true\n };\n case \"invalidate\":\n return {\n ...state,\n isInvalidated: true\n };\n case \"setState\":\n return {\n ...state,\n ...action.state\n };\n }\n };\n this.state = reducer(this.state);\n notifyManager.batch(() => {\n this.observers.forEach((observer) => {\n observer.onQueryUpdate();\n });\n this.#cache.notify({ query: this, type: \"updated\", action });\n });\n }\n};\nfunction fetchState(data, options) {\n return {\n fetchFailureCount: 0,\n fetchFailureReason: null,\n fetchStatus: canFetch(options.networkMode) ? \"fetching\" : \"paused\",\n ...data === void 0 && {\n error: null,\n status: \"pending\"\n }\n };\n}\nfunction successState(data, dataUpdatedAt) {\n return {\n data,\n dataUpdatedAt: dataUpdatedAt ?? Date.now(),\n error: null,\n isInvalidated: false,\n status: \"success\"\n };\n}\nfunction getDefaultState(options) {\n const data = typeof options.initialData === \"function\" ? options.initialData() : options.initialData;\n const hasData = data !== void 0;\n const initialDataUpdatedAt = hasData ? typeof options.initialDataUpdatedAt === \"function\" ? options.initialDataUpdatedAt() : options.initialDataUpdatedAt : 0;\n return {\n data,\n dataUpdateCount: 0,\n dataUpdatedAt: hasData ? initialDataUpdatedAt ?? Date.now() : 0,\n error: null,\n errorUpdateCount: 0,\n errorUpdatedAt: 0,\n fetchFailureCount: 0,\n fetchFailureReason: null,\n fetchMeta: null,\n isInvalidated: false,\n status: hasData ? \"success\" : \"pending\",\n fetchStatus: \"idle\"\n };\n}\nexport {\n Query,\n fetchState\n};\n//# sourceMappingURL=query.js.map","// src/queryObserver.ts\nimport { focusManager } from \"./focusManager.js\";\nimport { environmentManager } from \"./environmentManager.js\";\nimport { notifyManager } from \"./notifyManager.js\";\nimport { fetchState } from \"./query.js\";\nimport { Subscribable } from \"./subscribable.js\";\nimport { pendingThenable } from \"./thenable.js\";\nimport {\n isValidTimeout,\n noop,\n replaceData,\n resolveQueryBoolean,\n resolveStaleTime,\n shallowEqualObjects,\n timeUntilStale\n} from \"./utils.js\";\nimport { timeoutManager } from \"./timeoutManager.js\";\nvar QueryObserver = class extends Subscribable {\n constructor(client, options) {\n super();\n this.options = options;\n this.#client = client;\n this.#selectError = null;\n this.#currentThenable = pendingThenable();\n this.bindMethods();\n this.setOptions(options);\n }\n #client;\n #currentQuery = void 0;\n #currentQueryInitialState = void 0;\n #currentResult = void 0;\n #currentResultState;\n #currentResultOptions;\n #currentThenable;\n #selectError;\n #selectFn;\n #selectResult;\n // This property keeps track of the last query with defined data.\n // It will be used to pass the previous data and query to the placeholder function between renders.\n #lastQueryWithDefinedData;\n #staleTimeoutId;\n #refetchIntervalId;\n #currentRefetchInterval;\n #trackedProps = /* @__PURE__ */ new Set();\n bindMethods() {\n this.refetch = this.refetch.bind(this);\n }\n onSubscribe() {\n if (this.listeners.size === 1) {\n this.#currentQuery.addObserver(this);\n if (shouldFetchOnMount(this.#currentQuery, this.options)) {\n this.#executeFetch();\n } else {\n this.updateResult();\n }\n this.#updateTimers();\n }\n }\n onUnsubscribe() {\n if (!this.hasListeners()) {\n this.destroy();\n }\n }\n shouldFetchOnReconnect() {\n return shouldFetchOn(\n this.#currentQuery,\n this.options,\n this.options.refetchOnReconnect\n );\n }\n shouldFetchOnWindowFocus() {\n return shouldFetchOn(\n this.#currentQuery,\n this.options,\n this.options.refetchOnWindowFocus\n );\n }\n destroy() {\n this.listeners = /* @__PURE__ */ new Set();\n this.#clearStaleTimeout();\n this.#clearRefetchInterval();\n this.#currentQuery.removeObserver(this);\n }\n setOptions(options) {\n const prevOptions = this.options;\n const prevQuery = this.#currentQuery;\n this.options = this.#client.defaultQueryOptions(options);\n if (this.options.enabled !== void 0 && typeof this.options.enabled !== \"boolean\" && typeof this.options.enabled !== \"function\" && typeof resolveQueryBoolean(this.options.enabled, this.#currentQuery) !== \"boolean\") {\n throw new Error(\n \"Expected enabled to be a boolean or a callback that returns a boolean\"\n );\n }\n this.#updateQuery();\n this.#currentQuery.setOptions(this.options);\n if (prevOptions._defaulted && !shallowEqualObjects(this.options, prevOptions)) {\n this.#client.getQueryCache().notify({\n type: \"observerOptionsUpdated\",\n query: this.#currentQuery,\n observer: this\n });\n }\n const mounted = this.hasListeners();\n if (mounted && shouldFetchOptionally(\n this.#currentQuery,\n prevQuery,\n this.options,\n prevOptions\n )) {\n this.#executeFetch();\n }\n this.updateResult();\n if (mounted && (this.#currentQuery !== prevQuery || resolveQueryBoolean(this.options.enabled, this.#currentQuery) !== resolveQueryBoolean(prevOptions.enabled, this.#currentQuery) || resolveStaleTime(this.options.staleTime, this.#currentQuery) !== resolveStaleTime(prevOptions.staleTime, this.#currentQuery))) {\n this.#updateStaleTimeout();\n }\n const nextRefetchInterval = this.#computeRefetchInterval();\n if (mounted && (this.#currentQuery !== prevQuery || resolveQueryBoolean(this.options.enabled, this.#currentQuery) !== resolveQueryBoolean(prevOptions.enabled, this.#currentQuery) || nextRefetchInterval !== this.#currentRefetchInterval)) {\n this.#updateRefetchInterval(nextRefetchInterval);\n }\n }\n getOptimisticResult(options) {\n const query = this.#client.getQueryCache().build(this.#client, options);\n const result = this.createResult(query, options);\n if (shouldAssignObserverCurrentProperties(this, result)) {\n this.#currentResult = result;\n this.#currentResultOptions = this.options;\n this.#currentResultState = this.#currentQuery.state;\n }\n return result;\n }\n getCurrentResult() {\n return this.#currentResult;\n }\n trackResult(result, onPropTracked) {\n return new Proxy(result, {\n get: (target, key) => {\n this.trackProp(key);\n onPropTracked?.(key);\n if (key === \"promise\") {\n this.trackProp(\"data\");\n if (!this.options.experimental_prefetchInRender && this.#currentThenable.status === \"pending\") {\n this.#currentThenable.reject(\n new Error(\n \"experimental_prefetchInRender feature flag is not enabled\"\n )\n );\n }\n }\n return Reflect.get(target, key);\n }\n });\n }\n trackProp(key) {\n this.#trackedProps.add(key);\n }\n getCurrentQuery() {\n return this.#currentQuery;\n }\n refetch({ ...options } = {}) {\n return this.fetch({\n ...options\n });\n }\n fetchOptimistic(options) {\n const defaultedOptions = this.#client.defaultQueryOptions(options);\n const query = this.#client.getQueryCache().build(this.#client, defaultedOptions);\n return query.fetch().then(() => this.createResult(query, defaultedOptions));\n }\n fetch(fetchOptions) {\n return this.#executeFetch({\n ...fetchOptions,\n cancelRefetch: fetchOptions.cancelRefetch ?? true\n }).then(() => {\n this.updateResult();\n return this.#currentResult;\n });\n }\n #executeFetch(fetchOptions) {\n this.#updateQuery();\n let promise = this.#currentQuery.fetch(\n this.options,\n fetchOptions\n );\n if (!fetchOptions?.throwOnError) {\n promise = promise.catch(noop);\n }\n return promise;\n }\n #updateStaleTimeout() {\n this.#clearStaleTimeout();\n const staleTime = resolveStaleTime(\n this.options.staleTime,\n this.#currentQuery\n );\n if (environmentManager.isServer() || this.#currentResult.isStale || !isValidTimeout(staleTime)) {\n return;\n }\n const time = timeUntilStale(this.#currentResult.dataUpdatedAt, staleTime);\n const timeout = time + 1;\n this.#staleTimeoutId = timeoutManager.setTimeout(() => {\n if (!this.#currentResult.isStale) {\n this.updateResult();\n }\n }, timeout);\n }\n #computeRefetchInterval() {\n return (typeof this.options.refetchInterval === \"function\" ? this.options.refetchInterval(this.#currentQuery) : this.options.refetchInterval) ?? false;\n }\n #updateRefetchInterval(nextInterval) {\n this.#clearRefetchInterval();\n this.#currentRefetchInterval = nextInterval;\n if (environmentManager.isServer() || resolveQueryBoolean(this.options.enabled, this.#currentQuery) === false || !isValidTimeout(this.#currentRefetchInterval) || this.#currentRefetchInterval === 0) {\n return;\n }\n this.#refetchIntervalId = timeoutManager.setInterval(() => {\n if (this.options.refetchIntervalInBackground || focusManager.isFocused()) {\n this.#executeFetch();\n }\n }, this.#currentRefetchInterval);\n }\n #updateTimers() {\n this.#updateStaleTimeout();\n this.#updateRefetchInterval(this.#computeRefetchInterval());\n }\n #clearStaleTimeout() {\n if (this.#staleTimeoutId !== void 0) {\n timeoutManager.clearTimeout(this.#staleTimeoutId);\n this.#staleTimeoutId = void 0;\n }\n }\n #clearRefetchInterval() {\n if (this.#refetchIntervalId !== void 0) {\n timeoutManager.clearInterval(this.#refetchIntervalId);\n this.#refetchIntervalId = void 0;\n }\n }\n createResult(query, options) {\n const prevQuery = this.#currentQuery;\n const prevOptions = this.options;\n const prevResult = this.#currentResult;\n const prevResultState = this.#currentResultState;\n const prevResultOptions = this.#currentResultOptions;\n const queryChange = query !== prevQuery;\n const queryInitialState = queryChange ? query.state : this.#currentQueryInitialState;\n const { state } = query;\n let newState = { ...state };\n let isPlaceholderData = false;\n let data;\n if (options._optimisticResults) {\n const mounted = this.hasListeners();\n const fetchOnMount = !mounted && shouldFetchOnMount(query, options);\n const fetchOptionally = mounted && shouldFetchOptionally(query, prevQuery, options, prevOptions);\n if (fetchOnMount || fetchOptionally) {\n newState = {\n ...newState,\n ...fetchState(state.data, query.options)\n };\n }\n if (options._optimisticResults === \"isRestoring\") {\n newState.fetchStatus = \"idle\";\n }\n }\n let { error, errorUpdatedAt, status } = newState;\n data = newState.data;\n let skipSelect = false;\n if (options.placeholderData !== void 0 && data === void 0 && status === \"pending\") {\n let placeholderData;\n if (prevResult?.isPlaceholderData && options.placeholderData === prevResultOptions?.placeholderData) {\n placeholderData = prevResult.data;\n skipSelect = true;\n } else {\n placeholderData = typeof options.placeholderData === \"function\" ? options.placeholderData(\n this.#lastQueryWithDefinedData?.state.data,\n this.#lastQueryWithDefinedData\n ) : options.placeholderData;\n }\n if (placeholderData !== void 0) {\n status = \"success\";\n data = replaceData(\n prevResult?.data,\n placeholderData,\n options\n );\n isPlaceholderData = true;\n }\n }\n if (options.select && data !== void 0 && !skipSelect) {\n if (prevResult && data === prevResultState?.data && options.select === this.#selectFn) {\n data = this.#selectResult;\n } else {\n try {\n this.#selectFn = options.select;\n data = options.select(data);\n data = replaceData(prevResult?.data, data, options);\n this.#selectResult = data;\n this.#selectError = null;\n } catch (selectError) {\n this.#selectError = selectError;\n }\n }\n }\n if (this.#selectError) {\n error = this.#selectError;\n data = this.#selectResult;\n errorUpdatedAt = Date.now();\n status = \"error\";\n }\n const isFetching = newState.fetchStatus === \"fetching\";\n const isPending = status === \"pending\";\n const isError = status === \"error\";\n const isLoading = isPending && isFetching;\n const hasData = data !== void 0;\n const result = {\n status,\n fetchStatus: newState.fetchStatus,\n isPending,\n isSuccess: status === \"success\",\n isError,\n isInitialLoading: isLoading,\n isLoading,\n data,\n dataUpdatedAt: newState.dataUpdatedAt,\n error,\n errorUpdatedAt,\n failureCount: newState.fetchFailureCount,\n failureReason: newState.fetchFailureReason,\n errorUpdateCount: newState.errorUpdateCount,\n isFetched: query.isFetched(),\n isFetchedAfterMount: newState.dataUpdateCount > queryInitialState.dataUpdateCount || newState.errorUpdateCount > queryInitialState.errorUpdateCount,\n isFetching,\n isRefetching: isFetching && !isPending,\n isLoadingError: isError && !hasData,\n isPaused: newState.fetchStatus === \"paused\",\n isPlaceholderData,\n isRefetchError: isError && hasData,\n isStale: isStale(query, options),\n refetch: this.refetch,\n promise: this.#currentThenable,\n isEnabled: resolveQueryBoolean(options.enabled, query) !== false\n };\n const nextResult = result;\n if (this.options.experimental_prefetchInRender) {\n const hasResultData = nextResult.data !== void 0;\n const isErrorWithoutData = nextResult.status === \"error\" && !hasResultData;\n const finalizeThenableIfPossible = (thenable) => {\n if (isErrorWithoutData) {\n thenable.reject(nextResult.error);\n } else if (hasResultData) {\n thenable.resolve(nextResult.data);\n }\n };\n const recreateThenable = () => {\n const pending = this.#currentThenable = nextResult.promise = pendingThenable();\n finalizeThenableIfPossible(pending);\n };\n const prevThenable = this.#currentThenable;\n switch (prevThenable.status) {\n case \"pending\":\n if (query.queryHash === prevQuery.queryHash) {\n finalizeThenableIfPossible(prevThenable);\n }\n break;\n case \"fulfilled\":\n if (isErrorWithoutData || nextResult.data !== prevThenable.value) {\n recreateThenable();\n }\n break;\n case \"rejected\":\n if (!isErrorWithoutData || nextResult.error !== prevThenable.reason) {\n recreateThenable();\n }\n break;\n }\n }\n return nextResult;\n }\n updateResult() {\n const prevResult = this.#currentResult;\n const nextResult = this.createResult(this.#currentQuery, this.options);\n this.#currentResultState = this.#currentQuery.state;\n this.#currentResultOptions = this.options;\n if (this.#currentResultState.data !== void 0) {\n this.#lastQueryWithDefinedData = this.#currentQuery;\n }\n if (shallowEqualObjects(nextResult, prevResult)) {\n return;\n }\n this.#currentResult = nextResult;\n const shouldNotifyListeners = () => {\n if (!prevResult) {\n return true;\n }\n const { notifyOnChangeProps } = this.options;\n const notifyOnChangePropsValue = typeof notifyOnChangeProps === \"function\" ? notifyOnChangeProps() : notifyOnChangeProps;\n if (notifyOnChangePropsValue === \"all\" || !notifyOnChangePropsValue && !this.#trackedProps.size) {\n return true;\n }\n const includedProps = new Set(\n notifyOnChangePropsValue ?? this.#trackedProps\n );\n if (this.options.throwOnError) {\n includedProps.add(\"error\");\n }\n return Object.keys(this.#currentResult).some((key) => {\n const typedKey = key;\n const changed = this.#currentResult[typedKey] !== prevResult[typedKey];\n return changed && includedProps.has(typedKey);\n });\n };\n this.#notify({ listeners: shouldNotifyListeners() });\n }\n #updateQuery() {\n const query = this.#client.getQueryCache().build(this.#client, this.options);\n if (query === this.#currentQuery) {\n return;\n }\n const prevQuery = this.#currentQuery;\n this.#currentQuery = query;\n this.#currentQueryInitialState = query.state;\n if (this.hasListeners()) {\n prevQuery?.removeObserver(this);\n query.addObserver(this);\n }\n }\n onQueryUpdate() {\n this.updateResult();\n if (this.hasListeners()) {\n this.#updateTimers();\n }\n }\n #notify(notifyOptions) {\n notifyManager.batch(() => {\n if (notifyOptions.listeners) {\n this.listeners.forEach((listener) => {\n listener(this.#currentResult);\n });\n }\n this.#client.getQueryCache().notify({\n query: this.#currentQuery,\n type: \"observerResultsUpdated\"\n });\n });\n }\n};\nfunction shouldLoadOnMount(query, options) {\n return resolveQueryBoolean(options.enabled, query) !== false && query.state.data === void 0 && !(query.state.status === \"error\" && resolveQueryBoolean(options.retryOnMount, query) === false);\n}\nfunction shouldFetchOnMount(query, options) {\n return shouldLoadOnMount(query, options) || query.state.data !== void 0 && shouldFetchOn(query, options, options.refetchOnMount);\n}\nfunction shouldFetchOn(query, options, field) {\n if (resolveQueryBoolean(options.enabled, query) !== false && resolveStaleTime(options.staleTime, query) !== \"static\") {\n const value = typeof field === \"function\" ? field(query) : field;\n return value === \"always\" || value !== false && isStale(query, options);\n }\n return false;\n}\nfunction shouldFetchOptionally(query, prevQuery, options, prevOptions) {\n return (query !== prevQuery || resolveQueryBoolean(prevOptions.enabled, query) === false) && (!options.suspense || query.state.status !== \"error\") && isStale(query, options);\n}\nfunction isStale(query, options) {\n return resolveQueryBoolean(options.enabled, query) !== false && query.isStaleByTime(resolveStaleTime(options.staleTime, query));\n}\nfunction shouldAssignObserverCurrentProperties(observer, optimisticResult) {\n if (!shallowEqualObjects(observer.getCurrentResult(), optimisticResult)) {\n return true;\n }\n return false;\n}\nexport {\n QueryObserver\n};\n//# sourceMappingURL=queryObserver.js.map","\"use client\";\n\n// src/QueryClientProvider.tsx\nimport * as React from \"react\";\nimport { jsx } from \"react/jsx-runtime\";\nvar QueryClientContext = React.createContext(\n void 0\n);\nvar useQueryClient = (queryClient) => {\n const client = React.useContext(QueryClientContext);\n if (queryClient) {\n return queryClient;\n }\n if (!client) {\n throw new Error(\"No QueryClient set, use QueryClientProvider to set one\");\n }\n return client;\n};\nvar QueryClientProvider = ({\n client,\n children\n}) => {\n React.useEffect(() => {\n client.mount();\n return () => {\n client.unmount();\n };\n }, [client]);\n return /* @__PURE__ */ jsx(QueryClientContext.Provider, { value: client, children });\n};\nexport {\n QueryClientContext,\n QueryClientProvider,\n useQueryClient\n};\n//# sourceMappingURL=QueryClientProvider.js.map","\"use client\";\n\n// src/IsRestoringProvider.ts\nimport * as React from \"react\";\nvar IsRestoringContext = React.createContext(false);\nvar useIsRestoring = () => React.useContext(IsRestoringContext);\nvar IsRestoringProvider = IsRestoringContext.Provider;\nexport {\n IsRestoringProvider,\n useIsRestoring\n};\n//# sourceMappingURL=IsRestoringProvider.js.map","\"use client\";\n\n// src/QueryErrorResetBoundary.tsx\nimport * as React from \"react\";\nimport { jsx } from \"react/jsx-runtime\";\nfunction createValue() {\n let isReset = false;\n return {\n clearReset: () => {\n isReset = false;\n },\n reset: () => {\n isReset = true;\n },\n isReset: () => {\n return isReset;\n }\n };\n}\nvar QueryErrorResetBoundaryContext = React.createContext(createValue());\nvar useQueryErrorResetBoundary = () => React.useContext(QueryErrorResetBoundaryContext);\nvar QueryErrorResetBoundary = ({\n children\n}) => {\n const [value] = React.useState(() => createValue());\n return /* @__PURE__ */ jsx(QueryErrorResetBoundaryContext.Provider, { value, children: typeof children === \"function\" ? children(value) : children });\n};\nexport {\n QueryErrorResetBoundary,\n useQueryErrorResetBoundary\n};\n//# sourceMappingURL=QueryErrorResetBoundary.js.map","\"use client\";\n\n// src/errorBoundaryUtils.ts\nimport * as React from \"react\";\nimport { shouldThrowError } from \"@tanstack/query-core\";\nvar ensurePreventErrorBoundaryRetry = (options, errorResetBoundary, query) => {\n const throwOnError = query?.state.error && typeof options.throwOnError === \"function\" ? shouldThrowError(options.throwOnError, [query.state.error, query]) : options.throwOnError;\n if (options.suspense || options.experimental_prefetchInRender || throwOnError) {\n if (!errorResetBoundary.isReset()) {\n options.retryOnMount = false;\n }\n }\n};\nvar useClearResetErrorBoundary = (errorResetBoundary) => {\n React.useEffect(() => {\n errorResetBoundary.clearReset();\n }, [errorResetBoundary]);\n};\nvar getHasError = ({\n result,\n errorResetBoundary,\n throwOnError,\n query,\n suspense\n}) => {\n return result.isError && !errorResetBoundary.isReset() && !result.isFetching && query && (suspense && result.data === void 0 || shouldThrowError(throwOnError, [result.error, query]));\n};\nexport {\n ensurePreventErrorBoundaryRetry,\n getHasError,\n useClearResetErrorBoundary\n};\n//# sourceMappingURL=errorBoundaryUtils.js.map","// src/suspense.ts\nvar defaultThrowOnError = (_error, query) => query.state.data === void 0;\nvar ensureSuspenseTimers = (defaultedOptions) => {\n if (defaultedOptions.suspense) {\n const MIN_SUSPENSE_TIME_MS = 1e3;\n const clamp = (value) => value === \"static\" ? value : Math.max(value ?? MIN_SUSPENSE_TIME_MS, MIN_SUSPENSE_TIME_MS);\n const originalStaleTime = defaultedOptions.staleTime;\n defaultedOptions.staleTime = typeof originalStaleTime === \"function\" ? (...args) => clamp(originalStaleTime(...args)) : clamp(originalStaleTime);\n if (typeof defaultedOptions.gcTime === \"number\") {\n defaultedOptions.gcTime = Math.max(\n defaultedOptions.gcTime,\n MIN_SUSPENSE_TIME_MS\n );\n }\n }\n};\nvar willFetch = (result, isRestoring) => result.isLoading && result.isFetching && !isRestoring;\nvar shouldSuspend = (defaultedOptions, result) => defaultedOptions?.suspense && result.isPending;\nvar fetchOptimistic = (defaultedOptions, observer, errorResetBoundary) => observer.fetchOptimistic(defaultedOptions).catch(() => {\n errorResetBoundary.clearReset();\n});\nexport {\n defaultThrowOnError,\n ensureSuspenseTimers,\n fetchOptimistic,\n shouldSuspend,\n willFetch\n};\n//# sourceMappingURL=suspense.js.map","\"use client\";\n\n// src/useBaseQuery.ts\nimport * as React from \"react\";\nimport { environmentManager, noop, notifyManager } from \"@tanstack/query-core\";\nimport { useQueryClient } from \"./QueryClientProvider.js\";\nimport { useQueryErrorResetBoundary } from \"./QueryErrorResetBoundary.js\";\nimport {\n ensurePreventErrorBoundaryRetry,\n getHasError,\n useClearResetErrorBoundary\n} from \"./errorBoundaryUtils.js\";\nimport { useIsRestoring } from \"./IsRestoringProvider.js\";\nimport {\n ensureSuspenseTimers,\n fetchOptimistic,\n shouldSuspend,\n willFetch\n} from \"./suspense.js\";\nfunction useBaseQuery(options, Observer, queryClient) {\n if (process.env.NODE_ENV !== \"production\") {\n if (typeof options !== \"object\" || Array.isArray(options)) {\n throw new Error(\n 'Bad argument type. Starting with v5, only the \"Object\" form is allowed when calling query related functions. Please use the error stack to find the culprit call. More info here: https://tanstack.com/query/latest/docs/react/guides/migrating-to-v5#supports-a-single-signature-one-object'\n );\n }\n }\n const isRestoring = useIsRestoring();\n const errorResetBoundary = useQueryErrorResetBoundary();\n const client = useQueryClient(queryClient);\n const defaultedOptions = client.defaultQueryOptions(options);\n client.getDefaultOptions().queries?._experimental_beforeQuery?.(\n defaultedOptions\n );\n const query = client.getQueryCache().get(defaultedOptions.queryHash);\n if (process.env.NODE_ENV !== \"production\") {\n if (!defaultedOptions.queryFn) {\n console.error(\n `[${defaultedOptions.queryHash}]: No queryFn was passed as an option, and no default queryFn was found. The queryFn parameter is only optional when using a default queryFn. More info here: https://tanstack.com/query/latest/docs/framework/react/guides/default-query-function`\n );\n }\n }\n const subscribed = options.subscribed !== false;\n defaultedOptions._optimisticResults = isRestoring ? \"isRestoring\" : subscribed ? \"optimistic\" : void 0;\n ensureSuspenseTimers(defaultedOptions);\n ensurePreventErrorBoundaryRetry(defaultedOptions, errorResetBoundary, query);\n useClearResetErrorBoundary(errorResetBoundary);\n const isNewCacheEntry = !client.getQueryCache().get(defaultedOptions.queryHash);\n const [observer] = React.useState(\n () => new Observer(\n client,\n defaultedOptions\n )\n );\n const result = observer.getOptimisticResult(defaultedOptions);\n const shouldSubscribe = !isRestoring && subscribed;\n React.useSyncExternalStore(\n React.useCallback(\n (onStoreChange) => {\n const unsubscribe = shouldSubscribe ? observer.subscribe(notifyManager.batchCalls(onStoreChange)) : noop;\n observer.updateResult();\n return unsubscribe;\n },\n [observer, shouldSubscribe]\n ),\n () => observer.getCurrentResult(),\n () => observer.getCurrentResult()\n );\n React.useEffect(() => {\n observer.setOptions(defaultedOptions);\n }, [defaultedOptions, observer]);\n if (shouldSuspend(defaultedOptions, result)) {\n throw fetchOptimistic(defaultedOptions, observer, errorResetBoundary);\n }\n if (getHasError({\n result,\n errorResetBoundary,\n throwOnError: defaultedOptions.throwOnError,\n query,\n suspense: defaultedOptions.suspense\n })) {\n throw result.error;\n }\n ;\n client.getDefaultOptions().queries?._experimental_afterQuery?.(\n defaultedOptions,\n result\n );\n if (defaultedOptions.experimental_prefetchInRender && !environmentManager.isServer() && willFetch(result, isRestoring)) {\n const promise = isNewCacheEntry ? (\n // Fetch immediately on render in order to ensure `.promise` is resolved even if the component is unmounted\n fetchOptimistic(defaultedOptions, observer, errorResetBoundary)\n ) : (\n // subscribe to the \"cache promise\" so that we can finalize the currentThenable once data comes in\n query?.promise\n );\n promise?.catch(noop).finally(() => {\n observer.updateResult();\n });\n }\n return !defaultedOptions.notifyOnChangeProps ? observer.trackResult(result) : result;\n}\nexport {\n useBaseQuery\n};\n//# sourceMappingURL=useBaseQuery.js.map","\"use client\";\n\n// src/useSuspenseQuery.ts\nimport { QueryObserver, skipToken } from \"@tanstack/query-core\";\nimport { useBaseQuery } from \"./useBaseQuery.js\";\nimport { defaultThrowOnError } from \"./suspense.js\";\nfunction useSuspenseQuery(options, queryClient) {\n if (process.env.NODE_ENV !== \"production\") {\n if (options.queryFn === skipToken) {\n console.error(\"skipToken is not allowed for useSuspenseQuery\");\n }\n }\n return useBaseQuery(\n {\n ...options,\n enabled: true,\n suspense: true,\n throwOnError: defaultThrowOnError,\n placeholderData: void 0\n },\n QueryObserver,\n queryClient\n );\n}\nexport {\n useSuspenseQuery\n};\n//# sourceMappingURL=useSuspenseQuery.js.map","// src/queryOptions.ts\nfunction queryOptions(options) {\n return options;\n}\nexport {\n queryOptions\n};\n//# sourceMappingURL=queryOptions.js.map","\"use client\";\nimport * as React$1 from \"react\";\n/**\n* React.use if available (React 19+), undefined otherwise.\n* Use dynamic lookup to avoid Webpack compilation errors with React 18.\n*/\nvar reactUse = React$1[\"use\"];\nvar useLayoutEffect = typeof window !== \"undefined\" ? React$1.useLayoutEffect : React$1.useEffect;\n/**\n* Taken from https://www.developerway.com/posts/implementing-advanced-use-previous-hook#part3\n*/\nfunction usePrevious(value) {\n\tconst ref = React$1.useRef({\n\t\tvalue,\n\t\tprev: null\n\t});\n\tconst current = ref.current.value;\n\tif (value !== current) ref.current = {\n\t\tvalue,\n\t\tprev: current\n\t};\n\treturn ref.current.prev;\n}\n/**\n* React hook to wrap `IntersectionObserver`.\n*\n* This hook will create an `IntersectionObserver` and observe the ref passed to it.\n*\n* When the intersection changes, the callback will be called with the `IntersectionObserverEntry`.\n*\n* @param ref - The ref to observe\n* @param intersectionObserverOptions - The options to pass to the IntersectionObserver\n* @param options - The options to pass to the hook\n* @param callback - The callback to call when the intersection changes\n* @returns The IntersectionObserver instance\n* @example\n* ```tsx\n* const MyComponent = () => {\n* const ref = React.useRef<HTMLDivElement>(null)\n* useIntersectionObserver(\n* ref,\n* (entry) => { doSomething(entry) },\n* { rootMargin: '10px' },\n* { disabled: false }\n* )\n* return <div ref={ref} />\n* ```\n*/\nfunction useIntersectionObserver(ref, callback, intersectionObserverOptions = {}, options = {}) {\n\tReact$1.useEffect(() => {\n\t\tif (!ref.current || options.disabled || typeof IntersectionObserver !== \"function\") return;\n\t\tconst observer = new IntersectionObserver(([entry]) => {\n\t\t\tcallback(entry);\n\t\t}, intersectionObserverOptions);\n\t\tobserver.observe(ref.current);\n\t\treturn () => {\n\t\t\tobserver.disconnect();\n\t\t};\n\t}, [\n\t\tcallback,\n\t\tintersectionObserverOptions,\n\t\toptions.disabled,\n\t\tref\n\t]);\n}\n/**\n* React hook to take a `React.ForwardedRef` and returns a `ref` that can be used on a DOM element.\n*\n* @param ref - The forwarded ref\n* @returns The inner ref returned by `useRef`\n* @example\n* ```tsx\n* const MyComponent = React.forwardRef((props, ref) => {\n* const innerRef = useForwardedRef(ref)\n* return <div ref={innerRef} />\n* })\n* ```\n*/\nfunction useForwardedRef(ref) {\n\tconst innerRef = React$1.useRef(null);\n\tReact$1.useImperativeHandle(ref, () => innerRef.current, []);\n\treturn innerRef;\n}\n//#endregion\nexport { reactUse, useForwardedRef, useIntersectionObserver, useLayoutEffect, usePrevious };\n\n//# sourceMappingURL=utils.js.map","import { isServer } from \"@tanstack/router-core/isServer\";\n//#region src/utils.ts\n/**\n* Return the last element of an array.\n* Intended for non-empty arrays used within router internals.\n*/\nfunction last(arr) {\n\treturn arr[arr.length - 1];\n}\nfunction isFunction(d) {\n\treturn typeof d === \"function\";\n}\n/**\n* Apply a value-or-updater to a previous value.\n* Accepts either a literal value or a function of the previous value.\n*/\nfunction functionalUpdate(updater, previous) {\n\tif (isFunction(updater)) return updater(previous);\n\treturn updater;\n}\nconst hasOwn = Object.prototype.hasOwnProperty;\nconst isEnumerable = Object.prototype.propertyIsEnumerable;\nfunction hasKeys(obj) {\n\tfor (const key in obj) if (hasOwn.call(obj, key)) return true;\n\treturn false;\n}\nconst createNull = () => Object.create(null);\nconst nullReplaceEqualDeep = (prev, next) => replaceEqualDeep(prev, next, createNull);\n/**\n* This function returns `prev` if `_next` is deeply equal.\n* If not, it will replace any deeply equal children of `b` with those of `a`.\n* This can be used for structural sharing between immutable JSON values for example.\n* Do not use this with signals\n*/\nfunction replaceEqualDeep(prev, _next, _makeObj = () => ({}), _depth = 0) {\n\tif (isServer) return _next;\n\tif (prev === _next) return prev;\n\tif (_depth > 500) return _next;\n\tconst next = _next;\n\tconst array = isPlainArray(prev) && isPlainArray(next);\n\tif (!array && !(isPlainObject(prev) && isPlainObject(next))) return next;\n\tconst prevItems = array ? prev : getEnumerableOwnKeys(prev);\n\tif (!prevItems) return next;\n\tconst nextItems = array ? next : getEnumerableOwnKeys(next);\n\tif (!nextItems) return next;\n\tconst prevSize = prevItems.length;\n\tconst nextSize = nextItems.length;\n\tconst copy = array ? new Array(nextSize) : _makeObj();\n\tlet equalItems = 0;\n\tfor (let i = 0; i < nextSize; i++) {\n\t\tconst key = array ? i : nextItems[i];\n\t\tconst p = prev[key];\n\t\tconst n = next[key];\n\t\tif (p === n) {\n\t\t\tcopy[key] = p;\n\t\t\tif (array ? i < prevSize : hasOwn.call(prev, key)) equalItems++;\n\t\t\tcontinue;\n\t\t}\n\t\tif (p === null || n === null || typeof p !== \"object\" || typeof n !== \"object\") {\n\t\t\tcopy[key] = n;\n\t\t\tcontinue;\n\t\t}\n\t\tconst v = replaceEqualDeep(p, n, _makeObj, _depth + 1);\n\t\tcopy[key] = v;\n\t\tif (v === p) equalItems++;\n\t}\n\treturn prevSize === nextSize && equalItems === prevSize ? prev : copy;\n}\n/**\n* Equivalent to `Reflect.ownKeys`, but ensures that objects are \"clone-friendly\":\n* will return false if object has any non-enumerable properties.\n*\n* Optimized for the common case where objects have no symbol properties.\n*/\nfunction getEnumerableOwnKeys(o) {\n\tconst names = Object.getOwnPropertyNames(o);\n\tfor (const name of names) if (!isEnumerable.call(o, name)) return false;\n\tconst symbols = Object.getOwnPropertySymbols(o);\n\tif (symbols.length === 0) return names;\n\tconst keys = names;\n\tfor (const symbol of symbols) {\n\t\tif (!isEnumerable.call(o, symbol)) return false;\n\t\tkeys.push(symbol);\n\t}\n\treturn keys;\n}\nfunction isPlainObject(o) {\n\tif (!hasObjectPrototype(o)) return false;\n\tconst ctor = o.constructor;\n\tif (typeof ctor === \"undefined\") return true;\n\tconst prot = ctor.prototype;\n\tif (!hasObjectPrototype(prot)) return false;\n\tif (!prot.hasOwnProperty(\"isPrototypeOf\")) return false;\n\treturn true;\n}\nfunction hasObjectPrototype(o) {\n\treturn Object.prototype.toString.call(o) === \"[object Object]\";\n}\n/**\n* Check if a value is a \"plain\" array (no extra enumerable keys).\n*/\nfunction isPlainArray(value) {\n\treturn Array.isArray(value) && value.length === Object.keys(value).length;\n}\n/**\n* Perform a deep equality check with options for partial comparison and\n* ignoring `undefined` values. Optimized for router state comparisons.\n*/\nfunction deepEqual(a, b, opts) {\n\tif (a === b) return true;\n\tif (typeof a !== typeof b) return false;\n\tif (Array.isArray(a) && Array.isArray(b)) {\n\t\tif (a.length !== b.length) return false;\n\t\tfor (let i = 0, l = a.length; i < l; i++) if (!deepEqual(a[i], b[i], opts)) return false;\n\t\treturn true;\n\t}\n\tif (isPlainObject(a) && isPlainObject(b)) {\n\t\tconst ignoreUndefined = opts?.ignoreUndefined ?? true;\n\t\tif (opts?.partial) {\n\t\t\tfor (const k in b) if (!ignoreUndefined || b[k] !== void 0) {\n\t\t\t\tif (!deepEqual(a[k], b[k], opts)) return false;\n\t\t\t}\n\t\t\treturn true;\n\t\t}\n\t\tlet aCount = 0;\n\t\tif (!ignoreUndefined) aCount = Object.keys(a).length;\n\t\telse for (const k in a) if (a[k] !== void 0) aCount++;\n\t\tlet bCount = 0;\n\t\tfor (const k in b) if (!ignoreUndefined || b[k] !== void 0) {\n\t\t\tbCount++;\n\t\t\tif (bCount > aCount || !deepEqual(a[k], b[k], opts)) return false;\n\t\t}\n\t\treturn aCount === bCount;\n\t}\n\treturn false;\n}\n/**\n* Create a promise with exposed resolve/reject and status fields.\n* Useful for coordinating async router lifecycle operations.\n*/\nfunction createControlledPromise(onResolve) {\n\tlet resolveLoadPromise;\n\tlet rejectLoadPromise;\n\tconst controlledPromise = new Promise((resolve, reject) => {\n\t\tresolveLoadPromise = resolve;\n\t\trejectLoadPromise = reject;\n\t});\n\tcontrolledPromise.status = \"pending\";\n\tcontrolledPromise.resolve = (value) => {\n\t\tcontrolledPromise.status = \"resolved\";\n\t\tcontrolledPromise.value = value;\n\t\tresolveLoadPromise(value);\n\t\tonResolve?.(value);\n\t};\n\tcontrolledPromise.reject = (e) => {\n\t\tcontrolledPromise.status = \"rejected\";\n\t\trejectLoadPromise(e);\n\t};\n\treturn controlledPromise;\n}\n/**\n* Heuristically detect dynamic import \"module not found\" errors\n* across major browsers for lazy route component handling.\n*/\nfunction isModuleNotFoundError(error) {\n\tif (typeof error?.message !== \"string\") return false;\n\treturn error.message.startsWith(\"Failed to fetch dynamically imported module\") || error.message.startsWith(\"error loading dynamically imported module\") || error.message.startsWith(\"Importing a module script failed\");\n}\nfunction isPromise(value) {\n\treturn Boolean(value && typeof value === \"object\" && typeof value.then === \"function\");\n}\nfunction findLast(array, predicate) {\n\tfor (let i = array.length - 1; i >= 0; i--) {\n\t\tconst item = array[i];\n\t\tif (predicate(item)) return item;\n\t}\n}\n/**\n* Remove control characters that can cause open redirect vulnerabilities.\n* Characters like \\r (CR) and \\n (LF) can trick URL parsers into interpreting\n* paths like \"/\\r/evil.com\" as \"http://evil.com\".\n*/\nfunction sanitizePathSegment(segment) {\n\treturn segment.replace(/[\\x00-\\x1f\\x7f]/g, \"\");\n}\nfunction decodeSegment(segment) {\n\tlet decoded;\n\ttry {\n\t\tdecoded = decodeURI(segment);\n\t} catch {\n\t\tdecoded = segment.replaceAll(/%[0-9A-F]{2}/gi, (match) => {\n\t\t\ttry {\n\t\t\t\treturn decodeURI(match);\n\t\t\t} catch {\n\t\t\t\treturn match;\n\t\t\t}\n\t\t});\n\t}\n\treturn sanitizePathSegment(decoded);\n}\n/**\n* Default list of URL protocols to allow in links, redirects, and navigation.\n* Any absolute URL protocol not in this list is treated as dangerous by default.\n*/\nconst DEFAULT_PROTOCOL_ALLOWLIST = [\n\t\"http:\",\n\t\"https:\",\n\t\"mailto:\",\n\t\"tel:\"\n];\n/**\n* Check if a URL string uses a protocol that is not in the allowlist.\n* Returns true for blocked protocols like javascript:, blob:, data:, etc.\n*\n* The URL constructor correctly normalizes:\n* - Mixed case (JavaScript: → javascript:)\n* - Whitespace/control characters (java\\nscript: → javascript:)\n* - Leading whitespace\n*\n* For relative URLs (no protocol), returns false (safe).\n*\n* @param url - The URL string to check\n* @param allowlist - Set of protocols to allow\n* @returns true if the URL uses a protocol that is not allowed\n*/\nfunction isDangerousProtocol(url, allowlist) {\n\tif (!url) return false;\n\ttry {\n\t\tconst parsed = new URL(url);\n\t\treturn !allowlist.has(parsed.protocol);\n\t} catch {\n\t\treturn false;\n\t}\n}\nconst HTML_ESCAPE_LOOKUP = {\n\t\"&\": \"\\\\u0026\",\n\t\">\": \"\\\\u003e\",\n\t\"<\": \"\\\\u003c\",\n\t\"\\u2028\": \"\\\\u2028\",\n\t\"\\u2029\": \"\\\\u2029\"\n};\nconst HTML_ESCAPE_REGEX = /[&><\\u2028\\u2029]/g;\n/**\n* Escape HTML special characters in a string to prevent XSS attacks\n* when embedding strings in script tags during SSR.\n*\n* This is essential for preventing XSS vulnerabilities when user-controlled\n* content is embedded in inline scripts.\n*/\nfunction escapeHtml(str) {\n\treturn str.replace(HTML_ESCAPE_REGEX, (match) => HTML_ESCAPE_LOOKUP[match]);\n}\nfunction decodePath(path) {\n\tif (!path) return {\n\t\tpath,\n\t\thandledProtocolRelativeURL: false\n\t};\n\tif (!/[%\\\\\\x00-\\x1f\\x7f]/.test(path) && !path.startsWith(\"//\")) return {\n\t\tpath,\n\t\thandledProtocolRelativeURL: false\n\t};\n\tconst re = /%25|%5C/gi;\n\tlet cursor = 0;\n\tlet result = \"\";\n\tlet match;\n\twhile (null !== (match = re.exec(path))) {\n\t\tresult += decodeSegment(path.slice(cursor, match.index)) + match[0];\n\t\tcursor = re.lastIndex;\n\t}\n\tresult = result + decodeSegment(cursor ? path.slice(cursor) : path);\n\tlet handledProtocolRelativeURL = false;\n\tif (result.startsWith(\"//\")) {\n\t\thandledProtocolRelativeURL = true;\n\t\tresult = \"/\" + result.replace(/^\\/+/, \"\");\n\t}\n\treturn {\n\t\tpath: result,\n\t\thandledProtocolRelativeURL\n\t};\n}\n/**\n* Encodes a path the same way `new URL()` would, but without the overhead of full URL parsing.\n*\n* This function encodes:\n* - Whitespace characters (spaces → %20, tabs → %09, etc.)\n* - Non-ASCII/Unicode characters (emojis, accented characters, etc.)\n*\n* It preserves:\n* - Already percent-encoded sequences (won't double-encode %2F, %25, etc.)\n* - ASCII special characters valid in URL paths (@, $, &, +, etc.)\n* - Forward slashes as path separators\n*\n* Used to generate proper href values for SSR without constructing URL objects.\n*\n* @example\n* encodePathLikeUrl('/path/file name.pdf') // '/path/file%20name.pdf'\n* encodePathLikeUrl('/path/日本語') // '/path/%E6%97%A5%E6%9C%AC%E8%AA%9E'\n* encodePathLikeUrl('/path/already%20encoded') // '/path/already%20encoded' (preserved)\n*/\nfunction encodePathLikeUrl(path) {\n\tif (!/\\s|[^\\u0000-\\u007F]/.test(path)) return path;\n\treturn path.replace(/\\s|[^\\u0000-\\u007F]/gu, encodeURIComponent);\n}\n/**\n* Builds the dev-mode CSS styles URL for route-scoped CSS collection.\n* Used by HeadContent components in all framework implementations to construct\n* the URL for the `/@tanstack-start/styles.css` endpoint.\n*\n* @param basepath - The router's basepath (may or may not have leading slash)\n* @param routeIds - Array of matched route IDs to include in the CSS collection\n* @returns The full URL path for the dev styles CSS endpoint\n*/\nfunction buildDevStylesUrl(basepath, routeIds) {\n\tconst trimmedBasepath = basepath.replace(/^\\/+|\\/+$/g, \"\");\n\treturn `${trimmedBasepath === \"\" ? \"\" : `/${trimmedBasepath}`}/@tanstack-start/styles.css?routes=${encodeURIComponent(routeIds.join(\",\"))}`;\n}\nfunction arraysEqual(a, b) {\n\tif (a === b) return true;\n\tif (a.length !== b.length) return false;\n\tfor (let i = 0; i < a.length; i++) if (a[i] !== b[i]) return false;\n\treturn true;\n}\n//#endregion\nexport { DEFAULT_PROTOCOL_ALLOWLIST, arraysEqual, buildDevStylesUrl, createControlledPromise, decodePath, deepEqual, encodePathLikeUrl, escapeHtml, findLast, functionalUpdate, hasKeys, hasOwn, isDangerousProtocol, isModuleNotFoundError, isPlainArray, isPlainObject, isPromise, last, nullReplaceEqualDeep, replaceEqualDeep };\n\n//# sourceMappingURL=utils.js.map","//#region src/invariant.ts\nfunction invariant() {\n\tthrow new Error(\"Invariant failed\");\n}\n//#endregion\nexport { invariant };\n\n//# sourceMappingURL=invariant.js.map","//#region src/lru-cache.ts\nfunction createLRUCache(max) {\n\tconst cache = /* @__PURE__ */ new Map();\n\tlet oldest;\n\tlet newest;\n\tconst touch = (entry) => {\n\t\tif (!entry.next) return;\n\t\tif (!entry.prev) {\n\t\t\tentry.next.prev = void 0;\n\t\t\toldest = entry.next;\n\t\t\tentry.next = void 0;\n\t\t\tif (newest) {\n\t\t\t\tentry.prev = newest;\n\t\t\t\tnewest.next = entry;\n\t\t\t}\n\t\t} else {\n\t\t\tentry.prev.next = entry.next;\n\t\t\tentry.next.prev = entry.prev;\n\t\t\tentry.next = void 0;\n\t\t\tif (newest) {\n\t\t\t\tnewest.next = entry;\n\t\t\t\tentry.prev = newest;\n\t\t\t}\n\t\t}\n\t\tnewest = entry;\n\t};\n\treturn {\n\t\tget(key) {\n\t\t\tconst entry = cache.get(key);\n\t\t\tif (!entry) return void 0;\n\t\t\ttouch(entry);\n\t\t\treturn entry.value;\n\t\t},\n\t\tset(key, value) {\n\t\t\tif (cache.size >= max && oldest) {\n\t\t\t\tconst toDelete = oldest;\n\t\t\t\tcache.delete(toDelete.key);\n\t\t\t\tif (toDelete.next) {\n\t\t\t\t\toldest = toDelete.next;\n\t\t\t\t\ttoDelete.next.prev = void 0;\n\t\t\t\t}\n\t\t\t\tif (toDelete === newest) newest = void 0;\n\t\t\t}\n\t\t\tconst existing = cache.get(key);\n\t\t\tif (existing) {\n\t\t\t\texisting.value = value;\n\t\t\t\ttouch(existing);\n\t\t\t} else {\n\t\t\t\tconst entry = {\n\t\t\t\t\tkey,\n\t\t\t\t\tvalue,\n\t\t\t\t\tprev: newest\n\t\t\t\t};\n\t\t\t\tif (newest) newest.next = entry;\n\t\t\t\tnewest = entry;\n\t\t\t\tif (!oldest) oldest = entry;\n\t\t\t\tcache.set(key, entry);\n\t\t\t}\n\t\t},\n\t\tclear() {\n\t\t\tcache.clear();\n\t\t\toldest = void 0;\n\t\t\tnewest = void 0;\n\t\t}\n\t};\n}\n//#endregion\nexport { createLRUCache };\n\n//# sourceMappingURL=lru-cache.js.map","import { last } from \"./utils.js\";\nimport { invariant } from \"./invariant.js\";\nimport { createLRUCache } from \"./lru-cache.js\";\nconst SEGMENT_TYPE_INDEX = 4;\nconst SEGMENT_TYPE_PATHLESS = 5;\nfunction getOpenAndCloseBraces(part) {\n\tconst openBrace = part.indexOf(\"{\");\n\tif (openBrace === -1) return null;\n\tconst closeBrace = part.indexOf(\"}\", openBrace);\n\tif (closeBrace === -1) return null;\n\tif (openBrace + 1 >= part.length) return null;\n\treturn [openBrace, closeBrace];\n}\n/**\n* Populates the `output` array with the parsed representation of the given `segment` string.\n*\n* Usage:\n* ```ts\n* let output\n* let cursor = 0\n* while (cursor < path.length) {\n* output = parseSegment(path, cursor, output)\n* const end = output[5]\n* cursor = end + 1\n* ```\n*\n* `output` is stored outside to avoid allocations during repeated calls. It doesn't need to be typed\n* or initialized, it will be done automatically.\n*/\nfunction parseSegment(path, start, output = new Uint16Array(6)) {\n\tconst next = path.indexOf(\"/\", start);\n\tconst end = next === -1 ? path.length : next;\n\tconst part = path.substring(start, end);\n\tif (!part || !part.includes(\"$\")) {\n\t\toutput[0] = 0;\n\t\toutput[1] = start;\n\t\toutput[2] = start;\n\t\toutput[3] = end;\n\t\toutput[4] = end;\n\t\toutput[5] = end;\n\t\treturn output;\n\t}\n\tif (part === \"$\") {\n\t\tconst total = path.length;\n\t\toutput[0] = 2;\n\t\toutput[1] = start;\n\t\toutput[2] = start;\n\t\toutput[3] = total;\n\t\toutput[4] = total;\n\t\toutput[5] = total;\n\t\treturn output;\n\t}\n\tif (part.charCodeAt(0) === 36) {\n\t\toutput[0] = 1;\n\t\toutput[1] = start;\n\t\toutput[2] = start + 1;\n\t\toutput[3] = end;\n\t\toutput[4] = end;\n\t\toutput[5] = end;\n\t\treturn output;\n\t}\n\tconst braces = getOpenAndCloseBraces(part);\n\tif (braces) {\n\t\tconst [openBrace, closeBrace] = braces;\n\t\tconst firstChar = part.charCodeAt(openBrace + 1);\n\t\tif (firstChar === 45) {\n\t\t\tif (openBrace + 2 < part.length && part.charCodeAt(openBrace + 2) === 36) {\n\t\t\t\tconst paramStart = openBrace + 3;\n\t\t\t\tconst paramEnd = closeBrace;\n\t\t\t\tif (paramStart < paramEnd) {\n\t\t\t\t\toutput[0] = 3;\n\t\t\t\t\toutput[1] = start + openBrace;\n\t\t\t\t\toutput[2] = start + paramStart;\n\t\t\t\t\toutput[3] = start + paramEnd;\n\t\t\t\t\toutput[4] = start + closeBrace + 1;\n\t\t\t\t\toutput[5] = end;\n\t\t\t\t\treturn output;\n\t\t\t\t}\n\t\t\t}\n\t\t} else if (firstChar === 36) {\n\t\t\tconst dollarPos = openBrace + 1;\n\t\t\tconst afterDollar = openBrace + 2;\n\t\t\tif (afterDollar === closeBrace) {\n\t\t\t\toutput[0] = 2;\n\t\t\t\toutput[1] = start + openBrace;\n\t\t\t\toutput[2] = start + dollarPos;\n\t\t\t\toutput[3] = start + afterDollar;\n\t\t\t\toutput[4] = start + closeBrace + 1;\n\t\t\t\toutput[5] = path.length;\n\t\t\t\treturn output;\n\t\t\t}\n\t\t\toutput[0] = 1;\n\t\t\toutput[1] = start + openBrace;\n\t\t\toutput[2] = start + afterDollar;\n\t\t\toutput[3] = start + closeBrace;\n\t\t\toutput[4] = start + closeBrace + 1;\n\t\t\toutput[5] = end;\n\t\t\treturn output;\n\t\t}\n\t}\n\toutput[0] = 0;\n\toutput[1] = start;\n\toutput[2] = start;\n\toutput[3] = end;\n\toutput[4] = end;\n\toutput[5] = end;\n\treturn output;\n}\n/**\n* Recursively parses the segments of the given route tree and populates a segment trie.\n*\n* @param data A reusable Uint16Array for parsing segments. (non important, we're just avoiding allocations)\n* @param route The current route to parse.\n* @param start The starting index for parsing within the route's full path.\n* @param node The current segment node in the trie to populate.\n* @param onRoute Callback invoked for each route processed.\n*/\nfunction parseSegments(defaultCaseSensitive, data, route, start, node, depth, onRoute) {\n\tonRoute?.(route);\n\tlet cursor = start;\n\t{\n\t\tconst path = route.fullPath ?? route.from;\n\t\tconst length = path.length;\n\t\tconst caseSensitive = route.options?.caseSensitive ?? defaultCaseSensitive;\n\t\tconst parseParams = route.options?.params?.parse ?? route.options?.parseParams;\n\t\twhile (cursor < length) {\n\t\t\tconst segment = parseSegment(path, cursor, data);\n\t\t\tlet nextNode;\n\t\t\tconst start = cursor;\n\t\t\tconst end = segment[5];\n\t\t\tcursor = end + 1;\n\t\t\tdepth++;\n\t\t\tswitch (segment[0]) {\n\t\t\t\tcase 0: {\n\t\t\t\t\tconst value = path.substring(segment[2], segment[3]);\n\t\t\t\t\tif (caseSensitive) {\n\t\t\t\t\t\tconst existingNode = node.static?.get(value);\n\t\t\t\t\t\tif (existingNode) nextNode = existingNode;\n\t\t\t\t\t\telse {\n\t\t\t\t\t\t\tnode.static ??= /* @__PURE__ */ new Map();\n\t\t\t\t\t\t\tconst next = createStaticNode(route.fullPath ?? route.from);\n\t\t\t\t\t\t\tnext.parent = node;\n\t\t\t\t\t\t\tnext.depth = depth;\n\t\t\t\t\t\t\tnextNode = next;\n\t\t\t\t\t\t\tnode.static.set(value, next);\n\t\t\t\t\t\t}\n\t\t\t\t\t} else {\n\t\t\t\t\t\tconst name = value.toLowerCase();\n\t\t\t\t\t\tconst existingNode = node.staticInsensitive?.get(name);\n\t\t\t\t\t\tif (existingNode) nextNode = existingNode;\n\t\t\t\t\t\telse {\n\t\t\t\t\t\t\tnode.staticInsensitive ??= /* @__PURE__ */ new Map();\n\t\t\t\t\t\t\tconst next = createStaticNode(route.fullPath ?? route.from);\n\t\t\t\t\t\t\tnext.parent = node;\n\t\t\t\t\t\t\tnext.depth = depth;\n\t\t\t\t\t\t\tnextNode = next;\n\t\t\t\t\t\t\tnode.staticInsensitive.set(name, next);\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t\tbreak;\n\t\t\t\t}\n\t\t\t\tcase 1: {\n\t\t\t\t\tconst prefix_raw = path.substring(start, segment[1]);\n\t\t\t\t\tconst suffix_raw = path.substring(segment[4], end);\n\t\t\t\t\tconst actuallyCaseSensitive = caseSensitive && !!(prefix_raw || suffix_raw);\n\t\t\t\t\tconst prefix = !prefix_raw ? void 0 : actuallyCaseSensitive ? prefix_raw : prefix_raw.toLowerCase();\n\t\t\t\t\tconst suffix = !suffix_raw ? void 0 : actuallyCaseSensitive ? suffix_raw : suffix_raw.toLowerCase();\n\t\t\t\t\tconst existingNode = !parseParams && node.dynamic?.find((s) => !s.parse && s.caseSensitive === actuallyCaseSensitive && s.prefix === prefix && s.suffix === suffix);\n\t\t\t\t\tif (existingNode) nextNode = existingNode;\n\t\t\t\t\telse {\n\t\t\t\t\t\tconst next = createDynamicNode(1, route.fullPath ?? route.from, actuallyCaseSensitive, prefix, suffix);\n\t\t\t\t\t\tnextNode = next;\n\t\t\t\t\t\tnext.depth = depth;\n\t\t\t\t\t\tnext.parent = node;\n\t\t\t\t\t\tnode.dynamic ??= [];\n\t\t\t\t\t\tnode.dynamic.push(next);\n\t\t\t\t\t}\n\t\t\t\t\tbreak;\n\t\t\t\t}\n\t\t\t\tcase 3: {\n\t\t\t\t\tconst prefix_raw = path.substring(start, segment[1]);\n\t\t\t\t\tconst suffix_raw = path.substring(segment[4], end);\n\t\t\t\t\tconst actuallyCaseSensitive = caseSensitive && !!(prefix_raw || suffix_raw);\n\t\t\t\t\tconst prefix = !prefix_raw ? void 0 : actuallyCaseSensitive ? prefix_raw : prefix_raw.toLowerCase();\n\t\t\t\t\tconst suffix = !suffix_raw ? void 0 : actuallyCaseSensitive ? suffix_raw : suffix_raw.toLowerCase();\n\t\t\t\t\tconst existingNode = !parseParams && node.optional?.find((s) => !s.parse && s.caseSensitive === actuallyCaseSensitive && s.prefix === prefix && s.suffix === suffix);\n\t\t\t\t\tif (existingNode) nextNode = existingNode;\n\t\t\t\t\telse {\n\t\t\t\t\t\tconst next = createDynamicNode(3, route.fullPath ?? route.from, actuallyCaseSensitive, prefix, suffix);\n\t\t\t\t\t\tnextNode = next;\n\t\t\t\t\t\tnext.parent = node;\n\t\t\t\t\t\tnext.depth = depth;\n\t\t\t\t\t\tnode.optional ??= [];\n\t\t\t\t\t\tnode.optional.push(next);\n\t\t\t\t\t}\n\t\t\t\t\tbreak;\n\t\t\t\t}\n\t\t\t\tcase 2: {\n\t\t\t\t\tconst prefix_raw = path.substring(start, segment[1]);\n\t\t\t\t\tconst suffix_raw = path.substring(segment[4], end);\n\t\t\t\t\tconst actuallyCaseSensitive = caseSensitive && !!(prefix_raw || suffix_raw);\n\t\t\t\t\tconst prefix = !prefix_raw ? void 0 : actuallyCaseSensitive ? prefix_raw : prefix_raw.toLowerCase();\n\t\t\t\t\tconst suffix = !suffix_raw ? void 0 : actuallyCaseSensitive ? suffix_raw : suffix_raw.toLowerCase();\n\t\t\t\t\tconst next = createDynamicNode(2, route.fullPath ?? route.from, actuallyCaseSensitive, prefix, suffix);\n\t\t\t\t\tnextNode = next;\n\t\t\t\t\tnext.parent = node;\n\t\t\t\t\tnext.depth = depth;\n\t\t\t\t\tnode.wildcard ??= [];\n\t\t\t\t\tnode.wildcard.push(next);\n\t\t\t\t}\n\t\t\t}\n\t\t\tnode = nextNode;\n\t\t}\n\t\tif (parseParams && route.children && !route.isRoot && route.id && route.id.charCodeAt(route.id.lastIndexOf(\"/\") + 1) === 95) {\n\t\t\tconst pathlessNode = createStaticNode(route.fullPath ?? route.from);\n\t\t\tpathlessNode.kind = SEGMENT_TYPE_PATHLESS;\n\t\t\tpathlessNode.parent = node;\n\t\t\tdepth++;\n\t\t\tpathlessNode.depth = depth;\n\t\t\tnode.pathless ??= [];\n\t\t\tnode.pathless.push(pathlessNode);\n\t\t\tnode = pathlessNode;\n\t\t}\n\t\tconst isLeaf = (route.path || !route.children) && !route.isRoot;\n\t\tif (isLeaf && path.endsWith(\"/\")) {\n\t\t\tconst indexNode = createStaticNode(route.fullPath ?? route.from);\n\t\t\tindexNode.kind = SEGMENT_TYPE_INDEX;\n\t\t\tindexNode.parent = node;\n\t\t\tdepth++;\n\t\t\tindexNode.depth = depth;\n\t\t\tnode.index = indexNode;\n\t\t\tnode = indexNode;\n\t\t}\n\t\tnode.parse = parseParams ?? null;\n\t\tnode.priority = route.options?.params?.priority ?? 0;\n\t\tif (isLeaf && !node.route) {\n\t\t\tnode.route = route;\n\t\t\tnode.fullPath = route.fullPath ?? route.from;\n\t\t}\n\t}\n\tif (route.children) for (const child of route.children) parseSegments(defaultCaseSensitive, data, child, cursor, node, depth, onRoute);\n}\nfunction sortDynamic(a, b) {\n\tif (a.parse && !b.parse) return -1;\n\tif (!a.parse && b.parse) return 1;\n\tif (a.parse && b.parse && (a.priority || b.priority)) return b.priority - a.priority;\n\tif (a.prefix && b.prefix && a.prefix !== b.prefix) {\n\t\tif (a.prefix.startsWith(b.prefix)) return -1;\n\t\tif (b.prefix.startsWith(a.prefix)) return 1;\n\t}\n\tif (a.suffix && b.suffix && a.suffix !== b.suffix) {\n\t\tif (a.suffix.endsWith(b.suffix)) return -1;\n\t\tif (b.suffix.endsWith(a.suffix)) return 1;\n\t}\n\tif (a.prefix && !b.prefix) return -1;\n\tif (!a.prefix && b.prefix) return 1;\n\tif (a.suffix && !b.suffix) return -1;\n\tif (!a.suffix && b.suffix) return 1;\n\tif (a.caseSensitive && !b.caseSensitive) return -1;\n\tif (!a.caseSensitive && b.caseSensitive) return 1;\n\treturn 0;\n}\nfunction sortTreeNodes(node) {\n\tif (node.pathless) for (const child of node.pathless) sortTreeNodes(child);\n\tif (node.static) for (const child of node.static.values()) sortTreeNodes(child);\n\tif (node.staticInsensitive) for (const child of node.staticInsensitive.values()) sortTreeNodes(child);\n\tif (node.dynamic?.length) {\n\t\tnode.dynamic.sort(sortDynamic);\n\t\tfor (const child of node.dynamic) sortTreeNodes(child);\n\t}\n\tif (node.optional?.length) {\n\t\tnode.optional.sort(sortDynamic);\n\t\tfor (const child of node.optional) sortTreeNodes(child);\n\t}\n\tif (node.wildcard?.length) {\n\t\tnode.wildcard.sort(sortDynamic);\n\t\tfor (const child of node.wildcard) sortTreeNodes(child);\n\t}\n}\nfunction createStaticNode(fullPath) {\n\treturn {\n\t\tkind: 0,\n\t\tdepth: 0,\n\t\tpathless: null,\n\t\tindex: null,\n\t\tstatic: null,\n\t\tstaticInsensitive: null,\n\t\tdynamic: null,\n\t\toptional: null,\n\t\twildcard: null,\n\t\troute: null,\n\t\tfullPath,\n\t\tparent: null,\n\t\tparse: null,\n\t\tpriority: 0\n\t};\n}\n/**\n* Keys must be declared in the same order as in `SegmentNode` type,\n* to ensure they are represented as the same object class in the engine.\n*/\nfunction createDynamicNode(kind, fullPath, caseSensitive, prefix, suffix) {\n\treturn {\n\t\tkind,\n\t\tdepth: 0,\n\t\tpathless: null,\n\t\tindex: null,\n\t\tstatic: null,\n\t\tstaticInsensitive: null,\n\t\tdynamic: null,\n\t\toptional: null,\n\t\twildcard: null,\n\t\troute: null,\n\t\tfullPath,\n\t\tparent: null,\n\t\tparse: null,\n\t\tpriority: 0,\n\t\tcaseSensitive,\n\t\tprefix,\n\t\tsuffix\n\t};\n}\nfunction processRouteMasks(routeList, processedTree) {\n\tconst segmentTree = createStaticNode(\"/\");\n\tconst data = new Uint16Array(6);\n\tfor (const route of routeList) parseSegments(false, data, route, 1, segmentTree, 0);\n\tsortTreeNodes(segmentTree);\n\tprocessedTree.masksTree = segmentTree;\n\tprocessedTree.flatCache = createLRUCache(1e3);\n}\n/**\n* Take an arbitrary list of routes, create a tree from them (if it hasn't been created already), and match a path against it.\n*/\nfunction findFlatMatch(path, processedTree) {\n\tpath ||= \"/\";\n\tconst cached = processedTree.flatCache.get(path);\n\tif (cached) return cached;\n\tconst result = findMatch(path, processedTree.masksTree);\n\tprocessedTree.flatCache.set(path, result);\n\treturn result;\n}\n/**\n* @deprecated keep until v2 so that `router.matchRoute` can keep not caring about the actual route tree\n*/\nfunction findSingleMatch(from, caseSensitive, fuzzy, path, processedTree) {\n\tfrom ||= \"/\";\n\tpath ||= \"/\";\n\tconst key = caseSensitive ? `case\\0${from}` : from;\n\tlet tree = processedTree.singleCache.get(key);\n\tif (!tree) {\n\t\ttree = createStaticNode(\"/\");\n\t\tparseSegments(caseSensitive, new Uint16Array(6), { from }, 1, tree, 0);\n\t\tprocessedTree.singleCache.set(key, tree);\n\t}\n\treturn findMatch(path, tree, fuzzy);\n}\nfunction findRouteMatch(path, processedTree, fuzzy = false) {\n\tconst key = fuzzy ? path : `nofuzz\\0${path}`;\n\tconst cached = processedTree.matchCache.get(key);\n\tif (cached !== void 0) return cached;\n\tpath ||= \"/\";\n\tlet result;\n\ttry {\n\t\tresult = findMatch(path, processedTree.segmentTree, fuzzy);\n\t} catch (err) {\n\t\tif (err instanceof URIError) result = null;\n\t\telse throw err;\n\t}\n\tif (result) result.branch = buildRouteBranch(result.route);\n\tprocessedTree.matchCache.set(key, result);\n\treturn result;\n}\n/** Trim trailing slashes (except preserving root '/'). */\nfunction trimPathRight(path) {\n\treturn path === \"/\" ? path : path.replace(/\\/{1,}$/, \"\");\n}\n/**\n* Processes a route tree into a segment trie for efficient path matching.\n* Also builds lookup maps for routes by ID and by trimmed full path.\n*/\nfunction processRouteTree(routeTree, caseSensitive = false, initRoute) {\n\tconst segmentTree = createStaticNode(routeTree.fullPath);\n\tconst data = new Uint16Array(6);\n\tconst routesById = {};\n\tconst routesByPath = {};\n\tlet index = 0;\n\tparseSegments(caseSensitive, data, routeTree, 1, segmentTree, 0, (route) => {\n\t\tinitRoute?.(route, index);\n\t\tif (route.id in routesById) {\n\t\t\tif (process.env.NODE_ENV !== \"production\") throw new Error(`Invariant failed: Duplicate routes found with id: ${String(route.id)}`);\n\t\t\tinvariant();\n\t\t}\n\t\troutesById[route.id] = route;\n\t\tif (index !== 0 && route.path) {\n\t\t\tconst trimmedFullPath = trimPathRight(route.fullPath);\n\t\t\tif (!routesByPath[trimmedFullPath] || route.fullPath.endsWith(\"/\")) routesByPath[trimmedFullPath] = route;\n\t\t}\n\t\tindex++;\n\t});\n\tsortTreeNodes(segmentTree);\n\treturn {\n\t\tprocessedTree: {\n\t\t\tsegmentTree,\n\t\t\tsingleCache: createLRUCache(1e3),\n\t\t\tmatchCache: createLRUCache(1e3),\n\t\t\tflatCache: null,\n\t\t\tmasksTree: null\n\t\t},\n\t\troutesById,\n\t\troutesByPath\n\t};\n}\nfunction findMatch(path, segmentTree, fuzzy = false) {\n\tconst parts = path.split(\"/\");\n\tconst leaf = getNodeMatch(path, parts, segmentTree, fuzzy);\n\tif (!leaf) return null;\n\tconst [rawParams] = extractParams(path, parts, leaf);\n\treturn {\n\t\troute: leaf.node.route,\n\t\trawParams\n\t};\n}\n/**\n* This function is \"resumable\":\n* - the `leaf` input can contain `extract` and `rawParams` properties from a previous `extractParams` call\n* - the returned `state` can be passed back as `extract` in a future call to continue extracting params from where we left off\n*\n* Inputs are *not* mutated.\n*/\nfunction extractParams(path, parts, leaf) {\n\tconst list = buildBranch(leaf.node);\n\tlet nodeParts = null;\n\tconst rawParams = Object.create(null);\n\t/** which segment of the path we're currently processing */\n\tlet partIndex = leaf.extract?.part ?? 0;\n\t/** which node of the route tree branch we're currently processing */\n\tlet nodeIndex = leaf.extract?.node ?? 0;\n\t/** index of the 1st character of the segment we're processing in the path string */\n\tlet pathIndex = leaf.extract?.path ?? 0;\n\t/** which fullPath segment we're currently processing */\n\tlet segmentCount = leaf.extract?.segment ?? 0;\n\tfor (; nodeIndex < list.length; partIndex++, nodeIndex++, pathIndex++, segmentCount++) {\n\t\tconst node = list[nodeIndex];\n\t\tif (node.kind === SEGMENT_TYPE_INDEX) break;\n\t\tif (node.kind === SEGMENT_TYPE_PATHLESS) {\n\t\t\tsegmentCount--;\n\t\t\tpartIndex--;\n\t\t\tpathIndex--;\n\t\t\tcontinue;\n\t\t}\n\t\tconst part = parts[partIndex];\n\t\tconst currentPathIndex = pathIndex;\n\t\tif (part) pathIndex += part.length;\n\t\tif (node.kind === 1) {\n\t\t\tnodeParts ??= leaf.node.fullPath.split(\"/\");\n\t\t\tconst nodePart = nodeParts[segmentCount];\n\t\t\tconst preLength = node.prefix?.length ?? 0;\n\t\t\tif (nodePart.charCodeAt(preLength) === 123) {\n\t\t\t\tconst sufLength = node.suffix?.length ?? 0;\n\t\t\t\tconst name = nodePart.substring(preLength + 2, nodePart.length - sufLength - 1);\n\t\t\t\tconst value = part.substring(preLength, part.length - sufLength);\n\t\t\t\trawParams[name] = decodeURIComponent(value);\n\t\t\t} else {\n\t\t\t\tconst name = nodePart.substring(1);\n\t\t\t\trawParams[name] = decodeURIComponent(part);\n\t\t\t}\n\t\t} else if (node.kind === 3) {\n\t\t\tif (leaf.skipped & 1 << nodeIndex) {\n\t\t\t\tpartIndex--;\n\t\t\t\tpathIndex = currentPathIndex - 1;\n\t\t\t\tcontinue;\n\t\t\t}\n\t\t\tnodeParts ??= leaf.node.fullPath.split(\"/\");\n\t\t\tconst nodePart = nodeParts[segmentCount];\n\t\t\tconst preLength = node.prefix?.length ?? 0;\n\t\t\tconst sufLength = node.suffix?.length ?? 0;\n\t\t\tconst name = nodePart.substring(preLength + 3, nodePart.length - sufLength - 1);\n\t\t\tconst value = node.suffix || node.prefix ? part.substring(preLength, part.length - sufLength) : part;\n\t\t\tif (value) rawParams[name] = decodeURIComponent(value);\n\t\t} else if (node.kind === 2) {\n\t\t\tconst n = node;\n\t\t\tconst value = path.substring(currentPathIndex + (n.prefix?.length ?? 0), path.length - (n.suffix?.length ?? 0));\n\t\t\tconst splat = decodeURIComponent(value);\n\t\t\trawParams[\"*\"] = splat;\n\t\t\trawParams._splat = splat;\n\t\t\tbreak;\n\t\t}\n\t}\n\tif (leaf.rawParams) Object.assign(rawParams, leaf.rawParams);\n\treturn [rawParams, {\n\t\tpart: partIndex,\n\t\tnode: nodeIndex,\n\t\tpath: pathIndex,\n\t\tsegment: segmentCount\n\t}];\n}\nfunction buildRouteBranch(route) {\n\tconst list = [route];\n\twhile (route.parentRoute) {\n\t\troute = route.parentRoute;\n\t\tlist.push(route);\n\t}\n\tlist.reverse();\n\treturn list;\n}\nfunction buildBranch(node) {\n\tconst list = Array(node.depth + 1);\n\tdo {\n\t\tlist[node.depth] = node;\n\t\tnode = node.parent;\n\t} while (node);\n\treturn list;\n}\nfunction getNodeMatch(path, parts, segmentTree, fuzzy) {\n\tif (path === \"/\" && segmentTree.index) return {\n\t\tnode: segmentTree.index,\n\t\tskipped: 0\n\t};\n\tconst trailingSlash = !last(parts);\n\tconst pathIsIndex = trailingSlash && path !== \"/\";\n\tconst partsLength = parts.length - (trailingSlash ? 1 : 0);\n\tconst stack = [{\n\t\tnode: segmentTree,\n\t\tindex: 1,\n\t\tskipped: 0,\n\t\tdepth: 1,\n\t\tstatics: 0,\n\t\tdynamics: 0,\n\t\toptionals: 0\n\t}];\n\tlet bestFuzzy = null;\n\tlet bestMatch = null;\n\twhile (stack.length) {\n\t\tconst frame = stack.pop();\n\t\tconst { node, index, skipped, depth, statics, dynamics, optionals } = frame;\n\t\tlet { extract, rawParams } = frame;\n\t\tif (node.kind === 2 && node.route && !isFrameMoreSpecific(bestMatch, frame)) continue;\n\t\tif (node.parse) {\n\t\t\tif (!validateParseParams(path, parts, frame)) continue;\n\t\t\trawParams = frame.rawParams;\n\t\t\textract = frame.extract;\n\t\t}\n\t\tif (fuzzy && node.route && node.kind !== SEGMENT_TYPE_INDEX && isFrameMoreSpecific(bestFuzzy, frame)) bestFuzzy = frame;\n\t\tconst isBeyondPath = index === partsLength;\n\t\tif (isBeyondPath) {\n\t\t\tif (node.route && (!pathIsIndex || node.kind === SEGMENT_TYPE_INDEX || node.kind === 2) && isFrameMoreSpecific(bestMatch, frame)) bestMatch = frame;\n\t\t\tif (!node.optional && !node.wildcard && !node.index && !node.pathless) continue;\n\t\t}\n\t\tconst part = isBeyondPath ? void 0 : parts[index];\n\t\tlet lowerPart;\n\t\tif (isBeyondPath && node.index) {\n\t\t\tconst indexFrame = {\n\t\t\t\tnode: node.index,\n\t\t\t\tindex,\n\t\t\t\tskipped,\n\t\t\t\tdepth: depth + 1,\n\t\t\t\tstatics,\n\t\t\t\tdynamics,\n\t\t\t\toptionals,\n\t\t\t\textract,\n\t\t\t\trawParams\n\t\t\t};\n\t\t\tlet indexValid = true;\n\t\t\tif (node.index.parse) {\n\t\t\t\tif (!validateParseParams(path, parts, indexFrame)) indexValid = false;\n\t\t\t}\n\t\t\tif (indexValid) {\n\t\t\t\tif (!dynamics && !optionals && !skipped && isPerfectStaticMatch(statics, partsLength)) return indexFrame;\n\t\t\t\tif (isFrameMoreSpecific(bestMatch, indexFrame)) bestMatch = indexFrame;\n\t\t\t}\n\t\t}\n\t\tif (node.wildcard) for (let i = node.wildcard.length - 1; i >= 0; i--) {\n\t\t\tconst segment = node.wildcard[i];\n\t\t\tconst { prefix, suffix } = segment;\n\t\t\tif (prefix) {\n\t\t\t\tif (isBeyondPath) continue;\n\t\t\t\tif (!(segment.caseSensitive ? part : lowerPart ??= part.toLowerCase()).startsWith(prefix)) continue;\n\t\t\t}\n\t\t\tif (suffix) {\n\t\t\t\tif (isBeyondPath) continue;\n\t\t\t\tconst end = parts.slice(index).join(\"/\").slice(-suffix.length);\n\t\t\t\tif ((segment.caseSensitive ? end : end.toLowerCase()) !== suffix) continue;\n\t\t\t}\n\t\t\tstack.push({\n\t\t\t\tnode: segment,\n\t\t\t\tindex: partsLength,\n\t\t\t\tskipped,\n\t\t\t\tdepth: depth + 1,\n\t\t\t\tstatics,\n\t\t\t\tdynamics,\n\t\t\t\toptionals,\n\t\t\t\textract,\n\t\t\t\trawParams\n\t\t\t});\n\t\t}\n\t\tif (node.optional) {\n\t\t\tconst nextSkipped = skipped | 1 << depth;\n\t\t\tconst nextDepth = depth + 1;\n\t\t\tfor (let i = node.optional.length - 1; i >= 0; i--) {\n\t\t\t\tconst segment = node.optional[i];\n\t\t\t\tstack.push({\n\t\t\t\t\tnode: segment,\n\t\t\t\t\tindex,\n\t\t\t\t\tskipped: nextSkipped,\n\t\t\t\t\tdepth: nextDepth,\n\t\t\t\t\tstatics,\n\t\t\t\t\tdynamics,\n\t\t\t\t\toptionals,\n\t\t\t\t\textract,\n\t\t\t\t\trawParams\n\t\t\t\t});\n\t\t\t}\n\t\t\tif (!isBeyondPath) for (let i = node.optional.length - 1; i >= 0; i--) {\n\t\t\t\tconst segment = node.optional[i];\n\t\t\t\tconst { prefix, suffix } = segment;\n\t\t\t\tif (prefix || suffix) {\n\t\t\t\t\tconst casePart = segment.caseSensitive ? part : lowerPart ??= part.toLowerCase();\n\t\t\t\t\tif (prefix && !casePart.startsWith(prefix)) continue;\n\t\t\t\t\tif (suffix && !casePart.endsWith(suffix)) continue;\n\t\t\t\t}\n\t\t\t\tstack.push({\n\t\t\t\t\tnode: segment,\n\t\t\t\t\tindex: index + 1,\n\t\t\t\t\tskipped,\n\t\t\t\t\tdepth: nextDepth,\n\t\t\t\t\tstatics,\n\t\t\t\t\tdynamics,\n\t\t\t\t\toptionals: optionals + segmentScore(partsLength, index),\n\t\t\t\t\textract,\n\t\t\t\t\trawParams\n\t\t\t\t});\n\t\t\t}\n\t\t}\n\t\tif (!isBeyondPath && node.dynamic && part) for (let i = node.dynamic.length - 1; i >= 0; i--) {\n\t\t\tconst segment = node.dynamic[i];\n\t\t\tconst { prefix, suffix } = segment;\n\t\t\tif (prefix || suffix) {\n\t\t\t\tconst casePart = segment.caseSensitive ? part : lowerPart ??= part.toLowerCase();\n\t\t\t\tif (prefix && !casePart.startsWith(prefix)) continue;\n\t\t\t\tif (suffix && !casePart.endsWith(suffix)) continue;\n\t\t\t}\n\t\t\tstack.push({\n\t\t\t\tnode: segment,\n\t\t\t\tindex: index + 1,\n\t\t\t\tskipped,\n\t\t\t\tdepth: depth + 1,\n\t\t\t\tstatics,\n\t\t\t\tdynamics: dynamics + segmentScore(partsLength, index),\n\t\t\t\toptionals,\n\t\t\t\textract,\n\t\t\t\trawParams\n\t\t\t});\n\t\t}\n\t\tif (!isBeyondPath && node.staticInsensitive) {\n\t\t\tconst match = node.staticInsensitive.get(lowerPart ??= part.toLowerCase());\n\t\t\tif (match) stack.push({\n\t\t\t\tnode: match,\n\t\t\t\tindex: index + 1,\n\t\t\t\tskipped,\n\t\t\t\tdepth: depth + 1,\n\t\t\t\tstatics: statics + segmentScore(partsLength, index),\n\t\t\t\tdynamics,\n\t\t\t\toptionals,\n\t\t\t\textract,\n\t\t\t\trawParams\n\t\t\t});\n\t\t}\n\t\tif (!isBeyondPath && node.static) {\n\t\t\tconst match = node.static.get(part);\n\t\t\tif (match) stack.push({\n\t\t\t\tnode: match,\n\t\t\t\tindex: index + 1,\n\t\t\t\tskipped,\n\t\t\t\tdepth: depth + 1,\n\t\t\t\tstatics: statics + segmentScore(partsLength, index),\n\t\t\t\tdynamics,\n\t\t\t\toptionals,\n\t\t\t\textract,\n\t\t\t\trawParams\n\t\t\t});\n\t\t}\n\t\tif (node.pathless) {\n\t\t\tconst nextDepth = depth + 1;\n\t\t\tfor (let i = node.pathless.length - 1; i >= 0; i--) {\n\t\t\t\tconst segment = node.pathless[i];\n\t\t\t\tstack.push({\n\t\t\t\t\tnode: segment,\n\t\t\t\t\tindex,\n\t\t\t\t\tskipped,\n\t\t\t\t\tdepth: nextDepth,\n\t\t\t\t\tstatics,\n\t\t\t\t\tdynamics,\n\t\t\t\t\toptionals,\n\t\t\t\t\textract,\n\t\t\t\t\trawParams\n\t\t\t\t});\n\t\t\t}\n\t\t}\n\t}\n\tif (bestMatch) return bestMatch;\n\tif (fuzzy && bestFuzzy) {\n\t\tlet sliceIndex = bestFuzzy.index;\n\t\tfor (let i = 0; i < bestFuzzy.index; i++) sliceIndex += parts[i].length;\n\t\tconst splat = sliceIndex === path.length ? \"/\" : path.slice(sliceIndex);\n\t\tbestFuzzy.rawParams ??= Object.create(null);\n\t\tbestFuzzy.rawParams[\"**\"] = decodeURIComponent(splat);\n\t\treturn bestFuzzy;\n\t}\n\treturn null;\n}\nfunction segmentScore(partsLength, index) {\n\treturn 2 ** (partsLength - index - 1);\n}\nfunction isPerfectStaticMatch(statics, partsLength) {\n\treturn statics === 2 ** (partsLength - 1) - 1;\n}\nfunction validateParseParams(path, parts, frame) {\n\tlet rawParams;\n\tlet state;\n\ttry {\n\t\t[rawParams, state] = extractParams(path, parts, frame);\n\t} catch {\n\t\treturn null;\n\t}\n\tframe.rawParams = rawParams;\n\tframe.extract = state;\n\tif (!frame.node.parse) return true;\n\ttry {\n\t\tif (frame.node.parse(rawParams) === false) return null;\n\t} catch {}\n\treturn true;\n}\nfunction isFrameMoreSpecific(prev, next) {\n\tif (!prev) return true;\n\treturn next.statics > prev.statics || next.statics === prev.statics && (next.dynamics > prev.dynamics || next.dynamics === prev.dynamics && (next.optionals > prev.optionals || next.optionals === prev.optionals && ((next.node.kind === SEGMENT_TYPE_INDEX) > (prev.node.kind === SEGMENT_TYPE_INDEX) || next.node.kind === SEGMENT_TYPE_INDEX === (prev.node.kind === SEGMENT_TYPE_INDEX) && next.depth > prev.depth)));\n}\n//#endregion\nexport { buildRouteBranch, findFlatMatch, findRouteMatch, findSingleMatch, parseSegment, processRouteMasks, processRouteTree };\n\n//# sourceMappingURL=new-process-route-tree.js.map","import { last } from \"./utils.js\";\nimport { parseSegment } from \"./new-process-route-tree.js\";\nimport { isServer } from \"@tanstack/router-core/isServer\";\n//#region src/path.ts\n/** Join path segments, cleaning duplicate slashes between parts. */\nfunction joinPaths(paths) {\n\treturn cleanPath(paths.filter((val) => {\n\t\treturn val !== void 0;\n\t}).join(\"/\"));\n}\n/** Remove repeated slashes from a path string. */\nfunction cleanPath(path) {\n\treturn path.replace(/\\/{2,}/g, \"/\");\n}\n/** Trim leading slashes (except preserving root '/'). */\nfunction trimPathLeft(path) {\n\treturn path === \"/\" ? path : path.replace(/^\\/{1,}/, \"\");\n}\n/** Trim trailing slashes (except preserving root '/'). */\nfunction trimPathRight(path) {\n\tconst len = path.length;\n\treturn len > 1 && path[len - 1] === \"/\" ? path.replace(/\\/{1,}$/, \"\") : path;\n}\n/** Trim both leading and trailing slashes. */\nfunction trimPath(path) {\n\treturn trimPathRight(trimPathLeft(path));\n}\n/** Remove a trailing slash from value when appropriate for comparisons. */\nfunction removeTrailingSlash(value, basepath) {\n\tif (value?.endsWith(\"/\") && value !== \"/\" && value !== `${basepath}/`) return value.slice(0, -1);\n\treturn value;\n}\n/**\n* Compare two pathnames for exact equality after normalizing trailing slashes\n* relative to the provided `basepath`.\n*/\nfunction exactPathTest(pathName1, pathName2, basepath) {\n\treturn removeTrailingSlash(pathName1, basepath) === removeTrailingSlash(pathName2, basepath);\n}\n/**\n* Resolve a destination path against a base, honoring trailing-slash policy\n* and supporting relative segments (`.`/`..`) and absolute `to` values.\n*/\nfunction resolvePath({ base, to, trailingSlash = \"never\", cache }) {\n\tconst isAbsolute = to.startsWith(\"/\");\n\tconst isBase = !isAbsolute && to === \".\";\n\tlet key;\n\tif (cache) {\n\t\tkey = isAbsolute ? to : isBase ? base : base + \"\\0\" + to;\n\t\tconst cached = cache.get(key);\n\t\tif (cached) return cached;\n\t}\n\tlet baseSegments;\n\tif (isBase) baseSegments = base.split(\"/\");\n\telse if (isAbsolute) baseSegments = to.split(\"/\");\n\telse {\n\t\tbaseSegments = base.split(\"/\");\n\t\twhile (baseSegments.length > 1 && last(baseSegments) === \"\") baseSegments.pop();\n\t\tconst toSegments = to.split(\"/\");\n\t\tfor (let index = 0, length = toSegments.length; index < length; index++) {\n\t\t\tconst value = toSegments[index];\n\t\t\tif (value === \"\") {\n\t\t\t\tif (!index) baseSegments = [value];\n\t\t\t\telse if (index === length - 1) baseSegments.push(value);\n\t\t\t} else if (value === \"..\") baseSegments.pop();\n\t\t\telse if (value === \".\") {} else baseSegments.push(value);\n\t\t}\n\t}\n\tif (baseSegments.length > 1) {\n\t\tif (last(baseSegments) === \"\") {\n\t\t\tif (trailingSlash === \"never\") baseSegments.pop();\n\t\t} else if (trailingSlash === \"always\") baseSegments.push(\"\");\n\t}\n\tconst result = cleanPath(baseSegments.join(\"/\")) || \"/\";\n\tif (key && cache) cache.set(key, result);\n\treturn result;\n}\n/**\n* Create a pre-compiled decode config from allowed characters.\n* This should be called once at router initialization.\n*/\nfunction compileDecodeCharMap(pathParamsAllowedCharacters) {\n\tconst charMap = new Map(pathParamsAllowedCharacters.map((char) => [encodeURIComponent(char), char]));\n\tconst pattern = Array.from(charMap.keys()).map((key) => key.replace(/[.*+?^${}()|[\\]\\\\]/g, \"\\\\$&\")).join(\"|\");\n\tconst regex = new RegExp(pattern, \"g\");\n\treturn (encoded) => encoded.replace(regex, (match) => charMap.get(match) ?? match);\n}\nfunction encodeParam(key, params, decoder) {\n\tconst value = params[key];\n\tif (typeof value !== \"string\") return value;\n\tif (key === \"_splat\") {\n\t\tif (/^[a-zA-Z0-9\\-._~!/]*$/.test(value)) return value;\n\t\treturn value.split(\"/\").map((segment) => encodePathParam(segment, decoder)).join(\"/\");\n\t} else return encodePathParam(value, decoder);\n}\n/**\n* Interpolate params and wildcards into a route path template.\n*\n* - Encodes params safely (configurable allowed characters)\n* - Supports `{-$optional}` segments, `{prefix{$id}suffix}` and `{$}` wildcards\n*/\nfunction interpolatePath({ path, params, decoder, ...rest }) {\n\tlet isMissingParams = false;\n\tconst usedParams = Object.create(null);\n\tif (!path || path === \"/\") return {\n\t\tinterpolatedPath: \"/\",\n\t\tusedParams,\n\t\tisMissingParams\n\t};\n\tif (!path.includes(\"$\")) return {\n\t\tinterpolatedPath: path,\n\t\tusedParams,\n\t\tisMissingParams\n\t};\n\tif (isServer ?? rest.server) {\n\t\tif (path.indexOf(\"{\") === -1) {\n\t\t\tconst length = path.length;\n\t\t\tlet cursor = 0;\n\t\t\tlet joined = \"\";\n\t\t\twhile (cursor < length) {\n\t\t\t\twhile (cursor < length && path.charCodeAt(cursor) === 47) cursor++;\n\t\t\t\tif (cursor >= length) break;\n\t\t\t\tconst start = cursor;\n\t\t\t\tlet end = path.indexOf(\"/\", cursor);\n\t\t\t\tif (end === -1) end = length;\n\t\t\t\tcursor = end;\n\t\t\t\tconst part = path.substring(start, end);\n\t\t\t\tif (!part) continue;\n\t\t\t\tif (part.charCodeAt(0) === 36) if (part.length === 1) {\n\t\t\t\t\tconst splat = params._splat;\n\t\t\t\t\tusedParams._splat = splat;\n\t\t\t\t\tusedParams[\"*\"] = splat;\n\t\t\t\t\tif (!splat) {\n\t\t\t\t\t\tisMissingParams = true;\n\t\t\t\t\t\tcontinue;\n\t\t\t\t\t}\n\t\t\t\t\tconst value = encodeParam(\"_splat\", params, decoder);\n\t\t\t\t\tjoined += \"/\" + value;\n\t\t\t\t} else {\n\t\t\t\t\tconst key = part.substring(1);\n\t\t\t\t\tif (!isMissingParams && !(key in params)) isMissingParams = true;\n\t\t\t\t\tusedParams[key] = params[key];\n\t\t\t\t\tconst value = encodeParam(key, params, decoder) ?? \"undefined\";\n\t\t\t\t\tjoined += \"/\" + value;\n\t\t\t\t}\n\t\t\t\telse joined += \"/\" + part;\n\t\t\t}\n\t\t\tif (path.endsWith(\"/\")) joined += \"/\";\n\t\t\treturn {\n\t\t\t\tusedParams,\n\t\t\t\tinterpolatedPath: joined || \"/\",\n\t\t\t\tisMissingParams\n\t\t\t};\n\t\t}\n\t}\n\tconst length = path.length;\n\tlet cursor = 0;\n\tlet segment;\n\tlet joined = \"\";\n\twhile (cursor < length) {\n\t\tconst start = cursor;\n\t\tsegment = parseSegment(path, start, segment);\n\t\tconst end = segment[5];\n\t\tcursor = end + 1;\n\t\tif (start === end) continue;\n\t\tconst kind = segment[0];\n\t\tif (kind === 0) {\n\t\t\tjoined += \"/\" + path.substring(start, end);\n\t\t\tcontinue;\n\t\t}\n\t\tif (kind === 2) {\n\t\t\tconst splat = params._splat;\n\t\t\tusedParams._splat = splat;\n\t\t\tusedParams[\"*\"] = splat;\n\t\t\tconst prefix = path.substring(start, segment[1]);\n\t\t\tconst suffix = path.substring(segment[4], end);\n\t\t\tif (!splat) {\n\t\t\t\tisMissingParams = true;\n\t\t\t\tif (prefix || suffix) joined += \"/\" + prefix + suffix;\n\t\t\t\tcontinue;\n\t\t\t}\n\t\t\tconst value = encodeParam(\"_splat\", params, decoder);\n\t\t\tjoined += \"/\" + prefix + value + suffix;\n\t\t\tcontinue;\n\t\t}\n\t\tif (kind === 1) {\n\t\t\tconst key = path.substring(segment[2], segment[3]);\n\t\t\tif (!isMissingParams && !(key in params)) isMissingParams = true;\n\t\t\tusedParams[key] = params[key];\n\t\t\tconst prefix = path.substring(start, segment[1]);\n\t\t\tconst suffix = path.substring(segment[4], end);\n\t\t\tconst value = encodeParam(key, params, decoder) ?? \"undefined\";\n\t\t\tjoined += \"/\" + prefix + value + suffix;\n\t\t\tcontinue;\n\t\t}\n\t\tif (kind === 3) {\n\t\t\tconst key = path.substring(segment[2], segment[3]);\n\t\t\tconst valueRaw = params[key];\n\t\t\tif (valueRaw == null) continue;\n\t\t\tusedParams[key] = valueRaw;\n\t\t\tconst prefix = path.substring(start, segment[1]);\n\t\t\tconst suffix = path.substring(segment[4], end);\n\t\t\tconst value = encodeParam(key, params, decoder) ?? \"\";\n\t\t\tjoined += \"/\" + prefix + value + suffix;\n\t\t\tcontinue;\n\t\t}\n\t}\n\tif (path.endsWith(\"/\")) joined += \"/\";\n\treturn {\n\t\tusedParams,\n\t\tinterpolatedPath: joined || \"/\",\n\t\tisMissingParams\n\t};\n}\nfunction encodePathParam(value, decoder) {\n\tconst encoded = encodeURIComponent(value);\n\treturn decoder?.(encoded) ?? encoded;\n}\n//#endregion\nexport { cleanPath, compileDecodeCharMap, exactPathTest, interpolatePath, joinPaths, removeTrailingSlash, resolvePath, trimPath, trimPathLeft, trimPathRight };\n\n//# sourceMappingURL=path.js.map","//#region src/link.ts\nconst preloadWarning = \"Error preloading route! ☝️\";\n//#endregion\nexport { preloadWarning };\n\n//# sourceMappingURL=link.js.map","\"use client\";\nimport React from \"react\";\nimport { jsx } from \"react/jsx-runtime\";\n//#region src/ClientOnly.tsx\n/**\n* Render the children only after the JS has loaded client-side. Use an optional\n* fallback component if the JS is not yet loaded.\n*\n* @example\n* Render a Chart component if JS loads, renders a simple FakeChart\n* component server-side or if there is no JS. The FakeChart can have only the\n* UI without the behavior or be a loading spinner or skeleton.\n*\n* ```tsx\n* return (\n* <ClientOnly fallback={<FakeChart />}>\n* <Chart />\n* </ClientOnly>\n* )\n* ```\n*/\nfunction ClientOnly({ children, fallback = null }) {\n\treturn useHydrated() ? /* @__PURE__ */ jsx(React.Fragment, { children }) : /* @__PURE__ */ jsx(React.Fragment, { children: fallback });\n}\n/**\n* Return a boolean indicating if the JS has been hydrated already.\n* When doing Server-Side Rendering, the result will always be false.\n* When doing Client-Side Rendering, the result will always be false on the\n* first render and true from then on. Even if a new component renders it will\n* always start with true.\n*\n* @example\n* ```tsx\n* // Disable a button that needs JS to work.\n* let hydrated = useHydrated()\n* return (\n* <button type=\"button\" disabled={!hydrated} onClick={doSomethingCustom}>\n* Click me\n* </button>\n* )\n* ```\n* @returns True if the JS has been hydrated already, false otherwise.\n*/\nfunction useHydrated() {\n\treturn React.useSyncExternalStore(subscribe, () => true, () => false);\n}\nfunction subscribe() {\n\treturn () => {};\n}\n//#endregion\nexport { ClientOnly, useHydrated };\n\n//# sourceMappingURL=ClientOnly.js.map","\"use client\";\nimport * as React$1 from \"react\";\n//#region src/routerContext.tsx\nvar routerContext = React$1.createContext(null);\n//#endregion\nexport { routerContext };\n\n//# sourceMappingURL=routerContext.js.map","\"use client\";\nimport { routerContext } from \"./routerContext.js\";\nimport * as React$1 from \"react\";\n//#region src/useRouter.tsx\n/**\n* Access the current TanStack Router instance from React context.\n* Must be used within a `RouterProvider`.\n*\n* Options:\n* - `warn`: Log a warning if no router context is found (default: true).\n*\n* @returns The registered router instance.\n* @link https://tanstack.com/router/latest/docs/framework/react/api/router/useRouterHook\n*/\nfunction useRouter(opts) {\n\tconst value = React$1.useContext(routerContext);\n\tif (process.env.NODE_ENV !== \"production\") {\n\t\tif ((opts?.warn ?? true) && !value) console.warn(\"Warning: useRouter must be used inside a <RouterProvider> component!\");\n\t}\n\treturn value;\n}\n//#endregion\nexport { useRouter };\n\n//# sourceMappingURL=useRouter.js.map","/**\n * @license React\n * use-sync-external-store-shim/with-selector.production.js\n *\n * Copyright (c) Meta Platforms, Inc. and affiliates.\n *\n * This source code is licensed under the MIT license found in the\n * LICENSE file in the root directory of this source tree.\n */\n\n\"use strict\";\nvar React = require(\"react\"),\n shim = require(\"use-sync-external-store/shim\");\nfunction is(x, y) {\n return (x === y && (0 !== x || 1 / x === 1 / y)) || (x !== x && y !== y);\n}\nvar objectIs = \"function\" === typeof Object.is ? Object.is : is,\n useSyncExternalStore = shim.useSyncExternalStore,\n useRef = React.useRef,\n useEffect = React.useEffect,\n useMemo = React.useMemo,\n useDebugValue = React.useDebugValue;\nexports.useSyncExternalStoreWithSelector = function (\n subscribe,\n getSnapshot,\n getServerSnapshot,\n selector,\n isEqual\n) {\n var instRef = useRef(null);\n if (null === instRef.current) {\n var inst = { hasValue: !1, value: null };\n instRef.current = inst;\n } else inst = instRef.current;\n instRef = useMemo(\n function () {\n function memoizedSelector(nextSnapshot) {\n if (!hasMemo) {\n hasMemo = !0;\n memoizedSnapshot = nextSnapshot;\n nextSnapshot = selector(nextSnapshot);\n if (void 0 !== isEqual && inst.hasValue) {\n var currentSelection = inst.value;\n if (isEqual(currentSelection, nextSnapshot))\n return (memoizedSelection = currentSelection);\n }\n return (memoizedSelection = nextSnapshot);\n }\n currentSelection = memoizedSelection;\n if (objectIs(memoizedSnapshot, nextSnapshot)) return currentSelection;\n var nextSelection = selector(nextSnapshot);\n if (void 0 !== isEqual && isEqual(currentSelection, nextSelection))\n return (memoizedSnapshot = nextSnapshot), currentSelection;\n memoizedSnapshot = nextSnapshot;\n return (memoizedSelection = nextSelection);\n }\n var hasMemo = !1,\n memoizedSnapshot,\n memoizedSelection,\n maybeGetServerSnapshot =\n void 0 === getServerSnapshot ? null : getServerSnapshot;\n return [\n function () {\n return memoizedSelector(getSnapshot());\n },\n null === maybeGetServerSnapshot\n ? void 0\n : function () {\n return memoizedSelector(maybeGetServerSnapshot());\n }\n ];\n },\n [getSnapshot, getServerSnapshot, selector, isEqual]\n );\n var value = useSyncExternalStore(subscribe, instRef[0], instRef[1]);\n useEffect(\n function () {\n inst.hasValue = !0;\n inst.value = value;\n },\n [value]\n );\n useDebugValue(value);\n return value;\n};\n","'use strict';\n\nif (process.env.NODE_ENV === 'production') {\n module.exports = require('../cjs/use-sync-external-store-shim/with-selector.production.js');\n} else {\n module.exports = require('../cjs/use-sync-external-store-shim/with-selector.development.js');\n}\n","import { useCallback } from \"react\";\nimport { useSyncExternalStoreWithSelector } from \"use-sync-external-store/shim/with-selector\";\nfunction defaultCompare(a, b) {\n return a === b;\n}\nfunction useStore(atom, selector, compare = defaultCompare) {\n const subscribe = useCallback(\n (handleStoreChange) => {\n if (!atom) {\n return () => {\n };\n }\n const { unsubscribe } = atom.subscribe(handleStoreChange);\n return unsubscribe;\n },\n [atom]\n );\n const boundGetSnapshot = useCallback(() => atom?.get(), [atom]);\n const selectedSnapshot = useSyncExternalStoreWithSelector(\n subscribe,\n boundGetSnapshot,\n boundGetSnapshot,\n selector,\n compare\n );\n return selectedSnapshot;\n}\nexport {\n useStore\n};\n//# sourceMappingURL=useStore.js.map\n","/**\n * @license React\n * react-dom.production.js\n *\n * Copyright (c) Meta Platforms, Inc. and affiliates.\n *\n * This source code is licensed under the MIT license found in the\n * LICENSE file in the root directory of this source tree.\n */\n\n\"use strict\";\nvar React = require(\"react\");\nfunction formatProdErrorMessage(code) {\n var url = \"https://react.dev/errors/\" + code;\n if (1 < arguments.length) {\n url += \"?args[]=\" + encodeURIComponent(arguments[1]);\n for (var i = 2; i < arguments.length; i++)\n url += \"&args[]=\" + encodeURIComponent(arguments[i]);\n }\n return (\n \"Minified React error #\" +\n code +\n \"; visit \" +\n url +\n \" for the full message or use the non-minified dev environment for full errors and additional helpful warnings.\"\n );\n}\nfunction noop() {}\nvar Internals = {\n d: {\n f: noop,\n r: function () {\n throw Error(formatProdErrorMessage(522));\n },\n D: noop,\n C: noop,\n L: noop,\n m: noop,\n X: noop,\n S: noop,\n M: noop\n },\n p: 0,\n findDOMNode: null\n },\n REACT_PORTAL_TYPE = Symbol.for(\"react.portal\");\nfunction createPortal$1(children, containerInfo, implementation) {\n var key =\n 3 < arguments.length && void 0 !== arguments[3] ? arguments[3] : null;\n return {\n $$typeof: REACT_PORTAL_TYPE,\n key: null == key ? null : \"\" + key,\n children: children,\n containerInfo: containerInfo,\n implementation: implementation\n };\n}\nvar ReactSharedInternals =\n React.__CLIENT_INTERNALS_DO_NOT_USE_OR_WARN_USERS_THEY_CANNOT_UPGRADE;\nfunction getCrossOriginStringAs(as, input) {\n if (\"font\" === as) return \"\";\n if (\"string\" === typeof input)\n return \"use-credentials\" === input ? input : \"\";\n}\nexports.__DOM_INTERNALS_DO_NOT_USE_OR_WARN_USERS_THEY_CANNOT_UPGRADE =\n Internals;\nexports.createPortal = function (children, container) {\n var key =\n 2 < arguments.length && void 0 !== arguments[2] ? arguments[2] : null;\n if (\n !container ||\n (1 !== container.nodeType &&\n 9 !== container.nodeType &&\n 11 !== container.nodeType)\n )\n throw Error(formatProdErrorMessage(299));\n return createPortal$1(children, container, null, key);\n};\nexports.flushSync = function (fn) {\n var previousTransition = ReactSharedInternals.T,\n previousUpdatePriority = Internals.p;\n try {\n if (((ReactSharedInternals.T = null), (Internals.p = 2), fn)) return fn();\n } finally {\n (ReactSharedInternals.T = previousTransition),\n (Internals.p = previousUpdatePriority),\n Internals.d.f();\n }\n};\nexports.preconnect = function (href, options) {\n \"string\" === typeof href &&\n (options\n ? ((options = options.crossOrigin),\n (options =\n \"string\" === typeof options\n ? \"use-credentials\" === options\n ? options\n : \"\"\n : void 0))\n : (options = null),\n Internals.d.C(href, options));\n};\nexports.prefetchDNS = function (href) {\n \"string\" === typeof href && Internals.d.D(href);\n};\nexports.preinit = function (href, options) {\n if (\"string\" === typeof href && options && \"string\" === typeof options.as) {\n var as = options.as,\n crossOrigin = getCrossOriginStringAs(as, options.crossOrigin),\n integrity =\n \"string\" === typeof options.integrity ? options.integrity : void 0,\n fetchPriority =\n \"string\" === typeof options.fetchPriority\n ? options.fetchPriority\n : void 0;\n \"style\" === as\n ? Internals.d.S(\n href,\n \"string\" === typeof options.precedence ? options.precedence : void 0,\n {\n crossOrigin: crossOrigin,\n integrity: integrity,\n fetchPriority: fetchPriority\n }\n )\n : \"script\" === as &&\n Internals.d.X(href, {\n crossOrigin: crossOrigin,\n integrity: integrity,\n fetchPriority: fetchPriority,\n nonce: \"string\" === typeof options.nonce ? options.nonce : void 0\n });\n }\n};\nexports.preinitModule = function (href, options) {\n if (\"string\" === typeof href)\n if (\"object\" === typeof options && null !== options) {\n if (null == options.as || \"script\" === options.as) {\n var crossOrigin = getCrossOriginStringAs(\n options.as,\n options.crossOrigin\n );\n Internals.d.M(href, {\n crossOrigin: crossOrigin,\n integrity:\n \"string\" === typeof options.integrity ? options.integrity : void 0,\n nonce: \"string\" === typeof options.nonce ? options.nonce : void 0\n });\n }\n } else null == options && Internals.d.M(href);\n};\nexports.preload = function (href, options) {\n if (\n \"string\" === typeof href &&\n \"object\" === typeof options &&\n null !== options &&\n \"string\" === typeof options.as\n ) {\n var as = options.as,\n crossOrigin = getCrossOriginStringAs(as, options.crossOrigin);\n Internals.d.L(href, as, {\n crossOrigin: crossOrigin,\n integrity:\n \"string\" === typeof options.integrity ? options.integrity : void 0,\n nonce: \"string\" === typeof options.nonce ? options.nonce : void 0,\n type: \"string\" === typeof options.type ? options.type : void 0,\n fetchPriority:\n \"string\" === typeof options.fetchPriority\n ? options.fetchPriority\n : void 0,\n referrerPolicy:\n \"string\" === typeof options.referrerPolicy\n ? options.referrerPolicy\n : void 0,\n imageSrcSet:\n \"string\" === typeof options.imageSrcSet ? options.imageSrcSet : void 0,\n imageSizes:\n \"string\" === typeof options.imageSizes ? options.imageSizes : void 0,\n media: \"string\" === typeof options.media ? options.media : void 0\n });\n }\n};\nexports.preloadModule = function (href, options) {\n if (\"string\" === typeof href)\n if (options) {\n var crossOrigin = getCrossOriginStringAs(options.as, options.crossOrigin);\n Internals.d.m(href, {\n as:\n \"string\" === typeof options.as && \"script\" !== options.as\n ? options.as\n : void 0,\n crossOrigin: crossOrigin,\n integrity:\n \"string\" === typeof options.integrity ? options.integrity : void 0\n });\n } else Internals.d.m(href);\n};\nexports.requestFormReset = function (form) {\n Internals.d.r(form);\n};\nexports.unstable_batchedUpdates = function (fn, a) {\n return fn(a);\n};\nexports.useFormState = function (action, initialState, permalink) {\n return ReactSharedInternals.H.useFormState(action, initialState, permalink);\n};\nexports.useFormStatus = function () {\n return ReactSharedInternals.H.useHostTransitionStatus();\n};\nexports.version = \"19.2.7\";\n","'use strict';\n\nfunction checkDCE() {\n /* global __REACT_DEVTOOLS_GLOBAL_HOOK__ */\n if (\n typeof __REACT_DEVTOOLS_GLOBAL_HOOK__ === 'undefined' ||\n typeof __REACT_DEVTOOLS_GLOBAL_HOOK__.checkDCE !== 'function'\n ) {\n return;\n }\n if (process.env.NODE_ENV !== 'production') {\n // This branch is unreachable because this function is only called\n // in production, but the condition is true only in development.\n // Therefore if the branch is still here, dead code elimination wasn't\n // properly applied.\n // Don't change the message. React DevTools relies on it. Also make sure\n // this message doesn't occur elsewhere in this function, or it will cause\n // a false positive.\n throw new Error('^_^');\n }\n try {\n // Verify that the code above has been dead code eliminated (DCE'd).\n __REACT_DEVTOOLS_GLOBAL_HOOK__.checkDCE(checkDCE);\n } catch (err) {\n // DevTools shouldn't crash React, no matter what.\n // We should still report in case we break this code.\n console.error(err);\n }\n}\n\nif (process.env.NODE_ENV === 'production') {\n // DCE check should happen before ReactDOM bundle executes so that\n // DevTools can report bad minification during injection.\n checkDCE();\n module.exports = require('./cjs/react-dom.production.js');\n} else {\n module.exports = require('./cjs/react-dom.development.js');\n}\n","\"use client\";\nimport { useForwardedRef, useIntersectionObserver } from \"./utils.js\";\nimport { useHydrated } from \"./ClientOnly.js\";\nimport { useRouter } from \"./useRouter.js\";\nimport { deepEqual, exactPathTest, functionalUpdate, hasKeys, isDangerousProtocol, preloadWarning, removeTrailingSlash } from \"@tanstack/router-core\";\nimport * as React$1 from \"react\";\nimport { jsx } from \"react/jsx-runtime\";\nimport { useStore } from \"@tanstack/react-store\";\nimport { isServer } from \"@tanstack/router-core/isServer\";\nimport { flushSync } from \"react-dom\";\n//#region src/link.tsx\n/**\n* Build anchor-like props for declarative navigation and preloading.\n*\n* Returns stable `href`, event handlers and accessibility props derived from\n* router options and active state. Used internally by `Link` and custom links.\n*\n* Options cover `to`, `params`, `search`, `hash`, `state`, `preload`,\n* `activeProps`, `inactiveProps`, and more.\n*\n* @returns React anchor props suitable for `<a>` or custom components.\n* @link https://tanstack.com/router/latest/docs/framework/react/api/router/useLinkPropsHook\n*/\nfunction useLinkProps(options, forwardedRef) {\n\tconst router = useRouter();\n\tconst innerRef = useForwardedRef(forwardedRef);\n\tconst _isServer = isServer ?? router.isServer;\n\tconst { activeProps, inactiveProps, activeOptions, to, preload: userPreload, preloadDelay: userPreloadDelay, preloadIntentProximity: _preloadIntentProximity, hashScrollIntoView, replace, startTransition, resetScroll, viewTransition, children, target, disabled, style, className, onClick, onBlur, onFocus, onMouseEnter, onMouseLeave, onTouchStart, ignoreBlocker, params: _params, search: _search, hash: _hash, state: _state, mask: _mask, reloadDocument: _reloadDocument, unsafeRelative: _unsafeRelative, from: _from, _fromLocation, ...propsSafeToSpread } = options;\n\tif (_isServer) {\n\t\tconst safeInternal = isSafeInternal(to);\n\t\tif (typeof to === \"string\" && !safeInternal && to.indexOf(\":\") > -1) try {\n\t\t\tnew URL(to);\n\t\t\tif (isDangerousProtocol(to, router.protocolAllowlist)) {\n\t\t\t\tif (process.env.NODE_ENV !== \"production\") console.warn(`Blocked Link with dangerous protocol: ${to}`);\n\t\t\t\treturn {\n\t\t\t\t\t...propsSafeToSpread,\n\t\t\t\t\tref: innerRef,\n\t\t\t\t\thref: void 0,\n\t\t\t\t\t...children && { children },\n\t\t\t\t\t...target && { target },\n\t\t\t\t\t...disabled && { disabled },\n\t\t\t\t\t...style && { style },\n\t\t\t\t\t...className && { className }\n\t\t\t\t};\n\t\t\t}\n\t\t\treturn {\n\t\t\t\t...propsSafeToSpread,\n\t\t\t\tref: innerRef,\n\t\t\t\thref: to,\n\t\t\t\t...children && { children },\n\t\t\t\t...target && { target },\n\t\t\t\t...disabled && { disabled },\n\t\t\t\t...style && { style },\n\t\t\t\t...className && { className }\n\t\t\t};\n\t\t} catch {}\n\t\tconst next = router.buildLocation({\n\t\t\t...options,\n\t\t\tfrom: options.from\n\t\t});\n\t\tconst hrefOption = getHrefOption(next.maskedLocation ? next.maskedLocation.publicHref : next.publicHref, next.maskedLocation ? next.maskedLocation.external : next.external, router.history, disabled);\n\t\tconst externalLink = (() => {\n\t\t\tif (hrefOption?.external) {\n\t\t\t\tif (isDangerousProtocol(hrefOption.href, router.protocolAllowlist)) {\n\t\t\t\t\tif (process.env.NODE_ENV !== \"production\") console.warn(`Blocked Link with dangerous protocol: ${hrefOption.href}`);\n\t\t\t\t\treturn;\n\t\t\t\t}\n\t\t\t\treturn hrefOption.href;\n\t\t\t}\n\t\t\tif (safeInternal) return void 0;\n\t\t\tif (typeof to === \"string\" && to.indexOf(\":\") > -1) try {\n\t\t\t\tnew URL(to);\n\t\t\t\tif (isDangerousProtocol(to, router.protocolAllowlist)) {\n\t\t\t\t\tif (process.env.NODE_ENV !== \"production\") console.warn(`Blocked Link with dangerous protocol: ${to}`);\n\t\t\t\t\treturn;\n\t\t\t\t}\n\t\t\t\treturn to;\n\t\t\t} catch {}\n\t\t})();\n\t\tconst isActive = (() => {\n\t\t\tif (externalLink) return false;\n\t\t\tconst currentLocation = router.stores.location.get();\n\t\t\tconst exact = activeOptions?.exact ?? false;\n\t\t\tif (exact) {\n\t\t\t\tif (!exactPathTest(currentLocation.pathname, next.pathname, router.basepath)) return false;\n\t\t\t} else {\n\t\t\t\tconst currentPathSplit = removeTrailingSlash(currentLocation.pathname, router.basepath);\n\t\t\t\tconst nextPathSplit = removeTrailingSlash(next.pathname, router.basepath);\n\t\t\t\tif (!(currentPathSplit.startsWith(nextPathSplit) && (currentPathSplit.length === nextPathSplit.length || currentPathSplit[nextPathSplit.length] === \"/\"))) return false;\n\t\t\t}\n\t\t\tif (activeOptions?.includeSearch ?? true) {\n\t\t\t\tif (currentLocation.search !== next.search) {\n\t\t\t\t\tconst currentSearchEmpty = !currentLocation.search || typeof currentLocation.search === \"object\" && !hasKeys(currentLocation.search);\n\t\t\t\t\tconst nextSearchEmpty = !next.search || typeof next.search === \"object\" && !hasKeys(next.search);\n\t\t\t\t\tif (!(currentSearchEmpty && nextSearchEmpty)) {\n\t\t\t\t\t\tif (!deepEqual(currentLocation.search, next.search, {\n\t\t\t\t\t\t\tpartial: !exact,\n\t\t\t\t\t\t\tignoreUndefined: !activeOptions?.explicitUndefined\n\t\t\t\t\t\t})) return false;\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t\tif (activeOptions?.includeHash) return false;\n\t\t\treturn true;\n\t\t})();\n\t\tif (externalLink) return {\n\t\t\t...propsSafeToSpread,\n\t\t\tref: innerRef,\n\t\t\thref: externalLink,\n\t\t\t...children && { children },\n\t\t\t...target && { target },\n\t\t\t...disabled && { disabled },\n\t\t\t...style && { style },\n\t\t\t...className && { className }\n\t\t};\n\t\tconst resolvedActiveProps = isActive ? functionalUpdate(activeProps, {}) ?? STATIC_ACTIVE_OBJECT : STATIC_EMPTY_OBJECT;\n\t\tconst resolvedInactiveProps = isActive ? STATIC_EMPTY_OBJECT : functionalUpdate(inactiveProps, {}) ?? STATIC_EMPTY_OBJECT;\n\t\tconst resolvedStyle = (() => {\n\t\t\tconst baseStyle = style;\n\t\t\tconst activeStyle = resolvedActiveProps.style;\n\t\t\tconst inactiveStyle = resolvedInactiveProps.style;\n\t\t\tif (!baseStyle && !activeStyle && !inactiveStyle) return;\n\t\t\tif (baseStyle && !activeStyle && !inactiveStyle) return baseStyle;\n\t\t\tif (!baseStyle && activeStyle && !inactiveStyle) return activeStyle;\n\t\t\tif (!baseStyle && !activeStyle && inactiveStyle) return inactiveStyle;\n\t\t\treturn {\n\t\t\t\t...baseStyle,\n\t\t\t\t...activeStyle,\n\t\t\t\t...inactiveStyle\n\t\t\t};\n\t\t})();\n\t\tconst resolvedClassName = (() => {\n\t\t\tconst baseClassName = className;\n\t\t\tconst activeClassName = resolvedActiveProps.className;\n\t\t\tconst inactiveClassName = resolvedInactiveProps.className;\n\t\t\tif (!baseClassName && !activeClassName && !inactiveClassName) return \"\";\n\t\t\tlet out = \"\";\n\t\t\tif (baseClassName) out = baseClassName;\n\t\t\tif (activeClassName) out = out ? `${out} ${activeClassName}` : activeClassName;\n\t\t\tif (inactiveClassName) out = out ? `${out} ${inactiveClassName}` : inactiveClassName;\n\t\t\treturn out;\n\t\t})();\n\t\treturn {\n\t\t\t...propsSafeToSpread,\n\t\t\t...resolvedActiveProps,\n\t\t\t...resolvedInactiveProps,\n\t\t\thref: hrefOption?.href,\n\t\t\tref: innerRef,\n\t\t\tdisabled: !!disabled,\n\t\t\ttarget,\n\t\t\t...resolvedStyle && { style: resolvedStyle },\n\t\t\t...resolvedClassName && { className: resolvedClassName },\n\t\t\t...disabled && STATIC_DISABLED_PROPS,\n\t\t\t...isActive && STATIC_ACTIVE_PROPS\n\t\t};\n\t}\n\tconst isHydrated = useHydrated();\n\tconst _options = React$1.useMemo(() => options, [\n\t\trouter,\n\t\toptions.from,\n\t\toptions._fromLocation,\n\t\toptions.hash,\n\t\toptions.to,\n\t\toptions.search,\n\t\toptions.params,\n\t\toptions.state,\n\t\toptions.mask,\n\t\toptions.unsafeRelative\n\t]);\n\tconst currentLocation = useStore(router.stores.location, (l) => l, (prev, next) => prev.href === next.href);\n\tconst next = React$1.useMemo(() => {\n\t\tconst opts = {\n\t\t\t_fromLocation: currentLocation,\n\t\t\t..._options\n\t\t};\n\t\treturn router.buildLocation(opts);\n\t}, [\n\t\trouter,\n\t\tcurrentLocation,\n\t\t_options\n\t]);\n\tconst hrefOptionPublicHref = next.maskedLocation ? next.maskedLocation.publicHref : next.publicHref;\n\tconst hrefOptionExternal = next.maskedLocation ? next.maskedLocation.external : next.external;\n\tconst hrefOption = React$1.useMemo(() => getHrefOption(hrefOptionPublicHref, hrefOptionExternal, router.history, disabled), [\n\t\tdisabled,\n\t\threfOptionExternal,\n\t\threfOptionPublicHref,\n\t\trouter.history\n\t]);\n\tconst externalLink = React$1.useMemo(() => {\n\t\tif (hrefOption?.external) {\n\t\t\tif (isDangerousProtocol(hrefOption.href, router.protocolAllowlist)) {\n\t\t\t\tif (process.env.NODE_ENV !== \"production\") console.warn(`Blocked Link with dangerous protocol: ${hrefOption.href}`);\n\t\t\t\treturn;\n\t\t\t}\n\t\t\treturn hrefOption.href;\n\t\t}\n\t\tif (isSafeInternal(to)) return void 0;\n\t\tif (typeof to !== \"string\" || to.indexOf(\":\") === -1) return void 0;\n\t\ttry {\n\t\t\tnew URL(to);\n\t\t\tif (isDangerousProtocol(to, router.protocolAllowlist)) {\n\t\t\t\tif (process.env.NODE_ENV !== \"production\") console.warn(`Blocked Link with dangerous protocol: ${to}`);\n\t\t\t\treturn;\n\t\t\t}\n\t\t\treturn to;\n\t\t} catch {}\n\t}, [\n\t\tto,\n\t\threfOption,\n\t\trouter.protocolAllowlist\n\t]);\n\tconst isActive = React$1.useMemo(() => {\n\t\tif (externalLink) return false;\n\t\tif (activeOptions?.exact) {\n\t\t\tif (!exactPathTest(currentLocation.pathname, next.pathname, router.basepath)) return false;\n\t\t} else {\n\t\t\tconst currentPathSplit = removeTrailingSlash(currentLocation.pathname, router.basepath);\n\t\t\tconst nextPathSplit = removeTrailingSlash(next.pathname, router.basepath);\n\t\t\tif (!(currentPathSplit.startsWith(nextPathSplit) && (currentPathSplit.length === nextPathSplit.length || currentPathSplit[nextPathSplit.length] === \"/\"))) return false;\n\t\t}\n\t\tif (activeOptions?.includeSearch ?? true) {\n\t\t\tif (!deepEqual(currentLocation.search, next.search, {\n\t\t\t\tpartial: !activeOptions?.exact,\n\t\t\t\tignoreUndefined: !activeOptions?.explicitUndefined\n\t\t\t})) return false;\n\t\t}\n\t\tif (activeOptions?.includeHash) return isHydrated && currentLocation.hash === next.hash;\n\t\treturn true;\n\t}, [\n\t\tactiveOptions?.exact,\n\t\tactiveOptions?.explicitUndefined,\n\t\tactiveOptions?.includeHash,\n\t\tactiveOptions?.includeSearch,\n\t\tcurrentLocation,\n\t\texternalLink,\n\t\tisHydrated,\n\t\tnext.hash,\n\t\tnext.pathname,\n\t\tnext.search,\n\t\trouter.basepath\n\t]);\n\tconst resolvedActiveProps = isActive ? functionalUpdate(activeProps, {}) ?? STATIC_ACTIVE_OBJECT : STATIC_EMPTY_OBJECT;\n\tconst resolvedInactiveProps = isActive ? STATIC_EMPTY_OBJECT : functionalUpdate(inactiveProps, {}) ?? STATIC_EMPTY_OBJECT;\n\tconst resolvedClassName = [\n\t\tclassName,\n\t\tresolvedActiveProps.className,\n\t\tresolvedInactiveProps.className\n\t].filter(Boolean).join(\" \");\n\tconst resolvedStyle = (style || resolvedActiveProps.style || resolvedInactiveProps.style) && {\n\t\t...style,\n\t\t...resolvedActiveProps.style,\n\t\t...resolvedInactiveProps.style\n\t};\n\tconst [isTransitioning, setIsTransitioning] = React$1.useState(false);\n\tconst hasRenderFetched = React$1.useRef(false);\n\tconst preload = options.reloadDocument || externalLink ? false : userPreload ?? router.options.defaultPreload;\n\tconst preloadDelay = userPreloadDelay ?? router.options.defaultPreloadDelay ?? 0;\n\tconst doPreload = React$1.useCallback(() => {\n\t\trouter.preloadRoute({\n\t\t\t..._options,\n\t\t\t_builtLocation: next\n\t\t}).catch((err) => {\n\t\t\tconsole.warn(err);\n\t\t\tconsole.warn(preloadWarning);\n\t\t});\n\t}, [\n\t\trouter,\n\t\t_options,\n\t\tnext\n\t]);\n\tuseIntersectionObserver(innerRef, React$1.useCallback((entry) => {\n\t\tif (entry?.isIntersecting) doPreload();\n\t}, [doPreload]), intersectionObserverOptions, { disabled: !!disabled || !(preload === \"viewport\") });\n\tReact$1.useEffect(() => {\n\t\tif (hasRenderFetched.current) return;\n\t\tif (!disabled && preload === \"render\") {\n\t\t\tdoPreload();\n\t\t\thasRenderFetched.current = true;\n\t\t}\n\t}, [\n\t\tdisabled,\n\t\tdoPreload,\n\t\tpreload\n\t]);\n\tconst handleClick = (e) => {\n\t\tconst elementTarget = e.currentTarget.getAttribute(\"target\");\n\t\tconst effectiveTarget = target !== void 0 ? target : elementTarget;\n\t\tif (!disabled && !isCtrlEvent(e) && !e.defaultPrevented && (!effectiveTarget || effectiveTarget === \"_self\") && e.button === 0) {\n\t\t\te.preventDefault();\n\t\t\tflushSync(() => {\n\t\t\t\tsetIsTransitioning(true);\n\t\t\t});\n\t\t\tconst unsub = router.subscribe(\"onResolved\", () => {\n\t\t\t\tunsub();\n\t\t\t\tsetIsTransitioning(false);\n\t\t\t});\n\t\t\trouter.navigate({\n\t\t\t\t..._options,\n\t\t\t\treplace,\n\t\t\t\tresetScroll,\n\t\t\t\thashScrollIntoView,\n\t\t\t\tstartTransition,\n\t\t\t\tviewTransition,\n\t\t\t\tignoreBlocker\n\t\t\t});\n\t\t}\n\t};\n\tif (externalLink) return {\n\t\t...propsSafeToSpread,\n\t\tref: innerRef,\n\t\thref: externalLink,\n\t\t...children && { children },\n\t\t...target && { target },\n\t\t...disabled && { disabled },\n\t\t...style && { style },\n\t\t...className && { className },\n\t\t...onClick && { onClick },\n\t\t...onBlur && { onBlur },\n\t\t...onFocus && { onFocus },\n\t\t...onMouseEnter && { onMouseEnter },\n\t\t...onMouseLeave && { onMouseLeave },\n\t\t...onTouchStart && { onTouchStart }\n\t};\n\tconst enqueueIntentPreload = (e) => {\n\t\tif (disabled || preload !== \"intent\") return;\n\t\tif (!preloadDelay) {\n\t\t\tdoPreload();\n\t\t\treturn;\n\t\t}\n\t\tconst eventTarget = e.currentTarget;\n\t\tif (timeoutMap.has(eventTarget)) return;\n\t\tconst id = setTimeout(() => {\n\t\t\ttimeoutMap.delete(eventTarget);\n\t\t\tdoPreload();\n\t\t}, preloadDelay);\n\t\ttimeoutMap.set(eventTarget, id);\n\t};\n\tconst handleTouchStart = (_) => {\n\t\tif (disabled || preload !== \"intent\") return;\n\t\tdoPreload();\n\t};\n\tconst handleLeave = (e) => {\n\t\tif (disabled || !preload || !preloadDelay) return;\n\t\tconst eventTarget = e.currentTarget;\n\t\tconst id = timeoutMap.get(eventTarget);\n\t\tif (id) {\n\t\t\tclearTimeout(id);\n\t\t\ttimeoutMap.delete(eventTarget);\n\t\t}\n\t};\n\treturn {\n\t\t...propsSafeToSpread,\n\t\t...resolvedActiveProps,\n\t\t...resolvedInactiveProps,\n\t\thref: hrefOption?.href,\n\t\tref: innerRef,\n\t\tonClick: composeHandlers([onClick, handleClick]),\n\t\tonBlur: composeHandlers([onBlur, handleLeave]),\n\t\tonFocus: composeHandlers([onFocus, enqueueIntentPreload]),\n\t\tonMouseEnter: composeHandlers([onMouseEnter, enqueueIntentPreload]),\n\t\tonMouseLeave: composeHandlers([onMouseLeave, handleLeave]),\n\t\tonTouchStart: composeHandlers([onTouchStart, handleTouchStart]),\n\t\tdisabled: !!disabled,\n\t\ttarget,\n\t\t...resolvedStyle && { style: resolvedStyle },\n\t\t...resolvedClassName && { className: resolvedClassName },\n\t\t...disabled && STATIC_DISABLED_PROPS,\n\t\t...isActive && STATIC_ACTIVE_PROPS,\n\t\t...isHydrated && isTransitioning && STATIC_TRANSITIONING_PROPS\n\t};\n}\nvar STATIC_EMPTY_OBJECT = {};\nvar STATIC_ACTIVE_OBJECT = { className: \"active\" };\nvar STATIC_DISABLED_PROPS = {\n\trole: \"link\",\n\t\"aria-disabled\": true\n};\nvar STATIC_ACTIVE_PROPS = {\n\t\"data-status\": \"active\",\n\t\"aria-current\": \"page\"\n};\nvar STATIC_TRANSITIONING_PROPS = { \"data-transitioning\": \"transitioning\" };\nvar timeoutMap = /* @__PURE__ */ new WeakMap();\nvar intersectionObserverOptions = { rootMargin: \"100px\" };\nvar composeHandlers = (handlers) => (e) => {\n\tfor (const handler of handlers) {\n\t\tif (!handler) continue;\n\t\tif (e.defaultPrevented) return;\n\t\thandler(e);\n\t}\n};\nfunction getHrefOption(publicHref, external, history, disabled) {\n\tif (disabled) return void 0;\n\tif (external) return {\n\t\thref: publicHref,\n\t\texternal: true\n\t};\n\treturn {\n\t\thref: history.createHref(publicHref) || \"/\",\n\t\texternal: false\n\t};\n}\nfunction isSafeInternal(to) {\n\tif (typeof to !== \"string\") return false;\n\tconst zero = to.charCodeAt(0);\n\tif (zero === 47) return to.charCodeAt(1) !== 47;\n\treturn zero === 46;\n}\n/**\n* Creates a typed Link-like component that preserves TanStack Router's\n* navigation semantics and type-safety while delegating rendering to the\n* provided host component.\n*\n* Useful for integrating design system anchors/buttons while keeping\n* router-aware props (eg. `to`, `params`, `search`, `preload`).\n*\n* @param Comp The host component to render (eg. a design-system Link/Button)\n* @returns A router-aware component with the same API as `Link`.\n* @link https://tanstack.com/router/latest/docs/framework/react/guide/custom-link\n*/\nfunction createLink(Comp) {\n\treturn React$1.forwardRef(function CreatedLink(props, ref) {\n\t\treturn /* @__PURE__ */ jsx(Link, {\n\t\t\t...props,\n\t\t\t_asChild: Comp,\n\t\t\tref\n\t\t});\n\t});\n}\n/**\n* A strongly-typed anchor component for declarative navigation.\n* Handles path, search, hash and state updates with optional route preloading\n* and active-state styling.\n*\n* Props:\n* - `preload`: Controls route preloading (eg. 'intent', 'render', 'viewport', true/false)\n* - `preloadDelay`: Delay in ms before preloading on hover\n* - `activeProps`/`inactiveProps`: Additional props merged when link is active/inactive\n* - `resetScroll`/`hashScrollIntoView`: Control scroll behavior on navigation\n* - `viewTransition`/`startTransition`: Use View Transitions/React transitions for navigation\n* - `ignoreBlocker`: Bypass registered blockers\n*\n* @returns An anchor-like element that navigates without full page reloads.\n* @link https://tanstack.com/router/latest/docs/framework/react/api/router/linkComponent\n*/\nvar Link = React$1.forwardRef((props, ref) => {\n\tconst { _asChild, ...rest } = props;\n\tconst { type: _type, ...linkProps } = useLinkProps(rest, ref);\n\tconst children = typeof rest.children === \"function\" ? rest.children({ isActive: linkProps[\"data-status\"] === \"active\" }) : rest.children;\n\tif (!_asChild) {\n\t\tconst { disabled: _, ...rest } = linkProps;\n\t\treturn React$1.createElement(\"a\", rest, children);\n\t}\n\treturn React$1.createElement(_asChild, linkProps, children);\n});\nfunction isCtrlEvent(e) {\n\treturn !!(e.metaKey || e.altKey || e.ctrlKey || e.shiftKey);\n}\n/**\n* Validate and reuse navigation options for `Link`, `navigate` or `redirect`.\n* Accepts a literal options object and returns it typed for later spreading.\n* @example\n* const opts = linkOptions({ to: '/dashboard', search: { tab: 'home' } })\n* @link https://tanstack.com/router/latest/docs/framework/react/api/router/linkOptions\n*/\nvar linkOptions = (options) => {\n\treturn options;\n};\n/**\n* Type-check a literal object for use with `Link`, `navigate` or `redirect`.\n* Use to validate and reuse navigation options across your app.\n* @example\n* const opts = linkOptions({ to: '/dashboard', search: { tab: 'home' } })\n* @link https://tanstack.com/router/latest/docs/framework/react/api/router/linkOptions\n*/\n//#endregion\nexport { Link, createLink, linkOptions, useLinkProps };\n\n//# sourceMappingURL=link.js.map","const isString = obj => typeof obj === 'string';\nconst defer = () => {\n let res;\n let rej;\n const promise = new Promise((resolve, reject) => {\n res = resolve;\n rej = reject;\n });\n promise.resolve = res;\n promise.reject = rej;\n return promise;\n};\nconst makeString = object => {\n if (object == null) return '';\n return String(object);\n};\nconst copy = (a, s, t) => {\n a.forEach(m => {\n if (s[m]) t[m] = s[m];\n });\n};\nconst lastOfPathSeparatorRegExp = /###/g;\nconst cleanKey = key => key && key.includes('###') ? key.replace(lastOfPathSeparatorRegExp, '.') : key;\nconst canNotTraverseDeeper = object => !object || isString(object);\nconst getLastOfPath = (object, path, Empty) => {\n const stack = !isString(path) ? path : path.split('.');\n let stackIndex = 0;\n while (stackIndex < stack.length - 1) {\n if (canNotTraverseDeeper(object)) return {};\n const key = cleanKey(stack[stackIndex]);\n if (!object[key] && Empty) object[key] = new Empty();\n if (Object.prototype.hasOwnProperty.call(object, key)) {\n object = object[key];\n } else {\n object = {};\n }\n ++stackIndex;\n }\n if (canNotTraverseDeeper(object)) return {};\n return {\n obj: object,\n k: cleanKey(stack[stackIndex])\n };\n};\nconst setPath = (object, path, newValue) => {\n const {\n obj,\n k\n } = getLastOfPath(object, path, Object);\n if (obj !== undefined || path.length === 1) {\n obj[k] = newValue;\n return;\n }\n let e = path[path.length - 1];\n let p = path.slice(0, path.length - 1);\n let last = getLastOfPath(object, p, Object);\n while (last.obj === undefined && p.length) {\n e = `${p[p.length - 1]}.${e}`;\n p = p.slice(0, p.length - 1);\n last = getLastOfPath(object, p, Object);\n if (last?.obj && typeof last.obj[`${last.k}.${e}`] !== 'undefined') {\n last.obj = undefined;\n }\n }\n last.obj[`${last.k}.${e}`] = newValue;\n};\nconst pushPath = (object, path, newValue, concat) => {\n const {\n obj,\n k\n } = getLastOfPath(object, path, Object);\n obj[k] = obj[k] || [];\n obj[k].push(newValue);\n};\nconst getPath = (object, path) => {\n const {\n obj,\n k\n } = getLastOfPath(object, path);\n if (!obj) return undefined;\n if (!Object.prototype.hasOwnProperty.call(obj, k)) return undefined;\n return obj[k];\n};\nconst getPathWithDefaults = (data, defaultData, key) => {\n const value = getPath(data, key);\n if (value !== undefined) {\n return value;\n }\n return getPath(defaultData, key);\n};\nconst deepExtend = (target, source, overwrite) => {\n for (const prop in source) {\n if (prop !== '__proto__' && prop !== 'constructor') {\n if (prop in target) {\n if (isString(target[prop]) || target[prop] instanceof String || isString(source[prop]) || source[prop] instanceof String) {\n if (overwrite) target[prop] = source[prop];\n } else {\n deepExtend(target[prop], source[prop], overwrite);\n }\n } else {\n target[prop] = source[prop];\n }\n }\n }\n return target;\n};\nconst regexEscape = str => str.replace(/[\\-\\[\\]\\/\\{\\}\\(\\)\\*\\+\\?\\.\\\\\\^\\$\\|]/g, '\\\\$&');\nconst _entityMap = {\n '&': '&',\n '<': '<',\n '>': '>',\n '\"': '"',\n \"'\": ''',\n '/': '/'\n};\nconst escape = data => {\n if (isString(data)) {\n return data.replace(/[&<>\"'\\/]/g, s => _entityMap[s]);\n }\n return data;\n};\nclass RegExpCache {\n constructor(capacity) {\n this.capacity = capacity;\n this.regExpMap = new Map();\n this.regExpQueue = [];\n }\n getRegExp(pattern) {\n const regExpFromCache = this.regExpMap.get(pattern);\n if (regExpFromCache !== undefined) {\n return regExpFromCache;\n }\n const regExpNew = new RegExp(pattern);\n if (this.regExpQueue.length === this.capacity) {\n this.regExpMap.delete(this.regExpQueue.shift());\n }\n this.regExpMap.set(pattern, regExpNew);\n this.regExpQueue.push(pattern);\n return regExpNew;\n }\n}\nconst chars = [' ', ',', '?', '!', ';'];\nconst looksLikeObjectPathRegExpCache = new RegExpCache(20);\nconst looksLikeObjectPath = (key, nsSeparator, keySeparator) => {\n nsSeparator = nsSeparator || '';\n keySeparator = keySeparator || '';\n const possibleChars = chars.filter(c => !nsSeparator.includes(c) && !keySeparator.includes(c));\n if (possibleChars.length === 0) return true;\n const r = looksLikeObjectPathRegExpCache.getRegExp(`(${possibleChars.map(c => c === '?' ? '\\\\?' : c).join('|')})`);\n let matched = !r.test(key);\n if (!matched) {\n const ki = key.indexOf(keySeparator);\n if (ki > 0 && !r.test(key.substring(0, ki))) {\n matched = true;\n }\n }\n return matched;\n};\nconst deepFind = (obj, path, keySeparator = '.') => {\n if (!obj) return undefined;\n if (obj[path]) {\n if (!Object.prototype.hasOwnProperty.call(obj, path)) return undefined;\n return obj[path];\n }\n const tokens = path.split(keySeparator);\n let current = obj;\n for (let i = 0; i < tokens.length;) {\n if (!current || typeof current !== 'object') {\n return undefined;\n }\n let next;\n let nextPath = '';\n for (let j = i; j < tokens.length; ++j) {\n if (j !== i) {\n nextPath += keySeparator;\n }\n nextPath += tokens[j];\n next = current[nextPath];\n if (next !== undefined) {\n if (['string', 'number', 'boolean'].includes(typeof next) && j < tokens.length - 1) {\n continue;\n }\n i += j - i + 1;\n break;\n }\n }\n current = next;\n }\n return current;\n};\nconst getCleanedCode = code => code?.replace(/_/g, '-');\n\nconst consoleLogger = {\n type: 'logger',\n log(args) {\n this.output('log', args);\n },\n warn(args) {\n this.output('warn', args);\n },\n error(args) {\n this.output('error', args);\n },\n output(type, args) {\n console?.[type]?.apply?.(console, args);\n }\n};\nclass Logger {\n constructor(concreteLogger, options = {}) {\n this.init(concreteLogger, options);\n }\n init(concreteLogger, options = {}) {\n this.prefix = options.prefix || 'i18next:';\n this.logger = concreteLogger || consoleLogger;\n this.options = options;\n this.debug = options.debug;\n }\n log(...args) {\n return this.forward(args, 'log', '', true);\n }\n warn(...args) {\n return this.forward(args, 'warn', '', true);\n }\n error(...args) {\n return this.forward(args, 'error', '');\n }\n deprecate(...args) {\n return this.forward(args, 'warn', 'WARNING DEPRECATED: ', true);\n }\n forward(args, lvl, prefix, debugOnly) {\n if (debugOnly && !this.debug) return null;\n args = args.map(a => isString(a) ? a.replace(/[\\r\\n\\x00-\\x1F\\x7F]/g, ' ') : a);\n if (isString(args[0])) args[0] = `${prefix}${this.prefix} ${args[0]}`;\n return this.logger[lvl](args);\n }\n create(moduleName) {\n return new Logger(this.logger, {\n ...{\n prefix: `${this.prefix}:${moduleName}:`\n },\n ...this.options\n });\n }\n clone(options) {\n options = options || this.options;\n options.prefix = options.prefix || this.prefix;\n return new Logger(this.logger, options);\n }\n}\nvar baseLogger = new Logger();\n\nclass EventEmitter {\n constructor() {\n this.observers = {};\n }\n on(events, listener) {\n events.split(' ').forEach(event => {\n if (!this.observers[event]) this.observers[event] = new Map();\n const numListeners = this.observers[event].get(listener) || 0;\n this.observers[event].set(listener, numListeners + 1);\n });\n return this;\n }\n off(event, listener) {\n if (!this.observers[event]) return;\n if (!listener) {\n delete this.observers[event];\n return;\n }\n this.observers[event].delete(listener);\n }\n once(event, listener) {\n const wrapper = (...args) => {\n listener(...args);\n this.off(event, wrapper);\n };\n this.on(event, wrapper);\n return this;\n }\n emit(event, ...args) {\n if (this.observers[event]) {\n const cloned = Array.from(this.observers[event].entries());\n cloned.forEach(([observer, numTimesAdded]) => {\n for (let i = 0; i < numTimesAdded; i++) {\n observer(...args);\n }\n });\n }\n if (this.observers['*']) {\n const cloned = Array.from(this.observers['*'].entries());\n cloned.forEach(([observer, numTimesAdded]) => {\n for (let i = 0; i < numTimesAdded; i++) {\n observer(event, ...args);\n }\n });\n }\n }\n}\n\nclass ResourceStore extends EventEmitter {\n constructor(data, options = {\n ns: ['translation'],\n defaultNS: 'translation'\n }) {\n super();\n this.data = data || {};\n this.options = options;\n if (this.options.keySeparator === undefined) {\n this.options.keySeparator = '.';\n }\n if (this.options.ignoreJSONStructure === undefined) {\n this.options.ignoreJSONStructure = true;\n }\n }\n addNamespaces(ns) {\n if (!this.options.ns.includes(ns)) {\n this.options.ns.push(ns);\n }\n }\n removeNamespaces(ns) {\n const index = this.options.ns.indexOf(ns);\n if (index > -1) {\n this.options.ns.splice(index, 1);\n }\n }\n getResource(lng, ns, key, options = {}) {\n const keySeparator = options.keySeparator !== undefined ? options.keySeparator : this.options.keySeparator;\n const ignoreJSONStructure = options.ignoreJSONStructure !== undefined ? options.ignoreJSONStructure : this.options.ignoreJSONStructure;\n let path;\n if (lng.includes('.')) {\n path = lng.split('.');\n } else {\n path = [lng, ns];\n if (key) {\n if (Array.isArray(key)) {\n path.push(...key);\n } else if (isString(key) && keySeparator) {\n path.push(...key.split(keySeparator));\n } else {\n path.push(key);\n }\n }\n }\n const result = getPath(this.data, path);\n if (!result && !ns && !key && lng.includes('.')) {\n lng = path[0];\n ns = path[1];\n key = path.slice(2).join('.');\n }\n if (result || !ignoreJSONStructure || !isString(key)) return result;\n return deepFind(this.data?.[lng]?.[ns], key, keySeparator);\n }\n addResource(lng, ns, key, value, options = {\n silent: false\n }) {\n const keySeparator = options.keySeparator !== undefined ? options.keySeparator : this.options.keySeparator;\n let path = [lng, ns];\n if (key) path = path.concat(keySeparator ? key.split(keySeparator) : key);\n if (lng.includes('.')) {\n path = lng.split('.');\n value = ns;\n ns = path[1];\n }\n this.addNamespaces(ns);\n setPath(this.data, path, value);\n if (!options.silent) this.emit('added', lng, ns, key, value);\n }\n addResources(lng, ns, resources, options = {\n silent: false\n }) {\n for (const m in resources) {\n if (isString(resources[m]) || Array.isArray(resources[m])) this.addResource(lng, ns, m, resources[m], {\n silent: true\n });\n }\n if (!options.silent) this.emit('added', lng, ns, resources);\n }\n addResourceBundle(lng, ns, resources, deep, overwrite, options = {\n silent: false,\n skipCopy: false\n }) {\n let path = [lng, ns];\n if (lng.includes('.')) {\n path = lng.split('.');\n deep = resources;\n resources = ns;\n ns = path[1];\n }\n this.addNamespaces(ns);\n let pack = getPath(this.data, path) || {};\n if (!options.skipCopy) resources = JSON.parse(JSON.stringify(resources));\n if (deep) {\n deepExtend(pack, resources, overwrite);\n } else {\n pack = {\n ...pack,\n ...resources\n };\n }\n setPath(this.data, path, pack);\n if (!options.silent) this.emit('added', lng, ns, resources);\n }\n removeResourceBundle(lng, ns) {\n if (this.hasResourceBundle(lng, ns)) {\n delete this.data[lng][ns];\n }\n this.removeNamespaces(ns);\n this.emit('removed', lng, ns);\n }\n hasResourceBundle(lng, ns) {\n return this.getResource(lng, ns) !== undefined;\n }\n getResourceBundle(lng, ns) {\n if (!ns) ns = this.options.defaultNS;\n return this.getResource(lng, ns);\n }\n getDataByLanguage(lng) {\n return this.data[lng];\n }\n hasLanguageSomeTranslations(lng) {\n const data = this.getDataByLanguage(lng);\n const n = data && Object.keys(data) || [];\n return !!n.find(v => data[v] && Object.keys(data[v]).length > 0);\n }\n toJSON() {\n return this.data;\n }\n}\n\nvar postProcessor = {\n processors: {},\n addPostProcessor(module) {\n this.processors[module.name] = module;\n },\n handle(processors, value, key, options, translator) {\n processors.forEach(processor => {\n value = this.processors[processor]?.process(value, key, options, translator) ?? value;\n });\n return value;\n }\n};\n\nconst PATH_KEY = Symbol('i18next/PATH_KEY');\nfunction createProxy() {\n const state = [];\n const handler = Object.create(null);\n let proxy;\n handler.get = (target, key) => {\n proxy?.revoke?.();\n if (key === PATH_KEY) return state;\n state.push(key);\n proxy = Proxy.revocable(target, handler);\n return proxy.proxy;\n };\n return Proxy.revocable(Object.create(null), handler).proxy;\n}\nfunction keysFromSelector(selector, opts) {\n const {\n [PATH_KEY]: path\n } = selector(createProxy());\n const keySeparator = opts?.keySeparator ?? '.';\n const nsSeparator = opts?.nsSeparator ?? ':';\n const strict = opts?.enableSelector === 'strict';\n if (path.length > 1 && nsSeparator) {\n const ns = opts?.ns;\n const nsList = strict ? Array.isArray(ns) ? ns : ns ? [ns] : null : Array.isArray(ns) ? ns : null;\n if (nsList) {\n const candidates = strict ? nsList : nsList.length > 1 ? nsList.slice(1) : [];\n if (candidates.includes(path[0])) {\n return `${path[0]}${nsSeparator}${path.slice(1).join(keySeparator)}`;\n }\n }\n }\n return path.join(keySeparator);\n}\n\nconst shouldHandleAsObject = res => !isString(res) && typeof res !== 'boolean' && typeof res !== 'number';\nclass Translator extends EventEmitter {\n constructor(services, options = {}) {\n super();\n copy(['resourceStore', 'languageUtils', 'pluralResolver', 'interpolator', 'backendConnector', 'i18nFormat', 'utils'], services, this);\n this.options = options;\n if (this.options.keySeparator === undefined) {\n this.options.keySeparator = '.';\n }\n this.logger = baseLogger.create('translator');\n this.checkedLoadedFor = {};\n }\n changeLanguage(lng) {\n if (lng) this.language = lng;\n }\n exists(key, o = {\n interpolation: {}\n }) {\n const opt = {\n ...o\n };\n if (key == null) return false;\n const resolved = this.resolve(key, opt);\n if (resolved?.res === undefined) return false;\n const isObject = shouldHandleAsObject(resolved.res);\n if (opt.returnObjects === false && isObject) {\n return false;\n }\n return true;\n }\n extractFromKey(key, opt) {\n let nsSeparator = opt.nsSeparator !== undefined ? opt.nsSeparator : this.options.nsSeparator;\n if (nsSeparator === undefined) nsSeparator = ':';\n const keySeparator = opt.keySeparator !== undefined ? opt.keySeparator : this.options.keySeparator;\n let namespaces = opt.ns || this.options.defaultNS || [];\n const wouldCheckForNsInKey = nsSeparator && key.includes(nsSeparator);\n const seemsNaturalLanguage = !this.options.userDefinedKeySeparator && !opt.keySeparator && !this.options.userDefinedNsSeparator && !opt.nsSeparator && !looksLikeObjectPath(key, nsSeparator, keySeparator);\n if (wouldCheckForNsInKey && !seemsNaturalLanguage) {\n const m = key.match(this.interpolator.nestingRegexp);\n if (m && m.length > 0) {\n return {\n key,\n namespaces: isString(namespaces) ? [namespaces] : namespaces\n };\n }\n const parts = key.split(nsSeparator);\n if (nsSeparator !== keySeparator || nsSeparator === keySeparator && this.options.ns.includes(parts[0])) namespaces = parts.shift();\n key = parts.join(keySeparator);\n }\n return {\n key,\n namespaces: isString(namespaces) ? [namespaces] : namespaces\n };\n }\n translate(keys, o, lastKey) {\n let opt = typeof o === 'object' ? {\n ...o\n } : o;\n if (typeof opt !== 'object' && this.options.overloadTranslationOptionHandler) {\n opt = this.options.overloadTranslationOptionHandler(arguments);\n }\n if (typeof opt === 'object') opt = {\n ...opt\n };\n if (!opt) opt = {};\n if (keys == null) return '';\n if (typeof keys === 'function') keys = keysFromSelector(keys, {\n ...this.options,\n ...opt\n });\n if (!Array.isArray(keys)) keys = [String(keys)];\n keys = keys.map(k => typeof k === 'function' ? keysFromSelector(k, {\n ...this.options,\n ...opt\n }) : String(k));\n const returnDetails = opt.returnDetails !== undefined ? opt.returnDetails : this.options.returnDetails;\n const keySeparator = opt.keySeparator !== undefined ? opt.keySeparator : this.options.keySeparator;\n const {\n key,\n namespaces\n } = this.extractFromKey(keys[keys.length - 1], opt);\n const namespace = namespaces[namespaces.length - 1];\n let nsSeparator = opt.nsSeparator !== undefined ? opt.nsSeparator : this.options.nsSeparator;\n if (nsSeparator === undefined) nsSeparator = ':';\n const lng = opt.lng || this.language;\n const appendNamespaceToCIMode = opt.appendNamespaceToCIMode || this.options.appendNamespaceToCIMode;\n if (lng?.toLowerCase() === 'cimode') {\n if (appendNamespaceToCIMode) {\n if (returnDetails) {\n return {\n res: `${namespace}${nsSeparator}${key}`,\n usedKey: key,\n exactUsedKey: key,\n usedLng: lng,\n usedNS: namespace,\n usedParams: this.getUsedParamsDetails(opt)\n };\n }\n return `${namespace}${nsSeparator}${key}`;\n }\n if (returnDetails) {\n return {\n res: key,\n usedKey: key,\n exactUsedKey: key,\n usedLng: lng,\n usedNS: namespace,\n usedParams: this.getUsedParamsDetails(opt)\n };\n }\n return key;\n }\n const resolved = this.resolve(keys, opt);\n let res = resolved?.res;\n const resUsedKey = resolved?.usedKey || key;\n const resExactUsedKey = resolved?.exactUsedKey || key;\n const noObject = ['[object Number]', '[object Function]', '[object RegExp]'];\n const joinArrays = opt.joinArrays !== undefined ? opt.joinArrays : this.options.joinArrays;\n const handleAsObjectInI18nFormat = !this.i18nFormat || this.i18nFormat.handleAsObject;\n const needsPluralHandling = opt.count !== undefined && !isString(opt.count);\n const hasDefaultValue = Translator.hasDefaultValue(opt);\n const defaultValueSuffix = needsPluralHandling ? this.pluralResolver.getSuffix(lng, opt.count, opt) : '';\n const defaultValueSuffixOrdinalFallback = opt.ordinal && needsPluralHandling ? this.pluralResolver.getSuffix(lng, opt.count, {\n ordinal: false\n }) : '';\n const needsZeroSuffixLookup = needsPluralHandling && !opt.ordinal && opt.count === 0;\n const defaultValue = needsZeroSuffixLookup && opt[`defaultValue${this.options.pluralSeparator}zero`] || opt[`defaultValue${defaultValueSuffix}`] || opt[`defaultValue${defaultValueSuffixOrdinalFallback}`] || opt.defaultValue;\n let resForObjHndl = res;\n if (handleAsObjectInI18nFormat && !res && hasDefaultValue) {\n resForObjHndl = defaultValue;\n }\n const handleAsObject = shouldHandleAsObject(resForObjHndl);\n const resType = Object.prototype.toString.apply(resForObjHndl);\n if (handleAsObjectInI18nFormat && resForObjHndl && handleAsObject && !noObject.includes(resType) && !(isString(joinArrays) && Array.isArray(resForObjHndl))) {\n if (!opt.returnObjects && !this.options.returnObjects) {\n if (!this.options.returnedObjectHandler) {\n this.logger.warn('accessing an object - but returnObjects options is not enabled!');\n }\n const r = this.options.returnedObjectHandler ? this.options.returnedObjectHandler(resUsedKey, resForObjHndl, {\n ...opt,\n ns: namespaces\n }) : `key '${key} (${this.language})' returned an object instead of string.`;\n if (returnDetails) {\n resolved.res = r;\n resolved.usedParams = this.getUsedParamsDetails(opt);\n return resolved;\n }\n return r;\n }\n if (keySeparator) {\n const resTypeIsArray = Array.isArray(resForObjHndl);\n const copy = resTypeIsArray ? [] : {};\n const newKeyToUse = resTypeIsArray ? resExactUsedKey : resUsedKey;\n for (const m in resForObjHndl) {\n if (Object.prototype.hasOwnProperty.call(resForObjHndl, m)) {\n const deepKey = `${newKeyToUse}${keySeparator}${m}`;\n if (hasDefaultValue && !res) {\n copy[m] = this.translate(deepKey, {\n ...opt,\n defaultValue: shouldHandleAsObject(defaultValue) ? defaultValue[m] : undefined,\n ...{\n joinArrays: false,\n ns: namespaces\n }\n });\n } else {\n copy[m] = this.translate(deepKey, {\n ...opt,\n ...{\n joinArrays: false,\n ns: namespaces\n }\n });\n }\n if (copy[m] === deepKey) copy[m] = resForObjHndl[m];\n }\n }\n res = copy;\n }\n } else if (handleAsObjectInI18nFormat && isString(joinArrays) && Array.isArray(res)) {\n res = res.join(joinArrays);\n if (res) res = this.extendTranslation(res, keys, opt, lastKey);\n } else {\n let usedDefault = false;\n let usedKey = false;\n if (!this.isValidLookup(res) && hasDefaultValue) {\n usedDefault = true;\n res = defaultValue;\n }\n if (!this.isValidLookup(res)) {\n usedKey = true;\n res = key;\n }\n const missingKeyNoValueFallbackToKey = opt.missingKeyNoValueFallbackToKey || this.options.missingKeyNoValueFallbackToKey;\n const resForMissing = missingKeyNoValueFallbackToKey && usedKey ? undefined : res;\n const updateMissing = hasDefaultValue && defaultValue !== res && this.options.updateMissing;\n if (usedKey || usedDefault || updateMissing) {\n this.logger.log(updateMissing ? 'updateKey' : 'missingKey', lng, namespace, needsPluralHandling && !updateMissing ? `${key}${this.pluralResolver.getSuffix(lng, opt.count, opt)}` : key, updateMissing ? defaultValue : res);\n if (keySeparator) {\n const fk = this.resolve(key, {\n ...opt,\n keySeparator: false\n });\n if (fk && fk.res) this.logger.warn('Seems the loaded translations were in flat JSON format instead of nested. Either set keySeparator: false on init or make sure your translations are published in nested format.');\n }\n let lngs = [];\n const fallbackLngs = this.languageUtils.getFallbackCodes(this.options.fallbackLng, opt.lng || this.language);\n if (this.options.saveMissingTo === 'fallback' && fallbackLngs && fallbackLngs[0]) {\n for (let i = 0; i < fallbackLngs.length; i++) {\n lngs.push(fallbackLngs[i]);\n }\n } else if (this.options.saveMissingTo === 'all') {\n lngs = this.languageUtils.toResolveHierarchy(opt.lng || this.language);\n } else {\n lngs.push(opt.lng || this.language);\n }\n const send = (l, k, specificDefaultValue) => {\n const defaultForMissing = hasDefaultValue && specificDefaultValue !== res ? specificDefaultValue : resForMissing;\n if (this.options.missingKeyHandler) {\n this.options.missingKeyHandler(l, namespace, k, defaultForMissing, updateMissing, opt);\n } else if (this.backendConnector?.saveMissing) {\n this.backendConnector.saveMissing(l, namespace, k, defaultForMissing, updateMissing, opt);\n }\n this.emit('missingKey', l, namespace, k, res);\n };\n if (this.options.saveMissing) {\n if (this.options.saveMissingPlurals && needsPluralHandling) {\n lngs.forEach(language => {\n const suffixes = this.pluralResolver.getSuffixes(language, opt);\n if (needsZeroSuffixLookup && opt[`defaultValue${this.options.pluralSeparator}zero`] && !suffixes.includes(`${this.options.pluralSeparator}zero`)) {\n suffixes.push(`${this.options.pluralSeparator}zero`);\n }\n suffixes.forEach(suffix => {\n send([language], key + suffix, opt[`defaultValue${suffix}`] || defaultValue);\n });\n });\n } else {\n send(lngs, key, defaultValue);\n }\n }\n }\n res = this.extendTranslation(res, keys, opt, resolved, lastKey);\n if (usedKey && res === key && this.options.appendNamespaceToMissingKey) {\n res = `${namespace}${nsSeparator}${key}`;\n }\n if ((usedKey || usedDefault) && this.options.parseMissingKeyHandler) {\n res = this.options.parseMissingKeyHandler(this.options.appendNamespaceToMissingKey ? `${namespace}${nsSeparator}${key}` : key, usedDefault ? res : undefined, opt);\n }\n }\n if (returnDetails) {\n resolved.res = res;\n resolved.usedParams = this.getUsedParamsDetails(opt);\n return resolved;\n }\n return res;\n }\n extendTranslation(res, key, opt, resolved, lastKey) {\n if (this.i18nFormat?.parse) {\n res = this.i18nFormat.parse(res, {\n ...this.options.interpolation.defaultVariables,\n ...opt\n }, opt.lng || this.language || resolved.usedLng, resolved.usedNS, resolved.usedKey, {\n resolved\n });\n } else if (!opt.skipInterpolation) {\n if (opt.interpolation) this.interpolator.init({\n ...opt,\n ...{\n interpolation: {\n ...this.options.interpolation,\n ...opt.interpolation\n }\n }\n });\n const skipOnVariables = isString(res) && (opt?.interpolation?.skipOnVariables !== undefined ? opt.interpolation.skipOnVariables : this.options.interpolation.skipOnVariables);\n let nestBef;\n if (skipOnVariables) {\n const nb = res.match(this.interpolator.nestingRegexp);\n nestBef = nb && nb.length;\n }\n let data = opt.replace && !isString(opt.replace) ? opt.replace : opt;\n if (this.options.interpolation.defaultVariables) data = {\n ...this.options.interpolation.defaultVariables,\n ...data\n };\n res = this.interpolator.interpolate(res, data, opt.lng || this.language || resolved.usedLng, opt);\n if (skipOnVariables) {\n const na = res.match(this.interpolator.nestingRegexp);\n const nestAft = na && na.length;\n if (nestBef < nestAft) opt.nest = false;\n }\n if (!opt.lng && resolved && resolved.res) opt.lng = this.language || resolved.usedLng;\n if (opt.nest !== false) res = this.interpolator.nest(res, (...args) => {\n if (lastKey?.[0] === args[0] && !opt.context) {\n this.logger.warn(`It seems you are nesting recursively key: ${args[0]} in key: ${key[0]}`);\n return null;\n }\n return this.translate(...args, key);\n }, opt);\n if (opt.interpolation) this.interpolator.reset();\n }\n const postProcess = opt.postProcess || this.options.postProcess;\n const postProcessorNames = isString(postProcess) ? [postProcess] : postProcess;\n if (res != null && postProcessorNames?.length && opt.applyPostProcessor !== false) {\n res = postProcessor.handle(postProcessorNames, res, key, this.options && this.options.postProcessPassResolved ? {\n i18nResolved: {\n ...resolved,\n usedParams: this.getUsedParamsDetails(opt)\n },\n ...opt\n } : opt, this);\n }\n return res;\n }\n resolve(keys, opt = {}) {\n let found;\n let usedKey;\n let exactUsedKey;\n let usedLng;\n let usedNS;\n if (isString(keys)) keys = [keys];\n if (Array.isArray(keys)) keys = keys.map(k => typeof k === 'function' ? keysFromSelector(k, {\n ...this.options,\n ...opt\n }) : k);\n keys.forEach(k => {\n if (this.isValidLookup(found)) return;\n const extracted = this.extractFromKey(k, opt);\n const key = extracted.key;\n usedKey = key;\n let namespaces = extracted.namespaces;\n if (this.options.fallbackNS) namespaces = namespaces.concat(this.options.fallbackNS);\n const needsPluralHandling = opt.count !== undefined && !isString(opt.count);\n const needsZeroSuffixLookup = needsPluralHandling && !opt.ordinal && opt.count === 0;\n const needsContextHandling = opt.context !== undefined && (isString(opt.context) || typeof opt.context === 'number') && opt.context !== '';\n const codes = opt.lngs ? opt.lngs : this.languageUtils.toResolveHierarchy(opt.lng || this.language, opt.fallbackLng);\n namespaces.forEach(ns => {\n if (this.isValidLookup(found)) return;\n usedNS = ns;\n if (!this.checkedLoadedFor[`${codes[0]}-${ns}`] && this.utils?.hasLoadedNamespace && !this.utils?.hasLoadedNamespace(usedNS)) {\n this.checkedLoadedFor[`${codes[0]}-${ns}`] = true;\n this.logger.warn(`key \"${usedKey}\" for languages \"${codes.join(', ')}\" won't get resolved as namespace \"${usedNS}\" was not yet loaded`, 'This means something IS WRONG in your setup. You access the t function before i18next.init / i18next.loadNamespace / i18next.changeLanguage was done. Wait for the callback or Promise to resolve before accessing it!!!');\n }\n codes.forEach(code => {\n if (this.isValidLookup(found)) return;\n usedLng = code;\n const finalKeys = [key];\n if (this.i18nFormat?.addLookupKeys) {\n this.i18nFormat.addLookupKeys(finalKeys, key, code, ns, opt);\n } else {\n let pluralSuffix;\n if (needsPluralHandling) pluralSuffix = this.pluralResolver.getSuffix(code, opt.count, opt);\n const zeroSuffix = `${this.options.pluralSeparator}zero`;\n const ordinalPrefix = `${this.options.pluralSeparator}ordinal${this.options.pluralSeparator}`;\n if (needsPluralHandling) {\n if (opt.ordinal && pluralSuffix.startsWith(ordinalPrefix)) {\n finalKeys.push(key + pluralSuffix.replace(ordinalPrefix, this.options.pluralSeparator));\n }\n finalKeys.push(key + pluralSuffix);\n if (needsZeroSuffixLookup) {\n finalKeys.push(key + zeroSuffix);\n }\n }\n if (needsContextHandling) {\n const contextKey = `${key}${this.options.contextSeparator || '_'}${opt.context}`;\n finalKeys.push(contextKey);\n if (needsPluralHandling) {\n if (opt.ordinal && pluralSuffix.startsWith(ordinalPrefix)) {\n finalKeys.push(contextKey + pluralSuffix.replace(ordinalPrefix, this.options.pluralSeparator));\n }\n finalKeys.push(contextKey + pluralSuffix);\n if (needsZeroSuffixLookup) {\n finalKeys.push(contextKey + zeroSuffix);\n }\n }\n }\n }\n let possibleKey;\n while (possibleKey = finalKeys.pop()) {\n if (!this.isValidLookup(found)) {\n exactUsedKey = possibleKey;\n found = this.getResource(code, ns, possibleKey, opt);\n }\n }\n });\n });\n });\n return {\n res: found,\n usedKey,\n exactUsedKey,\n usedLng,\n usedNS\n };\n }\n isValidLookup(res) {\n return res !== undefined && !(!this.options.returnNull && res === null) && !(!this.options.returnEmptyString && res === '');\n }\n getResource(code, ns, key, options = {}) {\n if (this.i18nFormat?.getResource) return this.i18nFormat.getResource(code, ns, key, options);\n return this.resourceStore.getResource(code, ns, key, options);\n }\n getUsedParamsDetails(options = {}) {\n const optionsKeys = ['defaultValue', 'ordinal', 'context', 'replace', 'lng', 'lngs', 'fallbackLng', 'ns', 'keySeparator', 'nsSeparator', 'returnObjects', 'returnDetails', 'joinArrays', 'postProcess', 'interpolation'];\n const useOptionsReplaceForData = options.replace && !isString(options.replace);\n let data = useOptionsReplaceForData ? options.replace : options;\n if (useOptionsReplaceForData && typeof options.count !== 'undefined') {\n data.count = options.count;\n }\n if (this.options.interpolation.defaultVariables) {\n data = {\n ...this.options.interpolation.defaultVariables,\n ...data\n };\n }\n if (!useOptionsReplaceForData) {\n data = {\n ...data\n };\n for (const key of optionsKeys) {\n delete data[key];\n }\n }\n return data;\n }\n static hasDefaultValue(options) {\n const prefix = 'defaultValue';\n for (const option in options) {\n if (Object.prototype.hasOwnProperty.call(options, option) && option.startsWith(prefix) && undefined !== options[option]) {\n return true;\n }\n }\n return false;\n }\n}\n\nclass LanguageUtil {\n constructor(options) {\n this.options = options;\n this.supportedLngs = this.options.supportedLngs || false;\n this.logger = baseLogger.create('languageUtils');\n }\n getScriptPartFromCode(code) {\n code = getCleanedCode(code);\n if (!code || !code.includes('-')) return null;\n const p = code.split('-');\n if (p.length === 2) return null;\n p.pop();\n if (p[p.length - 1].toLowerCase() === 'x') return null;\n return this.formatLanguageCode(p.join('-'));\n }\n getLanguagePartFromCode(code) {\n code = getCleanedCode(code);\n if (!code || !code.includes('-')) return code;\n const p = code.split('-');\n return this.formatLanguageCode(p[0]);\n }\n formatLanguageCode(code) {\n if (isString(code) && code.includes('-')) {\n let formattedCode;\n try {\n formattedCode = Intl.getCanonicalLocales(code)[0];\n } catch (e) {}\n if (formattedCode && this.options.lowerCaseLng) {\n formattedCode = formattedCode.toLowerCase();\n }\n if (formattedCode) return formattedCode;\n if (this.options.lowerCaseLng) {\n return code.toLowerCase();\n }\n return code;\n }\n return this.options.cleanCode || this.options.lowerCaseLng ? code.toLowerCase() : code;\n }\n isSupportedCode(code) {\n if (this.options.load === 'languageOnly' || this.options.nonExplicitSupportedLngs) {\n code = this.getLanguagePartFromCode(code);\n }\n return !this.supportedLngs || !this.supportedLngs.length || this.supportedLngs.includes(code);\n }\n getBestMatchFromCodes(codes) {\n if (!codes) return null;\n let found;\n codes.forEach(code => {\n if (found) return;\n const cleanedLng = this.formatLanguageCode(code);\n if (!this.options.supportedLngs || this.isSupportedCode(cleanedLng)) found = cleanedLng;\n });\n if (!found && this.options.supportedLngs) {\n codes.forEach(code => {\n if (found) return;\n const lngScOnly = this.getScriptPartFromCode(code);\n if (this.isSupportedCode(lngScOnly)) return found = lngScOnly;\n const lngOnly = this.getLanguagePartFromCode(code);\n if (this.isSupportedCode(lngOnly)) return found = lngOnly;\n found = this.options.supportedLngs.find(supportedLng => {\n if (supportedLng === lngOnly) return true;\n if (!supportedLng.includes('-') && !lngOnly.includes('-')) return false;\n if (supportedLng.includes('-') && !lngOnly.includes('-') && supportedLng.slice(0, supportedLng.indexOf('-')) === lngOnly) return true;\n if (supportedLng.startsWith(lngOnly) && lngOnly.length > 1) return true;\n return false;\n });\n });\n }\n if (!found) found = this.getFallbackCodes(this.options.fallbackLng)[0];\n return found;\n }\n getFallbackCodes(fallbacks, code) {\n if (!fallbacks) return [];\n if (typeof fallbacks === 'function') fallbacks = fallbacks(code);\n if (isString(fallbacks)) fallbacks = [fallbacks];\n if (Array.isArray(fallbacks)) return fallbacks;\n if (!code) return fallbacks.default || [];\n let found = fallbacks[code];\n if (!found) found = fallbacks[this.getScriptPartFromCode(code)];\n if (!found) found = fallbacks[this.formatLanguageCode(code)];\n if (!found) found = fallbacks[this.getLanguagePartFromCode(code)];\n if (!found) found = fallbacks.default;\n return found || [];\n }\n toResolveHierarchy(code, fallbackCode) {\n const fallbackCodes = this.getFallbackCodes((fallbackCode === false ? [] : fallbackCode) || this.options.fallbackLng || [], code);\n const codes = [];\n const addCode = c => {\n if (!c) return;\n if (this.isSupportedCode(c)) {\n codes.push(c);\n } else {\n this.logger.warn(`rejecting language code not found in supportedLngs: ${c}`);\n }\n };\n if (isString(code) && (code.includes('-') || code.includes('_'))) {\n if (this.options.load !== 'languageOnly') addCode(this.formatLanguageCode(code));\n if (this.options.load !== 'languageOnly' && this.options.load !== 'currentOnly') addCode(this.getScriptPartFromCode(code));\n if (this.options.load !== 'currentOnly') addCode(this.getLanguagePartFromCode(code));\n } else if (isString(code)) {\n addCode(this.formatLanguageCode(code));\n }\n fallbackCodes.forEach(fc => {\n if (!codes.includes(fc)) addCode(this.formatLanguageCode(fc));\n });\n return codes;\n }\n}\n\nconst suffixesOrder = {\n zero: 0,\n one: 1,\n two: 2,\n few: 3,\n many: 4,\n other: 5\n};\nconst dummyRule = {\n select: count => count === 1 ? 'one' : 'other',\n resolvedOptions: () => ({\n pluralCategories: ['one', 'other']\n })\n};\nclass PluralResolver {\n constructor(languageUtils, options = {}) {\n this.languageUtils = languageUtils;\n this.options = options;\n this.logger = baseLogger.create('pluralResolver');\n this.pluralRulesCache = {};\n }\n clearCache() {\n this.pluralRulesCache = {};\n }\n getRule(code, options = {}) {\n const cleanedCode = getCleanedCode(code === 'dev' ? 'en' : code);\n const type = options.ordinal ? 'ordinal' : 'cardinal';\n const cacheKey = JSON.stringify({\n cleanedCode,\n type\n });\n if (cacheKey in this.pluralRulesCache) {\n return this.pluralRulesCache[cacheKey];\n }\n let rule;\n try {\n rule = new Intl.PluralRules(cleanedCode, {\n type\n });\n } catch (err) {\n if (typeof Intl === 'undefined') {\n this.logger.error('No Intl support, please use an Intl polyfill!');\n return dummyRule;\n }\n if (!code.match(/-|_/)) return dummyRule;\n const lngPart = this.languageUtils.getLanguagePartFromCode(code);\n rule = this.getRule(lngPart, options);\n }\n this.pluralRulesCache[cacheKey] = rule;\n return rule;\n }\n needsPlural(code, options = {}) {\n let rule = this.getRule(code, options);\n if (!rule) rule = this.getRule('dev', options);\n return rule?.resolvedOptions().pluralCategories.length > 1;\n }\n getPluralFormsOfKey(code, key, options = {}) {\n return this.getSuffixes(code, options).map(suffix => `${key}${suffix}`);\n }\n getSuffixes(code, options = {}) {\n let rule = this.getRule(code, options);\n if (!rule) rule = this.getRule('dev', options);\n if (!rule) return [];\n return rule.resolvedOptions().pluralCategories.sort((pluralCategory1, pluralCategory2) => suffixesOrder[pluralCategory1] - suffixesOrder[pluralCategory2]).map(pluralCategory => `${this.options.prepend}${options.ordinal ? `ordinal${this.options.prepend}` : ''}${pluralCategory}`);\n }\n getSuffix(code, count, options = {}) {\n const rule = this.getRule(code, options);\n if (rule) {\n return `${this.options.prepend}${options.ordinal ? `ordinal${this.options.prepend}` : ''}${rule.select(count)}`;\n }\n this.logger.warn(`no plural rule found for: ${code}`);\n return this.getSuffix('dev', count, options);\n }\n}\n\nconst deepFindWithDefaults = (data, defaultData, key, keySeparator = '.', ignoreJSONStructure = true) => {\n let path = getPathWithDefaults(data, defaultData, key);\n if (!path && ignoreJSONStructure && isString(key)) {\n path = deepFind(data, key, keySeparator);\n if (path === undefined) path = deepFind(defaultData, key, keySeparator);\n }\n return path;\n};\nconst regexSafe = val => val.replace(/\\$/g, '$$$$');\nclass Interpolator {\n constructor(options = {}) {\n this.logger = baseLogger.create('interpolator');\n this.options = options;\n this.format = options?.interpolation?.format || (value => value);\n this.init(options);\n }\n init(options = {}) {\n if (!options.interpolation) options.interpolation = {\n escapeValue: true\n };\n const {\n escape: escape$1,\n escapeValue,\n useRawValueToEscape,\n prefix,\n prefixEscaped,\n suffix,\n suffixEscaped,\n formatSeparator,\n unescapeSuffix,\n unescapePrefix,\n nestingPrefix,\n nestingPrefixEscaped,\n nestingSuffix,\n nestingSuffixEscaped,\n nestingOptionsSeparator,\n maxReplaces,\n alwaysFormat\n } = options.interpolation;\n this.escape = escape$1 !== undefined ? escape$1 : escape;\n this.escapeValue = escapeValue !== undefined ? escapeValue : true;\n this.useRawValueToEscape = useRawValueToEscape !== undefined ? useRawValueToEscape : false;\n this.prefix = prefix ? regexEscape(prefix) : prefixEscaped || '{{';\n this.suffix = suffix ? regexEscape(suffix) : suffixEscaped || '}}';\n this.formatSeparator = formatSeparator || ',';\n this.unescapePrefix = unescapeSuffix ? '' : unescapePrefix ? regexEscape(unescapePrefix) : '-';\n this.unescapeSuffix = this.unescapePrefix ? '' : unescapeSuffix ? regexEscape(unescapeSuffix) : '';\n this.nestingPrefix = nestingPrefix ? regexEscape(nestingPrefix) : nestingPrefixEscaped || regexEscape('$t(');\n this.nestingSuffix = nestingSuffix ? regexEscape(nestingSuffix) : nestingSuffixEscaped || regexEscape(')');\n this.nestingOptionsSeparator = nestingOptionsSeparator || ',';\n this.maxReplaces = maxReplaces || 1000;\n this.alwaysFormat = alwaysFormat !== undefined ? alwaysFormat : false;\n this.resetRegExp();\n }\n reset() {\n if (this.options) this.init(this.options);\n }\n resetRegExp() {\n const getOrResetRegExp = (existingRegExp, pattern) => {\n if (existingRegExp?.source === pattern) {\n existingRegExp.lastIndex = 0;\n return existingRegExp;\n }\n return new RegExp(pattern, 'g');\n };\n this.regexp = getOrResetRegExp(this.regexp, `${this.prefix}(.+?)${this.suffix}`);\n this.regexpUnescape = getOrResetRegExp(this.regexpUnescape, `${this.prefix}${this.unescapePrefix}(.+?)${this.unescapeSuffix}${this.suffix}`);\n this.nestingRegexp = getOrResetRegExp(this.nestingRegexp, `${this.nestingPrefix}((?:[^()\"']+|\"[^\"]*\"|'[^']*'|\\\\((?:[^()]|\"[^\"]*\"|'[^']*')*\\\\))*?)${this.nestingSuffix}`);\n }\n interpolate(str, data, lng, options) {\n let match;\n let value;\n let replaces;\n const defaultData = this.options && this.options.interpolation && this.options.interpolation.defaultVariables || {};\n const handleFormat = key => {\n if (!key.includes(this.formatSeparator)) {\n const path = deepFindWithDefaults(data, defaultData, key, this.options.keySeparator, this.options.ignoreJSONStructure);\n return this.alwaysFormat ? this.format(path, undefined, lng, {\n ...options,\n ...data,\n interpolationkey: key\n }) : path;\n }\n const p = key.split(this.formatSeparator);\n const k = p.shift().trim();\n const f = p.join(this.formatSeparator).trim();\n return this.format(deepFindWithDefaults(data, defaultData, k, this.options.keySeparator, this.options.ignoreJSONStructure), f, lng, {\n ...options,\n ...data,\n interpolationkey: k\n });\n };\n this.resetRegExp();\n if (!this.escapeValue && typeof str === 'string' && /\\$t\\([^)]*\\{[^}]*\\{\\{/.test(str)) {\n this.logger.warn('nesting options string contains interpolated variables with escapeValue: false — ' + 'if any of those values are attacker-controlled they can inject additional ' + 'nesting options (e.g. redirect lng/ns). Sanitise untrusted input before passing ' + 'it to t(), or keep escapeValue: true.');\n }\n const missingInterpolationHandler = options?.missingInterpolationHandler || this.options.missingInterpolationHandler;\n const skipOnVariables = options?.interpolation?.skipOnVariables !== undefined ? options.interpolation.skipOnVariables : this.options.interpolation.skipOnVariables;\n const todos = [{\n regex: this.regexpUnescape,\n safeValue: val => regexSafe(val)\n }, {\n regex: this.regexp,\n safeValue: val => this.escapeValue ? regexSafe(this.escape(val)) : regexSafe(val)\n }];\n todos.forEach(todo => {\n replaces = 0;\n while (match = todo.regex.exec(str)) {\n const matchedVar = match[1].trim();\n value = handleFormat(matchedVar);\n if (value === undefined) {\n if (typeof missingInterpolationHandler === 'function') {\n const temp = missingInterpolationHandler(str, match, options);\n value = isString(temp) ? temp : '';\n } else if (options && Object.prototype.hasOwnProperty.call(options, matchedVar)) {\n value = '';\n } else if (skipOnVariables) {\n value = match[0];\n continue;\n } else {\n this.logger.warn(`missed to pass in variable ${matchedVar} for interpolating ${str}`);\n value = '';\n }\n } else if (!isString(value) && !this.useRawValueToEscape) {\n value = makeString(value);\n }\n const safeValue = todo.safeValue(value);\n str = str.replace(match[0], safeValue);\n if (skipOnVariables) {\n todo.regex.lastIndex += value.length;\n todo.regex.lastIndex -= match[0].length;\n } else {\n todo.regex.lastIndex = 0;\n }\n replaces++;\n if (replaces >= this.maxReplaces) {\n break;\n }\n }\n });\n return str;\n }\n nest(str, fc, options = {}) {\n let match;\n let value;\n let clonedOptions;\n const handleHasOptions = (key, inheritedOptions) => {\n const sep = this.nestingOptionsSeparator;\n if (!key.includes(sep)) return key;\n const c = key.split(new RegExp(`${regexEscape(sep)}[ ]*{`));\n let optionsString = `{${c[1]}`;\n key = c[0];\n optionsString = this.interpolate(optionsString, clonedOptions);\n const matchedSingleQuotes = optionsString.match(/'/g);\n const matchedDoubleQuotes = optionsString.match(/\"/g);\n if ((matchedSingleQuotes?.length ?? 0) % 2 === 0 && !matchedDoubleQuotes || (matchedDoubleQuotes?.length ?? 0) % 2 !== 0) {\n optionsString = optionsString.replace(/'/g, '\"');\n }\n try {\n clonedOptions = JSON.parse(optionsString);\n if (inheritedOptions) clonedOptions = {\n ...inheritedOptions,\n ...clonedOptions\n };\n } catch (e) {\n this.logger.warn(`failed parsing options string in nesting for key ${key}`, e);\n return `${key}${sep}${optionsString}`;\n }\n if (clonedOptions.defaultValue && clonedOptions.defaultValue.includes(this.prefix)) delete clonedOptions.defaultValue;\n return key;\n };\n while (match = this.nestingRegexp.exec(str)) {\n let formatters = [];\n clonedOptions = {\n ...options\n };\n clonedOptions = clonedOptions.replace && !isString(clonedOptions.replace) ? clonedOptions.replace : clonedOptions;\n clonedOptions.applyPostProcessor = false;\n delete clonedOptions.defaultValue;\n const keyEndIndex = /{.*}/.test(match[1]) ? match[1].lastIndexOf('}') + 1 : match[1].indexOf(this.formatSeparator);\n if (keyEndIndex !== -1) {\n formatters = match[1].slice(keyEndIndex).split(this.formatSeparator).map(elem => elem.trim()).filter(Boolean);\n match[1] = match[1].slice(0, keyEndIndex);\n }\n value = fc(handleHasOptions.call(this, match[1].trim(), clonedOptions), clonedOptions);\n if (value && match[0] === str && !isString(value)) return value;\n if (!isString(value)) value = makeString(value);\n if (!value) {\n this.logger.warn(`missed to resolve ${match[1]} for nesting ${str}`);\n value = '';\n }\n if (formatters.length) {\n value = formatters.reduce((v, f) => this.format(v, f, options.lng, {\n ...options,\n interpolationkey: match[1].trim()\n }), value.trim());\n }\n str = str.replace(match[0], value);\n this.regexp.lastIndex = 0;\n }\n return str;\n }\n}\n\nconst parseFormatStr = formatStr => {\n let formatName = formatStr.toLowerCase().trim();\n const formatOptions = {};\n if (formatStr.includes('(')) {\n const p = formatStr.split('(');\n formatName = p[0].toLowerCase().trim();\n const optStr = p[1].slice(0, -1);\n if (formatName === 'currency' && !optStr.includes(':')) {\n if (!formatOptions.currency) formatOptions.currency = optStr.trim();\n } else if (formatName === 'relativetime' && !optStr.includes(':')) {\n if (!formatOptions.range) formatOptions.range = optStr.trim();\n } else {\n const opts = optStr.split(';');\n opts.forEach(opt => {\n if (opt) {\n const [key, ...rest] = opt.split(':');\n const val = rest.join(':').trim().replace(/^'+|'+$/g, '');\n const trimmedKey = key.trim();\n if (!formatOptions[trimmedKey]) formatOptions[trimmedKey] = val;\n if (val === 'false') formatOptions[trimmedKey] = false;\n if (val === 'true') formatOptions[trimmedKey] = true;\n if (!isNaN(val)) formatOptions[trimmedKey] = parseInt(val, 10);\n }\n });\n }\n }\n return {\n formatName,\n formatOptions\n };\n};\nconst createCachedFormatter = fn => {\n const cache = {};\n return (v, l, o) => {\n let optForCache = o;\n if (o && o.interpolationkey && o.formatParams && o.formatParams[o.interpolationkey] && o[o.interpolationkey]) {\n optForCache = {\n ...optForCache,\n [o.interpolationkey]: undefined\n };\n }\n const key = l + JSON.stringify(optForCache);\n let frm = cache[key];\n if (!frm) {\n frm = fn(getCleanedCode(l), o);\n cache[key] = frm;\n }\n return frm(v);\n };\n};\nconst createNonCachedFormatter = fn => (v, l, o) => fn(getCleanedCode(l), o)(v);\nclass Formatter {\n constructor(options = {}) {\n this.logger = baseLogger.create('formatter');\n this.options = options;\n this.init(options);\n }\n init(services, options = {\n interpolation: {}\n }) {\n this.formatSeparator = options.interpolation.formatSeparator || ',';\n const cf = options.cacheInBuiltFormats ? createCachedFormatter : createNonCachedFormatter;\n this.formats = {\n number: cf((lng, opt) => {\n const formatter = new Intl.NumberFormat(lng, {\n ...opt\n });\n return val => formatter.format(val);\n }),\n currency: cf((lng, opt) => {\n const formatter = new Intl.NumberFormat(lng, {\n ...opt,\n style: 'currency'\n });\n return val => formatter.format(val);\n }),\n datetime: cf((lng, opt) => {\n const formatter = new Intl.DateTimeFormat(lng, {\n ...opt\n });\n return val => formatter.format(val);\n }),\n relativetime: cf((lng, opt) => {\n const formatter = new Intl.RelativeTimeFormat(lng, {\n ...opt\n });\n return val => formatter.format(val, opt.range || 'day');\n }),\n list: cf((lng, opt) => {\n const formatter = new Intl.ListFormat(lng, {\n ...opt\n });\n return val => formatter.format(val);\n })\n };\n }\n add(name, fc) {\n this.formats[name.toLowerCase().trim()] = fc;\n }\n addCached(name, fc) {\n this.formats[name.toLowerCase().trim()] = createCachedFormatter(fc);\n }\n format(value, format, lng, options = {}) {\n if (!format) return value;\n if (value == null) return value;\n const formats = format.split(this.formatSeparator);\n if (formats.length > 1 && formats[0].indexOf('(') > 1 && !formats[0].includes(')') && formats.find(f => f.includes(')'))) {\n const lastIndex = formats.findIndex(f => f.includes(')'));\n formats[0] = [formats[0], ...formats.splice(1, lastIndex)].join(this.formatSeparator);\n }\n const result = formats.reduce((mem, f) => {\n const {\n formatName,\n formatOptions\n } = parseFormatStr(f);\n if (this.formats[formatName]) {\n let formatted = mem;\n try {\n const valOptions = options?.formatParams?.[options.interpolationkey] || {};\n const l = valOptions.locale || valOptions.lng || options.locale || options.lng || lng;\n formatted = this.formats[formatName](mem, l, {\n ...formatOptions,\n ...options,\n ...valOptions\n });\n } catch (error) {\n this.logger.warn(error);\n }\n return formatted;\n } else {\n this.logger.warn(`there was no format function for ${formatName}`);\n }\n return mem;\n }, value);\n return result;\n }\n}\n\nconst removePending = (q, name) => {\n if (q.pending[name] !== undefined) {\n delete q.pending[name];\n q.pendingCount--;\n }\n};\nclass Connector extends EventEmitter {\n constructor(backend, store, services, options = {}) {\n super();\n this.backend = backend;\n this.store = store;\n this.services = services;\n this.languageUtils = services.languageUtils;\n this.options = options;\n this.logger = baseLogger.create('backendConnector');\n this.waitingReads = [];\n this.maxParallelReads = options.maxParallelReads || 10;\n this.readingCalls = 0;\n this.maxRetries = options.maxRetries >= 0 ? options.maxRetries : 5;\n this.retryTimeout = options.retryTimeout >= 1 ? options.retryTimeout : 350;\n this.state = {};\n this.queue = [];\n this.backend?.init?.(services, options.backend, options);\n }\n queueLoad(languages, namespaces, options, callback) {\n const toLoad = {};\n const pending = {};\n const toLoadLanguages = {};\n const toLoadNamespaces = {};\n languages.forEach(lng => {\n let hasAllNamespaces = true;\n namespaces.forEach(ns => {\n const name = `${lng}|${ns}`;\n if (!options.reload && this.store.hasResourceBundle(lng, ns)) {\n this.state[name] = 2;\n } else if (this.state[name] < 0) ; else if (this.state[name] === 1) {\n if (pending[name] === undefined) pending[name] = true;\n } else {\n this.state[name] = 1;\n hasAllNamespaces = false;\n if (pending[name] === undefined) pending[name] = true;\n if (toLoad[name] === undefined) toLoad[name] = true;\n if (toLoadNamespaces[ns] === undefined) toLoadNamespaces[ns] = true;\n }\n });\n if (!hasAllNamespaces) toLoadLanguages[lng] = true;\n });\n if (Object.keys(toLoad).length || Object.keys(pending).length) {\n this.queue.push({\n pending,\n pendingCount: Object.keys(pending).length,\n loaded: {},\n errors: [],\n callback\n });\n }\n return {\n toLoad: Object.keys(toLoad),\n pending: Object.keys(pending),\n toLoadLanguages: Object.keys(toLoadLanguages),\n toLoadNamespaces: Object.keys(toLoadNamespaces)\n };\n }\n loaded(name, err, data) {\n const s = name.split('|');\n const lng = s[0];\n const ns = s[1];\n if (err) this.emit('failedLoading', lng, ns, err);\n if (!err && data) {\n this.store.addResourceBundle(lng, ns, data, undefined, undefined, {\n skipCopy: true\n });\n }\n this.state[name] = err ? -1 : 2;\n if (err && data) this.state[name] = 0;\n const loaded = {};\n this.queue.forEach(q => {\n pushPath(q.loaded, [lng], ns);\n removePending(q, name);\n if (err) q.errors.push(err);\n if (q.pendingCount === 0 && !q.done) {\n Object.keys(q.loaded).forEach(l => {\n if (!loaded[l]) loaded[l] = {};\n const loadedKeys = q.loaded[l];\n if (loadedKeys.length) {\n loadedKeys.forEach(n => {\n if (loaded[l][n] === undefined) loaded[l][n] = true;\n });\n }\n });\n q.done = true;\n if (q.errors.length) {\n q.callback(q.errors);\n } else {\n q.callback();\n }\n }\n });\n this.emit('loaded', loaded);\n this.queue = this.queue.filter(q => !q.done);\n }\n read(lng, ns, fcName, tried = 0, wait = this.retryTimeout, callback) {\n if (!lng.length) return callback(null, {});\n if (this.readingCalls >= this.maxParallelReads) {\n this.waitingReads.push({\n lng,\n ns,\n fcName,\n tried,\n wait,\n callback\n });\n return;\n }\n this.readingCalls++;\n const resolver = (err, data) => {\n this.readingCalls--;\n if (this.waitingReads.length > 0) {\n const next = this.waitingReads.shift();\n this.read(next.lng, next.ns, next.fcName, next.tried, next.wait, next.callback);\n }\n if (err && data && tried < this.maxRetries) {\n setTimeout(() => {\n this.read(lng, ns, fcName, tried + 1, wait * 2, callback);\n }, wait);\n return;\n }\n callback(err, data);\n };\n const fc = this.backend[fcName].bind(this.backend);\n if (fc.length === 2) {\n try {\n const r = fc(lng, ns);\n if (r && typeof r.then === 'function') {\n r.then(data => resolver(null, data)).catch(resolver);\n } else {\n resolver(null, r);\n }\n } catch (err) {\n resolver(err);\n }\n return;\n }\n return fc(lng, ns, resolver);\n }\n prepareLoading(languages, namespaces, options = {}, callback) {\n if (!this.backend) {\n this.logger.warn('No backend was added via i18next.use. Will not load resources.');\n return callback && callback();\n }\n if (isString(languages)) languages = this.languageUtils.toResolveHierarchy(languages);\n if (isString(namespaces)) namespaces = [namespaces];\n const toLoad = this.queueLoad(languages, namespaces, options, callback);\n if (!toLoad.toLoad.length) {\n if (!toLoad.pending.length) callback();\n return null;\n }\n toLoad.toLoad.forEach(name => {\n this.loadOne(name);\n });\n }\n load(languages, namespaces, callback) {\n this.prepareLoading(languages, namespaces, {}, callback);\n }\n reload(languages, namespaces, callback) {\n this.prepareLoading(languages, namespaces, {\n reload: true\n }, callback);\n }\n loadOne(name, prefix = '') {\n const s = name.split('|');\n const lng = s[0];\n const ns = s[1];\n this.read(lng, ns, 'read', undefined, undefined, (err, data) => {\n if (err) this.logger.warn(`${prefix}loading namespace ${ns} for language ${lng} failed`, err);\n if (!err && data) this.logger.log(`${prefix}loaded namespace ${ns} for language ${lng}`, data);\n this.loaded(name, err, data);\n });\n }\n saveMissing(languages, namespace, key, fallbackValue, isUpdate, options = {}, clb = () => {}) {\n if (this.services?.utils?.hasLoadedNamespace && !this.services?.utils?.hasLoadedNamespace(namespace)) {\n this.logger.warn(`did not save key \"${key}\" as the namespace \"${namespace}\" was not yet loaded`, 'This means something IS WRONG in your setup. You access the t function before i18next.init / i18next.loadNamespace / i18next.changeLanguage was done. Wait for the callback or Promise to resolve before accessing it!!!');\n return;\n }\n if (key === undefined || key === null || key === '') return;\n if (this.backend?.create) {\n const opts = {\n ...options,\n isUpdate\n };\n const fc = this.backend.create.bind(this.backend);\n if (fc.length < 6) {\n try {\n let r;\n if (fc.length === 5) {\n r = fc(languages, namespace, key, fallbackValue, opts);\n } else {\n r = fc(languages, namespace, key, fallbackValue);\n }\n if (r && typeof r.then === 'function') {\n r.then(data => clb(null, data)).catch(clb);\n } else {\n clb(null, r);\n }\n } catch (err) {\n clb(err);\n }\n } else {\n fc(languages, namespace, key, fallbackValue, clb, opts);\n }\n }\n if (!languages || !languages[0]) return;\n this.store.addResource(languages[0], namespace, key, fallbackValue);\n }\n}\n\nconst get = () => ({\n debug: false,\n initAsync: true,\n ns: ['translation'],\n defaultNS: ['translation'],\n fallbackLng: ['dev'],\n fallbackNS: false,\n supportedLngs: false,\n nonExplicitSupportedLngs: false,\n load: 'all',\n preload: false,\n keySeparator: '.',\n nsSeparator: ':',\n pluralSeparator: '_',\n contextSeparator: '_',\n enableSelector: false,\n partialBundledLanguages: false,\n saveMissing: false,\n updateMissing: false,\n saveMissingTo: 'fallback',\n saveMissingPlurals: true,\n missingKeyHandler: false,\n missingInterpolationHandler: false,\n postProcess: false,\n postProcessPassResolved: false,\n returnNull: false,\n returnEmptyString: true,\n returnObjects: false,\n joinArrays: false,\n returnedObjectHandler: false,\n parseMissingKeyHandler: false,\n appendNamespaceToMissingKey: false,\n appendNamespaceToCIMode: false,\n overloadTranslationOptionHandler: args => {\n let ret = {};\n if (typeof args[1] === 'object') ret = args[1];\n if (isString(args[1])) ret.defaultValue = args[1];\n if (isString(args[2])) ret.tDescription = args[2];\n if (typeof args[2] === 'object' || typeof args[3] === 'object') {\n const options = args[3] || args[2];\n Object.keys(options).forEach(key => {\n ret[key] = options[key];\n });\n }\n return ret;\n },\n interpolation: {\n escapeValue: true,\n prefix: '{{',\n suffix: '}}',\n formatSeparator: ',',\n unescapePrefix: '-',\n nestingPrefix: '$t(',\n nestingSuffix: ')',\n nestingOptionsSeparator: ',',\n maxReplaces: 1000,\n skipOnVariables: true\n },\n cacheInBuiltFormats: true\n});\nconst transformOptions = options => {\n if (isString(options.ns)) options.ns = [options.ns];\n if (isString(options.fallbackLng)) options.fallbackLng = [options.fallbackLng];\n if (isString(options.fallbackNS)) options.fallbackNS = [options.fallbackNS];\n if (options.supportedLngs && !options.supportedLngs.includes('cimode')) {\n options.supportedLngs = options.supportedLngs.concat(['cimode']);\n }\n return options;\n};\n\nconst noop = () => {};\nconst bindMemberFunctions = inst => {\n const mems = Object.getOwnPropertyNames(Object.getPrototypeOf(inst));\n mems.forEach(mem => {\n if (typeof inst[mem] === 'function') {\n inst[mem] = inst[mem].bind(inst);\n }\n });\n};\nclass I18n extends EventEmitter {\n constructor(options = {}, callback) {\n super();\n this.options = transformOptions(options);\n this.services = {};\n this.logger = baseLogger;\n this.modules = {\n external: []\n };\n bindMemberFunctions(this);\n if (callback && !this.isInitialized && !options.isClone) {\n if (!this.options.initAsync) {\n this.init(options, callback);\n return this;\n }\n setTimeout(() => {\n this.init(options, callback);\n }, 0);\n }\n }\n init(options = {}, callback) {\n this.isInitializing = true;\n if (typeof options === 'function') {\n callback = options;\n options = {};\n }\n if (options.defaultNS == null && options.ns) {\n if (isString(options.ns)) {\n options.defaultNS = options.ns;\n } else if (!options.ns.includes('translation')) {\n options.defaultNS = options.ns[0];\n }\n }\n const defOpts = get();\n this.options = {\n ...defOpts,\n ...this.options,\n ...transformOptions(options)\n };\n this.options.interpolation = {\n ...defOpts.interpolation,\n ...this.options.interpolation\n };\n if (options.keySeparator !== undefined) {\n this.options.userDefinedKeySeparator = options.keySeparator;\n }\n if (options.nsSeparator !== undefined) {\n this.options.userDefinedNsSeparator = options.nsSeparator;\n }\n if (typeof this.options.overloadTranslationOptionHandler !== 'function') {\n this.options.overloadTranslationOptionHandler = defOpts.overloadTranslationOptionHandler;\n }\n const createClassOnDemand = ClassOrObject => {\n if (!ClassOrObject) return null;\n if (typeof ClassOrObject === 'function') return new ClassOrObject();\n return ClassOrObject;\n };\n if (!this.options.isClone) {\n if (this.modules.logger) {\n baseLogger.init(createClassOnDemand(this.modules.logger), this.options);\n } else {\n baseLogger.init(null, this.options);\n }\n let formatter;\n if (this.modules.formatter) {\n formatter = this.modules.formatter;\n } else {\n formatter = Formatter;\n }\n const lu = new LanguageUtil(this.options);\n this.store = new ResourceStore(this.options.resources, this.options);\n const s = this.services;\n s.logger = baseLogger;\n s.resourceStore = this.store;\n s.languageUtils = lu;\n s.pluralResolver = new PluralResolver(lu, {\n prepend: this.options.pluralSeparator\n });\n if (formatter) {\n s.formatter = createClassOnDemand(formatter);\n if (s.formatter.init) s.formatter.init(s, this.options);\n this.options.interpolation.format = s.formatter.format.bind(s.formatter);\n }\n s.interpolator = new Interpolator(this.options);\n s.utils = {\n hasLoadedNamespace: this.hasLoadedNamespace.bind(this)\n };\n s.backendConnector = new Connector(createClassOnDemand(this.modules.backend), s.resourceStore, s, this.options);\n s.backendConnector.on('*', (event, ...args) => {\n this.emit(event, ...args);\n });\n if (this.modules.languageDetector) {\n s.languageDetector = createClassOnDemand(this.modules.languageDetector);\n if (s.languageDetector.init) s.languageDetector.init(s, this.options.detection, this.options);\n }\n if (this.modules.i18nFormat) {\n s.i18nFormat = createClassOnDemand(this.modules.i18nFormat);\n if (s.i18nFormat.init) s.i18nFormat.init(this);\n }\n this.translator = new Translator(this.services, this.options);\n this.translator.on('*', (event, ...args) => {\n this.emit(event, ...args);\n });\n this.modules.external.forEach(m => {\n if (m.init) m.init(this);\n });\n }\n this.format = this.options.interpolation.format;\n if (!callback) callback = noop;\n if (this.options.fallbackLng && !this.services.languageDetector && !this.options.lng) {\n const codes = this.services.languageUtils.getFallbackCodes(this.options.fallbackLng);\n if (codes.length > 0 && codes[0] !== 'dev') this.options.lng = codes[0];\n }\n if (!this.services.languageDetector && !this.options.lng) {\n this.logger.warn('init: no languageDetector is used and no lng is defined');\n }\n const storeApi = ['getResource', 'hasResourceBundle', 'getResourceBundle', 'getDataByLanguage'];\n storeApi.forEach(fcName => {\n this[fcName] = (...args) => this.store[fcName](...args);\n });\n const storeApiChained = ['addResource', 'addResources', 'addResourceBundle', 'removeResourceBundle'];\n storeApiChained.forEach(fcName => {\n this[fcName] = (...args) => {\n this.store[fcName](...args);\n return this;\n };\n });\n const deferred = defer();\n const load = () => {\n const finish = (err, t) => {\n this.isInitializing = false;\n if (this.isInitialized && !this.initializedStoreOnce) this.logger.warn('init: i18next is already initialized. You should call init just once!');\n this.isInitialized = true;\n if (!this.options.isClone) this.logger.log('initialized', this.options);\n this.emit('initialized', this.options);\n deferred.resolve(t);\n callback(err, t);\n };\n if ((this.languages || this.isLanguageChangingTo) && !this.isInitialized) return finish(null, this.t.bind(this));\n this.changeLanguage(this.options.lng, finish);\n };\n if (this.options.resources || !this.options.initAsync) {\n load();\n } else {\n setTimeout(load, 0);\n }\n return deferred;\n }\n loadResources(language, callback = noop) {\n let usedCallback = callback;\n const usedLng = isString(language) ? language : this.language;\n if (typeof language === 'function') usedCallback = language;\n if (!this.options.resources || this.options.partialBundledLanguages) {\n if (usedLng?.toLowerCase() === 'cimode' && (!this.options.preload || this.options.preload.length === 0)) return usedCallback();\n const toLoad = [];\n const append = lng => {\n if (!lng) return;\n if (lng === 'cimode') return;\n const lngs = this.services.languageUtils.toResolveHierarchy(lng);\n lngs.forEach(l => {\n if (l === 'cimode') return;\n if (!toLoad.includes(l)) toLoad.push(l);\n });\n };\n if (!usedLng) {\n const fallbacks = this.services.languageUtils.getFallbackCodes(this.options.fallbackLng);\n fallbacks.forEach(l => append(l));\n } else {\n append(usedLng);\n }\n this.options.preload?.forEach?.(l => append(l));\n this.services.backendConnector.load(toLoad, this.options.ns, e => {\n if (!e && !this.resolvedLanguage && this.language) this.setResolvedLanguage(this.language);\n usedCallback(e);\n });\n } else {\n usedCallback(null);\n }\n }\n reloadResources(lngs, ns, callback) {\n const deferred = defer();\n if (typeof lngs === 'function') {\n callback = lngs;\n lngs = undefined;\n }\n if (typeof ns === 'function') {\n callback = ns;\n ns = undefined;\n }\n if (!lngs) lngs = this.languages;\n if (!ns) ns = this.options.ns;\n if (!callback) callback = noop;\n this.services.backendConnector.reload(lngs, ns, err => {\n deferred.resolve();\n callback(err);\n });\n return deferred;\n }\n use(module) {\n if (!module) throw new Error('You are passing an undefined module! Please check the object you are passing to i18next.use()');\n if (!module.type) throw new Error('You are passing a wrong module! Please check the object you are passing to i18next.use()');\n if (module.type === 'backend') {\n this.modules.backend = module;\n }\n if (module.type === 'logger' || module.log && module.warn && module.error) {\n this.modules.logger = module;\n }\n if (module.type === 'languageDetector') {\n this.modules.languageDetector = module;\n }\n if (module.type === 'i18nFormat') {\n this.modules.i18nFormat = module;\n }\n if (module.type === 'postProcessor') {\n postProcessor.addPostProcessor(module);\n }\n if (module.type === 'formatter') {\n this.modules.formatter = module;\n }\n if (module.type === '3rdParty') {\n this.modules.external.push(module);\n }\n return this;\n }\n setResolvedLanguage(l) {\n if (!l || !this.languages) return;\n if (['cimode', 'dev'].includes(l)) return;\n for (let li = 0; li < this.languages.length; li++) {\n const lngInLngs = this.languages[li];\n if (['cimode', 'dev'].includes(lngInLngs)) continue;\n if (this.store.hasLanguageSomeTranslations(lngInLngs)) {\n this.resolvedLanguage = lngInLngs;\n break;\n }\n }\n if (!this.resolvedLanguage && !this.languages.includes(l) && this.store.hasLanguageSomeTranslations(l)) {\n this.resolvedLanguage = l;\n this.languages.unshift(l);\n }\n }\n changeLanguage(lng, callback) {\n this.isLanguageChangingTo = lng;\n const deferred = defer();\n this.emit('languageChanging', lng);\n const setLngProps = l => {\n this.language = l;\n this.languages = this.services.languageUtils.toResolveHierarchy(l);\n this.resolvedLanguage = undefined;\n this.setResolvedLanguage(l);\n };\n const done = (err, l) => {\n if (l) {\n if (this.isLanguageChangingTo === lng) {\n setLngProps(l);\n this.translator.changeLanguage(l);\n this.isLanguageChangingTo = undefined;\n this.emit('languageChanged', l);\n this.logger.log('languageChanged', l);\n }\n } else {\n this.isLanguageChangingTo = undefined;\n }\n deferred.resolve((...args) => this.t(...args));\n if (callback) callback(err, (...args) => this.t(...args));\n };\n const setLng = lngs => {\n if (!lng && !lngs && this.services.languageDetector) lngs = [];\n const fl = isString(lngs) ? lngs : lngs && lngs[0];\n const l = this.store.hasLanguageSomeTranslations(fl) ? fl : this.services.languageUtils.getBestMatchFromCodes(isString(lngs) ? [lngs] : lngs);\n if (l) {\n if (!this.language) {\n setLngProps(l);\n }\n if (!this.translator.language) this.translator.changeLanguage(l);\n this.services.languageDetector?.cacheUserLanguage?.(l);\n }\n this.loadResources(l, err => {\n done(err, l);\n });\n };\n if (!lng && this.services.languageDetector && !this.services.languageDetector.async) {\n setLng(this.services.languageDetector.detect());\n } else if (!lng && this.services.languageDetector && this.services.languageDetector.async) {\n if (this.services.languageDetector.detect.length === 0) {\n this.services.languageDetector.detect().then(setLng);\n } else {\n this.services.languageDetector.detect(setLng);\n }\n } else {\n setLng(lng);\n }\n return deferred;\n }\n getFixedT(lng, ns, keyPrefix, fixedOpts) {\n const scopeNs = fixedOpts?.scopeNs;\n const fixedT = (key, opts, ...rest) => {\n let o;\n if (typeof opts !== 'object') {\n o = this.options.overloadTranslationOptionHandler([key, opts].concat(rest));\n } else {\n o = {\n ...opts\n };\n }\n o.lng = o.lng || fixedT.lng;\n o.lngs = o.lngs || fixedT.lngs;\n const explicitCallNs = o.ns !== undefined && o.ns !== null;\n o.ns = o.ns || fixedT.ns;\n if (o.keyPrefix !== '') o.keyPrefix = o.keyPrefix || keyPrefix || fixedT.keyPrefix;\n const selectorOpts = {\n ...this.options,\n ...o\n };\n if (Array.isArray(scopeNs) && !explicitCallNs) selectorOpts.ns = scopeNs;\n if (typeof o.keyPrefix === 'function') o.keyPrefix = keysFromSelector(o.keyPrefix, selectorOpts);\n const keySeparator = this.options.keySeparator || '.';\n let resultKey;\n if (o.keyPrefix && Array.isArray(key)) {\n resultKey = key.map(k => {\n if (typeof k === 'function') k = keysFromSelector(k, selectorOpts);\n return `${o.keyPrefix}${keySeparator}${k}`;\n });\n } else {\n if (typeof key === 'function') key = keysFromSelector(key, selectorOpts);\n resultKey = o.keyPrefix ? `${o.keyPrefix}${keySeparator}${key}` : key;\n }\n return this.t(resultKey, o);\n };\n if (isString(lng)) {\n fixedT.lng = lng;\n } else {\n fixedT.lngs = lng;\n }\n fixedT.ns = ns;\n fixedT.keyPrefix = keyPrefix;\n return fixedT;\n }\n t(...args) {\n return this.translator?.translate(...args);\n }\n exists(...args) {\n return this.translator?.exists(...args);\n }\n setDefaultNamespace(ns) {\n this.options.defaultNS = ns;\n }\n hasLoadedNamespace(ns, options = {}) {\n if (!this.isInitialized) {\n this.logger.warn('hasLoadedNamespace: i18next was not initialized', this.languages);\n return false;\n }\n if (!this.languages || !this.languages.length) {\n this.logger.warn('hasLoadedNamespace: i18n.languages were undefined or empty', this.languages);\n return false;\n }\n const lng = options.lng || this.resolvedLanguage || this.languages[0];\n const fallbackLng = this.options ? this.options.fallbackLng : false;\n const lastLng = this.languages[this.languages.length - 1];\n if (lng.toLowerCase() === 'cimode') return true;\n const loadNotPending = (l, n) => {\n const loadState = this.services.backendConnector.state[`${l}|${n}`];\n return loadState === -1 || loadState === 0 || loadState === 2;\n };\n if (options.precheck) {\n const preResult = options.precheck(this, loadNotPending);\n if (preResult !== undefined) return preResult;\n }\n if (this.hasResourceBundle(lng, ns)) return true;\n if (!this.services.backendConnector.backend || this.options.resources && !this.options.partialBundledLanguages) return true;\n if (loadNotPending(lng, ns) && (!fallbackLng || loadNotPending(lastLng, ns))) return true;\n return false;\n }\n loadNamespaces(ns, callback) {\n const deferred = defer();\n if (!this.options.ns) {\n if (callback) callback();\n return Promise.resolve();\n }\n if (isString(ns)) ns = [ns];\n ns.forEach(n => {\n if (!this.options.ns.includes(n)) this.options.ns.push(n);\n });\n this.loadResources(err => {\n deferred.resolve();\n if (callback) callback(err);\n });\n return deferred;\n }\n loadLanguages(lngs, callback) {\n const deferred = defer();\n if (isString(lngs)) lngs = [lngs];\n const preloaded = this.options.preload || [];\n const newLngs = lngs.filter(lng => !preloaded.includes(lng) && this.services.languageUtils.isSupportedCode(lng));\n if (!newLngs.length) {\n if (callback) callback();\n return Promise.resolve();\n }\n this.options.preload = preloaded.concat(newLngs);\n this.loadResources(err => {\n deferred.resolve();\n if (callback) callback(err);\n });\n return deferred;\n }\n dir(lng) {\n if (!lng) lng = this.resolvedLanguage || (this.languages?.length > 0 ? this.languages[0] : this.language);\n if (!lng) return 'rtl';\n try {\n const l = new Intl.Locale(lng);\n if (l && l.getTextInfo) {\n const ti = l.getTextInfo();\n if (ti && ti.direction) return ti.direction;\n }\n } catch (e) {}\n const rtlLngs = ['ar', 'shu', 'sqr', 'ssh', 'xaa', 'yhd', 'yud', 'aao', 'abh', 'abv', 'acm', 'acq', 'acw', 'acx', 'acy', 'adf', 'ads', 'aeb', 'aec', 'afb', 'ajp', 'apc', 'apd', 'arb', 'arq', 'ars', 'ary', 'arz', 'auz', 'avl', 'ayh', 'ayl', 'ayn', 'ayp', 'bbz', 'pga', 'he', 'iw', 'ps', 'pbt', 'pbu', 'pst', 'prp', 'prd', 'ug', 'ur', 'ydd', 'yds', 'yih', 'ji', 'yi', 'hbo', 'men', 'xmn', 'fa', 'jpr', 'peo', 'pes', 'prs', 'dv', 'sam', 'ckb'];\n const languageUtils = this.services?.languageUtils || new LanguageUtil(get());\n if (lng.toLowerCase().indexOf('-latn') > 1) return 'ltr';\n return rtlLngs.includes(languageUtils.getLanguagePartFromCode(lng)) || lng.toLowerCase().indexOf('-arab') > 1 ? 'rtl' : 'ltr';\n }\n static createInstance(options = {}, callback) {\n const instance = new I18n(options, callback);\n instance.createInstance = I18n.createInstance;\n return instance;\n }\n cloneInstance(options = {}, callback = noop) {\n const forkResourceStore = options.forkResourceStore;\n if (forkResourceStore) delete options.forkResourceStore;\n const mergedOptions = {\n ...this.options,\n ...options,\n ...{\n isClone: true\n }\n };\n const clone = new I18n(mergedOptions);\n if (options.debug !== undefined || options.prefix !== undefined) {\n clone.logger = clone.logger.clone(options);\n }\n const membersToCopy = ['store', 'services', 'language'];\n membersToCopy.forEach(m => {\n clone[m] = this[m];\n });\n clone.services = {\n ...this.services\n };\n clone.services.utils = {\n hasLoadedNamespace: clone.hasLoadedNamespace.bind(clone)\n };\n if (forkResourceStore) {\n const clonedData = Object.keys(this.store.data).reduce((prev, l) => {\n prev[l] = {\n ...this.store.data[l]\n };\n prev[l] = Object.keys(prev[l]).reduce((acc, n) => {\n acc[n] = {\n ...prev[l][n]\n };\n return acc;\n }, prev[l]);\n return prev;\n }, {});\n clone.store = new ResourceStore(clonedData, mergedOptions);\n clone.services.resourceStore = clone.store;\n }\n if (options.interpolation) {\n const defOpts = get();\n const mergedInterpolation = {\n ...defOpts.interpolation,\n ...this.options.interpolation,\n ...options.interpolation\n };\n const mergedForInterpolator = {\n ...mergedOptions,\n interpolation: mergedInterpolation\n };\n clone.services.interpolator = new Interpolator(mergedForInterpolator);\n }\n clone.translator = new Translator(clone.services, mergedOptions);\n clone.translator.on('*', (event, ...args) => {\n clone.emit(event, ...args);\n });\n clone.init(mergedOptions, callback);\n clone.translator.options = mergedOptions;\n clone.translator.backendConnector.services.utils = {\n hasLoadedNamespace: clone.hasLoadedNamespace.bind(clone)\n };\n return clone;\n }\n toJSON() {\n return {\n options: this.options,\n store: this.store,\n language: this.language,\n languages: this.languages,\n resolvedLanguage: this.resolvedLanguage\n };\n }\n}\nconst instance = I18n.createInstance();\n\nconst createInstance = instance.createInstance;\nconst dir = instance.dir;\nconst init = instance.init;\nconst loadResources = instance.loadResources;\nconst reloadResources = instance.reloadResources;\nconst use = instance.use;\nconst changeLanguage = instance.changeLanguage;\nconst getFixedT = instance.getFixedT;\nconst t = instance.t;\nconst exists = instance.exists;\nconst setDefaultNamespace = instance.setDefaultNamespace;\nconst hasLoadedNamespace = instance.hasLoadedNamespace;\nconst loadNamespaces = instance.loadNamespaces;\nconst loadLanguages = instance.loadLanguages;\n\nexport { changeLanguage, createInstance, instance as default, dir, exists, getFixedT, hasLoadedNamespace, init, keysFromSelector as keyFromSelector, loadLanguages, loadNamespaces, loadResources, reloadResources, setDefaultNamespace, t, use };\n","{\n \"common.language.auto\": \"Auto\",\n \"common.language.select\": \"Select language\",\n \"common.theme.auto\": \"Auto\",\n \"common.theme.dark\": \"Dark\",\n \"common.theme.light\": \"Light\",\n \"common.theme.select\": \"Select theme\",\n \"common.yes\": \"Yes\",\n \"common.no\": \"No\",\n \"common.none\": \"None\",\n \"login.email.placeholder\": \"hello@example.com\",\n \"login.error.failed\": \"Login failed. Please check your email and password.\",\n \"login.password.placeholder\": \"Enter your password\",\n \"login.submit\": \"Log in\",\n \"login.submitting\": \"Logging in...\",\n \"login.title\": \"Welcome back!\",\n \"login.link.register\": \"Sign up\",\n \"login.link.forgotPassword\": \"Forgot password?\",\n \"login.selectMethod.subtitle\": \"\",\n \"login.method.password\": \"Email\",\n \"login.method.passkey\": \"Passkey\",\n \"login.password.backToMethods\": \"Other sign in options\",\n \"login.footer.noAccount\": \"Don't have an account?\",\n \"profile.email.label\": \"Email\",\n \"profile.id.label\": \"User ID\",\n \"profile.logout\": \"Log out\",\n \"profile.title\": \"My Profile\",\n \"profile.account.title\": \"Account Information\",\n \"profile.account.description\": \"Your basic account details\",\n \"profile.security.title\": \"Security\",\n \"profile.security.description\": \"Manage your security settings\",\n \"admin.eyebrow\": \"Admin\",\n \"admin.dashboardTitle\": \"Admin dashboard\",\n \"admin.dashboardDescription\": \"Manage TinyAuth users and clients from one place.\",\n \"admin.readonlyNotice\": \"Config-managed users and clients are read-only.\",\n \"admin.accessRequired\": \"Admin access required\",\n \"admin.accessRequiredDescription\": \"Your account does not have permission to access the admin console.\",\n \"admin.nav.dashboard\": \"Dashboard\",\n \"admin.nav.users\": \"Users\",\n \"admin.signedInAs\": \"Signed in as\",\n \"admin.commandPlaceholder\": \"Search users, clients, policies...\",\n \"admin.environment\": \"Live\",\n \"admin.metrics.totalUsers\": \"Total users\",\n \"admin.metrics.admins\": \"Admins\",\n \"admin.metrics.configUsers\": \"Config users\",\n \"admin.metrics.databaseUsers\": \"Database users\",\n \"admin.policy.title\": \"Policy\",\n \"admin.policy.heading\": \"Guardrails are active\",\n \"admin.policy.configReadonly\": \"Config read-only\",\n \"admin.backToDashboard\": \"Back to dashboard\",\n \"admin.users.title\": \"Users\",\n \"admin.users.description\": \"Manage database-backed users and review config-managed users.\",\n \"admin.users.directory\": \"User directory\",\n \"admin.users.searchPlaceholder\": \"Search users by email or ID\",\n \"admin.users.create\": \"Create user\",\n \"admin.users.role\": \"Role\",\n \"admin.users.source\": \"Source\",\n \"admin.users.emailVerified\": \"Email verified\",\n \"admin.users.secondFactor\": \"2FA\",\n \"admin.users.status\": \"Status\",\n \"admin.users.active\": \"Active\",\n \"admin.users.deleted\": \"Deleted\",\n \"admin.users.total\": \"{{count}} users\",\n \"admin.users.open\": \"Open users\",\n \"register.email.placeholder\": \"hello@example.com\",\n \"register.error.emailExists\": \"Email already exists\",\n \"register.error.emailNotAllowed\": \"This email address is not allowed for registration.\",\n \"register.error.registrationDisabled\": \"Registration is currently disabled.\",\n \"register.link.login\": \"Sign in\",\n \"register.footer.haveAccount\": \"Already have an account?\",\n \"register.password.placeholder\": \"Enter your password\",\n \"register.submit\": \"Create account\",\n \"register.submitting\": \"Creating account...\",\n \"register.subtitle\": \"Create a new account to get started\",\n \"register.title\": \"Create account\",\n \"validation.email.invalid\": \"Invalid email format\",\n \"validation.password.max\": \"Password must be at most {{count}} characters\",\n \"validation.password.min\": \"Password must be at least {{count}} characters\",\n \"validation.password.required\": \"Please enter your password\",\n \"validation.token.required\": \"Please enter verification token\",\n \"validation.confirmPassword.required\": \"Please confirm your password\",\n \"validation.confirmPassword.mismatch\": \"Passwords do not match\",\n \"validation.confirmText.mismatch\": \"The confirmation text does not match\",\n \"validation.terms.required\": \"Please agree to the required terms\",\n \"register.success.subtitle\": \"We sent you a verification email\",\n \"register.success.description\": \"Please check your email at {{email}} to verify your account.\",\n \"verifyEmail.title\": \"Email Verification\",\n \"verifyEmail.subtitle\": \"Enter your verification token below\",\n \"verifyEmail.token.placeholder\": \"Enter the token from your email\",\n \"verifyEmail.submit\": \"Verify\",\n \"verifyEmail.submitting\": \"Verifying...\",\n \"verifyEmail.resend\": \"Resend verification email\",\n \"verifyEmail.resending\": \"Resending...\",\n \"verifyEmail.success.title\": \"Verification complete!\",\n \"verifyEmail.success.subtitle\": \"Your email has been successfully verified\",\n \"verifyEmail.success.description\": \"You can now access all features.\",\n \"verifyEmail.success.goToProfile\": \"Go to profile\",\n \"verifyEmail.error.invalidToken\": \"Invalid or expired token\",\n \"verifyEmail.resendSuccess\": \"Verification email has been resent\",\n \"forgotPassword.title\": \"Forgot Password\",\n \"forgotPassword.subtitle\": \"Enter your email to receive a password reset link\",\n \"forgotPassword.email.placeholder\": \"hello@example.com\",\n \"forgotPassword.submit\": \"Send reset link\",\n \"forgotPassword.submitting\": \"Sending...\",\n \"forgotPassword.backToLogin\": \"Back to login\",\n \"forgotPassword.footer.rememberedPassword\": \"Remembered your password?\",\n \"forgotPassword.success.title\": \"Email sent!\",\n \"forgotPassword.success.subtitle\": \"Check your inbox\",\n \"forgotPassword.success.description\": \"If an account exists for {{email}}, you will receive a password reset link.\",\n \"forgotPassword.success.checkSpam\": \"If you don't see the email, please check your spam folder.\",\n \"forgotPassword.error.notEditable\": \"This account cannot be modified\",\n \"resetPassword.title\": \"Reset Password\",\n \"resetPassword.subtitle\": \"Enter your new password below\",\n \"resetPassword.token.placeholder\": \"Enter the token from your email\",\n \"resetPassword.password.placeholder\": \"Enter your new password\",\n \"resetPassword.confirmPassword.placeholder\": \"Confirm your new password\",\n \"resetPassword.submit\": \"Reset password\",\n \"resetPassword.submitting\": \"Resetting...\",\n \"resetPassword.backToLogin\": \"Back to login\",\n \"resetPassword.success.title\": \"Password reset!\",\n \"resetPassword.success.subtitle\": \"Your password has been successfully changed\",\n \"resetPassword.success.description\": \"You can now log in with your new password.\",\n \"resetPassword.success.goToLogin\": \"Go to login\",\n \"resetPassword.error.invalidToken\": \"Invalid or expired token\",\n \"resetPassword.error.notEditable\": \"This account cannot be modified\",\n \"consent.title\": \"Authorization Request\",\n \"consent.subtitle\": \"{{app}} is requesting access to your account\",\n \"consent.loggedInAs\": \"Logged in as\",\n \"consent.permissions.title\": \"This application will be able to:\",\n \"consent.allow\": \"Allow\",\n \"consent.deny\": \"Deny\",\n \"consent.error.title\": \"Error\",\n \"consent.error.message\": \"Unable to load authorization details. The client may be invalid.\",\n \"consent.error.back\": \"Go back\",\n \"consent.scope.openid\": \"Access your unique user identifier\",\n \"consent.scope.profile\": \"Access your profile information\",\n \"consent.scope.email\": \"Access your email address\",\n \"consent.scope.address\": \"Access your address information\",\n \"consent.scope.phone\": \"Access your phone number\",\n \"consent.scope.offline_access\": \"Maintain access when you are not present\",\n \"oauth.error.failed\": \"OAuth login failed. Please try again.\",\n \"oauth.error.accessDenied\": \"The authorization request was denied.\",\n \"oauth.error.temporarilyUnavailable\": \"The service is temporarily unavailable. Please try again later.\",\n \"oauth.error.serverError\": \"An error occurred on the authentication server. Please try again later.\",\n \"oauth.error.registrationEmailNotAllowed\": \"This email address is not allowed for registration.\",\n \"profile.linkedAccounts.title\": \"Linked Accounts\",\n \"profile.linkedAccounts.description\": \"Connect your account with third-party services\",\n \"profile.linkedAccounts.link\": \"Link\",\n \"profile.linkedAccounts.unlink\": \"Unlink\",\n \"profile.linkedAccounts.unlinking\": \"Unlinking...\",\n \"profile.linkedAccounts.unlinkError\": \"Cannot unlink. You need at least one way to log in.\",\n \"profile.linkedAccounts.unlinkModal.title\": \"Unlink Account\",\n \"profile.linkedAccounts.unlinkModal.description\": \"You are about to unlink {{provider}} from your account.\",\n \"profile.linkedAccounts.unlinkModal.warning\": \"You will no longer be able to log in using {{provider}}. Make sure you have another way to access your account.\",\n \"profile.linkedAccounts.unlinkModal.cancel\": \"Cancel\",\n \"profile.linkedAccounts.connected\": \"Connected\",\n \"profile.linkedAccounts.notConnected\": \"Not connected\",\n \"error.title\": \"Error\",\n \"error.subtitle\": \"Something went wrong\",\n \"error.defaultMessage\": \"An unexpected error occurred. Please try again later.\",\n \"error.codeLabel\": \"Error Code\",\n \"error.goToLogin\": \"Go to login\",\n \"error.goBack\": \"Go back\",\n \"error.footer.needHelp\": \"Need help?\",\n \"error.footer.contactSupport\": \"Contact support\",\n \"error.sessionExpired\": \"Your session has expired. Please log in again.\",\n \"error.retry\": \"Retry\",\n \"profile.password.title\": \"Password\",\n \"profile.password.status.set\": \"Password is set\",\n \"profile.password.status.notSet\": \"No password set\",\n \"profile.password.set\": \"Set Password\",\n \"profile.password.change\": \"Change Password\",\n \"profile.password.remove\": \"Remove Password\",\n \"profile.password.setModal.title\": \"Set Password\",\n \"profile.password.setModal.description\": \"Set a password to enable email and password login.\",\n \"profile.password.setModal.newPassword\": \"New Password\",\n \"profile.password.setModal.newPasswordPlaceholder\": \"Enter new password\",\n \"profile.password.setModal.confirmPassword\": \"Confirm Password\",\n \"profile.password.setModal.confirmPasswordPlaceholder\": \"Confirm new password\",\n \"profile.password.setModal.submit\": \"Set Password\",\n \"profile.password.setModal.submitting\": \"Setting...\",\n \"profile.password.setModal.cancel\": \"Cancel\",\n \"profile.password.setModal.error\": \"Failed to set password\",\n \"profile.password.changeModal.title\": \"Change Password\",\n \"profile.password.changeModal.description\": \"Verify your current password and set a new one.\",\n \"profile.password.changeModal.currentPassword\": \"Current Password\",\n \"profile.password.changeModal.currentPasswordPlaceholder\": \"Enter current password\",\n \"profile.password.changeModal.newPassword\": \"New Password\",\n \"profile.password.changeModal.newPasswordPlaceholder\": \"Enter new password\",\n \"profile.password.changeModal.confirmPassword\": \"Confirm Password\",\n \"profile.password.changeModal.confirmPasswordPlaceholder\": \"Confirm new password\",\n \"profile.password.changeModal.submit\": \"Change Password\",\n \"profile.password.changeModal.submitting\": \"Changing...\",\n \"profile.password.changeModal.cancel\": \"Cancel\",\n \"profile.password.changeModal.error\": \"Failed to change password\",\n \"profile.password.changeModal.invalidCurrent\": \"Current password is incorrect\",\n \"profile.password.removeModal.title\": \"Remove Password\",\n \"profile.password.removeModal.description\": \"Removing your password will disable email and password login. You will only be able to log in with linked OAuth accounts.\",\n \"profile.password.removeModal.currentPassword\": \"Current Password\",\n \"profile.password.removeModal.currentPasswordPlaceholder\": \"Enter current password\",\n \"profile.password.removeModal.submit\": \"Remove Password\",\n \"profile.password.removeModal.submitting\": \"Removing...\",\n \"profile.password.removeModal.cancel\": \"Cancel\",\n \"profile.password.removeModal.error\": \"Failed to remove password\",\n \"profile.password.removeModal.invalidCurrent\": \"Current password is incorrect\",\n \"profile.password.removeModal.noOAuth\": \"You must have at least one OAuth account linked\",\n \"profile.password.removeModal.noOAuthWith2FA\": \"Cannot remove password when 2FA is set up. Add an OAuth account first, or disable 2FA before removing password.\",\n \"profile.password.removeDisabledReason\": \"Cannot remove password when 2FA is set up. Add an OAuth account first.\",\n \"profile.password.configManaged\": \"This account is managed by configuration and the password cannot be changed\",\n \"profile.totp.title\": \"Two-Factor Authentication\",\n \"profile.totp.status.enabled\": \"Two-factor authentication is enabled\",\n \"profile.totp.status.recoveryCodesMissing\": \"Recovery codes need to be regenerated\",\n \"profile.totp.status.disabled\": \"Two-factor authentication is not enabled\",\n \"profile.totp.enable\": \"Enable\",\n \"profile.totp.disable\": \"Disable\",\n \"profile.totp.regenerate\": \"Regenerate codes\",\n \"profile.totp.recoveryCodesMissing\": \"Your existing recovery codes are no longer valid. Generate a new set now and store them safely.\",\n \"profile.totp.setupModal.title\": \"Set Up Two-Factor Authentication\",\n \"profile.totp.setupModal.requiredDescription\": \"You must set up two-factor authentication (TOTP) or passkey to continue.\",\n \"profile.totp.setupModal.setupError\": \"Failed to start setup. Please try again.\",\n \"profile.totp.setupModal.retry\": \"Retry\",\n \"profile.totp.setupModal.cancel\": \"Cancel\",\n \"profile.totp.setupModal.switchToPasskey\": \"Use Passkey Instead\",\n \"profile.totp.disableModal.title\": \"Disable Two-Factor Authentication\",\n \"profile.totp.disableModal.description\": \"Enter your current authentication code to disable two-factor authentication.\",\n \"profile.totp.disableModal.warning\": \"Disabling two-factor authentication will make your account less secure.\",\n \"profile.totp.disableModal.codeLabel\": \"Authentication Code\",\n \"profile.totp.disableModal.cancel\": \"Cancel\",\n \"profile.totp.disableModal.disable\": \"Disable\",\n \"profile.totp.disableModal.disabling\": \"Disabling...\",\n \"profile.totp.disableModal.error\": \"Invalid code. Please try again.\",\n \"profile.totp.disableModal.cannotRemoveLastSecondFactor\": \"Cannot disable TOTP. At least one two-factor authentication method (TOTP or Passkey) is required.\",\n \"profile.totp.regenerateModal.title\": \"Regenerate Recovery Codes\",\n \"profile.totp.regenerateModal.description\": \"Enter your current authentication code to replace all existing recovery codes.\",\n \"profile.totp.regenerateModal.submit\": \"Generate Recovery Codes\",\n \"profile.totp.regenerateModal.submitting\": \"Generating...\",\n \"profile.totp.regenerateModal.error\": \"Invalid code. Please try again.\",\n \"profile.totp.regenerateModal.unexpectedError\": \"Unable to regenerate recovery codes right now. Please try again.\",\n \"profile.totp.regenerateModal.recoveryTitle\": \"New Recovery Codes\",\n \"profile.totp.regenerateModal.recoveryDescription\": \"These codes are shown once. Store them somewhere safe before closing this dialog.\",\n \"validation.totp.length\": \"Code must be 6 digits\",\n \"validation.totp.digits\": \"Code must contain only digits\",\n \"validation.passkey.name.max\": \"Passkey name must be at most 100 characters\",\n \"validation.passkey.name.required\": \"Passkey name is required\",\n \"profile.passkey.title\": \"Passkeys\",\n \"profile.passkey.status.enabled\": \"{{count}} passkey(s) registered\",\n \"profile.passkey.status.disabled\": \"No passkeys registered\",\n \"profile.passkey.add\": \"Add Passkey\",\n \"profile.passkey.manage\": \"Manage\",\n \"profile.passkey.setupModal.title\": \"Add Passkey\",\n \"profile.passkey.setupModal.requiredDescription\": \"You must set up passkey or two-factor authentication (TOTP) to continue.\",\n \"profile.passkey.setupModal.description\": \"A passkey lets you sign in securely using your fingerprint, face, or screen lock.\",\n \"profile.passkey.setupModal.nameLabel\": \"Passkey Name (Optional)\",\n \"profile.passkey.setupModal.namePlaceholder\": \"e.g., MacBook Pro, iPhone\",\n \"profile.passkey.setupModal.nameHint\": \"Give your passkey a name to identify it later\",\n \"profile.passkey.setupModal.continue\": \"Continue\",\n \"profile.passkey.setupModal.cancel\": \"Cancel\",\n \"profile.passkey.setupModal.switchToTotp\": \"Use TOTP Instead\",\n \"profile.passkey.setupModal.waitingForDevice\": \"Follow the prompts from your browser or device...\",\n \"profile.passkey.setupModal.error\": \"Failed to register passkey. Please try again.\",\n \"profile.passkey.setupModal.cancelled\": \"Passkey registration was cancelled.\",\n \"profile.passkey.manageModal.title\": \"Manage Passkeys\",\n \"profile.passkey.manageModal.noPasskeys\": \"You don't have any passkeys registered yet.\",\n \"profile.passkey.manageModal.close\": \"Close\",\n \"profile.passkey.manageModal.addNew\": \"Add New Passkey\",\n \"profile.passkey.manageModal.unnamedPasskey\": \"Unnamed Passkey\",\n \"profile.passkey.manageModal.createdAt\": \"Added {{date}}\",\n \"profile.passkey.manageModal.backedUp\": \"Synced\",\n \"profile.passkey.manageModal.rename\": \"Rename\",\n \"profile.passkey.manageModal.delete\": \"Delete\",\n \"profile.passkey.manageModal.deleteConfirmInline\": \"Delete this passkey?\",\n \"profile.passkey.manageModal.deleteError\": \"Cannot delete passkey. You need at least one way to log in.\",\n \"profile.passkey.manageModal.cannotRemoveLastSecondFactor\": \"Cannot delete passkey. At least one two-factor authentication method (TOTP or Passkey) is required.\",\n \"profile.passkey.manageModal.namePlaceholder\": \"Enter passkey name\",\n \"profile.passkey.manageModal.cancelEdit\": \"Cancel\",\n \"profile.passkey.manageModal.save\": \"Save\",\n \"profile.passkey.manageModal.saving\": \"Saving...\",\n \"profile.passkey.manageModal.renameError\": \"Failed to rename passkey. Please try again.\",\n \"profile.dangerZone.title\": \"Danger Zone\",\n \"profile.dangerZone.description\": \"Irreversible actions like deleting your account\",\n \"profile.deleteAccount.title\": \"Delete Account\",\n \"profile.deleteAccount.description\": \"Permanently delete your account\",\n \"profile.deleteAccount.button\": \"Delete Account\",\n \"profile.deleteAccount.modal.title\": \"Are you sure you want to delete your account?\",\n \"profile.deleteAccount.modal.description\": \"This action cannot be undone. All your data will be permanently deleted after {{days}} days.\",\n \"profile.deleteAccount.modal.warning\": \"You will not be able to sign up again with this email after deletion.\",\n \"profile.deleteAccount.modal.confirmLabel\": \"Type \\\"delete\\\" to confirm\",\n \"profile.deleteAccount.modal.confirmPlaceholder\": \"delete\",\n \"profile.deleteAccount.modal.confirm\": \"Delete Account\",\n \"profile.deleteAccount.modal.confirming\": \"Deleting...\",\n \"profile.deleteAccount.modal.cancel\": \"Cancel\",\n \"profile.deleteAccount.configManaged\": \"This account is managed by configuration and cannot be deleted\",\n \"profile.deleteAccount.error\": \"Failed to delete account\",\n \"verifyTotp.title\": \"Two-Factor Authentication\",\n \"verifyTotp.subtitle\": \"Enter the code from your authenticator app\",\n \"verifyTotp.submit\": \"Verify\",\n \"verifyTotp.submitting\": \"Verifying...\",\n \"verifyTotp.error.invalid\": \"Invalid code. Please try again.\",\n \"verifyTotp.error.expired\": \"Session expired. Please log in again.\",\n \"verifyTotp.redirecting\": \"Redirecting to login in {{seconds}} seconds...\",\n \"verifyTotp.redirectNow\": \"Go to login now\",\n \"verifyTotp.backToLogin\": \"Back to login\",\n \"verifyTotp.useRecoveryCode\": \"Use a recovery code\",\n \"verifyRecovery.title\": \"Recovery Code\",\n \"verifyRecovery.subtitle\": \"Enter one of your recovery codes\",\n \"verifyRecovery.placeholder\": \"XXXX-XXXX-XXXX-XXXX\",\n \"verifyRecovery.submit\": \"Verify\",\n \"verifyRecovery.submitting\": \"Verifying...\",\n \"verifyRecovery.error.invalid\": \"Invalid recovery code. Please try again.\",\n \"verifyRecovery.error.noCodesAvailable\": \"No recovery codes available. All codes have been used.\",\n \"verifyRecovery.error.expired\": \"Session expired. Please log in again.\",\n \"verifyRecovery.backToTotp\": \"Use authenticator app instead\",\n \"verifyRecovery.backToLogin\": \"Back to login\",\n \"verifyRecovery.redirecting\": \"Redirecting to login in {{seconds}} seconds...\",\n \"verifyRecovery.redirectNow\": \"Go to login now\",\n \"setupTotp.title\": \"Set Up Two-Factor Authentication\",\n \"setupTotp.subtitle\": \"Add an extra layer of security to your account\",\n \"setupTotp.required\": \"Two-factor authentication is required to continue\",\n \"setupTotp.qrDescription\": \"Scan this QR code with your authenticator app (Google Authenticator, Authy, etc.)\",\n \"setupTotp.manualEntry\": \"Can't scan? Enter this code manually\",\n \"setupTotp.next\": \"Next\",\n \"setupTotp.back\": \"Back\",\n \"setupTotp.verify\": \"Verify\",\n \"setupTotp.verifying\": \"Verifying...\",\n \"setupTotp.verifyTitle\": \"Verify Authentication Code\",\n \"setupTotp.verifySubtitle\": \"Enter the 6-digit code from your authenticator app\",\n \"setupTotp.error.invalid\": \"Invalid code. Please try again.\",\n \"setupTotp.error.setupFailed\": \"Failed to start setup. Please try again.\",\n \"setupTotp.error.expired\": \"Session expired. Please log in again.\",\n \"setupTotp.error.alreadyEnabled\": \"Two-factor authentication is already enabled.\",\n \"setupTotp.redirecting\": \"Redirecting to login in {{seconds}} seconds...\",\n \"setupTotp.redirectNow\": \"Go to login now\",\n \"setupTotp.goToProfile\": \"Go to profile\",\n \"setupTotp.retry\": \"Retry\",\n \"setupTotp.backToLogin\": \"Back to login\",\n \"setupTotp.recoveryCodes.title\": \"Save Your Recovery Codes\",\n \"setupTotp.recoveryCodes.description\": \"If you lose access to your authenticator app, you can use these one-time recovery codes to sign in. Each code can only be used once.\",\n \"setupTotp.recoveryCodes.warning\": \"Store these codes in a safe place. You will not be able to see them again.\",\n \"setupTotp.recoveryCodes.copy\": \"Copy all codes\",\n \"setupTotp.recoveryCodes.copied\": \"Copied!\",\n \"setupTotp.recoveryCodes.confirmCheckbox\": \"I have saved these recovery codes in a safe place\",\n \"setupTotp.recoveryCodes.confirm\": \"Complete setup\",\n \"verifyPasskey.title\": \"Passkey Verification\",\n \"verifyPasskey.subtitle\": \"Use your passkey to complete sign in\",\n \"verifyPasskey.waiting\": \"Follow the prompts from your browser or device...\",\n \"verifyPasskey.retry\": \"Try again\",\n \"verifyPasskey.error.expired\": \"Session expired. Please log in again.\",\n \"verifyPasskey.error.userMismatch\": \"This passkey belongs to a different account.\",\n \"verifyPasskey.error.failed\": \"Passkey verification failed. Please try again.\",\n \"verifyPasskey.backToLogin\": \"Back to login\",\n \"verify2fa.title\": \"Two-Factor Authentication\",\n \"verify2fa.subtitle\": \"Choose a verification method\",\n \"verify2fa.totp.title\": \"Authenticator App\",\n \"verify2fa.totp.description\": \"Use a 6-digit code from your app\",\n \"verify2fa.passkey.title\": \"Passkey\",\n \"verify2fa.passkey.description\": \"Use fingerprint, face, or security key\",\n \"verify2fa.backToLogin\": \"Back to login\",\n \"setup2fa.title\": \"Set Up Two-Factor Authentication\",\n \"setup2fa.subtitle\": \"Choose your preferred 2FA method\",\n \"setup2fa.required\": \"Two-factor authentication is required to continue\",\n \"setup2fa.totp.title\": \"Authenticator App\",\n \"setup2fa.totp.description\": \"Use Google Authenticator, Authy, etc.\",\n \"setup2fa.passkey.title\": \"Passkey\",\n \"setup2fa.passkey.description\": \"Use fingerprint, face, or security key\",\n \"setup2fa.backToLogin\": \"Back to login\",\n \"setupPasskey.title\": \"Set Up Passkey\",\n \"setupPasskey.subtitle\": \"Register a passkey for secure authentication\",\n \"setupPasskey.required\": \"Two-factor authentication is required to continue\",\n \"setupPasskey.description\": \"A passkey lets you sign in securely using your fingerprint, face, or screen lock.\",\n \"setupPasskey.name.label\": \"Passkey Name (Optional)\",\n \"setupPasskey.name.placeholder\": \"e.g., MacBook Pro, iPhone\",\n \"setupPasskey.name.hint\": \"Give your passkey a name to identify it later\",\n \"setupPasskey.continue\": \"Continue\",\n \"setupPasskey.registering\": \"Registering...\",\n \"setupPasskey.waiting\": \"Follow the prompts from your browser or device...\",\n \"setupPasskey.retry\": \"Try again\",\n \"setupPasskey.error.failed\": \"Failed to register passkey. Please try again.\",\n \"setupPasskey.error.cancelled\": \"Passkey registration was cancelled.\",\n \"setupPasskey.backToLogin\": \"Back to login\",\n \"terms.title\": \"Terms of Service\",\n \"terms.required\": \"Required\",\n \"terms.optional\": \"Optional\",\n \"terms.agreeAll\": \"Agree to all\",\n \"terms.agreeAllOptionalIncluded\": \"(including optional)\",\n \"terms.versionUpdated\": \"Terms have been updated. Please agree to the new version.\",\n \"terms.submit\": \"Agree and Continue\",\n \"terms.error.title\": \"Error\",\n \"terms.error.message\": \"Unable to load terms information.\",\n \"terms.error.back\": \"Go back\",\n \"terms.error.submitFailed\": \"Failed to submit consent. Please try again.\",\n \"terms.view\": \"View\",\n \"admin.users.includeDeleted\": \"Include deleted\",\n \"admin.users.search\": \"Search\",\n \"admin.users.actions\": \"Actions\",\n \"admin.users.edit\": \"Edit\",\n \"admin.users.delete\": \"Delete\",\n \"admin.users.editUser\": \"Edit {{email}}\",\n \"admin.users.deleteUser\": \"Delete {{email}}\",\n \"admin.users.readonly\": \"Read-only\",\n \"admin.users.password\": \"Password\",\n \"admin.users.editTitle\": \"Edit user\",\n \"admin.users.createSubmit\": \"Create\",\n \"admin.users.save\": \"Save changes\",\n \"admin.users.cancel\": \"Cancel\",\n \"admin.users.deleteTitle\": \"Delete {{email}}?\",\n \"admin.users.deleteDescription\": \"This soft-deletes the database-managed user and prevents future logins.\",\n \"admin.users.deleteConfirm\": \"Delete user\",\n \"admin.users.previous\": \"Previous\",\n \"admin.users.next\": \"Next\",\n \"admin.users.page\": \"Page {{page}}\",\n \"admin.users.filter.all\": \"All\",\n \"admin.users.filter.database\": \"Database\",\n \"admin.users.filter.config\": \"Config\",\n \"admin.users.filter.admins\": \"Admins\",\n \"admin.users.clearFilters\": \"Clear filters\",\n \"admin.users.pageSize\": \"Rows\",\n \"admin.users.showingRange\": \"Showing {{from}}–{{to}} of {{total}}\",\n \"admin.users.emptyFiltered\": \"No users match the current filters.\",\n \"admin.users.createdNotice\": \"Created {{email}}.\",\n \"admin.users.updatedNotice\": \"Updated {{email}}.\",\n \"admin.users.deletedNotice\": \"Deleted {{email}}.\",\n \"admin.users.operationFailed\": \"Operation failed. Check the values and try again.\",\n \"admin.users.createHint\": \"Create a database-managed user. Config users stay read-only.\",\n \"admin.users.editHint\": \"Update account metadata for a database-managed user.\",\n \"admin.users.deleteWarning\": \"This is a destructive admin action.\",\n \"common.on\": \"On\",\n \"admin.nav.open\": \"Open admin navigation\",\n \"admin.nav.close\": \"Close admin navigation\",\n \"admin.breadcrumbLabel\": \"Admin breadcrumb\",\n \"admin.console\": \"Admin Console\",\n \"admin.livePolicy\": \"Live policy\",\n \"admin.roleBadge\": \"role: {{role}}\",\n \"admin.metrics.totalUsersHint\": \"Managed identities\",\n \"admin.metrics.adminsHint\": \"Privileged accounts\",\n \"admin.metrics.databaseUsersHint\": \"Mutable records\",\n \"admin.identityGraph\": \"Identity graph\",\n \"admin.policy.description\": \"Config sources are protected from accidental mutation.\",\n \"admin.users.verifiedLabel\": \"verified:\",\n \"admin.users.directoryEyebrow\": \"Directory\",\n \"admin.users.queryChip\": \"query: {{query}}\",\n \"admin.users.currentPage\": \"current page\",\n \"admin.disabled\": \"Admin console disabled\",\n \"admin.disabledDescription\": \"The admin console is disabled for this deployment.\",\n \"admin.users.secondFactorTotp\": \"TOTP\",\n \"admin.users.secondFactorPasskey\": \"{{count}} passkey\",\n \"admin.users.roleUser\": \"User\",\n \"admin.users.roleAdmin\": \"Admin\",\n \"admin.users.secondFactorPasskeys\": \"{{count}} passkeys\",\n \"common.close\": \"Close\",\n \"admin.mobileTitle\": \"TinyAuth Admin\",\n \"admin.users.sourceDatabase\": \"Database\",\n \"admin.users.sourceConfig\": \"Config\",\n \"admin.users.activeOnPage\": \"Active on this page\",\n \"admin.users.configOnPage\": \"Config on this page\",\n \"admin.users.databaseOnPage\": \"Database on this page\"\n}\n","{\n \"common.language.auto\": \"自動\",\n \"common.language.select\": \"言語を選択\",\n \"common.theme.auto\": \"自動\",\n \"common.theme.dark\": \"ダーク\",\n \"common.theme.light\": \"ライト\",\n \"common.theme.select\": \"テーマを選択\",\n \"common.yes\": \"はい\",\n \"common.no\": \"いいえ\",\n \"common.none\": \"なし\",\n \"login.email.placeholder\": \"hello@example.com\",\n \"login.error.failed\": \"ログインに失敗しました。メールアドレスとパスワードを確認してください。\",\n \"login.password.placeholder\": \"パスワードを入力\",\n \"login.submit\": \"ログイン\",\n \"login.submitting\": \"ログイン中...\",\n \"login.title\": \"Welcome back!\",\n \"login.link.register\": \"新規登録\",\n \"login.link.forgotPassword\": \"パスワードをお忘れですか?\",\n \"login.selectMethod.subtitle\": \"\",\n \"login.method.password\": \"メール\",\n \"login.method.passkey\": \"パスキー\",\n \"login.password.backToMethods\": \"他の方法でログイン\",\n \"login.footer.noAccount\": \"アカウントをお持ちでないですか?\",\n \"profile.email.label\": \"メールアドレス\",\n \"profile.id.label\": \"ユーザーID\",\n \"profile.logout\": \"ログアウト\",\n \"profile.title\": \"マイプロフィール\",\n \"profile.account.title\": \"アカウント情報\",\n \"profile.account.description\": \"基本アカウント情報\",\n \"profile.security.title\": \"セキュリティ\",\n \"profile.security.description\": \"セキュリティ設定を管理\",\n \"admin.eyebrow\": \"管理者\",\n \"admin.dashboardTitle\": \"管理者ダッシュボード\",\n \"admin.dashboardDescription\": \"TinyAuth のユーザーとクライアントを一元管理します。\",\n \"admin.readonlyNotice\": \"configで宣言されたユーザーとクライアントは読み取り専用です。\",\n \"admin.accessRequired\": \"管理者権限が必要です\",\n \"admin.accessRequiredDescription\": \"このアカウントには管理者コンソールへのアクセス権がありません。\",\n \"admin.nav.dashboard\": \"ダッシュボード\",\n \"admin.nav.users\": \"ユーザー\",\n \"admin.signedInAs\": \"ログイン中\",\n \"admin.commandPlaceholder\": \"ユーザー、クライアント、ポリシーを検索...\",\n \"admin.environment\": \"ライブ\",\n \"admin.metrics.totalUsers\": \"総ユーザー数\",\n \"admin.metrics.admins\": \"管理者\",\n \"admin.metrics.configUsers\": \"Configユーザー\",\n \"admin.metrics.databaseUsers\": \"DBユーザー\",\n \"admin.policy.title\": \"ポリシー\",\n \"admin.policy.heading\": \"ガードレール有効\",\n \"admin.policy.configReadonly\": \"Config読み取り専用\",\n \"admin.backToDashboard\": \"ダッシュボードへ戻る\",\n \"admin.users.title\": \"ユーザー\",\n \"admin.users.description\": \"データベース管理ユーザーを管理し、config管理ユーザーを確認します。\",\n \"admin.users.directory\": \"ユーザーディレクトリ\",\n \"admin.users.searchPlaceholder\": \"メールまたはIDでユーザー検索\",\n \"admin.users.create\": \"ユーザーを作成\",\n \"admin.users.role\": \"ロール\",\n \"admin.users.source\": \"ソース\",\n \"admin.users.emailVerified\": \"メール認証\",\n \"admin.users.secondFactor\": \"2FA\",\n \"admin.users.status\": \"ステータス\",\n \"admin.users.active\": \"有効\",\n \"admin.users.deleted\": \"削除済み\",\n \"admin.users.total\": \"{{count}} ユーザー\",\n \"admin.users.open\": \"ユーザーを開く\",\n \"register.email.placeholder\": \"hello@example.com\",\n \"register.error.emailExists\": \"メールアドレスはすでに存在します\",\n \"register.error.emailNotAllowed\": \"このメールアドレスでの登録は許可されていません。\",\n \"register.error.registrationDisabled\": \"現在、登録は無効になっています。\",\n \"register.link.login\": \"ログイン\",\n \"register.footer.haveAccount\": \"すでにアカウントをお持ちですか?\",\n \"register.password.placeholder\": \"パスワードを入力\",\n \"register.submit\": \"アカウント作成\",\n \"register.submitting\": \"アカウント作成中...\",\n \"register.subtitle\": \"新しいアカウントを作成して始めましょう\",\n \"register.title\": \"Create account\",\n \"validation.email.invalid\": \"正しいメールアドレスの形式ではありません\",\n \"validation.password.max\": \"パスワードは{{count}}文字以下である必要があります\",\n \"validation.password.min\": \"パスワードは{{count}}文字以上である必要があります\",\n \"validation.password.required\": \"パスワードを入力してください\",\n \"validation.token.required\": \"認証トークンを入力してください\",\n \"validation.confirmPassword.required\": \"パスワードの確認を入力してください\",\n \"validation.confirmPassword.mismatch\": \"パスワードが一致しません\",\n \"validation.confirmText.mismatch\": \"確認テキストが一致しません\",\n \"validation.terms.required\": \"必須規約に同意してください\",\n \"register.success.subtitle\": \"確認メールを送信しました\",\n \"register.success.description\": \"{{email}}に送信されたメールを確認してアカウントを認証してください。\",\n \"verifyEmail.title\": \"メール認証\",\n \"verifyEmail.subtitle\": \"以下に認証トークンを入力してください\",\n \"verifyEmail.token.placeholder\": \"メールで受け取ったトークンを入力\",\n \"verifyEmail.submit\": \"認証する\",\n \"verifyEmail.submitting\": \"認証中...\",\n \"verifyEmail.resend\": \"認証メールを再送信\",\n \"verifyEmail.resending\": \"再送信中...\",\n \"verifyEmail.success.title\": \"認証完了!\",\n \"verifyEmail.success.subtitle\": \"メールアドレスが正常に認証されました\",\n \"verifyEmail.success.description\": \"すべての機能をご利用いただけます。\",\n \"verifyEmail.success.goToProfile\": \"プロフィールへ\",\n \"verifyEmail.error.invalidToken\": \"無効または期限切れのトークンです\",\n \"verifyEmail.resendSuccess\": \"認証メールを再送信しました\",\n \"forgotPassword.title\": \"パスワードを忘れた\",\n \"forgotPassword.subtitle\": \"パスワードリセットリンクを受け取るメールアドレスを入力してください\",\n \"forgotPassword.email.placeholder\": \"hello@example.com\",\n \"forgotPassword.submit\": \"リセットリンクを送信\",\n \"forgotPassword.submitting\": \"送信中...\",\n \"forgotPassword.backToLogin\": \"ログインに戻る\",\n \"forgotPassword.footer.rememberedPassword\": \"パスワードを思い出しましたか?\",\n \"forgotPassword.success.title\": \"メール送信完了!\",\n \"forgotPassword.success.subtitle\": \"受信トレイをご確認ください\",\n \"forgotPassword.success.description\": \"{{email}}のアカウントが存在する場合、パスワードリセットリンクが送信されます。\",\n \"forgotPassword.success.checkSpam\": \"メールが届いていない場合は、迷惑メールフォルダをご確認ください。\",\n \"forgotPassword.error.notEditable\": \"このアカウントは変更できません\",\n \"resetPassword.title\": \"パスワードリセット\",\n \"resetPassword.subtitle\": \"新しいパスワードを入力してください\",\n \"resetPassword.token.placeholder\": \"メールで受け取ったトークンを入力\",\n \"resetPassword.password.placeholder\": \"新しいパスワードを入力\",\n \"resetPassword.confirmPassword.placeholder\": \"新しいパスワードを再入力\",\n \"resetPassword.submit\": \"パスワードをリセット\",\n \"resetPassword.submitting\": \"リセット中...\",\n \"resetPassword.backToLogin\": \"ログインに戻る\",\n \"resetPassword.success.title\": \"パスワードリセット完了!\",\n \"resetPassword.success.subtitle\": \"パスワードが正常に変更されました\",\n \"resetPassword.success.description\": \"新しいパスワードでログインできます。\",\n \"resetPassword.success.goToLogin\": \"ログインへ\",\n \"resetPassword.error.invalidToken\": \"無効または期限切れのトークンです\",\n \"resetPassword.error.notEditable\": \"このアカウントは変更できません\",\n \"consent.title\": \"認可リクエスト\",\n \"consent.subtitle\": \"{{app}}があなたのアカウントへのアクセスを要求しています\",\n \"consent.loggedInAs\": \"ログイン中のアカウント\",\n \"consent.permissions.title\": \"このアプリケーションは以下を行うことができます:\",\n \"consent.allow\": \"許可\",\n \"consent.deny\": \"拒否\",\n \"consent.error.title\": \"エラー\",\n \"consent.error.message\": \"認可情報を読み込めませんでした。クライアントが無効である可能性があります。\",\n \"consent.error.back\": \"戻る\",\n \"consent.scope.openid\": \"ユーザー識別子へのアクセス\",\n \"consent.scope.profile\": \"プロフィール情報へのアクセス\",\n \"consent.scope.email\": \"メールアドレスへのアクセス\",\n \"consent.scope.address\": \"住所情報へのアクセス\",\n \"consent.scope.phone\": \"電話番号へのアクセス\",\n \"consent.scope.offline_access\": \"オフラインアクセスの維持\",\n \"oauth.error.failed\": \"OAuthログインに失敗しました。もう一度お試しください。\",\n \"oauth.error.accessDenied\": \"認証リクエストが拒否されました。\",\n \"oauth.error.temporarilyUnavailable\": \"サービスが一時的に利用できません。しばらくしてから再度お試しください。\",\n \"oauth.error.serverError\": \"認証サーバーでエラーが発生しました。しばらくしてから再度お試しください。\",\n \"oauth.error.registrationEmailNotAllowed\": \"このメールアドレスでの登録は許可されていません。\",\n \"profile.linkedAccounts.title\": \"連携アカウント\",\n \"profile.linkedAccounts.description\": \"外部サービスとアカウントを連携\",\n \"profile.linkedAccounts.link\": \"連携\",\n \"profile.linkedAccounts.unlink\": \"連携解除\",\n \"profile.linkedAccounts.unlinking\": \"連携解除中...\",\n \"profile.linkedAccounts.unlinkError\": \"連携を解除できません。少なくとも1つのログイン方法が必要です。\",\n \"profile.linkedAccounts.unlinkModal.title\": \"アカウント連携解除\",\n \"profile.linkedAccounts.unlinkModal.description\": \"{{provider}}のアカウント連携を解除します。\",\n \"profile.linkedAccounts.unlinkModal.warning\": \"{{provider}}でログインできなくなります。他のログイン方法があることを確認してください。\",\n \"profile.linkedAccounts.unlinkModal.cancel\": \"キャンセル\",\n \"profile.linkedAccounts.connected\": \"連携済み\",\n \"profile.linkedAccounts.notConnected\": \"未連携\",\n \"error.title\": \"エラー\",\n \"error.subtitle\": \"問題が発生しました\",\n \"error.defaultMessage\": \"予期しないエラーが発生しました。後でもう一度お試しください。\",\n \"error.codeLabel\": \"エラーコード\",\n \"error.goToLogin\": \"ログインへ\",\n \"error.goBack\": \"戻る\",\n \"error.footer.needHelp\": \"ヘルプが必要ですか?\",\n \"error.footer.contactSupport\": \"サポートに連絡\",\n \"error.sessionExpired\": \"セッションが期限切れです。再度ログインしてください。\",\n \"error.retry\": \"再試行\",\n \"profile.password.title\": \"パスワード\",\n \"profile.password.status.set\": \"パスワードが設定されています\",\n \"profile.password.status.notSet\": \"パスワードが設定されていません\",\n \"profile.password.set\": \"パスワードを設定\",\n \"profile.password.change\": \"パスワードを変更\",\n \"profile.password.remove\": \"パスワードを削除\",\n \"profile.password.setModal.title\": \"パスワードを設定\",\n \"profile.password.setModal.description\": \"メールアドレスとパスワードでログインできるようにパスワードを設定します。\",\n \"profile.password.setModal.newPassword\": \"新しいパスワード\",\n \"profile.password.setModal.newPasswordPlaceholder\": \"新しいパスワードを入力\",\n \"profile.password.setModal.confirmPassword\": \"パスワード確認\",\n \"profile.password.setModal.confirmPasswordPlaceholder\": \"新しいパスワードを再入力\",\n \"profile.password.setModal.submit\": \"パスワードを設定\",\n \"profile.password.setModal.submitting\": \"設定中...\",\n \"profile.password.setModal.cancel\": \"キャンセル\",\n \"profile.password.setModal.error\": \"パスワードの設定に失敗しました\",\n \"profile.password.changeModal.title\": \"パスワードを変更\",\n \"profile.password.changeModal.description\": \"現在のパスワードを確認して、新しいパスワードを設定します。\",\n \"profile.password.changeModal.currentPassword\": \"現在のパスワード\",\n \"profile.password.changeModal.currentPasswordPlaceholder\": \"現在のパスワードを入力\",\n \"profile.password.changeModal.newPassword\": \"新しいパスワード\",\n \"profile.password.changeModal.newPasswordPlaceholder\": \"新しいパスワードを入力\",\n \"profile.password.changeModal.confirmPassword\": \"パスワード確認\",\n \"profile.password.changeModal.confirmPasswordPlaceholder\": \"新しいパスワードを再入力\",\n \"profile.password.changeModal.submit\": \"パスワードを変更\",\n \"profile.password.changeModal.submitting\": \"変更中...\",\n \"profile.password.changeModal.cancel\": \"キャンセル\",\n \"profile.password.changeModal.error\": \"パスワードの変更に失敗しました\",\n \"profile.password.changeModal.invalidCurrent\": \"現在のパスワードが正しくありません\",\n \"profile.password.removeModal.title\": \"パスワードを削除\",\n \"profile.password.removeModal.description\": \"パスワードを削除すると、メールアドレスとパスワードでログインできなくなります。連携されたOAuthアカウントでのみログインできます。\",\n \"profile.password.removeModal.currentPassword\": \"現在のパスワード\",\n \"profile.password.removeModal.currentPasswordPlaceholder\": \"現在のパスワードを入力\",\n \"profile.password.removeModal.submit\": \"パスワードを削除\",\n \"profile.password.removeModal.submitting\": \"削除中...\",\n \"profile.password.removeModal.cancel\": \"キャンセル\",\n \"profile.password.removeModal.error\": \"パスワードの削除に失敗しました\",\n \"profile.password.removeModal.invalidCurrent\": \"現在のパスワードが正しくありません\",\n \"profile.password.removeModal.noOAuth\": \"少なくとも1つのOAuthアカウントが連携されている必要があります\",\n \"profile.password.removeModal.noOAuthWith2FA\": \"2FAが設定されている場合、パスワードを削除できません。まずOAuthアカウントを連携するか、2FAを無効にしてからパスワードを削除してください。\",\n \"profile.password.removeDisabledReason\": \"2FAが設定されている場合、パスワードを削除できません。まずOAuthアカウントを連携してください。\",\n \"profile.password.configManaged\": \"このアカウントは設定ファイルで管理されているため、パスワードを変更できません\",\n \"profile.totp.title\": \"二要素認証\",\n \"profile.totp.status.enabled\": \"二要素認証が有効です\",\n \"profile.totp.status.recoveryCodesMissing\": \"リカバリーコードを再生成する必要があります\",\n \"profile.totp.status.disabled\": \"二要素認証が有効ではありません\",\n \"profile.totp.enable\": \"有効化\",\n \"profile.totp.disable\": \"無効化\",\n \"profile.totp.regenerate\": \"コードを再生成\",\n \"profile.totp.recoveryCodesMissing\": \"既存のリカバリーコードは無効です。今すぐ新しいコードを生成して安全な場所に保管してください。\",\n \"profile.totp.setupModal.title\": \"二要素認証の設定\",\n \"profile.totp.setupModal.requiredDescription\": \"続行するには、二要素認証(TOTP)またはパスキーを設定する必要があります。\",\n \"profile.totp.setupModal.setupError\": \"設定を開始できませんでした。もう一度お試しください。\",\n \"profile.totp.setupModal.retry\": \"再試行\",\n \"profile.totp.setupModal.cancel\": \"キャンセル\",\n \"profile.totp.setupModal.switchToPasskey\": \"代わりにパスキーを使用\",\n \"profile.totp.disableModal.title\": \"二要素認証を無効化\",\n \"profile.totp.disableModal.description\": \"二要素認証を無効にするには、現在の認証コードを入力してください。\",\n \"profile.totp.disableModal.warning\": \"二要素認証を無効にすると、アカウントのセキュリティが低下します。\",\n \"profile.totp.disableModal.codeLabel\": \"認証コード\",\n \"profile.totp.disableModal.cancel\": \"キャンセル\",\n \"profile.totp.disableModal.disable\": \"無効化\",\n \"profile.totp.disableModal.disabling\": \"無効化中...\",\n \"profile.totp.disableModal.error\": \"無効なコードです。もう一度お試しください。\",\n \"profile.totp.disableModal.cannotRemoveLastSecondFactor\": \"TOTPを無効にできません。少なくとも1つの二要素認証方法(TOTPまたはパスキー)が必要です。\",\n \"profile.totp.regenerateModal.title\": \"リカバリーコードを再生成\",\n \"profile.totp.regenerateModal.description\": \"既存のリカバリーコードをすべて置き換えるには、現在の認証コードを入力してください。\",\n \"profile.totp.regenerateModal.submit\": \"リカバリーコードを生成\",\n \"profile.totp.regenerateModal.submitting\": \"生成中...\",\n \"profile.totp.regenerateModal.error\": \"無効なコードです。もう一度お試しください。\",\n \"profile.totp.regenerateModal.unexpectedError\": \"現在はリカバリーコードを再生成できません。もう一度お試しください。\",\n \"profile.totp.regenerateModal.recoveryTitle\": \"新しいリカバリーコード\",\n \"profile.totp.regenerateModal.recoveryDescription\": \"これらのコードは一度だけ表示されます。このダイアログを閉じる前に安全な場所へ保管してください。\",\n \"validation.totp.length\": \"コードは6桁である必要があります\",\n \"validation.totp.digits\": \"コードは数字のみを含む必要があります\",\n \"validation.passkey.name.max\": \"パスキー名は100文字以下である必要があります\",\n \"validation.passkey.name.required\": \"パスキー名を入力してください\",\n \"profile.passkey.title\": \"パスキー\",\n \"profile.passkey.status.enabled\": \"{{count}}個のパスキーが登録されています\",\n \"profile.passkey.status.disabled\": \"パスキーが登録されていません\",\n \"profile.passkey.add\": \"パスキーを追加\",\n \"profile.passkey.manage\": \"管理\",\n \"profile.passkey.setupModal.title\": \"パスキーを追加\",\n \"profile.passkey.setupModal.requiredDescription\": \"続行するには、パスキーまたは二要素認証(TOTP)を設定する必要があります。\",\n \"profile.passkey.setupModal.description\": \"パスキーを使用すると、指紋、顔認証、または画面ロックで安全にログインできます。\",\n \"profile.passkey.setupModal.nameLabel\": \"パスキー名(任意)\",\n \"profile.passkey.setupModal.namePlaceholder\": \"例:MacBook Pro、iPhone\",\n \"profile.passkey.setupModal.nameHint\": \"後で識別できるようにパスキーに名前を付けてください\",\n \"profile.passkey.setupModal.continue\": \"続ける\",\n \"profile.passkey.setupModal.cancel\": \"キャンセル\",\n \"profile.passkey.setupModal.switchToTotp\": \"代わりにTOTPを使用\",\n \"profile.passkey.setupModal.waitingForDevice\": \"ブラウザまたはデバイスの指示に従ってください...\",\n \"profile.passkey.setupModal.error\": \"パスキーの登録に失敗しました。もう一度お試しください。\",\n \"profile.passkey.setupModal.cancelled\": \"パスキーの登録がキャンセルされました。\",\n \"profile.passkey.manageModal.title\": \"パスキーを管理\",\n \"profile.passkey.manageModal.noPasskeys\": \"登録されたパスキーがありません。\",\n \"profile.passkey.manageModal.close\": \"閉じる\",\n \"profile.passkey.manageModal.addNew\": \"新しいパスキーを追加\",\n \"profile.passkey.manageModal.unnamedPasskey\": \"名前のないパスキー\",\n \"profile.passkey.manageModal.createdAt\": \"{{date}}に追加\",\n \"profile.passkey.manageModal.backedUp\": \"同期済み\",\n \"profile.passkey.manageModal.rename\": \"名前を変更\",\n \"profile.passkey.manageModal.delete\": \"削除\",\n \"profile.passkey.manageModal.deleteConfirmInline\": \"このパスキーを削除しますか?\",\n \"profile.passkey.manageModal.deleteError\": \"パスキーを削除できません。少なくとも1つのログイン方法が必要です。\",\n \"profile.passkey.manageModal.cannotRemoveLastSecondFactor\": \"パスキーを削除できません。少なくとも1つの二要素認証方法(TOTPまたはパスキー)が必要です。\",\n \"profile.passkey.manageModal.namePlaceholder\": \"パスキー名を入力\",\n \"profile.passkey.manageModal.cancelEdit\": \"キャンセル\",\n \"profile.passkey.manageModal.save\": \"保存\",\n \"profile.passkey.manageModal.saving\": \"保存中...\",\n \"profile.passkey.manageModal.renameError\": \"パスキー名の変更に失敗しました。もう一度お試しください。\",\n \"profile.dangerZone.title\": \"危険ゾーン\",\n \"profile.dangerZone.description\": \"アカウント削除などの取り消しできない操作\",\n \"profile.deleteAccount.title\": \"アカウント削除\",\n \"profile.deleteAccount.description\": \"アカウントを完全に削除します\",\n \"profile.deleteAccount.button\": \"アカウントを削除\",\n \"profile.deleteAccount.modal.title\": \"本当にアカウントを削除しますか?\",\n \"profile.deleteAccount.modal.description\": \"この操作は取り消せません。すべてのデータは{{days}}日後に完全に削除されます。\",\n \"profile.deleteAccount.modal.warning\": \"削除後、このメールアドレスで再登録することはできません。\",\n \"profile.deleteAccount.modal.confirmLabel\": \"確認のため「削除」と入力してください\",\n \"profile.deleteAccount.modal.confirmPlaceholder\": \"削除\",\n \"profile.deleteAccount.modal.confirm\": \"アカウントを削除\",\n \"profile.deleteAccount.modal.confirming\": \"削除中...\",\n \"profile.deleteAccount.modal.cancel\": \"キャンセル\",\n \"profile.deleteAccount.configManaged\": \"このアカウントは設定ファイルで管理されているため削除できません\",\n \"profile.deleteAccount.error\": \"アカウントの削除に失敗しました\",\n \"verifyTotp.title\": \"二要素認証\",\n \"verifyTotp.subtitle\": \"認証アプリのコードを入力してください\",\n \"verifyTotp.submit\": \"確認\",\n \"verifyTotp.submitting\": \"確認中...\",\n \"verifyTotp.error.invalid\": \"無効なコードです。もう一度お試しください。\",\n \"verifyTotp.error.expired\": \"セッションが期限切れです。再度ログインしてください。\",\n \"verifyTotp.redirecting\": \"{{seconds}}秒後にログインページに移動します...\",\n \"verifyTotp.redirectNow\": \"今すぐログインページに移動\",\n \"verifyTotp.backToLogin\": \"ログインに戻る\",\n \"verifyTotp.useRecoveryCode\": \"リカバリーコードを使用\",\n \"verifyRecovery.title\": \"リカバリーコード\",\n \"verifyRecovery.subtitle\": \"リカバリーコードの1つを入力してください\",\n \"verifyRecovery.placeholder\": \"XXXX-XXXX-XXXX-XXXX\",\n \"verifyRecovery.submit\": \"確認\",\n \"verifyRecovery.submitting\": \"確認中...\",\n \"verifyRecovery.error.invalid\": \"無効なリカバリーコードです。もう一度お試しください。\",\n \"verifyRecovery.error.noCodesAvailable\": \"利用可能なリカバリーコードがありません。すべてのコードが使用済みです。\",\n \"verifyRecovery.error.expired\": \"セッションが期限切れです。再度ログインしてください。\",\n \"verifyRecovery.backToTotp\": \"認証アプリで認証する\",\n \"verifyRecovery.backToLogin\": \"ログインに戻る\",\n \"verifyRecovery.redirecting\": \"{{seconds}}秒後にログインページに移動します...\",\n \"verifyRecovery.redirectNow\": \"今すぐログインページに移動\",\n \"setupTotp.title\": \"二要素認証の設定\",\n \"setupTotp.subtitle\": \"アカウントにセキュリティ層を追加\",\n \"setupTotp.required\": \"続行するには二要素認証が必要です\",\n \"setupTotp.qrDescription\": \"認証アプリ(Google Authenticator、Authyなど)でQRコードをスキャンしてください\",\n \"setupTotp.manualEntry\": \"スキャンできない場合は手動でコードを入力\",\n \"setupTotp.next\": \"次へ\",\n \"setupTotp.back\": \"戻る\",\n \"setupTotp.verify\": \"確認\",\n \"setupTotp.verifying\": \"確認中...\",\n \"setupTotp.verifyTitle\": \"認証コードの確認\",\n \"setupTotp.verifySubtitle\": \"認証アプリの6桁のコードを入力してください\",\n \"setupTotp.error.invalid\": \"無効なコードです。もう一度お試しください。\",\n \"setupTotp.error.setupFailed\": \"設定を開始できませんでした。もう一度お試しください。\",\n \"setupTotp.error.expired\": \"セッションが期限切れです。再度ログインしてください。\",\n \"setupTotp.error.alreadyEnabled\": \"二要素認証はすでに有効になっています。\",\n \"setupTotp.redirecting\": \"{{seconds}}秒後にログインページに移動します...\",\n \"setupTotp.redirectNow\": \"今すぐログインページに移動\",\n \"setupTotp.goToProfile\": \"プロフィールに移動\",\n \"setupTotp.retry\": \"再試行\",\n \"setupTotp.backToLogin\": \"ログインに戻る\",\n \"setupTotp.recoveryCodes.title\": \"リカバリーコードを保存してください\",\n \"setupTotp.recoveryCodes.description\": \"認証アプリにアクセスできなくなった場合、このワンタイムリカバリーコードを使用してログインできます。各コードは一度のみ使用できます。\",\n \"setupTotp.recoveryCodes.warning\": \"これらのコードを安全な場所に保管してください。再度表示することはできません。\",\n \"setupTotp.recoveryCodes.copy\": \"すべてのコードをコピー\",\n \"setupTotp.recoveryCodes.copied\": \"コピーしました!\",\n \"setupTotp.recoveryCodes.confirmCheckbox\": \"リカバリーコードを安全な場所に保存しました\",\n \"setupTotp.recoveryCodes.confirm\": \"設定完了\",\n \"verifyPasskey.title\": \"パスキー認証\",\n \"verifyPasskey.subtitle\": \"パスキーを使用してログインを完了してください\",\n \"verifyPasskey.waiting\": \"ブラウザまたはデバイスの指示に従ってください...\",\n \"verifyPasskey.retry\": \"再試行\",\n \"verifyPasskey.error.expired\": \"セッションが期限切れです。再度ログインしてください。\",\n \"verifyPasskey.error.userMismatch\": \"このパスキーは別のアカウントに登録されています。\",\n \"verifyPasskey.error.failed\": \"パスキー認証に失敗しました。もう一度お試しください。\",\n \"verifyPasskey.backToLogin\": \"ログインに戻る\",\n \"verify2fa.title\": \"二要素認証\",\n \"verify2fa.subtitle\": \"認証方法を選択してください\",\n \"verify2fa.totp.title\": \"認証アプリ\",\n \"verify2fa.totp.description\": \"アプリの6桁のコードを使用\",\n \"verify2fa.passkey.title\": \"パスキー\",\n \"verify2fa.passkey.description\": \"指紋、顔認証、またはセキュリティキーを使用\",\n \"verify2fa.backToLogin\": \"ログインに戻る\",\n \"setup2fa.title\": \"二要素認証の設定\",\n \"setup2fa.subtitle\": \"ご希望の二要素認証方法を選択してください\",\n \"setup2fa.required\": \"続行するには二要素認証が必要です\",\n \"setup2fa.totp.title\": \"認証アプリ\",\n \"setup2fa.totp.description\": \"Google Authenticator、Authyなどを使用\",\n \"setup2fa.passkey.title\": \"パスキー\",\n \"setup2fa.passkey.description\": \"指紋、顔認証、またはセキュリティキーを使用\",\n \"setup2fa.backToLogin\": \"ログインに戻る\",\n \"setupPasskey.title\": \"パスキーの設定\",\n \"setupPasskey.subtitle\": \"安全な認証のためにパスキーを登録\",\n \"setupPasskey.required\": \"続行するには二要素認証が必要です\",\n \"setupPasskey.description\": \"パスキーを使用すると、指紋、顔認証、または画面ロックで安全にログインできます。\",\n \"setupPasskey.name.label\": \"パスキー名(任意)\",\n \"setupPasskey.name.placeholder\": \"例:MacBook Pro、iPhone\",\n \"setupPasskey.name.hint\": \"後で識別できるようにパスキーに名前を付けてください\",\n \"setupPasskey.continue\": \"続ける\",\n \"setupPasskey.registering\": \"登録中...\",\n \"setupPasskey.waiting\": \"ブラウザまたはデバイスの指示に従ってください...\",\n \"setupPasskey.retry\": \"再試行\",\n \"setupPasskey.error.failed\": \"パスキーの登録に失敗しました。もう一度お試しください。\",\n \"setupPasskey.error.cancelled\": \"パスキーの登録がキャンセルされました。\",\n \"setupPasskey.backToLogin\": \"ログインに戻る\",\n \"terms.title\": \"利用規約\",\n \"terms.required\": \"必須\",\n \"terms.optional\": \"任意\",\n \"terms.agreeAll\": \"すべてに同意\",\n \"terms.agreeAllOptionalIncluded\": \"(任意規約を含む)\",\n \"terms.versionUpdated\": \"規約が更新されました。新しいバージョンに同意してください。\",\n \"terms.submit\": \"同意して続ける\",\n \"terms.error.title\": \"エラー\",\n \"terms.error.message\": \"規約情報を読み込めませんでした。\",\n \"terms.error.back\": \"戻る\",\n \"terms.error.submitFailed\": \"同意の送信に失敗しました。もう一度お試しください。\",\n \"terms.view\": \"表示\",\n \"admin.users.includeDeleted\": \"削除済みを含める\",\n \"admin.users.search\": \"検索\",\n \"admin.users.actions\": \"操作\",\n \"admin.users.edit\": \"編集\",\n \"admin.users.delete\": \"削除\",\n \"admin.users.editUser\": \"{{email}} を編集\",\n \"admin.users.deleteUser\": \"{{email}} を削除\",\n \"admin.users.readonly\": \"読み取り専用\",\n \"admin.users.password\": \"パスワード\",\n \"admin.users.editTitle\": \"ユーザー編集\",\n \"admin.users.createSubmit\": \"作成\",\n \"admin.users.save\": \"変更を保存\",\n \"admin.users.cancel\": \"キャンセル\",\n \"admin.users.deleteTitle\": \"{{email}} を削除しますか?\",\n \"admin.users.deleteDescription\": \"データベース管理ユーザーをsoft-deleteし、以後のログインをブロックします。\",\n \"admin.users.deleteConfirm\": \"ユーザーを削除\",\n \"admin.users.previous\": \"前へ\",\n \"admin.users.next\": \"次へ\",\n \"admin.users.page\": \"{{page}}ページ\",\n \"admin.users.filter.all\": \"すべて\",\n \"admin.users.filter.database\": \"DB\",\n \"admin.users.filter.config\": \"Config\",\n \"admin.users.filter.admins\": \"管理者\",\n \"admin.users.clearFilters\": \"フィルターをクリア\",\n \"admin.users.pageSize\": \"行数\",\n \"admin.users.showingRange\": \"{{total}}件中 {{from}}–{{to}} を表示\",\n \"admin.users.emptyFiltered\": \"現在のフィルターに一致するユーザーはありません。\",\n \"admin.users.createdNotice\": \"{{email}} を作成しました。\",\n \"admin.users.updatedNotice\": \"{{email}} を更新しました。\",\n \"admin.users.deletedNotice\": \"{{email}} を削除しました。\",\n \"admin.users.operationFailed\": \"操作に失敗しました。値を確認して再試行してください。\",\n \"admin.users.createHint\": \"データベース管理ユーザーを作成します。Configユーザーは読み取り専用のままです。\",\n \"admin.users.editHint\": \"データベース管理ユーザーのアカウントメタデータを更新します。\",\n \"admin.users.deleteWarning\": \"これは破壊的な管理者操作です。\",\n \"common.on\": \"オン\",\n \"admin.nav.open\": \"管理ナビゲーションを開く\",\n \"admin.nav.close\": \"管理ナビゲーションを閉じる\",\n \"admin.breadcrumbLabel\": \"管理パンくず\",\n \"admin.console\": \"管理コンソール\",\n \"admin.livePolicy\": \"ライブポリシー\",\n \"admin.roleBadge\": \"role: {{role}}\",\n \"admin.metrics.totalUsersHint\": \"管理対象 ID\",\n \"admin.metrics.adminsHint\": \"特権アカウント\",\n \"admin.metrics.databaseUsersHint\": \"変更可能なレコード\",\n \"admin.identityGraph\": \"ID グラフ\",\n \"admin.policy.description\": \"config ソースは誤変更から保護されています。\",\n \"admin.users.verifiedLabel\": \"検証済み:\",\n \"admin.users.directoryEyebrow\": \"ディレクトリ\",\n \"admin.users.queryChip\": \"query: {{query}}\",\n \"admin.users.currentPage\": \"現在のページ\",\n \"admin.disabled\": \"管理コンソールが無効です\",\n \"admin.disabledDescription\": \"このデプロイでは管理コンソールが無効になっています。\",\n \"admin.users.secondFactorTotp\": \"TOTP\",\n \"admin.users.secondFactorPasskey\": \"パスキー {{count}} 件\",\n \"admin.users.roleUser\": \"ユーザー\",\n \"admin.users.roleAdmin\": \"管理者\",\n \"admin.users.secondFactorPasskeys\": \"パスキー {{count}} 件\",\n \"common.close\": \"閉じる\",\n \"admin.mobileTitle\": \"TinyAuth 管理\",\n \"admin.users.sourceDatabase\": \"データベース\",\n \"admin.users.sourceConfig\": \"設定\",\n \"admin.users.activeOnPage\": \"現在のページの有効\",\n \"admin.users.configOnPage\": \"現在のページの設定ユーザー\",\n \"admin.users.databaseOnPage\": \"現在のページのDBユーザー\"\n}\n","{\n \"common.language.auto\": \"자동\",\n \"common.language.select\": \"언어 선택\",\n \"common.theme.auto\": \"자동\",\n \"common.theme.dark\": \"다크\",\n \"common.theme.light\": \"라이트\",\n \"common.theme.select\": \"테마 선택\",\n \"common.yes\": \"예\",\n \"common.no\": \"아니오\",\n \"common.none\": \"없음\",\n \"login.email.placeholder\": \"hello@example.com\",\n \"login.error.failed\": \"로그인에 실패했습니다. 이메일과 비밀번호를 확인해주세요.\",\n \"login.password.placeholder\": \"비밀번호를 입력하세요\",\n \"login.submit\": \"로그인\",\n \"login.submitting\": \"로그인 중...\",\n \"login.title\": \"Welcome back!\",\n \"login.link.register\": \"회원가입\",\n \"login.link.forgotPassword\": \"비밀번호를 잊으셨나요?\",\n \"login.selectMethod.subtitle\": \"\",\n \"login.method.password\": \"이메일\",\n \"login.method.passkey\": \"패스키\",\n \"login.password.backToMethods\": \"다른 방식으로 로그인\",\n \"login.footer.noAccount\": \"계정이 없으신가요?\",\n \"profile.email.label\": \"이메일\",\n \"profile.id.label\": \"사용자 ID\",\n \"profile.logout\": \"로그아웃\",\n \"profile.title\": \"내 정보\",\n \"profile.account.title\": \"계정 정보\",\n \"profile.account.description\": \"기본 계정 정보입니다\",\n \"profile.security.title\": \"보안\",\n \"profile.security.description\": \"보안 설정을 관리하세요\",\n \"admin.eyebrow\": \"관리자\",\n \"admin.dashboardTitle\": \"관리자 대시보드\",\n \"admin.dashboardDescription\": \"TinyAuth 사용자와 클라이언트를 한 곳에서 관리합니다.\",\n \"admin.readonlyNotice\": \"config에 선언된 사용자와 클라이언트는 읽기 전용입니다.\",\n \"admin.accessRequired\": \"관리자 권한 필요\",\n \"admin.accessRequiredDescription\": \"이 계정에는 관리자 콘솔 접근 권한이 없습니다.\",\n \"admin.nav.dashboard\": \"대시보드\",\n \"admin.nav.users\": \"사용자\",\n \"admin.signedInAs\": \"로그인 계정\",\n \"admin.commandPlaceholder\": \"사용자, 클라이언트, 정책 검색...\",\n \"admin.environment\": \"라이브\",\n \"admin.metrics.totalUsers\": \"전체 사용자\",\n \"admin.metrics.admins\": \"관리자\",\n \"admin.metrics.configUsers\": \"Config 사용자\",\n \"admin.metrics.databaseUsers\": \"DB 사용자\",\n \"admin.policy.title\": \"정책\",\n \"admin.policy.heading\": \"보호 정책 활성화됨\",\n \"admin.policy.configReadonly\": \"Config 읽기 전용\",\n \"admin.backToDashboard\": \"대시보드로 돌아가기\",\n \"admin.users.title\": \"사용자\",\n \"admin.users.description\": \"DB 관리 사용자를 관리하고 config 관리 사용자를 확인합니다.\",\n \"admin.users.directory\": \"사용자 디렉터리\",\n \"admin.users.searchPlaceholder\": \"이메일 또는 ID로 사용자 검색\",\n \"admin.users.create\": \"사용자 생성\",\n \"admin.users.role\": \"역할\",\n \"admin.users.source\": \"소스\",\n \"admin.users.emailVerified\": \"이메일 인증\",\n \"admin.users.secondFactor\": \"2FA\",\n \"admin.users.status\": \"상태\",\n \"admin.users.active\": \"활성\",\n \"admin.users.deleted\": \"삭제됨\",\n \"admin.users.total\": \"사용자 {{count}}명\",\n \"admin.users.open\": \"사용자 열기\",\n \"register.email.placeholder\": \"hello@example.com\",\n \"register.error.emailExists\": \"이미 존재하는 이메일입니다\",\n \"register.error.emailNotAllowed\": \"이 이메일 주소로는 회원가입이 허용되지 않습니다.\",\n \"register.error.registrationDisabled\": \"현재 회원가입이 비활성화되어 있습니다.\",\n \"register.link.login\": \"로그인\",\n \"register.footer.haveAccount\": \"이미 계정이 있으신가요?\",\n \"register.password.placeholder\": \"비밀번호를 입력하세요\",\n \"register.submit\": \"회원가입\",\n \"register.submitting\": \"회원가입 중...\",\n \"register.subtitle\": \"새 계정을 만들어 시작하세요\",\n \"register.title\": \"Create account\",\n \"validation.email.invalid\": \"올바른 이메일 형식이 아닙니다\",\n \"validation.password.max\": \"비밀번호는 최대 {{count}}자까지 가능합니다\",\n \"validation.password.min\": \"비밀번호는 최소 {{count}}자 이상이어야 합니다\",\n \"validation.password.required\": \"비밀번호를 입력해주세요\",\n \"validation.token.required\": \"인증 토큰을 입력해주세요\",\n \"validation.confirmPassword.required\": \"비밀번호 확인을 입력해주세요\",\n \"validation.confirmPassword.mismatch\": \"비밀번호가 일치하지 않습니다\",\n \"validation.confirmText.mismatch\": \"입력한 텍스트가 일치하지 않습니다\",\n \"validation.terms.required\": \"필수 약관에 동의해주세요\",\n \"register.success.subtitle\": \"이메일 인증 링크를 보냈습니다\",\n \"register.success.description\": \"{{email}}로 전송된 이메일을 확인하여 계정을 인증해주세요.\",\n \"verifyEmail.title\": \"이메일 인증\",\n \"verifyEmail.subtitle\": \"아래에 인증 토큰을 입력하세요\",\n \"verifyEmail.token.placeholder\": \"이메일로 받은 토큰을 입력하세요\",\n \"verifyEmail.submit\": \"인증하기\",\n \"verifyEmail.submitting\": \"인증 중...\",\n \"verifyEmail.resend\": \"인증 이메일 재전송\",\n \"verifyEmail.resending\": \"재전송 중...\",\n \"verifyEmail.success.title\": \"인증 완료!\",\n \"verifyEmail.success.subtitle\": \"이메일이 성공적으로 인증되었습니다\",\n \"verifyEmail.success.description\": \"이제 모든 기능을 사용할 수 있습니다.\",\n \"verifyEmail.success.goToProfile\": \"프로필로 이동\",\n \"verifyEmail.error.invalidToken\": \"유효하지 않거나 만료된 토큰입니다\",\n \"verifyEmail.resendSuccess\": \"인증 이메일이 재전송되었습니다\",\n \"forgotPassword.title\": \"비밀번호 찾기\",\n \"forgotPassword.subtitle\": \"비밀번호 재설정 링크를 받을 이메일을 입력하세요\",\n \"forgotPassword.email.placeholder\": \"hello@example.com\",\n \"forgotPassword.submit\": \"재설정 링크 보내기\",\n \"forgotPassword.submitting\": \"전송 중...\",\n \"forgotPassword.backToLogin\": \"로그인으로 돌아가기\",\n \"forgotPassword.footer.rememberedPassword\": \"비밀번호가 기억나셨나요?\",\n \"forgotPassword.success.title\": \"이메일 전송 완료!\",\n \"forgotPassword.success.subtitle\": \"받은 편지함을 확인하세요\",\n \"forgotPassword.success.description\": \"{{email}}에 해당하는 계정이 존재하면 비밀번호 재설정 링크가 전송됩니다.\",\n \"forgotPassword.success.checkSpam\": \"이메일이 보이지 않으면 스팸 폴더를 확인해주세요.\",\n \"forgotPassword.error.notEditable\": \"이 계정은 수정할 수 없습니다\",\n \"resetPassword.title\": \"비밀번호 재설정\",\n \"resetPassword.subtitle\": \"새 비밀번호를 입력하세요\",\n \"resetPassword.token.placeholder\": \"이메일로 받은 토큰을 입력하세요\",\n \"resetPassword.password.placeholder\": \"새 비밀번호를 입력하세요\",\n \"resetPassword.confirmPassword.placeholder\": \"새 비밀번호를 다시 입력하세요\",\n \"resetPassword.submit\": \"비밀번호 재설정\",\n \"resetPassword.submitting\": \"재설정 중...\",\n \"resetPassword.backToLogin\": \"로그인으로 돌아가기\",\n \"resetPassword.success.title\": \"비밀번호 재설정 완료!\",\n \"resetPassword.success.subtitle\": \"비밀번호가 성공적으로 변경되었습니다\",\n \"resetPassword.success.description\": \"새 비밀번호로 로그인할 수 있습니다.\",\n \"resetPassword.success.goToLogin\": \"로그인으로 이동\",\n \"resetPassword.error.invalidToken\": \"유효하지 않거나 만료된 토큰입니다\",\n \"resetPassword.error.notEditable\": \"이 계정은 수정할 수 없습니다\",\n \"consent.title\": \"권한 요청\",\n \"consent.subtitle\": \"{{app}}에서 계정에 대한 접근을 요청합니다\",\n \"consent.loggedInAs\": \"로그인 계정\",\n \"consent.permissions.title\": \"이 애플리케이션은 다음을 수행할 수 있습니다:\",\n \"consent.allow\": \"허용\",\n \"consent.deny\": \"거부\",\n \"consent.error.title\": \"오류\",\n \"consent.error.message\": \"권한 정보를 불러올 수 없습니다. 클라이언트가 유효하지 않을 수 있습니다.\",\n \"consent.error.back\": \"돌아가기\",\n \"consent.scope.openid\": \"고유 사용자 식별자에 접근\",\n \"consent.scope.profile\": \"프로필 정보에 접근\",\n \"consent.scope.email\": \"이메일 주소에 접근\",\n \"consent.scope.address\": \"주소 정보에 접근\",\n \"consent.scope.phone\": \"전화번호에 접근\",\n \"consent.scope.offline_access\": \"오프라인 접근 유지\",\n \"oauth.error.failed\": \"OAuth 로그인에 실패했습니다. 다시 시도해주세요.\",\n \"oauth.error.accessDenied\": \"사용자가 권한 요청을 거부했습니다.\",\n \"oauth.error.temporarilyUnavailable\": \"서비스가 일시적으로 이용 불가합니다. 잠시 후 다시 시도해주세요.\",\n \"oauth.error.serverError\": \"인증 서버에 오류가 발생했습니다. 잠시 후 다시 시도해주세요.\",\n \"oauth.error.registrationEmailNotAllowed\": \"이 이메일 주소로는 회원가입이 허용되지 않습니다.\",\n \"profile.linkedAccounts.title\": \"연결된 계정\",\n \"profile.linkedAccounts.description\": \"외부 서비스와 계정을 연결하세요\",\n \"profile.linkedAccounts.link\": \"연결\",\n \"profile.linkedAccounts.unlink\": \"연결 해제\",\n \"profile.linkedAccounts.unlinking\": \"연결 해제 중...\",\n \"profile.linkedAccounts.unlinkError\": \"연결을 해제할 수 없습니다. 최소 하나의 로그인 방법이 필요합니다.\",\n \"profile.linkedAccounts.unlinkModal.title\": \"계정 연결 해제\",\n \"profile.linkedAccounts.unlinkModal.description\": \"{{provider}} 계정 연결을 해제합니다.\",\n \"profile.linkedAccounts.unlinkModal.warning\": \"{{provider}}로 더 이상 로그인할 수 없게 됩니다. 다른 로그인 방법이 있는지 확인하세요.\",\n \"profile.linkedAccounts.unlinkModal.cancel\": \"취소\",\n \"profile.linkedAccounts.connected\": \"연결됨\",\n \"profile.linkedAccounts.notConnected\": \"연결되지 않음\",\n \"error.title\": \"오류\",\n \"error.subtitle\": \"문제가 발생했습니다\",\n \"error.defaultMessage\": \"예상치 못한 오류가 발생했습니다. 나중에 다시 시도해주세요.\",\n \"error.codeLabel\": \"오류 코드\",\n \"error.goToLogin\": \"로그인으로 이동\",\n \"error.goBack\": \"뒤로 가기\",\n \"error.footer.needHelp\": \"도움이 필요하신가요?\",\n \"error.footer.contactSupport\": \"지원팀 문의\",\n \"error.sessionExpired\": \"세션이 만료되었습니다. 다시 로그인해주세요.\",\n \"error.retry\": \"다시 시도\",\n \"profile.password.title\": \"비밀번호\",\n \"profile.password.status.set\": \"비밀번호가 설정되어 있습니다\",\n \"profile.password.status.notSet\": \"비밀번호가 설정되어 있지 않습니다\",\n \"profile.password.set\": \"비밀번호 설정\",\n \"profile.password.change\": \"비밀번호 변경\",\n \"profile.password.remove\": \"비밀번호 삭제\",\n \"profile.password.setModal.title\": \"비밀번호 설정\",\n \"profile.password.setModal.description\": \"이메일과 비밀번호로 로그인할 수 있도록 비밀번호를 설정하세요.\",\n \"profile.password.setModal.newPassword\": \"새 비밀번호\",\n \"profile.password.setModal.newPasswordPlaceholder\": \"새 비밀번호를 입력하세요\",\n \"profile.password.setModal.confirmPassword\": \"비밀번호 확인\",\n \"profile.password.setModal.confirmPasswordPlaceholder\": \"새 비밀번호를 다시 입력하세요\",\n \"profile.password.setModal.submit\": \"비밀번호 설정\",\n \"profile.password.setModal.submitting\": \"설정 중...\",\n \"profile.password.setModal.cancel\": \"취소\",\n \"profile.password.setModal.error\": \"비밀번호 설정에 실패했습니다\",\n \"profile.password.changeModal.title\": \"비밀번호 변경\",\n \"profile.password.changeModal.description\": \"현재 비밀번호를 확인한 후 새 비밀번호를 설정합니다.\",\n \"profile.password.changeModal.currentPassword\": \"현재 비밀번호\",\n \"profile.password.changeModal.currentPasswordPlaceholder\": \"현재 비밀번호를 입력하세요\",\n \"profile.password.changeModal.newPassword\": \"새 비밀번호\",\n \"profile.password.changeModal.newPasswordPlaceholder\": \"새 비밀번호를 입력하세요\",\n \"profile.password.changeModal.confirmPassword\": \"비밀번호 확인\",\n \"profile.password.changeModal.confirmPasswordPlaceholder\": \"새 비밀번호를 다시 입력하세요\",\n \"profile.password.changeModal.submit\": \"비밀번호 변경\",\n \"profile.password.changeModal.submitting\": \"변경 중...\",\n \"profile.password.changeModal.cancel\": \"취소\",\n \"profile.password.changeModal.error\": \"비밀번호 변경에 실패했습니다\",\n \"profile.password.changeModal.invalidCurrent\": \"현재 비밀번호가 올바르지 않습니다\",\n \"profile.password.removeModal.title\": \"비밀번호 삭제\",\n \"profile.password.removeModal.description\": \"비밀번호를 삭제하면 이메일과 비밀번호로 로그인할 수 없게 됩니다. 연결된 OAuth 계정으로만 로그인할 수 있습니다.\",\n \"profile.password.removeModal.currentPassword\": \"현재 비밀번호\",\n \"profile.password.removeModal.currentPasswordPlaceholder\": \"현재 비밀번호를 입력하세요\",\n \"profile.password.removeModal.submit\": \"비밀번호 삭제\",\n \"profile.password.removeModal.submitting\": \"삭제 중...\",\n \"profile.password.removeModal.cancel\": \"취소\",\n \"profile.password.removeModal.error\": \"비밀번호 삭제에 실패했습니다\",\n \"profile.password.removeModal.invalidCurrent\": \"현재 비밀번호가 올바르지 않습니다\",\n \"profile.password.removeModal.noOAuth\": \"최소 하나의 OAuth 계정이 연결되어 있어야 합니다\",\n \"profile.password.removeModal.noOAuthWith2FA\": \"2FA가 설정된 상태에서 비밀번호를 삭제할 수 없습니다. OAuth 계정을 먼저 연결하거나, 2FA를 비활성화한 후 비밀번호를 삭제하세요.\",\n \"profile.password.removeDisabledReason\": \"2FA가 설정된 경우 비밀번호를 삭제할 수 없습니다. OAuth 계정을 먼저 연결해주세요.\",\n \"profile.password.configManaged\": \"이 계정은 설정 파일로 관리되어 비밀번호를 변경할 수 없습니다\",\n \"profile.totp.title\": \"2단계 인증\",\n \"profile.totp.status.enabled\": \"2단계 인증이 활성화되어 있습니다\",\n \"profile.totp.status.recoveryCodesMissing\": \"복구 코드를 다시 생성해야 합니다\",\n \"profile.totp.status.disabled\": \"2단계 인증이 활성화되어 있지 않습니다\",\n \"profile.totp.enable\": \"활성화\",\n \"profile.totp.disable\": \"비활성화\",\n \"profile.totp.regenerate\": \"코드 재생성\",\n \"profile.totp.recoveryCodesMissing\": \"기존 복구 코드는 더 이상 유효하지 않습니다. 지금 새 복구 코드를 생성하고 안전한 곳에 보관하세요.\",\n \"profile.totp.setupModal.title\": \"2단계 인증 설정\",\n \"profile.totp.setupModal.requiredDescription\": \"계속하려면 2단계 인증(TOTP) 또는 패스키를 설정해야 합니다.\",\n \"profile.totp.setupModal.setupError\": \"설정을 시작하지 못했습니다. 다시 시도해주세요.\",\n \"profile.totp.setupModal.retry\": \"다시 시도\",\n \"profile.totp.setupModal.cancel\": \"취소\",\n \"profile.totp.setupModal.switchToPasskey\": \"패스키 사용하기\",\n \"profile.totp.disableModal.title\": \"2단계 인증 비활성화\",\n \"profile.totp.disableModal.description\": \"2단계 인증을 비활성화하려면 현재 인증 코드를 입력하세요.\",\n \"profile.totp.disableModal.warning\": \"2단계 인증을 비활성화하면 계정 보안이 약해집니다.\",\n \"profile.totp.disableModal.codeLabel\": \"인증 코드\",\n \"profile.totp.disableModal.cancel\": \"취소\",\n \"profile.totp.disableModal.disable\": \"비활성화\",\n \"profile.totp.disableModal.disabling\": \"비활성화 중...\",\n \"profile.totp.disableModal.error\": \"잘못된 코드입니다. 다시 시도해주세요.\",\n \"profile.totp.disableModal.cannotRemoveLastSecondFactor\": \"TOTP를 비활성화할 수 없습니다. 최소 하나의 2단계 인증 방법(TOTP 또는 패스키)이 필요합니다.\",\n \"profile.totp.regenerateModal.title\": \"복구 코드 재생성\",\n \"profile.totp.regenerateModal.description\": \"기존 복구 코드를 모두 교체하려면 현재 인증 코드를 입력하세요.\",\n \"profile.totp.regenerateModal.submit\": \"복구 코드 생성\",\n \"profile.totp.regenerateModal.submitting\": \"생성 중...\",\n \"profile.totp.regenerateModal.error\": \"잘못된 코드입니다. 다시 시도해주세요.\",\n \"profile.totp.regenerateModal.unexpectedError\": \"지금은 복구 코드를 다시 생성할 수 없습니다. 다시 시도해주세요.\",\n \"profile.totp.regenerateModal.recoveryTitle\": \"새 복구 코드\",\n \"profile.totp.regenerateModal.recoveryDescription\": \"이 코드는 한 번만 표시됩니다. 이 창을 닫기 전에 안전한 곳에 보관하세요.\",\n \"validation.totp.length\": \"코드는 6자리여야 합니다\",\n \"validation.totp.digits\": \"코드는 숫자만 포함해야 합니다\",\n \"validation.passkey.name.max\": \"패스키 이름은 100자 이하여야 합니다\",\n \"validation.passkey.name.required\": \"패스키 이름을 입력해주세요\",\n \"profile.passkey.title\": \"패스키\",\n \"profile.passkey.status.enabled\": \"{{count}}개의 패스키가 등록되어 있습니다\",\n \"profile.passkey.status.disabled\": \"등록된 패스키가 없습니다\",\n \"profile.passkey.add\": \"패스키 추가\",\n \"profile.passkey.manage\": \"관리\",\n \"profile.passkey.setupModal.title\": \"패스키 추가\",\n \"profile.passkey.setupModal.requiredDescription\": \"계속하려면 패스키 또는 2단계 인증(TOTP)을 설정해야 합니다.\",\n \"profile.passkey.setupModal.description\": \"패스키를 사용하면 지문, 얼굴 인식 또는 화면 잠금으로 안전하게 로그인할 수 있습니다.\",\n \"profile.passkey.setupModal.nameLabel\": \"패스키 이름 (선택)\",\n \"profile.passkey.setupModal.namePlaceholder\": \"예: MacBook Pro, iPhone\",\n \"profile.passkey.setupModal.nameHint\": \"나중에 식별할 수 있도록 패스키에 이름을 지정하세요\",\n \"profile.passkey.setupModal.continue\": \"계속\",\n \"profile.passkey.setupModal.cancel\": \"취소\",\n \"profile.passkey.setupModal.switchToTotp\": \"2단계 인증 사용하기\",\n \"profile.passkey.setupModal.waitingForDevice\": \"브라우저 또는 기기의 안내를 따르세요...\",\n \"profile.passkey.setupModal.error\": \"패스키 등록에 실패했습니다. 다시 시도해주세요.\",\n \"profile.passkey.setupModal.cancelled\": \"패스키 등록이 취소되었습니다.\",\n \"profile.passkey.manageModal.title\": \"패스키 관리\",\n \"profile.passkey.manageModal.noPasskeys\": \"등록된 패스키가 없습니다.\",\n \"profile.passkey.manageModal.close\": \"닫기\",\n \"profile.passkey.manageModal.addNew\": \"새 패스키 추가\",\n \"profile.passkey.manageModal.unnamedPasskey\": \"이름 없는 패스키\",\n \"profile.passkey.manageModal.createdAt\": \"{{date}}에 추가됨\",\n \"profile.passkey.manageModal.backedUp\": \"동기화됨\",\n \"profile.passkey.manageModal.rename\": \"이름 변경\",\n \"profile.passkey.manageModal.delete\": \"삭제\",\n \"profile.passkey.manageModal.deleteConfirmInline\": \"이 패스키를 삭제할까요?\",\n \"profile.passkey.manageModal.deleteError\": \"패스키를 삭제할 수 없습니다. 최소 하나의 로그인 방법이 필요합니다.\",\n \"profile.passkey.manageModal.cannotRemoveLastSecondFactor\": \"패스키를 삭제할 수 없습니다. 최소 하나의 2단계 인증 방법(TOTP 또는 패스키)이 필요합니다.\",\n \"profile.passkey.manageModal.namePlaceholder\": \"패스키 이름 입력\",\n \"profile.passkey.manageModal.cancelEdit\": \"취소\",\n \"profile.passkey.manageModal.save\": \"저장\",\n \"profile.passkey.manageModal.saving\": \"저장 중...\",\n \"profile.passkey.manageModal.renameError\": \"패스키 이름 변경에 실패했습니다. 다시 시도해주세요.\",\n \"profile.dangerZone.title\": \"위험 영역\",\n \"profile.dangerZone.description\": \"계정 삭제와 같은 되돌릴 수 없는 작업\",\n \"profile.deleteAccount.title\": \"계정 삭제\",\n \"profile.deleteAccount.description\": \"계정을 영구적으로 삭제합니다\",\n \"profile.deleteAccount.button\": \"계정 삭제\",\n \"profile.deleteAccount.modal.title\": \"정말 계정을 삭제하시겠습니까?\",\n \"profile.deleteAccount.modal.description\": \"이 작업은 되돌릴 수 없습니다. 모든 데이터가 {{days}}일 후에 영구적으로 삭제됩니다.\",\n \"profile.deleteAccount.modal.warning\": \"삭제 후에는 이 이메일로 다시 가입할 수 없습니다.\",\n \"profile.deleteAccount.modal.confirmLabel\": \"확인을 위해 \\\"삭제\\\"를 입력하세요\",\n \"profile.deleteAccount.modal.confirmPlaceholder\": \"삭제\",\n \"profile.deleteAccount.modal.confirm\": \"계정 삭제\",\n \"profile.deleteAccount.modal.confirming\": \"삭제 중...\",\n \"profile.deleteAccount.modal.cancel\": \"취소\",\n \"profile.deleteAccount.configManaged\": \"이 계정은 설정 파일로 관리되어 삭제할 수 없습니다\",\n \"profile.deleteAccount.error\": \"계정 삭제에 실패했습니다\",\n \"verifyTotp.title\": \"2단계 인증\",\n \"verifyTotp.subtitle\": \"인증 앱의 코드를 입력하세요\",\n \"verifyTotp.submit\": \"확인\",\n \"verifyTotp.submitting\": \"확인 중...\",\n \"verifyTotp.error.invalid\": \"잘못된 코드입니다. 다시 시도해주세요.\",\n \"verifyTotp.error.expired\": \"세션이 만료되었습니다. 다시 로그인해주세요.\",\n \"verifyTotp.redirecting\": \"{{seconds}}초 후 로그인 페이지로 이동합니다...\",\n \"verifyTotp.redirectNow\": \"지금 로그인 페이지로 이동\",\n \"verifyTotp.backToLogin\": \"로그인으로 돌아가기\",\n \"verifyTotp.useRecoveryCode\": \"복구 코드 사용\",\n \"verifyRecovery.title\": \"복구 코드\",\n \"verifyRecovery.subtitle\": \"복구 코드 중 하나를 입력하세요\",\n \"verifyRecovery.placeholder\": \"XXXX-XXXX-XXXX-XXXX\",\n \"verifyRecovery.submit\": \"확인\",\n \"verifyRecovery.submitting\": \"확인 중...\",\n \"verifyRecovery.error.invalid\": \"유효하지 않은 복구 코드입니다. 다시 시도해주세요.\",\n \"verifyRecovery.error.noCodesAvailable\": \"사용 가능한 복구 코드가 없습니다. 모든 코드가 사용되었습니다.\",\n \"verifyRecovery.error.expired\": \"세션이 만료되었습니다. 다시 로그인해주세요.\",\n \"verifyRecovery.backToTotp\": \"인증 앱으로 인증하기\",\n \"verifyRecovery.backToLogin\": \"로그인으로 돌아가기\",\n \"verifyRecovery.redirecting\": \"{{seconds}}초 후 로그인 페이지로 이동합니다...\",\n \"verifyRecovery.redirectNow\": \"지금 로그인 페이지로 이동\",\n \"setupTotp.title\": \"2단계 인증 설정\",\n \"setupTotp.subtitle\": \"계정에 추가 보안 계층을 추가하세요\",\n \"setupTotp.required\": \"계속하려면 2단계 인증이 필요합니다\",\n \"setupTotp.qrDescription\": \"인증 앱(Google Authenticator, Authy 등)으로 QR 코드를 스캔하세요\",\n \"setupTotp.manualEntry\": \"스캔할 수 없나요? 수동으로 코드를 입력하세요\",\n \"setupTotp.next\": \"다음\",\n \"setupTotp.back\": \"뒤로\",\n \"setupTotp.verify\": \"확인\",\n \"setupTotp.verifying\": \"확인 중...\",\n \"setupTotp.verifyTitle\": \"인증 코드 확인\",\n \"setupTotp.verifySubtitle\": \"인증 앱의 6자리 코드를 입력하세요\",\n \"setupTotp.error.invalid\": \"잘못된 코드입니다. 다시 시도해주세요.\",\n \"setupTotp.error.setupFailed\": \"설정을 시작하지 못했습니다. 다시 시도해주세요.\",\n \"setupTotp.error.expired\": \"세션이 만료되었습니다. 다시 로그인해주세요.\",\n \"setupTotp.error.alreadyEnabled\": \"2단계 인증이 이미 활성화되어 있습니다.\",\n \"setupTotp.redirecting\": \"{{seconds}}초 후 로그인 페이지로 이동합니다...\",\n \"setupTotp.redirectNow\": \"지금 로그인 페이지로 이동\",\n \"setupTotp.goToProfile\": \"프로필로 이동\",\n \"setupTotp.retry\": \"다시 시도\",\n \"setupTotp.backToLogin\": \"로그인으로 돌아가기\",\n \"setupTotp.recoveryCodes.title\": \"복구 코드를 저장하세요\",\n \"setupTotp.recoveryCodes.description\": \"인증 앱에 접근할 수 없게 된 경우, 이 일회용 복구 코드를 사용하여 로그인할 수 있습니다. 각 코드는 한 번만 사용할 수 있습니다.\",\n \"setupTotp.recoveryCodes.warning\": \"이 코드를 안전한 곳에 보관하세요. 다시 확인할 수 없습니다.\",\n \"setupTotp.recoveryCodes.copy\": \"모든 코드 복사\",\n \"setupTotp.recoveryCodes.copied\": \"복사되었습니다!\",\n \"setupTotp.recoveryCodes.confirmCheckbox\": \"복구 코드를 안전한 곳에 저장했습니다\",\n \"setupTotp.recoveryCodes.confirm\": \"설정 완료\",\n \"verifyPasskey.title\": \"패스키 인증\",\n \"verifyPasskey.subtitle\": \"패스키를 사용하여 로그인을 완료하세요\",\n \"verifyPasskey.waiting\": \"브라우저 또는 기기의 안내를 따르세요...\",\n \"verifyPasskey.retry\": \"다시 시도\",\n \"verifyPasskey.error.expired\": \"세션이 만료되었습니다. 다시 로그인해주세요.\",\n \"verifyPasskey.error.userMismatch\": \"이 패스키는 다른 계정에 등록되어 있습니다.\",\n \"verifyPasskey.error.failed\": \"패스키 인증에 실패했습니다. 다시 시도해주세요.\",\n \"verifyPasskey.backToLogin\": \"로그인으로 돌아가기\",\n \"verify2fa.title\": \"2단계 인증\",\n \"verify2fa.subtitle\": \"인증 방법을 선택하세요\",\n \"verify2fa.totp.title\": \"인증 앱\",\n \"verify2fa.totp.description\": \"앱의 6자리 코드 사용\",\n \"verify2fa.passkey.title\": \"패스키\",\n \"verify2fa.passkey.description\": \"지문, 얼굴 인식 또는 보안 키 사용\",\n \"verify2fa.backToLogin\": \"로그인으로 돌아가기\",\n \"setup2fa.title\": \"2단계 인증 설정\",\n \"setup2fa.subtitle\": \"원하는 2단계 인증 방법을 선택하세요\",\n \"setup2fa.required\": \"계속하려면 2단계 인증이 필요합니다\",\n \"setup2fa.totp.title\": \"인증 앱\",\n \"setup2fa.totp.description\": \"Google Authenticator, Authy 등 사용\",\n \"setup2fa.passkey.title\": \"패스키\",\n \"setup2fa.passkey.description\": \"지문, 얼굴 인식 또는 보안 키 사용\",\n \"setup2fa.backToLogin\": \"로그인으로 돌아가기\",\n \"setupPasskey.title\": \"패스키 설정\",\n \"setupPasskey.subtitle\": \"안전한 인증을 위해 패스키를 등록하세요\",\n \"setupPasskey.required\": \"계속하려면 2단계 인증이 필요합니다\",\n \"setupPasskey.description\": \"패스키를 사용하면 지문, 얼굴 인식 또는 화면 잠금으로 안전하게 로그인할 수 있습니다.\",\n \"setupPasskey.name.label\": \"패스키 이름 (선택)\",\n \"setupPasskey.name.placeholder\": \"예: MacBook Pro, iPhone\",\n \"setupPasskey.name.hint\": \"나중에 식별할 수 있도록 패스키에 이름을 지정하세요\",\n \"setupPasskey.continue\": \"계속\",\n \"setupPasskey.registering\": \"등록 중...\",\n \"setupPasskey.waiting\": \"브라우저 또는 기기의 안내를 따르세요...\",\n \"setupPasskey.retry\": \"다시 시도\",\n \"setupPasskey.error.failed\": \"패스키 등록에 실패했습니다. 다시 시도해주세요.\",\n \"setupPasskey.error.cancelled\": \"패스키 등록이 취소되었습니다.\",\n \"setupPasskey.backToLogin\": \"로그인으로 돌아가기\",\n \"terms.title\": \"약관 동의\",\n \"terms.required\": \"필수\",\n \"terms.optional\": \"선택\",\n \"terms.agreeAll\": \"전체 동의\",\n \"terms.agreeAllOptionalIncluded\": \"(선택 약관 포함)\",\n \"terms.versionUpdated\": \"약관이 변경되었습니다. 새 버전에 동의해주세요.\",\n \"terms.submit\": \"동의하고 계속하기\",\n \"terms.error.title\": \"오류\",\n \"terms.error.message\": \"약관 정보를 불러올 수 없습니다.\",\n \"terms.error.back\": \"돌아가기\",\n \"terms.error.submitFailed\": \"약관 동의 처리에 실패했습니다. 다시 시도해주세요.\",\n \"terms.view\": \"보기\",\n \"admin.users.includeDeleted\": \"삭제된 사용자 포함\",\n \"admin.users.search\": \"검색\",\n \"admin.users.actions\": \"작업\",\n \"admin.users.edit\": \"수정\",\n \"admin.users.delete\": \"삭제\",\n \"admin.users.editUser\": \"{{email}} 수정\",\n \"admin.users.deleteUser\": \"{{email}} 삭제\",\n \"admin.users.readonly\": \"읽기 전용\",\n \"admin.users.password\": \"비밀번호\",\n \"admin.users.editTitle\": \"사용자 수정\",\n \"admin.users.createSubmit\": \"생성\",\n \"admin.users.save\": \"변경 저장\",\n \"admin.users.cancel\": \"취소\",\n \"admin.users.deleteTitle\": \"{{email}} 삭제?\",\n \"admin.users.deleteDescription\": \"DB 관리 사용자를 soft-delete 처리하고 이후 로그인을 차단합니다.\",\n \"admin.users.deleteConfirm\": \"사용자 삭제\",\n \"admin.users.previous\": \"이전\",\n \"admin.users.next\": \"다음\",\n \"admin.users.page\": \"{{page}}페이지\",\n \"admin.users.filter.all\": \"전체\",\n \"admin.users.filter.database\": \"DB\",\n \"admin.users.filter.config\": \"Config\",\n \"admin.users.filter.admins\": \"관리자\",\n \"admin.users.clearFilters\": \"필터 초기화\",\n \"admin.users.pageSize\": \"행 수\",\n \"admin.users.showingRange\": \"{{total}}명 중 {{from}}–{{to}} 표시\",\n \"admin.users.emptyFiltered\": \"현재 필터와 일치하는 사용자가 없습니다.\",\n \"admin.users.createdNotice\": \"{{email}} 사용자를 생성했습니다.\",\n \"admin.users.updatedNotice\": \"{{email}} 사용자를 수정했습니다.\",\n \"admin.users.deletedNotice\": \"{{email}} 사용자를 삭제했습니다.\",\n \"admin.users.operationFailed\": \"작업에 실패했습니다. 값을 확인한 뒤 다시 시도하세요.\",\n \"admin.users.createHint\": \"DB 관리 사용자를 생성합니다. Config 사용자는 계속 읽기 전용입니다.\",\n \"admin.users.editHint\": \"DB 관리 사용자의 계정 메타데이터를 수정합니다.\",\n \"admin.users.deleteWarning\": \"파괴적인 관리자 작업입니다.\",\n \"common.on\": \"켜짐\",\n \"admin.nav.open\": \"관리자 탐색 열기\",\n \"admin.nav.close\": \"관리자 탐색 닫기\",\n \"admin.breadcrumbLabel\": \"관리자 경로\",\n \"admin.console\": \"관리자 콘솔\",\n \"admin.livePolicy\": \"실시간 정책\",\n \"admin.roleBadge\": \"역할: {{role}}\",\n \"admin.metrics.totalUsersHint\": \"관리 ID\",\n \"admin.metrics.adminsHint\": \"권한 계정\",\n \"admin.metrics.databaseUsersHint\": \"수정 가능 레코드\",\n \"admin.identityGraph\": \"ID 그래프\",\n \"admin.policy.description\": \"config 소스는 실수로 수정되지 않도록 보호됩니다.\",\n \"admin.users.verifiedLabel\": \"검증:\",\n \"admin.users.directoryEyebrow\": \"디렉터리\",\n \"admin.users.queryChip\": \"검색: {{query}}\",\n \"admin.users.currentPage\": \"현재 페이지\",\n \"admin.disabled\": \"관리자 콘솔이 비활성화됨\",\n \"admin.disabledDescription\": \"이 배포에서는 관리자 콘솔이 비활성화되어 있습니다.\",\n \"admin.users.secondFactorTotp\": \"TOTP\",\n \"admin.users.secondFactorPasskey\": \"패스키 {{count}}개\",\n \"admin.users.roleUser\": \"사용자\",\n \"admin.users.roleAdmin\": \"관리자\",\n \"admin.users.secondFactorPasskeys\": \"패스키 {{count}}개\",\n \"common.close\": \"닫기\",\n \"admin.mobileTitle\": \"TinyAuth 관리자\",\n \"admin.users.sourceDatabase\": \"데이터베이스\",\n \"admin.users.sourceConfig\": \"설정\",\n \"admin.users.activeOnPage\": \"현재 페이지 활성\",\n \"admin.users.configOnPage\": \"현재 페이지 설정 사용자\",\n \"admin.users.databaseOnPage\": \"현재 페이지 DB 사용자\"\n}\n","import i18n from 'i18next';\nimport { initReactI18next } from 'react-i18next';\nimport en from './locales/en.json';\nimport ja from './locales/ja.json';\nimport ko from './locales/ko.json';\n\nexport const LANGUAGE_STORAGE_KEY = 'tinyauth-language';\n\n// All available translations with labels (static)\nconst ALL_TRANSLATIONS = {\n ko: { translation: ko, label: '한국어' },\n en: { translation: en, label: 'English' },\n ja: { translation: ja, label: '日本語' },\n} as const;\n\nexport type AvailableLanguage = keyof typeof ALL_TRANSLATIONS;\n\n/**\n * Language display labels for UI\n */\nexport const LANGUAGE_LABELS: Record<AvailableLanguage, string> = {\n ko: ALL_TRANSLATIONS.ko.label,\n en: ALL_TRANSLATIONS.en.label,\n ja: ALL_TRANSLATIONS.ja.label,\n};\n\n/**\n * Check if a language code is available in translations\n */\nfunction isAvailableLanguage(lang: string): lang is AvailableLanguage {\n return lang in ALL_TRANSLATIONS;\n}\n\n/**\n * Filter supported languages to only those with available translations\n */\nexport function getAvailableLanguages(\n supportedLanguages: string[],\n): AvailableLanguage[] {\n return supportedLanguages.filter(isAvailableLanguage);\n}\n\n/**\n * Detect browser language and return if available, otherwise fallback\n */\nexport function detectBrowserLanguage(\n availableLanguages: AvailableLanguage[],\n fallbackLanguage: string,\n): AvailableLanguage {\n const browserLang = navigator.language.split('-')[0];\n if (\n browserLang &&\n isAvailableLanguage(browserLang) &&\n availableLanguages.includes(browserLang)\n ) {\n return browserLang;\n }\n return isAvailableLanguage(fallbackLanguage) ? fallbackLanguage : 'en';\n}\n\n/**\n * Get initial language based on priority:\n * 1. localStorage saved preference (if still supported)\n * 2. default_language from config (if 'auto', detect from browser)\n * 3. fallback_language from config\n */\nfunction getInitialLanguage(\n availableLanguages: AvailableLanguage[],\n defaultLanguage: string,\n fallbackLanguage: string,\n): string {\n // 1. Check localStorage\n const stored = localStorage.getItem(LANGUAGE_STORAGE_KEY);\n if (\n stored &&\n isAvailableLanguage(stored) &&\n availableLanguages.includes(stored)\n ) {\n return stored;\n }\n\n // 2. Use default_language (or detect if 'auto')\n if (defaultLanguage === 'auto') {\n return detectBrowserLanguage(availableLanguages, fallbackLanguage);\n }\n\n if (\n isAvailableLanguage(defaultLanguage) &&\n availableLanguages.includes(defaultLanguage)\n ) {\n return defaultLanguage;\n }\n\n // 3. Fallback\n return fallbackLanguage;\n}\n\n/**\n * Initialize i18n with server config.\n * Call this after loading app config from backend.\n */\nexport function initI18n(config: {\n supportedLanguages: string[];\n defaultLanguage: string;\n fallbackLanguage: string;\n}) {\n const { supportedLanguages, defaultLanguage, fallbackLanguage } = config;\n\n // Filter to only languages we have translations for\n const availableLanguages = getAvailableLanguages(supportedLanguages);\n\n // Build resources for only supported languages\n const resources: Record<string, { translation: typeof ko }> = {};\n for (const lang of availableLanguages) {\n resources[lang] = { translation: ALL_TRANSLATIONS[lang].translation };\n }\n\n // Ensure fallback language is available\n const safeFallback = isAvailableLanguage(fallbackLanguage)\n ? fallbackLanguage\n : 'en';\n\n // Always include fallback language in resources\n if (!resources[safeFallback]) {\n resources[safeFallback] = {\n translation: ALL_TRANSLATIONS[safeFallback].translation,\n };\n }\n\n const initialLanguage = getInitialLanguage(\n availableLanguages,\n defaultLanguage,\n safeFallback,\n );\n\n i18n.use(initReactI18next).init({\n resources,\n lng: initialLanguage,\n fallbackLng: safeFallback,\n supportedLngs: availableLanguages,\n interpolation: {\n escapeValue: false, // React handles XSS protection\n },\n react: {\n useSuspense: false, // Already using Suspense at app level\n },\n });\n\n return i18n;\n}\n\nexport default i18n;\n","// src/utils/cookie.ts\nimport { decodeURIComponent_, tryDecode } from \"./url.js\";\nvar algorithm = { name: \"HMAC\", hash: \"SHA-256\" };\nvar getCryptoKey = async (secret) => {\n const secretBuf = typeof secret === \"string\" ? new TextEncoder().encode(secret) : secret;\n return await crypto.subtle.importKey(\"raw\", secretBuf, algorithm, false, [\"sign\", \"verify\"]);\n};\nvar makeSignature = async (value, secret) => {\n const key = await getCryptoKey(secret);\n const signature = await crypto.subtle.sign(algorithm.name, key, new TextEncoder().encode(value));\n return btoa(String.fromCharCode(...new Uint8Array(signature)));\n};\nvar verifySignature = async (base64Signature, value, secret) => {\n try {\n const signatureBinStr = atob(base64Signature);\n const signature = new Uint8Array(signatureBinStr.length);\n for (let i = 0, len = signatureBinStr.length; i < len; i++) {\n signature[i] = signatureBinStr.charCodeAt(i);\n }\n return await crypto.subtle.verify(algorithm, secret, signature, new TextEncoder().encode(value));\n } catch {\n return false;\n }\n};\nvar validCookieNameRegEx = /^[\\w!#$%&'*.^`|~+-]+$/;\nvar validCookieValueRegEx = /^[ !#-:<-[\\]-~]*$/;\nvar trimCookieWhitespace = (value) => {\n let start = 0;\n let end = value.length;\n while (start < end) {\n const charCode = value.charCodeAt(start);\n if (charCode !== 32 && charCode !== 9) {\n break;\n }\n start++;\n }\n while (end > start) {\n const charCode = value.charCodeAt(end - 1);\n if (charCode !== 32 && charCode !== 9) {\n break;\n }\n end--;\n }\n return start === 0 && end === value.length ? value : value.slice(start, end);\n};\nvar parse = (cookie, name) => {\n if (name && cookie.indexOf(name) === -1) {\n return {};\n }\n const pairs = cookie.split(\";\");\n const parsedCookie = /* @__PURE__ */ Object.create(null);\n for (const pairStr of pairs) {\n const valueStartPos = pairStr.indexOf(\"=\");\n if (valueStartPos === -1) {\n continue;\n }\n const cookieName = trimCookieWhitespace(pairStr.substring(0, valueStartPos));\n if (name && name !== cookieName || !validCookieNameRegEx.test(cookieName) || cookieName in parsedCookie) {\n continue;\n }\n let cookieValue = trimCookieWhitespace(pairStr.substring(valueStartPos + 1));\n if (cookieValue.startsWith('\"') && cookieValue.endsWith('\"')) {\n cookieValue = cookieValue.slice(1, -1);\n }\n if (validCookieValueRegEx.test(cookieValue)) {\n parsedCookie[cookieName] = cookieValue.indexOf(\"%\") !== -1 ? tryDecode(cookieValue, decodeURIComponent_) : cookieValue;\n if (name) {\n break;\n }\n }\n }\n return parsedCookie;\n};\nvar parseSigned = async (cookie, secret, name) => {\n const parsedCookie = /* @__PURE__ */ Object.create(null);\n const secretKey = await getCryptoKey(secret);\n for (const [key, value] of Object.entries(parse(cookie, name))) {\n const signatureStartPos = value.lastIndexOf(\".\");\n if (signatureStartPos < 1) {\n continue;\n }\n const signedValue = value.substring(0, signatureStartPos);\n const signature = value.substring(signatureStartPos + 1);\n if (signature.length !== 44 || !signature.endsWith(\"=\")) {\n continue;\n }\n const isVerified = await verifySignature(signature, signedValue, secretKey);\n parsedCookie[key] = isVerified ? signedValue : false;\n }\n return parsedCookie;\n};\nvar _serialize = (name, value, opt = {}) => {\n if (!validCookieNameRegEx.test(name)) {\n throw new Error(\"Invalid cookie name\");\n }\n let cookie = `${name}=${value}`;\n if (name.startsWith(\"__Secure-\") && !opt.secure) {\n throw new Error(\"__Secure- Cookie must have Secure attributes\");\n }\n if (name.startsWith(\"__Host-\")) {\n if (!opt.secure) {\n throw new Error(\"__Host- Cookie must have Secure attributes\");\n }\n if (opt.path !== \"/\") {\n throw new Error('__Host- Cookie must have Path attributes with \"/\"');\n }\n if (opt.domain) {\n throw new Error(\"__Host- Cookie must not have Domain attributes\");\n }\n }\n for (const key of [\"domain\", \"path\", \"sameSite\", \"priority\"]) {\n if (opt[key] && /[;\\r\\n]/.test(opt[key])) {\n throw new Error(`${key} must not contain \";\", \"\\\\r\", or \"\\\\n\"`);\n }\n }\n if (opt && typeof opt.maxAge === \"number\" && opt.maxAge >= 0) {\n if (opt.maxAge > 3456e4) {\n throw new Error(\n \"Cookies Max-Age SHOULD NOT be greater than 400 days (34560000 seconds) in duration.\"\n );\n }\n cookie += `; Max-Age=${opt.maxAge | 0}`;\n }\n if (opt.domain && opt.prefix !== \"host\") {\n cookie += `; Domain=${opt.domain}`;\n }\n if (opt.path) {\n cookie += `; Path=${opt.path}`;\n }\n if (opt.expires) {\n if (opt.expires.getTime() - Date.now() > 3456e7) {\n throw new Error(\n \"Cookies Expires SHOULD NOT be greater than 400 days (34560000 seconds) in the future.\"\n );\n }\n cookie += `; Expires=${opt.expires.toUTCString()}`;\n }\n if (opt.httpOnly) {\n cookie += \"; HttpOnly\";\n }\n if (opt.secure) {\n cookie += \"; Secure\";\n }\n if (opt.sameSite) {\n cookie += `; SameSite=${opt.sameSite.charAt(0).toUpperCase() + opt.sameSite.slice(1)}`;\n }\n if (opt.priority) {\n cookie += `; Priority=${opt.priority.charAt(0).toUpperCase() + opt.priority.slice(1)}`;\n }\n if (opt.partitioned) {\n if (!opt.secure) {\n throw new Error(\"Partitioned Cookie must have Secure attributes\");\n }\n cookie += \"; Partitioned\";\n }\n return cookie;\n};\nvar serialize = (name, value, opt) => {\n value = encodeURIComponent(value);\n return _serialize(name, value, opt);\n};\nvar serializeSigned = async (name, value, secret, opt = {}) => {\n const signature = await makeSignature(value, secret);\n value = `${value}.${signature}`;\n value = encodeURIComponent(value);\n return _serialize(name, value, opt);\n};\nexport {\n parse,\n parseSigned,\n serialize,\n serializeSigned\n};\n","// src/client/utils.ts\nimport { fetchRP, DetailedError } from \"./fetch-result-please.js\";\nvar mergePath = (base, path) => {\n base = base.replace(/\\/+$/, \"\");\n base = base + \"/\";\n path = path.replace(/^\\/+/, \"\");\n return base + path;\n};\nvar replaceUrlParam = (urlString, params) => {\n for (const [k, v] of Object.entries(params)) {\n const reg = new RegExp(\"/:\" + k + \"(?:{[^/]+})?\\\\??\");\n urlString = urlString.replace(reg, v ? `/${v}` : \"\");\n }\n return urlString;\n};\nvar buildSearchParams = (query) => {\n const searchParams = new URLSearchParams();\n for (const [k, v] of Object.entries(query)) {\n if (v === void 0) {\n continue;\n }\n if (Array.isArray(v)) {\n for (const v2 of v) {\n searchParams.append(k, v2);\n }\n } else {\n searchParams.set(k, v);\n }\n }\n return searchParams;\n};\nvar replaceUrlProtocol = (urlString, protocol) => {\n switch (protocol) {\n case \"ws\":\n return urlString.replace(/^http/, \"ws\");\n case \"http\":\n return urlString.replace(/^ws/, \"http\");\n }\n};\nvar removeIndexString = (urlString) => {\n if (/^https?:\\/\\/[^\\/]+?\\/index(?=\\?|$)/.test(urlString)) {\n return urlString.replace(/\\/index(?=\\?|$)/, \"/\");\n }\n return urlString.replace(/\\/index(?=\\?|$)/, \"\");\n};\nfunction isObject(item) {\n return typeof item === \"object\" && item !== null && !Array.isArray(item);\n}\nfunction deepMerge(target, source) {\n if (!isObject(target) && !isObject(source)) {\n return source;\n }\n const merged = { ...target };\n for (const key in source) {\n const value = source[key];\n if (isObject(merged[key]) && isObject(value)) {\n merged[key] = deepMerge(merged[key], value);\n } else {\n merged[key] = value;\n }\n }\n return merged;\n}\nasync function parseResponse(fetchRes) {\n return fetchRP(fetchRes);\n}\nexport {\n DetailedError,\n buildSearchParams,\n deepMerge,\n mergePath,\n parseResponse,\n removeIndexString,\n replaceUrlParam,\n replaceUrlProtocol\n};\n","// src/client/client.ts\nimport { serialize } from \"../utils/cookie.js\";\nimport {\n buildSearchParams,\n deepMerge,\n mergePath,\n removeIndexString,\n replaceUrlParam,\n replaceUrlProtocol\n} from \"./utils.js\";\nvar createProxy = (callback, path) => {\n const proxy = new Proxy(() => {\n }, {\n get(_obj, key) {\n if (typeof key !== \"string\" || key === \"then\") {\n return void 0;\n }\n return createProxy(callback, [...path, key]);\n },\n apply(_1, _2, args) {\n return callback({\n path,\n args\n });\n }\n });\n return proxy;\n};\nvar ClientRequestImpl = class {\n url;\n method;\n buildSearchParams;\n queryParams = void 0;\n pathParams = {};\n rBody;\n cType = void 0;\n constructor(url, method, options) {\n this.url = url;\n this.method = method;\n this.buildSearchParams = options.buildSearchParams;\n }\n fetch = async (args, opt) => {\n if (args) {\n if (args.query) {\n this.queryParams = this.buildSearchParams(args.query);\n }\n if (args.form) {\n const form = new FormData();\n for (const [k, v] of Object.entries(args.form)) {\n if (v === void 0) {\n continue;\n }\n if (Array.isArray(v)) {\n for (const v2 of v) {\n form.append(k, v2);\n }\n } else {\n form.append(k, v);\n }\n }\n this.rBody = form;\n }\n if (args.json) {\n this.rBody = JSON.stringify(args.json);\n this.cType = \"application/json\";\n }\n if (args.param) {\n this.pathParams = args.param;\n }\n }\n let methodUpperCase = this.method.toUpperCase();\n const headerValues = {\n ...args?.header,\n ...typeof opt?.headers === \"function\" ? await opt.headers() : opt?.headers\n };\n if (args?.cookie) {\n const cookies = [];\n for (const [key, value] of Object.entries(args.cookie)) {\n cookies.push(serialize(key, value, { path: \"/\" }));\n }\n headerValues[\"Cookie\"] = cookies.join(\",\");\n }\n if (this.cType) {\n headerValues[\"Content-Type\"] = this.cType;\n }\n const headers = new Headers(headerValues ?? void 0);\n let url = this.url;\n url = removeIndexString(url);\n url = replaceUrlParam(url, this.pathParams);\n if (this.queryParams) {\n url = url + \"?\" + this.queryParams.toString();\n }\n methodUpperCase = this.method.toUpperCase();\n const setBody = !(methodUpperCase === \"GET\" || methodUpperCase === \"HEAD\");\n return (opt?.fetch || fetch)(url, {\n body: setBody ? this.rBody : void 0,\n method: methodUpperCase,\n headers,\n ...opt?.init\n });\n };\n};\nvar hc = (baseUrl, options) => createProxy(function proxyCallback(opts) {\n const buildSearchParamsOption = options?.buildSearchParams ?? buildSearchParams;\n const parts = [...opts.path];\n const lastParts = parts.slice(-3).reverse();\n if (lastParts[0] === \"toString\") {\n if (lastParts[1] === \"name\") {\n return lastParts[2] || \"\";\n }\n return proxyCallback.toString();\n }\n if (lastParts[0] === \"valueOf\") {\n if (lastParts[1] === \"name\") {\n return lastParts[2] || \"\";\n }\n return proxyCallback;\n }\n let method = \"\";\n if (/^\\$/.test(lastParts[0])) {\n const last = parts.pop();\n if (last) {\n method = last.replace(/^\\$/, \"\");\n }\n }\n const path = parts.join(\"/\");\n const url = mergePath(baseUrl, path);\n if (method === \"url\" || method === \"path\") {\n let result = url;\n if (opts.args[0]) {\n if (opts.args[0].param) {\n result = replaceUrlParam(url, opts.args[0].param);\n }\n if (opts.args[0].query) {\n result = result + \"?\" + buildSearchParamsOption(opts.args[0].query).toString();\n }\n }\n result = removeIndexString(result);\n if (method === \"url\") {\n return new URL(result);\n }\n return result.slice(baseUrl.replace(/\\/+$/, \"\").length).replace(/^\\/?/, \"/\");\n }\n if (method === \"ws\") {\n const webSocketUrl = replaceUrlProtocol(\n opts.args[0] && opts.args[0].param ? replaceUrlParam(url, opts.args[0].param) : url,\n \"ws\"\n );\n const targetUrl = new URL(webSocketUrl);\n const queryParams = opts.args[0]?.query;\n if (queryParams) {\n Object.entries(queryParams).forEach(([key, value]) => {\n if (Array.isArray(value)) {\n value.forEach((item) => targetUrl.searchParams.append(key, item));\n } else {\n targetUrl.searchParams.set(key, value);\n }\n });\n }\n const establishWebSocket = (...args) => {\n if (options?.webSocket !== void 0 && typeof options.webSocket === \"function\") {\n return options.webSocket(...args);\n }\n return new WebSocket(...args);\n };\n return establishWebSocket(targetUrl.toString());\n }\n const req = new ClientRequestImpl(url, method, {\n buildSearchParams: buildSearchParamsOption\n });\n if (method) {\n options ??= {};\n const args = deepMerge(options, { ...opts.args[1] });\n return req.fetch(opts.args[0], args);\n }\n return req;\n}, []);\nexport {\n hc\n};\n","import type { AppType } from '@tinyrack/tinyauth-server';\nimport type { ClientResponse } from 'hono/client';\nimport { hc } from 'hono/client';\nimport type { StatusCode, SuccessStatusCode } from 'hono/utils/http-status';\nimport i18n from '#frontend/i18n/index.ts';\nimport { TinyAuthError } from './error';\n\n/**\n * Custom fetch that adds Accept-Language header\n * and converts error responses to TinyAuthError.\n *\n * This replaces the old `etch()` wrapper, preserving\n * the same behavior within the Hono RPC client.\n */\nconst customFetch: typeof fetch = async (input, init) => {\n const headers = new Headers(init?.headers);\n\n if (!headers.has('Accept-Language')) {\n headers.set('Accept-Language', i18n.language);\n }\n\n const res = await fetch(input, { ...init, headers });\n\n if (!res.ok) {\n throw await TinyAuthError.fromResponse(res);\n }\n\n return res;\n};\n\n/**\n * Type-safe Hono RPC client.\n *\n * Uses the backend's route types for full\n * request/response type inference.\n * All API calls should use this client instead of\n * raw fetch or the old etch() wrapper.\n */\nexport const client = hc<AppType>('/', {\n fetch: customFetch,\n});\n\n/**\n * Extract the success (2xx) response body type from a\n * ClientResponse union.\n *\n * Since our custom fetch throws on non-ok responses,\n * `res.json()` will only ever return the success body.\n * This helper narrows the union so callers don't need\n * manual type assertions.\n */\ntype ExtractSuccessBody<T> =\n T extends ClientResponse<infer B, infer S, 'json'>\n ? S extends SuccessStatusCode\n ? B\n : never\n : never;\n\n/**\n * Narrow a Hono ClientResponse to its success body type.\n *\n * Because our custom fetch already throws `TinyAuthError` for\n * non-2xx responses, this is a safe cast that eliminates\n * error response types from the union.\n */\nexport async function jsonOk<\n T extends ClientResponse<unknown, StatusCode, 'json'>,\n>(res: T): Promise<ExtractSuccessBody<T>> {\n return (await res.json()) as ExtractSuccessBody<T>;\n}\n","/**\n * Query Key 팩토리\n *\n * 모든 Query Key를 중앙에서 관리하여 일관성과 타입 안전성을 보장합니다.\n * 각 키는 API 경로를 기반으로 정의됩니다.\n */\nexport const queryKeys = {\n // 세션\n session: () => ['/api/user/session'] as const,\n\n // Account selection\n accounts: (clientId?: string) => ['/api/auth/accounts', clientId] as const,\n\n // 앱 설정\n config: () => ['/api/config'] as const,\n\n // OAuth\n oauth: {\n accounts: () => ['/api/user/oauth-accounts'] as const,\n },\n\n // 동의 (Consent)\n consent: (clientId: string, scope?: string) =>\n ['/api/consent', clientId, scope] as const,\n\n // Passkeys\n passkeys: () => ['/api/user/passkeys'] as const,\n\n // Terms\n terms: (lang?: string) => ['/api/terms', lang] as const,\n} as const;\n","import { queryOptions } from '@tanstack/react-query';\nimport type { InferResponseType } from 'hono/client';\nimport { client, jsonOk } from '#frontend/libs/api.ts';\nimport type { SecondFactorMethod } from '#frontend/libs/oauth-search.ts';\nimport { queryKeys } from './keys';\n\nexport type AppConfigs = InferResponseType<\n (typeof client.api.config)['$get'],\n 200\n>;\n\nexport type Theme = AppConfigs['branding']['light_theme'];\nexport type ThemeMode = AppConfigs['branding']['theme_mode'];\nexport type OAuthAuthenticationMethod =\n AppConfigs['identity_providers'][number];\nexport type OAuthProviderType = OAuthAuthenticationMethod['type'];\n\nexport const appConfigQueryOptions = queryOptions({\n queryKey: queryKeys.config(),\n queryFn: async () => {\n const response = await client.api.config.$get();\n return jsonOk(response);\n },\n select: (data) => {\n return {\n ...data,\n available_2fa_setup_methods: (() => {\n const methods: SecondFactorMethod[] = [];\n if (data.auth.password.totp.enabled) {\n methods.push('totp');\n }\n if (data.auth.passkey.enabled) {\n methods.push('passkey');\n }\n return methods;\n })(),\n };\n },\n staleTime: 1000 * 60,\n});\n","import { useSuspenseQuery } from '@tanstack/react-query';\nimport { useCallback, useEffect, useMemo, useSyncExternalStore } from 'react';\nimport {\n appConfigQueryOptions,\n type Theme,\n type ThemeMode,\n} from '#frontend/queries/config.ts';\n\nconst THEME_MODE_STORAGE_KEY = 'tinyauth-theme-mode';\n\n/**\n * Get the system's preferred color scheme\n */\nfunction getSystemThemePreference(): 'light' | 'dark' {\n if (typeof window === 'undefined') return 'light';\n return window.matchMedia('(prefers-color-scheme: dark)').matches\n ? 'dark'\n : 'light';\n}\n\n/**\n * Get the stored theme mode from localStorage\n */\nfunction getStoredThemeMode(): ThemeMode | null {\n if (typeof window === 'undefined') return null;\n const stored = localStorage.getItem(THEME_MODE_STORAGE_KEY);\n if (stored === 'light' || stored === 'dark' || stored === 'system') {\n return stored;\n }\n return null;\n}\n\n/**\n * Apply theme to the document\n */\nfunction applyTheme(theme: Theme) {\n document.documentElement.setAttribute('data-theme', theme);\n}\n\n/**\n * Resolve the actual theme based on mode and server config\n */\nfunction resolveTheme(\n mode: ThemeMode,\n lightTheme: Theme,\n darkTheme: Theme,\n): Theme {\n if (mode === 'system') {\n const systemPreference = getSystemThemePreference();\n return systemPreference === 'dark' ? darkTheme : lightTheme;\n }\n return mode === 'dark' ? darkTheme : lightTheme;\n}\n\n// Custom event for theme mode changes\nconst THEME_MODE_CHANGE_EVENT = 'tinyauth-theme-mode-change';\n\nfunction subscribeToThemeModeChanges(callback: () => void): () => void {\n window.addEventListener(THEME_MODE_CHANGE_EVENT, callback);\n window.addEventListener('storage', callback);\n return () => {\n window.removeEventListener(THEME_MODE_CHANGE_EVENT, callback);\n window.removeEventListener('storage', callback);\n };\n}\n\nfunction getThemeModeSnapshot(): ThemeMode | null {\n return getStoredThemeMode();\n}\n\nfunction getServerThemeModeSnapshot(): ThemeMode | null {\n return null;\n}\n\nexport function useTheme() {\n const { data: config } = useSuspenseQuery(appConfigQueryOptions);\n\n // Get server defaults\n const serverLightTheme = config.branding.light_theme;\n const serverDarkTheme = config.branding.dark_theme;\n const serverThemeMode = config.branding.theme_mode;\n\n // Theme toggle is only allowed when server theme_mode is 'system'\n const canToggleTheme = serverThemeMode === 'system';\n\n // Subscribe to theme mode changes from localStorage\n const storedThemeMode = useSyncExternalStore(\n subscribeToThemeModeChanges,\n getThemeModeSnapshot,\n getServerThemeModeSnapshot,\n );\n\n // Determine current theme mode\n // If server mode is not 'system', always use server mode (user cannot override)\n // If server mode is 'system', user preference takes priority\n const themeMode = useMemo<ThemeMode>(() => {\n if (!canToggleTheme) {\n return serverThemeMode;\n }\n return storedThemeMode ?? serverThemeMode;\n }, [canToggleTheme, storedThemeMode, serverThemeMode]);\n\n // Resolve actual theme from mode\n const currentTheme = useMemo<Theme>(() => {\n return resolveTheme(themeMode, serverLightTheme, serverDarkTheme);\n }, [themeMode, serverLightTheme, serverDarkTheme]);\n\n // Apply theme to document\n useEffect(() => {\n applyTheme(currentTheme);\n }, [currentTheme]);\n\n // Listen for system theme changes when mode is 'system'\n useEffect(() => {\n if (themeMode !== 'system') return;\n\n const mediaQuery = window.matchMedia('(prefers-color-scheme: dark)');\n const handleChange = () => {\n const newTheme = resolveTheme(\n 'system',\n serverLightTheme,\n serverDarkTheme,\n );\n applyTheme(newTheme);\n };\n\n mediaQuery.addEventListener('change', handleChange);\n return () => mediaQuery.removeEventListener('change', handleChange);\n }, [themeMode, serverLightTheme, serverDarkTheme]);\n\n const cycleThemeMode = useCallback(() => {\n // Only allow cycling if server allows it\n if (!canToggleTheme) return;\n\n const currentMode = storedThemeMode ?? 'system';\n // Cycle: system -> light -> dark -> system\n let nextMode: ThemeMode;\n if (currentMode === 'system') {\n nextMode = 'light';\n } else if (currentMode === 'light') {\n nextMode = 'dark';\n } else {\n nextMode = 'system';\n }\n\n if (nextMode === 'system') {\n localStorage.removeItem(THEME_MODE_STORAGE_KEY);\n } else {\n localStorage.setItem(THEME_MODE_STORAGE_KEY, nextMode);\n }\n window.dispatchEvent(new CustomEvent(THEME_MODE_CHANGE_EVENT));\n }, [canToggleTheme, storedThemeMode]);\n\n // Check if user is in auto mode (no localStorage preference)\n const isAutoMode = storedThemeMode === null;\n\n // Detected theme when in system mode\n const detectedTheme = useMemo(() => {\n const systemPref = getSystemThemePreference();\n return systemPref === 'dark' ? serverDarkTheme : serverLightTheme;\n }, [serverDarkTheme, serverLightTheme]);\n\n return {\n themeMode,\n darkTheme: serverDarkTheme,\n canToggleTheme,\n cycleThemeMode,\n isAutoMode,\n detectedTheme,\n };\n}\n"],"x_google_ignoreList":[0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24,25,26,27,28,29,30,31,32,33,34,35,36,37,42,43,44],"mappings":"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"}
|